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

Commit 9ce0147f authored by Satya Rama Aditya Pinapala's avatar Satya Rama Aditya Pinapala Committed by Gerrit - the friendly Code Review server
Browse files

drm/msm/dsi-staging: avoid out of bounds access of ctrl array



To avoid out of bounds access of ctrl array, an extra check
against maximum possible value is required. This is implemented in the
new macro display_for_each_ctrl.

Change-Id: I1511392f72df2faf9464d815810c8615925127fd
Signed-off-by: default avatarSatya Rama Aditya Pinapala <psraditya30@codeaurora.org>
parent eb7207c5
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -37,6 +37,9 @@
	})

#define DSI_DEBUG_NAME_LEN		32
#define display_for_each_ctrl(index, display) \
	for (index = 0; (index < (display)->ctrl_count) &&\
			(index < MAX_DSI_CTRLS_PER_DISPLAY); index++)
/**
 * enum dsi_pixel_format - DSI pixel formats
 * @DSI_PIXEL_FORMAT_RGB565:
+71 −77
Original line number Diff line number Diff line
@@ -65,8 +65,7 @@ static void dsi_display_mask_ctrl_error_interrupts(struct dsi_display *display,
	if (!display)
		return;

	for (i = 0; (i < display->ctrl_count) &&
			(i < MAX_DSI_CTRLS_PER_DISPLAY); i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl)
			continue;
@@ -100,7 +99,7 @@ static int dsi_display_config_clk_gating(struct dsi_display *display,
		return rc;
	}

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl->ctrl || (ctrl == mctrl))
			continue;
@@ -129,8 +128,7 @@ static void dsi_display_set_ctrl_esd_check_flag(struct dsi_display *display,
	if (!display)
		return;

	for (i = 0; (i < display->ctrl_count) &&
			(i < MAX_DSI_CTRLS_PER_DISPLAY); i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl)
			continue;
@@ -146,8 +144,7 @@ static void dsi_display_ctrl_irq_update(struct dsi_display *display, bool en)
	if (!display)
		return;

	for (i = 0; (i < display->ctrl_count) &&
			(i < MAX_DSI_CTRLS_PER_DISPLAY); i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl)
			continue;
@@ -257,7 +254,7 @@ static int dsi_display_cmd_engine_enable(struct dsi_display *display)
		goto done;
	}

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl->ctrl || (ctrl == m_ctrl))
			continue;
@@ -297,7 +294,7 @@ static int dsi_display_cmd_engine_disable(struct dsi_display *display)
		goto done;
	}

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl->ctrl || (ctrl == m_ctrl))
			continue;
@@ -366,7 +363,7 @@ static void dsi_display_aspace_cb_locked(void *cb_data, bool is_detach)
		}
	}

	for (cnt = 0; cnt < display->ctrl_count; cnt++) {
	display_for_each_ctrl(cnt, display) {
		display_ctrl = &display->ctrl[cnt];
		display_ctrl->ctrl->cmd_buffer_size = display->cmd_buffer_size;
		display_ctrl->ctrl->cmd_buffer_iova = display->cmd_buffer_iova;
@@ -523,7 +520,7 @@ static int dsi_host_alloc_cmd_tx_buffer(struct dsi_display *display)
		goto put_iova;
	}

	for (cnt = 0; cnt < display->ctrl_count; cnt++) {
	display_for_each_ctrl(cnt, display) {
		display_ctrl = &display->ctrl[cnt];
		display_ctrl->ctrl->cmd_buffer_size = SZ_4K;
		display_ctrl->ctrl->cmd_buffer_iova =
@@ -726,7 +723,7 @@ static int dsi_display_status_reg_read(struct dsi_display *display)
	if (!display->panel->sync_broadcast_en)
		goto exit;

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (ctrl == m_ctrl)
			continue;
@@ -884,7 +881,7 @@ static int dsi_display_ctrl_get_host_init_state(struct dsi_display *dsi_display,
	struct dsi_display_ctrl *ctrl;
	int i, rc = -EINVAL;

	for (i = 0 ; i < dsi_display->ctrl_count; i++) {
	display_for_each_ctrl(i, dsi_display) {
		ctrl = &dsi_display->ctrl[i];
		rc = dsi_ctrl_get_host_engine_init_state(ctrl->ctrl, state);
		if (rc)
@@ -942,7 +939,7 @@ static void _dsi_display_continuous_clk_ctrl(struct dsi_display *display,
	if (!display || !display->panel->host_config.force_hs_clk_lane)
		return;

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		dsi_ctrl_set_continuous_clk(ctrl->ctrl, enable);
	}
@@ -960,7 +957,7 @@ int dsi_display_soft_reset(void *display)

	dsi_display = display;

	for (i = 0 ; i < dsi_display->ctrl_count; i++) {
	display_for_each_ctrl(i, dsi_display) {
		ctrl = &dsi_display->ctrl[i];
		rc = dsi_ctrl_soft_reset(ctrl->ctrl);
		if (rc) {
@@ -995,7 +992,7 @@ static void _dsi_display_setup_misr(struct dsi_display *display)
{
	int i;

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		dsi_ctrl_setup_misr(display->ctrl[i].ctrl,
				display->misr_enable,
				display->misr_frame_count);
@@ -1015,8 +1012,7 @@ static bool dsi_display_get_cont_splash_status(struct dsi_display *display)
	struct dsi_display_ctrl *ctrl;
	struct dsi_ctrl_hw *hw;

	for (i = 0; (i < display->ctrl_count) &&
	     (i < MAX_DSI_CTRLS_PER_DISPLAY); i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &(display->ctrl[i]);
		if (!ctrl || !ctrl->ctrl)
			continue;
@@ -1080,7 +1076,7 @@ static ssize_t debugfs_dump_info_read(struct file *file,
			display->config.video_timing.h_active,
			display->config.video_timing.v_active);

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		len += snprintf(buf + len, (SZ_4K - len),
				"\tCTRL_%d:\n\t\tctrl = %s\n\t\tphy = %s\n",
				i, display->ctrl[i].ctrl->name,
@@ -1203,7 +1199,7 @@ static ssize_t debugfs_misr_read(struct file *file,
		goto error;
	}

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		dsi_ctrl = display->ctrl[i].ctrl;
		misr = dsi_ctrl_collect_misr(display->ctrl[i].ctrl);

@@ -1528,7 +1524,7 @@ static int dsi_display_debugfs_init(struct dsi_display *display)
		goto error_remove_dir;
	}

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		struct msm_dsi_phy *phy = display->ctrl[i].phy;

		if (!phy || !phy->name)
@@ -1695,7 +1691,7 @@ static int dsi_display_set_ulps(struct dsi_display *display, bool enable)
		return rc;
	}

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl->ctrl || (ctrl == m_ctrl))
			continue;
@@ -1758,7 +1754,7 @@ static int dsi_display_set_clamp(struct dsi_display *display, bool enable)
		return rc;
	}

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl->ctrl || (ctrl == m_ctrl))
			continue;
@@ -1809,7 +1805,7 @@ static int dsi_display_ctrl_setup(struct dsi_display *display)
		return rc;
	}

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl->ctrl || (ctrl == m_ctrl))
			continue;
@@ -1857,7 +1853,7 @@ static int dsi_display_phy_idle_on(struct dsi_display *display,
		return rc;
	}

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl->ctrl || (ctrl == m_ctrl))
			continue;
@@ -1889,7 +1885,7 @@ static int dsi_display_phy_idle_off(struct dsi_display *display)
		return -EINVAL;
	}

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		struct msm_dsi_phy *phy = display->ctrl[i].phy;

		if (!phy)
@@ -1910,7 +1906,7 @@ static int dsi_display_phy_idle_off(struct dsi_display *display)
		return rc;
	}

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl->ctrl || (ctrl == m_ctrl))
			continue;
@@ -1951,7 +1947,7 @@ void dsi_display_enable_event(struct drm_connector *connector,
	case SDE_CONN_EVENT_VID_FIFO_OVERFLOW:
	case SDE_CONN_EVENT_CMD_FIFO_UNDERFLOW:
		if (event_info) {
			for (i = 0; i < display->ctrl_count; i++)
			display_for_each_ctrl(i, display)
				display->ctrl[i].ctrl->recovery_cb =
							*event_info;
		}
@@ -1962,12 +1958,12 @@ void dsi_display_enable_event(struct drm_connector *connector,
	}

	if (enable) {
		for (i = 0; i < display->ctrl_count; i++)
		display_for_each_ctrl(i, display)
			dsi_ctrl_enable_status_interrupt(
					display->ctrl[i].ctrl, irq_status_idx,
					event_info);
	} else {
		for (i = 0; i < display->ctrl_count; i++)
		display_for_each_ctrl(i, display)
			dsi_ctrl_disable_status_interrupt(
					display->ctrl[i].ctrl, irq_status_idx);
	}
@@ -1987,8 +1983,7 @@ static void dsi_config_host_engine_state_for_cont_splash
	enum dsi_engine_state host_state = DSI_CTRL_ENGINE_ON;

	/* Sequence does not matter for split dsi usecases */
	for (i = 0; (i < display->ctrl_count) &&
			(i < MAX_DSI_CTRLS_PER_DISPLAY); i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl->ctrl)
			continue;
