aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-5.15/950-0906-drm-vc4-crtc-Move-the-BO-handling-out-of-common-page.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/bcm27xx/patches-5.15/950-0906-drm-vc4-crtc-Move-the-BO-handling-out-of-common-page.patch')
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0906-drm-vc4-crtc-Move-the-BO-handling-out-of-common-page.patch68
1 files changed, 68 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.15/950-0906-drm-vc4-crtc-Move-the-BO-handling-out-of-common-page.patch b/target/linux/bcm27xx/patches-5.15/950-0906-drm-vc4-crtc-Move-the-BO-handling-out-of-common-page.patch
new file mode 100644
index 0000000000..958f4e8d38
--- /dev/null
+++ b/target/linux/bcm27xx/patches-5.15/950-0906-drm-vc4-crtc-Move-the-BO-handling-out-of-common-page.patch
@@ -0,0 +1,68 @@
+From e2b51ac3278847aa79089b4a1b94b8d762af0052 Mon Sep 17 00:00:00 2001
+From: Maxime Ripard <maxime@cerno.tech>
+Date: Mon, 2 May 2022 15:25:20 +0200
+Subject: [PATCH] drm/vc4: crtc: Move the BO handling out of common
+ page-flip callback
+
+We'll soon introduce another completion callback source that won't need
+to use the BO reference counting, so let's move it around to create a
+function we will be able to share between both callbacks.
+
+Signed-off-by: Maxime Ripard <maxime@cerno.tech>
+---
+ drivers/gpu/drm/vc4/vc4_crtc.c | 34 ++++++++++++++++++++--------------
+ 1 file changed, 20 insertions(+), 14 deletions(-)
+
+--- a/drivers/gpu/drm/vc4/vc4_crtc.c
++++ b/drivers/gpu/drm/vc4/vc4_crtc.c
+@@ -846,21 +846,8 @@ vc4_async_page_flip_complete(struct vc4_
+ drm_crtc_vblank_put(crtc);
+ drm_framebuffer_put(flip_state->fb);
+
+- /* Decrement the BO usecnt in order to keep the inc/dec calls balanced
+- * when the planes are updated through the async update path.
+- * FIXME: we should move to generic async-page-flip when it's
+- * available, so that we can get rid of this hand-made cleanup_fb()
+- * logic.
+- */
+- if (flip_state->old_fb) {
+- struct drm_gem_cma_object *cma_bo;
+- struct vc4_bo *bo;
+-
+- cma_bo = drm_fb_cma_get_gem_obj(flip_state->old_fb, 0);
+- bo = to_vc4_bo(&cma_bo->base);
+- vc4_bo_dec_usecnt(bo);
++ if (flip_state->old_fb)
+ drm_framebuffer_put(flip_state->old_fb);
+- }
+
+ kfree(flip_state);
+ }
+@@ -869,8 +856,27 @@ static void vc4_async_page_flip_seqno_co
+ {
+ struct vc4_async_flip_state *flip_state =
+ container_of(cb, struct vc4_async_flip_state, cb.seqno);
++ struct vc4_bo *bo = NULL;
++
++ if (flip_state->old_fb) {
++ struct drm_gem_cma_object *cma_bo =
++ drm_fb_cma_get_gem_obj(flip_state->old_fb, 0);
++ bo = to_vc4_bo(&cma_bo->base);
++ }
+
+ vc4_async_page_flip_complete(flip_state);
++
++ /*
++ * Decrement the BO usecnt in order to keep the inc/dec
++ * calls balanced when the planes are updated through
++ * the async update path.
++ *
++ * FIXME: we should move to generic async-page-flip when
++ * it's available, so that we can get rid of this
++ * hand-made cleanup_fb() logic.
++ */
++ if (bo)
++ vc4_bo_dec_usecnt(bo);
+ }
+
+ static void vc4_async_page_flip_fence_complete(struct dma_fence *fence,