Parcourir la source

Merge "disp: msm: dsi: enable DMA cmd scheduling for video mode panels"

qctecmdr il y a 4 ans
Parent
commit
93331df7d7
1 fichiers modifiés avec 15 ajouts et 2 suppressions
  1. 15 2
      msm/dsi/dsi_ctrl.c

+ 15 - 2
msm/dsi/dsi_ctrl.c

@@ -1373,8 +1373,21 @@ static void dsi_kickoff_msg_tx(struct dsi_ctrl *dsi_ctrl,
 		dsi_hw_ops.reset_trig_ctrl(&dsi_ctrl->hw,
 		dsi_hw_ops.reset_trig_ctrl(&dsi_ctrl->hw,
 				&dsi_ctrl->host_config.common_config);
 				&dsi_ctrl->host_config.common_config);
 
 
-	/* check if custom dma scheduling line needed */
-	if (flags & DSI_CTRL_CMD_CUSTOM_DMA_SCHED)
+	/*
+	 * Always enable DMA scheduling for video mode panel.
+	 *
+	 * In video mode panel, if the DMA is triggered very close to
+	 * the beginning of the active window and the DMA transfer
+	 * happens in the last line of VBP, then the HW state will
+	 * stay in ‘wait’ and return to ‘idle’ in the first line of VFP.
+	 * But somewhere in the middle of the active window, if SW
+	 * disables DSI command mode engine while the HW is still
+	 * waiting and re-enable after timing engine is OFF. So the
+	 * HW never ‘sees’ another vblank line and hence it gets
+	 * stuck in the ‘wait’ state.
+	 */
+	if ((flags & DSI_CTRL_CMD_CUSTOM_DMA_SCHED) ||
+		(dsi_ctrl->host_config.panel_mode == DSI_OP_VIDEO_MODE))
 		dsi_configure_command_scheduling(dsi_ctrl, cmd_mem);
 		dsi_configure_command_scheduling(dsi_ctrl, cmd_mem);
 
 
 	dsi_ctrl->cmd_mode = (dsi_ctrl->host_config.panel_mode ==
 	dsi_ctrl->cmd_mode = (dsi_ctrl->host_config.panel_mode ==