Revision bd13b2b874eceb4677cd26eebdc5f45cc52fa400 authored by Nicholas Kazlauskas on 01 February 2019, 14:36:59 UTC, committed by Alex Deucher on 08 April 2019, 15:33:40 UTC
[Why]
If the cursor pos passed from DM is less than the plane_state->dst_rect
top left corner then the unsigned cursor pos wraps around to a large
positive number since cursor pos is a u32.

There was an attempt to guard against this in hubp1_cursor_set_position
by checking the src_x_offset and src_y_offset and offseting the
cursor hotspot within hubp1_cursor_set_position.

However, the cursor position itself is still being programmed
incorrectly as a large value.

This manifests itself visually as the cursor disappearing or containing
strange artifacts near the middle of the screen on raven.

[How]
Don't subtract the destination rect top left corner from the pos but
add it to the hotspot instead. This happens before the pos gets
passed into hubp1_cursor_set_position.

This achieves the same result but avoids the subtraction wrap around.
With this fix the original cursor programming logic can be used again.

v2: add hunk that got dropped accidently when this patch was originally
committed. (Alex)
Fixes: 0921c41e1902831 ("drm/amd/display: Fix negative cursor pos programming")

Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Reviewed-by: Charlene Liu <Charlene.Liu@amd.com>
Acked-by: Leo Li <sunpeng.li@amd.com>
Acked-by: Murton Liu <Murton.Liu@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
1 parent c1cefe1
History
File Mode Size
Kconfig -rw-r--r-- 5.5 KB
LICENCE -rw-r--r-- 1.4 KB
Makefile -rw-r--r-- 786 bytes
README.Locking -rw-r--r-- 6.9 KB
TODO -rw-r--r-- 1.9 KB
acl.c -rw-r--r-- 6.7 KB
acl.h -rw-r--r-- 966 bytes
background.c -rw-r--r-- 4.2 KB
build.c -rw-r--r-- 12.6 KB
compr.c -rw-r--r-- 11.6 KB
compr.h -rw-r--r-- 3.1 KB
compr_lzo.c -rw-r--r-- 2.2 KB
compr_rtime.c -rw-r--r-- 2.8 KB
compr_rubin.c -rw-r--r-- 8.7 KB
compr_zlib.c -rw-r--r-- 5.5 KB
debug.c -rw-r--r-- 25.6 KB
debug.h -rw-r--r-- 7.9 KB
dir.c -rw-r--r-- 22.6 KB
erase.c -rw-r--r-- 13.4 KB
file.c -rw-r--r-- 9.1 KB
fs.c -rw-r--r-- 19.8 KB
gc.c -rw-r--r-- 43.9 KB
ioctl.c -rw-r--r-- 557 bytes
jffs2_fs_i.h -rw-r--r-- 1.6 KB
jffs2_fs_sb.h -rw-r--r-- 5.7 KB
malloc.c -rw-r--r-- 7.3 KB
nodelist.c -rw-r--r-- 21.3 KB
nodelist.h -rw-r--r-- 17.9 KB
nodemgmt.c -rw-r--r-- 28.4 KB
os-linux.h -rw-r--r-- 7.5 KB
read.c -rw-r--r-- 6.7 KB
readinode.c -rw-r--r-- 42.9 KB
scan.c -rw-r--r-- 35.2 KB
security.c -rw-r--r-- 1.9 KB
summary.c -rw-r--r-- 23.6 KB
summary.h -rw-r--r-- 6.3 KB
super.c -rw-r--r-- 10.2 KB
symlink.c -rw-r--r-- 417 bytes
wbuf.c -rw-r--r-- 36.9 KB
write.c -rw-r--r-- 21.0 KB
writev.c -rw-r--r-- 1.1 KB
xattr.c -rw-r--r-- 38.3 KB
xattr.h -rw-r--r-- 4.1 KB
xattr_trusted.c -rw-r--r-- 1.2 KB
xattr_user.c -rw-r--r-- 1.1 KB

README.Locking

back to top