rtc: pm8xxx: fix uefi offset lookup
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 a
driver can take into account.
On platforms where the offset is stored in a Qualcomm specific UEFI
variable the variables are also accessed in a non-standard way, which
means that the OS cannot assume that the variable service is available
by the time the driver probes.
Use the new 'qcom,uefi-rtc-info' property to determine whether to probe
defer until the UEFI offset becomes available so that the offset can be
used also when the RTC driver is built in or when a dependency of the
UEFI variable driver is built as a module (e.g. the driver for the SCM
interconnects).
Fixes: bba38b8748 ("rtc: pm8xxx: add support for uefi offset")
Reported-by: Rob Clark <robdclark@gmail.com>
Link: https://lore.kernel.org/lkml/CAF6AEGsfke=x0p1b2-uNX6DuQfRyEjVbJaxTbVLDT2YvSkGJbg@mail.gmail.com/
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
Link: https://lore.kernel.org/r/20250423075143.11157-3-johan+linaro@kernel.org
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
This commit is contained in:
parent
b23b91d568
commit
ead4532832
|
|
@ -576,13 +576,20 @@ static int pm8xxx_rtc_probe_offset(struct pm8xxx_rtc *rtc_dd)
|
|||
}
|
||||
|
||||
/* Use UEFI storage as fallback if available */
|
||||
if (efivar_is_available()) {
|
||||
rc = pm8xxx_rtc_read_uefi_offset(rtc_dd);
|
||||
if (rc == 0)
|
||||
rtc_dd->use_uefi = true;
|
||||
rtc_dd->use_uefi = of_property_read_bool(rtc_dd->dev->of_node,
|
||||
"qcom,uefi-rtc-info");
|
||||
if (!rtc_dd->use_uefi)
|
||||
return 0;
|
||||
|
||||
if (!efivar_is_available()) {
|
||||
if (IS_ENABLED(CONFIG_EFI))
|
||||
return -EPROBE_DEFER;
|
||||
|
||||
dev_warn(rtc_dd->dev, "efivars not available\n");
|
||||
rtc_dd->use_uefi = false;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return pm8xxx_rtc_read_uefi_offset(rtc_dd);
|
||||
}
|
||||
|
||||
static int pm8xxx_rtc_probe(struct platform_device *pdev)
|
||||
|
|
|
|||
Loading…
Reference in New Issue