]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
irqchip/apple-aic: Drop support for custom PMU irq partitions
authorMarc Zyngier <maz@kernel.org>
Mon, 20 Oct 2025 12:29:39 +0000 (13:29 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Mon, 27 Oct 2025 16:16:36 +0000 (17:16 +0100)
Similarly to what has been done for GICv3, drop the irq partitioning
support from the AIC driver, effectively merging the two per-cpu interrupts
for the PMU.

Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Will Deacon <will@kernel.org>
Reviewed-by: Sven Peter <sven@kernel.org>
Link: https://patch.msgid.link/20251020122944.3074811-23-maz@kernel.org
drivers/irqchip/irq-apple-aic.c

index 0b72451725ebd2f8fa6843ffa3b0217d06f5492e..795b3db4554a24c114eccaef3d017c6d5f697354 100644 (file)
@@ -578,16 +578,9 @@ static void __exception_irq_entry aic_handle_fiq(struct pt_regs *regs)
        }
 
        if ((read_sysreg_s(SYS_IMP_APL_PMCR0_EL1) & (PMCR0_IMODE | PMCR0_IACT)) ==
-                       (FIELD_PREP(PMCR0_IMODE, PMCR0_IMODE_FIQ) | PMCR0_IACT)) {
-               int irq;
-               if (cpumask_test_cpu(smp_processor_id(),
-                                    &aic_irqc->fiq_aff[AIC_CPU_PMU_P]->aff))
-                       irq = AIC_CPU_PMU_P;
-               else
-                       irq = AIC_CPU_PMU_E;
+                       (FIELD_PREP(PMCR0_IMODE, PMCR0_IMODE_FIQ) | PMCR0_IACT))
                generic_handle_domain_irq(aic_irqc->hw_domain,
-                                         AIC_FIQ_HWIRQ(irq));
-       }
+                                         AIC_FIQ_HWIRQ(AIC_CPU_PMU_P));
 
        if (static_branch_likely(&use_fast_ipi) &&
            (FIELD_GET(UPMCR0_IMODE, read_sysreg_s(SYS_IMP_APL_UPMCR0_EL1)) == UPMCR0_IMODE_FIQ) &&
@@ -632,18 +625,7 @@ static int aic_irq_domain_map(struct irq_domain *id, unsigned int irq,
                                    handle_fasteoi_irq, NULL, NULL);
                irqd_set_single_target(irq_desc_get_irq_data(irq_to_desc(irq)));
        } else {
-               int fiq = FIELD_GET(AIC_EVENT_NUM, hw);
-
-               switch (fiq) {
-               case AIC_CPU_PMU_P:
-               case AIC_CPU_PMU_E:
-                       irq_set_percpu_devid_partition(irq, &ic->fiq_aff[fiq]->aff);
-                       break;
-               default:
-                       irq_set_percpu_devid(irq);
-                       break;
-               }
-
+               irq_set_percpu_devid(irq);
                irq_domain_set_info(id, irq, hw, &fiq_chip, id->host_data,
                                    handle_percpu_devid_irq, NULL, NULL);
        }
@@ -732,6 +714,10 @@ static int aic_irq_domain_translate(struct irq_domain *id,
                                break;
                        }
                }
+
+               /* Merge the two PMUs on a single interrupt */
+               if (*hwirq == AIC_CPU_PMU_E)
+                       *hwirq = AIC_CPU_PMU_P;
                break;
        default:
                return -EINVAL;