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

Commit b72fd12f authored by Radhika Ranjan Soni's avatar Radhika Ranjan Soni Committed by Stephen Boyd
Browse files

mdss: ppp: Add support for MDP_Y_CBCR_H2V2_VENUS format



Currently support to handle MDP_Y_CBCR_H2V2_VENUS format is
not present in driver. Adding the same.

Change-Id: I2e5f0f30662777ffb48f875f858d58b94577825e
Signed-off-by: default avatarRadhika Ranjan Soni <rrsoni@codeaurora.org>
parent cae9b3fa
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ static const bool valid_fmt[MDP_IMGTYPE_LIMIT] = {
	[MDP_Y_CRCB_H2V2] = true,
	[MDP_Y_CBCR_H2V2] = true,
	[MDP_Y_CBCR_H2V2_ADRENO] = true,
	[MDP_Y_CBCR_H2V2_VENUS] = true,
	[MDP_YCRYCB_H2V1] = true,
	[MDP_Y_CBCR_H2V1] = true,
	[MDP_Y_CRCB_H2V1] = true,
@@ -409,6 +410,11 @@ static void mdp3_ppp_process_req(struct ppp_blit_op *blit_op,
			(void *) ((uint32_t) blit_op->src.p0 +
				ALIGN((ALIGN(req->src.width, 32) *
				ALIGN(req->src.height, 32)), 4096));
	else if (blit_op->src.color_fmt == MDP_Y_CBCR_H2V2_VENUS)
		blit_op->src.p1 =
			(void *) ((uint32_t) blit_op->src.p0 +
				ALIGN((ALIGN(req->src.width, 128) *
				ALIGN(req->src.height, 32)), 4096));
	else
		blit_op->src.p1 = (void *) ((uint32_t) blit_op->src.p0 +
			req->src.width * req->src.height);
+7 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ const uint32_t src_cfg_lut[MDP_IMGTYPE_LIMIT] = {
	[MDP_Y_CRCB_H2V2] = MDP_Y_CBCR_H2V2_SRC_REG,
	[MDP_Y_CBCR_H2V2] = MDP_Y_CBCR_H2V2_SRC_REG,
	[MDP_Y_CBCR_H2V2_ADRENO] = MDP_Y_CBCR_H2V2_SRC_REG,
	[MDP_Y_CBCR_H2V2_VENUS] = MDP_Y_CBCR_H2V2_SRC_REG,
	[MDP_YCRYCB_H2V1] = MDP_YCRYCB_H2V1_SRC_REG,
	[MDP_Y_CBCR_H2V1] = MDP_Y_CRCB_H2V1_SRC_REG,
	[MDP_Y_CRCB_H2V1] = MDP_Y_CRCB_H2V1_SRC_REG,
@@ -48,6 +49,7 @@ const uint32_t out_cfg_lut[MDP_IMGTYPE_LIMIT] = {
	[MDP_Y_CRCB_H2V2] = MDP_Y_CBCR_H2V2_DST_REG,
	[MDP_Y_CBCR_H2V2] = MDP_Y_CBCR_H2V2_DST_REG,
	[MDP_Y_CBCR_H2V2_ADRENO] = MDP_Y_CBCR_H2V2_DST_REG,
	[MDP_Y_CBCR_H2V2_VENUS] = MDP_Y_CBCR_H2V2_DST_REG,
	[MDP_YCRYCB_H2V1] = MDP_YCRYCB_H2V1_DST_REG,
	[MDP_Y_CBCR_H2V1] = MDP_Y_CRCB_H2V1_DST_REG,
	[MDP_Y_CRCB_H2V1] = MDP_Y_CRCB_H2V1_DST_REG,
@@ -72,6 +74,8 @@ const uint32_t pack_patt_lut[MDP_IMGTYPE_LIMIT] = {
	[MDP_Y_CBCR_H2V2] = PPP_GET_PACK_PATTERN(0, 0, CLR_CB, CLR_CR, 8),
	[MDP_Y_CBCR_H2V2_ADRENO] = PPP_GET_PACK_PATTERN(0, 0, CLR_CB,
		CLR_CR, 8),
	[MDP_Y_CBCR_H2V2_VENUS] = PPP_GET_PACK_PATTERN(0, 0, CLR_CB,
		CLR_CR, 8),
	[MDP_YCRYCB_H2V1] = PPP_GET_PACK_PATTERN(CLR_Y,
		CLR_CR, CLR_Y, CLR_CB, 8),
	[MDP_Y_CBCR_H2V1] = PPP_GET_PACK_PATTERN(0, 0, CLR_CB, CLR_CR, 8),
@@ -91,6 +95,8 @@ const uint32_t src_op_reg[MDP_IMGTYPE_LIMIT] = {
	[MDP_Y_CBCR_H2V2] = PPP_OP_SRC_CHROMA_420 | PPP_OP_COLOR_SPACE_YCBCR,
	[MDP_Y_CBCR_H2V2_ADRENO] = PPP_OP_SRC_CHROMA_420 |
			PPP_OP_COLOR_SPACE_YCBCR,
	[MDP_Y_CBCR_H2V2_VENUS] = PPP_OP_SRC_CHROMA_420 |
			PPP_OP_COLOR_SPACE_YCBCR,
	[MDP_Y_CBCR_H2V1] = PPP_OP_SRC_CHROMA_H2V1,
	[MDP_Y_CRCB_H2V1] = PPP_OP_SRC_CHROMA_H2V1,
	[MDP_YCRYCB_H2V1] = PPP_OP_SRC_CHROMA_H2V1,
@@ -109,6 +115,7 @@ const uint32_t bytes_per_pixel[MDP_IMGTYPE_LIMIT] = {
	[MDP_Y_CBCR_H2V1] = 1,
	[MDP_Y_CBCR_H2V2] = 1,
	[MDP_Y_CBCR_H2V2_ADRENO] = 1,
	[MDP_Y_CBCR_H2V2_VENUS] = 1,
	[MDP_Y_CRCB_H2V1] = 1,
	[MDP_Y_CRCB_H2V2] = 1,
	[MDP_YCRYCB_H2V1] = 2,
+11 −1
Original line number Diff line number Diff line
@@ -430,6 +430,8 @@ void mdp_adjust_start_addr(struct ppp_blit_op *blit_op,

	if (img->color_fmt == MDP_Y_CBCR_H2V2_ADRENO && layer == 0)
		img->p0 += (x + y * ALIGN(width, 32)) * bpp;
	else if (img->color_fmt == MDP_Y_CBCR_H2V2_VENUS && layer == 0)
		img->p0 += (x + y * ALIGN(width, 128)) * bpp;
	else
		img->p0 += (x + y * width) * bpp;
	if (layer == 1)
@@ -442,7 +444,8 @@ void mdp_adjust_start_addr(struct ppp_blit_op *blit_op,
		 * MDP_Y_CBCR_H2V2/MDP_Y_CRCB_H2V2 cosite for now
		 * we need to shift x direction same as y dir for offsite
		 */
		if (img->color_fmt == MDP_Y_CBCR_H2V2_ADRENO
		if ((img->color_fmt == MDP_Y_CBCR_H2V2_ADRENO ||
				img->color_fmt == MDP_Y_CBCR_H2V2_VENUS)
							&& layer == 0)
			img->p1 += ((x / h_slice) * h_slice + ((y == 0) ? 0 :
			(((y + 1) / v_slice - 1) * (ALIGN(width/2, 32) * 2))))
@@ -740,6 +743,7 @@ void ppp_edge_rep_chroma_pixel(struct ppp_blit_op *blit_op,

	case MDP_Y_CBCR_H2V2:
	case MDP_Y_CBCR_H2V2_ADRENO:
	case MDP_Y_CBCR_H2V2_VENUS:
	case MDP_Y_CRCB_H2V2:
		er->chroma_interp_point_left = er->luma_interp_point_left >> 1;
		er->chroma_interp_point_right =
@@ -778,6 +782,7 @@ void ppp_edge_rep_chroma_pixel(struct ppp_blit_op *blit_op,
			break;
		case MDP_Y_CBCR_H2V2:
		case MDP_Y_CBCR_H2V2_ADRENO:
		case MDP_Y_CBCR_H2V2_VENUS:
		case MDP_Y_CRCB_H2V2:
			/*
			 * cosite in horizontal dir, and offsite in vertical dir
@@ -1168,6 +1173,7 @@ int config_ppp_op_mode(struct ppp_blit_op *blit_op)
	switch (blit_op->src.color_fmt) {
	case MDP_Y_CBCR_H2V2:
	case MDP_Y_CBCR_H2V2_ADRENO:
	case MDP_Y_CBCR_H2V2_VENUS:
	case MDP_Y_CRCB_H2V2:
		sh_slice = sv_slice = 2;
		break;
@@ -1195,6 +1201,10 @@ int config_ppp_op_mode(struct ppp_blit_op *blit_op)
		blit_op->src.stride0 = ALIGN(blit_op->src.prop.width, 32) *
			ppp_bpp(blit_op->src.color_fmt);
		blit_op->src.stride1 = 2 * ALIGN(blit_op->src.prop.width/2, 32);
	} else if (blit_op->src.color_fmt == MDP_Y_CBCR_H2V2_VENUS) {
		blit_op->src.stride0 = ALIGN(blit_op->src.prop.width, 128)  *
			ppp_bpp(blit_op->src.color_fmt);
		blit_op->src.stride1 = blit_op->src.stride0;
	} else {
		blit_op->src.stride0 = blit_op->src.prop.width *
			ppp_bpp(blit_op->src.color_fmt);