On Sat, Oct 3, 2026 at 5:00 PM Evanshenf <[email protected]> wrote: > > An asynchronous cursor update swaps the new framebuffer into the live > plane state. However, the driver reads both old_fb and new_fb from the > live state before this swap. When an enabled cursor changes buffers, the > address-update condition is therefore false and the hardware continues > scanning the previous buffer. > > Read new_fb from the new plane state before swapping the framebuffer > references. This updates the hardware address when the framebuffer > changes while retaining the existing behavior for cursor movement. > > Verified on a Loongson 3A5000 with LS7A2000 using 32x32 and 64x64 legacy > cursor updates. Callback counters and read-only register observations > confirmed the asynchronous path, the stale address before the change, > and the new address afterward. Same-framebuffer movement and cursor > disable/re-enable also passed, with the primary framebuffer and mode > unchanged. > > AI assistance was used to investigate the existing report, prepare the > fix and test tools, run the build and hardware comparison, and draft > this message. > > Reported-by: kernel test robot <[email protected]> > Closes: https://lore.kernel.org/r/[email protected]/ > Fixes: f39db26c5428 ("drm: Add kms driver for loongson display controller") > Cc: [email protected] > Assisted-by: LLM Reviewed-by: Huacai Chen <[email protected]>
> Signed-off-by: Evanshenf <[email protected]> > --- > drivers/gpu/drm/loongson/lsdc_plane.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/loongson/lsdc_plane.c > b/drivers/gpu/drm/loongson/lsdc_plane.c > index bcc0ffa..7b9c65c 100644 > --- a/drivers/gpu/drm/loongson/lsdc_plane.c > +++ b/drivers/gpu/drm/loongson/lsdc_plane.c > @@ -230,7 +230,7 @@ static void lsdc_cursor_plane_atomic_async_update(struct > drm_plane *plane, > > new_state = drm_atomic_get_new_plane_state(state, plane); > > - new_fb = plane->state->fb; > + new_fb = new_state->fb; > > plane->state->crtc_x = new_state->crtc_x; > plane->state->crtc_y = new_state->crtc_y; > > base-commit: bca45af5998a05f34b13a2ef11e639bac9c62643 > -- > 2.43.0 >
