Re: [PATCH] pinctrl: devicetree: do not goto err when probing hogs in pinctrl_dt_to_map

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

 



On Thu, Jan 16, 2025 at 6:02 PM Valentin Caron
<valentin.caron@xxxxxxxxxxx> wrote:

> Cross case in pinctrl framework make impossible to an hogged pin and
> another, not hogged, used within the same device-tree node. For example
> with this simplified device-tree :
>
>   &pinctrl {
>     pinctrl_pin_1: pinctrl-pin-1 {
>       pins = "dummy-pinctrl-pin";
>     };
>   };
>
>   &rtc {
>     pinctrl-names = "default"
>     pinctrl-0 = <&pinctrl_pin_1 &rtc_pin_1>
>
>     rtc_pin_1: rtc-pin-1 {
>       pins = "dummy-rtc-pin";
>     };
>   };
>
> "pinctrl_pin_1" configuration is never set. This produces this path in
> the code:
>
>   really_probe()
>     pinctrl_bind_pins()
>     | devm_pinctrl_get()
>     |   pinctrl_get()
>     |     create_pinctrl()
>     |       pinctrl_dt_to_map()
>     |         // Hog pin create an abort for all pins of the node
>     |         ret = dt_to_map_one_config()
>     |         | /* Do not defer probing of hogs (circular loop) */
>     |         | if (np_pctldev == p->dev->of_node)
>     |         |   return -ENODEV;
>     |         if (ret)
>     |           goto err
>     |
>     call_driver_probe()
>       stm32_rtc_probe()
>         pinctrl_enable()
>           pinctrl_claim_hogs()
>             create_pinctrl()
>               for_each_maps(maps_node, i, map)
>                 // Not hog pin is skipped
>                 if (pctldev && strcmp(dev_name(pctldev->dev),
>                                       map->ctrl_dev_name))
>                   continue;
>
> At the first call of create_pinctrl() the hogged pin produces an abort to
> avoid a defer of hogged pins. All other pin configurations are trashed.
>
> At the second call, create_pinctrl is now called with pctldev parameter to
> get hogs, but in this context only hogs are set. And other pins are
> skipped.
>
> To handle this, do not produce an abort in the first call of
> create_pinctrl(). Classic pin configuration will be set in
> pinctrl_bind_pins() context. And the hogged pin configuration will be set
> in pinctrl_claim_hogs() context.
>
> Signed-off-by: Valentin Caron <valentin.caron@xxxxxxxxxxx>

It looks correct to me, so patch is applied for v6.15!

Yours,
Linus Walleij





[Index of Archives]     [Linux SPI]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux