diff options
author | Miquel Raynal <miquel.raynal@bootlin.com> | 2025-04-25 08:49:33 +0200 |
---|---|---|
committer | Fabio Estevam <festevam@denx.de> | 2025-04-28 10:41:19 -0300 |
commit | a785ef24487b51f911fe11bc91f30877eb1ced83 (patch) | |
tree | bb300774dc2bdf51da1b4bc6fb58f089244773f2 | |
parent | 9086b64ca07166b1e72b29ad04e3fe2a483c5454 (diff) |
imx: power-domain: Enable refcounting on imx8mp
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@bootlin.com>
-rw-r--r-- | drivers/power/domain/imx8m-power-domain.c | 4 | ||||
-rw-r--r-- | drivers/power/domain/imx8mp-hsiomix.c | 4 | ||||
-rw-r--r-- | drivers/power/domain/imx8mp-mediamix.c | 4 |
3 files changed, 12 insertions, 0 deletions
diff --git a/drivers/power/domain/imx8m-power-domain.c b/drivers/power/domain/imx8m-power-domain.c index e54ba5d9a54..b44aae78e6d 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 455ad53ef52..1ca43880ef5 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 78c32ca3d3a..504c22f7d36 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); |