summaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/arm64/c_entry.c1
-rw-r--r--src/arch/arm64/cpu.c1
-rw-r--r--src/arch/arm64/include/armv8/arch/cpu.h13
3 files changed, 15 insertions, 0 deletions
diff --git a/src/arch/arm64/c_entry.c b/src/arch/arm64/c_entry.c
index 4e5c1510c0..f4a9848ee1 100644
--- a/src/arch/arm64/c_entry.c
+++ b/src/arch/arm64/c_entry.c
@@ -56,6 +56,7 @@ static void seed_stack(void)
void arm64_init(void)
{
+ cpu_set_bsp();
seed_stack();
arm64_soc_init();
main();
diff --git a/src/arch/arm64/cpu.c b/src/arch/arm64/cpu.c
index c0dc3c3fa2..a263e1b873 100644
--- a/src/arch/arm64/cpu.c
+++ b/src/arch/arm64/cpu.c
@@ -27,6 +27,7 @@
#include "cpu-internal.h"
static struct cpu_info cpu_infos[CONFIG_MAX_CPUS];
+struct cpu_info *bsp_cpu_info;
static inline struct cpu_info *cpu_info_for_cpu(unsigned int id)
{
diff --git a/src/arch/arm64/include/armv8/arch/cpu.h b/src/arch/arm64/include/armv8/arch/cpu.h
index d2623857aa..8d071adc61 100644
--- a/src/arch/arm64/include/armv8/arch/cpu.h
+++ b/src/arch/arm64/include/armv8/arch/cpu.h
@@ -66,6 +66,19 @@ struct cpu_info {
/* Obtain cpu_info for current executing CPU. */
struct cpu_info *cpu_info(void);
+extern struct cpu_info *bsp_cpu_info;
+
+/* Ran only by BSP at initial boot strapping. */
+static inline void cpu_set_bsp(void)
+{
+ bsp_cpu_info = cpu_info();
+}
+
+static inline int cpu_is_bsp(void)
+{
+ return cpu_info() == bsp_cpu_info;
+}
+
/* Control routines for starting CPUs. */
struct cpu_control_ops {
/* Return the maximum number of CPUs supported. */