[U-Boot] [PATCH 6/9] ARM: ARMv7: PSCI: ls102xa: Verify CPU ID for CPU_ON
Dongsheng Wang
dongsheng.wang at nxp.com
Mon Jan 18 05:27:28 CET 2016
From: Wang Dongsheng <dongsheng.wang at nxp.com>
Add validation code to make sure target cpu ID is valid.
Signed-off-by: Wang Dongsheng <dongsheng.wang at nxp.com>
---
arch/arm/cpu/armv7/ls102xa/psci.S | 27 ++++++++++++++++++++++++---
1 file changed, 24 insertions(+), 3 deletions(-)
diff --git a/arch/arm/cpu/armv7/ls102xa/psci.S b/arch/arm/cpu/armv7/ls102xa/psci.S
index 461b785..3091362 100644
--- a/arch/arm/cpu/armv7/ls102xa/psci.S
+++ b/arch/arm/cpu/armv7/ls102xa/psci.S
@@ -25,13 +25,34 @@
#define ONE_MS (GENERIC_TIMER_CLK / 1000)
#define RESET_WAIT (30 * ONE_MS)
+#define AFFINITY_LEVEL_PROCESSOR_SHIFT 8
@ Expect target CPU in r1, return the target cpu number in R0
.globl psci_get_target_cpu_id
psci_get_target_cpu_id:
- @ Clear and Get the correct CPU number
- and r1, r1, #0xff
- mov r0, r1
+ @ Get the CPU number
+ and r0, r1, #0xff
+ @ Verify bit[31:24], bits must be zero.
+ tst r1, #0xff000000
+ bne out_psci_get_target_cpu_id
+
+ @ Verify Affinity level 2: Cluster, only one cluster in LS1021xa SoC.
+ tst r1, #0xff0000
+ bne out_psci_get_target_cpu_id
+
+ @ Verify Affinity level 1: Processors, should in 0xf00 processor.
+ lsr r1, r1, #AFFINITY_LEVEL_PROCESSOR_SHIFT
+ teq r1, #0xf
+ bne out_psci_get_target_cpu_id
+
+ @ Verify CPU, Affinity level 0: Only 0, 1 is effective value.
+ cmp r0, #2
+ bge out_psci_get_target_cpu_id
+
+ bx lr
+
+out_psci_get_target_cpu_id:
+ mov r0, #PSCI_RET_INVALID_PARAMS
bx lr
@ r1 = target CPU
--
2.1.0.27.g96db324
More information about the U-Boot
mailing list