From 1402fe12e96de316af6df1ed38fbfa9b73601809 Mon Sep 17 00:00:00 2001 From: Wang_Weigen Date: Tue, 18 May 2021 15:49:27 +0800 Subject: [PATCH] fix bug of smp startup --- arch/risc-v/k210/boot.S | 4 ++-- board/aiit-riscv64-board/board.c | 13 ++++++++----- board/k210-emulator/board.c | 14 +++++++++----- board/kd233/board.c | 13 ++++++++----- board/maix-go/board.c | 13 ++++++++----- 5 files changed, 35 insertions(+), 22 deletions(-) diff --git a/arch/risc-v/k210/boot.S b/arch/risc-v/k210/boot.S index 306bf66f..1e8c9b9d 100644 --- a/arch/risc-v/k210/boot.S +++ b/arch/risc-v/k210/boot.S @@ -70,13 +70,13 @@ _begin: j Kd233Start -#ifdef ARCH_SMP + .data .globl cpu2_boot_flag .align 3 cpu2_boot_flag: .8byte 0 -#endif + .section .text.entry .align 2 diff --git a/board/aiit-riscv64-board/board.c b/board/aiit-riscv64-board/board.c index ac170e5f..f92e554f 100644 --- a/board/aiit-riscv64-board/board.c +++ b/board/aiit-riscv64-board/board.c @@ -84,14 +84,17 @@ void Kd233Start(uint32_t mhartid) /*kernel start entry*/ entry(); break; -#ifdef ARCH_SMP case CPU1: while(0x2018050420191010 != cpu2_boot_flag) { ///< waiting for boot flag ,then start cpu1 core - - } - SecondaryCpuCStart(); - break; +#ifndef ARCH_SMP + asm volatile("wfi"); #endif + } +#ifdef ARCH_SMP + SecondaryCpuCStart(); +#endif + break; + default: break; } diff --git a/board/k210-emulator/board.c b/board/k210-emulator/board.c index 0b9f6fa6..95826dfc 100644 --- a/board/k210-emulator/board.c +++ b/board/k210-emulator/board.c @@ -82,14 +82,18 @@ void Kd233Start(uint32_t mhartid) /*kernel start entry*/ entry(); break; -#ifdef ARCH_SMP + case CPU1: while(0x2018050420191010 != cpu2_boot_flag) { ///< waiting for boot flag ,then start cpu1 core - - } - SecondaryCpuCStart(); - break; +#ifndef ARCH_SMP + asm volatile("wfi"); #endif + } +#ifdef ARCH_SMP + SecondaryCpuCStart(); +#endif + break; + default: break; } diff --git a/board/kd233/board.c b/board/kd233/board.c index be0bb2e1..0aededed 100644 --- a/board/kd233/board.c +++ b/board/kd233/board.c @@ -81,14 +81,17 @@ void Kd233Start(uint32_t mhartid) /*kernel start entry*/ entry(); break; -#ifdef ARCH_SMP case CPU1: while(0x2018050420191010 != cpu2_boot_flag) { ///< waiting for boot flag ,then start cpu1 core - - } - SecondaryCpuCStart(); - break; +#ifndef ARCH_SMP + asm volatile("wfi"); #endif + } +#ifdef ARCH_SMP + SecondaryCpuCStart(); +#endif + break; + default: break; } diff --git a/board/maix-go/board.c b/board/maix-go/board.c index 9d26d1dc..23fef717 100644 --- a/board/maix-go/board.c +++ b/board/maix-go/board.c @@ -77,14 +77,17 @@ void Kd233Start(uint32_t mhartid) /*kernel start entry*/ entry(); break; -#ifdef ARCH_SMP case CPU1: while(0x2018050420191010 != cpu2_boot_flag) { ///< waiting for boot flag ,then start cpu1 core - - } - SecondaryCpuCStart(); - break; +#ifndef ARCH_SMP + asm volatile("wfi"); #endif + } +#ifdef ARCH_SMP + SecondaryCpuCStart(); +#endif + break; + default: break; }