RE: [PATCH v2] gpio: rcar: Request GPIO while enabling interrupt

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Geert,

Thank you for your feedback!

> From: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>
> Sent: 14 November 2018 12:52
> Subject: Re: [PATCH v2] gpio: rcar: Request GPIO while enabling interrupt
>
> Hi Fabrizio,
>
> On Tue, Nov 6, 2018 at 8:19 PM Fabrizio Castro
> <fabrizio.castro@xxxxxxxxxxxxxx> wrote:
> > There are cases when the bootloader configures a pin to work
> > as a function rather than GPIO, and other cases when the pin
> > is configured as a function at POR.
> > This commit makes sure the pin is configured as a GPIO the
> > moment we need it to work as an interrupt.
> >
> > Signed-off-by: Fabrizio Castro <fabrizio.castro@xxxxxxxxxxxxxx>
> >
> > ---
> > v1->v2:
> > * Moved gpio_rcar_request call from gpio_rcar_irq_set_type to
> >   rcar_gpio_irq_request_resources
> > * Added rcar_gpio_irq_release_resources for calling gpio_rcar_free
>
> Thanks for your patch!
>
> While I could see no obvious deficiencies at first glance, I gave your
> patch a try on Koelsch and Salvator-XS.

Thank you for testing the patch!

These issues seem to be related to a few patches that were merged only recently,
I have rebased my work on top of the next-20181115 now, and I get the same thing.
I need to look into this from scratch again, I'll be in touch as soon as I have found
an alternative way to fix the issue.

Thanks,
Fab

