aboutsummaryrefslogtreecommitdiffstats
path: root/plat
diff options
context:
space:
mode:
authorWang Feng <feng_feng.wang@spreadtrum.com>2018-03-15 15:32:41 +0800
committerWang Feng <feng_feng.wang@spreadtrum.com>2018-03-17 14:51:58 +0800
commit39b21d19a01bc8eac3ab5f21a3cf96cd5e9a4f42 (patch)
tree3ca832056dfc7388a0cb979a592d1b42e6f84138 /plat
parent16b05e94a2d1757cbb98de068c662d58a6919613 (diff)
downloadplatform_external_arm-trusted-firmware-39b21d19a01bc8eac3ab5f21a3cf96cd5e9a4f42.tar.gz
platform_external_arm-trusted-firmware-39b21d19a01bc8eac3ab5f21a3cf96cd5e9a4f42.tar.bz2
platform_external_arm-trusted-firmware-39b21d19a01bc8eac3ab5f21a3cf96cd5e9a4f42.zip
FVP: change the method for translating MPIDR values to a linear indices
x3 will be assigned by the folloing instructions. So the first instruction is not needed any more. old method: (ClusterId * FVP_MAX_CPUS_PER_CLUSTER) + (CPUId * FVP_MAX_PE_PER_CPU) + ThreadId it should be (ClusterId * FVP_MAX_CPUS_PER_CLUSTER) * FVP_MAX_PE_PER_CPU + (CPUId * FVP_MAX_PE_PER_CPU) + ThreadId which can be simplified as: (ClusterId * FVP_MAX_CPUS_PER_CLUSTER + CPUId) * FVP_MAX_PE_PER_CPU + ThreadId Signed-off-by: Wang Feng <feng_feng.wang@spreadtrum.com>
Diffstat (limited to 'plat')
-rw-r--r--plat/arm/board/fvp/aarch64/fvp_helpers.S21
1 files changed, 12 insertions, 9 deletions
diff --git a/plat/arm/board/fvp/aarch64/fvp_helpers.S b/plat/arm/board/fvp/aarch64/fvp_helpers.S
index 6ea458515..88fcdb1b0 100644
--- a/plat/arm/board/fvp/aarch64/fvp_helpers.S
+++ b/plat/arm/board/fvp/aarch64/fvp_helpers.S
@@ -178,19 +178,22 @@ func plat_is_my_cpu_primary
ret
endfunc plat_is_my_cpu_primary
- /* -----------------------------------------------------
+ /* ---------------------------------------------------------------------
* unsigned int plat_arm_calc_core_pos(u_register_t mpidr)
*
* Function to calculate the core position on FVP.
*
- * (ClusterId * FVP_MAX_CPUS_PER_CLUSTER) +
+ * (ClusterId * FVP_MAX_CPUS_PER_CLUSTER * FVP_MAX_PE_PER_CPU) +
* (CPUId * FVP_MAX_PE_PER_CPU) +
* ThreadId
- * -----------------------------------------------------
+ *
+ * which can be simplified as:
+ *
+ * ((ClusterId * FVP_MAX_CPUS_PER_CLUSTER + CPUId) * FVP_MAX_PE_PER_CPU)
+ * + ThreadId
+ * ---------------------------------------------------------------------
*/
func plat_arm_calc_core_pos
- mov x3, x0
-
/*
* Check for MT bit in MPIDR. If not set, shift MPIDR to left to make it
* look as if in a multi-threaded implementation.
@@ -205,9 +208,9 @@ func plat_arm_calc_core_pos
ubfx x2, x3, #MPIDR_AFF2_SHIFT, #MPIDR_AFFINITY_BITS
/* Compute linear position */
- mov x4, #FVP_MAX_PE_PER_CPU
- madd x0, x1, x4, x0
- mov x5, #FVP_MAX_CPUS_PER_CLUSTER
- madd x0, x2, x5, x0
+ mov x4, #FVP_MAX_CPUS_PER_CLUSTER
+ madd x1, x2, x4, x1
+ mov x5, #FVP_MAX_PE_PER_CPU
+ madd x0, x1, x5, x0
ret
endfunc plat_arm_calc_core_pos