Re: [PATCH v3 6/7] soc: renesas: rmobile-sysc: Convert to readl_poll_timeout_atomic()

From: Geert Uytterhoeven
Date: Mon Jun 05 2023 - 09:16:00 EST


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