Use wallclock_init() op to detect platforms which does not support RTC and
noop get/set wallclock ops for such platforms.

Suggested-by: Andy Shevchenko <andriy.shevche...@intel.com>
Signed-off-by: Rahul Tanwar <rahul.tan...@linux.intel.com>
---
 arch/x86/kernel/x86_init.c | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/arch/x86/kernel/x86_init.c b/arch/x86/kernel/x86_init.c
index 18a799c8fa28..4f572fd942eb 100644
--- a/arch/x86/kernel/x86_init.c
+++ b/arch/x86/kernel/x86_init.c
@@ -31,6 +31,30 @@ static int __init iommu_init_noop(void) { return 0; }
 static void iommu_shutdown_noop(void) { }
 bool __init bool_x86_init_noop(void) { return false; }
 void x86_op_int_noop(int cpu) { }
+static int set_rtc_noop(const struct timespec64 *now) { return -EINVAL; }
+static void get_rtc_noop(struct timespec64 *now) { }
+
+static const struct of_device_id of_cmos_match[] = {
+       { .compatible = "motorola,mc146818" },
+       {}
+};
+
+static void x86_wallclock_init(void)
+{
+       struct device_node *node;
+
+       node = of_find_matching_node(NULL, of_cmos_match);
+       if (node && !of_device_is_available(node)) {
+               /*
+                * Some products do not support RTC as persistent clock source. 
This can be
+                * optionally indicated by having status property as disabled 
in the
+                * corresponding DT node. Override get/set wallclock routines 
to noops for
+                * such products.
+                */
+               x86_platform.get_wallclock = get_rtc_noop;
+               x86_platform.set_wallclock = set_rtc_noop;
+       }
+}
 
 /*
  * The platform setup functions are preset with the default functions
@@ -73,7 +97,7 @@ struct x86_init_ops x86_init __initdata = {
        .timers = {
                .setup_percpu_clockev   = setup_boot_APIC_clock,
                .timer_init             = hpet_time_init,
-               .wallclock_init         = x86_init_noop,
+               .wallclock_init         = x86_wallclock_init,
        },
 
        .iommu = {
-- 
2.11.0

Reply via email to