[U-Boot] [PATCH 1/3] tegra: usb: Add USB support to Tamonten boards

This adds basic USB support for port 0. Device tree support is needed to initialize the USB EHCI and will be added in a subsequent patch.
Signed-off-by: Thierry Reding thierry.reding@avionic-design.de --- board/avionic-design/common/tamonten.c | 11 +++++++++++ board/avionic-design/common/tamonten.h | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/board/avionic-design/common/tamonten.c b/board/avionic-design/common/tamonten.c index f23b657..794d90a 100644 --- a/board/avionic-design/common/tamonten.c +++ b/board/avionic-design/common/tamonten.c @@ -68,6 +68,12 @@ static void pin_mux_mmc(void) } #endif
+static void pin_mux_usb_default(void) +{ +} + +void pin_mux_usb(void) __attribute__((weak, alias("pin_mux_usb_default"))); + /* * Routine: board_init * Description: Early hardware init. @@ -80,6 +86,11 @@ int board_init(void) /* boot param addr */ gd->bd->bi_boot_params = (NV_PA_SDRAM_BASE + 0x100);
+#ifdef CONFIG_USB_EHCI_TEGRA + pin_mux_usb(); + board_usb_init(gd->fdt_blob); +#endif + return 0; }
diff --git a/board/avionic-design/common/tamonten.h b/board/avionic-design/common/tamonten.h index 0e60b0f..ee101b7 100644 --- a/board/avionic-design/common/tamonten.h +++ b/board/avionic-design/common/tamonten.h @@ -26,7 +26,7 @@ #ifndef _TAMONTEN_H_ #define _TAMONTEN_H_
-void tegra2_start(void); void gpio_config_mmc(void); +void pin_mux_usb(void);
#endif /* TAMONTEN_H */

Device tree support is required for working USB host support, which in turn enables ethernet support.
Signed-off-by: Thierry Reding thierry.reding@avionic-design.de --- board/avionic-design/dts/tegra2-medcom.dts | 67 ++++++++++++++++++++++++++++ include/configs/medcom.h | 22 ++++++++- 2 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 board/avionic-design/dts/tegra2-medcom.dts
diff --git a/board/avionic-design/dts/tegra2-medcom.dts b/board/avionic-design/dts/tegra2-medcom.dts new file mode 100644 index 0000000..f766078 --- /dev/null +++ b/board/avionic-design/dts/tegra2-medcom.dts @@ -0,0 +1,67 @@ +/dts-v1/; + +/include/ ARCH_CPU_DTS + +/ { + model = "Avionic Design Medcom-Wide"; + compatible = "avionic-design,medcom", "nvidia,tegra20"; + + aliases { + usb0 = "/usb@c5008000"; + }; + + chosen { + bootargs = "console=ttyS0,115200n8"; + }; + + memory { + reg = <0x00000000 0x20000000>; + }; + + clocks { + clk_32k: clk_32k { + clock-frequency = <32000>; + }; + + osc { + clock-frequency = <12000000>; + }; + }; + + clock@60006000 { + clocks = <&clk_32k &osc>; + }; + + serial@70006300 { + clock-frequency = <216000000>; + }; + + i2c@7000c000 { + status = "disabled"; + }; + + i2c@7000c400 { + status = "disabled"; + }; + + i2c@7000c500 { + status = "disabled"; + }; + + i2c@7000d000 { + status = "disabled"; + }; + + usb@c5000000 { + status = "disabled"; + }; + + usb@c5004000 { + status = "disabled"; + }; + + sdhci@c8000600 { + cd-gpios = <&gpio 58 0>; /* gpio PH2 */ + wp-gpios = <&gpio 59 0>; /* gpio PH3 */ + }; +}; diff --git a/include/configs/medcom.h b/include/configs/medcom.h index 2dc3507..072e15a 100644 --- a/include/configs/medcom.h +++ b/include/configs/medcom.h @@ -1,7 +1,7 @@ /* * (C) Copyright 2010,2011 * NVIDIA Corporation <www.nvidia.com> - * (C) Copyright 2011 + * (C) Copyright 2011-2012 * Avionic Design GmbH <www.avionic-design.de> * * See file CREDITS for list of people who contributed to this @@ -28,6 +28,11 @@
#include "tegra2-common.h"
+/* Enable fdt support for Medcom. Flash the image in u-boot-dtb.bin */ +#define CONFIG_DEFAULT_DEVICE_TREE tegra2-medcom +#define CONFIG_OF_CONTROL +#define CONFIG_OF_SEPARATE + /* High-level configuration options */ #define TEGRA2_SYSMEM "mem=384M@0M nvmem=128M@384M" #define V_PROMPT "Tegra2 (Medcom) # " @@ -49,6 +54,21 @@ #define CONFIG_TEGRA2_MMC #define CONFIG_CMD_MMC
+/* USB host support */ +#define CONFIG_USB_EHCI +#define CONFIG_USB_EHCI_TEGRA +#define CONFIG_USB_STORAGE +#define CONFIG_CMD_USB + +/* USB networking support */ +#define CONFIG_USB_HOST_ETHER +#define CONFIG_USB_ETHER_SMSC95XX +#define CONFIG_USB_ETHER_ASIX + +/* General networking support */ +#define CONFIG_CMD_NET +#define CONFIG_CMD_DHCP + #define CONFIG_DOS_PARTITION #define CONFIG_EFI_PARTITION #define CONFIG_CMD_EXT2

