Currently workaround is not applied when vblank is enabled on crtc that
needs the workaround if vblank is already enabled for another crtc that
doesn't need the workaround. Fix this by increasing counter only if crtc
needs the workaround.
Fixes: aa451abcffb5 ("drm/i915/display: Prevent DC6 while vblank is enabled for
Panel Replay")
Signed-off-by: Jouni Högander <[email protected]>
Suggested-by: Ville Syrjälä <[email protected]>
---
drivers/gpu/drm/i915/display/intel_display_irq.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/i915/display/intel_display_irq.c
b/drivers/gpu/drm/i915/display/intel_display_irq.c
index 8226ea218d77..263fe3be891c 100644
--- a/drivers/gpu/drm/i915/display/intel_display_irq.c
+++ b/drivers/gpu/drm/i915/display/intel_display_irq.c
@@ -1447,7 +1447,7 @@ int bdw_enable_vblank(struct drm_crtc *_crtc)
if (gen11_dsi_configure_te(crtc, true))
return 0;
- if (display->irq.vblank_wa_num_pipes++ == 0 &&
crtc->block_dc_for_vblank)
+ if (crtc->block_dc_for_vblank && display->irq.vblank_wa_num_pipes++ ==
0)
schedule_work(&display->irq.vblank_dc_work);
spin_lock_irqsave(&dev_priv->irq_lock, irqflags);
@@ -1478,7 +1478,7 @@ void bdw_disable_vblank(struct drm_crtc *_crtc)
bdw_disable_pipe_irq(dev_priv, pipe, GEN8_PIPE_VBLANK);
spin_unlock_irqrestore(&dev_priv->irq_lock, irqflags);
- if (--display->irq.vblank_wa_num_pipes == 0 &&
crtc->block_dc_for_vblank)
+ if (crtc->block_dc_for_vblank && --display->irq.vblank_wa_num_pipes ==
0)
schedule_work(&display->irq.vblank_dc_work);
}
--
2.34.1