diff --git a/patches/0003-amddrm1.patch b/patches/0003-amddrm1.patch new file mode 100644 index 0000000..373d893 --- /dev/null +++ b/patches/0003-amddrm1.patch @@ -0,0 +1,76 @@ +Signed-off-by: André Almeida +--- +Changes from v8: +- Rebased on top of 6.12-rc1 +--- + drivers/gpu/drm/drm_atomic_uapi.c | 39 +++++++++++++++++++++++++++++---------- + 1 file changed, 29 insertions(+), 10 deletions(-) + +diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c +index 7936c2023955..b004fa1d2e2e 100644 +--- a/drivers/gpu/drm/drm_atomic_uapi.c ++++ b/drivers/gpu/drm/drm_atomic_uapi.c +@@ -27,8 +27,9 @@ + * Daniel Vetter + */ + +-#include + #include ++#include ++#include + #include + #include + #include +@@ -1063,6 +1064,7 @@ int drm_atomic_set_property(struct drm_atomic_state *state, + struct drm_plane *plane = obj_to_plane(obj); + struct drm_plane_state *plane_state; + struct drm_mode_config *config = &plane->dev->mode_config; ++ const struct drm_plane_helper_funcs *plane_funcs = plane->helper_private; + + plane_state = drm_atomic_get_plane_state(state, plane); + if (IS_ERR(plane_state)) { +@@ -1070,15 +1072,32 @@ int drm_atomic_set_property(struct drm_atomic_state *state, + break; + } + +- if (async_flip && +- (plane_state->plane->type != DRM_PLANE_TYPE_PRIMARY || +- (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); +- break; ++ if (async_flip) { ++ /* check if the prop does a nop change */ ++ if ((plane_state->plane->type != DRM_PLANE_TYPE_PRIMARY) || ++ (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); ++ break; ++ } ++ ++ /* ask the driver if this non-primary plane is supported */ ++ if (plane->type != DRM_PLANE_TYPE_PRIMARY) { ++ ret = -EINVAL; ++ ++ if (plane_funcs && plane_funcs->atomic_async_check) ++ ret = plane_funcs->atomic_async_check(plane, state); ++ ++ if (ret) { ++ drm_dbg_atomic(prop->dev, ++ "[PLANE:%d] does not support async flips\n", ++ obj->id); ++ break; ++ } ++ } + } + + ret = drm_atomic_plane_set_property(plane, + +-- +2.46.0 \ No newline at end of file