diff options
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.patch | 68 |
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, |