drm/gem/afbc: Eliminate redundant drm_get_format_info()

Pass along the format info from .fb_create() to aliminate the
redundant drm_get_format_info() calls from the afbc code.

Cc: Sandy Huang <hjc@rock-chips.com>
Cc: "Heiko Stübner" <heiko@sntech.de>
Cc: Andy Yan <andy.yan@rock-chips.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-9-ville.syrjala@linux.intel.com
pull/1309/head
Ville Syrjälä 2025-07-01 12:07:11 +03:00
parent 04a5889cf7
commit 283da9e3a9
3 changed files with 8 additions and 13 deletions

View File

@ -500,13 +500,9 @@ EXPORT_SYMBOL(drm_gem_fb_end_cpu_access);
// TODO Drop this function and replace by drm_format_info_bpp() once all // TODO Drop this function and replace by drm_format_info_bpp() once all
// DRM_FORMAT_* provide proper block info in drivers/gpu/drm/drm_fourcc.c // DRM_FORMAT_* provide proper block info in drivers/gpu/drm/drm_fourcc.c
static __u32 drm_gem_afbc_get_bpp(struct drm_device *dev, static __u32 drm_gem_afbc_get_bpp(struct drm_device *dev,
const struct drm_format_info *info,
const struct drm_mode_fb_cmd2 *mode_cmd) const struct drm_mode_fb_cmd2 *mode_cmd)
{ {
const struct drm_format_info *info;
info = drm_get_format_info(dev, mode_cmd->pixel_format,
mode_cmd->modifier[0]);
switch (info->format) { switch (info->format) {
case DRM_FORMAT_YUV420_8BIT: case DRM_FORMAT_YUV420_8BIT:
return 12; return 12;
@ -520,6 +516,7 @@ static __u32 drm_gem_afbc_get_bpp(struct drm_device *dev,
} }
static int drm_gem_afbc_min_size(struct drm_device *dev, static int drm_gem_afbc_min_size(struct drm_device *dev,
const struct drm_format_info *info,
const struct drm_mode_fb_cmd2 *mode_cmd, const struct drm_mode_fb_cmd2 *mode_cmd,
struct drm_afbc_framebuffer *afbc_fb) struct drm_afbc_framebuffer *afbc_fb)
{ {
@ -560,7 +557,7 @@ static int drm_gem_afbc_min_size(struct drm_device *dev,
afbc_fb->aligned_height = ALIGN(mode_cmd->height, h_alignment); afbc_fb->aligned_height = ALIGN(mode_cmd->height, h_alignment);
afbc_fb->offset = mode_cmd->offsets[0]; afbc_fb->offset = mode_cmd->offsets[0];
bpp = drm_gem_afbc_get_bpp(dev, mode_cmd); bpp = drm_gem_afbc_get_bpp(dev, info, mode_cmd);
if (!bpp) { if (!bpp) {
drm_dbg_kms(dev, "Invalid AFBC bpp value: %d\n", bpp); drm_dbg_kms(dev, "Invalid AFBC bpp value: %d\n", bpp);
return -EINVAL; return -EINVAL;
@ -582,6 +579,7 @@ static int drm_gem_afbc_min_size(struct drm_device *dev,
* *
* @dev: DRM device * @dev: DRM device
* @afbc_fb: afbc-specific framebuffer * @afbc_fb: afbc-specific framebuffer
* @info: pixel format information
* @mode_cmd: Metadata from the userspace framebuffer creation request * @mode_cmd: Metadata from the userspace framebuffer creation request
* @afbc_fb: afbc framebuffer * @afbc_fb: afbc framebuffer
* *
@ -595,20 +593,16 @@ static int drm_gem_afbc_min_size(struct drm_device *dev,
* Zero on success or a negative error value on failure. * Zero on success or a negative error value on failure.
*/ */
int drm_gem_fb_afbc_init(struct drm_device *dev, int drm_gem_fb_afbc_init(struct drm_device *dev,
const struct drm_format_info *info,
const struct drm_mode_fb_cmd2 *mode_cmd, const struct drm_mode_fb_cmd2 *mode_cmd,
struct drm_afbc_framebuffer *afbc_fb) struct drm_afbc_framebuffer *afbc_fb)
{ {
const struct drm_format_info *info;
struct drm_gem_object **objs; struct drm_gem_object **objs;
int ret; int ret;
objs = afbc_fb->base.obj; objs = afbc_fb->base.obj;
info = drm_get_format_info(dev, mode_cmd->pixel_format,
mode_cmd->modifier[0]);
if (!info)
return -EINVAL;
ret = drm_gem_afbc_min_size(dev, mode_cmd, afbc_fb); ret = drm_gem_afbc_min_size(dev, info, mode_cmd, afbc_fb);
if (ret < 0) if (ret < 0)
return ret; return ret;

View File

@ -49,7 +49,7 @@ rockchip_fb_create(struct drm_device *dev, struct drm_file *file,
} }
if (drm_is_afbc(mode_cmd->modifier[0])) { if (drm_is_afbc(mode_cmd->modifier[0])) {
ret = drm_gem_fb_afbc_init(dev, mode_cmd, afbc_fb); ret = drm_gem_fb_afbc_init(dev, info, mode_cmd, afbc_fb);
if (ret) { if (ret) {
drm_framebuffer_put(&afbc_fb->base); drm_framebuffer_put(&afbc_fb->base);
return ERR_PTR(ret); return ERR_PTR(ret);

View File

@ -52,6 +52,7 @@ void drm_gem_fb_end_cpu_access(struct drm_framebuffer *fb, enum dma_data_directi
(((modifier) & AFBC_VENDOR_AND_TYPE_MASK) == DRM_FORMAT_MOD_ARM_AFBC(0)) (((modifier) & AFBC_VENDOR_AND_TYPE_MASK) == DRM_FORMAT_MOD_ARM_AFBC(0))
int drm_gem_fb_afbc_init(struct drm_device *dev, int drm_gem_fb_afbc_init(struct drm_device *dev,
const struct drm_format_info *info,
const struct drm_mode_fb_cmd2 *mode_cmd, const struct drm_mode_fb_cmd2 *mode_cmd,
struct drm_afbc_framebuffer *afbc_fb); struct drm_afbc_framebuffer *afbc_fb);