Commit 371d4399 authored by David Wang's avatar David Wang
Browse files

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
parent 84ab33e1
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
.globl plat_reset_handler .globl plat_reset_handler
.globl plat_arm_calc_core_pos
/* -------------------------------------------------------------------- /* --------------------------------------------------------------------
* void plat_reset_handler(void); * void plat_reset_handler(void);
...@@ -117,3 +117,12 @@ ret: ...@@ -117,3 +117,12 @@ ret:
isb isb
ret ret
endfunc plat_reset_handler 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
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
.weak plat_secondary_cold_boot_setup .weak plat_secondary_cold_boot_setup
.weak plat_get_my_entrypoint .weak plat_get_my_entrypoint
.globl plat_arm_calc_core_pos .globl css_calc_core_pos_swap_cluster
.weak plat_is_my_cpu_primary .weak plat_is_my_cpu_primary
/* ----------------------------------------------------- /* -----------------------------------------------------
...@@ -73,20 +73,20 @@ func plat_get_my_entrypoint ...@@ -73,20 +73,20 @@ func plat_get_my_entrypoint
endfunc plat_get_my_entrypoint endfunc plat_get_my_entrypoint
/* ----------------------------------------------------------- /* -----------------------------------------------------------
* unsigned int plat_arm_calc_core_pos(uint64_t mpidr) * unsigned int css_calc_core_pos_swap_cluster(uint64_t mpidr)
* Function to calculate the core position by * Utility function to calculate the core position by
* swapping the cluster order. This is necessary in order to * swapping the cluster order. This is necessary in order to
* match the format of the boot information passed by the SCP * match the format of the boot information passed by the SCP
* and read in plat_is_my_cpu_primary below. * 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 x1, x0, #MPIDR_CPU_MASK
and x0, x0, #MPIDR_CLUSTER_MASK and x0, x0, #MPIDR_CLUSTER_MASK
eor x0, x0, #(1 << MPIDR_AFFINITY_BITS) // swap cluster order eor x0, x0, #(1 << MPIDR_AFFINITY_BITS) // swap cluster order
add x0, x1, x0, LSR #6 add x0, x1, x0, LSR #6
ret ret
endfunc plat_arm_calc_core_pos endfunc css_calc_core_pos_swap_cluster
/* ----------------------------------------------------- /* -----------------------------------------------------
* unsigned int plat_is_my_cpu_primary (void); * unsigned int plat_is_my_cpu_primary (void);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment