summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2020-12-02 21:09:13 +0000
committerAlex Deucher <alexander.deucher@amd.com>2020-12-02 17:39:29 -0500
commit9bf1019c5f3f11ab615c2d531868d1fe9887e560 (patch)
treef539b79d19dcaecc4d0b375601b9771e5484be76 /drivers/gpu
parent03a663673063d04c2358be754a08e62a465bb8f0 (diff)
drm/amd/display: add cursor pitch check
Replace the width check with a pitch check, which matches DM internals. Add a new check to make sure the pitch (in pixels) matches the width. Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Signed-off-by: Simon Ser <contact@emersion.fr> Cc: Alex Deucher <alexander.deucher@amd.com> Cc: Harry Wentland <hwentlan@amd.com> Cc: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c19
1 files changed, 15 insertions, 4 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 1c998337656e..9f12fabcc33a 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -8994,6 +8994,7 @@ static int dm_update_plane_state(struct dc *dc,
struct amdgpu_crtc *new_acrtc;
bool needs_reset;
int ret = 0;
+ unsigned int pitch;
new_plane_crtc = new_plane_state->crtc;
@@ -9027,15 +9028,25 @@ static int dm_update_plane_state(struct dc *dc,
return -EINVAL;
}
- switch (new_plane_state->fb->width) {
+ /* Pitch in pixels */
+ pitch = new_plane_state->fb->pitches[0] / new_plane_state->fb->format->cpp[0];
+
+ if (new_plane_state->fb->width != pitch) {
+ DRM_DEBUG_ATOMIC("Cursor FB width %d doesn't match pitch %d",
+ new_plane_state->fb->width,
+ pitch);
+ return -EINVAL;
+ }
+
+ switch (pitch) {
case 64:
case 128:
case 256:
- /* FB width is supported by cursor plane */
+ /* FB pitch is supported by cursor plane */
break;
default:
- DRM_DEBUG_ATOMIC("Bad cursor FB width %d\n",
- new_plane_state->fb->width);
+ DRM_DEBUG_ATOMIC("Bad cursor FB pitch %d px\n",
+ pitch);
return -EINVAL;
}
}