linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Lee Jones <lee.jones@linaro.org>
To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org
Cc: arnd@arndb.de, linus.walleij@stericsson.com,
	srinidhi.kasagar@stericsson.com, Lee Jones <lee.jones@linaro.org>,
	Felipe Balbi <balbi@ti.com>,
	linux-usb@vger.kernel.org
Subject: [PATCH 44/63] usb: musb: ux500: move channel number knowledge into the driver
Date: Fri,  3 May 2013 15:32:30 +0100	[thread overview]
Message-ID: <1367591569-32197-45-git-send-email-lee.jones@linaro.org> (raw)
In-Reply-To: <1367591569-32197-1-git-send-email-lee.jones@linaro.org>

For all ux500 based platforms the maximum number of end-points are used.
Move this knowledge into the driver so we can relinquish the burden from
platform data. This also removes quite a bit of complexity from the driver
and will aid us when we come to enable the driver for Device Tree.

Cc: Felipe Balbi <balbi@ti.com>
Cc: linux-usb@vger.kernel.org
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Acked-by: Fabio Baltieri <fabio.baltieri@linaro.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
---
 arch/arm/mach-ux500/usb.c                    |   14 ++++++------
 drivers/usb/musb/ux500_dma.c                 |   30 ++++++++------------------
 include/linux/platform_data/usb-musb-ux500.h |    5 +----
 3 files changed, 16 insertions(+), 33 deletions(-)

diff --git a/arch/arm/mach-ux500/usb.c b/arch/arm/mach-ux500/usb.c
index 821703d..8aff9a4 100644
--- a/arch/arm/mach-ux500/usb.c
+++ b/arch/arm/mach-ux500/usb.c
@@ -22,7 +22,7 @@
 		.dir = STEDMA40_MEM_TO_PERIPH, \
 	}
 
-static struct stedma40_chan_cfg musb_dma_rx_ch[UX500_MUSB_DMA_NUM_RX_CHANNELS]
+static struct stedma40_chan_cfg musb_dma_rx_ch[UX500_MUSB_DMA_NUM_RX_TX_CHANNELS]
 	= {
 	MUSB_DMA40_RX_CH,
 	MUSB_DMA40_RX_CH,
@@ -34,7 +34,7 @@ static struct stedma40_chan_cfg musb_dma_rx_ch[UX500_MUSB_DMA_NUM_RX_CHANNELS]
 	MUSB_DMA40_RX_CH
 };
 
-static struct stedma40_chan_cfg musb_dma_tx_ch[UX500_MUSB_DMA_NUM_TX_CHANNELS]
+static struct stedma40_chan_cfg musb_dma_tx_ch[UX500_MUSB_DMA_NUM_RX_TX_CHANNELS]
 	= {
 	MUSB_DMA40_TX_CH,
 	MUSB_DMA40_TX_CH,
@@ -46,7 +46,7 @@ static struct stedma40_chan_cfg musb_dma_tx_ch[UX500_MUSB_DMA_NUM_TX_CHANNELS]
 	MUSB_DMA40_TX_CH,
 };
 
