Skip to contentSkip to conversation

tegra: add Colibri T20 board support

PATCH Superseded Lucas Stach 2 participants 4 messages Sep 29, 2012 – Oct 1, 2012 Tegra architecture support

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 tegra: add Colibri T20 board support

This adds board support for the Toradex Colibri T20 module.

Working functions:
- SD card boot
- USB boot
- Network
- NAND environment

CC Stephen Warren <[email protected]>
CC Tom Warren <[email protected]>

---
v2: rename .dts file to match board name

---
 MAINTAINERS                               |  4 ++
 board/toradex/colibri_t20/Makefile        | 38 ++++++++++++++
 board/toradex/colibri_t20/colibri_t20.c   | 64 +++++++++++++++++++++++
 board/toradex/dts/tegra20-colibri_t20.dts | 39 ++++++++++++++
 boards.cfg                                |  1 +
 include/configs/colibri_t20.h             | 84 +++++++++++++++++++++++++++++++
 6 Dateien ge?ndert, 230 Zeilen hinzugef?gt(+)
 create mode 100644 board/toradex/colibri_t20/Makefile
 create mode 100644 board/toradex/colibri_t20/colibri_t20.c
 create mode 100644 board/toradex/dts/tegra20-colibri_t20.dts
 create mode 100644 include/configs/colibri_t20.h
MAINTAINERS +4 -0
index a00e850..6b3e9a4 100644
@@ -890,6 +890,10 @@ Matt Sealey <[email protected]>
 Bo Shen <[email protected]>
 	at91sam9x5ek		ARM926EJS (AT91SAM9G15,G25,G35,X25,X35 SoC)
 
+Lucas Stach <[email protected]>
+
+	colibri_t20		Tegra20 (ARM7 & A9 Dual Core)
+
 Nick Thompson <[email protected]>
 
 	da830evm	ARM926EJS (DA830/OMAP-L137)