@@ -2005,7 +2000,7 @@ static int dsi_display_ctrl_power_on(struct dsi_display *display)
	struct dsi_display_ctrl *ctrl;

	/* Sequence does not matter for split dsi usecases */
	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl->ctrl)
			continue;
@@ -2038,7 +2033,7 @@ static int dsi_display_ctrl_power_off(struct dsi_display *display)
	struct dsi_display_ctrl *ctrl;

	/* Sequence does not matter for split dsi usecases */
	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl->ctrl)
			continue;
@@ -2146,7 +2141,7 @@ static int dsi_display_phy_power_on(struct dsi_display *display)
	struct dsi_display_ctrl *ctrl;

	/* Sequence does not matter for split dsi usecases */
	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl->ctrl)
			continue;
@@ -2177,7 +2172,7 @@ static int dsi_display_phy_power_off(struct dsi_display *display)
	struct dsi_display_ctrl *ctrl;

	/* Sequence does not matter for split dsi usecases */
	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl->phy)
			continue;
@@ -2215,7 +2210,7 @@ static int dsi_display_set_clk_src(struct dsi_display *display)
	}

	/* Turn on rest of the controllers */
	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl->ctrl || (ctrl == m_ctrl))
			continue;
@@ -2238,7 +2233,7 @@ static int dsi_display_phy_reset_config(struct dsi_display *display,
	int i;
	struct dsi_display_ctrl *ctrl;

	for (i = 0 ; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		rc = dsi_ctrl_phy_reset_config(ctrl->ctrl, enable);
		if (rc) {
@@ -2258,7 +2253,7 @@ static void dsi_display_toggle_resync_fifo(struct dsi_display *display)
	if (!display)
		return;

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		dsi_phy_toggle_resync_fifo(ctrl->phy);
	}
@@ -2267,7 +2262,7 @@ static void dsi_display_toggle_resync_fifo(struct dsi_display *display)
	 * After retime buffer synchronization we need to turn of clk_en_sel
	 * bit on each phy.
	 */
	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		dsi_phy_reset_clk_en_sel(ctrl->phy);
	}
@@ -2280,7 +2275,7 @@ static int dsi_display_ctrl_update(struct dsi_display *display)
	int i;
	struct dsi_display_ctrl *ctrl;

	for (i = 0 ; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		rc = dsi_ctrl_host_timing_update(ctrl->ctrl);
		if (rc) {
@@ -2314,7 +2309,7 @@ static int dsi_display_ctrl_init(struct dsi_display *display)
	 * the HW in bad state.
	 */
	if (!display->panel->ulps_suspend_enabled || !display->ulps_enabled) {
		for (i = 0 ; i < display->ctrl_count; i++) {
		display_for_each_ctrl(i, display) {
			ctrl = &display->ctrl[i];
			rc = dsi_ctrl_host_init(ctrl->ctrl,
					display->is_cont_splash_enabled);
@@ -2325,7 +2320,7 @@ static int dsi_display_ctrl_init(struct dsi_display *display)
			}
		}
	} else {
		for (i = 0 ; i < display->ctrl_count; i++) {
		display_for_each_ctrl(i, display) {
			ctrl = &display->ctrl[i];
			rc = dsi_ctrl_update_host_init_state(ctrl->ctrl, true);
			if (rc)
@@ -2348,7 +2343,7 @@ static int dsi_display_ctrl_deinit(struct dsi_display *display)
	int i;
	struct dsi_display_ctrl *ctrl;

	for (i = 0 ; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		rc = dsi_ctrl_host_deinit(ctrl->ctrl);
		if (rc) {
@@ -2383,7 +2378,7 @@ static int dsi_display_ctrl_host_enable(struct dsi_display *display)
		goto error;
	}

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl->ctrl || (ctrl == m_ctrl))
			continue;
@@ -2411,7 +2406,7 @@ static int dsi_display_ctrl_host_disable(struct dsi_display *display)
	struct dsi_display_ctrl *m_ctrl, *ctrl;

	m_ctrl = &display->ctrl[display->cmd_master_idx];
	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl->ctrl || (ctrl == m_ctrl))
			continue;
@@ -2449,7 +2444,7 @@ static int dsi_display_vid_engine_enable(struct dsi_display *display)
		goto error;
	}

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl->ctrl || (ctrl == m_ctrl))
			continue;
@@ -2478,7 +2473,7 @@ static int dsi_display_vid_engine_disable(struct dsi_display *display)

	m_ctrl = &display->ctrl[display->video_master_idx];

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl->ctrl || (ctrl == m_ctrl))
			continue;
@@ -2520,7 +2515,7 @@ static int dsi_display_phy_enable(struct dsi_display *display)
		goto error;
	}

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl->ctrl || (ctrl == m_ctrl))
			continue;
