Skip to content

Commit 04a5889

Browse files
committed
drm/gem: Pass along the format info from .fb_create() to drm_helper_mode_fill_fb_struct()
Pass along the format info from .fb_create() to eliminate the redundant drm_get_format_info() calls from the gem fb code. v2: Fix kernel docs (Laurent) Cc: Dave Airlie <[email protected]> Cc: Gerd Hoffmann <[email protected]> Cc: Sandy Huang <[email protected]> Cc: "Heiko Stübner" <[email protected]> Cc: Andy Yan <[email protected]> Cc: Oleksandr Andrushchenko <[email protected]> Cc: [email protected] Cc: [email protected] Cc: Laurent Pinchart <[email protected]> Reviewed-by: Thomas Zimmermann <[email protected]> Reviewed-by: Laurent Pinchart <[email protected]> Signed-off-by: Ville Syrjälä <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent e3c5074 commit 04a5889

File tree

5 files changed

+16
-16
lines changed

5 files changed

+16
-16
lines changed

drivers/gpu/drm/drm_gem_framebuffer_helper.c

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,15 @@ EXPORT_SYMBOL_GPL(drm_gem_fb_get_obj);
6868
static int
6969
drm_gem_fb_init(struct drm_device *dev,
7070
struct drm_framebuffer *fb,
71+
const struct drm_format_info *info,
7172
const struct drm_mode_fb_cmd2 *mode_cmd,
7273
struct drm_gem_object **obj, unsigned int num_planes,
7374
const struct drm_framebuffer_funcs *funcs)
7475
{
7576
unsigned int i;
7677
int ret;
7778

78-
drm_helper_mode_fill_fb_struct(dev, fb, NULL, mode_cmd);
79+
drm_helper_mode_fill_fb_struct(dev, fb, info, mode_cmd);
7980

8081
for (i = 0; i < num_planes; i++)
8182
fb->obj[i] = obj[i];
@@ -136,6 +137,7 @@ EXPORT_SYMBOL(drm_gem_fb_create_handle);
136137
* @dev: DRM device
137138
* @fb: framebuffer object
138139
* @file: DRM file that holds the GEM handle(s) backing the framebuffer
140+
* @info: pixel format information
139141
* @mode_cmd: Metadata from the userspace framebuffer creation request
140142
* @funcs: vtable to be used for the new framebuffer object
141143
*
@@ -152,21 +154,14 @@ EXPORT_SYMBOL(drm_gem_fb_create_handle);
152154
int drm_gem_fb_init_with_funcs(struct drm_device *dev,
153155
struct drm_framebuffer *fb,
154156
struct drm_file *file,
157+
const struct drm_format_info *info,
155158
const struct drm_mode_fb_cmd2 *mode_cmd,
156159
const struct drm_framebuffer_funcs *funcs)
157160
{
158-
const struct drm_format_info *info;
159161
struct drm_gem_object *objs[DRM_FORMAT_MAX_PLANES];
160162
unsigned int i;
161163
int ret;
162164

163-
info = drm_get_format_info(dev, mode_cmd->pixel_format,
164-
mode_cmd->modifier[0]);
165-
if (!info) {
166-
drm_dbg_kms(dev, "Failed to get FB format info\n");
167-
return -EINVAL;
168-
}
169-
170165
if (drm_drv_uses_atomic_modeset(dev) &&
171166
!drm_any_plane_has_format(dev, mode_cmd->pixel_format,
172167
mode_cmd->modifier[0])) {
@@ -201,7 +196,7 @@ int drm_gem_fb_init_with_funcs(struct drm_device *dev,
201196
}
202197
}
203198

204-
ret = drm_gem_fb_init(dev, fb, mode_cmd, objs, i, funcs);
199+
ret = drm_gem_fb_init(dev, fb, info, mode_cmd, objs, i, funcs);
205200
if (ret)
206201
goto err_gem_object_put;
207202

@@ -222,6 +217,7 @@ EXPORT_SYMBOL_GPL(drm_gem_fb_init_with_funcs);
222217
* callback
223218
* @dev: DRM device
224219
* @file: DRM file that holds the GEM handle(s) backing the framebuffer
220+
* @info: pixel format information
225221
* @mode_cmd: Metadata from the userspace framebuffer creation request
226222
* @funcs: vtable to be used for the new framebuffer object
227223
*
@@ -234,6 +230,7 @@ EXPORT_SYMBOL_GPL(drm_gem_fb_init_with_funcs);
234230
*/
235231
struct drm_framebuffer *
236232
drm_gem_fb_create_with_funcs(struct drm_device *dev, struct drm_file *file,
233+
const struct drm_format_info *info,
237234
const struct drm_mode_fb_cmd2 *mode_cmd,
238235
const struct drm_framebuffer_funcs *funcs)
239236
{
@@ -244,7 +241,7 @@ drm_gem_fb_create_with_funcs(struct drm_device *dev, struct drm_file *file,
244241
if (!fb)
245242
return ERR_PTR(-ENOMEM);
246243

247-
ret = drm_gem_fb_init_with_funcs(dev, fb, file, mode_cmd, funcs);
244+
ret = drm_gem_fb_init_with_funcs(dev, fb, file, info, mode_cmd, funcs);
248245
if (ret) {
249246
kfree(fb);
250247
return ERR_PTR(ret);
@@ -287,7 +284,7 @@ drm_gem_fb_create(struct drm_device *dev, struct drm_file *file,
287284
const struct drm_format_info *info,
288285
const struct drm_mode_fb_cmd2 *mode_cmd)
289286
{
290-
return drm_gem_fb_create_with_funcs(dev, file, mode_cmd,
287+
return drm_gem_fb_create_with_funcs(dev, file, info, mode_cmd,
291288
&drm_gem_fb_funcs);
292289
}
293290
EXPORT_SYMBOL_GPL(drm_gem_fb_create);
@@ -327,7 +324,7 @@ drm_gem_fb_create_with_dirty(struct drm_device *dev, struct drm_file *file,
327324
const struct drm_format_info *info,
328325
const struct drm_mode_fb_cmd2 *mode_cmd)
329326
{
330-
return drm_gem_fb_create_with_funcs(dev, file, mode_cmd,
327+
return drm_gem_fb_create_with_funcs(dev, file, info, mode_cmd,
331328
&drm_gem_fb_funcs_dirtyfb);
332329
}
333330
EXPORT_SYMBOL_GPL(drm_gem_fb_create_with_dirty);

drivers/gpu/drm/qxl/qxl_display.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1179,7 +1179,7 @@ qxl_user_framebuffer_create(struct drm_device *dev,
11791179
const struct drm_format_info *info,
11801180
const struct drm_mode_fb_cmd2 *mode_cmd)
11811181
{
1182-
return drm_gem_fb_create_with_funcs(dev, file_priv, mode_cmd,
1182+
return drm_gem_fb_create_with_funcs(dev, file_priv, info, mode_cmd,
11831183
&qxl_fb_funcs);
11841184
}
11851185

drivers/gpu/drm/rockchip/rockchip_drm_fb.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ rockchip_fb_create(struct drm_device *dev, struct drm_file *file,
4040
if (!afbc_fb)
4141
return ERR_PTR(-ENOMEM);
4242

43-
ret = drm_gem_fb_init_with_funcs(dev, &afbc_fb->base, file, mode_cmd,
43+
ret = drm_gem_fb_init_with_funcs(dev, &afbc_fb->base,
44+
file, info, mode_cmd,
4445
&rockchip_drm_fb_funcs);
4546
if (ret) {
4647
kfree(afbc_fb);

drivers/gpu/drm/xen/xen_drm_front_kms.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ fb_create(struct drm_device *dev, struct drm_file *filp,
6262
struct drm_gem_object *gem_obj;
6363
int ret;
6464

65-
fb = drm_gem_fb_create_with_funcs(dev, filp, mode_cmd, &fb_funcs);
65+
fb = drm_gem_fb_create_with_funcs(dev, filp, info, mode_cmd, &fb_funcs);
6666
if (IS_ERR(fb))
6767
return fb;
6868

include/drm/drm_gem_framebuffer_helper.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,12 @@ int drm_gem_fb_create_handle(struct drm_framebuffer *fb, struct drm_file *file,
2525
int drm_gem_fb_init_with_funcs(struct drm_device *dev,
2626
struct drm_framebuffer *fb,
2727
struct drm_file *file,
28+
const struct drm_format_info *info,
2829
const struct drm_mode_fb_cmd2 *mode_cmd,
2930
const struct drm_framebuffer_funcs *funcs);
3031
struct drm_framebuffer *
3132
drm_gem_fb_create_with_funcs(struct drm_device *dev, struct drm_file *file,
33+
const struct drm_format_info *info,
3234
const struct drm_mode_fb_cmd2 *mode_cmd,
3335
const struct drm_framebuffer_funcs *funcs);
3436
struct drm_framebuffer *

0 commit comments

Comments
 (0)