This is an automated email from the ASF dual-hosted git repository.
jerpelea pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new 634d8a12727 arch/sim: register RTC after clock initialization
634d8a12727 is described below
commit 634d8a12727a5b6b1230a4fb826ec9924f38bdbb
Author: hanzhijian <[email protected]>
AuthorDate: Fri Jul 24 10:07:07 2026 +0800
arch/sim: register RTC after clock initialization
Registering /dev/rtc0 from up_rtc_initialize() creates the pseudofs inode
before clock_inittime() synchronizes CLOCK_REALTIME. Its timestamp is
consequently zero and omitted by ls -l.
Keep lower-half setup in early RTC initialization, but defer
character-device registration to up_initialize(), which runs after clock
initialization.
Fixes #19504
Signed-off-by: hanzhijian <[email protected]>
---
arch/sim/src/sim/sim_initialize.c | 8 ++++++++
arch/sim/src/sim/sim_internal.h | 6 ++++++
arch/sim/src/sim/sim_rtc.c | 25 ++++++++++++++++++++++++-
3 files changed, 38 insertions(+), 1 deletion(-)
diff --git a/arch/sim/src/sim/sim_initialize.c
b/arch/sim/src/sim/sim_initialize.c
index 45584ed8ed3..94a7aedc794 100644
--- a/arch/sim/src/sim/sim_initialize.c
+++ b/arch/sim/src/sim/sim_initialize.c
@@ -266,6 +266,14 @@ void up_initialize(void)
sim_init_cmdline();
#endif
+#ifdef CONFIG_RTC_DRIVER
+ /* Register the RTC after clock_initialize() has synchronized system
+ * time.
+ */
+
+ sim_rtc_initialize();
+#endif
+
/* Register some tty-port to access tty-port on sim platform */
sim_uartinit();
diff --git a/arch/sim/src/sim/sim_internal.h b/arch/sim/src/sim/sim_internal.h
index 82349ada14c..40aa562c18f 100644
--- a/arch/sim/src/sim/sim_internal.h
+++ b/arch/sim/src/sim/sim_internal.h
@@ -276,6 +276,12 @@ int sim_init_func_call_ipi(int irq);
void sim_timer_update(void);
#endif
+/* sim_rtc.c ****************************************************************/
+
+#ifdef CONFIG_RTC_DRIVER
+int sim_rtc_initialize(void);
+#endif
+
/* sim_uart.c ***************************************************************/
void sim_uartinit(void);
diff --git a/arch/sim/src/sim/sim_rtc.c b/arch/sim/src/sim/sim_rtc.c
index 10f5c745f65..656ae070d29 100644
--- a/arch/sim/src/sim/sim_rtc.c
+++ b/arch/sim/src/sim/sim_rtc.c
@@ -59,6 +59,7 @@ static struct rtc_lowerhalf_s g_sim_rtc =
.ops = &g_sim_rtc_ops,
};
+static struct rtc_lowerhalf_s *g_sim_rtc_lower;
static int64_t g_sim_delta;
/****************************************************************************
@@ -134,6 +135,28 @@ int up_rtc_initialize(void)
rtc = rpmsg_rtc_initialize();
sync = false;
#endif
+
+ g_sim_rtc_lower = rtc;
up_rtc_set_lowerhalf(rtc, sync);
- return rtc_initialize(0, rtc);
+ return OK;
+}
+
+/****************************************************************************
+ * Name: sim_rtc_initialize
+ *
+ * Description:
+ * Register the SIM RTC driver after the system clock has been initialized.
+ * This ensures that the /dev/rtc0 inode receives a valid timestamp.
+ *
+ * Input Parameters:
+ * None
+ *
+ * Returned Value:
+ * Zero (OK) on success; a negated errno on failure
+ *
+ ****************************************************************************/
+
+int sim_rtc_initialize(void)
+{
+ return rtc_initialize(0, g_sim_rtc_lower);
}