diff options
author | Simon Ser <contact@emersion.fr> | 2020-12-02 21:09:13 +0000 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2020-12-02 17:39:29 -0500 |
commit | 9bf1019c5f3f11ab615c2d531868d1fe9887e560 (patch) | |
tree | f539b79d19dcaecc4d0b375601b9771e5484be76 /drivers/gpu | |
parent | 03a663673063d04c2358be754a08e62a465bb8f0 (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.c | 19 |
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; } } |