[U-Boot] [PATCH 1/3] dm: timer: refuse timers with zero clock_rate
Stephen Warren
swarren at wwwdotorg.org
Wed Jan 6 18:33:03 CET 2016
From: Stephen Warren <swarren at nvidia.com>
If a timer has a zero clock_rate, get_tbclk() will return zero for it,
which will cause tick_to_time() to perform a division-by-zero, which will
crash U-Boot.
Signed-off-by: Stephen Warren <swarren at nvidia.com>
---
drivers/timer/timer-uclass.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/drivers/timer/timer-uclass.c b/drivers/timer/timer-uclass.c
index aca421bdea33..0771562c600d 100644
--- a/drivers/timer/timer-uclass.c
+++ b/drivers/timer/timer-uclass.c
@@ -47,6 +47,16 @@ static int timer_pre_probe(struct udevice *dev)
return 0;
}
+static int timer_post_probe(struct udevice *dev)
+{
+ struct timer_dev_priv *uc_priv = dev_get_uclass_priv(dev);
+
+ if (!uc_priv->clock_rate)
+ return -EINVAL;
+
+ return 0;
+}
+
u64 timer_conv_64(u32 count)
{
/* increment tbh if tbl has rolled over */
@@ -60,5 +70,6 @@ UCLASS_DRIVER(timer) = {
.id = UCLASS_TIMER,
.name = "timer",
.pre_probe = timer_pre_probe,
+ .post_probe = timer_post_probe,
.per_device_auto_alloc_size = sizeof(struct timer_dev_priv),
};
--
2.6.4
More information about the U-Boot
mailing list