From: Herve Codina <herve.codina@bootlin.com>
To: Andrew Lunn <andrew@lunn.ch>, Rob Herring <robh@kernel.org>,
Saravana Kannan <saravanak@kernel.org>,
Geert Uytterhoeven <geert+renesas@glider.be>,
Kalle Niemi <kaleposti@gmail.com>,
Matti Vaittinen <mazziesaccount@gmail.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
"Rafael J. Wysocki" <rafael@kernel.org>,
Danilo Krummrich <dakr@kernel.org>,
Johan Hovold <johan@kernel.org>
Cc: driver-core@lists.linux.dev, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
Allan Nielsen <allan.nielsen@microchip.com>,
Horatiu Vultur <horatiu.vultur@microchip.com>,
Daniel Machon <daniel.machon@microchip.com>,
Steen Hegelund <steen.hegelund@microchip.com>,
Luca Ceresoli <luca.ceresoli@bootlin.com>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
Herve Codina <herve.codina@bootlin.com>
Subject: [PATCH v9 3/4] bus: simple-pm-bus: Remove child devices when the bus is unbound
Date: Mon, 9 Nov 2026 15:08:41 +0100 [thread overview]
Message-ID: <20261109140916.90625-4-herve.codina@bootlin.com> (raw)
In-Reply-To: <20261109140916.90625-1-herve.codina@bootlin.com>
During its probe, the simple-pm-bus driver (simple-pm-bus compatible
variant) populates its child devices but it doesn't touch them during
its removal.
This leads to bus child devices present and bound to drivers whereas the
bus itself is unbound.
Be consistent and remove child devices when the bus itself is unbound.
Signed-off-by: Herve Codina <herve.codina@bootlin.com>
---
drivers/bus/simple-pm-bus.c | 45 +++++++++++++++++++++++++++++++++++--
1 file changed, 43 insertions(+), 2 deletions(-)
diff --git a/drivers/bus/simple-pm-bus.c b/drivers/bus/simple-pm-bus.c
index e45700156732..23ac18551fd9 100644
--- a/drivers/bus/simple-pm-bus.c
+++ b/drivers/bus/simple-pm-bus.c
@@ -22,6 +22,46 @@ struct simple_pm_bus {
int num_clks;
};
+static void simple_pm_bus_depopulate(void *data)
+{
+ struct device *dev = data;
+
+ /*
+ * Bus stays on for children
+ * This ensure that the bus will not be put in idle asynchronously when
+ * all its children are removed.
+ */
+ pm_runtime_get_sync(dev);
+
+ /* Let remove children */
+ of_platform_depopulate(dev);
+
+ /*
+ * Lets runtime_suspend() calls simple_pm_bus_runtime_suspend() in a
+ * synchronous way before disabling runtime pm.
+ *
+ * This guarantee that clocks are disabled and unprepared before the
+ * bus is removed in all cases.
+ */
+ pm_runtime_put_sync(dev);
+}
+
+static int simple_pm_bus_populate(struct device *dev,
+ const struct of_dev_auxdata *lookup)
+{
+ struct device_node *np = dev->of_node;
+ int ret;
+
+ if (!np)
+ return 0;
+
+ ret = of_platform_populate(np, NULL, lookup, dev);
+ if (ret)
+ return ret;
+
+ return devm_add_action_or_reset(dev, simple_pm_bus_depopulate, dev);
+}
+
static int simple_pm_bus_probe(struct platform_device *pdev)
{
const struct device *dev = &pdev->dev;
@@ -71,8 +111,9 @@ static int simple_pm_bus_probe(struct platform_device *pdev)
if (ret)
return dev_err_probe(&pdev->dev, ret, "failed enable pm_runtime\n");
- if (np)
- of_platform_populate(np, NULL, lookup, &pdev->dev);
+ ret = simple_pm_bus_populate(&pdev->dev, lookup);
+ if (ret)
+ return dev_err_probe(&pdev->dev, ret, "failed to populate\n");
return 0;
}
--
2.56.0
next prev parent reply other threads:[~2026-11-09 14:09 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-09 14:08 [PATCH v9 0/4] lan966x pci device: Add support for SFPs, simple-bus part Herve Codina
2026-11-09 14:08 ` [PATCH v9 1/4] bus: simple-pm-bus: Avoid inconsistencies between probe() and remove() Herve Codina
2026-11-09 14:08 ` [PATCH v9 2/4] bus: simple-pm-bus: Remove the remove() function Herve Codina
2026-11-09 14:08 ` Herve Codina [this message]
2026-11-09 14:08 ` [PATCH v9 4/4] bus: simple-pm-bus: Populate child nodes at probe Herve Codina
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261109140916.90625-4-herve.codina@bootlin.com \
--to=herve.codina@bootlin.com \
--cc=allan.nielsen@microchip.com \
--cc=andrew@lunn.ch \
--cc=dakr@kernel.org \
--cc=daniel.machon@microchip.com \
--cc=devicetree@vger.kernel.org \
--cc=driver-core@lists.linux.dev \
--cc=geert+renesas@glider.be \
--cc=gregkh@linuxfoundation.org \
--cc=horatiu.vultur@microchip.com \
--cc=johan@kernel.org \
--cc=kaleposti@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luca.ceresoli@bootlin.com \
--cc=mazziesaccount@gmail.com \
--cc=rafael@kernel.org \
--cc=robh@kernel.org \
--cc=saravanak@kernel.org \
--cc=steen.hegelund@microchip.com \
--cc=thomas.petazzoni@bootlin.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®