From c9ab55f7a5c58915cad292d57be1aa9de24494a8 Mon Sep 17 00:00:00 2001 From: GuEe-GUI <2991707448@qq.com> Date: Fri, 6 Dec 2024 09:19:59 +0800 Subject: [PATCH] [DM/MAILBOX] Support PIC mailbox in AMP Should registers clean by master in AMP. Signed-off-by: GuEe-GUI <2991707448@qq.com> --- components/drivers/mailbox/mailbox-pic.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/components/drivers/mailbox/mailbox-pic.c b/components/drivers/mailbox/mailbox-pic.c index 187abe0122..dbc90f013e 100644 --- a/components/drivers/mailbox/mailbox-pic.c +++ b/components/drivers/mailbox/mailbox-pic.c @@ -66,6 +66,7 @@ static rt_err_t pic_mbox_request(struct rt_mbox_chan *chan) struct pic_mbox *pic_mbox = raw_to_pic_mbox(chan->ctrl); HWREG32(pic_mbox->regs + MAILBOX_IMASK) &= ~RT_BIT(index); + HWREG32(pic_mbox->regs + MAILBOX_ISTATE) = 0; return RT_EOK; } @@ -89,6 +90,11 @@ static rt_err_t pic_mbox_send(struct rt_mbox_chan *chan, const void *data) rt_thread_yield(); } + if (HWREG32(pic_mbox->peer_regs + MAILBOX_IMASK) & RT_BIT(index)) + { + return -RT_ERROR; + } + level = rt_spin_lock_irqsave(&pic_mbox->lock); HWREG32(pic_mbox->regs + MAILBOX_MSG(index)) = *(rt_uint32_t *)data; @@ -187,6 +193,12 @@ static rt_err_t pic_mbox_probe(struct rt_platform_device *pdev) } pic_mbox->peer_regs = pic_mbox->regs + size / 2; + + /* Init by the captain */ + HWREG32(pic_mbox->regs + MAILBOX_IMASK) = 0xffffffff; + HWREG32(pic_mbox->regs + MAILBOX_ISTATE) = 0; + HWREG32(pic_mbox->peer_regs + MAILBOX_IMASK) = 0xffffffff; + HWREG32(pic_mbox->peer_regs + MAILBOX_ISTATE) = 0; } else {