From 783ba8db79e4c45aec9372a0b6a6fd3e59fa321b Mon Sep 17 00:00:00 2001 From: Yu Qiaowei Date: Tue, 9 Aug 2022 10:44:59 +0800 Subject: [PATCH] video: rockchip: rga3: Modify YUV10bit of RGA3 to default to compact mode Signed-off-by: Yu Qiaowei Change-Id: I310839f124e4c3e4ef7aa0e81f4cc780893377db --- drivers/video/rockchip/rga3/include/rga.h | 7 +++++- drivers/video/rockchip/rga3/rga3_reg_info.c | 24 ++++++++++++++++++--- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/drivers/video/rockchip/rga3/include/rga.h b/drivers/video/rockchip/rga3/include/rga.h index b40be02c1580..f6be6eafb718 100644 --- a/drivers/video/rockchip/rga3/include/rga.h +++ b/drivers/video/rockchip/rga3/include/rga.h @@ -103,6 +103,11 @@ enum { RGA_TILE_MODE = 0x1 << 2, }; +enum { + RGA_10BIT_COMPACT = 0x0, + RGA_10BIT_INCOMPACT = 0x1, +}; + enum { RGA_CONTEXT_NONE = 0x0, RGA_CONTEXT_SRC_FIX_ENABLE = 0x1 << 0, @@ -496,7 +501,7 @@ struct rga_img_info_t { uint16_t rotate_mode; uint16_t rd_mode; - uint16_t is_10b_compact; + uint16_t compact_mode; uint16_t is_10b_endian; uint16_t enable; diff --git a/drivers/video/rockchip/rga3/rga3_reg_info.c b/drivers/video/rockchip/rga3/rga3_reg_info.c index b0af6228acf4..d432acbdac98 100644 --- a/drivers/video/rockchip/rga3/rga3_reg_info.c +++ b/drivers/video/rockchip/rga3/rga3_reg_info.c @@ -379,7 +379,7 @@ static void RGA3_set_reg_win0_info(u8 *base, struct rga3_req *msg) ((reg & (~m_RGA3_WIN0_RD_CTRL_SW_WIN0_YUV10B_COMPACT)) | (s_RGA3_WIN0_RD_CTRL_SW_WIN0_YUV10B_COMPACT(1))); - /* Only on roster mode, yuv 10bit can change to compact or set endian */ + /* Only on raster mode, yuv 10bit can change to compact or set endian */ if (msg->win0.rd_mode == RGA_RASTER_MODE && yuv10 == 1) { reg = ((reg & (~m_RGA3_WIN0_RD_CTRL_SW_WIN0_YUV10B_COMPACT)) | @@ -1251,7 +1251,16 @@ static void set_win_info(struct rga_win_info_t *win, struct rga_img_info_t *img) else if (img->rd_mode == RGA_TILE_MODE) win->rd_mode = 2; - win->is_10b_compact = img->is_10b_compact; + switch (img->compact_mode) { + case RGA_10BIT_INCOMPACT: + win->is_10b_compact = 0; + break; + case RGA_10BIT_COMPACT: + default: + win->is_10b_compact = 1; + break; + } + win->is_10b_endian = img->is_10b_endian; } @@ -1272,7 +1281,16 @@ static void set_wr_info(struct rga_req *req_rga, struct rga3_req *req) else if (req_rga->dst.rd_mode == RGA_TILE_MODE) req->wr.rd_mode = 2; - req->wr.is_10b_compact = req_rga->dst.is_10b_compact; + switch (req_rga->dst.compact_mode) { + case RGA_10BIT_INCOMPACT: + req->wr.is_10b_compact = 0; + break; + case RGA_10BIT_COMPACT: + default: + req->wr.is_10b_compact = 1; + break; + } + req->wr.is_10b_endian = req_rga->dst.is_10b_endian; }