From 478429dcecb7032afe0e357dcd2dd1040d65b510 Mon Sep 17 00:00:00 2001 From: Alexey Sheplyakov Date: Mon, 23 May 2022 19:28:42 +0400 Subject: [PATCH 606/631] efi-rtc: avoid calling efi.get_time on Baikal-M SoC Old versions of Baikal-M UEFI (before SDK-M 4.4) do NOT provide get_time at the runtime (not even as a stub), hence calling it results in an Oops. Signed-off-by: Alexey Sheplyakov X-DONTUPSTREAM X-legacy X-feature-Baikal-M --- drivers/rtc/rtc-efi.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/rtc/rtc-efi.c b/drivers/rtc/rtc-efi.c index 11850c2880ad..84fcd6ff092e 100644 --- a/drivers/rtc/rtc-efi.c +++ b/drivers/rtc/rtc-efi.c @@ -17,6 +17,7 @@ #include #include #include +#include #define EFI_ISDST (EFI_TIME_ADJUST_DAYLIGHT|EFI_TIME_IN_DAYLIGHT) @@ -257,6 +258,15 @@ static int __init efi_rtc_probe(struct platform_device *dev) efi_time_t eft; efi_time_cap_t cap; +#ifdef CONFIG_OF + /* efi.get_time is not always safe to call since some UEFI + * implementations do not privde get_time at runtime. */ + if (of_device_is_compatible(of_root, "baikal,baikal-m") || + of_device_is_compatible(of_root, "baikal,bm1000")) { + dev_err(&dev->dev, "Baikal-M UEFI has no get_time\n"); + return -ENODEV; + } +#endif /* First check if the RTC is usable */ if (efi.get_time(&eft, &cap) != EFI_SUCCESS) return -ENODEV; -- 2.35.2