[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CACRpkda7MbBmas+jcPJ4k=L6ab+EHkKRA3LrTGQfWPKsHeMdWA@mail.gmail.com>
Date: Thu, 6 Feb 2025 09:31:15 +0100
From: Linus Walleij <linus.walleij@...aro.org>
To: Valentin Caron <valentin.caron@...s.st.com>
Cc: linux-gpio@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] pinctrl: devicetree: do not goto err when probing hogs in pinctrl_dt_to_map
On Thu, Jan 16, 2025 at 6:02 PM Valentin Caron
<valentin.caron@...s.st.com> 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@...s.st.com>
It looks correct to me, so patch is applied for v6.15!
Yours,
Linus Walleij
Powered by blists - more mailing lists