Loading drivers/video/msm/mdss/mdp3_ppp.h +1 −1 Original line number Diff line number Diff line Loading @@ -391,7 +391,7 @@ struct ppp_edge_rep { uint32_t ppp_bpp(uint32_t type); uint32_t ppp_src_config(uint32_t type); uint32_t ppp_out_config(uint32_t type); uint32_t ppp_pack_pattern(uint32_t type); uint32_t ppp_pack_pattern(uint32_t type, uint32_t yuv2rgb); uint32_t ppp_dst_op_reg(uint32_t type); uint32_t ppp_src_op_reg(uint32_t type); bool ppp_per_p_alpha(uint32_t type); Loading drivers/video/msm/mdss/mdp3_ppp_data.c +33 −1 Original line number Diff line number Diff line Loading @@ -88,6 +88,35 @@ const uint32_t pack_patt_lut[MDP_IMGTYPE_LIMIT] = { CLR_G, CLR_R, 8), }; const uint32_t swapped_pack_patt_lut[MDP_IMGTYPE_LIMIT] = { [MDP_RGB_565] = PPP_GET_PACK_PATTERN(0, CLR_B, CLR_G, CLR_R, 8), [MDP_BGR_565] = PPP_GET_PACK_PATTERN(0, CLR_R, CLR_G, CLR_B, 8), [MDP_RGB_888] = PPP_GET_PACK_PATTERN(0, CLR_B, CLR_G, CLR_R, 8), [MDP_BGR_888] = PPP_GET_PACK_PATTERN(0, CLR_R, CLR_G, CLR_B, 8), [MDP_BGRA_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_R, CLR_G, CLR_B, 8), [MDP_RGBA_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_B, CLR_G, CLR_R, 8), [MDP_ARGB_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_B, CLR_G, CLR_R, 8), [MDP_XRGB_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_B, CLR_G, CLR_R, 8), [MDP_RGBX_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_B, CLR_G, CLR_R, 8), [MDP_Y_CRCB_H2V2] = PPP_GET_PACK_PATTERN(0, 0, CLR_CB, CLR_CR, 8), [MDP_Y_CBCR_H2V2] = PPP_GET_PACK_PATTERN(0, 0, CLR_CR, CLR_CB, 8), [MDP_Y_CBCR_H2V2_ADRENO] = PPP_GET_PACK_PATTERN(0, 0, CLR_CR, CLR_CB, 8), [MDP_Y_CBCR_H2V2_VENUS] = PPP_GET_PACK_PATTERN(0, 0, CLR_CR, CLR_CB, 8), [MDP_YCRYCB_H2V1] = PPP_GET_PACK_PATTERN(CLR_Y, CLR_CB, CLR_Y, CLR_CR, 8), [MDP_Y_CBCR_H2V1] = PPP_GET_PACK_PATTERN(0, 0, CLR_CR, CLR_CB, 8), [MDP_Y_CRCB_H2V1] = PPP_GET_PACK_PATTERN(0, 0, CLR_CB, CLR_CR, 8), [MDP_BGRX_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_R, CLR_G, CLR_B, 8), }; const uint32_t dst_op_reg[MDP_IMGTYPE_LIMIT] = { [MDP_Y_CRCB_H2V2] = PPP_OP_DST_CHROMA_420, [MDP_Y_CBCR_H2V2] = PPP_OP_DST_CHROMA_420, Loading Loading @@ -1530,10 +1559,13 @@ uint32_t ppp_out_config(uint32_t type) return out_cfg_lut[type]; } uint32_t ppp_pack_pattern(uint32_t type) uint32_t ppp_pack_pattern(uint32_t type, uint32_t yuv2rgb) { if (MDP_IS_IMGTYPE_BAD(type)) return 0; if (yuv2rgb) return swapped_pack_patt_lut[type]; return pack_patt_lut[type]; } Loading drivers/video/msm/mdss/mdp3_ppp_hwio.c +9 −7 Original line number Diff line number Diff line Loading @@ -486,7 +486,7 @@ int load_csc_matrix(int matrix_type, struct ppp_csc_table *csc) return load_secondary_matrix(csc); } int config_ppp_src(struct ppp_img_desc *src) int config_ppp_src(struct ppp_img_desc *src, uint32_t yuv2rgb) { uint32_t val; Loading @@ -510,12 +510,12 @@ int config_ppp_src(struct ppp_img_desc *src) val |= (src->roi.x % 2) ? PPP_SRC_BPP_ROI_ODD_X : 0; val |= (src->roi.y % 2) ? PPP_SRC_BPP_ROI_ODD_Y : 0; PPP_WRITEL(val, MDP3_PPP_SRC_FORMAT); PPP_WRITEL(ppp_pack_pattern(src->color_fmt), PPP_WRITEL(ppp_pack_pattern(src->color_fmt, yuv2rgb), MDP3_PPP_SRC_UNPACK_PATTERN1); return 0; } int config_ppp_out(struct ppp_img_desc *dst) int config_ppp_out(struct ppp_img_desc *dst, uint32_t yuv2rgb) { uint32_t val; bool pseudoplanr_output = false; Loading @@ -534,7 +534,7 @@ int config_ppp_out(struct ppp_img_desc *dst) if (pseudoplanr_output) val |= PPP_DST_PLANE_PSEUDOPLN; PPP_WRITEL(val, MDP3_PPP_OUT_FORMAT); PPP_WRITEL(ppp_pack_pattern(dst->color_fmt), PPP_WRITEL(ppp_pack_pattern(dst->color_fmt, yuv2rgb), MDP3_PPP_OUT_PACK_PATTERN1); val = ((dst->roi.height & MDP3_PPP_XY_MASK) << MDP3_PPP_XY_OFFSET) | Loading Loading @@ -573,7 +573,7 @@ int config_ppp_background(struct ppp_img_desc *bg) PPP_WRITEL(ppp_src_config(bg->color_fmt), MDP3_PPP_BG_FORMAT); PPP_WRITEL(ppp_pack_pattern(bg->color_fmt), PPP_WRITEL(ppp_pack_pattern(bg->color_fmt, 0), MDP3_PPP_BG_UNPACK_PATTERN1); return 0; } Loading Loading @@ -1108,6 +1108,7 @@ int config_ppp_rotation(uint32_t mdp_op, uint32_t *pppop_reg_ptr) int config_ppp_op_mode(struct ppp_blit_op *blit_op) { uint32_t yuv2rgb; uint32_t ppp_operation_reg = 0; int sv_slice, sh_slice; int dv_slice, dh_slice; Loading Loading @@ -1153,6 +1154,7 @@ int config_ppp_op_mode(struct ppp_blit_op *blit_op) config_ppp_csc(blit_op->src.color_fmt, blit_op->dst.color_fmt, &ppp_operation_reg); yuv2rgb = ppp_operation_reg & PPP_OP_CONVERT_YCBCR2RGB; if (blit_op->mdp_op & MDPOP_DITHER) ppp_operation_reg |= PPP_OP_DITHER_EN; Loading Loading @@ -1197,8 +1199,8 @@ int config_ppp_op_mode(struct ppp_blit_op *blit_op) config_ppp_blend(blit_op, &ppp_operation_reg); config_ppp_src(&blit_op->src); config_ppp_out(&blit_op->dst); config_ppp_src(&blit_op->src, yuv2rgb); config_ppp_out(&blit_op->dst, yuv2rgb); PPP_WRITEL(ppp_operation_reg, MDP3_PPP_OP_MODE); mb(); return 0; Loading Loading
drivers/video/msm/mdss/mdp3_ppp.h +1 −1 Original line number Diff line number Diff line Loading @@ -391,7 +391,7 @@ struct ppp_edge_rep { uint32_t ppp_bpp(uint32_t type); uint32_t ppp_src_config(uint32_t type); uint32_t ppp_out_config(uint32_t type); uint32_t ppp_pack_pattern(uint32_t type); uint32_t ppp_pack_pattern(uint32_t type, uint32_t yuv2rgb); uint32_t ppp_dst_op_reg(uint32_t type); uint32_t ppp_src_op_reg(uint32_t type); bool ppp_per_p_alpha(uint32_t type); Loading
drivers/video/msm/mdss/mdp3_ppp_data.c +33 −1 Original line number Diff line number Diff line Loading @@ -88,6 +88,35 @@ const uint32_t pack_patt_lut[MDP_IMGTYPE_LIMIT] = { CLR_G, CLR_R, 8), }; const uint32_t swapped_pack_patt_lut[MDP_IMGTYPE_LIMIT] = { [MDP_RGB_565] = PPP_GET_PACK_PATTERN(0, CLR_B, CLR_G, CLR_R, 8), [MDP_BGR_565] = PPP_GET_PACK_PATTERN(0, CLR_R, CLR_G, CLR_B, 8), [MDP_RGB_888] = PPP_GET_PACK_PATTERN(0, CLR_B, CLR_G, CLR_R, 8), [MDP_BGR_888] = PPP_GET_PACK_PATTERN(0, CLR_R, CLR_G, CLR_B, 8), [MDP_BGRA_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_R, CLR_G, CLR_B, 8), [MDP_RGBA_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_B, CLR_G, CLR_R, 8), [MDP_ARGB_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_B, CLR_G, CLR_R, 8), [MDP_XRGB_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_B, CLR_G, CLR_R, 8), [MDP_RGBX_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_B, CLR_G, CLR_R, 8), [MDP_Y_CRCB_H2V2] = PPP_GET_PACK_PATTERN(0, 0, CLR_CB, CLR_CR, 8), [MDP_Y_CBCR_H2V2] = PPP_GET_PACK_PATTERN(0, 0, CLR_CR, CLR_CB, 8), [MDP_Y_CBCR_H2V2_ADRENO] = PPP_GET_PACK_PATTERN(0, 0, CLR_CR, CLR_CB, 8), [MDP_Y_CBCR_H2V2_VENUS] = PPP_GET_PACK_PATTERN(0, 0, CLR_CR, CLR_CB, 8), [MDP_YCRYCB_H2V1] = PPP_GET_PACK_PATTERN(CLR_Y, CLR_CB, CLR_Y, CLR_CR, 8), [MDP_Y_CBCR_H2V1] = PPP_GET_PACK_PATTERN(0, 0, CLR_CR, CLR_CB, 8), [MDP_Y_CRCB_H2V1] = PPP_GET_PACK_PATTERN(0, 0, CLR_CB, CLR_CR, 8), [MDP_BGRX_8888] = PPP_GET_PACK_PATTERN(CLR_ALPHA, CLR_R, CLR_G, CLR_B, 8), }; const uint32_t dst_op_reg[MDP_IMGTYPE_LIMIT] = { [MDP_Y_CRCB_H2V2] = PPP_OP_DST_CHROMA_420, [MDP_Y_CBCR_H2V2] = PPP_OP_DST_CHROMA_420, Loading Loading @@ -1530,10 +1559,13 @@ uint32_t ppp_out_config(uint32_t type) return out_cfg_lut[type]; } uint32_t ppp_pack_pattern(uint32_t type) uint32_t ppp_pack_pattern(uint32_t type, uint32_t yuv2rgb) { if (MDP_IS_IMGTYPE_BAD(type)) return 0; if (yuv2rgb) return swapped_pack_patt_lut[type]; return pack_patt_lut[type]; } Loading
drivers/video/msm/mdss/mdp3_ppp_hwio.c +9 −7 Original line number Diff line number Diff line Loading @@ -486,7 +486,7 @@ int load_csc_matrix(int matrix_type, struct ppp_csc_table *csc) return load_secondary_matrix(csc); } int config_ppp_src(struct ppp_img_desc *src) int config_ppp_src(struct ppp_img_desc *src, uint32_t yuv2rgb) { uint32_t val; Loading @@ -510,12 +510,12 @@ int config_ppp_src(struct ppp_img_desc *src) val |= (src->roi.x % 2) ? PPP_SRC_BPP_ROI_ODD_X : 0; val |= (src->roi.y % 2) ? PPP_SRC_BPP_ROI_ODD_Y : 0; PPP_WRITEL(val, MDP3_PPP_SRC_FORMAT); PPP_WRITEL(ppp_pack_pattern(src->color_fmt), PPP_WRITEL(ppp_pack_pattern(src->color_fmt, yuv2rgb), MDP3_PPP_SRC_UNPACK_PATTERN1); return 0; } int config_ppp_out(struct ppp_img_desc *dst) int config_ppp_out(struct ppp_img_desc *dst, uint32_t yuv2rgb) { uint32_t val; bool pseudoplanr_output = false; Loading @@ -534,7 +534,7 @@ int config_ppp_out(struct ppp_img_desc *dst) if (pseudoplanr_output) val |= PPP_DST_PLANE_PSEUDOPLN; PPP_WRITEL(val, MDP3_PPP_OUT_FORMAT); PPP_WRITEL(ppp_pack_pattern(dst->color_fmt), PPP_WRITEL(ppp_pack_pattern(dst->color_fmt, yuv2rgb), MDP3_PPP_OUT_PACK_PATTERN1); val = ((dst->roi.height & MDP3_PPP_XY_MASK) << MDP3_PPP_XY_OFFSET) | Loading Loading @@ -573,7 +573,7 @@ int config_ppp_background(struct ppp_img_desc *bg) PPP_WRITEL(ppp_src_config(bg->color_fmt), MDP3_PPP_BG_FORMAT); PPP_WRITEL(ppp_pack_pattern(bg->color_fmt), PPP_WRITEL(ppp_pack_pattern(bg->color_fmt, 0), MDP3_PPP_BG_UNPACK_PATTERN1); return 0; } Loading Loading @@ -1108,6 +1108,7 @@ int config_ppp_rotation(uint32_t mdp_op, uint32_t *pppop_reg_ptr) int config_ppp_op_mode(struct ppp_blit_op *blit_op) { uint32_t yuv2rgb; uint32_t ppp_operation_reg = 0; int sv_slice, sh_slice; int dv_slice, dh_slice; Loading Loading @@ -1153,6 +1154,7 @@ int config_ppp_op_mode(struct ppp_blit_op *blit_op) config_ppp_csc(blit_op->src.color_fmt, blit_op->dst.color_fmt, &ppp_operation_reg); yuv2rgb = ppp_operation_reg & PPP_OP_CONVERT_YCBCR2RGB; if (blit_op->mdp_op & MDPOP_DITHER) ppp_operation_reg |= PPP_OP_DITHER_EN; Loading Loading @@ -1197,8 +1199,8 @@ int config_ppp_op_mode(struct ppp_blit_op *blit_op) config_ppp_blend(blit_op, &ppp_operation_reg); config_ppp_src(&blit_op->src); config_ppp_out(&blit_op->dst); config_ppp_src(&blit_op->src, yuv2rgb); config_ppp_out(&blit_op->dst, yuv2rgb); PPP_WRITEL(ppp_operation_reg, MDP3_PPP_OP_MODE); mb(); return 0; Loading