From nobody Sat Jun 13 01:43:37 2026 Received: from smtpout-04.galae.net (smtpout-04.galae.net [185.171.202.116]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1588B421F1A for ; Mon, 11 May 2026 15:59:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.171.202.116 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778515157; cv=none; b=XUSg73BdXXcdNzk4VOm18qOjOUMqUuezAnPE8uYDcfz7l/+1BWdMuniQaoD9Ksgi/0GW3QCx4sF5lsVfzfXSDdg67Gkgkk3PKmUiogI5spy/YgOyA6lN+Pf09zeWA6Ou1j0hxFqpZ6pmK9CUYBUrRnrWgKymVDhSjb3HY5LRTVM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778515157; c=relaxed/simple; bh=V6UN6bwqEMS1zE4MxmGghRi6KxBqT1KqYJihRW1kRKs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RSFAI5aFlVEAruyXbPxyCJkH4ORFhwCb33d9e6ZU3dZR9xAI/Yk/gurB50YeY4gPH6xMyemBd6lFtM6mhBFuu/n4+zcNcuGNCSkOgbELu9J66ZsiIiLXbFk4xSKZ3VaxcSV11f/hnbbfmzGdFMHJ/+4DIip7m/sNHN9bgVCoaDM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=Yeq34t9x; arc=none smtp.client-ip=185.171.202.116 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="Yeq34t9x" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id 67835C5E154; Mon, 11 May 2026 16:00:04 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id CF48260646; Mon, 11 May 2026 15:59:14 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 1E0E711AF9F0C; Mon, 11 May 2026 17:59:11 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778515153; h=from:subject:date:message-id:to:cc:mime-version: content-transfer-encoding:in-reply-to:references; bh=IaXeqB2sKsDIMtRh37GrofBANs4uMS/5foflrswZ0z0=; b=Yeq34t9xS0vwWcNADhMWcohBtzDHpA1cyT927x0zts5iHmwnnOuPxYKPeFevmi2aWNms5T MTyJU5RC6SadeoKZxwS5knz8HzbMeLLiDTMSu8+7fuWPd263TqwxMiujn5K+/owC53l5Xw FhXqHjoeL+vPkdqJrue8PC1ZX0e4XTsov3AtZdBqKLbfs6QU/3EhsKIvUzX9t46epIwIBW At6HgM1gY0n/G97gQRsJlye0ekxaopeZ3XCABp7sgWymfIB6Ydn/KjLfkL8pYrbO+2xU/g hX8o7G883vjxGxkGlWx/ConIogwKiF1xfWKalxATafxzT7VOGYiK0euzG3ggUw== From: Herve Codina To: Andrew Lunn , Rob Herring , Saravana Kannan , Geert Uytterhoeven , Kalle Niemi , Matti Vaittinen , Greg Kroah-Hartman , "Rafael J. Wysocki" , Danilo Krummrich Cc: driver-core@lists.linux.dev, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Allan Nielsen , Horatiu Vultur , Daniel Machon , Steen Hegelund , Luca Ceresoli , Thomas Petazzoni , Herve Codina Subject: [PATCH v7 1/2] bus: simple-pm-bus: Remove child devices when the bus is unbound Date: Mon, 11 May 2026 17:58:59 +0200 Message-ID: <20260511155902.34534-2-herve.codina@bootlin.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260511155902.34534-1-herve.codina@bootlin.com> References: <20260511155902.34534-1-herve.codina@bootlin.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Last-TLS-Session-Version: TLSv1.3 Content-Type: text/plain; charset="utf-8" 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 --- drivers/bus/simple-pm-bus.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/bus/simple-pm-bus.c b/drivers/bus/simple-pm-bus.c index c920bd6fbaaf..4b2a793dfbd9 100644 --- a/drivers/bus/simple-pm-bus.c +++ b/drivers/bus/simple-pm-bus.c @@ -83,6 +83,9 @@ static void simple_pm_bus_remove(struct platform_device *= pdev) =20 dev_dbg(&pdev->dev, "%s\n", __func__); =20 + if (pdev->dev.of_node) + of_platform_depopulate(&pdev->dev); + pm_runtime_disable(&pdev->dev); } =20 --=20 2.54.0 From nobody Sat Jun 13 01:43:37 2026 Received: from smtpout-04.galae.net (smtpout-04.galae.net [185.171.202.116]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 61B8642316B for ; Mon, 11 May 2026 15:59:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.171.202.116 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778515160; cv=none; b=DF8ZirPL+wO7gt+/otnjlXPQtradrN8xZgdm1ELlRTj3Y7yR/yJfC6FG4aSwnwjr0gfn86gvjQuKhqOzpjeNWBvD4V9KmCIQDxVRrCz0D3wecfos9WIWMEcp1FWKNfVENH/tXP4+1mSRV30VB30oCJxCTfITCJihfXM6spUPn5g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778515160; c=relaxed/simple; bh=w3bzU5+fI005BUSDFvDAmi3e1zzqSzsVWsUAnGjFQic=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=u8Yw1k+41qBkaPdew2LXjqz3rjYgK93vK8Y995JyLikFKQDBPAM7V7Z0LkDig/57GyA20sO7KhyTxOYChasJoQ0TEVvt6bVuvSUC1ZuxLxrtjxygcA7K975lqrVNYFM8EsRZEbB9Yz0YMTB/os/O65w/NDtWPzeD0vmsN/0l6U0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=YfZZptih; arc=none smtp.client-ip=185.171.202.116 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="YfZZptih" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id D0591C5E14B; Mon, 11 May 2026 16:00:06 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 4393560646; Mon, 11 May 2026 15:59:17 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 57F0511AF9F19; Mon, 11 May 2026 17:59:14 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778515156; h=from:subject:date:message-id:to:cc:mime-version: content-transfer-encoding:in-reply-to:references; bh=f43D8ATRX3ZZph2a3Y4bwWOu8qESFbudFIHWHnMpJY0=; b=YfZZptihTRlYwdSRQHCQLDvkQ2jWLRDBZz2ttBXSVwglXYbKb/G8UM8AG/eqBlyx18kIzB hAIa4P7oXrI/Q0orbZQbcxsTmKKi5/Z4Ev8pKxGSM8hVs4nILDCSWOQYl6CFMFrv8XuNqa jGx2I7MoAnA7c+q6aaKuQueGyETxufE1j59UJQcsMKZCbRQ/0KDNQSksl6AoWHCSHnEJQI 0mwzRDiBq2GufSS8/qVrpNKrY51qH2vCNtAUPNk/8iaPTXR7tgjsYc4DhSpMjSdeiAr+OP rcAtQpYhsyzkezU0KQ5Eh4jvFIQeGEkkT1AsKMOovLbFQ+R3dT+B83Q8Sz/C0g== From: Herve Codina To: Andrew Lunn , Rob Herring , Saravana Kannan , Geert Uytterhoeven , Kalle Niemi , Matti Vaittinen , Greg Kroah-Hartman , "Rafael J. Wysocki" , Danilo Krummrich Cc: driver-core@lists.linux.dev, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Allan Nielsen , Horatiu Vultur , Daniel Machon , Steen Hegelund , Luca Ceresoli , Thomas Petazzoni , Herve Codina Subject: [PATCH v7 2/2] bus: simple-pm-bus: Populate child nodes at probe Date: Mon, 11 May 2026 17:59:00 +0200 Message-ID: <20260511155902.34534-3-herve.codina@bootlin.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260511155902.34534-1-herve.codina@bootlin.com> References: <20260511155902.34534-1-herve.codina@bootlin.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Last-TLS-Session-Version: TLSv1.3 Content-Type: text/plain; charset="utf-8" The simple-pm-bus driver handles several simple busses. When it is used with busses other than a compatible "simple-pm-bus", it doesn't populate its child devices during its probe. This confuses fw_devlink and results in wrong or missing devlinks. Once a driver is bound to a device and the probe() has been called, device_links_driver_bound() is called. This function performs operation based on the following assumption: If a child firmware node of the bound device is not added as a device, it will never be added. Among operations done on fw_devlinks of those "never be added" devices, device_links_driver_bound() changes their supplier. With devices attached to a simple-bus compatible device, this change leads to wrong devlinks where supplier of devices points to the device parent (i.e. simple-bus compatible device) instead of the device itself (i.e. simple-bus child). When the device attached to the simple-bus is removed, because devlinks are not correct, its consumers are not removed first. In order to have correct devlinks created, make the simple-pm-bus driver compliant with the devlink assumption and create its child devices during its probe. Signed-off-by: Herve Codina --- drivers/bus/simple-pm-bus.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/drivers/bus/simple-pm-bus.c b/drivers/bus/simple-pm-bus.c index 4b2a793dfbd9..d969bf19a4e9 100644 --- a/drivers/bus/simple-pm-bus.c +++ b/drivers/bus/simple-pm-bus.c @@ -42,14 +42,15 @@ static int simple_pm_bus_probe(struct platform_device *= pdev) match =3D of_match_device(dev->driver->of_match_table, dev); /* * These are transparent bus devices (not simple-pm-bus matches) that - * have their child nodes populated automatically. So, don't need to - * do anything more. We only match with the device if this driver is - * the most specific match because we don't want to incorrectly bind to - * a device that has a more specific driver. + * need to have their child nodes populated. So, don't need to do + * anything more except populate child nodes during this probe(). We + * only match with the device if this driver is the most specific match + * because we don't want to incorrectly bind to a device that has a more + * specific driver. */ if (match && match->data) { if (of_property_match_string(np, "compatible", match->compatible) =3D=3D= 0) - return 0; + goto populate; else return -ENODEV; } @@ -64,13 +65,14 @@ static int simple_pm_bus_probe(struct platform_device *= pdev) =20 dev_set_drvdata(&pdev->dev, bus); =20 - dev_dbg(&pdev->dev, "%s\n", __func__); - pm_runtime_enable(&pdev->dev); =20 +populate: if (np) of_platform_populate(np, NULL, lookup, &pdev->dev); =20 + dev_dbg(&pdev->dev, "%s\n", __func__); + return 0; } =20 @@ -78,7 +80,7 @@ static void simple_pm_bus_remove(struct platform_device *= pdev) { const void *data =3D of_device_get_match_data(&pdev->dev); =20 - if (device_has_driver_override(&pdev->dev) || data) + if (device_has_driver_override(&pdev->dev)) return; =20 dev_dbg(&pdev->dev, "%s\n", __func__); @@ -86,7 +88,8 @@ static void simple_pm_bus_remove(struct platform_device *= pdev) if (pdev->dev.of_node) of_platform_depopulate(&pdev->dev); =20 - pm_runtime_disable(&pdev->dev); + if (!data) + pm_runtime_disable(&pdev->dev); } =20 static int simple_pm_bus_runtime_suspend(struct device *dev) --=20 2.54.0