Message ID | 20230823151332.28811-5-shawn.sung@mediatek.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Support IGT in display driver | expand |
Hi, Hsiao-chien: On Wed, 2023-08-23 at 23:13 +0800, Hsiao Chien Sung wrote: > Do not disable CMDQ thread if it is a loop. Once loop thread does not insert CMDQ_CODE_EOC command, this patch could be dropped. Regards, CK > > Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com> > --- > drivers/mailbox/mtk-cmdq-mailbox.c | 5 +++++ > include/linux/mailbox/mtk-cmdq-mailbox.h | 1 + > 2 files changed, 6 insertions(+) > > diff --git a/drivers/mailbox/mtk-cmdq-mailbox.c > b/drivers/mailbox/mtk-cmdq-mailbox.c > index b18d47ea13a0..88ff39a28415 100644 > --- a/drivers/mailbox/mtk-cmdq-mailbox.c > +++ b/drivers/mailbox/mtk-cmdq-mailbox.c > @@ -264,6 +264,11 @@ static void cmdq_thread_irq_handler(struct cmdq > *cmdq, > > curr_pa = readl(thread->base + CMDQ_THR_CURR_ADDR) << cmdq- > >pdata->shift; > > + task = list_first_entry_or_null(&thread->task_busy_list, > + struct cmdq_task, list_entry); > + if (task && task->pkt->loop) > + return; > + > list_for_each_entry_safe(task, tmp, &thread->task_busy_list, > list_entry) { > task_end_pa = task->pa_base + task->pkt->cmd_buf_size; > diff --git a/include/linux/mailbox/mtk-cmdq-mailbox.h > b/include/linux/mailbox/mtk-cmdq-mailbox.h > index a8f0070c7aa9..f78a08e7c6ed 100644 > --- a/include/linux/mailbox/mtk-cmdq-mailbox.h > +++ b/include/linux/mailbox/mtk-cmdq-mailbox.h > @@ -76,6 +76,7 @@ struct cmdq_pkt { > size_t cmd_buf_size; /* command occupied > size */ > size_t buf_size; /* real buffer size */ > void *cl; > + bool loop; > }; > > u8 cmdq_get_shift_pa(struct mbox_chan *chan);
diff --git a/drivers/mailbox/mtk-cmdq-mailbox.c b/drivers/mailbox/mtk-cmdq-mailbox.c index b18d47ea13a0..88ff39a28415 100644 --- a/drivers/mailbox/mtk-cmdq-mailbox.c +++ b/drivers/mailbox/mtk-cmdq-mailbox.c @@ -264,6 +264,11 @@ static void cmdq_thread_irq_handler(struct cmdq *cmdq, curr_pa = readl(thread->base + CMDQ_THR_CURR_ADDR) << cmdq->pdata->shift; + task = list_first_entry_or_null(&thread->task_busy_list, + struct cmdq_task, list_entry); + if (task && task->pkt->loop) + return; + list_for_each_entry_safe(task, tmp, &thread->task_busy_list, list_entry) { task_end_pa = task->pa_base + task->pkt->cmd_buf_size; diff --git a/include/linux/mailbox/mtk-cmdq-mailbox.h b/include/linux/mailbox/mtk-cmdq-mailbox.h index a8f0070c7aa9..f78a08e7c6ed 100644 --- a/include/linux/mailbox/mtk-cmdq-mailbox.h +++ b/include/linux/mailbox/mtk-cmdq-mailbox.h @@ -76,6 +76,7 @@ struct cmdq_pkt { size_t cmd_buf_size; /* command occupied size */ size_t buf_size; /* real buffer size */ void *cl; + bool loop; }; u8 cmdq_get_shift_pa(struct mbox_chan *chan);
Do not disable CMDQ thread if it is a loop. Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com> --- drivers/mailbox/mtk-cmdq-mailbox.c | 5 +++++ include/linux/mailbox/mtk-cmdq-mailbox.h | 1 + 2 files changed, 6 insertions(+)