On 05/24/2012 01:04 AM, Thierry Reding wrote:
Device tree support is required for working USB host support, which in turn enables ethernet support.
diff --git a/board/avionic-design/dts/tegra2-medcom.dts b/board/avionic-design/dts/tegra2-medcom.dts
- chosen {
bootargs = "console=ttyS0,115200n8";
- };
I don't think you need that in the U-Boot .dts file, since it's specific to the kernel. Admittedly, U-Boot's tegra2-seaboard.dts has it, but none of the other Tegra .dts files do.
- sdhci@c8000600 {
cd-gpios = <&gpio 58 0>; /* gpio PH2 */
wp-gpios = <&gpio 59 0>; /* gpio PH3 */
- };
I'd prefer not to include SDHCI nodes in the U-Boot .dts files, since U-Boot doesn't support configuring the SDHCI controllers from device tree (yet?). Having these nodes exist before then would be misleading. Yes again, the seaboard .dts file has it, but it should probably be removed from there too.
diff --git a/include/configs/medcom.h b/include/configs/medcom.h
+/* USB networking support */ +#define CONFIG_USB_HOST_ETHER +#define CONFIG_USB_ETHER_SMSC95XX +#define CONFIG_USB_ETHER_ASIX
Is there an SMSC95XX on the board? Since standalone dongles with that chipset are rare, we've removed that one config option from all the other Tegra boards since it likely isn't useful (except Harmony which has that chip on board).
Aside from those comments, this looks fine.

