* Julien Panis <jpanis@xxxxxxxxxxxx> [230821 14:24]: > The am335x-evm started producing boot errors because of subtle timing > changes: > > Unhandled fault: external abort on non-linefetch (0x1008) at 0xf03c1010 > ... > sysc_reset from sysc_probe+0xf60/0x1514 > sysc_probe from platform_probe+0x5c/0xbc > ... > > The fix consists in using the appropriate sleep function in sysc reset. > For flexible sleeping, fsleep is recommended. Here, sysc delay parameter > can take any value in [0 - 255] us range. As a result, fsleep() should > be used, calling udelay() for a sysc delay lower than 10 us. > > Signed-off-by: Julien Panis <jpanis@xxxxxxxxxxxx> > Fixes: e709ed70d122 ("bus: ti-sysc: Fix missing reset delay handling") > --- > Fix boot errors for am335x-evm in sysc_reset(), by using fsleep() instead > of usleep_range() function. Thus, udelay() will be called if the configured > sysc delay is lower than 10 us (which is usually the case, since the value > set in the device tree is currently 2 us). OK, interesting. Yeah I've only ever seen values of 2 us needed here. Regards, Tony > --- > drivers/bus/ti-sysc.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c > index 4cb23b9e06ea..59b8bdd9203e 100644 > --- a/drivers/bus/ti-sysc.c > +++ b/drivers/bus/ti-sysc.c > @@ -2147,8 +2147,7 @@ static int sysc_reset(struct sysc *ddata) > } > > if (ddata->cfg.srst_udelay) > - usleep_range(ddata->cfg.srst_udelay, > - ddata->cfg.srst_udelay * 2); > + fsleep(ddata->cfg.srst_udelay); > > if (ddata->post_reset_quirk) > ddata->post_reset_quirk(ddata); > > --- > base-commit: f7757129e3dea336c407551c98f50057c22bb266 > change-id: 20230821-fix-ti-sysc-reset-5c164051345b > > Best regards, > -- > Julien Panis <jpanis@xxxxxxxxxxxx> >