Thread (28 messages) 28 messages, 5 authors, 2017-05-16

Re: [PATCH v4 3/5] soc: qcom: Introduce APCS IPC driver

From: Jassi Brar <hidden>
Date: 2017-05-11 02:07:06
Also in: linux-arm-msm, linux-remoteproc, lkml

On Thu, May 11, 2017 at 12:30 AM, Bjorn Andersson
[off-list ref] wrote:
On Tue 09 May 19:33 PDT 2017, Jassi Brar wrote:
quoted
On Wed, May 10, 2017 at 12:41 AM, Bjorn Andersson
[off-list ref] wrote:
quoted
On Tue 09 May 09:41 PDT 2017, Jassi Brar wrote:
[..]
quoted
quoted
The part where this piece of hardware differs from the other mailboxes
is that TX is done as send_data() returns and in the realm of the
mailbox there is no such thing as "tx done". So how about we extend the
framework to handle stateless and message-less doorbells?
This is a very common usecase. It would be unfair to other platforms
to modify the API just because you find it awkward to call
mbox_client_txdone() right after mbox_send_message(). For example,
drivers/firmware/tegra/bpmp.c
I'd much rather have mbox_send_message_and_tick() than implant a new api.
I wasn't proposing to implement a new API
Introducing mbox_controller.txdone_none for underlying mailbox
controllers is indeed a new API.
; for mailbox controllers with
tx method set to POLL the client will only have call mbox_send_data()
nothing else. So I proposed [1] yesterday, that will make the apcs
controller behave just like this case.
mbox_send_data()    for POLL usecase
mbox_send_data()+mbox_client_txdone()   for your usecase.
Looking at it again, making sure that tx method is TXDONE_BY_ACK should
make mbox_client_txdone() essentially a nop, only locking the channel
spinlock twice and then returning, as send_data() didn't leave any data
in the queue. Is my understanding of this correct?
Not exactly. tx_tick() frees the busy flag 'chan->active_req'.
So please let me know what you think about [1], if you don't like it
I'll fix the things pointed to by Stephen and we'll have to live with
the two calls.
My last reply was about [1]. Other platforms call
mbox_send_data()+mbox_client_txdone() see
drivers/firmware/tegra/bpmp.c, but you want to introduce another API
in the innards of the framework. If we must do it, it should be done
above the framework by introducing

void mbox_send_message_and_tick(struct mbox_chan *chan, void *mssg)
           OR
void mbox_ring_doorbell(struct mbox_chan *chan, void *mssg)
{
   (void)mbox_send_message(chan, mssg);
   mbox_client_txdone(chan, 0);
}
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help