[PATCH v1] media: platform: mtk-mdp3: Fix mdp hyfbc get plane size

roy-cw.yeh roy-cw.yeh at mediatek.com
Mon Nov 8 23:13:07 PST 2021


From: "Roy-CW.Yeh" <roy-cw.yeh at mediatek.com>

mdp_fmt_get_hyfbc_plane_size should return size depends on different plane
rather than one same size (buffer size)

Signed-off-by: Roy-CW.Yeh <roy-cw.yeh at mediatek.com>
---
 drivers/media/platform/mtk-mdp3/mtk-mdp3-regs.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/drivers/media/platform/mtk-mdp3/mtk-mdp3-regs.c b/drivers/media/platform/mtk-mdp3/mtk-mdp3-regs.c
index ac5d0f06f39e..aabc1c2a9166 100644
--- a/drivers/media/platform/mtk-mdp3/mtk-mdp3-regs.c
+++ b/drivers/media/platform/mtk-mdp3/mtk-mdp3-regs.c
@@ -151,7 +151,8 @@ int mdp_enum_fmt_mplane(struct mdp_dev *mdp, struct v4l2_fmtdesc *f)
 	return 0;
 }
 
-static u32 mdp_fmt_get_hyfbc_plane_size(u32 width, u32 height, u32 color)
+static u32 mdp_fmt_get_hyfbc_plane_size(u32 width,
+					u32 height, u32 color, unsigned int plane)
 {
 	u32 y_data_size = 0;
 	u32 c_data_size = 0;
@@ -176,7 +177,10 @@ static u32 mdp_fmt_get_hyfbc_plane_size(u32 width, u32 height, u32 color)
 	c_data_ofst = ((y_data_ofst + y_data_size + c_header_size + 4095) >> 12) << 12; // align 4k
 	c_header_ofst = c_data_ofst - c_header_size;
 
-	return (c_data_ofst + c_data_size);
+	if (plane == 0)
+		return c_header_ofst;
+	else
+		return (c_data_ofst + c_data_size);
 }
 
 static u32 mdp_fmt_get_afbc_plane_size(u32 width, u32 height, u32 color)
@@ -256,7 +260,7 @@ const struct mdp_format *mdp_try_fmt_mplane(struct mdp_dev *mdp,
 
 		if (MDP_COLOR_IS_HYFBC_COMPRESS(fmt->mdp_color)) {
 			si = mdp_fmt_get_hyfbc_plane_size(pix_mp->width,
-							  pix_mp->height, fmt->mdp_color);
+							  pix_mp->height, fmt->mdp_color, i);
 		} else if (MDP_COLOR_IS_COMPRESS(fmt->mdp_color)) {
 			si = mdp_fmt_get_afbc_plane_size(pix_mp->width,
 							 pix_mp->height, fmt->mdp_color);
@@ -529,7 +533,7 @@ static void mdp_prepare_buffer(struct img_image_buffer *b,
 			b->format.plane_fmt[i].size =
 				mdp_fmt_get_hyfbc_plane_size(pix_mp->width,
 							     pix_mp->height,
-							     b->format.colorformat);
+							     b->format.colorformat, i);
 		} else if (MDP_COLOR_IS_COMPRESS(b->format.colorformat)) {
 			b->format.plane_fmt[i].size =
 				mdp_fmt_get_afbc_plane_size(pix_mp->width,
@@ -562,7 +566,7 @@ static void mdp_prepare_buffer(struct img_image_buffer *b,
 			b->format.plane_fmt[i].size =
 				mdp_fmt_get_hyfbc_plane_size(pix_mp->width,
 							     pix_mp->height,
-							     b->format.colorformat);
+							     b->format.colorformat, i);
 		} else if (MDP_COLOR_IS_COMPRESS(b->format.colorformat)) {
 			b->format.plane_fmt[i].size =
 				mdp_fmt_get_afbc_plane_size(pix_mp->width,
-- 
2.18.0




More information about the linux-arm-kernel mailing list