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

drm: Allow the caller to pass in the format info to drm_helper_mode_fill_fb_struct()

Soon all drivers should have the format info already available in the
places where they call drm_helper_mode_fill_fb_struct(). Allow it to
be passed along into drm_helper_mode_fill_fb_struct() instead of doing
yet another redundant lookup.

Start by always passing in NULL and still doing the extra lookup.
The actual changes to avoid the lookup will follow.

Done with cocci (with some manual fixups):
@@
identifier dev, fb, mode_cmd;
expression get_format_info;
@@
void drm_helper_mode_fill_fb_struct(struct drm_device *dev,
struct drm_framebuffer *fb,
+ const struct drm_format_info *info,
const struct drm_mode_fb_cmd2 *mode_cmd)
{
...
- fb->format = get_format_info;
+ fb->format = info ?: get_format_info;
...
}

@@
identifier dev, fb, mode_cmd;
@@
void drm_helper_mode_fill_fb_struct(struct drm_device *dev,
struct drm_framebuffer *fb,
+ const struct drm_format_info *info,
const struct drm_mode_fb_cmd2 *mode_cmd);

@@
expression dev, fb, mode_cmd;
@@
drm_helper_mode_fill_fb_struct(dev, fb
+ ,NULL
,mode_cmd);

Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: Liviu Dudau <liviu.dudau@arm.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Inki Dae <inki.dae@samsung.com>
Cc: Seung-Woo Kim <sw0312.kim@samsung.com>
Cc: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Cc: Rob Clark <robdclark@gmail.com>
Cc: Abhinav Kumar <quic_abhinavk@quicinc.com>
Cc: Dmitry Baryshkov <lumag@kernel.org>
Cc: Sean Paul <sean@poorly.run>
Cc: Marijn Suijten <marijn.suijten@somainline.org>
Cc: Lyude Paul <lyude@redhat.com>
Cc: Danilo Krummrich <dakr@kernel.org>
Cc: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Mikko Perttunen <mperttunen@nvidia.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Cc: Gurchetan Singh <gurchetansingh@chromium.org>
Cc: Chia-I Wu <olvaffe@gmail.com>
Cc: Zack Rusin <zack.rusin@broadcom.com>
Cc: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com>
Cc: amd-gfx@lists.freedesktop.org
Cc: linux-arm-msm@vger.kernel.org
Cc: freedreno@lists.freedesktop.org
Cc: nouveau@lists.freedesktop.org
Cc: linux-tegra@vger.kernel.org
Cc: virtualization@lists.linux.dev
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Reviewed-by: Liviu Dudau <liviu.dudau@arm.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Acked-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250701090722.13645-6-ville.syrjala@linux.intel.com

