[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v2 09/25] drm/hibmc: Compute dumb-buffer sizes with drm_mode_size_dumb()



Call drm_mode_size_dumb() to compute dumb-buffer scanline pitch and
buffer size. Align the pitch to a multiple of 128.

The hibmc driver's new hibmc_dumb_create() is similar to the one
in GEM VRAM helpers. The driver was the only caller of
drm_gem_vram_fill_create_dumb(). Remove the now unused helper.

Signed-off-by: Thomas Zimmermann <tzimmermann@xxxxxxx>
Cc: Xinliang Liu <xinliang.liu@xxxxxxxxxx>
Cc: Tian Tao <tiantao6@xxxxxxxxxxxxx>
Cc: Xinwei Kong <kong.kongxinwei@xxxxxxxxxxxxx>
Cc: Sumit Semwal <sumit.semwal@xxxxxxxxxx>
Cc: Yongqin Liu <yongqin.liu@xxxxxxxxxx>
Cc: John Stultz <jstultz@xxxxxxxxxx>
---
 drivers/gpu/drm/drm_gem_vram_helper.c         | 65 -------------------
 .../gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c   | 25 ++++++-
 include/drm/drm_gem_vram_helper.h             |  6 --
 3 files changed, 24 insertions(+), 72 deletions(-)

diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c 
b/drivers/gpu/drm/drm_gem_vram_helper.c
index 15cd564cbeac..b4cf8134df6d 100644
--- a/drivers/gpu/drm/drm_gem_vram_helper.c
+++ b/drivers/gpu/drm/drm_gem_vram_helper.c
@@ -444,71 +444,6 @@ void drm_gem_vram_vunmap(struct drm_gem_vram_object *gbo,
 }
 EXPORT_SYMBOL(drm_gem_vram_vunmap);
 
-/**
- * drm_gem_vram_fill_create_dumb() - Helper for implementing
- *                                  &struct drm_driver.dumb_create
- *
- * @file:              the DRM file
- * @dev:               the DRM device
- * @pg_align:          the buffer's alignment in multiples of the page size
- * @pitch_align:       the scanline's alignment in powers of 2
- * @args:              the arguments as provided to
- *                     &struct drm_driver.dumb_create
- *
- * This helper function fills &struct drm_mode_create_dumb, which is used
- * by &struct drm_driver.dumb_create. Implementations of this interface
- * should forwards their arguments to this helper, plus the driver-specific
- * parameters.
- *
- * Returns:
- * 0 on success, or
- * a negative error code otherwise.
- */
-int drm_gem_vram_fill_create_dumb(struct drm_file *file,
-                                 struct drm_device *dev,
-                                 unsigned long pg_align,
-                                 unsigned long pitch_align,
-                                 struct drm_mode_create_dumb *args)
-{
-       size_t pitch, size;
-       struct drm_gem_vram_object *gbo;
-       int ret;
-       u32 handle;
-
-       pitch = args->width * DIV_ROUND_UP(args->bpp, 8);
-       if (pitch_align) {
-               if (WARN_ON_ONCE(!is_power_of_2(pitch_align)))
-                       return -EINVAL;
-               pitch = ALIGN(pitch, pitch_align);
-       }
-       size = pitch * args->height;
-
-       size = roundup(size, PAGE_SIZE);
-       if (!size)
-               return -EINVAL;
-
-       gbo = drm_gem_vram_create(dev, size, pg_align);
-       if (IS_ERR(gbo))
-               return PTR_ERR(gbo);
-
-       ret = drm_gem_handle_create(file, &gbo->bo.base, &handle);
-       if (ret)
-               goto err_drm_gem_object_put;
-
-       drm_gem_object_put(&gbo->bo.base);
-
-       args->pitch = pitch;
-       args->size = size;
-       args->handle = handle;
-
-       return 0;
-
-err_drm_gem_object_put:
-       drm_gem_object_put(&gbo->bo.base);
-       return ret;
-}
-EXPORT_SYMBOL(drm_gem_vram_fill_create_dumb);
-
 /*
  * Helpers for struct ttm_device_funcs
  */
diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c 
b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
index e6de6d5edf6b..81768577871f 100644
--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
+++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c
@@ -18,10 +18,12 @@
 #include <drm/clients/drm_client_setup.h>
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_drv.h>
+#include <drm/drm_dumb_buffers.h>
 #include <drm/drm_fbdev_ttm.h>
 #include <drm/drm_gem_framebuffer_helper.h>
 #include <drm/drm_gem_vram_helper.h>
 #include <drm/drm_managed.h>
+#include <drm/drm_mode.h>
 #include <drm/drm_module.h>
 #include <drm/drm_vblank.h>
 
@@ -54,7 +56,28 @@ static irqreturn_t hibmc_interrupt(int irq, void *arg)
 static int hibmc_dumb_create(struct drm_file *file, struct drm_device *dev,
                             struct drm_mode_create_dumb *args)
 {
-       return drm_gem_vram_fill_create_dumb(file, dev, 0, 128, args);
+       struct drm_gem_vram_object *gbo;
+       int ret;
+
+       ret = drm_mode_size_dumb(dev, args, SZ_128, 0);
+       if (ret)
+               return ret;
+
+       gbo = drm_gem_vram_create(dev, args->size, 0);
+       if (IS_ERR(gbo))
+               return PTR_ERR(gbo);
+
+       ret = drm_gem_handle_create(file, &gbo->bo.base, &args->handle);
+       if (ret)
+               goto err_drm_gem_object_put;
+
+       drm_gem_object_put(&gbo->bo.base);
+
+       return 0;
+
+err_drm_gem_object_put:
+       drm_gem_object_put(&gbo->bo.base);
+       return ret;
 }
 
 static const struct drm_driver hibmc_driver = {
diff --git a/include/drm/drm_gem_vram_helper.h 
b/include/drm/drm_gem_vram_helper.h
index 00830b49a3ff..b6e821f5dd03 100644
--- a/include/drm/drm_gem_vram_helper.h
+++ b/include/drm/drm_gem_vram_helper.h
@@ -100,12 +100,6 @@ int drm_gem_vram_vmap(struct drm_gem_vram_object *gbo, 
struct iosys_map *map);
 void drm_gem_vram_vunmap(struct drm_gem_vram_object *gbo,
                         struct iosys_map *map);
 
-int drm_gem_vram_fill_create_dumb(struct drm_file *file,
-                                 struct drm_device *dev,
-                                 unsigned long pg_align,
-                                 unsigned long pitch_align,
-                                 struct drm_mode_create_dumb *args);
-
 /*
  * Helpers for struct drm_driver
  */
-- 
2.47.1




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.