arm/mx5: add device tree support for imx53 boards
authorShawn Guo <shawn.guo@freescale.com>
Mon, 17 Oct 2011 00:42:16 +0000 (08:42 +0800)
committerSascha Hauer <s.hauer@pengutronix.de>
Tue, 18 Oct 2011 10:42:57 +0000 (12:42 +0200)
It adds device tree support for imx53 boards.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Acked-by: Grant Likely <grant.likely@secretlab.ca>
Acked-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
15 files changed:
Documentation/devicetree/bindings/arm/fsl.txt [new file with mode: 0644]
arch/arm/boot/dts/imx53-ard.dts [new file with mode: 0644]
arch/arm/boot/dts/imx53-evk.dts [new file with mode: 0644]
arch/arm/boot/dts/imx53-qsb.dts [new file with mode: 0644]
arch/arm/boot/dts/imx53-smd.dts [new file with mode: 0644]
arch/arm/boot/dts/imx53.dtsi [new file with mode: 0644]
arch/arm/mach-mx5/Kconfig
arch/arm/mach-mx5/Makefile
arch/arm/mach-mx5/board-mx53_ard.c
arch/arm/mach-mx5/board-mx53_evk.c
arch/arm/mach-mx5/board-mx53_loco.c
arch/arm/mach-mx5/board-mx53_smd.c
arch/arm/mach-mx5/clock-mx51-mx53.c
arch/arm/mach-mx5/imx53-dt.c [new file with mode: 0644]
arch/arm/plat-mxc/include/mach/common.h

