summary refs log tree commit diff stats
path: root/hw/core
diff options
context:
space:
mode:
authorJianzhou Yue <JianZhou.Yue@verisilicon.com>2024-08-09 17:37:56 +0100
committerPeter Maydell <peter.maydell@linaro.org>2024-08-12 11:40:16 +0100
commit446e5e8b4515e9a7be69ef6a29852975289bb6f0 (patch)
treea6257f730c34f79027ca79701abbc6f9b44db65a /hw/core
parenta8e1ea4c97a010349acbe22f099f0c6d6f2db470 (diff)
downloadfocaccia-qemu-446e5e8b4515e9a7be69ef6a29852975289bb6f0.tar.gz
focaccia-qemu-446e5e8b4515e9a7be69ef6a29852975289bb6f0.zip
hw/core/ptimer: fix timer zero period condition for freq > 1GHz
The real period is zero when both period and period_frac are zero.
Check the method ptimer_set_freq, if freq is larger than 1000 MHz,
the period is zero, but the period_frac is not, in this case, the
ptimer will work but the current code incorrectly recognizes that
the ptimer is disabled.

Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2306
Signed-off-by: JianZhou Yue <JianZhou.Yue@verisilicon.com>
Message-id: 3DA024AEA8B57545AF1B3CAA37077D0FB75E82C8@SHASXM03.verisilicon.com
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'hw/core')
-rw-r--r--hw/core/ptimer.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/hw/core/ptimer.c b/hw/core/ptimer.c
index b1517592c6..1d8964d804 100644
--- a/hw/core/ptimer.c
+++ b/hw/core/ptimer.c
@@ -83,7 +83,7 @@ static void ptimer_reload(ptimer_state *s, int delta_adjust)
         delta = s->delta = s->limit;
     }
 
-    if (s->period == 0) {
+    if (s->period == 0 && s->period_frac == 0) {
         if (!qtest_enabled()) {
             fprintf(stderr, "Timer with period zero, disabling\n");
         }
@@ -309,7 +309,7 @@ void ptimer_run(ptimer_state *s, int oneshot)
 
     assert(s->in_transaction);
 
-    if (was_disabled && s->period == 0) {
+    if (was_disabled && s->period == 0 && s->period_frac == 0) {
         if (!qtest_enabled()) {
             fprintf(stderr, "Timer with period zero, disabling\n");
         }