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

Commit 38ee4989 authored by Adrian Salido-Moreno's avatar Adrian Salido-Moreno
Browse files

msm: mdss: revisit igc pipe enumeration logic



When setting up IGC, current code makes assumptions on how the DMA
pipes are ordered in enum, but this may not be the case. Refactor code
such that the index is properly obtained by iterating through pipe
list in order.

CRs-Fixed: 987777
Change-Id: I56f9fa0919a7f961cdb6c07f5126fd5e3aa1c678
Signed-off-by: default avatarAdrian Salido-Moreno <adrianm@codeaurora.org>
parent 44729256
Loading
Loading
Loading
Loading
+15 −37
Original line number Diff line number Diff line
@@ -1817,6 +1817,7 @@ int mdss_mdp_pipe_sspp_setup(struct mdss_mdp_pipe *pipe, u32 *op)
	struct mdss_data_type *mdata = mdss_mdp_get_mdata();
	u32 current_opmode, location;
	u32 dcm_state = DCM_UNINIT;
	struct mdss_mdp_pipe *pipe_list;

	if (pipe == NULL)
		return -EINVAL;
@@ -1840,53 +1841,19 @@ int mdss_mdp_pipe_sspp_setup(struct mdss_mdp_pipe *pipe, u32 *op)
	case MDSS_MDP_PIPE_TYPE_VIG:
		pipe_base = mdata->mdp_base + MDSS_MDP_REG_IGC_VIG_BASE;
		pipe_cnt = mdata->nvig_pipes;
		pipe_list = mdata->vig_pipes;
		location = SSPP_VIG;
		switch (pipe->num) {
		case MDSS_MDP_SSPP_VIG0:
			pipe_num = 0;
		break;
		case MDSS_MDP_SSPP_VIG1:
			pipe_num = 1;
		break;
		case MDSS_MDP_SSPP_VIG2:
			pipe_num = 2;
		break;
		case MDSS_MDP_SSPP_VIG3:
			pipe_num = 3;
		break;
		default:
			pr_err("Invalid pipe num %d pipe type %d\n",
			       pipe->num, pipe->type);
			return -EINVAL;
		}
		break;
	case MDSS_MDP_PIPE_TYPE_RGB:
		pipe_base = mdata->mdp_base + MDSS_MDP_REG_IGC_RGB_BASE;
		pipe_cnt = mdata->nrgb_pipes;
		pipe_list = mdata->rgb_pipes;
		location = SSPP_RGB;
		switch (pipe->num) {
		case MDSS_MDP_SSPP_RGB0:
			pipe_num = 0;
		break;
		case MDSS_MDP_SSPP_RGB1:
			pipe_num = 1;
		break;
		case MDSS_MDP_SSPP_RGB2:
			pipe_num = 2;
		break;
		case MDSS_MDP_SSPP_RGB3:
			pipe_num = 3;
		break;
		default:
			pr_err("Invalid pipe num %d pipe type %d\n",
			       pipe->num, pipe->type);
			return -EINVAL;
		}
		break;
	case MDSS_MDP_PIPE_TYPE_DMA:
		pipe_base = mdata->mdp_base + MDSS_MDP_REG_IGC_DMA_BASE;
		pipe_num = pipe->num - MDSS_MDP_SSPP_DMA0;
		pipe_cnt = mdata->ndma_pipes;
		pipe_list = mdata->dma_pipes;
		location = SSPP_DMA;
		break;
	case MDSS_MDP_PIPE_TYPE_CURSOR:
@@ -1897,6 +1864,17 @@ int mdss_mdp_pipe_sspp_setup(struct mdss_mdp_pipe *pipe, u32 *op)
		return -EINVAL;
	}

	for (pipe_num = 0; pipe_num < pipe_cnt; pipe_num++) {
		if (pipe == (pipe_list + pipe_num))
			break;
	}

	if (pipe_num == pipe_cnt) {
		pr_err("Invalid pipe num %d pipe type %d\n",
				pipe->num, pipe->type);
		return -EINVAL;
	}

	if (pipe->pp_cfg.config_ops & MDP_OVERLAY_PP_IGC_CFG) {
		flags |= PP_FLAGS_DIRTY_IGC;
		if (!pp_ops[IGC].pp_set_config) {