diff --git a/plat/juno/aarch64/plat_helpers.S b/plat/juno/aarch64/plat_helpers.S index 00e8850..cd6cbde 100644 --- a/plat/juno/aarch64/plat_helpers.S +++ b/plat/juno/aarch64/plat_helpers.S @@ -46,3 +46,31 @@ plat_report_exception: /* Juno todo: Come up with a way of reporting errors */ ret + + /* + * Return 0 to 3 for the A53s and 4 or 5 for the A57s + */ + .globl platform_get_core_pos +platform_get_core_pos:; .type platform_get_core_pos, %function + and x1, x0, #MPIDR_CPU_MASK + and x0, x0, #MPIDR_CLUSTER_MASK + eor x0, x0, #(1 << MPIDR_AFFINITY_BITS) // swap A53/A57 order + add x0, x1, x0, LSR #6 + ret + + + /* ----------------------------------------------------- + * void platform_is_primary_cpu (unsigned int mpid); + * + * Given the mpidr say whether this cpu is the primary + * cpu (applicable ony after a cold boot) + * ----------------------------------------------------- + */ + .globl platform_is_primary_cpu +platform_is_primary_cpu:; .type platform_is_primary_cpu, %function + /* Warning: this function is called without a valid stack */ + /* Juno todo: allow configuration of primary CPU using SCC */ + and x0, x0, #(MPIDR_CLUSTER_MASK | MPIDR_CPU_MASK) + cmp x0, #PRIMARY_CPU + cset x0, eq + ret diff --git a/plat/juno/platform.h b/plat/juno/platform.h index 3656a51..2728988 100644 --- a/plat/juno/platform.h +++ b/plat/juno/platform.h @@ -74,7 +74,7 @@ #define PLATFORM_CORE_COUNT (PLATFORM_CLUSTER1_CORE_COUNT + \ PLATFORM_CLUSTER0_CORE_COUNT) #define PLATFORM_MAX_CPUS_PER_CLUSTER 4 -#define PRIMARY_CPU 0x0 +#define PRIMARY_CPU 0x100 #define MAX_IO_DEVICES 3 #define MAX_IO_HANDLES 4 diff --git a/plat/juno/platform.mk b/plat/juno/platform.mk index 16c7f76..62a6d31 100644 --- a/plat/juno/platform.mk +++ b/plat/juno/platform.mk @@ -78,6 +78,7 @@ cci400.c BL2_SOURCES += bl2_plat_setup.c \ + plat_helpers.S \ plat_common.c BL31_SOURCES += bl31_plat_setup.c \