Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

+8 -13
+6 -12
drivers/gpu/drm/drm_gem_framebuffer_helper.c
··· 500 500 // TODO Drop this function and replace by drm_format_info_bpp() once all 501 501 // DRM_FORMAT_* provide proper block info in drivers/gpu/drm/drm_fourcc.c 502 502 static __u32 drm_gem_afbc_get_bpp(struct drm_device *dev, 503 + const struct drm_format_info *info, 503 504 const struct drm_mode_fb_cmd2 *mode_cmd) 504 505 { 505 - const struct drm_format_info *info; 506 - 507 - info = drm_get_format_info(dev, mode_cmd->pixel_format, 508 - mode_cmd->modifier[0]); 509 - 510 506 switch (info->format) { 511 507 case DRM_FORMAT_YUV420_8BIT: 512 508 return 12; ··· 516 520 } 517 521 518 522 static int drm_gem_afbc_min_size(struct drm_device *dev, 523 + const struct drm_format_info *info, 519 524 const struct drm_mode_fb_cmd2 *mode_cmd, 520 525 struct drm_afbc_framebuffer *afbc_fb) 521 526 { ··· 557 560 afbc_fb->aligned_height = ALIGN(mode_cmd->height, h_alignment); 558 561 afbc_fb->offset = mode_cmd->offsets[0]; 559 562 560 - bpp = drm_gem_afbc_get_bpp(dev, mode_cmd); 563 + bpp = drm_gem_afbc_get_bpp(dev, info, mode_cmd); 561 564 if (!bpp) { 562 565 drm_dbg_kms(dev, "Invalid AFBC bpp value: %d\n", bpp); 563 566 return -EINVAL; ··· 579 582 * 580 583 * @dev: DRM device 581 584 * @afbc_fb: afbc-specific framebuffer 585 + * @info: pixel format information 582 586 * @mode_cmd: Metadata from the userspace framebuffer creation request 583 587 * @afbc_fb: afbc framebuffer 584 588 * ··· 593 595 * Zero on success or a negative error value on failure. 594 596 */ 595 597 int drm_gem_fb_afbc_init(struct drm_device *dev, 598 + const struct drm_format_info *info, 596 599 const struct drm_mode_fb_cmd2 *mode_cmd, 597 600 struct drm_afbc_framebuffer *afbc_fb) 598 601 { 599 - const struct drm_format_info *info; 600 602 struct drm_gem_object **objs; 601 603 int ret; 602 604 603 605 objs = afbc_fb->base.obj; 604 - info = drm_get_format_info(dev, mode_cmd->pixel_format, 605 - mode_cmd->modifier[0]); 606 - if (!info) 607 - return -EINVAL; 608 606 609 - ret = drm_gem_afbc_min_size(dev, mode_cmd, afbc_fb); 607 + ret = drm_gem_afbc_min_size(dev, info, mode_cmd, afbc_fb); 610 608 if (ret < 0) 611 609 return ret; 612 610
+1 -1
drivers/gpu/drm/rockchip/rockchip_drm_fb.c
··· 49 49 } 50 50 51 51 if (drm_is_afbc(mode_cmd->modifier[0])) { 52 - ret = drm_gem_fb_afbc_init(dev, mode_cmd, afbc_fb); 52 + ret = drm_gem_fb_afbc_init(dev, info, mode_cmd, afbc_fb); 53 53 if (ret) { 54 54 drm_framebuffer_put(&afbc_fb->base); 55 55 return ERR_PTR(ret);
+1
include/drm/drm_gem_framebuffer_helper.h
··· 52 52 (((modifier) & AFBC_VENDOR_AND_TYPE_MASK) == DRM_FORMAT_MOD_ARM_AFBC(0)) 53 53 54 54 int drm_gem_fb_afbc_init(struct drm_device *dev, 55 + const struct drm_format_info *info, 55 56 const struct drm_mode_fb_cmd2 *mode_cmd, 56 57 struct drm_afbc_framebuffer *afbc_fb); 57 58