Browse Source

timekeeping: Add CONFIG_HAS_PERSISTENT_CLOCK option

Make the persistent clock check a kernel config option, so that some
platform can explicitely select it, also make CONFIG_RTC_HCTOSYS and
RTC_SYSTOHC depend on its non-existence, which could prevent the
persistent clock and RTC code from doing similar thing twice during
system's init/suspend/resume phases.

If the CONFIG_HAS_PERSISTENT_CLOCK=n, then no change happens for kernel
which still does the persistent clock check in timekeeping_init().

Cc: Thomas Gleixner <tglx@linutronix.de>
Suggested-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Feng Tang <feng.tang@intel.com>
[jstultz: Added dependency for RTC_SYSTOHC as well]
Signed-off-by: John Stultz <john.stultz@linaro.org>
Feng Tang 12 years ago
parent
commit
05ad717c77
3 changed files with 12 additions and 0 deletions
  1. 2 0
      drivers/rtc/Kconfig
  2. 5 0
      include/linux/time.h
  3. 5 0
      kernel/time/Kconfig

+ 2 - 0
drivers/rtc/Kconfig

@@ -20,6 +20,7 @@ if RTC_CLASS
 config RTC_HCTOSYS
 config RTC_HCTOSYS
 	bool "Set system time from RTC on startup and resume"
 	bool "Set system time from RTC on startup and resume"
 	default y
 	default y
+	depends on !HAS_PERSISTENT_CLOCK
 	help
 	help
 	  If you say yes here, the system time (wall clock) will be set using
 	  If you say yes here, the system time (wall clock) will be set using
 	  the value read from a specified RTC device. This is useful to avoid
 	  the value read from a specified RTC device. This is useful to avoid
@@ -28,6 +29,7 @@ config RTC_HCTOSYS
 config RTC_SYSTOHC
 config RTC_SYSTOHC
 	bool "Set the RTC time based on NTP synchronization"
 	bool "Set the RTC time based on NTP synchronization"
 	default y
 	default y
+	depends on !HAS_PERSISTENT_CLOCK
 	help
 	help
 	  If you say yes here, the system time (wall clock) will be stored
 	  If you say yes here, the system time (wall clock) will be stored
 	  in the RTC specified by RTC_HCTOSYS_DEVICE approximately every 11
 	  in the RTC specified by RTC_HCTOSYS_DEVICE approximately every 11

+ 5 - 0
include/linux/time.h

@@ -116,10 +116,15 @@ static inline bool timespec_valid_strict(const struct timespec *ts)
 }
 }
 
 
 extern bool persistent_clock_exist;
 extern bool persistent_clock_exist;
+
+#ifdef CONFIG_HAS_PERSISTENT_CLOCK
+#define has_persistent_clock()	true
+#else
 static inline bool has_persistent_clock(void)
 static inline bool has_persistent_clock(void)
 {
 {
 	return persistent_clock_exist;
 	return persistent_clock_exist;
 }
 }
+#endif
 
 
 extern void read_persistent_clock(struct timespec *ts);
 extern void read_persistent_clock(struct timespec *ts);
 extern void read_boot_clock(struct timespec *ts);
 extern void read_boot_clock(struct timespec *ts);

+ 5 - 0
kernel/time/Kconfig

@@ -12,6 +12,11 @@ config CLOCKSOURCE_WATCHDOG
 config ARCH_CLOCKSOURCE_DATA
 config ARCH_CLOCKSOURCE_DATA
 	bool
 	bool
 
 
+# Platforms has a persistent clock
+config HAS_PERSISTENT_CLOCK
+	bool
+	default n
+
 # Timekeeping vsyscall support
 # Timekeeping vsyscall support
 config GENERIC_TIME_VSYSCALL
 config GENERIC_TIME_VSYSCALL
 	bool
 	bool