diff mbox series

[U-Boot,v3,03/19] dm: timer: handle being called before dm_root is ready

Message ID 1505160270-10650-4-git-send-email-philipp.tomsich@theobroma-systems.com
State Accepted
Delegated to: Philipp Tomsich
Headers show
Series rockchip: convert the RK3368 to OF_LIVE and validate on the RK3368-uQ7 | expand

Commit Message

Philipp Tomsich Sept. 11, 2017, 8:04 p.m. UTC
When used with bootstage recording, dm_timer_init may be called
surprisingly early: i.e. before dm_root is ready. To deal with
this case, we explicitly check for this condition and return
-EAGAIN to the caller (refer to drivers/timer/rockchip_timer.c
for a case where this is needed/used).

Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Acked-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
---

Changes in v3: None
Changes in v2: None

 drivers/timer/timer-uclass.c | 7 +++++++
 1 file changed, 7 insertions(+)

Comments

Philipp Tomsich Sept. 12, 2017, 10:54 a.m. UTC | #1
> When used with bootstage recording, dm_timer_init may be called
> surprisingly early: i.e. before dm_root is ready. To deal with
> this case, we explicitly check for this condition and return
> -EAGAIN to the caller (refer to drivers/timer/rockchip_timer.c
> for a case where this is needed/used).
> 
> Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
> Reviewed-by: Simon Glass <sjg@chromium.org>
> Acked-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
> ---
> 
> Changes in v3: None
> Changes in v2: None
> 
>  drivers/timer/timer-uclass.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 

Applied to u-boot-rockchip, thanks!
diff mbox series

Patch

diff --git a/drivers/timer/timer-uclass.c b/drivers/timer/timer-uclass.c
index 62d6f0b..45397b2 100644
--- a/drivers/timer/timer-uclass.c
+++ b/drivers/timer/timer-uclass.c
@@ -92,6 +92,13 @@  int notrace dm_timer_init(void)
 	if (gd->timer)
 		return 0;
 
+	/*
+	 * Directly access gd->dm_root to suppress error messages, if the
+	 * virtual root driver does not yet exist.
+	 */
+	if (gd->dm_root == NULL)
+		return -EAGAIN;
+
 #if !CONFIG_IS_ENABLED(OF_PLATDATA)
 	/* Check for a chosen timer to be used for tick */
 	node = ofnode_get_chosen_node("tick-timer");