mirror of
https://github.com/torvalds/linux.git
synced 2026-10-28 17:55:02 +01:00
drm: verisilicon: fix cursor offset field update
The 4th argument of regmap_update_bits() expects a pre-shifted register
value instead of the field value when it's used to set a single field,
however I forgot this when writing the code setting the cursor X/Y
offset fields, thus the write operation doesn't happen at all (because
of the non-shifted values being masked by regmap_update_bits()).
Fix this problem so the cursor is correctly clipped.
The framebuffer address is also clipped so the cursor offset problem was
previously not discovered, and the framebuffer address deserves another
fix for proper cursor behavior when it's clipped.
Fixes: 8c4ae21891 ("drm: verisilicon: add support for cursor planes")
Signed-off-by: Icenowy Zheng <zhengxingda@iscas.ac.cn>
Reviewed-by: Chen-Yu Tsai <wenst@chromium.org>
Link: https://patch.msgid.link/20260812154829.671777-1-zhengxingda@iscas.ac.cn
Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
This commit is contained in:
parent
b90caca515
commit
6575bb5d0d
|
|
@ -199,7 +199,7 @@ static void vs_cursor_plane_atomic_update(struct drm_plane *plane,
|
|||
} else {
|
||||
regmap_update_bits(dc->regs, VSDC_CURSOR_CONFIG(output),
|
||||
VSDC_CURSOR_CONFIG_X_OFF_MASK,
|
||||
-state->crtc_x);
|
||||
VSDC_CURSOR_CONFIG_X_OFF(-state->crtc_x));
|
||||
regmap_update_bits(dc->regs, VSDC_CURSOR_LOCATION(output),
|
||||
VSDC_CURSOR_LOCATION_X_MASK, 0);
|
||||
}
|
||||
|
|
@ -213,7 +213,7 @@ static void vs_cursor_plane_atomic_update(struct drm_plane *plane,
|
|||
} else {
|
||||
regmap_update_bits(dc->regs, VSDC_CURSOR_CONFIG(output),
|
||||
VSDC_CURSOR_CONFIG_Y_OFF_MASK,
|
||||
-state->crtc_y);
|
||||
VSDC_CURSOR_CONFIG_Y_OFF(-state->crtc_y));
|
||||
regmap_update_bits(dc->regs, VSDC_CURSOR_LOCATION(output),
|
||||
VSDC_CURSOR_LOCATION_Y_MASK, 0);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user