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
This commit is contained in:
parent
81112eaac5
commit
a34cc7bf10
|
@ -1202,7 +1202,7 @@ static int amdgpu_display_gem_fb_verify_and_init(struct drm_device *dev,
|
|||
int ret;
|
||||
|
||||
rfb->base.obj[0] = obj;
|
||||
drm_helper_mode_fill_fb_struct(dev, &rfb->base, mode_cmd);
|
||||
drm_helper_mode_fill_fb_struct(dev, &rfb->base, NULL, mode_cmd);
|
||||
/* Verify that the modifier is supported. */
|
||||
if (!drm_any_plane_has_format(dev, mode_cmd->pixel_format,
|
||||
mode_cmd->modifier[0])) {
|
||||
|
|
|
@ -178,7 +178,7 @@ komeda_fb_create(struct drm_device *dev, struct drm_file *file,
|
|||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
drm_helper_mode_fill_fb_struct(dev, &kfb->base, mode_cmd);
|
||||
drm_helper_mode_fill_fb_struct(dev, &kfb->base, NULL, mode_cmd);
|
||||
|
||||
if (kfb->base.modifier)
|
||||
ret = komeda_fb_afbc_size_check(kfb, file, mode_cmd);
|
||||
|
|
|
@ -64,7 +64,7 @@ struct armada_framebuffer *armada_framebuffer_create(struct drm_device *dev,
|
|||
dfb->mod = config;
|
||||
dfb->fb.obj[0] = &obj->obj;
|
||||
|
||||
drm_helper_mode_fill_fb_struct(dev, &dfb->fb, mode);
|
||||
drm_helper_mode_fill_fb_struct(dev, &dfb->fb, NULL, mode);
|
||||
|
||||
ret = drm_framebuffer_init(dev, &dfb->fb, &armada_fb_funcs);
|
||||
if (ret) {
|
||||
|
|
|
@ -75,7 +75,7 @@ drm_gem_fb_init(struct drm_device *dev,
|
|||
unsigned int i;
|
||||
int ret;
|
||||
|
||||
drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd);
|
||||
drm_helper_mode_fill_fb_struct(dev, fb, NULL, mode_cmd);
|
||||
|
||||
for (i = 0; i < num_planes; i++)
|
||||
fb->obj[i] = obj[i];
|
||||
|
|
|
@ -74,6 +74,7 @@ EXPORT_SYMBOL(drm_helper_move_panel_connectors_to_head);
|
|||
* drm_helper_mode_fill_fb_struct - fill out framebuffer metadata
|
||||
* @dev: DRM device
|
||||
* @fb: drm_framebuffer object to fill out
|
||||
* @info: pixel format information
|
||||
* @mode_cmd: metadata from the userspace fb creation request
|
||||
*
|
||||
* This helper can be used in a drivers fb_create callback to pre-fill the fb's
|
||||
|
@ -81,13 +82,14 @@ EXPORT_SYMBOL(drm_helper_move_panel_connectors_to_head);
|
|||
*/
|
||||
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)
|
||||
{
|
||||
int i;
|
||||
|
||||
fb->dev = dev;
|
||||
fb->format = drm_get_format_info(dev, mode_cmd->pixel_format,
|
||||
mode_cmd->modifier[0]);
|
||||
fb->format = info ? : drm_get_format_info(dev, mode_cmd->pixel_format,
|
||||
mode_cmd->modifier[0]);
|
||||
fb->width = mode_cmd->width;
|
||||
fb->height = mode_cmd->height;
|
||||
for (i = 0; i < 4; i++) {
|
||||
|
|
|
@ -76,7 +76,7 @@ exynos_drm_framebuffer_init(struct drm_device *dev,
|
|||
fb->obj[i] = &exynos_gem[i]->base;
|
||||
}
|
||||
|
||||
drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd);
|
||||
drm_helper_mode_fill_fb_struct(dev, fb, NULL, mode_cmd);
|
||||
|
||||
ret = drm_framebuffer_init(dev, fb, &exynos_drm_fb_funcs);
|
||||
if (ret < 0) {
|
||||
|
|
|
@ -47,7 +47,7 @@ static int psb_framebuffer_init(struct drm_device *dev,
|
|||
if (mode_cmd->pitches[0] & 63)
|
||||
return -EINVAL;
|
||||
|
||||
drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd);
|
||||
drm_helper_mode_fill_fb_struct(dev, fb, NULL, mode_cmd);
|
||||
fb->obj[0] = obj;
|
||||
ret = drm_framebuffer_init(dev, fb, &psb_fb_funcs);
|
||||
if (ret) {
|
||||
|
|
|
@ -2254,7 +2254,7 @@ int intel_framebuffer_init(struct intel_framebuffer *intel_fb,
|
|||
goto err_frontbuffer_put;
|
||||
}
|
||||
|
||||
drm_helper_mode_fill_fb_struct(display->drm, fb, mode_cmd);
|
||||
drm_helper_mode_fill_fb_struct(display->drm, fb, NULL, mode_cmd);
|
||||
|
||||
for (i = 0; i < fb->format->num_planes; i++) {
|
||||
unsigned int stride_alignment;
|
||||
|
|
|
@ -227,7 +227,7 @@ static struct drm_framebuffer *msm_framebuffer_init(struct drm_device *dev,
|
|||
msm_fb->base.obj[i] = bos[i];
|
||||
}
|
||||
|
||||
drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd);
|
||||
drm_helper_mode_fill_fb_struct(dev, fb, NULL, mode_cmd);
|
||||
|
||||
ret = drm_framebuffer_init(dev, fb, &msm_framebuffer_funcs);
|
||||
if (ret) {
|
||||
|
|
|
@ -321,7 +321,7 @@ nouveau_framebuffer_new(struct drm_device *dev,
|
|||
if (!(fb = *pfb = kzalloc(sizeof(*fb), GFP_KERNEL)))
|
||||
return -ENOMEM;
|
||||
|
||||
drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd);
|
||||
drm_helper_mode_fill_fb_struct(dev, fb, NULL, mode_cmd);
|
||||
fb->obj[0] = gem;
|
||||
|
||||
ret = drm_framebuffer_init(dev, fb, &nouveau_framebuffer_funcs);
|
||||
|
|
|
@ -440,7 +440,7 @@ struct drm_framebuffer *omap_framebuffer_init(struct drm_device *dev,
|
|||
plane->dma_addr = 0;
|
||||
}
|
||||
|
||||
drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd);
|
||||
drm_helper_mode_fill_fb_struct(dev, fb, NULL, mode_cmd);
|
||||
|
||||
ret = drm_framebuffer_init(dev, fb, &omap_framebuffer_funcs);
|
||||
if (ret) {
|
||||
|
|
|
@ -1302,7 +1302,7 @@ radeon_framebuffer_init(struct drm_device *dev,
|
|||
{
|
||||
int ret;
|
||||
fb->obj[0] = obj;
|
||||
drm_helper_mode_fill_fb_struct(dev, fb, mode_cmd);
|
||||
drm_helper_mode_fill_fb_struct(dev, fb, NULL, mode_cmd);
|
||||
ret = drm_framebuffer_init(dev, fb, &radeon_fb_funcs);
|
||||
if (ret) {
|
||||
fb->obj[0] = NULL;
|
||||
|
|
|
@ -114,7 +114,7 @@ struct drm_framebuffer *tegra_fb_alloc(struct drm_device *drm,
|
|||
if (!fb)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
drm_helper_mode_fill_fb_struct(drm, fb, mode_cmd);
|
||||
drm_helper_mode_fill_fb_struct(drm, fb, NULL, mode_cmd);
|
||||
|
||||
for (i = 0; i < fb->format->num_planes; i++)
|
||||
fb->obj[i] = &planes[i]->gem;
|
||||
|
|
|
@ -73,7 +73,7 @@ virtio_gpu_framebuffer_init(struct drm_device *dev,
|
|||
|
||||
vgfb->base.obj[0] = obj;
|
||||
|
||||
drm_helper_mode_fill_fb_struct(dev, &vgfb->base, mode_cmd);
|
||||
drm_helper_mode_fill_fb_struct(dev, &vgfb->base, NULL, mode_cmd);
|
||||
|
||||
ret = drm_framebuffer_init(dev, &vgfb->base, &virtio_gpu_fb_funcs);
|
||||
if (ret) {
|
||||
|
|
|
@ -548,7 +548,7 @@ static int vmw_kms_new_framebuffer_surface(struct vmw_private *dev_priv,
|
|||
goto out_err1;
|
||||
}
|
||||
|
||||
drm_helper_mode_fill_fb_struct(dev, &vfbs->base.base, mode_cmd);
|
||||
drm_helper_mode_fill_fb_struct(dev, &vfbs->base.base, NULL, mode_cmd);
|
||||
memcpy(&vfbs->uo, uo, sizeof(vfbs->uo));
|
||||
vmw_user_object_ref(&vfbs->uo);
|
||||
|
||||
|
@ -634,7 +634,7 @@ static int vmw_kms_new_framebuffer_bo(struct vmw_private *dev_priv,
|
|||
}
|
||||
|
||||
vfbd->base.base.obj[0] = &bo->tbo.base;
|
||||
drm_helper_mode_fill_fb_struct(dev, &vfbd->base.base, mode_cmd);
|
||||
drm_helper_mode_fill_fb_struct(dev, &vfbd->base.base, NULL, mode_cmd);
|
||||
vfbd->base.bo = true;
|
||||
vfbd->buffer = vmw_bo_reference(bo);
|
||||
*out = &vfbd->base;
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
struct drm_crtc;
|
||||
struct drm_crtc_funcs;
|
||||
struct drm_device;
|
||||
struct drm_format_info;
|
||||
struct drm_framebuffer;
|
||||
struct drm_mode_fb_cmd2;
|
||||
|
||||
|
@ -33,6 +34,7 @@ void drm_helper_move_panel_connectors_to_head(struct drm_device *);
|
|||
|
||||
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);
|
||||
|
||||
int drm_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,
|
||||
|
|
Loading…
Reference in New Issue