diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1892-drm-amd-display-Disable-cursor-when-offscreen-in-neg.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1892-drm-amd-display-Disable-cursor-when-offscreen-in-neg.patch | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1892-drm-amd-display-Disable-cursor-when-offscreen-in-neg.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1892-drm-amd-display-Disable-cursor-when-offscreen-in-neg.patch new file mode 100644 index 00000000..8759637e --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1892-drm-amd-display-Disable-cursor-when-offscreen-in-neg.patch @@ -0,0 +1,78 @@ +From 61195f9073cffa2464b88806db99ef3e3f9c89b5 Mon Sep 17 00:00:00 2001 +From: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> +Date: Thu, 18 Apr 2019 12:42:32 -0400 +Subject: [PATCH 1892/2940] drm/amd/display: Disable cursor when offscreen in + negative direction + +[Why] +When x or y is negative we set the x and y values to 0 and compensate +with a positive cursor hotspot in DM since DC expects positive cursor +values. + +When x or y is less than or equal to the maximum cursor width or height +the cursor hotspot is clamped so the hotspot doesn't exceed the +cursor size: + +if (x < 0) { + xorigin = min(-x, amdgpu_crtc->max_cursor_width - 1); + x = 0; +} + +if (y < 0) { + yorigin = min(-y, amdgpu_crtc->max_cursor_height - 1); + y = 0; +} + +This incorrectly forces the cursor to be at least 1 pixel on the screen +in either direction when x or y is sufficiently negative. + +[How] +Just disable the cursor when it goes far enough off the screen in one +of these directions. + +This fixes kms_cursor_crc@cursor-256x256-offscreen. + +Change-Id: Ib6e965d254d129154e1398140cdbeaec6cb005e5 +Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> +Reviewed-by: Sun peng Li <Sunpeng.Li@amd.com> +Acked-by: Bhawanpreet Lakha <Bhawanpreet Lakha@amd.com> +--- + drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 14 +++++++++----- + 1 file changed, 9 insertions(+), 5 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +index 50d642bd304c..b1197f55a35d 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +@@ -5065,12 +5065,12 @@ static int get_cursor_position(struct drm_plane *plane, struct drm_crtc *crtc, + int x, y; + int xorigin = 0, yorigin = 0; + +- if (!crtc || !plane->state->fb) { +- position->enable = false; +- position->x = 0; +- position->y = 0; ++ position->enable = false; ++ position->x = 0; ++ position->y = 0; ++ ++ if (!crtc || !plane->state->fb) + return 0; +- } + + if ((plane->state->crtc_w > amdgpu_crtc->max_cursor_width) || + (plane->state->crtc_h > amdgpu_crtc->max_cursor_height)) { +@@ -5084,6 +5084,10 @@ static int get_cursor_position(struct drm_plane *plane, struct drm_crtc *crtc, + x = plane->state->crtc_x; + y = plane->state->crtc_y; + ++ if (x <= -amdgpu_crtc->max_cursor_width || ++ y <= -amdgpu_crtc->max_cursor_height) ++ return 0; ++ + if (crtc->primary->state) { + /* avivo cursor are offset into the total surface */ + x += crtc->primary->state->src_x >> 16; +-- +2.17.1 + |