summaryrefslogtreecommitdiffstats
path: root/drivers/irqchip
diff options
context:
space:
mode:
authorMarek Behún <kabel@kernel.org>2024-07-11 13:57:47 +0200
committerThomas Gleixner <tglx@linutronix.de>2024-07-30 13:35:47 +0200
commit63697bc7199ee2bacc8324b59951046a7b3ea991 (patch)
tree250f072bcf07a70ad15029c0e2b5eb480029215a /drivers/irqchip
parentirqchip/armada-370-xp: Use FIELD_GET() and named register constant (diff)
downloadlinux-63697bc7199ee2bacc8324b59951046a7b3ea991.tar.xz
linux-63697bc7199ee2bacc8324b59951046a7b3ea991.zip
irqchip/armada-370-xp: Refactor mpic_handle_msi_irq() code
Refactor the mpic_handle_msi_irq() function to make it simpler: - drop the function arguments, they are not needed - rename the variable holding the doorbell cause register to "cause" - rename the iterating variable to "i" - use for_each_set_bit() (requires retyping "cause" to unsigned long) Signed-off-by: Marek Behún <kabel@kernel.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Link: https://lore.kernel.org/all/20240711115748.30268-10-kabel@kernel.org
Diffstat (limited to 'drivers/irqchip')
-rw-r--r--drivers/irqchip/irq-armada-370-xp.c32
1 files changed, 12 insertions, 20 deletions
diff --git a/drivers/irqchip/irq-armada-370-xp.c b/drivers/irqchip/irq-armada-370-xp.c
index 179a30a4a128..5c2631f6f7b0 100644
--- a/drivers/irqchip/irq-armada-370-xp.c
+++ b/drivers/irqchip/irq-armada-370-xp.c
@@ -602,29 +602,21 @@ static const struct irq_domain_ops mpic_irq_ops = {
};
#ifdef CONFIG_PCI_MSI
-static void mpic_handle_msi_irq(struct pt_regs *regs, bool is_chained)
+static void mpic_handle_msi_irq(void)
{
- u32 msimask, msinr;
+ unsigned long cause;
+ unsigned int i;
- msimask = readl_relaxed(per_cpu_int_base + MPIC_IN_DRBEL_CAUSE);
- msimask &= msi_doorbell_mask();
+ cause = readl_relaxed(per_cpu_int_base + MPIC_IN_DRBEL_CAUSE);
+ cause &= msi_doorbell_mask();
+ writel(~cause, per_cpu_int_base + MPIC_IN_DRBEL_CAUSE);
- writel(~msimask, per_cpu_int_base + MPIC_IN_DRBEL_CAUSE);
-
- for (msinr = msi_doorbell_start();
- msinr < msi_doorbell_end(); msinr++) {
- unsigned int irq;
-
- if (!(msimask & BIT(msinr)))
- continue;
-
- irq = msinr - msi_doorbell_start();
-
- generic_handle_domain_irq(mpic_msi_inner_domain, irq);
- }
+ for_each_set_bit(i, &cause, BITS_PER_LONG)
+ generic_handle_domain_irq(mpic_msi_inner_domain,
+ i - msi_doorbell_start());
}
#else
-static void mpic_handle_msi_irq(struct pt_regs *r, bool b) {}
+static void mpic_handle_msi_irq(void) {}
#endif
static void mpic_handle_cascade_irq(struct irq_desc *desc)
@@ -647,7 +639,7 @@ static void mpic_handle_cascade_irq(struct irq_desc *desc)
continue;
if (irqn == 0 || irqn == 1) {
- mpic_handle_msi_irq(NULL, true);
+ mpic_handle_msi_irq();
continue;
}
@@ -675,7 +667,7 @@ static void __exception_irq_entry mpic_handle_irq(struct pt_regs *regs)
/* MSI handling */
if (irqnr == 1)
- mpic_handle_msi_irq(regs, false);
+ mpic_handle_msi_irq();
#ifdef CONFIG_SMP
/* IPI Handling */