On Do, 2022-04-07 at 10:17 +0300, Claudiu Beznea wrote: > SAMA7G5 reset controller has 5 extra lines that goes to different devices > (3 lines to USB PHYs, 1 line to DDR controller, 1 line to DDR PHY > controller). These reset lines could be requested by different controller > drivers (e.g. USB PHY driver) and these controllers' drivers could > assert/deassert these lines when necessary. Thus add support for > reset_controller_dev which brings this functionality. > > Signed-off-by: Claudiu Beznea <claudiu.beznea@xxxxxxxxxxxxx> > --- > drivers/power/reset/at91-reset.c | 107 +++++++++++++++++++++++++++++-- > 1 file changed, 103 insertions(+), 4 deletions(-) > > diff --git a/drivers/power/reset/at91-reset.c b/drivers/power/reset/at91-reset.c > index 1b2aca3f490d..a6f65ac430cd 100644 > --- a/drivers/power/reset/at91-reset.c > +++ b/drivers/power/reset/at91-reset.c [...] > +static int at91_reset_update(struct reset_controller_dev *rcdev, > + unsigned long id, bool assert) > +{ > + struct at91_reset *reset = to_at91_reset(rcdev); > + u32 val; > + > + spin_lock(&reset->lock); Use spin_lock_irqsave. We don't know where we are called from and this isn't a time critical path. > + val = readl_relaxed(reset->dev_base); > + if (assert) > + val |= BIT(id); > + else > + val &= ~BIT(id); > + writel_relaxed(val, reset->dev_base); > + spin_unlock(&reset->lock); > + > + return 0; > +} > + > +static int at91_reset_assert(struct reset_controller_dev *rcdev, > + unsigned long id) > +{ > + return at91_reset_update(rcdev, id, true); > +} > + > +static int at91_reset_deassert(struct reset_controller_dev *rcdev, > + unsigned long id) > +{ > + return at91_reset_update(rcdev, id, false); > +} > + > +static int at91_reset_dev_status(struct reset_controller_dev *rcdev, > + unsigned long id) > +{ > + struct at91_reset *reset = to_at91_reset(rcdev); > + u32 val; > + > + spin_lock(&reset->lock); Locking is not necessary here. If the read is racing against an update, it either returns the register value before or after the update, same as without a lock. With those changes, Reviewed-by: Philipp Zabel <p.zabel@xxxxxxxxxxxxxx> regards Philipp