Message ID | 20241212-tonyk-async_flip-v11-2-14379434be70@igalia.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/atomic: Ease async flip restrictions | expand |
Hey Harry, Gentle ping on this one :) Em 12/12/2024 16:19, André Almeida escreveu: > amdgpu can handle async flips on overlay planes, so allow it for atomic > async checks. > > Signed-off-by: André Almeida <andrealmeid@igalia.com> > --- > drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c | 11 +++++++---- > 1 file changed, 7 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c > index 495e3cd70426db0182cb2811bc6d5d09f52f8a4b..2792d393157beec12d6e96843c43158c03f16027 100644 > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c > @@ -1260,22 +1260,25 @@ static int amdgpu_dm_plane_atomic_check(struct drm_plane *plane, > } > > static int amdgpu_dm_plane_atomic_async_check(struct drm_plane *plane, > - struct drm_atomic_state *state) > + struct drm_atomic_state *state, bool flip) > { > struct drm_crtc_state *new_crtc_state; > struct drm_plane_state *new_plane_state; > struct dm_crtc_state *dm_new_crtc_state; > > - /* Only support async updates on cursor planes. */ > - if (plane->type != DRM_PLANE_TYPE_CURSOR) > + if (flip) { > + if (plane->type != DRM_PLANE_TYPE_OVERLAY) > + return -EINVAL; > + } else if (plane->type != DRM_PLANE_TYPE_CURSOR) > return -EINVAL; > > new_plane_state = drm_atomic_get_new_plane_state(state, plane); > new_crtc_state = drm_atomic_get_new_crtc_state(state, new_plane_state->crtc); > dm_new_crtc_state = to_dm_crtc_state(new_crtc_state); > /* Reject overlay cursors for now*/ > - if (dm_new_crtc_state->cursor_mode == DM_CURSOR_OVERLAY_MODE) > + if (!flip && dm_new_crtc_state->cursor_mode == DM_CURSOR_OVERLAY_MODE) { > return -EINVAL; > + } > > return 0; > } >
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c index 495e3cd70426db0182cb2811bc6d5d09f52f8a4b..2792d393157beec12d6e96843c43158c03f16027 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c @@ -1260,22 +1260,25 @@ static int amdgpu_dm_plane_atomic_check(struct drm_plane *plane, } static int amdgpu_dm_plane_atomic_async_check(struct drm_plane *plane, - struct drm_atomic_state *state) + struct drm_atomic_state *state, bool flip) { struct drm_crtc_state *new_crtc_state; struct drm_plane_state *new_plane_state; struct dm_crtc_state *dm_new_crtc_state; - /* Only support async updates on cursor planes. */ - if (plane->type != DRM_PLANE_TYPE_CURSOR) + if (flip) { + if (plane->type != DRM_PLANE_TYPE_OVERLAY) + return -EINVAL; + } else if (plane->type != DRM_PLANE_TYPE_CURSOR) return -EINVAL; new_plane_state = drm_atomic_get_new_plane_state(state, plane); new_crtc_state = drm_atomic_get_new_crtc_state(state, new_plane_state->crtc); dm_new_crtc_state = to_dm_crtc_state(new_crtc_state); /* Reject overlay cursors for now*/ - if (dm_new_crtc_state->cursor_mode == DM_CURSOR_OVERLAY_MODE) + if (!flip && dm_new_crtc_state->cursor_mode == DM_CURSOR_OVERLAY_MODE) { return -EINVAL; + } return 0; }
amdgpu can handle async flips on overlay planes, so allow it for atomic async checks. Signed-off-by: André Almeida <andrealmeid@igalia.com> --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)