2022-05-16 21:40:32 +00:00
|
|
|
From d04c74e3f30be64b0e14d7ed2b6088f91ac6ea64 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Maxime Ripard <maxime@cerno.tech>
|
|
|
|
Date: Wed, 16 Mar 2022 16:44:45 +0100
|
|
|
|
Subject: [PATCH] drm/vc4: plane: Prevent async update if we don't have
|
|
|
|
a dlist
|
|
|
|
|
|
|
|
The vc4 planes are setup in hardware by creating a hardware descriptor
|
|
|
|
in a dedicated RAM. As part of the process to setup a plane in KMS, we
|
|
|
|
thus need to allocate some part of that dedicated RAM to store our
|
|
|
|
descriptor there.
|
|
|
|
|
|
|
|
The async update path will just reuse the descriptor already allocated
|
|
|
|
for that plane and will modify it directly in RAM to match whatever has
|
|
|
|
been asked for.
|
|
|
|
|
|
|
|
In order to do that, it will compare the descriptor for the old plane
|
|
|
|
state and the new plane state, will make sure they fit in the same size,
|
|
|
|
and check that only the position or buffer address have changed.
|
|
|
|
|
|
|
|
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
|
|
|
---
|
|
|
|
drivers/gpu/drm/vc4/vc4_plane.c | 4 ++++
|
|
|
|
1 file changed, 4 insertions(+)
|
|
|
|
|
|
|
|
--- a/drivers/gpu/drm/vc4/vc4_plane.c
|
|
|
|
+++ b/drivers/gpu/drm/vc4/vc4_plane.c
|
2023-03-12 14:16:50 +00:00
|
|
|
@@ -1431,6 +1431,10 @@ static int vc4_plane_atomic_async_check(
|
2022-05-16 21:40:32 +00:00
|
|
|
|
|
|
|
old_vc4_state = to_vc4_plane_state(plane->state);
|
|
|
|
new_vc4_state = to_vc4_plane_state(new_plane_state);
|
|
|
|
+
|
|
|
|
+ if (!new_vc4_state->hw_dlist)
|
|
|
|
+ return -EINVAL;
|
|
|
|
+
|
|
|
|
if (old_vc4_state->dlist_count != new_vc4_state->dlist_count ||
|
|
|
|
old_vc4_state->pos0_offset != new_vc4_state->pos0_offset ||
|
|
|
|
old_vc4_state->pos2_offset != new_vc4_state->pos2_offset ||
|