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: Pass along the format info from .fb_create() to drm_helper_mode_fill_fb_struct()

Plumb the format info from .fb_create() all the way to
drm_helper_mode_fill_fb_struct() to avoid the redundant
lookup.

For the fbdev case a manual drm_get_format_info() lookup
is needed.

Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250701090722.13645-13-ville.syrjala@linux.intel.com

+12 -8
+4 -1
drivers/gpu/drm/gma500/fbdev.c
··· 203 203 return PTR_ERR(backing); 204 204 obj = &backing->base; 205 205 206 - fb = psb_framebuffer_create(dev, &mode_cmd, obj); 206 + fb = psb_framebuffer_create(dev, 207 + drm_get_format_info(dev, mode_cmd.pixel_format, 208 + mode_cmd.modifier[0]), 209 + &mode_cmd, obj); 207 210 if (IS_ERR(fb)) { 208 211 ret = PTR_ERR(fb); 209 212 goto err_drm_gem_object_put;
+7 -7
drivers/gpu/drm/gma500/framebuffer.c
··· 29 29 */ 30 30 static int psb_framebuffer_init(struct drm_device *dev, 31 31 struct drm_framebuffer *fb, 32 + const struct drm_format_info *info, 32 33 const struct drm_mode_fb_cmd2 *mode_cmd, 33 34 struct drm_gem_object *obj) 34 35 { 35 - const struct drm_format_info *info; 36 36 int ret; 37 37 38 38 /* 39 39 * Reject unknown formats, YUV formats, and formats with more than 40 40 * 4 bytes per pixel. 41 41 */ 42 - info = drm_get_format_info(dev, mode_cmd->pixel_format, 43 - mode_cmd->modifier[0]); 44 - if (!info || !info->depth || info->cpp[0] > 4) 42 + if (!info->depth || info->cpp[0] > 4) 45 43 return -EINVAL; 46 44 47 45 if (mode_cmd->pitches[0] & 63) 48 46 return -EINVAL; 49 47 50 - drm_helper_mode_fill_fb_struct(dev, fb, NULL, mode_cmd); 48 + drm_helper_mode_fill_fb_struct(dev, fb, info, mode_cmd); 51 49 fb->obj[0] = obj; 52 50 ret = drm_framebuffer_init(dev, fb, &psb_fb_funcs); 53 51 if (ret) { ··· 58 60 /** 59 61 * psb_framebuffer_create - create a framebuffer backed by gt 60 62 * @dev: our DRM device 63 + * @info: pixel format information 61 64 * @mode_cmd: the description of the requested mode 62 65 * @obj: the backing object 63 66 * ··· 68 69 * TODO: review object references 69 70 */ 70 71 struct drm_framebuffer *psb_framebuffer_create(struct drm_device *dev, 72 + const struct drm_format_info *info, 71 73 const struct drm_mode_fb_cmd2 *mode_cmd, 72 74 struct drm_gem_object *obj) 73 75 { ··· 79 79 if (!fb) 80 80 return ERR_PTR(-ENOMEM); 81 81 82 - ret = psb_framebuffer_init(dev, fb, mode_cmd, obj); 82 + ret = psb_framebuffer_init(dev, fb, info, mode_cmd, obj); 83 83 if (ret) { 84 84 kfree(fb); 85 85 return ERR_PTR(ret); ··· 112 112 return ERR_PTR(-ENOENT); 113 113 114 114 /* Let the core code do all the work */ 115 - fb = psb_framebuffer_create(dev, cmd, obj); 115 + fb = psb_framebuffer_create(dev, info, cmd, obj); 116 116 if (IS_ERR(fb)) 117 117 drm_gem_object_put(obj); 118 118
+1
drivers/gpu/drm/gma500/psb_drv.h
··· 594 594 595 595 /* framebuffer */ 596 596 struct drm_framebuffer *psb_framebuffer_create(struct drm_device *dev, 597 + const struct drm_format_info *info, 597 598 const struct drm_mode_fb_cmd2 *mode_cmd, 598 599 struct drm_gem_object *obj); 599 600