[PATCH v7 06/16] irqchip/renesas-rzg2l: Split EOI handler into separate IRQ and TINT functions

From: Biju

Date: Wed Mar 25 2026 - 15:27:07 EST


From: Biju Das <biju.das.jz@xxxxxxxxxxxxxx>

The single rzg2l_irqc_eoi() handler used a conditional to determine
whether to clear an IRQ or TINT interrupt. Split this into two dedicated
handlers, rzg2l_irqc_irq_eoi() and rzg2l_irqc_tint_eoi(), each handling
only their respective interrupt type without the need for range checks.

While at it, simplify rzg2l_irqc_{irq,tint}_eoi() by replacing
raw_spin_lock locking/unlocking with scoped_guard().

Signed-off-by: Biju Das <biju.das.jz@xxxxxxxxxxxxxx>
---
v6->v7:
* No change.
v5->v6:
* Simplified rzg2l_irqc_{irq,tint}_eoi() by replacing raw_spin_lock
locking/unlocking with scoped_guard().
* Updated commit description.
v5:
* New patch.
---
drivers/irqchip/irq-renesas-rzg2l.c | 26 +++++++++++++++++---------
1 file changed, 17 insertions(+), 9 deletions(-)

diff --git a/drivers/irqchip/irq-renesas-rzg2l.c b/drivers/irqchip/irq-renesas-rzg2l.c
index 1d1df4953368..664599acbeb6 100644
--- a/drivers/irqchip/irq-renesas-rzg2l.c
+++ b/drivers/irqchip/irq-renesas-rzg2l.c
@@ -130,17 +130,25 @@ static void rzg2l_clear_tint_int(struct rzg2l_irqc_priv *priv, unsigned int hwir
}
}

-static void rzg2l_irqc_eoi(struct irq_data *d)
+static void rzg2l_irqc_irq_eoi(struct irq_data *d)
{
struct rzg2l_irqc_priv *priv = irq_data_to_priv(d);
unsigned int hw_irq = irqd_to_hwirq(d);

- raw_spin_lock(&priv->lock);
- if (hw_irq >= IRQC_IRQ_START && hw_irq <= IRQC_IRQ_COUNT)
+ scoped_guard(raw_spinlock, &priv->lock)
rzg2l_clear_irq_int(priv, hw_irq);
- else if (hw_irq >= IRQC_TINT_START && hw_irq < IRQC_NUM_IRQ)
+
+ irq_chip_eoi_parent(d);
+}
+
+static void rzg2l_irqc_tint_eoi(struct irq_data *d)
+{
+ struct rzg2l_irqc_priv *priv = irq_data_to_priv(d);
+ unsigned int hw_irq = irqd_to_hwirq(d);
+
+ scoped_guard(raw_spinlock, &priv->lock)
rzg2l_clear_tint_int(priv, hw_irq);
- raw_spin_unlock(&priv->lock);
+
irq_chip_eoi_parent(d);
}

@@ -438,7 +446,7 @@ static struct syscore rzg2l_irqc_syscore = {

static const struct irq_chip rzg2l_irqc_irq_chip = {
.name = "rzg2l-irqc",
- .irq_eoi = rzg2l_irqc_eoi,
+ .irq_eoi = rzg2l_irqc_irq_eoi,
.irq_mask = irq_chip_mask_parent,
.irq_unmask = irq_chip_unmask_parent,
.irq_disable = rzg2l_irqc_irq_disable,
@@ -455,7 +463,7 @@ static const struct irq_chip rzg2l_irqc_irq_chip = {

static const struct irq_chip rzg2l_irqc_tint_chip = {
.name = "rzg2l-irqc",
- .irq_eoi = rzg2l_irqc_eoi,
+ .irq_eoi = rzg2l_irqc_tint_eoi,
.irq_mask = irq_chip_mask_parent,
.irq_unmask = irq_chip_unmask_parent,
.irq_disable = rzg2l_irqc_irq_disable,
@@ -472,7 +480,7 @@ static const struct irq_chip rzg2l_irqc_tint_chip = {

static const struct irq_chip rzfive_irqc_irq_chip = {
.name = "rzfive-irqc",
- .irq_eoi = rzg2l_irqc_eoi,
+ .irq_eoi = rzg2l_irqc_irq_eoi,
.irq_mask = rzfive_irqc_mask,
.irq_unmask = rzfive_irqc_unmask,
.irq_disable = rzfive_irqc_irq_disable,
@@ -489,7 +497,7 @@ static const struct irq_chip rzfive_irqc_irq_chip = {

static const struct irq_chip rzfive_irqc_tint_chip = {
.name = "rzfive-irqc",
- .irq_eoi = rzg2l_irqc_eoi,
+ .irq_eoi = rzg2l_irqc_tint_eoi,
.irq_mask = rzfive_irqc_mask,
.irq_unmask = rzfive_irqc_unmask,
.irq_disable = rzfive_irqc_irq_disable,
--
2.43.0