> -----邮件原件-----
> 发件人: U-Boot <[email protected]> 代表 Marek Vasut
> 发送时间: 2025年10月28日 0:39
> 收件人: [email protected]
> 抄送: Marek Vasut <[email protected]>; Alice Guo
> <[email protected]>; Jamie Gibbons <[email protected]>;
> Nobuhiro Iwamatsu <[email protected]>; Peng Fan <[email protected]>;
> Tom Rini <[email protected]>; Tuyen Dang <[email protected]>;
> Viorel Suman <[email protected]>; Ye Li <[email protected]>
> 主题: [PATCH] mailbox: Allow operation without .recv callback
> 
> Some shared memory mailboxes may have empty receive operation, because
> the data are polled by upper layers directly from the shared memory region, 
> and
> there is no completion interrupt or bit of any sort. Allow empty .recv 
> callback,
> and if the .recv callback is empty, exit from mbox_recv() right away, because 
> any
> polling for completion here would be meaningless.
> 
> Signed-off-by: Marek Vasut <[email protected]>
> ---
> Cc: Alice Guo <[email protected]>
> Cc: Jamie Gibbons <[email protected]>
> Cc: Nobuhiro Iwamatsu <[email protected]>
> Cc: Peng Fan <[email protected]>
> Cc: Tom Rini <[email protected]>
> Cc: Tuyen Dang <[email protected]>
> Cc: Viorel Suman <[email protected]>
> Cc: Ye Li <[email protected]>
> Cc: [email protected]
> ---
>  drivers/mailbox/mailbox-uclass.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/drivers/mailbox/mailbox-uclass.c 
> b/drivers/mailbox/mailbox-uclass.c
> index 4bf4987ce0a..fef437a4281 100644
> --- a/drivers/mailbox/mailbox-uclass.c
> +++ b/drivers/mailbox/mailbox-uclass.c
> @@ -132,6 +132,15 @@ int mbox_recv(struct mbox_chan *chan, void *data,
> ulong timeout_us)
>       debug("%s(chan=%p, data=%p, timeout_us=%ld)\n", __func__, chan, data,
>             timeout_us);
> 
> +     /*
> +      * Some shared memory mailboxes may have empty receive operation,
> +      * because the data are polled by upper layers directly from the
> +      * shared memory region, and there is no completion interrupt or
> +      * bit of any sort.
> +      */
> +     if (!ops->recv)
> +             return 0;
> +
>       start_time = timer_get_us();
>       /*
>        * Account for partial us ticks, but if timeout_us is 0, ensure we
> --
> 2.51.0

Reviewed-by: Alice Guo <[email protected]>

Reply via email to