]> xenbits.xensource.com Git - qemu-xen.git/commitdiff
hw/timer/cmsdk-apb-timer: Correctly identify and set one-shot mode
authorGuenter Roeck <linux@roeck-us.net>
Mon, 9 Jul 2018 13:51:34 +0000 (14:51 +0100)
committerPeter Maydell <peter.maydell@linaro.org>
Mon, 9 Jul 2018 13:51:34 +0000 (14:51 +0100)
The CMSDK APB timer is currently always configured as periodic timer.
This results in the following messages when trying to boot Linux.

Timer with delta zero, disabling

If the timer limit set with the RELOAD command is 0, the timer
needs to be enabled as one-shot timer.

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Tested-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
hw/timer/cmsdk-apb-timer.c

index 1f99081db1a53b3ada68b01e49b939abff636421..3ebdc7be408c3deb6dfd134681dfee7eec0a76db 100644 (file)
@@ -119,7 +119,7 @@ static void cmsdk_apb_timer_write(void *opaque, hwaddr offset, uint64_t value,
         }
         s->ctrl = value & 0xf;
         if (s->ctrl & R_CTRL_EN_MASK) {
-            ptimer_run(s->timer, 0);
+            ptimer_run(s->timer, ptimer_get_limit(s->timer) == 0);
         } else {
             ptimer_stop(s->timer);
         }