Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/i915/display: Add new interface for getting dc_state

To implement workaround for underrun on idle PSR HW issue (Wa_16025596647)
we need to have current configured DC state available. Add new interface
for this purpose.

Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Mika Kahola <mika.kahola@intel.com>
Link: https://lore.kernel.org/r/20250414100508.1208774-2-jouni.hogander@intel.com

+30
+29
drivers/gpu/drm/i915/display/intel_display_power.c
··· 323 323 mutex_unlock(&power_domains->lock); 324 324 } 325 325 326 + /** 327 + * intel_display_power_get_current_dc_state - Set target dc state. 328 + * @display: display device 329 + * 330 + * This function set the "DC off" power well target_dc_state, 331 + * based upon this target_dc_stste, "DC off" power well will 332 + * enable desired DC state. 333 + */ 334 + u32 intel_display_power_get_current_dc_state(struct intel_display *display) 335 + { 336 + struct i915_power_well *power_well; 337 + struct i915_power_domains *power_domains = &display->power.domains; 338 + u32 current_dc_state = DC_STATE_DISABLE; 339 + 340 + mutex_lock(&power_domains->lock); 341 + power_well = lookup_power_well(display, SKL_DISP_DC_OFF); 342 + 343 + if (drm_WARN_ON(display->drm, !power_well)) 344 + goto unlock; 345 + 346 + current_dc_state = intel_power_well_is_enabled(display, power_well) ? 347 + DC_STATE_DISABLE : power_domains->target_dc_state; 348 + 349 + unlock: 350 + mutex_unlock(&power_domains->lock); 351 + 352 + return current_dc_state; 353 + } 354 + 326 355 static void __async_put_domains_mask(struct i915_power_domains *power_domains, 327 356 struct intel_power_domain_mask *mask) 328 357 {
+1
drivers/gpu/drm/i915/display/intel_display_power.h
··· 183 183 void intel_display_power_resume(struct intel_display *display); 184 184 void intel_display_power_set_target_dc_state(struct intel_display *display, 185 185 u32 state); 186 + u32 intel_display_power_get_current_dc_state(struct intel_display *display); 186 187 187 188 bool intel_display_power_is_enabled(struct intel_display *display, 188 189 enum intel_display_power_domain domain);