diff --git a/arch/arm64/include/a64/chip.h b/arch/arm64/include/a64/chip.h index ef6eb593864..85e0d5607e1 100644 --- a/arch/arm64/include/a64/chip.h +++ b/arch/arm64/include/a64/chip.h @@ -54,4 +54,17 @@ #define CONFIG_LOAD_BASE 0x40080000 +/**************************************************************************** + * Assembly Macros + ****************************************************************************/ + +#ifdef __ASSEMBLY__ + +.macro get_cpu_id xreg0 + mrs \xreg0, mpidr_el1 + ubfx \xreg0, \xreg0, #0, #8 +.endm + +#endif /* __ASSEMBLY__ */ + #endif /* __ARCH_ARM64_INCLUDE_A64_CHIP_H */ diff --git a/arch/arm64/include/fvp-v8r/chip.h b/arch/arm64/include/fvp-v8r/chip.h index a6dcffa355e..b37126473ef 100644 --- a/arch/arm64/include/fvp-v8r/chip.h +++ b/arch/arm64/include/fvp-v8r/chip.h @@ -27,6 +27,10 @@ #include +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + /* Number of bytes in @p x kibibytes/mebibytes/gibibytes */ #define KB(x) ((x) << 10) @@ -73,4 +77,17 @@ #endif +/**************************************************************************** + * Assembly Macros + ****************************************************************************/ + +#ifdef __ASSEMBLY__ + +.macro get_cpu_id xreg0 + mrs \xreg0, mpidr_el1 + ubfx \xreg0, \xreg0, #0, #8 +.endm + +#endif /* __ASSEMBLY__ */ + #endif /* __ARCH_ARM64_INCLUDE_FVP_V8R_CHIP_H */ diff --git a/arch/arm64/include/qemu/chip.h b/arch/arm64/include/qemu/chip.h index 3bec3877754..0703552d24e 100644 --- a/arch/arm64/include/qemu/chip.h +++ b/arch/arm64/include/qemu/chip.h @@ -27,6 +27,10 @@ #include +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + /* Number of bytes in @p x kibibytes/mebibytes/gibibytes */ #define KB(x) ((x) << 10) @@ -63,4 +67,17 @@ #endif +/**************************************************************************** + * Assembly Macros + ****************************************************************************/ + +#ifdef __ASSEMBLY__ + +.macro get_cpu_id xreg0 + mrs \xreg0, mpidr_el1 + ubfx \xreg0, \xreg0, #0, #8 +.endm + +#endif /* __ASSEMBLY__ */ + #endif /* __ARCH_ARM64_INCLUDE_QEMU_CHIP_H */ diff --git a/arch/arm64/src/common/arm64_cpustart.c b/arch/arm64/src/common/arm64_cpustart.c index 4b7273cd69b..46cc50ef3e2 100644 --- a/arch/arm64/src/common/arm64_cpustart.c +++ b/arch/arm64/src/common/arm64_cpustart.c @@ -58,7 +58,7 @@ typedef void (*arm64_cpustart_t)(void *data); struct arm64_boot_params { - uint64_t mpid; + uint64_t cpuid; char *boot_sp; arm64_cpustart_t func; void *arg; @@ -69,7 +69,7 @@ struct arm64_boot_params volatile struct arm64_boot_params aligned_data(L1_CACHE_BYTES) cpu_boot_params = { - .mpid = -1, + .cpuid = -1, .boot_sp = (char *)g_cpu_idlestackalloc[0], }; @@ -142,9 +142,9 @@ static void arm64_smp_init_top(void *arg) static void arm64_start_cpu(int cpu_num, char *stack, int stack_sz, arm64_cpustart_t fn) { - uint64_t cpu_mpid; - - cpu_mpid = arm64_get_mpid(cpu_num); +#ifdef CONFIG_ARCH_HAVE_PSCI + uint64_t cpu_mpid = arm64_get_mpid(cpu_num); +#endif #ifdef CONFIG_SCHED_INSTRUMENTATION @@ -164,7 +164,7 @@ static void arm64_start_cpu(int cpu_num, char *stack, int stack_sz, /* store mpid last as this is our synchronization point */ - cpu_boot_params.mpid = cpu_mpid; + cpu_boot_params.cpuid = cpu_num; flush_boot_params(); diff --git a/arch/arm64/src/common/arm64_head.S b/arch/arm64/src/common/arm64_head.S index a4aa0b73d57..18ea5c97ea7 100644 --- a/arch/arm64/src/common/arm64_head.S +++ b/arch/arm64/src/common/arm64_head.S @@ -25,6 +25,7 @@ #include +#include #include "arm64_arch.h" #include "arm64_internal.h" #include "arm64_macro.inc" diff --git a/arch/arm64/src/common/arm64_macro.inc b/arch/arm64/src/common/arm64_macro.inc index 95a203acdea..6dd622d1ba6 100644 --- a/arch/arm64/src/common/arm64_macro.inc +++ b/arch/arm64/src/common/arm64_macro.inc @@ -25,16 +25,6 @@ #ifndef __ARCH_ARM64_SRC_COMMON_ARM64_MACRO_INC #define __ARCH_ARM64_SRC_COMMON_ARM64_MACRO_INC -/* - * Get CPU id - */ - -.macro get_cpu_id xreg0 - mrs \xreg0, mpidr_el1 - /* FIMXME: aff3 not taken into consideration */ - ubfx \xreg0, \xreg0, #0, #24 -.endm - .macro switch_el, xreg, el3_label, el2_label, el1_label mrs \xreg, CurrentEL cmp \xreg, 0xc diff --git a/arch/arm64/src/common/arm64_vectors.S b/arch/arm64/src/common/arm64_vectors.S index b16108b5233..ae89f10b2ae 100644 --- a/arch/arm64/src/common/arm64_vectors.S +++ b/arch/arm64/src/common/arm64_vectors.S @@ -24,6 +24,7 @@ #include +#include #include "arch/syscall.h" #include "arm64_macro.inc" #include "arch/irq.h"