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

drm/i915: 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.

Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
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-14-ville.syrjala@linux.intel.com

+20 -7
+5 -3
drivers/gpu/drm/i915/display/intel_fb.c
··· 2207 2207 2208 2208 int intel_framebuffer_init(struct intel_framebuffer *intel_fb, 2209 2209 struct drm_gem_object *obj, 2210 + const struct drm_format_info *info, 2210 2211 struct drm_mode_fb_cmd2 *mode_cmd) 2211 2212 { 2212 2213 struct intel_display *display = to_intel_display(obj->dev); ··· 2255 2254 goto err_frontbuffer_put; 2256 2255 } 2257 2256 2258 - drm_helper_mode_fill_fb_struct(display->drm, fb, NULL, mode_cmd); 2257 + drm_helper_mode_fill_fb_struct(display->drm, fb, info, mode_cmd); 2259 2258 2260 2259 for (i = 0; i < fb->format->num_planes; i++) { 2261 2260 unsigned int stride_alignment; ··· 2336 2335 if (IS_ERR(obj)) 2337 2336 return ERR_CAST(obj); 2338 2337 2339 - fb = intel_framebuffer_create(obj, &mode_cmd); 2338 + fb = intel_framebuffer_create(obj, info, &mode_cmd); 2340 2339 drm_gem_object_put(obj); 2341 2340 2342 2341 return fb; ··· 2344 2343 2345 2344 struct drm_framebuffer * 2346 2345 intel_framebuffer_create(struct drm_gem_object *obj, 2346 + const struct drm_format_info *info, 2347 2347 struct drm_mode_fb_cmd2 *mode_cmd) 2348 2348 { 2349 2349 struct intel_framebuffer *intel_fb; ··· 2354 2352 if (!intel_fb) 2355 2353 return ERR_PTR(-ENOMEM); 2356 2354 2357 - ret = intel_framebuffer_init(intel_fb, obj, mode_cmd); 2355 + ret = intel_framebuffer_init(intel_fb, obj, info, mode_cmd); 2358 2356 if (ret) 2359 2357 goto err; 2360 2358
+2
drivers/gpu/drm/i915/display/intel_fb.h
··· 102 102 103 103 int intel_framebuffer_init(struct intel_framebuffer *ifb, 104 104 struct drm_gem_object *obj, 105 + const struct drm_format_info *info, 105 106 struct drm_mode_fb_cmd2 *mode_cmd); 106 107 struct drm_framebuffer * 107 108 intel_framebuffer_create(struct drm_gem_object *obj, 109 + const struct drm_format_info *info, 108 110 struct drm_mode_fb_cmd2 *mode_cmd); 109 111 struct drm_framebuffer * 110 112 intel_user_framebuffer_create(struct drm_device *dev,
+5 -1
drivers/gpu/drm/i915/display/intel_fbdev_fb.c
··· 62 62 return ERR_PTR(-ENOMEM); 63 63 } 64 64 65 - fb = intel_framebuffer_create(intel_bo_to_drm_bo(obj), &mode_cmd); 65 + fb = intel_framebuffer_create(intel_bo_to_drm_bo(obj), 66 + drm_get_format_info(display->drm, 67 + mode_cmd.pixel_format, 68 + mode_cmd.modifier[0]), 69 + &mode_cmd); 66 70 i915_gem_object_put(obj); 67 71 68 72 return to_intel_framebuffer(fb);
+2 -1
drivers/gpu/drm/i915/display/intel_plane_initial.c
··· 289 289 mode_cmd.flags = DRM_MODE_FB_MODIFIERS; 290 290 291 291 if (intel_framebuffer_init(to_intel_framebuffer(fb), 292 - intel_bo_to_drm_bo(vma->obj), &mode_cmd)) { 292 + intel_bo_to_drm_bo(vma->obj), 293 + fb->format, &mode_cmd)) { 293 294 drm_dbg_kms(display->drm, "intel fb init failed\n"); 294 295 goto err_vma; 295 296 }
+5 -1
drivers/gpu/drm/xe/display/intel_fbdev_fb.c
··· 66 66 goto err; 67 67 } 68 68 69 - fb = intel_framebuffer_create(&obj->ttm.base, &mode_cmd); 69 + fb = intel_framebuffer_create(&obj->ttm.base, 70 + drm_get_format_info(dev, 71 + mode_cmd.pixel_format, 72 + mode_cmd.modifier[0]), 73 + &mode_cmd); 70 74 if (IS_ERR(fb)) { 71 75 xe_bo_unpin_map_no_vm(obj); 72 76 goto err;
+1 -1
drivers/gpu/drm/xe/display/xe_plane_initial.c
··· 184 184 return false; 185 185 186 186 if (intel_framebuffer_init(to_intel_framebuffer(fb), 187 - &bo->ttm.base, &mode_cmd)) { 187 + &bo->ttm.base, fb->format, &mode_cmd)) { 188 188 drm_dbg_kms(&xe->drm, "intel fb init failed\n"); 189 189 goto err_bo; 190 190 }