arm: tegra: initial support for apalis t30
This patch adds board support for the Toradex Apalis T30 a computer on module which can be used on different carrier boards. For the sake of ease of use we do not distinguish between different carrier boards for now as the base module features are deemed sufficient enough for regular booting. The following functionality is working so far: - eMMC boot and environment storage - Gigabit Ethernet (once Thierry's PCIe as well as my E1000 resp. i210 fixes hit mainline) - MMC/SD cards (both 8-bit as well as 4-bit slot) - USB client/host (dual role port as client e.g. for DFU/UMS, other two ports as host) Signed-off-by: Marcel Ziswiler <marcel@ziswiler.com> Acked-by: Stephen Warren <swarren@nvidia.com> Signed-off-by: Tom Warren <twarren@nvidia.com>
This commit is contained in:
committed by
Tom Warren
parent
606f5bc812
commit
bf78b2717d
@@ -3,6 +3,9 @@ if TEGRA30
|
||||
choice
|
||||
prompt "Tegra30 board select"
|
||||
|
||||
config TARGET_APALIS_T30
|
||||
bool "Toradex Apalis T30 board"
|
||||
|
||||
config TARGET_BEAVER
|
||||
bool "NVIDIA Tegra30 Beaver evaluation board"
|
||||
|
||||
@@ -20,6 +23,7 @@ endchoice
|
||||
config SYS_SOC
|
||||
default "tegra30"
|
||||
|
||||
source "board/toradex/apalis_t30/Kconfig"
|
||||
source "board/nvidia/beaver/Kconfig"
|
||||
source "board/nvidia/cardhu/Kconfig"
|
||||
source "board/toradex/colibri_t30/Kconfig"
|
||||
|
||||
@@ -22,6 +22,7 @@ dtb-$(CONFIG_TEGRA) += tegra20-harmony.dtb \
|
||||
tegra20-ventana.dtb \
|
||||
tegra20-whistler.dtb \
|
||||
tegra20-colibri_t20_iris.dtb \
|
||||
tegra30-apalis.dtb \
|
||||
tegra30-beaver.dtb \
|
||||
tegra30-cardhu.dtb \
|
||||
tegra30-colibri.dtb \
|
||||
|
||||
300
arch/arm/dts/tegra30-apalis.dts
Normal file
300
arch/arm/dts/tegra30-apalis.dts
Normal file
@@ -0,0 +1,300 @@
|
||||
/dts-v1/;
|
||||
|
||||
#include "tegra30.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Toradex Apalis T30";
|
||||
compatible = "toradex,apalis_t30", "nvidia,tegra30";
|
||||
|
||||
aliases {
|
||||
i2c0 = "/i2c@7000d000";
|
||||
i2c1 = "/i2c@7000c000";
|
||||
i2c2 = "/i2c@7000c500";
|
||||
i2c3 = "/i2c@7000c700";
|
||||
sdhci0 = "/sdhci@78000600";
|
||||
sdhci1 = "/sdhci@78000400";
|
||||
sdhci2 = "/sdhci@78000000";
|
||||
usb0 = "/usb@7d000000";
|
||||
usb1 = "/usb@7d004000";
|
||||
usb2 = "/usb@7d008000";
|
||||
};
|
||||
|
||||
memory {
|
||||
device_type = "memory";
|
||||
reg = <0x80000000 0x40000000>;
|
||||
};
|
||||
|
||||
pcie-controller@00003000 {
|
||||
status = "okay";
|
||||
avdd-pexa-supply = <&vdd2_reg>;
|
||||
vdd-pexa-supply = <&vdd2_reg>;
|
||||
avdd-pexb-supply = <&vdd2_reg>;
|
||||
vdd-pexb-supply = <&vdd2_reg>;
|
||||
avdd-pex-pll-supply = <&vdd2_reg>;
|
||||
avdd-plle-supply = <&ldo6_reg>;
|
||||
vddio-pex-ctl-supply = <&sys_3v3_reg>;
|
||||
hvdd-pex-supply = <&sys_3v3_reg>;
|
||||
|
||||
pci@1,0 {
|
||||
nvidia,num-lanes = <4>;
|
||||
};
|
||||
|
||||
pci@2,0 {
|
||||
nvidia,num-lanes = <1>;
|
||||
};
|
||||
|
||||
pci@3,0 {
|
||||
status = "okay";
|
||||
nvidia,num-lanes = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
/*
|
||||
* GEN1_I2C: I2C1_SDA/SCL on MXM3 pin 209/211 (e.g. RTC on carrier
|
||||
* board)
|
||||
*/
|
||||
i2c@7000c000 {
|
||||
status = "okay";
|
||||
clock-frequency = <100000>;
|
||||
};
|
||||
|
||||
/* GEN2_I2C: unused */
|
||||
|
||||
/*
|
||||
* CAM_I2C: I2C3_SDA/SCL on MXM3 pin 201/203 (e.g. camera sensor on
|
||||
* carrier board)
|
||||
*/
|
||||
i2c@7000c500 {
|
||||
status = "okay";
|
||||
clock-frequency = <100000>;
|
||||
};
|
||||
|
||||
/* DDC: I2C2_SDA/SCL on MXM3 pin 205/207 (e.g. display EDID) */
|
||||
i2c@7000c700 {
|
||||
status = "okay";
|
||||
clock-frequency = <100000>;
|
||||
};
|
||||
|
||||
/*
|
||||
* PWR_I2C: power I2C to audio codec, PMIC, temperature sensor and
|
||||
* touch screen controller
|
||||
*/
|
||||
i2c@7000d000 {
|
||||
status = "okay";
|
||||
clock-frequency = <100000>;
|
||||
|
||||
pmic: tps65911@2d {
|
||||
compatible = "ti,tps65911";
|
||||
reg = <0x2d>;
|
||||
|
||||
interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
|
||||
#interrupt-cells = <2>;
|
||||
interrupt-controller;
|
||||
|
||||
ti,system-power-controller;
|
||||
|
||||
#gpio-cells = <2>;
|
||||
gpio-controller;
|
||||
|
||||
vcc1-supply = <&sys_3v3_reg>;
|
||||
vcc2-supply = <&sys_3v3_reg>;
|
||||
vcc3-supply = <&vio_reg>;
|
||||
vcc4-supply = <&sys_3v3_reg>;
|
||||
vcc5-supply = <&sys_3v3_reg>;
|
||||
vcc6-supply = <&vio_reg>;
|
||||
vcc7-supply = <&charge_pump_5v0_reg>;
|
||||
vccio-supply = <&sys_3v3_reg>;
|
||||
|
||||
regulators {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
/* SW1: +V1.35_VDDIO_DDR */
|
||||
vdd1_reg: vdd1 {
|
||||
regulator-name = "vddio_ddr_1v35";
|
||||
regulator-min-microvolt = <1350000>;
|
||||
regulator-max-microvolt = <1350000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
/* SW2: +V1.05 */
|
||||
vdd2_reg: vdd2 {
|
||||
regulator-name =
|
||||
"vdd_pexa,vdd_pexb,vdd_sata";
|
||||
regulator-min-microvolt = <1050000>;
|
||||
regulator-max-microvolt = <1050000>;
|
||||
};
|
||||
|
||||
/* SW CTRL: +V1.0_VDD_CPU */
|
||||
vddctrl_reg: vddctrl {
|
||||
regulator-name = "vdd_cpu,vdd_sys";
|
||||
regulator-min-microvolt = <1150000>;
|
||||
regulator-max-microvolt = <1150000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
/* SWIO: +V1.8 */
|
||||
vio_reg: vio {
|
||||
regulator-name = "vdd_1v8_gen";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
/* LDO1: unused */
|
||||
|
||||
/*
|
||||
* EN_+V3.3 switching via FET:
|
||||
* +V3.3_AUDIO_AVDD_S, +V3.3 and +V1.8_VDD_LAN
|
||||
* see also v3_3 fixed supply
|
||||
*/
|
||||
ldo2_reg: ldo2 {
|
||||
regulator-name = "en_3v3";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
/* +V1.2_CSI */
|
||||
ldo3_reg: ldo3 {
|
||||
regulator-name =
|
||||
"avdd_dsi_csi,pwrdet_mipi";
|
||||
regulator-min-microvolt = <1200000>;
|
||||
regulator-max-microvolt = <1200000>;
|
||||
};
|
||||
|
||||
/* +V1.2_VDD_RTC */
|
||||
ldo4_reg: ldo4 {
|
||||
regulator-name = "vdd_rtc";
|
||||
regulator-min-microvolt = <1200000>;
|
||||
regulator-max-microvolt = <1200000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
/*
|
||||
* +V2.8_AVDD_VDAC:
|
||||
* only required for analog RGB
|
||||
*/
|
||||
ldo5_reg: ldo5 {
|
||||
regulator-name = "avdd_vdac";
|
||||
regulator-min-microvolt = <2800000>;
|
||||
regulator-max-microvolt = <2800000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
/*
|
||||
* +V1.05_AVDD_PLLE: avdd_plle should be 1.05V
|
||||
* but LDO6 can't set voltage in 50mV
|
||||
* granularity
|
||||
*/
|
||||
ldo6_reg: ldo6 {
|
||||
regulator-name = "avdd_plle";
|
||||
regulator-min-microvolt = <1100000>;
|
||||
regulator-max-microvolt = <1100000>;
|
||||
};
|
||||
|
||||
/* +V1.2_AVDD_PLL */
|
||||
ldo7_reg: ldo7 {
|
||||
regulator-name = "avdd_pll";
|
||||
regulator-min-microvolt = <1200000>;
|
||||
regulator-max-microvolt = <1200000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
/* +V1.0_VDD_DDR_HS */
|
||||
ldo8_reg: ldo8 {
|
||||
regulator-name = "vdd_ddr_hs";
|
||||
regulator-min-microvolt = <1000000>;
|
||||
regulator-max-microvolt = <1000000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
/* SPI1: Apalis SPI1 */
|
||||
spi@7000d400 {
|
||||
status = "okay";
|
||||
spi-max-frequency = <25000000>;
|
||||
};
|
||||
|
||||
/* SPI4: CAN2 */
|
||||
spi@7000da00 {
|
||||
status = "okay";
|
||||
spi-max-frequency = <25000000>;
|
||||
};
|
||||
|
||||
/* SPI5: Apalis SPI2 */
|
||||
spi@7000dc00 {
|
||||
status = "okay";
|
||||
spi-max-frequency = <25000000>;
|
||||
};
|
||||
|
||||
/* SPI6: CAN1 */
|
||||
spi@7000de00 {
|
||||
status = "okay";
|
||||
spi-max-frequency = <25000000>;
|
||||
};
|
||||
|
||||
sdhci@78000000 {
|
||||
status = "okay";
|
||||
bus-width = <4>;
|
||||
cd-gpios = <&gpio 229 1>; /* PCC5, SD1_CD# */
|
||||
};
|
||||
|
||||
sdhci@78000400 {
|
||||
status = "okay";
|
||||
bus-width = <8>;
|
||||
cd-gpios = <&gpio 171 1>; /* PV3, MMC1_CD# */
|
||||
};
|
||||
|
||||
sdhci@78000600 {
|
||||
status = "okay";
|
||||
bus-width = <8>;
|
||||
non-removable;
|
||||
};
|
||||
|
||||
/* EHCI instance 0: USB1_DP/N -> USBO1_DP/N */
|
||||
usb@7d000000 {
|
||||
status = "okay";
|
||||
dr_mode = "peripheral";
|
||||
nvidia,vbus-gpio = <&gpio 157 0>; /* PT5, USBO1_EN */
|
||||
};
|
||||
|
||||
/* EHCI instance 1: USB2_DP/N -> USBH2_DP/N */
|
||||
usb@7d004000 {
|
||||
status = "okay";
|
||||
nvidia,vbus-gpio = <&gpio 233 0>; /* PDD1, USBH_EN */
|
||||
phy_type = "utmi";
|
||||
};
|
||||
|
||||
/* EHCI instance 2: USB3_DP/N -> USBH3_DP/N */
|
||||
usb@7d008000 {
|
||||
status = "okay";
|
||||
nvidia,vbus-gpio = <&gpio 233 0>; /* PDD1, USBH_EN */
|
||||
};
|
||||
|
||||
regulators {
|
||||
compatible = "simple-bus";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
sys_3v3_reg: regulator@100 {
|
||||
compatible = "regulator-fixed";
|
||||
reg = <100>;
|
||||
regulator-name = "3v3";
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
|
||||
charge_pump_5v0_reg: regulator@101 {
|
||||
compatible = "regulator-fixed";
|
||||
reg = <101>;
|
||||
regulator-name = "5v0";
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -1107,6 +1107,7 @@ extern unsigned int __machine_arch_type;
|
||||
#define MACH_TYPE_ARMADILLO_800EVA 3863
|
||||
#define MACH_TYPE_KZM9G 4140
|
||||
#define MACH_TYPE_COLIBRI_T30 4493
|
||||
#define MACH_TYPE_APALIS_T30 4513
|
||||
|
||||
#ifdef CONFIG_ARCH_EBSA110
|
||||
# ifdef machine_arch_type
|
||||
@@ -14248,6 +14249,18 @@ extern unsigned int __machine_arch_type;
|
||||
# define machine_is_colibri_t30() (0)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MACH_APALIS_T30
|
||||
# ifdef machine_arch_type
|
||||
# undef machine_arch_type
|
||||
# define machine_arch_type __machine_arch_type
|
||||
# else
|
||||
# define machine_arch_type MACH_TYPE_APALIS_T30
|
||||
# endif
|
||||
# define machine_is_apalis_t30() (machine_arch_type == MACH_TYPE_APALIS_T30)
|
||||
#else
|
||||
# define machine_is_apalis_t30() (0)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* These have not yet been registered
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user