Honor the drrs deactivate coming from debugfs and keep it disabled until the same is enabled from the user.
Signed-off-by: Arun R Murthy <[email protected]> --- drivers/gpu/drm/i915/display/intel_display_types.h | 2 ++ drivers/gpu/drm/i915/display/intel_drrs.c | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h index 84bd0d993197..709595bde8d3 100644 --- a/drivers/gpu/drm/i915/display/intel_display_types.h +++ b/drivers/gpu/drm/i915/display/intel_display_types.h @@ -1537,6 +1537,8 @@ struct intel_crtc { unsigned int busy_frontbuffer_bits; enum transcoder cpu_transcoder; struct intel_link_m_n m_n, m2_n2; + /* Runtime override; set to keep DRRS off across commits. */ + bool force_disabled; } drrs; struct { diff --git a/drivers/gpu/drm/i915/display/intel_drrs.c b/drivers/gpu/drm/i915/display/intel_drrs.c index 0fdb32ef241c..6bebb04034e6 100644 --- a/drivers/gpu/drm/i915/display/intel_drrs.c +++ b/drivers/gpu/drm/i915/display/intel_drrs.c @@ -165,6 +165,12 @@ void intel_drrs_activate(const struct intel_crtc_state *crtc_state) mutex_lock(&crtc->drrs.mutex); + /* don't re-arm DRRS if forcefully disabled by debugfs */ + if (crtc->drrs.force_disabled) { + mutex_unlock(&crtc->drrs.mutex); + return; + } + crtc->drrs.cpu_transcoder = crtc_state->cpu_transcoder; crtc->drrs.m_n = crtc_state->dp_m_n; crtc->drrs.m2_n2 = crtc_state->dp_m2_n2; @@ -376,6 +382,10 @@ static int intel_drrs_debugfs_ctl_set(void *data, u64 val) drm_dbg_kms(display->drm, "Manually %sactivating DRRS\n", val ? "" : "de"); + mutex_lock(&crtc->drrs.mutex); + crtc->drrs.force_disabled = !val; + mutex_unlock(&crtc->drrs.mutex); + if (val) intel_drrs_activate(crtc_state); else -- 2.25.1
