@@ -266,13 +266,7 @@ static void RGA2_set_reg_src_info(RK_U8 *base, struct rga2_req *msg)
266266 reg = ((reg & (~m_RGA2_SRC_INFO_SW_SW_SRC_RB_SWAP )) | (s_RGA2_SRC_INFO_SW_SW_SRC_RB_SWAP (src0_rb_swp )));
267267 reg = ((reg & (~m_RGA2_SRC_INFO_SW_SW_SRC_ALPHA_SWAP )) | (s_RGA2_SRC_INFO_SW_SW_SRC_ALPHA_SWAP (msg -> alpha_swp )));
268268 reg = ((reg & (~m_RGA2_SRC_INFO_SW_SW_SRC_UV_SWAP )) | (s_RGA2_SRC_INFO_SW_SW_SRC_UV_SWAP (src0_cbcr_swp )));
269- if (msg -> src .format <= RGA2_FORMAT_BGRA_4444 )
270- reg = ((reg & (~m_RGA2_SRC_INFO_SW_SW_SRC_CSC_MODE )) | (s_RGA2_SRC_INFO_SW_SW_SRC_CSC_MODE (0 )));
271- else
272- if (msg -> dst .format >= RGA2_FORMAT_YCbCr_422_SP )
273- reg = ((reg & (~m_RGA2_SRC_INFO_SW_SW_SRC_CSC_MODE )) | (s_RGA2_SRC_INFO_SW_SW_SRC_CSC_MODE (0 )));
274- else
275- reg = ((reg & (~m_RGA2_SRC_INFO_SW_SW_SRC_CSC_MODE )) | (s_RGA2_SRC_INFO_SW_SW_SRC_CSC_MODE (msg -> yuv2rgb_mode )));
269+ reg = ((reg & (~m_RGA2_SRC_INFO_SW_SW_SRC_CSC_MODE )) | (s_RGA2_SRC_INFO_SW_SW_SRC_CSC_MODE (msg -> yuv2rgb_mode )));
276270
277271 reg = ((reg & (~m_RGA2_SRC_INFO_SW_SW_SRC_ROT_MODE )) | (s_RGA2_SRC_INFO_SW_SW_SRC_ROT_MODE (msg -> rotate_mode & 0x3 )));
278272 reg = ((reg & (~m_RGA2_SRC_INFO_SW_SW_SRC_MIR_MODE )) | (s_RGA2_SRC_INFO_SW_SW_SRC_MIR_MODE ((msg -> rotate_mode >> 4 ) & 0x3 )));
@@ -412,8 +406,11 @@ static void RGA2_set_reg_dst_info(u8 *base, struct rga2_req *msg)
412406 reg = ((reg & (~m_RGA2_DST_INFO_SW_DITHER_UP_E )) | (s_RGA2_DST_INFO_SW_DITHER_UP_E (msg -> alpha_rop_flag >> 5 )));
413407 reg = ((reg & (~m_RGA2_DST_INFO_SW_DITHER_DOWN_E )) | (s_RGA2_DST_INFO_SW_DITHER_DOWN_E (msg -> alpha_rop_flag >> 6 )));
414408 reg = ((reg & (~m_RGA2_DST_INFO_SW_DITHER_MODE )) | (s_RGA2_DST_INFO_SW_DITHER_MODE (msg -> dither_mode )));
415- reg = ((reg & (~m_RGA2_DST_INFO_SW_DST_CSC_MODE )) | (s_RGA2_DST_INFO_SW_DST_CSC_MODE (msg -> yuv2rgb_mode >> 4 )));
416- reg = ((reg & (~m_RGA2_DST_INFO_SW_CSC_CLIP_MODE )) | (s_RGA2_DST_INFO_SW_CSC_CLIP_MODE (msg -> yuv2rgb_mode >> 6 )));
409+ reg = ((reg & (~m_RGA2_DST_INFO_SW_DST_CSC_MODE )) | (s_RGA2_DST_INFO_SW_DST_CSC_MODE (msg -> yuv2rgb_mode >> 2 )));
410+ reg = ((reg & (~m_RGA2_DST_INFO_SW_CSC_CLIP_MODE )) | (s_RGA2_DST_INFO_SW_CSC_CLIP_MODE (msg -> yuv2rgb_mode >> 4 )));
411+ /* Some older chips do not support src1 csc mode, they do not have these two registers. */
412+ reg = ((reg & (~m_RGA2_DST_INFO_SW_SRC1_CSC_MODE )) | (s_RGA2_DST_INFO_SW_SRC1_CSC_MODE (msg -> yuv2rgb_mode >> 5 )));
413+ reg = ((reg & (~m_RGA2_DST_INFO_SW_SRC1_CSC_CLIP_MODE )) | (s_RGA2_DST_INFO_SW_SRC1_CSC_CLIP_MODE (msg -> yuv2rgb_mode >> 7 )));
417414
418415
419416 * bRGA_DST_INFO = reg ;
@@ -1053,6 +1050,7 @@ void RGA_MSG_2_RGA2_MSG(struct rga_req *req_rga, struct rga2_req *req)
10531050
10541051 format_name_convert (& req -> src .format , req_rga -> src .format );
10551052 format_name_convert (& req -> dst .format , req_rga -> dst .format );
1053+ format_name_convert (& req -> src1 .format , req_rga -> pat .format );
10561054
10571055 if (req_rga -> rotate_mode == 1 ) {
10581056 if (req_rga -> sina == 0 && req_rga -> cosa == 65536 ) {
@@ -1116,7 +1114,10 @@ void RGA_MSG_2_RGA2_MSG(struct rga_req *req_rga, struct rga2_req *req)
11161114 memcpy (& req -> gr_color , & req_rga -> gr_color , sizeof (req_rga -> gr_color ));
11171115
11181116 req -> palette_mode = req_rga -> palette_mode ;
1119- req -> yuv2rgb_mode = req_rga -> yuv2rgb_mode + 1 ;
1117+ if ((req_rga -> yuv2rgb_mode & 0x3 ) != 0 )
1118+ req -> yuv2rgb_mode = req_rga -> yuv2rgb_mode + 1 ;
1119+ else
1120+ req -> yuv2rgb_mode = req_rga -> yuv2rgb_mode ;
11201121 req -> endian_mode = req_rga -> endian_mode ;
11211122 req -> rgb2yuv_mode = 0 ;
11221123
@@ -1229,6 +1230,11 @@ void RGA_MSG_2_RGA2_MSG(struct rga_req *req_rga, struct rga2_req *req)
12291230 req -> mmu_info .dst_mmu_flag = 0 ;
12301231 req -> dst .yrgb_addr = req_rga -> dst .yrgb_addr - 0x60000000 ;
12311232 }
1233+
1234+ if (req_rga -> pat .yrgb_addr >= 0xa0000000 ) {
1235+ req -> mmu_info .src1_mmu_flag = 0 ;
1236+ req -> src1 .yrgb_addr = req_rga -> pat .yrgb_addr - 0x60000000 ;
1237+ }
12321238 }
12331239 }
12341240}
@@ -1323,7 +1329,10 @@ void RGA_MSG_2_RGA2_MSG_32(struct rga_req_32 *req_rga, struct rga2_req *req)
13231329 req -> bg_color = req_rga -> bg_color ;
13241330 memcpy (& req -> gr_color , & req_rga -> gr_color , sizeof (req_rga -> gr_color ));
13251331 req -> palette_mode = req_rga -> palette_mode ;
1326- req -> yuv2rgb_mode = req_rga -> yuv2rgb_mode + 1 ;
1332+ if ((req_rga -> yuv2rgb_mode & 0x3 ) != 0 )
1333+ req -> yuv2rgb_mode = req_rga -> yuv2rgb_mode + 1 ;
1334+ else
1335+ req -> yuv2rgb_mode = req_rga -> yuv2rgb_mode ;
13271336 req -> endian_mode = req_rga -> endian_mode ;
13281337 req -> rgb2yuv_mode = 0 ;
13291338 req -> fading_alpha_value = 0 ;
0 commit comments