[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 03/41] hw/timer/exynos4210_mct: Initialize ptimer before starting
From: |
Peter Maydell |
Subject: |
[PULL 03/41] hw/timer/exynos4210_mct: Initialize ptimer before starting it |
Date: |
Tue, 22 Oct 2019 14:30:56 +0100 |
From: Guenter Roeck <address@hidden>
When booting a recent Linux kernel, the qemu message "Timer with delta
zero, disabling" is seen, apparently because a ptimer is started before
being initialized. Fix the problem by initializing the offending ptimer
before starting it.
The bug is effectively harmless in the old QEMUBH setup
because the sequence of events is:
* the delta zero means the timer expires immediately
* ptimer_reload() arranges for exynos4210_gfrc_event() to be called
* ptimer_reload() notices the zero delta and disables the timer
* later, the QEMUBH runs, and exynos4210_gfrc_event() correctly
configures the timer and restarts it
In the new transaction based API the bug is still harmless,
but differences of when the callback function runs mean the
message is not printed any more:
* ptimer_run() does nothing as it's inside a transaction block
* ptimer_transaction_commit() sees it has work to do and
calls ptimer_reload()
* the zero delta means the timer expires immediately
* ptimer_reload() calls exynos4210_gfrc_event() directly
* exynos4210_gfrc_event() configures the timer
* the delta is no longer zero so ptimer_reload() doesn't complain
(the zero-delta test is after the trigger-callback in
the ptimer_reload() function)
Regardless, the behaviour here was not intentional, and we should
just program the ptimer correctly to start with.
Signed-off-by: Guenter Roeck <address@hidden>
Reviewed-by: Philippe Mathieu-Daudé <address@hidden>
Tested-by: Philippe Mathieu-Daudé <address@hidden>
Signed-off-by: Peter Maydell <address@hidden>
Message-id: address@hidden
[PMM: Expansion/clarification of the commit message:
the message is about a zero delta, not a zero period;
added detail to the commit message of the analysis of what
is happening and why the kernel boots even with the message;
added note that the message goes away with the new ptimer API]
Signed-off-by: Peter Maydell <address@hidden>
---
hw/timer/exynos4210_mct.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/timer/exynos4210_mct.c b/hw/timer/exynos4210_mct.c
index 72257584145..944120aea59 100644
--- a/hw/timer/exynos4210_mct.c
+++ b/hw/timer/exynos4210_mct.c
@@ -1254,7 +1254,7 @@ static void exynos4210_mct_write(void *opaque, hwaddr
offset,
/* Start FRC if transition from disabled to enabled */
if ((value & G_TCON_TIMER_ENABLE) > (old_val &
G_TCON_TIMER_ENABLE)) {
- exynos4210_gfrc_start(&s->g_timer);
+ exynos4210_gfrc_restart(s);
}
if ((value & G_TCON_TIMER_ENABLE) < (old_val &
G_TCON_TIMER_ENABLE)) {
--
2.20.1
- [PULL 00/41] target-arm queue, Peter Maydell, 2019/10/22
- [PULL 01/41] target/arm: Fix sign-extension for SMLAL*, Peter Maydell, 2019/10/22
- [PULL 02/41] aspeed: Add an AST2600 eval board, Peter Maydell, 2019/10/22
- [PULL 03/41] hw/timer/exynos4210_mct: Initialize ptimer before starting it,
Peter Maydell <=
- [PULL 05/41] hw/timer/puv3_ost.c: Switch to transaction-based ptimer API, Peter Maydell, 2019/10/22
- [PULL 04/41] hw/timer/arm_mptimer.c: Undo accidental rename of arm_mptimer_init(), Peter Maydell, 2019/10/22
- [PULL 06/41] hw/timer/sh_timer: Switch to transaction-based ptimer API, Peter Maydell, 2019/10/22
- [PULL 07/41] hw/timer/lm32_timer: Switch to transaction-based ptimer API, Peter Maydell, 2019/10/22
- [PULL 08/41] hw/timer/altera_timer.c: Switch to transaction-based ptimer API, Peter Maydell, 2019/10/22
- [PULL 09/41] hw/watchdog/etraxfs_timer.c: Switch to transaction-based ptimer API, Peter Maydell, 2019/10/22
- [PULL 10/41] hw/m68k/mcf5208.c: Switch to transaction-based ptimer API, Peter Maydell, 2019/10/22
- [PULL 11/41] target/arm: Split out rebuild_hflags_common, Peter Maydell, 2019/10/22
- [PULL 13/41] target/arm: Split out rebuild_hflags_common_32, Peter Maydell, 2019/10/22
- [PULL 12/41] target/arm: Split out rebuild_hflags_a64, Peter Maydell, 2019/10/22