All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] ARM: tegra: add Colibri T30 board support
@ 2014-07-31 17:36 Stefan Agner
  2014-07-31 17:41 ` Simon Glass
  2014-07-31 18:21 ` Stephen Warren
  0 siblings, 2 replies; 13+ messages in thread
From: Stefan Agner @ 2014-07-31 17:36 UTC (permalink / raw)
  To: u-boot

This adds board support for the Toradex Colibri T30 module.

Working functions:
- SD card boot
- eMMC environment and boot
- USB host/USB client (on the dual role port)
- Network (via ASIX USB)

Signed-off-by: Stefan Agner <stefan@agner.ch>
---
 arch/arm/Kconfig                                   |   4 +
 arch/arm/dts/Makefile                              |   1 +
 arch/arm/dts/tegra30-colibri.dts                   |  84 +++++
 arch/arm/include/asm/mach-types.h                  |  13 +
 board/toradex/colibri_t30/Makefile                 |   6 +
 board/toradex/colibri_t30/colibri_t30.c            |  52 +++
 .../colibri_t30/pinmux-config-colibri_t30.h        | 360 +++++++++++++++++++++
 include/configs/colibri_t30.h                      |  73 +++++
 8 files changed, 593 insertions(+)
 create mode 100644 arch/arm/dts/tegra30-colibri.dts
 create mode 100644 board/toradex/colibri_t30/Makefile
 create mode 100644 board/toradex/colibri_t30/colibri_t30.c
 create mode 100644 board/toradex/colibri_t30/pinmux-config-colibri_t30.h
 create mode 100644 include/configs/colibri_t30.h

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index e385eda..dd987cc 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -701,6 +701,9 @@ config TARGET_WHISTLER
 config TARGET_COLIBRI_T20_IRIS
 	bool "Support colibri_t20_iris"
 
+config TARGET_COLIBRI_T30
+	bool "Support Colibri T30"
+
 config TARGET_TEC_NG
 	bool "Support tec-ng"
 
@@ -989,6 +992,7 @@ source "board/timll/devkit3250/Kconfig"
 source "board/timll/devkit8000/Kconfig"
 source "board/toradex/colibri_pxa270/Kconfig"
 source "board/toradex/colibri_t20_iris/Kconfig"
+source "board/toradex/colibri_t30/Kconfig"
 source "board/trizepsiv/Kconfig"
 source "board/ttcontrol/vision2/Kconfig"
 source "board/udoo/Kconfig"
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
index 6e2e313..c46b7be 100644
--- a/arch/arm/dts/Makefile
+++ b/arch/arm/dts/Makefile
@@ -21,6 +21,7 @@ dtb-$(CONFIG_TEGRA) += tegra20-harmony.dtb \
 	tegra20-colibri_t20_iris.dtb \
 	tegra30-beaver.dtb \
 	tegra30-cardhu.dtb \
+	tegra30-colibri.dtb \
 	tegra30-tec-ng.dtb \
 	tegra114-dalmore.dtb \
 	tegra124-jetson-tk1.dtb \
diff --git a/arch/arm/dts/tegra30-colibri.dts b/arch/arm/dts/tegra30-colibri.dts
new file mode 100644
index 0000000..21d0311
--- /dev/null
+++ b/arch/arm/dts/tegra30-colibri.dts
@@ -0,0 +1,84 @@
+/dts-v1/;
+
+#include "tegra30.dtsi"
+
+/ {
+	model = "Toradex Colibri T30";
+	compatible = "toradex,colibri_t30", "nvidia,tegra30";
+
+	aliases {
+		i2c0 = "/i2c at 7000d000";
+		i2c1 = "/i2c at 7000c000";
+		i2c2 = "/i2c at 7000c700";
+		sdhci0 = "/sdhci at 78000600";
+		sdhci1 = "/sdhci at 78000200";
+		usb0 = "/usb at 7d000000";
+		usb1 = "/usb at 7d004000"; /* on module only, for ASIX */
+		usb2 = "/usb at 7d008000";
+	};
+
+	memory {
+		device_type = "memory";
+		reg = <0x80000000 0x40000000>;
+	};
+
+	/* GEN1_I2C: I2C_SDA/SCL on SODIMM pin 194/196 (e.g. RTC on carrier
+	   board) */
+	i2c at 7000c000 {
+		status = "okay";
+		clock-frequency = <100000>;
+	};
+
+	/* GEN2_I2C: unused */
+
+	/* CAM_I2C: unused */
+
+	/* DDC_CLOCK/DATA on X3 pin 15/16 (e.g. display EDID) */
+	i2c at 7000c700 {
+		status = "okay";
+		clock-frequency = <100000>;
+	};
+
+	/* PWR_I2C: power I2C to audio codec, PMIC, temperature sensor and
+	   touch screen controller */
+	i2c at 7000d000 {
+		status = "okay";
+		clock-frequency = <100000>;
+	};
+
+	/* SPI1: Colibri SSP */
+	spi at 7000d400 {
+		status = "okay";
+		spi-max-frequency = <25000000>;
+	};
+
+	sdhci at 78000200 {
+		status = "okay";
+		bus-width = <4>;
+		cd-gpios = <&gpio 23 1>; /* PC7, MMCD */
+	};
+
+	sdhci at 78000600 {
+		status = "okay";
+		bus-width = <8>;
+		non-removable;
+	};
+
+	/* EHCI instance 0: USB1_DP/N -> USBC_P/N */
+	usb at 7d000000 {
+		status = "okay";
+		dr_mode = "otg";
+	};
+
+	/* EHCI instance 1: USB2_DP/N -> AX88772B */
+	usb at 7d004000 {
+		status = "okay";
+		phy_type = "utmi";
+	};
+
+	/* EHCI instance 2: USB3_DP/N -> USBH_P/N */
+	usb at 7d008000 {
+		status = "okay";
+		nvidia,vbus-gpio = <&gpio 178 1>;	/* PW2, USBH_PEN */
+	};
+};
diff --git a/arch/arm/include/asm/mach-types.h b/arch/arm/include/asm/mach-types.h
index 440b041..560924e 100644
--- a/arch/arm/include/asm/mach-types.h
+++ b/arch/arm/include/asm/mach-types.h
@@ -1106,6 +1106,7 @@ extern unsigned int __machine_arch_type;
 #define MACH_TYPE_OMAP5_SEVM           3777
 #define MACH_TYPE_ARMADILLO_800EVA     3863
 #define MACH_TYPE_KZM9G                4140
+#define MACH_TYPE_COLIBRI_T30          4493
 
 #ifdef CONFIG_ARCH_EBSA110
 # ifdef machine_arch_type
@@ -14235,6 +14236,18 @@ extern unsigned int __machine_arch_type;
 # define machine_is_kzm9g()	(0)
 #endif
 
+#ifdef CONFIG_MACH_COLIBRI_T30
+# ifdef machine_arch_type
+#  undef machine_arch_type
+#  define machine_arch_type	__machine_arch_type
+# else
+#  define machine_arch_type	MACH_TYPE_COLIBRI_T30
+# endif
+# define machine_is_colibri_t30()	(machine_arch_type == MACH_TYPE_COLIBRI_T30)
+#else
+# define machine_is_colibri_t30()	(0)
+#endif
+
 /*
  * These have not yet been registered
  */
