Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1731580
| From | Nicolas Ferre <nicolas.ferre@microchip.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | Re: [PATCH v1 01/10] clk: at91: pmc: Wait for clocks when resuming |
| Date | 2017-09-13 14:20 +0200 |
| Message-ID | <upeO6-7fC-15@gated-at.bofh.it> (permalink) |
| References | <untxU-tS-5@gated-at.bofh.it> <untxW-tS-47@gated-at.bofh.it> |
| Organization | microchip |
On 08/09/2017 at 17:35, Romain Izard wrote:
> Wait for the syncronization of all clocks when resuming, not only the
> UPLL clock. Do not use regmap_read_poll_timeout, as it will call BUG()
> when interrupts are masked, which is the case in here.
>
> Signed-off-by: Romain Izard <romain.izard.pro@gmail.com>
> ---
> drivers/clk/at91/pmc.c | 24 ++++++++++++++++--------
> 1 file changed, 16 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c
> index 775af473fe11..5c2b26de303e 100644
> --- a/drivers/clk/at91/pmc.c
> +++ b/drivers/clk/at91/pmc.c
> @@ -107,10 +107,20 @@ static int pmc_suspend(void)
> return 0;
> }
>
> +static bool pmc_ready(unsigned int mask)
> +{
> + unsigned int status;
> +
> + regmap_read(pmcreg, AT91_PMC_SR, &status);
> +
> + return ((status & mask) == mask) ? 1 : 0;
> +}
> +
> static void pmc_resume(void)
> {
> - int i, ret = 0;
> + int i;
> u32 tmp;
> + u32 mask = AT91_PMC_MCKRDY | AT91_PMC_LOCKA;
>
> regmap_read(pmcreg, AT91_PMC_MCKR, &tmp);
> if (pmc_cache.mckr != tmp)
> @@ -134,13 +144,11 @@ static void pmc_resume(void)
> AT91_PMC_PCR_CMD);
> }
>
> - if (pmc_cache.uckr & AT91_PMC_UPLLEN) {
> - ret = regmap_read_poll_timeout(pmcreg, AT91_PMC_SR, tmp,
> - !(tmp & AT91_PMC_LOCKU),
> - 10, 5000);
> - if (ret)
> - pr_crit("USB PLL didn't lock when resuming\n");
> - }
> + if (pmc_cache.uckr & AT91_PMC_UPLLEN)
> + mask |= AT91_PMC_LOCKU;
> +
> + while (!pmc_ready(mask))
> + cpu_relax();
Okay, but I would prefer to keep the timeout property in it. So we may
need to re-implement a timeout way-out here.
Regards,
> }
>
> static struct syscore_ops pmc_syscore_ops = {
>
--
Nicolas Ferre
Back to linux.kernel | Previous | Next — Next in thread | Find similar | Unroll thread
Re: [PATCH v1 01/10] clk: at91: pmc: Wait for clocks when resuming Nicolas Ferre <nicolas.ferre@microchip.com> - 2017-09-13 14:20 +0200
Re: [PATCH v1 01/10] clk: at91: pmc: Wait for clocks when resuming Romain Izard <romain.izard.pro@gmail.com> - 2017-09-14 18:20 +0200
Re: [PATCH v1 01/10] clk: at91: pmc: Wait for clocks when resuming Nicolas Ferre <nicolas.ferre@microchip.com> - 2017-09-22 14:20 +0200
csiph-web