]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/vmwgfx: Pass along the format info from .fb_create() to drm_helper_mode_fill_fb_s...
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Tue, 1 Jul 2025 09:07:21 +0000 (12:07 +0300)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Wed, 16 Jul 2025 17:12:09 +0000 (20:12 +0300)
Plumb the format info from .fb_create() all the way to
drm_helper_mode_fill_fb_struct() to avoid the redundant
lookup.

Cc: Zack Rusin <zack.rusin@broadcom.com>
Cc: Broadcom internal kernel review list <bcm-kernel-feedback-list@broadcom.com>
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250701090722.13645-19-ville.syrjala@linux.intel.com
drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
drivers/gpu/drm/vmwgfx/vmwgfx_kms.h

index 35965e29e40806e02af4c1e9754341fcd1a62d19..54ea1b513950a80f07f11704347c6b3ffae0e623 100644 (file)
@@ -500,6 +500,7 @@ static const struct drm_framebuffer_funcs vmw_framebuffer_surface_funcs = {
 static int vmw_kms_new_framebuffer_surface(struct vmw_private *dev_priv,
                                           struct vmw_user_object *uo,
                                           struct vmw_framebuffer **out,
+                                          const struct drm_format_info *info,
                                           const struct drm_mode_fb_cmd2
                                           *mode_cmd)
 
@@ -548,7 +549,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, NULL, mode_cmd);
+       drm_helper_mode_fill_fb_struct(dev, &vfbs->base.base, info, mode_cmd);
        memcpy(&vfbs->uo, uo, sizeof(vfbs->uo));
        vmw_user_object_ref(&vfbs->uo);
 
@@ -602,6 +603,7 @@ static const struct drm_framebuffer_funcs vmw_framebuffer_bo_funcs = {
 static int vmw_kms_new_framebuffer_bo(struct vmw_private *dev_priv,
                                      struct vmw_bo *bo,
                                      struct vmw_framebuffer **out,
+                                     const struct drm_format_info *info,
                                      const struct drm_mode_fb_cmd2
                                      *mode_cmd)
 
@@ -634,7 +636,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, NULL, mode_cmd);
+       drm_helper_mode_fill_fb_struct(dev, &vfbd->base.base, info, mode_cmd);
        vfbd->base.bo = true;
        vfbd->buffer = vmw_bo_reference(bo);
        *out = &vfbd->base;
@@ -679,11 +681,13 @@ vmw_kms_srf_ok(struct vmw_private *dev_priv, uint32_t width, uint32_t height)
  * @dev_priv: Pointer to device private struct.
  * @uo: Pointer to user object to wrap the kms framebuffer around.
  * Either the buffer or surface inside the user object must be NULL.
+ * @info: pixel format information.
  * @mode_cmd: Frame-buffer metadata.
  */
 struct vmw_framebuffer *
 vmw_kms_new_framebuffer(struct vmw_private *dev_priv,
                        struct vmw_user_object *uo,
+                       const struct drm_format_info *info,
                        const struct drm_mode_fb_cmd2 *mode_cmd)
 {
        struct vmw_framebuffer *vfb = NULL;
@@ -692,10 +696,10 @@ vmw_kms_new_framebuffer(struct vmw_private *dev_priv,
        /* Create the new framebuffer depending one what we have */
        if (vmw_user_object_surface(uo)) {
                ret = vmw_kms_new_framebuffer_surface(dev_priv, uo, &vfb,
-                                                     mode_cmd);
+                                                     info, mode_cmd);
        } else if (uo->buffer) {
                ret = vmw_kms_new_framebuffer_bo(dev_priv, uo->buffer, &vfb,
-                                                mode_cmd);
+                                                info, mode_cmd);
        } else {
                BUG();
        }
@@ -742,7 +746,7 @@ static struct drm_framebuffer *vmw_kms_fb_create(struct drm_device *dev,
        }
 
 
-       vfb = vmw_kms_new_framebuffer(dev_priv, &uo, mode_cmd);
+       vfb = vmw_kms_new_framebuffer(dev_priv, &uo, info, mode_cmd);
        if (IS_ERR(vfb)) {
                ret = PTR_ERR(vfb);
                goto err_out;
index 511e29cdb98731e23dbf5ff283908139827747e8..445471fe9be6eecbce76591f4f1cf931c1e6d944 100644 (file)
@@ -399,6 +399,7 @@ int vmw_kms_readback(struct vmw_private *dev_priv,
 struct vmw_framebuffer *
 vmw_kms_new_framebuffer(struct vmw_private *dev_priv,
                        struct vmw_user_object *uo,
+                       const struct drm_format_info *info,
                        const struct drm_mode_fb_cmd2 *mode_cmd);
 void vmw_guess_mode_timing(struct drm_display_mode *mode);
 void vmw_kms_update_implicit_fb(struct vmw_private *dev_priv);