On 23/08/2019 13:36, Matthias Brugger wrote: > > > On 20/08/2019 10:49, Bibby Hsieh wrote: >> GCE hardware stored event information in own internal sysram, >> if the initial value in those sysram is not zero value >> it will cause a situation that gce can wait the event immediately >> after client ask gce to wait event but not really trigger the >> corresponding hardware. >> >> In order to make sure that the wait event function is >> exactly correct, we need to clear the sysram value in >> cmdq initial flow. >> >> Fixes: 623a6143a845 ("mailbox: mediatek: Add Mediatek CMDQ driver") >> >> Signed-off-by: Bibby Hsieh <bibby.hsieh@xxxxxxxxxxxx> >> Reviewed-by: CK Hu <ck.hu@xxxxxxxxxxxx> I oversaw some things/nits. Patch subject should be: mailbox: mediatek: cmdq: clear the event in cmdq initial flow >> --- >> drivers/mailbox/mtk-cmdq-mailbox.c | 5 +++++ >> include/linux/mailbox/mtk-cmdq-mailbox.h | 2 ++ >> include/linux/soc/mediatek/mtk-cmdq.h | 3 --- >> 3 files changed, 7 insertions(+), 3 deletions(-) >> >> diff --git a/drivers/mailbox/mtk-cmdq-mailbox.c b/drivers/mailbox/mtk-cmdq-mailbox.c >> index 69daaadc3a5f..9a6ce9f5a7db 100644 >> --- a/drivers/mailbox/mtk-cmdq-mailbox.c >> +++ b/drivers/mailbox/mtk-cmdq-mailbox.c >> @@ -21,6 +21,7 @@ >> #define CMDQ_NUM_CMD(t) (t->cmd_buf_size / CMDQ_INST_SIZE) >> >> #define CMDQ_CURR_IRQ_STATUS 0x10 >> +#define CMDQ_SYNC_TOKEN_UPDATE 0x68 >> #define CMDQ_THR_SLOT_CYCLES 0x30 >> #define CMDQ_THR_BASE 0x100 >> #define CMDQ_THR_SIZE 0x80 >> @@ -104,8 +105,12 @@ static void cmdq_thread_resume(struct cmdq_thread *thread) >> >> static void cmdq_init(struct cmdq *cmdq) >> { >> + int i; >> + >> WARN_ON(clk_enable(cmdq->clock) < 0); >> writel(CMDQ_THR_ACTIVE_SLOT_CYCLES, cmdq->base + CMDQ_THR_SLOT_CYCLES); >> + for (i = 0; i <= CMDQ_MAX_EVENT; i++) >> + writel(i, cmdq->base + CMDQ_SYNC_TOKEN_UPDATE); I think CMDQ_SYNC_TOKEN_UPDATE is not a good name for the define. Any reason why we couldn't name it something like CMDQ_SYNC_TOKEN_RESET? >> clk_disable(cmdq->clock); >> } >> >> diff --git a/include/linux/mailbox/mtk-cmdq-mailbox.h b/include/linux/mailbox/mtk-cmdq-mailbox.h >> index ccb73422c2fa..911475da7a53 100644 >> --- a/include/linux/mailbox/mtk-cmdq-mailbox.h >> +++ b/include/linux/mailbox/mtk-cmdq-mailbox.h >> @@ -19,6 +19,8 @@ >> #define CMDQ_WFE_UPDATE BIT(31) >> #define CMDQ_WFE_WAIT BIT(15) >> #define CMDQ_WFE_WAIT_VALUE 0x1 >> +/** cmdq event maximum */ While at it, add a new line before the comment. Regards, Matthias >> +#define CMDQ_MAX_EVENT 0x3ff >> >> /* >> * CMDQ_CODE_MASK: >> diff --git a/include/linux/soc/mediatek/mtk-cmdq.h b/include/linux/soc/mediatek/mtk-cmdq.h >> index 54ade13a9b15..4e8899972db4 100644 >> --- a/include/linux/soc/mediatek/mtk-cmdq.h >> +++ b/include/linux/soc/mediatek/mtk-cmdq.h >> @@ -13,9 +13,6 @@ >> >> #define CMDQ_NO_TIMEOUT 0xffffffffu >> >> -/** cmdq event maximum */ >> -#define CMDQ_MAX_EVENT 0x3ff >> - >> struct cmdq_pkt; >> >> struct cmdq_client { >>