mirror of
https://github.com/torvalds/linux.git
synced 2026-06-04 20:46:48 +02:00
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 <airlied@redhat.com> Cc: Gerd Hoffmann <kraxel@redhat.com> Cc: Sandy Huang <hjc@rock-chips.com> Cc: "Heiko Stübner" <heiko@sntech.de> Cc: Andy Yan <andy.yan@rock-chips.com> Cc: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com> Cc: virtualization@lists.linux.dev Cc: spice-devel@lists.freedesktop.org Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20250701090722.13645-8-ville.syrjala@linux.intel.com
This commit is contained in:
parent
e3c5074b1f
commit
04a5889cf7
|
|
@ -68,6 +68,7 @@ EXPORT_SYMBOL_GPL(drm_gem_fb_get_obj);
|
|||
static int
|
||||
drm_gem_fb_init(struct drm_device *dev,
|
||||
struct drm_framebuffer *fb,
|
||||
const struct drm_format_info *info,
|
||||
const struct drm_mode_fb_cmd2 *mode_cmd,
|
||||
struct drm_gem_object **obj, unsigned int num_planes,
|
||||
const struct drm_framebuffer_funcs *funcs)
|
||||
|
|
@ -75,7 +76,7 @@ drm_gem_fb_init(struct drm_device *dev,
|
|||
unsigned int i;
|
||||
int ret;
|
||||
|
||||
drm_helper_mode_fill_fb_struct(dev, fb, NULL, mode_cmd);
|
||||
drm_helper_mode_fill_fb_struct(dev, fb, info, mode_cmd);
|
||||
|
||||
for (i = 0; i < num_planes; i++)
|
||||
fb->obj[i] = obj[i];
|
||||
|
|
@ -136,6 +137,7 @@ EXPORT_SYMBOL(drm_gem_fb_create_handle);
|
|||
* @dev: DRM device
|
||||
* @fb: framebuffer object
|
||||
* @file: DRM file that holds the GEM handle(s) backing the framebuffer
|
||||
* @info: pixel format information
|
||||
* @mode_cmd: Metadata from the userspace framebuffer creation request
|
||||
* @funcs: vtable to be used for the new framebuffer object
|
||||
*
|
||||
|
|
@ -152,21 +154,14 @@ EXPORT_SYMBOL(drm_gem_fb_create_handle);
|
|||
int drm_gem_fb_init_with_funcs(struct drm_device *dev,
|
||||
struct drm_framebuffer *fb,
|
||||
struct drm_file *file,
|
||||
const struct drm_format_info *info,
|
||||
const struct drm_mode_fb_cmd2 *mode_cmd,
|
||||
const struct drm_framebuffer_funcs *funcs)
|
||||
{
|
||||
const struct drm_format_info *info;
|
||||
struct drm_gem_object *objs[DRM_FORMAT_MAX_PLANES];
|
||||
unsigned int i;
|
||||
int ret;
|
||||
|
||||
info = drm_get_format_info(dev, mode_cmd->pixel_format,
|
||||
mode_cmd->modifier[0]);
|
||||
if (!info) {
|
||||
drm_dbg_kms(dev, "Failed to get FB format info\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (drm_drv_uses_atomic_modeset(dev) &&
|
||||
!drm_any_plane_has_format(dev, mode_cmd->pixel_format,
|
||||
mode_cmd->modifier[0])) {
|
||||
|
|
@ -201,7 +196,7 @@ int drm_gem_fb_init_with_funcs(struct drm_device *dev,
|
|||
}
|
||||
}
|
||||
|
||||
ret = drm_gem_fb_init(dev, fb, mode_cmd, objs, i, funcs);
|
||||
ret = drm_gem_fb_init(dev, fb, info, mode_cmd, objs, i, funcs);
|
||||
if (ret)
|
||||
goto err_gem_object_put;
|
||||
|
||||
|
|
@ -222,6 +217,7 @@ EXPORT_SYMBOL_GPL(drm_gem_fb_init_with_funcs);
|
|||
* callback
|
||||
* @dev: DRM device
|
||||
* @file: DRM file that holds the GEM handle(s) backing the framebuffer
|
||||
* @info: pixel format information
|
||||
* @mode_cmd: Metadata from the userspace framebuffer creation request
|
||||
* @funcs: vtable to be used for the new framebuffer object
|
||||
*
|
||||
|
|
@ -234,6 +230,7 @@ EXPORT_SYMBOL_GPL(drm_gem_fb_init_with_funcs);
|
|||
*/
|
||||
struct drm_framebuffer *
|
||||
drm_gem_fb_create_with_funcs(struct drm_device *dev, struct drm_file *file,
|
||||
const struct drm_format_info *info,
|
||||
const struct drm_mode_fb_cmd2 *mode_cmd,
|
||||
const struct drm_framebuffer_funcs *funcs)
|
||||
{
|
||||
|
|
@ -244,7 +241,7 @@ drm_gem_fb_create_with_funcs(struct drm_device *dev, struct drm_file *file,
|
|||
if (!fb)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
ret = drm_gem_fb_init_with_funcs(dev, fb, file, mode_cmd, funcs);
|
||||
ret = drm_gem_fb_init_with_funcs(dev, fb, file, info, mode_cmd, funcs);
|
||||
if (ret) {
|
||||
kfree(fb);
|
||||
return ERR_PTR(ret);
|
||||
|
|
@ -287,7 +284,7 @@ drm_gem_fb_create(struct drm_device *dev, struct drm_file *file,
|
|||
const struct drm_format_info *info,
|
||||
const struct drm_mode_fb_cmd2 *mode_cmd)
|
||||
{
|
||||
return drm_gem_fb_create_with_funcs(dev, file, mode_cmd,
|
||||
return drm_gem_fb_create_with_funcs(dev, file, info, mode_cmd,
|
||||
&drm_gem_fb_funcs);
|
||||
}
|
||||
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,
|
|||
const struct drm_format_info *info,
|
||||
const struct drm_mode_fb_cmd2 *mode_cmd)
|
||||
{
|
||||
return drm_gem_fb_create_with_funcs(dev, file, mode_cmd,
|
||||
return drm_gem_fb_create_with_funcs(dev, file, info, mode_cmd,
|
||||
&drm_gem_fb_funcs_dirtyfb);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(drm_gem_fb_create_with_dirty);
|
||||
|
|
|
|||
|
|
@ -1179,7 +1179,7 @@ qxl_user_framebuffer_create(struct drm_device *dev,
|
|||
const struct drm_format_info *info,
|
||||
const struct drm_mode_fb_cmd2 *mode_cmd)
|
||||
{
|
||||
return drm_gem_fb_create_with_funcs(dev, file_priv, mode_cmd,
|
||||
return drm_gem_fb_create_with_funcs(dev, file_priv, info, mode_cmd,
|
||||
&qxl_fb_funcs);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -40,7 +40,8 @@ rockchip_fb_create(struct drm_device *dev, struct drm_file *file,
|
|||
if (!afbc_fb)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
ret = drm_gem_fb_init_with_funcs(dev, &afbc_fb->base, file, mode_cmd,
|
||||
ret = drm_gem_fb_init_with_funcs(dev, &afbc_fb->base,
|
||||
file, info, mode_cmd,
|
||||
&rockchip_drm_fb_funcs);
|
||||
if (ret) {
|
||||
kfree(afbc_fb);
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ fb_create(struct drm_device *dev, struct drm_file *filp,
|
|||
struct drm_gem_object *gem_obj;
|
||||
int ret;
|
||||
|
||||
fb = drm_gem_fb_create_with_funcs(dev, filp, mode_cmd, &fb_funcs);
|
||||
fb = drm_gem_fb_create_with_funcs(dev, filp, info, mode_cmd, &fb_funcs);
|
||||
if (IS_ERR(fb))
|
||||
return fb;
|
||||
|
||||
|
|
|
|||
|
|
@ -25,10 +25,12 @@ int drm_gem_fb_create_handle(struct drm_framebuffer *fb, struct drm_file *file,
|
|||
int drm_gem_fb_init_with_funcs(struct drm_device *dev,
|
||||
struct drm_framebuffer *fb,
|
||||
struct drm_file *file,
|
||||
const struct drm_format_info *info,
|
||||
const struct drm_mode_fb_cmd2 *mode_cmd,
|
||||
const struct drm_framebuffer_funcs *funcs);
|
||||
struct drm_framebuffer *
|
||||
drm_gem_fb_create_with_funcs(struct drm_device *dev, struct drm_file *file,
|
||||
const struct drm_format_info *info,
|
||||
const struct drm_mode_fb_cmd2 *mode_cmd,
|
||||
const struct drm_framebuffer_funcs *funcs);
|
||||
struct drm_framebuffer *
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user