[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <199d34bc514d4fbf2058a862918dc6a71390c48f.1566895445.git.rahul.tanwar@linux.intel.com>
Date: Tue, 27 Aug 2019 17:26:21 +0800
From: Rahul Tanwar <rahul.tanwar@...ux.intel.com>
To: tglx@...utronix.de, mingo@...hat.com, bp@...en8.de, hpa@...or.com,
tony.luck@...el.com, x86@...nel.org
Cc: andriy.shevchenko@...el.com, alan@...ux.intel.com,
linux-kernel@...r.kernel.org, qi-ming.wu@...el.com,
chuanhua.lei@...ux.intel.com, cheol.yong.kim@...el.com,
rahul.tanwar@...el.com, Rahul Tanwar <rahul.tanwar@...ux.intel.com>
Subject: [PATCH v2 1/1] x86/init: Noop get/set wallclock when platform doesn't support RTC
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.shevchenko@...el.com>
Signed-off-by: Rahul Tanwar <rahul.tanwar@...ux.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 1bef687faf22..88c120710d5d 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" },
+ {}
+};
+
+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
Powered by blists - more mailing lists