devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>
To: linux-arm-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Cc: Vinod Koul <vinod.koul-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>,
	Arnd Bergmann <arnd-r2nGTMty4D4@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>,
	Linus Walleij
	<linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Subject: [PATCH 3/5] serial: pl011: use generic DMA slave configuration if possible
Date: Mon, 28 Jan 2013 17:57:35 +0000	[thread overview]
Message-ID: <1359395857-1235-4-git-send-email-arnd@arndb.de> (raw)
In-Reply-To: <1359395857-1235-1-git-send-email-arnd-r2nGTMty4D4@public.gmane.org>

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
---
 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


------------------------------------------------------------------------------
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. ON SALE this month only -- learn more at:
http://p.sf.net/sfu/learnnow-d2d

  parent reply	other threads:[~2013-01-28 17:57 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-28 17:57 [PATCH 0/5] dmaengine: convert dw_dmac/spear13xx to generic binding Arnd Bergmann
     [not found] ` <1359395857-1235-1-git-send-email-arnd-r2nGTMty4D4@public.gmane.org>
2013-01-28 17:57   ` [PATCH 1/5] dmaengine: dw_dmac: move to generic DMA binding Arnd Bergmann
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   ` Arnd Bergmann [this message]
     [not found]     ` <1359395857-1235-4-git-send-email-arnd-r2nGTMty4D4@public.gmane.org>
2013-02-05 14:22       ` [PATCH 3/5] serial: pl011: " Grant Likely
2013-01-28 17:57   ` [PATCH 4/5] ata: arasan: remove the need for platform_data Arnd Bergmann
2013-01-28 17:57   ` [PATCH 5/5] ARM: SPEAr13xx: Pass generic DW DMAC platform data from DT Arnd Bergmann
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 1/5] dmaengine: dw_dmac: move to generic DMA binding Arnd Bergmann
     [not found]         ` <1359410300-26113-2-git-send-email-arnd-r2nGTMty4D4@public.gmane.org>
2013-01-29  7:24           ` Viresh Kumar
     [not found]             ` <CAKohpomO6tYNYLdMOaJYgqGecXj5KMQprdb=gExi+QuGrtLTzw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-01-29 10:35               ` Arnd Bergmann
     [not found]                 ` <201301291035.30265.arnd-r2nGTMty4D4@public.gmane.org>
2013-01-29 10:49                   ` Viresh Kumar
     [not found]                     ` <CAKohpo=rD9=dEaPkKYcj55K4_ebdnU7qjv2TZBUwqHAB+Kk+aw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-01-29 10:54                       ` Andy Shevchenko
2013-01-29 10:57                         ` Viresh Kumar
     [not found]                           ` <CAKohpokZfQZ17PmQjS2ntN9js7=SxNkiwWpX2aD8cZcM9L0ydw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-01-29 11:14                             ` Andy Shevchenko
2013-01-29 13:31                       ` Arnd Bergmann
     [not found]                         ` <201301291331.48427.arnd-r2nGTMty4D4@public.gmane.org>
2013-01-29 13:45                           ` Andy Shevchenko
2013-01-29 14:26                             ` Russell King - ARM Linux
2013-01-29 15:28                             ` Arnd Bergmann
2013-01-29 15:17                           ` Viresh Kumar
     [not found]                             ` <CAKohpoms+WC_XJnH2b6uoycRKkF-yxZUg2J+8NrYJP8fnDNLtg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-01-29 16:21                               ` Arnd Bergmann
     [not found]                                 ` <201301291621.59425.arnd-r2nGTMty4D4@public.gmane.org>
2013-01-30  2:04                                   ` Viresh Kumar
     [not found]                                     ` <CAKohpon30hB9S+MUyXwZpefAGQE4hvF36d-6jXNRk_XoK5dwww-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-01-30  9:41                                       ` Arnd Bergmann
     [not found]                                         ` <201301300941.35886.arnd-r2nGTMty4D4@public.gmane.org>
2013-01-30  9:48                                           ` Viresh Kumar
     [not found]                                             ` <CAOh2x==WZePgfTWwL0vPdE693n44vW05OS=DSqbnDCs2xzHXuw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-01-30 10:08                                               ` Arnd Bergmann
     [not found]                                                 ` <201301301008.31196.arnd-r2nGTMty4D4@public.gmane.org>
2013-01-30 10:32                                                   ` Viresh Kumar
2013-02-15  8:50           ` Andy Shevchenko
2013-02-15 11:17             ` Arnd Bergmann
     [not found]         ` <1359445171.31148.30.camel@smile>
2013-01-29 10:50           ` Arnd Bergmann
     [not found]             ` <201301291050.23743.arnd-r2nGTMty4D4@public.gmane.org>
2013-01-29 11:18               ` Russell King - ARM Linux
     [not found]                 ` <20130129111850.GR23505-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2013-01-29 13:44                   ` Arnd Bergmann
     [not found]                     ` <201301291344.11066.arnd-r2nGTMty4D4@public.gmane.org>
2013-01-29 14:24                       ` Russell King - ARM Linux
     [not found]                         ` <20130129142434.GW23505-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2013-01-29 14:55                           ` Arnd Bergmann
     [not found]                             ` <201301291455.49347.arnd-r2nGTMty4D4@public.gmane.org>
2013-01-29 15:44                               ` Russell King - ARM Linux
     [not found]                                 ` <20130129154409.GA23505-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2013-01-29 16:36                                   ` Arnd Bergmann
     [not found]                                     ` <201301291636.38773.arnd-r2nGTMty4D4@public.gmane.org>
2013-01-29 17:45                                       ` Russell King - ARM Linux
     [not found]                                         ` <20130129174546.GE23505-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2013-01-29 20:40                                           ` Arnd Bergmann
2013-01-29 21:59                                             ` Linus Walleij
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
2013-01-28 21:58       ` [PATCH 4/5] ata: arasan: remove the need for platform_data Arnd Bergmann
     [not found]         ` <1359410300-26113-5-git-send-email-arnd-r2nGTMty4D4@public.gmane.org>
2013-01-29  8:18           ` Viresh Kumar
2013-01-28 21:58     ` [PATCH 5/5] ARM: SPEAr13xx: Pass generic DW DMAC platform data from DT Arnd Bergmann
     [not found]       ` <1359410300-26113-6-git-send-email-arnd-r2nGTMty4D4@public.gmane.org>
2013-01-29  8:16         ` Viresh Kumar
     [not found]           ` <CAKohpokrvYDaMgB-5HV+bJh01YNU4H5UrSUnzxa_NpvE1qQqiA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-01-29 13:21             ` Arnd Bergmann
2013-04-19 20:38   ` [PATCH 0/5] dmaengine: convert dw_dmac/spear13xx to generic binding Arnd Bergmann

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=1359395857-1235-4-git-send-email-arnd@arndb.de \
    --to=arnd-r2ngtmty4d4@public.gmane.org \
    --cc=andriy.shevchenko-VuQAYsv1563Yd54FQh9/CA@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=linus.walleij-QSEj5FYQhm4dnm+yROfE0A@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).