AT91 slow clock mode regression/fixes, improvement proposal
Yang, Wenyou
Wenyou.Yang at atmel.com
Thu Dec 18 18:50:04 PST 2014
Hi Sylvain,
> -----Original Message-----
> From: Sylvain Rochet [mailto:sylvain.rochet at finsecur.com]
> Sent: Friday, December 19, 2014 4:39 AM
> To: Yang, Wenyou; Ferre, Nicolas; Desroches, Ludovic; Alexandre Belloni; Maxime
> Ripard
> Cc: linux-arm-kernel at lists.infradead.org
> Subject: AT91 slow clock mode regression/fixes, improvement proposal
>
> Hello Wenyou,
>
> You worked recently on AT91 slow clock mode in the linux4sam/linux-at91 master
> branch, however I am seeing regressions on a AT91SAM9G35-EK board
> concerning the following commit-id:
>
> e0c8ba9b0ec3154e87da747098ee56e96ca3cee6
> pm: at91: pm_slowclock: move disable/enable PLLB out of the route
>
> cc4dc9885103af3b3262f7ac2b6aa887df1618b3
> pm: at91: pm_slowclock: improvement to disable the UTMI PLL
>
>
>
> About cc4dc9885103af3b3262f7ac2b6aa887df1618b3:
>
> The assembly look wrong for me, it seems you can't have two following labels with
> the same identifier, so:
>
> /* Turn on UTMI PLL */
> cmp flag, #1
> bne 1f
> (...)
> 1:
> (...)
> 1:
> wait_pllblock
>
> Is actually jumping to wait_pllblock before enabling PLLB instead of skipping UTMI
> PLL. Unfortunately the compiler does not warn about that.
Thanks. I will check it
>
>
>
> About e0c8ba9b0ec3154e87da747098ee56e96ca3cee6:
>
> I have mixed feeling about moving the PLL enabling from slow clock mode
> to master clock mode. Starting PLL is almost all about waiting, waiting,
> and waiting until they are stable enough to be used, the few CPU
> instructions required to switch ON the PLL is nothing compared to the
> wait time.
>
> To be sure I benchmarked the required time to set up the UTMI PLL (using
> a GPIO + scope) on my AT91SAM9G35-CM module in both slow clock and
> master clock mode, I found out the required time to start up the PLL is,
> as expected, -exactly- the same.
>
> But, previously, we were waiting with the CPU in slow clock mode, when
> the CPU power consumption is very very low, now we are waiting when the
> CPU is in full speed, which is worse.
>
> Or, I am missing something ?
>
>
> Anyway, if we wait for the PLL in master clock mode we *MUST* increase
> the PLL timeout a lot, with the current code I guess we are leaving the
> resume code when the PLL are not yet ready at all since we are only
> waiting out of a 1000 iteration loop on master clock.
>
> (Note that I didn't get fooled by that and I disabled the timeout when I
> checked the UPLL start time.)
>
>
>
> Furthermore, it looks like MCKRDY_TIMEOUT set to 1000 is not enough, my board
> crashes in about 1 wake up to 10 with this value and works perfectly
> fine with 4000.
I also encountered this issue.
Moreover the Main Crystal Oscillator Startup Time seems not enough too, not sure, I am confirming it.
>
>
> I have attached a patch that do the following:
>
> * Increase MCKRDY_TIMEOUT from 1000 to 4000 so my board don't crash.
> * Fix the assembly on the "Turn on UTMI PLL" part
> * Increase timeouts for PLLB and UPLL
>
>
> However I still disagree with this patch (this is why I didn't do a pull
> request ;-), I am proposing doing a patch set that:
>
> * Increase MCKRDY_TIMEOUT from 1000 to 4000 so my board don't crash, I
> would be happy to have a feed back on this with your boards ;-)
> * Fix the assembly on the "Turn on UTMI PLL" part
> * Move back PLLB and UPLL to slow clock mode to save power
>
> What do you think ?
>
>
> I have also mixed feeling about those timeouts, is it really useful in
> the wild ? We don't event catch the timeout event to do something else
> if it happens, we still switch to the master clock whatever happened or
> even worse we continue even if AT91_PMC_MCKRDY isn't set… which is why I
> am having hard fault. In my opinion this is the watchdog job to handle
> those cases cleanly, there is nothing much we can do if something fail
> other than waiting a watchdog reset.
>
> (Yeah, I know the watchdog is hard to use with sleep mode on AT91 chip,
> I have a work in progress about using the RTC to wake up before the
> watchdog expire to clear the watchdog and go back to sleep as fast as
> possible without resuming all the devices. It works, but I am still not
> happy at all with what I did for now.)
>
> Therefore I am also proposing to remove all the timeout.
Good idea, but I still worry the deadlock without timeout. Maybe increasing timeout is better.
>
>
> By the way, I don't know for other AT91 boards (or without DT, or
> something else), but the UTMI PLL suspend/resume seem unnecessary for
> me, the USB driver is already disabling the USB PLL when suspending,
> could you confirm ?
Yes, I agree.
Remove disabling the PLLB code as well.
>
>
>
> Regards,
> Sylvain
Best Regards,
Wenyou Yang
More information about the linux-arm-kernel
mailing list