[PATCH v2 0/8] gpio: renesas: Add support for GPIO and related interrupts in RZ/N1 SoC

Herve Codina (Schneider Electric) posted 8 patches 3 weeks, 2 days ago
There is a newer version of this series
.../soc/renesas/renesas,rzn1-gpioirqmux.yaml  |  86 +++++++++
arch/arm/boot/dts/renesas/r9a06g032.dtsi      | 170 ++++++++++++++++++
drivers/irqchip/irq-ls-extirq.c               |  47 ++---
drivers/irqchip/irq-renesas-rza1.c            |  43 ++---
drivers/of/irq.c                              |  70 ++++++++
.../of/unittest-data/tests-interrupts.dtsi    |   9 +
drivers/of/unittest.c                         | 116 ++++++++++++
drivers/soc/renesas/Kconfig                   |   4 +
drivers/soc/renesas/Makefile                  |   1 +
drivers/soc/renesas/rzn1_irqmux.c             | 110 ++++++++++++
include/linux/of_irq.h                        |  41 ++++-
11 files changed, 639 insertions(+), 58 deletions(-)
create mode 100644 Documentation/devicetree/bindings/soc/renesas/renesas,rzn1-gpioirqmux.yaml
create mode 100644 drivers/soc/renesas/rzn1_irqmux.c
[PATCH v2 0/8] gpio: renesas: Add support for GPIO and related interrupts in RZ/N1 SoC
Posted by Herve Codina (Schneider Electric) 3 weeks, 2 days ago
Hi,

This series adds support for GPIO and GPIO IRQ mux available in the
RZ/N1 SoCs.

The first patch of the series add support for GPIO (device-tree
description).

Other patches are related to GPIO interrupts and GPIO IRQ multiplexer.

In the RZ/N1 SoCs, GPIO interrupts are wired to a GPIO IRQ multiplexer.

This multiplexer does nothing but select 8 GPIO IRQ lines out of the 96
available to wire them to the GIC input lines.

One upstreaming attempt have been done previously by Phil Edworthy [1]
but the series has never been applied.

Based on my understanding, I have fully reworked the driver proposed by
Phil and removed the IRQ domain. Indeed, the device doesn't handle
interrupts. It just routes signals.

Also, as an interrupt-map property is used, the driver cannot be
involved as an interrupt controller itself. It is a nexus node.

With that in mind, patch 2 is related to the binding, patch 3 introduces
an helper (for_each_of_imap_item) to parse the interrupt-map property.
This parsing is needed by the driver. Indeed, the lines routing is
defined by the interrupt-map property and the driver needs to set
registers to apply this routing.

Patch 4 adds a unittest for the new parsing helper. Patches 5 and 6
convert existing driver to use this helper.

The last two patches (patches 7 and 8) are the IRQ multiplexer driver
itself and the RZ/N1 device-tree description update to have the support
for the GPIO interrupts.

[1] https://lore.kernel.org/all/20190219155511.28507-1-phil.edworthy@renesas.com/

Best regards,
Hervé

