[PATCH v9 09/13] powercap: arm_scmi: Enable multiple constraints support

Philip Radford philip.radford at arm.com
Wed Sep 9 15:04:33 PDT 2026


From: Cristian Marussi <cristian.marussi at arm.com>

Initialize the domains with all the discovered available constraints,
making available multiple per-domain constraints when the platform has
advertised support for multiple concurrent power limits.

CC: "Rafael J. Wysocki" <rafael at kernel.org>
CC: linux-pm at vger.kernel.org
Signed-off-by: Cristian Marussi <cristian.marussi at arm.com>
[Philip: Amended Copyright]
Signed-off-by: Philip Radford <philip.radford at arm.com>
---
V8->V9
- Added validation check to make sure powercap domain doesn't have too
many constraints
---
 drivers/powercap/arm_scmi_powercap.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/powercap/arm_scmi_powercap.c b/drivers/powercap/arm_scmi_powercap.c
index 2d9370aaaf5d..bcd1ba0bde8c 100644
--- a/drivers/powercap/arm_scmi_powercap.c
+++ b/drivers/powercap/arm_scmi_powercap.c
@@ -2,7 +2,7 @@
 /*
  * SCMI Powercap support.
  *
- * Copyright (C) 2022 ARM Ltd.
+ * Copyright (C) 2022-2026 ARM Ltd.
  */
 
 #include <linux/device.h>
@@ -491,7 +491,7 @@ static int scmi_powercap_register_zone(struct scmi_powercap_root *pr,
 
 	z = powercap_register_zone(&spz->zone, scmi_top_pcntrl, spz->info->name,
 				   parent ? &parent->zone : NULL,
-				   &zone_ops, 1, &constraint_ops);
+				   &zone_ops, spz->info->num_cpli, &constraint_ops);
 	if (!IS_ERR(z)) {
 		spz->height = scmi_powercap_get_zone_height(spz);
 		spz->registered = true;
@@ -649,6 +649,13 @@ static int scmi_powercap_probe(struct scmi_device *sdev)
 		 */
 		spz->info = powercap_ops->info_get(ph, i);
 
+		if (spz->info->num_cpli > MAX_CONSTRAINTS_PER_ZONE) {
+			dev_err(dev, "Powercap domain %s has too many constraints: %u > %u\n",
+				spz->info->name, spz->info->num_cpli,
+				MAX_CONSTRAINTS_PER_ZONE);
+			return -EINVAL;
+		}
+
 		spz->dev = dev;
 		spz->ph = ph;
 		spz->spzones = pr->spzones;
-- 
2.25.1




More information about the linux-arm-kernel mailing list