From: Paul Burton <paulburton@xxxxxxxxxx> Use CM's GCR_CL_REDIRECT register to access registers in remote clusters, so users of gic_with_each_online_cpu() gain support for multi-cluster with no further changes. Signed-off-by: Paul Burton <paulburton@xxxxxxxxxx> Signed-off-by: Chao-ying Fu <cfu@xxxxxxxxxxxx> Signed-off-by: Dragan Mladjenovic <dragan.mladjenovic@xxxxxxxxxx> Signed-off-by: Aleksandar Rikalo <arikalo@xxxxxxxxx> Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Tested-by: Serge Semin <fancer.lancer@xxxxxxxxx> --- drivers/irqchip/irq-mips-gic.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/irqchip/irq-mips-gic.c b/drivers/irqchip/irq-mips-gic.c index 6c7a7d2f0438..e7358d3f4e74 100644 --- a/drivers/irqchip/irq-mips-gic.c +++ b/drivers/irqchip/irq-mips-gic.c @@ -98,10 +98,17 @@ static int __gic_with_next_online_cpu(int prev) * loop body using read_gic_vo_*() or write_gic_vo_*() accessor functions or * their derivatives. */ +static inline void gic_unlock_cluster(void) +{ + if (mips_cps_multicluster_cpus()) + mips_cm_unlock_other(); +} + #define for_each_online_cpu_gic(cpu, gic_lock) \ guard(raw_spinlock_irqsave)(gic_lock); \ for ((cpu) = __gic_with_next_online_cpu(-1); \ (cpu) < nr_cpu_ids; \ + gic_unlock_cluster(), \ (cpu) = __gic_with_next_online_cpu(cpu)) static void gic_clear_pcpu_masks(unsigned int intr) -- 2.25.1