Message ID | 1486010836-25228-2-git-send-email-anup.patel@broadcom.com (mailing list archive) |
---|---|
State | Not Applicable |
Delegated to: | Herbert Xu |
Headers | show |
On Thu, Feb 2, 2017 at 10:17 AM, Anup Patel <anup.patel@broadcom.com> wrote: > The remote processor can have DMAENGINE capabilities and client > can pass data to be processed via main memory. In such cases, > the client will require DMAble memory for remote processor. > > This patch adds new API mbox_channel_device() which can be > used by clients to get struct device pointer of underlying > mailbox controller. This struct device pointer of mailbox > controller can be used by clients to allocate DMAble memory > for remote processor. > IIUC, DT already provides a way for what you need.
On Fri, Feb 3, 2017 at 5:35 PM, Jassi Brar <jassisinghbrar@gmail.com> wrote: > On Thu, Feb 2, 2017 at 10:17 AM, Anup Patel <anup.patel@broadcom.com> wrote: >> The remote processor can have DMAENGINE capabilities and client >> can pass data to be processed via main memory. In such cases, >> the client will require DMAble memory for remote processor. >> >> This patch adds new API mbox_channel_device() which can be >> used by clients to get struct device pointer of underlying >> mailbox controller. This struct device pointer of mailbox >> controller can be used by clients to allocate DMAble memory >> for remote processor. >> > IIUC, DT already provides a way for what you need. Thanks for the suggestion. I will explore in this direction and try to avoid this patch in next revision. Can you please have a look at FlexRM driver which I had submitted previously? https://lkml.org/lkml/2017/1/5/291 https://lkml.org/lkml/2017/1/5/293 Regards, Anup
diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c index 4671f8a..d4380fc 100644 --- a/drivers/mailbox/mailbox.c +++ b/drivers/mailbox/mailbox.c @@ -281,6 +281,27 @@ int mbox_send_message(struct mbox_chan *chan, void *mssg) EXPORT_SYMBOL_GPL(mbox_send_message); /** + * mbox_channel_device - Get device pointer of a mailbox channel. + * @chan: Mailbox channel assigned to this client. + * + * The remote processor can have DMAENGINE capabilities and client + * can pass data to be processed via main memory. In such cases, + * the client will require struct device pointer of the mailbox + * channel to map/unmap/allocate/free DMAble memory. + * + * Return: Pointer to the struct device of mailbox channel. + * ERR_PTR on failure. + */ +struct device *mbox_channel_device(struct mbox_chan *chan) +{ + if (!chan || !chan->cl) + return ERR_PTR(-EINVAL); + + return chan->mbox->dev; +} +EXPORT_SYMBOL_GPL(mbox_channel_device); + +/** * mbox_request_channel - Request a mailbox channel. * @cl: Identity of the client requesting the channel. * @index: Index of mailbox specifier in 'mboxes' property. diff --git a/include/linux/mailbox_client.h b/include/linux/mailbox_client.h index 4434871..3daffad 100644 --- a/include/linux/mailbox_client.h +++ b/include/linux/mailbox_client.h @@ -40,6 +40,7 @@ struct mbox_client { void (*tx_done)(struct mbox_client *cl, void *mssg, int r); }; +struct device *mbox_channel_device(struct mbox_chan *chan); struct mbox_chan *mbox_request_channel_byname(struct mbox_client *cl, const char *name); struct mbox_chan *mbox_request_channel(struct mbox_client *cl, int index);