diff --git a/Documentation/devicetree/bindings/arm/fsl.txt b/Documentation/devicetree/bindings/arm/fsl.txt
new file mode 100644 (file)
index 0000000..d1e8d6f
--- /dev/null
@@ -0,0 +1,15 @@
+i.MX53 Automotive Reference Design Board
+Required root node properties:
+    - compatible = "fsl,imx53-ard", "fsl,imx53";
+
+i.MX53 Evaluation Kit
+Required root node properties:
+    - compatible = "fsl,imx53-evk", "fsl,imx53";
+
+i.MX53 Quick Start Board
+Required root node properties:
+    - compatible = "fsl,imx53-qsb", "fsl,imx53";
+
+i.MX53 Smart Mobile Reference Design Board
+Required root node properties:
+    - compatible = "fsl,imx53-smd", "fsl,imx53";
diff --git a/arch/arm/boot/dts/imx53-ard.dts b/arch/arm/boot/dts/imx53-ard.dts
new file mode 100644 (file)
index 0000000..2ab7f80
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2011 Freescale Semiconductor, Inc.
+ * Copyright 2011 Linaro Ltd.
+ *
+ * The code contained herein is licensed under the GNU General Public
+ * License. You may obtain a copy of the GNU General Public License
+ * Version 2 or later at the following locations:
+ *
+ * http://www.opensource.org/licenses/gpl-license.html
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+/dts-v1/;
+/include/ "imx53.dtsi"
+
+/ {
+       model = "Freescale i.MX53 Automotive Reference Design Board";
+       compatible = "fsl,imx53-ard", "fsl,imx53";
+
+       chosen {
+               bootargs = "console=ttymxc0,115200 root=/dev/mmcblk0p3 rootwait";
+       };
+
+       memory {
+               reg = <0x70000000 0x40000000>;
+       };
+
+       soc {
+               aips@50000000 { /* AIPS1 */
+                       spba@50000000 {
+                               esdhc@50004000 { /* ESDHC1 */
+                                       cd-gpios = <&gpio0 1 0>; /* GPIO1_1 */
+                                       wp-gpios = <&gpio0 9 0>; /* GPIO1_9 */
+                                       status = "okay";
+                               };
+                       };
+
+                       wdog@53f98000 { /* WDOG1 */
+                               status = "okay";
+                       };
+
+                       iomuxc@53fa8000 {
+                               compatible = "fsl,imx53-iomuxc-ard";
+                               reg = <0x53fa8000 0x4000>;
+                       };
+
+                       uart0: uart@53fbc000 { /* UART1 */
+                               status = "okay";
+                       };
+               };
+
+               aips@60000000 { /* AIPS2 */
+                       sdma@63fb0000 {
+                               fsl,sdma-ram-script-name = "imx/sdma/sdma-imx53.bin";
+                       };
+               };
+       };
+
+       eim-cs1@f4000000 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "fsl,eim-bus", "simple-bus";
+               reg = <0xf4000000 0x3ff0000>;
+               ranges;
+
+               lan9220@f4000000 {
+                       compatible = "smsc,lan9220", "smsc,lan9115";
+                       reg = <0xf4000000 0x2000000>;
+                       phy-mode = "mii";
+                       interrupt-parent = <&gpio1>;
+                       interrupts = <31>;
+                       reg-io-width = <4>;
+                       smsc,irq-push-pull;
+               };
+       };
+
+       gpio-keys {
+               compatible = "gpio-keys";
+
+               home {
+                       label = "Home";
+                       gpios = <&gpio4 10 0>; /* GPIO5_10 */
+                       linux,code = <102>; /* KEY_HOME */
+                       gpio-key,wakeup;
+               };
+
+               back {
+                       label = "Back";
+                       gpios = <&gpio4 11 0>; /* GPIO5_11 */
+                       linux,code = <158>; /* KEY_BACK */
+                       gpio-key,wakeup;
+               };
+
+               program {
+                       label = "Program";
+                       gpios = <&gpio4 12 0>; /* GPIO5_12 */
+                       linux,code = <362>; /* KEY_PROGRAM */
+                       gpio-key,wakeup;
+               };
+
+               volume-up {
+                       label = "Volume Up";
+                       gpios = <&gpio4 13 0>; /* GPIO5_13 */
+                       linux,code = <115>; /* KEY_VOLUMEUP */
+               };
+
+               volume-down {
+                       label = "Volume Down";
+                       gpios = <&gpio3 0 0>; /* GPIO4_0 */
+                       linux,code = <114>; /* KEY_VOLUMEDOWN */
+               };
+       };
+};
diff --git a/arch/arm/boot/dts/imx53-evk.dts b/arch/arm/boot/dts/imx53-evk.dts
new file mode 100644 (file)
index 0000000..3f3a881
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2011 Freescale Semiconductor, Inc.
+ * Copyright 2011 Linaro Ltd.
+ *
+ * The code contained herein is licensed under the GNU General Public
+ * License. You may obtain a copy of the GNU General Public License
+ * Version 2 or later at the following locations:
+ *
+ * http://www.opensource.org/licenses/gpl-license.html
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+/dts-v1/;
+/include/ "imx53.dtsi"
+
+/ {
+       model = "Freescale i.MX53 Evaluation Kit";
+       compatible = "fsl,imx53-evk", "fsl,imx53";
+
+       chosen {
+               bootargs = "console=ttymxc0,115200 root=/dev/mmcblk0p3 rootwait";
+       };
+
+       memory {
+               reg = <0x70000000 0x80000000>;
+       };
+
+       soc {
+               aips@50000000 { /* AIPS1 */
+                       spba@50000000 {
+                               esdhc@50004000 { /* ESDHC1 */
+                                       cd-gpios = <&gpio2 13 0>; /* GPIO3_13 */
+                                       wp-gpios = <&gpio2 14 0>; /* GPIO3_14 */
+                                       status = "okay";
+                               };
+
+                               ecspi@50010000 { /* ECSPI1 */
+                                       fsl,spi-num-chipselects = <2>;
+                                       cs-gpios = <&gpio1 30 0>, /* GPIO2_30 */
+                                                  <&gpio2 19 0>; /* GPIO3_19 */
+                                       status = "okay";
+
+                                       flash: at45db321d@1 {
+                                               #address-cells = <1>;
+                                               #size-cells = <1>;
+                                               compatible = "atmel,at45db321d", "atmel,at45", "atmel,dataflash";
+                                               spi-max-frequency = <25000000>;
+                                               reg = <1>;
+
+                                               partition@0 {
+                                                       label = "U-Boot";
+                                                       reg = <0x0 0x40000>;
+                                                       read-only;
+                                               };
+
+                                               partition@40000 {
+                                                       label = "Kernel";
+                                                       reg = <0x40000 0x3c0000>;
+                                               };
+                                       };
+                               };
+
+                               esdhc@50020000 { /* ESDHC3 */
+                                       cd-gpios = <&gpio2 11 0>; /* GPIO3_11 */
+                                       wp-gpios = <&gpio2 12 0>; /* GPIO3_12 */
+                                       status = "okay";
+                               };
+                       };
+
+                       wdog@53f98000 { /* WDOG1 */
+                               status = "okay";
+                       };
+
+                       iomuxc@53fa8000 {
+                               compatible = "fsl,imx53-iomuxc-evk";
+                               reg = <0x53fa8000 0x4000>;
+                       };
+
+                       uart0: uart@53fbc000 { /* UART1 */
+                               status = "okay";
+                       };
+               };
+
+               aips@60000000 { /* AIPS2 */
+                       sdma@63fb0000 {
+                               fsl,sdma-ram-script-name = "imx/sdma/sdma-imx53.bin";
+                       };
+
+                       i2c@63fc4000 { /* I2C2 */
+                               status = "okay";
+
+                               pmic: mc13892@08 {
+                                       compatible = "fsl,mc13892", "fsl,mc13xxx";
+                                       reg = <0x08>;
+                               };
+
+                               codec: sgtl5000@0a {
+                                       compatible = "fsl,sgtl5000";
+                                       reg = <0x0a>;
+                               };
+                       };
+
+                       fec@63fec000 {
+                               phy-mode = "rmii";
+                               phy-reset-gpios = <&gpio6 6 0>; /* GPIO7_6 */
+                               status = "okay";
+                       };
+               };
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               green {
+                       label = "Heartbeat";
+                       gpios = <&gpio6 7 0>; /* GPIO7_7 */
+                       linux,default-trigger = "heartbeat";
+               };
+       };
+};
diff --git a/arch/arm/boot/dts/imx53-qsb.dts b/arch/arm/boot/dts/imx53-qsb.dts
new file mode 100644 (file)
index 0000000..ae6de6d
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * Copyright 2011 Freescale Semiconductor, Inc.
+ * Copyright 2011 Linaro Ltd.
+ *
+ * The code contained herein is licensed under the GNU General Public
+ * License. You may obtain a copy of the GNU General Public License
+ * Version 2 or later at the following locations:
+ *
+ * http://www.opensource.org/licenses/gpl-license.html
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+/dts-v1/;
+/include/ "imx53.dtsi"
+
+/ {
+       model = "Freescale i.MX53 Quick Start Board";
+       compatible = "fsl,imx53-qsb", "fsl,imx53";
+
+       chosen {
+               bootargs = "console=ttymxc0,115200 root=/dev/mmcblk0p3 rootwait";
+       };
+
+       memory {
+               reg = <0x70000000 0x40000000>;
+       };
+
+       soc {
+               aips@50000000 { /* AIPS1 */
+                       spba@50000000 {
+                               esdhc@50004000 { /* ESDHC1 */
+                                       cd-gpios = <&gpio2 13 0>; /* GPIO3_13 */
+                                       status = "okay";
+                               };
+
+                               esdhc@50020000 { /* ESDHC3 */
+                                       cd-gpios = <&gpio2 11 0>; /* GPIO3_11 */
+                                       wp-gpios = <&gpio2 12 0>; /* GPIO3_12 */
+                                       status = "okay";
+                               };
+                       };
+
+                       wdog@53f98000 { /* WDOG1 */
+                               status = "okay";
+                       };
+
+                       iomuxc@53fa8000 {
+                               compatible = "fsl,imx53-iomuxc-qsb";
+                               reg = <0x53fa8000 0x4000>;
+                       };
+
+                       uart0: uart@53fbc000 { /* UART1 */
+                               status = "okay";
+                       };
+               };
+
+               aips@60000000 { /* AIPS2 */
+                       sdma@63fb0000 {
+                               fsl,sdma-ram-script-name = "imx/sdma/sdma-imx53.bin";
+                       };
+
+                       i2c@63fc4000 { /* I2C2 */
+                               status = "okay";
+
+                               codec: sgtl5000@0a {
+                                       compatible = "fsl,sgtl5000";
+                                       reg = <0x0a>;
+                               };
+                       };
+
+                       i2c@63fc8000 { /* I2C1 */
+                               status = "okay";
+
+                               accelerometer: mma8450@1c {
+                                       compatible = "fsl,mma8450";
+                                       reg = <0x1c>;
+                               };
+
+                               pmic: dialog@48 {
+                                       compatible = "dialog,da9053", "dialog,da9052";
+                                       reg = <0x48>;
+                               };
+                       };
+
+                       fec@63fec000 {
+                               phy-mode = "rmii";
+                               phy-reset-gpios = <&gpio6 6 0>; /* GPIO7_6 */
+                               status = "okay";
+                       };
+               };
+       };
+
+       gpio-keys {
+               compatible = "gpio-keys";
+
+               power {
+                       label = "Power Button";
+                       gpios = <&gpio0 8 0>; /* GPIO1_8 */
+                       linux,code = <116>; /* KEY_POWER */
+                       gpio-key,wakeup;
+               };
+
+               volume-up {
+                       label = "Volume Up";
+                       gpios = <&gpio1 14 0>; /* GPIO2_14 */
+                       linux,code = <115>; /* KEY_VOLUMEUP */
+               };
+
+               volume-down {
+                       label = "Volume Down";
+                       gpios = <&gpio1 15 0>; /* GPIO2_15 */
+                       linux,code = <114>; /* KEY_VOLUMEDOWN */
+               };
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               user {
+                       label = "Heartbeat";
+                       gpios = <&gpio6 7 0>; /* GPIO7_7 */
+                       linux,default-trigger = "heartbeat";
+               };
+       };
+};
diff --git a/arch/arm/boot/dts/imx53-smd.dts b/arch/arm/boot/dts/imx53-smd.dts
new file mode 100644 (file)
index 0000000..b1c062e
--- /dev/null
@@ -0,0 +1,169 @@
+/*
+ * Copyright 2011 Freescale Semiconductor, Inc.
+ * Copyright 2011 Linaro Ltd.
+ *
+ * The code contained herein is licensed under the GNU General Public
+ * License. You may obtain a copy of the GNU General Public License
+ * Version 2 or later at the following locations:
+ *
+ * http://www.opensource.org/licenses/gpl-license.html
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+/dts-v1/;
+/include/ "imx53.dtsi"
+
+/ {
+       model = "Freescale i.MX53 Smart Mobile Reference Design Board";
+       compatible = "fsl,imx53-smd", "fsl,imx53";
+
+       chosen {
+               bootargs = "console=ttymxc0,115200 root=/dev/mmcblk0p3 rootwait";
+       };
+
+       memory {
+               reg = <0x70000000 0x40000000>;
+       };
+
+       soc {
+               aips@50000000 { /* AIPS1 */
+                       spba@50000000 {
+                               esdhc@50004000 { /* ESDHC1 */
+                                       cd-gpios = <&gpio2 13 0>; /* GPIO3_13 */
+                                       wp-gpios = <&gpio3 11 0>; /* GPIO4_11 */
+                                       status = "okay";
+                               };
+
+                               esdhc@50008000 { /* ESDHC2 */
+                                       fsl,card-wired;
+                                       status = "okay";
+                               };
+
+                               uart2: uart@5000c000 { /* UART3 */
+                                       fsl,uart-has-rtscts;
+                                       status = "okay";
+                               };
+
+                               ecspi@50010000 { /* ECSPI1 */
+                                       fsl,spi-num-chipselects = <2>;
+                                       cs-gpios = <&gpio1 30 0>, /* GPIO2_30 */
+                                                  <&gpio2 19 0>; /* GPIO3_19 */
+                                       status = "okay";
+
+                                       zigbee: mc1323@0 {
+                                               compatible = "fsl,mc1323";
+                                               spi-max-frequency = <8000000>;
+                                               reg = <0>;
+                                       };
+
+                                       flash: m25p32@1 {
+                                               #address-cells = <1>;
+                                               #size-cells = <1>;
+                                               compatible = "st,m25p32", "st,m25p";
+                                               spi-max-frequency = <20000000>;
+                                               reg = <1>;
+
+                                               partition@0 {
+                                                       label = "U-Boot";
+                                                       reg = <0x0 0x40000>;
+                                                       read-only;
+                                               };
+
+                                               partition@40000 {
+                                                       label = "Kernel";
+                                                       reg = <0x40000 0x3c0000>;
+                                               };
+                                       };
+                               };
+
+                               esdhc@50020000 { /* ESDHC3 */
+                                       fsl,card-wired;
+                                       status = "okay";
+                               };
+                       };
+
+                       wdog@53f98000 { /* WDOG1 */
+                               status = "okay";
+                       };
+
+                       iomuxc@53fa8000 {
+                               compatible = "fsl,imx53-iomuxc-smd";
+                               reg = <0x53fa8000 0x4000>;
+                       };
+
+                       uart0: uart@53fbc000 { /* UART1 */
+                               status = "okay";
+                       };
+
+                       uart1: uart@53fc0000 { /* UART2 */
+                               status = "okay";
+                       };
+               };
+
+               aips@60000000 { /* AIPS2 */
+                       sdma@63fb0000 {
+                               fsl,sdma-ram-script-name = "imx/sdma/sdma-imx53.bin";
+                       };
+
+                       i2c@63fc4000 { /* I2C2 */
+                               status = "okay";
+
+                               codec: sgtl5000@0a {
+                                       compatible = "fsl,sgtl5000";
+                                       reg = <0x0a>;
+                               };
+
+                               magnetometer: mag3110@0e {
+                                       compatible = "fsl,mag3110";
+                                       reg = <0x0e>;
+                               };
+
+                               touchkey: mpr121@5a {
+                                       compatible = "fsl,mpr121";
+                                       reg = <0x5a>;
+                               };
+                       };
+
+                       i2c@63fc8000 { /* I2C1 */
+                               status = "okay";
+
+                               accelerometer: mma8450@1c {
+                                       compatible = "fsl,mma8450";
+                                       reg = <0x1c>;
+                               };
+
+                               camera: ov5642@3c {
+                                       compatible = "ovti,ov5642";
+                                       reg = <0x3c>;
+                               };
+
+                               pmic: dialog@48 {
+                                       compatible = "dialog,da9053", "dialog,da9052";
+                                       reg = <0x48>;
+                               };
+                       };
+
+                       fec@63fec000 {
+                               phy-mode = "rmii";
+                               phy-reset-gpios = <&gpio6 6 0>; /* GPIO7_6 */
+                               status = "okay";
+                       };
+               };
+       };
+
+       gpio-keys {
+               compatible = "gpio-keys";
+
+               volume-up {
+                       label = "Volume Up";
+                       gpios = <&gpio1 14 0>; /* GPIO2_14 */
+                       linux,code = <115>; /* KEY_VOLUMEUP */
+               };
+
+               volume-down {
+                       label = "Volume Down";
+                       gpios = <&gpio1 15 0>; /* GPIO2_15 */
+                       linux,code = <114>; /* KEY_VOLUMEDOWN */
+               };
+       };
+};
diff --git a/arch/arm/boot/dts/imx53.dtsi b/arch/arm/boot/dts/imx53.dtsi
new file mode 100644 (file)
index 0000000..099cd84
--- /dev/null
@@ -0,0 +1,301 @@
+/*
+ * Copyright 2011 Freescale Semiconductor, Inc.
+ * Copyright 2011 Linaro Ltd.
+ *
+ * The code contained herein is licensed under the GNU General Public
+ * License. You may obtain a copy of the GNU General Public License
+ * Version 2 or later at the following locations:
+ *
+ * http://www.opensource.org/licenses/gpl-license.html
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+/include/ "skeleton.dtsi"
+
+/ {
+       aliases {
+               serial0 = &uart0;
+               serial1 = &uart1;
+               serial2 = &uart2;
+               serial3 = &uart3;
+               serial4 = &uart4;
+       };
+
+       tzic: tz-interrupt-controller@0fffc000 {
+               compatible = "fsl,imx53-tzic", "fsl,tzic";
+               interrupt-controller;
+               #interrupt-cells = <1>;
+               reg = <0x0fffc000 0x4000>;
+       };
+
+       clocks {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               ckil {
+                       compatible = "fsl,imx-ckil", "fixed-clock";
+                       clock-frequency = <32768>;
+               };
+
+               ckih1 {
+                       compatible = "fsl,imx-ckih1", "fixed-clock";
+                       clock-frequency = <22579200>;
+               };
+
+               ckih2 {
+                       compatible = "fsl,imx-ckih2", "fixed-clock";
+                       clock-frequency = <0>;
+               };
+
+               osc {
+                       compatible = "fsl,imx-osc", "fixed-clock";
+                       clock-frequency = <24000000>;
+               };
+       };
+
+       soc {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "simple-bus";
+               interrupt-parent = <&tzic>;
+               ranges;
+
+               aips@50000000 { /* AIPS1 */
+                       compatible = "fsl,aips-bus", "simple-bus";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       reg = <0x50000000 0x10000000>;
+                       ranges;
+
+                       spba@50000000 {
+                               compatible = "fsl,spba-bus", "simple-bus";
+                               #address-cells = <1>;
+                               #size-cells = <1>;
+                               reg = <0x50000000 0x40000>;
+                               ranges;
+
+                               esdhc@50004000 { /* ESDHC1 */
+                                       compatible = "fsl,imx53-esdhc";
+                                       reg = <0x50004000 0x4000>;
+                                       interrupts = <1>;
+                                       status = "disabled";
+                               };
+
+                               esdhc@50008000 { /* ESDHC2 */
+                                       compatible = "fsl,imx53-esdhc";
+                                       reg = <0x50008000 0x4000>;
+                                       interrupts = <2>;
+                                       status = "disabled";
+                               };
+
+                               uart2: uart@5000c000 { /* UART3 */
+                                       compatible = "fsl,imx53-uart", "fsl,imx21-uart";
+                                       reg = <0x5000c000 0x4000>;
+                                       interrupts = <33>;
+                                       status = "disabled";
+                               };
+
+                               ecspi@50010000 { /* ECSPI1 */
+                                       #address-cells = <1>;
+                                       #size-cells = <0>;
+                                       compatible = "fsl,imx53-ecspi", "fsl,imx51-ecspi";
+                                       reg = <0x50010000 0x4000>;
+                                       interrupts = <36>;
+                                       status = "disabled";
+                               };
+
+                               esdhc@50020000 { /* ESDHC3 */
+                                       compatible = "fsl,imx53-esdhc";
+                                       reg = <0x50020000 0x4000>;
+                                       interrupts = <3>;
+                                       status = "disabled";
+                               };
+
+                               esdhc@50024000 { /* ESDHC4 */
+                                       compatible = "fsl,imx53-esdhc";
+                                       reg = <0x50024000 0x4000>;
+                                       interrupts = <4>;
+                                       status = "disabled";
+                               };
+                       };
+
+                       gpio0: gpio@53f84000 { /* GPIO1 */
+                               compatible = "fsl,imx53-gpio", "fsl,imx31-gpio";
+                               reg = <0x53f84000 0x4000>;
+                               interrupts = <50 51>;
+                               gpio-controller;
+                               #gpio-cells = <2>;
+                               interrupt-controller;
+                               #interrupt-cells = <1>;
+                       };
+
+                       gpio1: gpio@53f88000 { /* GPIO2 */
+                               compatible = "fsl,imx53-gpio", "fsl,imx31-gpio";
+                               reg = <0x53f88000 0x4000>;
+                               interrupts = <52 53>;
+                               gpio-controller;
+                               #gpio-cells = <2>;
+                               interrupt-controller;
+                               #interrupt-cells = <1>;
+                       };
+
+                       gpio2: gpio@53f8c000 { /* GPIO3 */
+                               compatible = "fsl,imx53-gpio", "fsl,imx31-gpio";
+                               reg = <0x53f8c000 0x4000>;
+                               interrupts = <54 55>;
+                               gpio-controller;
+                               #gpio-cells = <2>;
+                               interrupt-controller;
+                               #interrupt-cells = <1>;
+                       };
+
+                       gpio3: gpio@53f90000 { /* GPIO4 */
+                               compatible = "fsl,imx53-gpio", "fsl,imx31-gpio";
+                               reg = <0x53f90000 0x4000>;
+                               interrupts = <56 57>;
+                               gpio-controller;
+                               #gpio-cells = <2>;
+                               interrupt-controller;
+                               #interrupt-cells = <1>;
+                       };
+
+                       wdog@53f98000 { /* WDOG1 */
+                               compatible = "fsl,imx53-wdt", "fsl,imx21-wdt";
+                               reg = <0x53f98000 0x4000>;
+                               interrupts = <58>;
+                               status = "disabled";
+                       };
+
+                       wdog@53f9c000 { /* WDOG2 */
+                               compatible = "fsl,imx53-wdt", "fsl,imx21-wdt";
+                               reg = <0x53f9c000 0x4000>;
+                               interrupts = <59>;
+                               status = "disabled";
+                       };
+
+                       uart0: uart@53fbc000 { /* UART1 */
+                               compatible = "fsl,imx53-uart", "fsl,imx21-uart";
+                               reg = <0x53fbc000 0x4000>;
+                               interrupts = <31>;
+                               status = "disabled";
+                       };
+
+                       uart1: uart@53fc0000 { /* UART2 */
+                               compatible = "fsl,imx53-uart", "fsl,imx21-uart";
+                               reg = <0x53fc0000 0x4000>;
+                               interrupts = <32>;
+                               status = "disabled";
+                       };
+
+                       gpio4: gpio@53fdc000 { /* GPIO5 */
+                               compatible = "fsl,imx53-gpio", "fsl,imx31-gpio";
+                               reg = <0x53fdc000 0x4000>;
+                               interrupts = <103 104>;
+                               gpio-controller;
+                               #gpio-cells = <2>;
+                               interrupt-controller;
+                               #interrupt-cells = <1>;
+                       };
+
+                       gpio5: gpio@53fe0000 { /* GPIO6 */
+                               compatible = "fsl,imx53-gpio", "fsl,imx31-gpio";
+                               reg = <0x53fe0000 0x4000>;
+                               interrupts = <105 106>;
+                               gpio-controller;
+                               #gpio-cells = <2>;
+                               interrupt-controller;
+                               #interrupt-cells = <1>;
+                       };
+
+                       gpio6: gpio@53fe4000 { /* GPIO7 */
+                               compatible = "fsl,imx53-gpio", "fsl,imx31-gpio";
+                               reg = <0x53fe4000 0x4000>;
+                               interrupts = <107 108>;
+                               gpio-controller;
+                               #gpio-cells = <2>;
+                               interrupt-controller;
+                               #interrupt-cells = <1>;
+                       };
+
+                       i2c@53fec000 { /* I2C3 */
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               compatible = "fsl,imx53-i2c", "fsl,imx1-i2c";
+                               reg = <0x53fec000 0x4000>;
+                               interrupts = <64>;
+                               status = "disabled";
+                       };
+
+                       uart3: uart@53ff0000 { /* UART4 */
+                               compatible = "fsl,imx53-uart", "fsl,imx21-uart";
+                               reg = <0x53ff0000 0x4000>;
+                               interrupts = <13>;
+                               status = "disabled";
+                       };
+               };
+
+               aips@60000000 { /* AIPS2 */
+                       compatible = "fsl,aips-bus", "simple-bus";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+                       reg = <0x60000000 0x10000000>;
+                       ranges;
+
+                       uart4: uart@63f90000 { /* UART5 */
+                               compatible = "fsl,imx53-uart", "fsl,imx21-uart";
+                               reg = <0x63f90000 0x4000>;
+                               interrupts = <86>;
+                               status = "disabled";
+                       };
+
+                       ecspi@63fac000 { /* ECSPI2 */
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               compatible = "fsl,imx53-ecspi", "fsl,imx51-ecspi";
+                               reg = <0x63fac000 0x4000>;
+                               interrupts = <37>;
+                               status = "disabled";
+                       };
+
+                       sdma@63fb0000 {
+                               compatible = "fsl,imx53-sdma", "fsl,imx35-sdma";
+                               reg = <0x63fb0000 0x4000>;
+                               interrupts = <6>;
+                       };
+
+                       cspi@63fc0000 {
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               compatible = "fsl,imx53-cspi", "fsl,imx35-cspi";
+                               reg = <0x63fc0000 0x4000>;
+                               interrupts = <38>;
+                               status = "disabled";
+                       };
+
+                       i2c@63fc4000 { /* I2C2 */
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               compatible = "fsl,imx53-i2c", "fsl,imx1-i2c";
+                               reg = <0x63fc4000 0x4000>;
+                               interrupts = <63>;
+                               status = "disabled";
+                       };
+
+                       i2c@63fc8000 { /* I2C1 */
+                               #address-cells = <1>;
+                               #size-cells = <0>;
+                               compatible = "fsl,imx53-i2c", "fsl,imx1-i2c";
+                               reg = <0x63fc8000 0x4000>;
+                               interrupts = <62>;
+                               status = "disabled";
+                       };
+
+                       fec@63fec000 {
+                               compatible = "fsl,imx53-fec", "fsl,imx25-fec";
+                               reg = <0x63fec000 0x4000>;
+                               interrupts = <87>;
+                               status = "disabled";
+                       };
+               };
+       };
+};
index b4e7c58bbb3844d76edb890a5a352b033160f760..0ac676c5256dce42f1565102da3966d448435785 100644 (file)
@@ -172,6 +172,18 @@ endif # ARCH_MX51
 if ARCH_MX53_SUPPORTED
 comment "i.MX53 machines:"
 
