This is an automated email from the ASF dual-hosted git repository.

ligd pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 78d05ff811c4f2171ed790b7eca759073cda8505
Author: hujun5 <[email protected]>
AuthorDate: Thu Jun 12 19:07:44 2025 +0800

    arm64: remove busy wait flag
    
    Replace CONFIG_ARM64_SMP_BUSY_WAIT_FLAG_ADDR with global variable 
g_smp_busy_wait_flag for
    SMP CPU synchronization. This improves flexibility over fixed memory 
addresses and aligns
    with standard kernel variable patterns for multi-core startup.
    
    Signed-off-by: hujun5 <[email protected]>
---
 arch/arm64/Kconfig                                         | 11 -----------
 arch/arm64/src/common/arm64_cpustart.c                     |  6 ++++--
 arch/arm64/src/common/arm64_head.S                         |  8 +++-----
 boards/arm64/fvp-v8r/fvp-armv8r/configs/nsh_smp/defconfig  |  2 --
 boards/arm64/fvp-v8r/fvp-armv8r/configs/pnsh_smp/defconfig |  2 --
 boards/arm64/fvp-v8r/fvp-armv8r/scripts/dramboot.ld        |  3 ---
 6 files changed, 7 insertions(+), 25 deletions(-)

diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index d4762cf3086..d465216c7ef 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -217,17 +217,6 @@ config ARM64_TBI
        bool "Top Byte Ignore support"
        default n
 
-config ARM64_SMP_BUSY_WAIT
-       bool "Busy wait when SMP boot"
-       default n
-       depends on SMP
-       ---help---
-               Enables busy wait when SMP boot
-
-config ARM64_SMP_BUSY_WAIT_FLAG_ADDR
-       hex "Busy wait flag address"
-       depends on ARM64_SMP_BUSY_WAIT
-
 config ARCH_HAVE_EL3
        bool
        default n
diff --git a/arch/arm64/src/common/arm64_cpustart.c 
b/arch/arm64/src/common/arm64_cpustart.c
index 78b13970bd0..03d51f146f4 100644
--- a/arch/arm64/src/common/arm64_cpustart.c
+++ b/arch/arm64/src/common/arm64_cpustart.c
@@ -76,6 +76,8 @@ uint64_t *const g_cpu_int_stacktop[CONFIG_SMP_NCPUS] =
 #endif /* CONFIG_SMP_NCPUS > 1 */
 };
 
+uint32_t g_smp_busy_wait_flag;
+
 #ifdef CONFIG_ARM64_DECODEFIQ
 uint64_t *const g_cpu_int_fiq_stacktop[CONFIG_SMP_NCPUS] =
 {
@@ -198,8 +200,8 @@ int up_cpu_start(int cpu)
   sched_note_cpu_start(this_task(), cpu);
 #endif
 
-#ifdef CONFIG_ARM64_SMP_BUSY_WAIT
-  uint32_t *address = (uint32_t *)CONFIG_ARM64_SMP_BUSY_WAIT_FLAG_ADDR;
+#ifdef CONFIG_SMP
+  uint32_t *address = &g_smp_busy_wait_flag;
   *address = 1;
   up_flush_dcache((uintptr_t)address, (uintptr_t)address + sizeof(address));
 #endif
diff --git a/arch/arm64/src/common/arm64_head.S 
b/arch/arm64/src/common/arm64_head.S
index de4d7132453..d219cf6c4dc 100644
--- a/arch/arm64/src/common/arm64_head.S
+++ b/arch/arm64/src/common/arm64_head.S
@@ -143,13 +143,11 @@ real_start:
 
     /* Wait until cpu0 notify */
 
-#ifdef CONFIG_ARM64_SMP_BUSY_WAIT
-    ldr    x2, =CONFIG_ARM64_SMP_BUSY_WAIT_FLAG_ADDR
+    ldr    x2, =g_smp_busy_wait_flag
 1:
-    ldr    x3, [x2, #0]
-    cmp    x3, #0
+    ldr    w3, [x2, #0]
+    cmp    w3, #0
     beq    1b
-#endif
 
     /* we can now load our stack pointer value and move on */
 
diff --git a/boards/arm64/fvp-v8r/fvp-armv8r/configs/nsh_smp/defconfig 
b/boards/arm64/fvp-v8r/fvp-armv8r/configs/nsh_smp/defconfig
index e035f186036..8b0d1e8311d 100644
--- a/boards/arm64/fvp-v8r/fvp-armv8r/configs/nsh_smp/defconfig
+++ b/boards/arm64/fvp-v8r/fvp-armv8r/configs/nsh_smp/defconfig
@@ -14,8 +14,6 @@ CONFIG_ARCH_CHIP_FVP_ARMV8R=y
 CONFIG_ARCH_CHIP_FVP_R82=y
 CONFIG_ARCH_EARLY_PRINT=y
 CONFIG_ARCH_INTERRUPTSTACK=4096
-CONFIG_ARM64_SMP_BUSY_WAIT=y
-CONFIG_ARM64_SMP_BUSY_WAIT_FLAG_ADDR=0x4000000
 CONFIG_ARM64_STRING_FUNCTION=y
 CONFIG_BUILTIN=y
 CONFIG_DEBUG_ASSERTIONS=y
diff --git a/boards/arm64/fvp-v8r/fvp-armv8r/configs/pnsh_smp/defconfig 
b/boards/arm64/fvp-v8r/fvp-armv8r/configs/pnsh_smp/defconfig
index cc4f8c70a0d..e1ff94acb20 100644
--- a/boards/arm64/fvp-v8r/fvp-armv8r/configs/pnsh_smp/defconfig
+++ b/boards/arm64/fvp-v8r/fvp-armv8r/configs/pnsh_smp/defconfig
@@ -18,8 +18,6 @@ CONFIG_ARCH_INTERRUPTSTACK=4096
 CONFIG_ARCH_KERNEL_STACK=y
 CONFIG_ARCH_KERNEL_STACKSIZE=8192
 CONFIG_ARCH_USE_MPU=y
-CONFIG_ARM64_SMP_BUSY_WAIT=y
-CONFIG_ARM64_SMP_BUSY_WAIT_FLAG_ADDR=0x400000
 CONFIG_ARM64_STRING_FUNCTION=y
 CONFIG_BUILD_PROTECTED=y
 CONFIG_BUILTIN=y
diff --git a/boards/arm64/fvp-v8r/fvp-armv8r/scripts/dramboot.ld 
b/boards/arm64/fvp-v8r/fvp-armv8r/scripts/dramboot.ld
index e76f593a0e3..713c4495005 100644
--- a/boards/arm64/fvp-v8r/fvp-armv8r/scripts/dramboot.ld
+++ b/boards/arm64/fvp-v8r/fvp-armv8r/scripts/dramboot.ld
@@ -59,9 +59,6 @@ SECTIONS
 
   .bss : {                     /* BSS */
        _sbss = . ;
-#if defined(CONFIG_SMP) && defined(CONFIG_ARM64_SMP_BUSY_WAIT)
-       . = . + 0x4;          /* Busy Wait Flag */
-#endif
        *(.bss*)
        . = ALIGN(4096);
        _ebss = .;

Reply via email to