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.d...@intel.com> Signed-off-by: Chaitanya Kumar Borah <chaitanya.kumar.bo...@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