+config MACH_IMX53_DT
+       bool "Support i.MX53 platforms from device tree"
+       select SOC_IMX53
+       select USE_OF
+       select MACH_MX53_ARD
+       select MACH_MX53_EVK
+       select MACH_MX53_LOCO
+       select MACH_MX53_SMD
+       help
+         Include support for Freescale i.MX53 based platforms
+         using the device tree for discovery
+
 config MACH_MX53_EVK
        bool "Support MX53 EVK platforms"
        select SOC_IMX53
index 383e7cd3fbcb5b711783706ceeea2e605e0777b2..3dbe5e26a51bb8e61a41b4e69086ccfa1e57b59a 100644 (file)
@@ -22,3 +22,5 @@ obj-$(CONFIG_MX51_EFIKA_COMMON) += mx51_efika.o
 obj-$(CONFIG_MACH_MX51_EFIKAMX) += board-mx51_efikamx.o
 obj-$(CONFIG_MACH_MX51_EFIKASB) += board-mx51_efikasb.o
 obj-$(CONFIG_MACH_MX50_RDP) += board-mx50_rdp.o
+
+obj-$(CONFIG_MACH_IMX53_DT) += imx53-dt.o
index 76a67c4a2a0b9f80a013f821240bfebff8dc3edc..9b4395d7a07ca1f75731486fcb18d6bf70022cf3 100644 (file)
@@ -171,9 +171,6 @@ static struct imxi2c_platform_data mx53_ard_i2c3_data = {
 
 static void __init mx53_ard_io_init(void)
 {
-       mxc_iomux_v3_setup_multiple_pads(mx53_ard_pads,
-                               ARRAY_SIZE(mx53_ard_pads));
-
        gpio_request(ARD_ETHERNET_INT_B, "eth-int-b");
        gpio_direction_input(ARD_ETHERNET_INT_B);
 
@@ -216,6 +213,13 @@ static int weim_cs_config(void)
        return 0;
 }
 
+void __init imx53_ard_common_init(void)
+{
+       mxc_iomux_v3_setup_multiple_pads(mx53_ard_pads,
+                                        ARRAY_SIZE(mx53_ard_pads));
+       weim_cs_config();
+}
+
 static struct platform_device *devices[] __initdata = {
        &ard_smsc_lan9220_device,
 };
@@ -225,8 +229,8 @@ static void __init mx53_ard_board_init(void)
        imx53_soc_init();
        imx53_add_imx_uart(0, NULL);
 
+       imx53_ard_common_init();
        mx53_ard_io_init();
-       weim_cs_config();
        platform_add_devices(devices, ARRAY_SIZE(devices));
 
        imx53_add_sdhci_esdhc_imx(0, &mx53_ard_sd1_data);
index 1b417b06b7360b526d87915654e569ae91111efd..7663905d5c6de2e2fc4d90f971bec100624bebf6 100644 (file)
@@ -131,12 +131,17 @@ static const struct spi_imx_master mx53_evk_spi_data __initconst = {
        .num_chipselect = ARRAY_SIZE(mx53_evk_spi_cs),
 };
 
+void __init imx53_evk_common_init(void)
+{
+       mxc_iomux_v3_setup_multiple_pads(mx53_evk_pads,
+                                        ARRAY_SIZE(mx53_evk_pads));
+}
+
 static void __init mx53_evk_board_init(void)
 {
        imx53_soc_init();
+       imx53_evk_common_init();
 
-       mxc_iomux_v3_setup_multiple_pads(mx53_evk_pads,
-                                       ARRAY_SIZE(mx53_evk_pads));
        mx53_evk_init_uart();
        mx53_evk_fec_reset();
        imx53_add_fec(&mx53_evk_fec_pdata);
index 4e1d51d252dc4cfd9dcf9f3e9fd2b7aea521451f..3922cd5ea854eb4009ca01168e11c11e61868261 100644 (file)
@@ -257,12 +257,17 @@ static const struct gpio_led_platform_data mx53loco_leds_data __initconst = {
        .num_leds       = ARRAY_SIZE(mx53loco_leds),
 };
 
+void __init imx53_qsb_common_init(void)
+{
+       mxc_iomux_v3_setup_multiple_pads(mx53_loco_pads,
+                                        ARRAY_SIZE(mx53_loco_pads));
+}
+
 static void __init mx53_loco_board_init(void)
 {
        imx53_soc_init();
+       imx53_qsb_common_init();
 
-       mxc_iomux_v3_setup_multiple_pads(mx53_loco_pads,
-                                       ARRAY_SIZE(mx53_loco_pads));
        imx53_add_imx_uart(0, NULL);
        mx53_loco_fec_reset();
        imx53_add_fec(&mx53_loco_fec_data);
index bc02894eafefab9126347857ff709293e1bffeb5..b10c89982fbcb18ccdb37a4423648ed742bb9dbf 100644 (file)
@@ -111,12 +111,17 @@ static const struct imxi2c_platform_data mx53_smd_i2c_data __initconst = {
        .bitrate = 100000,
 };
 
+void __init imx53_smd_common_init(void)
+{
+       mxc_iomux_v3_setup_multiple_pads(mx53_smd_pads,
+                                        ARRAY_SIZE(mx53_smd_pads));
+}
+
 static void __init mx53_smd_board_init(void)
 {
        imx53_soc_init();
+       imx53_smd_common_init();
 
-       mxc_iomux_v3_setup_multiple_pads(mx53_smd_pads,
-                                       ARRAY_SIZE(mx53_smd_pads));
        mx53_smd_init_uart();
        mx53_smd_fec_reset();
        imx53_add_fec(&mx53_smd_fec_data);
index f7bf996f463b60c3cafd94d89f52882deaf49517..d9b03d4dba6d719df30cf807af64772953ea3647 100644 (file)
@@ -15,6 +15,7 @@
 #include <linux/clk.h>
 #include <linux/io.h>
 #include <linux/clkdev.h>
+#include <linux/of.h>
 
 #include <asm/div64.h>
 
@@ -1609,3 +1610,33 @@ int __init mx53_clocks_init(unsigned long ckil, unsigned long osc,
                MX53_INT_GPT);
        return 0;
 }
+
+static void __init clk_get_freq_dt(unsigned long *ckil, unsigned long *osc,
+                                  unsigned long *ckih1, unsigned long *ckih2)
+{
+       struct device_node *np;
+
+       /* retrieve the freqency of fixed clocks from device tree */
+       for_each_compatible_node(np, NULL, "fixed-clock") {
+               u32 rate;
+               if (of_property_read_u32(np, "clock-frequency", &rate))
+                       continue;
+
+               if (of_device_is_compatible(np, "fsl,imx-ckil"))
+                       *ckil = rate;
+               else if (of_device_is_compatible(np, "fsl,imx-osc"))
+                       *osc = rate;
+               else if (of_device_is_compatible(np, "fsl,imx-ckih1"))
+                       *ckih1 = rate;
+               else if (of_device_is_compatible(np, "fsl,imx-ckih2"))
+                       *ckih2 = rate;
+       }
+}
+
+int __init mx53_clocks_init_dt(void)
+{
+       unsigned long ckil, osc, ckih1, ckih2;
+
+       clk_get_freq_dt(&ckil, &osc, &ckih1, &ckih2);
+       return mx53_clocks_init(ckil, osc, ckih1, ckih2);
+}
diff --git a/arch/arm/mach-mx5/imx53-dt.c b/arch/arm/mach-mx5/imx53-dt.c
new file mode 100644 (file)
index 0000000..ccaa0b8
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+ * Copyright 2011 Freescale Semiconductor, Inc. All Rights Reserved.
+ * Copyright 2011 Linaro Ltd.
+ *
+ * The code contained herein is licensed under the GNU General Public
+ * License. You may obtain a copy of the GNU General Public License
+ * Version 2 or later at the following locations:
+ *
+ * http://www.opensource.org/licenses/gpl-license.html
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+#include <linux/io.h>
+#include <linux/irq.h>
+#include <linux/irqdomain.h>
+#include <linux/of_irq.h>
+#include <linux/of_platform.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/time.h>
+#include <mach/common.h>
+#include <mach/mx53.h>
+
+/*
+ * Lookup table for attaching a specific name and platform_data pointer to
+ * devices as they get created by of_platform_populate().  Ideally this table
+ * would not exist, but the current clock implementation depends on some devices
+ * having a specific name.
+ */
+static const struct of_dev_auxdata imx53_auxdata_lookup[] __initconst = {
+       OF_DEV_AUXDATA("fsl,imx53-uart", MX53_UART1_BASE_ADDR, "imx21-uart.0", NULL),
+       OF_DEV_AUXDATA("fsl,imx53-uart", MX53_UART2_BASE_ADDR, "imx21-uart.1", NULL),
+       OF_DEV_AUXDATA("fsl,imx53-uart", MX53_UART3_BASE_ADDR, "imx21-uart.2", NULL),
+       OF_DEV_AUXDATA("fsl,imx53-uart", MX53_UART4_BASE_ADDR, "imx21-uart.3", NULL),
+       OF_DEV_AUXDATA("fsl,imx53-uart", MX53_UART5_BASE_ADDR, "imx21-uart.4", NULL),
+       OF_DEV_AUXDATA("fsl,imx53-fec", MX53_FEC_BASE_ADDR, "imx25-fec.0", NULL),
+       OF_DEV_AUXDATA("fsl,imx53-esdhc", MX53_ESDHC1_BASE_ADDR, "sdhci-esdhc-imx53.0", NULL),
+       OF_DEV_AUXDATA("fsl,imx53-esdhc", MX53_ESDHC2_BASE_ADDR, "sdhci-esdhc-imx53.1", NULL),
+       OF_DEV_AUXDATA("fsl,imx53-esdhc", MX53_ESDHC3_BASE_ADDR, "sdhci-esdhc-imx53.2", NULL),
+       OF_DEV_AUXDATA("fsl,imx53-esdhc", MX53_ESDHC4_BASE_ADDR, "sdhci-esdhc-imx53.3", NULL),
+       OF_DEV_AUXDATA("fsl,imx53-ecspi", MX53_ECSPI1_BASE_ADDR, "imx51-ecspi.0", NULL),
+       OF_DEV_AUXDATA("fsl,imx53-ecspi", MX53_ECSPI2_BASE_ADDR, "imx51-ecspi.1", NULL),
+       OF_DEV_AUXDATA("fsl,imx53-cspi", MX53_CSPI_BASE_ADDR, "imx35-cspi.0", NULL),
+       OF_DEV_AUXDATA("fsl,imx53-i2c", MX53_I2C1_BASE_ADDR, "imx-i2c.0", NULL),
+       OF_DEV_AUXDATA("fsl,imx53-i2c", MX53_I2C2_BASE_ADDR, "imx-i2c.1", NULL),
+       OF_DEV_AUXDATA("fsl,imx53-i2c", MX53_I2C3_BASE_ADDR, "imx-i2c.2", NULL),
+       OF_DEV_AUXDATA("fsl,imx53-sdma", MX53_SDMA_BASE_ADDR, "imx35-sdma", NULL),
+       OF_DEV_AUXDATA("fsl,imx53-wdt", MX53_WDOG1_BASE_ADDR, "imx2-wdt.0", NULL),
+       { /* sentinel */ }
+};
+
+static void __init imx53_tzic_add_irq_domain(struct device_node *np,
+                               struct device_node *interrupt_parent)
+{
+       irq_domain_add_simple(np, 0);
+}
+
+static void __init imx53_gpio_add_irq_domain(struct device_node *np,
+                               struct device_node *interrupt_parent)
+{
+       static int gpio_irq_base = MXC_GPIO_IRQ_START + ARCH_NR_GPIOS -
+                                  32 * 7; /* imx53 gets 7 gpio ports */
+
+       irq_domain_add_simple(np, gpio_irq_base);
+       gpio_irq_base += 32;
+}
+
+static const struct of_device_id imx53_irq_match[] __initconst = {
+       { .compatible = "fsl,imx53-tzic", .data = imx53_tzic_add_irq_domain, },
+       { .compatible = "fsl,imx53-gpio", .data = imx53_gpio_add_irq_domain, },
+       { /* sentinel */ }
+};
+
+static const struct of_device_id imx53_iomuxc_of_match[] __initconst = {
+       { .compatible = "fsl,imx53-iomuxc-ard", .data = imx53_ard_common_init, },
+       { .compatible = "fsl,imx53-iomuxc-evk", .data = imx53_evk_common_init, },
+       { .compatible = "fsl,imx53-iomuxc-qsb", .data = imx53_qsb_common_init, },
+       { .compatible = "fsl,imx53-iomuxc-smd", .data = imx53_smd_common_init, },
+       { /* sentinel */ }
+};
+
+static void __init imx53_dt_init(void)
+{
+       struct device_node *node;
+       const struct of_device_id *of_id;
+       void (*func)(void);
+
+       of_irq_init(imx53_irq_match);
+
+       node = of_find_matching_node(NULL, imx53_iomuxc_of_match);
+       if (node) {
+               of_id = of_match_node(imx53_iomuxc_of_match, node);
+               func = of_id->data;
+               func();
+               of_node_put(node);
+       }
+
+       of_platform_populate(NULL, of_default_bus_match_table,
+                            imx53_auxdata_lookup, NULL);
+}
+
+static void __init imx53_timer_init(void)
+{
+       mx53_clocks_init_dt();
+}
+
+static struct sys_timer imx53_timer = {
+       .init = imx53_timer_init,
+};
+
+static const char *imx53_dt_board_compat[] __initdata = {
+       "fsl,imx53-ard",
+       "fsl,imx53-evk",
+       "fsl,imx53-qsb",
+       "fsl,imx53-smd",
+       NULL
+};
+
+DT_MACHINE_START(IMX53_DT, "Freescale i.MX53 (Device Tree Support)")
+       .map_io         = mx53_map_io,
+       .init_early     = imx53_init_early,
+       .init_irq       = mx53_init_irq,
+       .handle_irq     = imx53_handle_irq,
+       .timer          = &imx53_timer,
+       .init_machine   = imx53_dt_init,
+       .dt_compat      = imx53_dt_board_compat,
+MACHINE_END
index 4e3d97890d6905d78510a942cb79c2809e76ed71..eb3e7c4e2f1a5cc2236bdcdf3db76b7232ceb1f0 100644 (file)
@@ -64,6 +64,7 @@ extern int mx51_clocks_init(unsigned long ckil, unsigned long osc,
                        unsigned long ckih1, unsigned long ckih2);
 extern int mx53_clocks_init(unsigned long ckil, unsigned long osc,
                        unsigned long ckih1, unsigned long ckih2);
+extern int mx53_clocks_init_dt(void);
 extern struct platform_device *mxc_register_gpio(char *name, int id,
        resource_size_t iobase, resource_size_t iosize, int irq, int irq_high);
 extern int mxc_register_device(struct platform_device *pdev, void *data);
@@ -72,4 +73,9 @@ extern void mxc_arch_reset_init(void __iomem *);
 extern void mx51_efikamx_reset(void);
 extern int mx53_revision(void);
 extern int mx53_display_revision(void);
+
+extern void imx53_ard_common_init(void);
+extern void imx53_evk_common_init(void);
+extern void imx53_qsb_common_init(void);
+extern void imx53_smd_common_init(void);
 #endif