Hi, On 6 January 2016 at 22:29, Bin Meng <[email protected]> wrote: > On Thu, Jan 7, 2016 at 1:33 AM, Stephen Warren <[email protected]> wrote: >> From: Stephen Warren <[email protected]> >> >> 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 <[email protected]> >> --- >> drivers/timer/timer-uclass.c | 11 +++++++++++ >> 1 file changed, 11 insertions(+)
Acked-by: Simon Glass <[email protected]> >> >> 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; > > Should we just panic here? I don't think so - there may be multiple timers, and this error should be reported. If you like you could use a strange error number so it is more obvious (e.g. -ETIME). > >> + >> + 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), >> }; >> -- > > Regards, > Bin Regards, Simon _______________________________________________ U-Boot mailing list [email protected] http://lists.denx.de/mailman/listinfo/u-boot

