diff options
Diffstat (limited to 'target/linux/bcm27xx/patches-5.15/950-0900-drm-vc4-bo-Split-out-Dumb-buffers-fixup.patch')
-rw-r--r-- | target/linux/bcm27xx/patches-5.15/950-0900-drm-vc4-bo-Split-out-Dumb-buffers-fixup.patch | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.15/950-0900-drm-vc4-bo-Split-out-Dumb-buffers-fixup.patch b/target/linux/bcm27xx/patches-5.15/950-0900-drm-vc4-bo-Split-out-Dumb-buffers-fixup.patch new file mode 100644 index 0000000000..8b066bf2f2 --- /dev/null +++ b/target/linux/bcm27xx/patches-5.15/950-0900-drm-vc4-bo-Split-out-Dumb-buffers-fixup.patch @@ -0,0 +1,72 @@ +From 5e59f19a966fa351cf9b5e59e2dbf2162a8542ce Mon Sep 17 00:00:00 2001 +From: Maxime Ripard <maxime@cerno.tech> +Date: Thu, 21 Apr 2022 10:59:41 +0200 +Subject: [PATCH] drm/vc4: bo: Split out Dumb buffers fixup + +The vc4_bo_dumb_create() both fixes up the allocation arguments to match +the hardware constraints and actually performs the allocation. + +Since we're going to introduce a new function that uses a different +allocator, let's split the arguments fixup to a separate function we +will be able to reuse. + +Signed-off-by: Maxime Ripard <maxime@cerno.tech> +--- + drivers/gpu/drm/vc4/vc4_bo.c | 9 +++------ + drivers/gpu/drm/vc4/vc4_drv.c | 13 +++++++++++++ + drivers/gpu/drm/vc4/vc4_drv.h | 1 + + 3 files changed, 17 insertions(+), 6 deletions(-) + +--- a/drivers/gpu/drm/vc4/vc4_bo.c ++++ b/drivers/gpu/drm/vc4/vc4_bo.c +@@ -477,15 +477,12 @@ int vc4_bo_dumb_create(struct drm_file * + struct drm_device *dev, + struct drm_mode_create_dumb *args) + { +- int min_pitch = DIV_ROUND_UP(args->width * args->bpp, 8); + struct vc4_bo *bo = NULL; + int ret; + +- if (args->pitch < min_pitch) +- args->pitch = min_pitch; +- +- if (args->size < args->pitch * args->height) +- args->size = args->pitch * args->height; ++ ret = vc4_dumb_fixup_args(args); ++ if (ret) ++ return ret; + + bo = vc4_bo_create(dev, args->size, false, VC4_BO_TYPE_DUMB); + if (IS_ERR(bo)) +--- a/drivers/gpu/drm/vc4/vc4_drv.c ++++ b/drivers/gpu/drm/vc4/vc4_drv.c +@@ -65,6 +65,19 @@ void __iomem *vc4_ioremap_regs(struct pl + return map; + } + ++int vc4_dumb_fixup_args(struct drm_mode_create_dumb *args) ++{ ++ int min_pitch = DIV_ROUND_UP(args->width * args->bpp, 8); ++ ++ if (args->pitch < min_pitch) ++ args->pitch = min_pitch; ++ ++ if (args->size < args->pitch * args->height) ++ args->size = args->pitch * args->height; ++ ++ return 0; ++} ++ + static int vc4_get_param_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv) + { +--- a/drivers/gpu/drm/vc4/vc4_drv.h ++++ b/drivers/gpu/drm/vc4/vc4_drv.h +@@ -917,6 +917,7 @@ static inline void vc4_debugfs_add_regse + + /* vc4_drv.c */ + void __iomem *vc4_ioremap_regs(struct platform_device *dev, int index); ++int vc4_dumb_fixup_args(struct drm_mode_create_dumb *args); + + /* vc4_dpi.c */ + extern struct platform_driver vc4_dpi_driver; |