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);
 }

Reply via email to