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
This commit is contained in:
Jouni Högander 2025-04-14 13:04:56 +03:00
parent 246b259f1d
commit 208b22a86f
2 changed files with 30 additions and 0 deletions

View File

@ -323,6 +323,35 @@ void intel_display_power_set_target_dc_state(struct intel_display *display,
mutex_unlock(&power_domains->lock);
}
/**
* intel_display_power_get_current_dc_state - Set target dc state.
* @display: display device
*
* This function set the "DC off" power well target_dc_state,
* based upon this target_dc_stste, "DC off" power well will
* enable desired DC state.
*/
u32 intel_display_power_get_current_dc_state(struct intel_display *display)
{
struct i915_power_well *power_well;
struct i915_power_domains *power_domains = &display->power.domains;
u32 current_dc_state = DC_STATE_DISABLE;
mutex_lock(&power_domains->lock);
power_well = lookup_power_well(display, SKL_DISP_DC_OFF);
if (drm_WARN_ON(display->drm, !power_well))
goto unlock;
current_dc_state = intel_power_well_is_enabled(display, power_well) ?
DC_STATE_DISABLE : power_domains->target_dc_state;
unlock:
mutex_unlock(&power_domains->lock);
return current_dc_state;
}
static void __async_put_domains_mask(struct i915_power_domains *power_domains,
struct intel_power_domain_mask *mask)
{

View File

@ -183,6 +183,7 @@ void intel_display_power_suspend(struct intel_display *display);
void intel_display_power_resume(struct intel_display *display);
void intel_display_power_set_target_dc_state(struct intel_display *display,
u32 state);
u32 intel_display_power_get_current_dc_state(struct intel_display *display);
bool intel_display_power_is_enabled(struct intel_display *display,
enum intel_display_power_domain domain);