Commit 208b22a8 authored by Jouni Högander's avatar Jouni Högander
Browse files

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: default avatarJouni Högander <jouni.hogander@intel.com>
Reviewed-by: default avatarMika Kahola <mika.kahola@intel.com>
Link: https://lore.kernel.org/r/20250414100508.1208774-2-jouni.hogander@intel.com
parent 246b259f
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -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)
{
+1 −0
Original line number Diff line number Diff line
@@ -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);