[PATCH 2/3] mailbox: add cmdq_mbox_flush to clear all task before suspend

jason-jh.lin jason-jh.lin at mediatek.com
Tue Nov 16 22:41:57 PST 2021


CMDQ driver will occupy GCE clock to execute the task in GCE thread.

So call cmdq_mbox_flush to clear all task in GCE thread before
CMDQ suspend.

Signed-off-by: jason-jh.lin <jason-jh.lin at mediatek.com>
---
 drivers/mailbox/mtk-cmdq-mailbox.c | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/drivers/mailbox/mtk-cmdq-mailbox.c b/drivers/mailbox/mtk-cmdq-mailbox.c
index 03f9ed4c5131..28cadfc0091b 100644
--- a/drivers/mailbox/mtk-cmdq-mailbox.c
+++ b/drivers/mailbox/mtk-cmdq-mailbox.c
@@ -484,21 +484,18 @@ static int cmdq_suspend(struct device *dev)
 	struct cmdq *cmdq = dev_get_drvdata(dev);
 	struct cmdq_thread *thread;
 	int i;
-	bool task_running = false;
 
 	cmdq->suspended = true;
 
 	for (i = 0; i < cmdq->thread_nr; i++) {
 		thread = &cmdq->thread[i];
 		if (!list_empty(&thread->task_busy_list)) {
-			task_running = true;
-			break;
+			/* try to clear all task in this thread */
+			cmdq_mbox_flush(thread->chan, 2000);
+			dev_warn(dev, "thread[%d] exist running task(s) in suspend\n", i);
 		}
 	}
 
-	if (task_running)
-		dev_warn(dev, "exist running task(s) in suspend\n");
-
 	clk_bulk_unprepare(cmdq->gce_num, cmdq->clocks);
 
 	return 0;
-- 
2.18.0




More information about the Linux-mediatek mailing list