freebsd-skq/sys/boot/fdt/dts/imx51x.dtsi
Ian Lepore f26c810514 Rework the imx ehci driver so that it's four separate ehci units rather
than one unit with four busses attached to it.  This allows us to use
existing fdt data which describes separate devices with separate resources.
It also allows any combination of the units to be en/disabled in the
board dts files.

Adjust our dts code to match what's used by linux and u-boot now that
we're structured to do so.

Document lots of interesting stuff learned whiling doing this with a big
comment block in the driver, so I don't have to re-learn it for the next
round of changes.
2013-10-30 18:26:18 +00:00

623 lines
16 KiB
Plaintext

/*
* Copyright (c) 2012 The FreeBSD Foundation
* All rights reserved.
*
* This software was developed by Semihalf under sponsorship from
* the FreeBSD Foundation.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* Freescale i.MX515 Device Tree Source.
*
* $FreeBSD$
*/
/ {
#address-cells = <1>;
#size-cells = <1>;
aliases {
soc = &SOC;
};
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu@0 {
device_type = "cpu";
compatible = "ARM,MCIMX515";
reg = <0x0>;
d-cache-line-size = <32>;
i-cache-line-size = <32>;
d-cache-size = <0x8000>;
i-cache-size = <0x8000>;
/* TODO: describe L2 cache also */
timebase-frequency = <0>;
bus-frequency = <0>;
clock-frequency = <0>;
};
};
localbus@e0000000 {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
/* This reflects CPU decode windows setup. */
ranges;
tzic: tz-interrupt-controller@e0000000 {
compatible = "fsl,imx51-tzic", "fsl,tzic";
interrupt-controller;
#interrupt-cells = <1>;
reg = <0xe0000000 0x00004000>;
};
/*
* 60000000 60000FFF 4K Debug ROM
* 60001000 60001FFF 4K ETB
* 60002000 60002FFF 4K ETM
* 60003000 60003FFF 4K TPIU
* 60004000 60004FFF 4K CTI0
* 60005000 60005FFF 4K CTI1
* 60006000 60006FFF 4K CTI2
* 60007000 60007FFF 4K CTI3
* 60008000 60008FFF 4K Cortex Debug Unit
*
* E0000000 E0003FFF 0x4000 TZIC
*/
};
SOC: soc@70000000 {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
interrupt-parent = <&tzic>;
ranges = <0x70000000 0x70000000 0x14000000>;
aips@70000000 { /* AIPS1 */
compatible = "fsl,aips-bus", "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
interrupt-parent = <&tzic>;
ranges;
/* Required by many devices, so better to stay first */
/* 73FD4000 0x4000 CCM */
clock@73fd4000 {
compatible = "fsl,imx51-ccm";
/* 83F80000 0x4000 DPLLIP1 */
/* 83F84000 0x4000 DPLLIP2 */
/* 83F88000 0x4000 DPLLIP3 */
reg = <0x73fd4000 0x4000
0x83F80000 0x4000
0x83F84000 0x4000
0x83F88000 0x4000>;
interrupt-parent = <&tzic>;
interrupts = <71 72>;
status = "disabled";
};
/*
* GPIO modules moved up - to have it attached for
* drivers which rely on GPIO
*/
/* 73F84000 0x4000 GPIO1 */
gpio1: gpio@73f84000 {
compatible = "fsl,imx51-gpio", "fsl,imx31-gpio";
reg = <0x73f84000 0x4000>;
interrupt-parent = <&tzic>;
interrupts = <50 51 42 43 44 45 46 47 48 49>;
/* TODO: use <> also */
gpio-controller;
#gpio-cells = <2>;
interrupt-controller;
#interrupt-cells = <1>;
};
/* 73F88000 0x4000 GPIO2 */
gpio2: gpio@73f88000 {
compatible = "fsl,imx51-gpio", "fsl,imx31-gpio";
reg = <0x73f88000 0x4000>;
interrupt-parent = <&tzic>;
interrupts = <52 53>;
gpio-controller;
#gpio-cells = <2>;
interrupt-controller;
#interrupt-cells = <1>;
};
/* 73F8C000 0x4000 GPIO3 */
gpio3: gpio@73f8c000 {
compatible = "fsl,imx51-gpio", "fsl,imx31-gpio";
reg = <0x73f8c000 0x4000>;
interrupt-parent = <&tzic>;
interrupts = <54 55>;
gpio-controller;
#gpio-cells = <2>;
interrupt-controller;
#interrupt-cells = <1>;
};
/* 73F90000 0x4000 GPIO4 */
gpio4: gpio@73f90000 {
compatible = "fsl,imx51-gpio", "fsl,imx31-gpio";
reg = <0x73f90000 0x4000>;
interrupt-parent = <&tzic>;
interrupts = <56 57>;
gpio-controller;
#gpio-cells = <2>;
interrupt-controller;
#interrupt-cells = <1>;
};
spba@70000000 {
compatible = "fsl,spba-bus", "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
interrupt-parent = <&tzic>;
ranges;
/* 70004000 0x4000 ESDHC 1 */
esdhc@70004000 {
compatible = "fsl,imx51-esdhc";
reg = <0x70004000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <1>;
status = "disabled";
};
/* 70008000 0x4000 ESDHC 2 */
esdhc@70008000 {
compatible = "fsl,imx51-esdhc";
reg = <0x70008000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <2>;
status = "disabled";
};
/* 7000C000 0x4000 UART 3 */
uart3: serial@7000c000 {
compatible = "fsl,imx51-uart", "fsl,imx-uart";
reg = <0x7000c000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <33>;
status = "disabled";
};
/* 70010000 0x4000 eCSPI1 */
ecspi@70010000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,imx51-ecspi";
reg = <0x70010000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <36>;
status = "disabled";
};
/* 70014000 0x4000 SSI2 irq30 */
SSI2: ssi@70014000 {
compatible = "fsl,imx51-ssi";
reg = <0x70014000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <30>;
status = "disabled";
};
/* 70020000 0x4000 ESDHC 3 */
esdhc@70020000 {
compatible = "fsl,imx51-esdhc";
reg = <0x70020000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <3>;
status = "disabled";
};
/* 70024000 0x4000 ESDHC 4 */
esdhc@70024000 {
compatible = "fsl,imx51-esdhc";
reg = <0x70024000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <4>;
status = "disabled";
};
/* 70028000 0x4000 SPDIF */
/* 91 SPDIF */
/* 70030000 0x4000 PATA (PORT UDMA) irq70 */
/* 70034000 0x4000 SLM */
/* 70038000 0x4000 HSI2C */ /* 64 HS-I2C */
/* 7003C000 0x4000 SPBA */
};
usbphy0: usbphy@0 {
compatible = "usb-nop-xceiv";
status = "okay";
};
usbotg: usb@73f80000 {
compatible = "fsl,imx51-usb", "fsl,imx27-usb";
reg = <0x73f80000 0x0200>;
interrupts = <18>;
fsl,usbmisc = <&usbmisc 0>;
fsl,usbphy = <&usbphy0>;
status = "disabled";
};
usbh1: usb@73f80200 {
compatible = "fsl,imx51-usb", "fsl,imx27-usb";
reg = <0x73f80200 0x0200>;
interrupts = <14>;
fsl,usbmisc = <&usbmisc 1>;
status = "disabled";
};
usbh2: usb@73f80400 {
compatible = "fsl,imx51-usb", "fsl,imx27-usb";
reg = <0x73f80400 0x0200>;
interrupts = <16>;
fsl,usbmisc = <&usbmisc 2>;
status = "disabled";
};
usbh3: usb@73f80600 {
compatible = "fsl,imx51-usb", "fsl,imx27-usb";
reg = <0x73f80600 0x0200>;
interrupts = <17>;
fsl,usbmisc = <&usbmisc 3>;
status = "disabled";
};
usbmisc: usbmisc@73f80800 {
#index-cells = <1>;
compatible = "fsl,imx51-usbmisc";
reg = <0x73f80800 0x200>;
};
/* 73F98000 0x4000 WDOG1 */
wdog@73f98000 {
compatible = "fsl,imx51-wdt", "fsl,imx21-wdt";
reg = <0x73f98000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <58>;
status = "disabled";
};
/* 73F9C000 0x4000 WDOG2 (TZ) */
wdog@73f9c000 {
compatible = "fsl,imx51-wdt", "fsl,imx21-wdt";
reg = <0x73f9c000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <59>;
status = "disabled";
};
/* 73F94000 0x4000 KPP */
keyboard@73f94000 {
compatible = "fsl,imx51-kpp";
reg = <0x73f94000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <60>;
status = "disabled";
};
/* 73FA0000 0x4000 GPT */
timer@73fa0000 {
compatible = "fsl,imx51-gpt";
reg = <0x73fa0000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <39>;
status = "disabled";
};
/* 73FA4000 0x4000 SRTC */
rtc@73fa4000 {
compatible = "fsl,imx51-srtc";
reg = <0x73fa4000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <24 25>;
status = "disabled";
};
/* 73FA8000 0x4000 IOMUXC */
iomux@73fa8000 {
compatible = "fsl,imx51-iomux";
reg = <0x73fa8000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <7>;
};
/* 73FAC000 0x4000 EPIT1 */
epit1: timer@73fac000 {
compatible = "fsl,imx51-epit";
reg = <0x73fac000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <40>;
status = "disabled";
};
/* 73FB0000 0x4000 EPIT2 */
epit2: timer@73fb0000 {
compatible = "fsl,imx51-epit";
reg = <0x73fb0000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <41>;
status = "disabled";
};
/* 73FB4000 0x4000 PWM1 */
pwm@73fb4000 {
compatible = "fsl,imx51-pwm";
reg = <0x73fb4000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <61>;
status = "disabled";
};
/* 73FB8000 0x4000 PWM2 */
pwm@73fb8000 {
compatible = "fsl,imx51-pwm";
reg = <0x73fb8000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <94>;
status = "disabled";
};
/* 73FBC000 0x4000 UART 1 */
uart1: serial@73fbc000 {
compatible = "fsl,imx51-uart", "fsl,imx-uart";
reg = <0x73fbc000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <31>;
status = "disabled";
};
/* 73FC0000 0x4000 UART 2 */
uart2: serial@73fc0000 {
compatible = "fsl,imx51-uart", "fsl,imx-uart";
reg = <0x73fc0000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <32>;
status = "disabled";
};
/* 73FC4000 0x4000 USBOH3 */
/* NOTYET
usb@73fc4000 {
compatible = "fsl,imx51-otg";
reg = <0x73fc4000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <>;
status = "disabled";
};
*/
/* 73FD0000 0x4000 SRC */
reset@73fd0000 {
compatible = "fsl,imx51-src";
reg = <0x73fd0000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <75>;
status = "disabled";
};
/* 73FD8000 0x4000 GPC */
power@73fd8000 {
compatible = "fsl,imx51-gpc";
reg = <0x73fd8000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <73 74>;
status = "disabled";
};
};
aips@80000000 { /* AIPS2 */
compatible = "fsl,aips-bus", "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
interrupt-parent = <&tzic>;
ranges;
/* 83F94000 0x4000 AHBMAX */
/* 83F98000 0x4000 IIM */
/*
* 69 IIM Interrupt request to the processor.
* Indicates to the processor that program or
* explicit.
*/
/* 83F9C000 0x4000 CSU */
/*
* 27 CSU Interrupt Request 1. Indicates to the
* processor that one or more alarm inputs were.
*/
/* 83FA0000 0x4000 TIGERP_PLATFORM_NE_32K_256K */
/* irq76 Neon Monitor Interrupt */
/* irq77 Performance Unit Interrupt */
/* irq78 CTI IRQ */
/* irq79 Debug Interrupt, Cross-Trigger Interface 1 */
/* irq80 Debug Interrupt, Cross-Trigger Interface 1 */
/* irq89 Debug Interrupt, Cross-Trigger Interface 2 */
/* irq98 Debug Interrupt, Cross-Trigger Interface 3 */
/* 83FA4000 0x4000 OWIRE irq88 */
/* 83FA8000 0x4000 FIRI irq93 */
/* 83FAC000 0x4000 eCSPI2 */
ecspi@83fac000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,imx51-ecspi";
reg = <0x83fac000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <37>;
status = "disabled";
};
/* 83FB0000 0x4000 SDMA */
sdma@83fb0000 {
compatible = "fsl,imx51-sdma", "fsl,imx35-sdma";
reg = <0x83fb0000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <6>;
};
/* 83FB4000 0x4000 SCC */
/* 21 SCC Security Monitor High Priority Interrupt. */
/* 22 SCC Secure (TrustZone) Interrupt. */
/* 23 SCC Regular (Non-Secure) Interrupt. */
/* 83FB8000 0x4000 ROMCP */
/* 83FBC000 0x4000 RTIC */
/*
* 26 RTIC RTIC (Trust Zone) Interrupt Request.
* Indicates that the RTIC has completed hashing the
*/
/* 83FC0000 0x4000 CSPI */
cspi@83fc0000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,imx51-cspi", "fsl,imx35-cspi";
reg = <0x83fc0000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <38>;
status = "disabled";
};
/* 83FC4000 0x4000 I2C2 */
i2c@83fc4000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,imx51-i2c", "fsl,imx1-i2c", "fsl,imx-i2c";
reg = <0x83fc4000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <63>;
status = "disabled";
};
/* 83FC8000 0x4000 I2C1 */
i2c@83fc8000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,imx51-i2c", "fsl,imx1-i2c", "fsl,imx-i2c";
reg = <0x83fc8000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <62>;
status = "disabled";
};
/* 83FCC000 0x4000 SSI1 */
/* 29 SSI1 SSI-1 Interrupt Request */
SSI1: ssi@83fcc000 {
compatible = "fsl,imx51-ssi";
reg = <0x83fcc000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <29>;
status = "disabled";
};
/* 83FD0000 0x4000 AUDMUX */
audmux@83fd4000 {
compatible = "fsl,imx51-audmux";
reg = <0x83fd4000 0x4000>;
status = "disabled";
};
/* 83FD8000 0x4000 EMI1 */
/* 8 EMI (NFC) */
/* 15 EMI */
/* 97 EMI Boot sequence completed interrupt */
/*
* 101 EMI Indicates all pages have been transferred
* to NFC during an auto program operation.
*/
/* 83FE0000 0x4000 PATA (PORT PIO) */
/* 70 PATA Parallel ATA host controller interrupt */
ide@83fe0000 {
compatible = "fsl,imx51-ata";
reg = <0x83fe0000 0x4000>;
interrupt-parent = <&tzic>;
interrupts = <70>;
status = "disabled";
};
/* 83FE4000 0x4000 SIM */
/* 67 SIM intr composed of oef, xte, sdi1, and sdi0 */
/* 68 SIM intr composed of tc, etc, tfe, and rdrf */
/* 83FE8000 0x4000 SSI3 */
/* 96 SSI3 SSI-3 Interrupt Request */
SSI3: ssi@83fe8000 {
compatible = "fsl,imx51-ssi";
reg = <0x83fe8000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <96>;
status = "disabled";
};
/* 83FEC000 0x4000 FEC */
ethernet@83fec000 {
compatible = "fsl,imx51-fec";
reg = <0x83fec000 0x4000>;
interrupt-parent = <&tzic>; interrupts = <87>;
status = "disabled";
};
/* 83FF0000 0x4000 TVE */
/* 92 TVE */
/* 83FF4000 0x4000 VPU */
/* 9 VPU */
/* 100 VPU Idle interrupt from VPU */
/* 83FF8000 0x4000 SAHARA Lite */
/* 19 SAHARA SAHARA host 0 (TrustZone) Intr Lite */
/* 20 SAHARA SAHARA host 1 (non-TrustZone) Intr Lite */
};
};
localbus@5e000000 {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
ranges;
vga: ipu3@5e000000 {
compatible = "fsl,ipu3";
reg = <
0x5e000000 0x08000 /* CM */
0x5e008000 0x08000 /* IDMAC */
0x5e018000 0x08000 /* DP */
0x5e020000 0x08000 /* IC */
0x5e028000 0x08000 /* IRT */
0x5e030000 0x08000 /* CSI0 */
0x5e038000 0x08000 /* CSI1 */
0x5e040000 0x08000 /* DI0 */
0x5e048000 0x08000 /* DI1 */
0x5e050000 0x08000 /* SMFC */
0x5e058000 0x08000 /* DC */
0x5e060000 0x08000 /* DMFC */
0x5e068000 0x08000 /* VDI */
0x5f000000 0x20000 /* CPMEM */
0x5f020000 0x20000 /* LUT */
0x5f040000 0x20000 /* SRM */
0x5f060000 0x20000 /* TPM */
0x5f080000 0x20000 /* DCTMPL */
>;
interrupt-parent = <&tzic>;
interrupts = <
10 /* IPUEX Error */
11 /* IPUEX Sync */
>;
status = "disabled";
};
};
};
/*
TODO: Not mapped interrupts
5 DAP
84 GPU2D (OpenVG) general interrupt
85 GPU2D (OpenVG) busy signal (for S/W power gating feasibility)
12 GPU3D
102 GPU3D Idle interrupt from GPU3D (for S/W power gating)
90 SJC
*/