diff options
Diffstat (limited to 'drivers/irqchip/irq-gic-common.c')
-rw-r--r-- | drivers/irqchip/irq-gic-common.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/irqchip/irq-gic-common.c b/drivers/irqchip/irq-gic-common.c index 44a077f3a4a2..f174ce0ca361 100644 --- a/drivers/irqchip/irq-gic-common.c +++ b/drivers/irqchip/irq-gic-common.c | |||
@@ -84,12 +84,15 @@ void __init gic_dist_config(void __iomem *base, int gic_irqs, | |||
84 | writel_relaxed(GICD_INT_DEF_PRI_X4, base + GIC_DIST_PRI + i); | 84 | writel_relaxed(GICD_INT_DEF_PRI_X4, base + GIC_DIST_PRI + i); |
85 | 85 | ||
86 | /* | 86 | /* |
87 | * Disable all interrupts. Leave the PPI and SGIs alone | 87 | * Deactivate and disable all SPIs. Leave the PPI and SGIs |
88 | * as they are enabled by redistributor registers. | 88 | * alone as they are in the redistributor registers on GICv3. |
89 | */ | 89 | */ |
90 | for (i = 32; i < gic_irqs; i += 32) | 90 | for (i = 32; i < gic_irqs; i += 32) { |
91 | writel_relaxed(GICD_INT_EN_CLR_X32, | 91 | writel_relaxed(GICD_INT_EN_CLR_X32, |
92 | base + GIC_DIST_ENABLE_CLEAR + i / 8); | 92 | base + GIC_DIST_ACTIVE_CLEAR + i / 8); |
93 | writel_relaxed(GICD_INT_EN_CLR_X32, | ||
94 | base + GIC_DIST_ENABLE_CLEAR + i / 8); | ||
95 | } | ||
93 | 96 | ||
94 | if (sync_access) | 97 | if (sync_access) |
95 | sync_access(); | 98 | sync_access(); |
@@ -102,7 +105,9 @@ void gic_cpu_config(void __iomem *base, void (*sync_access)(void)) | |||
102 | /* | 105 | /* |
103 | * Deal with the banked PPI and SGI interrupts - disable all | 106 | * Deal with the banked PPI and SGI interrupts - disable all |
104 | * PPI interrupts, ensure all SGI interrupts are enabled. | 107 | * PPI interrupts, ensure all SGI interrupts are enabled. |
108 | * Make sure everything is deactivated. | ||
105 | */ | 109 | */ |
110 | writel_relaxed(GICD_INT_EN_CLR_X32, base + GIC_DIST_ACTIVE_CLEAR); | ||
106 | writel_relaxed(GICD_INT_EN_CLR_PPI, base + GIC_DIST_ENABLE_CLEAR); | 111 | writel_relaxed(GICD_INT_EN_CLR_PPI, base + GIC_DIST_ENABLE_CLEAR); |
107 | writel_relaxed(GICD_INT_EN_SET_SGI, base + GIC_DIST_ENABLE_SET); | 112 | writel_relaxed(GICD_INT_EN_SET_SGI, base + GIC_DIST_ENABLE_SET); |
108 | 113 | ||