2024-02-08 21:06:35

by André Almeida

[permalink] [raw]
Subject: [PATCH v4 0/3] drm/atomic: Allow drivers to write their own plane check for async

Hi,

AMD hardware can do async flips with overlay planes, so this patchset does a
small redesign to allow drivers to choose per plane type if they can or cannot
do async flips.

It also allows async commits with IN_FENCE_ID in any driver.

Changes from v3:
- Major patchset redesign
v3: https://lore.kernel.org/lkml/[email protected]/

Changes from v2:
- Allow IN_FENCE_ID for any driver
- Allow overlay planes again
v2: https://lore.kernel.org/lkml/[email protected]/

Changes from v1:
- Drop overlay planes option for now
v1: https://lore.kernel.org/dri-devel/[email protected]/

André Almeida (3):
drm/atomic: Allow userspace to use explicit sync with atomic async
flips
drm: Allow drivers to choose plane types to async flip
drm/amdgpu: Make it possible to async flip overlay planes

drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c | 1 +
drivers/gpu/drm/drm_atomic_uapi.c | 8 +++++---
drivers/gpu/drm/drm_plane.c | 3 +++
include/drm/drm_plane.h | 5 +++++
4 files changed, 14 insertions(+), 3 deletions(-)

--
2.43.0



2024-02-08 21:06:44

by André Almeida

[permalink] [raw]
Subject: [PATCH v4 1/3] drm/atomic: Allow userspace to use explicit sync with atomic async flips

Allow userspace to use explicit synchronization with atomic async flips.
That means that the flip will wait for some hardware fence, and then
will flip as soon as possible (async) in regard of the vblank.

Signed-off-by: André Almeida <[email protected]>
---
v4: no changes

drivers/gpu/drm/drm_atomic_uapi.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
index 29d4940188d4..1eecfb9e240d 100644
--- a/drivers/gpu/drm/drm_atomic_uapi.c
+++ b/drivers/gpu/drm/drm_atomic_uapi.c
@@ -1066,7 +1066,9 @@ int drm_atomic_set_property(struct drm_atomic_state *state,
break;
}

- if (async_flip && prop != config->prop_fb_id) {
+ if (async_flip &&
+ prop != config->prop_fb_id &&
+ prop != config->prop_in_fence_fd) {
ret = drm_atomic_plane_get_property(plane, plane_state,
prop, &old_val);
ret = drm_atomic_check_prop_changes(ret, old_val, prop_value, prop);
--
2.43.0


2024-02-08 21:40:46

by André Almeida

[permalink] [raw]
Subject: [PATCH v4 3/3] drm/amdgpu: Make it possible to async flip overlay planes

amdgpu can handle async flips on overlay planes, so mark it as true
during the plane initialization.

Signed-off-by: André Almeida <[email protected]>
---
v4: new patch

drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c | 1 +
1 file changed, 1 insertion(+)

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 8a4c40b4c27e..dc5392c08a87 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
@@ -1708,6 +1708,7 @@ int amdgpu_dm_plane_init(struct amdgpu_display_manager *dm,
} else if (plane->type == DRM_PLANE_TYPE_OVERLAY) {
unsigned int zpos = 1 + drm_plane_index(plane);
drm_plane_create_zpos_property(plane, zpos, 1, 254);
+ plane->async_flip = true;
} else if (plane->type == DRM_PLANE_TYPE_CURSOR) {
drm_plane_create_zpos_immutable_property(plane, 255);
}
--
2.43.0