On 2021-09-29 15:06, Simon Ser wrote: > Commit ddab8bd788f5 ("drm/amd/display: Fix two cursor duplication when > using overlay") changed the atomic validation code to forbid the > overlay plane from being used if it doesn't cover the whole CRTC. The > motivation is that ChromeOS uses the atomic API for everything except > the cursor plane (which uses the legacy API). Thus amdgpu must always > be prepared to enable/disable/move the cursor plane at any time without > failing (or else ChromeOS will trip over). > > As discussed in [1], there's no reason why the ChromeOS limitation > should prevent other fully atomic users from taking advantage of the > overlay plane. Let's limit the check to ChromeOS. > > [1]: https://lore.kernel.org/amd-gfx/JIQ_93_cHcshiIDsrMU1huBzx9P9LVQxucx8hQArpQu7Wk5DrCl_vTXj_Q20m_L-8C8A5dSpNcSJ8ehfcCrsQpfB5QG_Spn14EYkH9chtg0=@emersion.fr/>> > Signed-off-by: Simon Ser <contact@xxxxxxxxxxx> > Cc: Alex Deucher <alexander.deucher@xxxxxxx> > Cc: Harry Wentland <hwentlan@xxxxxxx> > Cc: Nicholas Kazlauskas <nicholas.kazlauskas@xxxxxxx> > Cc: Bas Nieuwenhuizen <bas@xxxxxxxxxxxxxxxxxxx> > Fixes: ddab8bd788f5 ("drm/amd/display: Fix two cursor duplication when using overlay") > --- > drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 4 ++++ > 1 file changed, 4 insertions(+) > > 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 6472c0032b54..f06d6e794721 100644 > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c > @@ -10590,6 +10590,10 @@ static int validate_overlay(struct drm_atomic_state *state) > struct drm_plane_state *new_plane_state; > struct drm_plane_state *primary_state, *overlay_state = NULL; > > + /* This is a workaround for ChromeOS only */ > + if (strcmp(current->comm, "chrome") != 0) current->comm is "DrmThread" on my ChromeOS system. Harry > + return 0; > + > /* Check if primary plane is contained inside overlay */ > for_each_new_plane_in_state_reverse(state, plane, new_plane_state, i) { > if (plane->type == DRM_PLANE_TYPE_OVERLAY) { >