Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6871b18b authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "mdss: mdp3 driver support for solid fill"

parents be96c973 3d4cec22
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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
+39 −2
Original line number Diff line number Diff line
@@ -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,
@@ -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();
}

@@ -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,
@@ -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
+1 −0
Original line number Diff line number Diff line
@@ -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 {
+1 −0
Original line number Diff line number Diff line
@@ -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