Re: [PATCH v1 1/1] gpiolib: Read "gpio-line-names" from a firmware node

From: Marek Vasut
Date: Sat Apr 10 2021 - 09:18:17 EST


On 4/10/21 11:06 AM, Bartosz Golaszewski wrote:
On Sat, Apr 10, 2021 at 2:46 AM Marek Vasut <marex@xxxxxxx> wrote:

On 3/15/21 6:04 PM, Andy Shevchenko wrote:
On Mon, Mar 15, 2021 at 6:49 PM Bartosz Golaszewski
<bgolaszewski@xxxxxxxxxxxx> wrote:

On Mon, Mar 15, 2021 at 3:34 PM Andy Shevchenko
<andriy.shevchenko@xxxxxxxxxxxxxxx> wrote:

On Mon, Mar 15, 2021 at 03:04:37PM +0100, Bartosz Golaszewski wrote:
On Mon, Mar 15, 2021 at 1:50 PM Andy Shevchenko
<andriy.shevchenko@xxxxxxxxxxxxxxx> wrote:

On Mon, Mar 15, 2021 at 12:16:26PM +0200, Andy Shevchenko wrote:
On Mon, Mar 15, 2021 at 10:01:47AM +0100, Bartosz Golaszewski wrote:
On Fri, Mar 5, 2021 at 1:03 PM Andy Shevchenko
<andriy.shevchenko@xxxxxxxxxxxxxxx> wrote:

Unfortunately while this may fix the particular use-case on STM32, it
breaks all other users as the 'gpio-line-names' property doesn't live
on dev_fwnode(&gdev->dev) but on dev_fwnode(chip->parent).

How about we first look for this property on the latter and only if
it's not present descend down to the former fwnode?

Oops, I have tested on x86 and it worked the same way.

Lemme check this, but I think the issue rather in ordering when we apply fwnode
to the newly created device and when we actually retrieve gpio-line-names
property.

Hmm... I can't see how it's possible can be. Can you provide a platform name
and pointers to the DTS that has been broken by the change?


I noticed it with gpio-mockup (libgpiod tests failed on v5.12-rc3) and
the WiP gpio-sim - but it's the same on most DT platforms. The node
that contains the `gpio-line-names` is the one associated with the
platform device passed to the GPIO driver. The gpiolib then creates
another struct device that becomes the child of that node but it
doesn't copy the parent's properties to it (nor should it).

Every driver that reads device properties does it from the parent
device, not the one in gdev - whether it uses of_, fwnode_ or generic
device_ properties.

What you are telling contradicts with the idea of copying parent's fwnode
(or OF node) in the current code.


Ha! While the OF node of the parent device is indeed assigned to the
gdev's dev, the same isn't done in the core code for fwnodes and
simulated chips don't have an associated OF node, so this is the
culprit I suppose.

Close, but not fully correct.
First of all it depends on the OF / ACPI / platform enumeration.
Second, we are talking about secondary fwnode in the case where it happens.

I'm in the middle of debugging this, I'll come up with something soon I believe.

Was there ever any follow up on this ?

I would like to point out that on STM32MP1 in Linux 5.10.y, the
gpio-line-names are still broken, and a revert of "gpiolib: generalize
devprop_gpiochip_set_names() for device properties" is still necessary.

Yes, Andy has fixed that in commit b41ba2ec54a7 ("gpiolib: Read
"gpio-line-names" from a firmware node") but for some reason this has
never made its way into stable. I'll resend it.

Yes, that's the missing one, thanks. With that picked, the mp1 is fine.