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>
This commit is contained in:
parent
16b05e94a2
commit
39b21d19a0
|
@ -178,19 +178,22 @@ func plat_is_my_cpu_primary
|
||||||
ret
|
ret
|
||||||
endfunc plat_is_my_cpu_primary
|
endfunc plat_is_my_cpu_primary
|
||||||
|
|
||||||
/* -----------------------------------------------------
|
/* ---------------------------------------------------------------------
|
||||||
* unsigned int plat_arm_calc_core_pos(u_register_t mpidr)
|
* unsigned int plat_arm_calc_core_pos(u_register_t mpidr)
|
||||||
*
|
*
|
||||||
* Function to calculate the core position on FVP.
|
* 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) +
|
* (CPUId * FVP_MAX_PE_PER_CPU) +
|
||||||
* ThreadId
|
* 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
|
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
|
* Check for MT bit in MPIDR. If not set, shift MPIDR to left to make it
|
||||||
* look as if in a multi-threaded implementation.
|
* 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
|
ubfx x2, x3, #MPIDR_AFF2_SHIFT, #MPIDR_AFFINITY_BITS
|
||||||
|
|
||||||
/* Compute linear position */
|
/* Compute linear position */
|
||||||
mov x4, #FVP_MAX_PE_PER_CPU
|
mov x4, #FVP_MAX_CPUS_PER_CLUSTER
|
||||||
madd x0, x1, x4, x0
|
madd x1, x2, x4, x1
|
||||||
mov x5, #FVP_MAX_CPUS_PER_CLUSTER
|
mov x5, #FVP_MAX_PE_PER_CPU
|
||||||
madd x0, x2, x5, x0
|
madd x0, x1, x5, x0
|
||||||
ret
|
ret
|
||||||
endfunc plat_arm_calc_core_pos
|
endfunc plat_arm_calc_core_pos
|
||||||
|
|
Loading…
Reference in New Issue