On Tue, Jul 16, 2024 at 11:48 AM Geert Uytterhoeven geert@linux-m68k.org wrote:
On Wed, Jul 10, 2024 at 10:14 PM Stephen Boyd sboyd@kernel.org wrote:
We'd like to apply overlays to the root node in KUnit so we can test platform devices created as children of the root node.
On some architectures (powerpc), the root node isn't marked with OF_POPULATED_BUS. If an overlay tries to modify the root node on these platforms it will fail, while on other platforms, such as ARM, it will succeed. This is because the root node is marked with OF_POPULATED_BUS by of_platform_default_populate_init() calling of_platform_default_populate() with NULL as the first argument.
Loosen the requirement here so that platform devices can be created for nodes created as children of the root node via DT overlays even if the platform bus wasn't populated for the root node.
Reviewed-by: Rob Herring (Arm) robh@kernel.org Cc: Saravana Kannan saravanak@google.com Signed-off-by: Stephen Boyd sboyd@kernel.org
--- a/drivers/of/platform.c +++ b/drivers/of/platform.c @@ -732,11 +732,14 @@ static int of_platform_notify(struct notifier_block *nb, struct of_reconfig_data *rd = arg; struct platform_device *pdev_parent, *pdev; bool children_left;
struct device_node *parent; switch (of_reconfig_get_state_change(action, rd)) { case OF_RECONFIG_CHANGE_ADD:
/* verify that the parent is a bus */
if (!of_node_check_flag(rd->dn->parent, OF_POPULATED_BUS))
parent = rd->dn->parent;
/* verify that the parent is a bus (or the root node) */
if (!of_node_is_root(parent) &&
of_node_check_flag(parent, OF_POPULATED_BUS))
Oh, you inverted the check for of_node_check_flag(); was that intentional? Re-adding the "!" fixes all issues for me.
I have sent a fix. https://lore.kernel.org/a9ada686e1f1c6f496e423deaf108f1bcfd94d7d.1721123679....
Gr{oetje,eeting}s,
Geert