Hi Geert, Thanks for your patch. On 2021-01-22 12:36:37 +0100, Geert Uytterhoeven wrote: > Replace the open-coded polling loops by calls to the > readl_poll_timeout_atomic() helper macro. > > Signed-off-by: Geert Uytterhoeven <geert+renesas@xxxxxxxxx> > --- > drivers/soc/renesas/rcar-sysc.c | 33 ++++++++++++++------------------- > 1 file changed, 14 insertions(+), 19 deletions(-) > > diff --git a/drivers/soc/renesas/rcar-sysc.c b/drivers/soc/renesas/rcar-sysc.c > index a00bb098e1fe7488..4ff2671a699a4a3b 100644 > --- a/drivers/soc/renesas/rcar-sysc.c > +++ b/drivers/soc/renesas/rcar-sysc.c > @@ -15,6 +15,7 @@ > #include <linux/slab.h> > #include <linux/spinlock.h> > #include <linux/io.h> > +#include <linux/iopoll.h> > #include <linux/soc/renesas/rcar-sysc.h> > > #include "rcar-sysc.h" > @@ -44,13 +45,13 @@ > #define PWRER_OFFS 0x14 /* Power Shutoff/Resume Error */ > > > -#define SYSCSR_RETRIES 100 > +#define SYSCSR_TIMEOUT 100 > #define SYSCSR_DELAY_US 1 > > #define PWRER_RETRIES 100 > #define PWRER_DELAY_US 1 > > -#define SYSCISR_RETRIES 1000 > +#define SYSCISR_TIMEOUT 1000 > #define SYSCISR_DELAY_US 1 > > #define RCAR_PD_ALWAYS_ON 32 /* Always-on power area */ > @@ -68,7 +69,8 @@ static u32 rcar_sysc_extmask_offs, rcar_sysc_extmask_val; > static int rcar_sysc_pwr_on_off(const struct rcar_sysc_ch *sysc_ch, bool on) > { > unsigned int sr_bit, reg_offs; > - int k; > + u32 val; > + int ret; > > if (on) { > sr_bit = SYSCSR_PONENB; > @@ -79,13 +81,10 @@ static int rcar_sysc_pwr_on_off(const struct rcar_sysc_ch *sysc_ch, bool on) > } > > /* Wait until SYSC is ready to accept a power request */ > - for (k = 0; k < SYSCSR_RETRIES; k++) { > - if (ioread32(rcar_sysc_base + SYSCSR) & BIT(sr_bit)) > - break; > - udelay(SYSCSR_DELAY_US); > - } > - > - if (k == SYSCSR_RETRIES) > + ret = readl_poll_timeout_atomic(rcar_sysc_base + SYSCSR, val, > + val & BIT(sr_bit), SYSCSR_DELAY_US, > + SYSCSR_TIMEOUT); > + if (ret) > return -EAGAIN; > > /* Submit power shutoff or power resume request */ > @@ -101,8 +100,7 @@ static int rcar_sysc_power(const struct rcar_sysc_ch *sysc_ch, bool on) > unsigned int chan_mask = BIT(sysc_ch->chan_bit); > unsigned int status; > unsigned long flags; > - int ret = 0; > - int k; > + int k, ret; nit: I would make k an unsigned as it's now only used in incremental loops starting at 0. With or without this unrelated nit, Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@xxxxxxxxxxxx> > > spin_lock_irqsave(&rcar_sysc_lock, flags); > > @@ -145,13 +143,10 @@ static int rcar_sysc_power(const struct rcar_sysc_ch *sysc_ch, bool on) > } > > /* Wait until the power shutoff or resume request has completed * */ > - for (k = 0; k < SYSCISR_RETRIES; k++) { > - if (ioread32(rcar_sysc_base + SYSCISR) & isr_mask) > - break; > - udelay(SYSCISR_DELAY_US); > - } > - > - if (k == SYSCISR_RETRIES) > + ret = readl_poll_timeout_atomic(rcar_sysc_base + SYSCISR, status, > + status & isr_mask, SYSCISR_DELAY_US, > + SYSCISR_TIMEOUT); > + if (ret) > ret = -EIO; > > iowrite32(isr_mask, rcar_sysc_base + SYSCISCR); > -- > 2.25.1 > -- Regards, Niklas Söderlund