Changes v1 -> v2
  v1: https://lore.kernel.org/lkml/20250725152618.32886-1-herve.codina@bootlin.com/

  Rebase on top of v6.17-rc5

  Patch 1 in v1
    - Removed in v2 (no need for RZ/N1 compatible strings).

  Patch 1 (2 in v1)
    - Fix node names (issue reported by Rob's bot)
    - Fix compatible RZ/N1 compatible strings
    - Removed undocumented and unused 'bank-name' properties

  Patch 2 (3 in v1)
   - Remove 'interrupts' property
   - Update 'interrupt-map' description

  Patch 3 (4 in v1)
   - Rework of_irq_foreach_imap() to provide the for_each_of_imap_item
     iterator (similar to for_each_of_range)

  Patch 4 (new in v2)
   - Add a unittest for for_each_of_imap_item

  Patch 5 (new in v2)
   - Convert irqchip/ls-extirq to use for_each_of_imap_item

  Patch 6 (new in v2)
   - Convert irqchip/renesas-rza1 to use for_each_of_imap_item

  Patch 7 (5 in v1)
   - Use for_each_of_imap_item
   - Remove 'interrupts' property usage

  Patch 8 (6 in v1)
   - Remove 'interrupts' property

Herve Codina (Schneider Electric) (8):
  ARM: dts: r9a06g032: Add GPIO controllers
  dt-bindings: soc: renesas: Add the Renesas RZ/N1 GPIO Interrupt
    Multiplexer
  of/irq: Introduce for_each_of_imap_item
  of: unittest: Add a test case for for_each_of_imap_item iterator
  irqchip/ls-extirq: Use for_each_of_imap_item iterator
  irqchip/renesas-rza1: Use for_each_of_imap_item iterator
  soc: renesas: Add support for Renesas RZ/N1 GPIO Interrupt Multiplexer
  ARM: dts: r9a06g032: Add support for GPIO interrupts

 .../soc/renesas/renesas,rzn1-gpioirqmux.yaml  |  86 +++++++++
 arch/arm/boot/dts/renesas/r9a06g032.dtsi      | 170 ++++++++++++++++++
 drivers/irqchip/irq-ls-extirq.c               |  47 ++---
 drivers/irqchip/irq-renesas-rza1.c            |  43 ++---
 drivers/of/irq.c                              |  70 ++++++++
 .../of/unittest-data/tests-interrupts.dtsi    |   9 +
 drivers/of/unittest.c                         | 116 ++++++++++++
 drivers/soc/renesas/Kconfig                   |   4 +
 drivers/soc/renesas/Makefile                  |   1 +
 drivers/soc/renesas/rzn1_irqmux.c             | 110 ++++++++++++
 include/linux/of_irq.h                        |  41 ++++-
 11 files changed, 639 insertions(+), 58 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/soc/renesas/renesas,rzn1-gpioirqmux.yaml
 create mode 100644 drivers/soc/renesas/rzn1_irqmux.c

-- 
2.51.0

Re: [PATCH v2 0/8] gpio: renesas: Add support for GPIO and related interrupts in RZ/N1 SoC
Posted by Thomas Gleixner 3 weeks, 2 days ago
On Tue, Sep 09 2025 at 14:00, Herve Codina wrote:
>   Patch 5 (new in v2)
>    - Convert irqchip/ls-extirq to use for_each_of_imap_item
>
>   Patch 6 (new in v2)
>    - Convert irqchip/renesas-rza1 to use for_each_of_imap_item

How are those two patches related to adding GPIO support?

AFAICT, they are completely unrelated and just randomly sprinkled into
this series, but I might be missing something.

Thanks,

        tglx
Re: [PATCH v2 0/8] gpio: renesas: Add support for GPIO and related interrupts in RZ/N1 SoC
Posted by Thomas Gleixner 3 weeks, 2 days ago
On Tue, Sep 09 2025 at 22:51, Thomas Gleixner wrote:
> On Tue, Sep 09 2025 at 14:00, Herve Codina wrote:
>>   Patch 5 (new in v2)
>>    - Convert irqchip/ls-extirq to use for_each_of_imap_item
>>
>>   Patch 6 (new in v2)
>>    - Convert irqchip/renesas-rza1 to use for_each_of_imap_item
>
> How are those two patches related to adding GPIO support?
>
> AFAICT, they are completely unrelated and just randomly sprinkled into
> this series, but I might be missing something.

Ah. I missed that this iterator got introduced in this series. Did you
check whether that creates any conflicts against pending irqchip
patches?

Thanks,

        tglx
Re: [PATCH v2 0/8] gpio: renesas: Add support for GPIO and related interrupts in RZ/N1 SoC
Posted by Herve Codina 3 weeks ago
Hi Thomas,

On Tue, 09 Sep 2025 22:54:41 +0200
Thomas Gleixner <tglx@linutronix.de> wrote:

> On Tue, Sep 09 2025 at 22:51, Thomas Gleixner wrote:
> > On Tue, Sep 09 2025 at 14:00, Herve Codina wrote:  
> >>   Patch 5 (new in v2)
> >>    - Convert irqchip/ls-extirq to use for_each_of_imap_item
> >>
> >>   Patch 6 (new in v2)
> >>    - Convert irqchip/renesas-rza1 to use for_each_of_imap_item  
> >
> > How are those two patches related to adding GPIO support?
> >
> > AFAICT, they are completely unrelated and just randomly sprinkled into
> > this series, but I might be missing something.  
> 
> Ah. I missed that this iterator got introduced in this series. Did you
> check whether that creates any conflicts against pending irqchip
> patches?
> 

Indeed, I have a conflict in my patch 6 with 40c26230a1bf ("irqchip: Use int
type to store negative error codes").

I can rebase my next iteration on top of 40c26230a1bf and mention this commit
in my next iteration cover letter but an immutable tag and referencing this
tag in the cover letter should be better.

What is the best approach?

Best regards,
Hervé
Re: [PATCH v2 0/8] gpio: renesas: Add support for GPIO and related interrupts in RZ/N1 SoC
Posted by Thomas Gleixner 3 weeks ago
On Thu, Sep 11 2025 at 09:04, Herve Codina wrote:
> On Tue, 09 Sep 2025 22:54:41 +0200
> Thomas Gleixner <tglx@linutronix.de> wrote:
>
>> On Tue, Sep 09 2025 at 22:51, Thomas Gleixner wrote:
>> > On Tue, Sep 09 2025 at 14:00, Herve Codina wrote:  
>> >>   Patch 5 (new in v2)
>> >>    - Convert irqchip/ls-extirq to use for_each_of_imap_item
>> >>
>> >>   Patch 6 (new in v2)
>> >>    - Convert irqchip/renesas-rza1 to use for_each_of_imap_item  
>> >
>> > How are those two patches related to adding GPIO support?
>> >
>> > AFAICT, they are completely unrelated and just randomly sprinkled into
>> > this series, but I might be missing something.  
>> 
>> Ah. I missed that this iterator got introduced in this series. Did you
>> check whether that creates any conflicts against pending irqchip
>> patches?
>> 
>
> Indeed, I have a conflict in my patch 6 with 40c26230a1bf ("irqchip: Use int
> type to store negative error codes").
>
> I can rebase my next iteration on top of 40c26230a1bf and mention this commit
> in my next iteration cover letter but an immutable tag and referencing this
> tag in the cover letter should be better.

No. Don't do that.

> What is the best approach?

Just base it on upstream and mentioning the conflict in the cover
letter. For actual merging, if it's ready before the merge window, we
can sort it out by:

  1) You putting patch (3-6) in front of the queue

  2) Me picking up these 4 patches into a separate branch based on rc1
     or later, which gets tagged and is consumable by the GPIO
     maintainers.

     Then I can merge that branch into irq/drivers and resolve the
     conflict, which is trivial enough

Alternatively GPIO folks pick up the whole lot and sort the conflict out
with -next and Linus themself. No real preference from my side.

Thanks,

        tglx