disp: msm: dsi: flush CMD DMA of all ctrls in case of previous broadcast

We currently wait for the completion of previous ASYNC command
transfers on a controller before initiating a new command transfer
on that controller. However, in the case of split DSI usage, the
controllers can encounter issues if a unicast command transfer
occurs before the previous broadcast is complete on both controller.

To prevent this issue, it’s required to flush the CMD DMA of both
controllers before initiating the unicast command transfer following
a previous broadcast.

Change-Id: If2830bea81e32ab26d3b91754bcdf047c3cba483
Signed-off-by: Srihitha Tangudu <quic_tangudu@quicinc.com>
This commit is contained in:
Srihitha Tangudu
2024-05-17 13:08:35 +05:30
committed by Anand Tarakh
父節點 89c5866e4b
當前提交 5c4f488f8a
共有 3 個文件被更改,包括 21 次插入3 次删除

查看文件

@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2016-2021, The Linux Foundation. All rights reserved.
*/
@@ -3450,6 +3450,17 @@ int dsi_host_transfer_sub(struct mipi_dsi_host *host, struct dsi_cmd_desc *cmd)
dsi_display_set_cmd_tx_ctrl_flags(display, cmd);
/*
* Wait until any previous broadcast commands with ASYNC waits have been scheduled
* and completed on both controllers.
*/
display_for_each_ctrl(i, display) {
ctrl = &display->ctrl[i];
if ((ctrl->ctrl->pending_cmd_flags & DSI_CTRL_CMD_BROADCAST) &&
ctrl->ctrl->post_tx_queued)
dsi_ctrl_flush_cmd_dma_queue(ctrl->ctrl);
}
if (cmd->ctrl_flags & DSI_CTRL_CMD_BROADCAST) {
rc = dsi_display_broadcast_cmd(display, cmd);
if (rc) {