Am 30.10.25 um 10:14 schrieb Jocelyn Falempe:
In the atomic update callback, ast should call
drm_gem_fb_begin_cpu_access() to make sure it can read the
framebuffer from the CPU, otherwise the data might not be there due
to cache, and synchronization.

Tested on a Lenovo SE100, while rendering on the ArrowLake GPU with
i915 driver, and using ast for display.

Suggested-by: Thomas Zimmermann <[email protected]>
Signed-off-by: Jocelyn Falempe <[email protected]>

Reviewed-by: Thomas Zimmermann <[email protected]>

---

v2:
  * If begin_cpu_access() failed, skip the damage copy, but update the
    pitch register (Thomas Zimmermann)

  drivers/gpu/drm/ast/ast_mode.c | 11 ++++++++---
  1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
index 9ce874dba69c..77d6c2dcfc40 100644
--- a/drivers/gpu/drm/ast/ast_mode.c
+++ b/drivers/gpu/drm/ast/ast_mode.c
@@ -556,9 +556,14 @@ static void ast_primary_plane_helper_atomic_update(struct 
drm_plane *plane,
                ast_set_vbios_color_reg(ast, fb->format, ast_crtc_state->vmode);
        }
- drm_atomic_helper_damage_iter_init(&iter, old_plane_state, plane_state);
-       drm_atomic_for_each_plane_damage(&iter, &damage) {
-               ast_handle_damage(ast_plane, shadow_plane_state->data, fb, 
&damage);
+       /* if the buffer comes from another device */
+       if (drm_gem_fb_begin_cpu_access(fb, DMA_FROM_DEVICE) == 0) {
+               drm_atomic_helper_damage_iter_init(&iter, old_plane_state, 
plane_state);
+               drm_atomic_for_each_plane_damage(&iter, &damage) {
+                       ast_handle_damage(ast_plane, shadow_plane_state->data, fb, 
&damage);
+               }
+
+               drm_gem_fb_end_cpu_access(fb, DMA_FROM_DEVICE);
        }
/*

base-commit: 4f9ffd2c80a2fa09dcc8dfa0482cb7e0fb6fcf6c

--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)


Reply via email to