[PATCH] ARM: virt: enable GICv3 system registers

Jean-Philippe Brucker Jean-Philippe.Brucker at arm.com
Wed Feb 10 12:42:21 PST 2016


On Mon, Jan 25, 2016 at 11:33:59AM +0000, Jean-Philippe Brucker wrote:
> ARMv8 introduces system registers for the Generic Interrupt Controller's
> CPU and virtual interfaces.
> When GICv3 is implemented, EL2 needs to allow the kernel to use those
> registers, by changing the value of ICC_HSRE.
> 
> Signed-off-by: Jean-Philippe Brucker <jean-philippe.brucker at arm.com>
> Reviewed-by: Marc Zyngier <marc.zyngier at arm.com>

Russell, does this look OK for your tree?

Thanks,
Jean-Philippe

> ---
>  arch/arm/kernel/hyp-stub.S |   24 ++++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
> 
> diff --git a/arch/arm/kernel/hyp-stub.S b/arch/arm/kernel/hyp-stub.S
> index 2a55373..0b1e4a9 100644
> --- a/arch/arm/kernel/hyp-stub.S
> +++ b/arch/arm/kernel/hyp-stub.S
> @@ -17,6 +17,7 @@
>   */
>  
>  #include <linux/init.h>
> +#include <linux/irqchip/arm-gic-v3.h>
>  #include <linux/linkage.h>
>  #include <asm/assembler.h>
>  #include <asm/virt.h>
> @@ -161,6 +162,29 @@ ARM_BE8(orr	r7, r7, #(1 << 25))     @ HSCTLR.EE
>  1:
>  #endif
>  
> +#ifdef CONFIG_ARM_GIC_V3
> +	@ Check whether GICv3 system registers are available
> +	mrc	p15, 0, r7, c0, c1, 1	@ ID_PFR1
> +	ubfx	r7, r7, #28, #4
> +	cmp	r7, #1
> +	bne	2f
> +
> +	@ Enable system register accesses
> +	mrc	p15, 4, r7, c12, c9, 5	@ ICC_HSRE
> +	orr	r7, r7, #(ICC_SRE_EL2_ENABLE | ICC_SRE_EL2_SRE)
> +	mcr	p15, 4, r7, c12, c9, 5	@ ICC_HSRE
> +	isb
> +
> +	@ SRE bit could be forced to 0 by firmware.
> +	@ Check whether it sticks before accessing any other sysreg
> +	mrc	p15, 4, r7, c12, c9, 5	@ ICC_HSRE
> +	tst	r7, #ICC_SRE_EL2_SRE
> +	beq	2f
> +	mov	r7, #0
> +	mcr	p15, 4, r7, c12, c11, 0	@ ICH_HCR
> +2:
> +#endif
> +
>  	bx	lr			@ The boot CPU mode is left in r4.
>  ENDPROC(__hyp_stub_install_secondary)
>  
> -- 
> 1.7.9.5
> 
> 
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
> 



More information about the linux-arm-kernel mailing list