summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/i915/display
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2022-03-15 15:27:51 +0200
committerVille Syrjälä <ville.syrjala@linux.intel.com>2022-03-16 14:45:48 +0200
commit579899c7da714fac736b13fdb202e0a2cb9d3d27 (patch)
treee8e162c54f86e4373ec4dbd211d5f63e520e563e /drivers/gpu/drm/i915/display
parent1b333c679a0fdfd899269b7e10a002aad334a15e (diff)
drm/i915: Deal with bigjoiner vs. DRRS
DRRS operates on transcoder level, so we should only poke at it from the master crtc rather than letting every joined pipe give it potentially conflicting input. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20220315132752.11849-9-ville.syrjala@linux.intel.com Reviewed-by: Manasi Navare <manasi.d.navare@intel.com>
Diffstat (limited to 'drivers/gpu/drm/i915/display')
-rw-r--r--drivers/gpu/drm/i915/display/intel_drrs.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/display/intel_drrs.c b/drivers/gpu/drm/i915/display/intel_drrs.c
index 44c9af8f8b9b..9a341ab1a848 100644
--- a/drivers/gpu/drm/i915/display/intel_drrs.c
+++ b/drivers/gpu/drm/i915/display/intel_drrs.c
@@ -176,8 +176,16 @@ static void intel_drrs_schedule_work(struct intel_crtc *crtc)
static unsigned int intel_drrs_frontbuffer_bits(const struct intel_crtc_state *crtc_state)
{
struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
+ struct drm_i915_private *i915 = to_i915(crtc->base.dev);
+ unsigned int frontbuffer_bits;
- return INTEL_FRONTBUFFER_ALL_MASK(crtc->pipe);
+ frontbuffer_bits = INTEL_FRONTBUFFER_ALL_MASK(crtc->pipe);
+
+ for_each_intel_crtc_in_pipe_mask(&i915->drm, crtc,
+ crtc_state->bigjoiner_pipes)
+ frontbuffer_bits |= INTEL_FRONTBUFFER_ALL_MASK(crtc->pipe);
+
+ return frontbuffer_bits;
}
/**
@@ -196,6 +204,9 @@ void intel_drrs_enable(const struct intel_crtc_state *crtc_state)
if (!crtc_state->hw.active)
return;
+ if (intel_crtc_is_bigjoiner_slave(crtc_state))
+ return;
+
mutex_lock(&crtc->drrs.mutex);
crtc->drrs.cpu_transcoder = crtc_state->cpu_transcoder;
@@ -223,6 +234,9 @@ void intel_drrs_disable(const struct intel_crtc_state *old_crtc_state)
if (!old_crtc_state->hw.active)
return;
+ if (intel_crtc_is_bigjoiner_slave(old_crtc_state))
+ return;
+
mutex_lock(&crtc->drrs.mutex);
if (intel_drrs_is_enabled(crtc))