]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/vc4: hvs: Rework LBM alignment
authorMaxime Ripard <mripard@kernel.org>
Fri, 21 Jun 2024 15:20:51 +0000 (16:20 +0100)
committerDave Stevenson <dave.stevenson@raspberrypi.com>
Mon, 9 Sep 2024 12:02:54 +0000 (13:02 +0100)
With the introduction of the support for BCM2712, the check of whether
we're running on vc5 or not to compute the LBM alignment requirement
doesn't work anymore.

Moreover, the LBM size will need to be computed in words for the
BCM2712, while we've had sizes in bytes so far.

Aligning on either 64 or 32 words is thus fairly harmful on BCM2712, so
let's just explicitly align the size when needed, and then call
drm_mm_insert_node_generic() with an alignment of 1.

Signed-off-by: Maxime Ripard <mripard@kernel.org>
Reviewed-by: Maxime Ripard <mripard@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20240621152055.4180873-28-dave.stevenson@raspberrypi.com
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
drivers/gpu/drm/vc4/vc4_plane.c

index a4965226595de1e76b6cc395362d01b3afaf49c4..4c61ef4f4142953825e0428cdca4011d9ac3c605 100644 (file)
@@ -756,6 +756,11 @@ static int vc4_plane_allocate_lbm(struct drm_plane_state *state)
        if (!lbm_size)
                return 0;
 
+       if (vc4->gen == VC4_GEN_5)
+               lbm_size = ALIGN(lbm_size, 64);
+       else if (vc4->gen == VC4_GEN_4)
+               lbm_size = ALIGN(lbm_size, 32);
+
        drm_dbg_driver(drm, "[PLANE:%d:%s] LBM Allocation Size: %u\n",
                       plane->base.id, plane->name, lbm_size);
 
@@ -771,8 +776,7 @@ static int vc4_plane_allocate_lbm(struct drm_plane_state *state)
                spin_lock_irqsave(&vc4->hvs->mm_lock, irqflags);
                ret = drm_mm_insert_node_generic(&vc4->hvs->lbm_mm,
                                                 &vc4_state->lbm,
-                                                lbm_size,
-                                                vc4->gen == VC4_GEN_5 ? 64 : 32,
+                                                lbm_size, 1,
                                                 0, 0);
                spin_unlock_irqrestore(&vc4->hvs->mm_lock, irqflags);