summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2026-02-26 13:07:24 +0300
committerVille Syrjälä <ville.syrjala@linux.intel.com>2026-02-27 11:41:34 +0300
commit6daf9a495c47337b366ad6d8a096a35d38a388e8 (patch)
tree3a28d1d4fe15b2a83be5a463b4456987edbf52fe
parent7e3517dfb6933214c00afdfb6fe8fab1ae000aab (diff)
downloadlinux-6daf9a495c47337b366ad6d8a096a35d38a388e8.tar.xz
drm/i915/overlay: Relocate the underrun check
Move the underrun check out from intel_overlay_continue() so that the DOVSTA register access can stay on the display side of the parent vs. display driver split. Reviewed-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patch.msgid.link/20260226100738.29997-6-ville.syrjala@linux.intel.com
-rw-r--r--drivers/gpu/drm/i915/display/intel_overlay.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/display/intel_overlay.c b/drivers/gpu/drm/i915/display/intel_overlay.c
index b2458840dfc4..8c6e9c19b3f5 100644
--- a/drivers/gpu/drm/i915/display/intel_overlay.c
+++ b/drivers/gpu/drm/i915/display/intel_overlay.c
@@ -331,18 +331,13 @@ static int intel_overlay_continue(struct intel_overlay *overlay,
struct intel_display *display = overlay->display;
struct i915_request *rq;
u32 flip_addr = overlay->flip_addr;
- u32 tmp, *cs;
+ u32 *cs;
drm_WARN_ON(display->drm, !i915_overlay_is_active(display->drm));
if (load_polyphase_filter)
flip_addr |= OFC_UPDATE;
- /* check for underruns */
- tmp = intel_de_read(display, DOVSTA);
- if (tmp & (1 << 17))
- drm_dbg(display->drm, "overlay underrun, DOVSTA: %x\n", tmp);
-
rq = alloc_request(overlay, NULL);
if (IS_ERR(rq))
return PTR_ERR(rq);
@@ -810,6 +805,7 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
bool scale_changed = false;
struct i915_vma *vma;
int ret, tmp_width;
+ u32 tmp;
drm_WARN_ON(display->drm,
!drm_modeset_is_locked(&display->drm->mode_config.connection_mutex));
@@ -895,6 +891,11 @@ static int intel_overlay_do_put_image(struct intel_overlay *overlay,
iowrite32(overlay_cmd_reg(params), &regs->OCMD);
+ /* check for underruns */
+ tmp = intel_de_read(display, DOVSTA);
+ if (tmp & (1 << 17))
+ drm_dbg(display->drm, "overlay underrun, DOVSTA: %x\n", tmp);
+
ret = intel_overlay_continue(overlay, vma, scale_changed);
if (ret)
goto out_unpin;