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

Commit 3bf774ff authored by Prabhanjan Kandula's avatar Prabhanjan Kandula
Browse files

msm: mdss: fix data path for concurrent writeback



- Read data-path flag set by client for CWB, and
populate CWB output layer flags.
- Fix data path register setting for right mixer

Change-Id: I3599ce1b19df48c72a4c951be76b813704b8a124
Signed-off-by: default avatarPrabhanjan Kandula <pkandula@codeaurora.org>
parent 26210422
Loading
Loading
Loading
Loading
+1 −10
Original line number Diff line number Diff line
@@ -3513,7 +3513,6 @@ int mdss_mdp_cwb_setup(struct mdss_mdp_ctl *ctl)
	struct mdss_overlay_private *mdp5_data = NULL;
	struct mdss_mdp_wb_data *cwb_data;
	struct mdss_mdp_writeback_arg wb_args;
	struct mdss_mdp_ctl *sctl = NULL;
	struct mdss_data_type *mdata = mdss_mdp_get_mdata();

	u32 opmode, data_point;
@@ -3575,14 +3574,11 @@ int mdss_mdp_cwb_setup(struct mdss_mdp_ctl *ctl)

	/* Select MEM_SEL to WB */
	ctl->opmode |= MDSS_MDP_CTL_OP_WFD_MODE;
	sctl = mdss_mdp_get_split_ctl(ctl);
	if (sctl)
		sctl->opmode |= MDSS_MDP_CTL_OP_WFD_MODE;

	/* Select CWB data point */
	data_point = (cwb->layer.flags & MDP_COMMIT_CWB_DSPP) ? 0x4 : 0;
	writel_relaxed(data_point, mdata->mdp_base + mdata->ppb_ctl[2]);
	if (sctl)
	if (ctl->mixer_right)
		writel_relaxed(data_point + 1,
				mdata->mdp_base + mdata->ppb_ctl[3]);

@@ -3591,11 +3587,6 @@ int mdss_mdp_cwb_setup(struct mdss_mdp_ctl *ctl)

	opmode = mdss_mdp_ctl_read(ctl, MDSS_MDP_REG_CTL_TOP) | ctl->opmode;
	mdss_mdp_ctl_write(ctl, MDSS_MDP_REG_CTL_TOP, opmode);
	if (sctl) {
		opmode = mdss_mdp_ctl_read(sctl, MDSS_MDP_REG_CTL_TOP) |
			sctl->opmode;
		mdss_mdp_ctl_write(sctl, MDSS_MDP_REG_CTL_TOP, opmode);
	}

	/* Increase commit count to signal CWB release fence */
	atomic_inc(&cwb->cwb_sync_pt_data.commit_cnt);
+4 −6
Original line number Diff line number Diff line
@@ -262,7 +262,7 @@ static void mdss_mdp_writeback_cwb_overflow(void *arg)
	mdss_mdp_set_intr_callback_nosync(MDSS_MDP_IRQ_TYPE_CWB_OVERFLOW,
			CWB_PPB_0, NULL, NULL);

	if (mdss_mdp_get_split_ctl(ctl)) {
	if (ctl->mixer_right) {
		mdss_mdp_irq_disable_nosync(MDSS_MDP_IRQ_TYPE_CWB_OVERFLOW,
			CWB_PPB_1);
		mdss_mdp_set_intr_callback_nosync(
@@ -297,7 +297,7 @@ static void mdss_mdp_writeback_cwb_intr_done(void *arg)
	mdss_mdp_set_intr_callback_nosync(MDSS_MDP_IRQ_TYPE_CWB_OVERFLOW,
			CWB_PPB_0, NULL, NULL);

	if (mdss_mdp_get_split_ctl(ctl)) {
	if (ctl->mixer_right) {
		mdss_mdp_irq_disable_nosync(MDSS_MDP_IRQ_TYPE_CWB_OVERFLOW,
			CWB_PPB_1);
		mdss_mdp_set_intr_callback_nosync(
@@ -477,7 +477,6 @@ int mdss_mdp_writeback_prepare_cwb(struct mdss_mdp_ctl *ctl,
	struct mdss_mdp_writeback_ctx *ctx = NULL;
	struct mdp_layer_buffer *buffer = NULL;
	struct mdss_mdp_cwb *cwb = NULL;
	struct mdss_mdp_ctl *sctl = NULL;
	int i, ret = 0;
	unsigned long total_buf_len = 0;
	struct mdss_mdp_data *data = NULL;
@@ -547,11 +546,10 @@ int mdss_mdp_writeback_prepare_cwb(struct mdss_mdp_ctl *ctl,
			CWB_PPB_0, mdss_mdp_writeback_cwb_overflow, ctl);
	mdss_mdp_irq_enable(MDSS_MDP_IRQ_TYPE_CWB_OVERFLOW, CWB_PPB_0);

	sctl = mdss_mdp_get_split_ctl(ctl);
	if (sctl) {
	if (ctl->mixer_right) {
		mdss_mdp_set_intr_callback(MDSS_MDP_IRQ_TYPE_CWB_OVERFLOW,
				CWB_PPB_1, mdss_mdp_writeback_cwb_overflow,
				sctl);
				ctl);
		mdss_mdp_irq_enable(MDSS_MDP_IRQ_TYPE_CWB_OVERFLOW, CWB_PPB_1);
	}

+2 −0
Original line number Diff line number Diff line
@@ -2811,6 +2811,8 @@ int mdss_mdp_layer_pre_commit_cwb(struct msm_fb_data_type *mfd,
	}

	mdp5_data->cwb.layer = *commit->output_layer;
	mdp5_data->cwb.layer.flags |=  (commit->flags & MDP_COMMIT_CWB_DSPP) ?
			MDP_COMMIT_CWB_DSPP : 0;
	mdp5_data->cwb.wb_idx = commit->output_layer->writeback_ndx;

	mutex_lock(&mdp5_data->cwb.queue_lock);