| From 19eecbdc55a1cf5f7b65dce58edffb4a1964c6eb Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 16 Mar 2021 22:50:06 +0100 |
| Subject: drm/amd/display: check fb of primary plane |
| |
| From: Sefa Eyeoglu <contact@scrumplex.net> |
| |
| [ Upstream commit 7df4ceb60fa9a3c5160cfd5b696657291934a2c9 ] |
| |
| Sometimes the primary plane might not be initialized (yet), which |
| causes dm_check_crtc_cursor to divide by zero. |
| Apparently a weird state before a S3-suspend causes the aforementioned |
| divide-by-zero error when resuming from S3. This was explained in |
| bug 212293 on Bugzilla. |
| |
| To avoid this divide-by-zero error we check if the primary plane's fb |
| isn't NULL. If it's NULL the src_w and src_h attributes will be 0, |
| which would cause a divide-by-zero. |
| |
| This fixes Bugzilla report 212293 |
| Bug: https://bugzilla.kernel.org/show_bug.cgi?id=212293 |
| |
| Fixes: 12f4849a1cfd69f3 ("drm/amd/display: check cursor scaling") |
| Reviewed-by: Simon Ser <contact@emersion.fr> |
| Reviewed-by: Harry Wentland <harry.wentland@amd.com> |
| Signed-off-by: Sefa Eyeoglu <contact@scrumplex.net> |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| 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 d7d2cf8b53f4..36898ae63f30 100644 |
| --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |
| +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c |
| @@ -9119,7 +9119,8 @@ static int dm_check_crtc_cursor(struct drm_atomic_state *state, |
| |
| new_cursor_state = drm_atomic_get_new_plane_state(state, crtc->cursor); |
| new_primary_state = drm_atomic_get_new_plane_state(state, crtc->primary); |
| - if (!new_cursor_state || !new_primary_state || !new_cursor_state->fb) { |
| + if (!new_cursor_state || !new_primary_state || |
| + !new_cursor_state->fb || !new_primary_state->fb) { |
| return 0; |
| } |
| |
| -- |
| 2.30.2 |
| |