summaryrefslogtreecommitdiff
path: root/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts
diff options
context:
space:
mode:
authorJohan Hovold <johan+linaro@kernel.org>2023-02-02 18:54:48 +0300
committerBjorn Andersson <andersson@kernel.org>2023-03-13 22:38:09 +0300
commit5fef1b434aa35e7e34f16bc5cb389d783f5a832f (patch)
tree3badeb62d176eb6b30c4847f62d44ca87a6d40c3 /arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts
parente67b45582c5e2ca829f4bb4c0042f75cdec62b80 (diff)
downloadlinux-5fef1b434aa35e7e34f16bc5cb389d783f5a832f.tar.xz
arm64: dts: qcom: sc8280xp-x13s: enable rtc
The Lenovo X13s firmware does not implement the UEFI time runtime services so the RTC in the PM8280K PMIC needs to be accessed directly. To complicate things further, the RTC control and time registers are read-only on this platform so an offset must be stored in some other machine-specific non-volatile memory which an RTC driver can take into account when reading or updating the time. The UEFI firmware (and Windows) use a UEFI variable for this: 882f8c2b-9646-435f-8de5-f208ff80c1bd-RTCInfo but the offset can only be accessed via the Qualcomm UEFI Secure Application residing in the TEE as the firmware does not implement the variable runtime services either. While it is possible to access this UEFI variable from Linux on the X13s, this requires using a fairly complex and reverse-engineered firmware interface. As the only benefit of doing so is to make sure that the UEFI (Windows) and Linux time never gets out of sync, it seems preferable to use the PMIC scratch registers for storing an offset instead. This also avoids flash wear in case of RTC drift, etc. So instead of using the UEFI RTC offset, reserve four bytes in one of the PMIC SDAM scratch-register blocks to hold the RTC offset. Signed-off-by: Johan Hovold <johan+linaro@kernel.org> Signed-off-by: Bjorn Andersson <andersson@kernel.org> Link: https://lore.kernel.org/r/20230202155448.6715-23-johan+linaro@kernel.org
Diffstat (limited to 'arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts')
-rw-r--r--arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts15
1 files changed, 15 insertions, 0 deletions
diff --git a/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts b/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts
index 98e71b933437..9b674686943d 100644
--- a/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts
+++ b/arch/arm64/boot/dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts
@@ -766,6 +766,21 @@
status = "okay";
};
+&pmk8280_rtc {
+ nvmem-cells = <&rtc_offset>;
+ nvmem-cell-names = "offset";
+
+ status = "okay";
+};
+
+&pmk8280_sdam_6 {
+ status = "okay";
+
+ rtc_offset: rtc-offset@bc {
+ reg = <0xbc 0x4>;
+ };
+};
+
&pmk8280_vadc {
status = "okay";