Replace gma500's internal framebuffer creation with DRM's standard helper drm_gem_fb_create(). The result is equivalent. Only keep the existing tests for color depth and pitch alignment.
Signed-off-by: Thomas Zimmermann <[email protected]> --- drivers/gpu/drm/gma500/framebuffer.c | 104 +++------------------------ drivers/gpu/drm/gma500/psb_drv.h | 6 -- 2 files changed, 9 insertions(+), 101 deletions(-) diff --git a/drivers/gpu/drm/gma500/framebuffer.c b/drivers/gpu/drm/gma500/framebuffer.c index e69b537ded6b..37a9f666c0f2 100644 --- a/drivers/gpu/drm/gma500/framebuffer.c +++ b/drivers/gpu/drm/gma500/framebuffer.c @@ -12,111 +12,25 @@ #include "framebuffer.h" #include "psb_drv.h" -static const struct drm_framebuffer_funcs psb_fb_funcs = { - .destroy = drm_gem_fb_destroy, - .create_handle = drm_gem_fb_create_handle, -}; - -/** - * psb_framebuffer_init - initialize a framebuffer - * @dev: our DRM device - * @fb: framebuffer to set up - * @mode_cmd: mode description - * @obj: backing object - * - * Configure and fill in the boilerplate for our frame buffer. Return - * 0 on success or an error code if we fail. - */ -static int psb_framebuffer_init(struct drm_device *dev, - struct drm_framebuffer *fb, - const struct drm_format_info *info, - const struct drm_mode_fb_cmd2 *mode_cmd, - struct drm_gem_object *obj) +static struct drm_framebuffer * +psb_user_framebuffer_create(struct drm_device *dev, struct drm_file *filp, + const struct drm_format_info *info, + const struct drm_mode_fb_cmd2 *cmd) { - int ret; - /* * Reject unknown formats, YUV formats, and formats with more than * 4 bytes per pixel. */ if (!info->depth || info->cpp[0] > 4) - return -EINVAL; - - if (mode_cmd->pitches[0] & 63) - return -EINVAL; - - drm_helper_mode_fill_fb_struct(dev, fb, info, mode_cmd); - fb->obj[0] = obj; - ret = drm_framebuffer_init(dev, fb, &psb_fb_funcs); - if (ret) { - dev_err(dev->dev, "framebuffer init failed: %d\n", ret); - return ret; - } - return 0; -} - -/** - * psb_framebuffer_create - create a framebuffer backed by gt - * @dev: our DRM device - * @info: pixel format information - * @mode_cmd: the description of the requested mode - * @obj: the backing object - * - * Create a framebuffer object backed by the gt, and fill in the - * boilerplate required - * - * TODO: review object references - */ -struct drm_framebuffer *psb_framebuffer_create(struct drm_device *dev, - const struct drm_format_info *info, - const struct drm_mode_fb_cmd2 *mode_cmd, - struct drm_gem_object *obj) -{ - struct drm_framebuffer *fb; - int ret; - - fb = kzalloc(sizeof(*fb), GFP_KERNEL); - if (!fb) - return ERR_PTR(-ENOMEM); - - ret = psb_framebuffer_init(dev, fb, info, mode_cmd, obj); - if (ret) { - kfree(fb); - return ERR_PTR(ret); - } - return fb; -} - -/** - * psb_user_framebuffer_create - create framebuffer - * @dev: our DRM device - * @filp: client file - * @cmd: mode request - * - * Create a new framebuffer backed by a userspace GEM object - */ -static struct drm_framebuffer *psb_user_framebuffer_create - (struct drm_device *dev, struct drm_file *filp, - const struct drm_format_info *info, - const struct drm_mode_fb_cmd2 *cmd) -{ - struct drm_gem_object *obj; - struct drm_framebuffer *fb; + return ERR_PTR(-EINVAL); /* - * Find the GEM object and thus the gtt range object that is - * to back this space + * Pitch must be aligned to 64 bytes. */ - obj = drm_gem_object_lookup(filp, cmd->handles[0]); - if (obj == NULL) - return ERR_PTR(-ENOENT); - - /* Let the core code do all the work */ - fb = psb_framebuffer_create(dev, info, cmd, obj); - if (IS_ERR(fb)) - drm_gem_object_put(obj); + if (cmd->pitches[0] & 63) + return ERR_PTR(-EINVAL); - return fb; + return drm_gem_fb_create(dev, filp, info, cmd); } static const struct drm_mode_config_funcs psb_mode_funcs = { diff --git a/drivers/gpu/drm/gma500/psb_drv.h b/drivers/gpu/drm/gma500/psb_drv.h index 0b27112ec46f..db197b865b90 100644 --- a/drivers/gpu/drm/gma500/psb_drv.h +++ b/drivers/gpu/drm/gma500/psb_drv.h @@ -592,12 +592,6 @@ struct psb_ops { extern void psb_modeset_init(struct drm_device *dev); extern void psb_modeset_cleanup(struct drm_device *dev); -/* framebuffer */ -struct drm_framebuffer *psb_framebuffer_create(struct drm_device *dev, - const struct drm_format_info *info, - const struct drm_mode_fb_cmd2 *mode_cmd, - struct drm_gem_object *obj); - /* fbdev */ #if defined(CONFIG_DRM_FBDEV_EMULATION) int psb_fbdev_driver_fbdev_probe(struct drm_fb_helper *fb_helper, -- 2.52.0
