[U-Boot] [PATCH 3/6] ARM: PSCI: protect GIC specific code with ARM_GIC

Hans de Goede hdegoede at redhat.com
Thu Sep 1 10:44:13 CEST 2016


Hi,


On 01-09-16 09:57, Antoine Tenart wrote:
> Introducing the ARM_GIC configuration option, use it to only use GIC
> specific code in ARM PSCI function when the SoC has a GIC.
>
> Signed-off-by: Antoine Tenart <antoine.tenart at free-electrons.com>

AFAIK sunxi is not the only user of these files, so before you can
do this you should also select ARM_GIC in the other users I believe.

Regards,

Hans


> ---
>  arch/arm/cpu/armv7/nonsec_virt.S |  6 ++++++
>  arch/arm/cpu/armv7/virt-v7.c     | 38 ++++++++++++++++++++++++--------------
>  2 files changed, 30 insertions(+), 14 deletions(-)
>
> diff --git a/arch/arm/cpu/armv7/nonsec_virt.S b/arch/arm/cpu/armv7/nonsec_virt.S
> index 95ce9387b83e..2a11d2e83b80 100644
> --- a/arch/arm/cpu/armv7/nonsec_virt.S
> +++ b/arch/arm/cpu/armv7/nonsec_virt.S
> @@ -164,6 +164,7 @@ ENDPROC(_smp_pen)
>   * though, but we check this in C before calling this function.
>   */
>  ENTRY(_nonsec_init)
> +#ifdef CONFIG_ARM_GIC
>  	get_gicd_addr	r3
>
>  	mvn	r1, #0				@ all bits to 1
> @@ -175,6 +176,7 @@ ENTRY(_nonsec_init)
>  	str	r1, [r3, #GICC_CTLR]		@ and clear all other bits
>  	mov	r1, #0xff
>  	str	r1, [r3, #GICC_PMR]		@ set priority mask register
> +#endif
>
>  	mrc	p15, 0, r0, c1, c1, 2
>  	movw	r1, #0x3fff
> @@ -200,7 +202,11 @@ ENTRY(_nonsec_init)
>  	mcr	p15, 0, r1, c12, c0, 1		@ set MVBAR to secure vectors
>  	isb
>
> +#ifdef CONFIG_ARM_GIC
>  	mov	r0, r3				@ return GICC address
> +#else
> +	mov	r0, #0
> +#endif
>  	bx	lr
>  ENDPROC(_nonsec_init)
>
> diff --git a/arch/arm/cpu/armv7/virt-v7.c b/arch/arm/cpu/armv7/virt-v7.c
> index d33e5c61a9c2..925201e3f690 100644
> --- a/arch/arm/cpu/armv7/virt-v7.c
> +++ b/arch/arm/cpu/armv7/virt-v7.c
> @@ -82,22 +82,11 @@ void __weak smp_kick_all_cpus(void)
>  	kick_secondary_cpus_gic(gic_dist_addr);
>  }
>
> -__weak void psci_board_init(void)
> -{
> -}
> -
> -int armv7_init_nonsec(void)
> +#ifdef CONFIG_ARM_GIC
> +static void psci_gic_setup()
>  {
> -	unsigned int reg;
> -	unsigned itlinesnr, i;
>  	unsigned long gic_dist_addr;
> -
> -	/* check whether the CPU supports the security extensions */
> -	reg = read_id_pfr1();
> -	if ((reg & 0xF0) == 0) {
> -		printf("nonsec: Security extensions not implemented.\n");
> -		return -1;
> -	}
> +	unsigned itlinesnr, i;
>
>  	/* the SCR register will be set directly in the monitor mode handler,
>  	 * according to the spec one should not tinker with it in secure state
> @@ -122,6 +111,27 @@ int armv7_init_nonsec(void)
>  	 */
>  	for (i = 1; i <= itlinesnr; i++)
>  		writel((unsigned)-1, gic_dist_addr + GICD_IGROUPRn + 4 * i);
> +}
> +#endif
> +
> +__weak void psci_board_init(void)
> +{
> +}
> +
> +int armv7_init_nonsec(void)
> +{
> +	unsigned int reg;
> +
> +	/* check whether the CPU supports the security extensions */
> +	reg = read_id_pfr1();
> +	if ((reg & 0xF0) == 0) {
> +		printf("nonsec: Security extensions not implemented.\n");
> +		return -1;
> +	}
> +
> +#ifdef CONFIG_ARM_GIC
> +	psci_gic_setup();
> +#endif
>
>  	psci_board_init();
>
>


More information about the U-Boot mailing list