* Stephen Warren wrote:
On 05/24/2012 01:04 AM, Thierry Reding wrote:
Device tree support is required for working USB host support, which in turn enables ethernet support.
diff --git a/board/avionic-design/dts/tegra2-medcom.dts b/board/avionic-design/dts/tegra2-medcom.dts
- chosen {
bootargs = "console=ttyS0,115200n8";
- };
I don't think you need that in the U-Boot .dts file, since it's specific to the kernel. Admittedly, U-Boot's tegra2-seaboard.dts has it, but none of the other Tegra .dts files do.
Okay, I'll drop it.
- sdhci@c8000600 {
cd-gpios = <&gpio 58 0>; /* gpio PH2 */
wp-gpios = <&gpio 59 0>; /* gpio PH3 */
- };
I'd prefer not to include SDHCI nodes in the U-Boot .dts files, since U-Boot doesn't support configuring the SDHCI controllers from device tree (yet?). Having these nodes exist before then would be misleading. Yes again, the seaboard .dts file has it, but it should probably be removed from there too.
I'll drop that as well, then. Do you want me to prepare a patch to remove those nodes from the Seaboard DTS?
diff --git a/include/configs/medcom.h b/include/configs/medcom.h
+/* USB networking support */ +#define CONFIG_USB_HOST_ETHER +#define CONFIG_USB_ETHER_SMSC95XX +#define CONFIG_USB_ETHER_ASIX
Is there an SMSC95XX on the board? Since standalone dongles with that chipset are rare, we've removed that one config option from all the other Tegra boards since it likely isn't useful (except Harmony which has that chip on board).
Yes, the Tamonten has an SMSC95XX.
Aside from those comments, this looks fine.
Thanks for reviewing.
Thierry

Device tree support is required for working USB host support, which in turn enables ethernet support.
Signed-off-by: Thierry Reding thierry.reding@avionic-design.de --- board/avionic-design/dts/tegra2-plutux.dts | 67 ++++++++++++++++++++++++++++ include/configs/plutux.h | 22 ++++++++- 2 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 board/avionic-design/dts/tegra2-plutux.dts
diff --git a/board/avionic-design/dts/tegra2-plutux.dts b/board/avionic-design/dts/tegra2-plutux.dts new file mode 100644 index 0000000..b8d815c --- /dev/null +++ b/board/avionic-design/dts/tegra2-plutux.dts @@ -0,0 +1,67 @@ +/dts-v1/; + +/include/ ARCH_CPU_DTS + +/ { + model = "Avionic Design Plutux"; + compatible = "avionic-design,plutux", "nvidia,tegra20"; + + aliases { + usb0 = "/usb@c5008000"; + }; + + chosen { + bootargs = "console=ttyS0,115200n8"; + }; + + memory { + reg = <0x00000000 0x20000000>; + }; + + clocks { + clk_32k: clk_32k { + clock-frequency = <32000>; + }; + + osc { + clock-frequency = <12000000>; + }; + }; + + clock@60006000 { + clocks = <&clk_32k &osc>; + }; + + serial@70006300 { + clock-frequency = <216000000>; + }; + + i2c@7000c000 { + status = "disabled"; + }; + + i2c@7000c400 { + status = "disabled"; + }; + + i2c@7000c500 { + status = "disabled"; + }; + + i2c@7000d000 { + status = "disabled"; + }; + + usb@c5000000 { + status = "disabled"; + }; + + usb@c5004000 { + status = "disabled"; + }; + + sdhci@c8000600 { + cd-gpios = <&gpio 58 0>; /* gpio PH2 */ + wp-gpios = <&gpio 59 0>; /* gpio PH3 */ + }; +}; diff --git a/include/configs/plutux.h b/include/configs/plutux.h index f869191..73f4292 100644 --- a/include/configs/plutux.h +++ b/include/configs/plutux.h @@ -1,7 +1,7 @@ /* * (C) Copyright 2010,2011 * NVIDIA Corporation <www.nvidia.com> - * (C) Copyright 2011 + * (C) Copyright 2011-2012 * Avionic Design GmbH <www.avionic-design.de> * * See file CREDITS for list of people who contributed to this @@ -28,6 +28,11 @@
#include "tegra2-common.h"
+/* Enable fdt support for Plutux. Flash the image in u-boot-dtb.bin */ +#define CONFIG_DEFAULT_DEVICE_TREE tegra2-plutux +#define CONFIG_OF_CONTROL +#define CONFIG_OF_SEPARATE + /* High-level configuration options */ #define TEGRA2_SYSMEM "mem=384M@0M nvmem=128M@384M" #define V_PROMPT "Tegra2 (Plutux) # " @@ -49,6 +54,21 @@ #define CONFIG_TEGRA2_MMC #define CONFIG_CMD_MMC
+/* USB host support */ +#define CONFIG_USB_EHCI +#define CONFIG_USB_EHCI_TEGRA +#define CONFIG_USB_STORAGE +#define CONFIG_CMD_USB + +/* USB networking support */ +#define CONFIG_USB_HOST_ETHER +#define CONFIG_USB_ETHER_SMSC95XX +#define CONFIG_USB_ETHER_ASIX + +/* General networking support */ +#define CONFIG_CMD_NET +#define CONFIG_CMD_DHCP + #define CONFIG_DOS_PARTITION #define CONFIG_EFI_PARTITION #define CONFIG_CMD_EXT2

