Re: [RESEND] rtc: snvs: Fix usage of snvs_rtc_enable

From: Trent Piepho
Date: Fri Mar 30 2018 - 18:59:09 EST


On Thu, 2018-03-29 at 02:53 +0100, Bryan O'Donoghue wrote:
> On 29/03/18 01:12, Trent Piepho wrote:
>
> > I sent a patch a couple weeks ago that addressed a similar issue, see
> > https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatchwork.ozlabs.org%2Fpatch%2F887090%2F&data=02%7C01%7Ctpiepho%40impinj.com%7Cb622940802df49deac4c08d59517e8d8%7C6de70f0f73574529a415d8cbb7e93e5e%7C0%7C1%7C636578852283390745&sdata=ds0ofpbTqrHBjGA18N343cJJ9sy2STQ9ZzSxH2TUyzE%3D&reserved=0
> >
> > Does this also fix the problem you see?
>
> It breaks the endless loop that happens later on in the RTC read path.
>
> This patch though is about fixing the bug with not handling the enable
> of the snvs_rtc_enable() correctly, which is why it should be applied.
>
> The right flow is to handle the error on snvs_rtc_enable() as soon as it
> happens as opposed wait for read() to -ETIMEDOUT.

Unless there are boards that don't enable the 32kHz oscillator until
after the kernel driver loads. I was concerned about that so didn't
add the check in probe to prevent the driver from loading. If the
possible disruption of that is acceptable, then it does seem better to
fail to load.

However, I think that even if the driver fails to probe if there is a
timeout at probe time, it's still possible to hang later if there are
not limits to the hardware polling loops, such as the ones I added.

> > I think what you've done will prevent the driver from loading if the
> > clock is not working, but if the clock does not tick properly after
> > loading, there are still points (snvs_rtc_read_time for one) that will
> > lock up in the kernel.
>
> I'll dig out your patch and give it a review.
>