On Mon, 2016-01-18 at 12:27 +0800, Dongsheng Wang wrote:
> From: Wang Dongsheng <dongsheng.w...@nxp.com>
> 
> Add validation code to make sure target cpu ID is valid.
> 
> Signed-off-by: Wang Dongsheng <dongsheng.w...@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


Where do you check for ALREADY_ON or ON_PENDING?

-Scott

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to