summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2025-10-16 21:54:03 +0300
committerVille Syrjälä <ville.syrjala@linux.intel.com>2025-11-07 17:37:31 +0200
commit65417489541fcef7f14104f3a0292e479f08f72b (patch)
treec871f31fa8de80f3d3e6a17c2e79046421849221
parent5391ab2542fde3c283fa647255e1f320044a2755 (diff)
drm/i915/frontbuffer: Handle the dirtyfb cache flush inside intel_frontbuffer_flush()
intel_bo_frontbuffer_flush_for_display() is a bit too low level to be directly in the high level dirtyfb code. Move the calls into intel_frontbuffer_flush(). There is a slight behavioural change here in that we now skip the flush if the bo is not a current scanout buffer (front->bits == 0). But that is fine as the flush will eventually happen via the fb pinning code if/when the bo becomes a scanout buffer again. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patch.msgid.link/20251016185408.22735-6-ville.syrjala@linux.intel.com Reviewed-by: Jani Nikula <jani.nikula@intel.com>
-rw-r--r--drivers/gpu/drm/i915/display/intel_fb.c1
-rw-r--r--drivers/gpu/drm/i915/display/intel_frontbuffer.c4
2 files changed, 3 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c
index 3f185709cd37..ee093e5ffbed 100644
--- a/drivers/gpu/drm/i915/display/intel_fb.c
+++ b/drivers/gpu/drm/i915/display/intel_fb.c
@@ -2193,7 +2193,6 @@ static int intel_user_framebuffer_dirty(struct drm_framebuffer *fb,
return ret;
flush:
- intel_bo_frontbuffer_flush_for_display(front);
intel_frontbuffer_flush(front, ORIGIN_DIRTYFB);
return ret;
}
diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c
index 5562801d2ea3..bdf8bfa7deb9 100644
--- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c
+++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c
@@ -150,6 +150,9 @@ void __intel_fb_flush(struct intel_frontbuffer *front,
{
struct intel_display *display = to_intel_display(front->obj->dev);
+ if (origin == ORIGIN_DIRTYFB)
+ intel_bo_frontbuffer_flush_for_display(front);
+
if (origin == ORIGIN_CS) {
spin_lock(&display->fb_tracking.lock);
/* Filter out new bits since rendering started. */
@@ -167,7 +170,6 @@ static void intel_frontbuffer_flush_work(struct work_struct *work)
struct intel_frontbuffer *front =
container_of(work, struct intel_frontbuffer, flush_work);
- intel_bo_frontbuffer_flush_for_display(front);
intel_frontbuffer_flush(front, ORIGIN_DIRTYFB);
intel_frontbuffer_put(front);
}