On Fri, Jun 2, 2023 at 10:51 AM Geert Uytterhoeven <geert+renesas@xxxxxxxxx> wrote: > Use readl_poll_timeout_atomic() instead of open-coding the same > operation. > > 1. rmobile_pd_power_down(): as typically less than 20 retries are > needed, PSTR_RETRIES (100) µs is a suitable timeout value. > > 2. __rmobile_pd_power_up(): the old method of first polling some > cycles with a 1 µs delay, followed by more polling cycles without > any delay didn't make much sense, as the latter was insignificant > compared to the former. Furthermore, typically no retries are > needed. Hence just retain the polling with delay. > > Signed-off-by: Geert Uytterhoeven <geert+renesas@xxxxxxxxx> > diff --git a/drivers/soc/renesas/rmobile-sysc.c b/drivers/soc/renesas/rmobile-sysc.c > index 728ebac98e14a5cc..5d621c35fba1116a 100644 > @@ -74,25 +71,17 @@ static int rmobile_pd_power_down(struct generic_pm_domain *genpd) > > static int __rmobile_pd_power_up(struct rmobile_pm_domain *rmobile_pd) > { > - unsigned int mask = BIT(rmobile_pd->bit_shift); > - unsigned int retry_count; > - int ret = 0; > + unsigned int val, mask = BIT(rmobile_pd->bit_shift); > + int ret; Oops, "ret" should still be initialized to zero. > > if (readl(rmobile_pd->base + PSTR) & mask) > return ret; > > writel(mask, rmobile_pd->base + SWUCR); > > - for (retry_count = 2 * PSTR_RETRIES; retry_count; retry_count--) { > - if (!(readl(rmobile_pd->base + SWUCR) & mask)) > - break; > - if (retry_count > PSTR_RETRIES) > - udelay(PSTR_DELAY_US); > - else > - cpu_relax(); > - } > - if (!retry_count) > - ret = -EIO; > + ret = readl_poll_timeout_atomic(rmobile_pd->base + SWUCR, val, > + (val & mask), PSTR_DELAY_US, > + PSTR_RETRIES * PSTR_DELAY_US); > > pr_debug("%s: Power on, 0x%08x -> PSTR = 0x%08x\n", > rmobile_pd->genpd.name, mask, Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds