Message ID | 20210202043345.3778765-1-saravanak@google.com |
---|---|
Headers | show |
Series | Make fw_devlink=on more forgiving | expand |
On Tue, Feb 2, 2021 at 11:55 PM Geert Uytterhoeven <geert@linux-m68k.org> wrote: > > On Tue, Feb 2, 2021 at 11:44 PM Saravana Kannan <saravanak@google.com> wrote: > > On Tue, Feb 2, 2021 at 1:22 PM Martin Kaiser <martin@kaiser.cx> wrote: > > > Thus wrote Saravana Kannan (saravanak@google.com): > > > All of those drivers have a gpio in > > > their device-tree node, such as > > > > > > my_driver { > > > gpio_test1 = <&gpio1 0 0>; > > > ... > > > }; > > > > > > with gpio1 from arch/arm/boot/dts/imx25.dtsi. > > > > > > The probe function calls > > > > > > of_get_named_gpio(np, "gpio_test1", 0); > > > > > > to get the gpio. This fails with -EINVAL. > > > > And you didn't see this issue with the fsl,avic patch? > > > > The property you are using is not a standard GPIO binding (-gpios, > > gpio, gpios) and I'm not surprised it's not working. The gpio1 is > > probably getting probe deferred and ends up running after "my_driver". > > So my_driver doesn't support deferred probe, as of_get_named_gpio() > returns -EINVAL instead of -EPROBE_DEFER? > Converting my_driver from of_get_named_gpio() to the gpiod_*() API > should at least make the driver support probe deferral, after which I > expect it to start working again on reprobe? The way I understood the API/example, you can't just change the code and have it work. The DT itself isn't using standard bindings. And we can't make kernel changes that assume the DT has been changed to match the code. So, the best we could do is have of_get_named_gpio() return -EPROBE_DEFER if it doesn't find the GPIO -- assuming that doesn't break other users. Or have this specific driver remap the -EINVAL to -EPROBE_DEFER. -Saravana
Hi Saravana, On Wed, Feb 3, 2021 at 9:11 AM Saravana Kannan <saravanak@google.com> wrote: > On Tue, Feb 2, 2021 at 11:55 PM Geert Uytterhoeven <geert@linux-m68k.org> wrote: > > On Tue, Feb 2, 2021 at 11:44 PM Saravana Kannan <saravanak@google.com> wrote: > > > On Tue, Feb 2, 2021 at 1:22 PM Martin Kaiser <martin@kaiser.cx> wrote: > > > > Thus wrote Saravana Kannan (saravanak@google.com): > > > > All of those drivers have a gpio in > > > > their device-tree node, such as > > > > > > > > my_driver { > > > > gpio_test1 = <&gpio1 0 0>; > > > > ... > > > > }; > > > > > > > > with gpio1 from arch/arm/boot/dts/imx25.dtsi. > > > > > > > > The probe function calls > > > > > > > > of_get_named_gpio(np, "gpio_test1", 0); > > > > > > > > to get the gpio. This fails with -EINVAL. > > > > > > And you didn't see this issue with the fsl,avic patch? > > > > > > The property you are using is not a standard GPIO binding (-gpios, > > > gpio, gpios) and I'm not surprised it's not working. The gpio1 is > > > probably getting probe deferred and ends up running after "my_driver". > > > > So my_driver doesn't support deferred probe, as of_get_named_gpio() > > returns -EINVAL instead of -EPROBE_DEFER? > > Converting my_driver from of_get_named_gpio() to the gpiod_*() API > > should at least make the driver support probe deferral, after which I > > expect it to start working again on reprobe? > > The way I understood the API/example, you can't just change the code > and have it work. The DT itself isn't using standard bindings. And we Oh, right. > can't make kernel changes that assume the DT has been changed to match > the code. So, the best we could do is have of_get_named_gpio() return > -EPROBE_DEFER if it doesn't find the GPIO -- assuming that doesn't > break other users. Or have this specific driver remap the -EINVAL to > -EPROBE_DEFER. The latter would hide real errors, too, and would cause futile reprobes. Gr{oetje,eeting}s, Geert
Thus wrote Geert Uytterhoeven (geert@linux-m68k.org): > > The property you are using is not a standard GPIO binding (-gpios, > > gpio, gpios) and I'm not surprised it's not working. The gpio1 is > > probably getting probe deferred and ends up running after "my_driver". > So my_driver doesn't support deferred probe, I know that the gpio definition in the device-tree is non-standard (and should have been done differently). Apart from this, the driver uses module_platform_driver_probe. My understanding is that this prevents probe deferral. Does this mean that from now on, a driver which requests a gpio must not use module_platform_driver_probe? Thanks, Martin