summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Vasut <marek.vasut+renesas@mailbox.org>2025-10-27 17:38:38 +0100
committerMarek Vasut <marek.vasut+renesas@mailbox.org>2025-11-07 17:40:42 +0100
commit1b102d2fe17884d46cb555474310c8c942014d58 (patch)
tree49da1fb46869333d819023e847d334df608e95ea
parentbc47ca03b801619c6510600719d74e776b711ac3 (diff)
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 <marek.vasut+renesas@mailbox.org> Reviewed-by: Alice Guo <alice.guo@nxp.com>
-rw-r--r--drivers/mailbox/mailbox-uclass.c9
1 files changed, 9 insertions, 0 deletions
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