From: Ville Syrjälä <ville.syrj...@linux.intel.com>

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.ru...@broadcom.com>
Cc: Broadcom internal kernel review list <bcm-kernel-feedback-l...@broadcom.com>
Signed-off-by: Ville Syrjälä <ville.syrj...@linux.intel.com>
---
 drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 14 +++++++++-----
 drivers/gpu/drm/vmwgfx/vmwgfx_kms.h |  1 +
 2 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c 
b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
index 35965e29e408..54ea1b513950 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
@@ -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;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h 
b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
index 511e29cdb987..445471fe9be6 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
@@ -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);
-- 
2.49.0

Reply via email to