From: Thomas Zimmermann Date: Wed, 26 Nov 2025 09:40:09 +0000 (+0100) Subject: drm/ast: Support cursor buffers objects in I/O memory X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ef4ed8621a15ea4979dd6c5bde436ae228c4bdfe;p=thirdparty%2Fkernel%2Flinux.git drm/ast: Support cursor buffers objects in I/O memory Copy the ARGB4444 cursor buffer to system memory if it is located in I/O memory. While this cannot happen with ast's native GEM objects, an imported buffer object might be on the external device's I/O memory. If the cursor buffer is located in system memory continue to use it directly. Signed-off-by: Thomas Zimmermann Reviewed-by: Jocelyn Falempe > Link: https://patch.msgid.link/20251126094626.41985-3-tzimmermann@suse.de --- diff --git a/drivers/gpu/drm/ast/ast_cursor.c b/drivers/gpu/drm/ast/ast_cursor.c index 24d696df8fcda..8d473ed2738cf 100644 --- a/drivers/gpu/drm/ast/ast_cursor.c +++ b/drivers/gpu/drm/ast/ast_cursor.c @@ -191,7 +191,20 @@ static const u8 *ast_cursor_plane_get_argb4444(struct ast_cursor_plane *ast_curs switch (fb->format->format) { case DRM_FORMAT_ARGB4444: - argb4444 = shadow_plane_state->data[0].vaddr; + if (shadow_plane_state->data[0].is_iomem) { + struct iosys_map argb4444_dst[DRM_FORMAT_MAX_PLANES] = { + IOSYS_MAP_INIT_VADDR(ast_cursor_plane->argb4444), + }; + unsigned int argb4444_dst_pitch[DRM_FORMAT_MAX_PLANES] = { + AST_HWC_PITCH, + }; + + drm_fb_memcpy(argb4444_dst, argb4444_dst_pitch, + shadow_plane_state->data, fb, clip); + argb4444 = argb4444_dst[0].vaddr; + } else { + argb4444 = shadow_plane_state->data[0].vaddr; + } break; case DRM_FORMAT_ARGB8888: {