]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amd/display: Reset pipe mask at beginning of cursor offload
authorNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Thu, 20 Nov 2025 14:51:34 +0000 (09:51 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 8 Dec 2025 18:56:41 +0000 (13:56 -0500)
[Why]
Double cursor when switching between hardware and software cursor when
dragging an MPO window can occur with cursor offload enabled.

The abort cursor update in the full programming path is responsible for
this issue since it does not reset the pipe mask when attempting to
submit an empty update.

The firmware programs the payload as requested which may contain
invalid or stale data for the previously enabled pipes, resulting in
an offset or double cursor.

[How]
For performance we don't want to memset the entire payload structure
due to its size, so just reset the pipe mask which will indicate the
payload data is empty.

Reviewed-by: Dillon Varone <dillon.varone@amd.com>
Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Signed-off-by: Roman Li <roman.li@amd.com>
Tested-by: Dan Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/hwss/dcn35/dcn35_hwseq.c

index cb2dfd34b5e2ea6c929852b512fa9a05c08ab4cd..1271bf55dac3bf40e83a8c954a1087ffa5ed7e49 100644 (file)
@@ -1631,6 +1631,7 @@ void dcn35_begin_cursor_offload_update(struct dc *dc, const struct pipe_ctx *pip
        payload_idx = write_idx % ARRAY_SIZE(cs->offload_streams[stream_idx].payloads);
 
        cs->offload_streams[stream_idx].payloads[payload_idx].write_idx_start = write_idx;
+       cs->offload_streams[stream_idx].payloads[payload_idx].pipe_mask = 0;
 
        if (pipe->plane_res.hubp)
                pipe->plane_res.hubp->cursor_offload = true;