From: Julien Grall Date: Mon, 14 Sep 2015 15:32:24 +0000 (+0100) Subject: xen/arm: gic-v3: Allow Xen to run on hardware supporting GICv4 X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~2502 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=18c67d29c91d64274212b33cd5db006db553abf9;p=xen.git xen/arm: gic-v3: Allow Xen to run on hardware supporting GICv4 GICv4 is an extension of GICv3 (see 1.1 in ARM IHI 0069A) which means that the GICv3 driver can run normally on GICv4 hardware. The GICv4-only features currently won't be used. Reported-by: Andre Przywara Signed-off-by: Julien Grall Acked-by: Ian Campbell --- diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c index 4d623bfcf6..1e3c19b13b 100644 --- a/xen/arch/arm/gic-v3.c +++ b/xen/arch/arm/gic-v3.c @@ -640,7 +640,7 @@ static int __init gicv3_populate_rdist(void) void __iomem *ptr = gicv3.rdist_regions[i].map_base; reg = readl_relaxed(ptr + GICR_PIDR2) & GIC_PIDR2_ARCH_MASK; - if ( reg != GIC_PIDR2_ARCH_GICv3 ) + if ( reg != GIC_PIDR2_ARCH_GICv3 && reg != GIC_PIDR2_ARCH_GICv4 ) { dprintk(XENLOG_ERR, "GICv3: No redistributor present @%"PRIpaddr"\n", @@ -1194,7 +1194,7 @@ static int __init gicv3_init(void) panic("GICv3: Failed to ioremap for GIC distributor\n"); reg = readl_relaxed(GICD + GICD_PIDR2) & GIC_PIDR2_ARCH_MASK; - if ( reg != GIC_PIDR2_ARCH_GICv3 ) + if ( reg != GIC_PIDR2_ARCH_GICv3 && reg != GIC_PIDR2_ARCH_GICv4 ) panic("GICv3: no distributor detected\n"); if ( !dt_property_read_u32(node, "#redistributor-regions", diff --git a/xen/include/asm-arm/gic_v3_defs.h b/xen/include/asm-arm/gic_v3_defs.h index b0ac6ff55b..c6d73df4a8 100644 --- a/xen/include/asm-arm/gic_v3_defs.h +++ b/xen/include/asm-arm/gic_v3_defs.h @@ -43,6 +43,7 @@ /* Common between GICD_PIDR2 and GICR_PIDR2 */ #define GIC_PIDR2_ARCH_MASK (0xf0) #define GIC_PIDR2_ARCH_GICv3 (0x30) +#define GIC_PIDR2_ARCH_GICv4 (0x40) #define GICC_SRE_EL2_SRE (1UL << 0) #define GICC_SRE_EL2_DFB (1UL << 1)