+21 -17
+1 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
··· 1202 1202 int ret; 1203 1203 1204 1204 rfb->base.obj[0] = obj; 1205 - drm_helper_mode_fill_fb_struct(dev, &rfb->base, mode_cmd); 1205 + drm_helper_mode_fill_fb_struct(dev, &rfb->base, NULL, mode_cmd); 1206 1206 /* Verify that the modifier is supported. */ 1207 1207 if (!drm_any_plane_has_format(dev, mode_cmd->pixel_format, 1208 1208 mode_cmd->modifier[0])) {
+1 -1
drivers/gpu/drm/arm/display/komeda/komeda_framebuffer.c
··· 178 178 return ERR_PTR(-EINVAL); 179 179 } 180 180 181 - drm_helper_mode_fill_fb_struct(dev, &kfb->base, mode_cmd); 181 + drm_helper_mode_fill_fb_struct(dev, &kfb->base, NULL, mode_cmd); 182 182 183 183 if (kfb->base.modifier) 184 184 ret = komeda_fb_afbc_size_check(kfb, file, mode_cmd);
+1 -1
drivers/gpu/drm/armada/armada_fb.c
··· 64 64 dfb->mod = config; 65 65 dfb->fb.obj[0] = &obj->obj; 66 66 67 - drm_helper_mode_fill_fb_struct(dev, &dfb->fb, mode); 67 + drm_helper_mode_fill_fb_struct(dev, &dfb->fb, NULL, mode); 68 68 69 69 ret = drm_framebuffer_init(dev, &dfb->fb, &armada_fb_funcs); 70 70 if (ret) {
+1 -1
drivers/gpu/drm/drm_gem_framebuffer_helper.c
··· 75 75 unsigned int i; 76 76 int ret; 77 77 78 - drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd); 78 + drm_helper_mode_fill_fb_struct(dev, fb, NULL, mode_cmd); 79 79 80 80 for (i = 0; i < num_planes; i++) 81 81 fb->obj[i] = obj[i];
+4 -2
drivers/gpu/drm/drm_modeset_helper.c
··· 74 74 * drm_helper_mode_fill_fb_struct - fill out framebuffer metadata 75 75 * @dev: DRM device 76 76 * @fb: drm_framebuffer object to fill out 77 + * @info: pixel format information 77 78 * @mode_cmd: metadata from the userspace fb creation request 78 79 * 79 80 * This helper can be used in a drivers fb_create callback to pre-fill the fb's ··· 82 81 */ 83 82 void drm_helper_mode_fill_fb_struct(struct drm_device *dev, 84 83 struct drm_framebuffer *fb, 84 + const struct drm_format_info *info, 85 85 const struct drm_mode_fb_cmd2 *mode_cmd) 86 86 { 87 87 int i; 88 88 89 89 fb->dev = dev; 90 - fb->format = drm_get_format_info(dev, mode_cmd->pixel_format, 91 - mode_cmd->modifier[0]); 90 + fb->format = info ? : drm_get_format_info(dev, mode_cmd->pixel_format, 91 + mode_cmd->modifier[0]); 92 92 fb->width = mode_cmd->width; 93 93 fb->height = mode_cmd->height; 94 94 for (i = 0; i < 4; i++) {
+1 -1
drivers/gpu/drm/exynos/exynos_drm_fb.c
··· 76 76 fb->obj[i] = &exynos_gem[i]->base; 77 77 } 78 78 79 - drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd); 79 + drm_helper_mode_fill_fb_struct(dev, fb, NULL, mode_cmd); 80 80 81 81 ret = drm_framebuffer_init(dev, fb, &exynos_drm_fb_funcs); 82 82 if (ret < 0) {
+1 -1
drivers/gpu/drm/gma500/framebuffer.c
··· 47 47 if (mode_cmd->pitches[0] & 63) 48 48 return -EINVAL; 49 49 50 - drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd); 50 + drm_helper_mode_fill_fb_struct(dev, fb, NULL, mode_cmd); 51 51 fb->obj[0] = obj; 52 52 ret = drm_framebuffer_init(dev, fb, &psb_fb_funcs); 53 53 if (ret) {
+1 -1
drivers/gpu/drm/i915/display/intel_fb.c
··· 2254 2254 goto err_frontbuffer_put; 2255 2255 } 2256 2256 2257 - drm_helper_mode_fill_fb_struct(display->drm, fb, mode_cmd); 2257 + drm_helper_mode_fill_fb_struct(display->drm, fb, NULL, mode_cmd); 2258 2258 2259 2259 for (i = 0; i < fb->format->num_planes; i++) { 2260 2260 unsigned int stride_alignment;
+1 -1
drivers/gpu/drm/msm/msm_fb.c
··· 227 227 msm_fb->base.obj[i] = bos[i]; 228 228 } 229 229 230 - drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd); 230 + drm_helper_mode_fill_fb_struct(dev, fb, NULL, mode_cmd); 231 231 232 232 ret = drm_framebuffer_init(dev, fb, &msm_framebuffer_funcs); 233 233 if (ret) {
+1 -1
drivers/gpu/drm/nouveau/nouveau_display.c
··· 321 321 if (!(fb = *pfb = kzalloc(sizeof(*fb), GFP_KERNEL))) 322 322 return -ENOMEM; 323 323 324 - drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd); 324 + drm_helper_mode_fill_fb_struct(dev, fb, NULL, mode_cmd); 325 325 fb->obj[0] = gem; 326 326 327 327 ret = drm_framebuffer_init(dev, fb, &nouveau_framebuffer_funcs);
+1 -1
drivers/gpu/drm/omapdrm/omap_fb.c
··· 440 440 plane->dma_addr = 0; 441 441 } 442 442 443 - drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd); 443 + drm_helper_mode_fill_fb_struct(dev, fb, NULL, mode_cmd); 444 444 445 445 ret = drm_framebuffer_init(dev, fb, &omap_framebuffer_funcs); 446 446 if (ret) {
+1 -1
drivers/gpu/drm/radeon/radeon_display.c
··· 1302 1302 { 1303 1303 int ret; 1304 1304 fb->obj[0] = obj; 1305 - drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd); 1305 + drm_helper_mode_fill_fb_struct(dev, fb, NULL, mode_cmd); 1306 1306 ret = drm_framebuffer_init(dev, fb, &radeon_fb_funcs); 1307 1307 if (ret) { 1308 1308 fb->obj[0] = NULL;
+1 -1
drivers/gpu/drm/tegra/fb.c
··· 114 114 if (!fb) 115 115 return ERR_PTR(-ENOMEM); 116 116 117 - drm_helper_mode_fill_fb_struct(drm, fb, mode_cmd); 117 + drm_helper_mode_fill_fb_struct(drm, fb, NULL, mode_cmd); 118 118 119 119 for (i = 0; i < fb->format->num_planes; i++) 120 120 fb->obj[i] = &planes[i]->gem;
+1 -1
drivers/gpu/drm/virtio/virtgpu_display.c
··· 73 73 74 74 vgfb->base.obj[0] = obj; 75 75 76 - drm_helper_mode_fill_fb_struct(dev, &vgfb->base, mode_cmd); 76 + drm_helper_mode_fill_fb_struct(dev, &vgfb->base, NULL, mode_cmd); 77 77 78 78 ret = drm_framebuffer_init(dev, &vgfb->base, &virtio_gpu_fb_funcs); 79 79 if (ret) {
+2 -2
drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
··· 548 548 goto out_err1; 549 549 } 550 550 551 - drm_helper_mode_fill_fb_struct(dev, &vfbs->base.base, mode_cmd); 551 + drm_helper_mode_fill_fb_struct(dev, &vfbs->base.base, NULL, mode_cmd); 552 552 memcpy(&vfbs->uo, uo, sizeof(vfbs->uo)); 553 553 vmw_user_object_ref(&vfbs->uo); 554 554 ··· 634 634 } 635 635 636 636 vfbd->base.base.obj[0] = &bo->tbo.base; 637 - drm_helper_mode_fill_fb_struct(dev, &vfbd->base.base, mode_cmd); 637 + drm_helper_mode_fill_fb_struct(dev, &vfbd->base.base, NULL, mode_cmd); 638 638 vfbd->base.bo = true; 639 639 vfbd->buffer = vmw_bo_reference(bo); 640 640 *out = &vfbd->base;
+2
include/drm/drm_modeset_helper.h
··· 26 26 struct drm_crtc; 27 27 struct drm_crtc_funcs; 28 28 struct drm_device; 29 + struct drm_format_info; 29 30 struct drm_framebuffer; 30 31 struct drm_mode_fb_cmd2; 31 32 ··· 34 33 35 34 void drm_helper_mode_fill_fb_struct(struct drm_device *dev, 36 35 struct drm_framebuffer *fb, 36 + const struct drm_format_info *info, 37 37 const struct drm_mode_fb_cmd2 *mode_cmd); 38 38 39 39 int drm_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,