Loading drivers/video/msm/mdss/mdp3_hwio.h +3 −0 Original line number Diff line number Diff line Loading @@ -221,6 +221,9 @@ #define MDP3_PPP_BG_UNPACK_PATTERN1 0x101D8 #define MDP3_PPP_BG_UNPACK_PATTERN2 0x101DC #define MDP3_TFETCH_SOLID_FILL 0x20004 #define MDP3_TFETCH_FILL_COLOR 0x20040 #define MDP3_PPP_BLEND_PARAM 0x1014C #define MDP3_PPP_BLEND_BG_ALPHA_SEL 0x70010 Loading drivers/video/msm/mdss/mdp3_ppp.c +39 −2 Original line number Diff line number Diff line Loading @@ -36,6 +36,9 @@ #define MDP_PPP_MAX_BPP 4 #define MDP_PPP_DYNAMIC_FACTOR 3 #define MDP_PPP_MAX_READ_WRITE 3 #define MDP_SOLID_FILL_COLOR 0x0 #define ENABLE_SOLID_FILL 0x2 #define DISABLE_SOLID_FILL 0x0 static const bool valid_fmt[MDP_IMGTYPE_LIMIT] = { [MDP_RGB_565] = true, Loading Loading @@ -390,6 +393,23 @@ void mdp3_start_ppp(struct ppp_blit_op *blit_op) /* Wait for the pipe to clear */ do { } while (mdp3_ppp_pipe_wait() <= 0); config_ppp_op_mode(blit_op); if (blit_op->solid_fill) { MDP3_REG_WRITE(0x10138, 0x10000000); MDP3_REG_WRITE(0x1014c, 0xffffffff); MDP3_REG_WRITE(0x101b8, 0); MDP3_REG_WRITE(0x101bc, 0); MDP3_REG_WRITE(0x1013c, 0); MDP3_REG_WRITE(0x10140, 0); MDP3_REG_WRITE(0x10144, 0); MDP3_REG_WRITE(0x10148, 0); MDP3_REG_WRITE(MDP3_TFETCH_FILL_COLOR, MDP_SOLID_FILL_COLOR); MDP3_REG_WRITE(MDP3_TFETCH_SOLID_FILL, ENABLE_SOLID_FILL); } else { MDP3_REG_WRITE(MDP3_TFETCH_SOLID_FILL, DISABLE_SOLID_FILL); } mdp3_ppp_kickoff(); } Loading Loading @@ -489,6 +509,22 @@ static void mdp3_ppp_process_req(struct ppp_blit_op *blit_op, if (req->flags & MDP_BLUR) blit_op->mdp_op |= MDPOP_ASCALE | MDPOP_BLUR; if (req->flags & MDP_SOLID_FILL) { blit_op->solid_fill = true; /* Avoid odd width, as it could hang ppp during solid fill */ blit_op->dst.roi.width = (blit_op->dst.roi.width / 2) * 2; blit_op->src.roi.width = (blit_op->src.roi.width / 2) * 2; /* Avoid RGBA format, as it could hang ppp during solid fill */ if (blit_op->src.color_fmt == MDP_RGBA_8888) blit_op->src.color_fmt = MDP_RGBX_8888; if (blit_op->dst.color_fmt == MDP_RGBA_8888) blit_op->dst.color_fmt = MDP_RGBX_8888; } else { blit_op->solid_fill = false; } } static void mdp3_ppp_tile_workaround(struct ppp_blit_op *blit_op, Loading Loading @@ -791,7 +827,8 @@ int mdp3_ppp_start_blit(struct msm_fb_data_type *mfd, } is_bpp_4 = (ret == 4) ? 1 : 0; if ((is_bpp_4 && (remainder == 6 || remainder == 14))) if ((is_bpp_4 && (remainder == 6 || remainder == 14)) && !(req->flags & MDP_SOLID_FILL)) ret = mdp3_ppp_blit_workaround(mfd, req, remainder, src_data, dst_data); else Loading drivers/video/msm/mdss/mdp3_ppp.h +1 −0 Original line number Diff line number Diff line Loading @@ -332,6 +332,7 @@ struct ppp_blit_op { struct ppp_img_desc bg; struct ppp_blend blend; uint32_t mdp_op; /* Operations */ bool solid_fill; }; struct ppp_edge_rep { Loading include/uapi/linux/msm_mdp.h +1 −0 Original line number Diff line number Diff line Loading @@ -155,6 +155,7 @@ enum { #define MDP_BLUR 0x10 #define MDP_BLEND_FG_PREMULT 0x20000 #define MDP_IS_FG 0x40000 #define MDP_SOLID_FILL 0x0000100 #define MDP_DEINTERLACE 0x80000000 #define MDP_SHARPENING 0x40000000 #define MDP_NO_DMA_BARRIER_START 0x20000000 Loading Loading
drivers/video/msm/mdss/mdp3_hwio.h +3 −0 Original line number Diff line number Diff line Loading @@ -221,6 +221,9 @@ #define MDP3_PPP_BG_UNPACK_PATTERN1 0x101D8 #define MDP3_PPP_BG_UNPACK_PATTERN2 0x101DC #define MDP3_TFETCH_SOLID_FILL 0x20004 #define MDP3_TFETCH_FILL_COLOR 0x20040 #define MDP3_PPP_BLEND_PARAM 0x1014C #define MDP3_PPP_BLEND_BG_ALPHA_SEL 0x70010 Loading
drivers/video/msm/mdss/mdp3_ppp.c +39 −2 Original line number Diff line number Diff line Loading @@ -36,6 +36,9 @@ #define MDP_PPP_MAX_BPP 4 #define MDP_PPP_DYNAMIC_FACTOR 3 #define MDP_PPP_MAX_READ_WRITE 3 #define MDP_SOLID_FILL_COLOR 0x0 #define ENABLE_SOLID_FILL 0x2 #define DISABLE_SOLID_FILL 0x0 static const bool valid_fmt[MDP_IMGTYPE_LIMIT] = { [MDP_RGB_565] = true, Loading Loading @@ -390,6 +393,23 @@ void mdp3_start_ppp(struct ppp_blit_op *blit_op) /* Wait for the pipe to clear */ do { } while (mdp3_ppp_pipe_wait() <= 0); config_ppp_op_mode(blit_op); if (blit_op->solid_fill) { MDP3_REG_WRITE(0x10138, 0x10000000); MDP3_REG_WRITE(0x1014c, 0xffffffff); MDP3_REG_WRITE(0x101b8, 0); MDP3_REG_WRITE(0x101bc, 0); MDP3_REG_WRITE(0x1013c, 0); MDP3_REG_WRITE(0x10140, 0); MDP3_REG_WRITE(0x10144, 0); MDP3_REG_WRITE(0x10148, 0); MDP3_REG_WRITE(MDP3_TFETCH_FILL_COLOR, MDP_SOLID_FILL_COLOR); MDP3_REG_WRITE(MDP3_TFETCH_SOLID_FILL, ENABLE_SOLID_FILL); } else { MDP3_REG_WRITE(MDP3_TFETCH_SOLID_FILL, DISABLE_SOLID_FILL); } mdp3_ppp_kickoff(); } Loading Loading @@ -489,6 +509,22 @@ static void mdp3_ppp_process_req(struct ppp_blit_op *blit_op, if (req->flags & MDP_BLUR) blit_op->mdp_op |= MDPOP_ASCALE | MDPOP_BLUR; if (req->flags & MDP_SOLID_FILL) { blit_op->solid_fill = true; /* Avoid odd width, as it could hang ppp during solid fill */ blit_op->dst.roi.width = (blit_op->dst.roi.width / 2) * 2; blit_op->src.roi.width = (blit_op->src.roi.width / 2) * 2; /* Avoid RGBA format, as it could hang ppp during solid fill */ if (blit_op->src.color_fmt == MDP_RGBA_8888) blit_op->src.color_fmt = MDP_RGBX_8888; if (blit_op->dst.color_fmt == MDP_RGBA_8888) blit_op->dst.color_fmt = MDP_RGBX_8888; } else { blit_op->solid_fill = false; } } static void mdp3_ppp_tile_workaround(struct ppp_blit_op *blit_op, Loading Loading @@ -791,7 +827,8 @@ int mdp3_ppp_start_blit(struct msm_fb_data_type *mfd, } is_bpp_4 = (ret == 4) ? 1 : 0; if ((is_bpp_4 && (remainder == 6 || remainder == 14))) if ((is_bpp_4 && (remainder == 6 || remainder == 14)) && !(req->flags & MDP_SOLID_FILL)) ret = mdp3_ppp_blit_workaround(mfd, req, remainder, src_data, dst_data); else Loading
drivers/video/msm/mdss/mdp3_ppp.h +1 −0 Original line number Diff line number Diff line Loading @@ -332,6 +332,7 @@ struct ppp_blit_op { struct ppp_img_desc bg; struct ppp_blend blend; uint32_t mdp_op; /* Operations */ bool solid_fill; }; struct ppp_edge_rep { Loading
include/uapi/linux/msm_mdp.h +1 −0 Original line number Diff line number Diff line Loading @@ -155,6 +155,7 @@ enum { #define MDP_BLUR 0x10 #define MDP_BLEND_FG_PREMULT 0x20000 #define MDP_IS_FG 0x40000 #define MDP_SOLID_FILL 0x0000100 #define MDP_DEINTERLACE 0x80000000 #define MDP_SHARPENING 0x40000000 #define MDP_NO_DMA_BARRIER_START 0x20000000 Loading