On Apr 10, 2024 at 09:40:05 +0300, Tony Lindgren wrote: > We are wrongly checking SYSC_QUIRK_NO_RESET_ON_INIT flag in sysc_reset(), > it can be called also after init from sysc_reinit_module(). Let's fix the > issue by moving the check to the init code. I am not able to understand exactly the potential bug here, what was the issue exactly? What I am able to infer is this is more of an improvement than fixing a bug? Maybe I am missing some context, can you help me understand the potential bug here? > > Fixes: 6a52bc2b81fa ("bus: ti-sysc: Add quirk handling for reset on re-init") Fixes tag, you might want to CC stable@xxxxxxxxxxxxxxx? > Signed-off-by: Tony Lindgren <tony@xxxxxxxxxxx> > --- > drivers/bus/ti-sysc.c | 15 ++++++++------- > 1 file changed, 8 insertions(+), 7 deletions(-) > > diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c > --- a/drivers/bus/ti-sysc.c > +++ b/drivers/bus/ti-sysc.c > @@ -2145,8 +2145,7 @@ static int sysc_reset(struct sysc *ddata) > sysc_offset = ddata->offsets[SYSC_SYSCONFIG]; > > if (ddata->legacy_mode || > - ddata->cap->regbits->srst_shift < 0 || > - ddata->cfg.quirks & SYSC_QUIRK_NO_RESET_ON_INIT) > + ddata->cap->regbits->srst_shift < 0) > return 0; > > sysc_mask = BIT(ddata->cap->regbits->srst_shift); > @@ -2240,12 +2239,14 @@ static int sysc_init_module(struct sysc *ddata) > goto err_main_clocks; > } > > - error = sysc_reset(ddata); > - if (error) > - dev_err(ddata->dev, "Reset failed with %d\n", error); > + if (!(ddata->cfg.quirks & SYSC_QUIRK_NO_RESET_ON_INIT)) { > + error = sysc_reset(ddata); > + if (error) > + dev_err(ddata->dev, "Reset failed with %d\n", error); > > - if (error && !ddata->legacy_mode) > - sysc_disable_module(ddata->dev); > + if (error && !ddata->legacy_mode) > + sysc_disable_module(ddata->dev); > + } > -- Best regards, Dhruva