Re: [PATCH 0/7] arm64: dts: qcom: x1e80100: enable rtc

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[ +CC: Ard and Maximilian ]

Hi Rob,

and sorry about the late follow up on this. I had to find some time to
think more about this so it ended up on the back burner.

On Sun, Jan 26, 2025 at 06:20:26PM -0600, Rob Herring wrote:
> On Mon, Jan 20, 2025 at 03:41:45PM +0100, Johan Hovold wrote:
> > This series adds support for utilising the UEFI firmware RTC offset to
> > the Qualcomm PMIC RTC driver and uses that to enable the RTC on all X
> > Elite machines.
> > 
> > Included is also a patch to switch the Lenovo ThinkPad X13s over to
> > using the UEFI offset.
> > 
> > The RTCs in many Qualcomm devices are effectively broken due to the time
> > registers being read-only. Instead some other non-volatile memory can be
> > used to store an offset which a driver can take into account. On Windows
> > on Arm laptops, the UEFI firmware (and Windows) use a UEFI variable for
> > storing such an offset.
> > 
> > When RTC support for the X13s was added two years ago we did not yet
> > have UEFI variable support for these machines in mainline and there were
> > also some concerns regarding flash wear. [1] As not all Qualcomm
> > platforms have UEFI firmware anyway, we instead opted to use a PMIC
> > scratch register for storing the offset. [2]
> > 
> > On the UEFI machines in question this is however arguable not correct
> > as it means that the RTC time can differ between the UEFI firmware (and
> > Windows) and Linux.
> > 
> > Now that the (reverse engineered) UEFI variable implementation has been
> > merged and thoroughly tested, let's switch to using that to store the
> > RTC offset also on Linux. The flash wear concerns can be mitigated by
> > deferring writes due to clock drift until shutdown.
> > 
> > Note that this also avoids having to wait for months for Qualcomm to
> > provide a free PMIC SDAM scratch register for X1E and future platforms,
> > and specifically allows us to enable the RTC on X1E laptops today.
> > 
> > Rob had some concerns about adding a DT property for indicating that a
> > machine uses UEFI for storing the offset and suggested that the driver
> > should probe for this instead. Unfortunately, this is easier said than
> > done given that UEFI variable support itself is probed for and may not
> > be available until after the RTC driver probes.
> 
> This information would be useful in the binding commit...
>
> Seems like something I would say, but this is v1 and I have no memory of 
> discussing this. 

You're right, I should have mentioned this in the commit message and
linked to the RFC discussion directly:

	https://lore.kernel.org/lkml/Y9qO0yQ7oLux2L9n@xxxxxxxxxxxxxxxxxxxx/

> I would also say probe ordering is not a DT problem, 
> but sounds like an OS problem. Aren't there other things needing EFI 
> variables earlyish too? Do you really want to have to update the DT to 
> enable this?

Yeah, there are more things that expect EFI variables during early boot,
including systemd. In fact, that is the reason why the Qualcomm efivars
implementation can currently only be built in:

	https://lore.kernel.org/lkml/ZJ11H8btBhvCx9gD@xxxxxxxxxxxxxxxxxxxx/

The variable service is supposed to be a runtime service that is
available when drivers probe (module init), so I think it's reasonably
to simple refuse further modular efivars implementation (we already have
another from Google).

Since allowing the Qualcomm implementation to be modular now would
regress user space it seems at least that one will need to stay built-in
indefinitely.

And again, hopefully all of this goes away (for future platforms) once
Qualcomm fix their UEFI implementation so that the UEFI time and
variable services can be used directly.

I've dropped the DT property for v2. 

Johan




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [Linux for Sparc]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux