Skip to contentSkip to conversation

Move Tegra EHCI drive to correct place

PATCH Superseded Lucas Stach 3 participants 12 messages Feb 7, 2013 – Feb 15, 2013

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

v3 cover Move Tegra EHCI drive to correct place

This moves out the Tegra EHCI driver from a platform specific directory to the standard driver/usb/host dir.

This is a preparation needed to share this driver between Tegra20 and Tegra30. No functional change in here, so Tegra30 is still not working.

Patch 6 could be a lot smaller if it were generated with -B, as GIT would detect that most of it is moving stuff over, but last time I did this it prevented git apply to work. So sorry for the big diff.

I think I incorporated all changes needed to reflect the review feedback I got on this last time.

V3 is rebased onto u-boot-tegra/next, fixes a build warning and has Simons acked-by attached to the patches.

I expect this series to go in through the Tegra tree. Marek, I suppose you are OK with the series, as you already were about to apply them in V2 form, please ACK so Tom can pick them up.

Lucas Stach (7):
tegra: usb: set USB_PORTS_MAX to correct value
tegra: usb: make controller init functions more self contained
tegra: usb: remove unneeded function parameter
tegra: usb: move controller init into start_port
tegra: usb: various small cleanups
tegra: usb: move implementation into right directory
tegra: usb: move [start|stop]_port into ehci_hcd_[init|stop]

 arch/arm/cpu/armv7/tegra20/Makefile       |   1 -
 arch/arm/cpu/armv7/tegra20/usb.c          | 567 ------------------------------
 arch/arm/include/asm/arch-tegra/usb.h     | 249 +++++++++++++
 arch/arm/include/asm/arch-tegra20/tegra.h |   1 -
 arch/arm/include/asm/arch-tegra20/usb.h   | 271 --------------
 arch/arm/include/asm/arch-tegra30/tegra.h |   2 +
 board/nvidia/common/board.c               |   2 +-
 drivers/usb/host/ehci-tegra.c             | 546 +++++++++++++++++++++++++++-
 8 files changed, 782 insertions(+), 857 deletions(-)
 delete mode 100644 arch/arm/cpu/armv7/tegra20/usb.c
 create mode 100644 arch/arm/include/asm/arch-tegra/usb.h
 delete mode 100644 arch/arm/include/asm/arch-tegra20/usb.h
Signature · 1 line
1.8.1
#1 lore raw

PATCH v3 1/7 tegra: usb: set USB_PORTS_MAX to correct value

Both Tegra20 and Tegra30 have a max of 3 USB controllers.

---
 arch/arm/cpu/armv7/tegra20/usb.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/cpu/armv7/tegra20/usb.c +1 -1
index 1bccf2b..f151fb2 100644
@@ -44,7 +44,7 @@
 #endif
 
 enum {
-	USB_PORTS_MAX	= 4,			/* Maximum ports we allow */
+	USB_PORTS_MAX	= 3,		/* Maximum ports we allow */
 };
 
 /* Parameters we need for USB */
Signature · 1 line
1.8.1
#2 lore raw

PATCH v3 2/7 tegra: usb: make controller init functions more self contained

In reply to Lucas Stach

There is no need to pass around all those parameters. The init functions are able to easily extract all the needed setup info on their own.

This allows to move out the controller init into ehci_hcd_init later on, without having to save away global state for later use and thus bloating the file global state.

---
 arch/arm/cpu/armv7/tegra20/usb.c | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)
arch/arm/cpu/armv7/tegra20/usb.c +12 -12
index f151fb2..07c1ade 100644
@@ -198,11 +198,12 @@ void usbf_reset_controller(struct fdt_usb *config, struct usb_ctlr *usbctlr)
 }
 
 /* set up the UTMI USB controller with the parameters provided */