On 05/24/2012 01:04 AM, Thierry Reding wrote:
This adds basic USB support for port 0. Device tree support is needed to initialize the USB EHCI and will be added in a subsequent patch.
I don't think this is anything in particular to do with USB support "for port 0"; it's general USB support.
The code here duplicates changes made to board/nvidia/common/board.c. Shouldn't all Tegra boards be using that common board code so we don't have to duplicate all this early setup for every board vendor using Tegra? Otherwise, every time we add I2C, SPI, LP0, ... to board/nvidia/common/board.c, you'll just have to make the same change to tamonten.c too.

* Stephen Warren wrote:
On 05/24/2012 01:04 AM, Thierry Reding wrote:
This adds basic USB support for port 0. Device tree support is needed to initialize the USB EHCI and will be added in a subsequent patch.
I don't think this is anything in particular to do with USB support "for port 0"; it's general USB support.
Okay, I did copy this from Simon's earlier commits. I can just drop "for port 0". It isn't really relevant anyway.
The code here duplicates changes made to board/nvidia/common/board.c. Shouldn't all Tegra boards be using that common board code so we don't have to duplicate all this early setup for every board vendor using Tegra? Otherwise, every time we add I2C, SPI, LP0, ... to board/nvidia/common/board.c, you'll just have to make the same change to tamonten.c too.
I think the problem is U-Boot's build system, which doesn't allow sharing code between different subdirectories of board/.
Thierry

On 05/24/2012 03:07 PM, Thierry Reding wrote:
- Stephen Warren wrote:
On 05/24/2012 01:04 AM, Thierry Reding wrote:
This adds basic USB support for port 0. Device tree support is needed to initialize the USB EHCI and will be added in a subsequent patch.
...
The code here duplicates changes made to board/nvidia/common/board.c. Shouldn't all Tegra boards be using that common board code so we don't have to duplicate all this early setup for every board vendor using Tegra? Otherwise, every time we add I2C, SPI, LP0, ... to board/nvidia/common/board.c, you'll just have to make the same change to tamonten.c too.
I think the problem is U-Boot's build system, which doesn't allow sharing code between different subdirectories of board/.
I have both board/compulab/trimslice and board/compal/paz00 sharing the board/nvidia/common code; take a look at their Makefiles.

* Stephen Warren wrote:
On 05/24/2012 03:07 PM, Thierry Reding wrote:
- Stephen Warren wrote:
On 05/24/2012 01:04 AM, Thierry Reding wrote:
This adds basic USB support for port 0. Device tree support is needed to initialize the USB EHCI and will be added in a subsequent patch.
...
The code here duplicates changes made to board/nvidia/common/board.c. Shouldn't all Tegra boards be using that common board code so we don't have to duplicate all this early setup for every board vendor using Tegra? Otherwise, every time we add I2C, SPI, LP0, ... to board/nvidia/common/board.c, you'll just have to make the same change to tamonten.c too.
I think the problem is U-Boot's build system, which doesn't allow sharing code between different subdirectories of board/.
I have both board/compulab/trimslice and board/compal/paz00 sharing the board/nvidia/common code; take a look at their Makefiles.
Okay, will do.
Thierry
participants (2)
-
Stephen Warren
-
Thierry Reding