Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/hisilicon/hibmc: Implement hibmc_dumb_create() with generic helpers

The hibmc driver aligns scanlines to 16 bytes. By using the new pitch_align
argument of drm_gem_vram_fill_create_dumb(), convert hibmc over.

v2:
* move changes to VRAM helpers into separate patch

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20191203083819.6643-5-tzimmermann@suse.de

+2 -50
-4
drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.h
··· 18 18 #include <drm/drm_framebuffer.h> 19 19 20 20 struct drm_device; 21 - struct drm_gem_object; 22 21 23 22 struct hibmc_drm_private { 24 23 /* hw */ ··· 39 40 40 41 int hibmc_de_init(struct hibmc_drm_private *priv); 41 42 int hibmc_vdac_init(struct hibmc_drm_private *priv); 42 - 43 - int hibmc_gem_create(struct drm_device *dev, u32 size, bool iskernel, 44 - struct drm_gem_object **obj); 45 43 46 44 int hibmc_mm_init(struct hibmc_drm_private *hibmc); 47 45 void hibmc_mm_fini(struct hibmc_drm_private *hibmc);
+2 -46
drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c
··· 47 47 drm_vram_helper_release_mm(hibmc->dev); 48 48 } 49 49 50 - int hibmc_gem_create(struct drm_device *dev, u32 size, bool iskernel, 51 - struct drm_gem_object **obj) 52 - { 53 - struct drm_gem_vram_object *gbo; 54 - int ret; 55 - 56 - *obj = NULL; 57 - 58 - size = roundup(size, PAGE_SIZE); 59 - if (size == 0) 60 - return -EINVAL; 61 - 62 - gbo = drm_gem_vram_create(dev, &dev->vram_mm->bdev, size, 0, false); 63 - if (IS_ERR(gbo)) { 64 - ret = PTR_ERR(gbo); 65 - if (ret != -ERESTARTSYS) 66 - DRM_ERROR("failed to allocate GEM object: %d\n", ret); 67 - return ret; 68 - } 69 - *obj = &gbo->bo.base; 70 - return 0; 71 - } 72 - 73 50 int hibmc_dumb_create(struct drm_file *file, struct drm_device *dev, 74 51 struct drm_mode_create_dumb *args) 75 52 { 76 - struct drm_gem_object *gobj; 77 - u32 handle; 78 - int ret; 79 - 80 - args->pitch = ALIGN(args->width * DIV_ROUND_UP(args->bpp, 8), 16); 81 - args->size = args->pitch * args->height; 82 - 83 - ret = hibmc_gem_create(dev, args->size, false, 84 - &gobj); 85 - if (ret) { 86 - DRM_ERROR("failed to create GEM object: %d\n", ret); 87 - return ret; 88 - } 89 - 90 - ret = drm_gem_handle_create(file, gobj, &handle); 91 - drm_gem_object_put_unlocked(gobj); 92 - if (ret) { 93 - DRM_ERROR("failed to unreference GEM object: %d\n", ret); 94 - return ret; 95 - } 96 - 97 - args->handle = handle; 98 - return 0; 53 + return drm_gem_vram_fill_create_dumb(file, dev, &dev->vram_mm->bdev, 54 + 0, 16, false, args); 99 55 } 100 56 101 57 const struct drm_mode_config_funcs hibmc_mode_funcs = {