@@ -2553,7 +2548,7 @@ static int dsi_display_phy_disable(struct dsi_display *display)

	m_ctrl = &display->ctrl[display->clk_master_idx];

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl->ctrl || (ctrl == m_ctrl))
			continue;
@@ -2606,7 +2601,7 @@ static int dsi_display_broadcast_cmd(struct dsi_display *display,
		goto error;
	}

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (ctrl == m_ctrl)
			continue;
@@ -2659,7 +2654,7 @@ static int dsi_display_phy_sw_reset(struct dsi_display *display)
		goto error;
	}

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl->ctrl || (ctrl == m_ctrl))
			continue;
@@ -2991,8 +2986,7 @@ static void dsi_display_ctrl_isr_configure(struct dsi_display *display, bool en)
	if (!display)
		return;

	for (i = 0; (i < display->ctrl_count) &&
			(i < MAX_DSI_CTRLS_PER_DISPLAY); i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl)
			continue;
@@ -3077,7 +3071,7 @@ int dsi_pre_clkoff_cb(void *priv,
		dsi_display_ctrl_irq_update(display, false);

		/* cache the MISR values */
		for (i = 0; i < display->ctrl_count; i++) {
		display_for_each_ctrl(i, display) {
			ctrl = &display->ctrl[i];
			if (!ctrl->ctrl)
				continue;
@@ -3441,7 +3435,7 @@ static int dsi_display_parse_dt(struct dsi_display *display)
		goto error;
	}

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		struct dsi_display_ctrl *ctrl = &display->ctrl[i];
		int index;

@@ -3482,7 +3476,7 @@ static int dsi_display_res_init(struct dsi_display *display)
	int i;
	struct dsi_display_ctrl *ctrl;

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		ctrl->ctrl = dsi_ctrl_get(ctrl->ctrl_of_node);
		if (IS_ERR_OR_NULL(ctrl->ctrl)) {
@@ -3546,7 +3540,7 @@ static int dsi_display_res_deinit(struct dsi_display *display)
	if (rc)
		pr_err("clocks deinit failed, rc=%d\n", rc);

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		dsi_phy_put(ctrl->phy);
		dsi_ctrl_put(ctrl->ctrl);
@@ -3573,7 +3567,7 @@ static int dsi_display_validate_mode_set(struct dsi_display *display,
	 * 3. Phy should be disabled.
	 */

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if ((ctrl->power_state > DSI_CTRL_POWER_VREG_ON) ||
		    (ctrl->phy_enabled)) {
@@ -3725,7 +3719,7 @@ static int dsi_display_dfps_update(struct dsi_display *display,
	}

	/* Update the rest of the controllers */
	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		if (!ctrl->ctrl || (ctrl == m_ctrl))
			continue;
@@ -3951,7 +3945,7 @@ static int dsi_display_set_mode_sub(struct dsi_display *display,
		}
	}

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		rc = dsi_ctrl_update_host_config(ctrl->ctrl, &display->config,
				mode->dsi_mode_flags, display->dsi_clk_handle);
@@ -3963,7 +3957,7 @@ static int dsi_display_set_mode_sub(struct dsi_display *display,
	}

	if (priv_info->phy_timing_len) {
		for (i = 0; i < display->ctrl_count; i++) {
		display_for_each_ctrl(i, display) {
			ctrl = &display->ctrl[i];
			 rc = dsi_phy_set_timing_params(ctrl->phy,
				priv_info->phy_timing_val,
@@ -4212,7 +4206,7 @@ static int dsi_display_request_update_dsi_bitrate(struct dsi_display *display,

	display->config.bit_clk_rate_hz = bit_clk_rate;

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		struct dsi_display_ctrl *dsi_disp_ctrl = &display->ctrl[i];
		struct dsi_ctrl *ctrl = dsi_disp_ctrl->ctrl;
		u32 num_of_lanes = 0;
@@ -4457,7 +4451,7 @@ static int dsi_display_bind(struct device *dev,

	memset(&info, 0x0, sizeof(info));

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		display_ctrl = &display->ctrl[i];
		rc = dsi_ctrl_drv_init(display_ctrl->ctrl, display->root);
		if (rc) {
@@ -4542,7 +4536,7 @@ static int dsi_display_bind(struct device *dev,
	clk_cb.priv = display;
	clk_cb.dsi_clk_cb = dsi_display_clk_ctrl_cb;

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		display_ctrl = &display->ctrl[i];

		rc = dsi_ctrl_clk_cb_register(display_ctrl->ctrl, &clk_cb);
@@ -4578,7 +4572,7 @@ static int dsi_display_bind(struct device *dev,
	pr_info("Successfully bind display panel '%s'\n", display->name);
	display->drm_dev = drm;

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		display_ctrl = &display->ctrl[i];

		if (!display_ctrl->phy || !display_ctrl->ctrl)
@@ -4655,7 +4649,7 @@ static void dsi_display_unbind(struct device *dev,
		       display->name,
		       rc);

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		display_ctrl = &display->ctrl[i];

		rc = dsi_phy_drv_deinit(display_ctrl->phy);
@@ -5709,7 +5703,7 @@ int dsi_display_validate_mode(struct dsi_display *display,
		goto error;
	}

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		rc = dsi_ctrl_validate_timing(ctrl->ctrl, &adj_mode.timing);
		if (rc) {
@@ -5800,7 +5794,7 @@ int dsi_display_set_tpg_state(struct dsi_display *display, bool enable)
		return -EINVAL;
	}

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		rc = dsi_ctrl_set_tpg_state(ctrl->ctrl, enable);
		if (rc) {
@@ -5908,7 +5902,7 @@ static void dsi_display_handle_fifo_overflow(struct work_struct *work)
		goto end;

	/* reset ctrl and lanes */
	for (i = 0 ; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		rc = dsi_ctrl_reset(ctrl->ctrl, mask);
		rc = dsi_phy_lane_reset(ctrl->phy);
@@ -5928,7 +5922,7 @@ static void dsi_display_handle_fifo_overflow(struct work_struct *work)
	}

	/* Enable Video mode for DSI controller */
	for (i = 0 ; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		dsi_ctrl_vid_engine_en(ctrl->ctrl, true);
	}
@@ -5974,7 +5968,7 @@ static void dsi_display_handle_lp_rx_timeout(struct work_struct *work)
		goto end;

	/* reset ctrl and lanes */
	for (i = 0 ; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		rc = dsi_ctrl_reset(ctrl->ctrl, mask);
		rc = dsi_phy_lane_reset(ctrl->phy);
@@ -5993,7 +5987,7 @@ static void dsi_display_handle_lp_rx_timeout(struct work_struct *work)
	}

	/* Enable Video mode for DSI controller */
	for (i = 0 ; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		dsi_ctrl_vid_engine_en(ctrl->ctrl, true);
	}
@@ -6063,7 +6057,7 @@ static void dsi_display_register_error_handler(struct dsi_display *display)
	event_info.event_cb = dsi_display_cb_error_handler;
	event_info.event_usr_ptr = display;

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		ctrl->ctrl->irq_info.irq_err_cb = event_info;
	}
@@ -6077,7 +6071,7 @@ static void dsi_display_unregister_error_handler(struct dsi_display *display)
	if (!display)
		return;

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		ctrl = &display->ctrl[i];
		memset(&ctrl->ctrl->irq_info.irq_err_cb,
				0, sizeof(struct dsi_event_cb_info));
@@ -6354,7 +6348,7 @@ static int dsi_display_set_roi(struct dsi_display *display,
	if (!roi_caps->enabled)
		return 0;

	for (i = 0; i < display->ctrl_count; i++) {
	display_for_each_ctrl(i, display) {
		struct dsi_display_ctrl *ctrl = &display->ctrl[i];
		struct dsi_rect ctrl_roi;
		bool changed = false;
@@ -6430,7 +6424,7 @@ int dsi_display_pre_kickoff(struct drm_connector *connector,
		 * not to impact DRM commit. The clock updating would be
		 * deferred to the next DRM commit.
		 */
		for (i = 0; i < display->ctrl_count; i++) {
		display_for_each_ctrl(i, display) {
			struct dsi_ctrl *ctrl = display->ctrl[i].ctrl;
			int ret = 0;

+1 −1
Original line number Diff line number Diff line
@@ -749,7 +749,7 @@ int dsi_conn_post_kickoff(struct drm_connector *connector)
		}

		/* Update the rest of the controllers */
		for (i = 0; i < display->ctrl_count; i++) {
		display_for_each_ctrl(i, display) {
			ctrl = &display->ctrl[i];
			if (!ctrl->ctrl || (ctrl == m_ctrl))
				continue;