[PATCH 03/11] pmdomain: st: ux500: Implement more power domains
Linus Walleij
linusw at kernel.org
Wed Jun 17 22:00:49 PDT 2026
This starts to implement the power domains that are just skeleton
implementations right now.
Signed-off-by: Linus Walleij <linus.walleij at linaro.org>
---
drivers/pmdomain/st/ste-ux500-pm-domain.c | 125 +++++++++++++++++++++++++++++-
1 file changed, 124 insertions(+), 1 deletion(-)
diff --git a/drivers/pmdomain/st/ste-ux500-pm-domain.c b/drivers/pmdomain/st/ste-ux500-pm-domain.c
index 6896cb4a7b71..723001004690 100644
--- a/drivers/pmdomain/st/ste-ux500-pm-domain.c
+++ b/drivers/pmdomain/st/ste-ux500-pm-domain.c
@@ -41,14 +41,137 @@ static int pd_power_on(struct generic_pm_domain *domain)
return 0;
}
+/*
+ * Apart from these voltage domains there is also VSAFE which is always
+ * on. Vape_esram0_pwr for eSRAM0 is connected to VSAFE.
+ */
static struct generic_pm_domain ux500_pm_domain_vape = {
- .name = "VAPE",
+ /* Vape_pwr */
+ .name = "VAPE", /* 0.95 .. 1.20 V */
+ .power_off = pd_power_off,
+ .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_varm = {
+ .name = "VARM",
+ .power_off = pd_power_off,
+ .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_vmodem = {
+ .name = "VMODEM",
+ .power_off = pd_power_off,
+ .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_vpll = {
+ .name = "VPLL", /* 1.8 V */
+ .power_off = pd_power_off,
+ .power_on = pd_power_on,
+};
+
+/*
+ * CHECKME: as these are used directly by peripherals as regulators,
+ * perhaps they should stay in the regulator subsystem?
+ */
+static struct generic_pm_domain ux500_pm_domain_vsmps1 = {
+ .name = "VSMPS1", /* Also called VIO (1.2V) */
+ .power_off = pd_power_off,
+ .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_vsmps2 = {
+ .name = "VSMPS2", /* Also called VIO (1.8V) */
+ .power_off = pd_power_off,
+ .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_vsmps3 = {
+ .name = "VSMPS3",
+ .power_off = pd_power_off,
+ .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_vrf1 = {
+ .name = "VRF1",
+ .power_off = pd_power_off,
+ .power_on = pd_power_on,
+};
+
+/* The following are technically children of VAPE */
+static struct generic_pm_domain ux500_pm_domain_sva_mmdsp = {
+ /* Vape_SVA_MMDSP_pwr */
+ .name = "SVA_MMDSP",
+ .power_off = pd_power_off,
+ .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_sva_pipe = {
+ /* Vape_SVA_pwr */
+ .name = "SVA_PIPE",
+ .power_off = pd_power_off,
+ .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_sia_mmdsp = {
+ /* Vape_SIA_MMDSP_pwr */
+ .name = "SIA_MMDSP",
+ .power_off = pd_power_off,
+ .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_sia_pipe = {
+ /* Vape_SIA_pwr */
+ .name = "SIA_PIPE",
+ .power_off = pd_power_off,
+ .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_sga = {
+ /* Vape_SGA_pwr */
+ .name = "SGA",
+ .power_off = pd_power_off,
+ .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_b2r2_mcde = {
+ /* Vape_DSS_pwr DSS (display subsystem) */
+ .name = "B2R2_MCDE",
+ .power_off = pd_power_off,
+ .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_esram_12 = {
+ /* Vape_esram0_pwr, Vape_esram1_pwr */
+ .name = "ESRAM_12",
+ .power_off = pd_power_off,
+ .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_esram_34 = {
+ /* Vape_esram3_pwr, Vape_esram4_pwr */
+ .name = "ESRAM_34",
.power_off = pd_power_off,
.power_on = pd_power_on,
};
static struct generic_pm_domain *ux500_pm_domains[NR_DOMAINS] = {
[DOMAIN_VAPE] = &ux500_pm_domain_vape,
+ [DOMAIN_VARM] = &ux500_pm_domain_varm,
+ [DOMAIN_VMODEM] = &ux500_pm_domain_vmodem,
+ [DOMAIN_VPLL] = &ux500_pm_domain_vpll,
+ [DOMAIN_VSMPS1] = &ux500_pm_domain_vsmps1,
+ [DOMAIN_VSMPS2] = &ux500_pm_domain_vsmps2,
+ [DOMAIN_VSMPS3] = &ux500_pm_domain_vsmps3,
+ [DOMAIN_VRF1] = &ux500_pm_domain_vrf1,
+ [DOMAIN_SVA_MMDSP] = &ux500_pm_domain_sva_mmdsp,
+ [DOMAIN_SVA_PIPE] = &ux500_pm_domain_sva_pipe,
+ [DOMAIN_SIA_MMDSP] = &ux500_pm_domain_sia_mmdsp,
+ [DOMAIN_SIA_PIPE] = &ux500_pm_domain_sia_pipe,
+ [DOMAIN_SGA] = &ux500_pm_domain_sga,
+ [DOMAIN_B2R2_MCDE] = &ux500_pm_domain_b2r2_mcde,
+ [DOMAIN_ESRAM_12] = &ux500_pm_domain_esram_12,
+ [DOMAIN_ESRAM_34] = &ux500_pm_domain_esram_34,
};
static const struct of_device_id ux500_pm_domain_matches[] = {
--
2.54.0
More information about the linux-arm-kernel
mailing list