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

Herve Codina
2025-12-02T16:58:58Z

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é