From 371d4399d1f42a48705e316ef378553218195612 Mon Sep 17 00:00:00 2001 From: David Wang <david.wang@arm.com> Date: Thu, 22 Oct 2015 13:30:50 +0800 Subject: [PATCH] Allow CSS to redefine function `plat_arm_calc_core_pos` Currently all ARM CSS platforms which include css_helpers.S use the same strong definition of `plat_arm_calc_core_pos`. This patch allows these CSS platforms to define their own strong definition of this function. * Replace the strong definition of `plat_arm_calc_core_pos` in css_helpers.S with a utility function `css_calc_core_pos_swap_cluster` does the same thing (swaps cluster IDs). ARM CSS platforms may choose to use this function or not. * Add a Juno strong definition of `plat_arm_calc_core_pos`, which uses `css_calc_core_pos_swap_cluster`. Change-Id: Ib5385ed10e44adf6cd1398a93c25973eb3506d9d --- plat/arm/board/juno/aarch64/juno_helpers.S | 11 ++++++++++- plat/arm/css/common/aarch64/css_helpers.S | 10 +++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/plat/arm/board/juno/aarch64/juno_helpers.S b/plat/arm/board/juno/aarch64/juno_helpers.S index ce41baeec..263a98056 100644 --- a/plat/arm/board/juno/aarch64/juno_helpers.S +++ b/plat/arm/board/juno/aarch64/juno_helpers.S @@ -37,7 +37,7 @@ .globl plat_reset_handler - + .globl plat_arm_calc_core_pos /* -------------------------------------------------------------------- * void plat_reset_handler(void); @@ -117,3 +117,12 @@ ret: isb ret endfunc plat_reset_handler + + /* ----------------------------------------------------- + * unsigned int plat_arm_calc_core_pos(uint64_t mpidr) + * Helper function to calculate the core position. + * ----------------------------------------------------- + */ +func plat_arm_calc_core_pos + b css_calc_core_pos_swap_cluster +endfunc plat_arm_calc_core_pos diff --git a/plat/arm/css/common/aarch64/css_helpers.S b/plat/arm/css/common/aarch64/css_helpers.S index 1137a4923..d1702708f 100644 --- a/plat/arm/css/common/aarch64/css_helpers.S +++ b/plat/arm/css/common/aarch64/css_helpers.S @@ -34,7 +34,7 @@ .weak plat_secondary_cold_boot_setup .weak plat_get_my_entrypoint - .globl plat_arm_calc_core_pos + .globl css_calc_core_pos_swap_cluster .weak plat_is_my_cpu_primary /* ----------------------------------------------------- @@ -73,20 +73,20 @@ func plat_get_my_entrypoint endfunc plat_get_my_entrypoint /* ----------------------------------------------------------- - * unsigned int plat_arm_calc_core_pos(uint64_t mpidr) - * Function to calculate the core position by + * unsigned int css_calc_core_pos_swap_cluster(uint64_t mpidr) + * Utility function to calculate the core position by * swapping the cluster order. This is necessary in order to * match the format of the boot information passed by the SCP * and read in plat_is_my_cpu_primary below. * ----------------------------------------------------------- */ -func plat_arm_calc_core_pos +func css_calc_core_pos_swap_cluster and x1, x0, #MPIDR_CPU_MASK and x0, x0, #MPIDR_CLUSTER_MASK eor x0, x0, #(1 << MPIDR_AFFINITY_BITS) // swap cluster order add x0, x1, x0, LSR #6 ret -endfunc plat_arm_calc_core_pos +endfunc css_calc_core_pos_swap_cluster /* ----------------------------------------------------- * unsigned int plat_is_my_cpu_primary (void); -- GitLab