* signaling txdone for synchronos mailboxes
@ 2026-08-19 10:00 Uwe Kleine-König
0 siblings, 0 replies; only message in thread
From: Uwe Kleine-König @ 2026-08-19 10:00 UTC (permalink / raw)
To: Jassi Brar; +Cc: linux-kernel
[-- Attachment #1: Type: text/plain, Size: 2687 bytes --]
Hello,
I'm working on porting a mailbox/remoteproc driver from a vendor tree[1]
to mainline. One thing that is unclear to me is how txdone should be
signalled on that hardware. On that platform there is no feedback on
how/when the remote side saw/processed the message and the local side is
immediately ready to send the next signal.
So both MBOX_TXDONE_BY_IRQ and MBOX_TXDONE_BY_POLL are ruled out. It's
not completely clear to me how MBOX_TXDONE_BY_ACK is supposed to work
and thus also if that is the way to go for that driver.
Who is supposed to call mbox_client_txdone()? From what I read I'd
expect that it should be called by the client once it saw some return
signal---probably using a higher level protocol? My current workaround
is that mbox_client_txdone() is called directly after
mbox_send_message(), but that feels wrong because then the client has to
know the that mailbox in use needs that function call to progress.
So a saner approach would be to call tx_tick() from the .send_data()
callback as there it's known that the controller needs it. Currently
that doesn't work directly as &chan->lock is held by msg_submit() when
.send_data() is called and tx_tick() grabs that lock, too. If that is
the right approach, we'd need a variant of tx_tick() that assumes that
the lock is already taken. Does that make sense?
Looking at the first few callers of mbox_client_txdone():
- drivers/acpi/cppc_acpi.c has:
mbox_send_message(pcc_ss_data->pcc_channel->mchan, &cmd);
...
ret = check_pcc_chan(pcc_ss_id, true);
...
if (pcc_ss_data->pcc_channel->mchan->mbox->txdone_irq)
mbox_chan_txdone(pcc_ss_data->pcc_channel->mchan, ret);
else
mbox_client_txdone(pcc_ss_data->pcc_channel->mchan, ret);
That looks like the client has to know stuff about the internals of
the mailbox, which is ugly and feels like an incomplete abstraction.
- drivers/clk/hisilicon/clk-hi3660-stub.c has:
mbox_send_message(stub_clk_chan.mbox, stub_clk->msg);
mbox_client_txdone(stub_clk_chan.mbox, 0);
and so also knows that the used mailbox has MBOX_TXDONE_BY_ACK and
instantly assumes the message to be sent.
- drivers/crypto/bcm/cipher.c is similar to drivers/acpi/cppc_acpi.c
- drivers/devfreq/hisi_uncore_freq.c looks as if it should use
MBOX_TXDONE_BY_POLL.
- drivers/dma/bcm-sba-raid.c is similar to drivers/acpi/cppc_acpi.c,
too
- drivers/firmware/arm_scmi/transports/mailbox.c seems to be a
legitimate user of mbox_client_txdone(), only calling it after some
reply was received from the other side. I wonder however how the
driver knows that the used mailbox uses MBOX_TXDONE_BY_ACK?
Any thoughts?
Best regards
Uwe
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2026-08-19 10:00 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-19 10:00 signaling txdone for synchronos mailboxes Uwe Kleine-König
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.