diff --git a/include/linux/rtc.h b/include/linux/rtc.h
index 0a0f0d14a5fb..779401c937d5 100644
--- a/include/linux/rtc.h
+++ b/include/linux/rtc.h
@@ -22,6 +22,11 @@ extern int rtc_year_days(unsigned int day, unsigned int month, unsigned int year
 extern int rtc_valid_tm(struct rtc_time *tm);
 extern time64_t rtc_tm_to_time64(struct rtc_time *tm);
 extern void rtc_time64_to_tm(time64_t time, struct rtc_time *tm);
+#ifdef CONFIG_RTC_SHOW_TIME
+extern void rtc_show_time(const char *prefix_msg);
+#else
+static inline void rtc_show_time(const char *prefix_msg) { }
+#endif
 ktime_t rtc_tm_to_ktime(struct rtc_time tm);
 struct rtc_time rtc_ktime_to_tm(ktime_t kt);
 
diff --git a/kernel/time/Kconfig b/kernel/time/Kconfig
index ac09bc29eb08..2dc891056635 100644
--- a/kernel/time/Kconfig
+++ b/kernel/time/Kconfig
@@ -145,3 +145,80 @@ config HIGH_RES_TIMERS
 
 endmenu
 endif
+
+config RTC_SHOW_TIME
+	bool
+	help
+	  Activate optional rtc_show_time(const char *msg) wall clock
+	  time instrumentation.
+
+	  The primary use of the instrumentation is to aid field
+	  analysis of Battery and Power usage.  The instrumentation
+	  may also help triage and synchronize kernel logs and user
+	  space activity logs at key displacements.  For instance
+	  CLOCK_MONOTONIC stops while suspended, while CLOCK_REALTIME
+	  continues, and the timestamps help re-orient post-analysis.
+
+	  Select the appropriate RTC_SHOW_TIME_<type>
+
+choice
+	prompt "choose a clock for rtc_show_time"
+	config RTC_SHOW_TIME_NONE
+		bool "not activated"
+		help
+		  Turn off all printing associated with rtc_show_time
+
+		  The primary use of the instrumentation is to aid field
+		  analysis of Battery and Power usage.  The instrumentation
+		  may also help triage and synchronize kernel logs and user
+		  space activity logs at key displacements.  For instance
+		  CLOCK_MONOTONIC stops while suspended, while CLOCK_REALTIME
+		  continues, and the timestamps help re-orient post-analysis.
+
+		  This is the default behavior.
+	config RTC_SHOW_TIME_REALTIME
+		bool "realtime"
+		select RTC_SHOW_TIME
+		help
+		  Activate optional rtc_show_time(const char *msg) wall clock
+		  time instrumentation.
+
+		  The primary use of the instrumentation is to aid field
+		  analysis of Battery and Power usage.  The instrumentation
+		  may also help triage and synchronize kernel logs and user
+		  space activity logs at key displacements.  For instance
+		  CLOCK_MONOTONIC stops while suspended, while CLOCK_REALTIME
+		  continues, and the timestamps help re-orient post-analysis.
+
+		  Print realtime <epoch>.<ns> timestamp in rtc_show_time
+	config RTC_SHOW_TIME_MONOTONIC
+		bool "monotonic"
+		select RTC_SHOW_TIME
+		help
+		  Activate optional rtc_show_time(const char *msg) wall clock
+		  time instrumentation.
+
+		  The primary use of the instrumentation is to aid field
+		  analysis of Battery and Power usage.  The instrumentation
+		  may also help triage and synchronize kernel logs and user
+		  space activity logs at key displacements.  For instance
+		  CLOCK_MONOTONIC stops while suspended, while CLOCK_REALTIME
+		  continues, and the timestamps help re-orient post-analysis.
+
+		  Print only the supplied message in rtc_show_time
+	config RTC_SHOW_TIME_BOOTTIME
+		bool "boottime"
+		select RTC_SHOW_TIME
+		help
+		  Activate optional rtc_show_time(const char *msg) wall clock
+		  time instrumentation.
+
+		  The primary use of the instrumentation is to aid field
+		  analysis of Battery and Power usage.  The instrumentation
+		  may also help triage and synchronize kernel logs and user
+		  space activity logs at key displacements.  For instance
+		  CLOCK_MONOTONIC stops while suspended, while CLOCK_REALTIME
+		  continues, and the timestamps help re-orient post-analysis.
+
+		  Print boottime <s>.<ns> timestamp in rtc_show_time
+endchoice
diff --git a/kernel/time/Makefile b/kernel/time/Makefile
index 938dbf33ef49..66f17e641052 100644
--- a/kernel/time/Makefile
+++ b/kernel/time/Makefile
@@ -17,3 +17,4 @@ obj-$(CONFIG_GENERIC_SCHED_CLOCK)		+= sched_clock.o
 obj-$(CONFIG_TICK_ONESHOT)			+= tick-oneshot.o tick-sched.o
 obj-$(CONFIG_DEBUG_FS)				+= timekeeping_debug.o
 obj-$(CONFIG_TEST_UDELAY)			+= test_udelay.o
+obj-$(CONFIG_RTC_SHOW_TIME)			+= rtc_show_time.o
diff --git a/kernel/time/rtc_show_time.c b/kernel/time/rtc_show_time.c
new file mode 100644
index 000000000000..19a8a0cc94f0
--- /dev/null
+++ b/kernel/time/rtc_show_time.c
@@ -0,0 +1,29 @@
+/*
+ * rtc time printing utility functions
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/rtc.h>
+
+void rtc_show_time(const char *prefix_msg)
+{
+#if defined(CONFIG_RTC_SHOW_TIME_MONOTONIC) /* dmesg is in monotonic */
+	pr_info("%s\n", prefix_msg ? prefix_msg : "Time:");
+#elif defined(CONFIG_RTC_SHOW_TIME_BOOTTIME)
+	struct timespec64 ts;
+
+	getboottime64(&ts);
+	pr_info("%s %lu.%09lu B\n",
+		prefix_msg ? prefix_msg : "Time:", ts.tv_sec, ts.tv_nsec);
+#else /* realtime */
+	struct timespec64 ts;
+
+	getnstimeofday64(&ts);
+	pr_info("%s %lu.%09lu UTC\n",
+		prefix_msg ? prefix_msg : "Time:", ts.tv_sec, ts.tv_nsec);
+#endif
+}
+EXPORT_SYMBOL(rtc_show_time);
