Re: [PATCH] pinctrl: renesas: rzg2l: Always call rzg2l_gpio_request() for interrupt pins

From: Lad, Prabhakar
Date: Wed Oct 09 2024 - 04:27:44 EST


Hi Claudiu,

On Wed, Oct 9, 2024 at 9:11 AM claudiu beznea <claudiu.beznea@xxxxxxxxx> wrote:
>
> Hi, Prabhakar,
>
> On 03.10.2024 16:16, Prabhakar wrote:
> > From: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
> >
> > Ensure that rzg2l_gpio_request() is called for GPIO pins configured as
> > interrupts, regardless of whether they are muxed in u-boot. This
> > guarantees that the pinctrl core is aware of the GPIO pin usage via
> > pinctrl_gpio_request(), which is invoked through rzg2l_gpio_request().
> >
> > Fixes: 2fd4fe19d0150 ("pinctrl: renesas: rzg2l: Configure interrupt input mode")
> > Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@xxxxxxxxxxxxxx>
> > ---
> > Output before this patch on G2L/SMARC:
> > root@smarc-rzg2l:~# cat /sys/kernel/debug/pinctrl/11030000.pinctrl-pinctrl-rzg2l/pinmux-pins | grep P2_1
> > pin 17 (P2_1): UNCLAIMED
> >
> > Output after this patch G2L/SMARC:
> > root@smarc-rzg2l:~# cat /sys/kernel/debug/pinctrl/11030000.pinctrl-pinctrl-rzg2l/pinmux-pins | grep P2_1
> > pin 17 (P2_1): GPIO 11030000.pinctrl:529
> > ---
> > drivers/pinctrl/renesas/pinctrl-rzg2l.c | 15 +++------------
> > 1 file changed, 3 insertions(+), 12 deletions(-)
> >
> > diff --git a/drivers/pinctrl/renesas/pinctrl-rzg2l.c b/drivers/pinctrl/renesas/pinctrl-rzg2l.c
> > index 60ef20ca3ccf..1dceaf8290ea 100644
> > --- a/drivers/pinctrl/renesas/pinctrl-rzg2l.c
> > +++ b/drivers/pinctrl/renesas/pinctrl-rzg2l.c
> > @@ -2368,20 +2368,11 @@ static const struct irq_chip rzg2l_gpio_irqchip = {
> >
> > static int rzg2l_gpio_interrupt_input_mode(struct gpio_chip *chip, unsigned int offset)
> > {
> > - struct rzg2l_pinctrl *pctrl = gpiochip_get_data(chip);
> > - const struct pinctrl_pin_desc *pin_desc = &pctrl->desc.pins[offset];
> > - u64 *pin_data = pin_desc->drv_data;
> > - u32 off = RZG2L_PIN_CFG_TO_PORT_OFFSET(*pin_data);
> > - u8 bit = RZG2L_PIN_ID_TO_PIN(offset);
> > - u8 reg8;
> > int ret;
> >
> > - reg8 = readb(pctrl->base + PMC(off));
> > - if (reg8 & BIT(bit)) {
> > - ret = rzg2l_gpio_request(chip, offset);
> > - if (ret)
> > - return ret;
> > - }
> > + ret = rzg2l_gpio_request(chip, offset);
> > + if (ret)
> > + return ret;
> >
>
> With this approach I'm getting the following on RZ/G3S SMARC Carrier II board:
>
> [ 0.368129] pinctrl-rzg2l 11030000.pinctrl: pinctrl-rzg2l support registered
> [ 0.390426] 1004b800.serial: ttySC0 at MMIO 0x1004b800 (irq = 42,
> base_baud = 0) is a scif
> [ 0.390558] printk: legacy console [ttySC0] enabled
> [ 1.601991] pinctrl-rzg2l 11030000.pinctrl: pin P12_0 already requested
> by 11030000.pinctrl:608; cannot claim for 11030000.pinctrl:608
> [ 1.614208] pinctrl-rzg2l 11030000.pinctrl: error -EINVAL: pin-96
> (11030000.pinctrl:608)
> [ 1.622313] gpio gpiochip0: (11030000.pinctrl): can't look up hwirq 96
> [ 1.631801] ravb 11c30000.ethernet eth0: Base address at 0x11c30000,
> d2:7b:7f:8f:d8:52, IRQ 46.
> [ 1.645752] pinctrl-rzg2l 11030000.pinctrl: pin P12_1 already requested
> by 11030000.pinctrl:609; cannot claim for 11030000.pinctrl:609
> [ 1.657923] pinctrl-rzg2l 11030000.pinctrl: error -EINVAL: pin-97
> (11030000.pinctrl:609)
> [ 1.666035] gpio gpiochip0: (11030000.pinctrl): can't look up hwirq 97
> [ 1.675573] ravb 11c40000.ethernet eth1: Base address at 0x11c40000,
> d2:7b:7f:8f:d8:52, IRQ 47.
> [ 1.700907] pinctrl-rzg2l 11030000.pinctrl: pin P18_0 already requested
> by 11030000.pinctrl:656; cannot claim for 11030000.pinctrl:656
> [ 1.713272] pinctrl-rzg2l 11030000.pinctrl: error -EINVAL: pin-144
> (11030000.pinctrl:656)
> [ 1.721496] gpio gpiochip0: (11030000.pinctrl): can't look up hwirq 144
> [ 1.729209] pinctrl-rzg2l 11030000.pinctrl: pin P0_1 already requested
> by 11030000.pinctrl:513; cannot claim for 11030000.pinctrl:513
> [ 1.741345] pinctrl-rzg2l 11030000.pinctrl: error -EINVAL: pin-1
> (11030000.pinctrl:513)
> [ 1.749432] gpio gpiochip0: (11030000.pinctrl): can't look up hwirq 1
> [ 1.756285] pinctrl-rzg2l 11030000.pinctrl: pin P0_3 already requested
> by 11030000.pinctrl:515; cannot claim for 11030000.pinctrl:515
> [ 1.768475] pinctrl-rzg2l 11030000.pinctrl: error -EINVAL: pin-3
> (11030000.pinctrl:515)
> [ 1.776524] gpio gpiochip0: (11030000.pinctrl): can't look up hwirq 3
> [ 1.783124] gpio-keys keys: Found button without gpio or irq
> [ 1.788851] renesas_sdhi_internal_dmac 11c00000.mmc: mmc0 base at
> 0x0000000011c00000, max clock rate 125 MHz
> [ 1.798791] gpio-keys keys: probe with driver gpio-keys failed with
> error -22
>
Thanks for the test, I noticed the same.
>
> All these ports are hogs to configure them as input. Removing the hog
> property make this patch work but I'm not sure this is the right approach
> (see below diff).
>
I have dropped a query [0] to GPIO maintainers to check on the correct approach.

https://lore.kernel.org/all/CA+V-a8vxUjTWccV-wLgy5CJiFYfEMsx-f+8weCJDP6uD_dh4AA@xxxxxxxxxxxxxx/

Cheers,
Prabhakar