diff --git a/board/toradex/colibri_t30/Makefile b/board/toradex/colibri_t30/Makefile
new file mode 100644
index 0000000..3d58a4b
--- /dev/null
+++ b/board/toradex/colibri_t30/Makefile
@@ -0,0 +1,6 @@
+# Copyright (c) 2013-2014 Stefan Agner
+# SPDX-License-Identifier:      GPL-2.0+
+
+include $(srctree)/board/nvidia/common/common.mk
+
+obj-y	+= colibri_t30.o
diff --git a/board/toradex/colibri_t30/colibri_t30.c b/board/toradex/colibri_t30/colibri_t30.c
new file mode 100644
index 0000000..6c7c62d
--- /dev/null
+++ b/board/toradex/colibri_t30/colibri_t30.c
@@ -0,0 +1,52 @@
+/*
+ *  (C) Copyright 2014
+ *  Stefan Agner <stefan@agner.ch>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/arch/pinmux.h>
+#include <asm/arch/gp_padctrl.h>
+#include "pinmux-config-colibri_t30.h"
+#include <i2c.h>
+#include <asm/gpio.h>
+
+#define PMU_I2C_ADDRESS		0x2D
+#define MAX_I2C_RETRY		3
+
+/*
+ * Routine: pinmux_init
+ * Description: Do individual peripheral pinmux configs
+ */
+void pinmux_init(void)
+{
+	pinmux_config_pingrp_table(tegra3_pinmux_common,
+				   ARRAY_SIZE(tegra3_pinmux_common));
+
+	pinmux_config_pingrp_table(unused_pins_lowpower,
+				   ARRAY_SIZE(unused_pins_lowpower));
+
+	/* Initialize any non-default pad configs (APB_MISC_GP regs) */
+	pinmux_config_drvgrp_table(colibri_t30_padctrl,
+				   ARRAY_SIZE(colibri_t30_padctrl));
+}
+
+/*
+ * Enable AX88772B USB to LAN controller
+ */
+void pin_mux_usb(void)
+{
+	/* Enable LAN_VBUS */
+	gpio_request(GPIO_PDD2, NULL);
+	gpio_direction_output(GPIO_PDD2, 1);
+
+	/* Reset ASIX using LAN_RESET */
+	gpio_request(GPIO_PDD0, NULL);
+	gpio_direction_output(GPIO_PDD0, 0);
+
+	udelay(5);
+
+	gpio_set_value(GPIO_PDD0, 1);
+}
+
diff --git a/board/toradex/colibri_t30/pinmux-config-colibri_t30.h b/board/toradex/colibri_t30/pinmux-config-colibri_t30.h
new file mode 100644
index 0000000..4e73c07
--- /dev/null
+++ b/board/toradex/colibri_t30/pinmux-config-colibri_t30.h
@@ -0,0 +1,360 @@
+/*
+ * Copyright (c) 2013-2014, Stefan Agner
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _PINMUX_CONFIG_COLIBRI_T30_H_
+#define _PINMUX_CONFIG_COLIBRI_T30_H_
+
+#define DEFAULT_PINMUX(_pingrp, _mux, _pull, _tri, _io)		\
+	{							\
+		.pingrp		= PMUX_PINGRP_##_pingrp,	\
+		.func		= PMUX_FUNC_##_mux,		\
+		.pull		= PMUX_PULL_##_pull,		\
+		.tristate	= PMUX_TRI_##_tri,		\
+		.io		= PMUX_PIN_##_io,		\
+		.lock		= PMUX_PIN_LOCK_DEFAULT,	\
+		.od		= PMUX_PIN_OD_DEFAULT,		\
+		.ioreset	= PMUX_PIN_IO_RESET_DEFAULT,	\
+	}
+
+#define I2C_PINMUX(_pingrp, _mux, _pull, _tri, _io, _lock, _od)	\
+	{							\
+		.pingrp		= PMUX_PINGRP_##_pingrp,	\
+		.func		= PMUX_FUNC_##_mux,		\
+		.pull		= PMUX_PULL_##_pull,		\
+		.tristate	= PMUX_TRI_##_tri,		\
+		.io		= PMUX_PIN_##_io,		\
+		.lock		= PMUX_PIN_LOCK_##_lock,	\
+		.od		= PMUX_PIN_OD_##_od,		\
+		.ioreset	= PMUX_PIN_IO_RESET_DEFAULT,	\
+	}
+
+#define LV_PINMUX(_pingrp, _mux, _pull, _tri, _io, _lock, _ioreset) \
+	{							\
+		.pingrp		= PMUX_PINGRP_##_pingrp,	\
+		.func		= PMUX_FUNC_##_mux,		\
+		.pull		= PMUX_PULL_##_pull,		\
+		.tristate	= PMUX_TRI_##_tri,		\
+		.io		= PMUX_PIN_##_io,		\
+		.lock		= PMUX_PIN_LOCK_##_lock,	\
+		.od		= PMUX_PIN_OD_DEFAULT,		\
+		.ioreset	= PMUX_PIN_IO_RESET_##_ioreset	\
+	}
+
+#define DEFAULT_PADCFG(_drvgrp, _slwf, _slwr, _drvup, _drvdn, _lpmd, _schmt, _hsm) \
+	{							\
+		.drvgrp		= PMUX_DRVGRP_##_drvgrp,	\
+		.slwf		= _slwf,			\
+		.slwr		= _slwr,			\
+		.drvup		= _drvup,			\
+		.drvdn		= _drvdn,			\
+		.lpmd		= PMUX_LPMD_##_lpmd,		\
+		.schmt		= PMUX_SCHMT_##_schmt,		\
+		.hsm		= PMUX_HSM_##_hsm,		\
+	}
+
+static struct pmux_pingrp_config tegra3_pinmux_common[] = {
+	/* SDMMC1 disabled */
+	DEFAULT_PINMUX(SDMMC1_CLK_PZ0, RSVD1, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(SDMMC1_CMD_PZ1, RSVD1, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(SDMMC1_DAT3_PY4, RSVD1, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(SDMMC1_DAT2_PY5, RSVD1, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(SDMMC1_DAT1_PY6, RSVD1, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(SDMMC1_DAT0_PY7, RSVD1, NORMAL, NORMAL, INPUT),
+
+	/* SDMMC3 pinmux */
+	DEFAULT_PINMUX(SDMMC3_CLK_PA6, SDMMC3, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(SDMMC3_CMD_PA7, SDMMC3, UP, NORMAL, INPUT),
+	DEFAULT_PINMUX(SDMMC3_DAT0_PB7, SDMMC3, UP, NORMAL, INPUT),
+	DEFAULT_PINMUX(SDMMC3_DAT1_PB6, SDMMC3, UP, NORMAL, INPUT),
+	DEFAULT_PINMUX(SDMMC3_DAT2_PB5, SDMMC3, UP, NORMAL, INPUT),
+	DEFAULT_PINMUX(SDMMC3_DAT3_PB4, SDMMC3, UP, NORMAL, INPUT),
+	DEFAULT_PINMUX(SDMMC3_DAT6_PD3, RSVD1, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(SDMMC3_DAT7_PD4, RSVD1, NORMAL, NORMAL, INPUT),
+
+	/* SDMMC4 pinmux (eMMC) */
+	LV_PINMUX(SDMMC4_CLK_PCC4, SDMMC4, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+	LV_PINMUX(SDMMC4_CMD_PT7, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
+	LV_PINMUX(SDMMC4_DAT0_PAA0, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
+	LV_PINMUX(SDMMC4_DAT1_PAA1, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
+	LV_PINMUX(SDMMC4_DAT2_PAA2, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
+	LV_PINMUX(SDMMC4_DAT3_PAA3, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
+	LV_PINMUX(SDMMC4_DAT4_PAA4, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
+	LV_PINMUX(SDMMC4_DAT5_PAA5, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
+	LV_PINMUX(SDMMC4_DAT6_PAA6, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
+	LV_PINMUX(SDMMC4_DAT7_PAA7, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
+	LV_PINMUX(SDMMC4_RST_N_PCC3, RSVD1, DOWN, NORMAL, INPUT, DISABLE, DISABLE),
+
+	/* I2C1 pinmux */
+	I2C_PINMUX(GEN1_I2C_SCL_PC4, I2C1, NORMAL, NORMAL, INPUT, DISABLE, ENABLE),
+	I2C_PINMUX(GEN1_I2C_SDA_PC5, I2C1, NORMAL, NORMAL, INPUT, DISABLE, ENABLE),
+
+	/* I2C2 pinmux */
+	DEFAULT_PINMUX(GEN2_I2C_SCL_PT5, I2C2, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(GEN2_I2C_SDA_PT6, I2C2, NORMAL, NORMAL, INPUT),
+
+	/* I2C3 pinmux, muliplexed with KB_ROW13/KB_ROW14 */
+	I2C_PINMUX(CAM_I2C_SCL_PBB1, I2C3, NORMAL, TRISTATE, INPUT, DISABLE, ENABLE),
+	I2C_PINMUX(CAM_I2C_SDA_PBB2, I2C3, NORMAL, TRISTATE, INPUT, DISABLE, ENABLE),
+
+	/* I2C4 pinmux */
+	I2C_PINMUX(DDC_SCL_PV4, I2C4, NORMAL, NORMAL, INPUT, DISABLE, ENABLE),
+	I2C_PINMUX(DDC_SDA_PV5, I2C4, NORMAL, NORMAL, INPUT, DISABLE, ENABLE),
+
+	/* Power I2C pinmux */
+	I2C_PINMUX(PWR_I2C_SCL_PZ6, I2CPWR, NORMAL, NORMAL, INPUT, DISABLE, ENABLE),
+	I2C_PINMUX(PWR_I2C_SDA_PZ7, I2CPWR, NORMAL, NORMAL, INPUT, DISABLE, ENABLE),
+
+	DEFAULT_PINMUX(ULPI_DATA0_PO1, UARTA, NORMAL, NORMAL, OUTPUT),
+	/* UARTA RX, make sure we don't get input form a floating Pin */
+	DEFAULT_PINMUX(ULPI_DATA1_PO2, UARTA, UP, NORMAL, INPUT),
+	DEFAULT_PINMUX(ULPI_DATA2_PO3, UARTA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(ULPI_DATA3_PO4, RSVD1, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(ULPI_DATA4_PO5, UARTA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(ULPI_DATA5_PO6, UARTA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(ULPI_DATA6_PO7, UARTA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(ULPI_DATA7_PO0, UARTA, NORMAL, NORMAL, OUTPUT),
+	DEFAULT_PINMUX(ULPI_CLK_PY0, SPI1, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(ULPI_DIR_PY1, SPI1, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(ULPI_NXT_PY2, SPI1, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(ULPI_STP_PY3, SPI1, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(DAP3_FS_PP0, I2S2, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(DAP3_DIN_PP1, I2S2, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(DAP3_DOUT_PP2, I2S2, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(DAP3_SCLK_PP3, I2S2, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(PV2, OWR, NORMAL, NORMAL, OUTPUT),
+	DEFAULT_PINMUX(PV3, RSVD1, NORMAL, NORMAL, OUTPUT),
+	DEFAULT_PINMUX(CLK2_OUT_PW5, EXTPERIPH2, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(CLK2_REQ_PCC5, DAP, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_PWR1_PC1, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_PWR2_PC6, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_SDIN_PZ2, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_SDOUT_PN5, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_WR_N_PZ3, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_CS0_N_PN4, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_DC0_PN6, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_SCK_PZ4, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_PWR0_PB2, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_PCLK_PB3, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_DE_PJ1, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_HSYNC_PJ3, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_VSYNC_PJ4, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D0_PE0, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D1_PE1, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D2_PE2, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D3_PE3, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D4_PE4, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D5_PE5, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D6_PE6, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D7_PE7, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D8_PF0, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D9_PF1, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D10_PF2, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D11_PF3, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D12_PF4, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D13_PF5, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D14_PF6, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D15_PF7, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D16_PM0, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D17_PM1, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D18_PM2, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D19_PM3, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D20_PM4, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D21_PM5, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D22_PM6, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_D23_PM7, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_CS1_N_PW0, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_M1_PW1, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(LCD_DC1_PD2, DISPLAYA, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(CRT_HSYNC_PV6, CRT, NORMAL, NORMAL, OUTPUT),
+	DEFAULT_PINMUX(CRT_VSYNC_PV7, CRT, NORMAL, NORMAL, OUTPUT),
+	LV_PINMUX(VI_D0_PT4, RSVD1, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+	LV_PINMUX(VI_D1_PD5, SDMMC2, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+	LV_PINMUX(VI_D2_PL0, SDMMC2, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+	LV_PINMUX(VI_D3_PL1, SDMMC2, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+	LV_PINMUX(VI_D4_PL2, VI, NORMAL, NORMAL, OUTPUT, DISABLE, DISABLE),
+	LV_PINMUX(VI_D5_PL3, SDMMC2, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+	LV_PINMUX(VI_D7_PL5, SDMMC2, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+	LV_PINMUX(VI_D10_PT2, RSVD1, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+	LV_PINMUX(VI_MCLK_PT1, VI, UP, NORMAL, INPUT, DISABLE, DISABLE),
+	DEFAULT_PINMUX(UART2_RXD_PC3, UARTB, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(UART2_TXD_PC2, UARTB, NORMAL, NORMAL, OUTPUT),
+	DEFAULT_PINMUX(UART2_RTS_N_PJ6, UARTB, NORMAL, NORMAL, OUTPUT),
+	DEFAULT_PINMUX(UART2_CTS_N_PJ5, UARTB, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(UART3_TXD_PW6, UARTC, NORMAL, NORMAL, OUTPUT),
+	DEFAULT_PINMUX(UART3_RXD_PW7, UARTC, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(UART3_CTS_N_PA1, UARTC, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(UART3_RTS_N_PC0, UARTC, NORMAL, NORMAL, OUTPUT),
+	DEFAULT_PINMUX(PU0, RSVD1, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(PU1, RSVD1, NORMAL, NORMAL, OUTPUT),
+	DEFAULT_PINMUX(PU2, RSVD1, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(PU3, RSVD1, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(PU4, PWM1, NORMAL, NORMAL, OUTPUT),
+	DEFAULT_PINMUX(PU5, PWM2, NORMAL, NORMAL, OUTPUT),
+	DEFAULT_PINMUX(PU6, RSVD1, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(DAP4_FS_PP4, I2S3, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(DAP4_DIN_PP5, I2S3, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(DAP4_DOUT_PP6, I2S3, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(DAP4_SCLK_PP7, I2S3, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(CLK3_OUT_PEE0, EXTPERIPH3, NORMAL, NORMAL, OUTPUT),
+	DEFAULT_PINMUX(CLK3_REQ_PEE1, DEV3, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(GMI_WP_N_PC7, GMI, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(GMI_CS2_N_PK3, RSVD1, UP, NORMAL, INPUT), /* EN_VDD_BL1 */
+	DEFAULT_PINMUX(GMI_AD8_PH0, PWM0, NORMAL, NORMAL, OUTPUT), /* LCD1_BL_PWM */
+	DEFAULT_PINMUX(GMI_AD10_PH2, NAND, NORMAL, NORMAL, OUTPUT), /* LCD1_BL_EN */
+	DEFAULT_PINMUX(GMI_A16_PJ7, UARTD, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(GMI_A17_PB0, UARTD, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(GMI_A18_PB1, UARTD, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(GMI_A19_PK7, UARTD, NORMAL, NORMAL, INPUT),
+
+
+	/* Multiplexed with KB_ROW10/KB_ROW11/KB_ROW12/KB_ROW15 */
+	DEFAULT_PINMUX(CAM_MCLK_PCC0, VI_ALT2, UP, TRISTATE, INPUT),
+	DEFAULT_PINMUX(PCC1, RSVD1, NORMAL, TRISTATE, INPUT),
+	DEFAULT_PINMUX(PBB0, RSVD1, NORMAL, TRISTATE, INPUT),
+	DEFAULT_PINMUX(PBB3, VGP3, NORMAL, TRISTATE, INPUT),
+
+	DEFAULT_PINMUX(PBB5, VGP5, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(PBB6, VGP6, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(PBB7, I2S4, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(PCC2, I2S4, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(JTAG_RTCK_PU7, RTCK, NORMAL, NORMAL, OUTPUT),
+
+	/* KBC keys */
+	DEFAULT_PINMUX(KB_ROW0_PR0, RSVD2, NORMAL, TRISTATE, INPUT),
+	DEFAULT_PINMUX(KB_ROW1_PR1, RSVD2, NORMAL, TRISTATE, INPUT),
+	DEFAULT_PINMUX(KB_ROW2_PR2, RSVD2, NORMAL, TRISTATE, INPUT),
+	DEFAULT_PINMUX(KB_ROW3_PR3, RSVD2, NORMAL, TRISTATE, INPUT),
+	DEFAULT_PINMUX(KB_ROW4_PR4, RSVD3, NORMAL, TRISTATE, INPUT),
+	DEFAULT_PINMUX(KB_ROW5_PR5, KBC, NORMAL, TRISTATE, INPUT),
+	DEFAULT_PINMUX(KB_ROW6_PR6, KBC, NORMAL, TRISTATE, INPUT),
+	DEFAULT_PINMUX(KB_ROW7_PR7, KBC, NORMAL, TRISTATE, INPUT),
+	DEFAULT_PINMUX(KB_ROW8_PS0, KBC, NORMAL, TRISTATE, INPUT),
+	DEFAULT_PINMUX(KB_ROW9_PS1, KBC, NORMAL, TRISTATE, INPUT),
+
+	/* SDMMC2 pinmux */
+	DEFAULT_PINMUX(KB_ROW10_PS2, SDMMC2, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(KB_ROW11_PS3, SDMMC2, UP, NORMAL, INPUT),
+	DEFAULT_PINMUX(KB_ROW12_PS4, SDMMC2, UP, NORMAL, INPUT),
+	DEFAULT_PINMUX(KB_ROW13_PS5, SDMMC2, UP, NORMAL, INPUT),
+	DEFAULT_PINMUX(KB_ROW14_PS6, SDMMC2, UP, NORMAL, INPUT),
+	DEFAULT_PINMUX(KB_ROW15_PS7, SDMMC2, UP, NORMAL, INPUT),
+
+	DEFAULT_PINMUX(KB_COL0_PQ0, KBC, UP, NORMAL, INPUT),
+	DEFAULT_PINMUX(KB_COL1_PQ1, KBC, UP, NORMAL, INPUT),
+	DEFAULT_PINMUX(KB_COL2_PQ2, KBC, UP, NORMAL, INPUT),
+	DEFAULT_PINMUX(KB_COL3_PQ3, KBC, UP, NORMAL, INPUT),
+	DEFAULT_PINMUX(KB_COL4_PQ4, KBC, UP, NORMAL, INPUT),
+	DEFAULT_PINMUX(KB_COL5_PQ5, KBC, UP, NORMAL, INPUT),
+	DEFAULT_PINMUX(KB_COL6_PQ6, KBC, UP, NORMAL, INPUT),
+	DEFAULT_PINMUX(KB_COL7_PQ7, KBC, UP, NORMAL, INPUT),
+	DEFAULT_PINMUX(PV0, RSVD1, UP, NORMAL, INPUT),
+
+	DEFAULT_PINMUX(CLK_32K_OUT_PA0, BLINK, NORMAL, NORMAL, OUTPUT),
+	DEFAULT_PINMUX(SYS_CLK_REQ_PZ5, SYSCLK, NORMAL, NORMAL, OUTPUT),
+	DEFAULT_PINMUX(OWR, OWR, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(DAP1_FS_PN0, I2S0, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(DAP1_DIN_PN1, I2S0, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(DAP1_DOUT_PN2, I2S0, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(DAP1_SCLK_PN3, I2S0, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(CLK1_REQ_PEE2, DAP, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(CLK1_OUT_PW4, EXTPERIPH1, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(SPDIF_IN_PK6, SPDIF, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(SPDIF_OUT_PK5, SPDIF, NORMAL, NORMAL, OUTPUT),
+	DEFAULT_PINMUX(DAP2_FS_PA2, I2S1, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(DAP2_DIN_PA4, I2S1, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(DAP2_DOUT_PA5, I2S1, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(DAP2_SCLK_PA3, I2S1, NORMAL, NORMAL, INPUT),
+
+	DEFAULT_PINMUX(SPI2_CS1_N_PW2, SPI2, UP, NORMAL, INPUT),
+	DEFAULT_PINMUX(SPI1_MOSI_PX4, SPI1, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(SPI1_SCK_PX5, SPI1, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(SPI1_CS0_N_PX6, SPI1, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(SPI1_MISO_PX7, SPI1, NORMAL, NORMAL, INPUT),
+
+	/* LAN_RESET */
+	DEFAULT_PINMUX(PEX_L0_PRSNT_N_PDD0, RSVD2, NORMAL, NORMAL, OUTPUT),
+
+	DEFAULT_PINMUX(PEX_L0_RST_N_PDD1, PCIE, NORMAL, NORMAL, OUTPUT),
+
+	/* LAN_VBUS */
+	DEFAULT_PINMUX(PEX_L0_CLKREQ_N_PDD2, RSVD2, NORMAL, NORMAL, OUTPUT),
+
+	DEFAULT_PINMUX(PEX_WAKE_N_PDD3, PCIE, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(PEX_L1_PRSNT_N_PDD4, PCIE, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(PEX_L1_RST_N_PDD5, PCIE, NORMAL, NORMAL, OUTPUT),
+	DEFAULT_PINMUX(PEX_L1_CLKREQ_N_PDD6, PCIE, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(PEX_L2_PRSNT_N_PDD7, PCIE, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(PEX_L2_RST_N_PCC6, PCIE, NORMAL, NORMAL, OUTPUT),
+	DEFAULT_PINMUX(PEX_L2_CLKREQ_N_PCC7, PCIE, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(HDMI_CEC_PEE3, CEC, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(HDMI_INT_PN7, RSVD1, NORMAL, TRISTATE, INPUT),
+
+	/* GPIOs */
+	/* SDMMC1 CD gpio */
+	DEFAULT_PINMUX(GMI_IORDY_PI5, RSVD1, UP, NORMAL, INPUT),
+	/* SDMMC1 WP gpio */
+	LV_PINMUX(VI_D11_PT3, RSVD1, UP, NORMAL, INPUT, DISABLE, DISABLE),
+
+	/* Touch panel GPIO */
+	/* Touch IRQ */
+	DEFAULT_PINMUX(GMI_AD12_PH4, NAND, UP, NORMAL, INPUT),
+
+	/* Touch RESET */
+	DEFAULT_PINMUX(GMI_AD14_PH6, NAND, NORMAL, NORMAL, OUTPUT),
+
+	/* Power rails GPIO */
+	DEFAULT_PINMUX(SPI2_SCK_PX2, GMI, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(PBB4, VGP4, NORMAL, NORMAL, INPUT),
+	DEFAULT_PINMUX(KB_ROW8_PS0, KBC, UP, NORMAL, INPUT),
+	DEFAULT_PINMUX(SDMMC3_DAT5_PD0, SDMMC3, UP, NORMAL, INPUT),
+	DEFAULT_PINMUX(SDMMC3_DAT4_PD1, SDMMC3, UP, NORMAL, INPUT),
+
+	LV_PINMUX(VI_D6_PL4, VI, NORMAL, NORMAL, OUTPUT, DISABLE, DISABLE),
+	LV_PINMUX(VI_D8_PL6, VI, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+	LV_PINMUX(VI_D9_PL7, VI, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+	LV_PINMUX(VI_PCLK_PT0, RSVD1, UP, TRISTATE, INPUT, DISABLE, DISABLE),
+	LV_PINMUX(VI_HSYNC_PD7, RSVD1, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+	LV_PINMUX(VI_VSYNC_PD6, RSVD1, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
+};
+
+static struct pmux_pingrp_config unused_pins_lowpower[] = {
+	DEFAULT_PINMUX(GMI_WAIT_PI7, NAND, UP, TRISTATE, OUTPUT),
+	DEFAULT_PINMUX(GMI_ADV_N_PK0, NAND, NORMAL, TRISTATE, OUTPUT),
+	DEFAULT_PINMUX(GMI_CLK_PK1, NAND, NORMAL, TRISTATE, OUTPUT),
+	DEFAULT_PINMUX(GMI_CS3_N_PK4, NAND, NORMAL, NORMAL, OUTPUT),
+	DEFAULT_PINMUX(GMI_CS7_N_PI6, NAND, UP, NORMAL, INPUT),
+	DEFAULT_PINMUX(GMI_AD0_PG0, NAND, NORMAL, TRISTATE, OUTPUT),
+	DEFAULT_PINMUX(GMI_AD1_PG1, NAND, NORMAL, TRISTATE, OUTPUT),
+	DEFAULT_PINMUX(GMI_AD2_PG2, NAND, NORMAL, TRISTATE, OUTPUT),
+	DEFAULT_PINMUX(GMI_AD3_PG3, NAND, NORMAL, TRISTATE, OUTPUT),
+	DEFAULT_PINMUX(GMI_AD4_PG4, NAND, NORMAL, TRISTATE, OUTPUT),
+	DEFAULT_PINMUX(GMI_AD5_PG5, NAND, NORMAL, TRISTATE, OUTPUT),
+	DEFAULT_PINMUX(GMI_AD6_PG6, NAND, NORMAL, TRISTATE, OUTPUT),
+	DEFAULT_PINMUX(GMI_AD7_PG7, NAND, NORMAL, TRISTATE, OUTPUT),
+	DEFAULT_PINMUX(GMI_AD9_PH1, PWM1, NORMAL, NORMAL, OUTPUT),
+	DEFAULT_PINMUX(GMI_AD11_PH3, NAND, NORMAL, NORMAL, OUTPUT),
+	DEFAULT_PINMUX(GMI_AD13_PH5, NAND, UP, NORMAL, INPUT),
+	DEFAULT_PINMUX(GMI_WR_N_PI0, NAND, NORMAL, TRISTATE, OUTPUT),
+	DEFAULT_PINMUX(GMI_OE_N_PI1, NAND, NORMAL, TRISTATE, OUTPUT),
+	DEFAULT_PINMUX(GMI_DQS_PI2, NAND, NORMAL, TRISTATE, OUTPUT),
+};
+
+static struct pmux_drvgrp_config colibri_t30_padctrl[] = {
+	/* (_drvgrp, _slwf, _slwr, _drvup, _drvdn, _lpmd, _schmt, _hsm) */
+	DEFAULT_PADCFG(SDIO1, SDIOCFG_DRVUP_SLWF, SDIOCFG_DRVDN_SLWR, \
+		SDIOCFG_DRVUP, SDIOCFG_DRVDN, NONE, DISABLE, DISABLE),
+};
+#endif	/* _PINMUX_CONFIG_COLIBRI_T30_H_ */
diff --git a/include/configs/colibri_t30.h b/include/configs/colibri_t30.h
new file mode 100644
index 0000000..92eaec8
--- /dev/null
+++ b/include/configs/colibri_t30.h
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2013-2014 Stefan Agner
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#include <linux/sizes.h>
+
+#include "tegra30-common.h"
+
+#define CONFIG_DEFAULT_DEVICE_TREE	tegra30-colibri
+#define CONFIG_OF_CONTROL
+#define CONFIG_OF_SEPARATE
+
+#define V_PROMPT			"Colibri T30 # "
+#define CONFIG_TEGRA_BOARD_STRING	"Toradex Colibri T30"
+
+/* Board-specific config */
+#define CONFIG_SERIAL_MULTI
+#define CONFIG_TEGRA_ENABLE_UARTA
+#define CONFIG_SYS_NS16550_COM1		NV_PA_APB_UARTA_BASE
+
+#define CONFIG_MACH_TYPE		MACH_TYPE_COLIBRI_T30
+
+#define CONFIG_BOARD_EARLY_INIT_F
+
+/* I2C */
+#define CONFIG_SYS_I2C_TEGRA
+#define CONFIG_SYS_I2C_INIT_BOARD
+#define CONFIG_I2C_MULTI_BUS
+#define CONFIG_SYS_MAX_I2C_BUS		TEGRA_I2C_NUM_CONTROLLERS
+#define CONFIG_SYS_I2C_SPEED		100000
+#define CONFIG_CMD_I2C
+#define CONFIG_SYS_I2C
+
+/* SD/MMC */
+#define CONFIG_MMC
+#define CONFIG_GENERIC_MMC
+#define CONFIG_TEGRA_MMC
+#define CONFIG_CMD_MMC
+
+/* Environment in eMMC, at the end of 2nd "boot sector" */
+#define CONFIG_ENV_IS_IN_MMC
+#define CONFIG_ENV_OFFSET		(-CONFIG_ENV_SIZE)
+#define CONFIG_SYS_MMC_ENV_DEV		0
+#define CONFIG_SYS_MMC_ENV_PART		2
+
+#define BOARD_EXTRA_ENV_SETTINGS \
+	"board_name=colibri-eval-v3\0" \
+	"fdtfile=tegra30-colibri-eval-v3.dtb\0"
+
+/* USB Host support */
+#define CONFIG_USB_EHCI
+#define CONFIG_USB_EHCI_TEGRA
+#define CONFIG_USB_STORAGE
+#define CONFIG_USB_MAX_CONTROLLER_COUNT 3
+#define CONFIG_CMD_USB
+
+/* USB networking support */
+#define CONFIG_USB_HOST_ETHER
+#define CONFIG_USB_ETHER_ASIX
+
+/* General networking support */
+#define CONFIG_CMD_NET
+#define CONFIG_CMD_DHCP
+
+#include "tegra-common-ums.h"
+#include "tegra-common-post.h"
+
+#endif /* __CONFIG_H */
-- 
2.0.3

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH] ARM: tegra: add Colibri T30 board support
  2014-07-31 17:36 [U-Boot] [PATCH] ARM: tegra: add Colibri T30 board support Stefan Agner
@ 2014-07-31 17:41 ` Simon Glass
  2014-07-31 18:00   ` Stefan Agner
  2014-07-31 18:21 ` Stephen Warren
  1 sibling, 1 reply; 13+ messages in thread
From: Simon Glass @ 2014-07-31 17:41 UTC (permalink / raw)
  To: u-boot

Hi Stefan,

On 31 July 2014 18:36, Stefan Agner <stefan@agner.ch> wrote:
>
> This adds board support for the Toradex Colibri T30 module.
>

A few quick questions below...


>
> Working functions:
> - SD card boot
> - eMMC environment and boot
> - USB host/USB client (on the dual role port)
> - Network (via ASIX USB)
>
> Signed-off-by: Stefan Agner <stefan@agner.ch>
> ---
>  arch/arm/Kconfig                                   |   4 +
>  arch/arm/dts/Makefile                              |   1 +
>  arch/arm/dts/tegra30-colibri.dts                   |  84 +++++
>  arch/arm/include/asm/mach-types.h                  |  13 +
>  board/toradex/colibri_t30/Makefile                 |   6 +
>  board/toradex/colibri_t30/colibri_t30.c            |  52 +++
>  .../colibri_t30/pinmux-config-colibri_t30.h        | 360 +++++++++++++++++++++
>  include/configs/colibri_t30.h                      |  73 +++++
>  8 files changed, 593 insertions(+)
>  create mode 100644 arch/arm/dts/tegra30-colibri.dts
>  create mode 100644 board/toradex/colibri_t30/Makefile
>  create mode 100644 board/toradex/colibri_t30/colibri_t30.c
>  create mode 100644 board/toradex/colibri_t30/pinmux-config-colibri_t30.h
>  create mode 100644 include/configs/colibri_t30.h
>
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index e385eda..dd987cc 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -701,6 +701,9 @@ config TARGET_WHISTLER
>  config TARGET_COLIBRI_T20_IRIS
>         bool "Support colibri_t20_iris"
>
> +config TARGET_COLIBRI_T30
> +       bool "Support Colibri T30"
> +
>  config TARGET_TEC_NG
>         bool "Support tec-ng"
>
> @@ -989,6 +992,7 @@ source "board/timll/devkit3250/Kconfig"
>  source "board/timll/devkit8000/Kconfig"
>  source "board/toradex/colibri_pxa270/Kconfig"
>  source "board/toradex/colibri_t20_iris/Kconfig"
> +source "board/toradex/colibri_t30/Kconfig"
>  source "board/trizepsiv/Kconfig"
>  source "board/ttcontrol/vision2/Kconfig"
>  source "board/udoo/Kconfig"
> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
> index 6e2e313..c46b7be 100644
> --- a/arch/arm/dts/Makefile
> +++ b/arch/arm/dts/Makefile
> @@ -21,6 +21,7 @@ dtb-$(CONFIG_TEGRA) += tegra20-harmony.dtb \
>         tegra20-colibri_t20_iris.dtb \
>         tegra30-beaver.dtb \
>         tegra30-cardhu.dtb \
> +       tegra30-colibri.dtb \
>         tegra30-tec-ng.dtb \
>         tegra114-dalmore.dtb \
>         tegra124-jetson-tk1.dtb \
> diff --git a/arch/arm/dts/tegra30-colibri.dts b/arch/arm/dts/tegra30-colibri.dts
> new file mode 100644
> index 0000000..21d0311
> --- /dev/null
> +++ b/arch/arm/dts/tegra30-colibri.dts
> @@ -0,0 +1,84 @@
> +/dts-v1/;
> +
> +#include "tegra30.dtsi"
> +
> +/ {
> +       model = "Toradex Colibri T30";
> +       compatible = "toradex,colibri_t30", "nvidia,tegra30";
> +
> +       aliases {
> +               i2c0 = "/i2c at 7000d000";
> +               i2c1 = "/i2c at 7000c000";
> +               i2c2 = "/i2c at 7000c700";
> +               sdhci0 = "/sdhci at 78000600";
> +               sdhci1 = "/sdhci at 78000200";
> +               usb0 = "/usb at 7d000000";
> +               usb1 = "/usb at 7d004000"; /* on module only, for ASIX */
> +               usb2 = "/usb at 7d008000";
> +       };
> +
> +       memory {
> +               device_type = "memory";
> +               reg = <0x80000000 0x40000000>;
> +       };
> +
> +       /* GEN1_I2C: I2C_SDA/SCL on SODIMM pin 194/196 (e.g. RTC on carrier
> +          board) */
> +       i2c at 7000c000 {
> +               status = "okay";
> +               clock-frequency = <100000>;
> +       };
> +
> +       /* GEN2_I2C: unused */
> +
> +       /* CAM_I2C: unused */
> +
> +       /* DDC_CLOCK/DATA on X3 pin 15/16 (e.g. display EDID) */
> +       i2c at 7000c700 {
> +               status = "okay";
> +               clock-frequency = <100000>;
> +       };
> +
> +       /* PWR_I2C: power I2C to audio codec, PMIC, temperature sensor and
> +          touch screen controller */
> +       i2c at 7000d000 {
> +               status = "okay";
> +               clock-frequency = <100000>;
> +       };
> +
> +       /* SPI1: Colibri SSP */
> +       spi at 7000d400 {
> +               status = "okay";
> +               spi-max-frequency = <25000000>;
> +       };
> +
> +       sdhci at 78000200 {
> +               status = "okay";
> +               bus-width = <4>;
> +               cd-gpios = <&gpio 23 1>; /* PC7, MMCD */
> +       };
> +
> +       sdhci at 78000600 {
> +               status = "okay";
> +               bus-width = <8>;
> +               non-removable;
> +       };
> +
> +       /* EHCI instance 0: USB1_DP/N -> USBC_P/N */
> +       usb at 7d000000 {
> +               status = "okay";
> +               dr_mode = "otg";
> +       };
> +
> +       /* EHCI instance 1: USB2_DP/N -> AX88772B */
> +       usb at 7d004000 {
> +               status = "okay";
> +               phy_type = "utmi";
> +       };
> +
> +       /* EHCI instance 2: USB3_DP/N -> USBH_P/N */
> +       usb at 7d008000 {
> +               status = "okay";
> +               nvidia,vbus-gpio = <&gpio 178 1>;       /* PW2, USBH_PEN */
> +       };
> +};
> diff --git a/arch/arm/include/asm/mach-types.h b/arch/arm/include/asm/mach-types.h
> index 440b041..560924e 100644
> --- a/arch/arm/include/asm/mach-types.h
> +++ b/arch/arm/include/asm/mach-types.h
> @@ -1106,6 +1106,7 @@ extern unsigned int __machine_arch_type;
>  #define MACH_TYPE_OMAP5_SEVM           3777
>  #define MACH_TYPE_ARMADILLO_800EVA     3863
>  #define MACH_TYPE_KZM9G                4140
> +#define MACH_TYPE_COLIBRI_T30          4493
>
>  #ifdef CONFIG_ARCH_EBSA110
>  # ifdef machine_arch_type
> @@ -14235,6 +14236,18 @@ extern unsigned int __machine_arch_type;
>  # define machine_is_kzm9g()    (0)
>  #endif
>
> +#ifdef CONFIG_MACH_COLIBRI_T30
> +# ifdef machine_arch_type
> +#  undef machine_arch_type
> +#  define machine_arch_type    __machine_arch_type
> +# else
> +#  define machine_arch_type    MACH_TYPE_COLIBRI_T30
> +# endif
> +# define machine_is_colibri_t30()      (machine_arch_type == MACH_TYPE_COLIBRI_T30)
> +#else
> +# define machine_is_colibri_t30()      (0)
> +#endif


Do we actually need this machine type stuff anymore?

>
> +
>  /*
>   * These have not yet been registered
>   */
> diff --git a/board/toradex/colibri_t30/Makefile b/board/toradex/colibri_t30/Makefile
> new file mode 100644
> index 0000000..3d58a4b
> --- /dev/null
> +++ b/board/toradex/colibri_t30/Makefile
> @@ -0,0 +1,6 @@
> +# Copyright (c) 2013-2014 Stefan Agner
> +# SPDX-License-Identifier:      GPL-2.0+
> +
> +include $(srctree)/board/nvidia/common/common.mk
> +
> +obj-y  += colibri_t30.o
> diff --git a/board/toradex/colibri_t30/colibri_t30.c b/board/toradex/colibri_t30/colibri_t30.c
> new file mode 100644
> index 0000000..6c7c62d
> --- /dev/null
> +++ b/board/toradex/colibri_t30/colibri_t30.c
> @@ -0,0 +1,52 @@
> +/*
> + *  (C) Copyright 2014
> + *  Stefan Agner <stefan@agner.ch>
> + *
> + * SPDX-License-Identifier:    GPL-2.0+
> + */
> +
> +#include <common.h>
> +#include <asm/arch/pinmux.h>
> +#include <asm/arch/gp_padctrl.h>
> +#include "pinmux-config-colibri_t30.h"
> +#include <i2c.h>
> +#include <asm/gpio.h>
> +
> +#define PMU_I2C_ADDRESS                0x2D
> +#define MAX_I2C_RETRY          3


Are these used?

>
> +
> +/*
> + * Routine: pinmux_init
> + * Description: Do individual peripheral pinmux configs
> + */
> +void pinmux_init(void)
> +{
> +       pinmux_config_pingrp_table(tegra3_pinmux_common,
> +                                  ARRAY_SIZE(tegra3_pinmux_common));
> +
> +       pinmux_config_pingrp_table(unused_pins_lowpower,
> +                                  ARRAY_SIZE(unused_pins_lowpower));
> +
> +       /* Initialize any non-default pad configs (APB_MISC_GP regs) */
> +       pinmux_config_drvgrp_table(colibri_t30_padctrl,
> +                                  ARRAY_SIZE(colibri_t30_padctrl));
> +}
> +
> +/*
> + * Enable AX88772B USB to LAN controller
> + */
> +void pin_mux_usb(void)
> +{
> +       /* Enable LAN_VBUS */
> +       gpio_request(GPIO_PDD2, NULL);
> +       gpio_direction_output(GPIO_PDD2, 1);
> +
> +       /* Reset ASIX using LAN_RESET */
> +       gpio_request(GPIO_PDD0, NULL);
> +       gpio_direction_output(GPIO_PDD0, 0);
> +
> +       udelay(5);
> +
> +       gpio_set_value(GPIO_PDD0, 1);


You are using device tree for sdhci - shouldn't we use it for USB also?

>
> +}
> +
> diff --git a/board/toradex/colibri_t30/pinmux-config-colibri_t30.h b/board/toradex/colibri_t30/pinmux-config-colibri_t30.h
> new file mode 100644
> index 0000000..4e73c07
> --- /dev/null
> +++ b/board/toradex/colibri_t30/pinmux-config-colibri_t30.h
> @@ -0,0 +1,360 @@
> +/*
> + * Copyright (c) 2013-2014, Stefan Agner
> + *
> + * This program is free software; you can redistribute it and/or modify it
> + * under the terms and conditions of the GNU General Public License,
> + * version 2, as published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope 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.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program.  If not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +#ifndef _PINMUX_CONFIG_COLIBRI_T30_H_
> +#define _PINMUX_CONFIG_COLIBRI_T30_H_
> +
> +#define DEFAULT_PINMUX(_pingrp, _mux, _pull, _tri, _io)                \
> +       {                                                       \
> +               .pingrp         = PMUX_PINGRP_##_pingrp,        \
> +               .func           = PMUX_FUNC_##_mux,             \
> +               .pull           = PMUX_PULL_##_pull,            \
> +               .tristate       = PMUX_TRI_##_tri,              \
> +               .io             = PMUX_PIN_##_io,               \
> +               .lock           = PMUX_PIN_LOCK_DEFAULT,        \
> +               .od             = PMUX_PIN_OD_DEFAULT,          \
> +               .ioreset        = PMUX_PIN_IO_RESET_DEFAULT,    \
> +       }
> +
> +#define I2C_PINMUX(_pingrp, _mux, _pull, _tri, _io, _lock, _od)        \
> +       {                                                       \
> +               .pingrp         = PMUX_PINGRP_##_pingrp,        \
> +               .func           = PMUX_FUNC_##_mux,             \
> +               .pull           = PMUX_PULL_##_pull,            \
> +               .tristate       = PMUX_TRI_##_tri,              \
> +               .io             = PMUX_PIN_##_io,               \
> +               .lock           = PMUX_PIN_LOCK_##_lock,        \
> +               .od             = PMUX_PIN_OD_##_od,            \
> +               .ioreset        = PMUX_PIN_IO_RESET_DEFAULT,    \
> +       }
> +
> +#define LV_PINMUX(_pingrp, _mux, _pull, _tri, _io, _lock, _ioreset) \
> +       {                                                       \
> +               .pingrp         = PMUX_PINGRP_##_pingrp,        \
> +               .func           = PMUX_FUNC_##_mux,             \
> +               .pull           = PMUX_PULL_##_pull,            \
> +               .tristate       = PMUX_TRI_##_tri,              \
> +               .io             = PMUX_PIN_##_io,               \
> +               .lock           = PMUX_PIN_LOCK_##_lock,        \
> +               .od             = PMUX_PIN_OD_DEFAULT,          \
> +               .ioreset        = PMUX_PIN_IO_RESET_##_ioreset  \
> +       }
> +
> +#define DEFAULT_PADCFG(_drvgrp, _slwf, _slwr, _drvup, _drvdn, _lpmd, _schmt, _hsm) \
> +       {                                                       \
> +               .drvgrp         = PMUX_DRVGRP_##_drvgrp,        \
> +               .slwf           = _slwf,                        \
> +               .slwr           = _slwr,                        \
> +               .drvup          = _drvup,                       \
> +               .drvdn          = _drvdn,                       \
> +               .lpmd           = PMUX_LPMD_##_lpmd,            \
> +               .schmt          = PMUX_SCHMT_##_schmt,          \
> +               .hsm            = PMUX_HSM_##_hsm,              \
> +       }
> +
> +static struct pmux_pingrp_config tegra3_pinmux_common[] = {
> +       /* SDMMC1 disabled */
> +       DEFAULT_PINMUX(SDMMC1_CLK_PZ0, RSVD1, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(SDMMC1_CMD_PZ1, RSVD1, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(SDMMC1_DAT3_PY4, RSVD1, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(SDMMC1_DAT2_PY5, RSVD1, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(SDMMC1_DAT1_PY6, RSVD1, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(SDMMC1_DAT0_PY7, RSVD1, NORMAL, NORMAL, INPUT),
> +
> +       /* SDMMC3 pinmux */
> +       DEFAULT_PINMUX(SDMMC3_CLK_PA6, SDMMC3, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(SDMMC3_CMD_PA7, SDMMC3, UP, NORMAL, INPUT),
> +       DEFAULT_PINMUX(SDMMC3_DAT0_PB7, SDMMC3, UP, NORMAL, INPUT),
> +       DEFAULT_PINMUX(SDMMC3_DAT1_PB6, SDMMC3, UP, NORMAL, INPUT),
> +       DEFAULT_PINMUX(SDMMC3_DAT2_PB5, SDMMC3, UP, NORMAL, INPUT),
> +       DEFAULT_PINMUX(SDMMC3_DAT3_PB4, SDMMC3, UP, NORMAL, INPUT),
> +       DEFAULT_PINMUX(SDMMC3_DAT6_PD3, RSVD1, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(SDMMC3_DAT7_PD4, RSVD1, NORMAL, NORMAL, INPUT),
> +
> +       /* SDMMC4 pinmux (eMMC) */
> +       LV_PINMUX(SDMMC4_CLK_PCC4, SDMMC4, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
> +       LV_PINMUX(SDMMC4_CMD_PT7, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
> +       LV_PINMUX(SDMMC4_DAT0_PAA0, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
> +       LV_PINMUX(SDMMC4_DAT1_PAA1, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
> +       LV_PINMUX(SDMMC4_DAT2_PAA2, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
> +       LV_PINMUX(SDMMC4_DAT3_PAA3, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
> +       LV_PINMUX(SDMMC4_DAT4_PAA4, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
> +       LV_PINMUX(SDMMC4_DAT5_PAA5, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
> +       LV_PINMUX(SDMMC4_DAT6_PAA6, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
> +       LV_PINMUX(SDMMC4_DAT7_PAA7, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
> +       LV_PINMUX(SDMMC4_RST_N_PCC3, RSVD1, DOWN, NORMAL, INPUT, DISABLE, DISABLE),
> +
> +       /* I2C1 pinmux */
> +       I2C_PINMUX(GEN1_I2C_SCL_PC4, I2C1, NORMAL, NORMAL, INPUT, DISABLE, ENABLE),
> +       I2C_PINMUX(GEN1_I2C_SDA_PC5, I2C1, NORMAL, NORMAL, INPUT, DISABLE, ENABLE),
> +
> +       /* I2C2 pinmux */
> +       DEFAULT_PINMUX(GEN2_I2C_SCL_PT5, I2C2, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(GEN2_I2C_SDA_PT6, I2C2, NORMAL, NORMAL, INPUT),
> +
> +       /* I2C3 pinmux, muliplexed with KB_ROW13/KB_ROW14 */
> +       I2C_PINMUX(CAM_I2C_SCL_PBB1, I2C3, NORMAL, TRISTATE, INPUT, DISABLE, ENABLE),
> +       I2C_PINMUX(CAM_I2C_SDA_PBB2, I2C3, NORMAL, TRISTATE, INPUT, DISABLE, ENABLE),
> +
> +       /* I2C4 pinmux */
> +       I2C_PINMUX(DDC_SCL_PV4, I2C4, NORMAL, NORMAL, INPUT, DISABLE, ENABLE),
> +       I2C_PINMUX(DDC_SDA_PV5, I2C4, NORMAL, NORMAL, INPUT, DISABLE, ENABLE),
> +
> +       /* Power I2C pinmux */
> +       I2C_PINMUX(PWR_I2C_SCL_PZ6, I2CPWR, NORMAL, NORMAL, INPUT, DISABLE, ENABLE),
> +       I2C_PINMUX(PWR_I2C_SDA_PZ7, I2CPWR, NORMAL, NORMAL, INPUT, DISABLE, ENABLE),
> +
> +       DEFAULT_PINMUX(ULPI_DATA0_PO1, UARTA, NORMAL, NORMAL, OUTPUT),
> +       /* UARTA RX, make sure we don't get input form a floating Pin */
> +       DEFAULT_PINMUX(ULPI_DATA1_PO2, UARTA, UP, NORMAL, INPUT),
> +       DEFAULT_PINMUX(ULPI_DATA2_PO3, UARTA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(ULPI_DATA3_PO4, RSVD1, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(ULPI_DATA4_PO5, UARTA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(ULPI_DATA5_PO6, UARTA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(ULPI_DATA6_PO7, UARTA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(ULPI_DATA7_PO0, UARTA, NORMAL, NORMAL, OUTPUT),
> +       DEFAULT_PINMUX(ULPI_CLK_PY0, SPI1, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(ULPI_DIR_PY1, SPI1, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(ULPI_NXT_PY2, SPI1, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(ULPI_STP_PY3, SPI1, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(DAP3_FS_PP0, I2S2, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(DAP3_DIN_PP1, I2S2, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(DAP3_DOUT_PP2, I2S2, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(DAP3_SCLK_PP3, I2S2, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(PV2, OWR, NORMAL, NORMAL, OUTPUT),
> +       DEFAULT_PINMUX(PV3, RSVD1, NORMAL, NORMAL, OUTPUT),
> +       DEFAULT_PINMUX(CLK2_OUT_PW5, EXTPERIPH2, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(CLK2_REQ_PCC5, DAP, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_PWR1_PC1, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_PWR2_PC6, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_SDIN_PZ2, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_SDOUT_PN5, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_WR_N_PZ3, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_CS0_N_PN4, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_DC0_PN6, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_SCK_PZ4, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_PWR0_PB2, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_PCLK_PB3, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_DE_PJ1, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_HSYNC_PJ3, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_VSYNC_PJ4, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D0_PE0, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D1_PE1, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D2_PE2, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D3_PE3, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D4_PE4, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D5_PE5, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D6_PE6, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D7_PE7, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D8_PF0, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D9_PF1, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D10_PF2, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D11_PF3, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D12_PF4, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D13_PF5, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D14_PF6, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D15_PF7, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D16_PM0, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D17_PM1, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D18_PM2, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D19_PM3, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D20_PM4, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D21_PM5, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D22_PM6, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_D23_PM7, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_CS1_N_PW0, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_M1_PW1, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(LCD_DC1_PD2, DISPLAYA, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(CRT_HSYNC_PV6, CRT, NORMAL, NORMAL, OUTPUT),
> +       DEFAULT_PINMUX(CRT_VSYNC_PV7, CRT, NORMAL, NORMAL, OUTPUT),
> +       LV_PINMUX(VI_D0_PT4, RSVD1, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
> +       LV_PINMUX(VI_D1_PD5, SDMMC2, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
> +       LV_PINMUX(VI_D2_PL0, SDMMC2, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
> +       LV_PINMUX(VI_D3_PL1, SDMMC2, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
> +       LV_PINMUX(VI_D4_PL2, VI, NORMAL, NORMAL, OUTPUT, DISABLE, DISABLE),
> +       LV_PINMUX(VI_D5_PL3, SDMMC2, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
> +       LV_PINMUX(VI_D7_PL5, SDMMC2, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
> +       LV_PINMUX(VI_D10_PT2, RSVD1, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
> +       LV_PINMUX(VI_MCLK_PT1, VI, UP, NORMAL, INPUT, DISABLE, DISABLE),
> +       DEFAULT_PINMUX(UART2_RXD_PC3, UARTB, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(UART2_TXD_PC2, UARTB, NORMAL, NORMAL, OUTPUT),
> +       DEFAULT_PINMUX(UART2_RTS_N_PJ6, UARTB, NORMAL, NORMAL, OUTPUT),
> +       DEFAULT_PINMUX(UART2_CTS_N_PJ5, UARTB, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(UART3_TXD_PW6, UARTC, NORMAL, NORMAL, OUTPUT),
> +       DEFAULT_PINMUX(UART3_RXD_PW7, UARTC, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(UART3_CTS_N_PA1, UARTC, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(UART3_RTS_N_PC0, UARTC, NORMAL, NORMAL, OUTPUT),
> +       DEFAULT_PINMUX(PU0, RSVD1, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(PU1, RSVD1, NORMAL, NORMAL, OUTPUT),
> +       DEFAULT_PINMUX(PU2, RSVD1, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(PU3, RSVD1, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(PU4, PWM1, NORMAL, NORMAL, OUTPUT),
> +       DEFAULT_PINMUX(PU5, PWM2, NORMAL, NORMAL, OUTPUT),
> +       DEFAULT_PINMUX(PU6, RSVD1, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(DAP4_FS_PP4, I2S3, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(DAP4_DIN_PP5, I2S3, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(DAP4_DOUT_PP6, I2S3, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(DAP4_SCLK_PP7, I2S3, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(CLK3_OUT_PEE0, EXTPERIPH3, NORMAL, NORMAL, OUTPUT),
> +       DEFAULT_PINMUX(CLK3_REQ_PEE1, DEV3, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(GMI_WP_N_PC7, GMI, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(GMI_CS2_N_PK3, RSVD1, UP, NORMAL, INPUT), /* EN_VDD_BL1 */
> +       DEFAULT_PINMUX(GMI_AD8_PH0, PWM0, NORMAL, NORMAL, OUTPUT), /* LCD1_BL_PWM */
> +       DEFAULT_PINMUX(GMI_AD10_PH2, NAND, NORMAL, NORMAL, OUTPUT), /* LCD1_BL_EN */
> +       DEFAULT_PINMUX(GMI_A16_PJ7, UARTD, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(GMI_A17_PB0, UARTD, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(GMI_A18_PB1, UARTD, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(GMI_A19_PK7, UARTD, NORMAL, NORMAL, INPUT),
> +
> +
> +       /* Multiplexed with KB_ROW10/KB_ROW11/KB_ROW12/KB_ROW15 */
> +       DEFAULT_PINMUX(CAM_MCLK_PCC0, VI_ALT2, UP, TRISTATE, INPUT),
> +       DEFAULT_PINMUX(PCC1, RSVD1, NORMAL, TRISTATE, INPUT),
> +       DEFAULT_PINMUX(PBB0, RSVD1, NORMAL, TRISTATE, INPUT),
> +       DEFAULT_PINMUX(PBB3, VGP3, NORMAL, TRISTATE, INPUT),
> +
> +       DEFAULT_PINMUX(PBB5, VGP5, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(PBB6, VGP6, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(PBB7, I2S4, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(PCC2, I2S4, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(JTAG_RTCK_PU7, RTCK, NORMAL, NORMAL, OUTPUT),
> +
> +       /* KBC keys */
> +       DEFAULT_PINMUX(KB_ROW0_PR0, RSVD2, NORMAL, TRISTATE, INPUT),
> +       DEFAULT_PINMUX(KB_ROW1_PR1, RSVD2, NORMAL, TRISTATE, INPUT),
> +       DEFAULT_PINMUX(KB_ROW2_PR2, RSVD2, NORMAL, TRISTATE, INPUT),
> +       DEFAULT_PINMUX(KB_ROW3_PR3, RSVD2, NORMAL, TRISTATE, INPUT),
> +       DEFAULT_PINMUX(KB_ROW4_PR4, RSVD3, NORMAL, TRISTATE, INPUT),
> +       DEFAULT_PINMUX(KB_ROW5_PR5, KBC, NORMAL, TRISTATE, INPUT),
> +       DEFAULT_PINMUX(KB_ROW6_PR6, KBC, NORMAL, TRISTATE, INPUT),
> +       DEFAULT_PINMUX(KB_ROW7_PR7, KBC, NORMAL, TRISTATE, INPUT),
> +       DEFAULT_PINMUX(KB_ROW8_PS0, KBC, NORMAL, TRISTATE, INPUT),
> +       DEFAULT_PINMUX(KB_ROW9_PS1, KBC, NORMAL, TRISTATE, INPUT),
> +
> +       /* SDMMC2 pinmux */
> +       DEFAULT_PINMUX(KB_ROW10_PS2, SDMMC2, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(KB_ROW11_PS3, SDMMC2, UP, NORMAL, INPUT),
> +       DEFAULT_PINMUX(KB_ROW12_PS4, SDMMC2, UP, NORMAL, INPUT),
> +       DEFAULT_PINMUX(KB_ROW13_PS5, SDMMC2, UP, NORMAL, INPUT),
> +       DEFAULT_PINMUX(KB_ROW14_PS6, SDMMC2, UP, NORMAL, INPUT),
> +       DEFAULT_PINMUX(KB_ROW15_PS7, SDMMC2, UP, NORMAL, INPUT),
> +
> +       DEFAULT_PINMUX(KB_COL0_PQ0, KBC, UP, NORMAL, INPUT),
> +       DEFAULT_PINMUX(KB_COL1_PQ1, KBC, UP, NORMAL, INPUT),
> +       DEFAULT_PINMUX(KB_COL2_PQ2, KBC, UP, NORMAL, INPUT),
> +       DEFAULT_PINMUX(KB_COL3_PQ3, KBC, UP, NORMAL, INPUT),
> +       DEFAULT_PINMUX(KB_COL4_PQ4, KBC, UP, NORMAL, INPUT),
> +       DEFAULT_PINMUX(KB_COL5_PQ5, KBC, UP, NORMAL, INPUT),
> +       DEFAULT_PINMUX(KB_COL6_PQ6, KBC, UP, NORMAL, INPUT),
> +       DEFAULT_PINMUX(KB_COL7_PQ7, KBC, UP, NORMAL, INPUT),
> +       DEFAULT_PINMUX(PV0, RSVD1, UP, NORMAL, INPUT),
> +
> +       DEFAULT_PINMUX(CLK_32K_OUT_PA0, BLINK, NORMAL, NORMAL, OUTPUT),
> +       DEFAULT_PINMUX(SYS_CLK_REQ_PZ5, SYSCLK, NORMAL, NORMAL, OUTPUT),
> +       DEFAULT_PINMUX(OWR, OWR, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(DAP1_FS_PN0, I2S0, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(DAP1_DIN_PN1, I2S0, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(DAP1_DOUT_PN2, I2S0, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(DAP1_SCLK_PN3, I2S0, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(CLK1_REQ_PEE2, DAP, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(CLK1_OUT_PW4, EXTPERIPH1, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(SPDIF_IN_PK6, SPDIF, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(SPDIF_OUT_PK5, SPDIF, NORMAL, NORMAL, OUTPUT),
> +       DEFAULT_PINMUX(DAP2_FS_PA2, I2S1, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(DAP2_DIN_PA4, I2S1, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(DAP2_DOUT_PA5, I2S1, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(DAP2_SCLK_PA3, I2S1, NORMAL, NORMAL, INPUT),
> +
> +       DEFAULT_PINMUX(SPI2_CS1_N_PW2, SPI2, UP, NORMAL, INPUT),
> +       DEFAULT_PINMUX(SPI1_MOSI_PX4, SPI1, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(SPI1_SCK_PX5, SPI1, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(SPI1_CS0_N_PX6, SPI1, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(SPI1_MISO_PX7, SPI1, NORMAL, NORMAL, INPUT),
> +
> +       /* LAN_RESET */
> +       DEFAULT_PINMUX(PEX_L0_PRSNT_N_PDD0, RSVD2, NORMAL, NORMAL, OUTPUT),
> +
> +       DEFAULT_PINMUX(PEX_L0_RST_N_PDD1, PCIE, NORMAL, NORMAL, OUTPUT),
> +
> +       /* LAN_VBUS */
> +       DEFAULT_PINMUX(PEX_L0_CLKREQ_N_PDD2, RSVD2, NORMAL, NORMAL, OUTPUT),
> +
> +       DEFAULT_PINMUX(PEX_WAKE_N_PDD3, PCIE, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(PEX_L1_PRSNT_N_PDD4, PCIE, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(PEX_L1_RST_N_PDD5, PCIE, NORMAL, NORMAL, OUTPUT),
> +       DEFAULT_PINMUX(PEX_L1_CLKREQ_N_PDD6, PCIE, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(PEX_L2_PRSNT_N_PDD7, PCIE, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(PEX_L2_RST_N_PCC6, PCIE, NORMAL, NORMAL, OUTPUT),
> +       DEFAULT_PINMUX(PEX_L2_CLKREQ_N_PCC7, PCIE, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(HDMI_CEC_PEE3, CEC, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(HDMI_INT_PN7, RSVD1, NORMAL, TRISTATE, INPUT),
> +
> +       /* GPIOs */
> +       /* SDMMC1 CD gpio */
> +       DEFAULT_PINMUX(GMI_IORDY_PI5, RSVD1, UP, NORMAL, INPUT),
> +       /* SDMMC1 WP gpio */
> +       LV_PINMUX(VI_D11_PT3, RSVD1, UP, NORMAL, INPUT, DISABLE, DISABLE),
> +
> +       /* Touch panel GPIO */
> +       /* Touch IRQ */
> +       DEFAULT_PINMUX(GMI_AD12_PH4, NAND, UP, NORMAL, INPUT),
> +
> +       /* Touch RESET */
> +       DEFAULT_PINMUX(GMI_AD14_PH6, NAND, NORMAL, NORMAL, OUTPUT),
> +
> +       /* Power rails GPIO */
> +       DEFAULT_PINMUX(SPI2_SCK_PX2, GMI, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(PBB4, VGP4, NORMAL, NORMAL, INPUT),
> +       DEFAULT_PINMUX(KB_ROW8_PS0, KBC, UP, NORMAL, INPUT),
> +       DEFAULT_PINMUX(SDMMC3_DAT5_PD0, SDMMC3, UP, NORMAL, INPUT),
> +       DEFAULT_PINMUX(SDMMC3_DAT4_PD1, SDMMC3, UP, NORMAL, INPUT),
> +
> +       LV_PINMUX(VI_D6_PL4, VI, NORMAL, NORMAL, OUTPUT, DISABLE, DISABLE),
> +       LV_PINMUX(VI_D8_PL6, VI, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
> +       LV_PINMUX(VI_D9_PL7, VI, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
> +       LV_PINMUX(VI_PCLK_PT0, RSVD1, UP, TRISTATE, INPUT, DISABLE, DISABLE),
> +       LV_PINMUX(VI_HSYNC_PD7, RSVD1, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
> +       LV_PINMUX(VI_VSYNC_PD6, RSVD1, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
> +};
> +
> +static struct pmux_pingrp_config unused_pins_lowpower[] = {
> +       DEFAULT_PINMUX(GMI_WAIT_PI7, NAND, UP, TRISTATE, OUTPUT),
> +       DEFAULT_PINMUX(GMI_ADV_N_PK0, NAND, NORMAL, TRISTATE, OUTPUT),
> +       DEFAULT_PINMUX(GMI_CLK_PK1, NAND, NORMAL, TRISTATE, OUTPUT),
> +       DEFAULT_PINMUX(GMI_CS3_N_PK4, NAND, NORMAL, NORMAL, OUTPUT),
> +       DEFAULT_PINMUX(GMI_CS7_N_PI6, NAND, UP, NORMAL, INPUT),
> +       DEFAULT_PINMUX(GMI_AD0_PG0, NAND, NORMAL, TRISTATE, OUTPUT),
> +       DEFAULT_PINMUX(GMI_AD1_PG1, NAND, NORMAL, TRISTATE, OUTPUT),
> +       DEFAULT_PINMUX(GMI_AD2_PG2, NAND, NORMAL, TRISTATE, OUTPUT),
> +       DEFAULT_PINMUX(GMI_AD3_PG3, NAND, NORMAL, TRISTATE, OUTPUT),
> +       DEFAULT_PINMUX(GMI_AD4_PG4, NAND, NORMAL, TRISTATE, OUTPUT),
> +       DEFAULT_PINMUX(GMI_AD5_PG5, NAND, NORMAL, TRISTATE, OUTPUT),
> +       DEFAULT_PINMUX(GMI_AD6_PG6, NAND, NORMAL, TRISTATE, OUTPUT),
> +       DEFAULT_PINMUX(GMI_AD7_PG7, NAND, NORMAL, TRISTATE, OUTPUT),
> +       DEFAULT_PINMUX(GMI_AD9_PH1, PWM1, NORMAL, NORMAL, OUTPUT),
> +       DEFAULT_PINMUX(GMI_AD11_PH3, NAND, NORMAL, NORMAL, OUTPUT),
> +       DEFAULT_PINMUX(GMI_AD13_PH5, NAND, UP, NORMAL, INPUT),
> +       DEFAULT_PINMUX(GMI_WR_N_PI0, NAND, NORMAL, TRISTATE, OUTPUT),
> +       DEFAULT_PINMUX(GMI_OE_N_PI1, NAND, NORMAL, TRISTATE, OUTPUT),
> +       DEFAULT_PINMUX(GMI_DQS_PI2, NAND, NORMAL, TRISTATE, OUTPUT),
> +};
> +
> +static struct pmux_drvgrp_config colibri_t30_padctrl[] = {
> +       /* (_drvgrp, _slwf, _slwr, _drvup, _drvdn, _lpmd, _schmt, _hsm) */
> +       DEFAULT_PADCFG(SDIO1, SDIOCFG_DRVUP_SLWF, SDIOCFG_DRVDN_SLWR, \
> +               SDIOCFG_DRVUP, SDIOCFG_DRVDN, NONE, DISABLE, DISABLE),
> +};
> +#endif /* _PINMUX_CONFIG_COLIBRI_T30_H_ */
> diff --git a/include/configs/colibri_t30.h b/include/configs/colibri_t30.h
> new file mode 100644
> index 0000000..92eaec8
> --- /dev/null
> +++ b/include/configs/colibri_t30.h
> @@ -0,0 +1,73 @@
> +/*
> + * Copyright (c) 2013-2014 Stefan Agner
> + *
> + * SPDX-License-Identifier:    GPL-2.0+
> + */
> +
> +#ifndef __CONFIG_H
> +#define __CONFIG_H
> +
> +#include <linux/sizes.h>
> +
> +#include "tegra30-common.h"
> +
> +#define CONFIG_DEFAULT_DEVICE_TREE     tegra30-colibri
> +#define CONFIG_OF_CONTROL
> +#define CONFIG_OF_SEPARATE
> +
> +#define V_PROMPT                       "Colibri T30 # "
> +#define CONFIG_TEGRA_BOARD_STRING      "Toradex Colibri T30"
> +
> +/* Board-specific config */
> +#define CONFIG_SERIAL_MULTI
> +#define CONFIG_TEGRA_ENABLE_UARTA
> +#define CONFIG_SYS_NS16550_COM1                NV_PA_APB_UARTA_BASE
> +
> +#define CONFIG_MACH_TYPE               MACH_TYPE_COLIBRI_T30
> +
> +#define CONFIG_BOARD_EARLY_INIT_F
> +
> +/* I2C */
> +#define CONFIG_SYS_I2C_TEGRA
> +#define CONFIG_SYS_I2C_INIT_BOARD
> +#define CONFIG_I2C_MULTI_BUS
> +#define CONFIG_SYS_MAX_I2C_BUS         TEGRA_I2C_NUM_CONTROLLERS
> +#define CONFIG_SYS_I2C_SPEED           100000
> +#define CONFIG_CMD_I2C
> +#define CONFIG_SYS_I2C
> +
> +/* SD/MMC */
> +#define CONFIG_MMC
> +#define CONFIG_GENERIC_MMC
> +#define CONFIG_TEGRA_MMC
> +#define CONFIG_CMD_MMC
> +
> +/* Environment in eMMC, at the end of 2nd "boot sector" */
> +#define CONFIG_ENV_IS_IN_MMC
> +#define CONFIG_ENV_OFFSET              (-CONFIG_ENV_SIZE)
> +#define CONFIG_SYS_MMC_ENV_DEV         0
> +#define CONFIG_SYS_MMC_ENV_PART                2
> +
> +#define BOARD_EXTRA_ENV_SETTINGS \
> +       "board_name=colibri-eval-v3\0" \
> +       "fdtfile=tegra30-colibri-eval-v3.dtb\0"
> +
> +/* USB Host support */
> +#define CONFIG_USB_EHCI
> +#define CONFIG_USB_EHCI_TEGRA
> +#define CONFIG_USB_STORAGE
> +#define CONFIG_USB_MAX_CONTROLLER_COUNT 3
> +#define CONFIG_CMD_USB
> +
> +/* USB networking support */
> +#define CONFIG_USB_HOST_ETHER
> +#define CONFIG_USB_ETHER_ASIX
> +
> +/* General networking support */
> +#define CONFIG_CMD_NET
> +#define CONFIG_CMD_DHCP
> +
> +#include "tegra-common-ums.h"
> +#include "tegra-common-post.h"
> +
> +#endif /* __CONFIG_H */
> --
> 2.0.3
>
Regards,
Simon

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH] ARM: tegra: add Colibri T30 board support
  2014-07-31 17:41 ` Simon Glass
@ 2014-07-31 18:00   ` Stefan Agner
  2014-07-31 21:55     ` Simon Glass
  0 siblings, 1 reply; 13+ messages in thread
From: Stefan Agner @ 2014-07-31 18:00 UTC (permalink / raw)
  To: u-boot

Hi Simon,

Am 2014-07-31 19:41, schrieb Simon Glass:
> Hi Stefan,
> 
> On 31 July 2014 18:36, Stefan Agner <stefan@agner.ch> wrote:
>>
>> This adds board support for the Toradex Colibri T30 module.
>>
> 
> A few quick questions below...
> 
> 
>>
>> Working functions:
>> - SD card boot
>> - eMMC environment and boot
>> - USB host/USB client (on the dual role port)
>> - Network (via ASIX USB)
>>
>> Signed-off-by: Stefan Agner <stefan@agner.ch>
>> ---
>>  arch/arm/Kconfig                                   |   4 +
>>  arch/arm/dts/Makefile                              |   1 +
>>  arch/arm/dts/tegra30-colibri.dts                   |  84 +++++
>>  arch/arm/include/asm/mach-types.h                  |  13 +
>>  board/toradex/colibri_t30/Makefile                 |   6 +
>>  board/toradex/colibri_t30/colibri_t30.c            |  52 +++
>>  .../colibri_t30/pinmux-config-colibri_t30.h        | 360 +++++++++++++++++++++
>>  include/configs/colibri_t30.h                      |  73 +++++
>>  8 files changed, 593 insertions(+)
>>  create mode 100644 arch/arm/dts/tegra30-colibri.dts
>>  create mode 100644 board/toradex/colibri_t30/Makefile
>>  create mode 100644 board/toradex/colibri_t30/colibri_t30.c
>>  create mode 100644 board/toradex/colibri_t30/pinmux-config-colibri_t30.h
>>  create mode 100644 include/configs/colibri_t30.h
>>
>> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
>> index e385eda..dd987cc 100644
>> --- a/arch/arm/Kconfig
>> +++ b/arch/arm/Kconfig
>> @@ -701,6 +701,9 @@ config TARGET_WHISTLER
>>  config TARGET_COLIBRI_T20_IRIS
>>         bool "Support colibri_t20_iris"
>>
>> +config TARGET_COLIBRI_T30
>> +       bool "Support Colibri T30"
>> +
>>  config TARGET_TEC_NG
>>         bool "Support tec-ng"
>>
>> @@ -989,6 +992,7 @@ source "board/timll/devkit3250/Kconfig"
>>  source "board/timll/devkit8000/Kconfig"
>>  source "board/toradex/colibri_pxa270/Kconfig"
>>  source "board/toradex/colibri_t20_iris/Kconfig"
>> +source "board/toradex/colibri_t30/Kconfig"
>>  source "board/trizepsiv/Kconfig"
>>  source "board/ttcontrol/vision2/Kconfig"
>>  source "board/udoo/Kconfig"
>> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
>> index 6e2e313..c46b7be 100644
>> --- a/arch/arm/dts/Makefile
>> +++ b/arch/arm/dts/Makefile
>> @@ -21,6 +21,7 @@ dtb-$(CONFIG_TEGRA) += tegra20-harmony.dtb \
>>         tegra20-colibri_t20_iris.dtb \
>>         tegra30-beaver.dtb \
>>         tegra30-cardhu.dtb \
>> +       tegra30-colibri.dtb \
>>         tegra30-tec-ng.dtb \
>>         tegra114-dalmore.dtb \
>>         tegra124-jetson-tk1.dtb \
>> diff --git a/arch/arm/dts/tegra30-colibri.dts b/arch/arm/dts/tegra30-colibri.dts
>> new file mode 100644
>> index 0000000..21d0311
>> --- /dev/null
>> +++ b/arch/arm/dts/tegra30-colibri.dts
>> @@ -0,0 +1,84 @@
>> +/dts-v1/;
>> +
>> +#include "tegra30.dtsi"
>> +
>> +/ {
>> +       model = "Toradex Colibri T30";
>> +       compatible = "toradex,colibri_t30", "nvidia,tegra30";
>> +
>> +       aliases {
>> +               i2c0 = "/i2c at 7000d000";
>> +               i2c1 = "/i2c at 7000c000";
>> +               i2c2 = "/i2c at 7000c700";
>> +               sdhci0 = "/sdhci at 78000600";
>> +               sdhci1 = "/sdhci at 78000200";
>> +               usb0 = "/usb at 7d000000";
>> +               usb1 = "/usb at 7d004000"; /* on module only, for ASIX */
>> +               usb2 = "/usb at 7d008000";
>> +       };
>> +
>> +       memory {
>> +               device_type = "memory";
>> +               reg = <0x80000000 0x40000000>;
>> +       };
>> +
>> +       /* GEN1_I2C: I2C_SDA/SCL on SODIMM pin 194/196 (e.g. RTC on carrier
>> +          board) */
>> +       i2c at 7000c000 {
>> +               status = "okay";
>> +               clock-frequency = <100000>;
>> +       };
>> +
>> +       /* GEN2_I2C: unused */
>> +
>> +       /* CAM_I2C: unused */
>> +
>> +       /* DDC_CLOCK/DATA on X3 pin 15/16 (e.g. display EDID) */
>> +       i2c at 7000c700 {
>> +               status = "okay";
>> +               clock-frequency = <100000>;
>> +       };
>> +
>> +       /* PWR_I2C: power I2C to audio codec, PMIC, temperature sensor and
>> +          touch screen controller */
>> +       i2c at 7000d000 {
>> +               status = "okay";
>> +               clock-frequency = <100000>;
>> +       };
>> +
>> +       /* SPI1: Colibri SSP */
>> +       spi at 7000d400 {
>> +               status = "okay";
>> +               spi-max-frequency = <25000000>;
>> +       };
>> +
>> +       sdhci at 78000200 {
>> +               status = "okay";
>> +               bus-width = <4>;
>> +               cd-gpios = <&gpio 23 1>; /* PC7, MMCD */
>> +       };
>> +
>> +       sdhci at 78000600 {
>> +               status = "okay";
>> +               bus-width = <8>;
>> +               non-removable;
>> +       };
>> +
>> +       /* EHCI instance 0: USB1_DP/N -> USBC_P/N */
>> +       usb at 7d000000 {
>> +               status = "okay";
>> +               dr_mode = "otg";
>> +       };
>> +
>> +       /* EHCI instance 1: USB2_DP/N -> AX88772B */
>> +       usb at 7d004000 {
>> +               status = "okay";
>> +               phy_type = "utmi";
>> +       };
>> +
>> +       /* EHCI instance 2: USB3_DP/N -> USBH_P/N */
>> +       usb at 7d008000 {
>> +               status = "okay";
>> +               nvidia,vbus-gpio = <&gpio 178 1>;       /* PW2, USBH_PEN */
>> +       };
>> +};
>> diff --git a/arch/arm/include/asm/mach-types.h b/arch/arm/include/asm/mach-types.h
>> index 440b041..560924e 100644
>> --- a/arch/arm/include/asm/mach-types.h
>> +++ b/arch/arm/include/asm/mach-types.h
>> @@ -1106,6 +1106,7 @@ extern unsigned int __machine_arch_type;
>>  #define MACH_TYPE_OMAP5_SEVM           3777
>>  #define MACH_TYPE_ARMADILLO_800EVA     3863
>>  #define MACH_TYPE_KZM9G                4140
>> +#define MACH_TYPE_COLIBRI_T30          4493
>>
>>  #ifdef CONFIG_ARCH_EBSA110
>>  # ifdef machine_arch_type
>> @@ -14235,6 +14236,18 @@ extern unsigned int __machine_arch_type;
>>  # define machine_is_kzm9g()    (0)
>>  #endif
>>
>> +#ifdef CONFIG_MACH_COLIBRI_T30
>> +# ifdef machine_arch_type
>> +#  undef machine_arch_type
>> +#  define machine_arch_type    __machine_arch_type
>> +# else
>> +#  define machine_arch_type    MACH_TYPE_COLIBRI_T30
>> +# endif
>> +# define machine_is_colibri_t30()      (machine_arch_type == MACH_TYPE_COLIBRI_T30)
>> +#else
>> +# define machine_is_colibri_t30()      (0)
>> +#endif
> 
> 
> Do we actually need this machine type stuff anymore?
> 

That way we can also boot the 3.1 L4T Kernel, since this is the
(probably last) one where we get supported binary drivers for the
graphics part.

>>
>> +
>>  /*
>>   * These have not yet been registered
>>   */
>> diff --git a/board/toradex/colibri_t30/Makefile b/board/toradex/colibri_t30/Makefile
>> new file mode 100644
>> index 0000000..3d58a4b
>> --- /dev/null
>> +++ b/board/toradex/colibri_t30/Makefile
>> @@ -0,0 +1,6 @@
>> +# Copyright (c) 2013-2014 Stefan Agner
>> +# SPDX-License-Identifier:      GPL-2.0+
>> +
>> +include $(srctree)/board/nvidia/common/common.mk
>> +
>> +obj-y  += colibri_t30.o
>> diff --git a/board/toradex/colibri_t30/colibri_t30.c b/board/toradex/colibri_t30/colibri_t30.c
>> new file mode 100644
>> index 0000000..6c7c62d
>> --- /dev/null
>> +++ b/board/toradex/colibri_t30/colibri_t30.c
>> @@ -0,0 +1,52 @@
>> +/*
>> + *  (C) Copyright 2014
>> + *  Stefan Agner <stefan@agner.ch>
>> + *
>> + * SPDX-License-Identifier:    GPL-2.0+
>> + */
>> +
>> +#include <common.h>
>> +#include <asm/arch/pinmux.h>
>> +#include <asm/arch/gp_padctrl.h>
>> +#include "pinmux-config-colibri_t30.h"
>> +#include <i2c.h>
>> +#include <asm/gpio.h>
>> +
>> +#define PMU_I2C_ADDRESS                0x2D
>> +#define MAX_I2C_RETRY          3
> 
> 
> Are these used?
> 

The address is correct, but not used right now. Should I remove?

>>
>> +
>> +/*
>> + * Routine: pinmux_init
>> + * Description: Do individual peripheral pinmux configs
>> + */
>> +void pinmux_init(void)
>> +{
>> +       pinmux_config_pingrp_table(tegra3_pinmux_common,
>> +                                  ARRAY_SIZE(tegra3_pinmux_common));
>> +
>> +       pinmux_config_pingrp_table(unused_pins_lowpower,
>> +                                  ARRAY_SIZE(unused_pins_lowpower));
>> +
>> +       /* Initialize any non-default pad configs (APB_MISC_GP regs) */
>> +       pinmux_config_drvgrp_table(colibri_t30_padctrl,
>> +                                  ARRAY_SIZE(colibri_t30_padctrl));
>> +}
>> +
>> +/*
>> + * Enable AX88772B USB to LAN controller
>> + */
>> +void pin_mux_usb(void)
>> +{
>> +       /* Enable LAN_VBUS */
>> +       gpio_request(GPIO_PDD2, NULL);
>> +       gpio_direction_output(GPIO_PDD2, 1);
>> +
>> +       /* Reset ASIX using LAN_RESET */
>> +       gpio_request(GPIO_PDD0, NULL);
>> +       gpio_direction_output(GPIO_PDD0, 0);
>> +
>> +       udelay(5);
>> +
>> +       gpio_set_value(GPIO_PDD0, 1);
> 
> 
> You are using device tree for sdhci - shouldn't we use it for USB also?
> 

The Colibri T30 has a ASIX USB to Ethernet chip on its board. We
reset/power the ASIX here. It is a very board specific reset/powering,
hence I put it in here.

In my initial patches I had it in the nvidia,phy-reset-gpio and
nvidia,vbus-gpio properties. Technically, it would work to have this
GPIOs in the device tree as USB properties, but I think this would be
logically wrong... 

>>
>> +}
>> +
>> diff --git a/board/toradex/colibri_t30/pinmux-config-colibri_t30.h b/board/toradex/colibri_t30/pinmux-config-colibri_t30.h
>> new file mode 100644
>> index 0000000..4e73c07
>> --- /dev/null
>> +++ b/board/toradex/colibri_t30/pinmux-config-colibri_t30.h
>> @@ -0,0 +1,360 @@
>> +/*
>> + * Copyright (c) 2013-2014, Stefan Agner
>> + *
>> + * This program is free software; you can redistribute it and/or modify it
>> + * under the terms and conditions of the GNU General Public License,
>> + * version 2, as published by the Free Software Foundation.
>> + *
>> + * This program is distributed in the hope 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.
>> + *
>> + * You should have received a copy of the GNU General Public License
>> + * along with this program.  If not, see <http://www.gnu.org/licenses/>.
>> + */
>> +
>> +#ifndef _PINMUX_CONFIG_COLIBRI_T30_H_
>> +#define _PINMUX_CONFIG_COLIBRI_T30_H_
>> +
>> +#define DEFAULT_PINMUX(_pingrp, _mux, _pull, _tri, _io)                \
>> +       {                                                       \
>> +               .pingrp         = PMUX_PINGRP_##_pingrp,        \
>> +               .func           = PMUX_FUNC_##_mux,             \
>> +               .pull           = PMUX_PULL_##_pull,            \
>> +               .tristate       = PMUX_TRI_##_tri,              \
>> +               .io             = PMUX_PIN_##_io,               \
>> +               .lock           = PMUX_PIN_LOCK_DEFAULT,        \
>> +               .od             = PMUX_PIN_OD_DEFAULT,          \
>> +               .ioreset        = PMUX_PIN_IO_RESET_DEFAULT,    \
>> +       }
>> +
>> +#define I2C_PINMUX(_pingrp, _mux, _pull, _tri, _io, _lock, _od)        \
>> +       {                                                       \
>> +               .pingrp         = PMUX_PINGRP_##_pingrp,        \
>> +               .func           = PMUX_FUNC_##_mux,             \
>> +               .pull           = PMUX_PULL_##_pull,            \
>> +               .tristate       = PMUX_TRI_##_tri,              \
>> +               .io             = PMUX_PIN_##_io,               \
>> +               .lock           = PMUX_PIN_LOCK_##_lock,        \
>> +               .od             = PMUX_PIN_OD_##_od,            \
>> +               .ioreset        = PMUX_PIN_IO_RESET_DEFAULT,    \
>> +       }
>> +
>> +#define LV_PINMUX(_pingrp, _mux, _pull, _tri, _io, _lock, _ioreset) \
>> +       {                                                       \
>> +               .pingrp         = PMUX_PINGRP_##_pingrp,        \
>> +               .func           = PMUX_FUNC_##_mux,             \
>> +               .pull           = PMUX_PULL_##_pull,            \
>> +               .tristate       = PMUX_TRI_##_tri,              \
>> +               .io             = PMUX_PIN_##_io,               \
>> +               .lock           = PMUX_PIN_LOCK_##_lock,        \
>> +               .od             = PMUX_PIN_OD_DEFAULT,          \
>> +               .ioreset        = PMUX_PIN_IO_RESET_##_ioreset  \
>> +       }
>> +
>> +#define DEFAULT_PADCFG(_drvgrp, _slwf, _slwr, _drvup, _drvdn, _lpmd, _schmt, _hsm) \
>> +       {                                                       \
>> +               .drvgrp         = PMUX_DRVGRP_##_drvgrp,        \
>> +               .slwf           = _slwf,                        \
>> +               .slwr           = _slwr,                        \
>> +               .drvup          = _drvup,                       \
>> +               .drvdn          = _drvdn,                       \
>> +               .lpmd           = PMUX_LPMD_##_lpmd,            \
>> +               .schmt          = PMUX_SCHMT_##_schmt,          \
>> +               .hsm            = PMUX_HSM_##_hsm,              \
>> +       }
>> +
>> +static struct pmux_pingrp_config tegra3_pinmux_common[] = {
>> +       /* SDMMC1 disabled */
>> +       DEFAULT_PINMUX(SDMMC1_CLK_PZ0, RSVD1, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(SDMMC1_CMD_PZ1, RSVD1, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(SDMMC1_DAT3_PY4, RSVD1, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(SDMMC1_DAT2_PY5, RSVD1, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(SDMMC1_DAT1_PY6, RSVD1, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(SDMMC1_DAT0_PY7, RSVD1, NORMAL, NORMAL, INPUT),
>> +
>> +       /* SDMMC3 pinmux */
>> +       DEFAULT_PINMUX(SDMMC3_CLK_PA6, SDMMC3, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(SDMMC3_CMD_PA7, SDMMC3, UP, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(SDMMC3_DAT0_PB7, SDMMC3, UP, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(SDMMC3_DAT1_PB6, SDMMC3, UP, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(SDMMC3_DAT2_PB5, SDMMC3, UP, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(SDMMC3_DAT3_PB4, SDMMC3, UP, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(SDMMC3_DAT6_PD3, RSVD1, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(SDMMC3_DAT7_PD4, RSVD1, NORMAL, NORMAL, INPUT),
>> +
>> +       /* SDMMC4 pinmux (eMMC) */
>> +       LV_PINMUX(SDMMC4_CLK_PCC4, SDMMC4, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
>> +       LV_PINMUX(SDMMC4_CMD_PT7, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
>> +       LV_PINMUX(SDMMC4_DAT0_PAA0, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
>> +       LV_PINMUX(SDMMC4_DAT1_PAA1, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
>> +       LV_PINMUX(SDMMC4_DAT2_PAA2, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
>> +       LV_PINMUX(SDMMC4_DAT3_PAA3, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
>> +       LV_PINMUX(SDMMC4_DAT4_PAA4, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
>> +       LV_PINMUX(SDMMC4_DAT5_PAA5, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
>> +       LV_PINMUX(SDMMC4_DAT6_PAA6, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
>> +       LV_PINMUX(SDMMC4_DAT7_PAA7, SDMMC4, UP, NORMAL, INPUT, DISABLE, DISABLE),
>> +       LV_PINMUX(SDMMC4_RST_N_PCC3, RSVD1, DOWN, NORMAL, INPUT, DISABLE, DISABLE),
>> +
>> +       /* I2C1 pinmux */
>> +       I2C_PINMUX(GEN1_I2C_SCL_PC4, I2C1, NORMAL, NORMAL, INPUT, DISABLE, ENABLE),
>> +       I2C_PINMUX(GEN1_I2C_SDA_PC5, I2C1, NORMAL, NORMAL, INPUT, DISABLE, ENABLE),
>> +
>> +       /* I2C2 pinmux */
>> +       DEFAULT_PINMUX(GEN2_I2C_SCL_PT5, I2C2, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(GEN2_I2C_SDA_PT6, I2C2, NORMAL, NORMAL, INPUT),
>> +
>> +       /* I2C3 pinmux, muliplexed with KB_ROW13/KB_ROW14 */
>> +       I2C_PINMUX(CAM_I2C_SCL_PBB1, I2C3, NORMAL, TRISTATE, INPUT, DISABLE, ENABLE),
>> +       I2C_PINMUX(CAM_I2C_SDA_PBB2, I2C3, NORMAL, TRISTATE, INPUT, DISABLE, ENABLE),
>> +
>> +       /* I2C4 pinmux */
>> +       I2C_PINMUX(DDC_SCL_PV4, I2C4, NORMAL, NORMAL, INPUT, DISABLE, ENABLE),
>> +       I2C_PINMUX(DDC_SDA_PV5, I2C4, NORMAL, NORMAL, INPUT, DISABLE, ENABLE),
>> +
>> +       /* Power I2C pinmux */
>> +       I2C_PINMUX(PWR_I2C_SCL_PZ6, I2CPWR, NORMAL, NORMAL, INPUT, DISABLE, ENABLE),
>> +       I2C_PINMUX(PWR_I2C_SDA_PZ7, I2CPWR, NORMAL, NORMAL, INPUT, DISABLE, ENABLE),
>> +
>> +       DEFAULT_PINMUX(ULPI_DATA0_PO1, UARTA, NORMAL, NORMAL, OUTPUT),
>> +       /* UARTA RX, make sure we don't get input form a floating Pin */
>> +       DEFAULT_PINMUX(ULPI_DATA1_PO2, UARTA, UP, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(ULPI_DATA2_PO3, UARTA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(ULPI_DATA3_PO4, RSVD1, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(ULPI_DATA4_PO5, UARTA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(ULPI_DATA5_PO6, UARTA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(ULPI_DATA6_PO7, UARTA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(ULPI_DATA7_PO0, UARTA, NORMAL, NORMAL, OUTPUT),
>> +       DEFAULT_PINMUX(ULPI_CLK_PY0, SPI1, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(ULPI_DIR_PY1, SPI1, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(ULPI_NXT_PY2, SPI1, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(ULPI_STP_PY3, SPI1, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(DAP3_FS_PP0, I2S2, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(DAP3_DIN_PP1, I2S2, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(DAP3_DOUT_PP2, I2S2, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(DAP3_SCLK_PP3, I2S2, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(PV2, OWR, NORMAL, NORMAL, OUTPUT),
>> +       DEFAULT_PINMUX(PV3, RSVD1, NORMAL, NORMAL, OUTPUT),
>> +       DEFAULT_PINMUX(CLK2_OUT_PW5, EXTPERIPH2, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(CLK2_REQ_PCC5, DAP, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_PWR1_PC1, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_PWR2_PC6, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_SDIN_PZ2, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_SDOUT_PN5, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_WR_N_PZ3, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_CS0_N_PN4, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_DC0_PN6, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_SCK_PZ4, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_PWR0_PB2, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_PCLK_PB3, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_DE_PJ1, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_HSYNC_PJ3, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_VSYNC_PJ4, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D0_PE0, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D1_PE1, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D2_PE2, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D3_PE3, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D4_PE4, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D5_PE5, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D6_PE6, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D7_PE7, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D8_PF0, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D9_PF1, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D10_PF2, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D11_PF3, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D12_PF4, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D13_PF5, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D14_PF6, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D15_PF7, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D16_PM0, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D17_PM1, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D18_PM2, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D19_PM3, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D20_PM4, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D21_PM5, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D22_PM6, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_D23_PM7, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_CS1_N_PW0, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_M1_PW1, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(LCD_DC1_PD2, DISPLAYA, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(CRT_HSYNC_PV6, CRT, NORMAL, NORMAL, OUTPUT),
>> +       DEFAULT_PINMUX(CRT_VSYNC_PV7, CRT, NORMAL, NORMAL, OUTPUT),
>> +       LV_PINMUX(VI_D0_PT4, RSVD1, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
>> +       LV_PINMUX(VI_D1_PD5, SDMMC2, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
>> +       LV_PINMUX(VI_D2_PL0, SDMMC2, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
>> +       LV_PINMUX(VI_D3_PL1, SDMMC2, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
>> +       LV_PINMUX(VI_D4_PL2, VI, NORMAL, NORMAL, OUTPUT, DISABLE, DISABLE),
>> +       LV_PINMUX(VI_D5_PL3, SDMMC2, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
>> +       LV_PINMUX(VI_D7_PL5, SDMMC2, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
>> +       LV_PINMUX(VI_D10_PT2, RSVD1, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
>> +       LV_PINMUX(VI_MCLK_PT1, VI, UP, NORMAL, INPUT, DISABLE, DISABLE),
>> +       DEFAULT_PINMUX(UART2_RXD_PC3, UARTB, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(UART2_TXD_PC2, UARTB, NORMAL, NORMAL, OUTPUT),
>> +       DEFAULT_PINMUX(UART2_RTS_N_PJ6, UARTB, NORMAL, NORMAL, OUTPUT),
>> +       DEFAULT_PINMUX(UART2_CTS_N_PJ5, UARTB, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(UART3_TXD_PW6, UARTC, NORMAL, NORMAL, OUTPUT),
>> +       DEFAULT_PINMUX(UART3_RXD_PW7, UARTC, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(UART3_CTS_N_PA1, UARTC, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(UART3_RTS_N_PC0, UARTC, NORMAL, NORMAL, OUTPUT),
>> +       DEFAULT_PINMUX(PU0, RSVD1, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(PU1, RSVD1, NORMAL, NORMAL, OUTPUT),
>> +       DEFAULT_PINMUX(PU2, RSVD1, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(PU3, RSVD1, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(PU4, PWM1, NORMAL, NORMAL, OUTPUT),
>> +       DEFAULT_PINMUX(PU5, PWM2, NORMAL, NORMAL, OUTPUT),
>> +       DEFAULT_PINMUX(PU6, RSVD1, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(DAP4_FS_PP4, I2S3, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(DAP4_DIN_PP5, I2S3, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(DAP4_DOUT_PP6, I2S3, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(DAP4_SCLK_PP7, I2S3, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(CLK3_OUT_PEE0, EXTPERIPH3, NORMAL, NORMAL, OUTPUT),
>> +       DEFAULT_PINMUX(CLK3_REQ_PEE1, DEV3, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(GMI_WP_N_PC7, GMI, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(GMI_CS2_N_PK3, RSVD1, UP, NORMAL, INPUT), /* EN_VDD_BL1 */
>> +       DEFAULT_PINMUX(GMI_AD8_PH0, PWM0, NORMAL, NORMAL, OUTPUT), /* LCD1_BL_PWM */
>> +       DEFAULT_PINMUX(GMI_AD10_PH2, NAND, NORMAL, NORMAL, OUTPUT), /* LCD1_BL_EN */
>> +       DEFAULT_PINMUX(GMI_A16_PJ7, UARTD, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(GMI_A17_PB0, UARTD, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(GMI_A18_PB1, UARTD, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(GMI_A19_PK7, UARTD, NORMAL, NORMAL, INPUT),
>> +
>> +
>> +       /* Multiplexed with KB_ROW10/KB_ROW11/KB_ROW12/KB_ROW15 */
>> +       DEFAULT_PINMUX(CAM_MCLK_PCC0, VI_ALT2, UP, TRISTATE, INPUT),
>> +       DEFAULT_PINMUX(PCC1, RSVD1, NORMAL, TRISTATE, INPUT),
>> +       DEFAULT_PINMUX(PBB0, RSVD1, NORMAL, TRISTATE, INPUT),
>> +       DEFAULT_PINMUX(PBB3, VGP3, NORMAL, TRISTATE, INPUT),
>> +
>> +       DEFAULT_PINMUX(PBB5, VGP5, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(PBB6, VGP6, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(PBB7, I2S4, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(PCC2, I2S4, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(JTAG_RTCK_PU7, RTCK, NORMAL, NORMAL, OUTPUT),
>> +
>> +       /* KBC keys */
>> +       DEFAULT_PINMUX(KB_ROW0_PR0, RSVD2, NORMAL, TRISTATE, INPUT),
>> +       DEFAULT_PINMUX(KB_ROW1_PR1, RSVD2, NORMAL, TRISTATE, INPUT),
>> +       DEFAULT_PINMUX(KB_ROW2_PR2, RSVD2, NORMAL, TRISTATE, INPUT),
>> +       DEFAULT_PINMUX(KB_ROW3_PR3, RSVD2, NORMAL, TRISTATE, INPUT),
>> +       DEFAULT_PINMUX(KB_ROW4_PR4, RSVD3, NORMAL, TRISTATE, INPUT),
>> +       DEFAULT_PINMUX(KB_ROW5_PR5, KBC, NORMAL, TRISTATE, INPUT),
>> +       DEFAULT_PINMUX(KB_ROW6_PR6, KBC, NORMAL, TRISTATE, INPUT),
>> +       DEFAULT_PINMUX(KB_ROW7_PR7, KBC, NORMAL, TRISTATE, INPUT),
>> +       DEFAULT_PINMUX(KB_ROW8_PS0, KBC, NORMAL, TRISTATE, INPUT),
>> +       DEFAULT_PINMUX(KB_ROW9_PS1, KBC, NORMAL, TRISTATE, INPUT),
>> +
>> +       /* SDMMC2 pinmux */
>> +       DEFAULT_PINMUX(KB_ROW10_PS2, SDMMC2, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(KB_ROW11_PS3, SDMMC2, UP, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(KB_ROW12_PS4, SDMMC2, UP, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(KB_ROW13_PS5, SDMMC2, UP, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(KB_ROW14_PS6, SDMMC2, UP, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(KB_ROW15_PS7, SDMMC2, UP, NORMAL, INPUT),
>> +
>> +       DEFAULT_PINMUX(KB_COL0_PQ0, KBC, UP, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(KB_COL1_PQ1, KBC, UP, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(KB_COL2_PQ2, KBC, UP, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(KB_COL3_PQ3, KBC, UP, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(KB_COL4_PQ4, KBC, UP, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(KB_COL5_PQ5, KBC, UP, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(KB_COL6_PQ6, KBC, UP, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(KB_COL7_PQ7, KBC, UP, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(PV0, RSVD1, UP, NORMAL, INPUT),
>> +
>> +       DEFAULT_PINMUX(CLK_32K_OUT_PA0, BLINK, NORMAL, NORMAL, OUTPUT),
>> +       DEFAULT_PINMUX(SYS_CLK_REQ_PZ5, SYSCLK, NORMAL, NORMAL, OUTPUT),
>> +       DEFAULT_PINMUX(OWR, OWR, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(DAP1_FS_PN0, I2S0, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(DAP1_DIN_PN1, I2S0, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(DAP1_DOUT_PN2, I2S0, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(DAP1_SCLK_PN3, I2S0, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(CLK1_REQ_PEE2, DAP, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(CLK1_OUT_PW4, EXTPERIPH1, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(SPDIF_IN_PK6, SPDIF, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(SPDIF_OUT_PK5, SPDIF, NORMAL, NORMAL, OUTPUT),
>> +       DEFAULT_PINMUX(DAP2_FS_PA2, I2S1, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(DAP2_DIN_PA4, I2S1, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(DAP2_DOUT_PA5, I2S1, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(DAP2_SCLK_PA3, I2S1, NORMAL, NORMAL, INPUT),
>> +
>> +       DEFAULT_PINMUX(SPI2_CS1_N_PW2, SPI2, UP, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(SPI1_MOSI_PX4, SPI1, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(SPI1_SCK_PX5, SPI1, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(SPI1_CS0_N_PX6, SPI1, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(SPI1_MISO_PX7, SPI1, NORMAL, NORMAL, INPUT),
>> +
>> +       /* LAN_RESET */
>> +       DEFAULT_PINMUX(PEX_L0_PRSNT_N_PDD0, RSVD2, NORMAL, NORMAL, OUTPUT),
>> +
>> +       DEFAULT_PINMUX(PEX_L0_RST_N_PDD1, PCIE, NORMAL, NORMAL, OUTPUT),
>> +
>> +       /* LAN_VBUS */
>> +       DEFAULT_PINMUX(PEX_L0_CLKREQ_N_PDD2, RSVD2, NORMAL, NORMAL, OUTPUT),
>> +
>> +       DEFAULT_PINMUX(PEX_WAKE_N_PDD3, PCIE, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(PEX_L1_PRSNT_N_PDD4, PCIE, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(PEX_L1_RST_N_PDD5, PCIE, NORMAL, NORMAL, OUTPUT),
>> +       DEFAULT_PINMUX(PEX_L1_CLKREQ_N_PDD6, PCIE, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(PEX_L2_PRSNT_N_PDD7, PCIE, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(PEX_L2_RST_N_PCC6, PCIE, NORMAL, NORMAL, OUTPUT),
>> +       DEFAULT_PINMUX(PEX_L2_CLKREQ_N_PCC7, PCIE, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(HDMI_CEC_PEE3, CEC, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(HDMI_INT_PN7, RSVD1, NORMAL, TRISTATE, INPUT),
>> +
>> +       /* GPIOs */
>> +       /* SDMMC1 CD gpio */
>> +       DEFAULT_PINMUX(GMI_IORDY_PI5, RSVD1, UP, NORMAL, INPUT),
>> +       /* SDMMC1 WP gpio */
>> +       LV_PINMUX(VI_D11_PT3, RSVD1, UP, NORMAL, INPUT, DISABLE, DISABLE),
>> +
>> +       /* Touch panel GPIO */
>> +       /* Touch IRQ */
>> +       DEFAULT_PINMUX(GMI_AD12_PH4, NAND, UP, NORMAL, INPUT),
>> +
>> +       /* Touch RESET */
>> +       DEFAULT_PINMUX(GMI_AD14_PH6, NAND, NORMAL, NORMAL, OUTPUT),
>> +
>> +       /* Power rails GPIO */
>> +       DEFAULT_PINMUX(SPI2_SCK_PX2, GMI, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(PBB4, VGP4, NORMAL, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(KB_ROW8_PS0, KBC, UP, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(SDMMC3_DAT5_PD0, SDMMC3, UP, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(SDMMC3_DAT4_PD1, SDMMC3, UP, NORMAL, INPUT),
>> +
>> +       LV_PINMUX(VI_D6_PL4, VI, NORMAL, NORMAL, OUTPUT, DISABLE, DISABLE),
>> +       LV_PINMUX(VI_D8_PL6, VI, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
>> +       LV_PINMUX(VI_D9_PL7, VI, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
>> +       LV_PINMUX(VI_PCLK_PT0, RSVD1, UP, TRISTATE, INPUT, DISABLE, DISABLE),
>> +       LV_PINMUX(VI_HSYNC_PD7, RSVD1, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
>> +       LV_PINMUX(VI_VSYNC_PD6, RSVD1, NORMAL, NORMAL, INPUT, DISABLE, DISABLE),
>> +};
>> +
>> +static struct pmux_pingrp_config unused_pins_lowpower[] = {
>> +       DEFAULT_PINMUX(GMI_WAIT_PI7, NAND, UP, TRISTATE, OUTPUT),
>> +       DEFAULT_PINMUX(GMI_ADV_N_PK0, NAND, NORMAL, TRISTATE, OUTPUT),
>> +       DEFAULT_PINMUX(GMI_CLK_PK1, NAND, NORMAL, TRISTATE, OUTPUT),
>> +       DEFAULT_PINMUX(GMI_CS3_N_PK4, NAND, NORMAL, NORMAL, OUTPUT),
>> +       DEFAULT_PINMUX(GMI_CS7_N_PI6, NAND, UP, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(GMI_AD0_PG0, NAND, NORMAL, TRISTATE, OUTPUT),
>> +       DEFAULT_PINMUX(GMI_AD1_PG1, NAND, NORMAL, TRISTATE, OUTPUT),
>> +       DEFAULT_PINMUX(GMI_AD2_PG2, NAND, NORMAL, TRISTATE, OUTPUT),
>> +       DEFAULT_PINMUX(GMI_AD3_PG3, NAND, NORMAL, TRISTATE, OUTPUT),
>> +       DEFAULT_PINMUX(GMI_AD4_PG4, NAND, NORMAL, TRISTATE, OUTPUT),
>> +       DEFAULT_PINMUX(GMI_AD5_PG5, NAND, NORMAL, TRISTATE, OUTPUT),
>> +       DEFAULT_PINMUX(GMI_AD6_PG6, NAND, NORMAL, TRISTATE, OUTPUT),
>> +       DEFAULT_PINMUX(GMI_AD7_PG7, NAND, NORMAL, TRISTATE, OUTPUT),
>> +       DEFAULT_PINMUX(GMI_AD9_PH1, PWM1, NORMAL, NORMAL, OUTPUT),
>> +       DEFAULT_PINMUX(GMI_AD11_PH3, NAND, NORMAL, NORMAL, OUTPUT),
>> +       DEFAULT_PINMUX(GMI_AD13_PH5, NAND, UP, NORMAL, INPUT),
>> +       DEFAULT_PINMUX(GMI_WR_N_PI0, NAND, NORMAL, TRISTATE, OUTPUT),
>> +       DEFAULT_PINMUX(GMI_OE_N_PI1, NAND, NORMAL, TRISTATE, OUTPUT),
>> +       DEFAULT_PINMUX(GMI_DQS_PI2, NAND, NORMAL, TRISTATE, OUTPUT),
>> +};
>> +
>> +static struct pmux_drvgrp_config colibri_t30_padctrl[] = {
>> +       /* (_drvgrp, _slwf, _slwr, _drvup, _drvdn, _lpmd, _schmt, _hsm) */
>> +       DEFAULT_PADCFG(SDIO1, SDIOCFG_DRVUP_SLWF, SDIOCFG_DRVDN_SLWR, \
>> +               SDIOCFG_DRVUP, SDIOCFG_DRVDN, NONE, DISABLE, DISABLE),
>> +};
>> +#endif /* _PINMUX_CONFIG_COLIBRI_T30_H_ */
>> diff --git a/include/configs/colibri_t30.h b/include/configs/colibri_t30.h
>> new file mode 100644
>> index 0000000..92eaec8
>> --- /dev/null
>> +++ b/include/configs/colibri_t30.h
>> @@ -0,0 +1,73 @@
>> +/*
>> + * Copyright (c) 2013-2014 Stefan Agner
>> + *
>> + * SPDX-License-Identifier:    GPL-2.0+
>> + */
>> +
>> +#ifndef __CONFIG_H
>> +#define __CONFIG_H
>> +
>> +#include <linux/sizes.h>
>> +
>> +#include "tegra30-common.h"
>> +
>> +#define CONFIG_DEFAULT_DEVICE_TREE     tegra30-colibri
>> +#define CONFIG_OF_CONTROL
>> +#define CONFIG_OF_SEPARATE
>> +
>> +#define V_PROMPT                       "Colibri T30 # "
>> +#define CONFIG_TEGRA_BOARD_STRING      "Toradex Colibri T30"
>> +
>> +/* Board-specific config */
>> +#define CONFIG_SERIAL_MULTI
>> +#define CONFIG_TEGRA_ENABLE_UARTA
>> +#define CONFIG_SYS_NS16550_COM1                NV_PA_APB_UARTA_BASE
>> +
>> +#define CONFIG_MACH_TYPE               MACH_TYPE_COLIBRI_T30
>> +
>> +#define CONFIG_BOARD_EARLY_INIT_F
>> +
>> +/* I2C */
>> +#define CONFIG_SYS_I2C_TEGRA
>> +#define CONFIG_SYS_I2C_INIT_BOARD
>> +#define CONFIG_I2C_MULTI_BUS
>> +#define CONFIG_SYS_MAX_I2C_BUS         TEGRA_I2C_NUM_CONTROLLERS
>> +#define CONFIG_SYS_I2C_SPEED           100000
>> +#define CONFIG_CMD_I2C
>> +#define CONFIG_SYS_I2C
>> +
>> +/* SD/MMC */
>> +#define CONFIG_MMC
>> +#define CONFIG_GENERIC_MMC
>> +#define CONFIG_TEGRA_MMC
>> +#define CONFIG_CMD_MMC
>> +
>> +/* Environment in eMMC, at the end of 2nd "boot sector" */
>> +#define CONFIG_ENV_IS_IN_MMC
>> +#define CONFIG_ENV_OFFSET              (-CONFIG_ENV_SIZE)
>> +#define CONFIG_SYS_MMC_ENV_DEV         0
>> +#define CONFIG_SYS_MMC_ENV_PART                2
>> +
>> +#define BOARD_EXTRA_ENV_SETTINGS \
>> +       "board_name=colibri-eval-v3\0" \
>> +       "fdtfile=tegra30-colibri-eval-v3.dtb\0"
>> +
>> +/* USB Host support */
>> +#define CONFIG_USB_EHCI
>> +#define CONFIG_USB_EHCI_TEGRA
>> +#define CONFIG_USB_STORAGE
>> +#define CONFIG_USB_MAX_CONTROLLER_COUNT 3
>> +#define CONFIG_CMD_USB
>> +
>> +/* USB networking support */
>> +#define CONFIG_USB_HOST_ETHER
>> +#define CONFIG_USB_ETHER_ASIX
>> +
>> +/* General networking support */
>> +#define CONFIG_CMD_NET
>> +#define CONFIG_CMD_DHCP
>> +
>> +#include "tegra-common-ums.h"
>> +#include "tegra-common-post.h"
>> +
>> +#endif /* __CONFIG_H */
>> --
>> 2.0.3
>>
> Regards,
> Simon

--
Stefan

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH] ARM: tegra: add Colibri T30 board support
  2014-07-31 17:36 [U-Boot] [PATCH] ARM: tegra: add Colibri T30 board support Stefan Agner
  2014-07-31 17:41 ` Simon Glass
@ 2014-07-31 18:21 ` Stephen Warren
  2014-08-02 14:09   ` Stefan Agner
  1 sibling, 1 reply; 13+ messages in thread
From: Stephen Warren @ 2014-07-31 18:21 UTC (permalink / raw)
  To: u-boot

On 07/31/2014 11:36 AM, Stefan Agner wrote:
> This adds board support for the Toradex Colibri T30 module.
>
> Working functions:
> - SD card boot
> - eMMC environment and boot
> - USB host/USB client (on the dual role port)
> - Network (via ASIX USB)

>   arch/arm/Kconfig                                   |   4 +
>   arch/arm/dts/Makefile                              |   1 +
>   arch/arm/dts/tegra30-colibri.dts                   |  84 +++++
>   arch/arm/include/asm/mach-types.h                  |  13 +
>   board/toradex/colibri_t30/Makefile                 |   6 +
>   board/toradex/colibri_t30/colibri_t30.c            |  52 +++
>   .../colibri_t30/pinmux-config-colibri_t30.h        | 360 +++++++++++++++++++++
>   include/configs/colibri_t30.h                      |  73 +++++

I think in latest u-boot/master, you'll also need to add 
configs/colibri_t30_defconfig.

> diff --git a/arch/arm/dts/tegra30-colibri.dts b/arch/arm/dts/tegra30-colibri.dts

> +	/* EHCI instance 0: USB1_DP/N -> USBC_P/N */
> +	usb at 7d000000 {
> +		status = "okay";
> +		dr_mode = "otg";
> +	};

For OTG support, VBUS needs to be able to be turned on/off. Should this 
port be host-mode, or a VBUS GPIO defined?

> diff --git a/board/toradex/colibri_t30/colibri_t30.c b/board/toradex/colibri_t30/colibri_t30.c

> +void pin_mux_usb(void)
> +{
> +	/* Enable LAN_VBUS */
> +	gpio_request(GPIO_PDD2, NULL);
> +	gpio_direction_output(GPIO_PDD2, 1);
> +
> +	/* Reset ASIX using LAN_RESET */
> +	gpio_request(GPIO_PDD0, NULL);
> +	gpio_direction_output(GPIO_PDD0, 0);
> +
> +	udelay(5);
> +
> +	gpio_set_value(GPIO_PDD0, 1);
> +}

It might be nice to remove the blank lines around the udelay() call; I 
initially didn't notice that GOPIO_PDD0 was manipulated by the code both 
before and after the udelay() and hence there was already a comment 
saying what GPIO_PDD0 controlled. Nestling the lines together would make 
this more obvious.

> diff --git a/include/configs/colibri_t30.h b/include/configs/colibri_t30.h

> +#define CONFIG_I2C_MULTI_BUS
> +#define CONFIG_SYS_MAX_I2C_BUS		TEGRA_I2C_NUM_CONTROLLERS

Are those needed? They aren't defined in e.g. the Beaver config header.

> +#define BOARD_EXTRA_ENV_SETTINGS \
> +	"board_name=colibri-eval-v3\0" \
> +	"fdtfile=tegra30-colibri-eval-v3.dtb\0"

It'd be nice to name the board the same in U-Boot as the kernel DT 
filename. Then you wouldn't need to manually override the default values 
here.

> +#include "tegra-common-ums.h"

Did you test this? I mostly developed the USB device mode support on 
Tegra124. While at some point I did test it on Beaver/Tegra30, it was 
early on and not very extensive. I'd love to hear that it works well for 
you too:-)

(BTW, I sent a patch to rename that file to tegra-common-usb-gadget.h, 
since I added DFU support too, so depending on what order TomW applies 
our patches, one of us will need to rebase)

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH] ARM: tegra: add Colibri T30 board support
  2014-07-31 18:00   ` Stefan Agner
@ 2014-07-31 21:55     ` Simon Glass
  2014-07-31 22:49       ` Stephen Warren
  2014-08-02 13:24       ` Stefan Agner
  0 siblings, 2 replies; 13+ messages in thread
From: Simon Glass @ 2014-07-31 21:55 UTC (permalink / raw)
  To: u-boot

Hi Stefan,

On 31 July 2014 19:00, Stefan Agner <stefan@agner.ch> wrote:
> Hi Simon,
>
> Am 2014-07-31 19:41, schrieb Simon Glass:
>> Hi Stefan,
>>
>> On 31 July 2014 18:36, Stefan Agner <stefan@agner.ch> wrote:
>>>
>>> This adds board support for the Toradex Colibri T30 module.
>>>
>>
>> A few quick questions below...
>>
>>
>>>
>>> Working functions:
>>> - SD card boot
>>> - eMMC environment and boot
>>> - USB host/USB client (on the dual role port)
>>> - Network (via ASIX USB)
>>>
>>> Signed-off-by: Stefan Agner <stefan@agner.ch>
>>> ---
>>>  arch/arm/Kconfig                                   |   4 +
>>>  arch/arm/dts/Makefile                              |   1 +
>>>  arch/arm/dts/tegra30-colibri.dts                   |  84 +++++
>>>  arch/arm/include/asm/mach-types.h                  |  13 +
>>>  board/toradex/colibri_t30/Makefile                 |   6 +
>>>  board/toradex/colibri_t30/colibri_t30.c            |  52 +++
>>>  .../colibri_t30/pinmux-config-colibri_t30.h        | 360 +++++++++++++++++++++
>>>  include/configs/colibri_t30.h                      |  73 +++++
>>>  8 files changed, 593 insertions(+)
>>>  create mode 100644 arch/arm/dts/tegra30-colibri.dts
>>>  create mode 100644 board/toradex/colibri_t30/Makefile
>>>  create mode 100644 board/toradex/colibri_t30/colibri_t30.c
>>>  create mode 100644 board/toradex/colibri_t30/pinmux-config-colibri_t30.h
>>>  create mode 100644 include/configs/colibri_t30.h
>>>
...
>>> diff --git a/arch/arm/include/asm/mach-types.h b/arch/arm/include/asm/mach-types.h
>>> index 440b041..560924e 100644
>>> --- a/arch/arm/include/asm/mach-types.h
>>> +++ b/arch/arm/include/asm/mach-types.h
>>> @@ -1106,6 +1106,7 @@ extern unsigned int __machine_arch_type;
>>>  #define MACH_TYPE_OMAP5_SEVM           3777
>>>  #define MACH_TYPE_ARMADILLO_800EVA     3863
>>>  #define MACH_TYPE_KZM9G                4140
>>> +#define MACH_TYPE_COLIBRI_T30          4493
>>>
>>>  #ifdef CONFIG_ARCH_EBSA110
>>>  # ifdef machine_arch_type
>>> @@ -14235,6 +14236,18 @@ extern unsigned int __machine_arch_type;
>>>  # define machine_is_kzm9g()    (0)
>>>  #endif
>>>
>>> +#ifdef CONFIG_MACH_COLIBRI_T30
>>> +# ifdef machine_arch_type
>>> +#  undef machine_arch_type
>>> +#  define machine_arch_type    __machine_arch_type
>>> +# else
>>> +#  define machine_arch_type    MACH_TYPE_COLIBRI_T30
>>> +# endif
>>> +# define machine_is_colibri_t30()      (machine_arch_type == MACH_TYPE_COLIBRI_T30)
>>> +#else
>>> +# define machine_is_colibri_t30()      (0)
>>> +#endif
>>
>>
>> Do we actually need this machine type stuff anymore?
>>
>
> That way we can also boot the 3.1 L4T Kernel, since this is the
> (probably last) one where we get supported binary drivers for the
> graphics part.

OK I see.

>
>>>
>>> +
>>>  /*
>>>   * These have not yet been registered
>>>   */
>>> diff --git a/board/toradex/colibri_t30/Makefile b/board/toradex/colibri_t30/Makefile
>>> new file mode 100644
>>> index 0000000..3d58a4b
>>> --- /dev/null
>>> +++ b/board/toradex/colibri_t30/Makefile
>>> @@ -0,0 +1,6 @@
>>> +# Copyright (c) 2013-2014 Stefan Agner
>>> +# SPDX-License-Identifier:      GPL-2.0+
>>> +
>>> +include $(srctree)/board/nvidia/common/common.mk
>>> +
>>> +obj-y  += colibri_t30.o
>>> diff --git a/board/toradex/colibri_t30/colibri_t30.c b/board/toradex/colibri_t30/colibri_t30.c
>>> new file mode 100644
>>> index 0000000..6c7c62d
>>> --- /dev/null
>>> +++ b/board/toradex/colibri_t30/colibri_t30.c
>>> @@ -0,0 +1,52 @@
>>> +/*
>>> + *  (C) Copyright 2014
>>> + *  Stefan Agner <stefan@agner.ch>
>>> + *
>>> + * SPDX-License-Identifier:    GPL-2.0+
>>> + */
>>> +
>>> +#include <common.h>
>>> +#include <asm/arch/pinmux.h>
>>> +#include <asm/arch/gp_padctrl.h>
>>> +#include "pinmux-config-colibri_t30.h"
>>> +#include <i2c.h>
>>> +#include <asm/gpio.h>
>>> +
>>> +#define PMU_I2C_ADDRESS                0x2D
>>> +#define MAX_I2C_RETRY          3
>>
>>
>> Are these used?
>>
>
> The address is correct, but not used right now. Should I remove?

I think so.

>
>>>
>>> +
>>> +/*
>>> + * Routine: pinmux_init
>>> + * Description: Do individual peripheral pinmux configs
>>> + */
>>> +void pinmux_init(void)
>>> +{
>>> +       pinmux_config_pingrp_table(tegra3_pinmux_common,
>>> +                                  ARRAY_SIZE(tegra3_pinmux_common));
>>> +
>>> +       pinmux_config_pingrp_table(unused_pins_lowpower,
>>> +                                  ARRAY_SIZE(unused_pins_lowpower));
>>> +
>>> +       /* Initialize any non-default pad configs (APB_MISC_GP regs) */
>>> +       pinmux_config_drvgrp_table(colibri_t30_padctrl,
>>> +                                  ARRAY_SIZE(colibri_t30_padctrl));
>>> +}
>>> +
>>> +/*
>>> + * Enable AX88772B USB to LAN controller
>>> + */
>>> +void pin_mux_usb(void)
>>> +{
>>> +       /* Enable LAN_VBUS */
>>> +       gpio_request(GPIO_PDD2, NULL);
>>> +       gpio_direction_output(GPIO_PDD2, 1);
>>> +
>>> +       /* Reset ASIX using LAN_RESET */
>>> +       gpio_request(GPIO_PDD0, NULL);
>>> +       gpio_direction_output(GPIO_PDD0, 0);
>>> +
>>> +       udelay(5);
>>> +
>>> +       gpio_set_value(GPIO_PDD0, 1);
>>
>>
>> You are using device tree for sdhci - shouldn't we use it for USB also?
>>
>
> The Colibri T30 has a ASIX USB to Ethernet chip on its board. We
> reset/power the ASIX here. It is a very board specific reset/powering,
> hence I put it in here.
>
> In my initial patches I had it in the nvidia,phy-reset-gpio and
> nvidia,vbus-gpio properties. Technically, it would work to have this
> GPIOs in the device tree as USB properties, but I think this would be
> logically wrong...

For VBUS I think it would be correct to put it in the USB. For the
reset, I'm not sure - it looks like a separate pin so putting it in
the device tree for USB would be wrong I think.

What does the kernel do for these?
...

Regards,
Simon

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH] ARM: tegra: add Colibri T30 board support
  2014-07-31 21:55     ` Simon Glass
@ 2014-07-31 22:49       ` Stephen Warren
  2014-08-02 13:24       ` Stefan Agner
  1 sibling, 0 replies; 13+ messages in thread
From: Stephen Warren @ 2014-07-31 22:49 UTC (permalink / raw)
  To: u-boot

On 07/31/2014 03:55 PM, Simon Glass wrote:
> On 31 July 2014 19:00, Stefan Agner <stefan@agner.ch> wrote:
>> Am 2014-07-31 19:41, schrieb Simon Glass:
>>> On 31 July 2014 18:36, Stefan Agner <stefan@agner.ch> wrote:
>>>>
>>>> This adds board support for the Toradex Colibri T30 module.

>>>> +/*
>>>> + * Enable AX88772B USB to LAN controller
>>>> + */
>>>> +void pin_mux_usb(void)
>>>> +{
>>>> +       /* Enable LAN_VBUS */
>>>> +       gpio_request(GPIO_PDD2, NULL);
>>>> +       gpio_direction_output(GPIO_PDD2, 1);
>>>> +
>>>> +       /* Reset ASIX using LAN_RESET */
>>>> +       gpio_request(GPIO_PDD0, NULL);
>>>> +       gpio_direction_output(GPIO_PDD0, 0);
>>>> +
>>>> +       udelay(5);
>>>> +
>>>> +       gpio_set_value(GPIO_PDD0, 1);
>>>
>>>
>>> You are using device tree for sdhci - shouldn't we use it for USB also?
>>>
>>
>> The Colibri T30 has a ASIX USB to Ethernet chip on its board. We
>> reset/power the ASIX here. It is a very board specific reset/powering,
>> hence I put it in here.
>>
>> In my initial patches I had it in the nvidia,phy-reset-gpio and
>> nvidia,vbus-gpio properties. Technically, it would work to have this
>> GPIOs in the device tree as USB properties, but I think this would be
>> logically wrong...
>
> For VBUS I think it would be correct to put it in the USB. For the
> reset, I'm not sure - it looks like a separate pin so putting it in
> the device tree for USB would be wrong I think.
>
> What does the kernel do for these?

The kernel doesn't yet have a good answer to things like this, i.e. data 
that's not directly driven by the requirements of a controller or 
protocol, but rather the custom/out-of-band aspects of the device that's 
connected to the controller.

So, a GPIO for VBUS is something very closely tied to the USB 
specification, and basically any USB controller needs to represent and 
handle it in the same way.

However, a GPIO to reset/enable a USB device is something completely 
outside the scope of the USB specification, and is very device specific, 
and there's currently no good answer re: how to handle it.

There have been various attempts to solve it such as a generic "power 
sequences" DT binding, various proposals for a "slot" or "connector" or 
"target device" binding, or even explicitly defining the attached device 
in DT (even though it can be probed) and having the driver for that 
handle all the HW-specific details. However these threads have 
unfortunately all languished.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH] ARM: tegra: add Colibri T30 board support
  2014-07-31 21:55     ` Simon Glass
  2014-07-31 22:49       ` Stephen Warren
@ 2014-08-02 13:24       ` Stefan Agner
  1 sibling, 0 replies; 13+ messages in thread
From: Stefan Agner @ 2014-08-02 13:24 UTC (permalink / raw)
  To: u-boot

Am 2014-07-31 23:55, schrieb Simon Glass:
> Hi Stefan,
> 
> On 31 July 2014 19:00, Stefan Agner <stefan@agner.ch> wrote:
>> Hi Simon,
>>
>> Am 2014-07-31 19:41, schrieb Simon Glass:
>>> Hi Stefan,
>>>
>>> On 31 July 2014 18:36, Stefan Agner <stefan@agner.ch> wrote:
>>>>
>>>> This adds board support for the Toradex Colibri T30 module.
>>>>
>>>
>>> A few quick questions below...
>>>
>>>
>>>>
>>>> Working functions:
>>>> - SD card boot
>>>> - eMMC environment and boot
>>>> - USB host/USB client (on the dual role port)
>>>> - Network (via ASIX USB)
>>>>
>>>> Signed-off-by: Stefan Agner <stefan@agner.ch>
>>>> ---
>>>>  arch/arm/Kconfig                                   |   4 +
>>>>  arch/arm/dts/Makefile                              |   1 +
>>>>  arch/arm/dts/tegra30-colibri.dts                   |  84 +++++
>>>>  arch/arm/include/asm/mach-types.h                  |  13 +
>>>>  board/toradex/colibri_t30/Makefile                 |   6 +
>>>>  board/toradex/colibri_t30/colibri_t30.c            |  52 +++
>>>>  .../colibri_t30/pinmux-config-colibri_t30.h        | 360 +++++++++++++++++++++
>>>>  include/configs/colibri_t30.h                      |  73 +++++
>>>>  8 files changed, 593 insertions(+)
>>>>  create mode 100644 arch/arm/dts/tegra30-colibri.dts
>>>>  create mode 100644 board/toradex/colibri_t30/Makefile
>>>>  create mode 100644 board/toradex/colibri_t30/colibri_t30.c
>>>>  create mode 100644 board/toradex/colibri_t30/pinmux-config-colibri_t30.h
>>>>  create mode 100644 include/configs/colibri_t30.h
>>>>
> ...
>>>> diff --git a/arch/arm/include/asm/mach-types.h b/arch/arm/include/asm/mach-types.h
>>>> index 440b041..560924e 100644
>>>> --- a/arch/arm/include/asm/mach-types.h
>>>> +++ b/arch/arm/include/asm/mach-types.h
>>>> @@ -1106,6 +1106,7 @@ extern unsigned int __machine_arch_type;
>>>>  #define MACH_TYPE_OMAP5_SEVM           3777
>>>>  #define MACH_TYPE_ARMADILLO_800EVA     3863
>>>>  #define MACH_TYPE_KZM9G                4140
>>>> +#define MACH_TYPE_COLIBRI_T30          4493
>>>>
>>>>  #ifdef CONFIG_ARCH_EBSA110
>>>>  # ifdef machine_arch_type
>>>> @@ -14235,6 +14236,18 @@ extern unsigned int __machine_arch_type;
>>>>  # define machine_is_kzm9g()    (0)
>>>>  #endif
>>>>
>>>> +#ifdef CONFIG_MACH_COLIBRI_T30
>>>> +# ifdef machine_arch_type
>>>> +#  undef machine_arch_type
>>>> +#  define machine_arch_type    __machine_arch_type
>>>> +# else
>>>> +#  define machine_arch_type    MACH_TYPE_COLIBRI_T30
>>>> +# endif
>>>> +# define machine_is_colibri_t30()      (machine_arch_type == MACH_TYPE_COLIBRI_T30)
>>>> +#else
>>>> +# define machine_is_colibri_t30()      (0)
>>>> +#endif
>>>
>>>
>>> Do we actually need this machine type stuff anymore?
>>>
>>
>> That way we can also boot the 3.1 L4T Kernel, since this is the
>> (probably last) one where we get supported binary drivers for the
>> graphics part.
> 
> OK I see.
> 
>>
>>>>
>>>> +
>>>>  /*
>>>>   * These have not yet been registered
>>>>   */
>>>> diff --git a/board/toradex/colibri_t30/Makefile b/board/toradex/colibri_t30/Makefile
>>>> new file mode 100644
>>>> index 0000000..3d58a4b
>>>> --- /dev/null
>>>> +++ b/board/toradex/colibri_t30/Makefile
>>>> @@ -0,0 +1,6 @@
>>>> +# Copyright (c) 2013-2014 Stefan Agner
>>>> +# SPDX-License-Identifier:      GPL-2.0+
>>>> +
>>>> +include $(srctree)/board/nvidia/common/common.mk
>>>> +
>>>> +obj-y  += colibri_t30.o
>>>> diff --git a/board/toradex/colibri_t30/colibri_t30.c b/board/toradex/colibri_t30/colibri_t30.c
>>>> new file mode 100644
>>>> index 0000000..6c7c62d
>>>> --- /dev/null
>>>> +++ b/board/toradex/colibri_t30/colibri_t30.c
>>>> @@ -0,0 +1,52 @@
>>>> +/*
>>>> + *  (C) Copyright 2014
>>>> + *  Stefan Agner <stefan@agner.ch>
>>>> + *
>>>> + * SPDX-License-Identifier:    GPL-2.0+
>>>> + */
>>>> +
>>>> +#include <common.h>
>>>> +#include <asm/arch/pinmux.h>
>>>> +#include <asm/arch/gp_padctrl.h>
>>>> +#include "pinmux-config-colibri_t30.h"
>>>> +#include <i2c.h>
>>>> +#include <asm/gpio.h>
>>>> +
>>>> +#define PMU_I2C_ADDRESS                0x2D
>>>> +#define MAX_I2C_RETRY          3
>>>
>>>
>>> Are these used?
>>>
>>
>> The address is correct, but not used right now. Should I remove?
> 
> I think so.
> 
>>
>>>>
>>>> +
>>>> +/*
>>>> + * Routine: pinmux_init
>>>> + * Description: Do individual peripheral pinmux configs
>>>> + */
>>>> +void pinmux_init(void)
>>>> +{
>>>> +       pinmux_config_pingrp_table(tegra3_pinmux_common,
>>>> +                                  ARRAY_SIZE(tegra3_pinmux_common));
>>>> +
>>>> +       pinmux_config_pingrp_table(unused_pins_lowpower,
>>>> +                                  ARRAY_SIZE(unused_pins_lowpower));
>>>> +
>>>> +       /* Initialize any non-default pad configs (APB_MISC_GP regs) */
>>>> +       pinmux_config_drvgrp_table(colibri_t30_padctrl,
>>>> +                                  ARRAY_SIZE(colibri_t30_padctrl));
>>>> +}
>>>> +
>>>> +/*
>>>> + * Enable AX88772B USB to LAN controller
>>>> + */
>>>> +void pin_mux_usb(void)
>>>> +{
>>>> +       /* Enable LAN_VBUS */
>>>> +       gpio_request(GPIO_PDD2, NULL);
>>>> +       gpio_direction_output(GPIO_PDD2, 1);
>>>> +
>>>> +       /* Reset ASIX using LAN_RESET */
>>>> +       gpio_request(GPIO_PDD0, NULL);
>>>> +       gpio_direction_output(GPIO_PDD0, 0);
>>>> +
>>>> +       udelay(5);
>>>> +
>>>> +       gpio_set_value(GPIO_PDD0, 1);
>>>
>>>
>>> You are using device tree for sdhci - shouldn't we use it for USB also?
>>>
>>
>> The Colibri T30 has a ASIX USB to Ethernet chip on its board. We
>> reset/power the ASIX here. It is a very board specific reset/powering,
>> hence I put it in here.
>>
>> In my initial patches I had it in the nvidia,phy-reset-gpio and
>> nvidia,vbus-gpio properties. Technically, it would work to have this
>> GPIOs in the device tree as USB properties, but I think this would be
>> logically wrong...
> 
> For VBUS I think it would be correct to put it in the USB. For the
> reset, I'm not sure - it looks like a separate pin so putting it in
> the device tree for USB would be wrong I think.
> 
> What does the kernel do for these?
> ...

Right now, the Kernel does not touch the reset signal on that device.
I'm not sure what happens if we go in suspend mode, need to check that
on the kernel side once.

Ok, when I think about it again, it totally make sense to use the VBUS
property since this GPIO is really connected to the VBUS pin of that USB
device...

--
Stefan

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH] ARM: tegra: add Colibri T30 board support
  2014-07-31 18:21 ` Stephen Warren
@ 2014-08-02 14:09   ` Stefan Agner
  2014-08-04 17:02     ` Stephen Warren
  0 siblings, 1 reply; 13+ messages in thread
From: Stefan Agner @ 2014-08-02 14:09 UTC (permalink / raw)
  To: u-boot

Am 2014-07-31 20:21, schrieb Stephen Warren:
> On 07/31/2014 11:36 AM, Stefan Agner wrote:
>> This adds board support for the Toradex Colibri T30 module.
>>
>> Working functions:
>> - SD card boot
>> - eMMC environment and boot
>> - USB host/USB client (on the dual role port)
>> - Network (via ASIX USB)
> 
>>   arch/arm/Kconfig                                   |   4 +
>>   arch/arm/dts/Makefile                              |   1 +
>>   arch/arm/dts/tegra30-colibri.dts                   |  84 +++++
>>   arch/arm/include/asm/mach-types.h                  |  13 +
>>   board/toradex/colibri_t30/Makefile                 |   6 +
>>   board/toradex/colibri_t30/colibri_t30.c            |  52 +++
>>   .../colibri_t30/pinmux-config-colibri_t30.h        | 360 +++++++++++++++++++++
>>   include/configs/colibri_t30.h                      |  73 +++++
> 
> I think in latest u-boot/master, you'll also need to add
> configs/colibri_t30_defconfig.
> 

I actually created them but forgot the git add... Next version will
contain those files too:

board/toradex/colibri_t30/Kconfig
board/toradex/colibri_t30/MAINTAINERS
configs/colibri_t30_defconfig


>> diff --git a/arch/arm/dts/tegra30-colibri.dts b/arch/arm/dts/tegra30-colibri.dts
> 
>> +	/* EHCI instance 0: USB1_DP/N -> USBC_P/N */
>> +	usb at 7d000000 {
>> +		status = "okay";
>> +		dr_mode = "otg";
>> +	};
> 
> For OTG support, VBUS needs to be able to be turned on/off. Should
> this port be host-mode, or a VBUS GPIO defined?
> 

This port is actually ment to be client by default, I will change
dr_mode to "peripheral" in the next patch.

We do not have real OTG support on that port since the ID-Pin is not
connected (the Colibri standard has all pins 3.3V level only, hence we
cannot connect the ID-Pin). This port is more a dual-role port. On the
Evaluation Board, we have a pin connected to allow automatic switching
between the two roles, while the VBUS stuff is handled by hardware
(using the ID-Pin). However, this automatic switching is currently not
implemented. Hence I would like to have that port as peripheral by
default while having the other as host.

>> diff --git a/board/toradex/colibri_t30/colibri_t30.c b/board/toradex/colibri_t30/colibri_t30.c
> 
>> +void pin_mux_usb(void)
>> +{
>> +	/* Enable LAN_VBUS */
>> +	gpio_request(GPIO_PDD2, NULL);
>> +	gpio_direction_output(GPIO_PDD2, 1);
>> +
>> +	/* Reset ASIX using LAN_RESET */
>> +	gpio_request(GPIO_PDD0, NULL);
>> +	gpio_direction_output(GPIO_PDD0, 0);
>> +
>> +	udelay(5);
>> +
>> +	gpio_set_value(GPIO_PDD0, 1);
>> +}
> 
> It might be nice to remove the blank lines around the udelay() call; I
> initially didn't notice that GOPIO_PDD0 was manipulated by the code
> both before and after the udelay() and hence there was already a
> comment saying what GPIO_PDD0 controlled. Nestling the lines together
> would make this more obvious.
> 

Agreed.

>> diff --git a/include/configs/colibri_t30.h b/include/configs/colibri_t30.h
> 
>> +#define CONFIG_I2C_MULTI_BUS
>> +#define CONFIG_SYS_MAX_I2C_BUS		TEGRA_I2C_NUM_CONTROLLERS
> 
> Are those needed? They aren't defined in e.g. the Beaver config header.
> 

Since we do not need to configure the PMIC, its not required no. I will
remove them.

>> +#define BOARD_EXTRA_ENV_SETTINGS \
>> +	"board_name=colibri-eval-v3\0" \
>> +	"fdtfile=tegra30-colibri-eval-v3.dtb\0"
> 
> It'd be nice to name the board the same in U-Boot as the kernel DT
> filename. Then you wouldn't need to manually override the default
> values here.

This is a somewhat complicated topic in our case. Our products are
named:

"Colibri T20"
"Colibri T30"
"Apalis T30"

Since quite a long time, we use those names, except replacing the space
by an underline character and preferable use small caps. Hence e.g. the
U-Boot configurations in the downstream tree:

colibri_t20_config
colibri_t30_config
apalis_t30_config

However, in the kernel world, since device tree was introduced there is
this reverse notation, SoC-board.dts... e.g. tegra30-colibri_t30.dts. We
descided to drop that t30, since its somewhat duplicated. Not sure this
was the right description, but its in the kernel that way right now.

Additionally, this whole carrier board (Evaluation Board v3)/module
(Colibri T30) relation is also taken into account at kernel side, hence
the full name today
tegra30-colibri-eval-v3.dts

Ok, because we don't have the unique board names as the other Tegra
devices have, we cannot just call the board in U-Boot as we did for the
kernel: "colibri" or "colibri-eval-v3" would be used twice, for the T20
and T30. To solve that, we could change tegra30-colibri-eval-v3.dts to
tegra30-colibri_t30-eval-v3.dts... 

Also, since most customers never change the boot loader for their board
design, I would like to avoid to have the carrier board in the boot
loaders board name. Frankly, quite a lot even don't change the kernel,
since they use the default pin assignment. Also we use the same boot
loader configuration for our three own Carrier Boards. (Btw. currently,
this is not the case for the Colibri T20. Lucas, in CC now, added back
then a similar Carrier Board/Module relation we have in the kernel. I
would actually prefer to squash this together the way this patch does it
for the Colibri T30.)

Hence we are not synchronized between the kernel dtb and the U-Boot
board name anyway... 

So the name scheme I see would be U-Boot:
colibri_t20
colibri_t30
apalis_t30

Kernel:
tegra20-colibri.dtsi (in case we can detect the RAM size)
tegra20-colibri-iris.dts
tegra20-colibri-eval-v3.dts
tegra30-colibri.dtsi
tegra30-colibri-iris.dts
tegra30-colibri-eval-v3.dts
tegra30-apalis.dtsi
tegra30-apalis-ixora.dts
tegra30-apalis-eval-v1.dts

What do you think? I could also agree to add the T30 again for the
kernel, hence tegra30-colibri_t30.dtsi and
tegra30-colibri_t30-eval-v3.dts. But I don't like the idea to have the
carrier board in the U-Boot name. In the end, everybody would use the
one colibri_t30_eval_v3 config...

>> +#include "tegra-common-ums.h"
> 
> Did you test this? I mostly developed the USB device mode support on
> Tegra124. While at some point I did test it on Beaver/Tegra30, it was
> early on and not very extensive. I'd love to hear that it works well
> for you too:-)
> 
> (BTW, I sent a patch to rename that file to tegra-common-usb-gadget.h,
> since I added DFU support too, so depending on what order TomW applies
> our patches, one of us will need to rebase)


Yes I tested this, and it works great! It's really a very nice way to
deploy the root file system. Create the partition table easily from your
desktop PC, format the partition, and just untar whatever distribution
you want. Slick!

Does DFU support NAND/and or eMMC? AFAIK it was designed more for NAND
devices wasn't it? If NAND is supported, we would even have a nice
solution for the Tegra 2 now.

--
Stefan

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH] ARM: tegra: add Colibri T30 board support
  2014-08-02 14:09   ` Stefan Agner
@ 2014-08-04 17:02     ` Stephen Warren
  2014-08-04 17:16       ` Tom Rini
  2014-08-04 18:38       ` Stefan Agner
  0 siblings, 2 replies; 13+ messages in thread
From: Stephen Warren @ 2014-08-04 17:02 UTC (permalink / raw)
  To: u-boot

On 08/02/2014 08:09 AM, Stefan Agner wrote:
> Am 2014-07-31 20:21, schrieb Stephen Warren:
>> On 07/31/2014 11:36 AM, Stefan Agner wrote:
>>> This adds board support for the Toradex Colibri T30 module.
>>>
>>> Working functions:
>>> - SD card boot
>>> - eMMC environment and boot
>>> - USB host/USB client (on the dual role port)
>>> - Network (via ASIX USB)

>>> +#define BOARD_EXTRA_ENV_SETTINGS \
>>> +	"board_name=colibri-eval-v3\0" \
>>> +	"fdtfile=tegra30-colibri-eval-v3.dtb\0"
>>
>> It'd be nice to name the board the same in U-Boot as the kernel DT
>> filename. Then you wouldn't need to manually override the default
>> values here.
>
> This is a somewhat complicated topic in our case. Our products are
> named:
>
> "Colibri T20"
> "Colibri T30"
> "Apalis T30"
>
> Since quite a long time, we use those names, except replacing the space
> by an underline character and preferable use small caps. Hence e.g. the
> U-Boot configurations in the downstream tree:
>
> colibri_t20_config
> colibri_t30_config
> apalis_t30_config
>
> However, in the kernel world, since device tree was introduced there is
> this reverse notation, SoC-board.dts... e.g. tegra30-colibri_t30.dts. We
> descided to drop that t30, since its somewhat duplicated. Not sure this
> was the right description, but its in the kernel that way right now.
>
> Additionally, this whole carrier board (Evaluation Board v3)/module
> (Colibri T30) relation is also taken into account at kernel side, hence
> the full name today
> tegra30-colibri-eval-v3.dts
...
> Also we use the same boot
> loader configuration for our three own Carrier Boards.

OK, it mostly makes sense to have U-Boot configuration names that only 
mention the CPU module and not the carrier board in that case.

However, if the U-Boot default environment defines the full kernel DTB 
name, then that isn't possible. A U-Boot board will be tied to a 
particular carrier-board configuration that way.

Perhaps remove the DT filename from the default environment, and require 
the user or flashing process to set the correct value?

Alternatively, perhaps add the core U-Boot support under one (primary 
configuration and board directory) name, and add additional entry to 
boards.cfg/Kconfig to override that one fdtfile value in the 
environment? I see quite a few other boards do so something similar, 
albeit likely for larger variations than just one environment variable:-)

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH] ARM: tegra: add Colibri T30 board support
  2014-08-04 17:02     ` Stephen Warren
@ 2014-08-04 17:16       ` Tom Rini
  2014-08-04 18:22         ` Stefan Agner
  2014-08-04 18:38       ` Stefan Agner
  1 sibling, 1 reply; 13+ messages in thread
From: Tom Rini @ 2014-08-04 17:16 UTC (permalink / raw)
  To: u-boot

On Mon, Aug 04, 2014 at 11:02:28AM -0600, Stephen Warren wrote:
> On 08/02/2014 08:09 AM, Stefan Agner wrote:
> >Am 2014-07-31 20:21, schrieb Stephen Warren:
> >>On 07/31/2014 11:36 AM, Stefan Agner wrote:
> >>>This adds board support for the Toradex Colibri T30 module.
> >>>
> >>>Working functions:
> >>>- SD card boot
> >>>- eMMC environment and boot
> >>>- USB host/USB client (on the dual role port)
> >>>- Network (via ASIX USB)
> 
> >>>+#define BOARD_EXTRA_ENV_SETTINGS \
> >>>+	"board_name=colibri-eval-v3\0" \
> >>>+	"fdtfile=tegra30-colibri-eval-v3.dtb\0"
> >>
> >>It'd be nice to name the board the same in U-Boot as the kernel DT
> >>filename. Then you wouldn't need to manually override the default
> >>values here.
> >
> >This is a somewhat complicated topic in our case. Our products are
> >named:
> >
> >"Colibri T20"
> >"Colibri T30"
> >"Apalis T30"
> >
> >Since quite a long time, we use those names, except replacing the space
> >by an underline character and preferable use small caps. Hence e.g. the
> >U-Boot configurations in the downstream tree:
> >
> >colibri_t20_config
> >colibri_t30_config
> >apalis_t30_config
> >
> >However, in the kernel world, since device tree was introduced there is
> >this reverse notation, SoC-board.dts... e.g. tegra30-colibri_t30.dts. We
> >descided to drop that t30, since its somewhat duplicated. Not sure this
> >was the right description, but its in the kernel that way right now.
> >
> >Additionally, this whole carrier board (Evaluation Board v3)/module
> >(Colibri T30) relation is also taken into account at kernel side, hence
> >the full name today
> >tegra30-colibri-eval-v3.dts
> ...
> >Also we use the same boot
> >loader configuration for our three own Carrier Boards.
> 
> OK, it mostly makes sense to have U-Boot configuration names that
> only mention the CPU module and not the carrier board in that case.
> 
> However, if the U-Boot default environment defines the full kernel
> DTB name, then that isn't possible. A U-Boot board will be tied to a
> particular carrier-board configuration that way.
> 
> Perhaps remove the DT filename from the default environment, and
> require the user or flashing process to set the correct value?

Is there a run-time way to discover what board (or perhaps rather, what
DT we would want to load) we're on?  That's how we solve this on various
TI platforms.

> Alternatively, perhaps add the core U-Boot support under one
> (primary configuration and board directory) name, and add additional
> entry to boards.cfg/Kconfig to override that one fdtfile value in
> the environment? I see quite a few other boards do so something
> similar, albeit likely for larger variations than just one
> environment variable:-)

But yes, we'll need to sort out a way to setup the default environment,
with some this-that-or-something-else tweaks in any case.

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140804/fd50636d/attachment.pgp>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH] ARM: tegra: add Colibri T30 board support
  2014-08-04 17:16       ` Tom Rini
@ 2014-08-04 18:22         ` Stefan Agner
  0 siblings, 0 replies; 13+ messages in thread
From: Stefan Agner @ 2014-08-04 18:22 UTC (permalink / raw)
  To: u-boot

Am 2014-08-04 19:16, schrieb Tom Rini:
> On Mon, Aug 04, 2014 at 11:02:28AM -0600, Stephen Warren wrote:
>> On 08/02/2014 08:09 AM, Stefan Agner wrote:
>> >Am 2014-07-31 20:21, schrieb Stephen Warren:
>> >>On 07/31/2014 11:36 AM, Stefan Agner wrote:
>> >>>This adds board support for the Toradex Colibri T30 module.
>> >>>
>> >>>Working functions:
>> >>>- SD card boot
>> >>>- eMMC environment and boot
>> >>>- USB host/USB client (on the dual role port)
>> >>>- Network (via ASIX USB)
>>
>> >>>+#define BOARD_EXTRA_ENV_SETTINGS \
>> >>>+	"board_name=colibri-eval-v3\0" \
>> >>>+	"fdtfile=tegra30-colibri-eval-v3.dtb\0"
>> >>
>> >>It'd be nice to name the board the same in U-Boot as the kernel DT
>> >>filename. Then you wouldn't need to manually override the default
>> >>values here.
>> >
>> >This is a somewhat complicated topic in our case. Our products are
>> >named:
>> >
>> >"Colibri T20"
>> >"Colibri T30"
>> >"Apalis T30"
>> >
>> >Since quite a long time, we use those names, except replacing the space
>> >by an underline character and preferable use small caps. Hence e.g. the
>> >U-Boot configurations in the downstream tree:
>> >
>> >colibri_t20_config
>> >colibri_t30_config
>> >apalis_t30_config
>> >
>> >However, in the kernel world, since device tree was introduced there is
>> >this reverse notation, SoC-board.dts... e.g. tegra30-colibri_t30.dts. We
>> >descided to drop that t30, since its somewhat duplicated. Not sure this
>> >was the right description, but its in the kernel that way right now.
>> >
>> >Additionally, this whole carrier board (Evaluation Board v3)/module
>> >(Colibri T30) relation is also taken into account at kernel side, hence
>> >the full name today
>> >tegra30-colibri-eval-v3.dts
>> ...
>> >Also we use the same boot
>> >loader configuration for our three own Carrier Boards.
>>
>> OK, it mostly makes sense to have U-Boot configuration names that
>> only mention the CPU module and not the carrier board in that case.
>>
>> However, if the U-Boot default environment defines the full kernel
>> DTB name, then that isn't possible. A U-Boot board will be tied to a
>> particular carrier-board configuration that way.
>>
>> Perhaps remove the DT filename from the default environment, and
>> require the user or flashing process to set the correct value?
> 
> Is there a run-time way to discover what board (or perhaps rather, what
> DT we would want to load) we're on?  That's how we solve this on various
> TI platforms.
> 

No there is no standardized way to detect the carrier board.

>> Alternatively, perhaps add the core U-Boot support under one
>> (primary configuration and board directory) name, and add additional
>> entry to boards.cfg/Kconfig to override that one fdtfile value in
>> the environment? I see quite a few other boards do so something
>> similar, albeit likely for larger variations than just one
>> environment variable:-)
> 
> But yes, we'll need to sort out a way to setup the default environment,
> with some this-that-or-something-else tweaks in any case.

--
Stefan

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH] ARM: tegra: add Colibri T30 board support
  2014-08-04 17:02     ` Stephen Warren
  2014-08-04 17:16       ` Tom Rini
@ 2014-08-04 18:38       ` Stefan Agner
  2014-08-04 19:04         ` Stephen Warren
  1 sibling, 1 reply; 13+ messages in thread
From: Stefan Agner @ 2014-08-04 18:38 UTC (permalink / raw)
  To: u-boot

Am 2014-08-04 19:02, schrieb Stephen Warren:
> On 08/02/2014 08:09 AM, Stefan Agner wrote:
>> Am 2014-07-31 20:21, schrieb Stephen Warren:
>>> On 07/31/2014 11:36 AM, Stefan Agner wrote:
>>>> This adds board support for the Toradex Colibri T30 module.
>>>>
>>>> Working functions:
>>>> - SD card boot
>>>> - eMMC environment and boot
>>>> - USB host/USB client (on the dual role port)
>>>> - Network (via ASIX USB)
> 
>>>> +#define BOARD_EXTRA_ENV_SETTINGS \
>>>> +	"board_name=colibri-eval-v3\0" \
>>>> +	"fdtfile=tegra30-colibri-eval-v3.dtb\0"
>>>
>>> It'd be nice to name the board the same in U-Boot as the kernel DT
>>> filename. Then you wouldn't need to manually override the default
>>> values here.
>>
>> This is a somewhat complicated topic in our case. Our products are
>> named:
>>
>> "Colibri T20"
>> "Colibri T30"
>> "Apalis T30"
>>
>> Since quite a long time, we use those names, except replacing the space
>> by an underline character and preferable use small caps. Hence e.g. the
>> U-Boot configurations in the downstream tree:
>>
>> colibri_t20_config
>> colibri_t30_config
>> apalis_t30_config
>>
>> However, in the kernel world, since device tree was introduced there is
>> this reverse notation, SoC-board.dts... e.g. tegra30-colibri_t30.dts. We
>> descided to drop that t30, since its somewhat duplicated. Not sure this
>> was the right description, but its in the kernel that way right now.
>>
>> Additionally, this whole carrier board (Evaluation Board v3)/module
>> (Colibri T30) relation is also taken into account at kernel side, hence
>> the full name today
>> tegra30-colibri-eval-v3.dts
> ...
>> Also we use the same boot
>> loader configuration for our three own Carrier Boards.
> 
> OK, it mostly makes sense to have U-Boot configuration names that only
> mention the CPU module and not the carrier board in that case.
> 
> However, if the U-Boot default environment defines the full kernel DTB
> name, then that isn't possible. A U-Boot board will be tied to a
> particular carrier-board configuration that way.
> 
> Perhaps remove the DT filename from the default environment, and
> require the user or flashing process to set the correct value?
> 

Since a lot of people use the bootloader binaries unmodified, such a
solution would be preferable. I guess I could use fdtput or even extend
the existing tegra-uboot-flasher for this purpose.

> Alternatively, perhaps add the core U-Boot support under one (primary
> configuration and board directory) name, and add additional entry to
> boards.cfg/Kconfig to override that one fdtfile value in the
> environment? I see quite a few other boards do so something similar,
> albeit likely for larger variations than just one environment
> variable:-)

Yes, such a lightweight carrier board/module support would be
maintainable too I guess.

I will try to implement the first approach first. One way would be
setting the board_name by overriding boardcmd. Or maybe a bit more
problem specific, getting the fdtfile/board_name from dts
/config/fdtfile node...

--
Stefan

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH] ARM: tegra: add Colibri T30 board support
  2014-08-04 18:38       ` Stefan Agner
@ 2014-08-04 19:04         ` Stephen Warren
  0 siblings, 0 replies; 13+ messages in thread
From: Stephen Warren @ 2014-08-04 19:04 UTC (permalink / raw)
  To: u-boot

On 08/04/2014 12:38 PM, Stefan Agner wrote:
> Am 2014-08-04 19:02, schrieb Stephen Warren:
>> On 08/02/2014 08:09 AM, Stefan Agner wrote:
>>> Am 2014-07-31 20:21, schrieb Stephen Warren:
>>>> On 07/31/2014 11:36 AM, Stefan Agner wrote:
>>>>> This adds board support for the Toradex Colibri T30 module.
>>>>>
>>>>> Working functions:
>>>>> - SD card boot
>>>>> - eMMC environment and boot
>>>>> - USB host/USB client (on the dual role port)
>>>>> - Network (via ASIX USB)
>>
>>>>> +#define BOARD_EXTRA_ENV_SETTINGS \
>>>>> +	"board_name=colibri-eval-v3\0" \
>>>>> +	"fdtfile=tegra30-colibri-eval-v3.dtb\0"
>>>>
>>>> It'd be nice to name the board the same in U-Boot as the kernel DT
>>>> filename. Then you wouldn't need to manually override the default
>>>> values here.
>>>
>>> This is a somewhat complicated topic in our case. Our products are
>>> named:
>>>
>>> "Colibri T20"
>>> "Colibri T30"
>>> "Apalis T30"
>>>
>>> Since quite a long time, we use those names, except replacing the space
>>> by an underline character and preferable use small caps. Hence e.g. the
>>> U-Boot configurations in the downstream tree:
>>>
>>> colibri_t20_config
>>> colibri_t30_config
>>> apalis_t30_config
>>>
>>> However, in the kernel world, since device tree was introduced there is
>>> this reverse notation, SoC-board.dts... e.g. tegra30-colibri_t30.dts. We
>>> descided to drop that t30, since its somewhat duplicated. Not sure this
>>> was the right description, but its in the kernel that way right now.
>>>
>>> Additionally, this whole carrier board (Evaluation Board v3)/module
>>> (Colibri T30) relation is also taken into account at kernel side, hence
>>> the full name today
>>> tegra30-colibri-eval-v3.dts
>> ...
>>> Also we use the same boot
>>> loader configuration for our three own Carrier Boards.
>>
>> OK, it mostly makes sense to have U-Boot configuration names that only
>> mention the CPU module and not the carrier board in that case.
>>
>> However, if the U-Boot default environment defines the full kernel DTB
>> name, then that isn't possible. A U-Boot board will be tied to a
>> particular carrier-board configuration that way.
>>
>> Perhaps remove the DT filename from the default environment, and
>> require the user or flashing process to set the correct value?
>>
>
> Since a lot of people use the bootloader binaries unmodified, such a
> solution would be preferable. I guess I could use fdtput or even extend
> the existing tegra-uboot-flasher for this purpose.

There's already the --env command-line option which allows you to do this.

If necessary, it probably wouldn't be hard to add the ability for a 
particular tegra-uboot-flasher config file to automatically add the 
relevant --env option when run in flashing mode.

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2014-08-04 19:04 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-07-31 17:36 [U-Boot] [PATCH] ARM: tegra: add Colibri T30 board support Stefan Agner
2014-07-31 17:41 ` Simon Glass
2014-07-31 18:00   ` Stefan Agner
2014-07-31 21:55     ` Simon Glass
2014-07-31 22:49       ` Stephen Warren
2014-08-02 13:24       ` Stefan Agner
2014-07-31 18:21 ` Stephen Warren
2014-08-02 14:09   ` Stefan Agner
2014-08-04 17:02     ` Stephen Warren
2014-08-04 17:16       ` Tom Rini
2014-08-04 18:22         ` Stefan Agner
2014-08-04 18:38       ` Stefan Agner
2014-08-04 19:04         ` Stephen Warren

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.