From: Grant Likely <grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>
To: Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>,
linux-arm-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Cc: Vinod Koul <vinod.koul-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>,
Viresh Kumar
<viresh.kumar-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org,
Greg Kroah-Hartman
<gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org>,
spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
Andy Shevchenko
<andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>,
Jiri Slaby <jslaby-AlSwsSmVLrQ@public.gmane.org>
Subject: Re: [PATCH 3/5] serial: pl011: use generic DMA slave configuration if possible
Date: Tue, 05 Feb 2013 14:22:38 +0000 [thread overview]
Message-ID: <20130205142238.3F3AB3E1265@localhost> (raw)
In-Reply-To: <1359395857-1235-4-git-send-email-arnd-r2nGTMty4D4@public.gmane.org>
On Mon, 28 Jan 2013 17:57:35 +0000, Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org> wrote:
> With the new OF DMA binding, it is possible to completely avoid the
> need for platform_data for configuring a DMA channel. In cases where the
> platform has already been converted, calling dma_request_slave_channel
> should get all the necessary information from the device tree.
>
> Like the patch that converts the dw_dma controller, this is completely
> untested and is looking for someone to try it out.
>
> Signed-off-by: Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>
> Cc: Grant Likely <grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>
> Cc: Jiri Slaby <jslaby-AlSwsSmVLrQ@public.gmane.org>
> Cc: Greg Kroah-Hartman <gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org>
> Cc: Linus Walleij <linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
> Cc: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
> Cc: Viresh Kumar <viresh.kumar-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
> Cc: Andy Shevchenko <andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
> Cc: Vinod Koul <vinod.koul-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
> Cc: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org
> Cc: linux-arm-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Acked-by: Grant Likely <grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>
> ---
> drivers/tty/serial/amba-pl011.c | 62 ++++++++++++++++++++++++-----------------
> 1 file changed, 37 insertions(+), 25 deletions(-)
>
> diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
> index 3ea5408..c25b00e 100644
> --- a/drivers/tty/serial/amba-pl011.c
> +++ b/drivers/tty/serial/amba-pl011.c
> @@ -245,7 +245,7 @@ static void pl011_sgbuf_free(struct dma_chan *chan, struct pl011_sgbuf *sg,
> }
> }
>
> -static void pl011_dma_probe_initcall(struct uart_amba_port *uap)
> +static void pl011_dma_probe_initcall(struct device *dev, struct uart_amba_port *uap)
> {
> /* DMA is the sole user of the platform data right now */
> struct amba_pl011_data *plat = uap->port.dev->platform_data;
> @@ -259,20 +259,25 @@ static void pl011_dma_probe_initcall(struct uart_amba_port *uap)
> struct dma_chan *chan;
> dma_cap_mask_t mask;
>
> - /* We need platform data */
> - if (!plat || !plat->dma_filter) {
> - dev_info(uap->port.dev, "no DMA platform data\n");
> - return;
> - }
> + chan = dma_request_slave_channel(dev, "tx");
>
> - /* Try to acquire a generic DMA engine slave TX channel */
> - dma_cap_zero(mask);
> - dma_cap_set(DMA_SLAVE, mask);
> -
> - chan = dma_request_channel(mask, plat->dma_filter, plat->dma_tx_param);
> if (!chan) {
> - dev_err(uap->port.dev, "no TX DMA channel!\n");
> - return;
> + /* We need platform data */
> + if (!plat || !plat->dma_filter) {
> + dev_info(uap->port.dev, "no DMA platform data\n");
> + return;
> + }
> +
> + /* Try to acquire a generic DMA engine slave TX channel */
> + dma_cap_zero(mask);
> + dma_cap_set(DMA_SLAVE, mask);
> +
> + chan = dma_request_channel(mask, plat->dma_filter,
> + plat->dma_tx_param);
> + if (!chan) {
> + dev_err(uap->port.dev, "no TX DMA channel!\n");
> + return;
> + }
> }
>
> dmaengine_slave_config(chan, &tx_conf);
> @@ -282,7 +287,18 @@ static void pl011_dma_probe_initcall(struct uart_amba_port *uap)
> dma_chan_name(uap->dmatx.chan));
>
> /* Optionally make use of an RX channel as well */
> - if (plat->dma_rx_param) {
> + chan = dma_request_slave_channel(dev, "rx");
> +
> + if (!chan && plat->dma_rx_param) {
> + chan = dma_request_channel(mask, plat->dma_filter, plat->dma_rx_param);
> +
> + if (!chan) {
> + dev_err(uap->port.dev, "no RX DMA channel!\n");
> + return;
> + }
> + }
> +
> + if (chan) {
> struct dma_slave_config rx_conf = {
> .src_addr = uap->port.mapbase + UART01x_DR,
> .src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE,
> @@ -291,12 +307,6 @@ static void pl011_dma_probe_initcall(struct uart_amba_port *uap)
> .device_fc = false,
> };
>
> - chan = dma_request_channel(mask, plat->dma_filter, plat->dma_rx_param);
> - if (!chan) {
> - dev_err(uap->port.dev, "no RX DMA channel!\n");
> - return;
> - }
> -
> dmaengine_slave_config(chan, &rx_conf);
> uap->dmarx.chan = chan;
>
> @@ -315,6 +325,7 @@ static void pl011_dma_probe_initcall(struct uart_amba_port *uap)
> struct dma_uap {
> struct list_head node;
> struct uart_amba_port *uap;
> + struct device *dev;
> };
>
> static LIST_HEAD(pl011_dma_uarts);
> @@ -325,7 +336,7 @@ static int __init pl011_dma_initcall(void)
>
> list_for_each_safe(node, tmp, &pl011_dma_uarts) {
> struct dma_uap *dmau = list_entry(node, struct dma_uap, node);
> - pl011_dma_probe_initcall(dmau->uap);
> + pl011_dma_probe_initcall(dmau->dev, dmau->uap);
> list_del(node);
> kfree(dmau);
> }
> @@ -334,18 +345,19 @@ static int __init pl011_dma_initcall(void)
>
> device_initcall(pl011_dma_initcall);
>
> -static void pl011_dma_probe(struct uart_amba_port *uap)
> +static void pl011_dma_probe(struct device *dev, struct uart_amba_port *uap)
> {
> struct dma_uap *dmau = kzalloc(sizeof(struct dma_uap), GFP_KERNEL);
> if (dmau) {
> dmau->uap = uap;
> + dmau->dev = dev;
> list_add_tail(&dmau->node, &pl011_dma_uarts);
> }
> }
> #else
> -static void pl011_dma_probe(struct uart_amba_port *uap)
> +static void pl011_dma_probe(struct device *dev, struct uart_amba_port *uap)
> {
> - pl011_dma_probe_initcall(uap);
> + pl011_dma_probe_initcall(dev, uap);
> }
> #endif
>
> @@ -2020,7 +2032,7 @@ static int pl011_probe(struct amba_device *dev, const struct amba_id *id)
> uap->port.ops = &amba_pl011_pops;
> uap->port.flags = UPF_BOOT_AUTOCONF;
> uap->port.line = i;
> - pl011_dma_probe(uap);
> + pl011_dma_probe(&dev->dev, uap);
>
> /* Ensure interrupts from this UART are masked and cleared */
> writew(0, uap->port.membase + UART011_IMSC);
> --
> 1.8.0
>
--
Grant Likely, B.Sc, P.Eng.
Secret Lab Technologies, Ltd.
next prev parent reply other threads:[~2013-02-05 14:22 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1359395857-1235-1-git-send-email-arnd@arndb.de>
[not found] ` <1359395857-1235-1-git-send-email-arnd-r2nGTMty4D4@public.gmane.org>
2013-01-28 17:57 ` [PATCH 2/5] spi: pl022: use generic DMA slave configuration if possible Arnd Bergmann
[not found] ` <1359395857-1235-3-git-send-email-arnd-r2nGTMty4D4@public.gmane.org>
2013-02-05 14:22 ` Grant Likely
2013-02-07 18:27 ` Linus Walleij
2013-01-28 17:57 ` [PATCH 3/5] serial: pl011: " Arnd Bergmann
[not found] ` <1359395857-1235-4-git-send-email-arnd-r2nGTMty4D4@public.gmane.org>
2013-02-05 14:22 ` Grant Likely [this message]
2013-01-28 21:58 ` [PATCH v2 0/5] dmaengine: convert dw_dmac/spear13xx to generic binding Arnd Bergmann
[not found] ` <1359410300-26113-1-git-send-email-arnd-r2nGTMty4D4@public.gmane.org>
2013-01-28 21:58 ` [PATCH 2/5] spi: pl022: use generic DMA slave configuration if possible Arnd Bergmann
[not found] ` <1359410300-26113-3-git-send-email-arnd-r2nGTMty4D4@public.gmane.org>
2013-01-29 2:41 ` Mark Brown
2013-01-29 7:49 ` Andy Shevchenko
2013-01-29 13:13 ` Arnd Bergmann
[not found] ` <201301291313.03511.arnd-r2nGTMty4D4@public.gmane.org>
2013-02-07 18:29 ` Linus Walleij
[not found] ` <CACRpkdZNpCJwp-uaH6feTcaPesNouwpHt-hO-M9v52G=Ux+Hqw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-02-07 19:42 ` Arnd Bergmann
[not found] ` <201302071942.54642.arnd-r2nGTMty4D4@public.gmane.org>
2013-02-07 20:19 ` Linus Walleij
[not found] ` <CACRpkdbunPGtR4p_kY4q8WEb8iwkEbdo_icDyrLZwKrCe0wXqw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-02-07 21:15 ` Arnd Bergmann
2013-02-08 16:22 ` Russell King - ARM Linux
2013-02-08 16:28 ` Arnd Bergmann
2013-02-08 22:10 ` Linus Walleij
2013-02-08 16:20 ` Russell King - ARM Linux
2013-01-28 21:58 ` [PATCH 3/5] serial: pl011: " Arnd Bergmann
[not found] ` <1359410300-26113-4-git-send-email-arnd-r2nGTMty4D4@public.gmane.org>
2013-01-30 4:38 ` Greg Kroah-Hartman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130205142238.3F3AB3E1265@localhost \
--to=grant.likely-s3s/wqlpoipyb63q8fvjnq@public.gmane.org \
--cc=andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
--cc=arnd-r2nGTMty4D4@public.gmane.org \
--cc=devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org \
--cc=gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org \
--cc=jslaby-AlSwsSmVLrQ@public.gmane.org \
--cc=linux-arm-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=vinod.koul-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
--cc=viresh.kumar-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).