Re: [PATCH v4 01/29] Revert "treewide: Fix probing of devices in DT overlays"

Kalle Niemi
2025-12-03T10:11:49Z

On 12/2/25 18:58, Herve Codina wrote:
> Hi Kalle, Matti,
>
> On Tue, 2 Dec 2025 13:21:16 +0200
> Kalle Niemi <kaleposti@gmail.com> wrote:
>
>> On 12/2/25 11:26, Herve Codina wrote:
>>> Hi Kalle,
>>>
>>> On Fri, 28 Nov 2025 10:34:57 +0200
>>> Kalle Niemi <kaleposti@gmail.com> wrote:
>>>
>>> ...
>>>>>>>>>>
>>>>>>>>>> Hello,
>>>>>>>>>>
>>>>>>>>>> Test system testing drivers for ROHM ICs bisected this commit to cause
>>>>>>>>>> BD71847 drivers probe to not be called.
>>>>>>>>> This driver (and overlay support) is in linux-next or something out of
>>>>>>>>> tree on top of linux-next?
>>>>>>>>>
>>>>>>>>> Rob
>>>>>>>> Yes the driver is in mainline linux: /drivers/mfd/rohm-bd718x7.c
>>>>>>> I don't see any support to apply overlays in that driver.
>>>>>> Ah. Sorry for the confusion peeps. I asked Kalle to report this without
>>>>>> proper consideration. 100% my bad.
>>>>>>
>>>>>> While the bd718x7 drive indeed is mainline (and tested), the actual
>>>>>> 'glue-code' doing the overlay is part of the downstream test
>>>>>> infrastructure. So yes, this is not a bug in upstream kernel - this
>>>>>> falls in the category of an upstream change causing downstream things to
>>>>>> break. So, feel free to say: "Go fix your code" :)
>>>>>>
>>>>>> Now that this is sorted, if someone is still interested in helping us to
>>>>>> get our upstream drivers tested - the downstream piece is just taking
>>>>>> the compiled device-tree overlay at runtime (via bin-attribute file),
>>>>>> and applying it using the of_overlay_fdt_apply(). The approach is
>>>>>> working for our testing purposes when the device is added to I2C/SPI
>>>>>> node which is already enabled. However, in case where we have the I2C
>>>>>> disabled, and enable it in the same overlay where we add the new device
>>>>>> - then the new device does not get probed.
>>>>>>
>>>>>> I would be really grateful if someone had a pointer for us.
>>>>> Seems to be fw_devlink related. I suppose if you turn it off it works?
>>>>> There's info about the dependencies in sysfs or maybe debugfs. I don't
>>>>> remember the details, but that should help to tell you why things
>>>>> aren't probing.
>>>
>>> Rob reverted patches but I plan to continue my work on it.
>>> On my side, I need the reverted patches but I fully understand that, on
>>> your side, you need a working system.
>>>
>>> In order to move forward and find a solution for my next iteration, can you
>>> send your overlay (dtso) used in your working and non working cases?
>>>
>>> Best regards,
>>> Hervé
>>
>> Hello Hervé,
>>
>> I have attached the overlay source file: bd71847_overlay.dts
>
> Thanks a lot for your overlay.
>
> I did an update of the reverted patches and I didn't detect any regression
> with the update applied on my use case but I don't have the needed code to
> perform tests similar to your use case. Indeed, you apply the overlay using
> an out of tree code.
>
> May I ask you to perform a test of this update on your side?
>
> First you can use the last linux-next kernel where reverted patches are present.
> The next-20251127 tag is a good candidate. Indeed both patches are present:
> - 76841259ac092 ("of: dynamic: Fix overlayed devices not probing because of fw_devlink")
> - 7d67ddc5f0148 ("Revert "treewide: Fix probing of devices in DT overlays"")
>
> Of course, be sure to have the issue using this kernel with your overlays.
>
> Then can you add the following modification on your faulty kernel:
> ---- 8< ----
> diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c
> index 1528d8ad9f26..aea7bb26d9c4 100644
> --- a/drivers/of/overlay.c
> +++ b/drivers/of/overlay.c
> @@ -190,6 +190,20 @@ static void overlay_fw_devlink_refresh(struct overlay_changeset *ovcs)
> for (int i = 0; i < ovcs->count; i++) {
> struct device_node *np = ovcs->fragments[i].target;
>
> + /*
> + * The device related to target node itself could have been
> + * removed and re-added. This happens when the 'status' property
> + * in the target node has been changed by the overlay.
> + *
> + * In that case the parent node needs to be fixed.
> + *
> + * Before fixing the target node itself, fix its parent. To keep
> + * things simple, fix the parent in any case. If nothing needs
> + * to be fixed, fw_devlink_refresh_fwnode() acts as a no-op.
> + */
> + if (np->parent)
> + fw_devlink_refresh_fwnode(of_fwnode_handle(np->parent));
> +
> fw_devlink_refresh_fwnode(of_fwnode_handle(np));
> }
> }
> ---- 8< ----
>
> My hope is that this modification will fix your issue.
> If so, I will add it in my next iteration.
>
> If you cannot perform the test on your side, can you provide me the out of
> tree code you use to apply the overlay?
>
> Best regards,
> Hervé
Hello Hervé,

I tried this patch on next-20251127 by manually adding the added lines
to /drivers/of/overlay.c, and it did not solve the issue. I will
continue to test this.

BR
Kalle