Thread (11 messages) 11 messages, 4 authors, 2021-01-19

Re: [PATCH v1] of: property: Add fw_devlink support for "gpio" and "gpios" binding

From: Geert Uytterhoeven <geert@linux-m68k.org>
Date: 2021-01-19 18:47:24
Also in: linux-tegra, lkml

Hi Saravana,

On Tue, Jan 19, 2021 at 7:19 PM Saravana Kannan [off-list ref] wrote:
On Tue, Jan 19, 2021 at 10:10 AM Geert Uytterhoeven
[off-list ref] wrote:
quoted
On Tue, Jan 19, 2021 at 6:54 PM Saravana Kannan [off-list ref] wrote:
quoted
On Tue, Jan 19, 2021 at 2:20 AM Linus Walleij [off-list ref] wrote:
quoted
On Tue, Jan 19, 2021 at 9:50 AM Geert Uytterhoeven [off-list ref] wrote:
quoted
quoted
Can we pull this into driver-core-next please? It fixes issues on some
boards with fw_devlink=on.
On r8a77951-salvator-xs.dts, it introduces one more failure:

    OF: /soc/i2c@e66d8000/gpio@20/pcie-sata-switch-hog: could not get
#gpio-cells for /cpus/cpu@102
Geert,

One good thing is that it's noticing this being weird and ignoring it
in your particular board. I *think* it interprets the "7" as a phandle
and that's cpu@102 and realizes it's not a gpio-controller. For at
least in your case, it's a safe failure.
While 7 is the GPIO index, relative to the current GPIO controller,
represented by the parent device node.
quoted
quoted
quoted
Seems like it doesn't parse gpios properties in GPIO hogs correctly.
Could it be that the code assumes no self-referencing phandles?
(Just guessing...)
Ok I tried to understand what gpio-hogs means. It's not fully clear to
me. But it looks like if a gpio-controller has a gpio-hog, then it
doesn't have/need gpio-cells? Is that right?
A GPIO hog is a way to fix (strap) a GPIO line to a specific value.
Usually this is done to enable a piece of hardware on a board, or
control a mux.

The controller still needs gpio-cells.
quoted
So if a gpio-controller has a gpio-hog, can it ever be referred to by
another consumer in DT using blah-gpios = ...? If so, I don't see any
obvious code that's handling the missing gpio-cells in this case.
Yes it can.
quoted
Long story short, please help me understand gpio-hog in the context of
finding dependencies in DT.
The hog references a GPIO on the current controller.  As this is always
the parent device node, the hog's gpios properties lack the phandle.

E.g. a normal reference to the first GPIO of gpio5 looks like:

    gpios = <&gpio5 0 GPIO_ACTIVE_LOW>;

A hog on the first GPIO of gpio5 would be a subnode of gpio5,
and would just use:

    gpios = <0 GPIO_ACTIVE_LOW>;

instead.

Hope this helps.
I'm still not sure if I've understood this fully, but does this just
boil down to:
Don't parse [name-]gpio[s] to find dependencies if the node has
gpio-hog property?
Indeed. You can just ignore all nodes with a gpio-hog property, as they're
always handled by their parent.

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help