Message ID | 20250120144152.11949-1-johan+linaro@kernel.org |
---|---|
Headers | show |
Series | arm64: dts: qcom: x1e80100: enable rtc | expand |
On Mon, Jan 20, 2025 at 04:15:54PM +0100, Johan Hovold wrote: > On Mon, Jan 20, 2025 at 03:10:24PM +0000, Sudeep Holla wrote: > > On Mon, Jan 20, 2025 at 03:41:48PM +0100, Johan Hovold wrote: > > > On many Qualcomm platforms the PMIC RTC control and time registers are > > > read-only so that the RTC time can not be updated. Instead an offset > > > needs be stored in some machine-specific non-volatile memory, which the > > > driver can take into account. > > > > > > Add support for storing a 32-bit offset from the GPS time epoch in a > > > UEFI variable so that the RTC time can be set on such platforms. > > > > > > > Why can't the UEFI runtime services be used here ? > > In short, why is drivers/rtc/rtc-efi.c not working or no attempts are > > made to check if that works just fine ? > > As I alluded to in the commit message, the Qualcomm UEFI implementation s/commit message/cover letter/ > is broken and the runtime services cannot be accessed during runtime... > > That's why we can't use rtc-efi and why we have a dedicated efivars > implementation that talks directly to the firmware using a custom > protocol: > > https://lore.kernel.org/all/20220723224949.1089973-1-luzmaximilian@gmail.com/ Johan
Hi Johan, On Mon, Jan 20, 2025 at 8:43 AM Johan Hovold <johan+linaro@kernel.org> 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. > > Hopefully this all goes away (for future platforms) once Qualcomm fix > their UEFI implementation so that the UEFI time (and variable) services > can be used directly. > > Johan > > > Changes since UEFI offset RFC [1]: > - clarify that UEFI variable format is not arbitrary (Alexandre) > - add missing use_uefi kernel doc > - use dev_dbg() instead of dev_err() (Alexandre) > - rename epoch define RTC_TIMESTAMP_EPOCH_GPS (Alexandre) > - mitigate flash wear by deferring writes due to clock drift until > shutdown > > Changes since Jonathan's X1E series v3 [3]: > - tweak qcom,no-alarm binding update (and drop Krystzof's Reviewed-by tag) > - drop no-alarm flag and restructure probe() to clear feature flag before > registering RTC > - use UEFI variable offset on X1E > > [1] https://lore.kernel.org/lkml/20230126142057.25715-1-johan+linaro@kernel.org/ > [2] https://lore.kernel.org/lkml/20230202155448.6715-1-johan+linaro@kernel.org/ > [3] https://lore.kernel.org/lkml/20241015004945.3676-1-jonathan@marek.ca/ > > > Johan Hovold (5): > dt-bindings: rtc: qcom-pm8xxx: add uefi-variable offset > rtc: pm8xxx: add support for uefi offset > rtc: pm8xxx: mitigate flash wear > arm64: dts: qcom: sc8280xp-x13s: switch to uefi rtc offset > arm64: dts: qcom: x1e80100: enable rtc > > Jonathan Marek (2): > dt-bindings: rtc: qcom-pm8xxx: document qcom,no-alarm flag > rtc: pm8xxx: implement qcom,no-alarm flag for non-HLOS owned alarm > > .../bindings/rtc/qcom-pm8xxx-rtc.yaml | 11 + > .../qcom/sc8280xp-lenovo-thinkpad-x13s.dts | 11 +- > arch/arm64/boot/dts/qcom/x1e80100-pmics.dtsi | 4 +- > drivers/rtc/rtc-pm8xxx.c | 194 +++++++++++++++--- > include/linux/rtc.h | 1 + > 5 files changed, 185 insertions(+), 36 deletions(-) > > -- > 2.45.2 > > Tested this on the Thinkpad X13s, as well as booting it into Windows and verifying that it has the correct clock both ways, which it does. Thank you! Tested-by: Steev Klimaszewski <steev@kali.org>
On Tue, 21 Jan 2025 at 01:14, Johan Hovold <johan+linaro@kernel.org> 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. Looks good on a Surface Laptop 7 / romulus: Tested-by: Joel Stanley <joel@jms.id.au> [ 0.407844] rtc-pm8xxx c42d000.spmi:pmic@0:rtc@6100: registered as rtc0 [ 0.407876] rtc-pm8xxx c42d000.spmi:pmic@0:rtc@6100: setting system clock to 2025-01-21T03:34:06 UTC (1737430446) Cheers, Joel
On Mon, Jan 20, 2025 at 03:19:33PM -0600, Steev Klimaszewski wrote: > Tested this on the Thinkpad X13s, as well as booting it into Windows > and verifying that it has the correct clock both ways, which it does. > Thank you! > > Tested-by: Steev Klimaszewski <steev@kali.org> Thanks for testing. Johan
On Tue, Jan 21, 2025 at 02:18:21PM +1030, Joel Stanley wrote: > On Tue, 21 Jan 2025 at 01:14, Johan Hovold <johan+linaro@kernel.org> 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. > > Looks good on a Surface Laptop 7 / romulus: > > Tested-by: Joel Stanley <joel@jms.id.au> > > [ 0.407844] rtc-pm8xxx c42d000.spmi:pmic@0:rtc@6100: registered as rtc0 > [ 0.407876] rtc-pm8xxx c42d000.spmi:pmic@0:rtc@6100: setting system > clock to 2025-01-21T03:34:06 UTC (1737430446) Thanks for testing. Johan