>
> Koelsch:
>
>   - ADV7511 HDMI encoder WARN_ON(!test_bit(FLAG_USED_AS_IRQ, &desc->flags)
>     in gpiochip_enable_irq():
>
>     WARNING: CPU: 0 PID: 1 at drivers/gpio/gpiolib.c:3513
> gpiochip_irq_enable+0x18/0x34
>     Modules linked in:
>     CPU: 0 PID: 1 Comm: swapper/0 Not tainted
> 4.20.0-rc2-koelsch-00873-gf433e294a90792da-dirty #179
>     Hardware name: Generic R-Car Gen2 (Flattened Device Tree)
>     [<c020f19c>] (unwind_backtrace) from [<c020aecc>] (show_stack+0x10/0x14)
>     [<c020aecc>] (show_stack) from [<c07b02f8>] (dump_stack+0x7c/0x9c)
>     [<c07b02f8>] (dump_stack) from [<c0220610>] (__warn+0xd0/0xec)
>     [<c0220610>] (__warn) from [<c022073c>] (warn_slowpath_null+0x38/0x44)
>     [<c022073c>] (warn_slowpath_null) from [<c046a084>]
> (gpiochip_irq_enable+0x18/0x34)
>     [<c046a084>] (gpiochip_irq_enable) from [<c026cbb0>] (irq_enable+0x3c/0x50)
>     [<c026cbb0>] (irq_enable) from [<c026cc58>] (__irq_startup+0x94/0xa4)
>     [<c026cc58>] (__irq_startup) from [<c026ccb4>] (irq_startup+0x4c/0x11c)
>     [<c026ccb4>] (irq_startup) from [<c026b4c4>] (__setup_irq+0x4d0/0x6a4)
>     [<c026b4c4>] (__setup_irq) from [<c026b7ac>]
> (request_threaded_irq+0x9c/0x134)
>     [<c026b7ac>] (request_threaded_irq) from [<c026dac4>]
> (devm_request_threaded_irq+0x68/0xa4)
>     [<c026dac4>] (devm_request_threaded_irq) from [<c0518ed8>]
> (adv7511_probe+0x748/0x860)
>     [<c0518ed8>] (adv7511_probe) from [<c05ef02c>]
> (i2c_device_probe+0x210/0x228)
>     [<c05ef02c>] (i2c_device_probe) from [<c05229ac>] (really_probe+0x1f0/0x2c0)
>     [<c05229ac>] (really_probe) from [<c0522d04>]
> (driver_probe_device+0x140/0x15c)
>     [<c0522d04>] (driver_probe_device) from [<c0520ed4>]
> (bus_for_each_drv+0xa0/0xb4)
>     [<c0520ed4>] (bus_for_each_drv) from [<c0522b2c>]
> (__device_attach+0xb0/0x124)
>     [<c0522b2c>] (__device_attach) from [<c0521c94>]
> (bus_probe_device+0x28/0x80)
>     [<c0521c94>] (bus_probe_device) from [<c051ff44>] (device_add+0x438/0x570)
>     [<c051ff44>] (device_add) from [<c05ed978>] (i2c_new_device+0x238/0x278)
>     [<c05ed978>] (i2c_new_device) from [<c05f08a8>]
> (of_i2c_register_device+0x40/0x80)
>     [<c05f08a8>] (of_i2c_register_device) from [<c05f0bac>]
> (of_i2c_register_devices+0x80/0xc0)
>     [<c05f0bac>] (of_i2c_register_devices) from [<c05ee6f4>]
> (i2c_register_adapter+0x1ec/0x390)
>     [<c05ee6f4>] (i2c_register_adapter) from [<c05f5650>]
> (i2c_demux_activate_master+0xd4/0x158)
>     [<c05f5650>] (i2c_demux_activate_master) from [<c05f59e0>]
> (i2c_demux_pinctrl_probe+0x190/0x1f0)
>     [<c05f59e0>] (i2c_demux_pinctrl_probe) from [<c052439c>]
> (platform_drv_probe+0x48/0x94)
>     [<c052439c>] (platform_drv_probe) from [<c05229ac>]
> (really_probe+0x1f0/0x2c0)
>     [<c05229ac>] (really_probe) from [<c0522d04>]
> (driver_probe_device+0x140/0x15c)
>     [<c0522d04>] (driver_probe_device) from [<c0522dac>]
> (__driver_attach+0x8c/0xc8)
>     [<c0522dac>] (__driver_attach) from [<c0520de4>]
> (bus_for_each_dev+0x64/0xa0)
>     [<c0520de4>] (bus_for_each_dev) from [<c0521f34>]
> (bus_add_driver+0x16c/0x1d4)
>     [<c0521f34>] (bus_add_driver) from [<c05236b8>] (driver_register+0xac/0xf0)
>     [<c05236b8>] (driver_register) from [<c0202584>]
> (do_one_initcall+0x70/0x170)
>     [<c0202584>] (do_one_initcall) from [<c0c00ef8>]
> (kernel_init_freeable+0x194/0x1d8)
>     [<c0c00ef8>] (kernel_init_freeable) from [<c07c45e8>]
> (kernel_init+0x8/0x110)
>     [<c07c45e8>] (kernel_init) from [<c02010d8>] (ret_from_fork+0x14/0x3c)
>     Exception stack(0xeb44dfb0 to 0xeb44dff8)
>     dfa0:                                     00000000 00000000
> 00000000 00000000
>     dfc0: 00000000 00000000 00000000 00000000 00000000 00000000
> 00000000 00000000
>     dfe0: 00000000 00000000 00000000 00000000 00000013 00000000
>
>   - SDHI CD pin failure (first channel shown only):
>
>     sh-pfc e6060000.pin-controller: pin GP_6_6 already requested by
> e6055400.gpio:812; cannot claim for e6055400.gpio:812
>     sh-pfc e6060000.pin-controller: pin-198 (e6055400.gpio:812) status -22
>     gpio_rcar e6055400.gpio: Can't request GPIO 6 from e6055400.gpio
>     genirq: Failed to request resources for ee100000.sd cd (irq 186)
> on irqchip e6055400.gpio
>
>   - gpio-keys failure:
>
>     sh-pfc e6060000.pin-controller: pin GP_5_0 already requested by
> e6055000.gpio:838; cannot claim for e6055000.gpio:838
>     sh-pfc e6060000.pin-controller: pin-160 (e6055000.gpio:838) status -22
>     gpio_rcar e6055000.gpio: Can't request GPIO 0 from e6055000.gpio
>     genirq: Failed to request resources for SW2-1 (irq 189) on irqchip
> e6055000.gpio
>     gpio-keys keyboard: Unable to claim irq 189; error -22
>     gpio-keys: probe of keyboard failed with error -22
>
>   - /sys/kernel/debug/pinctrl/e6060000.pin-controller-sh-pfc/pinmux-pins
> changes:
>
>     ADV7511 IRQ is now claimed as a GPIO, which was the intention of your
>     patch:
>
>         -pin 125 (GP_3_29): (MUX UNCLAIMED) (GPIO UNCLAIMED)
>         +pin 125 (GP_3_29): (MUX UNCLAIMED) e6053000.gpio:931
>
>     With #define DEBUG in drivers/pinctrl/sh-pfc/core.c:
>
>         sh-pfc e6060000.pin-controller: write_reg addr = e6060010,
> value = 0x0, field = 2, r_width = 32, f_width = 1
>
>     which means that GP_3_29 is switched to GPIO (GP3[29] = 0x0)
>     (bit 29 = 31 - field 2), good!
>
>     gpio-keys failures:
>
>         -pin 160 (GP_5_0): (MUX UNCLAIMED) e6055000.gpio:838
>         -pin 161 (GP_5_1): (MUX UNCLAIMED) e6055000.gpio:839
>         -pin 162 (GP_5_2): (MUX UNCLAIMED) e6055000.gpio:840
>         -pin 163 (GP_5_3): (MUX UNCLAIMED) e6055000.gpio:841
>         +pin 160 (GP_5_0): (MUX UNCLAIMED) (GPIO UNCLAIMED)
>         +pin 161 (GP_5_1): (MUX UNCLAIMED) (GPIO UNCLAIMED)
>         +pin 162 (GP_5_2): (MUX UNCLAIMED) (GPIO UNCLAIMED)
>         +pin 163 (GP_5_3): (MUX UNCLAIMED) (GPIO UNCLAIMED)
>
>         -pin 224 (GP_7_0): (MUX UNCLAIMED) e6055800.gpio:780
>         -pin 225 (GP_7_1): (MUX UNCLAIMED) e6055800.gpio:781
>         -pin 226 (GP_7_2): (MUX UNCLAIMED) e6055800.gpio:782
>         -pin 227 (GP_7_3): (MUX UNCLAIMED) e6055800.gpio:783
>         -pin 228 (GP_7_4): (MUX UNCLAIMED) e6055800.gpio:784
>         -pin 229 (GP_7_5): (MUX UNCLAIMED) e6055800.gpio:785
>         -pin 230 (GP_7_6): (MUX UNCLAIMED) e6055800.gpio:786
>         +pin 224 (GP_7_0): (MUX UNCLAIMED) (GPIO UNCLAIMED)
>         +pin 225 (GP_7_1): (MUX UNCLAIMED) (GPIO UNCLAIMED)
>         +pin 226 (GP_7_2): (MUX UNCLAIMED) (GPIO UNCLAIMED)
>         +pin 227 (GP_7_3): (MUX UNCLAIMED) (GPIO UNCLAIMED)
>         +pin 228 (GP_7_4): (MUX UNCLAIMED) (GPIO UNCLAIMED)
>         +pin 229 (GP_7_5): (MUX UNCLAIMED) (GPIO UNCLAIMED)
>         +pin 230 (GP_7_6): (MUX UNCLAIMED) (GPIO UNCLAIMED)
>
>     Note that the SDHI CD pins are still claimed as GPIOs, as the SDHI driver
>     continued without a CD pin:
>
>         pin 198 (GP_6_6): (MUX UNCLAIMED) e6055400.gpio:812
>
>
> Salvator-XS:
>
>   - Similar SDHI CD pin and gpio-keys failures
>
>   - RAVB Ethernet WARN_ON(!test_bit(FLAG_USED_AS_IRQ, &desc->flags)
>     in gpiochip_enable_irq():
>
>     WARNING: CPU: 2 PID: 1 at drivers/gpio/gpiolib.c:3513
> gpiochip_enable_irq+0x20/0x58
>     Modules linked in:
>     CPU: 2 PID: 1 Comm: swapper/0 Not tainted
> 4.20.0-rc2-salvator-x-00873-gf433e294a90792da-dirty #238
>     Hardware name: Renesas Salvator-X 2nd version board based on
> r8a7795 ES2.0+ (DT)
>     pstate: 40400085 (nZcv daIf +PAN -UAO)
>     pc : gpiochip_enable_irq+0x20/0x58
>     lr : gpiochip_enable_irq+0xc/0x58
>     sp : ffffff800806b9b0
>     x29: ffffff800806b9b0 x28: ffffff8008d37778
>     x27: 0000000000000000 x26: 0000000000000000
>     x25: ffffffc6f83ceca8 x24: ffffffc6f83cedd0
>     x23: 0000000000000000 x22: 0000000000000001
>     x21: 0000000000000000 x20: ffffffc6f83cec28
>     x19: ffffffc6f83cec28 x18: 000000000000000a
>     x17: 000000006602f828 x16: ffffff800806b7c8
>     x15: 000000000001f40c x14: 0720072007200720
>     x13: 0720072007200720 x12: 0720072007200720
>     x11: 0720072007200720 x10: 07380720073d0720
>     x9 : ffffff800900e6d0 x8 : 0000000000000000
>     x7 : ffffff8008401cfc x6 : 0000000000000080
>     x5 : 0000000000000000 x4 : ffffffc6f8ff4860
>     x3 : ffffffc6f83cec28 x2 : 000000000000000f
>     x1 : 0000000000000000 x0 : ffffffc6f9cd5d60
>     Call trace:
>      gpiochip_enable_irq+0x20/0x58
>      gpiochip_irq_enable+0x1c/0x40
>      irq_enable+0x48/0x5c
>      __irq_startup+0x74/0x7c
>      irq_startup+0x54/0x100
>      __setup_irq+0x48c/0x640
>      request_threaded_irq+0xb8/0x144
>      phy_start_interrupts+0x38/0x78
>      phy_connect_direct+0x48/0x5c
>      of_phy_connect+0x4c/0x78
>      ravb_open+0x38c/0x5f4
>      __dev_open+0x110/0x120
>      __dev_change_flags+0x118/0x1c0
>      dev_change_flags+0x20/0x5c
>      ip_auto_config+0x288/0xf2c
>      do_one_initcall+0x158/0x310
>      kernel_init_freeable+0x438/0x444
>      kernel_init+0x10/0x100
>      ret_from_fork+0x10/0x18
>     irq event stamp: 540337
>     hardirqs last  enabled at (540337): [<ffffff80082312f8>]
> __kmalloc+0x2b0/0x2d0
>     hardirqs last disabled at (540336): [<ffffff80082310f8>]
> __kmalloc+0xb0/0x2d0
>     softirqs last  enabled at (538968): [<ffffff8008081df0>]
> __do_softirq+0x180/0x494
>     softirqs last disabled at (538961): [<ffffff80080ed8cc>] irq_exit+0xa4/0x100
>
>   - /sys/kernel/debug/pinctrl/e6060000.pin-controller-sh-pfc/pinmux-pins
> changes:
>
>     RAVB IRQ is now claimed as a GPIO, which was the intention of your
>     patch:
>
>         -pin 75 (GP_2_11): (MUX UNCLAIMED) (GPIO UNCLAIMED)
>         +pin 75 (GP_2_11): (MUX UNCLAIMED) e6052000.gpio:463
>
>     With #define DEBUG in drivers/pinctrl/sh-pfc/core.c:
>
>         sh-pfc e6060000.pin-controller: write_reg addr = e6060108,
> value = 0x0, field = 20, r_width = 32, f_width = 1
>
>     which means that GP_2_11 is switched to GPIO (GP3[11] = 0x0)
>     (bit 11 = 31 - field 20), good!
>
>     gpio-keys failures:
>
>         -pin 177 (GP_5_17): (MUX UNCLAIMED) e6055000.gpio:409
>         +pin 177 (GP_5_17): (MUX UNCLAIMED) (GPIO UNCLAIMED)
>
>         -pin 180 (GP_5_20): (MUX UNCLAIMED) e6055000.gpio:412
>         +pin 180 (GP_5_20): (MUX UNCLAIMED) (GPIO UNCLAIMED)
>
>         -pin 182 (GP_5_22): (MUX UNCLAIMED) e6055000.gpio:414
>         -pin 183 (GP_5_23): (MUX UNCLAIMED) e6055000.gpio:415
>         +pin 182 (GP_5_22): (MUX UNCLAIMED) (GPIO UNCLAIMED)
>         +pin 183 (GP_5_23): (MUX UNCLAIMED) (GPIO UNCLAIMED)
>
> So it looks like calling gpio_rcar_request() is doing too much.
>
> Gr{oetje,eeting}s,
>
>                         Geert
>
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx
>
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
>                                 -- Linus Torvalds



Renesas Electronics Europe Ltd, Dukes Meadow, Millboard Road, Bourne End, Buckinghamshire, SL8 5FH, UK. Registered in England & Wales under Registered No. 04586709.




[Index of Archives]     [Linux Samsung SOC]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux