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 = .;
