* for "irq", depending on "type".
         */
        raw_spin_lock_irqsave(&irq_controller_lock, flags);
-       val = oldval = readl_relaxed(base + GIC_DIST_CONFIG + confoff);
+       val = oldval = readl_relaxed(base + confoff);
        if (type & IRQ_TYPE_LEVEL_MASK)
                val &= ~confmask;
        else if (type & IRQ_TYPE_EDGE_BOTH)
         * does not allow us to set the configuration or we are in a
         * non-secure mode, and hence it may not be catastrophic.
         */
-       writel_relaxed(val, base + GIC_DIST_CONFIG + confoff);
-       if (readl_relaxed(base + GIC_DIST_CONFIG + confoff) != val) {
-               if (WARN_ON(irq >= 32))
-                       ret = -EINVAL;
-               else
-                       pr_warn("GIC: PPI%d is secure or misconfigured\n",
-                               irq - 16);
-       }
+       writel_relaxed(val, base + confoff);
+       if (readl_relaxed(base + confoff) != val)
+               ret = -EINVAL;
+
        raw_spin_unlock_irqrestore(&irq_controller_lock, flags);
 
        if (sync_access)
 
        unsigned int irq = gic_irq(d);
        void (*rwp_wait)(void);
        void __iomem *base;
+       int ret;
 
        /* Interrupt configuration for SGIs can't be changed */
        if (irq < 16)
                rwp_wait = gic_dist_wait_for_rwp;
        }
 
-       return gic_configure_irq(irq, type, base, rwp_wait);
+
+       ret = gic_configure_irq(irq, type, base + GICD_ICFGR, rwp_wait);
+       if (ret && irq < 32) {
+               /* Misconfigured PPIs are usually not fatal */
+               pr_warn("GIC: PPI%d is secure or misconfigured\n", irq - 16);
+               ret = 0;
+       }
+
+       return ret;
 }
 
 static int gic_irq_set_vcpu_affinity(struct irq_data *d, void *vcpu)
 
 {
        void __iomem *base = gic_dist_base(d);
        unsigned int gicirq = gic_irq(d);
+       int ret;
 
        /* Interrupt configuration for SGIs can't be changed */
        if (gicirq < 16)
                            type != IRQ_TYPE_EDGE_RISING)
                return -EINVAL;
 
-       return gic_configure_irq(gicirq, type, base, NULL);
+       ret = gic_configure_irq(gicirq, type, base + GIC_DIST_CONFIG, NULL);
+       if (ret && gicirq < 32) {
+               /* Misconfigured PPIs are usually not fatal */
+               pr_warn("GIC: PPI%d is secure or misconfigured\n", gicirq - 16);
+               ret = 0;
+       }
+
+       return ret;
 }
 
 static int gic_irq_set_vcpu_affinity(struct irq_data *d, void *vcpu)
 
 
        raw_spin_lock(&irq_controller_lock);
 
-       ret = gic_configure_irq(irq, type, base, NULL);
+       ret = gic_configure_irq(irq, type, base + GIC_DIST_CONFIG, NULL);
+       if (ret && irq < 32) {
+               /* Misconfigured PPIs are usually not fatal */
+               pr_warn("GIC: PPI%d is secure or misconfigured\n", irq - 16);
+               ret = 0;
+       }
 
        raw_spin_unlock(&irq_controller_lock);