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

Configure Feed

Select the types of activity you want to include in your feed.

drm/gma500: Create framebuffers with drm_gem_fb_create()

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.

v2:
- rebase on upstream changes

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Link: https://patch.msgid.link/20260206133458.226467-6-tzimmermann@suse.de

+9 -101
+9 -95
drivers/gpu/drm/gma500/framebuffer.c
··· 12 12 #include "framebuffer.h" 13 13 #include "psb_drv.h" 14 14 15 - static const struct drm_framebuffer_funcs psb_fb_funcs = { 16 - .destroy = drm_gem_fb_destroy, 17 - .create_handle = drm_gem_fb_create_handle, 18 - }; 19 - 20 - /** 21 - * psb_framebuffer_init - initialize a framebuffer 22 - * @dev: our DRM device 23 - * @fb: framebuffer to set up 24 - * @mode_cmd: mode description 25 - * @obj: backing object 26 - * 27 - * Configure and fill in the boilerplate for our frame buffer. Return 28 - * 0 on success or an error code if we fail. 29 - */ 30 - static int psb_framebuffer_init(struct drm_device *dev, 31 - struct drm_framebuffer *fb, 32 - const struct drm_format_info *info, 33 - const struct drm_mode_fb_cmd2 *mode_cmd, 34 - struct drm_gem_object *obj) 15 + static struct drm_framebuffer * 16 + psb_user_framebuffer_create(struct drm_device *dev, struct drm_file *filp, 17 + const struct drm_format_info *info, 18 + const struct drm_mode_fb_cmd2 *cmd) 35 19 { 36 - int ret; 37 - 38 20 /* 39 21 * Reject unknown formats, YUV formats, and formats with more than 40 22 * 4 bytes per pixel. 41 23 */ 42 24 if (!info->depth || info->cpp[0] > 4) 43 - return -EINVAL; 44 - 45 - if (mode_cmd->pitches[0] & 63) 46 - return -EINVAL; 47 - 48 - drm_helper_mode_fill_fb_struct(dev, fb, info, mode_cmd); 49 - fb->obj[0] = obj; 50 - ret = drm_framebuffer_init(dev, fb, &psb_fb_funcs); 51 - if (ret) { 52 - dev_err(dev->dev, "framebuffer init failed: %d\n", ret); 53 - return ret; 54 - } 55 - return 0; 56 - } 57 - 58 - /** 59 - * psb_framebuffer_create - create a framebuffer backed by gt 60 - * @dev: our DRM device 61 - * @info: pixel format information 62 - * @mode_cmd: the description of the requested mode 63 - * @obj: the backing object 64 - * 65 - * Create a framebuffer object backed by the gt, and fill in the 66 - * boilerplate required 67 - * 68 - * TODO: review object references 69 - */ 70 - struct drm_framebuffer *psb_framebuffer_create(struct drm_device *dev, 71 - const struct drm_format_info *info, 72 - const struct drm_mode_fb_cmd2 *mode_cmd, 73 - struct drm_gem_object *obj) 74 - { 75 - struct drm_framebuffer *fb; 76 - int ret; 77 - 78 - fb = kzalloc_obj(*fb); 79 - if (!fb) 80 - return ERR_PTR(-ENOMEM); 81 - 82 - ret = psb_framebuffer_init(dev, fb, info, mode_cmd, obj); 83 - if (ret) { 84 - kfree(fb); 85 - return ERR_PTR(ret); 86 - } 87 - return fb; 88 - } 89 - 90 - /** 91 - * psb_user_framebuffer_create - create framebuffer 92 - * @dev: our DRM device 93 - * @filp: client file 94 - * @cmd: mode request 95 - * 96 - * Create a new framebuffer backed by a userspace GEM object 97 - */ 98 - static struct drm_framebuffer *psb_user_framebuffer_create 99 - (struct drm_device *dev, struct drm_file *filp, 100 - const struct drm_format_info *info, 101 - const struct drm_mode_fb_cmd2 *cmd) 102 - { 103 - struct drm_gem_object *obj; 104 - struct drm_framebuffer *fb; 25 + return ERR_PTR(-EINVAL); 105 26 106 27 /* 107 - * Find the GEM object and thus the gtt range object that is 108 - * to back this space 28 + * Pitch must be aligned to 64 bytes. 109 29 */ 110 - obj = drm_gem_object_lookup(filp, cmd->handles[0]); 111 - if (obj == NULL) 112 - return ERR_PTR(-ENOENT); 30 + if (cmd->pitches[0] & 63) 31 + return ERR_PTR(-EINVAL); 113 32 114 - /* Let the core code do all the work */ 115 - fb = psb_framebuffer_create(dev, info, cmd, obj); 116 - if (IS_ERR(fb)) 117 - drm_gem_object_put(obj); 118 - 119 - return fb; 33 + return drm_gem_fb_create(dev, filp, info, cmd); 120 34 } 121 35 122 36 static const struct drm_mode_config_funcs psb_mode_funcs = {
-6
drivers/gpu/drm/gma500/psb_drv.h
··· 592 592 extern void psb_modeset_init(struct drm_device *dev); 593 593 extern void psb_modeset_cleanup(struct drm_device *dev); 594 594 595 - /* framebuffer */ 596 - struct drm_framebuffer *psb_framebuffer_create(struct drm_device *dev, 597 - const struct drm_format_info *info, 598 - const struct drm_mode_fb_cmd2 *mode_cmd, 599 - struct drm_gem_object *obj); 600 - 601 595 /* fbdev */ 602 596 #if defined(CONFIG_DRM_FBDEV_EMULATION) 603 597 int psb_fbdev_driver_fbdev_probe(struct drm_fb_helper *fb_helper,