aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2024-07-10 10:53:05 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2024-07-22 19:19:44 +0200
commit9eb7fad3546a89ee7cf0e90f5b1daccf89725cea (patch)
tree4ffdf168c0322469c7824739a2495a4d41526d18
parentf0ccf770789e48b7a73497b465fdc892d28c1339 (diff)
downloadqemu-9eb7fad3546a89ee7cf0e90f5b1daccf89725cea.zip
qemu-9eb7fad3546a89ee7cf0e90f5b1daccf89725cea.tar.gz
qemu-9eb7fad3546a89ee7cf0e90f5b1daccf89725cea.tar.bz2
hpet: ignore high bits of comparator in 32-bit mode
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-rw-r--r--hw/timer/hpet.c4
-rw-r--r--hw/timer/trace-events1
2 files changed, 5 insertions, 0 deletions
diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c
index 58073df..bbb1e5f 100644
--- a/hw/timer/hpet.c
+++ b/hw/timer/hpet.c
@@ -585,6 +585,10 @@ static void hpet_ram_write(void *opaque, hwaddr addr,
}
break;
case HPET_TN_CMP + 4: // comparator register high order
+ if (timer->config & HPET_TN_32BIT) {
+ trace_hpet_ram_write_invalid_tn_cmp();
+ break;
+ }
trace_hpet_ram_write_tn_cmp(4);
if (!timer_is_periodic(timer)
|| (timer->config & HPET_TN_SETVAL)) {
diff --git a/hw/timer/trace-events b/hw/timer/trace-events
index de769f4..a5fafbc 100644
--- a/hw/timer/trace-events
+++ b/hw/timer/trace-events
@@ -111,6 +111,7 @@ hpet_ram_write_timer_id(uint64_t timer_id) "hpet_ram_writel timer_id = 0x%" PRIx
hpet_ram_write_tn_cfg(void) "hpet_ram_writel HPET_TN_CFG"
hpet_ram_write_invalid_tn_cfg(uint8_t reg_off) "invalid HPET_TN_CFG + %" PRIu8 " write"
hpet_ram_write_tn_cmp(uint8_t reg_off) "hpet_ram_writel HPET_TN_CMP + %" PRIu8
+hpet_ram_write_invalid_tn_cmp(void) "invalid HPET_TN_CMP + 4 write"
hpet_ram_write_invalid(void) "invalid hpet_ram_writel"
hpet_ram_write_counter_write_while_enabled(void) "Writing counter while HPET enabled!"
hpet_ram_write_counter_written(uint8_t reg_off, uint64_t value, uint64_t counter) "HPET counter + %" PRIu8 "written. crt = 0x%" PRIx64 " -> 0x%" PRIx64