Commit e4f87fdd authored by Jun Nie's avatar Jun Nie Committed by Dmitry Baryshkov
Browse files

drm/msm/dpu: bind correct pingpong for quad pipe



There are 2 interfaces and 4 pingpong in quad pipe. Map the 2nd
interface to 3rd PP instead of the 2nd PP.

Signed-off-by: default avatarJun Nie <jun.nie@linaro.org>
Reviewed-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: default avatarJessica Zhang <quic_jesszhan@quicinc.com>
Patchwork: https://patchwork.freedesktop.org/patch/675402/
Link: https://lore.kernel.org/r/20250918-v6-16-rc2-quad-pipe-upstream-4-v16-2-ff6232e3472f@linaro.org


Signed-off-by: default avatarDmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
parent 74c4efe6
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -1160,7 +1160,7 @@ static void dpu_encoder_virt_atomic_mode_set(struct drm_encoder *drm_enc,
	struct dpu_hw_blk *hw_ctl[MAX_CHANNELS_PER_ENC];
	struct dpu_hw_blk *hw_dsc[MAX_CHANNELS_PER_ENC];
	struct dpu_hw_blk *hw_cwb[MAX_CHANNELS_PER_ENC];
	int num_ctl, num_pp, num_dsc;
	int num_ctl, num_pp, num_dsc, num_pp_per_intf;
	int num_cwb = 0;
	bool is_cwb_encoder;
	unsigned int dsc_mask = 0;
@@ -1239,10 +1239,16 @@ static void dpu_encoder_virt_atomic_mode_set(struct drm_encoder *drm_enc,
		dpu_enc->cur_master->hw_cdm = hw_cdm ? to_dpu_hw_cdm(hw_cdm) : NULL;
	}

	/*
	 * There may be 4 PP and 2 INTF for quad pipe case, so INTF is not
	 * mapped to PP 1:1. Let's calculate the stride with pipe/INTF
	 */
	num_pp_per_intf = num_pp / dpu_enc->num_phys_encs;

	for (i = 0; i < dpu_enc->num_phys_encs; i++) {
		struct dpu_encoder_phys *phys = dpu_enc->phys_encs[i];

		phys->hw_pp = dpu_enc->hw_pp[i];
		phys->hw_pp = dpu_enc->hw_pp[num_pp_per_intf * i];
		if (!phys->hw_pp) {
			DPU_ERROR_ENC(dpu_enc,
				"no pp block assigned at idx: %d\n", i);