-static void *ux500_dma_rx_param_array[UX500_MUSB_DMA_NUM_RX_CHANNELS] = {
+static void *ux500_dma_rx_param_array[UX500_MUSB_DMA_NUM_RX_TX_CHANNELS] = {
 	&musb_dma_rx_ch[0],
 	&musb_dma_rx_ch[1],
 	&musb_dma_rx_ch[2],
@@ -57,7 +57,7 @@ static void *ux500_dma_rx_param_array[UX500_MUSB_DMA_NUM_RX_CHANNELS] = {
 	&musb_dma_rx_ch[7]
 };
 
-static void *ux500_dma_tx_param_array[UX500_MUSB_DMA_NUM_TX_CHANNELS] = {
+static void *ux500_dma_tx_param_array[UX500_MUSB_DMA_NUM_RX_TX_CHANNELS] = {
 	&musb_dma_tx_ch[0],
 	&musb_dma_tx_ch[1],
 	&musb_dma_tx_ch[2],
@@ -71,8 +71,6 @@ static void *ux500_dma_tx_param_array[UX500_MUSB_DMA_NUM_TX_CHANNELS] = {
 static struct ux500_musb_board_data musb_board_data = {
 	.dma_rx_param_array = ux500_dma_rx_param_array,
 	.dma_tx_param_array = ux500_dma_tx_param_array,
-	.num_rx_channels = UX500_MUSB_DMA_NUM_RX_CHANNELS,
-	.num_tx_channels = UX500_MUSB_DMA_NUM_TX_CHANNELS,
 	.dma_filter = stedma40_filter,
 };
 
@@ -119,7 +117,7 @@ static inline void ux500_usb_dma_update_rx_ch_config(int *dev_type)
 {
 	u32 idx;
 
-	for (idx = 0; idx < UX500_MUSB_DMA_NUM_RX_CHANNELS; idx++)
+	for (idx = 0; idx < UX500_MUSB_DMA_NUM_RX_TX_CHANNELS; idx++)
 		musb_dma_rx_ch[idx].dev_type = dev_type[idx];
 }
 
@@ -127,7 +125,7 @@ static inline void ux500_usb_dma_update_tx_ch_config(int *dev_type)
 {
 	u32 idx;
 
-	for (idx = 0; idx < UX500_MUSB_DMA_NUM_TX_CHANNELS; idx++)
+	for (idx = 0; idx < UX500_MUSB_DMA_NUM_RX_TX_CHANNELS; idx++)
 		musb_dma_tx_ch[idx].dev_type = dev_type[idx];
 }
 
diff --git a/drivers/usb/musb/ux500_dma.c b/drivers/usb/musb/ux500_dma.c
index 039e567d..c75e07a 100644
--- a/drivers/usb/musb/ux500_dma.c
+++ b/drivers/usb/musb/ux500_dma.c
@@ -47,10 +47,8 @@ struct ux500_dma_channel {
 
 struct ux500_dma_controller {
 	struct dma_controller controller;
-	struct ux500_dma_channel rx_channel[UX500_MUSB_DMA_NUM_RX_CHANNELS];
-	struct ux500_dma_channel tx_channel[UX500_MUSB_DMA_NUM_TX_CHANNELS];
-	u32	num_rx_channels;
-	u32	num_tx_channels;
+	struct ux500_dma_channel rx_channel[UX500_MUSB_DMA_NUM_RX_TX_CHANNELS];
+	struct ux500_dma_channel tx_channel[UX500_MUSB_DMA_NUM_RX_TX_CHANNELS];
 	void *private_data;
 	dma_addr_t phy_base;
 };
@@ -142,19 +140,15 @@ static struct dma_channel *ux500_dma_channel_allocate(struct dma_controller *c,
 	struct ux500_dma_channel *ux500_channel = NULL;
 	struct musb *musb = controller->private_data;
 	u8 ch_num = hw_ep->epnum - 1;
-	u32 max_ch;
 
-	/* Max 8 DMA channels (0 - 7). Each DMA channel can only be allocated
+	/* 8 DMA channels (0 - 7). Each DMA channel can only be allocated
 	 * to specified hw_ep. For example DMA channel 0 can only be allocated
 	 * to hw_ep 1 and 9.
 	 */
 	if (ch_num > 7)
 		ch_num -= 8;
 
-	max_ch = is_tx ? controller->num_tx_channels :
-			controller->num_rx_channels;
-
-	if (ch_num >= max_ch)
+	if (ch_num >= UX500_MUSB_DMA_NUM_RX_TX_CHANNELS)
 		return NULL;
 
 	ux500_channel = is_tx ? &(controller->tx_channel[ch_num]) :
@@ -262,7 +256,7 @@ static int ux500_dma_controller_stop(struct dma_controller *c)
 	struct dma_channel *channel;
 	u8 ch_num;
 
-	for (ch_num = 0; ch_num < controller->num_rx_channels; ch_num++) {
+	for (ch_num = 0; ch_num < UX500_MUSB_DMA_NUM_RX_TX_CHANNELS; ch_num++) {
 		channel = &controller->rx_channel[ch_num].channel;
 		ux500_channel = channel->private_data;
 
@@ -272,7 +266,7 @@ static int ux500_dma_controller_stop(struct dma_controller *c)
 			dma_release_channel(ux500_channel->dma_chan);
 	}
 
-	for (ch_num = 0; ch_num < controller->num_tx_channels; ch_num++) {
+	for (ch_num = 0; ch_num < UX500_MUSB_DMA_NUM_RX_TX_CHANNELS; ch_num++) {
 		channel = &controller->tx_channel[ch_num].channel;
 		ux500_channel = channel->private_data;
 
@@ -301,26 +295,21 @@ static int ux500_dma_controller_start(struct dma_controller *c)
 
 	void **param_array;
 	struct ux500_dma_channel *channel_array;
-	u32 ch_count;
 	dma_cap_mask_t mask;
 
-	if ((data->num_rx_channels > UX500_MUSB_DMA_NUM_RX_CHANNELS) ||
-		(data->num_tx_channels > UX500_MUSB_DMA_NUM_TX_CHANNELS))
-		return -EINVAL;
 
-	controller->num_rx_channels = data->num_rx_channels;
-	controller->num_tx_channels = data->num_tx_channels;
 
 	dma_cap_zero(mask);
 	dma_cap_set(DMA_SLAVE, mask);
 
 	/* Prepare the loop for RX channels */
 	channel_array = controller->rx_channel;
-	ch_count = data->num_rx_channels;
 	param_array = data->dma_rx_param_array;
 
 	for (dir = 0; dir < 2; dir++) {
-		for (ch_num = 0; ch_num < ch_count; ch_num++) {
+		for (ch_num = 0;
+		     ch_num < UX500_MUSB_DMA_NUM_RX_TX_CHANNELS;
+		     ch_num++) {
 			ux500_channel = &channel_array[ch_num];
 			ux500_channel->controller = controller;
 			ux500_channel->ch_num = ch_num;
@@ -348,7 +337,6 @@ static int ux500_dma_controller_start(struct dma_controller *c)
 
 		/* Prepare the loop for TX channels */
 		channel_array = controller->tx_channel;
-		ch_count = data->num_tx_channels;
 		param_array = data->dma_tx_param_array;
 		is_tx = 1;
 	}
diff --git a/include/linux/platform_data/usb-musb-ux500.h b/include/linux/platform_data/usb-musb-ux500.h
index 4c1cc50..dd9c83a 100644
--- a/include/linux/platform_data/usb-musb-ux500.h
+++ b/include/linux/platform_data/usb-musb-ux500.h
@@ -9,14 +9,11 @@
 
 #include <linux/dmaengine.h>
 
-#define UX500_MUSB_DMA_NUM_RX_CHANNELS 8
-#define UX500_MUSB_DMA_NUM_TX_CHANNELS 8
+#define UX500_MUSB_DMA_NUM_RX_TX_CHANNELS 8
 
 struct ux500_musb_board_data {
 	void	**dma_rx_param_array;
 	void	**dma_tx_param_array;
-	u32	num_rx_channels;
-	u32	num_tx_channels;
 	bool (*dma_filter)(struct dma_chan *chan, void *filter_param);
 };
 
-- 
1.7.10.4


  parent reply	other threads:[~2013-05-03 14:41 UTC|newest]

Thread overview: 119+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-03 14:31 [PATCH 00/63] dmaengine: Convert to correct API & Device Tree handling Lee Jones
2013-05-03 14:31 ` [PATCH 01/63] ARM: ux500: Supply address location names for the DMA40 DMA controller Lee Jones
2013-05-03 19:27   ` Linus Walleij
2013-05-03 14:31 ` [PATCH 02/63] ARM: ux500: Setup the DMA40 driver's DT node using the new DMA API Lee Jones
2013-05-03 19:29   ` Linus Walleij
2013-05-03 14:31 ` [PATCH 03/63] ARM: ux500: Supply UART's DMA configuration via Device Tree Lee Jones
2013-05-03 19:33   ` Linus Walleij
2013-05-03 14:31 ` [PATCH 04/63] ARM: ux500: Supply MMC " Lee Jones
2013-05-03 19:33   ` Linus Walleij
2013-05-03 14:31 ` [PATCH 05/63] ARM: ux500: Populate the ux500-musb Device Tree entry Lee Jones
2013-05-03 19:35   ` Linus Walleij
2013-05-03 14:31 ` [PATCH 06/63] ARM: ux500: Pass DMA memcpy channels though Device Tree Lee Jones
2013-05-03 19:37   ` Linus Walleij
2013-05-03 14:31 ` [PATCH 07/63] dmaengine: ste_dma40: Assign memcpy channels in the driver Lee Jones
2013-05-03 19:40   ` Linus Walleij
2013-05-03 19:51   ` Linus Walleij
2013-05-03 14:31 ` [PATCH 08/63] dmaengine: ste_dma40: Move default memcpy configs into " Lee Jones
2013-05-03 19:53   ` Linus Walleij
2013-05-03 14:31 ` [PATCH 09/63] dmaengine: ste_dma40: Rectify incorrect configuration validation checking Lee Jones
2013-05-03 19:58   ` Linus Walleij
2013-05-20 12:36   ` Linus Walleij
2013-05-03 14:31 ` [PATCH 10/63] dmaengine: ste_dma40: Amalgamate DMA source and destination channel numbers Lee Jones
2013-05-03 20:00   ` Linus Walleij
2013-05-20 12:35   ` Linus Walleij
2013-05-23 10:46     ` Vinod Koul
2013-05-03 14:31 ` [PATCH 11/63] ARM: ux500: Strip out duplicate USB DMA configuration Lee Jones
2013-05-03 20:02   ` Linus Walleij
2013-05-03 14:31 ` [PATCH 12/63] dmaengine: ste_dma40: Remove home-brew MAX() macro Lee Jones
2013-05-03 20:04   ` Linus Walleij
2013-05-20 12:32   ` Linus Walleij
2013-05-03 14:31 ` [PATCH 13/63] ARM: ux500: Remove unused 'data_width' attributes from SDI DMA configs Lee Jones
2013-05-03 20:07   ` Linus Walleij
2013-05-03 14:32 ` [PATCH 14/63] ARM: ux500: Remove unused 'data_width' attributes from SSP " Lee Jones
2013-05-03 20:09   ` Linus Walleij
2013-05-03 14:32 ` [PATCH 15/63] ARM: ux500: Remove unused 'data_width' attributes from UART " Lee Jones
2013-05-03 20:11   ` Linus Walleij
2013-05-03 14:32 ` [PATCH 16/63] ARM: ux500: Remove superfluous 'psize' attribute from Audio platform data Lee Jones
2013-05-03 20:13   ` Linus Walleij
2013-05-03 20:59     ` Fabio Baltieri
2013-05-03 21:04       ` Linus Walleij
2013-05-03 14:32 ` [PATCH 17/63] dmaengine: ste_dma40: Calculate number of logical channels from physical ones Lee Jones
2013-05-03 20:15   ` Linus Walleij
2013-05-03 14:32 ` [PATCH 18/63] dmaengine: ste_dma40: Remove 'always true' checking Lee Jones
2013-05-03 20:17   ` Linus Walleij
2013-05-03 14:32 ` [PATCH 19/63] dmaengine: ste_dma40: Separate Logical Global Interrupt Mask (GIM) unmasking Lee Jones
2013-05-03 20:23   ` Linus Walleij
2013-05-08 15:02     ` Lee Jones
2013-05-03 14:32 ` [PATCH 20/63] dmaengine: ste_dma40: Remove unnecessary call to d40_phy_cfg() Lee Jones
2013-05-03 20:27   ` Linus Walleij
2013-05-08 15:20     ` Lee Jones
2013-05-03 14:32 ` [PATCH 21/63] dmaengine: ste_dma40: Don't configure runtime configurable setup during allocate Lee Jones
2013-05-03 20:41   ` Linus Walleij
2013-05-08 15:24     ` Lee Jones
2013-05-03 14:32 ` [PATCH 22/63] dmaengine: ste_dma40: Move rev error-check up to revision acquisition Lee Jones
2013-05-03 20:48   ` Linus Walleij
2013-05-03 14:32 ` [PATCH 23/63] dmaengine: ste_dma40: Also report the number of logical channels Lee Jones
2013-05-03 20:53   ` Linus Walleij
2013-05-20 12:29   ` Linus Walleij
2013-05-23 10:48   ` Vinod Koul
2013-05-03 14:32 ` [PATCH 24/63] dmaengine: ste_dma40: Allocate plat_data on declaration Lee Jones
2013-05-03 20:55   ` Linus Walleij
2013-05-03 14:32 ` [PATCH 25/63] dmaengine: ste_dma40: Allow driver to be probe()able when DT is enabled Lee Jones
2013-05-03 20:58   ` Linus Walleij
2013-05-03 14:32 ` [PATCH 26/63] dmaengine: ste_dma40: Supply full Device Tree parsing support Lee Jones
2013-05-03 20:59   ` Linus Walleij
2013-05-03 21:00     ` Linus Walleij
2013-05-23 10:54   ` Vinod Koul
2013-05-03 14:32 ` [PATCH 27/63] ARM: ux500: Pass remnant platform data though to DMA40 driver Lee Jones
2013-05-03 21:09   ` Linus Walleij
2013-05-03 14:32 ` [PATCH 28/63] ARM: ux500: Stop passing UART's platform data for Device Tree boots Lee Jones
2013-05-03 21:11   ` Linus Walleij
2013-05-08 15:28     ` Lee Jones
2013-05-09 13:01     ` Lee Jones
2013-05-03 14:32 ` [PATCH 29/63] ARM: ux500: Stop passing MMC's " Lee Jones
2013-05-03 21:12   ` Linus Walleij
2013-05-03 14:32 ` [PATCH 30/63] ARM: ux500: Move SDI (MMC) and UART devices under more descriptive heading Lee Jones
2013-05-03 21:12   ` Linus Walleij
2013-05-03 14:32 ` [PATCH 31/63] dmaengine: ste_dma40: Only use addresses passed as configuration information Lee Jones
2013-05-03 21:16   ` Linus Walleij
2013-05-03 14:32 ` [PATCH 32/63] dmaengine: ste_dma40: Remove redundant address fetching function Lee Jones
2013-05-03 14:32 ` [PATCH 33/63] ARM: ux500: Remove DMA address look-up table Lee Jones
2013-05-03 14:32 ` [PATCH 34/63] dmaengine: ste_dma40: Correct copy/paste error Lee Jones
2013-05-03 14:32 ` [PATCH 35/63] ARM: ux500: Remove unnecessary attributes from DMA channel request pdata Lee Jones
2013-05-03 14:32 ` [PATCH 36/63] crypto: ux500/hash - Prepare clock before enabling it Lee Jones
2013-05-08 13:59   ` Ulf Hansson
2013-05-03 14:32 ` [PATCH 37/63] crypto: ux500/hash - Set DMA configuration though dma_slave_config() Lee Jones
2013-05-03 14:32 ` [PATCH 38/63] ARM: ux500: Stop passing Hash DMA channel config information though pdata Lee Jones
2013-05-03 14:32 ` [PATCH 39/63] crypto: ux500/cryp - Prepare clock before enabling it Lee Jones
2013-05-08 13:59   ` Ulf Hansson
2013-05-03 14:32 ` [PATCH 40/63] crypto: ux500/cryp - Set DMA configuration though dma_slave_config() Lee Jones
2013-05-03 14:32 ` [PATCH 41/63] ARM: ux500: Stop passing Cryp DMA channel config information though pdata Lee Jones
2013-05-03 14:32 ` [PATCH 42/63] crypto: ux500/[cryp|hash] - Show successful start-up in the bootlog Lee Jones
2013-05-03 14:32 ` [PATCH 43/63] ARM: ux500: Register Cyrp and Hash platform drivers on Snowball Lee Jones
2013-05-03 14:32 ` Lee Jones [this message]
2013-05-03 14:32 ` [PATCH 45/63] usb: musb: ux500: move the MUSB HDRC configuration into the driver Lee Jones
2013-05-03 14:32 ` [PATCH 46/63] usb: musb: ux500: take the dma_mask from coherent_dma_mask Lee Jones
2013-05-03 14:32 ` [PATCH 47/63] usb: musb: ux500: harden checks for platform data Lee Jones
2013-05-03 14:32 ` [PATCH 48/63] usb: musb: ux500: attempt to find channels by name before using pdata Lee Jones
2013-05-03 14:32 ` [PATCH 49/63] usb: musb: ux500: add device tree probing support Lee Jones
2013-05-03 14:32 ` [PATCH 50/63] ARM: ux500: Add an auxdata entry for MUSB for clock-name look-up Lee Jones
2013-05-03 14:32 ` [PATCH 51/63] ARM: ux500: Remove ux500-musb platform registation when booting with DT Lee Jones
2013-05-03 14:32 ` [PATCH 52/63] ARM: ux500: Remove empty function u8500_of_init_devices() Lee Jones
2013-05-03 14:32 ` [PATCH 53/63] dmaengine: ste_dma40: Use the BIT macro to replace ugly '(1 << x)'s Lee Jones
2013-05-03 14:32 ` [PATCH 54/63] ARM: ux500: Replace ST-E's home-brew DMA direction definition with the generic one Lee Jones
2013-05-06  7:13   ` Srinidhi Kasagar
2013-05-07  7:39     ` Lee Jones
2013-05-07  9:42       ` Srinidhi Kasagar
2013-05-07  9:53         ` Lee Jones
2013-05-03 14:32 ` [PATCH 55/63] dmaengine: ste_dma40: Replace ST-E's home-brew DMA direction defs with generic ones Lee Jones
2013-05-03 14:32 ` [PATCH 56/63] ARM: ux500: Remove recently unused stedma40_xfer_dir enums Lee Jones
2013-05-06  7:17   ` Srinidhi Kasagar
2013-05-03 14:32 ` [PATCH 57/63] dmaengine: ste_dma40_ll: Use the BIT macro to replace ugly '(1 << x)'s Lee Jones
2013-05-03 14:32 ` [PATCH 58/63] dmaengine: ste_dma40: Convert data_width from register bit format to value Lee Jones
2013-05-03 14:32 ` [PATCH 59/63] dmaengine: ste_dma40_ll: Replace meaningless register set with comment Lee Jones
2013-05-03 14:32 ` [PATCH 60/63] dmaengine: ste_dma40: Allow memcpy channels to be configured from DT Lee Jones
2013-05-03 14:32 ` [PATCH 61/63] ARM: ux500: Stop passing DMA platform data though AUXDATA Lee Jones
2013-05-06  6:55   ` Srinidhi Kasagar
2013-05-03 14:32 ` [PATCH 62/63] dmaengine: ste_dma40: Fetch the number of physical channels from DT Lee Jones
2013-05-03 14:32 ` [PATCH 63/63] dmaengine: ste_dma40: Fetch disabled " Lee Jones

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=1367591569-32197-45-git-send-email-lee.jones@linaro.org \
    --to=lee.jones@linaro.org \
    --cc=arnd@arndb.de \
    --cc=balbi@ti.com \
    --cc=linus.walleij@stericsson.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=srinidhi.kasagar@stericsson.com \
    /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).