mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-18 11:33:36 -04:00
drm: re-allow no-op changes on non-primary planes in async flips
Commitfd40a63c63("drm/atomic: Let drivers decide which planes to async flip") unintentionally disallowed no-op changes on non-primary planes that the driver doesn't allow async flips on. This broke async flips for compositors that disable the cursor plane in every async atomic commit. To fix that, change drm_atomic_set_property to again only run atomic_async_check if the plane would actually be changed by the atomic commit. Fixes:fd40a63c63("drm/atomic: Let drivers decide which planes to async flip") Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4263 Signed-off-by: Xaver Hugl <xaver.hugl@kde.org> Reviewed-by: André Almeida <andrealmeid@igalia.com> Link: https://lore.kernel.org/r/20250822152849.87843-1-xaver.hugl@kde.org [andrealmeid: fix checkpatch warning] Signed-off-by: André Almeida <andrealmeid@igalia.com>
This commit is contained in:
committed by
André Almeida
parent
3f13bcc886
commit
b065bd213c
@@ -1078,19 +1078,20 @@ int drm_atomic_set_property(struct drm_atomic_state *state,
|
||||
}
|
||||
|
||||
if (async_flip) {
|
||||
/* check if the prop does a nop change */
|
||||
if ((prop != config->prop_fb_id &&
|
||||
prop != config->prop_in_fence_fd &&
|
||||
prop != config->prop_fb_damage_clips)) {
|
||||
ret = drm_atomic_plane_get_property(plane, plane_state,
|
||||
prop, &old_val);
|
||||
ret = drm_atomic_check_prop_changes(ret, old_val, prop_value, prop);
|
||||
/* no-op changes are always allowed */
|
||||
ret = drm_atomic_plane_get_property(plane, plane_state,
|
||||
prop, &old_val);
|
||||
ret = drm_atomic_check_prop_changes(ret, old_val, prop_value, prop);
|
||||
|
||||
/* fail everything that isn't no-op or a pure flip */
|
||||
if (ret && prop != config->prop_fb_id &&
|
||||
prop != config->prop_in_fence_fd &&
|
||||
prop != config->prop_fb_damage_clips) {
|
||||
break;
|
||||
}
|
||||
|
||||
/* ask the driver if this non-primary plane is supported */
|
||||
if (plane->type != DRM_PLANE_TYPE_PRIMARY) {
|
||||
ret = -EINVAL;
|
||||
|
||||
if (ret && plane->type != DRM_PLANE_TYPE_PRIMARY) {
|
||||
/* ask the driver if this non-primary plane is supported */
|
||||
if (plane_funcs && plane_funcs->atomic_async_check)
|
||||
ret = plane_funcs->atomic_async_check(plane, state, true);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user