On 11 January 2016 at 09:56, Simon Glass <[email protected]> wrote: > 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), >>> }; >>> --
Applied to u-boot-dm, thanks! _______________________________________________ U-Boot mailing list [email protected] http://lists.denx.de/mailman/listinfo/u-boot

