[PATCH 2/2] imx: power-domain: Enable refcounting on imx8mp

Miquel Raynal miquel.raynal at bootlin.com
Fri Apr 25 08:49:33 CEST 2025


Prevent enabling/disabling multiple times the same power domain to avoid
breakages due to the same power domains being referenced several times
by different device nodes.

Signed-off-by: Miquel Raynal <miquel.raynal at bootlin.com>
---
 drivers/power/domain/imx8m-power-domain.c | 4 ++++
 drivers/power/domain/imx8mp-hsiomix.c     | 4 ++++
 drivers/power/domain/imx8mp-mediamix.c    | 4 ++++
 3 files changed, 12 insertions(+)

diff --git a/drivers/power/domain/imx8m-power-domain.c b/drivers/power/domain/imx8m-power-domain.c
index e54ba5d9a5476f678fb48fb16e7217b031acd78a..b44aae78e6de9733e1e53bbec80f54562487a76b 100644
--- a/drivers/power/domain/imx8m-power-domain.c
+++ b/drivers/power/domain/imx8m-power-domain.c
@@ -506,8 +506,12 @@ static int imx8m_power_domain_bind(struct udevice *dev)
 static int imx8m_power_domain_probe(struct udevice *dev)
 {
 	struct imx8m_power_domain_plat *pdata = dev_get_plat(dev);
+	struct power_domain_plat *plat = dev_get_uclass_plat(dev);
 	int ret;
 
+	/* Every subdomain has its own device node */
+	plat->subdomains = 1;
+
 	/* Nothing to do for non-"power-domain" driver instances. */
 	if (!strstr(dev->name, "power-domain"))
 		return 0;
diff --git a/drivers/power/domain/imx8mp-hsiomix.c b/drivers/power/domain/imx8mp-hsiomix.c
index 455ad53ef525e18ae45068fa5d8c2be8a1b79335..1ca43880ef56a03ae10e70f7e260022acc447dbb 100644
--- a/drivers/power/domain/imx8mp-hsiomix.c
+++ b/drivers/power/domain/imx8mp-hsiomix.c
@@ -201,8 +201,12 @@ int imx8mp_hsiomix_bind(struct udevice *dev)
 static int imx8mp_hsiomix_probe(struct udevice *dev)
 {
 	struct imx8mp_hsiomix_priv *priv = dev_get_priv(dev);
+	struct power_domain_plat *plat = dev_get_uclass_plat(dev);
 	int ret;
 
+	/* Definitions are in imx8mp-power.h */
+	plat->subdomains = 5;
+
 	priv->base = dev_read_addr_ptr(dev);
 
 	ret = clk_get_by_name(dev, "usb", &priv->clk_usb);
diff --git a/drivers/power/domain/imx8mp-mediamix.c b/drivers/power/domain/imx8mp-mediamix.c
index 78c32ca3d3a87febdefd5d128d39d817674b8d32..504c22f7d3631363d76eb21e43afd854258d4ea5 100644
--- a/drivers/power/domain/imx8mp-mediamix.c
+++ b/drivers/power/domain/imx8mp-mediamix.c
@@ -143,9 +143,13 @@ static int imx8mp_mediamix_bind(struct udevice *dev)
 
 static int imx8mp_mediamix_probe(struct udevice *dev)
 {
+	struct power_domain_plat *plat = dev_get_uclass_plat(dev);
 	struct imx8mp_mediamix_priv *priv = dev_get_priv(dev);
 	int ret;
 
+	/* Definitions are in imx8mp-power.h */
+	plat->subdomains = 9;
+
 	priv->base = dev_read_addr_ptr(dev);
 
 	ret = clk_get_by_name(dev, "apb", &priv->clk_apb);

-- 
2.48.1



More information about the U-Boot mailing list