> -----Original Message----- > From: Intel-gfx <intel-gfx-boun...@lists.freedesktop.org> On Behalf Of Jouni > Högander > Sent: Friday, 7 March 2025 12.52 > To: intel-gfx@lists.freedesktop.org; intel...@lists.freedesktop.org > Cc: Hogander, Jouni <jouni.hogan...@intel.com> > Subject: [RFC PATCH 01/11] 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. >
Reviewed-by: Mika Kahola <mika.kah...@intel.com> > Signed-off-by: Jouni Högander <jouni.hogan...@intel.com> > --- > .../drm/i915/display/intel_display_power.c | 29 +++++++++++++++++++ > .../drm/i915/display/intel_display_power.h | 1 + > 2 files changed, 30 insertions(+) > > diff --git a/drivers/gpu/drm/i915/display/intel_display_power.c > b/drivers/gpu/drm/i915/display/intel_display_power.c > index f7171e6932dc..6dfe85a5528f 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_power.c > +++ b/drivers/gpu/drm/i915/display/intel_display_power.c > @@ -322,6 +322,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) { > diff --git a/drivers/gpu/drm/i915/display/intel_display_power.h > b/drivers/gpu/drm/i915/display/intel_display_power.h > index 1b53d67f9b60..f8813b0e16df 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_power.h > +++ b/drivers/gpu/drm/i915/display/intel_display_power.h > @@ -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); > -- > 2.43.0