board/toradex/colibri_t20/Makefile new file +38 -0
new file mode 100644
index 0000000..b8c61b6
@@ -0,0 +1,38 @@
+#
+#  (C) Copyright 2012 Lucas Stach
+#
+#  This program is free software; you can redistribute it and/or
+#  modify it under the terms of the GNU General Public License as
+#  published by the Free Software Foundation; either version 2 of
+#  the License, or (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#
+
+include $(TOPDIR)/config.mk
+
+$(shell mkdir -p $(obj)../../nvidia/common)
+
+LIB	= $(obj)lib$(BOARD).o
+
+COBJS	:= ../../nvidia/common/board.o
+COBJS	+= $(BOARD).o
+
+SRCS	:= $(COBJS:.o=.c)
+OBJS	:= $(addprefix $(obj),$(COBJS))
+
+$(LIB):	$(obj).depend $(OBJS)
+	$(call cmd_link_o_target, $(OBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
\ No newline at end of file
board/toradex/colibri_t20/colibri_t20.c new file +64 -0

64 lines not on this page · raw message

board/toradex/dts/tegra20-colibri_t20.dts new file +39 -0
new file mode 100644
index 0000000..29db0c8
@@ -0,0 +1,39 @@
+/dts-v1/;
+
+/include/ ARCH_CPU_DTS
+
+/ {
+	model = "Toradex Colibri T20";
+	compatible = "toradex,t20", "nvidia,tegra20";
+
+	aliases {
+		/* This defines the order of our USB ports */
+		usb0 = "/usb at c5008000";
+		usb1 = "/usb at c5000000";
+		usb2 = "/usb at c5004000";
+	};
+
+	usb at c5000000 {
+		dr_mode = "otg";
+	};
+
+	usb at c5004000 {
+		nvidia,phy-reset-gpio = <&gpio 169 0>; /* PV1 */
+		nvidia,vbus-gpio = <&gpio 217 0>; /* PBB1 */
+	};
+
+	usb at c5008000 {
+		nvidia,vbus-gpio = <&gpio 178 1>; /* PW2 low-active */
+	};
+
+	nand-controller at 70008000 {
+		nvidia,wp-gpios = <&gpio 144 0>; /* PS0 */
+		nvidia,width = <8>;
+		nvidia,timing = <15 100 25 80 25 10 15 10 100>;
+
+		nand at 0 {
+			reg = <0>;
+			compatible = "nand-flash";
+		};
+	};
+};
boards.cfg +1 -0
index 4ae6656..1a33b44 100644
@@ -270,6 +270,7 @@ harmony                      arm         armv7:arm720t harmony           nvidia
 seaboard                     arm         armv7:arm720t seaboard          nvidia         tegra20
 ventana                      arm         armv7:arm720t ventana           nvidia         tegra20
 whistler                     arm         armv7:arm720t whistler          nvidia         tegra20
+colibri_t20                  arm         armv7:arm720t colibri_t20       toradex        tegra20
 u8500_href                   arm         armv7       u8500               st-ericsson    u8500
 snowball                     arm         armv7       snowball               st-ericsson    u8500
 actux1_4_16                  arm         ixp         actux1              -              -           actux1:FLASH2X2
include/configs/colibri_t20.h new file +84 -0

84 lines not on this page · raw message

Signature · 1 line
1.7.11.4
#1 lore raw

PATCH v2 1/1 tegra: add Colibri T20 board support

Quoted 9 lines · Lucas Stach

This adds board support for the Toradex Colibri T20 module.

Working functions:
- SD card boot
- USB boot
- Network
- NAND environment

board/toradex/colibri_t20/Makefile +0 -0

...

Quoted 2 lines

+#########################################################################
\ No newline at end of file

I assume that's a mistake.

board/toradex/colibri_t20/colibri_t20.c line 34

Quoted 7 lines
board/toradex/colibri_t20/colibri_t20.c +5 -0
 
+#ifdef CONFIG_USB_EHCI_TEGRA
+void pin_mux_usb(void)
+{
+	/* USB 1 aka Tegra USB port 3 */
+	pinmux_tristate_disable(PINGRP_SPIG);

I don't think that's muxing USB itself, but rather muxing perhaps the VBUS GPIO?

board/toradex/colibri_t20/colibri_t20.c line 51

Quoted 5 lines
board/toradex/colibri_t20/colibri_t20.c +5 -0
+#ifdef CONFIG_TEGRA_MMC
+int board_mmc_init(bd_t *bd)
+{
+	funcmux_select(PERIPH_ID_SDMMC4, FUNCMUX_SDMMC4_ATB_GMA_4_BIT);
+	pinmux_tristate_disable(PINGRP_GMB);

It might be useful to comment the tristate call like other boards, e.g.:

        /* For power GPIO PI6 */
        pinmux_tristate_disable(PINGRP_ATA);

so it's obvious why the call isn't done inside funcmux_select().

board/toradex/dts/tegra20-colibri_t20.dts line 27

Quoted 5 lines
board/toradex/dts/tegra20-colibri_t20.dts +3 -0
 
+	usb at c5008000 {
+		nvidia,vbus-gpio = <&gpio 178 1>; /* PW2 low-active */
+	};

As an FYI, although the GPIO bindings do specify that the last cell there is for GPIO flags, I'm not sure that we should rely on it. Not all GPIO bindings actually have the ability to specify flags there, so if a given board's GPIO is provided by some device whose GPIO binding doesn't allow for flags, then it won't be possible to specify an active-low GPIO, and this won't work.

The kernel certainly doesn't actually do anything with the flags argument in the EHCI driver, IIRC.

Either we should forcibly change all GPIO bindings in the kernel to require that they allow flags to be specified (probably very hard), or remove the flags from the Tegra GPIO binding, and use a separate property such as nvidia,vbus-gpio-active-low for this purpose. Certainly, the latter form of approach has been taken in other places (such as fixed regulator IIRC).

#2 lore raw

PATCH v2 1/1 tegra: add Colibri T20 board support

Am Montag, den 01.10.2012, 10:33 -0600 schrieb Stephen Warren:

Quoted 9 lines · Lucas Stach
Quoted 7 lines

This adds board support for the Toradex Colibri T20 module.

Working functions:
- SD card boot
- USB boot
- Network
- NAND environment

Quoted 7 lines
Quoted 1 line
board/toradex/colibri_t20/Makefile +0 -0

...

Quoted 2 lines

+#########################################################################
\ No newline at end of file

I assume that's a mistake.

Another one...

Quoted 11 lines

board/toradex/colibri_t20/colibri_t20.c line 34

Quoted 7 lines
board/toradex/colibri_t20/colibri_t20.c +5 -0
 
+#ifdef CONFIG_USB_EHCI_TEGRA
+void pin_mux_usb(void)
+{
+	/* USB 1 aka Tegra USB port 3 */
+	pinmux_tristate_disable(PINGRP_SPIG);

I don't think that's muxing USB itself, but rather muxing perhaps the VBUS GPIO?

That's right. I'll do a comment to make this more obvious.

Quoted 29 lines

board/toradex/colibri_t20/colibri_t20.c line 51

Quoted 5 lines
board/toradex/colibri_t20/colibri_t20.c +5 -0
+#ifdef CONFIG_TEGRA_MMC
+int board_mmc_init(bd_t *bd)
+{
+	funcmux_select(PERIPH_ID_SDMMC4, FUNCMUX_SDMMC4_ATB_GMA_4_BIT);
+	pinmux_tristate_disable(PINGRP_GMB);

It might be useful to comment the tristate call like other boards, e.g.:

        /* For power GPIO PI6 */
        pinmux_tristate_disable(PINGRP_ATA);

so it's obvious why the call isn't done inside funcmux_select().

board/toradex/dts/tegra20-colibri_t20.dts line 27

Quoted 5 lines
board/toradex/dts/tegra20-colibri_t20.dts +3 -0
 
+	usb at c5008000 {
+		nvidia,vbus-gpio = <&gpio 178 1>; /* PW2 low-active */
+	};

As an FYI, although the GPIO bindings do specify that the last cell there is for GPIO flags, I'm not sure that we should rely on it. Not all GPIO bindings actually have the ability to specify flags there, so if a given board's GPIO is provided by some device whose GPIO binding doesn't allow for flags, then it won't be possible to specify an active-low GPIO, and this won't work.

The kernel certainly doesn't actually do anything with the flags argument in the EHCI driver, IIRC.

Quoted 7 lines

Either we should forcibly change all GPIO bindings in the kernel to require that they allow flags to be specified (probably very hard), or remove the flags from the Tegra GPIO binding, and use a separate property such as nvidia,vbus-gpio-active-low for this purpose. Certainly, the latter form of approach has been taken in other places (such as fixed regulator IIRC).

You mentioned that your plan is to bring over the regulator thing from the kernel to u-boot. So IMHO the correct approach would be to just use a fixed regulator for VBUS, where we already have the active-low property in the binding.

So can we just let this sit as it is now, and agree to remove the GPIO active-low flag from the Tegra GPIO binding and every use of it as soon as we have proper regulators in u-boot?

Thanks for the review,
Lucas

#3 lore raw

PATCH v2 1/1 tegra: add Colibri T20 board support

Quoted 68 lines · Lucas Stach

Am Montag, den 01.10.2012, 10:33 -0600 schrieb Stephen Warren:

Quoted 9 lines · Lucas Stach
Quoted 7 lines

This adds board support for the Toradex Colibri T20 module.

Working functions:
- SD card boot
- USB boot
- Network
- NAND environment

Quoted 7 lines
Quoted 1 line
board/toradex/colibri_t20/Makefile +0 -0

...

Quoted 2 lines

+#########################################################################
\ No newline at end of file

I assume that's a mistake.

Another one...

Quoted 11 lines

board/toradex/colibri_t20/colibri_t20.c line 34

Quoted 7 lines
board/toradex/colibri_t20/colibri_t20.c +5 -0
 
+#ifdef CONFIG_USB_EHCI_TEGRA
+void pin_mux_usb(void)
+{
+	/* USB 1 aka Tegra USB port 3 */
+	pinmux_tristate_disable(PINGRP_SPIG);

I don't think that's muxing USB itself, but rather muxing perhaps the VBUS GPIO?

That's right. I'll do a comment to make this more obvious.

Quoted 29 lines

board/toradex/colibri_t20/colibri_t20.c line 51

Quoted 5 lines
board/toradex/colibri_t20/colibri_t20.c +5 -0
+#ifdef CONFIG_TEGRA_MMC
+int board_mmc_init(bd_t *bd)
+{
+	funcmux_select(PERIPH_ID_SDMMC4, FUNCMUX_SDMMC4_ATB_GMA_4_BIT);
+	pinmux_tristate_disable(PINGRP_GMB);

It might be useful to comment the tristate call like other boards, e.g.:

        /* For power GPIO PI6 */
        pinmux_tristate_disable(PINGRP_ATA);

so it's obvious why the call isn't done inside funcmux_select().

board/toradex/dts/tegra20-colibri_t20.dts line 27

Quoted 5 lines
board/toradex/dts/tegra20-colibri_t20.dts +3 -0
 
+	usb at c5008000 {
+		nvidia,vbus-gpio = <&gpio 178 1>; /* PW2 low-active */
+	};

As an FYI, although the GPIO bindings do specify that the last cell there is for GPIO flags, I'm not sure that we should rely on it. Not all GPIO bindings actually have the ability to specify flags there, so if a given board's GPIO is provided by some device whose GPIO binding doesn't allow for flags, then it won't be possible to specify an active-low GPIO, and this won't work.

The kernel certainly doesn't actually do anything with the flags argument in the EHCI driver, IIRC.

Quoted 6 lines

Either we should forcibly change all GPIO bindings in the kernel to require that they allow flags to be specified (probably very hard), or remove the flags from the Tegra GPIO binding, and use a separate property such as nvidia,vbus-gpio-active-low for this purpose. Certainly, the latter form of approach has been taken in other places (such as fixed regulator IIRC).

Quoted 4 lines

You mentioned that your plan is to bring over the regulator thing from the kernel to u-boot. So IMHO the correct approach would be to just use a fixed regulator for VBUS, where we already have the active-low property in the binding.

Yes, that's true.

Quoted 3 lines

So can we just let this sit as it is now, and agree to remove the GPIO active-low flag from the Tegra GPIO binding and every use of it as soon as we have proper regulators in u-boot?

Hmmm. I guess. I wonder how likely it is that anyone is going to get around to cleaning up U-Boot's DT usage to match the kernel's though. At least I can file a bug for this once the kernel is update though, so hopefully it will happen. I do wish that U-Boot would start using generally agreed upon bindings rather than going its own way first and then having to be cleaned up though, although admittedly that comment doesn't directly apply to this case.