diff --git a/msm/dsi/dsi_ctrl.c b/msm/dsi/dsi_ctrl.c index 74ba24793f..f2d6d2ea06 100644 --- a/msm/dsi/dsi_ctrl.c +++ b/msm/dsi/dsi_ctrl.c @@ -1,5 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* + * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved. * Copyright (c) 2016-2021, The Linux Foundation. All rights reserved. */ @@ -422,6 +423,7 @@ static void dsi_ctrl_clear_dma_status(struct dsi_ctrl *dsi_ctrl) static void dsi_ctrl_post_cmd_transfer(struct dsi_ctrl *dsi_ctrl) { int rc = 0; + struct dsi_ctrl_hw_ops dsi_hw_ops = dsi_ctrl->hw.ops; struct dsi_clk_ctrl_info clk_info; u32 mask = BIT(DSI_FIFO_OVERFLOW); @@ -438,6 +440,10 @@ static void dsi_ctrl_post_cmd_transfer(struct dsi_ctrl *dsi_ctrl) dsi_ctrl_dma_cmd_wait_for_done(dsi_ctrl); } + if (dsi_ctrl->hw.reset_trig_ctrl) + dsi_hw_ops.reset_trig_ctrl(&dsi_ctrl->hw, + &dsi_ctrl->host_config.common_config); + /* Command engine disable, unmask overflow, remove vote on clocks and gdsc */ rc = dsi_ctrl_set_cmd_engine_state(dsi_ctrl, DSI_CTRL_ENGINE_OFF, false); if (rc) @@ -1377,10 +1383,6 @@ static void dsi_kickoff_msg_tx(struct dsi_ctrl *dsi_ctrl, SDE_EVT32(dsi_ctrl->cell_index, SDE_EVTLOG_FUNC_ENTRY, flags, msg->flags); - if (dsi_ctrl->hw.reset_trig_ctrl) - dsi_hw_ops.reset_trig_ctrl(&dsi_ctrl->hw, - &dsi_ctrl->host_config.common_config); - if (dsi_hw_ops.splitlink_cmd_setup && split_link->enabled) dsi_hw_ops.splitlink_cmd_setup(&dsi_ctrl->hw, &dsi_ctrl->host_config.common_config, flags); diff --git a/msm/dsi/dsi_display.c b/msm/dsi/dsi_display.c index e48b9406a8..3ff64b8e2c 100644 --- a/msm/dsi/dsi_display.c +++ b/msm/dsi/dsi_display.c @@ -1,5 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* + * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved. * Copyright (c) 2016-2021, The Linux Foundation. All rights reserved. */ @@ -704,14 +705,18 @@ static void dsi_display_set_cmd_tx_ctrl_flags(struct dsi_display *display, /* * Set flags for command scheduling. * 1) In video mode command DMA scheduling is default. - * 2) In command mode command DMA scheduling depends on message + * 2) In command mode unicast command DMA scheduling depends on message * flag and TE needs to be running. + * 3) In command mode broadcast command DMA scheduling is default and + * TE needs to be running. */ if (display->panel->panel_mode == DSI_OP_VIDEO_MODE) { flags |= DSI_CTRL_CMD_CUSTOM_DMA_SCHED; } else { if (msg->flags & MIPI_DSI_MSG_CMD_DMA_SCHED) flags |= DSI_CTRL_CMD_CUSTOM_DMA_SCHED; + if (flags & DSI_CTRL_CMD_BROADCAST) + flags |= DSI_CTRL_CMD_CUSTOM_DMA_SCHED; if (!display->enabled) flags &= ~DSI_CTRL_CMD_CUSTOM_DMA_SCHED; }