irqchip/gic-v3-its: Set implementation defined bit to enable VLPIs
authorMarc Zyngier <marc.zyngier@arm.com>
Tue, 27 Jun 2017 20:24:25 +0000 (21:24 +0100)
committerMarc Zyngier <marc.zyngier@arm.com>
Thu, 31 Aug 2017 14:31:40 +0000 (15:31 +0100)
A long time ago, GITS_CTLR[1] used to be called GITC_CTLR.EnableVLPI.
It has been subsequently deprecated and is now an "Implementation
Defined" bit that may ot may not be set for GICv4. Brilliant.

And the current crop of the FastModel requires that bit for VLPIs
to be enabled. Oh well... Let's set it and find out what breaks.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
drivers/irqchip/irq-gic-v3-its.c
include/linux/irqchip/arm-gic-v3.h

index 21ee33e81c741ed69ccbfbce80601ffb9708fdcf..d79bfdbd506bd91a787fde1de839ba2bd2f6649a 100644 (file)
@@ -2714,7 +2714,7 @@ static int its_force_quiescent(void __iomem *base)
                return 0;
 
        /* Disable the generation of all interrupts to this ITS */
-       val &= ~GITS_CTLR_ENABLE;
+       val &= ~(GITS_CTLR_ENABLE | GITS_CTLR_ImDe);
        writel_relaxed(val, base + GITS_CTLR);
 
        /* Poll GITS_CTLR and wait until ITS becomes quiescent */
@@ -2998,7 +2998,10 @@ static int __init its_probe_one(struct resource *res,
 
        gits_write_cwriter(0, its->base + GITS_CWRITER);
        ctlr = readl_relaxed(its->base + GITS_CTLR);
-       writel_relaxed(ctlr | GITS_CTLR_ENABLE, its->base + GITS_CTLR);
+       ctlr |= GITS_CTLR_ENABLE;
+       if (its->is_v4)
+               ctlr |= GITS_CTLR_ImDe;
+       writel_relaxed(ctlr, its->base + GITS_CTLR);
 
        err = its_init_domain(handle, its);
        if (err)
index 6bc142cfa61626a7acc57595e75525e2937cd89f..1ea576c8126f8b8c467f1ea3ab2623826efde0af 100644 (file)
 #define GITS_TRANSLATER                        0x10040
 
 #define GITS_CTLR_ENABLE               (1U << 0)
+#define GITS_CTLR_ImDe                 (1U << 1)
 #define        GITS_CTLR_ITS_NUMBER_SHIFT      4
 #define        GITS_CTLR_ITS_NUMBER            (0xFU << GITS_CTLR_ITS_NUMBER_SHIFT)
 #define GITS_CTLR_QUIESCENT            (1U << 31)