mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
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
This commit is contained in:
parent
9870732786
commit
9dddcd279a
2 changed files with 2 additions and 50 deletions
|
@ -18,7 +18,6 @@
|
|||
#include <drm/drm_framebuffer.h>
|
||||
|
||||
struct drm_device;
|
||||
struct drm_gem_object;
|
||||
|
||||
struct hibmc_drm_private {
|
||||
/* hw */
|
||||
|
@ -41,9 +40,6 @@ void hibmc_set_current_gate(struct hibmc_drm_private *priv,
|
|||
int hibmc_de_init(struct hibmc_drm_private *priv);
|
||||
int hibmc_vdac_init(struct hibmc_drm_private *priv);
|
||||
|
||||
int hibmc_gem_create(struct drm_device *dev, u32 size, bool iskernel,
|
||||
struct drm_gem_object **obj);
|
||||
|
||||
int hibmc_mm_init(struct hibmc_drm_private *hibmc);
|
||||
void hibmc_mm_fini(struct hibmc_drm_private *hibmc);
|
||||
int hibmc_dumb_create(struct drm_file *file, struct drm_device *dev,
|
||||
|
|
|
@ -47,55 +47,11 @@ void hibmc_mm_fini(struct hibmc_drm_private *hibmc)
|
|||
drm_vram_helper_release_mm(hibmc->dev);
|
||||
}
|
||||
|
||||
int hibmc_gem_create(struct drm_device *dev, u32 size, bool iskernel,
|
||||
struct drm_gem_object **obj)
|
||||
{
|
||||
struct drm_gem_vram_object *gbo;
|
||||
int ret;
|
||||
|
||||
*obj = NULL;
|
||||
|
||||
size = roundup(size, PAGE_SIZE);
|
||||
if (size == 0)
|
||||
return -EINVAL;
|
||||
|
||||
gbo = drm_gem_vram_create(dev, &dev->vram_mm->bdev, size, 0, false);
|
||||
if (IS_ERR(gbo)) {
|
||||
ret = PTR_ERR(gbo);
|
||||
if (ret != -ERESTARTSYS)
|
||||
DRM_ERROR("failed to allocate GEM object: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
*obj = &gbo->bo.base;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int hibmc_dumb_create(struct drm_file *file, struct drm_device *dev,
|
||||
struct drm_mode_create_dumb *args)
|
||||
{
|
||||
struct drm_gem_object *gobj;
|
||||
u32 handle;
|
||||
int ret;
|
||||
|
||||
args->pitch = ALIGN(args->width * DIV_ROUND_UP(args->bpp, 8), 16);
|
||||
args->size = args->pitch * args->height;
|
||||
|
||||
ret = hibmc_gem_create(dev, args->size, false,
|
||||
&gobj);
|
||||
if (ret) {
|
||||
DRM_ERROR("failed to create GEM object: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = drm_gem_handle_create(file, gobj, &handle);
|
||||
drm_gem_object_put_unlocked(gobj);
|
||||
if (ret) {
|
||||
DRM_ERROR("failed to unreference GEM object: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
args->handle = handle;
|
||||
return 0;
|
||||
return drm_gem_vram_fill_create_dumb(file, dev, &dev->vram_mm->bdev,
|
||||
0, 16, false, args);
|
||||
}
|
||||
|
||||
const struct drm_mode_config_funcs hibmc_mode_funcs = {
|
||||
|
|
Loading…
Add table
Reference in a new issue