From 002120b4c101f9cfe271f4f69b5df8e952dd1a7e Mon Sep 17 00:00:00 2001 From: Chaoyi Chen Date: Mon, 25 Mar 2024 16:28:27 +0800 Subject: [PATCH] drm/rockchip: Add common interface for rockchip_drm_is_afbc/rfbc rockchip_drm_is_abfc() / rockchip_drm_is_rfbc() is used to determine if the frame buffer is in afbc or rfbc format. The same code can be shared between different rockchip vop architectures. Signed-off-by: Chaoyi Chen Change-Id: I7c409a09044aa54e0690eed29551a6b3416fb10c --- drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 37 ++++++++++++++++++++ drivers/gpu/drm/rockchip/rockchip_drm_drv.h | 2 ++ drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 11 +----- drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 28 ++------------- 4 files changed, 42 insertions(+), 36 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c index ba3616c4dfd0..145a7c0aad29 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -98,6 +99,42 @@ void rockchip_drm_dbg(const struct device *dev, enum rockchip_drm_debug_category va_end(args); } +bool rockchip_drm_is_afbc(struct drm_plane *plane, u64 modifier) +{ + int i; + + if (modifier == DRM_FORMAT_MOD_LINEAR) + return false; + + if (!drm_is_afbc(modifier)) + return false; + + for (i = 0 ; i < plane->modifier_count; i++) + if (plane->modifiers[i] == modifier) + break; + + return (i < plane->modifier_count) ? true : false; +} +EXPORT_SYMBOL(rockchip_drm_is_afbc); + +bool rockchip_drm_is_rfbc(struct drm_plane *plane, u64 modifier) +{ + int i; + + if (modifier == DRM_FORMAT_MOD_LINEAR) + return false; + + if (!IS_ROCKCHIP_RFBC_MOD(modifier)) + return false; + + for (i = 0 ; i < plane->modifier_count; i++) + if (plane->modifiers[i] == modifier) + break; + + return (i < plane->modifier_count) ? true : false; +} +EXPORT_SYMBOL(rockchip_drm_is_rfbc); + /** * rockchip_drm_wait_vact_end * @crtc: CRTC to enable line flag diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h index 9484f76616a0..923f48863005 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h @@ -633,6 +633,8 @@ int rockchip_drm_parse_colorimetry_data_block(u8 *colorimetry, const struct edid struct dma_buf *rockchip_drm_gem_prime_export(struct drm_gem_object *obj, int flags); long rockchip_drm_dclk_round_rate(u32 version, struct clk *dclk, unsigned long rate); int rockchip_drm_dclk_set_rate(u32 version, struct clk *dclk, unsigned long rate); +bool rockchip_drm_is_afbc(struct drm_plane *plane, u64 modifier); +bool rockchip_drm_is_rfbc(struct drm_plane *plane, u64 modifier); __printf(3, 4) void rockchip_drm_dbg(const struct device *dev, enum rockchip_drm_debug_category category, diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index 148ae098d82e..16441a33ca18 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -795,16 +795,7 @@ static bool is_alpha_support(uint32_t format) static inline bool rockchip_afbc(struct drm_plane *plane, u64 modifier) { - int i; - - if (modifier == DRM_FORMAT_MOD_LINEAR) - return false; - - for (i = 0 ; i < plane->modifier_count; i++) - if (plane->modifiers[i] == modifier) - break; - - return (i < plane->modifier_count) ? true : false; + return rockchip_drm_is_afbc(plane, modifier); } static uint16_t scl_vop_cal_scale(enum scale_mode mode, uint32_t src, diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index a908265803ff..06b4d809852f 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -2386,19 +2386,7 @@ static bool is_alpha_support(uint32_t format) static inline bool rockchip_afbc(struct drm_plane *plane, u64 modifier) { - int i; - - if (modifier == DRM_FORMAT_MOD_LINEAR) - return false; - - if (!drm_is_afbc(modifier)) - return false; - - for (i = 0 ; i < plane->modifier_count; i++) - if (plane->modifiers[i] == modifier) - break; - - return (i < plane->modifier_count) ? true : false; + return rockchip_drm_is_afbc(plane, modifier); } static inline bool rockchip_tiled(struct drm_plane *plane, u64 modifier) @@ -2420,19 +2408,7 @@ static inline bool rockchip_tiled(struct drm_plane *plane, u64 modifier) static inline bool rockchip_rfbc(struct drm_plane *plane, u64 modifier) { - int i; - - if (modifier == DRM_FORMAT_MOD_LINEAR) - return false; - - if (!IS_ROCKCHIP_RFBC_MOD(modifier)) - return false; - - for (i = 0 ; i < plane->modifier_count; i++) - if (plane->modifiers[i] == modifier) - break; - - return (i < plane->modifier_count) ? true : false; + return rockchip_drm_is_rfbc(plane, modifier); } static bool rockchip_vop2_mod_supported(struct drm_plane *plane, u32 format, u64 modifier)