-static int init_utmi_usb_controller(struct fdt_usb *config,
-				struct usb_ctlr *usbctlr, const u32 timing[])
+static int init_utmi_usb_controller(struct fdt_usb *config)
 {
 	u32 val;
 	int loop_count;
+	const unsigned *timing;
+	struct usb_ctlr *usbctlr = config->reg;
 
 	clock_enable(config->periph_id);
 
@@ -229,6 +230,8 @@ static int init_utmi_usb_controller(struct fdt_usb *config,
 	 * PLL Delay CONFIGURATION settings. The following parameters control
 	 * the bring up of the plls.
 	 */
+	timing = usb_pll[clock_get_osc_freq()];
+
 	val = readl(&usbctlr->utmip_misc_cfg1);
 	clrsetbits_le32(&val, UTMIP_PLLU_STABLE_COUNT_MASK,
 		timing[PARAM_STABLE_COUNT] << UTMIP_PLLU_STABLE_COUNT_SHIFT);
@@ -331,12 +334,12 @@ static int init_utmi_usb_controller(struct fdt_usb *config,
 #endif
 
 /* set up the ULPI USB controller with the parameters provided */
-static int init_ulpi_usb_controller(struct fdt_usb *config,
-				struct usb_ctlr *usbctlr)
+static int init_ulpi_usb_controller(struct fdt_usb *config)
 {
 	u32 val;
 	int loop_count;
 	struct ulpi_viewport ulpi_vp;
+	struct usb_ctlr *usbctlr = config->reg;
 
 	/* set up ULPI reference clock on pllp_out4 */
 	clock_enable(PERIPH_ID_DEV2_OUT);
@@ -408,8 +411,7 @@ static int init_ulpi_usb_controller(struct fdt_usb *config,
 	return 0;
 }
 #else
-static int init_ulpi_usb_controller(struct fdt_usb *config,
-				struct usb_ctlr *usbctlr)
+static int init_ulpi_usb_controller(struct fdt_usb *config)
 {
 	printf("No code to set up ULPI controller, please enable"
 			"CONFIG_USB_ULPI and CONFIG_USB_ULPI_VIEWPORT");
@@ -430,22 +432,20 @@ static void config_clock(const u32 timing[])
  * @param config	USB port configuration
  * @return 0 if ok, -1 if error (too many ports)
  */
-static int add_port(struct fdt_usb *config, const u32 timing[])
+static int add_port(struct fdt_usb *config)
 {
-	struct usb_ctlr *usbctlr = config->reg;
-
 	if (port_count == USB_PORTS_MAX) {
 		printf("tegrausb: Cannot register more than %d ports\n",
 		      USB_PORTS_MAX);
 		return -1;
 	}
 
-	if (config->utmi && init_utmi_usb_controller(config, usbctlr, timing)) {
+	if (config->utmi && init_utmi_usb_controller(config)) {
 		printf("tegrausb: Cannot init port\n");
 		return -1;
 	}
 
-	if (config->ulpi && init_ulpi_usb_controller(config, usbctlr)) {
+	if (config->ulpi && init_ulpi_usb_controller(config)) {
 		printf("tegrausb: Cannot init port\n");
 		return -1;
 	}
@@ -558,7 +558,7 @@ int board_usb_init(const void *blob)
 			return -1;
 		}
 
-		if (add_port(&config, usb_pll[freq]))
+		if (add_port(&config))
 			return -1;
 		set_host_mode(&config);
 	}
Signature · 1 line
1.8.1
#3 lore raw

PATCH v3 3/7 tegra: usb: remove unneeded function parameter

In reply to Lucas Stach

Just a dead parameter, never actually used.

---
 arch/arm/cpu/armv7/tegra20/usb.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)
arch/arm/cpu/armv7/tegra20/usb.c +2 -4
index 07c1ade..2007483 100644
@@ -486,8 +486,7 @@ int tegrausb_stop_port(int portnum)
 	return 0;
 }
 
-int fdt_decode_usb(const void *blob, int node, unsigned osc_frequency_mhz,
-		   struct fdt_usb *config)
+int fdt_decode_usb(const void *blob, int node, struct fdt_usb *config)
 {
 	const char *phy, *mode;
 
@@ -535,7 +534,6 @@ int fdt_decode_usb(const void *blob, int node, unsigned osc_frequency_mhz,
 int board_usb_init(const void *blob)
 {
 	struct fdt_usb config;
-	unsigned osc_freq = clock_get_rate(CLOCK_ID_OSC);
 	enum clock_osc_freq freq;
 	int node_list[USB_PORTS_MAX];
 	int node, count, i;
@@ -552,7 +550,7 @@ int board_usb_init(const void *blob)
 		node = node_list[i];
 		if (!node)
 			continue;
-		if (fdt_decode_usb(blob, node, osc_freq, &config)) {
+		if (fdt_decode_usb(blob, node, &config)) {
 			debug("Cannot decode USB node %s\n",
 			      fdt_get_name(blob, node, NULL));
 			return -1;
Signature · 1 line
1.8.1
#4 lore raw

PATCH v3 4/7 tegra: usb: move controller init into start_port

In reply to Lucas Stach

There is no need to init a USB controller before the upper layers indicate that they are actually going to use it.

board_usb_init now only parses the device tree and sets up the common pll.

---
v2:
- remember if port is already initialized and skip init in that case

---
 arch/arm/cpu/armv7/tegra20/usb.c | 57 ++++++++++++++++++++--------------------
 1 file changed, 29 insertions(+), 28 deletions(-)
arch/arm/cpu/armv7/tegra20/usb.c +29 -28
index 2007483..e4165e0 100644
@@ -79,6 +79,7 @@ struct fdt_usb {
 	unsigned ulpi:1;	/* 1 if port has external ULPI transceiver */
 	unsigned enabled:1;	/* 1 to enable, 0 to disable */
 	unsigned has_legacy_mode:1; /* 1 if this port has legacy mode */
+	unsigned initialized:1; /* has this port already been initialized? */
 	enum dr_mode dr_mode;	/* dual role mode */
 	enum periph_id periph_id;/* peripheral id */
 	struct fdt_gpio_state vbus_gpio;	/* GPIO for vbus enable */
@@ -426,44 +427,36 @@ static void config_clock(const u32 timing[])
 		timing[PARAM_CPCON], timing[PARAM_LFCON]);
 }
 
-/**
- * Add a new USB port to the list of available ports.
- *
- * @param config	USB port configuration
- * @return 0 if ok, -1 if error (too many ports)
- */
-static int add_port(struct fdt_usb *config)
+int tegrausb_start_port(int portnum, u32 *hccr, u32 *hcor)
 {
-	if (port_count == USB_PORTS_MAX) {
-		printf("tegrausb: Cannot register more than %d ports\n",
-		      USB_PORTS_MAX);
+	struct fdt_usb *config;
+	struct usb_ctlr *usbctlr;
+
+	if (portnum >= port_count)
 		return -1;
-	}
+
+	config = &port[portnum];
+
+	/* skip init, if the port is already initialized */
+	if (config->initialized)
+		goto success;
 
 	if (config->utmi && init_utmi_usb_controller(config)) {
-		printf("tegrausb: Cannot init port\n");
+		printf("tegrausb: Cannot init port %d\n", portnum);
 		return -1;
 	}
 
 	if (config->ulpi && init_ulpi_usb_controller(config)) {
-		printf("tegrausb: Cannot init port\n");
+		printf("tegrausb: Cannot init port %d\n", portnum);
 		return -1;
 	}
 
-	port[port_count++] = *config;
-
-	return 0;
-}
-
-int tegrausb_start_port(int portnum, u32 *hccr, u32 *hcor)
-{
-	struct usb_ctlr *usbctlr;
+	set_host_mode(config);
 
-	if (portnum >= port_count)
-		return -1;
-	set_host_mode(&port[portnum]);
+	config->initialized = 1;
 
-	usbctlr = port[portnum].reg;
+success:
+	usbctlr = config->reg;
 	*hccr = (u32)&usbctlr->cap_length;
 	*hcor = (u32)&usbctlr->usb_cmd;
 	return 0;
@@ -483,6 +476,8 @@ int tegrausb_stop_port(int portnum)
 	writel(2, &usbctlr->usb_cmd);
 	udelay(1000);
 
+	port[portnum].initialized = 0;
+
 	return 0;
 }
 
@@ -546,6 +541,12 @@ int board_usb_init(const void *blob)
 	count = fdtdec_find_aliases_for_id(blob, "usb",
 			COMPAT_NVIDIA_TEGRA20_USB, node_list, USB_PORTS_MAX);
 	for (i = 0; i < count; i++) {
+		if (port_count == USB_PORTS_MAX) {
+			printf("tegrausb: Cannot register more than %d ports\n",
+				USB_PORTS_MAX);
+			return -1;
+		}
+
 		debug("USB %d: ", i);
 		node = node_list[i];
 		if (!node)
@@ -555,10 +556,10 @@ int board_usb_init(const void *blob)
 			      fdt_get_name(blob, node, NULL));
 			return -1;
 		}
+		config.initialized = 0;
 
-		if (add_port(&config))
-			return -1;
-		set_host_mode(&config);
+		/* add new USB port to the list of available ports */
+		port[port_count++] = config;
 	}
 
 	return 0;
Signature · 1 line
1.8.1
#5 lore raw

PATCH v3 5/7 tegra: usb: various small cleanups

In reply to Lucas Stach

Remove unneeded headers, function prototype and stale comment, that doesn't match the actual codebase anymore.

---
 arch/arm/cpu/armv7/tegra20/usb.c        | 13 +------------
 arch/arm/include/asm/arch-tegra20/usb.h |  3 ---
 2 files changed, 1 insertion(+), 15 deletions(-)
arch/arm/cpu/armv7/tegra20/usb.c +1 -12
index e4165e0..3fdd5df 100644
@@ -25,21 +25,15 @@
 #include <asm/io.h>
 #include <asm-generic/gpio.h>
 #include <asm/arch/clock.h>
-#include <asm/arch/gpio.h>
-#include <asm/arch/pinmux.h>
-#include <asm/arch/tegra.h>
 #include <asm/arch/usb.h>
 #include <usb/ulpi.h>
-#include <asm/arch-tegra/clk_rst.h>
-#include <asm/arch-tegra/sys_proto.h>
-#include <asm/arch-tegra/uart.h>
 #include <libfdt.h>
 #include <fdtdec.h>
 
 #ifdef CONFIG_USB_ULPI
 	#ifndef CONFIG_USB_ULPI_VIEWPORT
 	#error	"To use CONFIG_USB_ULPI on Tegra Boards you have to also \
-			define CONFIG_USB_ULPI_VIEWPORT"
+		define CONFIG_USB_ULPI_VIEWPORT"
 	#endif
 #endif
 
@@ -191,11 +185,6 @@ void usbf_reset_controller(struct fdt_usb *config, struct usb_ctlr *usbctlr)
 	/* Enable the UTMIP PHY */
 	if (config->utmi)
 		setbits_le32(&usbctlr->susp_ctrl, UTMIP_PHY_ENB);
-
-	/*
-	 * TODO: where do we take the USB1 out of reset? The old code would
-	 * take USB3 out of reset, but not USB1. This code doesn't do either.
-	 */
 }
 
 /* set up the UTMI USB controller with the parameters provided */
arch/arm/include/asm/arch-tegra20/usb.h +0 -3
index fdbd127..b18c850 100644
@@ -243,9 +243,6 @@ struct usb_ctlr {
 #define VBUS_VLD_STS			(1 << 26)
 
 
-/* Change the USB host port into host mode */
-void usb_set_host_mode(void);
-
 /* Setup USB on the board */
 int board_usb_init(const void *blob);
 
Signature · 1 line
1.8.1
#6 lore raw

PATCH v3 6/7 tegra: usb: move implementation into right directory

In reply to Lucas Stach

This moves the Tegra USB implementation into the drivers/usb/host directory. Note that this merges the old /arch/arm/cpu/armv7/tegra20/usb.c file into ehci-tegra.c. No code changes, just moving stuff around.

v2: While at it also move some defines and the usb.h header file to make usb driver usable for Tegra30.
NOTE: A lot more work is required to properly init the PHYs and PLL_U on Tegra30, this is just to make porting easier and it does no harm here.

---
 arch/arm/cpu/armv7/tegra20/Makefile       |   1 -
 arch/arm/cpu/armv7/tegra20/usb.c          | 555 ------------------------------
 arch/arm/include/asm/arch-tegra/usb.h     | 268 +++++++++++++++
 arch/arm/include/asm/arch-tegra20/tegra.h |   1 -
 arch/arm/include/asm/arch-tegra20/usb.h   | 268 ---------------
 arch/arm/include/asm/arch-tegra30/tegra.h |   2 +
 board/nvidia/common/board.c               |   2 +-
 drivers/usb/host/ehci-tegra.c             | 535 +++++++++++++++++++++++++++-
 8 files changed, 804 insertions(+), 828 deletions(-)
 delete mode 100644 arch/arm/cpu/armv7/tegra20/usb.c
 create mode 100644 arch/arm/include/asm/arch-tegra/usb.h
 delete mode 100644 arch/arm/include/asm/arch-tegra20/usb.h
arch/arm/cpu/armv7/tegra20/Makefile +0 -1
index 54ed8c4..c8a8504 100644
@@ -27,7 +27,6 @@ include $(TOPDIR)/config.mk
 
 LIB	=  $(obj)lib$(SOC).o
 
-COBJS-$(CONFIG_USB_EHCI_TEGRA) += usb.o
 COBJS-$(CONFIG_PWM_TEGRA) += pwm.o
 COBJS-$(CONFIG_VIDEO_TEGRA) += display.o
 
arch/arm/cpu/armv7/tegra20/usb.c deleted +0 -555

555 lines not on this page · raw message

arch/arm/include/asm/arch-tegra/usb.h new file +268 -0

268 lines not on this page · raw message

arch/arm/include/asm/arch-tegra20/tegra.h +0 -1
index e1de044..ad5c01d 100644
@@ -29,7 +29,6 @@
 #include <asm/arch-tegra/tegra.h>
 
 #define TEGRA_USB1_BASE		0xC5000000
-#define TEGRA_USB3_BASE		0xC5008000
 
 #define BCT_ODMDATA_OFFSET	4068	/* 12 bytes from end of BCT */
 
arch/arm/include/asm/arch-tegra20/usb.h deleted +0 -268

268 lines not on this page · raw message

arch/arm/include/asm/arch-tegra30/tegra.h +2 -0
index decf564..c02c5d8 100644
@@ -21,6 +21,8 @@
 
 #include <asm/arch-tegra/tegra.h>
 
+#define TEGRA_USB1_BASE		0x7D000000
+
 #define BCT_ODMDATA_OFFSET	6116	/* 12 bytes from end of BCT */
 
 #define MAX_NUM_CPU		4
board/nvidia/common/board.c +1 -1
index a4af539..5c17219 100644
@@ -46,7 +46,7 @@
 #include <asm/arch/emc.h>
 #endif
 #ifdef CONFIG_USB_EHCI_TEGRA
-#include <asm/arch/usb.h>
+#include <asm/arch-tegra/usb.h>
 #endif
 #include <i2c.h>
 #include <spi.h>
drivers/usb/host/ehci-tegra.c +533 -2

556 lines not on this page · raw message

Signature · 1 line
1.8.1
#7 lore raw

PATCH v3 7/7 tegra: usb: move [start|stop]_port into ehci_hcd_[init|stop]

In reply to Lucas Stach

The ehci_hcd entry points were just calling into the Tegra USB functions. Now that they are in the same file we can just move over the implementation.

---
 arch/arm/include/asm/arch-tegra/usb.h |  19 ------
 drivers/usb/host/ehci-tegra.c         | 119 +++++++++++++++-------------------
 2 files changed, 51 insertions(+), 87 deletions(-)
arch/arm/include/asm/arch-tegra/usb.h +0 -19
index b18c850..ef6c089 100644
@@ -246,23 +246,4 @@ struct usb_ctlr {
 /* Setup USB on the board */
 int board_usb_init(const void *blob);
 
-/**
- * Start up the given port number (ports are numbered from 0 on each board).
- * This returns values for the appropriate hccr and hcor addresses to use for
- * USB EHCI operations.
- *
- * @param portnum	port number to start
- * @param hccr		returns start address of EHCI HCCR registers
- * @param hcor		returns start address of EHCI HCOR registers
- * @return 0 if ok, -1 on error (generally invalid port number)
- */
-int tegrausb_start_port(int portnum, u32 *hccr, u32 *hcor);
-
-/**
- * Stop the current port
- *
- * @return 0 if ok, -1 if no port was active
- */
-int tegrausb_stop_port(int portnum);
-
 #endif	/* _TEGRA_USB_H_ */
drivers/usb/host/ehci-tegra.c +51 -68

143 lines not on this page · raw message

Signature · 1 line
1.8.1
#8 lore raw

PATCH v3 7/7 tegra: usb: move [start|stop]_port into ehci_hcd_[init|stop]

Hi,

Quoted 6 lines · Lucas Stach

The ehci_hcd entry points were just calling into the Tegra USB functions. Now that they are in the same file we can just move over the implementation.

I didn't review this again as apparently I acked it all last time. Thanks.

Regards,
Simon

#9 lore raw

v3 cover Move Tegra EHCI drive to correct place

In reply to Lucas Stach

Dear Lucas Stach,

Quoted 13 lines

This moves out the Tegra EHCI driver from a platform specific directory to the standard driver/usb/host dir.

This is a preparation needed to share this driver between Tegra20 and Tegra30. No functional change in here, so Tegra30 is still not working.

Patch 6 could be a lot smaller if it were generated with -B, as GIT would detect that most of it is moving stuff over, but last time I did this it prevented git apply to work. So sorry for the big diff.

I think I incorporated all changes needed to reflect the review feedback I got on this last time.

Quoted 6 lines

V3 is rebased onto u-boot-tegra/next, fixes a build warning and has Simons acked-by attached to the patches.

I expect this series to go in through the Tegra tree. Marek, I suppose you are OK with the series, as you already were about to apply them in V2 form, please ACK so Tom can pick them up.

Please put all those into the Tegra tree, thanks.

Best regards,
Marek Vasut

#10 lore raw

v3 cover Move Tegra EHCI drive to correct place

In reply to Lucas Stach

Dear Lucas Stach,

Quoted 29 lines

This moves out the Tegra EHCI driver from a platform specific directory to the standard driver/usb/host dir.

This is a preparation needed to share this driver between Tegra20 and Tegra30. No functional change in here, so Tegra30 is still not working.

Patch 6 could be a lot smaller if it were generated with -B, as GIT would detect that most of it is moving stuff over, but last time I did this it prevented git apply to work. So sorry for the big diff.

I think I incorporated all changes needed to reflect the review feedback I got on this last time.

V3 is rebased onto u-boot-tegra/next, fixes a build warning and has Simons acked-by attached to the patches.

I expect this series to go in through the Tegra tree. Marek, I suppose you are OK with the series, as you already were about to apply them in V2 form, please ACK so Tom can pick them up.

Lucas Stach (7):
tegra: usb: set USB_PORTS_MAX to correct value
tegra: usb: make controller init functions more self contained
tegra: usb: remove unneeded function parameter
tegra: usb: move controller init into start_port
tegra: usb: various small cleanups
tegra: usb: move implementation into right directory
tegra: usb: move [start|stop]_port into ehci_hcd_[init|stop]

Quoted 14 lines
 arch/arm/cpu/armv7/tegra20/Makefile       |   1 -
 arch/arm/cpu/armv7/tegra20/usb.c          | 567
------------------------------ arch/arm/include/asm/arch-tegra/usb.h     |
249 +++++++++++++
 arch/arm/include/asm/arch-tegra20/tegra.h |   1 -
 arch/arm/include/asm/arch-tegra20/usb.h   | 271 --------------
 arch/arm/include/asm/arch-tegra30/tegra.h |   2 +
 board/nvidia/common/board.c               |   2 +-
 drivers/usb/host/ehci-tegra.c             | 546
+++++++++++++++++++++++++++- 8 files changed, 782 insertions(+), 857
deletions(-)
 delete mode 100644 arch/arm/cpu/armv7/tegra20/usb.c
 create mode 100644 arch/arm/include/asm/arch-tegra/usb.h
 delete mode 100644 arch/arm/include/asm/arch-tegra20/usb.h

These will go through the tegra tree, yes? Otherwise I'm fine with these patches.

Best regards,
Marek Vasut

#11 lore raw

v3 cover Move Tegra EHCI drive to correct place

Am Donnerstag, den 14.02.2013, 17:27 +0100 schrieb Marek Vasut:

Quoted 46 lines

Dear Lucas Stach,

Quoted 29 lines

This moves out the Tegra EHCI driver from a platform specific directory to the standard driver/usb/host dir.

This is a preparation needed to share this driver between Tegra20 and Tegra30. No functional change in here, so Tegra30 is still not working.

Patch 6 could be a lot smaller if it were generated with -B, as GIT would detect that most of it is moving stuff over, but last time I did this it prevented git apply to work. So sorry for the big diff.

I think I incorporated all changes needed to reflect the review feedback I got on this last time.

V3 is rebased onto u-boot-tegra/next, fixes a build warning and has Simons acked-by attached to the patches.

I expect this series to go in through the Tegra tree. Marek, I suppose you are OK with the series, as you already were about to apply them in V2 form, please ACK so Tom can pick them up.

Lucas Stach (7):
tegra: usb: set USB_PORTS_MAX to correct value
tegra: usb: make controller init functions more self contained
tegra: usb: remove unneeded function parameter
tegra: usb: move controller init into start_port
tegra: usb: various small cleanups
tegra: usb: move implementation into right directory
tegra: usb: move [start|stop]_port into ehci_hcd_[init|stop]

Quoted 14 lines
 arch/arm/cpu/armv7/tegra20/Makefile       |   1 -
 arch/arm/cpu/armv7/tegra20/usb.c          | 567
------------------------------ arch/arm/include/asm/arch-tegra/usb.h     |
249 +++++++++++++
 arch/arm/include/asm/arch-tegra20/tegra.h |   1 -
 arch/arm/include/asm/arch-tegra20/usb.h   | 271 --------------
 arch/arm/include/asm/arch-tegra30/tegra.h |   2 +
 board/nvidia/common/board.c               |   2 +-
 drivers/usb/host/ehci-tegra.c             | 546
+++++++++++++++++++++++++++- 8 files changed, 782 insertions(+), 857
deletions(-)
 delete mode 100644 arch/arm/cpu/armv7/tegra20/usb.c
 create mode 100644 arch/arm/include/asm/arch-tegra/usb.h
 delete mode 100644 arch/arm/include/asm/arch-tegra20/usb.h
Quoted 3 lines

These will go through the tegra tree, yes? Otherwise I'm fine with these patches.

Yes, they are intended to go through the Tegra tree. I think Tom will pick them up for his next PR.

Regards,
Lucas