[PATCH] drm/i915/display: Skip unavailable power wells based on pipe mask

Chaitanya Kumar Borah chaitanya.kumar.borah at intel.com
Thu Jul 17 05:16:03 UTC 2025


Some power wells are only relevant for certain display pipes. Add a check
to ensure we only allocate and initialize power wells whose associated
pipes are available on the platform.

This avoids unnecessary mapping of power wells, particularly when platforms
support a subset of pipes described in the power well descriptors.

Suggested-by: Imre Deak <imre.deak at intel.com>
Signed-off-by: Chaitanya Kumar Borah <chaitanya.kumar.borah at intel.com>
---
 .../i915/display/intel_display_power_map.c    | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_power_map.c b/drivers/gpu/drm/i915/display/intel_display_power_map.c
index 77268802b55e..ca73e4084354 100644
--- a/drivers/gpu/drm/i915/display/intel_display_power_map.c
+++ b/drivers/gpu/drm/i915/display/intel_display_power_map.c
@@ -1748,6 +1748,16 @@ static void init_power_well_domains(const struct i915_power_well_instance *inst,
 		for_each_power_well_instance_in_desc_list((_descs)->list, (_descs)->count, \
 							  (_desc), (_inst))
 
+static bool
+is_power_well_available(struct intel_display *display, const struct i915_power_well_desc *desc)
+{
+	if (desc->irq_pipe_mask &&
+	    !(desc->irq_pipe_mask & DISPLAY_RUNTIME_INFO(display)->pipe_mask))
+		return false;
+
+	return true;
+}
+
 static int
 __set_power_wells(struct i915_power_domains *power_domains,
 		  const struct i915_power_well_desc_list *power_well_descs,
@@ -1763,8 +1773,10 @@ __set_power_wells(struct i915_power_domains *power_domains,
 	int power_well_count = 0;
 	int plt_idx = 0;
 
-	for_each_power_well_instance(power_well_descs, power_well_descs_sz, desc_list, desc, inst)
-		power_well_count++;
+	for_each_power_well_instance(power_well_descs, power_well_descs_sz, desc_list, desc, inst) {
+		if (is_power_well_available(display, desc))
+			power_well_count++;
+	}
 
 	power_domains->power_well_count = power_well_count;
 	power_domains->power_wells =
@@ -1778,6 +1790,9 @@ __set_power_wells(struct i915_power_domains *power_domains,
 		struct i915_power_well *pw = &power_domains->power_wells[plt_idx];
 		enum i915_power_well_id id = inst->id;
 
+		if (!is_power_well_available(display, desc))
+			continue;
+
 		pw->desc = desc;
 		drm_WARN_ON(display->drm,
 			    overflows_type(inst - desc->instances->list, pw->instance_idx));
-- 
2.25.1



More information about the Intel-xe mailing list