aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/boot/dts/Makefile9
-rw-r--r--arch/arm/boot/dts/am335x-bone-common.dtsi1
-rw-r--r--arch/arm/boot/dts/am335x-chiliboard.dts112
-rw-r--r--arch/arm/boot/dts/am335x-chilisom.dtsi239
-rw-r--r--arch/arm/boot/dts/am335x-nano.dts18
-rw-r--r--arch/arm/boot/dts/am33xx-clocks.dtsi2
-rw-r--r--arch/arm/boot/dts/am33xx.dtsi87
-rw-r--r--arch/arm/boot/dts/am3517.dtsi2
-rw-r--r--arch/arm/boot/dts/am35xx-clocks.dtsi2
-rw-r--r--arch/arm/boot/dts/am4372.dtsi91
-rw-r--r--arch/arm/boot/dts/am437x-idk-evm.dts31
-rw-r--r--arch/arm/boot/dts/am43x-epos-evm.dts84
-rw-r--r--arch/arm/boot/dts/am43xx-clocks.dtsi2
-rw-r--r--arch/arm/boot/dts/am57xx-beagle-x15.dts50
-rw-r--r--arch/arm/boot/dts/dm8168-evm.dts33
-rw-r--r--arch/arm/boot/dts/dm816x.dtsi94
-rw-r--r--arch/arm/boot/dts/dra7.dtsi190
-rw-r--r--arch/arm/boot/dts/dra72x.dtsi5
-rw-r--r--arch/arm/boot/dts/dra74x.dtsi5
-rw-r--r--arch/arm/boot/dts/dra7xx-clocks.dtsi8
-rw-r--r--arch/arm/boot/dts/imx25-pdk.dts58
-rw-r--r--arch/arm/boot/dts/imx25-pinfunc.h86
-rw-r--r--arch/arm/boot/dts/imx27.dtsi2
-rw-r--r--arch/arm/boot/dts/imx28-apf28.dts2
-rw-r--r--arch/arm/boot/dts/imx28-apf28dev.dts30
-rw-r--r--arch/arm/boot/dts/imx28.dtsi14
-rw-r--r--arch/arm/boot/dts/imx35.dtsi1
-rw-r--r--arch/arm/boot/dts/imx50.dtsi3
-rw-r--r--arch/arm/boot/dts/imx51.dtsi3
-rw-r--r--arch/arm/boot/dts/imx53.dtsi3
-rw-r--r--arch/arm/boot/dts/imx6dl-aristainetos_4.dts4
-rw-r--r--arch/arm/boot/dts/imx6dl-aristainetos_7.dts4
-rw-r--r--arch/arm/boot/dts/imx6dl-cubox-i.dts38
-rw-r--r--arch/arm/boot/dts/imx6dl-hummingboard.dts38
-rw-r--r--arch/arm/boot/dts/imx6q-cubox-i.dts38
-rw-r--r--arch/arm/boot/dts/imx6q-hummingboard.dts38
-rw-r--r--arch/arm/boot/dts/imx6q.dtsi20
-rw-r--r--arch/arm/boot/dts/imx6qdl-cubox-i.dtsi62
-rw-r--r--arch/arm/boot/dts/imx6qdl-hummingboard.dtsi101
-rw-r--r--arch/arm/boot/dts/imx6qdl-microsom-ar8035.dtsi38
-rw-r--r--arch/arm/boot/dts/imx6qdl-microsom.dtsi38
-rw-r--r--arch/arm/boot/dts/imx6qdl-sabreauto.dtsi35
-rw-r--r--arch/arm/boot/dts/imx6qdl.dtsi49
-rw-r--r--arch/arm/boot/dts/imx6sl-warp.dts262
-rw-r--r--arch/arm/boot/dts/imx6sl.dtsi13
-rw-r--r--arch/arm/boot/dts/imx6sx-sdb-reva.dts143
-rw-r--r--arch/arm/boot/dts/imx6sx-sdb.dts603
-rw-r--r--arch/arm/boot/dts/imx6sx-sdb.dtsi562
-rw-r--r--arch/arm/boot/dts/imx6sx.dtsi9
-rw-r--r--arch/arm/boot/dts/omap2.dtsi4
-rw-r--r--arch/arm/boot/dts/omap2420.dtsi80
-rw-r--r--arch/arm/boot/dts/omap2430-clocks.dtsi8
-rw-r--r--arch/arm/boot/dts/omap2430.dtsi107
-rw-r--r--arch/arm/boot/dts/omap24xx-clocks.dtsi6
-rw-r--r--arch/arm/boot/dts/omap3-beagle-xm.dts1
-rw-r--r--arch/arm/boot/dts/omap3-beagle.dts53
-rw-r--r--arch/arm/boot/dts/omap3-cm-t3x30.dtsi1
-rw-r--r--arch/arm/boot/dts/omap3-devkit8000.dts1
-rw-r--r--arch/arm/boot/dts/omap3-gta04.dtsi1
-rw-r--r--arch/arm/boot/dts/omap3-igep.dtsi1
-rw-r--r--arch/arm/boot/dts/omap3-lilly-a83x.dtsi1
-rw-r--r--arch/arm/boot/dts/omap3-n9.dts37
-rw-r--r--arch/arm/boot/dts/omap3-n900.dts25
-rw-r--r--arch/arm/boot/dts/omap3-n950-n9.dtsi2
-rw-r--r--arch/arm/boot/dts/omap3-n950.dts37
-rw-r--r--arch/arm/boot/dts/omap3-overo-base.dtsi1
-rw-r--r--arch/arm/boot/dts/omap3-pandora-1ghz.dts70
-rw-r--r--arch/arm/boot/dts/omap3-pandora-600mhz.dts65
-rw-r--r--arch/arm/boot/dts/omap3-pandora-common.dtsi640
-rw-r--r--arch/arm/boot/dts/omap3-tao3530.dtsi12
-rw-r--r--arch/arm/boot/dts/omap3.dtsi100
-rw-r--r--arch/arm/boot/dts/omap34xx-hs.dtsi16
-rw-r--r--arch/arm/boot/dts/omap34xx.dtsi17
-rw-r--r--arch/arm/boot/dts/omap36xx-hs.dtsi16
-rw-r--r--arch/arm/boot/dts/omap36xx.dtsi17
-rw-r--r--arch/arm/boot/dts/omap3xxx-clocks.dtsi13
-rw-r--r--arch/arm/boot/dts/omap4-cpu-thermal.dtsi4
-rw-r--r--arch/arm/boot/dts/omap4.dtsi204
-rw-r--r--arch/arm/boot/dts/omap5.dtsi190
-rw-r--r--arch/arm/boot/dts/vf-colibri-eval-v3.dtsi31
-rw-r--r--arch/arm/boot/dts/vf-colibri.dtsi15
-rw-r--r--arch/arm/boot/dts/vf500.dtsi137
-rw-r--r--arch/arm/boot/dts/vfxxx.dtsi64
-rw-r--r--arch/arm/configs/imx_v4_v5_defconfig3
-rw-r--r--arch/arm/configs/multi_v5_defconfig2
-rw-r--r--arch/arm/configs/multi_v7_defconfig82
-rw-r--r--arch/arm/configs/omap2plus_defconfig4
-rw-r--r--arch/arm/mach-asm9260/Kconfig2
-rw-r--r--arch/arm/mach-imx/Kconfig85
-rw-r--r--arch/arm/mach-imx/Makefile8
-rw-r--r--arch/arm/mach-imx/clk-imx25.c75
-rw-r--r--arch/arm/mach-imx/clk-imx6q.c8
-rw-r--r--arch/arm/mach-imx/common.h7
-rw-r--r--arch/arm/mach-imx/cpu-imx25.c11
-rw-r--r--arch/arm/mach-imx/devices-imx25.h85
-rw-r--r--arch/arm/mach-imx/devices/Kconfig3
-rw-r--r--arch/arm/mach-imx/devices/Makefile1
-rw-r--r--arch/arm/mach-imx/devices/platform-fec.c5
-rw-r--r--arch/arm/mach-imx/devices/platform-fsl-usb2-udc.c5
-rw-r--r--arch/arm/mach-imx/devices/platform-imx-fb.c5
-rw-r--r--arch/arm/mach-imx/devices/platform-imx-i2c.c10
-rw-r--r--arch/arm/mach-imx/devices/platform-imx-keypad.c5
-rw-r--r--arch/arm/mach-imx/devices/platform-imx-ssi.c9
-rw-r--r--arch/arm/mach-imx/devices/platform-imx-uart.c12
-rw-r--r--arch/arm/mach-imx/devices/platform-imx2-wdt.c5
-rw-r--r--arch/arm/mach-imx/devices/platform-imxdi_rtc.c42
-rw-r--r--arch/arm/mach-imx/devices/platform-mx2-camera.c5
-rw-r--r--arch/arm/mach-imx/devices/platform-mxc-ehci.c7
-rw-r--r--arch/arm/mach-imx/devices/platform-mxc_nand.c5
-rw-r--r--arch/arm/mach-imx/devices/platform-spi_imx.c11
-rw-r--r--arch/arm/mach-imx/ehci-imx25.c99
-rw-r--r--arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c310
-rw-r--r--arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c2
-rw-r--r--arch/arm/mach-imx/gpc.c353
-rw-r--r--arch/arm/mach-imx/hardware.h1
-rw-r--r--arch/arm/mach-imx/iomux-mx25.h524
-rw-r--r--arch/arm/mach-imx/iomux-mx3.h2
-rw-r--r--arch/arm/mach-imx/iomux-v3.c5
-rw-r--r--arch/arm/mach-imx/iomux-v3.h5
-rw-r--r--arch/arm/mach-imx/mach-cpuimx35.c2
-rw-r--r--arch/arm/mach-imx/mach-eukrea_cpuimx25.c172
-rw-r--r--arch/arm/mach-imx/mach-imx25.c (renamed from arch/arm/mach-imx/imx25-dt.c)20
-rw-r--r--arch/arm/mach-imx/mach-imx6q.c2
-rw-r--r--arch/arm/mach-imx/mach-imx6sl.c2
-rw-r--r--arch/arm/mach-imx/mach-imx6sx.c2
-rw-r--r--arch/arm/mach-imx/mach-mx25_3ds.c270
-rw-r--r--arch/arm/mach-imx/mach-mx35_3ds.c2
-rw-r--r--arch/arm/mach-imx/mach-pcm043.c2
-rw-r--r--arch/arm/mach-imx/mach-vpr200.c2
-rw-r--r--arch/arm/mach-imx/mm-imx25.c89
-rw-r--r--arch/arm/mach-imx/mx25.h117
-rw-r--r--arch/arm/mach-imx/pm-imx6.c6
-rw-r--r--arch/arm/mach-omap1/pm.c51
-rw-r--r--arch/arm/mach-omap2/Kconfig22
-rw-r--r--arch/arm/mach-omap2/clock.c111
-rw-r--r--arch/arm/mach-omap2/clock.h8
-rw-r--r--arch/arm/mach-omap2/cm.h2
-rw-r--r--arch/arm/mach-omap2/cm2xxx.c2
-rw-r--r--arch/arm/mach-omap2/cm2xxx.h2
-rw-r--r--arch/arm/mach-omap2/cm33xx.c2
-rw-r--r--arch/arm/mach-omap2/cm33xx.h3
-rw-r--r--arch/arm/mach-omap2/cm3xxx.c3
-rw-r--r--arch/arm/mach-omap2/cm3xxx.h2
-rw-r--r--arch/arm/mach-omap2/cm44xx.h3
-rw-r--r--arch/arm/mach-omap2/cm_common.c156
-rw-r--r--arch/arm/mach-omap2/cminst44xx.c6
-rw-r--r--arch/arm/mach-omap2/common.c1
-rw-r--r--arch/arm/mach-omap2/common.h3
-rw-r--r--arch/arm/mach-omap2/control.c201
-rw-r--r--arch/arm/mach-omap2/control.h10
-rw-r--r--arch/arm/mach-omap2/display.c15
-rw-r--r--arch/arm/mach-omap2/id.c5
-rw-r--r--arch/arm/mach-omap2/io.c114
-rw-r--r--arch/arm/mach-omap2/mux.c2
-rw-r--r--arch/arm/mach-omap2/omap-secure.h7
-rw-r--r--arch/arm/mach-omap2/omap4-common.c69
-rw-r--r--arch/arm/mach-omap2/pm24xx.c24
-rw-r--r--arch/arm/mach-omap2/pm34xx.c18
-rw-r--r--arch/arm/mach-omap2/prcm-common.h20
-rw-r--r--arch/arm/mach-omap2/prm.h27
-rw-r--r--arch/arm/mach-omap2/prm2xxx.c6
-rw-r--r--arch/arm/mach-omap2/prm2xxx.h4
-rw-r--r--arch/arm/mach-omap2/prm33xx.c2
-rw-r--r--arch/arm/mach-omap2/prm33xx.h2
-rw-r--r--arch/arm/mach-omap2/prm3xxx.c20
-rw-r--r--arch/arm/mach-omap2/prm3xxx.h7
-rw-r--r--arch/arm/mach-omap2/prm44xx.c70
-rw-r--r--arch/arm/mach-omap2/prm44xx.h1
-rw-r--r--arch/arm/mach-omap2/prm44xx_54xx.h8
-rw-r--r--arch/arm/mach-omap2/prm54xx.h1
-rw-r--r--arch/arm/mach-omap2/prm7xx.h2
-rw-r--r--arch/arm/mach-omap2/prm_common.c258
-rw-r--r--arch/arm/mach-omap2/prminst44xx.c18
-rw-r--r--arch/arm/mach-omap2/prminst44xx.h1
-rw-r--r--arch/arm/mach-omap2/sleep44xx.S2
-rw-r--r--arch/arm/mach-omap2/vp.h9
-rw-r--r--arch/arm/mach-omap2/vp3xxx_data.c4
-rw-r--r--arch/arm/mach-omap2/vp44xx_data.c4
-rw-r--r--arch/arm64/boot/dts/arm/foundation-v8.dts8
-rw-r--r--arch/arm64/boot/dts/arm/juno.dts14
-rw-r--r--arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts8
-rw-r--r--arch/arm64/crypto/Makefile2
-rw-r--r--arch/arm64/include/asm/assembler.h5
-rw-r--r--arch/arm64/include/asm/cpuidle.h2
-rw-r--r--arch/arm64/include/asm/insn.h6
-rw-r--r--arch/arm64/include/asm/pgtable.h2
-rw-r--r--arch/arm64/include/asm/processor.h3
-rw-r--r--arch/arm64/include/asm/tlbflush.h5
-rw-r--r--arch/arm64/kernel/Makefile5
-rw-r--r--arch/arm64/kernel/ftrace.c2
-rw-r--r--arch/arm64/kernel/insn.c4
-rw-r--r--arch/arm64/kernel/psci-call.S28
-rw-r--r--arch/arm64/kernel/psci.c37
-rw-r--r--arch/arm64/kernel/signal32.c5
-rw-r--r--arch/arm64/kernel/vdso/gettimeofday.S3
-rw-r--r--arch/arm64/mm/dma-mapping.c16
-rw-r--r--arch/arm64/mm/init.c14
-rw-r--r--arch/frv/include/asm/pgtable.h2
-rw-r--r--arch/m32r/include/asm/pgtable-2level.h1
-rw-r--r--arch/m68k/include/asm/pgtable_mm.h2
-rw-r--r--arch/metag/include/asm/processor.h4
-rw-r--r--arch/mn10300/include/asm/pgtable.h2
-rw-r--r--arch/parisc/include/asm/pgtable.h1
-rw-r--r--arch/s390/include/asm/pgtable.h2
-rw-r--r--arch/x86/kernel/cpu/common.c6
-rw-r--r--arch/x86/kernel/cpu/intel.c4
-rw-r--r--arch/x86/kernel/entry_32.S3
-rw-r--r--arch/x86/kernel/entry_64.S3
-rw-r--r--arch/x86/kernel/kprobes/core.c54
-rw-r--r--arch/x86/kernel/kprobes/opt.c2
-rw-r--r--arch/x86/lguest/Kconfig4
-rw-r--r--arch/x86/platform/intel-mid/intel-mid.c2
-rw-r--r--arch/x86/xen/enlighten.c20
213 files changed, 5554 insertions, 3865 deletions
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index a1c776b8dcec..fb1ee1c07021 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -299,9 +299,11 @@ dtb-$(CONFIG_SOC_IMX6Q) += \
299 imx6q-wandboard.dtb \ 299 imx6q-wandboard.dtb \
300 imx6q-wandboard-revb1.dtb 300 imx6q-wandboard-revb1.dtb
301dtb-$(CONFIG_SOC_IMX6SL) += \ 301dtb-$(CONFIG_SOC_IMX6SL) += \
302 imx6sl-evk.dtb 302 imx6sl-evk.dtb \
303 imx6sl-warp.dtb
303dtb-$(CONFIG_SOC_IMX6SX) += \ 304dtb-$(CONFIG_SOC_IMX6SX) += \
304 imx6sx-sabreauto.dtb \ 305 imx6sx-sabreauto.dtb \
306 imx6sx-sdb-reva.dtb \
305 imx6sx-sdb.dtb 307 imx6sx-sdb.dtb
306dtb-$(CONFIG_SOC_LS1021A) += \ 308dtb-$(CONFIG_SOC_LS1021A) += \
307 ls1021a-qds.dtb \ 309 ls1021a-qds.dtb \
@@ -386,6 +388,8 @@ dtb-$(CONFIG_ARCH_OMAP3) += \
386 omap3-overo-storm-tobi.dtb \ 388 omap3-overo-storm-tobi.dtb \
387 omap3-overo-summit.dtb \ 389 omap3-overo-summit.dtb \
388 omap3-overo-tobi.dtb \ 390 omap3-overo-tobi.dtb \
391 omap3-pandora-600mhz.dtb \
392 omap3-pandora-1ghz.dtb \
389 omap3-sbc-t3517.dtb \ 393 omap3-sbc-t3517.dtb \
390 omap3-sbc-t3530.dtb \ 394 omap3-sbc-t3530.dtb \
391 omap3-sbc-t3730.dtb \ 395 omap3-sbc-t3730.dtb \
@@ -401,7 +405,8 @@ dtb-$(CONFIG_SOC_AM33XX) += \
401 am335x-evmsk.dtb \ 405 am335x-evmsk.dtb \
402 am335x-nano.dtb \ 406 am335x-nano.dtb \
403 am335x-pepper.dtb \ 407 am335x-pepper.dtb \
404 am335x-lxm.dtb 408 am335x-lxm.dtb \
409 am335x-chiliboard.dtb
405dtb-$(CONFIG_ARCH_OMAP4) += \ 410dtb-$(CONFIG_ARCH_OMAP4) += \
406 omap4-duovero-parlor.dtb \ 411 omap4-duovero-parlor.dtb \
407 omap4-panda.dtb \ 412 omap4-panda.dtb \
diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi
index 6cc25ed912ee..2c6248d9a9ef 100644
--- a/arch/arm/boot/dts/am335x-bone-common.dtsi
+++ b/arch/arm/boot/dts/am335x-bone-common.dtsi
@@ -195,6 +195,7 @@
195 195
196&usb0 { 196&usb0 {
197 status = "okay"; 197 status = "okay";
198 dr_mode = "peripheral";
198}; 199};
199 200
200&usb1 { 201&usb1 {
diff --git a/arch/arm/boot/dts/am335x-chiliboard.dts b/arch/arm/boot/dts/am335x-chiliboard.dts
new file mode 100644
index 000000000000..310da20a8aa7
--- /dev/null
+++ b/arch/arm/boot/dts/am335x-chiliboard.dts
@@ -0,0 +1,112 @@
1/*
2 * Copyright (C) 2015 Jablotron s.r.o. -- http://www.jablotron.com/
3 * Author: Rostislav Lisovy <lisovy@jablotron.cz>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
8 */
9/dts-v1/;
10#include "am335x-chilisom.dtsi"
11
12/ {
13 model = "AM335x Chiliboard";
14 compatible = "grinn,am335x-chiliboard", "grinn,am335x-chilisom",
15 "ti,am33xx";
16
17 leds {
18 compatible = "gpio-leds";
19 pinctrl-names = "default";
20 pinctrl-0 = <&led_gpio_pins>;
21
22 led0 {
23 label = "led0";
24 gpios = <&gpio3 7 GPIO_ACTIVE_LOW>;
25 default-state = "keep";
26 linux,default-trigger = "heartbeat";
27 };
28
29 led1 {
30 label = "led1";
31 gpios = <&gpio3 8 GPIO_ACTIVE_LOW>;
32 default-state = "keep";
33 };
34 };
35};
36
37&am33xx_pinmux {
38 usb1_drvvbus: usb1_drvvbus {
39 pinctrl-single,pins = <
40 0x234 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* usb1_drvvbus.usb1_drvvbus */
41 >;
42 };
43
44 sd_pins: pinmux_sd_card {
45 pinctrl-single,pins = <
46 0xf0 (PIN_INPUT | MUX_MODE0) /* mmc0_dat0.mmc0_dat0 */
47 0xf4 (PIN_INPUT | MUX_MODE0) /* mmc0_dat1.mmc0_dat1 */
48 0xf8 (PIN_INPUT | MUX_MODE0) /* mmc0_dat2.mmc0_dat2 */
49 0xfc (PIN_INPUT | MUX_MODE0) /* mmc0_dat3.mmc0_dat3 */
50 0x100 (PIN_INPUT | MUX_MODE0) /* mmc0_clk.mmc0_clk */
51 0x104 (PIN_INPUT | MUX_MODE0) /* mmc0_cmd.mmc0_cmd */
52 0x160 (PIN_INPUT | MUX_MODE7) /* spi0_cs1.gpio0_6 */
53 >;
54 };
55
56 led_gpio_pins: led_gpio_pins {
57 pinctrl-single,pins = <
58 0x1e4 (PIN_OUTPUT | MUX_MODE7) /* emu0.gpio3_7 */
59 0x1e8 (PIN_OUTPUT | MUX_MODE7) /* emu1.gpio3_8 */
60 >;
61 };
62};
63
64&ldo4_reg {
65 regulator-min-microvolt = <3300000>;
66 regulator-max-microvolt = <3300000>;
67};
68
69/* Ethernet */
70&cpsw_emac0 {
71 phy_id = <&davinci_mdio>, <0>;
72 phy-mode = "rmii";
73};
74
75&phy_sel {
76 rmii-clock-ext;
77};
78
79/* USB */
80&usb {
81 status = "okay";
82};
83
84&usb_ctrl_mod {
85 status = "okay";
86};
87
88&usb1_phy {
89 status = "okay";
90};
91
92&usb1 {
93 pinctrl-names = "default";
94 pinctrl-0 = <&usb1_drvvbus>;
95
96 status = "okay";
97 dr_mode = "host";
98};
99
100&cppi41dma {
101 status = "okay";
102};
103
104/* microSD */
105&mmc1 {
106 pinctrl-names = "default";
107 pinctrl-0 = <&sd_pins>;
108 vmmc-supply = <&ldo4_reg>;
109 bus-width = <0x4>;
110 cd-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
111 status = "okay";
112};
diff --git a/arch/arm/boot/dts/am335x-chilisom.dtsi b/arch/arm/boot/dts/am335x-chilisom.dtsi
new file mode 100644
index 000000000000..7e9a34dffe21
--- /dev/null
+++ b/arch/arm/boot/dts/am335x-chilisom.dtsi
@@ -0,0 +1,239 @@
1/*
2 * Copyright (C) 2015 Jablotron s.r.o. -- http://www.jablotron.com/
3 * Author: Rostislav Lisovy <lisovy@jablotron.cz>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
8 */
9#include "am33xx.dtsi"
10
11/ {
12 model = "Grinn AM335x ChiliSOM";
13 compatible = "grinn,am335x-chilisom", "ti,am33xx";
14
15 cpus {
16 cpu@0 {
17 cpu0-supply = <&dcdc2_reg>;
18 };
19 };
20
21 memory {
22 device_type = "memory";
23 reg = <0x80000000 0x20000000>; /* 512 MB */
24 };
25};
26
27&am33xx_pinmux {
28 pinctrl-names = "default";
29
30 i2c0_pins: pinmux_i2c0_pins {
31 pinctrl-single,pins = <
32 0x188 (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c0_sda.i2c0_sda */
33 0x18c (PIN_INPUT_PULLUP | MUX_MODE0) /* i2c0_scl.i2c0_scl */
34 >;
35 };
36
37 uart0_pins: pinmux_uart0_pins {
38 pinctrl-single,pins = <
39 0x170 (PIN_INPUT_PULLUP | MUX_MODE0) /* uart0_rxd.uart0_rxd */
40 0x174 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* uart0_txd.uart0_txd */
41 >;
42 };
43
44 cpsw_default: cpsw_default {
45 pinctrl-single,pins = <
46 /* Slave 1 */
47 0x10c (PIN_INPUT_PULLDOWN | MUX_MODE1) /* mii1_crs.rmii1_crs */
48 0x110 (PIN_INPUT_PULLUP | MUX_MODE1) /* mii1_rxerr.rmii1_rxerr */
49 0x114 (PIN_OUTPUT_PULLDOWN | MUX_MODE1) /* mii1_txen.rmii1_txen */
50 0x124 (PIN_OUTPUT_PULLDOWN | MUX_MODE1) /* mii1_txd1.rmii1_txd1 */
51 0x128 (PIN_OUTPUT_PULLDOWN | MUX_MODE1) /* mii1_txd0.rmii1_txd0 */
52 0x13c (PIN_INPUT_PULLUP | MUX_MODE1) /* mii1_rxd1.rmii1_rxd1 */
53 0x140 (PIN_INPUT_PULLUP | MUX_MODE1) /* mii1_rxd0.rmii1_rxd0 */
54 0x144 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* rmii1_ref_clk.rmii_ref_clk */
55 >;
56 };
57
58 cpsw_sleep: cpsw_sleep {
59 pinctrl-single,pins = <
60 /* Slave 1 reset value */
61 0x10c (PIN_INPUT_PULLDOWN | MUX_MODE7)
62 0x110 (PIN_INPUT_PULLDOWN | MUX_MODE7)
63 0x114 (PIN_INPUT_PULLDOWN | MUX_MODE7)
64 0x118 (PIN_INPUT_PULLDOWN | MUX_MODE7)
65 0x124 (PIN_INPUT_PULLDOWN | MUX_MODE7)
66 0x128 (PIN_INPUT_PULLDOWN | MUX_MODE7)
67 0x13c (PIN_INPUT_PULLDOWN | MUX_MODE7)
68 0x140 (PIN_INPUT_PULLDOWN | MUX_MODE7)
69 0x144 (PIN_INPUT_PULLDOWN | MUX_MODE7)
70 >;
71 };
72
73 davinci_mdio_default: davinci_mdio_default {
74 pinctrl-single,pins = <
75 /* mdio_data.mdio_data */
76 0x148 (PIN_INPUT_PULLUP | SLEWCTRL_FAST | MUX_MODE0)
77 /* mdio_clk.mdio_clk */
78 0x14c (PIN_OUTPUT_PULLUP | MUX_MODE0)
79 >;
80 };
81
82 davinci_mdio_sleep: davinci_mdio_sleep {
83 pinctrl-single,pins = <
84 /* MDIO reset value */
85 0x148 (PIN_INPUT_PULLDOWN | MUX_MODE7)
86 0x14c (PIN_INPUT_PULLDOWN | MUX_MODE7)
87 >;
88 };
89
90 nandflash_pins: nandflash_pins {
91 pinctrl-single,pins = <
92 0x00 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* gpmc_ad0.gpmc_ad0 */
93 0x04 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* gpmc_ad1.gpmc_ad1 */
94 0x08 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* gpmc_ad2.gpmc_ad2 */
95 0x0c (PIN_INPUT_PULLDOWN | MUX_MODE0) /* gpmc_ad3.gpmc_ad3 */
96 0x10 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* gpmc_ad4.gpmc_ad4 */
97 0x14 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* gpmc_ad5.gpmc_ad5 */
98 0x18 (PIN_INPUT_PULLDOWN | MUX_MODE0) /* gpmc_ad6.gpmc_ad6 */
99 0x1c (PIN_INPUT_PULLDOWN | MUX_MODE0) /* gpmc_ad7.gpmc_ad7 */
100
101 0x70 (PIN_INPUT_PULLUP | MUX_MODE0) /* gpmc_wait0.gpmc_wait0 */
102 0x7c (PIN_OUTPUT_PULLUP | MUX_MODE0) /* gpmc_csn0.gpmc_csn0 */
103 0x90 (PIN_OUTPUT_PULLUP | MUX_MODE0) /* gpmc_advn_ale.gpmc_advn_ale */
104 0x94 (PIN_OUTPUT_PULLUP | MUX_MODE0) /* gpmc_oen_ren.gpmc_oen_ren */
105 0x98 (PIN_OUTPUT_PULLUP | MUX_MODE0) /* gpmc_wen.gpmc_wen */
106 0x9c (PIN_OUTPUT_PULLUP | MUX_MODE0) /* gpmc_be0n_cle.gpmc_be0n_cle */
107 >;
108 };
109};
110
111&uart0 {
112 pinctrl-names = "default";
113 pinctrl-0 = <&uart0_pins>;
114
115 status = "okay";
116};
117
118&i2c0 {
119 pinctrl-names = "default";
120 pinctrl-0 = <&i2c0_pins>;
121
122 status = "okay";
123 clock-frequency = <400000>;
124
125 tps: tps@24 {
126 reg = <0x24>;
127 };
128
129};
130
131/include/ "tps65217.dtsi"
132
133&tps {
134 regulators {
135 dcdc1_reg: regulator@0 {
136 regulator-name = "vdds_dpr";
137 regulator-always-on;
138 };
139
140 dcdc2_reg: regulator@1 {
141 /* VDD_MPU voltage limits 0.95V - 1.26V with +/-4% tolerance */
142 regulator-name = "vdd_mpu";
143 regulator-min-microvolt = <925000>;
144 regulator-max-microvolt = <1325000>;
145 regulator-boot-on;
146 regulator-always-on;
147 };
148
149 dcdc3_reg: regulator@2 {
150 /* VDD_CORE voltage limits 0.95V - 1.1V with +/-4% tolerance */
151 regulator-name = "vdd_core";
152 regulator-min-microvolt = <925000>;
153 regulator-max-microvolt = <1150000>;
154 regulator-boot-on;
155 regulator-always-on;
156 };
157
158 ldo1_reg: regulator@3 {
159 regulator-name = "vio,vrtc,vdds";
160 regulator-boot-on;
161 regulator-always-on;
162 };
163
164 ldo2_reg: regulator@4 {
165 regulator-name = "vdd_3v3aux";
166 regulator-boot-on;
167 regulator-always-on;
168 };
169
170 ldo3_reg: regulator@5 {
171 regulator-name = "vdd_1v8";
172 regulator-boot-on;
173 regulator-always-on;
174 };
175
176 ldo4_reg: regulator@6 {
177 regulator-name = "vdd_3v3d";
178 regulator-boot-on;
179 regulator-always-on;
180 };
181 };
182};
183
184/* Ethernet MAC */
185&mac {
186 slaves = <1>;
187 pinctrl-names = "default", "sleep";
188 pinctrl-0 = <&cpsw_default>;
189 pinctrl-1 = <&cpsw_sleep>;
190 status = "okay";
191};
192
193&davinci_mdio {
194 pinctrl-names = "default", "sleep";
195 pinctrl-0 = <&davinci_mdio_default>;
196 pinctrl-1 = <&davinci_mdio_sleep>;
197 status = "okay";
198};
199
200/* NAND Flash */
201&elm {
202 status = "okay";
203};
204
205&gpmc {
206 status = "okay";
207 pinctrl-names = "default";
208 pinctrl-0 = <&nandflash_pins>;
209 ranges = <0 0 0x08000000 0x01000000>; /* CS0 0 @addr 0x08000000, size 0x01000000 */
210 nand@0,0 {
211 reg = <0 0 4>; /* CS0, offset 0, IO size 4 */
212 ti,nand-ecc-opt = "bch8";
213 ti,elm-id = <&elm>;
214 nand-bus-width = <8>;
215 gpmc,device-width = <1>;
216 gpmc,sync-clk-ps = <0>;
217 gpmc,cs-on-ns = <0>;
218 gpmc,cs-rd-off-ns = <44>;
219 gpmc,cs-wr-off-ns = <44>;
220 gpmc,adv-on-ns = <6>;
221 gpmc,adv-rd-off-ns = <34>;
222 gpmc,adv-wr-off-ns = <44>;
223 gpmc,we-on-ns = <0>;
224 gpmc,we-off-ns = <40>;
225 gpmc,oe-on-ns = <0>;
226 gpmc,oe-off-ns = <54>;
227 gpmc,access-ns = <64>;
228 gpmc,rd-cycle-ns = <82>;
229 gpmc,wr-cycle-ns = <82>;
230 gpmc,wait-on-read = "true";
231 gpmc,wait-on-write = "true";
232 gpmc,bus-turnaround-ns = <0>;
233 gpmc,cycle2cycle-delay-ns = <0>;
234 gpmc,clk-activation-ns = <0>;
235 gpmc,wait-monitoring-ns = <0>;
236 gpmc,wr-access-ns = <40>;
237 gpmc,wr-data-mux-bus-ns = <0>;
238 };
239};
diff --git a/arch/arm/boot/dts/am335x-nano.dts b/arch/arm/boot/dts/am335x-nano.dts
index a3466455b171..5ed4ca6eaf55 100644
--- a/arch/arm/boot/dts/am335x-nano.dts
+++ b/arch/arm/boot/dts/am335x-nano.dts
@@ -213,7 +213,9 @@
213 pinctrl-0 = <&i2c0_pins>; 213 pinctrl-0 = <&i2c0_pins>;
214 214
215 gpio@20 { 215 gpio@20 {
216 compatible = "mcp,mcp23017"; 216 compatible = "microchip,mcp23017";
217 gpio-controller;
218 #gpio-cells = <2>;
217 reg = <0x20>; 219 reg = <0x20>;
218 }; 220 };
219 221
@@ -222,7 +224,7 @@
222 }; 224 };
223 225
224 eeprom@53 { 226 eeprom@53 {
225 compatible = "mcp,24c02"; 227 compatible = "microchip,24c02";
226 reg = <0x53>; 228 reg = <0x53>;
227 pagesize = <8>; 229 pagesize = <8>;
228 }; 230 };
@@ -297,8 +299,8 @@
297 | |-->0x004FFFFF-> Kernel end 299 | |-->0x004FFFFF-> Kernel end
298 | |-->0x00500000-> File system start 300 | |-->0x00500000-> File system start
299 | | 301 | |
300 | |-->0x014FFFFF-> File system end 302 | |-->0x01FFFFFF-> File system end
301 | |-->0x01500000-> User data start 303 | |-->0x02000000-> User data start
302 | | 304 | |
303 | |-->0x03FFFFFF-> User data end 305 | |-->0x03FFFFFF-> User data end
304 | |-->0x04000000-> Data storage start 306 | |-->0x04000000-> Data storage start
@@ -327,12 +329,12 @@
327 329
328 partition@4 { 330 partition@4 {
329 label = "rootfs"; 331 label = "rootfs";
330 reg = <0x00500000 0x01000000>; /* 16MB */ 332 reg = <0x00500000 0x01b00000>; /* 27MB */
331 }; 333 };
332 334
333 partition@5 { 335 partition@5 {
334 label = "user"; 336 label = "user";
335 reg = <0x01500000 0x02b00000>; /* 43MB */ 337 reg = <0x02000000 0x02000000>; /* 32MB */
336 }; 338 };
337 339
338 partition@6 { 340 partition@6 {
@@ -343,7 +345,7 @@
343}; 345};
344 346
345&mac { 347&mac {
346 dual_emac = <1>; 348 dual_emac;
347 status = "okay"; 349 status = "okay";
348}; 350};
349 351
@@ -353,11 +355,13 @@
353 355
354&cpsw_emac0 { 356&cpsw_emac0 {
355 phy_id = <&davinci_mdio>, <0>; 357 phy_id = <&davinci_mdio>, <0>;
358 phy-mode = "mii";
356 dual_emac_res_vlan = <1>; 359 dual_emac_res_vlan = <1>;
357}; 360};
358 361
359&cpsw_emac1 { 362&cpsw_emac1 {
360 phy_id = <&davinci_mdio>, <1>; 363 phy_id = <&davinci_mdio>, <1>;
364 phy-mode = "mii";
361 dual_emac_res_vlan = <2>; 365 dual_emac_res_vlan = <2>;
362}; 366};
363 367
diff --git a/arch/arm/boot/dts/am33xx-clocks.dtsi b/arch/arm/boot/dts/am33xx-clocks.dtsi
index 712edce7d6fb..236c78a3c6ca 100644
--- a/arch/arm/boot/dts/am33xx-clocks.dtsi
+++ b/arch/arm/boot/dts/am33xx-clocks.dtsi
@@ -7,7 +7,7 @@
7 * it under the terms of the GNU General Public License version 2 as 7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation. 8 * published by the Free Software Foundation.
9 */ 9 */
10&scrm_clocks { 10&scm_clocks {
11 sys_clkin_ck: sys_clkin_ck { 11 sys_clkin_ck: sys_clkin_ck {
12 #clock-cells = <0>; 12 #clock-cells = <0>;
13 compatible = "ti,mux-clock"; 13 compatible = "ti,mux-clock";
diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi
index acd37057bca9..21fcc440fc1a 100644
--- a/arch/arm/boot/dts/am33xx.dtsi
+++ b/arch/arm/boot/dts/am33xx.dtsi
@@ -83,20 +83,6 @@
83 }; 83 };
84 }; 84 };
85 85
86 am33xx_control_module: control_module@4a002000 {
87 compatible = "syscon";
88 reg = <0x44e10000 0x7fc>;
89 };
90
91 am33xx_pinmux: pinmux@44e10800 {
92 compatible = "pinctrl-single";
93 reg = <0x44e10800 0x0238>;
94 #address-cells = <1>;
95 #size-cells = <0>;
96 pinctrl-single,register-width = <32>;
97 pinctrl-single,function-mask = <0x7f>;
98 };
99
100 /* 86 /*
101 * XXX: Use a flat representation of the AM33XX interconnect. 87 * XXX: Use a flat representation of the AM33XX interconnect.
102 * The real AM33XX interconnect network is quite complex. Since 88 * The real AM33XX interconnect network is quite complex. Since
@@ -111,37 +97,58 @@
111 ranges; 97 ranges;
112 ti,hwmods = "l3_main"; 98 ti,hwmods = "l3_main";
113 99
114 prcm: prcm@44e00000 { 100 l4_wkup: l4_wkup@44c00000 {
115 compatible = "ti,am3-prcm"; 101 compatible = "ti,am3-l4-wkup", "simple-bus";
116 reg = <0x44e00000 0x4000>; 102 #address-cells = <1>;
117 103 #size-cells = <1>;
118 prcm_clocks: clocks { 104 ranges = <0 0x44c00000 0x280000>;
119 #address-cells = <1>;
120 #size-cells = <0>;
121 };
122 105
123 prcm_clockdomains: clockdomains { 106 prcm: prcm@200000 {
124 }; 107 compatible = "ti,am3-prcm";
125 }; 108 reg = <0x200000 0x4000>;
126 109
127 scrm: scrm@44e10000 { 110 prcm_clocks: clocks {
128 compatible = "ti,am3-scrm"; 111 #address-cells = <1>;
129 reg = <0x44e10000 0x2000>; 112 #size-cells = <0>;
113 };
130 114
131 scrm_clocks: clocks { 115 prcm_clockdomains: clockdomains {
132 #address-cells = <1>; 116 };
133 #size-cells = <0>;
134 }; 117 };
135 118
136 scrm_clockdomains: clockdomains { 119 scm: scm@210000 {
120 compatible = "ti,am3-scm", "simple-bus";
121 reg = <0x210000 0x2000>;
122 #address-cells = <1>;
123 #size-cells = <1>;
124 ranges = <0 0x210000 0x2000>;
125
126 am33xx_pinmux: pinmux@800 {
127 compatible = "pinctrl-single";
128 reg = <0x800 0x238>;
129 #address-cells = <1>;
130 #size-cells = <0>;
131 pinctrl-single,register-width = <32>;
132 pinctrl-single,function-mask = <0x7f>;
133 };
134
135 scm_conf: scm_conf@0 {
136 compatible = "syscon";
137 reg = <0x0 0x800>;
138 #address-cells = <1>;
139 #size-cells = <1>;
140
141 scm_clocks: clocks {
142 #address-cells = <1>;
143 #size-cells = <0>;
144 };
145 };
146
147 scm_clockdomains: clockdomains {
148 };
137 }; 149 };
138 }; 150 };
139 151
140 cm: syscon@44e10000 {
141 compatible = "ti,am33xx-controlmodule", "syscon";
142 reg = <0x44e10000 0x800>;
143 };
144
145 intc: interrupt-controller@48200000 { 152 intc: interrupt-controller@48200000 {
146 compatible = "ti,am33xx-intc"; 153 compatible = "ti,am33xx-intc";
147 interrupt-controller; 154 interrupt-controller;
@@ -350,7 +357,7 @@
350 reg = <0x481cc000 0x2000>; 357 reg = <0x481cc000 0x2000>;
351 clocks = <&dcan0_fck>; 358 clocks = <&dcan0_fck>;
352 clock-names = "fck"; 359 clock-names = "fck";
353 syscon-raminit = <&am33xx_control_module 0x644 0>; 360 syscon-raminit = <&scm_conf 0x644 0>;
354 interrupts = <52>; 361 interrupts = <52>;
355 status = "disabled"; 362 status = "disabled";
356 }; 363 };
@@ -361,7 +368,7 @@
361 reg = <0x481d0000 0x2000>; 368 reg = <0x481d0000 0x2000>;
362 clocks = <&dcan1_fck>; 369 clocks = <&dcan1_fck>;
363 clock-names = "fck"; 370 clock-names = "fck";
364 syscon-raminit = <&am33xx_control_module 0x644 1>; 371 syscon-raminit = <&scm_conf 0x644 1>;
365 interrupts = <55>; 372 interrupts = <55>;
366 status = "disabled"; 373 status = "disabled";
367 }; 374 };
@@ -720,7 +727,7 @@
720 */ 727 */
721 interrupts = <40 41 42 43>; 728 interrupts = <40 41 42 43>;
722 ranges; 729 ranges;
723 syscon = <&cm>; 730 syscon = <&scm_conf>;
724 status = "disabled"; 731 status = "disabled";
725 732
726 davinci_mdio: mdio@4a101000 { 733 davinci_mdio: mdio@4a101000 {
diff --git a/arch/arm/boot/dts/am3517.dtsi b/arch/arm/boot/dts/am3517.dtsi
index c90724bded10..f164dce08755 100644
--- a/arch/arm/boot/dts/am3517.dtsi
+++ b/arch/arm/boot/dts/am3517.dtsi
@@ -31,7 +31,7 @@
31 status = "disabled"; 31 status = "disabled";
32 reg = <0x5c000000 0x30000>; 32 reg = <0x5c000000 0x30000>;
33 interrupts = <67 68 69 70>; 33 interrupts = <67 68 69 70>;
34 syscon = <&omap3_scm_general>; 34 syscon = <&scm_conf>;
35 ti,davinci-ctrl-reg-offset = <0x10000>; 35 ti,davinci-ctrl-reg-offset = <0x10000>;
36 ti,davinci-ctrl-mod-reg-offset = <0>; 36 ti,davinci-ctrl-mod-reg-offset = <0>;
37 ti,davinci-ctrl-ram-offset = <0x20000>; 37 ti,davinci-ctrl-ram-offset = <0x20000>;
diff --git a/arch/arm/boot/dts/am35xx-clocks.dtsi b/arch/arm/boot/dts/am35xx-clocks.dtsi
index df489d310b50..518b8fde88b0 100644
--- a/arch/arm/boot/dts/am35xx-clocks.dtsi
+++ b/arch/arm/boot/dts/am35xx-clocks.dtsi
@@ -7,7 +7,7 @@
7 * it under the terms of the GNU General Public License version 2 as 7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation. 8 * published by the Free Software Foundation.
9 */ 9 */
10&scrm_clocks { 10&scm_clocks {
11 emac_ick: emac_ick { 11 emac_ick: emac_ick {
12 #clock-cells = <0>; 12 #clock-cells = <0>;
13 compatible = "ti,am35xx-gate-clock"; 13 compatible = "ti,am35xx-gate-clock";
diff --git a/arch/arm/boot/dts/am4372.dtsi b/arch/arm/boot/dts/am4372.dtsi
index 1943fc333e7c..48c9bea8df10 100644
--- a/arch/arm/boot/dts/am4372.dtsi
+++ b/arch/arm/boot/dts/am4372.dtsi
@@ -57,22 +57,6 @@
57 cache-level = <2>; 57 cache-level = <2>;
58 }; 58 };
59 59
60 am43xx_control_module: control_module@4a002000 {
61 compatible = "syscon";
62 reg = <0x44e10000 0x7f4>;
63 };
64
65 am43xx_pinmux: pinmux@44e10800 {
66 compatible = "ti,am437-padconf", "pinctrl-single";
67 reg = <0x44e10800 0x31c>;
68 #address-cells = <1>;
69 #size-cells = <0>;
70 #interrupt-cells = <1>;
71 interrupt-controller;
72 pinctrl-single,register-width = <32>;
73 pinctrl-single,function-mask = <0xffffffff>;
74 };
75
76 ocp { 60 ocp {
77 compatible = "ti,am4372-l3-noc", "simple-bus"; 61 compatible = "ti,am4372-l3-noc", "simple-bus";
78 #address-cells = <1>; 62 #address-cells = <1>;
@@ -84,29 +68,58 @@
84 interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>, 68 interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>,
85 <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>; 69 <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
86 70
87 prcm: prcm@44df0000 { 71 l4_wkup: l4_wkup@44c00000 {
88 compatible = "ti,am4-prcm"; 72 compatible = "ti,am4-l4-wkup", "simple-bus";
89 reg = <0x44df0000 0x11000>; 73 #address-cells = <1>;
90 74 #size-cells = <1>;
91 prcm_clocks: clocks { 75 ranges = <0 0x44c00000 0x287000>;
92 #address-cells = <1>;
93 #size-cells = <0>;
94 };
95 76
96 prcm_clockdomains: clockdomains { 77 prcm: prcm@1f0000 {
97 }; 78 compatible = "ti,am4-prcm";
98 }; 79 reg = <0x1f0000 0x11000>;
99 80
100 scrm: scrm@44e10000 { 81 prcm_clocks: clocks {
101 compatible = "ti,am4-scrm"; 82 #address-cells = <1>;
102 reg = <0x44e10000 0x2000>; 83 #size-cells = <0>;
84 };
103 85
104 scrm_clocks: clocks { 86 prcm_clockdomains: clockdomains {
105 #address-cells = <1>; 87 };
106 #size-cells = <0>;
107 }; 88 };
108 89
109 scrm_clockdomains: clockdomains { 90 scm: scm@210000 {
91 compatible = "ti,am4-scm", "simple-bus";
92 reg = <0x210000 0x4000>;
93 #address-cells = <1>;
94 #size-cells = <1>;
95 ranges = <0 0x210000 0x4000>;
96
97 am43xx_pinmux: pinmux@800 {
98 compatible = "ti,am437-padconf",
99 "pinctrl-single";
100 reg = <0x800 0x31c>;
101 #address-cells = <1>;
102 #size-cells = <0>;
103 #interrupt-cells = <1>;
104 interrupt-controller;
105 pinctrl-single,register-width = <32>;
106 pinctrl-single,function-mask = <0xffffffff>;
107 };
108
109 scm_conf: scm_conf@0 {
110 compatible = "syscon";
111 reg = <0x0 0x800>;
112 #address-cells = <1>;
113 #size-cells = <1>;
114
115 scm_clocks: clocks {
116 #address-cells = <1>;
117 #size-cells = <0>;
118 };
119 };
120
121 scm_clockdomains: clockdomains {
122 };
110 }; 123 };
111 }; 124 };
112 125
@@ -787,7 +800,7 @@
787 }; 800 };
788 801
789 ocp2scp0: ocp2scp@483a8000 { 802 ocp2scp0: ocp2scp@483a8000 {
790 compatible = "ti,omap-ocp2scp"; 803 compatible = "ti,am437x-ocp2scp", "ti,omap-ocp2scp";
791 #address-cells = <1>; 804 #address-cells = <1>;
792 #size-cells = <1>; 805 #size-cells = <1>;
793 ranges; 806 ranges;
@@ -806,7 +819,7 @@
806 }; 819 };
807 820
808 ocp2scp1: ocp2scp@483e8000 { 821 ocp2scp1: ocp2scp@483e8000 {
809 compatible = "ti,omap-ocp2scp"; 822 compatible = "ti,am437x-ocp2scp", "ti,omap-ocp2scp";
810 #address-cells = <1>; 823 #address-cells = <1>;
811 #size-cells = <1>; 824 #size-cells = <1>;
812 ranges; 825 ranges;
@@ -884,7 +897,7 @@
884 }; 897 };
885 898
886 hdq: hdq@48347000 { 899 hdq: hdq@48347000 {
887 compatible = "ti,am43xx-hdq"; 900 compatible = "ti,am4372-hdq";
888 reg = <0x48347000 0x1000>; 901 reg = <0x48347000 0x1000>;
889 interrupts = <GIC_SPI 139 IRQ_TYPE_LEVEL_HIGH>; 902 interrupts = <GIC_SPI 139 IRQ_TYPE_LEVEL_HIGH>;
890 clocks = <&func_12m_clk>; 903 clocks = <&func_12m_clk>;
@@ -933,7 +946,7 @@
933 clocks = <&dcan0_fck>; 946 clocks = <&dcan0_fck>;
934 clock-names = "fck"; 947 clock-names = "fck";
935 reg = <0x481cc000 0x2000>; 948 reg = <0x481cc000 0x2000>;
936 syscon-raminit = <&am43xx_control_module 0x644 0>; 949 syscon-raminit = <&scm_conf 0x644 0>;
937 interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>; 950 interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;
938 status = "disabled"; 951 status = "disabled";
939 }; 952 };
@@ -944,7 +957,7 @@
944 clocks = <&dcan1_fck>; 957 clocks = <&dcan1_fck>;
945 clock-names = "fck"; 958 clock-names = "fck";
946 reg = <0x481d0000 0x2000>; 959 reg = <0x481d0000 0x2000>;
947 syscon-raminit = <&am43xx_control_module 0x644 1>; 960 syscon-raminit = <&scm_conf 0x644 1>;
948 interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>; 961 interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
949 status = "disabled"; 962 status = "disabled";
950 }; 963 };
diff --git a/arch/arm/boot/dts/am437x-idk-evm.dts b/arch/arm/boot/dts/am437x-idk-evm.dts
index f9a17e2ca8cb..378344271746 100644
--- a/arch/arm/boot/dts/am437x-idk-evm.dts
+++ b/arch/arm/boot/dts/am437x-idk-evm.dts
@@ -133,17 +133,17 @@
133 >; 133 >;
134 }; 134 };
135 135
136 i2c1_pins_default: i2c1_pins_default { 136 i2c2_pins_default: i2c2_pins_default {
137 pinctrl-single,pins = < 137 pinctrl-single,pins = <
138 0x15c (PIN_INPUT | SLEWCTRL_FAST | MUX_MODE2) /* spi0_cs0.i2c1_scl */ 138 0x1e8 (PIN_INPUT | SLEWCTRL_FAST | MUX_MODE3) /* cam1_data1.i2c2_scl */
139 0x158 (PIN_INPUT | SLEWCTRL_FAST | MUX_MODE2) /* spi0_d1.i2c1_sda */ 139 0x1ec (PIN_INPUT | SLEWCTRL_FAST | MUX_MODE3) /* cam1_data0.i2c2_sda */
140 >; 140 >;
141 }; 141 };
142 142
143 i2c1_pins_sleep: i2c1_pins_sleep { 143 i2c2_pins_sleep: i2c2_pins_sleep {
144 pinctrl-single,pins = < 144 pinctrl-single,pins = <
145 0x15c (PIN_INPUT_PULLDOWN | MUX_MODE7) /* spi0_cs0.i2c1_scl */ 145 0x1e8 (PIN_INPUT_PULLDOWN | MUX_MODE7)
146 0x158 (PIN_INPUT_PULLDOWN | MUX_MODE7) /* spi0_d1.i2c1_sda */ 146 0x1ec (PIN_INPUT_PULLDOWN | MUX_MODE7)
147 >; 147 >;
148 }; 148 };
149 149
@@ -254,7 +254,7 @@
254 status = "okay"; 254 status = "okay";
255 pinctrl-names = "default", "sleep"; 255 pinctrl-names = "default", "sleep";
256 pinctrl-0 = <&i2c0_pins_default>; 256 pinctrl-0 = <&i2c0_pins_default>;
257 pinctrl-1 = <&i2c0_pins_default>; 257 pinctrl-1 = <&i2c0_pins_sleep>;
258 clock-frequency = <400000>; 258 clock-frequency = <400000>;
259 259
260 at24@50 { 260 at24@50 {
@@ -262,17 +262,10 @@
262 pagesize = <64>; 262 pagesize = <64>;
263 reg = <0x50>; 263 reg = <0x50>;
264 }; 264 };
265};
266
267&i2c1 {
268 status = "okay";
269 pinctrl-names = "default", "sleep";
270 pinctrl-0 = <&i2c1_pins_default>;
271 pinctrl-1 = <&i2c1_pins_default>;
272 clock-frequency = <400000>;
273 265
274 tps: tps62362@60 { 266 tps: tps62362@60 {
275 compatible = "ti,tps62362"; 267 compatible = "ti,tps62362";
268 reg = <0x60>;
276 regulator-name = "VDD_MPU"; 269 regulator-name = "VDD_MPU";
277 regulator-min-microvolt = <950000>; 270 regulator-min-microvolt = <950000>;
278 regulator-max-microvolt = <1330000>; 271 regulator-max-microvolt = <1330000>;
@@ -284,6 +277,14 @@
284 }; 277 };
285}; 278};
286 279
280&i2c2 {
281 status = "okay";
282 pinctrl-names = "default", "sleep";
283 pinctrl-0 = <&i2c2_pins_default>;
284 pinctrl-1 = <&i2c2_pins_sleep>;
285 clock-frequency = <100000>;
286};
287
287&epwmss0 { 288&epwmss0 {
288 status = "okay"; 289 status = "okay";
289}; 290};
diff --git a/arch/arm/boot/dts/am43x-epos-evm.dts b/arch/arm/boot/dts/am43x-epos-evm.dts
index 257c099c347e..72f01bb5d61c 100644
--- a/arch/arm/boot/dts/am43x-epos-evm.dts
+++ b/arch/arm/boot/dts/am43x-epos-evm.dts
@@ -69,7 +69,48 @@
69 }; 69 };
70 }; 70 };
71 71
72 am43xx_pinmux: pinmux@44e10800 { 72 matrix_keypad: matrix_keypad@0 {
73 compatible = "gpio-matrix-keypad";
74 debounce-delay-ms = <5>;
75 col-scan-delay-us = <2>;
76
77 row-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH /* Bank0, pin12 */
78 &gpio0 13 GPIO_ACTIVE_HIGH /* Bank0, pin13 */
79 &gpio0 14 GPIO_ACTIVE_HIGH /* Bank0, pin14 */
80 &gpio0 15 GPIO_ACTIVE_HIGH>; /* Bank0, pin15 */
81
82 col-gpios = <&gpio3 9 GPIO_ACTIVE_HIGH /* Bank3, pin9 */
83 &gpio3 10 GPIO_ACTIVE_HIGH /* Bank3, pin10 */
84 &gpio2 18 GPIO_ACTIVE_HIGH /* Bank2, pin18 */
85 &gpio2 19 GPIO_ACTIVE_HIGH>; /* Bank2, pin19 */
86
87 linux,keymap = <0x00000201 /* P1 */
88 0x01000204 /* P4 */
89 0x02000207 /* P7 */
90 0x0300020a /* NUMERIC_STAR */
91 0x00010202 /* P2 */
92 0x01010205 /* P5 */
93 0x02010208 /* P8 */
94 0x03010200 /* P0 */
95 0x00020203 /* P3 */
96 0x01020206 /* P6 */
97 0x02020209 /* P9 */
98 0x0302020b /* NUMERIC_POUND */
99 0x00030067 /* UP */
100 0x0103006a /* RIGHT */
101 0x0203006c /* DOWN */
102 0x03030069>; /* LEFT */
103 };
104
105 backlight {
106 compatible = "pwm-backlight";
107 pwms = <&ecap0 0 50000 PWM_POLARITY_INVERTED>;
108 brightness-levels = <0 51 53 56 62 75 101 152 255>;
109 default-brightness-level = <8>;
110 };
111};
112
113&am43xx_pinmux {
73 cpsw_default: cpsw_default { 114 cpsw_default: cpsw_default {
74 pinctrl-single,pins = < 115 pinctrl-single,pins = <
75 /* Slave 1 */ 116 /* Slave 1 */
@@ -279,47 +320,6 @@
279 0x204 (DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7) 320 0x204 (DS0_PULL_UP_DOWN_EN | INPUT_EN | MUX_MODE7)
280 >; 321 >;
281 }; 322 };
282 };
283
284 matrix_keypad: matrix_keypad@0 {
285 compatible = "gpio-matrix-keypad";
286 debounce-delay-ms = <5>;
287 col-scan-delay-us = <2>;
288
289 row-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH /* Bank0, pin12 */
290 &gpio0 13 GPIO_ACTIVE_HIGH /* Bank0, pin13 */
291 &gpio0 14 GPIO_ACTIVE_HIGH /* Bank0, pin14 */
292 &gpio0 15 GPIO_ACTIVE_HIGH>; /* Bank0, pin15 */
293
294 col-gpios = <&gpio3 9 GPIO_ACTIVE_HIGH /* Bank3, pin9 */
295 &gpio3 10 GPIO_ACTIVE_HIGH /* Bank3, pin10 */
296 &gpio2 18 GPIO_ACTIVE_HIGH /* Bank2, pin18 */
297 &gpio2 19 GPIO_ACTIVE_HIGH>; /* Bank2, pin19 */
298
299 linux,keymap = <0x00000201 /* P1 */
300 0x01000204 /* P4 */
301 0x02000207 /* P7 */
302 0x0300020a /* NUMERIC_STAR */
303 0x00010202 /* P2 */
304 0x01010205 /* P5 */
305 0x02010208 /* P8 */
306 0x03010200 /* P0 */
307 0x00020203 /* P3 */
308 0x01020206 /* P6 */
309 0x02020209 /* P9 */
310 0x0302020b /* NUMERIC_POUND */
311 0x00030067 /* UP */
312 0x0103006a /* RIGHT */
313 0x0203006c /* DOWN */
314 0x03030069>; /* LEFT */
315 };
316
317 backlight {
318 compatible = "pwm-backlight";
319 pwms = <&ecap0 0 50000 PWM_POLARITY_INVERTED>;
320 brightness-levels = <0 51 53 56 62 75 101 152 255>;
321 default-brightness-level = <8>;
322 };
323}; 323};
324 324
325&mmc1 { 325&mmc1 {
diff --git a/arch/arm/boot/dts/am43xx-clocks.dtsi b/arch/arm/boot/dts/am43xx-clocks.dtsi
index c7dc9dab93a4..44869aa72642 100644
--- a/arch/arm/boot/dts/am43xx-clocks.dtsi
+++ b/arch/arm/boot/dts/am43xx-clocks.dtsi
@@ -7,7 +7,7 @@
7 * it under the terms of the GNU General Public License version 2 as 7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation. 8 * published by the Free Software Foundation.
9 */ 9 */
10&scrm_clocks { 10&scm_clocks {
11 sys_clkin_ck: sys_clkin_ck { 11 sys_clkin_ck: sys_clkin_ck {
12 #clock-cells = <0>; 12 #clock-cells = <0>;
13 compatible = "ti,mux-clock"; 13 compatible = "ti,mux-clock";
diff --git a/arch/arm/boot/dts/am57xx-beagle-x15.dts b/arch/arm/boot/dts/am57xx-beagle-x15.dts
index 03750af3b49a..6a3621c23017 100644
--- a/arch/arm/boot/dts/am57xx-beagle-x15.dts
+++ b/arch/arm/boot/dts/am57xx-beagle-x15.dts
@@ -8,7 +8,6 @@
8/dts-v1/; 8/dts-v1/;
9 9
10#include "dra74x.dtsi" 10#include "dra74x.dtsi"
11#include <dt-bindings/clk/ti-dra7-atl.h>
12#include <dt-bindings/gpio/gpio.h> 11#include <dt-bindings/gpio/gpio.h>
13#include <dt-bindings/interrupt-controller/irq.h> 12#include <dt-bindings/interrupt-controller/irq.h>
14 13
@@ -87,6 +86,7 @@
87 gpios = <&tps659038_gpio 1 GPIO_ACTIVE_HIGH>; 86 gpios = <&tps659038_gpio 1 GPIO_ACTIVE_HIGH>;
88 gpio-fan,speed-map = <0 0>, 87 gpio-fan,speed-map = <0 0>,
89 <13000 1>; 88 <13000 1>;
89 #cooling-cells = <2>;
90 }; 90 };
91 91
92 extcon_usb1: extcon_usb1 { 92 extcon_usb1: extcon_usb1 {
@@ -442,6 +442,7 @@
442 pinctrl-0 = <&tmp102_pins_default>; 442 pinctrl-0 = <&tmp102_pins_default>;
443 interrupt-parent = <&gpio7>; 443 interrupt-parent = <&gpio7>;
444 interrupts = <16 IRQ_TYPE_LEVEL_LOW>; 444 interrupts = <16 IRQ_TYPE_LEVEL_LOW>;
445 #thermal-sensor-cells = <1>;
445 }; 446 };
446}; 447};
447 448
@@ -560,3 +561,50 @@
560&usb2 { 561&usb2 {
561 dr_mode = "peripheral"; 562 dr_mode = "peripheral";
562}; 563};
564
565&cpu_trips {
566 cpu_alert1: cpu_alert1 {
567 temperature = <50000>; /* millicelsius */
568 hysteresis = <2000>; /* millicelsius */
569 type = "active";
570 };
571};
572
573&cpu_cooling_maps {
574 map1 {
575 trip = <&cpu_alert1>;
576 cooling-device = <&gpio_fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
577 };
578};
579
580&thermal_zones {
581 board_thermal: board_thermal {
582 polling-delay-passive = <1250>; /* milliseconds */
583 polling-delay = <1500>; /* milliseconds */
584
585 /* sensor ID */
586 thermal-sensors = <&tmp102 0>;
587
588 board_trips: trips {
589 board_alert0: board_alert {
590 temperature = <40000>; /* millicelsius */
591 hysteresis = <2000>; /* millicelsius */
592 type = "active";
593 };
594
595 board_crit: board_crit {
596 temperature = <105000>; /* millicelsius */
597 hysteresis = <0>; /* millicelsius */
598 type = "critical";
599 };
600 };
601
602 board_cooling_maps: cooling-maps {
603 map0 {
604 trip = <&board_alert0>;
605 cooling-device =
606 <&gpio_fan THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
607 };
608 };
609 };
610};
diff --git a/arch/arm/boot/dts/dm8168-evm.dts b/arch/arm/boot/dts/dm8168-evm.dts
index 857d0289ad4d..dee39c3f830f 100644
--- a/arch/arm/boot/dts/dm8168-evm.dts
+++ b/arch/arm/boot/dts/dm8168-evm.dts
@@ -29,10 +29,22 @@
29&dm816x_pinmux { 29&dm816x_pinmux {
30 mcspi1_pins: pinmux_mcspi1_pins { 30 mcspi1_pins: pinmux_mcspi1_pins {
31 pinctrl-single,pins = < 31 pinctrl-single,pins = <
32 DM816X_IOPAD(0x0a94, PIN_INPUT | MUX_MODE0) /* SPI_SCLK */ 32 DM816X_IOPAD(0x0a94, MUX_MODE0) /* SPI_SCLK */
33 DM816X_IOPAD(0x0a98, PIN_OUTPUT | MUX_MODE0) /* SPI_SCS0 */ 33 DM816X_IOPAD(0x0a98, MUX_MODE0) /* SPI_SCS0 */
34 DM816X_IOPAD(0x0aa8, PIN_INPUT | MUX_MODE0) /* SPI_D0 */ 34 DM816X_IOPAD(0x0aa8, MUX_MODE0) /* SPI_D0 */
35 DM816X_IOPAD(0x0aac, PIN_INPUT | MUX_MODE0) /* SPI_D1 */ 35 DM816X_IOPAD(0x0aac, MUX_MODE0) /* SPI_D1 */
36 >;
37 };
38
39 usb0_pins: pinmux_usb0_pins {
40 pinctrl-single,pins = <
41 DM816X_IOPAD(0x0d04, MUX_MODE0) /* USB0_DRVVBUS */
42 >;
43 };
44
45 usb1_pins: pinmux_usb1_pins {
46 pinctrl-single,pins = <
47 DM816X_IOPAD(0x0d08, MUX_MODE0) /* USB1_DRVVBUS */
36 >; 48 >;
37 }; 49 };
38}; 50};
@@ -127,3 +139,16 @@
127&mmc1 { 139&mmc1 {
128 vmmc-supply = <&vmmcsd_fixed>; 140 vmmc-supply = <&vmmcsd_fixed>;
129}; 141};
142
143/* At least dm8168-evm rev c won't support multipoint, later may */
144&usb0 {
145 pinctrl-names = "default";
146 pinctrl-0 = <&usb0_pins>;
147 mentor,multipoint = <0>;
148};
149
150&usb1 {
151 pinctrl-names = "default";
152 pinctrl-0 = <&usb1_pins>;
153 mentor,multipoint = <0>;
154};
diff --git a/arch/arm/boot/dts/dm816x.dtsi b/arch/arm/boot/dts/dm816x.dtsi
index d98d0f7de380..90c820715521 100644
--- a/arch/arm/boot/dts/dm816x.dtsi
+++ b/arch/arm/boot/dts/dm816x.dtsi
@@ -97,10 +97,31 @@
97 97
98 /* Device Configuration Registers */ 98 /* Device Configuration Registers */
99 scm_conf: syscon@600 { 99 scm_conf: syscon@600 {
100 compatible = "syscon"; 100 compatible = "syscon", "simple-bus";
101 reg = <0x600 0x110>; 101 reg = <0x600 0x110>;
102 #address-cells = <1>; 102 #address-cells = <1>;
103 #size-cells = <1>; 103 #size-cells = <1>;
104 ranges = <0 0x600 0x110>;
105
106 usb_phy0: usb-phy@20 {
107 compatible = "ti,dm8168-usb-phy";
108 reg = <0x20 0x8>;
109 reg-names = "phy";
110 clocks = <&main_fapll 6>;
111 clock-names = "refclk";
112 #phy-cells = <0>;
113 syscon = <&scm_conf>;
114 };
115
116 usb_phy1: usb-phy@28 {
117 compatible = "ti,dm8168-usb-phy";
118 reg = <0x28 0x8>;
119 reg-names = "phy";
120 clocks = <&main_fapll 6>;
121 clock-names = "refclk";
122 #phy-cells = <0>;
123 syscon = <&scm_conf>;
124 };
104 }; 125 };
105 126
106 scrm_clocks: clocks { 127 scrm_clocks: clocks {
@@ -357,26 +378,91 @@
357 reg-names = "mc", "control"; 378 reg-names = "mc", "control";
358 interrupts = <18>; 379 interrupts = <18>;
359 interrupt-names = "mc"; 380 interrupt-names = "mc";
360 dr_mode = "otg"; 381 dr_mode = "host";
382 interface-type = <0>;
383 phys = <&usb_phy0>;
384 phy-names = "usb2-phy";
361 mentor,multipoint = <1>; 385 mentor,multipoint = <1>;
362 mentor,num-eps = <16>; 386 mentor,num-eps = <16>;
363 mentor,ram-bits = <12>; 387 mentor,ram-bits = <12>;
364 mentor,power = <500>; 388 mentor,power = <500>;
389
390 dmas = <&cppi41dma 0 0 &cppi41dma 1 0
391 &cppi41dma 2 0 &cppi41dma 3 0
392 &cppi41dma 4 0 &cppi41dma 5 0
393 &cppi41dma 6 0 &cppi41dma 7 0
394 &cppi41dma 8 0 &cppi41dma 9 0
395 &cppi41dma 10 0 &cppi41dma 11 0
396 &cppi41dma 12 0 &cppi41dma 13 0
397 &cppi41dma 14 0 &cppi41dma 0 1
398 &cppi41dma 1 1 &cppi41dma 2 1
399 &cppi41dma 3 1 &cppi41dma 4 1
400 &cppi41dma 5 1 &cppi41dma 6 1
401 &cppi41dma 7 1 &cppi41dma 8 1
402 &cppi41dma 9 1 &cppi41dma 10 1
403 &cppi41dma 11 1 &cppi41dma 12 1
404 &cppi41dma 13 1 &cppi41dma 14 1>;
405 dma-names =
406 "rx1", "rx2", "rx3", "rx4", "rx5", "rx6", "rx7",
407 "rx8", "rx9", "rx10", "rx11", "rx12", "rx13",
408 "rx14", "rx15",
409 "tx1", "tx2", "tx3", "tx4", "tx5", "tx6", "tx7",
410 "tx8", "tx9", "tx10", "tx11", "tx12", "tx13",
411 "tx14", "tx15";
365 }; 412 };
366 413
367 usb1: usb@47401800 { 414 usb1: usb@47401800 {
368 compatible = "ti,musb-am33xx"; 415 compatible = "ti,musb-am33xx";
369 status = "disabled";
370 reg = <0x47401c00 0x400 416 reg = <0x47401c00 0x400
371 0x47401800 0x200>; 417 0x47401800 0x200>;
372 reg-names = "mc", "control"; 418 reg-names = "mc", "control";
373 interrupts = <19>; 419 interrupts = <19>;
374 interrupt-names = "mc"; 420 interrupt-names = "mc";
375 dr_mode = "otg"; 421 dr_mode = "host";
422 interface-type = <0>;
423 phys = <&usb_phy1>;
424 phy-names = "usb2-phy";
376 mentor,multipoint = <1>; 425 mentor,multipoint = <1>;
377 mentor,num-eps = <16>; 426 mentor,num-eps = <16>;
378 mentor,ram-bits = <12>; 427 mentor,ram-bits = <12>;
379 mentor,power = <500>; 428 mentor,power = <500>;
429
430 dmas = <&cppi41dma 15 0 &cppi41dma 16 0
431 &cppi41dma 17 0 &cppi41dma 18 0
432 &cppi41dma 19 0 &cppi41dma 20 0
433 &cppi41dma 21 0 &cppi41dma 22 0
434 &cppi41dma 23 0 &cppi41dma 24 0
435 &cppi41dma 25 0 &cppi41dma 26 0
436 &cppi41dma 27 0 &cppi41dma 28 0
437 &cppi41dma 29 0 &cppi41dma 15 1
438 &cppi41dma 16 1 &cppi41dma 17 1
439 &cppi41dma 18 1 &cppi41dma 19 1
440 &cppi41dma 20 1 &cppi41dma 21 1
441 &cppi41dma 22 1 &cppi41dma 23 1
442 &cppi41dma 24 1 &cppi41dma 25 1
443 &cppi41dma 26 1 &cppi41dma 27 1
444 &cppi41dma 28 1 &cppi41dma 29 1>;
445 dma-names =
446 "rx1", "rx2", "rx3", "rx4", "rx5", "rx6", "rx7",
447 "rx8", "rx9", "rx10", "rx11", "rx12", "rx13",
448 "rx14", "rx15",
449 "tx1", "tx2", "tx3", "tx4", "tx5", "tx6", "tx7",
450 "tx8", "tx9", "tx10", "tx11", "tx12", "tx13",
451 "tx14", "tx15";
452 };
453
454 cppi41dma: dma-controller@47402000 {
455 compatible = "ti,am3359-cppi41";
456 reg = <0x47400000 0x1000
457 0x47402000 0x1000
458 0x47403000 0x1000
459 0x47404000 0x4000>;
460 reg-names = "glue", "controller", "scheduler", "queuemgr";
461 interrupts = <17>;
462 interrupt-names = "glue";
463 #dma-cells = <2>;
464 #dma-channels = <30>;
465 #dma-requests = <256>;
380 }; 466 };
381 }; 467 };
382 468
diff --git a/arch/arm/boot/dts/dra7.dtsi b/arch/arm/boot/dts/dra7.dtsi
index 5827fedafd43..a3c32e8ee90f 100644
--- a/arch/arm/boot/dts/dra7.dtsi
+++ b/arch/arm/boot/dts/dra7.dtsi
@@ -94,17 +94,101 @@
94 interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>, 94 interrupts = <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>,
95 <GIC_SPI DIRECT_IRQ(10) IRQ_TYPE_LEVEL_HIGH>; 95 <GIC_SPI DIRECT_IRQ(10) IRQ_TYPE_LEVEL_HIGH>;
96 96
97 prm: prm@4ae06000 { 97 l4_cfg: l4@4a000000 {
98 compatible = "ti,dra7-prm"; 98 compatible = "ti,dra7-l4-cfg", "simple-bus";
99 reg = <0x4ae06000 0x3000>; 99 #address-cells = <1>;
100 interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>; 100 #size-cells = <1>;
101 ranges = <0 0x4a000000 0x22c000>;
101 102
102 prm_clocks: clocks { 103 scm: scm@2000 {
104 compatible = "ti,dra7-scm-core", "simple-bus";
105 reg = <0x2000 0x2000>;
103 #address-cells = <1>; 106 #address-cells = <1>;
104 #size-cells = <0>; 107 #size-cells = <1>;
108 ranges = <0 0x2000 0x2000>;
109
110 scm_conf: scm_conf@0 {
111 compatible = "syscon";
112 reg = <0x0 0x1400>;
113 #address-cells = <1>;
114 #size-cells = <1>;
115
116 pbias_regulator: pbias_regulator {
117 compatible = "ti,pbias-omap";
118 reg = <0xe00 0x4>;
119 syscon = <&scm_conf>;
120 pbias_mmc_reg: pbias_mmc_omap5 {
121 regulator-name = "pbias_mmc_omap5";
122 regulator-min-microvolt = <1800000>;
123 regulator-max-microvolt = <3000000>;
124 };
125 };
126 };
127
128 dra7_pmx_core: pinmux@1400 {
129 compatible = "ti,dra7-padconf",
130 "pinctrl-single";
131 reg = <0x1400 0x0464>;
132 #address-cells = <1>;
133 #size-cells = <0>;
134 #interrupt-cells = <1>;
135 interrupt-controller;
136 pinctrl-single,register-width = <32>;
137 pinctrl-single,function-mask = <0x3fffffff>;
138 };
139 };
140
141 cm_core_aon: cm_core_aon@5000 {
142 compatible = "ti,dra7-cm-core-aon";
143 reg = <0x5000 0x2000>;
144
145 cm_core_aon_clocks: clocks {
146 #address-cells = <1>;
147 #size-cells = <0>;
148 };
149
150 cm_core_aon_clockdomains: clockdomains {
151 };
152 };
153
154 cm_core: cm_core@8000 {
155 compatible = "ti,dra7-cm-core";
156 reg = <0x8000 0x3000>;
157
158 cm_core_clocks: clocks {
159 #address-cells = <1>;
160 #size-cells = <0>;
161 };
162
163 cm_core_clockdomains: clockdomains {
164 };
105 }; 165 };
166 };
106 167
107 prm_clockdomains: clockdomains { 168 l4_wkup: l4@4ae00000 {
169 compatible = "ti,dra7-l4-wkup", "simple-bus";
170 #address-cells = <1>;
171 #size-cells = <1>;
172 ranges = <0 0x4ae00000 0x3f000>;
173
174 counter32k: counter@4000 {
175 compatible = "ti,omap-counter32k";
176 reg = <0x4000 0x40>;
177 ti,hwmods = "counter_32k";
178 };
179
180 prm: prm@6000 {
181 compatible = "ti,dra7-prm";
182 reg = <0x6000 0x3000>;
183 interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
184
185 prm_clocks: clocks {
186 #address-cells = <1>;
187 #size-cells = <0>;
188 };
189
190 prm_clockdomains: clockdomains {
191 };
108 }; 192 };
109 }; 193 };
110 194
@@ -177,36 +261,16 @@
177 }; 261 };
178 }; 262 };
179 263
180 cm_core_aon: cm_core_aon@4a005000 { 264 bandgap: bandgap@4a0021e0 {
181 compatible = "ti,dra7-cm-core-aon"; 265 reg = <0x4a0021e0 0xc
182 reg = <0x4a005000 0x2000>; 266 0x4a00232c 0xc
183 267 0x4a002380 0x2c
184 cm_core_aon_clocks: clocks { 268 0x4a0023C0 0x3c
185 #address-cells = <1>; 269 0x4a002564 0x8
186 #size-cells = <0>; 270 0x4a002574 0x50>;
187 }; 271 compatible = "ti,dra752-bandgap";
188 272 interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>;
189 cm_core_aon_clockdomains: clockdomains { 273 #thermal-sensor-cells = <1>;
190 };
191 };
192
193 cm_core: cm_core@4a008000 {
194 compatible = "ti,dra7-cm-core";
195 reg = <0x4a008000 0x3000>;
196
197 cm_core_clocks: clocks {
198 #address-cells = <1>;
199 #size-cells = <0>;
200 };
201
202 cm_core_clockdomains: clockdomains {
203 };
204 };
205
206 counter32k: counter@4ae04000 {
207 compatible = "ti,omap-counter32k";
208 reg = <0x4ae04000 0x40>;
209 ti,hwmods = "counter_32k";
210 }; 274 };
211 275
212 dra7_ctrl_core: ctrl_core@4a002000 { 276 dra7_ctrl_core: ctrl_core@4a002000 {
@@ -219,28 +283,6 @@
219 reg = <0x4a002e00 0x7c>; 283 reg = <0x4a002e00 0x7c>;
220 }; 284 };
221 285
222 pbias_regulator: pbias_regulator {
223 compatible = "ti,pbias-omap";
224 reg = <0 0x4>;
225 syscon = <&dra7_ctrl_general>;
226 pbias_mmc_reg: pbias_mmc_omap5 {
227 regulator-name = "pbias_mmc_omap5";
228 regulator-min-microvolt = <1800000>;
229 regulator-max-microvolt = <3000000>;
230 };
231 };
232
233 dra7_pmx_core: pinmux@4a003400 {
234 compatible = "ti,dra7-padconf", "pinctrl-single";
235 reg = <0x4a003400 0x0464>;
236 #address-cells = <1>;
237 #size-cells = <0>;
238 #interrupt-cells = <1>;
239 interrupt-controller;
240 pinctrl-single,register-width = <32>;
241 pinctrl-single,function-mask = <0x3fffffff>;
242 };
243
244 sdma: dma-controller@4a056000 { 286 sdma: dma-controller@4a056000 {
245 compatible = "ti,omap4430-sdma"; 287 compatible = "ti,omap4430-sdma";
246 reg = <0x4a056000 0x1000>; 288 reg = <0x4a056000 0x1000>;
@@ -249,8 +291,8 @@
249 <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>, 291 <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>,
250 <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>; 292 <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
251 #dma-cells = <1>; 293 #dma-cells = <1>;
252 #dma-channels = <32>; 294 dma-channels = <32>;
253 #dma-requests = <127>; 295 dma-requests = <127>;
254 }; 296 };
255 297
256 gpio1: gpio@4ae10000 { 298 gpio1: gpio@4ae10000 {
@@ -658,7 +700,6 @@
658 reg = <0x48820000 0x80>; 700 reg = <0x48820000 0x80>;
659 interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>; 701 interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
660 ti,hwmods = "timer5"; 702 ti,hwmods = "timer5";
661 ti,timer-dsp;
662 }; 703 };
663 704
664 timer6: timer@48822000 { 705 timer6: timer@48822000 {
@@ -666,8 +707,6 @@
666 reg = <0x48822000 0x80>; 707 reg = <0x48822000 0x80>;
667 interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>; 708 interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>;
668 ti,hwmods = "timer6"; 709 ti,hwmods = "timer6";
669 ti,timer-dsp;
670 ti,timer-pwm;
671 }; 710 };
672 711
673 timer7: timer@48824000 { 712 timer7: timer@48824000 {
@@ -675,7 +714,6 @@
675 reg = <0x48824000 0x80>; 714 reg = <0x48824000 0x80>;
676 interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>; 715 interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
677 ti,hwmods = "timer7"; 716 ti,hwmods = "timer7";
678 ti,timer-dsp;
679 }; 717 };
680 718
681 timer8: timer@48826000 { 719 timer8: timer@48826000 {
@@ -683,8 +721,6 @@
683 reg = <0x48826000 0x80>; 721 reg = <0x48826000 0x80>;
684 interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>; 722 interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
685 ti,hwmods = "timer8"; 723 ti,hwmods = "timer8";
686 ti,timer-dsp;
687 ti,timer-pwm;
688 }; 724 };
689 725
690 timer9: timer@4803e000 { 726 timer9: timer@4803e000 {
@@ -706,7 +742,6 @@
706 reg = <0x48088000 0x80>; 742 reg = <0x48088000 0x80>;
707 interrupts = <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>; 743 interrupts = <GIC_SPI 42 IRQ_TYPE_LEVEL_HIGH>;
708 ti,hwmods = "timer11"; 744 ti,hwmods = "timer11";
709 ti,timer-pwm;
710 }; 745 };
711 746
712 timer13: timer@48828000 { 747 timer13: timer@48828000 {
@@ -1090,8 +1125,8 @@
1090 <0x4A096800 0x40>; /* pll_ctrl */ 1125 <0x4A096800 0x40>; /* pll_ctrl */
1091 reg-names = "phy_rx", "phy_tx", "pll_ctrl"; 1126 reg-names = "phy_rx", "phy_tx", "pll_ctrl";
1092 ctrl-module = <&omap_control_sata>; 1127 ctrl-module = <&omap_control_sata>;
1093 clocks = <&sys_clkin1>; 1128 clocks = <&sys_clkin1>, <&sata_ref_clk>;
1094 clock-names = "sysclk"; 1129 clock-names = "sysclk", "refclk";
1095 #phy-cells = <0>; 1130 #phy-cells = <0>;
1096 }; 1131 };
1097 1132
@@ -1410,7 +1445,7 @@
1410 compatible = "ti,dra7-d_can"; 1445 compatible = "ti,dra7-d_can";
1411 ti,hwmods = "dcan1"; 1446 ti,hwmods = "dcan1";
1412 reg = <0x4ae3c000 0x2000>; 1447 reg = <0x4ae3c000 0x2000>;
1413 syscon-raminit = <&dra7_ctrl_core 0x558 0>; 1448 syscon-raminit = <&scm_conf 0x558 0>;
1414 interrupts = <GIC_SPI 222 IRQ_TYPE_LEVEL_HIGH>; 1449 interrupts = <GIC_SPI 222 IRQ_TYPE_LEVEL_HIGH>;
1415 clocks = <&dcan1_sys_clk_mux>; 1450 clocks = <&dcan1_sys_clk_mux>;
1416 status = "disabled"; 1451 status = "disabled";
@@ -1420,12 +1455,23 @@
1420 compatible = "ti,dra7-d_can"; 1455 compatible = "ti,dra7-d_can";
1421 ti,hwmods = "dcan2"; 1456 ti,hwmods = "dcan2";
1422 reg = <0x48480000 0x2000>; 1457 reg = <0x48480000 0x2000>;
1423 syscon-raminit = <&dra7_ctrl_core 0x558 1>; 1458 syscon-raminit = <&scm_conf 0x558 1>;
1424 interrupts = <GIC_SPI 225 IRQ_TYPE_LEVEL_HIGH>; 1459 interrupts = <GIC_SPI 225 IRQ_TYPE_LEVEL_HIGH>;
1425 clocks = <&sys_clkin1>; 1460 clocks = <&sys_clkin1>;
1426 status = "disabled"; 1461 status = "disabled";
1427 }; 1462 };
1428 }; 1463 };
1464
1465 thermal_zones: thermal-zones {
1466 #include "omap4-cpu-thermal.dtsi"
1467 #include "omap5-gpu-thermal.dtsi"
1468 #include "omap5-core-thermal.dtsi"
1469 };
1470
1471};
1472
1473&cpu_thermal {
1474 polling-delay = <500>; /* milliseconds */
1429}; 1475};
1430 1476
1431/include/ "dra7xx-clocks.dtsi" 1477/include/ "dra7xx-clocks.dtsi"
diff --git a/arch/arm/boot/dts/dra72x.dtsi b/arch/arm/boot/dts/dra72x.dtsi
index e5a3d23a3df1..6ac8e3601499 100644
--- a/arch/arm/boot/dts/dra72x.dtsi
+++ b/arch/arm/boot/dts/dra72x.dtsi
@@ -20,6 +20,11 @@
20 device_type = "cpu"; 20 device_type = "cpu";
21 compatible = "arm,cortex-a15"; 21 compatible = "arm,cortex-a15";
22 reg = <0>; 22 reg = <0>;
23
24 /* cooling options */
25 cooling-min-level = <0>;
26 cooling-max-level = <2>;
27 #cooling-cells = <2>; /* min followed by max */
23 }; 28 };
24 }; 29 };
25 30
diff --git a/arch/arm/boot/dts/dra74x.dtsi b/arch/arm/boot/dts/dra74x.dtsi
index 10173fab1a15..eef981f4bcd5 100644
--- a/arch/arm/boot/dts/dra74x.dtsi
+++ b/arch/arm/boot/dts/dra74x.dtsi
@@ -31,6 +31,11 @@
31 clock-names = "cpu"; 31 clock-names = "cpu";
32 32
33 clock-latency = <300000>; /* From omap-cpufreq driver */ 33 clock-latency = <300000>; /* From omap-cpufreq driver */
34
35 /* cooling options */
36 cooling-min-level = <0>;
37 cooling-max-level = <2>;
38 #cooling-cells = <2>; /* min followed by max */
34 }; 39 };
35 cpu@1 { 40 cpu@1 {
36 device_type = "cpu"; 41 device_type = "cpu";
diff --git a/arch/arm/boot/dts/dra7xx-clocks.dtsi b/arch/arm/boot/dts/dra7xx-clocks.dtsi
index 4bdcbd61ce47..2a9994f73974 100644
--- a/arch/arm/boot/dts/dra7xx-clocks.dtsi
+++ b/arch/arm/boot/dts/dra7xx-clocks.dtsi
@@ -1421,6 +1421,14 @@
1421 ti,dividers = <1>, <8>; 1421 ti,dividers = <1>, <8>;
1422 }; 1422 };
1423 1423
1424 clkout2_clk: clkout2_clk {
1425 #clock-cells = <0>;
1426 compatible = "ti,gate-clock";
1427 clocks = <&clkoutmux2_clk_mux>;
1428 ti,bit-shift = <8>;
1429 reg = <0x06b0>;
1430 };
1431
1424 l3init_960m_gfclk: l3init_960m_gfclk { 1432 l3init_960m_gfclk: l3init_960m_gfclk {
1425 #clock-cells = <0>; 1433 #clock-cells = <0>;
1426 compatible = "ti,gate-clock"; 1434 compatible = "ti,gate-clock";
diff --git a/arch/arm/boot/dts/imx25-pdk.dts b/arch/arm/boot/dts/imx25-pdk.dts
index 9c21b1583762..dd45e6971bc3 100644
--- a/arch/arm/boot/dts/imx25-pdk.dts
+++ b/arch/arm/boot/dts/imx25-pdk.dts
@@ -75,6 +75,27 @@
75 mux-int-port = <1>; 75 mux-int-port = <1>;
76 mux-ext-port = <4>; 76 mux-ext-port = <4>;
77 }; 77 };
78
79 wvga: display {
80 model = "CLAA057VC01CW";
81 bits-per-pixel = <16>;
82 fsl,pcr = <0xfa208b80>;
83 bus-width = <18>;
84 native-mode = <&wvga_timings>;
85 display-timings {
86 wvga_timings: 640x480 {
87 hactive = <640>;
88 vactive = <480>;
89 hback-porch = <45>;
90 hfront-porch = <114>;
91 hsync-len = <1>;
92 vback-porch = <33>;
93 vfront-porch = <11>;
94 vsync-len = <1>;
95 clock-frequency = <25200000>;
96 };
97 };
98 };
78}; 99};
79 100
80&audmux { 101&audmux {
@@ -190,6 +211,33 @@
190 >; 211 >;
191 }; 212 };
192 213
214 pinctrl_lcd: lcdgrp {
215 fsl,pins = <
216 MX25_PAD_LD0__LD0 0xe0
217 MX25_PAD_LD1__LD1 0xe0
218 MX25_PAD_LD2__LD2 0xe0
219 MX25_PAD_LD3__LD3 0xe0
220 MX25_PAD_LD4__LD4 0xe0
221 MX25_PAD_LD5__LD5 0xe0
222 MX25_PAD_LD6__LD6 0xe0
223 MX25_PAD_LD7__LD7 0xe0
224 MX25_PAD_LD8__LD8 0xe0
225 MX25_PAD_LD9__LD9 0xe0
226 MX25_PAD_LD10__LD10 0xe0
227 MX25_PAD_LD11__LD11 0xe0
228 MX25_PAD_LD12__LD12 0xe0
229 MX25_PAD_LD13__LD13 0xe0
230 MX25_PAD_LD14__LD14 0xe0
231 MX25_PAD_LD15__LD15 0xe0
232 MX25_PAD_GPIO_E__LD16 0xe0
233 MX25_PAD_GPIO_F__LD17 0xe0
234 MX25_PAD_HSYNC__HSYNC 0xe0
235 MX25_PAD_VSYNC__VSYNC 0xe0
236 MX25_PAD_LSCLK__LSCLK 0xe0
237 MX25_PAD_OE_ACD__OE_ACD 0xe0
238 MX25_PAD_CONTRAST__CONTRAST 0xe0
239 >;
240 };
193 241
194 pinctrl_uart1: uart1grp { 242 pinctrl_uart1: uart1grp {
195 fsl,pins = < 243 fsl,pins = <
@@ -202,6 +250,16 @@
202 }; 250 };
203}; 251};
204 252
253&lcdc {
254 display = <&wvga>;
255 fsl,lpccr = <0x00a903ff>;
256 fsl,lscr1 = <0x00120300>;
257 fsl,dmacr = <0x00020010>;
258 pinctrl-names = "default";
259 pinctrl-0 = <&pinctrl_lcd>;
260 status = "okay";
261};
262
205&nfc { 263&nfc {
206 nand-on-flash-bbt; 264 nand-on-flash-bbt;
207 status = "okay"; 265 status = "okay";
diff --git a/arch/arm/boot/dts/imx25-pinfunc.h b/arch/arm/boot/dts/imx25-pinfunc.h
index 88eebb15da6a..7c4b9f2f9aad 100644
--- a/arch/arm/boot/dts/imx25-pinfunc.h
+++ b/arch/arm/boot/dts/imx25-pinfunc.h
@@ -17,48 +17,69 @@
17 * <mux_reg conf_reg input_reg mux_mode input_val> 17 * <mux_reg conf_reg input_reg mux_mode input_val>
18 */ 18 */
19 19
20#define MX25_PAD_TDO__TDO 0x000 0x3e8 0x000 0x00 0x000
21
20#define MX25_PAD_A10__A10 0x008 0x000 0x000 0x00 0x000 22#define MX25_PAD_A10__A10 0x008 0x000 0x000 0x00 0x000
21#define MX25_PAD_A10__GPIO_4_0 0x008 0x000 0x000 0x05 0x000 23#define MX25_PAD_A10__GPIO_4_0 0x008 0x000 0x000 0x05 0x000
22 24
23#define MX25_PAD_A13__A13 0x00c 0x22C 0x000 0x00 0x000 25#define MX25_PAD_A13__A13 0x00c 0x22C 0x000 0x00 0x000
24#define MX25_PAD_A13__GPIO_4_1 0x00c 0x22C 0x000 0x05 0x000 26#define MX25_PAD_A13__GPIO_4_1 0x00c 0x22C 0x000 0x05 0x000
27#define MX25_PAD_A13__LCDC_CLS 0x00c 0x22C 0x000 0x07 0x000
25 28
26#define MX25_PAD_A14__A14 0x010 0x230 0x000 0x10 0x000 29#define MX25_PAD_A14__A14 0x010 0x230 0x000 0x10 0x000
27#define MX25_PAD_A14__GPIO_2_0 0x010 0x230 0x000 0x15 0x000 30#define MX25_PAD_A14__GPIO_2_0 0x010 0x230 0x000 0x15 0x000
31#define MX25_PAD_A14__SIM1_CLK1 0x010 0x230 0x000 0x16 0x000
32#define MX25_PAD_A14__LCDC_SPL 0x010 0x230 0x000 0x17 0x000
28 33
29#define MX25_PAD_A15__A15 0x014 0x234 0x000 0x10 0x000 34#define MX25_PAD_A15__A15 0x014 0x234 0x000 0x10 0x000
30#define MX25_PAD_A15__GPIO_2_1 0x014 0x234 0x000 0x15 0x000 35#define MX25_PAD_A15__GPIO_2_1 0x014 0x234 0x000 0x15 0x000
36#define MX25_PAD_A15__SIM1_RST1 0x014 0x234 0x000 0x16 0x000
37#define MX25_PAD_A15__LCDC_PS 0x014 0x234 0x000 0x17 0x000
31 38
32#define MX25_PAD_A16__A16 0x018 0x000 0x000 0x10 0x000 39#define MX25_PAD_A16__A16 0x018 0x000 0x000 0x10 0x000
33#define MX25_PAD_A16__GPIO_2_2 0x018 0x000 0x000 0x15 0x000 40#define MX25_PAD_A16__GPIO_2_2 0x018 0x000 0x000 0x15 0x000
41#define MX25_PAD_A16__SIM1_VEN1 0x018 0x000 0x000 0x16 0x000
42#define MX25_PAD_A16__LCDC_REV 0x018 0x000 0x000 0x17 0x000
34 43
35#define MX25_PAD_A17__A17 0x01c 0x238 0x000 0x10 0x000 44#define MX25_PAD_A17__A17 0x01c 0x238 0x000 0x10 0x000
36#define MX25_PAD_A17__GPIO_2_3 0x01c 0x238 0x000 0x15 0x000 45#define MX25_PAD_A17__GPIO_2_3 0x01c 0x238 0x000 0x15 0x000
46#define MX25_PAD_A17__SIM1_TX 0x01c 0x238 0x554 0x16 0x000
47#define MX25_PAD_A17__FEC_TX_ERR 0x01c 0x238 0x000 0x17 0x000
37 48
38#define MX25_PAD_A18__A18 0x020 0x23c 0x000 0x10 0x000 49#define MX25_PAD_A18__A18 0x020 0x23c 0x000 0x10 0x000
39#define MX25_PAD_A18__GPIO_2_4 0x020 0x23c 0x000 0x15 0x000 50#define MX25_PAD_A18__GPIO_2_4 0x020 0x23c 0x000 0x15 0x000
51#define MX25_PAD_A18__SIM1_PD1 0x020 0x23c 0x550 0x16 0x000
40#define MX25_PAD_A18__FEC_COL 0x020 0x23c 0x504 0x17 0x000 52#define MX25_PAD_A18__FEC_COL 0x020 0x23c 0x504 0x17 0x000
41 53
42#define MX25_PAD_A19__A19 0x024 0x240 0x000 0x10 0x000 54#define MX25_PAD_A19__A19 0x024 0x240 0x000 0x10 0x000
43#define MX25_PAD_A19__FEC_RX_ER 0x024 0x240 0x518 0x17 0x000
44#define MX25_PAD_A19__GPIO_2_5 0x024 0x240 0x000 0x15 0x000 55#define MX25_PAD_A19__GPIO_2_5 0x024 0x240 0x000 0x15 0x000
56#define MX25_PAD_A19__SIM1_RX1 0x024 0x240 0x54c 0x16 0x000
57#define MX25_PAD_A19__FEC_RX_ERR 0x024 0x240 0x518 0x17 0x000
45 58
46#define MX25_PAD_A20__A20 0x028 0x244 0x000 0x10 0x000 59#define MX25_PAD_A20__A20 0x028 0x244 0x000 0x10 0x000
47#define MX25_PAD_A20__GPIO_2_6 0x028 0x244 0x000 0x15 0x000 60#define MX25_PAD_A20__GPIO_2_6 0x028 0x244 0x000 0x15 0x000
61#define MX25_PAD_A20__SIM2_CLK1 0x028 0x244 0x000 0x16 0x000
48#define MX25_PAD_A20__FEC_RDATA2 0x028 0x244 0x50c 0x17 0x000 62#define MX25_PAD_A20__FEC_RDATA2 0x028 0x244 0x50c 0x17 0x000
49 63
50#define MX25_PAD_A21__A21 0x02c 0x248 0x000 0x10 0x000 64#define MX25_PAD_A21__A21 0x02c 0x248 0x000 0x10 0x000
51#define MX25_PAD_A21__GPIO_2_7 0x02c 0x248 0x000 0x15 0x000 65#define MX25_PAD_A21__GPIO_2_7 0x02c 0x248 0x000 0x15 0x000
66#define MX25_PAD_A21__SIM2_RST1 0x02c 0x248 0x000 0x16 0x000
52#define MX25_PAD_A21__FEC_RDATA3 0x02c 0x248 0x510 0x17 0x000 67#define MX25_PAD_A21__FEC_RDATA3 0x02c 0x248 0x510 0x17 0x000
53 68
54#define MX25_PAD_A22__A22 0x030 0x000 0x000 0x10 0x000 69#define MX25_PAD_A22__A22 0x030 0x000 0x000 0x10 0x000
55#define MX25_PAD_A22__GPIO_2_8 0x030 0x000 0x000 0x15 0x000 70#define MX25_PAD_A22__GPIO_2_8 0x030 0x000 0x000 0x15 0x000
71#define MX25_PAD_A22__FEC_TDATA2 0x030 0x000 0x000 0x17 0x000
72#define MX25_PAD_A22__SIM2_VEN1 0x030 0x000 0x000 0x16 0x000
73#define MX25_PAD_A22__FEC_TDATA2 0x030 0x000 0x000 0x17 0x000
56 74
57#define MX25_PAD_A23__A23 0x034 0x24c 0x000 0x10 0x000 75#define MX25_PAD_A23__A23 0x034 0x24c 0x000 0x10 0x000
58#define MX25_PAD_A23__GPIO_2_9 0x034 0x24c 0x000 0x15 0x000 76#define MX25_PAD_A23__GPIO_2_9 0x034 0x24c 0x000 0x15 0x000
77#define MX25_PAD_A23__SIM2_TX1 0x034 0x24c 0x560 0x16 0x000
78#define MX25_PAD_A23__FEC_TDATA3 0x034 0x24c 0x000 0x17 0x000
59 79
60#define MX25_PAD_A24__A24 0x038 0x250 0x000 0x10 0x000 80#define MX25_PAD_A24__A24 0x038 0x250 0x000 0x10 0x000
61#define MX25_PAD_A24__GPIO_2_10 0x038 0x250 0x000 0x15 0x000 81#define MX25_PAD_A24__GPIO_2_10 0x038 0x250 0x000 0x15 0x000
82#define MX25_PAD_A24__SIM2_PD1 0x038 0x250 0x55c 0x16 0x000
62#define MX25_PAD_A24__FEC_RX_CLK 0x038 0x250 0x514 0x17 0x000 83#define MX25_PAD_A24__FEC_RX_CLK 0x038 0x250 0x514 0x17 0x000
63 84
64#define MX25_PAD_A25__A25 0x03c 0x254 0x000 0x10 0x000 85#define MX25_PAD_A25__A25 0x03c 0x254 0x000 0x10 0x000
@@ -133,20 +154,25 @@
133#define MX25_PAD_D15__D15 0x088 0x280 0x000 0x00 0x000 154#define MX25_PAD_D15__D15 0x088 0x280 0x000 0x00 0x000
134#define MX25_PAD_D15__LD16 0x088 0x280 0x000 0x01 0x000 155#define MX25_PAD_D15__LD16 0x088 0x280 0x000 0x01 0x000
135#define MX25_PAD_D15__GPIO_4_5 0x088 0x280 0x000 0x05 0x000 156#define MX25_PAD_D15__GPIO_4_5 0x088 0x280 0x000 0x05 0x000
157#define MX25_PAD_D15__SDHC1_DAT7 0x088 0x280 0x4d8 0x06 0x000
136 158
137#define MX25_PAD_D14__D14 0x08c 0x284 0x000 0x00 0x000 159#define MX25_PAD_D14__D14 0x08c 0x284 0x000 0x00 0x000
138#define MX25_PAD_D14__LD17 0x08c 0x284 0x000 0x01 0x000 160#define MX25_PAD_D14__LD17 0x08c 0x284 0x000 0x01 0x000
139#define MX25_PAD_D14__GPIO_4_6 0x08c 0x284 0x000 0x05 0x000 161#define MX25_PAD_D14__GPIO_4_6 0x08c 0x284 0x000 0x05 0x000
162#define MX25_PAD_D14__SDHC1_DAT6 0x08c 0x284 0x4d4 0x06 0x000
140 163
141#define MX25_PAD_D13__D13 0x090 0x288 0x000 0x00 0x000 164#define MX25_PAD_D13__D13 0x090 0x288 0x000 0x00 0x000
142#define MX25_PAD_D13__LD18 0x090 0x288 0x000 0x01 0x000 165#define MX25_PAD_D13__LD18 0x090 0x288 0x000 0x01 0x000
143#define MX25_PAD_D13__GPIO_4_7 0x090 0x288 0x000 0x05 0x000 166#define MX25_PAD_D13__GPIO_4_7 0x090 0x288 0x000 0x05 0x000
167#define MX25_PAD_D13__SDHC1_DAT5 0x090 0x288 0x4d0 0x06 0x000
144 168
145#define MX25_PAD_D12__D12 0x094 0x28c 0x000 0x00 0x000 169#define MX25_PAD_D12__D12 0x094 0x28c 0x000 0x00 0x000
146#define MX25_PAD_D12__GPIO_4_8 0x094 0x28c 0x000 0x05 0x000 170#define MX25_PAD_D12__GPIO_4_8 0x094 0x28c 0x000 0x05 0x000
171#define MX25_PAD_D12__SDHC1_DAT4 0x094 0x28c 0x4cc 0x06 0x000
147 172
148#define MX25_PAD_D11__D11 0x098 0x290 0x000 0x00 0x000 173#define MX25_PAD_D11__D11 0x098 0x290 0x000 0x00 0x000
149#define MX25_PAD_D11__GPIO_4_9 0x098 0x290 0x000 0x05 0x000 174#define MX25_PAD_D11__GPIO_4_9 0x098 0x290 0x000 0x05 0x000
175#define MX25_PAD_D11__USBOTG_PWR 0x098 0x290 0x000 0x06 0x000
150 176
151#define MX25_PAD_D10__D10 0x09c 0x294 0x000 0x00 0x000 177#define MX25_PAD_D10__D10 0x09c 0x294 0x000 0x00 0x000
152#define MX25_PAD_D10__GPIO_4_10 0x09c 0x294 0x000 0x05 0x000 178#define MX25_PAD_D10__GPIO_4_10 0x09c 0x294 0x000 0x05 0x000
@@ -212,26 +238,33 @@
212 238
213#define MX25_PAD_LD8__LD8 0x0e8 0x2e0 0x000 0x10 0x000 239#define MX25_PAD_LD8__LD8 0x0e8 0x2e0 0x000 0x10 0x000
214#define MX25_PAD_LD8__FEC_TX_ERR 0x0e8 0x2e0 0x000 0x15 0x000 240#define MX25_PAD_LD8__FEC_TX_ERR 0x0e8 0x2e0 0x000 0x15 0x000
241#define MX25_PAD_LD8__SDHC2_CMD 0x0e8 0x2e0 0x4e0 0x06 0x000
215 242
216#define MX25_PAD_LD9__LD9 0x0ec 0x2e4 0x000 0x10 0x000 243#define MX25_PAD_LD9__LD9 0x0ec 0x2e4 0x000 0x10 0x000
217#define MX25_PAD_LD9__FEC_COL 0x0ec 0x2e4 0x504 0x15 0x001 244#define MX25_PAD_LD9__FEC_COL 0x0ec 0x2e4 0x504 0x15 0x001
245#define MX25_PAD_LD9__SDHC2_CLK 0x0ec 0x2e4 0x4dc 0x06 0x000
218 246
219#define MX25_PAD_LD10__LD10 0x0f0 0x2e8 0x000 0x10 0x000 247#define MX25_PAD_LD10__LD10 0x0f0 0x2e8 0x000 0x10 0x000
220#define MX25_PAD_LD10__FEC_RX_ER 0x0f0 0x2e8 0x518 0x15 0x001 248#define MX25_PAD_LD10__FEC_RX_ERR 0x0f0 0x2e8 0x518 0x15 0x001
221 249
222#define MX25_PAD_LD11__LD11 0x0f4 0x2ec 0x000 0x10 0x000 250#define MX25_PAD_LD11__LD11 0x0f4 0x2ec 0x000 0x10 0x000
223#define MX25_PAD_LD11__FEC_RDATA2 0x0f4 0x2ec 0x50c 0x15 0x001 251#define MX25_PAD_LD11__FEC_RDATA2 0x0f4 0x2ec 0x50c 0x15 0x001
252#define MX25_PAD_LD11__SDHC2_DAT1 0x0f4 0x2ec 0x4e8 0x06 0x000
224 253
225#define MX25_PAD_LD12__LD12 0x0f8 0x2f0 0x000 0x10 0x000 254#define MX25_PAD_LD12__LD12 0x0f8 0x2f0 0x000 0x10 0x000
255#define MX25_PAD_LD12__CSPI2_MOSI 0x0f8 0x2f0 0x4a0 0x02 0x000
226#define MX25_PAD_LD12__FEC_RDATA3 0x0f8 0x2f0 0x510 0x15 0x001 256#define MX25_PAD_LD12__FEC_RDATA3 0x0f8 0x2f0 0x510 0x15 0x001
227 257
228#define MX25_PAD_LD13__LD13 0x0fc 0x2f4 0x000 0x10 0x000 258#define MX25_PAD_LD13__LD13 0x0fc 0x2f4 0x000 0x10 0x000
259#define MX25_PAD_LD13__CSPI2_MISO 0x0fc 0x2f4 0x49c 0x02 0x000
229#define MX25_PAD_LD13__FEC_TDATA2 0x0fc 0x2f4 0x000 0x15 0x000 260#define MX25_PAD_LD13__FEC_TDATA2 0x0fc 0x2f4 0x000 0x15 0x000
230 261
231#define MX25_PAD_LD14__LD14 0x100 0x2f8 0x000 0x10 0x000 262#define MX25_PAD_LD14__LD14 0x100 0x2f8 0x000 0x10 0x000
263#define MX25_PAD_LD14__CSPI2_SCLK 0x100 0x2f8 0x494 0x02 0x000
232#define MX25_PAD_LD14__FEC_TDATA3 0x100 0x2f8 0x000 0x15 0x000 264#define MX25_PAD_LD14__FEC_TDATA3 0x100 0x2f8 0x000 0x15 0x000
233 265
234#define MX25_PAD_LD15__LD15 0x104 0x2fc 0x000 0x10 0x000 266#define MX25_PAD_LD15__LD15 0x104 0x2fc 0x000 0x10 0x000
267#define MX25_PAD_LD15__CSPI2_RDY 0x104 0x2fc 0x498 0x02 0x000
235#define MX25_PAD_LD15__FEC_RX_CLK 0x104 0x2fc 0x514 0x15 0x001 268#define MX25_PAD_LD15__FEC_RX_CLK 0x104 0x2fc 0x514 0x15 0x001
236 269
237#define MX25_PAD_HSYNC__HSYNC 0x108 0x300 0x000 0x10 0x000 270#define MX25_PAD_HSYNC__HSYNC 0x108 0x300 0x000 0x10 0x000
@@ -244,6 +277,7 @@
244#define MX25_PAD_LSCLK__GPIO_1_24 0x110 0x308 0x000 0x15 0x000 277#define MX25_PAD_LSCLK__GPIO_1_24 0x110 0x308 0x000 0x15 0x000
245 278
246#define MX25_PAD_OE_ACD__OE_ACD 0x114 0x30c 0x000 0x10 0x000 279#define MX25_PAD_OE_ACD__OE_ACD 0x114 0x30c 0x000 0x10 0x000
280#define MX25_PAD_OE_ACD__CSPI2_SS0 0x114 0x30c 0x4a4 0x02 0x000
247#define MX25_PAD_OE_ACD__GPIO_1_25 0x114 0x30c 0x000 0x15 0x000 281#define MX25_PAD_OE_ACD__GPIO_1_25 0x114 0x30c 0x000 0x15 0x000
248 282
249#define MX25_PAD_CONTRAST__CONTRAST 0x118 0x310 0x000 0x10 0x000 283#define MX25_PAD_CONTRAST__CONTRAST 0x118 0x310 0x000 0x10 0x000
@@ -257,26 +291,31 @@
257 291
258#define MX25_PAD_CSI_D2__CSI_D2 0x120 0x318 0x000 0x10 0x000 292#define MX25_PAD_CSI_D2__CSI_D2 0x120 0x318 0x000 0x10 0x000
259#define MX25_PAD_CSI_D2__UART5_RXD_MUX 0x120 0x318 0x578 0x11 0x001 293#define MX25_PAD_CSI_D2__UART5_RXD_MUX 0x120 0x318 0x578 0x11 0x001
294#define MX25_PAD_CSI_D2__SIM1_CLK0 0x120 0x318 0x000 0x04 0x000
260#define MX25_PAD_CSI_D2__GPIO_1_27 0x120 0x318 0x000 0x15 0x000 295#define MX25_PAD_CSI_D2__GPIO_1_27 0x120 0x318 0x000 0x15 0x000
261#define MX25_PAD_CSI_D2__CSPI3_MOSI 0x120 0x318 0x000 0x17 0x000 296#define MX25_PAD_CSI_D2__CSPI3_MOSI 0x120 0x318 0x000 0x17 0x000
262 297
263#define MX25_PAD_CSI_D3__CSI_D3 0x124 0x31c 0x000 0x10 0x000 298#define MX25_PAD_CSI_D3__CSI_D3 0x124 0x31c 0x000 0x10 0x000
264#define MX25_PAD_CSI_D3__UART5_TXD_MUX 0x124 0x31c 0x000 0x11 0x000 299#define MX25_PAD_CSI_D3__UART5_TXD_MUX 0x124 0x31c 0x000 0x11 0x000
300#define MX25_PAD_CSI_D3__SIM1_RST0 0x124 0x31c 0x000 0x04 0x000
265#define MX25_PAD_CSI_D3__GPIO_1_28 0x124 0x31c 0x000 0x15 0x000 301#define MX25_PAD_CSI_D3__GPIO_1_28 0x124 0x31c 0x000 0x15 0x000
266#define MX25_PAD_CSI_D3__CSPI3_MISO 0x124 0x31c 0x4b4 0x17 0x001 302#define MX25_PAD_CSI_D3__CSPI3_MISO 0x124 0x31c 0x4b4 0x17 0x001
267 303
268#define MX25_PAD_CSI_D4__CSI_D4 0x128 0x320 0x000 0x10 0x000 304#define MX25_PAD_CSI_D4__CSI_D4 0x128 0x320 0x000 0x10 0x000
269#define MX25_PAD_CSI_D4__UART5_RTS 0x128 0x320 0x574 0x11 0x001 305#define MX25_PAD_CSI_D4__UART5_RTS 0x128 0x320 0x574 0x11 0x001
306#define MX25_PAD_CSI_D4__SIM1_VEN0 0x128 0x320 0x000 0x04 0x000
270#define MX25_PAD_CSI_D4__GPIO_1_29 0x128 0x320 0x000 0x15 0x000 307#define MX25_PAD_CSI_D4__GPIO_1_29 0x128 0x320 0x000 0x15 0x000
271#define MX25_PAD_CSI_D4__CSPI3_SCLK 0x128 0x320 0x000 0x17 0x000 308#define MX25_PAD_CSI_D4__CSPI3_SCLK 0x128 0x320 0x000 0x17 0x000
272 309
273#define MX25_PAD_CSI_D5__CSI_D5 0x12c 0x324 0x000 0x10 0x000 310#define MX25_PAD_CSI_D5__CSI_D5 0x12c 0x324 0x000 0x10 0x000
274#define MX25_PAD_CSI_D5__UART5_CTS 0x12c 0x324 0x000 0x11 0x001 311#define MX25_PAD_CSI_D5__UART5_CTS 0x12c 0x324 0x000 0x11 0x000
312#define MX25_PAD_CSI_D5__SIM1_TX0 0x12c 0x324 0x000 0x04 0x000
275#define MX25_PAD_CSI_D5__GPIO_1_30 0x12c 0x324 0x000 0x15 0x000 313#define MX25_PAD_CSI_D5__GPIO_1_30 0x12c 0x324 0x000 0x15 0x000
276#define MX25_PAD_CSI_D5__CSPI3_RDY 0x12c 0x324 0x000 0x17 0x000 314#define MX25_PAD_CSI_D5__CSPI3_RDY 0x12c 0x324 0x000 0x17 0x000
277 315
278#define MX25_PAD_CSI_D6__CSI_D6 0x130 0x328 0x000 0x10 0x000 316#define MX25_PAD_CSI_D6__CSI_D6 0x130 0x328 0x000 0x10 0x000
279#define MX25_PAD_CSI_D6__SDHC2_CMD 0x130 0x328 0x4e0 0x12 0x001 317#define MX25_PAD_CSI_D6__SDHC2_CMD 0x130 0x328 0x4e0 0x12 0x001
318#define MX25_PAD_CSI_D6__SIM1_PD0 0x130 0x328 0x000 0x04 0x000
280#define MX25_PAD_CSI_D6__GPIO_1_31 0x130 0x328 0x000 0x15 0x000 319#define MX25_PAD_CSI_D6__GPIO_1_31 0x130 0x328 0x000 0x15 0x000
281 320
282#define MX25_PAD_CSI_D7__CSI_D7 0x134 0x32c 0x000 0x10 0x000 321#define MX25_PAD_CSI_D7__CSI_D7 0x134 0x32c 0x000 0x10 0x000
@@ -284,32 +323,32 @@
284#define MX25_PAD_CSI_D7__GPIO_1_6 0x134 0x32c 0x000 0x15 0x000 323#define MX25_PAD_CSI_D7__GPIO_1_6 0x134 0x32c 0x000 0x15 0x000
285 324
286#define MX25_PAD_CSI_D8__CSI_D8 0x138 0x330 0x000 0x10 0x000 325#define MX25_PAD_CSI_D8__CSI_D8 0x138 0x330 0x000 0x10 0x000
287#define MX25_PAD_CSI_D8__AUD6_RXC 0x138 0x330 0x000 0x12 0x001 326#define MX25_PAD_CSI_D8__AUD6_RXC 0x138 0x330 0x000 0x12 0x000
288#define MX25_PAD_CSI_D8__GPIO_1_7 0x138 0x330 0x000 0x15 0x000 327#define MX25_PAD_CSI_D8__GPIO_1_7 0x138 0x330 0x000 0x15 0x000
289#define MX25_PAD_CSI_D8__CSPI3_SS2 0x138 0x330 0x4c4 0x17 0x000 328#define MX25_PAD_CSI_D8__CSPI3_SS2 0x138 0x330 0x4c4 0x17 0x000
290 329
291#define MX25_PAD_CSI_D9__CSI_D9 0x13c 0x334 0x000 0x10 0x000 330#define MX25_PAD_CSI_D9__CSI_D9 0x13c 0x334 0x000 0x10 0x000
292#define MX25_PAD_CSI_D9__AUD6_RXFS 0x13c 0x334 0x000 0x12 0x001 331#define MX25_PAD_CSI_D9__AUD6_RXFS 0x13c 0x334 0x000 0x12 0x000
293#define MX25_PAD_CSI_D9__GPIO_4_21 0x13c 0x334 0x000 0x15 0x000 332#define MX25_PAD_CSI_D9__GPIO_4_21 0x13c 0x334 0x000 0x15 0x000
294#define MX25_PAD_CSI_D9__CSPI3_SS3 0x13c 0x334 0x4c8 0x17 0x000 333#define MX25_PAD_CSI_D9__CSPI3_SS3 0x13c 0x334 0x4c8 0x17 0x000
295 334
296#define MX25_PAD_CSI_MCLK__CSI_MCLK 0x140 0x338 0x000 0x10 0x000 335#define MX25_PAD_CSI_MCLK__CSI_MCLK 0x140 0x338 0x000 0x10 0x000
297#define MX25_PAD_CSI_MCLK__AUD6_TXD 0x140 0x338 0x000 0x11 0x001 336#define MX25_PAD_CSI_MCLK__AUD6_TXD 0x140 0x338 0x000 0x11 0x000
298#define MX25_PAD_CSI_MCLK__SDHC2_DAT0 0x140 0x338 0x4e4 0x12 0x001 337#define MX25_PAD_CSI_MCLK__SDHC2_DAT0 0x140 0x338 0x4e4 0x12 0x001
299#define MX25_PAD_CSI_MCLK__GPIO_1_8 0x140 0x338 0x000 0x15 0x000 338#define MX25_PAD_CSI_MCLK__GPIO_1_8 0x140 0x338 0x000 0x15 0x000
300 339
301#define MX25_PAD_CSI_VSYNC__CSI_VSYNC 0x144 0x33c 0x000 0x10 0x000 340#define MX25_PAD_CSI_VSYNC__CSI_VSYNC 0x144 0x33c 0x000 0x10 0x000
302#define MX25_PAD_CSI_VSYNC__AUD6_RXD 0x144 0x33c 0x000 0x11 0x001 341#define MX25_PAD_CSI_VSYNC__AUD6_RXD 0x144 0x33c 0x000 0x11 0x000
303#define MX25_PAD_CSI_VSYNC__SDHC2_DAT1 0x144 0x33c 0x4e8 0x12 0x001 342#define MX25_PAD_CSI_VSYNC__SDHC2_DAT1 0x144 0x33c 0x4e8 0x12 0x001
304#define MX25_PAD_CSI_VSYNC__GPIO_1_9 0x144 0x33c 0x000 0x15 0x000 343#define MX25_PAD_CSI_VSYNC__GPIO_1_9 0x144 0x33c 0x000 0x15 0x000
305 344
306#define MX25_PAD_CSI_HSYNC__CSI_HSYNC 0x148 0x340 0x000 0x10 0x000 345#define MX25_PAD_CSI_HSYNC__CSI_HSYNC 0x148 0x340 0x000 0x10 0x000
307#define MX25_PAD_CSI_HSYNC__AUD6_TXC 0x148 0x340 0x000 0x11 0x001 346#define MX25_PAD_CSI_HSYNC__AUD6_TXC 0x148 0x340 0x000 0x11 0x000
308#define MX25_PAD_CSI_HSYNC__SDHC2_DAT2 0x148 0x340 0x4ec 0x12 0x001 347#define MX25_PAD_CSI_HSYNC__SDHC2_DAT2 0x148 0x340 0x4ec 0x12 0x001
309#define MX25_PAD_CSI_HSYNC__GPIO_1_10 0x148 0x340 0x000 0x15 0x000 348#define MX25_PAD_CSI_HSYNC__GPIO_1_10 0x148 0x340 0x000 0x15 0x000
310 349
311#define MX25_PAD_CSI_PIXCLK__CSI_PIXCLK 0x14c 0x344 0x000 0x10 0x000 350#define MX25_PAD_CSI_PIXCLK__CSI_PIXCLK 0x14c 0x344 0x000 0x10 0x000
312#define MX25_PAD_CSI_PIXCLK__AUD6_TXFS 0x14c 0x344 0x000 0x11 0x001 351#define MX25_PAD_CSI_PIXCLK__AUD6_TXFS 0x14c 0x344 0x000 0x11 0x000
313#define MX25_PAD_CSI_PIXCLK__SDHC2_DAT3 0x14c 0x344 0x4f0 0x12 0x001 352#define MX25_PAD_CSI_PIXCLK__SDHC2_DAT3 0x14c 0x344 0x4f0 0x12 0x001
314#define MX25_PAD_CSI_PIXCLK__GPIO_1_11 0x14c 0x344 0x000 0x15 0x000 353#define MX25_PAD_CSI_PIXCLK__GPIO_1_11 0x14c 0x344 0x000 0x15 0x000
315 354
@@ -369,8 +408,8 @@
369#define MX25_PAD_UART2_RTS__CC1 0x188 0x380 0x000 0x13 0x000 408#define MX25_PAD_UART2_RTS__CC1 0x188 0x380 0x000 0x13 0x000
370#define MX25_PAD_UART2_RTS__GPIO_4_28 0x188 0x380 0x000 0x15 0x000 409#define MX25_PAD_UART2_RTS__GPIO_4_28 0x188 0x380 0x000 0x15 0x000
371 410
372#define MX25_PAD_UART2_CTS__FEC_RX_ER 0x18c 0x384 0x518 0x12 0x002
373#define MX25_PAD_UART2_CTS__UART2_CTS 0x18c 0x384 0x000 0x10 0x000 411#define MX25_PAD_UART2_CTS__UART2_CTS 0x18c 0x384 0x000 0x10 0x000
412#define MX25_PAD_UART2_CTS__FEC_RX_ERR 0x18c 0x384 0x518 0x12 0x002
374#define MX25_PAD_UART2_CTS__GPIO_4_29 0x18c 0x384 0x000 0x15 0x000 413#define MX25_PAD_UART2_CTS__GPIO_4_29 0x18c 0x384 0x000 0x15 0x000
375 414
376#define MX25_PAD_SD1_CMD__SD1_CMD 0x190 0x388 0x000 0x10 0x000 415#define MX25_PAD_SD1_CMD__SD1_CMD 0x190 0x388 0x000 0x10 0x000
@@ -392,11 +431,11 @@
392#define MX25_PAD_SD1_DATA1__GPIO_2_26 0x19c 0x394 0x000 0x15 0x000 431#define MX25_PAD_SD1_DATA1__GPIO_2_26 0x19c 0x394 0x000 0x15 0x000
393 432
394#define MX25_PAD_SD1_DATA2__SD1_DATA2 0x1a0 0x398 0x000 0x10 0x000 433#define MX25_PAD_SD1_DATA2__SD1_DATA2 0x1a0 0x398 0x000 0x10 0x000
395#define MX25_PAD_SD1_DATA2__FEC_RX_CLK 0x1a0 0x398 0x514 0x15 0x002 434#define MX25_PAD_SD1_DATA2__FEC_RX_CLK 0x1a0 0x398 0x514 0x12 0x002
396#define MX25_PAD_SD1_DATA2__GPIO_2_27 0x1a0 0x398 0x000 0x15 0x000 435#define MX25_PAD_SD1_DATA2__GPIO_2_27 0x1a0 0x398 0x000 0x15 0x000
397 436
398#define MX25_PAD_SD1_DATA3__SD1_DATA3 0x1a4 0x39c 0x000 0x10 0x000 437#define MX25_PAD_SD1_DATA3__SD1_DATA3 0x1a4 0x39c 0x000 0x10 0x000
399#define MX25_PAD_SD1_DATA3__FEC_CRS 0x1a4 0x39c 0x508 0x10 0x002 438#define MX25_PAD_SD1_DATA3__FEC_CRS 0x1a4 0x39c 0x508 0x12 0x002
400#define MX25_PAD_SD1_DATA3__GPIO_2_28 0x1a4 0x39c 0x000 0x15 0x000 439#define MX25_PAD_SD1_DATA3__GPIO_2_28 0x1a4 0x39c 0x000 0x15 0x000
401 440
402#define MX25_PAD_KPP_ROW0__KPP_ROW0 0x1a8 0x3a0 0x000 0x10 0x000 441#define MX25_PAD_KPP_ROW0__KPP_ROW0 0x1a8 0x3a0 0x000 0x10 0x000
@@ -410,7 +449,7 @@
410#define MX25_PAD_KPP_ROW2__GPIO_2_31 0x1b0 0x3a8 0x000 0x15 0x000 449#define MX25_PAD_KPP_ROW2__GPIO_2_31 0x1b0 0x3a8 0x000 0x15 0x000
411 450
412#define MX25_PAD_KPP_ROW3__KPP_ROW3 0x1b4 0x3ac 0x000 0x10 0x000 451#define MX25_PAD_KPP_ROW3__KPP_ROW3 0x1b4 0x3ac 0x000 0x10 0x000
413#define MX25_PAD_KPP_ROW3__CSI_LD1 0x1b4 0x3ac 0x48c 0x13 0x002 452#define MX25_PAD_KPP_ROW3__CSI_D1 0x1b4 0x3ac 0x48c 0x13 0x002
414#define MX25_PAD_KPP_ROW3__GPIO_3_0 0x1b4 0x3ac 0x000 0x15 0x000 453#define MX25_PAD_KPP_ROW3__GPIO_3_0 0x1b4 0x3ac 0x000 0x15 0x000
415 454
416#define MX25_PAD_KPP_COL0__KPP_COL0 0x1b8 0x3b0 0x000 0x10 0x000 455#define MX25_PAD_KPP_COL0__KPP_COL0 0x1b8 0x3b0 0x000 0x10 0x000
@@ -455,9 +494,18 @@
455#define MX25_PAD_FEC_RDATA0__GPIO_3_10 0x1dc 0x3d4 0x000 0x15 0x000 494#define MX25_PAD_FEC_RDATA0__GPIO_3_10 0x1dc 0x3d4 0x000 0x15 0x000
456 495
457#define MX25_PAD_FEC_RDATA1__FEC_RDATA1 0x1e0 0x3d8 0x000 0x10 0x000 496#define MX25_PAD_FEC_RDATA1__FEC_RDATA1 0x1e0 0x3d8 0x000 0x10 0x000
497/*
498 * According to the i.MX25 Reference manual (IMX25RM, Rev. 2,
499 * 01/2011) this is CAN1_TX but that's wrong.
500 */
501#define MX25_PAD_FEC_RDATA1__CAN2_TX 0x1e0 0x3d8 0x000 0x14 0x000
458#define MX25_PAD_FEC_RDATA1__GPIO_3_11 0x1e0 0x3d8 0x000 0x15 0x000 502#define MX25_PAD_FEC_RDATA1__GPIO_3_11 0x1e0 0x3d8 0x000 0x15 0x000
459 503
460#define MX25_PAD_FEC_RX_DV__FEC_RX_DV 0x1e4 0x3dc 0x000 0x10 0x000 504#define MX25_PAD_FEC_RX_DV__FEC_RX_DV 0x1e4 0x3dc 0x000 0x10 0x000
505/*
506 * According to the i.MX25 Reference manual (IMX25RM, Rev. 2,
507 * 01/2011) this is CAN1_RX but that's wrong.
508 */
461#define MX25_PAD_FEC_RX_DV__CAN2_RX 0x1e4 0x3dc 0x484 0x14 0x000 509#define MX25_PAD_FEC_RX_DV__CAN2_RX 0x1e4 0x3dc 0x484 0x14 0x000
462#define MX25_PAD_FEC_RX_DV__GPIO_3_12 0x1e4 0x3dc 0x000 0x15 0x000 510#define MX25_PAD_FEC_RX_DV__GPIO_3_12 0x1e4 0x3dc 0x000 0x15 0x000
463 511
@@ -471,30 +519,34 @@
471#define MX25_PAD_DE_B__DE_B 0x1f0 0x3ec 0x000 0x10 0x000 519#define MX25_PAD_DE_B__DE_B 0x1f0 0x3ec 0x000 0x10 0x000
472#define MX25_PAD_DE_B__GPIO_2_20 0x1f0 0x3ec 0x000 0x15 0x000 520#define MX25_PAD_DE_B__GPIO_2_20 0x1f0 0x3ec 0x000 0x15 0x000
473 521
474#define MX25_PAD_TDO__TDO 0x000 0x3e8 0x000 0x00 0x000
475
476#define MX25_PAD_GPIO_A__GPIO_A 0x1f4 0x3f0 0x000 0x10 0x000 522#define MX25_PAD_GPIO_A__GPIO_A 0x1f4 0x3f0 0x000 0x10 0x000
477#define MX25_PAD_GPIO_A__CAN1_TX 0x1f4 0x3f0 0x000 0x16 0x000 523#define MX25_PAD_GPIO_A__CAN1_TX 0x1f4 0x3f0 0x000 0x16 0x000
478#define MX25_PAD_GPIO_A__USBOTG_PWR 0x1f4 0x3f0 0x000 0x12 0x000 524#define MX25_PAD_GPIO_A__USBOTG_PWR 0x1f4 0x3f0 0x000 0x12 0x000
479 525
480#define MX25_PAD_GPIO_B__GPIO_B 0x1f8 0x3f4 0x000 0x10 0x000 526#define MX25_PAD_GPIO_B__GPIO_B 0x1f8 0x3f4 0x000 0x10 0x000
481#define MX25_PAD_GPIO_B__CAN1_RX 0x1f8 0x3f4 0x480 0x16 0x001
482#define MX25_PAD_GPIO_B__USBOTG_OC 0x1f8 0x3f4 0x57c 0x12 0x001 527#define MX25_PAD_GPIO_B__USBOTG_OC 0x1f8 0x3f4 0x57c 0x12 0x001
528#define MX25_PAD_GPIO_B__CAN1_RX 0x1f8 0x3f4 0x480 0x16 0x001
483 529
484#define MX25_PAD_GPIO_C__GPIO_C 0x1fc 0x3f8 0x000 0x10 0x000 530#define MX25_PAD_GPIO_C__GPIO_C 0x1fc 0x3f8 0x000 0x10 0x000
531#define MX25_PAD_GPIO_C__PWM4_PWMO 0x1fc 0x3f8 0x000 0x11 0x000
532#define MX25_PAD_GPIO_C__I2C2_SCL 0x1fc 0x3f8 0x51c 0x12 0x001
533#define MX25_PAD_GPIO_C__KPP_COL4 0x1fc 0x3f8 0x52c 0x13 0x001
485#define MX25_PAD_GPIO_C__CAN2_TX 0x1fc 0x3f8 0x000 0x16 0x000 534#define MX25_PAD_GPIO_C__CAN2_TX 0x1fc 0x3f8 0x000 0x16 0x000
486 535
487#define MX25_PAD_GPIO_D__GPIO_D 0x200 0x3fc 0x000 0x10 0x000 536#define MX25_PAD_GPIO_D__GPIO_D 0x200 0x3fc 0x000 0x10 0x000
537#define MX25_PAD_GPIO_D__I2C2_SDA 0x200 0x3fc 0x520 0x12 0x001
488#define MX25_PAD_GPIO_D__CAN2_RX 0x200 0x3fc 0x484 0x16 0x001 538#define MX25_PAD_GPIO_D__CAN2_RX 0x200 0x3fc 0x484 0x16 0x001
489 539
490#define MX25_PAD_GPIO_E__GPIO_E 0x204 0x400 0x000 0x10 0x000 540#define MX25_PAD_GPIO_E__GPIO_E 0x204 0x400 0x000 0x10 0x000
491#define MX25_PAD_GPIO_E__I2C3_CLK 0x204 0x400 0x524 0x11 0x002 541#define MX25_PAD_GPIO_E__I2C3_CLK 0x204 0x400 0x524 0x11 0x002
492#define MX25_PAD_GPIO_E__LD16 0x204 0x400 0x000 0x12 0x000 542#define MX25_PAD_GPIO_E__LD16 0x204 0x400 0x000 0x12 0x000
493#define MX25_PAD_GPIO_E__AUD7_TXD 0x204 0x400 0x000 0x14 0x000 543#define MX25_PAD_GPIO_E__AUD7_TXD 0x204 0x400 0x000 0x14 0x000
544#define MX25_PAD_GPIO_E__UART4_RXD 0x204 0x400 0x570 0x16 0x002
494 545
495#define MX25_PAD_GPIO_F__GPIO_F 0x208 0x404 0x000 0x10 0x000 546#define MX25_PAD_GPIO_F__GPIO_F 0x208 0x404 0x000 0x10 0x000
496#define MX25_PAD_GPIO_F__LD17 0x208 0x404 0x000 0x12 0x000 547#define MX25_PAD_GPIO_F__LD17 0x208 0x404 0x000 0x12 0x000
497#define MX25_PAD_GPIO_F__AUD7_TXC 0x208 0x404 0x000 0x14 0x000 548#define MX25_PAD_GPIO_F__AUD7_TXC 0x208 0x404 0x000 0x14 0x000
549#define MX25_PAD_GPIO_F__UART4_TXD 0x208 0x404 0x000 0x16 0x000
498 550
499#define MX25_PAD_EXT_ARMCLK__EXT_ARMCLK 0x20c 0x000 0x000 0x10 0x000 551#define MX25_PAD_EXT_ARMCLK__EXT_ARMCLK 0x20c 0x000 0x000 0x10 0x000
500#define MX25_PAD_EXT_ARMCLK__GPIO_3_15 0x20c 0x000 0x000 0x15 0x000 552#define MX25_PAD_EXT_ARMCLK__GPIO_3_15 0x20c 0x000 0x000 0x15 0x000
@@ -505,6 +557,7 @@
505#define MX25_PAD_VSTBY_REQ__VSTBY_REQ 0x214 0x408 0x000 0x10 0x000 557#define MX25_PAD_VSTBY_REQ__VSTBY_REQ 0x214 0x408 0x000 0x10 0x000
506#define MX25_PAD_VSTBY_REQ__AUD7_TXFS 0x214 0x408 0x000 0x14 0x000 558#define MX25_PAD_VSTBY_REQ__AUD7_TXFS 0x214 0x408 0x000 0x14 0x000
507#define MX25_PAD_VSTBY_REQ__GPIO_3_17 0x214 0x408 0x000 0x15 0x000 559#define MX25_PAD_VSTBY_REQ__GPIO_3_17 0x214 0x408 0x000 0x15 0x000
560
508#define MX25_PAD_VSTBY_ACK__VSTBY_ACK 0x218 0x40c 0x000 0x10 0x000 561#define MX25_PAD_VSTBY_ACK__VSTBY_ACK 0x218 0x40c 0x000 0x10 0x000
509#define MX25_PAD_VSTBY_ACK__GPIO_3_18 0x218 0x40c 0x000 0x15 0x000 562#define MX25_PAD_VSTBY_ACK__GPIO_3_18 0x218 0x40c 0x000 0x15 0x000
510 563
@@ -517,6 +570,7 @@
517 570
518#define MX25_PAD_BOOT_MODE0__BOOT_MODE0 0x224 0x000 0x000 0x00 0x000 571#define MX25_PAD_BOOT_MODE0__BOOT_MODE0 0x224 0x000 0x000 0x00 0x000
519#define MX25_PAD_BOOT_MODE0__GPIO_4_30 0x224 0x000 0x000 0x05 0x000 572#define MX25_PAD_BOOT_MODE0__GPIO_4_30 0x224 0x000 0x000 0x05 0x000
573
520#define MX25_PAD_BOOT_MODE1__BOOT_MODE1 0x228 0x000 0x000 0x00 0x000 574#define MX25_PAD_BOOT_MODE1__BOOT_MODE1 0x228 0x000 0x000 0x00 0x000
521#define MX25_PAD_BOOT_MODE1__GPIO_4_31 0x228 0x000 0x000 0x05 0x000 575#define MX25_PAD_BOOT_MODE1__GPIO_4_31 0x228 0x000 0x000 0x05 0x000
522 576
diff --git a/arch/arm/boot/dts/imx27.dtsi b/arch/arm/boot/dts/imx27.dtsi
index 4b063b68db44..6951b66d1ab7 100644
--- a/arch/arm/boot/dts/imx27.dtsi
+++ b/arch/arm/boot/dts/imx27.dtsi
@@ -488,6 +488,7 @@
488 interrupts = <54>; 488 interrupts = <54>;
489 clocks = <&clks IMX27_CLK_USB_IPG_GATE>; 489 clocks = <&clks IMX27_CLK_USB_IPG_GATE>;
490 fsl,usbmisc = <&usbmisc 1>; 490 fsl,usbmisc = <&usbmisc 1>;
491 dr_mode = "host";
491 status = "disabled"; 492 status = "disabled";
492 }; 493 };
493 494
@@ -497,6 +498,7 @@
497 interrupts = <55>; 498 interrupts = <55>;
498 clocks = <&clks IMX27_CLK_USB_IPG_GATE>; 499 clocks = <&clks IMX27_CLK_USB_IPG_GATE>;
499 fsl,usbmisc = <&usbmisc 2>; 500 fsl,usbmisc = <&usbmisc 2>;
501 dr_mode = "host";
500 status = "disabled"; 502 status = "disabled";
501 }; 503 };
502 504
diff --git a/arch/arm/boot/dts/imx28-apf28.dts b/arch/arm/boot/dts/imx28-apf28.dts
index 7198fe3798c6..070e59cbdd8b 100644
--- a/arch/arm/boot/dts/imx28-apf28.dts
+++ b/arch/arm/boot/dts/imx28-apf28.dts
@@ -78,7 +78,7 @@
78 phy-mode = "rmii"; 78 phy-mode = "rmii";
79 pinctrl-names = "default"; 79 pinctrl-names = "default";
80 pinctrl-0 = <&mac0_pins_a>; 80 pinctrl-0 = <&mac0_pins_a>;
81 phy-reset-gpios = <&gpio4 13 0>; 81 phy-reset-gpios = <&gpio4 13 GPIO_ACTIVE_LOW>;
82 status = "okay"; 82 status = "okay";
83 }; 83 };
84 }; 84 };
diff --git a/arch/arm/boot/dts/imx28-apf28dev.dts b/arch/arm/boot/dts/imx28-apf28dev.dts
index 1f38a052ad4b..7ac4f1af16ac 100644
--- a/arch/arm/boot/dts/imx28-apf28dev.dts
+++ b/arch/arm/boot/dts/imx28-apf28dev.dts
@@ -110,6 +110,13 @@
110 }; 110 };
111 }; 111 };
112 }; 112 };
113
114 can0: can@80032000 {
115 pinctrl-names = "default";
116 pinctrl-0 = <&can0_pins_a>;
117 xceiver-supply = <&reg_can0_vcc>;
118 status = "okay";
119 };
113 }; 120 };
114 121
115 apbx@80040000 { 122 apbx@80040000 {
@@ -130,6 +137,13 @@
130 status = "okay"; 137 status = "okay";
131 }; 138 };
132 139
140 auart0: serial@8006a000 {
141 pinctrl-names = "default";
142 pinctrl-0 = <&auart0_pins_a>;
143 fsl,uart-has-rtscts;
144 status = "okay";
145 };
146
133 usbphy0: usbphy@8007c000 { 147 usbphy0: usbphy@8007c000 {
134 status = "okay"; 148 status = "okay";
135 }; 149 };
@@ -143,7 +157,8 @@
143 ahb@80080000 { 157 ahb@80080000 {
144 usb0: usb@80080000 { 158 usb0: usb@80080000 {
145 pinctrl-names = "default"; 159 pinctrl-names = "default";
146 pinctrl-0 = <&usb0_otg_apf28dev>; 160 pinctrl-0 = <&usb0_otg_apf28dev
161 &usb0_id_pins_b>;
147 vbus-supply = <&reg_usb0_vbus>; 162 vbus-supply = <&reg_usb0_vbus>;
148 status = "okay"; 163 status = "okay";
149 }; 164 };
@@ -156,7 +171,7 @@
156 phy-mode = "rmii"; 171 phy-mode = "rmii";
157 pinctrl-names = "default"; 172 pinctrl-names = "default";
158 pinctrl-0 = <&mac1_pins_a>; 173 pinctrl-0 = <&mac1_pins_a>;
159 phy-reset-gpios = <&gpio0 23 0>; 174 phy-reset-gpios = <&gpio1 29 GPIO_ACTIVE_LOW>;
160 status = "okay"; 175 status = "okay";
161 }; 176 };
162 }; 177 };
@@ -175,6 +190,14 @@
175 gpio = <&gpio1 23 1>; 190 gpio = <&gpio1 23 1>;
176 enable-active-high; 191 enable-active-high;
177 }; 192 };
193
194 reg_can0_vcc: regulator@1 {
195 compatible = "regulator-fixed";
196 reg = <1>;
197 regulator-name = "can0_vcc";
198 regulator-min-microvolt = <5000000>;
199 regulator-max-microvolt = <5000000>;
200 };
178 }; 201 };
179 202
180 leds { 203 leds {
@@ -200,8 +223,9 @@
200 223
201 user-button { 224 user-button {
202 label = "User button"; 225 label = "User button";
203 gpios = <&gpio0 17 0>; 226 gpios = <&gpio0 17 GPIO_ACTIVE_LOW>;
204 linux,code = <0x100>; 227 linux,code = <0x100>;
228 gpio-key,wakeup;
205 }; 229 };
206 }; 230 };
207}; 231};
diff --git a/arch/arm/boot/dts/imx28.dtsi b/arch/arm/boot/dts/imx28.dtsi
index 47f68ac868d4..25e25f82fbae 100644
--- a/arch/arm/boot/dts/imx28.dtsi
+++ b/arch/arm/boot/dts/imx28.dtsi
@@ -829,6 +829,19 @@
829 fsl,pull-up = <MXS_PULL_DISABLE>; 829 fsl,pull-up = <MXS_PULL_DISABLE>;
830 }; 830 };
831 831
832 spi3_pins_b: spi3@1 {
833 reg = <1>;
834 fsl,pinmux-ids = <
835 MX28_PAD_SSP3_SCK__SSP3_SCK
836 MX28_PAD_SSP3_MOSI__SSP3_CMD
837 MX28_PAD_SSP3_MISO__SSP3_D0
838 MX28_PAD_SSP3_SS0__SSP3_D3
839 >;
840 fsl,drive-strength = <MXS_DRIVE_8mA>;
841 fsl,voltage = <MXS_VOLTAGE_HIGH>;
842 fsl,pull-up = <MXS_PULL_ENABLE>;
843 };
844
832 usb0_pins_a: usb0@0 { 845 usb0_pins_a: usb0@0 {
833 reg = <0>; 846 reg = <0>;
834 fsl,pinmux-ids = < 847 fsl,pinmux-ids = <
@@ -1197,6 +1210,7 @@
1197 interrupts = <92>; 1210 interrupts = <92>;
1198 clocks = <&clks 61>; 1211 clocks = <&clks 61>;
1199 fsl,usbphy = <&usbphy1>; 1212 fsl,usbphy = <&usbphy1>;
1213 dr_mode = "host";
1200 status = "disabled"; 1214 status = "disabled";
1201 }; 1215 };
1202 1216
diff --git a/arch/arm/boot/dts/imx35.dtsi b/arch/arm/boot/dts/imx35.dtsi
index 6932928f3b45..b6478e97d6a7 100644
--- a/arch/arm/boot/dts/imx35.dtsi
+++ b/arch/arm/boot/dts/imx35.dtsi
@@ -318,6 +318,7 @@
318 clocks = <&clks 73>; 318 clocks = <&clks 73>;
319 fsl,usbmisc = <&usbmisc 1>; 319 fsl,usbmisc = <&usbmisc 1>;
320 fsl,usbphy = <&usbphy1>; 320 fsl,usbphy = <&usbphy1>;
321 dr_mode = "host";
321 status = "disabled"; 322 status = "disabled";
322 }; 323 };
323 324
diff --git a/arch/arm/boot/dts/imx50.dtsi b/arch/arm/boot/dts/imx50.dtsi
index 620b0f030591..e2457138311f 100644
--- a/arch/arm/boot/dts/imx50.dtsi
+++ b/arch/arm/boot/dts/imx50.dtsi
@@ -197,6 +197,7 @@
197 reg = <0x53f80200 0x0200>; 197 reg = <0x53f80200 0x0200>;
198 interrupts = <14>; 198 interrupts = <14>;
199 clocks = <&clks IMX5_CLK_USB_PHY2_GATE>; 199 clocks = <&clks IMX5_CLK_USB_PHY2_GATE>;
200 dr_mode = "host";
200 status = "disabled"; 201 status = "disabled";
201 }; 202 };
202 203
@@ -205,6 +206,7 @@
205 reg = <0x53f80400 0x0200>; 206 reg = <0x53f80400 0x0200>;
206 interrupts = <16>; 207 interrupts = <16>;
207 clocks = <&clks IMX5_CLK_USBOH3_GATE>; 208 clocks = <&clks IMX5_CLK_USBOH3_GATE>;
209 dr_mode = "host";
208 status = "disabled"; 210 status = "disabled";
209 }; 211 };
210 212
@@ -213,6 +215,7 @@
213 reg = <0x53f80600 0x0200>; 215 reg = <0x53f80600 0x0200>;
214 interrupts = <17>; 216 interrupts = <17>;
215 clocks = <&clks IMX5_CLK_USBOH3_GATE>; 217 clocks = <&clks IMX5_CLK_USBOH3_GATE>;
218 dr_mode = "host";
216 status = "disabled"; 219 status = "disabled";
217 }; 220 };
218 221
diff --git a/arch/arm/boot/dts/imx51.dtsi b/arch/arm/boot/dts/imx51.dtsi
index c0116cffc513..f46fe9bf0bcb 100644
--- a/arch/arm/boot/dts/imx51.dtsi
+++ b/arch/arm/boot/dts/imx51.dtsi
@@ -265,6 +265,7 @@
265 interrupts = <14>; 265 interrupts = <14>;
266 clocks = <&clks IMX5_CLK_USBOH3_GATE>; 266 clocks = <&clks IMX5_CLK_USBOH3_GATE>;
267 fsl,usbmisc = <&usbmisc 1>; 267 fsl,usbmisc = <&usbmisc 1>;
268 dr_mode = "host";
268 status = "disabled"; 269 status = "disabled";
269 }; 270 };
270 271
@@ -274,6 +275,7 @@
274 interrupts = <16>; 275 interrupts = <16>;
275 clocks = <&clks IMX5_CLK_USBOH3_GATE>; 276 clocks = <&clks IMX5_CLK_USBOH3_GATE>;
276 fsl,usbmisc = <&usbmisc 2>; 277 fsl,usbmisc = <&usbmisc 2>;
278 dr_mode = "host";
277 status = "disabled"; 279 status = "disabled";
278 }; 280 };
279 281
@@ -283,6 +285,7 @@
283 interrupts = <17>; 285 interrupts = <17>;
284 clocks = <&clks IMX5_CLK_USBOH3_GATE>; 286 clocks = <&clks IMX5_CLK_USBOH3_GATE>;
285 fsl,usbmisc = <&usbmisc 3>; 287 fsl,usbmisc = <&usbmisc 3>;
288 dr_mode = "host";
286 status = "disabled"; 289 status = "disabled";
287 }; 290 };
288 291
diff --git a/arch/arm/boot/dts/imx53.dtsi b/arch/arm/boot/dts/imx53.dtsi
index ff4fa7ecacd8..c3e3ca9362fb 100644
--- a/arch/arm/boot/dts/imx53.dtsi
+++ b/arch/arm/boot/dts/imx53.dtsi
@@ -309,6 +309,7 @@
309 clocks = <&clks IMX5_CLK_USBOH3_GATE>; 309 clocks = <&clks IMX5_CLK_USBOH3_GATE>;
310 fsl,usbmisc = <&usbmisc 1>; 310 fsl,usbmisc = <&usbmisc 1>;
311 fsl,usbphy = <&usbphy1>; 311 fsl,usbphy = <&usbphy1>;
312 dr_mode = "host";
312 status = "disabled"; 313 status = "disabled";
313 }; 314 };
314 315
@@ -318,6 +319,7 @@
318 interrupts = <16>; 319 interrupts = <16>;
319 clocks = <&clks IMX5_CLK_USBOH3_GATE>; 320 clocks = <&clks IMX5_CLK_USBOH3_GATE>;
320 fsl,usbmisc = <&usbmisc 2>; 321 fsl,usbmisc = <&usbmisc 2>;
322 dr_mode = "host";
321 status = "disabled"; 323 status = "disabled";
322 }; 324 };
323 325
@@ -327,6 +329,7 @@
327 interrupts = <17>; 329 interrupts = <17>;
328 clocks = <&clks IMX5_CLK_USBOH3_GATE>; 330 clocks = <&clks IMX5_CLK_USBOH3_GATE>;
329 fsl,usbmisc = <&usbmisc 3>; 331 fsl,usbmisc = <&usbmisc 3>;
332 dr_mode = "host";
330 status = "disabled"; 333 status = "disabled";
331 }; 334 };
332 335
diff --git a/arch/arm/boot/dts/imx6dl-aristainetos_4.dts b/arch/arm/boot/dts/imx6dl-aristainetos_4.dts
index 9cd06e5e59f0..d4c4a22db488 100644
--- a/arch/arm/boot/dts/imx6dl-aristainetos_4.dts
+++ b/arch/arm/boot/dts/imx6dl-aristainetos_4.dts
@@ -83,3 +83,7 @@
83&ipu1_di0_disp0 { 83&ipu1_di0_disp0 {
84 remote-endpoint = <&display0_in>; 84 remote-endpoint = <&display0_in>;
85}; 85};
86
87&pwm1 {
88 status = "okay";
89};
diff --git a/arch/arm/boot/dts/imx6dl-aristainetos_7.dts b/arch/arm/boot/dts/imx6dl-aristainetos_7.dts
index b413e24288dc..15203f0e9725 100644
--- a/arch/arm/boot/dts/imx6dl-aristainetos_7.dts
+++ b/arch/arm/boot/dts/imx6dl-aristainetos_7.dts
@@ -72,3 +72,7 @@
72&ipu1_di0_disp0 { 72&ipu1_di0_disp0 {
73 remote-endpoint = <&display0_in>; 73 remote-endpoint = <&display0_in>;
74}; 74};
75
76&pwm3 {
77 status = "okay";
78};
diff --git a/arch/arm/boot/dts/imx6dl-cubox-i.dts b/arch/arm/boot/dts/imx6dl-cubox-i.dts
index 58aa8f2b0f26..e0b7fe8e18f8 100644
--- a/arch/arm/boot/dts/imx6dl-cubox-i.dts
+++ b/arch/arm/boot/dts/imx6dl-cubox-i.dts
@@ -1,5 +1,43 @@
1/* 1/*
2 * Copyright (C) 2014 Russell King 2 * Copyright (C) 2014 Russell King
3 *
4 * This file is dual-licensed: you can use it either under the terms
5 * of the GPL or the X11 license, at your option. Note that this dual
6 * licensing only applies to this file, and not this project as a
7 * whole.
8 *
9 * a) This file is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License as
11 * published by the Free Software Foundation; either version 2 of the
12 * License.
13 *
14 * This file is distributed in the hope that it will be useful
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * Or, alternatively
20 *
21 * b) Permission is hereby granted, free of charge, to any person
22 * obtaining a copy of this software and associated documentation
23 * files (the "Software"), to deal in the Software without
24 * restriction, including without limitation the rights to use
25 * copy, modify, merge, publish, distribute, sublicense, and/or
26 * sell copies of the Software, and to permit persons to whom the
27 * Software is furnished to do so, subject to the following
28 * conditions:
29 *
30 * The above copyright notice and this permission notice shall be
31 * included in all copies or substantial portions of the Software.
32 *
33 * THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
34 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
35 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
36 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
37 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY
38 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
39 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
40 * OTHER DEALINGS IN THE SOFTWARE.
3 */ 41 */
4/dts-v1/; 42/dts-v1/;
5 43
diff --git a/arch/arm/boot/dts/imx6dl-hummingboard.dts b/arch/arm/boot/dts/imx6dl-hummingboard.dts
index 44a0e6736bb1..7369d2d7da3e 100644
--- a/arch/arm/boot/dts/imx6dl-hummingboard.dts
+++ b/arch/arm/boot/dts/imx6dl-hummingboard.dts
@@ -1,6 +1,44 @@
1/* 1/*
2 * Copyright (C) 2014 Rabeeh Khoury (rabeeh@solid-run.com) 2 * Copyright (C) 2014 Rabeeh Khoury (rabeeh@solid-run.com)
3 * Based on dt work by Russell King 3 * Based on dt work by Russell King
4 *
5 * This file is dual-licensed: you can use it either under the terms
6 * of the GPL or the X11 license, at your option. Note that this dual
7 * licensing only applies to this file, and not this project as a
8 * whole.
9 *
10 * a) This file is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License as
12 * published by the Free Software Foundation; either version 2 of the
13 * License.
14 *
15 * This file is distributed in the hope that it will be useful
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * Or, alternatively
21 *
22 * b) Permission is hereby granted, free of charge, to any person
23 * obtaining a copy of this software and associated documentation
24 * files (the "Software"), to deal in the Software without
25 * restriction, including without limitation the rights to use
26 * copy, modify, merge, publish, distribute, sublicense, and/or
27 * sell copies of the Software, and to permit persons to whom the
28 * Software is furnished to do so, subject to the following
29 * conditions:
30 *
31 * The above copyright notice and this permission notice shall be
32 * included in all copies or substantial portions of the Software.
33 *
34 * THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
35 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
36 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
37 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
38 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY
39 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
40 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
41 * OTHER DEALINGS IN THE SOFTWARE.
4 */ 42 */
5/dts-v1/; 43/dts-v1/;
6 44
diff --git a/arch/arm/boot/dts/imx6q-cubox-i.dts b/arch/arm/boot/dts/imx6q-cubox-i.dts
index 9efd8b0c8011..670bd8c4c847 100644
--- a/arch/arm/boot/dts/imx6q-cubox-i.dts
+++ b/arch/arm/boot/dts/imx6q-cubox-i.dts
@@ -1,5 +1,43 @@
1/* 1/*
2 * Copyright (C) 2014 Russell King 2 * Copyright (C) 2014 Russell King
3 *
4 * This file is dual-licensed: you can use it either under the terms
5 * of the GPL or the X11 license, at your option. Note that this dual
6 * licensing only applies to this file, and not this project as a
7 * whole.
8 *
9 * a) This file is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License as
11 * published by the Free Software Foundation; either version 2 of the
12 * License.
13 *
14 * This file is distributed in the hope that it will be useful
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * Or, alternatively
20 *
21 * b) Permission is hereby granted, free of charge, to any person
22 * obtaining a copy of this software and associated documentation
23 * files (the "Software"), to deal in the Software without
24 * restriction, including without limitation the rights to use
25 * copy, modify, merge, publish, distribute, sublicense, and/or
26 * sell copies of the Software, and to permit persons to whom the
27 * Software is furnished to do so, subject to the following
28 * conditions:
29 *
30 * The above copyright notice and this permission notice shall be
31 * included in all copies or substantial portions of the Software.
32 *
33 * THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
34 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
35 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
36 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
37 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY
38 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
39 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
40 * OTHER DEALINGS IN THE SOFTWARE.
3 */ 41 */
4/dts-v1/; 42/dts-v1/;
5 43
diff --git a/arch/arm/boot/dts/imx6q-hummingboard.dts b/arch/arm/boot/dts/imx6q-hummingboard.dts
index c2bf8476ce45..0f6044553a24 100644
--- a/arch/arm/boot/dts/imx6q-hummingboard.dts
+++ b/arch/arm/boot/dts/imx6q-hummingboard.dts
@@ -1,6 +1,44 @@
1/* 1/*
2 * Copyright (C) 2014 Rabeeh Khoury (rabeeh@solid-run.com) 2 * Copyright (C) 2014 Rabeeh Khoury (rabeeh@solid-run.com)
3 * Based on dt work by Russell King 3 * Based on dt work by Russell King
4 *
5 * This file is dual-licensed: you can use it either under the terms
6 * of the GPL or the X11 license, at your option. Note that this dual
7 * licensing only applies to this file, and not this project as a
8 * whole.
9 *
10 * a) This file is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License as
12 * published by the Free Software Foundation; either version 2 of the
13 * License.
14 *
15 * This file is distributed in the hope that it will be useful
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * Or, alternatively
21 *
22 * b) Permission is hereby granted, free of charge, to any person
23 * obtaining a copy of this software and associated documentation
24 * files (the "Software"), to deal in the Software without
25 * restriction, including without limitation the rights to use
26 * copy, modify, merge, publish, distribute, sublicense, and/or
27 * sell copies of the Software, and to permit persons to whom the
28 * Software is furnished to do so, subject to the following
29 * conditions:
30 *
31 * The above copyright notice and this permission notice shall be
32 * included in all copies or substantial portions of the Software.
33 *
34 * THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
35 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
36 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
37 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
38 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY
39 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
40 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
41 * OTHER DEALINGS IN THE SOFTWARE.
4 */ 42 */
5/dts-v1/; 43/dts-v1/;
6 44
diff --git a/arch/arm/boot/dts/imx6q.dtsi b/arch/arm/boot/dts/imx6q.dtsi
index 93ec79bb6b35..399103b8e2c9 100644
--- a/arch/arm/boot/dts/imx6q.dtsi
+++ b/arch/arm/boot/dts/imx6q.dtsi
@@ -294,19 +294,21 @@
294}; 294};
295 295
296&mipi_dsi { 296&mipi_dsi {
297 port@2 { 297 ports {
298 reg = <2>; 298 port@2 {
299 reg = <2>;
299 300
300 mipi_mux_2: endpoint { 301 mipi_mux_2: endpoint {
301 remote-endpoint = <&ipu2_di0_mipi>; 302 remote-endpoint = <&ipu2_di0_mipi>;
303 };
302 }; 304 };
303 };
304 305
305 port@3 { 306 port@3 {
306 reg = <3>; 307 reg = <3>;
307 308
308 mipi_mux_3: endpoint { 309 mipi_mux_3: endpoint {
309 remote-endpoint = <&ipu2_di1_mipi>; 310 remote-endpoint = <&ipu2_di1_mipi>;
311 };
310 }; 312 };
311 }; 313 };
312}; 314};
diff --git a/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi b/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi
index 6a524ca011e7..d033bb182060 100644
--- a/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi
+++ b/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi
@@ -1,8 +1,48 @@
1/* 1/*
2 * Copyright (C) 2014 Russell King 2 * Copyright (C) 2014 Russell King
3 *
4 * This file is dual-licensed: you can use it either under the terms
5 * of the GPL or the X11 license, at your option. Note that this dual
6 * licensing only applies to this file, and not this project as a
7 * whole.
8 *
9 * a) This file is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License as
11 * published by the Free Software Foundation; either version 2 of the
12 * License.
13 *
14 * This file is distributed in the hope that it will be useful
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * Or, alternatively
20 *
21 * b) Permission is hereby granted, free of charge, to any person
22 * obtaining a copy of this software and associated documentation
23 * files (the "Software"), to deal in the Software without
24 * restriction, including without limitation the rights to use
25 * copy, modify, merge, publish, distribute, sublicense, and/or
26 * sell copies of the Software, and to permit persons to whom the
27 * Software is furnished to do so, subject to the following
28 * conditions:
29 *
30 * The above copyright notice and this permission notice shall be
31 * included in all copies or substantial portions of the Software.
32 *
33 * THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
34 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
35 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
36 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
37 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY
38 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
39 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
40 * OTHER DEALINGS IN THE SOFTWARE.
3 */ 41 */
4#include "imx6qdl-microsom.dtsi" 42#include "imx6qdl-microsom.dtsi"
5#include "imx6qdl-microsom-ar8035.dtsi" 43#include "imx6qdl-microsom-ar8035.dtsi"
44#include <dt-bindings/input/input.h>
45#include <dt-bindings/gpio/gpio.h>
6 46
7/ { 47/ {
8 ir_recv: ir-receiver { 48 ir_recv: ir-receiver {
@@ -66,6 +106,18 @@
66 spdif-controller = <&spdif>; 106 spdif-controller = <&spdif>;
67 spdif-out; 107 spdif-out;
68 }; 108 };
109
110 gpio-keys {
111 compatible = "gpio-keys";
112 pinctrl-0 = <&pinctrl_gpio_key>;
113 pinctrl-names = "default";
114
115 button_0 {
116 label = "Button 0";
117 gpios = <&gpio3 8 GPIO_ACTIVE_LOW>;
118 linux,code = <BTN_0>;
119 };
120 };
69}; 121};
70 122
71&hdmi { 123&hdmi {
@@ -170,9 +222,19 @@
170 MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x13059 222 MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x13059
171 >; 223 >;
172 }; 224 };
225
226 pinctrl_gpio_key: gpio-key {
227 fsl,pins = <
228 MX6QDL_PAD_EIM_DA8__GPIO3_IO08 0x17059
229 >;
230 };
173 }; 231 };
174}; 232};
175 233
234&pwm1 {
235 status = "okay";
236};
237
176&spdif { 238&spdif {
177 pinctrl-names = "default"; 239 pinctrl-names = "default";
178 pinctrl-0 = <&pinctrl_cubox_i_spdif>; 240 pinctrl-0 = <&pinctrl_cubox_i_spdif>;
diff --git a/arch/arm/boot/dts/imx6qdl-hummingboard.dtsi b/arch/arm/boot/dts/imx6qdl-hummingboard.dtsi
index 62841e85a91e..151a3db2aea9 100644
--- a/arch/arm/boot/dts/imx6qdl-hummingboard.dtsi
+++ b/arch/arm/boot/dts/imx6qdl-hummingboard.dtsi
@@ -1,5 +1,43 @@
1/* 1/*
2 * Copyright (C) 2013,2014 Russell King 2 * Copyright (C) 2013,2014 Russell King
3 *
4 * This file is dual-licensed: you can use it either under the terms
5 * of the GPL or the X11 license, at your option. Note that this dual
6 * licensing only applies to this file, and not this project as a
7 * whole.
8 *
9 * a) This file is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License as
11 * published by the Free Software Foundation; either version 2 of the
12 * License.
13 *
14 * This file is distributed in the hope that it will be useful
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * Or, alternatively
20 *
21 * b) Permission is hereby granted, free of charge, to any person
22 * obtaining a copy of this software and associated documentation
23 * files (the "Software"), to deal in the Software without
24 * restriction, including without limitation the rights to use
25 * copy, modify, merge, publish, distribute, sublicense, and/or
26 * sell copies of the Software, and to permit persons to whom the
27 * Software is furnished to do so, subject to the following
28 * conditions:
29 *
30 * The above copyright notice and this permission notice shall be
31 * included in all copies or substantial portions of the Software.
32 *
33 * THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
34 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
35 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
36 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
37 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY
38 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
39 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
40 * OTHER DEALINGS IN THE SOFTWARE.
3 */ 41 */
4#include "imx6qdl-microsom.dtsi" 42#include "imx6qdl-microsom.dtsi"
5#include "imx6qdl-microsom-ar8035.dtsi" 43#include "imx6qdl-microsom-ar8035.dtsi"
@@ -50,6 +88,19 @@
50 }; 88 };
51 }; 89 };
52 90
91 sound-sgtl5000 {
92 audio-codec = <&sgtl5000>;
93 audio-routing =
94 "MIC_IN", "Mic Jack",
95 "Mic Jack", "Mic Bias",
96 "Headphone Jack", "HP_OUT";
97 compatible = "fsl,imx-audio-sgtl5000";
98 model = "On-board Codec";
99 mux-ext-port = <5>;
100 mux-int-port = <1>;
101 ssi-controller = <&ssi1>;
102 };
103
53 sound-spdif { 104 sound-spdif {
54 compatible = "fsl,imx-audio-spdif"; 105 compatible = "fsl,imx-audio-spdif";
55 model = "On-board SPDIF"; 106 model = "On-board SPDIF";
@@ -59,6 +110,10 @@
59 }; 110 };
60}; 111};
61 112
113&audmux {
114 status = "okay";
115};
116
62&can1 { 117&can1 {
63 pinctrl-names = "default"; 118 pinctrl-names = "default";
64 pinctrl-0 = <&pinctrl_hummingboard_flexcan1>; 119 pinctrl-0 = <&pinctrl_hummingboard_flexcan1>;
@@ -75,16 +130,24 @@
75&i2c1 { 130&i2c1 {
76 pinctrl-names = "default"; 131 pinctrl-names = "default";
77 pinctrl-0 = <&pinctrl_hummingboard_i2c1>; 132 pinctrl-0 = <&pinctrl_hummingboard_i2c1>;
78
79 /*
80 * Not fitted on Carrier-1 board... yet
81 status = "okay"; 133 status = "okay";
82 134
135 /* Pro baseboard model */
83 rtc: pcf8523@68 { 136 rtc: pcf8523@68 {
84 compatible = "nxp,pcf8523"; 137 compatible = "nxp,pcf8523";
85 reg = <0x68>; 138 reg = <0x68>;
86 }; 139 };
87 */ 140
141 /* Pro baseboard model */
142 sgtl5000: sgtl5000@0a {
143 clocks = <&clks IMX6QDL_CLK_CKO>;
144 compatible = "fsl,sgtl5000";
145 pinctrl-names = "default";
146 pinctrl-0 = <&pinctrl_hummingboard_sgtl5000>;
147 reg = <0x0a>;
148 VDDA-supply = <&reg_3p3v>;
149 VDDIO-supply = <&reg_3p3v>;
150 };
88}; 151};
89 152
90&i2c2 { 153&i2c2 {
@@ -129,6 +192,20 @@
129 >; 192 >;
130 }; 193 };
131 194
195 pinctrl_hummingboard_pwm1: pwm1grp {
196 fsl,pins = <MX6QDL_PAD_DISP0_DAT8__PWM1_OUT 0x1b0b1>;
197 };
198
199 pinctrl_hummingboard_sgtl5000: hummingboard-sgtl5000 {
200 fsl,pins = <
201 MX6QDL_PAD_DISP0_DAT19__AUD5_RXD 0x130b0
202 MX6QDL_PAD_KEY_COL0__AUD5_TXC 0x130b0
203 MX6QDL_PAD_KEY_ROW0__AUD5_TXD 0x110b0
204 MX6QDL_PAD_KEY_COL1__AUD5_TXFS 0x130b0
205 MX6QDL_PAD_GPIO_5__CCM_CLKO1 0x130b0
206 >;
207 };
208
132 pinctrl_hummingboard_spdif: hummingboard-spdif { 209 pinctrl_hummingboard_spdif: hummingboard-spdif {
133 fsl,pins = <MX6QDL_PAD_GPIO_17__SPDIF_OUT 0x13091>; 210 fsl,pins = <MX6QDL_PAD_GPIO_17__SPDIF_OUT 0x13091>;
134 }; 211 };
@@ -168,12 +245,28 @@
168 }; 245 };
169}; 246};
170 247
248&pwm1 {
249 pinctrl-names = "default";
250 pinctrl-0 = <&pinctrl_hummingboard_pwm1>;
251 status = "okay";
252};
253
254&pwm2 {
255 pinctrl-names = "default";
256 status = "okay";
257};
258
171&spdif { 259&spdif {
172 pinctrl-names = "default"; 260 pinctrl-names = "default";
173 pinctrl-0 = <&pinctrl_hummingboard_spdif>; 261 pinctrl-0 = <&pinctrl_hummingboard_spdif>;
174 status = "okay"; 262 status = "okay";
175}; 263};
176 264
265&ssi1 {
266 fsl,mode = "i2s-slave";
267 status = "okay";
268};
269
177&usbh1 { 270&usbh1 {
178 disable-over-current; 271 disable-over-current;
179 vbus-supply = <&reg_usbh1_vbus>; 272 vbus-supply = <&reg_usbh1_vbus>;
diff --git a/arch/arm/boot/dts/imx6qdl-microsom-ar8035.dtsi b/arch/arm/boot/dts/imx6qdl-microsom-ar8035.dtsi
index db9f45b2c573..4a1820309cdb 100644
--- a/arch/arm/boot/dts/imx6qdl-microsom-ar8035.dtsi
+++ b/arch/arm/boot/dts/imx6qdl-microsom-ar8035.dtsi
@@ -3,6 +3,44 @@
3 * 3 *
4 * This describes the hookup for an AR8035 to the iMX6 on the SolidRun 4 * This describes the hookup for an AR8035 to the iMX6 on the SolidRun
5 * MicroSOM. 5 * MicroSOM.
6 *
7 * This file is dual-licensed: you can use it either under the terms
8 * of the GPL or the X11 license, at your option. Note that this dual
9 * licensing only applies to this file, and not this project as a
10 * whole.
11 *
12 * a) This file is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License as
14 * published by the Free Software Foundation; either version 2 of the
15 * License.
16 *
17 * This file is distributed in the hope that it will be useful
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
21 *
22 * Or, alternatively
23 *
24 * b) Permission is hereby granted, free of charge, to any person
25 * obtaining a copy of this software and associated documentation
26 * files (the "Software"), to deal in the Software without
27 * restriction, including without limitation the rights to use
28 * copy, modify, merge, publish, distribute, sublicense, and/or
29 * sell copies of the Software, and to permit persons to whom the
30 * Software is furnished to do so, subject to the following
31 * conditions:
32 *
33 * The above copyright notice and this permission notice shall be
34 * included in all copies or substantial portions of the Software.
35 *
36 * THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
37 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
38 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
39 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
40 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY
41 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
42 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
43 * OTHER DEALINGS IN THE SOFTWARE.
6 */ 44 */
7&fec { 45&fec {
8 pinctrl-names = "default"; 46 pinctrl-names = "default";
diff --git a/arch/arm/boot/dts/imx6qdl-microsom.dtsi b/arch/arm/boot/dts/imx6qdl-microsom.dtsi
index 79eac6849d4c..349f82be816e 100644
--- a/arch/arm/boot/dts/imx6qdl-microsom.dtsi
+++ b/arch/arm/boot/dts/imx6qdl-microsom.dtsi
@@ -1,5 +1,43 @@
1/* 1/*
2 * Copyright (C) 2013,2014 Russell King 2 * Copyright (C) 2013,2014 Russell King
3 *
4 * This file is dual-licensed: you can use it either under the terms
5 * of the GPL or the X11 license, at your option. Note that this dual
6 * licensing only applies to this file, and not this project as a
7 * whole.
8 *
9 * a) This file is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License as
11 * published by the Free Software Foundation; either version 2 of the
12 * License.
13 *
14 * This file is distributed in the hope that it will be useful
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * Or, alternatively
20 *
21 * b) Permission is hereby granted, free of charge, to any person
22 * obtaining a copy of this software and associated documentation
23 * files (the "Software"), to deal in the Software without
24 * restriction, including without limitation the rights to use
25 * copy, modify, merge, publish, distribute, sublicense, and/or
26 * sell copies of the Software, and to permit persons to whom the
27 * Software is furnished to do so, subject to the following
28 * conditions:
29 *
30 * The above copyright notice and this permission notice shall be
31 * included in all copies or substantial portions of the Software.
32 *
33 * THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
34 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
35 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
36 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
37 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY
38 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
39 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
40 * OTHER DEALINGS IN THE SOFTWARE.
3 */ 41 */
4 42
5&iomuxc { 43&iomuxc {
diff --git a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
index 009abd69385d..46b2fed7c319 100644
--- a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
+++ b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi
@@ -182,6 +182,34 @@
182 }; 182 };
183}; 183};
184 184
185&i2c3 {
186 pinctrl-names = "default";
187 pinctrl-0 = <&pinctrl_i2c3>;
188 pinctrl-assert-gpios = <&gpio5 4 GPIO_ACTIVE_HIGH>;
189 status = "okay";
190
191 max7310_a: gpio@30 {
192 compatible = "maxim,max7310";
193 reg = <0x30>;
194 gpio-controller;
195 #gpio-cells = <2>;
196 };
197
198 max7310_b: gpio@32 {
199 compatible = "maxim,max7310";
200 reg = <0x32>;
201 gpio-controller;
202 #gpio-cells = <2>;
203 };
204
205 max7310_c: gpio@34 {
206 compatible = "maxim,max7310";
207 reg = <0x34>;
208 gpio-controller;
209 #gpio-cells = <2>;
210 };
211};
212
185&iomuxc { 213&iomuxc {
186 pinctrl-names = "default"; 214 pinctrl-names = "default";
187 pinctrl-0 = <&pinctrl_hog>; 215 pinctrl-0 = <&pinctrl_hog>;
@@ -265,6 +293,13 @@
265 >; 293 >;
266 }; 294 };
267 295
296 pinctrl_i2c3: i2c3grp {
297 fsl,pins = <
298 MX6QDL_PAD_GPIO_3__I2C3_SCL 0x4001b8b1
299 MX6QDL_PAD_EIM_D18__I2C3_SDA 0x4001b8b1
300 >;
301 };
302
268 pinctrl_pwm3: pwm1grp { 303 pinctrl_pwm3: pwm1grp {
269 fsl,pins = < 304 fsl,pins = <
270 MX6QDL_PAD_SD4_DAT1__PWM3_OUT 0x1b0b1 305 MX6QDL_PAD_SD4_DAT1__PWM3_OUT 0x1b0b1
diff --git a/arch/arm/boot/dts/imx6qdl.dtsi b/arch/arm/boot/dts/imx6qdl.dtsi
index d6c69ec44314..f74a8ded515f 100644
--- a/arch/arm/boot/dts/imx6qdl.dtsi
+++ b/arch/arm/boot/dts/imx6qdl.dtsi
@@ -53,6 +53,7 @@
53 interrupt-controller; 53 interrupt-controller;
54 reg = <0x00a01000 0x1000>, 54 reg = <0x00a01000 0x1000>,
55 <0x00a00100 0x100>; 55 <0x00a00100 0x100>;
56 interrupt-parent = <&intc>;
56 }; 57 };
57 58
58 clocks { 59 clocks {
@@ -82,7 +83,7 @@
82 #address-cells = <1>; 83 #address-cells = <1>;
83 #size-cells = <1>; 84 #size-cells = <1>;
84 compatible = "simple-bus"; 85 compatible = "simple-bus";
85 interrupt-parent = <&intc>; 86 interrupt-parent = <&gpc>;
86 ranges; 87 ranges;
87 88
88 dma_apbh: dma-apbh@00110000 { 89 dma_apbh: dma-apbh@00110000 {
@@ -122,6 +123,7 @@
122 compatible = "arm,cortex-a9-twd-timer"; 123 compatible = "arm,cortex-a9-twd-timer";
123 reg = <0x00a00600 0x20>; 124 reg = <0x00a00600 0x20>;
124 interrupts = <1 13 0xf01>; 125 interrupts = <1 13 0xf01>;
126 interrupt-parent = <&intc>;
125 clocks = <&clks IMX6QDL_CLK_TWD>; 127 clocks = <&clks IMX6QDL_CLK_TWD>;
126 }; 128 };
127 129
@@ -357,6 +359,7 @@
357 clocks = <&clks IMX6QDL_CLK_IPG>, 359 clocks = <&clks IMX6QDL_CLK_IPG>,
358 <&clks IMX6QDL_CLK_PWM1>; 360 <&clks IMX6QDL_CLK_PWM1>;
359 clock-names = "ipg", "per"; 361 clock-names = "ipg", "per";
362 status = "disabled";
360 }; 363 };
361 364
362 pwm2: pwm@02084000 { 365 pwm2: pwm@02084000 {
@@ -367,6 +370,7 @@
367 clocks = <&clks IMX6QDL_CLK_IPG>, 370 clocks = <&clks IMX6QDL_CLK_IPG>,
368 <&clks IMX6QDL_CLK_PWM2>; 371 <&clks IMX6QDL_CLK_PWM2>;
369 clock-names = "ipg", "per"; 372 clock-names = "ipg", "per";
373 status = "disabled";
370 }; 374 };
371 375
372 pwm3: pwm@02088000 { 376 pwm3: pwm@02088000 {
@@ -377,6 +381,7 @@
377 clocks = <&clks IMX6QDL_CLK_IPG>, 381 clocks = <&clks IMX6QDL_CLK_IPG>,
378 <&clks IMX6QDL_CLK_PWM3>; 382 <&clks IMX6QDL_CLK_PWM3>;
379 clock-names = "ipg", "per"; 383 clock-names = "ipg", "per";
384 status = "disabled";
380 }; 385 };
381 386
382 pwm4: pwm@0208c000 { 387 pwm4: pwm@0208c000 {
@@ -387,6 +392,7 @@
387 clocks = <&clks IMX6QDL_CLK_IPG>, 392 clocks = <&clks IMX6QDL_CLK_IPG>,
388 <&clks IMX6QDL_CLK_PWM4>; 393 <&clks IMX6QDL_CLK_PWM4>;
389 clock-names = "ipg", "per"; 394 clock-names = "ipg", "per";
395 status = "disabled";
390 }; 396 };
391 397
392 can1: flexcan@02090000 { 398 can1: flexcan@02090000 {
@@ -598,7 +604,7 @@
598 regulator-name = "vddpu"; 604 regulator-name = "vddpu";
599 regulator-min-microvolt = <725000>; 605 regulator-min-microvolt = <725000>;
600 regulator-max-microvolt = <1450000>; 606 regulator-max-microvolt = <1450000>;
601 regulator-always-on; 607 regulator-enable-ramp-delay = <150>;
602 anatop-reg-offset = <0x140>; 608 anatop-reg-offset = <0x140>;
603 anatop-vol-bit-shift = <9>; 609 anatop-vol-bit-shift = <9>;
604 anatop-vol-bit-width = <5>; 610 anatop-vol-bit-width = <5>;
@@ -658,7 +664,7 @@
658 #size-cells = <1>; 664 #size-cells = <1>;
659 ranges = <0 0x020cc000 0x4000>; 665 ranges = <0 0x020cc000 0x4000>;
660 666
661 snvs-rtc-lp@34 { 667 snvs_rtc: snvs-rtc-lp@34 {
662 compatible = "fsl,sec-v4.0-mon-rtc-lp"; 668 compatible = "fsl,sec-v4.0-mon-rtc-lp";
663 reg = <0x34 0x58>; 669 reg = <0x34 0x58>;
664 interrupts = <0 19 IRQ_TYPE_LEVEL_HIGH>, 670 interrupts = <0 19 IRQ_TYPE_LEVEL_HIGH>,
@@ -693,8 +699,19 @@
693 gpc: gpc@020dc000 { 699 gpc: gpc@020dc000 {
694 compatible = "fsl,imx6q-gpc"; 700 compatible = "fsl,imx6q-gpc";
695 reg = <0x020dc000 0x4000>; 701 reg = <0x020dc000 0x4000>;
702 interrupt-controller;
703 #interrupt-cells = <3>;
696 interrupts = <0 89 IRQ_TYPE_LEVEL_HIGH>, 704 interrupts = <0 89 IRQ_TYPE_LEVEL_HIGH>,
697 <0 90 IRQ_TYPE_LEVEL_HIGH>; 705 <0 90 IRQ_TYPE_LEVEL_HIGH>;
706 interrupt-parent = <&intc>;
707 pu-supply = <&reg_pu>;
708 clocks = <&clks IMX6QDL_CLK_GPU3D_CORE>,
709 <&clks IMX6QDL_CLK_GPU3D_SHADER>,
710 <&clks IMX6QDL_CLK_GPU2D_CORE>,
711 <&clks IMX6QDL_CLK_GPU2D_AXI>,
712 <&clks IMX6QDL_CLK_OPENVG_AXI>,
713 <&clks IMX6QDL_CLK_VPU_AXI>;
714 #power-domain-cells = <1>;
698 }; 715 };
699 716
700 gpr: iomuxc-gpr@020e0000 { 717 gpr: iomuxc-gpr@020e0000 {
@@ -845,6 +862,7 @@
845 clocks = <&clks IMX6QDL_CLK_USBOH3>; 862 clocks = <&clks IMX6QDL_CLK_USBOH3>;
846 fsl,usbphy = <&usbphy2>; 863 fsl,usbphy = <&usbphy2>;
847 fsl,usbmisc = <&usbmisc 1>; 864 fsl,usbmisc = <&usbmisc 1>;
865 dr_mode = "host";
848 status = "disabled"; 866 status = "disabled";
849 }; 867 };
850 868
@@ -854,6 +872,7 @@
854 interrupts = <0 41 IRQ_TYPE_LEVEL_HIGH>; 872 interrupts = <0 41 IRQ_TYPE_LEVEL_HIGH>;
855 clocks = <&clks IMX6QDL_CLK_USBOH3>; 873 clocks = <&clks IMX6QDL_CLK_USBOH3>;
856 fsl,usbmisc = <&usbmisc 2>; 874 fsl,usbmisc = <&usbmisc 2>;
875 dr_mode = "host";
857 status = "disabled"; 876 status = "disabled";
858 }; 877 };
859 878
@@ -863,6 +882,7 @@
863 interrupts = <0 42 IRQ_TYPE_LEVEL_HIGH>; 882 interrupts = <0 42 IRQ_TYPE_LEVEL_HIGH>;
864 clocks = <&clks IMX6QDL_CLK_USBOH3>; 883 clocks = <&clks IMX6QDL_CLK_USBOH3>;
865 fsl,usbmisc = <&usbmisc 3>; 884 fsl,usbmisc = <&usbmisc 3>;
885 dr_mode = "host";
866 status = "disabled"; 886 status = "disabled";
867 }; 887 };
868 888
@@ -1022,19 +1042,24 @@
1022 reg = <0x021e0000 0x4000>; 1042 reg = <0x021e0000 0x4000>;
1023 status = "disabled"; 1043 status = "disabled";
1024 1044
1025 port@0 { 1045 ports {
1026 reg = <0>; 1046 #address-cells = <1>;
1047 #size-cells = <0>;
1048
1049 port@0 {
1050 reg = <0>;
1027 1051
1028 mipi_mux_0: endpoint { 1052 mipi_mux_0: endpoint {
1029 remote-endpoint = <&ipu1_di0_mipi>; 1053 remote-endpoint = <&ipu1_di0_mipi>;
1054 };
1030 }; 1055 };
1031 };
1032 1056
1033 port@1 { 1057 port@1 {
1034 reg = <1>; 1058 reg = <1>;
1035 1059
1036 mipi_mux_1: endpoint { 1060 mipi_mux_1: endpoint {
1037 remote-endpoint = <&ipu1_di1_mipi>; 1061 remote-endpoint = <&ipu1_di1_mipi>;
1062 };
1038 }; 1063 };
1039 }; 1064 };
1040 }; 1065 };
diff --git a/arch/arm/boot/dts/imx6sl-warp.dts b/arch/arm/boot/dts/imx6sl-warp.dts
new file mode 100644
index 000000000000..64f7decf1fdc
--- /dev/null
+++ b/arch/arm/boot/dts/imx6sl-warp.dts
@@ -0,0 +1,262 @@
1/*
2 * Copyright 2014, 2015 O.S. Systems Software LTDA.
3 *
4 * This file is dual-licensed: you can use it either under the terms
5 * of the GPL or the X11 license, at your option. Note that this dual
6 * licensing only applies to this file, and not this project as a
7 * whole.
8 *
9 * a) This file is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License as
11 * published by the Free Software Foundation; either version 2 of
12 * the License, or (at your option) any later version.
13 *
14 * This file is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public
20 * License along with this file; if not, write to the Free
21 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
22 * MA 02110-1301 USA
23 *
24 * Or, alternatively,
25 *
26 * b) Permission is hereby granted, free of charge, to any person
27 * obtaining a copy of this software and associated documentation
28 * files (the "Software"), to deal in the Software without
29 * restriction, including without limitation the rights to use,
30 * copy, modify, merge, publish, distribute, sublicense, and/or
31 * sell copies of the Software, and to permit persons to whom the
32 * Software is furnished to do so, subject to the following
33 * conditions:
34 *
35 * The above copyright notice and this permission notice shall be
36 * included in all copies or substantial portions of the Software.
37 *
38 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
39 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
40 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
41 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
42 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
43 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
44 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
45 * OTHER DEALINGS IN THE SOFTWARE.
46 */
47
48/dts-v1/;
49
50#include <dt-bindings/gpio/gpio.h>
51#include "imx6sl.dtsi"
52
53/ {
54 model = "WaRP Board";
55 compatible = "warp,imx6sl-warp", "fsl,imx6sl";
56
57 memory {
58 reg = <0x80000000 0x20000000>;
59 };
60
61 regulators {
62 compatible = "simple-bus";
63 #address-cells = <1>;
64 #size-cells = <0>;
65
66 reg_usb_otg1_vbus: regulator@0 {
67 compatible = "regulator-fixed";
68 reg = <0>;
69 regulator-name = "usb_otg1_vbus";
70 regulator-min-microvolt = <5000000>;
71 regulator-max-microvolt = <5000000>;
72 gpio = <&gpio4 0 0>;
73 enable-active-high;
74 };
75
76 reg_usb_otg2_vbus: regulator@1 {
77 compatible = "regulator-fixed";
78 reg = <1>;
79 regulator-name = "usb_otg2_vbus";
80 regulator-min-microvolt = <5000000>;
81 regulator-max-microvolt = <5000000>;
82 gpio = <&gpio4 2 0>;
83 enable-active-high;
84 };
85
86 reg_1p8v: regulator@2 {
87 compatible = "regulator-fixed";
88 reg = <2>;
89 regulator-name = "1P8V";
90 regulator-min-microvolt = <1800000>;
91 regulator-max-microvolt = <1800000>;
92 };
93 };
94
95 usdhc3_pwrseq: usdhc3_pwrseq {
96 compatible = "mmc-pwrseq-simple";
97 reset-gpios = <&gpio4 5 GPIO_ACTIVE_LOW>, /* WL_REG_ON */
98 <&gpio3 25 GPIO_ACTIVE_LOW>, /* BT_REG_ON */
99 <&gpio4 4 GPIO_ACTIVE_LOW>, /* BT_WAKE */
100 <&gpio4 6 GPIO_ACTIVE_LOW>; /* BT_RST_N */
101 };
102};
103
104&uart1 {
105 pinctrl-names = "default";
106 pinctrl-0 = <&pinctrl_uart1>;
107 status = "okay";
108};
109
110&uart2 {
111 pinctrl-names = "default";
112 pinctrl-0 = <&pinctrl_uart2>;
113 fsl,uart-has-rtscts;
114 status = "okay";
115};
116
117&uart3 {
118 pinctrl-names = "default";
119 pinctrl-0 = <&pinctrl_uart3>;
120 status = "okay";
121};
122
123&usbotg1 {
124 vbus-supply = <&reg_usb_otg1_vbus>;
125 dr_mode = "host";
126 disable-over-current;
127 status = "okay";
128};
129
130&usbotg2 {
131 vbus-supply = <&reg_usb_otg2_vbus>;
132 disable-over-current;
133 status = "okay";
134};
135
136&usdhc2 {
137 pinctrl-names = "default", "state_100mhz", "state_200mhz";
138 pinctrl-0 = <&pinctrl_usdhc2>;
139 pinctrl-1 = <&pinctrl_usdhc2_100mhz>;
140 pinctrl-2 = <&pinctrl_usdhc2_200mhz>;
141 bus-width = <8>;
142 non-removable;
143 status = "okay";
144};
145
146&usdhc3 {
147 pinctrl-names = "default", "state_100mhz", "state_200mhz";
148 pinctrl-0 = <&pinctrl_usdhc3>;
149 pinctrl-1 = <&pinctrl_usdhc3_100mhz>;
150 pinctrl-2 = <&pinctrl_usdhc3_200mhz>;
151 bus-width = <4>;
152 non-removable;
153 keep-power-in-suspend;
154 enable-sdio-wakeup;
155 mmc-pwrseq = <&usdhc3_pwrseq>;
156 status = "okay";
157};
158
159&iomuxc {
160 imx6sl-warp {
161 pinctrl_uart1: uart1grp {
162 fsl,pins = <
163 MX6SL_PAD_UART1_RXD__UART1_RX_DATA 0x41b0b1
164 MX6SL_PAD_UART1_TXD__UART1_TX_DATA 0x41b0b1
165 >;
166 };
167
168 pinctrl_uart2: uart2grp {
169 fsl,pins = <
170 MX6SL_PAD_EPDC_D12__UART2_RX_DATA 0x41b0b1
171 MX6SL_PAD_EPDC_D13__UART2_TX_DATA 0x41b0b1
172 MX6SL_PAD_EPDC_D14__UART2_RTS_B 0x4130B1
173 MX6SL_PAD_EPDC_D15__UART2_CTS_B 0x4130B1
174 >;
175 };
176
177 pinctrl_uart3: uart3grp {
178 fsl,pins = <
179 MX6SL_PAD_AUD_RXC__UART3_RX_DATA 0x41b0b1
180 MX6SL_PAD_AUD_RXC__UART3_TX_DATA 0x41b0b1
181 >;
182 };
183
184 pinctrl_usdhc2: usdhc2grp {
185 fsl,pins = <
186 MX6SL_PAD_SD2_CMD__SD2_CMD 0x417059
187 MX6SL_PAD_SD2_CLK__SD2_CLK 0x410059
188 MX6SL_PAD_SD2_DAT0__SD2_DATA0 0x417059
189 MX6SL_PAD_SD2_DAT1__SD2_DATA1 0x417059
190 MX6SL_PAD_SD2_DAT2__SD2_DATA2 0x417059
191 MX6SL_PAD_SD2_DAT3__SD2_DATA3 0x417059
192 MX6SL_PAD_SD2_DAT4__SD2_DATA4 0x417059
193 MX6SL_PAD_SD2_DAT5__SD2_DATA5 0x417059
194 MX6SL_PAD_SD2_DAT6__SD2_DATA6 0x417059
195 MX6SL_PAD_SD2_DAT7__SD2_DATA7 0x417059
196 >;
197 };
198
199 pinctrl_usdhc2_100mhz: usdhc2grp100mhz {
200 fsl,pins = <
201 MX6SL_PAD_SD2_CMD__SD2_CMD 0x4170b9
202 MX6SL_PAD_SD2_CLK__SD2_CLK 0x4100b9
203 MX6SL_PAD_SD2_DAT0__SD2_DATA0 0x4170b9
204 MX6SL_PAD_SD2_DAT1__SD2_DATA1 0x4170b9
205 MX6SL_PAD_SD2_DAT2__SD2_DATA2 0x4170b9
206 MX6SL_PAD_SD2_DAT3__SD2_DATA3 0x4170b9
207 MX6SL_PAD_SD2_DAT4__SD2_DATA4 0x4170b9
208 MX6SL_PAD_SD2_DAT5__SD2_DATA5 0x4170b9
209 MX6SL_PAD_SD2_DAT6__SD2_DATA6 0x4170b9
210 MX6SL_PAD_SD2_DAT7__SD2_DATA7 0x4170b9
211 >;
212 };
213
214 pinctrl_usdhc2_200mhz: usdhc2grp200mhz {
215 fsl,pins = <
216 MX6SL_PAD_SD2_CMD__SD2_CMD 0x4170f9
217 MX6SL_PAD_SD2_CLK__SD2_CLK 0x4100f9
218 MX6SL_PAD_SD2_DAT0__SD2_DATA0 0x4170f9
219 MX6SL_PAD_SD2_DAT1__SD2_DATA1 0x4170f9
220 MX6SL_PAD_SD2_DAT2__SD2_DATA2 0x4170f9
221 MX6SL_PAD_SD2_DAT3__SD2_DATA3 0x4170f9
222 MX6SL_PAD_SD2_DAT4__SD2_DATA4 0x4170f9
223 MX6SL_PAD_SD2_DAT5__SD2_DATA5 0x4170f9
224 MX6SL_PAD_SD2_DAT6__SD2_DATA6 0x4170f9
225 MX6SL_PAD_SD2_DAT7__SD2_DATA7 0x4170f9
226 >;
227 };
228
229 pinctrl_usdhc3: usdhc3grp {
230 fsl,pins = <
231 MX6SL_PAD_SD3_CMD__SD3_CMD 0x417059
232 MX6SL_PAD_SD3_CLK__SD3_CLK 0x410059
233 MX6SL_PAD_SD3_DAT0__SD3_DATA0 0x417059
234 MX6SL_PAD_SD3_DAT1__SD3_DATA1 0x417059
235 MX6SL_PAD_SD3_DAT2__SD3_DATA2 0x417059
236 MX6SL_PAD_SD3_DAT3__SD3_DATA3 0x417059
237 >;
238 };
239
240 pinctrl_usdhc3_100mhz: usdhc3grp100mhz {
241 fsl,pins = <
242 MX6SL_PAD_SD3_CMD__SD3_CMD 0x4170b9
243 MX6SL_PAD_SD3_CLK__SD3_CLK 0x4100b9
244 MX6SL_PAD_SD3_DAT0__SD3_DATA0 0x4170b9
245 MX6SL_PAD_SD3_DAT1__SD3_DATA1 0x4170b9
246 MX6SL_PAD_SD3_DAT2__SD3_DATA2 0x4170b9
247 MX6SL_PAD_SD3_DAT3__SD3_DATA3 0x4170b9
248 >;
249 };
250
251 pinctrl_usdhc3_200mhz: usdhc3grp200mhz {
252 fsl,pins = <
253 MX6SL_PAD_SD3_CMD__SD3_CMD 0x4170f9
254 MX6SL_PAD_SD3_CLK__SD3_CLK 0x4100f9
255 MX6SL_PAD_SD3_DAT0__SD3_DATA0 0x4170f9
256 MX6SL_PAD_SD3_DAT1__SD3_DATA1 0x4170f9
257 MX6SL_PAD_SD3_DAT2__SD3_DATA2 0x4170f9
258 MX6SL_PAD_SD3_DAT3__SD3_DATA3 0x4170f9
259 >;
260 };
261 };
262};
diff --git a/arch/arm/boot/dts/imx6sl.dtsi b/arch/arm/boot/dts/imx6sl.dtsi
index 36ab8e054cee..a78e715e3982 100644
--- a/arch/arm/boot/dts/imx6sl.dtsi
+++ b/arch/arm/boot/dts/imx6sl.dtsi
@@ -72,6 +72,7 @@
72 interrupt-controller; 72 interrupt-controller;
73 reg = <0x00a01000 0x1000>, 73 reg = <0x00a01000 0x1000>,
74 <0x00a00100 0x100>; 74 <0x00a00100 0x100>;
75 interrupt-parent = <&intc>;
75 }; 76 };
76 77
77 clocks { 78 clocks {
@@ -95,7 +96,7 @@
95 #address-cells = <1>; 96 #address-cells = <1>;
96 #size-cells = <1>; 97 #size-cells = <1>;
97 compatible = "simple-bus"; 98 compatible = "simple-bus";
98 interrupt-parent = <&intc>; 99 interrupt-parent = <&gpc>;
99 ranges; 100 ranges;
100 101
101 ocram: sram@00900000 { 102 ocram: sram@00900000 {
@@ -568,7 +569,7 @@
568 #size-cells = <1>; 569 #size-cells = <1>;
569 ranges = <0 0x020cc000 0x4000>; 570 ranges = <0 0x020cc000 0x4000>;
570 571
571 snvs-rtc-lp@34 { 572 snvs_rtc: snvs-rtc-lp@34 {
572 compatible = "fsl,sec-v4.0-mon-rtc-lp"; 573 compatible = "fsl,sec-v4.0-mon-rtc-lp";
573 reg = <0x34 0x58>; 574 reg = <0x34 0x58>;
574 interrupts = <0 19 IRQ_TYPE_LEVEL_HIGH>, 575 interrupts = <0 19 IRQ_TYPE_LEVEL_HIGH>,
@@ -603,7 +604,14 @@
603 gpc: gpc@020dc000 { 604 gpc: gpc@020dc000 {
604 compatible = "fsl,imx6sl-gpc", "fsl,imx6q-gpc"; 605 compatible = "fsl,imx6sl-gpc", "fsl,imx6q-gpc";
605 reg = <0x020dc000 0x4000>; 606 reg = <0x020dc000 0x4000>;
607 interrupt-controller;
608 #interrupt-cells = <3>;
606 interrupts = <0 89 IRQ_TYPE_LEVEL_HIGH>; 609 interrupts = <0 89 IRQ_TYPE_LEVEL_HIGH>;
610 interrupt-parent = <&intc>;
611 pu-supply = <&reg_pu>;
612 clocks = <&clks IMX6SL_CLK_GPU2D_OVG>,
613 <&clks IMX6SL_CLK_GPU2D_PODF>;
614 #power-domain-cells = <1>;
607 }; 615 };
608 616
609 gpr: iomuxc-gpr@020e0000 { 617 gpr: iomuxc-gpr@020e0000 {
@@ -699,6 +707,7 @@
699 interrupts = <0 40 IRQ_TYPE_LEVEL_HIGH>; 707 interrupts = <0 40 IRQ_TYPE_LEVEL_HIGH>;
700 clocks = <&clks IMX6SL_CLK_USBOH3>; 708 clocks = <&clks IMX6SL_CLK_USBOH3>;
701 fsl,usbmisc = <&usbmisc 2>; 709 fsl,usbmisc = <&usbmisc 2>;
710 dr_mode = "host";
702 status = "disabled"; 711 status = "disabled";
703 }; 712 };
704 713
diff --git a/arch/arm/boot/dts/imx6sx-sdb-reva.dts b/arch/arm/boot/dts/imx6sx-sdb-reva.dts
new file mode 100644
index 000000000000..c76b87cba275
--- /dev/null
+++ b/arch/arm/boot/dts/imx6sx-sdb-reva.dts
@@ -0,0 +1,143 @@
1/*
2 * Copyright (C) 2015 Freescale Semiconductor, Inc.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8
9#include "imx6sx-sdb.dtsi"
10
11/ {
12 model = "Freescale i.MX6 SoloX SDB RevA Board";
13};
14
15&i2c1 {
16 clock-frequency = <100000>;
17 pinctrl-names = "default";
18 pinctrl-0 = <&pinctrl_i2c1>;
19 status = "okay";
20
21 pmic: pfuze100@08 {
22 compatible = "fsl,pfuze100";
23 reg = <0x08>;
24
25 regulators {
26 sw1a_reg: sw1ab {
27 regulator-min-microvolt = <300000>;
28 regulator-max-microvolt = <1875000>;
29 regulator-boot-on;
30 regulator-always-on;
31 regulator-ramp-delay = <6250>;
32 };
33
34 sw1c_reg: sw1c {
35 regulator-min-microvolt = <300000>;
36 regulator-max-microvolt = <1875000>;
37 regulator-boot-on;
38 regulator-always-on;
39 regulator-ramp-delay = <6250>;
40 };
41
42 sw2_reg: sw2 {
43 regulator-min-microvolt = <800000>;
44 regulator-max-microvolt = <3300000>;
45 regulator-boot-on;
46 regulator-always-on;
47 };
48
49 sw3a_reg: sw3a {
50 regulator-min-microvolt = <400000>;
51 regulator-max-microvolt = <1975000>;
52 regulator-boot-on;
53 regulator-always-on;
54 };
55
56 sw3b_reg: sw3b {
57 regulator-min-microvolt = <400000>;
58 regulator-max-microvolt = <1975000>;
59 regulator-boot-on;
60 regulator-always-on;
61 };
62
63 sw4_reg: sw4 {
64 regulator-min-microvolt = <800000>;
65 regulator-max-microvolt = <3300000>;
66 };
67
68 swbst_reg: swbst {
69 regulator-min-microvolt = <5000000>;
70 regulator-max-microvolt = <5150000>;
71 };
72
73 snvs_reg: vsnvs {
74 regulator-min-microvolt = <1000000>;
75 regulator-max-microvolt = <3000000>;
76 regulator-boot-on;
77 regulator-always-on;
78 };
79
80 vref_reg: vrefddr {
81 regulator-boot-on;
82 regulator-always-on;
83 };
84
85 vgen1_reg: vgen1 {
86 regulator-min-microvolt = <800000>;
87 regulator-max-microvolt = <1550000>;
88 regulator-always-on;
89 };
90
91 vgen2_reg: vgen2 {
92 regulator-min-microvolt = <800000>;
93 regulator-max-microvolt = <1550000>;
94 };
95
96 vgen3_reg: vgen3 {
97 regulator-min-microvolt = <1800000>;
98 regulator-max-microvolt = <3300000>;
99 regulator-always-on;
100 };
101
102 vgen4_reg: vgen4 {
103 regulator-min-microvolt = <1800000>;
104 regulator-max-microvolt = <3300000>;
105 regulator-always-on;
106 };
107
108 vgen5_reg: vgen5 {
109 regulator-min-microvolt = <1800000>;
110 regulator-max-microvolt = <3300000>;
111 regulator-always-on;
112 };
113
114 vgen6_reg: vgen6 {
115 regulator-min-microvolt = <1800000>;
116 regulator-max-microvolt = <3300000>;
117 regulator-always-on;
118 };
119 };
120 };
121};
122
123&qspi2 {
124 pinctrl-names = "default";
125 pinctrl-0 = <&pinctrl_qspi2>;
126 status = "okay";
127
128 flash0: s25fl128s@0 {
129 reg = <0>;
130 #address-cells = <1>;
131 #size-cells = <1>;
132 compatible = "spansion,s25fl128s";
133 spi-max-frequency = <66000000>;
134 };
135
136 flash1: s25fl128s@1 {
137 reg = <1>;
138 #address-cells = <1>;
139 #size-cells = <1>;
140 compatible = "spansion,s25fl128s";
141 spi-max-frequency = <66000000>;
142 };
143};
diff --git a/arch/arm/boot/dts/imx6sx-sdb.dts b/arch/arm/boot/dts/imx6sx-sdb.dts
index 32f07d6b4042..0bfc4e7865b2 100644
--- a/arch/arm/boot/dts/imx6sx-sdb.dts
+++ b/arch/arm/boot/dts/imx6sx-sdb.dts
@@ -1,197 +1,40 @@
1/* 1/*
2 * Copyright (C) 2014 Freescale Semiconductor, Inc. 2 * Copyright (C) 2015 Freescale Semiconductor, Inc.
3 * 3 *
4 * This program is free software; you can redistribute it and/or modify 4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as 5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation. 6 * published by the Free Software Foundation.
7 */ 7 */
8 8
9/dts-v1/; 9#include "imx6sx-sdb.dtsi"
10
11#include <dt-bindings/gpio/gpio.h>
12#include <dt-bindings/input/input.h>
13#include "imx6sx.dtsi"
14 10
15/ { 11/ {
16 model = "Freescale i.MX6 SoloX SDB Board"; 12 model = "Freescale i.MX6 SoloX SDB RevB Board";
17 compatible = "fsl,imx6sx-sdb", "fsl,imx6sx";
18
19 chosen {
20 stdout-path = &uart1;
21 };
22
23 memory {
24 reg = <0x80000000 0x40000000>;
25 };
26
27 backlight {
28 compatible = "pwm-backlight";
29 pwms = <&pwm3 0 5000000>;
30 brightness-levels = <0 4 8 16 32 64 128 255>;
31 default-brightness-level = <6>;
32 };
33
34 gpio-keys {
35 compatible = "gpio-keys";
36 pinctrl-names = "default";
37 pinctrl-0 = <&pinctrl_gpio_keys>;
38
39 volume-up {
40 label = "Volume Up";
41 gpios = <&gpio1 18 GPIO_ACTIVE_LOW>;
42 linux,code = <KEY_VOLUMEUP>;
43 };
44
45 volume-down {
46 label = "Volume Down";
47 gpios = <&gpio1 19 GPIO_ACTIVE_LOW>;
48 linux,code = <KEY_VOLUMEDOWN>;
49 };
50 };
51
52 regulators {
53 compatible = "simple-bus";
54 #address-cells = <1>;
55 #size-cells = <0>;
56
57 vcc_sd3: regulator@0 {
58 compatible = "regulator-fixed";
59 reg = <0>;
60 pinctrl-names = "default";
61 pinctrl-0 = <&pinctrl_vcc_sd3>;
62 regulator-name = "VCC_SD3";
63 regulator-min-microvolt = <3000000>;
64 regulator-max-microvolt = <3000000>;
65 gpio = <&gpio2 11 GPIO_ACTIVE_HIGH>;
66 enable-active-high;
67 };
68
69 reg_usb_otg1_vbus: regulator@1 {
70 compatible = "regulator-fixed";
71 reg = <1>;
72 pinctrl-names = "default";
73 pinctrl-0 = <&pinctrl_usb_otg1>;
74 regulator-name = "usb_otg1_vbus";
75 regulator-min-microvolt = <5000000>;
76 regulator-max-microvolt = <5000000>;
77 gpio = <&gpio1 9 GPIO_ACTIVE_HIGH>;
78 enable-active-high;
79 };
80
81 reg_usb_otg2_vbus: regulator@2 {
82 compatible = "regulator-fixed";
83 reg = <2>;
84 pinctrl-names = "default";
85 pinctrl-0 = <&pinctrl_usb_otg2>;
86 regulator-name = "usb_otg2_vbus";
87 regulator-min-microvolt = <5000000>;
88 regulator-max-microvolt = <5000000>;
89 gpio = <&gpio1 12 GPIO_ACTIVE_HIGH>;
90 enable-active-high;
91 };
92
93 reg_psu_5v: regulator@3 {
94 compatible = "regulator-fixed";
95 reg = <3>;
96 regulator-name = "PSU-5V0";
97 regulator-min-microvolt = <5000000>;
98 regulator-max-microvolt = <5000000>;
99 };
100
101 reg_lcd_3v3: regulator@4 {
102 compatible = "regulator-fixed";
103 reg = <4>;
104 regulator-name = "lcd-3v3";
105 gpio = <&gpio3 27 0>;
106 enable-active-high;
107 };
108
109 reg_peri_3v3: regulator@5 {
110 compatible = "regulator-fixed";
111 reg = <5>;
112 pinctrl-names = "default";
113 pinctrl-0 = <&pinctrl_peri_3v3>;
114 regulator-name = "peri_3v3";
115 regulator-min-microvolt = <3300000>;
116 regulator-max-microvolt = <3300000>;
117 gpios = <&gpio4 16 GPIO_ACTIVE_HIGH>;
118 enable-active-high;
119 regulator-always-on;
120 };
121
122 reg_enet_3v3: regulator@6 {
123 compatible = "regulator-fixed";
124 reg = <6>;
125 pinctrl-names = "default";
126 pinctrl-0 = <&pinctrl_enet_3v3>;
127 regulator-name = "enet_3v3";
128 regulator-min-microvolt = <3300000>;
129 regulator-max-microvolt = <3300000>;
130 gpios = <&gpio2 6 GPIO_ACTIVE_LOW>;
131 };
132 };
133
134 sound {
135 compatible = "fsl,imx6sx-sdb-wm8962", "fsl,imx-audio-wm8962";
136 model = "wm8962-audio";
137 ssi-controller = <&ssi2>;
138 audio-codec = <&codec>;
139 audio-routing =
140 "Headphone Jack", "HPOUTL",
141 "Headphone Jack", "HPOUTR",
142 "Ext Spk", "SPKOUTL",
143 "Ext Spk", "SPKOUTR",
144 "AMIC", "MICBIAS",
145 "IN3R", "AMIC";
146 mux-int-port = <2>;
147 mux-ext-port = <6>;
148 };
149};
150
151&audmux {
152 pinctrl-names = "default";
153 pinctrl-0 = <&pinctrl_audmux>;
154 status = "okay";
155}; 13};
156 14
157&fec1 { 15&cpu0 {
158 pinctrl-names = "default"; 16 operating-points = <
159 pinctrl-0 = <&pinctrl_enet1>; 17 /* kHz uV */
160 phy-supply = <&reg_enet_3v3>; 18 996000 1250000
161 phy-mode = "rgmii"; 19 792000 1175000
162 phy-handle = <&ethphy1>; 20 396000 1175000
163 status = "okay"; 21 >;
164 22 fsl,soc-operating-points = <
165 mdio { 23 /* ARM kHz SOC uV */
166 #address-cells = <1>; 24 996000 1250000
167 #size-cells = <0>; 25 792000 1175000
168 26 396000 1175000
169 ethphy1: ethernet-phy@1 { 27 >;
170 reg = <1>;
171 };
172
173 ethphy2: ethernet-phy@2 {
174 reg = <2>;
175 };
176 };
177}; 28};
178 29
179&fec2 { 30&i2c1 {
31 clock-frequency = <100000>;
180 pinctrl-names = "default"; 32 pinctrl-names = "default";
181 pinctrl-0 = <&pinctrl_enet2>; 33 pinctrl-0 = <&pinctrl_i2c1>;
182 phy-mode = "rgmii";
183 phy-handle = <&ethphy2>;
184 status = "okay"; 34 status = "okay";
185};
186
187&i2c1 {
188 clock-frequency = <100000>;
189 pinctrl-names = "default";
190 pinctrl-0 = <&pinctrl_i2c1>;
191 status = "okay";
192 35
193 pmic: pfuze100@08 { 36 pmic: pfuze100@08 {
194 compatible = "fsl,pfuze100"; 37 compatible = "fsl,pfuze200";
195 reg = <0x08>; 38 reg = <0x08>;
196 39
197 regulators { 40 regulators {
@@ -203,14 +46,6 @@
203 regulator-ramp-delay = <6250>; 46 regulator-ramp-delay = <6250>;
204 }; 47 };
205 48
206 sw1c_reg: sw1c {
207 regulator-min-microvolt = <300000>;
208 regulator-max-microvolt = <1875000>;
209 regulator-boot-on;
210 regulator-always-on;
211 regulator-ramp-delay = <6250>;
212 };
213
214 sw2_reg: sw2 { 49 sw2_reg: sw2 {
215 regulator-min-microvolt = <800000>; 50 regulator-min-microvolt = <800000>;
216 regulator-max-microvolt = <3300000>; 51 regulator-max-microvolt = <3300000>;
@@ -232,11 +67,6 @@
232 regulator-always-on; 67 regulator-always-on;
233 }; 68 };
234 69
235 sw4_reg: sw4 {
236 regulator-min-microvolt = <800000>;
237 regulator-max-microvolt = <3300000>;
238 };
239
240 swbst_reg: swbst { 70 swbst_reg: swbst {
241 regulator-min-microvolt = <5000000>; 71 regulator-min-microvolt = <5000000>;
242 regulator-max-microvolt = <5150000>; 72 regulator-max-microvolt = <5150000>;
@@ -292,401 +122,24 @@
292 }; 122 };
293}; 123};
294 124
295&i2c4 {
296 clock-frequency = <100000>;
297 pinctrl-names = "default";
298 pinctrl-0 = <&pinctrl_i2c4>;
299 status = "okay";
300
301 codec: wm8962@1a {
302 compatible = "wlf,wm8962";
303 reg = <0x1a>;
304 clocks = <&clks IMX6SX_CLK_AUDIO>;
305 DCVDD-supply = <&vgen4_reg>;
306 DBVDD-supply = <&vgen4_reg>;
307 AVDD-supply = <&vgen4_reg>;
308 CPVDD-supply = <&vgen4_reg>;
309 MICVDD-supply = <&vgen3_reg>;
310 PLLVDD-supply = <&vgen4_reg>;
311 SPKVDD1-supply = <&reg_psu_5v>;
312 SPKVDD2-supply = <&reg_psu_5v>;
313 };
314};
315
316&lcdif1 {
317 pinctrl-names = "default";
318 pinctrl-0 = <&pinctrl_lcd>;
319 lcd-supply = <&reg_lcd_3v3>;
320 display = <&display0>;
321 status = "okay";
322
323 display0: display0 {
324 bits-per-pixel = <16>;
325 bus-width = <24>;
326
327 display-timings {
328 native-mode = <&timing0>;
329 timing0: timing0 {
330 clock-frequency = <33500000>;
331 hactive = <800>;
332 vactive = <480>;
333 hback-porch = <89>;
334 hfront-porch = <164>;
335 vback-porch = <23>;
336 vfront-porch = <10>;
337 hsync-len = <10>;
338 vsync-len = <10>;
339 hsync-active = <0>;
340 vsync-active = <0>;
341 de-active = <1>;
342 pixelclk-active = <0>;
343 };
344 };
345 };
346};
347
348&pwm3 {
349 pinctrl-names = "default";
350 pinctrl-0 = <&pinctrl_pwm3>;
351 status = "okay";
352};
353
354&snvs_poweroff {
355 status = "okay";
356};
357
358&qspi2 { 125&qspi2 {
359 pinctrl-names = "default"; 126 pinctrl-names = "default";
360 pinctrl-0 = <&pinctrl_qspi2>; 127 pinctrl-0 = <&pinctrl_qspi2>;
361 status = "okay"; 128 status = "okay";
362 129
363 flash0: s25fl128s@0 { 130 flash0: n25q256a@0 {
364 reg = <0>;
365 #address-cells = <1>; 131 #address-cells = <1>;
366 #size-cells = <1>; 132 #size-cells = <1>;
367 compatible = "spansion,s25fl128s"; 133 compatible = "micron,n25q256a";
368 spi-max-frequency = <66000000>; 134 spi-max-frequency = <29000000>;
135 reg = <0>;
369 }; 136 };
370 137
371 flash1: s25fl128s@1 { 138 flash1: n25q256a@1 {
372 reg = <1>;
373 #address-cells = <1>; 139 #address-cells = <1>;
374 #size-cells = <1>; 140 #size-cells = <1>;
375 compatible = "spansion,s25fl128s"; 141 compatible = "micron,n25q256a";
376 spi-max-frequency = <66000000>; 142 spi-max-frequency = <29000000>;
377 }; 143 reg = <1>;
378};
379
380&ssi2 {
381 status = "okay";
382};
383
384&uart1 {
385 pinctrl-names = "default";
386 pinctrl-0 = <&pinctrl_uart1>;
387 status = "okay";
388};
389
390&uart5 { /* for bluetooth */
391 pinctrl-names = "default";
392 pinctrl-0 = <&pinctrl_uart5>;
393 fsl,uart-has-rtscts;
394 status = "okay";
395};
396
397&usbotg1 {
398 vbus-supply = <&reg_usb_otg1_vbus>;
399 pinctrl-names = "default";
400 pinctrl-0 = <&pinctrl_usb_otg1_id>;
401 status = "okay";
402};
403
404&usbotg2 {
405 vbus-supply = <&reg_usb_otg2_vbus>;
406 dr_mode = "host";
407 status = "okay";
408};
409
410&usdhc2 {
411 pinctrl-names = "default";
412 pinctrl-0 = <&pinctrl_usdhc2>;
413 non-removable;
414 no-1-8-v;
415 keep-power-in-suspend;
416 enable-sdio-wakeup;
417 status = "okay";
418};
419
420&usdhc3 {
421 pinctrl-names = "default", "state_100mhz", "state_200mhz";
422 pinctrl-0 = <&pinctrl_usdhc3>;
423 pinctrl-1 = <&pinctrl_usdhc3_100mhz>;
424 pinctrl-2 = <&pinctrl_usdhc3_200mhz>;
425 bus-width = <8>;
426 cd-gpios = <&gpio2 10 GPIO_ACTIVE_HIGH>;
427 wp-gpios = <&gpio2 15 GPIO_ACTIVE_HIGH>;
428 keep-power-in-suspend;
429 enable-sdio-wakeup;
430 vmmc-supply = <&vcc_sd3>;
431 status = "okay";
432};
433
434&usdhc4 {
435 pinctrl-names = "default";
436 pinctrl-0 = <&pinctrl_usdhc4>;
437 cd-gpios = <&gpio6 21 GPIO_ACTIVE_HIGH>;
438 wp-gpios = <&gpio6 20 GPIO_ACTIVE_HIGH>;
439 status = "okay";
440};
441
442&iomuxc {
443 imx6x-sdb {
444 pinctrl_audmux: audmuxgrp {
445 fsl,pins = <
446 MX6SX_PAD_CSI_DATA00__AUDMUX_AUD6_TXC 0x130b0
447 MX6SX_PAD_CSI_DATA01__AUDMUX_AUD6_TXFS 0x130b0
448 MX6SX_PAD_CSI_HSYNC__AUDMUX_AUD6_TXD 0x120b0
449 MX6SX_PAD_CSI_VSYNC__AUDMUX_AUD6_RXD 0x130b0
450 MX6SX_PAD_CSI_PIXCLK__AUDMUX_MCLK 0x130b0
451 >;
452 };
453
454 pinctrl_enet1: enet1grp {
455 fsl,pins = <
456 MX6SX_PAD_ENET1_MDIO__ENET1_MDIO 0xa0b1
457 MX6SX_PAD_ENET1_MDC__ENET1_MDC 0xa0b1
458 MX6SX_PAD_RGMII1_TXC__ENET1_RGMII_TXC 0xa0b1
459 MX6SX_PAD_RGMII1_TD0__ENET1_TX_DATA_0 0xa0b1
460 MX6SX_PAD_RGMII1_TD1__ENET1_TX_DATA_1 0xa0b1
461 MX6SX_PAD_RGMII1_TD2__ENET1_TX_DATA_2 0xa0b1
462 MX6SX_PAD_RGMII1_TD3__ENET1_TX_DATA_3 0xa0b1
463 MX6SX_PAD_RGMII1_TX_CTL__ENET1_TX_EN 0xa0b1
464 MX6SX_PAD_RGMII1_RXC__ENET1_RX_CLK 0x3081
465 MX6SX_PAD_RGMII1_RD0__ENET1_RX_DATA_0 0x3081
466 MX6SX_PAD_RGMII1_RD1__ENET1_RX_DATA_1 0x3081
467 MX6SX_PAD_RGMII1_RD2__ENET1_RX_DATA_2 0x3081
468 MX6SX_PAD_RGMII1_RD3__ENET1_RX_DATA_3 0x3081
469 MX6SX_PAD_RGMII1_RX_CTL__ENET1_RX_EN 0x3081
470 MX6SX_PAD_ENET2_RX_CLK__ENET2_REF_CLK_25M 0x91
471 >;
472 };
473
474 pinctrl_enet_3v3: enet3v3grp {
475 fsl,pins = <
476 MX6SX_PAD_ENET2_COL__GPIO2_IO_6 0x80000000
477 >;
478 };
479
480 pinctrl_enet2: enet2grp {
481 fsl,pins = <
482 MX6SX_PAD_RGMII2_TXC__ENET2_RGMII_TXC 0xa0b9
483 MX6SX_PAD_RGMII2_TD0__ENET2_TX_DATA_0 0xa0b1
484 MX6SX_PAD_RGMII2_TD1__ENET2_TX_DATA_1 0xa0b1
485 MX6SX_PAD_RGMII2_TD2__ENET2_TX_DATA_2 0xa0b1
486 MX6SX_PAD_RGMII2_TD3__ENET2_TX_DATA_3 0xa0b1
487 MX6SX_PAD_RGMII2_TX_CTL__ENET2_TX_EN 0xa0b1
488 MX6SX_PAD_RGMII2_RXC__ENET2_RX_CLK 0x3081
489 MX6SX_PAD_RGMII2_RD0__ENET2_RX_DATA_0 0x3081
490 MX6SX_PAD_RGMII2_RD1__ENET2_RX_DATA_1 0x3081
491 MX6SX_PAD_RGMII2_RD2__ENET2_RX_DATA_2 0x3081
492 MX6SX_PAD_RGMII2_RD3__ENET2_RX_DATA_3 0x3081
493 MX6SX_PAD_RGMII2_RX_CTL__ENET2_RX_EN 0x3081
494 >;
495 };
496
497 pinctrl_gpio_keys: gpio_keysgrp {
498 fsl,pins = <
499 MX6SX_PAD_CSI_DATA04__GPIO1_IO_18 0x17059
500 MX6SX_PAD_CSI_DATA05__GPIO1_IO_19 0x17059
501 >;
502 };
503
504 pinctrl_i2c1: i2c1grp {
505 fsl,pins = <
506 MX6SX_PAD_GPIO1_IO01__I2C1_SDA 0x4001b8b1
507 MX6SX_PAD_GPIO1_IO00__I2C1_SCL 0x4001b8b1
508 >;
509 };
510
511 pinctrl_i2c4: i2c4grp {
512 fsl,pins = <
513 MX6SX_PAD_CSI_DATA07__I2C4_SDA 0x4001b8b1
514 MX6SX_PAD_CSI_DATA06__I2C4_SCL 0x4001b8b1
515 >;
516 };
517
518 pinctrl_lcd: lcdgrp {
519 fsl,pins = <
520 MX6SX_PAD_LCD1_DATA00__LCDIF1_DATA_0 0x4001b0b0
521 MX6SX_PAD_LCD1_DATA01__LCDIF1_DATA_1 0x4001b0b0
522 MX6SX_PAD_LCD1_DATA02__LCDIF1_DATA_2 0x4001b0b0
523 MX6SX_PAD_LCD1_DATA03__LCDIF1_DATA_3 0x4001b0b0
524 MX6SX_PAD_LCD1_DATA04__LCDIF1_DATA_4 0x4001b0b0
525 MX6SX_PAD_LCD1_DATA05__LCDIF1_DATA_5 0x4001b0b0
526 MX6SX_PAD_LCD1_DATA06__LCDIF1_DATA_6 0x4001b0b0
527 MX6SX_PAD_LCD1_DATA07__LCDIF1_DATA_7 0x4001b0b0
528 MX6SX_PAD_LCD1_DATA08__LCDIF1_DATA_8 0x4001b0b0
529 MX6SX_PAD_LCD1_DATA09__LCDIF1_DATA_9 0x4001b0b0
530 MX6SX_PAD_LCD1_DATA10__LCDIF1_DATA_10 0x4001b0b0
531 MX6SX_PAD_LCD1_DATA11__LCDIF1_DATA_11 0x4001b0b0
532 MX6SX_PAD_LCD1_DATA12__LCDIF1_DATA_12 0x4001b0b0
533 MX6SX_PAD_LCD1_DATA13__LCDIF1_DATA_13 0x4001b0b0
534 MX6SX_PAD_LCD1_DATA14__LCDIF1_DATA_14 0x4001b0b0
535 MX6SX_PAD_LCD1_DATA15__LCDIF1_DATA_15 0x4001b0b0
536 MX6SX_PAD_LCD1_DATA16__LCDIF1_DATA_16 0x4001b0b0
537 MX6SX_PAD_LCD1_DATA17__LCDIF1_DATA_17 0x4001b0b0
538 MX6SX_PAD_LCD1_DATA18__LCDIF1_DATA_18 0x4001b0b0
539 MX6SX_PAD_LCD1_DATA19__LCDIF1_DATA_19 0x4001b0b0
540 MX6SX_PAD_LCD1_DATA20__LCDIF1_DATA_20 0x4001b0b0
541 MX6SX_PAD_LCD1_DATA21__LCDIF1_DATA_21 0x4001b0b0
542 MX6SX_PAD_LCD1_DATA22__LCDIF1_DATA_22 0x4001b0b0
543 MX6SX_PAD_LCD1_DATA23__LCDIF1_DATA_23 0x4001b0b0
544 MX6SX_PAD_LCD1_CLK__LCDIF1_CLK 0x4001b0b0
545 MX6SX_PAD_LCD1_ENABLE__LCDIF1_ENABLE 0x4001b0b0
546 MX6SX_PAD_LCD1_VSYNC__LCDIF1_VSYNC 0x4001b0b0
547 MX6SX_PAD_LCD1_HSYNC__LCDIF1_HSYNC 0x4001b0b0
548 MX6SX_PAD_LCD1_RESET__GPIO3_IO_27 0x4001b0b0
549 >;
550 };
551
552 pinctrl_peri_3v3: peri3v3grp {
553 fsl,pins = <
554 MX6SX_PAD_QSPI1A_DATA0__GPIO4_IO_16 0x80000000
555 >;
556 };
557
558 pinctrl_pwm3: pwm3grp-1 {
559 fsl,pins = <
560 MX6SX_PAD_SD1_DATA2__PWM3_OUT 0x110b0
561 >;
562 };
563
564 pinctrl_qspi2: qspi2grp {
565 fsl,pins = <
566 MX6SX_PAD_NAND_WP_B__QSPI2_A_DATA_0 0x70f1
567 MX6SX_PAD_NAND_READY_B__QSPI2_A_DATA_1 0x70f1
568 MX6SX_PAD_NAND_CE0_B__QSPI2_A_DATA_2 0x70f1
569 MX6SX_PAD_NAND_CE1_B__QSPI2_A_DATA_3 0x70f1
570 MX6SX_PAD_NAND_CLE__QSPI2_A_SCLK 0x70f1
571 MX6SX_PAD_NAND_ALE__QSPI2_A_SS0_B 0x70f1
572 MX6SX_PAD_NAND_DATA01__QSPI2_B_DATA_0 0x70f1
573 MX6SX_PAD_NAND_DATA00__QSPI2_B_DATA_1 0x70f1
574 MX6SX_PAD_NAND_WE_B__QSPI2_B_DATA_2 0x70f1
575 MX6SX_PAD_NAND_RE_B__QSPI2_B_DATA_3 0x70f1
576 MX6SX_PAD_NAND_DATA02__QSPI2_B_SCLK 0x70f1
577 MX6SX_PAD_NAND_DATA03__QSPI2_B_SS0_B 0x70f1
578 >;
579 };
580
581 pinctrl_vcc_sd3: vccsd3grp {
582 fsl,pins = <
583 MX6SX_PAD_KEY_COL1__GPIO2_IO_11 0x17059
584 >;
585 };
586
587 pinctrl_uart1: uart1grp {
588 fsl,pins = <
589 MX6SX_PAD_GPIO1_IO04__UART1_TX 0x1b0b1
590 MX6SX_PAD_GPIO1_IO05__UART1_RX 0x1b0b1
591 >;
592 };
593
594 pinctrl_uart5: uart5grp {
595 fsl,pins = <
596 MX6SX_PAD_KEY_ROW3__UART5_RX 0x1b0b1
597 MX6SX_PAD_KEY_COL3__UART5_TX 0x1b0b1
598 MX6SX_PAD_KEY_ROW2__UART5_CTS_B 0x1b0b1
599 MX6SX_PAD_KEY_COL2__UART5_RTS_B 0x1b0b1
600 >;
601 };
602
603 pinctrl_usb_otg1: usbotg1grp {
604 fsl,pins = <
605 MX6SX_PAD_GPIO1_IO09__GPIO1_IO_9 0x10b0
606 >;
607 };
608
609 pinctrl_usb_otg1_id: usbotg1idgrp {
610 fsl,pins = <
611 MX6SX_PAD_GPIO1_IO10__ANATOP_OTG1_ID 0x17059
612 >;
613 };
614
615 pinctrl_usb_otg2: usbot2ggrp {
616 fsl,pins = <
617 MX6SX_PAD_GPIO1_IO12__GPIO1_IO_12 0x10b0
618 >;
619 };
620
621 pinctrl_usdhc2: usdhc2grp {
622 fsl,pins = <
623 MX6SX_PAD_SD2_CMD__USDHC2_CMD 0x17059
624 MX6SX_PAD_SD2_CLK__USDHC2_CLK 0x10059
625 MX6SX_PAD_SD2_DATA0__USDHC2_DATA0 0x17059
626 MX6SX_PAD_SD2_DATA1__USDHC2_DATA1 0x17059
627 MX6SX_PAD_SD2_DATA2__USDHC2_DATA2 0x17059
628 MX6SX_PAD_SD2_DATA3__USDHC2_DATA3 0x17059
629 >;
630 };
631
632 pinctrl_usdhc3: usdhc3grp {
633 fsl,pins = <
634 MX6SX_PAD_SD3_CMD__USDHC3_CMD 0x17059
635 MX6SX_PAD_SD3_CLK__USDHC3_CLK 0x10059
636 MX6SX_PAD_SD3_DATA0__USDHC3_DATA0 0x17059
637 MX6SX_PAD_SD3_DATA1__USDHC3_DATA1 0x17059
638 MX6SX_PAD_SD3_DATA2__USDHC3_DATA2 0x17059
639 MX6SX_PAD_SD3_DATA3__USDHC3_DATA3 0x17059
640 MX6SX_PAD_SD3_DATA4__USDHC3_DATA4 0x17059
641 MX6SX_PAD_SD3_DATA5__USDHC3_DATA5 0x17059
642 MX6SX_PAD_SD3_DATA6__USDHC3_DATA6 0x17059
643 MX6SX_PAD_SD3_DATA7__USDHC3_DATA7 0x17059
644 MX6SX_PAD_KEY_COL0__GPIO2_IO_10 0x17059 /* CD */
645 MX6SX_PAD_KEY_ROW0__GPIO2_IO_15 0x17059 /* WP */
646 >;
647 };
648
649 pinctrl_usdhc3_100mhz: usdhc3grp-100mhz {
650 fsl,pins = <
651 MX6SX_PAD_SD3_CMD__USDHC3_CMD 0x170b9
652 MX6SX_PAD_SD3_CLK__USDHC3_CLK 0x100b9
653 MX6SX_PAD_SD3_DATA0__USDHC3_DATA0 0x170b9
654 MX6SX_PAD_SD3_DATA1__USDHC3_DATA1 0x170b9
655 MX6SX_PAD_SD3_DATA2__USDHC3_DATA2 0x170b9
656 MX6SX_PAD_SD3_DATA3__USDHC3_DATA3 0x170b9
657 MX6SX_PAD_SD3_DATA4__USDHC3_DATA4 0x170b9
658 MX6SX_PAD_SD3_DATA5__USDHC3_DATA5 0x170b9
659 MX6SX_PAD_SD3_DATA6__USDHC3_DATA6 0x170b9
660 MX6SX_PAD_SD3_DATA7__USDHC3_DATA7 0x170b9
661 >;
662 };
663
664 pinctrl_usdhc3_200mhz: usdhc3grp-200mhz {
665 fsl,pins = <
666 MX6SX_PAD_SD3_CMD__USDHC3_CMD 0x170f9
667 MX6SX_PAD_SD3_CLK__USDHC3_CLK 0x100f9
668 MX6SX_PAD_SD3_DATA0__USDHC3_DATA0 0x170f9
669 MX6SX_PAD_SD3_DATA1__USDHC3_DATA1 0x170f9
670 MX6SX_PAD_SD3_DATA2__USDHC3_DATA2 0x170f9
671 MX6SX_PAD_SD3_DATA3__USDHC3_DATA3 0x170f9
672 MX6SX_PAD_SD3_DATA4__USDHC3_DATA4 0x170f9
673 MX6SX_PAD_SD3_DATA5__USDHC3_DATA5 0x170f9
674 MX6SX_PAD_SD3_DATA6__USDHC3_DATA6 0x170f9
675 MX6SX_PAD_SD3_DATA7__USDHC3_DATA7 0x170f9
676 >;
677 };
678
679 pinctrl_usdhc4: usdhc4grp {
680 fsl,pins = <
681 MX6SX_PAD_SD4_CMD__USDHC4_CMD 0x17059
682 MX6SX_PAD_SD4_CLK__USDHC4_CLK 0x10059
683 MX6SX_PAD_SD4_DATA0__USDHC4_DATA0 0x17059
684 MX6SX_PAD_SD4_DATA1__USDHC4_DATA1 0x17059
685 MX6SX_PAD_SD4_DATA2__USDHC4_DATA2 0x17059
686 MX6SX_PAD_SD4_DATA3__USDHC4_DATA3 0x17059
687 MX6SX_PAD_SD4_DATA7__GPIO6_IO_21 0x17059 /* CD */
688 MX6SX_PAD_SD4_DATA6__GPIO6_IO_20 0x17059 /* WP */
689 >;
690 };
691 }; 144 };
692}; 145};
diff --git a/arch/arm/boot/dts/imx6sx-sdb.dtsi b/arch/arm/boot/dts/imx6sx-sdb.dtsi
new file mode 100644
index 000000000000..cef04cef3a80
--- /dev/null
+++ b/arch/arm/boot/dts/imx6sx-sdb.dtsi
@@ -0,0 +1,562 @@
1/*
2 * Copyright (C) 2014 Freescale Semiconductor, Inc.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8
9/dts-v1/;
10
11#include <dt-bindings/gpio/gpio.h>
12#include <dt-bindings/input/input.h>
13#include "imx6sx.dtsi"
14
15/ {
16 model = "Freescale i.MX6 SoloX SDB Board";
17 compatible = "fsl,imx6sx-sdb", "fsl,imx6sx";
18
19 chosen {
20 stdout-path = &uart1;
21 };
22
23 memory {
24 reg = <0x80000000 0x40000000>;
25 };
26
27 backlight {
28 compatible = "pwm-backlight";
29 pwms = <&pwm3 0 5000000>;
30 brightness-levels = <0 4 8 16 32 64 128 255>;
31 default-brightness-level = <6>;
32 };
33
34 gpio-keys {
35 compatible = "gpio-keys";
36 pinctrl-names = "default";
37 pinctrl-0 = <&pinctrl_gpio_keys>;
38
39 volume-up {
40 label = "Volume Up";
41 gpios = <&gpio1 18 GPIO_ACTIVE_LOW>;
42 linux,code = <KEY_VOLUMEUP>;
43 };
44
45 volume-down {
46 label = "Volume Down";
47 gpios = <&gpio1 19 GPIO_ACTIVE_LOW>;
48 linux,code = <KEY_VOLUMEDOWN>;
49 };
50 };
51
52 regulators {
53 compatible = "simple-bus";
54 #address-cells = <1>;
55 #size-cells = <0>;
56
57 vcc_sd3: regulator@0 {
58 compatible = "regulator-fixed";
59 reg = <0>;
60 pinctrl-names = "default";
61 pinctrl-0 = <&pinctrl_vcc_sd3>;
62 regulator-name = "VCC_SD3";
63 regulator-min-microvolt = <3000000>;
64 regulator-max-microvolt = <3000000>;
65 gpio = <&gpio2 11 GPIO_ACTIVE_HIGH>;
66 enable-active-high;
67 };
68
69 reg_usb_otg1_vbus: regulator@1 {
70 compatible = "regulator-fixed";
71 reg = <1>;
72 pinctrl-names = "default";
73 pinctrl-0 = <&pinctrl_usb_otg1>;
74 regulator-name = "usb_otg1_vbus";
75 regulator-min-microvolt = <5000000>;
76 regulator-max-microvolt = <5000000>;
77 gpio = <&gpio1 9 GPIO_ACTIVE_HIGH>;
78 enable-active-high;
79 };
80
81 reg_usb_otg2_vbus: regulator@2 {
82 compatible = "regulator-fixed";
83 reg = <2>;
84 pinctrl-names = "default";
85 pinctrl-0 = <&pinctrl_usb_otg2>;
86 regulator-name = "usb_otg2_vbus";
87 regulator-min-microvolt = <5000000>;
88 regulator-max-microvolt = <5000000>;
89 gpio = <&gpio1 12 GPIO_ACTIVE_HIGH>;
90 enable-active-high;
91 };
92
93 reg_psu_5v: regulator@3 {
94 compatible = "regulator-fixed";
95 reg = <3>;
96 regulator-name = "PSU-5V0";
97 regulator-min-microvolt = <5000000>;
98 regulator-max-microvolt = <5000000>;
99 };
100
101 reg_lcd_3v3: regulator@4 {
102 compatible = "regulator-fixed";
103 reg = <4>;
104 regulator-name = "lcd-3v3";
105 gpio = <&gpio3 27 0>;
106 enable-active-high;
107 };
108
109 reg_peri_3v3: regulator@5 {
110 compatible = "regulator-fixed";
111 reg = <5>;
112 pinctrl-names = "default";
113 pinctrl-0 = <&pinctrl_peri_3v3>;
114 regulator-name = "peri_3v3";
115 regulator-min-microvolt = <3300000>;
116 regulator-max-microvolt = <3300000>;
117 gpios = <&gpio4 16 GPIO_ACTIVE_HIGH>;
118 enable-active-high;
119 regulator-always-on;
120 };
121
122 reg_enet_3v3: regulator@6 {
123 compatible = "regulator-fixed";
124 reg = <6>;
125 pinctrl-names = "default";
126 pinctrl-0 = <&pinctrl_enet_3v3>;
127 regulator-name = "enet_3v3";
128 regulator-min-microvolt = <3300000>;
129 regulator-max-microvolt = <3300000>;
130 gpios = <&gpio2 6 GPIO_ACTIVE_LOW>;
131 };
132 };
133
134 sound {
135 compatible = "fsl,imx6sx-sdb-wm8962", "fsl,imx-audio-wm8962";
136 model = "wm8962-audio";
137 ssi-controller = <&ssi2>;
138 audio-codec = <&codec>;
139 audio-routing =
140 "Headphone Jack", "HPOUTL",
141 "Headphone Jack", "HPOUTR",
142 "Ext Spk", "SPKOUTL",
143 "Ext Spk", "SPKOUTR",
144 "AMIC", "MICBIAS",
145 "IN3R", "AMIC";
146 mux-int-port = <2>;
147 mux-ext-port = <6>;
148 };
149};
150
151&audmux {
152 pinctrl-names = "default";
153 pinctrl-0 = <&pinctrl_audmux>;
154 status = "okay";
155};
156
157&fec1 {
158 pinctrl-names = "default";
159 pinctrl-0 = <&pinctrl_enet1>;
160 phy-supply = <&reg_enet_3v3>;
161 phy-mode = "rgmii";
162 phy-handle = <&ethphy1>;
163 status = "okay";
164
165 mdio {
166 #address-cells = <1>;
167 #size-cells = <0>;
168
169 ethphy1: ethernet-phy@1 {
170 reg = <1>;
171 };
172
173 ethphy2: ethernet-phy@2 {
174 reg = <2>;
175 };
176 };
177};
178
179&fec2 {
180 pinctrl-names = "default";
181 pinctrl-0 = <&pinctrl_enet2>;
182 phy-mode = "rgmii";
183 phy-handle = <&ethphy2>;
184 status = "okay";
185};
186
187&i2c4 {
188 clock-frequency = <100000>;
189 pinctrl-names = "default";
190 pinctrl-0 = <&pinctrl_i2c4>;
191 status = "okay";
192
193 codec: wm8962@1a {
194 compatible = "wlf,wm8962";
195 reg = <0x1a>;
196 clocks = <&clks IMX6SX_CLK_AUDIO>;
197 DCVDD-supply = <&vgen4_reg>;
198 DBVDD-supply = <&vgen4_reg>;
199 AVDD-supply = <&vgen4_reg>;
200 CPVDD-supply = <&vgen4_reg>;
201 MICVDD-supply = <&vgen3_reg>;
202 PLLVDD-supply = <&vgen4_reg>;
203 SPKVDD1-supply = <&reg_psu_5v>;
204 SPKVDD2-supply = <&reg_psu_5v>;
205 };
206};
207
208&lcdif1 {
209 pinctrl-names = "default";
210 pinctrl-0 = <&pinctrl_lcd>;
211 lcd-supply = <&reg_lcd_3v3>;
212 display = <&display0>;
213 status = "okay";
214
215 display0: display0 {
216 bits-per-pixel = <16>;
217 bus-width = <24>;
218
219 display-timings {
220 native-mode = <&timing0>;
221 timing0: timing0 {
222 clock-frequency = <33500000>;
223 hactive = <800>;
224 vactive = <480>;
225 hback-porch = <89>;
226 hfront-porch = <164>;
227 vback-porch = <23>;
228 vfront-porch = <10>;
229 hsync-len = <10>;
230 vsync-len = <10>;
231 hsync-active = <0>;
232 vsync-active = <0>;
233 de-active = <1>;
234 pixelclk-active = <0>;
235 };
236 };
237 };
238};
239
240&pwm3 {
241 pinctrl-names = "default";
242 pinctrl-0 = <&pinctrl_pwm3>;
243 status = "okay";
244};
245
246&snvs_poweroff {
247 status = "okay";
248};
249
250&ssi2 {
251 status = "okay";
252};
253
254&uart1 {
255 pinctrl-names = "default";
256 pinctrl-0 = <&pinctrl_uart1>;
257 status = "okay";
258};
259
260&uart5 { /* for bluetooth */
261 pinctrl-names = "default";
262 pinctrl-0 = <&pinctrl_uart5>;
263 fsl,uart-has-rtscts;
264 status = "okay";
265};
266
267&usbotg1 {
268 vbus-supply = <&reg_usb_otg1_vbus>;
269 pinctrl-names = "default";
270 pinctrl-0 = <&pinctrl_usb_otg1_id>;
271 status = "okay";
272};
273
274&usbotg2 {
275 vbus-supply = <&reg_usb_otg2_vbus>;
276 dr_mode = "host";
277 status = "okay";
278};
279
280&usdhc2 {
281 pinctrl-names = "default";
282 pinctrl-0 = <&pinctrl_usdhc2>;
283 non-removable;
284 no-1-8-v;
285 keep-power-in-suspend;
286 enable-sdio-wakeup;
287 status = "okay";
288};
289
290&usdhc3 {
291 pinctrl-names = "default", "state_100mhz", "state_200mhz";
292 pinctrl-0 = <&pinctrl_usdhc3>;
293 pinctrl-1 = <&pinctrl_usdhc3_100mhz>;
294 pinctrl-2 = <&pinctrl_usdhc3_200mhz>;
295 bus-width = <8>;
296 cd-gpios = <&gpio2 10 GPIO_ACTIVE_HIGH>;
297 wp-gpios = <&gpio2 15 GPIO_ACTIVE_HIGH>;
298 keep-power-in-suspend;
299 enable-sdio-wakeup;
300 vmmc-supply = <&vcc_sd3>;
301 status = "okay";
302};
303
304&usdhc4 {
305 pinctrl-names = "default";
306 pinctrl-0 = <&pinctrl_usdhc4>;
307 cd-gpios = <&gpio6 21 GPIO_ACTIVE_HIGH>;
308 wp-gpios = <&gpio6 20 GPIO_ACTIVE_HIGH>;
309 status = "okay";
310};
311
312&iomuxc {
313 imx6x-sdb {
314 pinctrl_audmux: audmuxgrp {
315 fsl,pins = <
316 MX6SX_PAD_CSI_DATA00__AUDMUX_AUD6_TXC 0x130b0
317 MX6SX_PAD_CSI_DATA01__AUDMUX_AUD6_TXFS 0x130b0
318 MX6SX_PAD_CSI_HSYNC__AUDMUX_AUD6_TXD 0x120b0
319 MX6SX_PAD_CSI_VSYNC__AUDMUX_AUD6_RXD 0x130b0
320 MX6SX_PAD_CSI_PIXCLK__AUDMUX_MCLK 0x130b0
321 >;
322 };
323
324 pinctrl_enet1: enet1grp {
325 fsl,pins = <
326 MX6SX_PAD_ENET1_MDIO__ENET1_MDIO 0xa0b1
327 MX6SX_PAD_ENET1_MDC__ENET1_MDC 0xa0b1
328 MX6SX_PAD_RGMII1_TXC__ENET1_RGMII_TXC 0xa0b1
329 MX6SX_PAD_RGMII1_TD0__ENET1_TX_DATA_0 0xa0b1
330 MX6SX_PAD_RGMII1_TD1__ENET1_TX_DATA_1 0xa0b1
331 MX6SX_PAD_RGMII1_TD2__ENET1_TX_DATA_2 0xa0b1
332 MX6SX_PAD_RGMII1_TD3__ENET1_TX_DATA_3 0xa0b1
333 MX6SX_PAD_RGMII1_TX_CTL__ENET1_TX_EN 0xa0b1
334 MX6SX_PAD_RGMII1_RXC__ENET1_RX_CLK 0x3081
335 MX6SX_PAD_RGMII1_RD0__ENET1_RX_DATA_0 0x3081
336 MX6SX_PAD_RGMII1_RD1__ENET1_RX_DATA_1 0x3081
337 MX6SX_PAD_RGMII1_RD2__ENET1_RX_DATA_2 0x3081
338 MX6SX_PAD_RGMII1_RD3__ENET1_RX_DATA_3 0x3081
339 MX6SX_PAD_RGMII1_RX_CTL__ENET1_RX_EN 0x3081
340 MX6SX_PAD_ENET2_RX_CLK__ENET2_REF_CLK_25M 0x91
341 >;
342 };
343
344 pinctrl_enet_3v3: enet3v3grp {
345 fsl,pins = <
346 MX6SX_PAD_ENET2_COL__GPIO2_IO_6 0x80000000
347 >;
348 };
349
350 pinctrl_enet2: enet2grp {
351 fsl,pins = <
352 MX6SX_PAD_RGMII2_TXC__ENET2_RGMII_TXC 0xa0b9
353 MX6SX_PAD_RGMII2_TD0__ENET2_TX_DATA_0 0xa0b1
354 MX6SX_PAD_RGMII2_TD1__ENET2_TX_DATA_1 0xa0b1
355 MX6SX_PAD_RGMII2_TD2__ENET2_TX_DATA_2 0xa0b1
356 MX6SX_PAD_RGMII2_TD3__ENET2_TX_DATA_3 0xa0b1
357 MX6SX_PAD_RGMII2_TX_CTL__ENET2_TX_EN 0xa0b1
358 MX6SX_PAD_RGMII2_RXC__ENET2_RX_CLK 0x3081
359 MX6SX_PAD_RGMII2_RD0__ENET2_RX_DATA_0 0x3081
360 MX6SX_PAD_RGMII2_RD1__ENET2_RX_DATA_1 0x3081
361 MX6SX_PAD_RGMII2_RD2__ENET2_RX_DATA_2 0x3081
362 MX6SX_PAD_RGMII2_RD3__ENET2_RX_DATA_3 0x3081
363 MX6SX_PAD_RGMII2_RX_CTL__ENET2_RX_EN 0x3081
364 >;
365 };
366
367 pinctrl_gpio_keys: gpio_keysgrp {
368 fsl,pins = <
369 MX6SX_PAD_CSI_DATA04__GPIO1_IO_18 0x17059
370 MX6SX_PAD_CSI_DATA05__GPIO1_IO_19 0x17059
371 >;
372 };
373
374 pinctrl_i2c1: i2c1grp {
375 fsl,pins = <
376 MX6SX_PAD_GPIO1_IO01__I2C1_SDA 0x4001b8b1
377 MX6SX_PAD_GPIO1_IO00__I2C1_SCL 0x4001b8b1
378 >;
379 };
380
381 pinctrl_i2c4: i2c4grp {
382 fsl,pins = <
383 MX6SX_PAD_CSI_DATA07__I2C4_SDA 0x4001b8b1
384 MX6SX_PAD_CSI_DATA06__I2C4_SCL 0x4001b8b1
385 >;
386 };
387
388 pinctrl_lcd: lcdgrp {
389 fsl,pins = <
390 MX6SX_PAD_LCD1_DATA00__LCDIF1_DATA_0 0x4001b0b0
391 MX6SX_PAD_LCD1_DATA01__LCDIF1_DATA_1 0x4001b0b0
392 MX6SX_PAD_LCD1_DATA02__LCDIF1_DATA_2 0x4001b0b0
393 MX6SX_PAD_LCD1_DATA03__LCDIF1_DATA_3 0x4001b0b0
394 MX6SX_PAD_LCD1_DATA04__LCDIF1_DATA_4 0x4001b0b0
395 MX6SX_PAD_LCD1_DATA05__LCDIF1_DATA_5 0x4001b0b0
396 MX6SX_PAD_LCD1_DATA06__LCDIF1_DATA_6 0x4001b0b0
397 MX6SX_PAD_LCD1_DATA07__LCDIF1_DATA_7 0x4001b0b0
398 MX6SX_PAD_LCD1_DATA08__LCDIF1_DATA_8 0x4001b0b0
399 MX6SX_PAD_LCD1_DATA09__LCDIF1_DATA_9 0x4001b0b0
400 MX6SX_PAD_LCD1_DATA10__LCDIF1_DATA_10 0x4001b0b0
401 MX6SX_PAD_LCD1_DATA11__LCDIF1_DATA_11 0x4001b0b0
402 MX6SX_PAD_LCD1_DATA12__LCDIF1_DATA_12 0x4001b0b0
403 MX6SX_PAD_LCD1_DATA13__LCDIF1_DATA_13 0x4001b0b0
404 MX6SX_PAD_LCD1_DATA14__LCDIF1_DATA_14 0x4001b0b0
405 MX6SX_PAD_LCD1_DATA15__LCDIF1_DATA_15 0x4001b0b0
406 MX6SX_PAD_LCD1_DATA16__LCDIF1_DATA_16 0x4001b0b0
407 MX6SX_PAD_LCD1_DATA17__LCDIF1_DATA_17 0x4001b0b0
408 MX6SX_PAD_LCD1_DATA18__LCDIF1_DATA_18 0x4001b0b0
409 MX6SX_PAD_LCD1_DATA19__LCDIF1_DATA_19 0x4001b0b0
410 MX6SX_PAD_LCD1_DATA20__LCDIF1_DATA_20 0x4001b0b0
411 MX6SX_PAD_LCD1_DATA21__LCDIF1_DATA_21 0x4001b0b0
412 MX6SX_PAD_LCD1_DATA22__LCDIF1_DATA_22 0x4001b0b0
413 MX6SX_PAD_LCD1_DATA23__LCDIF1_DATA_23 0x4001b0b0
414 MX6SX_PAD_LCD1_CLK__LCDIF1_CLK 0x4001b0b0
415 MX6SX_PAD_LCD1_ENABLE__LCDIF1_ENABLE 0x4001b0b0
416 MX6SX_PAD_LCD1_VSYNC__LCDIF1_VSYNC 0x4001b0b0
417 MX6SX_PAD_LCD1_HSYNC__LCDIF1_HSYNC 0x4001b0b0
418 MX6SX_PAD_LCD1_RESET__GPIO3_IO_27 0x4001b0b0
419 >;
420 };
421
422 pinctrl_peri_3v3: peri3v3grp {
423 fsl,pins = <
424 MX6SX_PAD_QSPI1A_DATA0__GPIO4_IO_16 0x80000000
425 >;
426 };
427
428 pinctrl_pwm3: pwm3grp-1 {
429 fsl,pins = <
430 MX6SX_PAD_SD1_DATA2__PWM3_OUT 0x110b0
431 >;
432 };
433
434 pinctrl_qspi2: qspi2grp {
435 fsl,pins = <
436 MX6SX_PAD_NAND_WP_B__QSPI2_A_DATA_0 0x70f1
437 MX6SX_PAD_NAND_READY_B__QSPI2_A_DATA_1 0x70f1
438 MX6SX_PAD_NAND_CE0_B__QSPI2_A_DATA_2 0x70f1
439 MX6SX_PAD_NAND_CE1_B__QSPI2_A_DATA_3 0x70f1
440 MX6SX_PAD_NAND_CLE__QSPI2_A_SCLK 0x70f1
441 MX6SX_PAD_NAND_ALE__QSPI2_A_SS0_B 0x70f1
442 MX6SX_PAD_NAND_DATA01__QSPI2_B_DATA_0 0x70f1
443 MX6SX_PAD_NAND_DATA00__QSPI2_B_DATA_1 0x70f1
444 MX6SX_PAD_NAND_WE_B__QSPI2_B_DATA_2 0x70f1
445 MX6SX_PAD_NAND_RE_B__QSPI2_B_DATA_3 0x70f1
446 MX6SX_PAD_NAND_DATA02__QSPI2_B_SCLK 0x70f1
447 MX6SX_PAD_NAND_DATA03__QSPI2_B_SS0_B 0x70f1
448 >;
449 };
450
451 pinctrl_vcc_sd3: vccsd3grp {
452 fsl,pins = <
453 MX6SX_PAD_KEY_COL1__GPIO2_IO_11 0x17059
454 >;
455 };
456
457 pinctrl_uart1: uart1grp {
458 fsl,pins = <
459 MX6SX_PAD_GPIO1_IO04__UART1_TX 0x1b0b1
460 MX6SX_PAD_GPIO1_IO05__UART1_RX 0x1b0b1
461 >;
462 };
463
464 pinctrl_uart5: uart5grp {
465 fsl,pins = <
466 MX6SX_PAD_KEY_ROW3__UART5_RX 0x1b0b1
467 MX6SX_PAD_KEY_COL3__UART5_TX 0x1b0b1
468 MX6SX_PAD_KEY_ROW2__UART5_CTS_B 0x1b0b1
469 MX6SX_PAD_KEY_COL2__UART5_RTS_B 0x1b0b1
470 >;
471 };
472
473 pinctrl_usb_otg1: usbotg1grp {
474 fsl,pins = <
475 MX6SX_PAD_GPIO1_IO09__GPIO1_IO_9 0x10b0
476 >;
477 };
478
479 pinctrl_usb_otg1_id: usbotg1idgrp {
480 fsl,pins = <
481 MX6SX_PAD_GPIO1_IO10__ANATOP_OTG1_ID 0x17059
482 >;
483 };
484
485 pinctrl_usb_otg2: usbot2ggrp {
486 fsl,pins = <
487 MX6SX_PAD_GPIO1_IO12__GPIO1_IO_12 0x10b0
488 >;
489 };
490
491 pinctrl_usdhc2: usdhc2grp {
492 fsl,pins = <
493 MX6SX_PAD_SD2_CMD__USDHC2_CMD 0x17059
494 MX6SX_PAD_SD2_CLK__USDHC2_CLK 0x10059
495 MX6SX_PAD_SD2_DATA0__USDHC2_DATA0 0x17059
496 MX6SX_PAD_SD2_DATA1__USDHC2_DATA1 0x17059
497 MX6SX_PAD_SD2_DATA2__USDHC2_DATA2 0x17059
498 MX6SX_PAD_SD2_DATA3__USDHC2_DATA3 0x17059
499 >;
500 };
501
502 pinctrl_usdhc3: usdhc3grp {
503 fsl,pins = <
504 MX6SX_PAD_SD3_CMD__USDHC3_CMD 0x17059
505 MX6SX_PAD_SD3_CLK__USDHC3_CLK 0x10059
506 MX6SX_PAD_SD3_DATA0__USDHC3_DATA0 0x17059
507 MX6SX_PAD_SD3_DATA1__USDHC3_DATA1 0x17059
508 MX6SX_PAD_SD3_DATA2__USDHC3_DATA2 0x17059
509 MX6SX_PAD_SD3_DATA3__USDHC3_DATA3 0x17059
510 MX6SX_PAD_SD3_DATA4__USDHC3_DATA4 0x17059
511 MX6SX_PAD_SD3_DATA5__USDHC3_DATA5 0x17059
512 MX6SX_PAD_SD3_DATA6__USDHC3_DATA6 0x17059
513 MX6SX_PAD_SD3_DATA7__USDHC3_DATA7 0x17059
514 MX6SX_PAD_KEY_COL0__GPIO2_IO_10 0x17059 /* CD */
515 MX6SX_PAD_KEY_ROW0__GPIO2_IO_15 0x17059 /* WP */
516 >;
517 };
518
519 pinctrl_usdhc3_100mhz: usdhc3grp-100mhz {
520 fsl,pins = <
521 MX6SX_PAD_SD3_CMD__USDHC3_CMD 0x170b9
522 MX6SX_PAD_SD3_CLK__USDHC3_CLK 0x100b9
523 MX6SX_PAD_SD3_DATA0__USDHC3_DATA0 0x170b9
524 MX6SX_PAD_SD3_DATA1__USDHC3_DATA1 0x170b9
525 MX6SX_PAD_SD3_DATA2__USDHC3_DATA2 0x170b9
526 MX6SX_PAD_SD3_DATA3__USDHC3_DATA3 0x170b9
527 MX6SX_PAD_SD3_DATA4__USDHC3_DATA4 0x170b9
528 MX6SX_PAD_SD3_DATA5__USDHC3_DATA5 0x170b9
529 MX6SX_PAD_SD3_DATA6__USDHC3_DATA6 0x170b9
530 MX6SX_PAD_SD3_DATA7__USDHC3_DATA7 0x170b9
531 >;
532 };
533
534 pinctrl_usdhc3_200mhz: usdhc3grp-200mhz {
535 fsl,pins = <
536 MX6SX_PAD_SD3_CMD__USDHC3_CMD 0x170f9
537 MX6SX_PAD_SD3_CLK__USDHC3_CLK 0x100f9
538 MX6SX_PAD_SD3_DATA0__USDHC3_DATA0 0x170f9
539 MX6SX_PAD_SD3_DATA1__USDHC3_DATA1 0x170f9
540 MX6SX_PAD_SD3_DATA2__USDHC3_DATA2 0x170f9
541 MX6SX_PAD_SD3_DATA3__USDHC3_DATA3 0x170f9
542 MX6SX_PAD_SD3_DATA4__USDHC3_DATA4 0x170f9
543 MX6SX_PAD_SD3_DATA5__USDHC3_DATA5 0x170f9
544 MX6SX_PAD_SD3_DATA6__USDHC3_DATA6 0x170f9
545 MX6SX_PAD_SD3_DATA7__USDHC3_DATA7 0x170f9
546 >;
547 };
548
549 pinctrl_usdhc4: usdhc4grp {
550 fsl,pins = <
551 MX6SX_PAD_SD4_CMD__USDHC4_CMD 0x17059
552 MX6SX_PAD_SD4_CLK__USDHC4_CLK 0x10059
553 MX6SX_PAD_SD4_DATA0__USDHC4_DATA0 0x17059
554 MX6SX_PAD_SD4_DATA1__USDHC4_DATA1 0x17059
555 MX6SX_PAD_SD4_DATA2__USDHC4_DATA2 0x17059
556 MX6SX_PAD_SD4_DATA3__USDHC4_DATA3 0x17059
557 MX6SX_PAD_SD4_DATA7__GPIO6_IO_21 0x17059 /* CD */
558 MX6SX_PAD_SD4_DATA6__GPIO6_IO_20 0x17059 /* WP */
559 >;
560 };
561 };
562};
diff --git a/arch/arm/boot/dts/imx6sx.dtsi b/arch/arm/boot/dts/imx6sx.dtsi
index 7a24fee1e7ae..708175d59b9c 100644
--- a/arch/arm/boot/dts/imx6sx.dtsi
+++ b/arch/arm/boot/dts/imx6sx.dtsi
@@ -88,6 +88,7 @@
88 interrupt-controller; 88 interrupt-controller;
89 reg = <0x00a01000 0x1000>, 89 reg = <0x00a01000 0x1000>,
90 <0x00a00100 0x100>; 90 <0x00a00100 0x100>;
91 interrupt-parent = <&intc>;
91 }; 92 };
92 93
93 clocks { 94 clocks {
@@ -131,7 +132,7 @@
131 #address-cells = <1>; 132 #address-cells = <1>;
132 #size-cells = <1>; 133 #size-cells = <1>;
133 compatible = "simple-bus"; 134 compatible = "simple-bus";
134 interrupt-parent = <&intc>; 135 interrupt-parent = <&gpc>;
135 ranges; 136 ranges;
136 137
137 pmu { 138 pmu {
@@ -666,7 +667,7 @@
666 #size-cells = <1>; 667 #size-cells = <1>;
667 ranges = <0 0x020cc000 0x4000>; 668 ranges = <0 0x020cc000 0x4000>;
668 669
669 snvs-rtc-lp@34 { 670 snvs_rtc: snvs-rtc-lp@34 {
670 compatible = "fsl,sec-v4.0-mon-rtc-lp"; 671 compatible = "fsl,sec-v4.0-mon-rtc-lp";
671 reg = <0x34 0x58>; 672 reg = <0x34 0x58>;
672 interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>; 673 interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
@@ -700,7 +701,10 @@
700 gpc: gpc@020dc000 { 701 gpc: gpc@020dc000 {
701 compatible = "fsl,imx6sx-gpc", "fsl,imx6q-gpc"; 702 compatible = "fsl,imx6sx-gpc", "fsl,imx6q-gpc";
702 reg = <0x020dc000 0x4000>; 703 reg = <0x020dc000 0x4000>;
704 interrupt-controller;
705 #interrupt-cells = <3>;
703 interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>; 706 interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>;
707 interrupt-parent = <&intc>;
704 }; 708 };
705 709
706 iomuxc: iomuxc@020e0000 { 710 iomuxc: iomuxc@020e0000 {
@@ -763,6 +767,7 @@
763 fsl,usbmisc = <&usbmisc 2>; 767 fsl,usbmisc = <&usbmisc 2>;
764 phy_type = "hsic"; 768 phy_type = "hsic";
765 fsl,anatop = <&anatop>; 769 fsl,anatop = <&anatop>;
770 dr_mode = "host";
766 status = "disabled"; 771 status = "disabled";
767 }; 772 };
768 773
diff --git a/arch/arm/boot/dts/omap2.dtsi b/arch/arm/boot/dts/omap2.dtsi
index 59d1c297bb30..578fa2a54dce 100644
--- a/arch/arm/boot/dts/omap2.dtsi
+++ b/arch/arm/boot/dts/omap2.dtsi
@@ -87,8 +87,8 @@
87 <14>, 87 <14>,
88 <15>; 88 <15>;
89 #dma-cells = <1>; 89 #dma-cells = <1>;
90 #dma-channels = <32>; 90 dma-channels = <32>;
91 #dma-requests = <64>; 91 dma-requests = <64>;
92 }; 92 };
93 93
94 i2c1: i2c@48070000 { 94 i2c1: i2c@48070000 {
diff --git a/arch/arm/boot/dts/omap2420.dtsi b/arch/arm/boot/dts/omap2420.dtsi
index e2b2e93d7b61..5b9a376cc31e 100644
--- a/arch/arm/boot/dts/omap2420.dtsi
+++ b/arch/arm/boot/dts/omap2420.dtsi
@@ -14,47 +14,65 @@
14 compatible = "ti,omap2420", "ti,omap2"; 14 compatible = "ti,omap2420", "ti,omap2";
15 15
16 ocp { 16 ocp {
17 prcm: prcm@48008000 { 17 l4: l4@48000000 {
18 compatible = "ti,omap2-prcm"; 18 compatible = "ti,omap2-l4", "simple-bus";
19 reg = <0x48008000 0x1000>; 19 #address-cells = <1>;
20 #size-cells = <1>;
21 ranges = <0 0x48000000 0x100000>;
20 22
21 prcm_clocks: clocks { 23 prcm: prcm@8000 {
22 #address-cells = <1>; 24 compatible = "ti,omap2-prcm";
23 #size-cells = <0>; 25 reg = <0x8000 0x1000>;
24 };
25 26
26 prcm_clockdomains: clockdomains { 27 prcm_clocks: clocks {
27 }; 28 #address-cells = <1>;
28 }; 29 #size-cells = <0>;
30 };
29 31
30 scrm: scrm@48000000 { 32 prcm_clockdomains: clockdomains {
31 compatible = "ti,omap2-scrm"; 33 };
32 reg = <0x48000000 0x1000>; 34 };
33 35
34 scrm_clocks: clocks { 36 scm: scm@0 {
37 compatible = "ti,omap2-scm", "simple-bus";
38 reg = <0x0 0x1000>;
35 #address-cells = <1>; 39 #address-cells = <1>;
36 #size-cells = <0>; 40 #size-cells = <1>;
41 ranges = <0 0x0 0x1000>;
42
43 omap2420_pmx: pinmux@30 {
44 compatible = "ti,omap2420-padconf",
45 "pinctrl-single";
46 reg = <0x30 0x0113>;
47 #address-cells = <1>;
48 #size-cells = <0>;
49 pinctrl-single,register-width = <8>;
50 pinctrl-single,function-mask = <0x3f>;
51 };
52
53 scm_conf: scm_conf@270 {
54 compatible = "syscon";
55 reg = <0x270 0x100>;
56 #address-cells = <1>;
57 #size-cells = <1>;
58
59 scm_clocks: clocks {
60 #address-cells = <1>;
61 #size-cells = <0>;
62 };
63 };
64
65 scm_clockdomains: clockdomains {
66 };
37 }; 67 };
38 68
39 scrm_clockdomains: clockdomains { 69 counter32k: counter@4000 {
70 compatible = "ti,omap-counter32k";
71 reg = <0x4000 0x20>;
72 ti,hwmods = "counter_32k";
40 }; 73 };
41 }; 74 };
42 75
43 counter32k: counter@48004000 {
44 compatible = "ti,omap-counter32k";
45 reg = <0x48004000 0x20>;
46 ti,hwmods = "counter_32k";
47 };
48
49 omap2420_pmx: pinmux@48000030 {
50 compatible = "ti,omap2420-padconf", "pinctrl-single";
51 reg = <0x48000030 0x0113>;
52 #address-cells = <1>;
53 #size-cells = <0>;
54 pinctrl-single,register-width = <8>;
55 pinctrl-single,function-mask = <0x3f>;
56 };
57
58 gpio1: gpio@48018000 { 76 gpio1: gpio@48018000 {
59 compatible = "ti,omap2-gpio"; 77 compatible = "ti,omap2-gpio";
60 reg = <0x48018000 0x200>; 78 reg = <0x48018000 0x200>;
diff --git a/arch/arm/boot/dts/omap2430-clocks.dtsi b/arch/arm/boot/dts/omap2430-clocks.dtsi
index 805f75df1cf2..93fed68839b9 100644
--- a/arch/arm/boot/dts/omap2430-clocks.dtsi
+++ b/arch/arm/boot/dts/omap2430-clocks.dtsi
@@ -8,12 +8,12 @@
8 * published by the Free Software Foundation. 8 * published by the Free Software Foundation.
9 */ 9 */
10 10
11&scrm_clocks { 11&scm_clocks {
12 mcbsp3_mux_fck: mcbsp3_mux_fck { 12 mcbsp3_mux_fck: mcbsp3_mux_fck {
13 #clock-cells = <0>; 13 #clock-cells = <0>;
14 compatible = "ti,composite-mux-clock"; 14 compatible = "ti,composite-mux-clock";
15 clocks = <&func_96m_ck>, <&mcbsp_clks>; 15 clocks = <&func_96m_ck>, <&mcbsp_clks>;
16 reg = <0x02e8>; 16 reg = <0x78>;
17 }; 17 };
18 18
19 mcbsp3_fck: mcbsp3_fck { 19 mcbsp3_fck: mcbsp3_fck {
@@ -27,7 +27,7 @@
27 compatible = "ti,composite-mux-clock"; 27 compatible = "ti,composite-mux-clock";
28 clocks = <&func_96m_ck>, <&mcbsp_clks>; 28 clocks = <&func_96m_ck>, <&mcbsp_clks>;
29 ti,bit-shift = <2>; 29 ti,bit-shift = <2>;
30 reg = <0x02e8>; 30 reg = <0x78>;
31 }; 31 };
32 32
33 mcbsp4_fck: mcbsp4_fck { 33 mcbsp4_fck: mcbsp4_fck {
@@ -41,7 +41,7 @@
41 compatible = "ti,composite-mux-clock"; 41 compatible = "ti,composite-mux-clock";
42 clocks = <&func_96m_ck>, <&mcbsp_clks>; 42 clocks = <&func_96m_ck>, <&mcbsp_clks>;
43 ti,bit-shift = <4>; 43 ti,bit-shift = <4>;
44 reg = <0x02e8>; 44 reg = <0x78>;
45 }; 45 };
46 46
47 mcbsp5_fck: mcbsp5_fck { 47 mcbsp5_fck: mcbsp5_fck {
diff --git a/arch/arm/boot/dts/omap2430.dtsi b/arch/arm/boot/dts/omap2430.dtsi
index 0dc8de2782b1..11a7963be003 100644
--- a/arch/arm/boot/dts/omap2430.dtsi
+++ b/arch/arm/boot/dts/omap2430.dtsi
@@ -14,60 +14,73 @@
14 compatible = "ti,omap2430", "ti,omap2"; 14 compatible = "ti,omap2430", "ti,omap2";
15 15
16 ocp { 16 ocp {
17 prcm: prcm@49006000 { 17 l4_wkup: l4_wkup@49000000 {
18 compatible = "ti,omap2-prcm"; 18 compatible = "ti,omap2-l4-wkup", "simple-bus";
19 reg = <0x49006000 0x1000>; 19 #address-cells = <1>;
20 #size-cells = <1>;
21 ranges = <0 0x49000000 0x31000>;
20 22
21 prcm_clocks: clocks { 23 prcm: prcm@6000 {
22 #address-cells = <1>; 24 compatible = "ti,omap2-prcm";
23 #size-cells = <0>; 25 reg = <0x6000 0x1000>;
24 };
25 26
26 prcm_clockdomains: clockdomains { 27 prcm_clocks: clocks {
27 }; 28 #address-cells = <1>;
28 }; 29 #size-cells = <0>;
29 30 };
30 scrm: scrm@49002000 {
31 compatible = "ti,omap2-scrm";
32 reg = <0x49002000 0x1000>;
33 31
34 scrm_clocks: clocks { 32 prcm_clockdomains: clockdomains {
35 #address-cells = <1>; 33 };
36 #size-cells = <0>;
37 }; 34 };
38 35
39 scrm_clockdomains: clockdomains { 36 scm: scm@2000 {
37 compatible = "ti,omap2-scm", "simple-bus";
38 reg = <0x2000 0x1000>;
39 #address-cells = <1>;
40 #size-cells = <1>;
41 ranges = <0 0x2000 0x1000>;
42
43 omap2430_pmx: pinmux@30 {
44 compatible = "ti,omap2430-padconf",
45 "pinctrl-single";
46 reg = <0x30 0x0154>;
47 #address-cells = <1>;
48 #size-cells = <0>;
49 pinctrl-single,register-width = <8>;
50 pinctrl-single,function-mask = <0x3f>;
51 };
52
53 scm_conf: scm_conf@270 {
54 compatible = "syscon";
55 reg = <0x270 0x240>;
56 #address-cells = <1>;
57 #size-cells = <1>;
58
59 scm_clocks: clocks {
60 #address-cells = <1>;
61 #size-cells = <0>;
62 };
63
64 pbias_regulator: pbias_regulator {
65 compatible = "ti,pbias-omap";
66 reg = <0x230 0x4>;
67 syscon = <&scm_conf>;
68 pbias_mmc_reg: pbias_mmc_omap2430 {
69 regulator-name = "pbias_mmc_omap2430";
70 regulator-min-microvolt = <1800000>;
71 regulator-max-microvolt = <3000000>;
72 };
73 };
74 };
75
76 scm_clockdomains: clockdomains {
77 };
40 }; 78 };
41 };
42
43 counter32k: counter@49020000 {
44 compatible = "ti,omap-counter32k";
45 reg = <0x49020000 0x20>;
46 ti,hwmods = "counter_32k";
47 };
48
49 omap2430_pmx: pinmux@49002030 {
50 compatible = "ti,omap2430-padconf", "pinctrl-single";
51 reg = <0x49002030 0x0154>;
52 #address-cells = <1>;
53 #size-cells = <0>;
54 pinctrl-single,register-width = <8>;
55 pinctrl-single,function-mask = <0x3f>;
56 };
57
58 omap2_scm_general: tisyscon@49002270 {
59 compatible = "syscon";
60 reg = <0x49002270 0x240>;
61 };
62 79
63 pbias_regulator: pbias_regulator { 80 counter32k: counter@20000 {
64 compatible = "ti,pbias-omap"; 81 compatible = "ti,omap-counter32k";
65 reg = <0x230 0x4>; 82 reg = <0x20000 0x20>;
66 syscon = <&omap2_scm_general>; 83 ti,hwmods = "counter_32k";
67 pbias_mmc_reg: pbias_mmc_omap2430 {
68 regulator-name = "pbias_mmc_omap2430";
69 regulator-min-microvolt = <1800000>;
70 regulator-max-microvolt = <3000000>;
71 }; 84 };
72 }; 85 };
73 86
diff --git a/arch/arm/boot/dts/omap24xx-clocks.dtsi b/arch/arm/boot/dts/omap24xx-clocks.dtsi
index a1365ca926eb..63965b876973 100644
--- a/arch/arm/boot/dts/omap24xx-clocks.dtsi
+++ b/arch/arm/boot/dts/omap24xx-clocks.dtsi
@@ -7,13 +7,13 @@
7 * it under the terms of the GNU General Public License version 2 as 7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation. 8 * published by the Free Software Foundation.
9 */ 9 */
10&scrm_clocks { 10&scm_clocks {
11 mcbsp1_mux_fck: mcbsp1_mux_fck { 11 mcbsp1_mux_fck: mcbsp1_mux_fck {
12 #clock-cells = <0>; 12 #clock-cells = <0>;
13 compatible = "ti,composite-mux-clock"; 13 compatible = "ti,composite-mux-clock";
14 clocks = <&func_96m_ck>, <&mcbsp_clks>; 14 clocks = <&func_96m_ck>, <&mcbsp_clks>;
15 ti,bit-shift = <2>; 15 ti,bit-shift = <2>;
16 reg = <0x0274>; 16 reg = <0x4>;
17 }; 17 };
18 18
19 mcbsp1_fck: mcbsp1_fck { 19 mcbsp1_fck: mcbsp1_fck {
@@ -27,7 +27,7 @@
27 compatible = "ti,composite-mux-clock"; 27 compatible = "ti,composite-mux-clock";
28 clocks = <&func_96m_ck>, <&mcbsp_clks>; 28 clocks = <&func_96m_ck>, <&mcbsp_clks>;
29 ti,bit-shift = <6>; 29 ti,bit-shift = <6>;
30 reg = <0x0274>; 30 reg = <0x4>;
31 }; 31 };
32 32
33 mcbsp2_fck: mcbsp2_fck { 33 mcbsp2_fck: mcbsp2_fck {
diff --git a/arch/arm/boot/dts/omap3-beagle-xm.dts b/arch/arm/boot/dts/omap3-beagle-xm.dts
index 25f7b0a22114..da1464bfbc60 100644
--- a/arch/arm/boot/dts/omap3-beagle-xm.dts
+++ b/arch/arm/boot/dts/omap3-beagle-xm.dts
@@ -60,7 +60,6 @@
60 ti,model = "omap3beagle"; 60 ti,model = "omap3beagle";
61 61
62 ti,mcbsp = <&mcbsp2>; 62 ti,mcbsp = <&mcbsp2>;
63 ti,codec = <&twl_audio>;
64 }; 63 };
65 64
66 gpio_keys { 65 gpio_keys {
diff --git a/arch/arm/boot/dts/omap3-beagle.dts b/arch/arm/boot/dts/omap3-beagle.dts
index c792391ef090..28f99a14c0a1 100644
--- a/arch/arm/boot/dts/omap3-beagle.dts
+++ b/arch/arm/boot/dts/omap3-beagle.dts
@@ -71,7 +71,6 @@
71 ti,model = "omap3beagle"; 71 ti,model = "omap3beagle";
72 72
73 ti,mcbsp = <&mcbsp2>; 73 ti,mcbsp = <&mcbsp2>;
74 ti,codec = <&twl_audio>;
75 }; 74 };
76 75
77 gpio_keys { 76 gpio_keys {
@@ -379,3 +378,55 @@
379 }; 378 };
380 }; 379 };
381}; 380};
381
382&gpmc {
383 status = "ok";
384 ranges = <0 0 0x30000000 0x1000000>; /* CS0 space, 16MB */
385
386 /* Chip select 0 */
387 nand@0,0 {
388 reg = <0 0 4>; /* NAND I/O window, 4 bytes */
389 interrupts = <20>;
390 ti,nand-ecc-opt = "ham1";
391 nand-bus-width = <16>;
392 #address-cells = <1>;
393 #size-cells = <1>;
394
395 gpmc,device-width = <2>;
396 gpmc,cs-on-ns = <0>;
397 gpmc,cs-rd-off-ns = <36>;
398 gpmc,cs-wr-off-ns = <36>;
399 gpmc,adv-on-ns = <6>;
400 gpmc,adv-rd-off-ns = <24>;
401 gpmc,adv-wr-off-ns = <36>;
402 gpmc,oe-on-ns = <6>;
403 gpmc,oe-off-ns = <48>;
404 gpmc,we-on-ns = <6>;
405 gpmc,we-off-ns = <30>;
406 gpmc,rd-cycle-ns = <72>;
407 gpmc,wr-cycle-ns = <72>;
408 gpmc,access-ns = <54>;
409 gpmc,wr-access-ns = <30>;
410
411 partition@0 {
412 label = "X-Loader";
413 reg = <0 0x80000>;
414 };
415 partition@80000 {
416 label = "U-Boot";
417 reg = <0x80000 0x1e0000>;
418 };
419 partition@1c0000 {
420 label = "U-Boot Env";
421 reg = <0x260000 0x20000>;
422 };
423 partition@280000 {
424 label = "Kernel";
425 reg = <0x280000 0x400000>;
426 };
427 partition@780000 {
428 label = "Filesystem";
429 reg = <0x680000 0xf980000>;
430 };
431 };
432};
diff --git a/arch/arm/boot/dts/omap3-cm-t3x30.dtsi b/arch/arm/boot/dts/omap3-cm-t3x30.dtsi
index d9e92b654f85..046cd7733c4f 100644
--- a/arch/arm/boot/dts/omap3-cm-t3x30.dtsi
+++ b/arch/arm/boot/dts/omap3-cm-t3x30.dtsi
@@ -16,7 +16,6 @@
16 ti,model = "cm-t35"; 16 ti,model = "cm-t35";
17 17
18 ti,mcbsp = <&mcbsp2>; 18 ti,mcbsp = <&mcbsp2>;
19 ti,codec = <&twl_audio>;
20 }; 19 };
21}; 20};
22 21
diff --git a/arch/arm/boot/dts/omap3-devkit8000.dts b/arch/arm/boot/dts/omap3-devkit8000.dts
index 169037e5ff53..134d3f27a8ec 100644
--- a/arch/arm/boot/dts/omap3-devkit8000.dts
+++ b/arch/arm/boot/dts/omap3-devkit8000.dts
@@ -48,7 +48,6 @@
48 ti,model = "devkit8000"; 48 ti,model = "devkit8000";
49 49
50 ti,mcbsp = <&mcbsp2>; 50 ti,mcbsp = <&mcbsp2>;
51 ti,codec = <&twl_audio>;
52 ti,audio-routing = 51 ti,audio-routing =
53 "Ext Spk", "PREDRIVEL", 52 "Ext Spk", "PREDRIVEL",
54 "Ext Spk", "PREDRIVER", 53 "Ext Spk", "PREDRIVER",
diff --git a/arch/arm/boot/dts/omap3-gta04.dtsi b/arch/arm/boot/dts/omap3-gta04.dtsi
index fb3a69604ed5..b9f68817bd6e 100644
--- a/arch/arm/boot/dts/omap3-gta04.dtsi
+++ b/arch/arm/boot/dts/omap3-gta04.dtsi
@@ -46,7 +46,6 @@
46 ti,model = "gta04"; 46 ti,model = "gta04";
47 47
48 ti,mcbsp = <&mcbsp2>; 48 ti,mcbsp = <&mcbsp2>;
49 ti,codec = <&twl_audio>;
50 }; 49 };
51 50
52 spi_lcd { 51 spi_lcd {
diff --git a/arch/arm/boot/dts/omap3-igep.dtsi b/arch/arm/boot/dts/omap3-igep.dtsi
index 8a63ad2286aa..d5e5cd449b16 100644
--- a/arch/arm/boot/dts/omap3-igep.dtsi
+++ b/arch/arm/boot/dts/omap3-igep.dtsi
@@ -22,7 +22,6 @@
22 compatible = "ti,omap-twl4030"; 22 compatible = "ti,omap-twl4030";
23 ti,model = "igep2"; 23 ti,model = "igep2";
24 ti,mcbsp = <&mcbsp2>; 24 ti,mcbsp = <&mcbsp2>;
25 ti,codec = <&twl_audio>;
26 }; 25 };
27 26
28 vdd33: regulator-vdd33 { 27 vdd33: regulator-vdd33 {
diff --git a/arch/arm/boot/dts/omap3-lilly-a83x.dtsi b/arch/arm/boot/dts/omap3-lilly-a83x.dtsi
index e81fb651d5d0..e63133304a34 100644
--- a/arch/arm/boot/dts/omap3-lilly-a83x.dtsi
+++ b/arch/arm/boot/dts/omap3-lilly-a83x.dtsi
@@ -38,7 +38,6 @@
38 ti,model = "lilly-a83x"; 38 ti,model = "lilly-a83x";
39 39
40 ti,mcbsp = <&mcbsp2>; 40 ti,mcbsp = <&mcbsp2>;
41 ti,codec = <&twl_audio>;
42 }; 41 };
43 42
44 reg_vcc3: vcc3 { 43 reg_vcc3: vcc3 {
diff --git a/arch/arm/boot/dts/omap3-n9.dts b/arch/arm/boot/dts/omap3-n9.dts
index 9938b5dc1909..f2e213931e09 100644
--- a/arch/arm/boot/dts/omap3-n9.dts
+++ b/arch/arm/boot/dts/omap3-n9.dts
@@ -16,3 +16,40 @@
16 model = "Nokia N9"; 16 model = "Nokia N9";
17 compatible = "nokia,omap3-n9", "ti,omap36xx", "ti,omap3"; 17 compatible = "nokia,omap3-n9", "ti,omap36xx", "ti,omap3";
18}; 18};
19
20&i2c2 {
21 smia_1: camera@10 {
22 compatible = "nokia,smia";
23 reg = <0x10>;
24 /* No reset gpio */
25 vana-supply = <&vaux3>;
26 clocks = <&isp 0>;
27 clock-frequency = <9600000>;
28 nokia,nvm-size = <(16 * 64)>;
29 port {
30 smia_1_1: endpoint {
31 link-frequencies = /bits/ 64 <199200000 210000000 499200000>;
32 clock-lanes = <0>;
33 data-lanes = <1 2>;
34 remote-endpoint = <&csi2a_ep>;
35 };
36 };
37 };
38};
39
40&isp {
41 vdd-csiphy1-supply = <&vaux2>;
42 vdd-csiphy2-supply = <&vaux2>;
43 ports {
44 port@2 {
45 reg = <2>;
46 csi2a_ep: endpoint {
47 remote-endpoint = <&smia_1_1>;
48 clock-lanes = <2>;
49 data-lanes = <1 3>;
50 crc = <1>;
51 lane-polarities = <1 1 1>;
52 };
53 };
54 };
55};
diff --git a/arch/arm/boot/dts/omap3-n900.dts b/arch/arm/boot/dts/omap3-n900.dts
index 60403273f83e..bbea3076e1d4 100644
--- a/arch/arm/boot/dts/omap3-n900.dts
+++ b/arch/arm/boot/dts/omap3-n900.dts
@@ -9,13 +9,34 @@
9 9
10/dts-v1/; 10/dts-v1/;
11 11
12#include "omap34xx-hs.dtsi" 12#include "omap34xx.dtsi"
13#include <dt-bindings/input/input.h> 13#include <dt-bindings/input/input.h>
14 14
15/*
16 * Default secure signed bootloader (Nokia X-Loader) does not enable L3 firewall
17 * for omap AES HW crypto support. When linux kernel try to access memory of AES
18 * blocks then kernel receive "Unhandled fault: external abort on non-linefetch"
19 * and crash. Until somebody fix omap-aes.c and omap_hwmod_3xxx_data.c code (no
20 * crash anymore) omap AES support will be disabled for all Nokia N900 devices.
21 * There is "unofficial" version of bootloader which enables AES in L3 firewall
22 * but it is not widely used and to prevent kernel crash rather AES is disabled.
23 * There is also no runtime detection code if AES is disabled in L3 firewall...
24 */
25&aes {
26 status = "disabled";
27};
28
15/ { 29/ {
16 model = "Nokia N900"; 30 model = "Nokia N900";
17 compatible = "nokia,omap3-n900", "ti,omap3430", "ti,omap3"; 31 compatible = "nokia,omap3-n900", "ti,omap3430", "ti,omap3";
18 32
33 aliases {
34 i2c0;
35 i2c1 = &i2c1;
36 i2c2 = &i2c2;
37 i2c3 = &i2c3;
38 };
39
19 cpus { 40 cpus {
20 cpu@0 { 41 cpu@0 {
21 cpu0-supply = <&vcc>; 42 cpu0-supply = <&vcc>;
@@ -704,7 +725,7 @@
704 compatible = "smsc,lan91c94"; 725 compatible = "smsc,lan91c94";
705 interrupt-parent = <&gpio2>; 726 interrupt-parent = <&gpio2>;
706 interrupts = <22 IRQ_TYPE_LEVEL_HIGH>; /* gpio54 */ 727 interrupts = <22 IRQ_TYPE_LEVEL_HIGH>; /* gpio54 */
707 reg = <1 0x300 0xf>; /* 16 byte IO range at offset 0x300 */ 728 reg = <1 0 0xf>; /* 16 byte IO range */
708 bank-width = <2>; 729 bank-width = <2>;
709 pinctrl-names = "default"; 730 pinctrl-names = "default";
710 pinctrl-0 = <&ethernet_pins>; 731 pinctrl-0 = <&ethernet_pins>;
diff --git a/arch/arm/boot/dts/omap3-n950-n9.dtsi b/arch/arm/boot/dts/omap3-n950-n9.dtsi
index c41db94ee9c2..800b379d368d 100644
--- a/arch/arm/boot/dts/omap3-n950-n9.dtsi
+++ b/arch/arm/boot/dts/omap3-n950-n9.dtsi
@@ -8,7 +8,7 @@
8 * published by the Free Software Foundation. 8 * published by the Free Software Foundation.
9 */ 9 */
10 10
11#include "omap36xx-hs.dtsi" 11#include "omap36xx.dtsi"
12 12
13/ { 13/ {
14 cpus { 14 cpus {
diff --git a/arch/arm/boot/dts/omap3-n950.dts b/arch/arm/boot/dts/omap3-n950.dts
index 261c5589bfa3..0885b34d5d7d 100644
--- a/arch/arm/boot/dts/omap3-n950.dts
+++ b/arch/arm/boot/dts/omap3-n950.dts
@@ -16,3 +16,40 @@
16 model = "Nokia N950"; 16 model = "Nokia N950";
17 compatible = "nokia,omap3-n950", "ti,omap36xx", "ti,omap3"; 17 compatible = "nokia,omap3-n950", "ti,omap36xx", "ti,omap3";
18}; 18};
19
20&i2c2 {
21 smia_1: camera@10 {
22 compatible = "nokia,smia";
23 reg = <0x10>;
24 /* No reset gpio */
25 vana-supply = <&vaux3>;
26 clocks = <&isp 0>;
27 clock-frequency = <9600000>;
28 nokia,nvm-size = <(16 * 64)>;
29 port {
30 smia_1_1: endpoint {
31 link-frequencies = /bits/ 64 <210000000 333600000 398400000>;
32 clock-lanes = <0>;
33 data-lanes = <1 2>;
34 remote-endpoint = <&csi2a_ep>;
35 };
36 };
37 };
38};
39
40&isp {
41 vdd-csiphy1-supply = <&vaux2>;
42 vdd-csiphy2-supply = <&vaux2>;
43 ports {
44 port@2 {
45 reg = <2>;
46 csi2a_ep: endpoint {
47 remote-endpoint = <&smia_1_1>;
48 clock-lanes = <2>;
49 data-lanes = <3 1>;
50 crc = <1>;
51 lane-polarities = <1 1 1>;
52 };
53 };
54 };
55};
diff --git a/arch/arm/boot/dts/omap3-overo-base.dtsi b/arch/arm/boot/dts/omap3-overo-base.dtsi
index d36bf0250a05..18e1649681c1 100644
--- a/arch/arm/boot/dts/omap3-overo-base.dtsi
+++ b/arch/arm/boot/dts/omap3-overo-base.dtsi
@@ -27,7 +27,6 @@
27 ti,model = "overo"; 27 ti,model = "overo";
28 28
29 ti,mcbsp = <&mcbsp2>; 29 ti,mcbsp = <&mcbsp2>;
30 ti,codec = <&twl_audio>;
31 }; 30 };
32 31
33 /* HS USB Port 2 Power */ 32 /* HS USB Port 2 Power */
diff --git a/arch/arm/boot/dts/omap3-pandora-1ghz.dts b/arch/arm/boot/dts/omap3-pandora-1ghz.dts
new file mode 100644
index 000000000000..9619a28dfd7d
--- /dev/null
+++ b/arch/arm/boot/dts/omap3-pandora-1ghz.dts
@@ -0,0 +1,70 @@
1/*
2 * Copyright (C) 2015
3 * Nikolaus Schaller <hns@goldelico.com>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
8 */
9
10/*
11 * device tree for OpenPandora 1GHz with DM3730
12 */
13
14/dts-v1/;
15
16#include "omap36xx.dtsi"
17#include "omap3-pandora-common.dtsi"
18
19/ {
20 model = "Pandora Handheld Console 1GHz";
21
22 compatible = "ti,omap36xx", "ti,omap3";
23};
24
25&omap3_pmx_core2 {
26
27 pinctrl-names = "default";
28 pinctrl-0 = <
29 &hsusb2_2_pins
30 &control_pins
31 >;
32
33 hsusb2_2_pins: pinmux_hsusb2_2_pins {
34 pinctrl-single,pins = <
35 OMAP3630_CORE2_IOPAD(0x25f0, PIN_OUTPUT | MUX_MODE3) /* etk_d10.hsusb2_clk */
36 OMAP3630_CORE2_IOPAD(0x25f2, PIN_OUTPUT | MUX_MODE3) /* etk_d11.hsusb2_stp */
37 OMAP3630_CORE2_IOPAD(0x25f4, PIN_INPUT_PULLDOWN | MUX_MODE3) /* etk_d12.hsusb2_dir */
38 OMAP3630_CORE2_IOPAD(0x25f6, PIN_INPUT_PULLDOWN | MUX_MODE3) /* etk_d13.hsusb2_nxt */
39 OMAP3630_CORE2_IOPAD(0x25f8, PIN_INPUT_PULLDOWN | MUX_MODE3) /* etk_d14.hsusb2_data0 */
40 OMAP3630_CORE2_IOPAD(0x25fa, PIN_INPUT_PULLDOWN | MUX_MODE3) /* etk_d15.hsusb2_data1 */
41 >;
42 };
43
44 mmc3_pins: pinmux_mmc3_pins {
45 pinctrl-single,pins = <
46 OMAP3630_CORE2_IOPAD(0x25d8, PIN_INPUT_PULLUP | MUX_MODE2) /* etk_clk.sdmmc3_clk */
47 OMAP3630_CORE2_IOPAD(0x25da, PIN_INPUT_PULLUP | MUX_MODE2) /* etk_ctl.sdmmc3_cmd */
48 OMAP3630_CORE2_IOPAD(0x25e2, PIN_INPUT_PULLUP | MUX_MODE2) /* etk_d3.sdmmc3_dat3 */
49 OMAP3630_CORE2_IOPAD(0x25e4, PIN_INPUT_PULLUP | MUX_MODE2) /* etk_d4.sdmmc3_dat0 */
50 OMAP3630_CORE2_IOPAD(0x25e6, PIN_INPUT_PULLUP | MUX_MODE2) /* etk_d5.sdmmc3_dat1 */
51 OMAP3630_CORE2_IOPAD(0x25e8, PIN_INPUT_PULLUP | MUX_MODE2) /* etk_d6.sdmmc3_dat2 */
52 >;
53 };
54
55 control_pins: pinmux_control_pins {
56 pinctrl-single,pins = <
57 OMAP3630_CORE2_IOPAD(0x25dc, PIN_INPUT_PULLDOWN | MUX_MODE4) /* etk_d0.gpio_14 = HP_SHUTDOWN */
58 OMAP3630_CORE2_IOPAD(0x25de, PIN_OUTPUT | MUX_MODE4) /* etk_d1.gpio_15 = BT_SHUTDOWN */
59 OMAP3630_CORE2_IOPAD(0x25e0, PIN_OUTPUT | MUX_MODE4) /* etk_d2.gpio_16 = RESET_USB_HOST */
60 OMAP3630_CORE2_IOPAD(0x25ea, PIN_INPUT | MUX_MODE4) /* etk_d7.gpio_21 = WIFI IRQ */
61 OMAP3630_CORE2_IOPAD(0x25ec, PIN_OUTPUT | MUX_MODE4) /* etk_d8.gpio_22 = MSECURE */
62 OMAP3630_CORE2_IOPAD(0x25ee, PIN_OUTPUT | MUX_MODE4) /* etk_d9.gpio_23 = WIFI_POWER */
63 OMAP3_WKUP_IOPAD(0x2a54, PIN_INPUT | MUX_MODE4) /* reserved.gpio_127 = MMC2_WP */
64 OMAP3_WKUP_IOPAD(0x2a56, PIN_INPUT | MUX_MODE4) /* reserved.gpio_126 = MMC1_WP */
65 OMAP3_WKUP_IOPAD(0x2a58, PIN_OUTPUT | MUX_MODE4) /* reserved.gpio_128 = LED_MMC1 */
66 OMAP3_WKUP_IOPAD(0x2a5a, PIN_OUTPUT | MUX_MODE4) /* reserved.gpio_129 = LED_MMC2 */
67
68 >;
69 };
70};
diff --git a/arch/arm/boot/dts/omap3-pandora-600mhz.dts b/arch/arm/boot/dts/omap3-pandora-600mhz.dts
new file mode 100644
index 000000000000..fb803a70a2bb
--- /dev/null
+++ b/arch/arm/boot/dts/omap3-pandora-600mhz.dts
@@ -0,0 +1,65 @@
1/*
2 * Copyright (C) 2015
3 * Nikolaus Schaller <hns@goldelico.com>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
8 */
9
10/*
11 * device tree for OpenPandora with OMAP3530
12 */
13
14/dts-v1/;
15
16#include "omap34xx.dtsi"
17#include "omap3-pandora-common.dtsi"
18
19/ {
20 model = "Pandora Handheld Console";
21
22 compatible = "ti,omap3";
23};
24
25&omap3_pmx_core2 {
26
27 pinctrl-names = "default";
28 pinctrl-0 = <
29 &hsusb2_2_pins
30 &control_pins
31 >;
32
33 hsusb2_2_pins: pinmux_hsusb2_2_pins {
34 pinctrl-single,pins = <
35 OMAP3430_CORE2_IOPAD(0x25f0, PIN_OUTPUT | MUX_MODE3) /* etk_d10.hsusb2_clk */
36 OMAP3430_CORE2_IOPAD(0x25f2, PIN_OUTPUT | MUX_MODE3) /* etk_d11.hsusb2_stp */
37 OMAP3430_CORE2_IOPAD(0x25f4, PIN_INPUT_PULLDOWN | MUX_MODE3) /* etk_d12.hsusb2_dir */
38 OMAP3430_CORE2_IOPAD(0x25f6, PIN_INPUT_PULLDOWN | MUX_MODE3) /* etk_d13.hsusb2_nxt */
39 OMAP3430_CORE2_IOPAD(0x25f8, PIN_INPUT_PULLDOWN | MUX_MODE3) /* etk_d14.hsusb2_data0 */
40 OMAP3430_CORE2_IOPAD(0x25fa, PIN_INPUT_PULLDOWN | MUX_MODE3) /* etk_d15.hsusb2_data1 */
41 >;
42 };
43
44 mmc3_pins: pinmux_mmc3_pins {
45 pinctrl-single,pins = <
46 OMAP3430_CORE2_IOPAD(0x25d8, PIN_INPUT_PULLUP | MUX_MODE2) /* etk_clk.sdmmc3_clk */
47 OMAP3430_CORE2_IOPAD(0x25da, PIN_INPUT_PULLUP | MUX_MODE2) /* etk_ctl.sdmmc3_cmd */
48 OMAP3430_CORE2_IOPAD(0x25e2, PIN_INPUT_PULLUP | MUX_MODE2) /* etk_d3.sdmmc3_dat3 */
49 OMAP3430_CORE2_IOPAD(0x25e4, PIN_INPUT_PULLUP | MUX_MODE2) /* etk_d4.sdmmc3_dat0 */
50 OMAP3430_CORE2_IOPAD(0x25e6, PIN_INPUT_PULLUP | MUX_MODE2) /* etk_d5.sdmmc3_dat1 */
51 OMAP3430_CORE2_IOPAD(0x25e8, PIN_INPUT_PULLUP | MUX_MODE2) /* etk_d6.sdmmc3_dat2 */
52 >;
53 };
54
55 control_pins: pinmux_control_pins {
56 pinctrl-single,pins = <
57 OMAP3430_CORE2_IOPAD(0x25dc, PIN_INPUT_PULLDOWN | MUX_MODE4) /* etk_d0.gpio_14 = HP_SHUTDOWN */
58 OMAP3430_CORE2_IOPAD(0x25de, PIN_OUTPUT | MUX_MODE4) /* etk_d1.gpio_15 = BT_SHUTDOWN */
59 OMAP3430_CORE2_IOPAD(0x25e0, PIN_OUTPUT | MUX_MODE4) /* etk_d2.gpio_16 = RESET_USB_HOST */
60 OMAP3430_CORE2_IOPAD(0x25ea, PIN_INPUT | MUX_MODE4) /* etk_d7.gpio_21 = WIFI IRQ */
61 OMAP3430_CORE2_IOPAD(0x25ec, PIN_OUTPUT | MUX_MODE4) /* etk_d8.gpio_22 = MSECURE */
62 OMAP3430_CORE2_IOPAD(0x25ee, PIN_OUTPUT | MUX_MODE4) /* etk_d9.gpio_23 = WIFI_POWER */
63 >;
64 };
65};
diff --git a/arch/arm/boot/dts/omap3-pandora-common.dtsi b/arch/arm/boot/dts/omap3-pandora-common.dtsi
new file mode 100644
index 000000000000..782ab1ff1d08
--- /dev/null
+++ b/arch/arm/boot/dts/omap3-pandora-common.dtsi
@@ -0,0 +1,640 @@
1/*
2 * Copyright (C) 2015
3 * Nikolaus Schaller <hns@goldelico.com>
4 *
5 * Common device tree include for OpenPandora devices.
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 */
11
12#include <dt-bindings/input/input.h>
13
14/ {
15 cpus {
16 cpu@0 {
17 cpu0-supply = <&vcc>;
18 };
19 };
20
21 memory {
22 device_type = "memory";
23 reg = <0x80000000 0x20000000>; /* 512 MB */
24 };
25
26 aliases {
27 display0 = &lcd;
28 };
29
30 tv: connector@1 {
31 compatible = "connector-analog-tv";
32 label = "tv";
33
34 port {
35 tv_connector_in: endpoint {
36 remote-endpoint = <&venc_out>;
37 };
38 };
39 };
40
41 gpio-leds {
42
43 compatible = "gpio-leds";
44
45 pinctrl-names = "default";
46 pinctrl-0 = <&led_pins>;
47
48 led@1 {
49 label = "pandora::sd1";
50 gpios = <&gpio5 0 GPIO_ACTIVE_HIGH>; /* GPIO_128 */
51 linux,default-trigger = "mmc0";
52 default-state = "off";
53 };
54
55 led@2 {
56 label = "pandora::sd2";
57 gpios = <&gpio5 1 GPIO_ACTIVE_HIGH>; /* GPIO_129 */
58 linux,default-trigger = "mmc1";
59 default-state = "off";
60 };
61
62 led@3 {
63 label = "pandora::bluetooth";
64 gpios = <&gpio5 30 GPIO_ACTIVE_HIGH>; /* GPIO_158 */
65 linux,default-trigger = "heartbeat";
66 default-state = "off";
67 };
68
69 led@4 {
70 label = "pandora::wifi";
71 gpios = <&gpio5 31 GPIO_ACTIVE_HIGH>; /* GPIO_159 */
72 linux,default-trigger = "mmc2";
73 default-state = "off";
74 };
75 };
76
77 gpio-keys {
78 compatible = "gpio-keys";
79
80 pinctrl-names = "default";
81 pinctrl-0 = <&button_pins>;
82
83 up-button {
84 label = "up";
85 linux,code = <KEY_UP>;
86 gpios = <&gpio4 14 GPIO_ACTIVE_LOW>; /* GPIO_110 */
87 gpio-key,wakeup;
88 };
89
90 down-button {
91 label = "down";
92 linux,code = <KEY_DOWN>;
93 gpios = <&gpio4 7 GPIO_ACTIVE_LOW>; /* GPIO_103 */
94 gpio-key,wakeup;
95 };
96
97 left-button {
98 label = "left";
99 linux,code = <KEY_LEFT>;
100 gpios = <&gpio4 0 GPIO_ACTIVE_LOW>; /* GPIO_96 */
101 gpio-key,wakeup;
102 };
103
104 right-button {
105 label = "right";
106 linux,code = <KEY_RIGHT>;
107 gpios = <&gpio4 2 GPIO_ACTIVE_LOW>; /* GPIO_98 */
108 gpio-key,wakeup;
109 };
110
111 pageup-button {
112 label = "game 1";
113 linux,code = <KEY_PAGEUP>;
114 gpios = <&gpio4 13 GPIO_ACTIVE_LOW>; /* GPIO_109 */
115 gpio-key,wakeup;
116 };
117
118 pagedown-button {
119 label = "game 3";
120 linux,code = <KEY_PAGEDOWN>;
121 gpios = <&gpio4 10 GPIO_ACTIVE_LOW>; /* GPIO_106 */
122 gpio-key,wakeup;
123 };
124
125 home-button {
126 label = "game 4";
127 linux,code = <KEY_HOME>;
128 gpios = <&gpio4 5 GPIO_ACTIVE_LOW>; /* GPIO_101 */
129 gpio-key,wakeup;
130 };
131
132 end-button {
133 label = "game 2";
134 linux,code = <KEY_END>;
135 gpios = <&gpio4 15 GPIO_ACTIVE_LOW>; /* GPIO_111 */
136 gpio-key,wakeup;
137 };
138
139 right-shift {
140 label = "l";
141 linux,code = <KEY_RIGHTSHIFT>;
142 gpios = <&gpio4 6 GPIO_ACTIVE_LOW>; /* GPIO_102 */
143 gpio-key,wakeup;
144 };
145
146 kp-plus {
147 label = "l2";
148 linux,code = <KEY_KPPLUS>;
149 gpios = <&gpio4 1 GPIO_ACTIVE_LOW>; /* GPIO_97 */
150 gpio-key,wakeup;
151 };
152
153 right-ctrl {
154 label = "r";
155 linux,code = <KEY_RIGHTCTRL>;
156 gpios = <&gpio4 9 GPIO_ACTIVE_LOW>; /* GPIO_105 */
157 gpio-key,wakeup;
158 };
159
160 kp-minus {
161 label = "r2";
162 linux,code = <KEY_KPMINUS>;
163 gpios = <&gpio4 11 GPIO_ACTIVE_LOW>; /* GPIO_107 */
164 gpio-key,wakeup;
165 };
166
167 left-ctrl {
168 label = "ctrl";
169 linux,code = <KEY_LEFTCTRL>;
170 gpios = <&gpio4 8 GPIO_ACTIVE_LOW>; /* GPIO_104 */
171 gpio-key,wakeup;
172 };
173
174 menu {
175 label = "menu";
176 linux,code = <KEY_MENU>;
177 gpios = <&gpio4 3 GPIO_ACTIVE_LOW>; /* GPIO_99 */
178 gpio-key,wakeup;
179 };
180
181 hold {
182 label = "hold";
183 linux,code = <KEY_COFFEE>;
184 gpios = <&gpio6 16 GPIO_ACTIVE_LOW>; /* GPIO_176 */
185 gpio-key,wakeup;
186 };
187
188 left-alt {
189 label = "alt";
190 linux,code = <KEY_LEFTALT>;
191 gpios = <&gpio4 4 GPIO_ACTIVE_HIGH>; /* GPIO_100 */
192 gpio-key,wakeup;
193 };
194
195 lid {
196 label = "lid";
197 linux,code = <0x00>; /* SW_LID lid shut */
198 linux,input-type = <0x05>; /* EV_SW */
199 gpios = <&gpio4 12 GPIO_ACTIVE_HIGH>; /* GPIO_108 */
200 };
201 };
202};
203
204&omap3_pmx_core {
205
206 mmc1_pins: pinmux_mmc1_pins {
207 pinctrl-single,pins = <
208 OMAP3_CORE1_IOPAD(0x2144, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_clk.sdmmc1_clk */
209 OMAP3_CORE1_IOPAD(0x2146, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_cmd.sdmmc1_cmd */
210 OMAP3_CORE1_IOPAD(0x2148, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat0.sdmmc1_dat0 */
211 OMAP3_CORE1_IOPAD(0x214a, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat1.sdmmc1_dat1 */
212 OMAP3_CORE1_IOPAD(0x214c, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat2.sdmmc1_dat2 */
213 OMAP3_CORE1_IOPAD(0x214e, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat3.sdmmc1_dat3 */
214 >;
215 };
216
217 mmc2_pins: pinmux_mmc2_pins {
218 pinctrl-single,pins = <
219 OMAP3_CORE1_IOPAD(0x2158, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_clk.sdmmc2_clk */
220 OMAP3_CORE1_IOPAD(0x215a, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_cmd.sdmmc2_cmd */
221 OMAP3_CORE1_IOPAD(0x215c, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat0.sdmmc2_dat0 */
222 OMAP3_CORE1_IOPAD(0x215e, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat1.sdmmc2_dat1 */
223 OMAP3_CORE1_IOPAD(0x2160, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat2.sdmmc2_dat2 */
224 OMAP3_CORE1_IOPAD(0x2162, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc2_dat3.sdmmc2_dat3 */
225 OMAP3_CORE1_IOPAD(0x2164, PIN_OUTPUT_PULLUP | MUX_MODE1) /* sdmmc2_dat4.sdmmc2_dirdat0 */
226 OMAP3_CORE1_IOPAD(0x2166, PIN_OUTPUT_PULLUP | MUX_MODE1) /* sdmmc2_dat5.sdmmc2_dirdat1 */
227 OMAP3_CORE1_IOPAD(0x2168, PIN_OUTPUT_PULLUP | MUX_MODE1) /* sdmmc2_dat6.sdmmc2_dircmd */
228 OMAP3_CORE1_IOPAD(0x216a, PIN_INPUT_PULLUP | MUX_MODE1) /* sdmmc2_dat7.sdmmc2_clkin */
229 >;
230 };
231
232 dss_dpi_pins: pinmux_dss_dpi_pins {
233 pinctrl-single,pins = <
234 OMAP3_CORE1_IOPAD(0x20d4, PIN_OUTPUT | MUX_MODE0) /* dss_pclk.dss_pclk */
235 OMAP3_CORE1_IOPAD(0x20d6, PIN_OUTPUT | MUX_MODE0) /* dss_hsync.dss_hsync */
236 OMAP3_CORE1_IOPAD(0x20d8, PIN_OUTPUT | MUX_MODE0) /* dss_vsync.dss_vsync */
237 OMAP3_CORE1_IOPAD(0x20da, PIN_OUTPUT | MUX_MODE0) /* dss_acbias.dss_acbias */
238 OMAP3_CORE1_IOPAD(0x20dc, PIN_OUTPUT | MUX_MODE0) /* dss_data0.dss_data0 */
239 OMAP3_CORE1_IOPAD(0x20de, PIN_OUTPUT | MUX_MODE0) /* dss_data1.dss_data1 */
240 OMAP3_CORE1_IOPAD(0x20e0, PIN_OUTPUT | MUX_MODE0) /* dss_data2.dss_data2 */
241 OMAP3_CORE1_IOPAD(0x20e2, PIN_OUTPUT | MUX_MODE0) /* dss_data3.dss_data3 */
242 OMAP3_CORE1_IOPAD(0x20e4, PIN_OUTPUT | MUX_MODE0) /* dss_data4.dss_data4 */
243 OMAP3_CORE1_IOPAD(0x20e6, PIN_OUTPUT | MUX_MODE0) /* dss_data5.dss_data5 */
244 OMAP3_CORE1_IOPAD(0x20e8, PIN_OUTPUT | MUX_MODE0) /* dss_data6.dss_data6 */
245 OMAP3_CORE1_IOPAD(0x20ea, PIN_OUTPUT | MUX_MODE0) /* dss_data7.dss_data7 */
246 OMAP3_CORE1_IOPAD(0x20ec, PIN_OUTPUT | MUX_MODE0) /* dss_data8.dss_data8 */
247 OMAP3_CORE1_IOPAD(0x20ee, PIN_OUTPUT | MUX_MODE0) /* dss_data9.dss_data9 */
248 OMAP3_CORE1_IOPAD(0x20f0, PIN_OUTPUT | MUX_MODE0) /* dss_data10.dss_data10 */
249 OMAP3_CORE1_IOPAD(0x20f2, PIN_OUTPUT | MUX_MODE0) /* dss_data11.dss_data11 */
250 OMAP3_CORE1_IOPAD(0x20f4, PIN_OUTPUT | MUX_MODE0) /* dss_data12.dss_data12 */
251 OMAP3_CORE1_IOPAD(0x20f6, PIN_OUTPUT | MUX_MODE0) /* dss_data13.dss_data13 */
252 OMAP3_CORE1_IOPAD(0x20f8, PIN_OUTPUT | MUX_MODE0) /* dss_data14.dss_data14 */
253 OMAP3_CORE1_IOPAD(0x20fa, PIN_OUTPUT | MUX_MODE0) /* dss_data15.dss_data15 */
254 OMAP3_CORE1_IOPAD(0x20fc, PIN_OUTPUT | MUX_MODE0) /* dss_data16.dss_data16 */
255 OMAP3_CORE1_IOPAD(0x20fe, PIN_OUTPUT | MUX_MODE0) /* dss_data17.dss_data17 */
256 OMAP3_CORE1_IOPAD(0x2100, PIN_OUTPUT | MUX_MODE0) /* dss_data18.dss_data18 */
257 OMAP3_CORE1_IOPAD(0x2102, PIN_OUTPUT | MUX_MODE0) /* dss_data19.dss_data19 */
258 OMAP3_CORE1_IOPAD(0x2104, PIN_OUTPUT | MUX_MODE0) /* dss_data20.dss_data20 */
259 OMAP3_CORE1_IOPAD(0x2106, PIN_OUTPUT | MUX_MODE0) /* dss_data21.dss_data21 */
260 OMAP3_CORE1_IOPAD(0x2108, PIN_OUTPUT | MUX_MODE0) /* dss_data22.dss_data22 */
261 OMAP3_CORE1_IOPAD(0x210a, PIN_OUTPUT | MUX_MODE0) /* dss_data23.dss_data23 */
262 OMAP3_CORE1_IOPAD(0x218e, PIN_OUTPUT | MUX_MODE4) /* GPIO_157 = lcd reset */
263 >;
264 };
265
266 uart3_pins: pinmux_uart3_pins {
267 pinctrl-single,pins = <
268 OMAP3_CORE1_IOPAD(0x219e, PIN_INPUT | PIN_OFF_WAKEUPENABLE | MUX_MODE0) /* uart3_rx_irrx.uart3_rx_irrx */
269 OMAP3_CORE1_IOPAD(0x21a0, PIN_OUTPUT | MUX_MODE0) /* uart3_tx_irtx.uart3_tx_irtx */
270 >;
271 };
272
273 led_pins: pinmux_leds_pins {
274 pinctrl-single,pins = <
275 OMAP3_CORE1_IOPAD(0x2154, PIN_OUTPUT | MUX_MODE4) /* GPIO_128 */
276 OMAP3_CORE1_IOPAD(0x2156, PIN_OUTPUT | MUX_MODE4) /* GPIO_129 */
277 OMAP3_CORE1_IOPAD(0x2190, PIN_OUTPUT | MUX_MODE4) /* GPIO_158 */
278 OMAP3_CORE1_IOPAD(0x2192, PIN_OUTPUT | MUX_MODE4) /* GPIO_159 */
279 >;
280 };
281
282 button_pins: pinmux_button_pins {
283 pinctrl-single,pins = <
284 OMAP3_CORE1_IOPAD(0x2110, PIN_INPUT | MUX_MODE4) /* GPIO_96 */
285 OMAP3_CORE1_IOPAD(0x2112, PIN_INPUT | MUX_MODE4) /* GPIO_97 */
286 OMAP3_CORE1_IOPAD(0x2114, PIN_INPUT | MUX_MODE4) /* GPIO_98 */
287 OMAP3_CORE1_IOPAD(0x2116, PIN_INPUT | MUX_MODE4) /* GPIO_99 */
288 OMAP3_CORE1_IOPAD(0x2118, PIN_INPUT | MUX_MODE4) /* GPIO_100 */
289 OMAP3_CORE1_IOPAD(0x211a, PIN_INPUT | MUX_MODE4) /* GPIO_101 */
290 OMAP3_CORE1_IOPAD(0x211c, PIN_INPUT | MUX_MODE4) /* GPIO_102 */
291 OMAP3_CORE1_IOPAD(0x211e, PIN_INPUT | MUX_MODE4) /* GPIO_103 */
292 OMAP3_CORE1_IOPAD(0x2120, PIN_INPUT | MUX_MODE4) /* GPIO_104 */
293 OMAP3_CORE1_IOPAD(0x2122, PIN_INPUT | MUX_MODE4) /* GPIO_105 */
294 OMAP3_CORE1_IOPAD(0x2124, PIN_INPUT | MUX_MODE4) /* GPIO_106 */
295 OMAP3_CORE1_IOPAD(0x2126, PIN_INPUT | MUX_MODE4) /* GPIO_107 */
296 OMAP3_CORE1_IOPAD(0x2128, PIN_INPUT | MUX_MODE4) /* GPIO_108 */
297 OMAP3_CORE1_IOPAD(0x212a, PIN_INPUT | MUX_MODE4) /* GPIO_109 */
298 OMAP3_CORE1_IOPAD(0x212c, PIN_INPUT | MUX_MODE4) /* GPIO_110 */
299 OMAP3_CORE1_IOPAD(0x212e, PIN_INPUT | MUX_MODE4) /* GPIO_111 */
300 OMAP3_CORE1_IOPAD(0x21d2, PIN_INPUT | MUX_MODE4) /* GPIO_176 */
301 >;
302 };
303
304 penirq_pins: pinmux_penirq_pins {
305 pinctrl-single,pins = <
306 /* here we could enable to wakeup the cpu from suspend by a pen touch */
307 OMAP3_CORE1_IOPAD(0x210c, PIN_INPUT | MUX_MODE4) /* GPIO_94 */
308 >;
309 };
310
311};
312
313&omap3_pmx_core2 {
314 /* define in CPU specific file that includes this one
315 * use either OMAP3430_CORE2_IOPAD() or OMAP3630_CORE2_IOPAD()
316 */
317};
318
319&i2c1 {
320 clock-frequency = <2600000>;
321
322 twl: twl@48 {
323 reg = <0x48>;
324 interrupts = <7>; /* SYS_NIRQ cascaded to intc */
325 interrupt-parent = <&intc>;
326
327 twl_power: power {
328 compatible = "ti,twl4030-power-reset";
329 ti,use_poweroff;
330 };
331
332 twl_audio: audio {
333 compatible = "ti,twl4030-audio";
334
335 codec {
336 ti,ramp_delay_value = <3>;
337 };
338 };
339 };
340};
341
342#include "twl4030.dtsi"
343#include "twl4030_omap3.dtsi"
344
345&twl_keypad {
346 keypad,num-rows = <8>;
347 keypad,num-columns = <6>;
348 linux,keymap = <
349 MATRIX_KEY(0, 0, KEY_9)
350 MATRIX_KEY(0, 1, KEY_8)
351 MATRIX_KEY(0, 2, KEY_I)
352 MATRIX_KEY(0, 3, KEY_J)
353 MATRIX_KEY(0, 4, KEY_N)
354 MATRIX_KEY(0, 5, KEY_M)
355 MATRIX_KEY(1, 0, KEY_0)
356 MATRIX_KEY(1, 1, KEY_7)
357 MATRIX_KEY(1, 2, KEY_U)
358 MATRIX_KEY(1, 3, KEY_H)
359 MATRIX_KEY(1, 4, KEY_B)
360 MATRIX_KEY(1, 5, KEY_SPACE)
361 MATRIX_KEY(2, 0, KEY_BACKSPACE)
362 MATRIX_KEY(2, 1, KEY_6)
363 MATRIX_KEY(2, 2, KEY_Y)
364 MATRIX_KEY(2, 3, KEY_G)
365 MATRIX_KEY(2, 4, KEY_V)
366 MATRIX_KEY(2, 5, KEY_FN)
367 MATRIX_KEY(3, 0, KEY_O)
368 MATRIX_KEY(3, 1, KEY_5)
369 MATRIX_KEY(3, 2, KEY_T)
370 MATRIX_KEY(3, 3, KEY_F)
371 MATRIX_KEY(3, 4, KEY_C)
372 MATRIX_KEY(4, 0, KEY_P)
373 MATRIX_KEY(4, 1, KEY_4)
374 MATRIX_KEY(4, 2, KEY_R)
375 MATRIX_KEY(4, 3, KEY_D)
376 MATRIX_KEY(4, 4, KEY_X)
377 MATRIX_KEY(5, 0, KEY_K)
378 MATRIX_KEY(5, 1, KEY_3)
379 MATRIX_KEY(5, 2, KEY_E)
380 MATRIX_KEY(5, 3, KEY_S)
381 MATRIX_KEY(5, 4, KEY_Z)
382 MATRIX_KEY(6, 0, KEY_L)
383 MATRIX_KEY(6, 1, KEY_2)
384 MATRIX_KEY(6, 2, KEY_W)
385 MATRIX_KEY(6, 3, KEY_A)
386 MATRIX_KEY(6, 4, KEY_RIGHTBRACE)
387 MATRIX_KEY(7, 0, KEY_ENTER)
388 MATRIX_KEY(7, 1, KEY_1)
389 MATRIX_KEY(7, 2, KEY_Q)
390 MATRIX_KEY(7, 3, KEY_LEFTSHIFT)
391 MATRIX_KEY(7, 4, KEY_LEFTBRACE )
392 >;
393};
394
395/* backup battery charger */
396&charger {
397 ti,bb-uvolt = <3200000>;
398 ti,bb-uamp = <150>;
399};
400
401/* MMC2 */
402&vmmc2 {
403 regulator-min-microvolt = <1850000>;
404 regulator-max-microvolt = <3150000>;
405};
406
407/* LCD */
408&vaux1 {
409 regulator-min-microvolt = <3000000>;
410 regulator-max-microvolt = <3000000>;
411};
412
413/* USB Host PHY */
414&vaux2 {
415 regulator-min-microvolt = <1800000>;
416 regulator-max-microvolt = <1800000>;
417};
418
419/* available on expansion connector */
420&vaux3 {
421 regulator-min-microvolt = <2800000>;
422 regulator-max-microvolt = <2800000>;
423};
424
425/* ADS7846 and nubs */
426&vaux4 {
427 regulator-min-microvolt = <2800000>;
428 regulator-max-microvolt = <2800000>;
429};
430
431/* power audio DAC and LID sensor */
432&vsim {
433 regulator-min-microvolt = <2800000>;
434 regulator-max-microvolt = <2800000>;
435 regulator-always-on;
436};
437
438&i2c2 {
439 clock-frequency = <100000>;
440 /* no clients so we should disable clock */
441};
442
443&i2c3 {
444 clock-frequency = <100000>;
445
446 bq27500@55 {
447 compatible = "ti,bq27500";
448 reg = <0x55>;
449 };
450
451};
452
453&usb_otg_hs {
454 interface-type = <0>;
455 usb-phy = <&usb2_phy>;
456 phys = <&usb2_phy>;
457 phy-names = "usb2-phy";
458 mode = <3>;
459 power = <50>;
460};
461
462&mmc1 {
463 pinctrl-names = "default";
464 pinctrl-0 = <&mmc1_pins>;
465 vmmc-supply = <&vmmc1>;
466 bus-width = <4>;
467 cd-gpios = <&twl_gpio 0 GPIO_ACTIVE_LOW>;
468 wp-gpios = <&gpio4 30 GPIO_ACTIVE_LOW>; /* GPIO_126 */
469};
470
471&mmc2 {
472 pinctrl-names = "default";
473 pinctrl-0 = <&mmc2_pins>;
474 vmmc-supply = <&vmmc2>;
475 bus-width = <4>;
476 cd-gpios = <&twl_gpio 1 GPIO_ACTIVE_HIGH>;
477 wp-gpios = <&gpio4 31 GPIO_ACTIVE_LOW>; /* GPIO_127 */
478};
479
480/* bluetooth*/
481&uart1 {
482};
483
484/* spare (expansion connector) */
485&uart2 {
486};
487
488/* console (expansion connector) */
489&uart3 {
490 pinctrl-names = "default";
491 pinctrl-0 = <&uart3_pins>;
492 interrupts-extended = <&intc 74 &omap3_pmx_core OMAP3_UART3_RX>;
493};
494
495&usbhshost {
496 port2-mode = "ehci-phy";
497};
498
499&gpmc {
500 ranges = <0 0 0x30000000 0x1000000>; /* CS0: 16MB for NAND */
501
502 nand@0,0 {
503 reg = <0 0 4>; /* CS0, offset 0, IO size 4 */
504 nand-bus-width = <16>;
505 ti,nand-ecc-opt = "sw";
506
507 gpmc,sync-clk-ps = <0>;
508 gpmc,cs-on-ns = <0>;
509 gpmc,cs-rd-off-ns = <44>;
510 gpmc,cs-wr-off-ns = <44>;
511 gpmc,adv-on-ns = <6>;
512 gpmc,adv-rd-off-ns = <34>;
513 gpmc,adv-wr-off-ns = <44>;
514 gpmc,we-off-ns = <40>;
515 gpmc,oe-off-ns = <54>;
516 gpmc,access-ns = <64>;
517 gpmc,rd-cycle-ns = <82>;
518 gpmc,wr-cycle-ns = <82>;
519 gpmc,wr-access-ns = <40>;
520 gpmc,wr-data-mux-bus-ns = <0>;
521 gpmc,device-width = <2>;
522
523 #address-cells = <1>;
524 #size-cells = <1>;
525
526 /* u-boot uses mtdparts=nand:512k(xloader),1920k(uboot),128k(uboot-env),10m(boot),-(rootfs) */
527
528 x-loader@0 {
529 label = "xloader";
530 reg = <0 0x80000>;
531 };
532
533 bootloaders@80000 {
534 label = "uboot";
535 reg = <0x80000 0x1e0000>;
536 };
537
538 bootloaders_env@260000 {
539 label = "uboot-env";
540 reg = <0x260000 0x20000>;
541 };
542
543 kernel@280000 {
544 label = "boot";
545 reg = <0x280000 0xa00000>;
546 };
547
548 filesystem@680000 {
549 label = "rootfs";
550 reg = <0xc80000 0>; /* 0 = MTDPART_SIZ_FULL */
551 };
552 };
553};
554
555&mcspi1 {
556 tsc2046@0 {
557 reg = <0>; /* CS0 */
558 compatible = "ti,tsc2046";
559 spi-max-frequency = <1000000>;
560 pinctrl-names = "default";
561 pinctrl-0 = <&penirq_pins>;
562 interrupt-parent = <&gpio3>;
563 interrupts = <30 0>; /* GPIO_94 */
564 pendown-gpio = <&gpio3 30 0>;
565 vcc-supply = <&vaux4>;
566
567 ti,x-min = /bits/ 16 <0>;
568 ti,x-max = /bits/ 16 <8000>;
569 ti,y-min = /bits/ 16 <0>;
570 ti,y-max = /bits/ 16 <4800>;
571 ti,x-plate-ohms = /bits/ 16 <40>;
572 ti,pressure-max = /bits/ 16 <255>;
573
574 linux,wakeup;
575 };
576
577 lcd: lcd@1 {
578 reg = <1>; /* CS1 */
579 compatible = "omapdss,tpo,td043mtea1";
580 spi-max-frequency = <100000>;
581 spi-cpol;
582 spi-cpha;
583
584 label = "lcd";
585 reset-gpios = <&gpio5 29 GPIO_ACTIVE_LOW>; /* GPIO_157 */
586 vcc-supply = <&vaux1>;
587
588 port {
589 lcd_in: endpoint {
590 remote-endpoint = <&dpi_out>;
591 };
592 };
593 };
594
595
596};
597
598/* n/a - used as GPIOs */
599&mcbsp1 {
600};
601
602/* audio DAC */
603&mcbsp2 {
604};
605
606/* bluetooth */
607&mcbsp3 {
608};
609
610/* to twl4030*/
611&mcbsp4 {
612};
613
614&venc {
615 status = "ok";
616
617 vdda-supply = <&vdac>;
618
619 port {
620 venc_out: endpoint {
621 remote-endpoint = <&tv_connector_in>;
622 ti,channels = <2>;
623 };
624 };
625};
626
627&dss {
628 pinctrl-names = "default";
629 pinctrl-0 = < &dss_dpi_pins >;
630
631 status = "ok";
632 vdds_dsi-supply = <&vpll2>;
633
634 port {
635 dpi_out: endpoint {
636 remote-endpoint = <&lcd_in>;
637 data-lines = <24>;
638 };
639 };
640};
diff --git a/arch/arm/boot/dts/omap3-tao3530.dtsi b/arch/arm/boot/dts/omap3-tao3530.dtsi
index e89820a6776e..7bd8d9a4f67f 100644
--- a/arch/arm/boot/dts/omap3-tao3530.dtsi
+++ b/arch/arm/boot/dts/omap3-tao3530.dtsi
@@ -8,7 +8,16 @@
8 */ 8 */
9/dts-v1/; 9/dts-v1/;
10 10
11#include "omap34xx-hs.dtsi" 11#include "omap34xx.dtsi"
12
13/* Secure omaps have some devices inaccessible depending on the firmware */
14&aes {
15 status = "disabled";
16};
17
18&sham {
19 status = "disabled";
20};
12 21
13/ { 22/ {
14 cpus { 23 cpus {
@@ -45,7 +54,6 @@
45 54
46 /* McBSP2 is used for onboard sound, same as on beagle */ 55 /* McBSP2 is used for onboard sound, same as on beagle */
47 ti,mcbsp = <&mcbsp2>; 56 ti,mcbsp = <&mcbsp2>;
48 ti,codec = <&twl_audio>;
49 }; 57 };
50 58
51 /* Regulator to enable/switch the vcc of the Wifi module */ 59 /* Regulator to enable/switch the vcc of the Wifi module */
diff --git a/arch/arm/boot/dts/omap3.dtsi b/arch/arm/boot/dts/omap3.dtsi
index 01b71111bd55..02cd996d0b06 100644
--- a/arch/arm/boot/dts/omap3.dtsi
+++ b/arch/arm/boot/dts/omap3.dtsi
@@ -87,6 +87,60 @@
87 ranges; 87 ranges;
88 ti,hwmods = "l3_main"; 88 ti,hwmods = "l3_main";
89 89
90 l4_core: l4@48000000 {
91 compatible = "ti,omap3-l4-core", "simple-bus";
92 #address-cells = <1>;
93 #size-cells = <1>;
94 ranges = <0 0x48000000 0x1000000>;
95
96 scm: scm@2000 {
97 compatible = "ti,omap3-scm", "simple-bus";
98 reg = <0x2000 0x2000>;
99 #address-cells = <1>;
100 #size-cells = <1>;
101 ranges = <0 0x2000 0x2000>;
102
103 omap3_pmx_core: pinmux@30 {
104 compatible = "ti,omap3-padconf",
105 "pinctrl-single";
106 reg = <0x30 0x238>;
107 #address-cells = <1>;
108 #size-cells = <0>;
109 #interrupt-cells = <1>;
110 interrupt-controller;
111 pinctrl-single,register-width = <16>;
112 pinctrl-single,function-mask = <0xff1f>;
113 };
114
115 scm_conf: scm_conf@270 {
116 compatible = "syscon";
117 reg = <0x270 0x330>;
118 #address-cells = <1>;
119 #size-cells = <1>;
120
121 scm_clocks: clocks {
122 #address-cells = <1>;
123 #size-cells = <0>;
124 };
125 };
126
127 scm_clockdomains: clockdomains {
128 };
129
130 omap3_pmx_wkup: pinmux@a00 {
131 compatible = "ti,omap3-padconf",
132 "pinctrl-single";
133 reg = <0xa00 0x5c>;
134 #address-cells = <1>;
135 #size-cells = <0>;
136 #interrupt-cells = <1>;
137 interrupt-controller;
138 pinctrl-single,register-width = <16>;
139 pinctrl-single,function-mask = <0xff1f>;
140 };
141 };
142 };
143
90 aes: aes@480c5000 { 144 aes: aes@480c5000 {
91 compatible = "ti,omap3-aes"; 145 compatible = "ti,omap3-aes";
92 ti,hwmods = "aes"; 146 ti,hwmods = "aes";
@@ -121,19 +175,6 @@
121 }; 175 };
122 }; 176 };
123 177
124 scrm: scrm@48002000 {
125 compatible = "ti,omap3-scrm";
126 reg = <0x48002000 0x2000>;
127
128 scrm_clocks: clocks {
129 #address-cells = <1>;
130 #size-cells = <0>;
131 };
132
133 scrm_clockdomains: clockdomains {
134 };
135 };
136
137 counter32k: counter@48320000 { 178 counter32k: counter@48320000 {
138 compatible = "ti,omap-counter32k"; 179 compatible = "ti,omap-counter32k";
139 reg = <0x48320000 0x20>; 180 reg = <0x48320000 0x20>;
@@ -155,41 +196,14 @@
155 <14>, 196 <14>,
156 <15>; 197 <15>;
157 #dma-cells = <1>; 198 #dma-cells = <1>;
158 #dma-channels = <32>; 199 dma-channels = <32>;
159 #dma-requests = <96>; 200 dma-requests = <96>;
160 };
161
162 omap3_pmx_core: pinmux@48002030 {
163 compatible = "ti,omap3-padconf", "pinctrl-single";
164 reg = <0x48002030 0x0238>;
165 #address-cells = <1>;
166 #size-cells = <0>;
167 #interrupt-cells = <1>;
168 interrupt-controller;
169 pinctrl-single,register-width = <16>;
170 pinctrl-single,function-mask = <0xff1f>;
171 };
172
173 omap3_pmx_wkup: pinmux@48002a00 {
174 compatible = "ti,omap3-padconf", "pinctrl-single";
175 reg = <0x48002a00 0x5c>;
176 #address-cells = <1>;
177 #size-cells = <0>;
178 #interrupt-cells = <1>;
179 interrupt-controller;
180 pinctrl-single,register-width = <16>;
181 pinctrl-single,function-mask = <0xff1f>;
182 };
183
184 omap3_scm_general: tisyscon@48002270 {
185 compatible = "syscon";
186 reg = <0x48002270 0x2f0>;
187 }; 201 };
188 202
189 pbias_regulator: pbias_regulator { 203 pbias_regulator: pbias_regulator {
190 compatible = "ti,pbias-omap"; 204 compatible = "ti,pbias-omap";
191 reg = <0x2b0 0x4>; 205 reg = <0x2b0 0x4>;
192 syscon = <&omap3_scm_general>; 206 syscon = <&scm_conf>;
193 pbias_mmc_reg: pbias_mmc_omap2430 { 207 pbias_mmc_reg: pbias_mmc_omap2430 {
194 regulator-name = "pbias_mmc_omap2430"; 208 regulator-name = "pbias_mmc_omap2430";
195 regulator-min-microvolt = <1800000>; 209 regulator-min-microvolt = <1800000>;
diff --git a/arch/arm/boot/dts/omap34xx-hs.dtsi b/arch/arm/boot/dts/omap34xx-hs.dtsi
deleted file mode 100644
index 1ff626489546..000000000000
--- a/arch/arm/boot/dts/omap34xx-hs.dtsi
+++ /dev/null
@@ -1,16 +0,0 @@
1/* Disabled modules for secure omaps */
2
3#include "omap34xx.dtsi"
4
5/* Secure omaps have some devices inaccessible depending on the firmware */
6&aes {
7 status = "disabled";
8};
9
10&sham {
11 status = "disabled";
12};
13
14&timer12 {
15 status = "disabled";
16};
diff --git a/arch/arm/boot/dts/omap34xx.dtsi b/arch/arm/boot/dts/omap34xx.dtsi
index 3819c1e91591..4f6b2d5b1902 100644
--- a/arch/arm/boot/dts/omap34xx.dtsi
+++ b/arch/arm/boot/dts/omap34xx.dtsi
@@ -8,6 +8,8 @@
8 * kind, whether express or implied. 8 * kind, whether express or implied.
9 */ 9 */
10 10
11#include <dt-bindings/media/omap3-isp.h>
12
11#include "omap3.dtsi" 13#include "omap3.dtsi"
12 14
13/ { 15/ {
@@ -37,6 +39,21 @@
37 pinctrl-single,register-width = <16>; 39 pinctrl-single,register-width = <16>;
38 pinctrl-single,function-mask = <0xff1f>; 40 pinctrl-single,function-mask = <0xff1f>;
39 }; 41 };
42
43 isp: isp@480bc000 {
44 compatible = "ti,omap3-isp";
45 reg = <0x480bc000 0x12fc
46 0x480bd800 0x017c>;
47 interrupts = <24>;
48 iommus = <&mmu_isp>;
49 syscon = <&scm_conf 0xdc>;
50 ti,phy-type = <OMAP3ISP_PHY_TYPE_COMPLEX_IO>;
51 #clock-cells = <1>;
52 ports {
53 #address-cells = <1>;
54 #size-cells = <0>;
55 };
56 };
40 }; 57 };
41}; 58};
42 59
diff --git a/arch/arm/boot/dts/omap36xx-hs.dtsi b/arch/arm/boot/dts/omap36xx-hs.dtsi
deleted file mode 100644
index 2c7febb0e016..000000000000
--- a/arch/arm/boot/dts/omap36xx-hs.dtsi
+++ /dev/null
@@ -1,16 +0,0 @@
1/* Disabled modules for secure omaps */
2
3#include "omap36xx.dtsi"
4
5/* Secure omaps have some devices inaccessible depending on the firmware */
6&aes {
7 status = "disabled";
8};
9
10&sham {
11 status = "disabled";
12};
13
14&timer12 {
15 status = "disabled";
16};
diff --git a/arch/arm/boot/dts/omap36xx.dtsi b/arch/arm/boot/dts/omap36xx.dtsi
index 541704a59a5a..86253de5a97a 100644
--- a/arch/arm/boot/dts/omap36xx.dtsi
+++ b/arch/arm/boot/dts/omap36xx.dtsi
@@ -8,6 +8,8 @@
8 * kind, whether express or implied. 8 * kind, whether express or implied.
9 */ 9 */
10 10
11#include <dt-bindings/media/omap3-isp.h>
12
11#include "omap3.dtsi" 13#include "omap3.dtsi"
12 14
13/ { 15/ {
@@ -69,6 +71,21 @@
69 pinctrl-single,register-width = <16>; 71 pinctrl-single,register-width = <16>;
70 pinctrl-single,function-mask = <0xff1f>; 72 pinctrl-single,function-mask = <0xff1f>;
71 }; 73 };
74
75 isp: isp@480bc000 {
76 compatible = "ti,omap3-isp";
77 reg = <0x480bc000 0x12fc
78 0x480bd800 0x0600>;
79 interrupts = <24>;
80 iommus = <&mmu_isp>;
81 syscon = <&scm_conf 0x2f0>;
82 ti,phy-type = <OMAP3ISP_PHY_TYPE_CSIPHY>;
83 #clock-cells = <1>;
84 ports {
85 #address-cells = <1>;
86 #size-cells = <0>;
87 };
88 };
72 }; 89 };
73}; 90};
74 91
diff --git a/arch/arm/boot/dts/omap3xxx-clocks.dtsi b/arch/arm/boot/dts/omap3xxx-clocks.dtsi
index 5c375003bad1..bbba5bdc4bc9 100644
--- a/arch/arm/boot/dts/omap3xxx-clocks.dtsi
+++ b/arch/arm/boot/dts/omap3xxx-clocks.dtsi
@@ -79,13 +79,14 @@
79 clock-div = <1>; 79 clock-div = <1>;
80 }; 80 };
81}; 81};
82&scrm_clocks { 82
83&scm_clocks {
83 mcbsp5_mux_fck: mcbsp5_mux_fck { 84 mcbsp5_mux_fck: mcbsp5_mux_fck {
84 #clock-cells = <0>; 85 #clock-cells = <0>;
85 compatible = "ti,composite-mux-clock"; 86 compatible = "ti,composite-mux-clock";
86 clocks = <&core_96m_fck>, <&mcbsp_clks>; 87 clocks = <&core_96m_fck>, <&mcbsp_clks>;
87 ti,bit-shift = <4>; 88 ti,bit-shift = <4>;
88 reg = <0x02d8>; 89 reg = <0x68>;
89 }; 90 };
90 91
91 mcbsp5_fck: mcbsp5_fck { 92 mcbsp5_fck: mcbsp5_fck {
@@ -99,7 +100,7 @@
99 compatible = "ti,composite-mux-clock"; 100 compatible = "ti,composite-mux-clock";
100 clocks = <&core_96m_fck>, <&mcbsp_clks>; 101 clocks = <&core_96m_fck>, <&mcbsp_clks>;
101 ti,bit-shift = <2>; 102 ti,bit-shift = <2>;
102 reg = <0x0274>; 103 reg = <0x04>;
103 }; 104 };
104 105
105 mcbsp1_fck: mcbsp1_fck { 106 mcbsp1_fck: mcbsp1_fck {
@@ -113,7 +114,7 @@
113 compatible = "ti,composite-mux-clock"; 114 compatible = "ti,composite-mux-clock";
114 clocks = <&per_96m_fck>, <&mcbsp_clks>; 115 clocks = <&per_96m_fck>, <&mcbsp_clks>;
115 ti,bit-shift = <6>; 116 ti,bit-shift = <6>;
116 reg = <0x0274>; 117 reg = <0x04>;
117 }; 118 };
118 119
119 mcbsp2_fck: mcbsp2_fck { 120 mcbsp2_fck: mcbsp2_fck {
@@ -126,7 +127,7 @@
126 #clock-cells = <0>; 127 #clock-cells = <0>;
127 compatible = "ti,composite-mux-clock"; 128 compatible = "ti,composite-mux-clock";
128 clocks = <&per_96m_fck>, <&mcbsp_clks>; 129 clocks = <&per_96m_fck>, <&mcbsp_clks>;
129 reg = <0x02d8>; 130 reg = <0x68>;
130 }; 131 };
131 132
132 mcbsp3_fck: mcbsp3_fck { 133 mcbsp3_fck: mcbsp3_fck {
@@ -140,7 +141,7 @@
140 compatible = "ti,composite-mux-clock"; 141 compatible = "ti,composite-mux-clock";
141 clocks = <&per_96m_fck>, <&mcbsp_clks>; 142 clocks = <&per_96m_fck>, <&mcbsp_clks>;
142 ti,bit-shift = <2>; 143 ti,bit-shift = <2>;
143 reg = <0x02d8>; 144 reg = <0x68>;
144 }; 145 };
145 146
146 mcbsp4_fck: mcbsp4_fck { 147 mcbsp4_fck: mcbsp4_fck {
diff --git a/arch/arm/boot/dts/omap4-cpu-thermal.dtsi b/arch/arm/boot/dts/omap4-cpu-thermal.dtsi
index cb9458feb2e3..ab7f87ae96f0 100644
--- a/arch/arm/boot/dts/omap4-cpu-thermal.dtsi
+++ b/arch/arm/boot/dts/omap4-cpu-thermal.dtsi
@@ -18,7 +18,7 @@ cpu_thermal: cpu_thermal {
18 /* sensor ID */ 18 /* sensor ID */
19 thermal-sensors = <&bandgap 0>; 19 thermal-sensors = <&bandgap 0>;
20 20
21 trips { 21 cpu_trips: trips {
22 cpu_alert0: cpu_alert { 22 cpu_alert0: cpu_alert {
23 temperature = <100000>; /* millicelsius */ 23 temperature = <100000>; /* millicelsius */
24 hysteresis = <2000>; /* millicelsius */ 24 hysteresis = <2000>; /* millicelsius */
@@ -31,7 +31,7 @@ cpu_thermal: cpu_thermal {
31 }; 31 };
32 }; 32 };
33 33
34 cooling-maps { 34 cpu_cooling_maps: cooling-maps {
35 map0 { 35 map0 {
36 trip = <&cpu_alert0>; 36 trip = <&cpu_alert0>;
37 cooling-device = 37 cooling-device =
diff --git a/arch/arm/boot/dts/omap4.dtsi b/arch/arm/boot/dts/omap4.dtsi
index 074147cebae4..cf2681b2d173 100644
--- a/arch/arm/boot/dts/omap4.dtsi
+++ b/arch/arm/boot/dts/omap4.dtsi
@@ -114,99 +114,141 @@
114 interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>, 114 interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>,
115 <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>; 115 <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
116 116
117 cm1: cm1@4a004000 { 117 l4_cfg: l4@4a000000 {
118 compatible = "ti,omap4-cm1"; 118 compatible = "ti,omap4-l4-cfg", "simple-bus";
119 reg = <0x4a004000 0x2000>; 119 #address-cells = <1>;
120 120 #size-cells = <1>;
121 cm1_clocks: clocks { 121 ranges = <0 0x4a000000 0x1000000>;
122 #address-cells = <1>;
123 #size-cells = <0>;
124 };
125 122
126 cm1_clockdomains: clockdomains { 123 cm1: cm1@4000 {
127 }; 124 compatible = "ti,omap4-cm1";
128 }; 125 reg = <0x4000 0x2000>;
129 126
130 prm: prm@4a306000 { 127 cm1_clocks: clocks {
131 compatible = "ti,omap4-prm"; 128 #address-cells = <1>;
132 reg = <0x4a306000 0x3000>; 129 #size-cells = <0>;
133 interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>; 130 };
134 131
135 prm_clocks: clocks { 132 cm1_clockdomains: clockdomains {
136 #address-cells = <1>; 133 };
137 #size-cells = <0>;
138 }; 134 };
139 135
140 prm_clockdomains: clockdomains { 136 cm2: cm2@8000 {
141 }; 137 compatible = "ti,omap4-cm2";
142 }; 138 reg = <0x8000 0x3000>;
143 139
144 cm2: cm2@4a008000 { 140 cm2_clocks: clocks {
145 compatible = "ti,omap4-cm2"; 141 #address-cells = <1>;
146 reg = <0x4a008000 0x3000>; 142 #size-cells = <0>;
143 };
147 144
148 cm2_clocks: clocks { 145 cm2_clockdomains: clockdomains {
149 #address-cells = <1>; 146 };
150 #size-cells = <0>;
151 }; 147 };
152 148
153 cm2_clockdomains: clockdomains { 149 omap4_scm_core: scm@2000 {
150 compatible = "ti,omap4-scm-core", "simple-bus";
151 reg = <0x2000 0x1000>;
152 #address-cells = <1>;
153 #size-cells = <1>;
154 ranges = <0 0x2000 0x1000>;
155
156 scm_conf: scm_conf@0 {
157 compatible = "syscon";
158 reg = <0x0 0x800>;
159 #address-cells = <1>;
160 #size-cells = <1>;
161 };
154 }; 162 };
155 };
156
157 scrm: scrm@4a30a000 {
158 compatible = "ti,omap4-scrm";
159 reg = <0x4a30a000 0x2000>;
160 163
161 scrm_clocks: clocks { 164 omap4_padconf_core: scm@100000 {
165 compatible = "ti,omap4-scm-padconf-core",
166 "simple-bus";
162 #address-cells = <1>; 167 #address-cells = <1>;
163 #size-cells = <0>; 168 #size-cells = <1>;
169 ranges = <0 0x100000 0x1000>;
170
171 omap4_pmx_core: pinmux@40 {
172 compatible = "ti,omap4-padconf",
173 "pinctrl-single";
174 reg = <0x40 0x0196>;
175 #address-cells = <1>;
176 #size-cells = <0>;
177 #interrupt-cells = <1>;
178 interrupt-controller;
179 pinctrl-single,register-width = <16>;
180 pinctrl-single,function-mask = <0x7fff>;
181 };
182
183 omap4_padconf_global: omap4_padconf_global@5a0 {
184 compatible = "syscon";
185 reg = <0x5a0 0x170>;
186 #address-cells = <1>;
187 #size-cells = <1>;
188
189 pbias_regulator: pbias_regulator {
190 compatible = "ti,pbias-omap";
191 reg = <0x60 0x4>;
192 syscon = <&omap4_padconf_global>;
193 pbias_mmc_reg: pbias_mmc_omap4 {
194 regulator-name = "pbias_mmc_omap4";
195 regulator-min-microvolt = <1800000>;
196 regulator-max-microvolt = <3000000>;
197 };
198 };
199 };
164 }; 200 };
165 201
166 scrm_clockdomains: clockdomains { 202 l4_wkup: l4@300000 {
167 }; 203 compatible = "ti,omap4-l4-wkup", "simple-bus";
168 }; 204 #address-cells = <1>;
169 205 #size-cells = <1>;
170 counter32k: counter@4a304000 { 206 ranges = <0 0x300000 0x40000>;
171 compatible = "ti,omap-counter32k"; 207
172 reg = <0x4a304000 0x20>; 208 counter32k: counter@4000 {
173 ti,hwmods = "counter_32k"; 209 compatible = "ti,omap-counter32k";
174 }; 210 reg = <0x4000 0x20>;
175 211 ti,hwmods = "counter_32k";
176 omap4_pmx_core: pinmux@4a100040 { 212 };
177 compatible = "ti,omap4-padconf", "pinctrl-single"; 213
178 reg = <0x4a100040 0x0196>; 214 prm: prm@6000 {
179 #address-cells = <1>; 215 compatible = "ti,omap4-prm";
180 #size-cells = <0>; 216 reg = <0x6000 0x3000>;
181 #interrupt-cells = <1>; 217 interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
182 interrupt-controller; 218
183 pinctrl-single,register-width = <16>; 219 prm_clocks: clocks {
184 pinctrl-single,function-mask = <0x7fff>; 220 #address-cells = <1>;
185 }; 221 #size-cells = <0>;
186 omap4_pmx_wkup: pinmux@4a31e040 { 222 };
187 compatible = "ti,omap4-padconf", "pinctrl-single"; 223
188 reg = <0x4a31e040 0x0038>; 224 prm_clockdomains: clockdomains {
189 #address-cells = <1>; 225 };
190 #size-cells = <0>; 226 };
191 #interrupt-cells = <1>; 227
192 interrupt-controller; 228 scrm: scrm@a000 {
193 pinctrl-single,register-width = <16>; 229 compatible = "ti,omap4-scrm";
194 pinctrl-single,function-mask = <0x7fff>; 230 reg = <0xa000 0x2000>;
195 }; 231
196 232 scrm_clocks: clocks {
197 omap4_padconf_global: tisyscon@4a1005a0 { 233 #address-cells = <1>;
198 compatible = "syscon"; 234 #size-cells = <0>;
199 reg = <0x4a1005a0 0x170>; 235 };
200 }; 236
201 237 scrm_clockdomains: clockdomains {
202 pbias_regulator: pbias_regulator { 238 };
203 compatible = "ti,pbias-omap"; 239 };
204 reg = <0x60 0x4>; 240
205 syscon = <&omap4_padconf_global>; 241 omap4_pmx_wkup: pinmux@1e040 {
206 pbias_mmc_reg: pbias_mmc_omap4 { 242 compatible = "ti,omap4-padconf",
207 regulator-name = "pbias_mmc_omap4"; 243 "pinctrl-single";
208 regulator-min-microvolt = <1800000>; 244 reg = <0x1e040 0x0038>;
209 regulator-max-microvolt = <3000000>; 245 #address-cells = <1>;
246 #size-cells = <0>;
247 #interrupt-cells = <1>;
248 interrupt-controller;
249 pinctrl-single,register-width = <16>;
250 pinctrl-single,function-mask = <0x7fff>;
251 };
210 }; 252 };
211 }; 253 };
212 254
@@ -223,8 +265,8 @@
223 <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>, 265 <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>,
224 <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>; 266 <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
225 #dma-cells = <1>; 267 #dma-cells = <1>;
226 #dma-channels = <32>; 268 dma-channels = <32>;
227 #dma-requests = <127>; 269 dma-requests = <127>;
228 }; 270 };
229 271
230 gpio1: gpio@4a310000 { 272 gpio1: gpio@4a310000 {
diff --git a/arch/arm/boot/dts/omap5.dtsi b/arch/arm/boot/dts/omap5.dtsi
index b321fdf42c9f..3cdb5c22148d 100644
--- a/arch/arm/boot/dts/omap5.dtsi
+++ b/arch/arm/boot/dts/omap5.dtsi
@@ -129,99 +129,141 @@
129 interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>, 129 interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>,
130 <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>; 130 <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
131 131
132 prm: prm@4ae06000 { 132 l4_cfg: l4@4a000000 {
133 compatible = "ti,omap5-prm"; 133 compatible = "ti,omap5-l4-cfg", "simple-bus";
134 reg = <0x4ae06000 0x3000>; 134 #address-cells = <1>;
135 interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>; 135 #size-cells = <1>;
136 ranges = <0 0x4a000000 0x22a000>;
136 137
137 prm_clocks: clocks { 138 scm_core: scm@2000 {
139 compatible = "ti,omap5-scm-core", "simple-bus";
140 reg = <0x2000 0x1000>;
138 #address-cells = <1>; 141 #address-cells = <1>;
139 #size-cells = <0>; 142 #size-cells = <1>;
143 ranges = <0 0x2000 0x800>;
144
145 scm_conf: scm_conf@0 {
146 compatible = "syscon";
147 reg = <0x0 0x800>;
148 #address-cells = <1>;
149 #size-cells = <1>;
150 };
140 }; 151 };
141 152
142 prm_clockdomains: clockdomains { 153 scm_padconf_core: scm@2800 {
154 compatible = "ti,omap5-scm-padconf-core",
155 "simple-bus";
156 #address-cells = <1>;
157 #size-cells = <1>;
158 ranges = <0 0x2800 0x800>;
159
160 omap5_pmx_core: pinmux@40 {
161 compatible = "ti,omap5-padconf",
162 "pinctrl-single";
163 reg = <0x40 0x01b6>;
164 #address-cells = <1>;
165 #size-cells = <0>;
166 #interrupt-cells = <1>;
167 interrupt-controller;
168 pinctrl-single,register-width = <16>;
169 pinctrl-single,function-mask = <0x7fff>;
170 };
171
172 omap5_padconf_global: omap5_padconf_global@5a0 {
173 compatible = "syscon";
174 reg = <0x5a0 0xec>;
175 #address-cells = <1>;
176 #size-cells = <1>;
177
178 pbias_regulator: pbias_regulator {
179 compatible = "ti,pbias-omap";
180 reg = <0x60 0x4>;
181 syscon = <&omap5_padconf_global>;
182 pbias_mmc_reg: pbias_mmc_omap5 {
183 regulator-name = "pbias_mmc_omap5";
184 regulator-min-microvolt = <1800000>;
185 regulator-max-microvolt = <3000000>;
186 };
187 };
188 };
143 }; 189 };
144 };
145 190
146 cm_core_aon: cm_core_aon@4a004000 { 191 cm_core_aon: cm_core_aon@4000 {
147 compatible = "ti,omap5-cm-core-aon"; 192 compatible = "ti,omap5-cm-core-aon";
148 reg = <0x4a004000 0x2000>; 193 reg = <0x4000 0x2000>;
149 194
150 cm_core_aon_clocks: clocks { 195 cm_core_aon_clocks: clocks {
151 #address-cells = <1>; 196 #address-cells = <1>;
152 #size-cells = <0>; 197 #size-cells = <0>;
153 }; 198 };
154 199
155 cm_core_aon_clockdomains: clockdomains { 200 cm_core_aon_clockdomains: clockdomains {
201 };
156 }; 202 };
157 };
158 203
159 scrm: scrm@4ae0a000 { 204 cm_core: cm_core@8000 {
160 compatible = "ti,omap5-scrm"; 205 compatible = "ti,omap5-cm-core";
161 reg = <0x4ae0a000 0x2000>; 206 reg = <0x8000 0x3000>;
162 207
163 scrm_clocks: clocks { 208 cm_core_clocks: clocks {
164 #address-cells = <1>; 209 #address-cells = <1>;
165 #size-cells = <0>; 210 #size-cells = <0>;
166 }; 211 };
167 212
168 scrm_clockdomains: clockdomains { 213 cm_core_clockdomains: clockdomains {
214 };
169 }; 215 };
170 }; 216 };
171 217
172 cm_core: cm_core@4a008000 { 218 l4_wkup: l4@4ae00000 {
173 compatible = "ti,omap5-cm-core"; 219 compatible = "ti,omap5-l4-wkup", "simple-bus";
174 reg = <0x4a008000 0x3000>; 220 #address-cells = <1>;
221 #size-cells = <1>;
222 ranges = <0 0x4ae00000 0x2b000>;
175 223
176 cm_core_clocks: clocks { 224 counter32k: counter@4000 {
177 #address-cells = <1>; 225 compatible = "ti,omap-counter32k";
178 #size-cells = <0>; 226 reg = <0x4000 0x40>;
227 ti,hwmods = "counter_32k";
179 }; 228 };
180 229
181 cm_core_clockdomains: clockdomains { 230 prm: prm@6000 {
231 compatible = "ti,omap5-prm";
232 reg = <0x6000 0x3000>;
233 interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
234
235 prm_clocks: clocks {
236 #address-cells = <1>;
237 #size-cells = <0>;
238 };
239
240 prm_clockdomains: clockdomains {
241 };
182 }; 242 };
183 };
184 243
185 counter32k: counter@4ae04000 { 244 scrm: scrm@a000 {
186 compatible = "ti,omap-counter32k"; 245 compatible = "ti,omap5-scrm";
187 reg = <0x4ae04000 0x40>; 246 reg = <0xa000 0x2000>;
188 ti,hwmods = "counter_32k";
189 };
190 247
191 omap5_pmx_core: pinmux@4a002840 { 248 scrm_clocks: clocks {
192 compatible = "ti,omap5-padconf", "pinctrl-single"; 249 #address-cells = <1>;
193 reg = <0x4a002840 0x01b6>; 250 #size-cells = <0>;
194 #address-cells = <1>; 251 };
195 #size-cells = <0>;
196 #interrupt-cells = <1>;
197 interrupt-controller;
198 pinctrl-single,register-width = <16>;
199 pinctrl-single,function-mask = <0x7fff>;
200 };
201 omap5_pmx_wkup: pinmux@4ae0c840 {
202 compatible = "ti,omap5-padconf", "pinctrl-single";
203 reg = <0x4ae0c840 0x0038>;
204 #address-cells = <1>;
205 #size-cells = <0>;
206 #interrupt-cells = <1>;
207 interrupt-controller;
208 pinctrl-single,register-width = <16>;
209 pinctrl-single,function-mask = <0x7fff>;
210 };
211 252
212 omap5_padconf_global: tisyscon@4a002da0 { 253 scrm_clockdomains: clockdomains {
213 compatible = "syscon"; 254 };
214 reg = <0x4A002da0 0xec>; 255 };
215 };
216 256
217 pbias_regulator: pbias_regulator { 257 omap5_pmx_wkup: pinmux@c840 {
218 compatible = "ti,pbias-omap"; 258 compatible = "ti,omap5-padconf",
219 reg = <0x60 0x4>; 259 "pinctrl-single";
220 syscon = <&omap5_padconf_global>; 260 reg = <0xc840 0x0038>;
221 pbias_mmc_reg: pbias_mmc_omap5 { 261 #address-cells = <1>;
222 regulator-name = "pbias_mmc_omap5"; 262 #size-cells = <0>;
223 regulator-min-microvolt = <1800000>; 263 #interrupt-cells = <1>;
224 regulator-max-microvolt = <3000000>; 264 interrupt-controller;
265 pinctrl-single,register-width = <16>;
266 pinctrl-single,function-mask = <0x7fff>;
225 }; 267 };
226 }; 268 };
227 269
@@ -238,8 +280,8 @@
238 <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>, 280 <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>,
239 <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>; 281 <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>;
240 #dma-cells = <1>; 282 #dma-cells = <1>;
241 #dma-channels = <32>; 283 dma-channels = <32>;
242 #dma-requests = <127>; 284 dma-requests = <127>;
243 }; 285 };
244 286
245 gpio1: gpio@4ae10000 { 287 gpio1: gpio@4ae10000 {
@@ -929,8 +971,8 @@
929 <0x4A096800 0x40>; /* pll_ctrl */ 971 <0x4A096800 0x40>; /* pll_ctrl */
930 reg-names = "phy_rx", "phy_tx", "pll_ctrl"; 972 reg-names = "phy_rx", "phy_tx", "pll_ctrl";
931 ctrl-module = <&omap_control_sata>; 973 ctrl-module = <&omap_control_sata>;
932 clocks = <&sys_clkin>; 974 clocks = <&sys_clkin>, <&sata_ref_clk>;
933 clock-names = "sysclk"; 975 clock-names = "sysclk", "refclk";
934 #phy-cells = <0>; 976 #phy-cells = <0>;
935 }; 977 };
936 }; 978 };
diff --git a/arch/arm/boot/dts/vf-colibri-eval-v3.dtsi b/arch/arm/boot/dts/vf-colibri-eval-v3.dtsi
index 36cafbfa1bfa..606753eb72c8 100644
--- a/arch/arm/boot/dts/vf-colibri-eval-v3.dtsi
+++ b/arch/arm/boot/dts/vf-colibri-eval-v3.dtsi
@@ -12,6 +12,12 @@
12 bootargs = "console=ttyLP0,115200"; 12 bootargs = "console=ttyLP0,115200";
13 }; 13 };
14 14
15 clk16m: clk16m {
16 compatible = "fixed-clock";
17 #clock-cells = <0>;
18 clock-frequency = <16000000>;
19 };
20
15 regulators { 21 regulators {
16 compatible = "simple-bus"; 22 compatible = "simple-bus";
17 #address-cells = <1>; 23 #address-cells = <1>;
@@ -47,6 +53,21 @@
47 status = "okay"; 53 status = "okay";
48}; 54};
49 55
56&dspi1 {
57 status = "okay";
58
59 mcp2515can: can@0 {
60 compatible = "microchip,mcp2515";
61 pinctrl-names = "default";
62 pinctrl-0 = <&pinctrl_can_int>;
63 reg = <0>;
64 clocks = <&clk16m>;
65 spi-max-frequency = <10000000>;
66 interrupt-parent = <&gpio1>;
67 interrupts = <11 GPIO_ACTIVE_LOW>;
68 };
69};
70
50&esdhc1 { 71&esdhc1 {
51 pinctrl-names = "default"; 72 pinctrl-names = "default";
52 pinctrl-0 = <&pinctrl_esdhc1>; 73 pinctrl-0 = <&pinctrl_esdhc1>;
@@ -94,3 +115,13 @@
94&usbh1 { 115&usbh1 {
95 vbus-supply = <&usbh_vbus_reg>; 116 vbus-supply = <&usbh_vbus_reg>;
96}; 117};
118
119&iomuxc {
120 vf610-colibri {
121 pinctrl_can_int: can_int {
122 fsl,pins = <
123 VF610_PAD_PTB21__GPIO_43 0x22ed
124 >;
125 };
126 };
127};
diff --git a/arch/arm/boot/dts/vf-colibri.dtsi b/arch/arm/boot/dts/vf-colibri.dtsi
index 5c2b7320856d..fbef0828e930 100644
--- a/arch/arm/boot/dts/vf-colibri.dtsi
+++ b/arch/arm/boot/dts/vf-colibri.dtsi
@@ -23,6 +23,12 @@
23 status = "okay"; 23 status = "okay";
24}; 24};
25 25
26&dspi1 {
27 bus-num = <1>;
28 pinctrl-names = "default";
29 pinctrl-0 = <&pinctrl_dspi1>;
30};
31
26&edma0 { 32&edma0 {
27 status = "okay"; 33 status = "okay";
28}; 34};
@@ -107,6 +113,15 @@
107 >; 113 >;
108 }; 114 };
109 115
116 pinctrl_dspi1: dspi1grp {
117 fsl,pins = <
118 VF610_PAD_PTD5__DSPI1_CS0 0x33e2
119 VF610_PAD_PTD6__DSPI1_SIN 0x33e1
120 VF610_PAD_PTD7__DSPI1_SOUT 0x33e2
121 VF610_PAD_PTD8__DSPI1_SCK 0x33e2
122 >;
123 };
124
110 pinctrl_esdhc1: esdhc1grp { 125 pinctrl_esdhc1: esdhc1grp {
111 fsl,pins = < 126 fsl,pins = <
112 VF610_PAD_PTA24__ESDHC1_CLK 0x31ef 127 VF610_PAD_PTA24__ESDHC1_CLK 0x31ef
diff --git a/arch/arm/boot/dts/vf500.dtsi b/arch/arm/boot/dts/vf500.dtsi
index 1dbf8d2d1ddf..e976d2fa1527 100644
--- a/arch/arm/boot/dts/vf500.dtsi
+++ b/arch/arm/boot/dts/vf500.dtsi
@@ -24,14 +24,13 @@
24 }; 24 };
25 25
26 soc { 26 soc {
27 interrupt-parent = <&intc>;
28
29 aips-bus@40000000 { 27 aips-bus@40000000 {
30 28
31 intc: interrupt-controller@40002000 { 29 intc: interrupt-controller@40002000 {
32 compatible = "arm,cortex-a9-gic"; 30 compatible = "arm,cortex-a9-gic";
33 #interrupt-cells = <3>; 31 #interrupt-cells = <3>;
34 interrupt-controller; 32 interrupt-controller;
33 interrupt-parent = <&intc>;
35 reg = <0x40003000 0x1000>, 34 reg = <0x40003000 0x1000>,
36 <0x40002100 0x100>; 35 <0x40002100 0x100>;
37 }; 36 };
@@ -40,145 +39,17 @@
40 compatible = "arm,cortex-a9-global-timer"; 39 compatible = "arm,cortex-a9-global-timer";
41 reg = <0x40002200 0x20>; 40 reg = <0x40002200 0x20>;
42 interrupts = <GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH>; 41 interrupts = <GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH>;
42 interrupt-parent = <&intc>;
43 clocks = <&clks VF610_CLK_PLATFORM_BUS>; 43 clocks = <&clks VF610_CLK_PLATFORM_BUS>;
44 }; 44 };
45 }; 45 };
46 }; 46 };
47}; 47};
48 48
49&adc0 { 49&mscm_ir {
50 interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>; 50 interrupt-parent = <&intc>;
51};
52
53&adc1 {
54 interrupts = <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>;
55};
56
57&can0 {
58 interrupts = <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>;
59};
60
61&can1 {
62 interrupts = <GIC_SPI 59 IRQ_TYPE_LEVEL_HIGH>;
63};
64
65&dspi0 {
66 interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
67};
68
69&edma0 {
70 interrupts = <GIC_SPI 8 IRQ_TYPE_LEVEL_HIGH>,
71 <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
72 interrupt-names = "edma-tx", "edma-err";
73};
74
75&edma1 {
76 interrupts = <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>,
77 <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
78 interrupt-names = "edma-tx", "edma-err";
79};
80
81&esdhc1 {
82 interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH>;
83};
84
85&fec0 {
86 interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;
87};
88
89&fec1 {
90 interrupts = <GIC_SPI 79 IRQ_TYPE_LEVEL_HIGH>;
91};
92
93&ftm {
94 interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>;
95};
96
97&gpio0 {
98 interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
99};
100
101&gpio1 {
102 interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
103};
104
105&gpio2 {
106 interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>;
107};
108
109&gpio3 {
110 interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
111};
112
113&gpio4 {
114 interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>;
115};
116
117&i2c0 {
118 interrupts = <GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
119};
120
121&pit {
122 interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
123};
124
125&qspi0 {
126 interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
127};
128
129&sai2 {
130 interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
131};
132
133&snvsrtc {
134 interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>;
135};
136
137&src {
138 interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
139};
140
141&uart0 {
142 interrupts = <GIC_SPI 61 IRQ_TYPE_LEVEL_HIGH>;
143};
144
145&uart1 {
146 interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
147};
148
149&uart2 {
150 interrupts = <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
151};
152
153&uart3 {
154 interrupts = <GIC_SPI 64 IRQ_TYPE_LEVEL_HIGH>;
155};
156
157&uart4 {
158 interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;
159};
160
161&uart5 {
162 interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>;
163};
164
165&usbdev0 {
166 interrupts = <GIC_SPI 75 IRQ_TYPE_LEVEL_HIGH>;
167};
168
169&usbh1 {
170 interrupts = <GIC_SPI 76 IRQ_TYPE_LEVEL_HIGH>;
171};
172
173&usbphy0 {
174 interrupts = <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH>;
175};
176
177&usbphy1 {
178 interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>;
179}; 51};
180 52
181&wdoga5 { 53&wdoga5 {
182 interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
183 status = "okay"; 54 status = "okay";
184}; 55};
diff --git a/arch/arm/boot/dts/vfxxx.dtsi b/arch/arm/boot/dts/vfxxx.dtsi
index a29c7ce15eaf..4aa335166be7 100644
--- a/arch/arm/boot/dts/vfxxx.dtsi
+++ b/arch/arm/boot/dts/vfxxx.dtsi
@@ -54,6 +54,7 @@
54 #address-cells = <1>; 54 #address-cells = <1>;
55 #size-cells = <1>; 55 #size-cells = <1>;
56 compatible = "simple-bus"; 56 compatible = "simple-bus";
57 interrupt-parent = <&mscm_ir>;
57 ranges; 58 ranges;
58 59
59 aips0: aips-bus@40000000 { 60 aips0: aips-bus@40000000 {
@@ -62,6 +63,19 @@
62 #size-cells = <1>; 63 #size-cells = <1>;
63 ranges; 64 ranges;
64 65
66 mscm_cpucfg: cpucfg@40001000 {
67 compatible = "fsl,vf610-mscm-cpucfg", "syscon";
68 reg = <0x40001000 0x800>;
69 };
70
71 mscm_ir: interrupt-controller@40001800 {
72 compatible = "fsl,vf610-mscm-ir";
73 reg = <0x40001800 0x400>;
74 fsl,cpucfg = <&mscm_cpucfg>;
75 interrupt-controller;
76 #interrupt-cells = <2>;
77 };
78
65 edma0: dma-controller@40018000 { 79 edma0: dma-controller@40018000 {
66 #dma-cells = <2>; 80 #dma-cells = <2>;
67 compatible = "fsl,vf610-edma"; 81 compatible = "fsl,vf610-edma";
@@ -69,6 +83,9 @@
69 <0x40024000 0x1000>, 83 <0x40024000 0x1000>,
70 <0x40025000 0x1000>; 84 <0x40025000 0x1000>;
71 dma-channels = <32>; 85 dma-channels = <32>;
86 interrupts = <8 IRQ_TYPE_LEVEL_HIGH>,
87 <9 IRQ_TYPE_LEVEL_HIGH>;
88 interrupt-names = "edma-tx", "edma-err";
72 clock-names = "dmamux0", "dmamux1"; 89 clock-names = "dmamux0", "dmamux1";
73 clocks = <&clks VF610_CLK_DMAMUX0>, 90 clocks = <&clks VF610_CLK_DMAMUX0>,
74 <&clks VF610_CLK_DMAMUX1>; 91 <&clks VF610_CLK_DMAMUX1>;
@@ -78,6 +95,7 @@
78 can0: flexcan@40020000 { 95 can0: flexcan@40020000 {
79 compatible = "fsl,vf610-flexcan"; 96 compatible = "fsl,vf610-flexcan";
80 reg = <0x40020000 0x4000>; 97 reg = <0x40020000 0x4000>;
98 interrupts = <58 IRQ_TYPE_LEVEL_HIGH>;
81 clocks = <&clks VF610_CLK_FLEXCAN0>, 99 clocks = <&clks VF610_CLK_FLEXCAN0>,
82 <&clks VF610_CLK_FLEXCAN0>; 100 <&clks VF610_CLK_FLEXCAN0>;
83 clock-names = "ipg", "per"; 101 clock-names = "ipg", "per";
@@ -87,6 +105,7 @@
87 uart0: serial@40027000 { 105 uart0: serial@40027000 {
88 compatible = "fsl,vf610-lpuart"; 106 compatible = "fsl,vf610-lpuart";
89 reg = <0x40027000 0x1000>; 107 reg = <0x40027000 0x1000>;
108 interrupts = <61 IRQ_TYPE_LEVEL_HIGH>;
90 clocks = <&clks VF610_CLK_UART0>; 109 clocks = <&clks VF610_CLK_UART0>;
91 clock-names = "ipg"; 110 clock-names = "ipg";
92 dmas = <&edma0 0 2>, 111 dmas = <&edma0 0 2>,
@@ -98,6 +117,7 @@
98 uart1: serial@40028000 { 117 uart1: serial@40028000 {
99 compatible = "fsl,vf610-lpuart"; 118 compatible = "fsl,vf610-lpuart";
100 reg = <0x40028000 0x1000>; 119 reg = <0x40028000 0x1000>;
120 interrupts = <62 IRQ_TYPE_LEVEL_HIGH>;
101 clocks = <&clks VF610_CLK_UART1>; 121 clocks = <&clks VF610_CLK_UART1>;
102 clock-names = "ipg"; 122 clock-names = "ipg";
103 dmas = <&edma0 0 4>, 123 dmas = <&edma0 0 4>,
@@ -109,6 +129,7 @@
109 uart2: serial@40029000 { 129 uart2: serial@40029000 {
110 compatible = "fsl,vf610-lpuart"; 130 compatible = "fsl,vf610-lpuart";
111 reg = <0x40029000 0x1000>; 131 reg = <0x40029000 0x1000>;
132 interrupts = <63 IRQ_TYPE_LEVEL_HIGH>;
112 clocks = <&clks VF610_CLK_UART2>; 133 clocks = <&clks VF610_CLK_UART2>;
113 clock-names = "ipg"; 134 clock-names = "ipg";
114 dmas = <&edma0 0 6>, 135 dmas = <&edma0 0 6>,
@@ -120,6 +141,7 @@
120 uart3: serial@4002a000 { 141 uart3: serial@4002a000 {
121 compatible = "fsl,vf610-lpuart"; 142 compatible = "fsl,vf610-lpuart";
122 reg = <0x4002a000 0x1000>; 143 reg = <0x4002a000 0x1000>;
144 interrupts = <64 IRQ_TYPE_LEVEL_HIGH>;
123 clocks = <&clks VF610_CLK_UART3>; 145 clocks = <&clks VF610_CLK_UART3>;
124 clock-names = "ipg"; 146 clock-names = "ipg";
125 dmas = <&edma0 0 8>, 147 dmas = <&edma0 0 8>,
@@ -133,15 +155,29 @@
133 #size-cells = <0>; 155 #size-cells = <0>;
134 compatible = "fsl,vf610-dspi"; 156 compatible = "fsl,vf610-dspi";
135 reg = <0x4002c000 0x1000>; 157 reg = <0x4002c000 0x1000>;
158 interrupts = <67 IRQ_TYPE_LEVEL_HIGH>;
136 clocks = <&clks VF610_CLK_DSPI0>; 159 clocks = <&clks VF610_CLK_DSPI0>;
137 clock-names = "dspi"; 160 clock-names = "dspi";
138 spi-num-chipselects = <5>; 161 spi-num-chipselects = <5>;
139 status = "disabled"; 162 status = "disabled";
140 }; 163 };
141 164
165 dspi1: dspi1@4002d000 {
166 #address-cells = <1>;
167 #size-cells = <0>;
168 compatible = "fsl,vf610-dspi";
169 reg = <0x4002d000 0x1000>;
170 interrupts = <68 IRQ_TYPE_LEVEL_HIGH>;
171 clocks = <&clks VF610_CLK_DSPI1>;
172 clock-names = "dspi";
173 spi-num-chipselects = <5>;
174 status = "disabled";
175 };
176
142 sai2: sai@40031000 { 177 sai2: sai@40031000 {
143 compatible = "fsl,vf610-sai"; 178 compatible = "fsl,vf610-sai";
144 reg = <0x40031000 0x1000>; 179 reg = <0x40031000 0x1000>;
180 interrupts = <86 IRQ_TYPE_LEVEL_HIGH>;
145 clocks = <&clks VF610_CLK_SAI2>; 181 clocks = <&clks VF610_CLK_SAI2>;
146 clock-names = "sai"; 182 clock-names = "sai";
147 dma-names = "tx", "rx"; 183 dma-names = "tx", "rx";
@@ -153,6 +189,7 @@
153 pit: pit@40037000 { 189 pit: pit@40037000 {
154 compatible = "fsl,vf610-pit"; 190 compatible = "fsl,vf610-pit";
155 reg = <0x40037000 0x1000>; 191 reg = <0x40037000 0x1000>;
192 interrupts = <39 IRQ_TYPE_LEVEL_HIGH>;
156 clocks = <&clks VF610_CLK_PIT>; 193 clocks = <&clks VF610_CLK_PIT>;
157 clock-names = "pit"; 194 clock-names = "pit";
158 }; 195 };
@@ -186,6 +223,7 @@
186 adc0: adc@4003b000 { 223 adc0: adc@4003b000 {
187 compatible = "fsl,vf610-adc"; 224 compatible = "fsl,vf610-adc";
188 reg = <0x4003b000 0x1000>; 225 reg = <0x4003b000 0x1000>;
226 interrupts = <53 IRQ_TYPE_LEVEL_HIGH>;
189 clocks = <&clks VF610_CLK_ADC0>; 227 clocks = <&clks VF610_CLK_ADC0>;
190 clock-names = "adc"; 228 clock-names = "adc";
191 status = "disabled"; 229 status = "disabled";
@@ -194,6 +232,7 @@
194 wdoga5: wdog@4003e000 { 232 wdoga5: wdog@4003e000 {
195 compatible = "fsl,vf610-wdt", "fsl,imx21-wdt"; 233 compatible = "fsl,vf610-wdt", "fsl,imx21-wdt";
196 reg = <0x4003e000 0x1000>; 234 reg = <0x4003e000 0x1000>;
235 interrupts = <20 IRQ_TYPE_LEVEL_HIGH>;
197 clocks = <&clks VF610_CLK_WDT>; 236 clocks = <&clks VF610_CLK_WDT>;
198 clock-names = "wdog"; 237 clock-names = "wdog";
199 status = "disabled"; 238 status = "disabled";
@@ -204,6 +243,7 @@
204 #size-cells = <0>; 243 #size-cells = <0>;
205 compatible = "fsl,vf610-qspi"; 244 compatible = "fsl,vf610-qspi";
206 reg = <0x40044000 0x1000>; 245 reg = <0x40044000 0x1000>;
246 interrupts = <24 IRQ_TYPE_LEVEL_HIGH>;
207 clocks = <&clks VF610_CLK_QSPI0_EN>, 247 clocks = <&clks VF610_CLK_QSPI0_EN>,
208 <&clks VF610_CLK_QSPI0>; 248 <&clks VF610_CLK_QSPI0>;
209 clock-names = "qspi_en", "qspi"; 249 clock-names = "qspi_en", "qspi";
@@ -213,7 +253,6 @@
213 iomuxc: iomuxc@40048000 { 253 iomuxc: iomuxc@40048000 {
214 compatible = "fsl,vf610-iomuxc"; 254 compatible = "fsl,vf610-iomuxc";
215 reg = <0x40048000 0x1000>; 255 reg = <0x40048000 0x1000>;
216 #gpio-range-cells = <3>;
217 }; 256 };
218 257
219 gpio0: gpio@40049000 { 258 gpio0: gpio@40049000 {
@@ -221,6 +260,7 @@
221 reg = <0x40049000 0x1000 0x400ff000 0x40>; 260 reg = <0x40049000 0x1000 0x400ff000 0x40>;
222 gpio-controller; 261 gpio-controller;
223 #gpio-cells = <2>; 262 #gpio-cells = <2>;
263 interrupts = <107 IRQ_TYPE_LEVEL_HIGH>;
224 interrupt-controller; 264 interrupt-controller;
225 #interrupt-cells = <2>; 265 #interrupt-cells = <2>;
226 gpio-ranges = <&iomuxc 0 0 32>; 266 gpio-ranges = <&iomuxc 0 0 32>;
@@ -231,6 +271,7 @@
231 reg = <0x4004a000 0x1000 0x400ff040 0x40>; 271 reg = <0x4004a000 0x1000 0x400ff040 0x40>;
232 gpio-controller; 272 gpio-controller;
233 #gpio-cells = <2>; 273 #gpio-cells = <2>;
274 interrupts = <108 IRQ_TYPE_LEVEL_HIGH>;
234 interrupt-controller; 275 interrupt-controller;
235 #interrupt-cells = <2>; 276 #interrupt-cells = <2>;
236 gpio-ranges = <&iomuxc 0 32 32>; 277 gpio-ranges = <&iomuxc 0 32 32>;
@@ -241,6 +282,7 @@
241 reg = <0x4004b000 0x1000 0x400ff080 0x40>; 282 reg = <0x4004b000 0x1000 0x400ff080 0x40>;
242 gpio-controller; 283 gpio-controller;
243 #gpio-cells = <2>; 284 #gpio-cells = <2>;
285 interrupts = <109 IRQ_TYPE_LEVEL_HIGH>;
244 interrupt-controller; 286 interrupt-controller;
245 #interrupt-cells = <2>; 287 #interrupt-cells = <2>;
246 gpio-ranges = <&iomuxc 0 64 32>; 288 gpio-ranges = <&iomuxc 0 64 32>;
@@ -251,6 +293,7 @@
251 reg = <0x4004c000 0x1000 0x400ff0c0 0x40>; 293 reg = <0x4004c000 0x1000 0x400ff0c0 0x40>;
252 gpio-controller; 294 gpio-controller;
253 #gpio-cells = <2>; 295 #gpio-cells = <2>;
296 interrupts = <110 IRQ_TYPE_LEVEL_HIGH>;
254 interrupt-controller; 297 interrupt-controller;
255 #interrupt-cells = <2>; 298 #interrupt-cells = <2>;
256 gpio-ranges = <&iomuxc 0 96 32>; 299 gpio-ranges = <&iomuxc 0 96 32>;
@@ -261,6 +304,7 @@
261 reg = <0x4004d000 0x1000 0x400ff100 0x40>; 304 reg = <0x4004d000 0x1000 0x400ff100 0x40>;
262 gpio-controller; 305 gpio-controller;
263 #gpio-cells = <2>; 306 #gpio-cells = <2>;
307 interrupts = <111 IRQ_TYPE_LEVEL_HIGH>;
264 interrupt-controller; 308 interrupt-controller;
265 #interrupt-cells = <2>; 309 #interrupt-cells = <2>;
266 gpio-ranges = <&iomuxc 0 128 7>; 310 gpio-ranges = <&iomuxc 0 128 7>;
@@ -274,6 +318,7 @@
274 usbphy0: usbphy@40050800 { 318 usbphy0: usbphy@40050800 {
275 compatible = "fsl,vf610-usbphy"; 319 compatible = "fsl,vf610-usbphy";
276 reg = <0x40050800 0x400>; 320 reg = <0x40050800 0x400>;
321 interrupts = <50 IRQ_TYPE_LEVEL_HIGH>;
277 clocks = <&clks VF610_CLK_USBPHY0>; 322 clocks = <&clks VF610_CLK_USBPHY0>;
278 fsl,anatop = <&anatop>; 323 fsl,anatop = <&anatop>;
279 status = "disabled"; 324 status = "disabled";
@@ -282,6 +327,7 @@
282 usbphy1: usbphy@40050c00 { 327 usbphy1: usbphy@40050c00 {
283 compatible = "fsl,vf610-usbphy"; 328 compatible = "fsl,vf610-usbphy";
284 reg = <0x40050c00 0x400>; 329 reg = <0x40050c00 0x400>;
330 interrupts = <51 IRQ_TYPE_LEVEL_HIGH>;
285 clocks = <&clks VF610_CLK_USBPHY1>; 331 clocks = <&clks VF610_CLK_USBPHY1>;
286 fsl,anatop = <&anatop>; 332 fsl,anatop = <&anatop>;
287 status = "disabled"; 333 status = "disabled";
@@ -292,6 +338,7 @@
292 #size-cells = <0>; 338 #size-cells = <0>;
293 compatible = "fsl,vf610-i2c"; 339 compatible = "fsl,vf610-i2c";
294 reg = <0x40066000 0x1000>; 340 reg = <0x40066000 0x1000>;
341 interrupts = <71 IRQ_TYPE_LEVEL_HIGH>;
295 clocks = <&clks VF610_CLK_I2C0>; 342 clocks = <&clks VF610_CLK_I2C0>;
296 clock-names = "ipg"; 343 clock-names = "ipg";
297 dmas = <&edma0 0 50>, 344 dmas = <&edma0 0 50>,
@@ -311,6 +358,7 @@
311 usbdev0: usb@40034000 { 358 usbdev0: usb@40034000 {
312 compatible = "fsl,vf610-usb", "fsl,imx27-usb"; 359 compatible = "fsl,vf610-usb", "fsl,imx27-usb";
313 reg = <0x40034000 0x800>; 360 reg = <0x40034000 0x800>;
361 interrupts = <75 IRQ_TYPE_LEVEL_HIGH>;
314 clocks = <&clks VF610_CLK_USBC0>; 362 clocks = <&clks VF610_CLK_USBC0>;
315 fsl,usbphy = <&usbphy0>; 363 fsl,usbphy = <&usbphy0>;
316 fsl,usbmisc = <&usbmisc0 0>; 364 fsl,usbmisc = <&usbmisc0 0>;
@@ -329,6 +377,7 @@
329 src: src@4006e000 { 377 src: src@4006e000 {
330 compatible = "fsl,vf610-src", "syscon"; 378 compatible = "fsl,vf610-src", "syscon";
331 reg = <0x4006e000 0x1000>; 379 reg = <0x4006e000 0x1000>;
380 interrupts = <96 IRQ_TYPE_LEVEL_HIGH>;
332 }; 381 };
333 }; 382 };
334 383
@@ -345,6 +394,9 @@
345 <0x400a1000 0x1000>, 394 <0x400a1000 0x1000>,
346 <0x400a2000 0x1000>; 395 <0x400a2000 0x1000>;
347 dma-channels = <32>; 396 dma-channels = <32>;
397 interrupts = <10 IRQ_TYPE_LEVEL_HIGH>,
398 <11 IRQ_TYPE_LEVEL_HIGH>;
399 interrupt-names = "edma-tx", "edma-err";
348 clock-names = "dmamux0", "dmamux1"; 400 clock-names = "dmamux0", "dmamux1";
349 clocks = <&clks VF610_CLK_DMAMUX2>, 401 clocks = <&clks VF610_CLK_DMAMUX2>,
350 <&clks VF610_CLK_DMAMUX3>; 402 <&clks VF610_CLK_DMAMUX3>;
@@ -360,6 +412,7 @@
360 snvsrtc: snvs-rtc-lp@34 { 412 snvsrtc: snvs-rtc-lp@34 {
361 compatible = "fsl,sec-v4.0-mon-rtc-lp"; 413 compatible = "fsl,sec-v4.0-mon-rtc-lp";
362 reg = <0x34 0x58>; 414 reg = <0x34 0x58>;
415 interrupts = <100 IRQ_TYPE_LEVEL_HIGH>;
363 clocks = <&clks VF610_CLK_SNVS>; 416 clocks = <&clks VF610_CLK_SNVS>;
364 clock-names = "snvs-rtc"; 417 clock-names = "snvs-rtc";
365 }; 418 };
@@ -368,6 +421,7 @@
368 uart4: serial@400a9000 { 421 uart4: serial@400a9000 {
369 compatible = "fsl,vf610-lpuart"; 422 compatible = "fsl,vf610-lpuart";
370 reg = <0x400a9000 0x1000>; 423 reg = <0x400a9000 0x1000>;
424 interrupts = <65 IRQ_TYPE_LEVEL_HIGH>;
371 clocks = <&clks VF610_CLK_UART4>; 425 clocks = <&clks VF610_CLK_UART4>;
372 clock-names = "ipg"; 426 clock-names = "ipg";
373 status = "disabled"; 427 status = "disabled";
@@ -376,6 +430,7 @@
376 uart5: serial@400aa000 { 430 uart5: serial@400aa000 {
377 compatible = "fsl,vf610-lpuart"; 431 compatible = "fsl,vf610-lpuart";
378 reg = <0x400aa000 0x1000>; 432 reg = <0x400aa000 0x1000>;
433 interrupts = <66 IRQ_TYPE_LEVEL_HIGH>;
379 clocks = <&clks VF610_CLK_UART5>; 434 clocks = <&clks VF610_CLK_UART5>;
380 clock-names = "ipg"; 435 clock-names = "ipg";
381 status = "disabled"; 436 status = "disabled";
@@ -384,6 +439,7 @@
384 adc1: adc@400bb000 { 439 adc1: adc@400bb000 {
385 compatible = "fsl,vf610-adc"; 440 compatible = "fsl,vf610-adc";
386 reg = <0x400bb000 0x1000>; 441 reg = <0x400bb000 0x1000>;
442 interrupts = <54 IRQ_TYPE_LEVEL_HIGH>;
387 clocks = <&clks VF610_CLK_ADC1>; 443 clocks = <&clks VF610_CLK_ADC1>;
388 clock-names = "adc"; 444 clock-names = "adc";
389 status = "disabled"; 445 status = "disabled";
@@ -392,6 +448,7 @@
392 esdhc1: esdhc@400b2000 { 448 esdhc1: esdhc@400b2000 {
393 compatible = "fsl,imx53-esdhc"; 449 compatible = "fsl,imx53-esdhc";
394 reg = <0x400b2000 0x1000>; 450 reg = <0x400b2000 0x1000>;
451 interrupts = <28 IRQ_TYPE_LEVEL_HIGH>;
395 clocks = <&clks VF610_CLK_IPG_BUS>, 452 clocks = <&clks VF610_CLK_IPG_BUS>,
396 <&clks VF610_CLK_PLATFORM_BUS>, 453 <&clks VF610_CLK_PLATFORM_BUS>,
397 <&clks VF610_CLK_ESDHC1>; 454 <&clks VF610_CLK_ESDHC1>;
@@ -402,6 +459,7 @@
402 usbh1: usb@400b4000 { 459 usbh1: usb@400b4000 {
403 compatible = "fsl,vf610-usb", "fsl,imx27-usb"; 460 compatible = "fsl,vf610-usb", "fsl,imx27-usb";
404 reg = <0x400b4000 0x800>; 461 reg = <0x400b4000 0x800>;
462 interrupts = <76 IRQ_TYPE_LEVEL_HIGH>;
405 clocks = <&clks VF610_CLK_USBC1>; 463 clocks = <&clks VF610_CLK_USBC1>;
406 fsl,usbphy = <&usbphy1>; 464 fsl,usbphy = <&usbphy1>;
407 fsl,usbmisc = <&usbmisc1 0>; 465 fsl,usbmisc = <&usbmisc1 0>;
@@ -420,6 +478,7 @@
420 ftm: ftm@400b8000 { 478 ftm: ftm@400b8000 {
421 compatible = "fsl,ftm-timer"; 479 compatible = "fsl,ftm-timer";
422 reg = <0x400b8000 0x1000 0x400b9000 0x1000>; 480 reg = <0x400b8000 0x1000 0x400b9000 0x1000>;
481 interrupts = <44 IRQ_TYPE_LEVEL_HIGH>;
423 clock-names = "ftm-evt", "ftm-src", 482 clock-names = "ftm-evt", "ftm-src",
424 "ftm-evt-counter-en", "ftm-src-counter-en"; 483 "ftm-evt-counter-en", "ftm-src-counter-en";
425 clocks = <&clks VF610_CLK_FTM2>, 484 clocks = <&clks VF610_CLK_FTM2>,
@@ -432,6 +491,7 @@
432 fec0: ethernet@400d0000 { 491 fec0: ethernet@400d0000 {
433 compatible = "fsl,mvf600-fec"; 492 compatible = "fsl,mvf600-fec";
434 reg = <0x400d0000 0x1000>; 493 reg = <0x400d0000 0x1000>;
494 interrupts = <78 IRQ_TYPE_LEVEL_HIGH>;
435 clocks = <&clks VF610_CLK_ENET0>, 495 clocks = <&clks VF610_CLK_ENET0>,
436 <&clks VF610_CLK_ENET0>, 496 <&clks VF610_CLK_ENET0>,
437 <&clks VF610_CLK_ENET>; 497 <&clks VF610_CLK_ENET>;
@@ -442,6 +502,7 @@
442 fec1: ethernet@400d1000 { 502 fec1: ethernet@400d1000 {
443 compatible = "fsl,mvf600-fec"; 503 compatible = "fsl,mvf600-fec";
444 reg = <0x400d1000 0x1000>; 504 reg = <0x400d1000 0x1000>;
505 interrupts = <79 IRQ_TYPE_LEVEL_HIGH>;
445 clocks = <&clks VF610_CLK_ENET1>, 506 clocks = <&clks VF610_CLK_ENET1>,
446 <&clks VF610_CLK_ENET1>, 507 <&clks VF610_CLK_ENET1>,
447 <&clks VF610_CLK_ENET>; 508 <&clks VF610_CLK_ENET>;
@@ -452,6 +513,7 @@
452 can1: flexcan@400d4000 { 513 can1: flexcan@400d4000 {
453 compatible = "fsl,vf610-flexcan"; 514 compatible = "fsl,vf610-flexcan";
454 reg = <0x400d4000 0x4000>; 515 reg = <0x400d4000 0x4000>;
516 interrupts = <59 IRQ_TYPE_LEVEL_HIGH>;
455 clocks = <&clks VF610_CLK_FLEXCAN1>, 517 clocks = <&clks VF610_CLK_FLEXCAN1>,
456 <&clks VF610_CLK_FLEXCAN1>; 518 <&clks VF610_CLK_FLEXCAN1>;
457 clock-names = "ipg", "per"; 519 clock-names = "ipg", "per";
diff --git a/arch/arm/configs/imx_v4_v5_defconfig b/arch/arm/configs/imx_v4_v5_defconfig
index e6b0007355f8..af07e058ba11 100644
--- a/arch/arm/configs/imx_v4_v5_defconfig
+++ b/arch/arm/configs/imx_v4_v5_defconfig
@@ -24,9 +24,8 @@ CONFIG_ARCH_MXC=y
24CONFIG_MACH_SCB9328=y 24CONFIG_MACH_SCB9328=y
25CONFIG_MACH_APF9328=y 25CONFIG_MACH_APF9328=y
26CONFIG_MACH_MX21ADS=y 26CONFIG_MACH_MX21ADS=y
27CONFIG_MACH_MX25_3DS=y
28CONFIG_MACH_EUKREA_CPUIMX25SD=y 27CONFIG_MACH_EUKREA_CPUIMX25SD=y
29CONFIG_MACH_IMX25_DT=y 28CONFIG_SOC_IMX25=y
30CONFIG_MACH_MX27ADS=y 29CONFIG_MACH_MX27ADS=y
31CONFIG_MACH_MX27_3DS=y 30CONFIG_MACH_MX27_3DS=y
32CONFIG_MACH_IMX27_VISSTRIM_M10=y 31CONFIG_MACH_IMX27_VISSTRIM_M10=y
diff --git a/arch/arm/configs/multi_v5_defconfig b/arch/arm/configs/multi_v5_defconfig
index 9d56781a8f80..f69a459f4f92 100644
--- a/arch/arm/configs/multi_v5_defconfig
+++ b/arch/arm/configs/multi_v5_defconfig
@@ -13,7 +13,7 @@ CONFIG_ARCH_MVEBU=y
13CONFIG_MACH_KIRKWOOD=y 13CONFIG_MACH_KIRKWOOD=y
14CONFIG_MACH_NETXBIG=y 14CONFIG_MACH_NETXBIG=y
15CONFIG_ARCH_MXC=y 15CONFIG_ARCH_MXC=y
16CONFIG_MACH_IMX25_DT=y 16CONFIG_SOC_IMX25=y
17CONFIG_MACH_IMX27_DT=y 17CONFIG_MACH_IMX27_DT=y
18CONFIG_ARCH_U300=y 18CONFIG_ARCH_U300=y
19CONFIG_PCI_MVEBU=y 19CONFIG_PCI_MVEBU=y
diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig
index e8a4c955241b..b7e6b6fba5e0 100644
--- a/arch/arm/configs/multi_v7_defconfig
+++ b/arch/arm/configs/multi_v7_defconfig
@@ -62,6 +62,17 @@ CONFIG_MACH_SPEAR1340=y
62CONFIG_ARCH_STI=y 62CONFIG_ARCH_STI=y
63CONFIG_ARCH_EXYNOS=y 63CONFIG_ARCH_EXYNOS=y
64CONFIG_EXYNOS5420_MCPM=y 64CONFIG_EXYNOS5420_MCPM=y
65CONFIG_ARCH_SHMOBILE_MULTI=y
66CONFIG_ARCH_EMEV2=y
67CONFIG_ARCH_R7S72100=y
68CONFIG_ARCH_R8A73A4=y
69CONFIG_ARCH_R8A7740=y
70CONFIG_ARCH_R8A7779=y
71CONFIG_ARCH_R8A7790=y
72CONFIG_ARCH_R8A7791=y
73CONFIG_ARCH_R8A7794=y
74CONFIG_ARCH_SH73A0=y
75CONFIG_MACH_MARZEN=y
65CONFIG_ARCH_SUNXI=y 76CONFIG_ARCH_SUNXI=y
66CONFIG_ARCH_SIRF=y 77CONFIG_ARCH_SIRF=y
67CONFIG_ARCH_TEGRA=y 78CONFIG_ARCH_TEGRA=y
@@ -84,6 +95,8 @@ CONFIG_PCI_KEYSTONE=y
84CONFIG_PCI_MSI=y 95CONFIG_PCI_MSI=y
85CONFIG_PCI_MVEBU=y 96CONFIG_PCI_MVEBU=y
86CONFIG_PCI_TEGRA=y 97CONFIG_PCI_TEGRA=y
98CONFIG_PCI_RCAR_GEN2=y
99CONFIG_PCI_RCAR_GEN2_PCIE=y
87CONFIG_PCIEPORTBUS=y 100CONFIG_PCIEPORTBUS=y
88CONFIG_SMP=y 101CONFIG_SMP=y
89CONFIG_NR_CPUS=8 102CONFIG_NR_CPUS=8
@@ -130,6 +143,7 @@ CONFIG_DEVTMPFS_MOUNT=y
130CONFIG_DMA_CMA=y 143CONFIG_DMA_CMA=y
131CONFIG_CMA_SIZE_MBYTES=64 144CONFIG_CMA_SIZE_MBYTES=64
132CONFIG_OMAP_OCP2SCP=y 145CONFIG_OMAP_OCP2SCP=y
146CONFIG_SIMPLE_PM_BUS=y
133CONFIG_MTD=y 147CONFIG_MTD=y
134CONFIG_MTD_CMDLINE_PARTS=y 148CONFIG_MTD_CMDLINE_PARTS=y
135CONFIG_MTD_BLOCK=y 149CONFIG_MTD_BLOCK=y
@@ -157,6 +171,7 @@ CONFIG_AHCI_SUNXI=y
157CONFIG_AHCI_TEGRA=y 171CONFIG_AHCI_TEGRA=y
158CONFIG_SATA_HIGHBANK=y 172CONFIG_SATA_HIGHBANK=y
159CONFIG_SATA_MV=y 173CONFIG_SATA_MV=y
174CONFIG_SATA_RCAR=y
160CONFIG_NETDEVICES=y 175CONFIG_NETDEVICES=y
161CONFIG_HIX5HD2_GMAC=y 176CONFIG_HIX5HD2_GMAC=y
162CONFIG_SUN4I_EMAC=y 177CONFIG_SUN4I_EMAC=y
@@ -167,14 +182,17 @@ CONFIG_MV643XX_ETH=y
167CONFIG_MVNETA=y 182CONFIG_MVNETA=y
168CONFIG_KS8851=y 183CONFIG_KS8851=y
169CONFIG_R8169=y 184CONFIG_R8169=y
185CONFIG_SH_ETH=y
170CONFIG_SMSC911X=y 186CONFIG_SMSC911X=y
171CONFIG_STMMAC_ETH=y 187CONFIG_STMMAC_ETH=y
172CONFIG_TI_CPSW=y 188CONFIG_TI_CPSW=y
173CONFIG_XILINX_EMACLITE=y 189CONFIG_XILINX_EMACLITE=y
174CONFIG_AT803X_PHY=y 190CONFIG_AT803X_PHY=y
175CONFIG_MARVELL_PHY=y 191CONFIG_MARVELL_PHY=y
192CONFIG_SMSC_PHY=y
176CONFIG_BROADCOM_PHY=y 193CONFIG_BROADCOM_PHY=y
177CONFIG_ICPLUS_PHY=y 194CONFIG_ICPLUS_PHY=y
195CONFIG_MICREL_PHY=y
178CONFIG_USB_PEGASUS=y 196CONFIG_USB_PEGASUS=y
179CONFIG_USB_USBNET=y 197CONFIG_USB_USBNET=y
180CONFIG_USB_NET_SMSC75XX=y 198CONFIG_USB_NET_SMSC75XX=y
@@ -192,15 +210,18 @@ CONFIG_KEYBOARD_CROS_EC=y
192CONFIG_MOUSE_PS2_ELANTECH=y 210CONFIG_MOUSE_PS2_ELANTECH=y
193CONFIG_INPUT_TOUCHSCREEN=y 211CONFIG_INPUT_TOUCHSCREEN=y
194CONFIG_TOUCHSCREEN_ATMEL_MXT=y 212CONFIG_TOUCHSCREEN_ATMEL_MXT=y
213CONFIG_TOUCHSCREEN_ST1232=m
195CONFIG_TOUCHSCREEN_STMPE=y 214CONFIG_TOUCHSCREEN_STMPE=y
196CONFIG_TOUCHSCREEN_SUN4I=y 215CONFIG_TOUCHSCREEN_SUN4I=y
197CONFIG_INPUT_MISC=y 216CONFIG_INPUT_MISC=y
198CONFIG_INPUT_MPU3050=y 217CONFIG_INPUT_MPU3050=y
199CONFIG_INPUT_AXP20X_PEK=y 218CONFIG_INPUT_AXP20X_PEK=y
219CONFIG_INPUT_ADXL34X=m
200CONFIG_SERIO_AMBAKMI=y 220CONFIG_SERIO_AMBAKMI=y
201CONFIG_SERIAL_8250=y 221CONFIG_SERIAL_8250=y
202CONFIG_SERIAL_8250_CONSOLE=y 222CONFIG_SERIAL_8250_CONSOLE=y
203CONFIG_SERIAL_8250_DW=y 223CONFIG_SERIAL_8250_DW=y
224CONFIG_SERIAL_8250_EM=y
204CONFIG_SERIAL_8250_MT6577=y 225CONFIG_SERIAL_8250_MT6577=y
205CONFIG_SERIAL_AMBA_PL011=y 226CONFIG_SERIAL_AMBA_PL011=y
206CONFIG_SERIAL_AMBA_PL011_CONSOLE=y 227CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
@@ -213,6 +234,9 @@ CONFIG_SERIAL_SIRFSOC_CONSOLE=y
213CONFIG_SERIAL_TEGRA=y 234CONFIG_SERIAL_TEGRA=y
214CONFIG_SERIAL_IMX=y 235CONFIG_SERIAL_IMX=y
215CONFIG_SERIAL_IMX_CONSOLE=y 236CONFIG_SERIAL_IMX_CONSOLE=y
237CONFIG_SERIAL_SH_SCI=y
238CONFIG_SERIAL_SH_SCI_NR_UARTS=20
239CONFIG_SERIAL_SH_SCI_CONSOLE=y
216CONFIG_SERIAL_MSM=y 240CONFIG_SERIAL_MSM=y
217CONFIG_SERIAL_MSM_CONSOLE=y 241CONFIG_SERIAL_MSM_CONSOLE=y
218CONFIG_SERIAL_VT8500=y 242CONFIG_SERIAL_VT8500=y
@@ -233,19 +257,26 @@ CONFIG_I2C_MUX_PCA954x=y
233CONFIG_I2C_MUX_PINCTRL=y 257CONFIG_I2C_MUX_PINCTRL=y
234CONFIG_I2C_CADENCE=y 258CONFIG_I2C_CADENCE=y
235CONFIG_I2C_DESIGNWARE_PLATFORM=y 259CONFIG_I2C_DESIGNWARE_PLATFORM=y
260CONFIG_I2C_GPIO=m
236CONFIG_I2C_EXYNOS5=y 261CONFIG_I2C_EXYNOS5=y
237CONFIG_I2C_MV64XXX=y 262CONFIG_I2C_MV64XXX=y
263CONFIG_I2C_RIIC=y
238CONFIG_I2C_S3C2410=y 264CONFIG_I2C_S3C2410=y
265CONFIG_I2C_SH_MOBILE=y
239CONFIG_I2C_SIRF=y 266CONFIG_I2C_SIRF=y
240CONFIG_I2C_TEGRA=y
241CONFIG_I2C_ST=y 267CONFIG_I2C_ST=y
242CONFIG_SPI=y 268CONFIG_I2C_TEGRA=y
243CONFIG_I2C_XILINX=y 269CONFIG_I2C_XILINX=y
244CONFIG_SPI_DAVINCI=y 270CONFIG_I2C_RCAR=y
271CONFIG_SPI=y
245CONFIG_SPI_CADENCE=y 272CONFIG_SPI_CADENCE=y
273CONFIG_SPI_DAVINCI=y
246CONFIG_SPI_OMAP24XX=y 274CONFIG_SPI_OMAP24XX=y
247CONFIG_SPI_ORION=y 275CONFIG_SPI_ORION=y
248CONFIG_SPI_PL022=y 276CONFIG_SPI_PL022=y
277CONFIG_SPI_RSPI=y
278CONFIG_SPI_SH_MSIOF=m
279CONFIG_SPI_SH_HSPI=y
249CONFIG_SPI_SIRF=y 280CONFIG_SPI_SIRF=y
250CONFIG_SPI_SUN4I=y 281CONFIG_SPI_SUN4I=y
251CONFIG_SPI_SUN6I=y 282CONFIG_SPI_SUN6I=y
@@ -259,12 +290,15 @@ CONFIG_PINCTRL_PALMAS=y
259CONFIG_PINCTRL_APQ8084=y 290CONFIG_PINCTRL_APQ8084=y
260CONFIG_GPIO_SYSFS=y 291CONFIG_GPIO_SYSFS=y
261CONFIG_GPIO_GENERIC_PLATFORM=y 292CONFIG_GPIO_GENERIC_PLATFORM=y
262CONFIG_GPIO_DWAPB=y
263CONFIG_GPIO_DAVINCI=y 293CONFIG_GPIO_DAVINCI=y
294CONFIG_GPIO_DWAPB=y
295CONFIG_GPIO_EM=y
296CONFIG_GPIO_RCAR=y
264CONFIG_GPIO_XILINX=y 297CONFIG_GPIO_XILINX=y
265CONFIG_GPIO_ZYNQ=y 298CONFIG_GPIO_ZYNQ=y
266CONFIG_GPIO_PCA953X=y 299CONFIG_GPIO_PCA953X=y
267CONFIG_GPIO_PCA953X_IRQ=y 300CONFIG_GPIO_PCA953X_IRQ=y
301CONFIG_GPIO_PCF857X=y
268CONFIG_GPIO_TWL4030=y 302CONFIG_GPIO_TWL4030=y
269CONFIG_GPIO_PALMAS=y 303CONFIG_GPIO_PALMAS=y
270CONFIG_GPIO_SYSCON=y 304CONFIG_GPIO_SYSCON=y
@@ -276,10 +310,12 @@ CONFIG_POWER_RESET_AS3722=y
276CONFIG_POWER_RESET_GPIO=y 310CONFIG_POWER_RESET_GPIO=y
277CONFIG_POWER_RESET_KEYSTONE=y 311CONFIG_POWER_RESET_KEYSTONE=y
278CONFIG_POWER_RESET_SUN6I=y 312CONFIG_POWER_RESET_SUN6I=y
313CONFIG_POWER_RESET_RMOBILE=y
279CONFIG_SENSORS_LM90=y 314CONFIG_SENSORS_LM90=y
280CONFIG_SENSORS_LM95245=y 315CONFIG_SENSORS_LM95245=y
281CONFIG_THERMAL=y 316CONFIG_THERMAL=y
282CONFIG_CPU_THERMAL=y 317CONFIG_CPU_THERMAL=y
318CONFIG_RCAR_THERMAL=y
283CONFIG_ARMADA_THERMAL=y 319CONFIG_ARMADA_THERMAL=y
284CONFIG_DAVINCI_WATCHDOG 320CONFIG_DAVINCI_WATCHDOG
285CONFIG_ST_THERMAL_SYSCFG=y 321CONFIG_ST_THERMAL_SYSCFG=y
@@ -290,6 +326,7 @@ CONFIG_ARM_SP805_WATCHDOG=y
290CONFIG_ORION_WATCHDOG=y 326CONFIG_ORION_WATCHDOG=y
291CONFIG_SUNXI_WATCHDOG=y 327CONFIG_SUNXI_WATCHDOG=y
292CONFIG_MESON_WATCHDOG=y 328CONFIG_MESON_WATCHDOG=y
329CONFIG_MFD_AS3711=y
293CONFIG_MFD_AS3722=y 330CONFIG_MFD_AS3722=y
294CONFIG_MFD_BCM590XX=y 331CONFIG_MFD_BCM590XX=y
295CONFIG_MFD_AXP20X=y 332CONFIG_MFD_AXP20X=y
@@ -304,13 +341,16 @@ CONFIG_MFD_TPS65090=y
304CONFIG_MFD_TPS6586X=y 341CONFIG_MFD_TPS6586X=y
305CONFIG_MFD_TPS65910=y 342CONFIG_MFD_TPS65910=y
306CONFIG_REGULATOR_AB8500=y 343CONFIG_REGULATOR_AB8500=y
344CONFIG_REGULATOR_AS3711=y
307CONFIG_REGULATOR_AS3722=y 345CONFIG_REGULATOR_AS3722=y
308CONFIG_REGULATOR_AXP20X=y 346CONFIG_REGULATOR_AXP20X=y
309CONFIG_REGULATOR_BCM590XX=y 347CONFIG_REGULATOR_BCM590XX=y
348CONFIG_REGULATOR_DA9210=y
310CONFIG_REGULATOR_GPIO=y 349CONFIG_REGULATOR_GPIO=y
311CONFIG_MFD_SYSCON=y 350CONFIG_MFD_SYSCON=y
312CONFIG_POWER_RESET_SYSCON=y 351CONFIG_POWER_RESET_SYSCON=y
313CONFIG_REGULATOR_MAX8907=y 352CONFIG_REGULATOR_MAX8907=y
353CONFIG_REGULATOR_MAX8973=y
314CONFIG_REGULATOR_MAX77686=y 354CONFIG_REGULATOR_MAX77686=y
315CONFIG_REGULATOR_PALMAS=y 355CONFIG_REGULATOR_PALMAS=y
316CONFIG_REGULATOR_S2MPS11=y 356CONFIG_REGULATOR_S2MPS11=y
@@ -324,18 +364,32 @@ CONFIG_REGULATOR_TWL4030=y
324CONFIG_REGULATOR_VEXPRESS=y 364CONFIG_REGULATOR_VEXPRESS=y
325CONFIG_MEDIA_SUPPORT=y 365CONFIG_MEDIA_SUPPORT=y
326CONFIG_MEDIA_CAMERA_SUPPORT=y 366CONFIG_MEDIA_CAMERA_SUPPORT=y
367CONFIG_MEDIA_CONTROLLER=y
368CONFIG_VIDEO_V4L2_SUBDEV_API=y
327CONFIG_MEDIA_USB_SUPPORT=y 369CONFIG_MEDIA_USB_SUPPORT=y
328CONFIG_USB_VIDEO_CLASS=y 370CONFIG_USB_VIDEO_CLASS=y
329CONFIG_USB_GSPCA=y 371CONFIG_USB_GSPCA=y
372CONFIG_V4L_PLATFORM_DRIVERS=y
373CONFIG_SOC_CAMERA=m
374CONFIG_SOC_CAMERA_PLATFORM=m
375CONFIG_VIDEO_RCAR_VIN=m
376CONFIG_V4L_MEM2MEM_DRIVERS=y
377CONFIG_VIDEO_RENESAS_VSP1=m
378# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set
379CONFIG_VIDEO_ADV7180=m
330CONFIG_DRM=y 380CONFIG_DRM=y
381CONFIG_DRM_RCAR_DU=m
331CONFIG_DRM_TEGRA=y 382CONFIG_DRM_TEGRA=y
332CONFIG_DRM_PANEL_SIMPLE=y 383CONFIG_DRM_PANEL_SIMPLE=y
333CONFIG_FB_ARMCLCD=y 384CONFIG_FB_ARMCLCD=y
334CONFIG_FB_WM8505=y 385CONFIG_FB_WM8505=y
386CONFIG_FB_SH_MOBILE_LCDC=y
335CONFIG_FB_SIMPLE=y 387CONFIG_FB_SIMPLE=y
388CONFIG_FB_SH_MOBILE_MERAM=y
336CONFIG_BACKLIGHT_LCD_SUPPORT=y 389CONFIG_BACKLIGHT_LCD_SUPPORT=y
337CONFIG_BACKLIGHT_CLASS_DEVICE=y 390CONFIG_BACKLIGHT_CLASS_DEVICE=y
338CONFIG_BACKLIGHT_PWM=y 391CONFIG_BACKLIGHT_PWM=y
392CONFIG_BACKLIGHT_AS3711=y
339CONFIG_FRAMEBUFFER_CONSOLE=y 393CONFIG_FRAMEBUFFER_CONSOLE=y
340CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y 394CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
341CONFIG_SOUND=y 395CONFIG_SOUND=y
@@ -343,6 +397,8 @@ CONFIG_SND=y
343CONFIG_SND_DYNAMIC_MINORS=y 397CONFIG_SND_DYNAMIC_MINORS=y
344CONFIG_SND_USB_AUDIO=y 398CONFIG_SND_USB_AUDIO=y
345CONFIG_SND_SOC=y 399CONFIG_SND_SOC=y
400CONFIG_SND_SOC_SH4_FSI=m
401CONFIG_SND_SOC_RCAR=m
346CONFIG_SND_SOC_TEGRA=y 402CONFIG_SND_SOC_TEGRA=y
347CONFIG_SND_SOC_TEGRA_RT5640=y 403CONFIG_SND_SOC_TEGRA_RT5640=y
348CONFIG_SND_SOC_TEGRA_WM8753=y 404CONFIG_SND_SOC_TEGRA_WM8753=y
@@ -350,6 +406,8 @@ CONFIG_SND_SOC_TEGRA_WM8903=y
350CONFIG_SND_SOC_TEGRA_TRIMSLICE=y 406CONFIG_SND_SOC_TEGRA_TRIMSLICE=y
351CONFIG_SND_SOC_TEGRA_ALC5632=y 407CONFIG_SND_SOC_TEGRA_ALC5632=y
352CONFIG_SND_SOC_TEGRA_MAX98090=y 408CONFIG_SND_SOC_TEGRA_MAX98090=y
409CONFIG_SND_SOC_AK4642=m
410CONFIG_SND_SOC_WM8978=m
353CONFIG_USB=y 411CONFIG_USB=y
354CONFIG_USB_XHCI_HCD=y 412CONFIG_USB_XHCI_HCD=y
355CONFIG_USB_XHCI_MVEBU=y 413CONFIG_USB_XHCI_MVEBU=y
@@ -362,6 +420,8 @@ CONFIG_USB_ISP1760_HCD=y
362CONFIG_USB_OHCI_HCD=y 420CONFIG_USB_OHCI_HCD=y
363CONFIG_USB_OHCI_HCD_STI=y 421CONFIG_USB_OHCI_HCD_STI=y
364CONFIG_USB_OHCI_HCD_PLATFORM=y 422CONFIG_USB_OHCI_HCD_PLATFORM=y
423CONFIG_USB_R8A66597_HCD=m
424CONFIG_USB_RENESAS_USBHS=m
365CONFIG_USB_STORAGE=y 425CONFIG_USB_STORAGE=y
366CONFIG_USB_DWC3=y 426CONFIG_USB_DWC3=y
367CONFIG_USB_CHIPIDEA=y 427CONFIG_USB_CHIPIDEA=y
@@ -374,6 +434,10 @@ CONFIG_SAMSUNG_USB3PHY=y
374CONFIG_USB_GPIO_VBUS=y 434CONFIG_USB_GPIO_VBUS=y
375CONFIG_USB_ISP1301=y 435CONFIG_USB_ISP1301=y
376CONFIG_USB_MXS_PHY=y 436CONFIG_USB_MXS_PHY=y
437CONFIG_USB_RCAR_PHY=m
438CONFIG_USB_RCAR_GEN2_PHY=m
439CONFIG_USB_GADGET=y
440CONFIG_USB_RENESAS_USBHS_UDC=m
377CONFIG_MMC=y 441CONFIG_MMC=y
378CONFIG_MMC_BLOCK_MINORS=16 442CONFIG_MMC_BLOCK_MINORS=16
379CONFIG_MMC_ARMMMCI=y 443CONFIG_MMC_ARMMMCI=y
@@ -392,12 +456,14 @@ CONFIG_MMC_SDHCI_ST=y
392CONFIG_MMC_OMAP=y 456CONFIG_MMC_OMAP=y
393CONFIG_MMC_OMAP_HS=y 457CONFIG_MMC_OMAP_HS=y
394CONFIG_MMC_MVSDIO=y 458CONFIG_MMC_MVSDIO=y
395CONFIG_MMC_SUNXI=y 459CONFIG_MMC_SDHI=y
396CONFIG_MMC_DW=y 460CONFIG_MMC_DW=y
397CONFIG_MMC_DW_IDMAC=y 461CONFIG_MMC_DW_IDMAC=y
398CONFIG_MMC_DW_PLTFM=y 462CONFIG_MMC_DW_PLTFM=y
399CONFIG_MMC_DW_EXYNOS=y 463CONFIG_MMC_DW_EXYNOS=y
400CONFIG_MMC_DW_ROCKCHIP=y 464CONFIG_MMC_DW_ROCKCHIP=y
465CONFIG_MMC_SH_MMCIF=y
466CONFIG_MMC_SUNXI=y
401CONFIG_NEW_LEDS=y 467CONFIG_NEW_LEDS=y
402CONFIG_LEDS_CLASS=y 468CONFIG_LEDS_CLASS=y
403CONFIG_LEDS_GPIO=y 469CONFIG_LEDS_GPIO=y
@@ -421,10 +487,12 @@ CONFIG_RTC_DRV_AS3722=y
421CONFIG_RTC_DRV_DS1307=y 487CONFIG_RTC_DRV_DS1307=y
422CONFIG_RTC_DRV_MAX8907=y 488CONFIG_RTC_DRV_MAX8907=y
423CONFIG_RTC_DRV_MAX77686=y 489CONFIG_RTC_DRV_MAX77686=y
490CONFIG_RTC_DRV_RS5C372=m
424CONFIG_RTC_DRV_PALMAS=y 491CONFIG_RTC_DRV_PALMAS=y
425CONFIG_RTC_DRV_TWL4030=y 492CONFIG_RTC_DRV_TWL4030=y
426CONFIG_RTC_DRV_TPS6586X=y 493CONFIG_RTC_DRV_TPS6586X=y
427CONFIG_RTC_DRV_TPS65910=y 494CONFIG_RTC_DRV_TPS65910=y
495CONFIG_RTC_DRV_S35390A=m
428CONFIG_RTC_DRV_EM3027=y 496CONFIG_RTC_DRV_EM3027=y
429CONFIG_RTC_DRV_PL031=y 497CONFIG_RTC_DRV_PL031=y
430CONFIG_RTC_DRV_VT8500=y 498CONFIG_RTC_DRV_VT8500=y
@@ -436,6 +504,9 @@ CONFIG_DMADEVICES=y
436CONFIG_DW_DMAC=y 504CONFIG_DW_DMAC=y
437CONFIG_MV_XOR=y 505CONFIG_MV_XOR=y
438CONFIG_TEGRA20_APB_DMA=y 506CONFIG_TEGRA20_APB_DMA=y
507CONFIG_SH_DMAE=y
508CONFIG_RCAR_AUDMAC_PP=m
509CONFIG_RCAR_DMAC=y
439CONFIG_STE_DMA40=y 510CONFIG_STE_DMA40=y
440CONFIG_SIRF_DMA=y 511CONFIG_SIRF_DMA=y
441CONFIG_TI_EDMA=y 512CONFIG_TI_EDMA=y
@@ -468,6 +539,7 @@ CONFIG_IIO=y
468CONFIG_XILINX_XADC=y 539CONFIG_XILINX_XADC=y
469CONFIG_AK8975=y 540CONFIG_AK8975=y
470CONFIG_PWM=y 541CONFIG_PWM=y
542CONFIG_PWM_RENESAS_TPU=y
471CONFIG_PWM_TEGRA=y 543CONFIG_PWM_TEGRA=y
472CONFIG_PWM_VT8500=y 544CONFIG_PWM_VT8500=y
473CONFIG_PHY_HIX5HD2_SATA=y 545CONFIG_PHY_HIX5HD2_SATA=y
diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig
index b7386524c356..a097cffa1231 100644
--- a/arch/arm/configs/omap2plus_defconfig
+++ b/arch/arm/configs/omap2plus_defconfig
@@ -114,6 +114,7 @@ CONFIG_MTD_PHYSMAP_OF=y
114CONFIG_MTD_NAND=y 114CONFIG_MTD_NAND=y
115CONFIG_MTD_NAND_ECC_BCH=y 115CONFIG_MTD_NAND_ECC_BCH=y
116CONFIG_MTD_NAND_OMAP2=y 116CONFIG_MTD_NAND_OMAP2=y
117CONFIG_MTD_NAND_OMAP_BCH=y
117CONFIG_MTD_ONENAND=y 118CONFIG_MTD_ONENAND=y
118CONFIG_MTD_ONENAND_VERIFY_WRITE=y 119CONFIG_MTD_ONENAND_VERIFY_WRITE=y
119CONFIG_MTD_ONENAND_OMAP2=y 120CONFIG_MTD_ONENAND_OMAP2=y
@@ -248,6 +249,7 @@ CONFIG_TWL6040_CORE=y
248CONFIG_REGULATOR_PALMAS=y 249CONFIG_REGULATOR_PALMAS=y
249CONFIG_REGULATOR_PBIAS=y 250CONFIG_REGULATOR_PBIAS=y
250CONFIG_REGULATOR_TI_ABB=y 251CONFIG_REGULATOR_TI_ABB=y
252CONFIG_REGULATOR_TPS62360=m
251CONFIG_REGULATOR_TPS65023=y 253CONFIG_REGULATOR_TPS65023=y
252CONFIG_REGULATOR_TPS6507X=y 254CONFIG_REGULATOR_TPS6507X=y
253CONFIG_REGULATOR_TPS65217=y 255CONFIG_REGULATOR_TPS65217=y
@@ -374,7 +376,7 @@ CONFIG_PWM_TIEHRPWM=m
374CONFIG_PWM_TWL=m 376CONFIG_PWM_TWL=m
375CONFIG_PWM_TWL_LED=m 377CONFIG_PWM_TWL_LED=m
376CONFIG_OMAP_USB2=m 378CONFIG_OMAP_USB2=m
377CONFIG_TI_PIPE3=m 379CONFIG_TI_PIPE3=y
378CONFIG_EXT2_FS=y 380CONFIG_EXT2_FS=y
379CONFIG_EXT3_FS=y 381CONFIG_EXT3_FS=y
380# CONFIG_EXT3_FS_XATTR is not set 382# CONFIG_EXT3_FS_XATTR is not set
diff --git a/arch/arm/mach-asm9260/Kconfig b/arch/arm/mach-asm9260/Kconfig
index 8423be76080e..52241207a82a 100644
--- a/arch/arm/mach-asm9260/Kconfig
+++ b/arch/arm/mach-asm9260/Kconfig
@@ -2,5 +2,7 @@ config MACH_ASM9260
2 bool "Alphascale ASM9260" 2 bool "Alphascale ASM9260"
3 depends on ARCH_MULTI_V5 3 depends on ARCH_MULTI_V5
4 select CPU_ARM926T 4 select CPU_ARM926T
5 select ASM9260_TIMER
6 select GENERIC_CLOCKEVENTS
5 help 7 help
6 Support for Alphascale ASM9260 based platform. 8 Support for Alphascale ASM9260 based platform.
diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
index e8627e04e1e6..3a3d3e9d7bfd 100644
--- a/arch/arm/mach-imx/Kconfig
+++ b/arch/arm/mach-imx/Kconfig
@@ -21,6 +21,7 @@ config MXC_AVIC
21 21
22config MXC_DEBUG_BOARD 22config MXC_DEBUG_BOARD
23 bool "Enable MXC debug board(for 3-stack)" 23 bool "Enable MXC debug board(for 3-stack)"
24 depends on MACH_MX27_3DS || MACH_MX31_3DS || MACH_MX35_3DS
24 help 25 help
25 The debug board is an integral part of the MXC 3-stack(PDK) 26 The debug board is an integral part of the MXC 3-stack(PDK)
26 platforms, it can be attached or removed from the peripheral 27 platforms, it can be attached or removed from the peripheral
@@ -50,6 +51,7 @@ config HAVE_IMX_ANATOP
50 51
51config HAVE_IMX_GPC 52config HAVE_IMX_GPC
52 bool 53 bool
54 select PM_GENERIC_DOMAINS if PM
53 55
54config HAVE_IMX_MMDC 56config HAVE_IMX_MMDC
55 bool 57 bool
@@ -77,13 +79,6 @@ config SOC_IMX21
77 select IMX_HAVE_IOMUX_V1 79 select IMX_HAVE_IOMUX_V1
78 select MXC_AVIC 80 select MXC_AVIC
79 81
80config SOC_IMX25
81 bool
82 select ARCH_MXC_IOMUX_V3
83 select CPU_ARM926T
84 select MXC_AVIC
85 select PINCTRL_IMX25
86
87config SOC_IMX27 82config SOC_IMX27
88 bool 83 bool
89 select CPU_ARM926T 84 select CPU_ARM926T
@@ -149,62 +144,6 @@ config MACH_MX21ADS
149 Include support for MX21ADS platform. This includes specific 144 Include support for MX21ADS platform. This includes specific
150 configurations for the board and its peripherals. 145 configurations for the board and its peripherals.
151 146
152comment "MX25 platforms:"
153
154config MACH_MX25_3DS
155 bool "Support MX25PDK (3DS) Platform"
156 select IMX_HAVE_PLATFORM_FLEXCAN
157 select IMX_HAVE_PLATFORM_FSL_USB2_UDC
158 select IMX_HAVE_PLATFORM_IMX2_WDT
159 select IMX_HAVE_PLATFORM_IMXDI_RTC
160 select IMX_HAVE_PLATFORM_IMX_FB
161 select IMX_HAVE_PLATFORM_IMX_I2C
162 select IMX_HAVE_PLATFORM_IMX_KEYPAD
163 select IMX_HAVE_PLATFORM_IMX_UART
164 select IMX_HAVE_PLATFORM_MXC_EHCI
165 select IMX_HAVE_PLATFORM_MXC_NAND
166 select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX
167 select SOC_IMX25
168
169config MACH_EUKREA_CPUIMX25SD
170 bool "Support Eukrea CPUIMX25 Platform"
171 select IMX_HAVE_PLATFORM_FLEXCAN
172 select IMX_HAVE_PLATFORM_FSL_USB2_UDC
173 select IMX_HAVE_PLATFORM_IMX2_WDT
174 select IMX_HAVE_PLATFORM_IMXDI_RTC
175 select IMX_HAVE_PLATFORM_IMX_FB
176 select IMX_HAVE_PLATFORM_IMX_I2C
177 select IMX_HAVE_PLATFORM_IMX_UART
178 select IMX_HAVE_PLATFORM_MXC_EHCI
179 select IMX_HAVE_PLATFORM_MXC_NAND
180 select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX
181 select USB_ULPI_VIEWPORT if USB_ULPI
182 select SOC_IMX25
183
184choice
185 prompt "Baseboard"
186 depends on MACH_EUKREA_CPUIMX25SD
187 default MACH_EUKREA_MBIMXSD25_BASEBOARD
188
189config MACH_EUKREA_MBIMXSD25_BASEBOARD
190 bool "Eukrea MBIMXSD development board"
191 select IMX_HAVE_PLATFORM_GPIO_KEYS
192 select IMX_HAVE_PLATFORM_IMX_SSI
193 select IMX_HAVE_PLATFORM_SPI_IMX
194 select LEDS_GPIO_REGISTER
195 help
196 This adds board specific devices that can be found on Eukrea's
197 MBIMXSD evaluation board.
198
199endchoice
200
201config MACH_IMX25_DT
202 bool "Support i.MX25 platforms from device tree"
203 select SOC_IMX25
204 help
205 Include support for Freescale i.MX25 based platforms
206 using the device tree for discovery
207
208comment "MX27 platforms:" 147comment "MX27 platforms:"
209 148
210config MACH_MX27ADS 149config MACH_MX27ADS
@@ -557,6 +496,20 @@ config MACH_VPR200
557 496
558endif 497endif
559 498
499if ARCH_MULTI_V5
500
501comment "Device tree only"
502
503config SOC_IMX25
504 bool "i.MX25 support"
505 select ARCH_MXC_IOMUX_V3
506 select CPU_ARM926T
507 select MXC_AVIC
508 select PINCTRL_IMX25
509 help
510 This enables support for Freescale i.MX25 processor
511endif
512
560if ARCH_MULTI_V7 513if ARCH_MULTI_V7
561 514
562comment "Device tree only" 515comment "Device tree only"
@@ -631,12 +584,14 @@ config SOC_IMX6SX
631 584
632config SOC_VF610 585config SOC_VF610
633 bool "Vybrid Family VF610 support" 586 bool "Vybrid Family VF610 support"
587 select IRQ_DOMAIN_HIERARCHY
634 select ARM_GIC 588 select ARM_GIC
635 select PINCTRL_VF610 589 select PINCTRL_VF610
636 select PL310_ERRATA_769419 if CACHE_L2X0 590 select PL310_ERRATA_769419 if CACHE_L2X0
591 select SMP_ON_UP if SMP
637 592
638 help 593 help
639 This enable support for Freescale Vybrid VF610 processor. 594 This enables support for Freescale Vybrid VF610 processor.
640 595
641choice 596choice
642 prompt "Clocksource for scheduler clock" 597 prompt "Clocksource for scheduler clock"
@@ -666,7 +621,7 @@ config SOC_LS1021A
666 select ZONE_DMA if ARM_LPAE 621 select ZONE_DMA if ARM_LPAE
667 622
668 help 623 help
669 This enable support for Freescale LS1021A processor. 624 This enables support for Freescale LS1021A processor.
670 625
671endif 626endif
672 627
diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile
index 8d1b10180908..3244cf1d2773 100644
--- a/arch/arm/mach-imx/Makefile
+++ b/arch/arm/mach-imx/Makefile
@@ -3,7 +3,7 @@ obj-y := time.o cpu.o system.o irq-common.o
3obj-$(CONFIG_SOC_IMX1) += clk-imx1.o mm-imx1.o 3obj-$(CONFIG_SOC_IMX1) += clk-imx1.o mm-imx1.o
4obj-$(CONFIG_SOC_IMX21) += clk-imx21.o mm-imx21.o 4obj-$(CONFIG_SOC_IMX21) += clk-imx21.o mm-imx21.o
5 5
6obj-$(CONFIG_SOC_IMX25) += clk-imx25.o mm-imx25.o ehci-imx25.o cpu-imx25.o 6obj-$(CONFIG_SOC_IMX25) += clk-imx25.o cpu-imx25.o mach-imx25.o
7 7
8obj-$(CONFIG_SOC_IMX27) += cpu-imx27.o pm-imx27.o 8obj-$(CONFIG_SOC_IMX27) += cpu-imx27.o pm-imx27.o
9obj-$(CONFIG_SOC_IMX27) += clk-imx27.o mm-imx27.o ehci-imx27.o 9obj-$(CONFIG_SOC_IMX27) += clk-imx27.o mm-imx27.o ehci-imx27.o
@@ -48,12 +48,6 @@ obj-$(CONFIG_MACH_IMX1_DT) += imx1-dt.o
48# i.MX21 based machines 48# i.MX21 based machines
49obj-$(CONFIG_MACH_MX21ADS) += mach-mx21ads.o 49obj-$(CONFIG_MACH_MX21ADS) += mach-mx21ads.o
50 50
51# i.MX25 based machines
52obj-$(CONFIG_MACH_MX25_3DS) += mach-mx25_3ds.o
53obj-$(CONFIG_MACH_EUKREA_CPUIMX25SD) += mach-eukrea_cpuimx25.o
54obj-$(CONFIG_MACH_EUKREA_MBIMXSD25_BASEBOARD) += eukrea_mbimxsd25-baseboard.o
55obj-$(CONFIG_MACH_IMX25_DT) += imx25-dt.o
56
57# i.MX27 based machines 51# i.MX27 based machines
58obj-$(CONFIG_MACH_MX27ADS) += mach-mx27ads.o 52obj-$(CONFIG_MACH_MX27ADS) += mach-mx27ads.o
59obj-$(CONFIG_MACH_MX27_3DS) += mach-mx27_3ds.o 53obj-$(CONFIG_MACH_MX27_3DS) += mach-mx27_3ds.o
diff --git a/arch/arm/mach-imx/clk-imx25.c b/arch/arm/mach-imx/clk-imx25.c
index 59c0c8558c6b..9c2633a9de9f 100644
--- a/arch/arm/mach-imx/clk-imx25.c
+++ b/arch/arm/mach-imx/clk-imx25.c
@@ -30,7 +30,6 @@
30#include "clk.h" 30#include "clk.h"
31#include "common.h" 31#include "common.h"
32#include "hardware.h" 32#include "hardware.h"
33#include "mx25.h"
34 33
35#define CCM_MPCTL 0x00 34#define CCM_MPCTL 0x00
36#define CCM_UPCTL 0x04 35#define CCM_UPCTL 0x04
@@ -239,80 +238,6 @@ static int __init __mx25_clocks_init(unsigned long osc_rate,
239 return 0; 238 return 0;
240} 239}
241 240
242int __init mx25_clocks_init(void)
243{
244 void __iomem *ccm;
245
246 ccm = ioremap(MX25_CRM_BASE_ADDR, SZ_16K);
247
248 __mx25_clocks_init(24000000, ccm);
249
250 clk_register_clkdev(clk[gpt1_ipg], "ipg", "imx-gpt.0");
251 clk_register_clkdev(clk[gpt_ipg_per], "per", "imx-gpt.0");
252 /* i.mx25 has the i.mx21 type uart */
253 clk_register_clkdev(clk[uart1_ipg], "ipg", "imx21-uart.0");
254 clk_register_clkdev(clk[uart_ipg_per], "per", "imx21-uart.0");
255 clk_register_clkdev(clk[uart2_ipg], "ipg", "imx21-uart.1");
256 clk_register_clkdev(clk[uart_ipg_per], "per", "imx21-uart.1");
257 clk_register_clkdev(clk[uart3_ipg], "ipg", "imx21-uart.2");
258 clk_register_clkdev(clk[uart_ipg_per], "per", "imx21-uart.2");
259 clk_register_clkdev(clk[uart4_ipg], "ipg", "imx21-uart.3");
260 clk_register_clkdev(clk[uart_ipg_per], "per", "imx21-uart.3");
261 clk_register_clkdev(clk[uart5_ipg], "ipg", "imx21-uart.4");
262 clk_register_clkdev(clk[uart_ipg_per], "per", "imx21-uart.4");
263 clk_register_clkdev(clk[ipg], "ipg", "mxc-ehci.0");
264 clk_register_clkdev(clk[usbotg_ahb], "ahb", "mxc-ehci.0");
265 clk_register_clkdev(clk[usb_div], "per", "mxc-ehci.0");
266 clk_register_clkdev(clk[ipg], "ipg", "mxc-ehci.1");
267 clk_register_clkdev(clk[usbotg_ahb], "ahb", "mxc-ehci.1");
268 clk_register_clkdev(clk[usb_div], "per", "mxc-ehci.1");
269 clk_register_clkdev(clk[ipg], "ipg", "mxc-ehci.2");
270 clk_register_clkdev(clk[usbotg_ahb], "ahb", "mxc-ehci.2");
271 clk_register_clkdev(clk[usb_div], "per", "mxc-ehci.2");
272 clk_register_clkdev(clk[ipg], "ipg", "imx-udc-mx27");
273 clk_register_clkdev(clk[usbotg_ahb], "ahb", "imx-udc-mx27");
274 clk_register_clkdev(clk[usb_div], "per", "imx-udc-mx27");
275 clk_register_clkdev(clk[nfc_ipg_per], NULL, "imx25-nand.0");
276 /* i.mx25 has the i.mx35 type cspi */
277 clk_register_clkdev(clk[cspi1_ipg], NULL, "imx35-cspi.0");
278 clk_register_clkdev(clk[cspi2_ipg], NULL, "imx35-cspi.1");
279 clk_register_clkdev(clk[cspi3_ipg], NULL, "imx35-cspi.2");
280 clk_register_clkdev(clk[kpp_ipg], NULL, "imx-keypad");
281 clk_register_clkdev(clk[tsc_ipg], NULL, "mx25-adc");
282 clk_register_clkdev(clk[i2c_ipg_per], NULL, "imx21-i2c.0");
283 clk_register_clkdev(clk[i2c_ipg_per], NULL, "imx21-i2c.1");
284 clk_register_clkdev(clk[i2c_ipg_per], NULL, "imx21-i2c.2");
285 clk_register_clkdev(clk[fec_ipg], "ipg", "imx25-fec.0");
286 clk_register_clkdev(clk[fec_ahb], "ahb", "imx25-fec.0");
287 clk_register_clkdev(clk[dryice_ipg], NULL, "imxdi_rtc.0");
288 clk_register_clkdev(clk[lcdc_ipg_per], "per", "imx21-fb.0");
289 clk_register_clkdev(clk[lcdc_ipg], "ipg", "imx21-fb.0");
290 clk_register_clkdev(clk[lcdc_ahb], "ahb", "imx21-fb.0");
291 clk_register_clkdev(clk[wdt_ipg], NULL, "imx2-wdt.0");
292 clk_register_clkdev(clk[ssi1_ipg], NULL, "imx-ssi.0");
293 clk_register_clkdev(clk[ssi2_ipg], NULL, "imx-ssi.1");
294 clk_register_clkdev(clk[esdhc1_ipg_per], "per", "sdhci-esdhc-imx25.0");
295 clk_register_clkdev(clk[esdhc1_ipg], "ipg", "sdhci-esdhc-imx25.0");
296 clk_register_clkdev(clk[esdhc1_ahb], "ahb", "sdhci-esdhc-imx25.0");
297 clk_register_clkdev(clk[esdhc2_ipg_per], "per", "sdhci-esdhc-imx25.1");
298 clk_register_clkdev(clk[esdhc2_ipg], "ipg", "sdhci-esdhc-imx25.1");
299 clk_register_clkdev(clk[esdhc2_ahb], "ahb", "sdhci-esdhc-imx25.1");
300 clk_register_clkdev(clk[csi_ipg_per], "per", "imx25-camera.0");
301 clk_register_clkdev(clk[csi_ipg], "ipg", "imx25-camera.0");
302 clk_register_clkdev(clk[csi_ahb], "ahb", "imx25-camera.0");
303 clk_register_clkdev(clk[dummy], "audmux", NULL);
304 clk_register_clkdev(clk[can1_ipg], NULL, "flexcan.0");
305 clk_register_clkdev(clk[can2_ipg], NULL, "flexcan.1");
306 /* i.mx25 has the i.mx35 type sdma */
307 clk_register_clkdev(clk[sdma_ipg], "ipg", "imx35-sdma");
308 clk_register_clkdev(clk[sdma_ahb], "ahb", "imx35-sdma");
309 clk_register_clkdev(clk[iim_ipg], "iim", NULL);
310
311 mxc_timer_init(MX25_IO_ADDRESS(MX25_GPT1_BASE_ADDR), MX25_INT_GPT1);
312
313 return 0;
314}
315
316static void __init mx25_clocks_init_dt(struct device_node *np) 241static void __init mx25_clocks_init_dt(struct device_node *np)
317{ 242{
318 struct device_node *refnp; 243 struct device_node *refnp;
diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c
index d04a430607b8..469a150bf98f 100644
--- a/arch/arm/mach-imx/clk-imx6q.c
+++ b/arch/arm/mach-imx/clk-imx6q.c
@@ -119,6 +119,7 @@ static unsigned int share_count_asrc;
119static unsigned int share_count_ssi1; 119static unsigned int share_count_ssi1;
120static unsigned int share_count_ssi2; 120static unsigned int share_count_ssi2;
121static unsigned int share_count_ssi3; 121static unsigned int share_count_ssi3;
122static unsigned int share_count_mipi_core_cfg;
122 123
123static void __init imx6q_clocks_init(struct device_node *ccm_node) 124static void __init imx6q_clocks_init(struct device_node *ccm_node)
124{ 125{
@@ -246,6 +247,7 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)
246 clk[IMX6QDL_CLK_PLL3_60M] = imx_clk_fixed_factor("pll3_60m", "pll3_usb_otg", 1, 8); 247 clk[IMX6QDL_CLK_PLL3_60M] = imx_clk_fixed_factor("pll3_60m", "pll3_usb_otg", 1, 8);
247 clk[IMX6QDL_CLK_TWD] = imx_clk_fixed_factor("twd", "arm", 1, 2); 248 clk[IMX6QDL_CLK_TWD] = imx_clk_fixed_factor("twd", "arm", 1, 2);
248 clk[IMX6QDL_CLK_GPT_3M] = imx_clk_fixed_factor("gpt_3m", "osc", 1, 8); 249 clk[IMX6QDL_CLK_GPT_3M] = imx_clk_fixed_factor("gpt_3m", "osc", 1, 8);
250 clk[IMX6QDL_CLK_VIDEO_27M] = imx_clk_fixed_factor("video_27m", "pll3_pfd1_540m", 1, 20);
249 if (cpu_is_imx6dl()) { 251 if (cpu_is_imx6dl()) {
250 clk[IMX6QDL_CLK_GPU2D_AXI] = imx_clk_fixed_factor("gpu2d_axi", "mmdc_ch0_axi_podf", 1, 1); 252 clk[IMX6QDL_CLK_GPU2D_AXI] = imx_clk_fixed_factor("gpu2d_axi", "mmdc_ch0_axi_podf", 1, 1);
251 clk[IMX6QDL_CLK_GPU3D_AXI] = imx_clk_fixed_factor("gpu3d_axi", "mmdc_ch0_axi_podf", 1, 1); 253 clk[IMX6QDL_CLK_GPU3D_AXI] = imx_clk_fixed_factor("gpu3d_axi", "mmdc_ch0_axi_podf", 1, 1);
@@ -400,7 +402,7 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)
400 clk[IMX6QDL_CLK_GPU2D_CORE] = imx_clk_gate2("gpu2d_core", "gpu2d_core_podf", base + 0x6c, 24); 402 clk[IMX6QDL_CLK_GPU2D_CORE] = imx_clk_gate2("gpu2d_core", "gpu2d_core_podf", base + 0x6c, 24);
401 clk[IMX6QDL_CLK_GPU3D_CORE] = imx_clk_gate2("gpu3d_core", "gpu3d_core_podf", base + 0x6c, 26); 403 clk[IMX6QDL_CLK_GPU3D_CORE] = imx_clk_gate2("gpu3d_core", "gpu3d_core_podf", base + 0x6c, 26);
402 clk[IMX6QDL_CLK_HDMI_IAHB] = imx_clk_gate2("hdmi_iahb", "ahb", base + 0x70, 0); 404 clk[IMX6QDL_CLK_HDMI_IAHB] = imx_clk_gate2("hdmi_iahb", "ahb", base + 0x70, 0);
403 clk[IMX6QDL_CLK_HDMI_ISFR] = imx_clk_gate2("hdmi_isfr", "pll3_pfd1_540m", base + 0x70, 4); 405 clk[IMX6QDL_CLK_HDMI_ISFR] = imx_clk_gate2("hdmi_isfr", "video_27m", base + 0x70, 4);
404 clk[IMX6QDL_CLK_I2C1] = imx_clk_gate2("i2c1", "ipg_per", base + 0x70, 6); 406 clk[IMX6QDL_CLK_I2C1] = imx_clk_gate2("i2c1", "ipg_per", base + 0x70, 6);
405 clk[IMX6QDL_CLK_I2C2] = imx_clk_gate2("i2c2", "ipg_per", base + 0x70, 8); 407 clk[IMX6QDL_CLK_I2C2] = imx_clk_gate2("i2c2", "ipg_per", base + 0x70, 8);
406 clk[IMX6QDL_CLK_I2C3] = imx_clk_gate2("i2c3", "ipg_per", base + 0x70, 10); 408 clk[IMX6QDL_CLK_I2C3] = imx_clk_gate2("i2c3", "ipg_per", base + 0x70, 10);
@@ -415,7 +417,9 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)
415 clk[IMX6QDL_CLK_LDB_DI0] = imx_clk_gate2("ldb_di0", "ldb_di0_podf", base + 0x74, 12); 417 clk[IMX6QDL_CLK_LDB_DI0] = imx_clk_gate2("ldb_di0", "ldb_di0_podf", base + 0x74, 12);
416 clk[IMX6QDL_CLK_LDB_DI1] = imx_clk_gate2("ldb_di1", "ldb_di1_podf", base + 0x74, 14); 418 clk[IMX6QDL_CLK_LDB_DI1] = imx_clk_gate2("ldb_di1", "ldb_di1_podf", base + 0x74, 14);
417 clk[IMX6QDL_CLK_IPU2_DI1] = imx_clk_gate2("ipu2_di1", "ipu2_di1_sel", base + 0x74, 10); 419 clk[IMX6QDL_CLK_IPU2_DI1] = imx_clk_gate2("ipu2_di1", "ipu2_di1_sel", base + 0x74, 10);
418 clk[IMX6QDL_CLK_HSI_TX] = imx_clk_gate2("hsi_tx", "hsi_tx_podf", base + 0x74, 16); 420 clk[IMX6QDL_CLK_HSI_TX] = imx_clk_gate2_shared("hsi_tx", "hsi_tx_podf", base + 0x74, 16, &share_count_mipi_core_cfg);
421 clk[IMX6QDL_CLK_MIPI_CORE_CFG] = imx_clk_gate2_shared("mipi_core_cfg", "video_27m", base + 0x74, 16, &share_count_mipi_core_cfg);
422 clk[IMX6QDL_CLK_MIPI_IPG] = imx_clk_gate2_shared("mipi_ipg", "ipg", base + 0x74, 16, &share_count_mipi_core_cfg);
419 if (cpu_is_imx6dl()) 423 if (cpu_is_imx6dl())
420 /* 424 /*
421 * The multiplexer and divider of the imx6q clock gpu2d get 425 * The multiplexer and divider of the imx6q clock gpu2d get
diff --git a/arch/arm/mach-imx/common.h b/arch/arm/mach-imx/common.h
index 1028b6c505c4..0f04e30b726d 100644
--- a/arch/arm/mach-imx/common.h
+++ b/arch/arm/mach-imx/common.h
@@ -23,13 +23,11 @@ struct of_device_id;
23 23
24void mx1_map_io(void); 24void mx1_map_io(void);
25void mx21_map_io(void); 25void mx21_map_io(void);
26void mx25_map_io(void);
27void mx27_map_io(void); 26void mx27_map_io(void);
28void mx31_map_io(void); 27void mx31_map_io(void);
29void mx35_map_io(void); 28void mx35_map_io(void);
30void imx1_init_early(void); 29void imx1_init_early(void);
31void imx21_init_early(void); 30void imx21_init_early(void);
32void imx25_init_early(void);
33void imx27_init_early(void); 31void imx27_init_early(void);
34void imx31_init_early(void); 32void imx31_init_early(void);
35void imx35_init_early(void); 33void imx35_init_early(void);
@@ -37,13 +35,11 @@ void mxc_init_irq(void __iomem *);
37void tzic_init_irq(void); 35void tzic_init_irq(void);
38void mx1_init_irq(void); 36void mx1_init_irq(void);
39void mx21_init_irq(void); 37void mx21_init_irq(void);
40void mx25_init_irq(void);
41void mx27_init_irq(void); 38void mx27_init_irq(void);
42void mx31_init_irq(void); 39void mx31_init_irq(void);
43void mx35_init_irq(void); 40void mx35_init_irq(void);
44void imx1_soc_init(void); 41void imx1_soc_init(void);
45void imx21_soc_init(void); 42void imx21_soc_init(void);
46void imx25_soc_init(void);
47void imx27_soc_init(void); 43void imx27_soc_init(void);
48void imx31_soc_init(void); 44void imx31_soc_init(void);
49void imx35_soc_init(void); 45void imx35_soc_init(void);
@@ -51,7 +47,6 @@ void epit_timer_init(void __iomem *base, int irq);
51void mxc_timer_init(void __iomem *, int); 47void mxc_timer_init(void __iomem *, int);
52int mx1_clocks_init(unsigned long fref); 48int mx1_clocks_init(unsigned long fref);
53int mx21_clocks_init(unsigned long lref, unsigned long fref); 49int mx21_clocks_init(unsigned long lref, unsigned long fref);
54int mx25_clocks_init(void);
55int mx27_clocks_init(unsigned long fref); 50int mx27_clocks_init(unsigned long fref);
56int mx31_clocks_init(unsigned long fref); 51int mx31_clocks_init(unsigned long fref);
57int mx35_clocks_init(void); 52int mx35_clocks_init(void);
@@ -71,6 +66,7 @@ unsigned int imx_get_soc_revision(void);
71void imx_init_revision_from_anatop(void); 66void imx_init_revision_from_anatop(void);
72struct device *imx_soc_device_init(void); 67struct device *imx_soc_device_init(void);
73void imx6_enable_rbc(bool enable); 68void imx6_enable_rbc(bool enable);
69void imx_gpc_check_dt(void);
74void imx_gpc_set_arm_power_in_lpm(bool power_off); 70void imx_gpc_set_arm_power_in_lpm(bool power_off);
75void imx_gpc_set_arm_power_up_timing(u32 sw2iso, u32 sw); 71void imx_gpc_set_arm_power_up_timing(u32 sw2iso, u32 sw);
76void imx_gpc_set_arm_power_down_timing(u32 sw2iso, u32 sw); 72void imx_gpc_set_arm_power_down_timing(u32 sw2iso, u32 sw);
@@ -106,7 +102,6 @@ static inline void imx_scu_map_io(void) {}
106static inline void imx_smp_prepare(void) {} 102static inline void imx_smp_prepare(void) {}
107#endif 103#endif
108void imx_src_init(void); 104void imx_src_init(void);
109void imx_gpc_init(void);
110void imx_gpc_pre_suspend(bool arm_power_off); 105void imx_gpc_pre_suspend(bool arm_power_off);
111void imx_gpc_post_resume(void); 106void imx_gpc_post_resume(void);
112void imx_gpc_mask_all(void); 107void imx_gpc_mask_all(void);
diff --git a/arch/arm/mach-imx/cpu-imx25.c b/arch/arm/mach-imx/cpu-imx25.c
index 96ec64b5ff7d..d0ad67e802d3 100644
--- a/arch/arm/mach-imx/cpu-imx25.c
+++ b/arch/arm/mach-imx/cpu-imx25.c
@@ -11,6 +11,8 @@
11 */ 11 */
12#include <linux/module.h> 12#include <linux/module.h>
13#include <linux/io.h> 13#include <linux/io.h>
14#include <linux/of.h>
15#include <linux/of_address.h>
14 16
15#include "iim.h" 17#include "iim.h"
16#include "hardware.h" 18#include "hardware.h"
@@ -20,8 +22,15 @@ static int mx25_cpu_rev = -1;
20static int mx25_read_cpu_rev(void) 22static int mx25_read_cpu_rev(void)
21{ 23{
22 u32 rev; 24 u32 rev;
25 void __iomem *iim_base;
26 struct device_node *np;
27
28 np = of_find_compatible_node(NULL, NULL, "fsl,imx25-iim");
29 iim_base = of_iomap(np, 0);
30 BUG_ON(!iim_base);
31 rev = readl(iim_base + MXC_IIMSREV);
32 iounmap(iim_base);
23 33
24 rev = __raw_readl(MX25_IO_ADDRESS(MX25_IIM_BASE_ADDR + MXC_IIMSREV));
25 switch (rev) { 34 switch (rev) {
26 case 0x00: 35 case 0x00:
27 return IMX_CHIP_REVISION_1_0; 36 return IMX_CHIP_REVISION_1_0;
diff --git a/arch/arm/mach-imx/devices-imx25.h b/arch/arm/mach-imx/devices-imx25.h
deleted file mode 100644
index 61a114cddc39..000000000000
--- a/arch/arm/mach-imx/devices-imx25.h
+++ /dev/null
@@ -1,85 +0,0 @@
1/*
2 * Copyright (C) 2010 Pengutronix
3 * Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
4 *
5 * This program is free software; you can redistribute it and/or modify it under
6 * the terms of the GNU General Public License version 2 as published by the
7 * Free Software Foundation.
8 */
9#include "devices/devices-common.h"
10
11extern const struct imx_fec_data imx25_fec_data;
12#define imx25_add_fec(pdata) \
13 imx_add_fec(&imx25_fec_data, pdata)
14
15extern const struct imx_flexcan_data imx25_flexcan_data[];
16#define imx25_add_flexcan(id) \
17 imx_add_flexcan(&imx25_flexcan_data[id])
18#define imx25_add_flexcan0() imx25_add_flexcan(0)
19#define imx25_add_flexcan1() imx25_add_flexcan(1)
20
21extern const struct imx_fsl_usb2_udc_data imx25_fsl_usb2_udc_data;
22#define imx25_add_fsl_usb2_udc(pdata) \
23 imx_add_fsl_usb2_udc(&imx25_fsl_usb2_udc_data, pdata)
24
25extern struct imx_imxdi_rtc_data imx25_imxdi_rtc_data;
26#define imx25_add_imxdi_rtc() \
27 imx_add_imxdi_rtc(&imx25_imxdi_rtc_data)
28
29extern const struct imx_imx2_wdt_data imx25_imx2_wdt_data;
30#define imx25_add_imx2_wdt() \
31 imx_add_imx2_wdt(&imx25_imx2_wdt_data)
32
33extern const struct imx_imx_fb_data imx25_imx_fb_data;
34#define imx25_add_imx_fb(pdata) \
35 imx_add_imx_fb(&imx25_imx_fb_data, pdata)
36
37extern const struct imx_imx_i2c_data imx25_imx_i2c_data[];
38#define imx25_add_imx_i2c(id, pdata) \
39 imx_add_imx_i2c(&imx25_imx_i2c_data[id], pdata)
40#define imx25_add_imx_i2c0(pdata) imx25_add_imx_i2c(0, pdata)
41#define imx25_add_imx_i2c1(pdata) imx25_add_imx_i2c(1, pdata)
42#define imx25_add_imx_i2c2(pdata) imx25_add_imx_i2c(2, pdata)
43
44extern const struct imx_imx_keypad_data imx25_imx_keypad_data;
45#define imx25_add_imx_keypad(pdata) \
46 imx_add_imx_keypad(&imx25_imx_keypad_data, pdata)
47
48extern const struct imx_imx_ssi_data imx25_imx_ssi_data[];
49#define imx25_add_imx_ssi(id, pdata) \
50 imx_add_imx_ssi(&imx25_imx_ssi_data[id], pdata)
51
52extern const struct imx_imx_uart_1irq_data imx25_imx_uart_data[];
53#define imx25_add_imx_uart(id, pdata) \
54 imx_add_imx_uart_1irq(&imx25_imx_uart_data[id], pdata)
55#define imx25_add_imx_uart0(pdata) imx25_add_imx_uart(0, pdata)
56#define imx25_add_imx_uart1(pdata) imx25_add_imx_uart(1, pdata)
57#define imx25_add_imx_uart2(pdata) imx25_add_imx_uart(2, pdata)
58#define imx25_add_imx_uart3(pdata) imx25_add_imx_uart(3, pdata)
59#define imx25_add_imx_uart4(pdata) imx25_add_imx_uart(4, pdata)
60
61extern const struct imx_mx2_camera_data imx25_mx2_camera_data;
62#define imx25_add_mx2_camera(pdata) \
63 imx_add_mx2_camera(&imx25_mx2_camera_data, pdata)
64
65extern const struct imx_mxc_ehci_data imx25_mxc_ehci_otg_data;
66#define imx25_add_mxc_ehci_otg(pdata) \
67 imx_add_mxc_ehci(&imx25_mxc_ehci_otg_data, pdata)
68extern const struct imx_mxc_ehci_data imx25_mxc_ehci_hs_data;
69#define imx25_add_mxc_ehci_hs(pdata) \
70 imx_add_mxc_ehci(&imx25_mxc_ehci_hs_data, pdata)
71
72extern const struct imx_mxc_nand_data imx25_mxc_nand_data;
73#define imx25_add_mxc_nand(pdata) \
74 imx_add_mxc_nand(&imx25_mxc_nand_data, pdata)
75
76extern const struct imx_sdhci_esdhc_imx_data imx25_sdhci_esdhc_imx_data[];
77#define imx25_add_sdhci_esdhc_imx(id, pdata) \
78 imx_add_sdhci_esdhc_imx(&imx25_sdhci_esdhc_imx_data[id], pdata)
79
80extern const struct imx_spi_imx_data imx25_cspi_data[];
81#define imx25_add_spi_imx(id, pdata) \
82 imx_add_spi_imx(&imx25_cspi_data[id], pdata)
83#define imx25_add_spi_imx0(pdata) imx25_add_spi_imx(0, pdata)
84#define imx25_add_spi_imx1(pdata) imx25_add_spi_imx(1, pdata)
85#define imx25_add_spi_imx2(pdata) imx25_add_spi_imx(2, pdata)
diff --git a/arch/arm/mach-imx/devices/Kconfig b/arch/arm/mach-imx/devices/Kconfig
index 1d2cc1805f3e..3a552989248e 100644
--- a/arch/arm/mach-imx/devices/Kconfig
+++ b/arch/arm/mach-imx/devices/Kconfig
@@ -21,9 +21,6 @@ config IMX_HAVE_PLATFORM_IMX27_CODA
21config IMX_HAVE_PLATFORM_IMX2_WDT 21config IMX_HAVE_PLATFORM_IMX2_WDT
22 bool 22 bool
23 23
24config IMX_HAVE_PLATFORM_IMXDI_RTC
25 bool
26
27config IMX_HAVE_PLATFORM_IMX_FB 24config IMX_HAVE_PLATFORM_IMX_FB
28 bool 25 bool
29 26
diff --git a/arch/arm/mach-imx/devices/Makefile b/arch/arm/mach-imx/devices/Makefile
index 8fdb12b4ca7e..e5cf587bc1a0 100644
--- a/arch/arm/mach-imx/devices/Makefile
+++ b/arch/arm/mach-imx/devices/Makefile
@@ -8,7 +8,6 @@ obj-y += platform-gpio-mxc.o
8obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX21_HCD) += platform-imx21-hcd.o 8obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX21_HCD) += platform-imx21-hcd.o
9obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX27_CODA) += platform-imx27-coda.o 9obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX27_CODA) += platform-imx27-coda.o
10obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX2_WDT) += platform-imx2-wdt.o 10obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX2_WDT) += platform-imx2-wdt.o
11obj-$(CONFIG_IMX_HAVE_PLATFORM_IMXDI_RTC) += platform-imxdi_rtc.o
12obj-y += platform-imx-dma.o 11obj-y += platform-imx-dma.o
13obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_FB) += platform-imx-fb.o 12obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_FB) += platform-imx-fb.o
14obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_I2C) += platform-imx-i2c.o 13obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_I2C) += platform-imx-i2c.o
diff --git a/arch/arm/mach-imx/devices/platform-fec.c b/arch/arm/mach-imx/devices/platform-fec.c
index d86f9250b4ee..b403a4fe2892 100644
--- a/arch/arm/mach-imx/devices/platform-fec.c
+++ b/arch/arm/mach-imx/devices/platform-fec.c
@@ -19,11 +19,6 @@
19 .irq = soc ## _INT_FEC, \ 19 .irq = soc ## _INT_FEC, \
20 } 20 }
21 21
22#ifdef CONFIG_SOC_IMX25
23const struct imx_fec_data imx25_fec_data __initconst =
24 imx_fec_data_entry_single(MX25, "imx25-fec");
25#endif /* ifdef CONFIG_SOC_IMX25 */
26
27#ifdef CONFIG_SOC_IMX27 22#ifdef CONFIG_SOC_IMX27
28const struct imx_fec_data imx27_fec_data __initconst = 23const struct imx_fec_data imx27_fec_data __initconst =
29 imx_fec_data_entry_single(MX27, "imx27-fec"); 24 imx_fec_data_entry_single(MX27, "imx27-fec");
diff --git a/arch/arm/mach-imx/devices/platform-fsl-usb2-udc.c b/arch/arm/mach-imx/devices/platform-fsl-usb2-udc.c
index 23b0061347cb..25e1de6f3a47 100644
--- a/arch/arm/mach-imx/devices/platform-fsl-usb2-udc.c
+++ b/arch/arm/mach-imx/devices/platform-fsl-usb2-udc.c
@@ -18,11 +18,6 @@
18 .irq = soc ## _INT_USB_OTG, \ 18 .irq = soc ## _INT_USB_OTG, \
19 } 19 }
20 20
21#ifdef CONFIG_SOC_IMX25
22const struct imx_fsl_usb2_udc_data imx25_fsl_usb2_udc_data __initconst =
23 imx_fsl_usb2_udc_data_entry_single(MX25, "imx-udc-mx27");
24#endif /* ifdef CONFIG_SOC_IMX25 */
25
26#ifdef CONFIG_SOC_IMX27 21#ifdef CONFIG_SOC_IMX27
27const struct imx_fsl_usb2_udc_data imx27_fsl_usb2_udc_data __initconst = 22const struct imx_fsl_usb2_udc_data imx27_fsl_usb2_udc_data __initconst =
28 imx_fsl_usb2_udc_data_entry_single(MX27, "imx-udc-mx27"); 23 imx_fsl_usb2_udc_data_entry_single(MX27, "imx-udc-mx27");
diff --git a/arch/arm/mach-imx/devices/platform-imx-fb.c b/arch/arm/mach-imx/devices/platform-imx-fb.c
index 25a47c616b2d..7df6328306f9 100644
--- a/arch/arm/mach-imx/devices/platform-imx-fb.c
+++ b/arch/arm/mach-imx/devices/platform-imx-fb.c
@@ -29,11 +29,6 @@ const struct imx_imx_fb_data imx21_imx_fb_data __initconst =
29 imx_imx_fb_data_entry_single(MX21, "imx21-fb", SZ_4K); 29 imx_imx_fb_data_entry_single(MX21, "imx21-fb", SZ_4K);
30#endif /* ifdef CONFIG_SOC_IMX21 */ 30#endif /* ifdef CONFIG_SOC_IMX21 */
31 31
32#ifdef CONFIG_SOC_IMX25
33const struct imx_imx_fb_data imx25_imx_fb_data __initconst =
34 imx_imx_fb_data_entry_single(MX25, "imx21-fb", SZ_16K);
35#endif /* ifdef CONFIG_SOC_IMX25 */
36
37#ifdef CONFIG_SOC_IMX27 32#ifdef CONFIG_SOC_IMX27
38const struct imx_imx_fb_data imx27_imx_fb_data __initconst = 33const struct imx_imx_fb_data imx27_imx_fb_data __initconst =
39 imx_imx_fb_data_entry_single(MX27, "imx21-fb", SZ_4K); 34 imx_imx_fb_data_entry_single(MX27, "imx21-fb", SZ_4K);
diff --git a/arch/arm/mach-imx/devices/platform-imx-i2c.c b/arch/arm/mach-imx/devices/platform-imx-i2c.c
index 644ac2689882..ae9791522fc8 100644
--- a/arch/arm/mach-imx/devices/platform-imx-i2c.c
+++ b/arch/arm/mach-imx/devices/platform-imx-i2c.c
@@ -31,16 +31,6 @@ const struct imx_imx_i2c_data imx21_imx_i2c_data __initconst =
31 imx_imx_i2c_data_entry_single(MX21, "imx21-i2c", 0, , SZ_4K); 31 imx_imx_i2c_data_entry_single(MX21, "imx21-i2c", 0, , SZ_4K);
32#endif /* ifdef CONFIG_SOC_IMX21 */ 32#endif /* ifdef CONFIG_SOC_IMX21 */
33 33
34#ifdef CONFIG_SOC_IMX25
35const struct imx_imx_i2c_data imx25_imx_i2c_data[] __initconst = {
36#define imx25_imx_i2c_data_entry(_id, _hwid) \
37 imx_imx_i2c_data_entry(MX25, "imx21-i2c", _id, _hwid, SZ_16K)
38 imx25_imx_i2c_data_entry(0, 1),
39 imx25_imx_i2c_data_entry(1, 2),
40 imx25_imx_i2c_data_entry(2, 3),
41};
42#endif /* ifdef CONFIG_SOC_IMX25 */
43
44#ifdef CONFIG_SOC_IMX27 34#ifdef CONFIG_SOC_IMX27
45const struct imx_imx_i2c_data imx27_imx_i2c_data[] __initconst = { 35const struct imx_imx_i2c_data imx27_imx_i2c_data[] __initconst = {
46#define imx27_imx_i2c_data_entry(_id, _hwid) \ 36#define imx27_imx_i2c_data_entry(_id, _hwid) \
diff --git a/arch/arm/mach-imx/devices/platform-imx-keypad.c b/arch/arm/mach-imx/devices/platform-imx-keypad.c
index f42200b7aca9..479e4d70dbf9 100644
--- a/arch/arm/mach-imx/devices/platform-imx-keypad.c
+++ b/arch/arm/mach-imx/devices/platform-imx-keypad.c
@@ -21,11 +21,6 @@ const struct imx_imx_keypad_data imx21_imx_keypad_data __initconst =
21 imx_imx_keypad_data_entry_single(MX21, SZ_16); 21 imx_imx_keypad_data_entry_single(MX21, SZ_16);
22#endif /* ifdef CONFIG_SOC_IMX21 */ 22#endif /* ifdef CONFIG_SOC_IMX21 */
23 23
24#ifdef CONFIG_SOC_IMX25
25const struct imx_imx_keypad_data imx25_imx_keypad_data __initconst =
26 imx_imx_keypad_data_entry_single(MX25, SZ_16K);
27#endif /* ifdef CONFIG_SOC_IMX25 */
28
29#ifdef CONFIG_SOC_IMX27 24#ifdef CONFIG_SOC_IMX27
30const struct imx_imx_keypad_data imx27_imx_keypad_data __initconst = 25const struct imx_imx_keypad_data imx27_imx_keypad_data __initconst =
31 imx_imx_keypad_data_entry_single(MX27, SZ_16); 26 imx_imx_keypad_data_entry_single(MX27, SZ_16);
diff --git a/arch/arm/mach-imx/devices/platform-imx-ssi.c b/arch/arm/mach-imx/devices/platform-imx-ssi.c
index 1c7c721ebff1..6f0e94eb29ee 100644
--- a/arch/arm/mach-imx/devices/platform-imx-ssi.c
+++ b/arch/arm/mach-imx/devices/platform-imx-ssi.c
@@ -30,15 +30,6 @@ const struct imx_imx_ssi_data imx21_imx_ssi_data[] __initconst = {
30}; 30};
31#endif /* ifdef CONFIG_SOC_IMX21 */ 31#endif /* ifdef CONFIG_SOC_IMX21 */
32 32
33#ifdef CONFIG_SOC_IMX25
34const struct imx_imx_ssi_data imx25_imx_ssi_data[] __initconst = {
35#define imx25_imx_ssi_data_entry(_id, _hwid) \
36 imx_imx_ssi_data_entry(MX25, _id, _hwid, SZ_4K)
37 imx25_imx_ssi_data_entry(0, 1),
38 imx25_imx_ssi_data_entry(1, 2),
39};
40#endif /* ifdef CONFIG_SOC_IMX25 */
41
42#ifdef CONFIG_SOC_IMX27 33#ifdef CONFIG_SOC_IMX27
43const struct imx_imx_ssi_data imx27_imx_ssi_data[] __initconst = { 34const struct imx_imx_ssi_data imx27_imx_ssi_data[] __initconst = {
44#define imx27_imx_ssi_data_entry(_id, _hwid) \ 35#define imx27_imx_ssi_data_entry(_id, _hwid) \
diff --git a/arch/arm/mach-imx/devices/platform-imx-uart.c b/arch/arm/mach-imx/devices/platform-imx-uart.c
index 8c01836bc1d4..6962cff4a950 100644
--- a/arch/arm/mach-imx/devices/platform-imx-uart.c
+++ b/arch/arm/mach-imx/devices/platform-imx-uart.c
@@ -47,18 +47,6 @@ const struct imx_imx_uart_1irq_data imx21_imx_uart_data[] __initconst = {
47}; 47};
48#endif 48#endif
49 49
50#ifdef CONFIG_SOC_IMX25
51const struct imx_imx_uart_1irq_data imx25_imx_uart_data[] __initconst = {
52#define imx25_imx_uart_data_entry(_id, _hwid) \
53 imx_imx_uart_1irq_data_entry(MX25, _id, _hwid, SZ_16K)
54 imx25_imx_uart_data_entry(0, 1),
55 imx25_imx_uart_data_entry(1, 2),
56 imx25_imx_uart_data_entry(2, 3),
57 imx25_imx_uart_data_entry(3, 4),
58 imx25_imx_uart_data_entry(4, 5),
59};
60#endif /* ifdef CONFIG_SOC_IMX25 */
61
62#ifdef CONFIG_SOC_IMX27 50#ifdef CONFIG_SOC_IMX27
63const struct imx_imx_uart_1irq_data imx27_imx_uart_data[] __initconst = { 51const struct imx_imx_uart_1irq_data imx27_imx_uart_data[] __initconst = {
64#define imx27_imx_uart_data_entry(_id, _hwid) \ 52#define imx27_imx_uart_data_entry(_id, _hwid) \
diff --git a/arch/arm/mach-imx/devices/platform-imx2-wdt.c b/arch/arm/mach-imx/devices/platform-imx2-wdt.c
index 54f63bc25ca4..8c134c8d7500 100644
--- a/arch/arm/mach-imx/devices/platform-imx2-wdt.c
+++ b/arch/arm/mach-imx/devices/platform-imx2-wdt.c
@@ -25,11 +25,6 @@ const struct imx_imx2_wdt_data imx21_imx2_wdt_data __initconst =
25 imx_imx2_wdt_data_entry_single(MX21, 0, , SZ_4K); 25 imx_imx2_wdt_data_entry_single(MX21, 0, , SZ_4K);
26#endif /* ifdef CONFIG_SOC_IMX21 */ 26#endif /* ifdef CONFIG_SOC_IMX21 */
27 27
28#ifdef CONFIG_SOC_IMX25
29const struct imx_imx2_wdt_data imx25_imx2_wdt_data __initconst =
30 imx_imx2_wdt_data_entry_single(MX25, 0, , SZ_16K);
31#endif /* ifdef CONFIG_SOC_IMX25 */
32
33#ifdef CONFIG_SOC_IMX27 28#ifdef CONFIG_SOC_IMX27
34const struct imx_imx2_wdt_data imx27_imx2_wdt_data __initconst = 29const struct imx_imx2_wdt_data imx27_imx2_wdt_data __initconst =
35 imx_imx2_wdt_data_entry_single(MX27, 0, , SZ_4K); 30 imx_imx2_wdt_data_entry_single(MX27, 0, , SZ_4K);
diff --git a/arch/arm/mach-imx/devices/platform-imxdi_rtc.c b/arch/arm/mach-imx/devices/platform-imxdi_rtc.c
deleted file mode 100644
index 5bb490d556ea..000000000000
--- a/arch/arm/mach-imx/devices/platform-imxdi_rtc.c
+++ /dev/null
@@ -1,42 +0,0 @@
1/*
2 * Copyright (C) 2010 Pengutronix
3 * Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
4 *
5 * This program is free software; you can redistribute it and/or modify it under
6 * the terms of the GNU General Public License version 2 as published by the
7 * Free Software Foundation.
8 */
9#include <asm/sizes.h>
10
11#include "../hardware.h"
12#include "devices-common.h"
13
14#define imx_imxdi_rtc_data_entry_single(soc) \
15 { \
16 .iobase = soc ## _DRYICE_BASE_ADDR, \
17 .irq = soc ## _INT_DRYICE, \
18 }
19
20#ifdef CONFIG_SOC_IMX25
21const struct imx_imxdi_rtc_data imx25_imxdi_rtc_data __initconst =
22 imx_imxdi_rtc_data_entry_single(MX25);
23#endif /* ifdef CONFIG_SOC_IMX25 */
24
25struct platform_device *__init imx_add_imxdi_rtc(
26 const struct imx_imxdi_rtc_data *data)
27{
28 struct resource res[] = {
29 {
30 .start = data->iobase,
31 .end = data->iobase + SZ_16K - 1,
32 .flags = IORESOURCE_MEM,
33 }, {
34 .start = data->irq,
35 .end = data->irq,
36 .flags = IORESOURCE_IRQ,
37 },
38 };
39
40 return imx_add_platform_device("imxdi_rtc", 0,
41 res, ARRAY_SIZE(res), NULL, 0);
42}
diff --git a/arch/arm/mach-imx/devices/platform-mx2-camera.c b/arch/arm/mach-imx/devices/platform-mx2-camera.c
index b53e1f348f51..4c377c33242c 100644
--- a/arch/arm/mach-imx/devices/platform-mx2-camera.c
+++ b/arch/arm/mach-imx/devices/platform-mx2-camera.c
@@ -27,11 +27,6 @@
27 .irqemmaprp = soc ## _INT_EMMAPRP, \ 27 .irqemmaprp = soc ## _INT_EMMAPRP, \
28 } 28 }
29 29
30#ifdef CONFIG_SOC_IMX25
31const struct imx_mx2_camera_data imx25_mx2_camera_data __initconst =
32 imx_mx2_camera_data_entry_single(MX25, "imx25-camera");
33#endif /* ifdef CONFIG_SOC_IMX25 */
34
35#ifdef CONFIG_SOC_IMX27 30#ifdef CONFIG_SOC_IMX27
36const struct imx_mx2_camera_data imx27_mx2_camera_data __initconst = 31const struct imx_mx2_camera_data imx27_mx2_camera_data __initconst =
37 imx_mx2_camera_data_entry_single_emma(MX27, "imx27-camera"); 32 imx_mx2_camera_data_entry_single_emma(MX27, "imx27-camera");
diff --git a/arch/arm/mach-imx/devices/platform-mxc-ehci.c b/arch/arm/mach-imx/devices/platform-mxc-ehci.c
index 296353662ff0..4537abd2a8f2 100644
--- a/arch/arm/mach-imx/devices/platform-mxc-ehci.c
+++ b/arch/arm/mach-imx/devices/platform-mxc-ehci.c
@@ -18,13 +18,6 @@
18 .irq = soc ## _INT_USB_ ## hs, \ 18 .irq = soc ## _INT_USB_ ## hs, \
19 } 19 }
20 20
21#ifdef CONFIG_SOC_IMX25
22const struct imx_mxc_ehci_data imx25_mxc_ehci_otg_data __initconst =
23 imx_mxc_ehci_data_entry_single(MX25, 0, OTG);
24const struct imx_mxc_ehci_data imx25_mxc_ehci_hs_data __initconst =
25 imx_mxc_ehci_data_entry_single(MX25, 1, HS);
26#endif /* ifdef CONFIG_SOC_IMX25 */
27
28#ifdef CONFIG_SOC_IMX27 21#ifdef CONFIG_SOC_IMX27
29const struct imx_mxc_ehci_data imx27_mxc_ehci_otg_data __initconst = 22const struct imx_mxc_ehci_data imx27_mxc_ehci_otg_data __initconst =
30 imx_mxc_ehci_data_entry_single(MX27, 0, OTG); 23 imx_mxc_ehci_data_entry_single(MX27, 0, OTG);
diff --git a/arch/arm/mach-imx/devices/platform-mxc_nand.c b/arch/arm/mach-imx/devices/platform-mxc_nand.c
index fa618a34f462..676df4920c7b 100644
--- a/arch/arm/mach-imx/devices/platform-mxc_nand.c
+++ b/arch/arm/mach-imx/devices/platform-mxc_nand.c
@@ -34,11 +34,6 @@ const struct imx_mxc_nand_data imx21_mxc_nand_data __initconst =
34 imx_mxc_nand_data_entry_single(MX21, "imx21-nand", SZ_4K); 34 imx_mxc_nand_data_entry_single(MX21, "imx21-nand", SZ_4K);
35#endif /* ifdef CONFIG_SOC_IMX21 */ 35#endif /* ifdef CONFIG_SOC_IMX21 */
36 36
37#ifdef CONFIG_SOC_IMX25
38const struct imx_mxc_nand_data imx25_mxc_nand_data __initconst =
39 imx_mxc_nand_data_entry_single(MX25, "imx25-nand", SZ_8K);
40#endif /* ifdef CONFIG_SOC_IMX25 */
41
42#ifdef CONFIG_SOC_IMX27 37#ifdef CONFIG_SOC_IMX27
43const struct imx_mxc_nand_data imx27_mxc_nand_data __initconst = 38const struct imx_mxc_nand_data imx27_mxc_nand_data __initconst =
44 imx_mxc_nand_data_entry_single(MX27, "imx27-nand", SZ_4K); 39 imx_mxc_nand_data_entry_single(MX27, "imx27-nand", SZ_4K);
diff --git a/arch/arm/mach-imx/devices/platform-spi_imx.c b/arch/arm/mach-imx/devices/platform-spi_imx.c
index aca825d74c48..5e9707b47f92 100644
--- a/arch/arm/mach-imx/devices/platform-spi_imx.c
+++ b/arch/arm/mach-imx/devices/platform-spi_imx.c
@@ -39,17 +39,6 @@ const struct imx_spi_imx_data imx21_cspi_data[] __initconst = {
39}; 39};
40#endif 40#endif
41 41
42#ifdef CONFIG_SOC_IMX25
43/* i.mx25 has the i.mx35 type cspi */
44const struct imx_spi_imx_data imx25_cspi_data[] __initconst = {
45#define imx25_cspi_data_entry(_id, _hwid) \
46 imx_spi_imx_data_entry(MX25, CSPI, "imx35-cspi", _id, _hwid, SZ_16K)
47 imx25_cspi_data_entry(0, 1),
48 imx25_cspi_data_entry(1, 2),
49 imx25_cspi_data_entry(2, 3),
50};
51#endif /* ifdef CONFIG_SOC_IMX25 */
52
53#ifdef CONFIG_SOC_IMX27 42#ifdef CONFIG_SOC_IMX27
54const struct imx_spi_imx_data imx27_cspi_data[] __initconst = { 43const struct imx_spi_imx_data imx27_cspi_data[] __initconst = {
55#define imx27_cspi_data_entry(_id, _hwid) \ 44#define imx27_cspi_data_entry(_id, _hwid) \
diff --git a/arch/arm/mach-imx/ehci-imx25.c b/arch/arm/mach-imx/ehci-imx25.c
deleted file mode 100644
index 42a5a3d14c5f..000000000000
--- a/arch/arm/mach-imx/ehci-imx25.c
+++ /dev/null
@@ -1,99 +0,0 @@
1/*
2 * Copyright (c) 2009 Daniel Mack <daniel@caiaq.de>
3 * Copyright (C) 2010 Freescale Semiconductor, Inc.
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2 of the License, or (at your
8 * option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 * for more details.
14 */
15
16#include <linux/platform_device.h>
17#include <linux/io.h>
18#include <linux/platform_data/usb-ehci-mxc.h>
19
20#include "ehci.h"
21#include "hardware.h"
22
23#define USBCTRL_OTGBASE_OFFSET 0x600
24
25#define MX25_OTG_SIC_SHIFT 29
26#define MX25_OTG_SIC_MASK (0x3 << MX25_OTG_SIC_SHIFT)
27#define MX25_OTG_PM_BIT (1 << 24)
28#define MX25_OTG_PP_BIT (1 << 11)
29#define MX25_OTG_OCPOL_BIT (1 << 3)
30
31#define MX25_H1_SIC_SHIFT 21
32#define MX25_H1_SIC_MASK (0x3 << MX25_H1_SIC_SHIFT)
33#define MX25_H1_PP_BIT (1 << 18)
34#define MX25_H1_PM_BIT (1 << 16)
35#define MX25_H1_IPPUE_UP_BIT (1 << 7)
36#define MX25_H1_IPPUE_DOWN_BIT (1 << 6)
37#define MX25_H1_TLL_BIT (1 << 5)
38#define MX25_H1_USBTE_BIT (1 << 4)
39#define MX25_H1_OCPOL_BIT (1 << 2)
40
41int mx25_initialize_usb_hw(int port, unsigned int flags)
42{
43 unsigned int v;
44
45 v = readl(MX25_IO_ADDRESS(MX25_USB_BASE_ADDR + USBCTRL_OTGBASE_OFFSET));
46
47 switch (port) {
48 case 0: /* OTG port */
49 v &= ~(MX25_OTG_SIC_MASK | MX25_OTG_PM_BIT | MX25_OTG_PP_BIT |
50 MX25_OTG_OCPOL_BIT);
51 v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX25_OTG_SIC_SHIFT;
52
53 if (!(flags & MXC_EHCI_POWER_PINS_ENABLED))
54 v |= MX25_OTG_PM_BIT;
55
56 if (flags & MXC_EHCI_PWR_PIN_ACTIVE_HIGH)
57 v |= MX25_OTG_PP_BIT;
58
59 if (!(flags & MXC_EHCI_OC_PIN_ACTIVE_LOW))
60 v |= MX25_OTG_OCPOL_BIT;
61
62 break;
63 case 1: /* H1 port */
64 v &= ~(MX25_H1_SIC_MASK | MX25_H1_PM_BIT | MX25_H1_PP_BIT |
65 MX25_H1_OCPOL_BIT | MX25_H1_TLL_BIT | MX25_H1_USBTE_BIT |
66 MX25_H1_IPPUE_DOWN_BIT | MX25_H1_IPPUE_UP_BIT);
67 v |= (flags & MXC_EHCI_INTERFACE_MASK) << MX25_H1_SIC_SHIFT;
68
69 if (!(flags & MXC_EHCI_POWER_PINS_ENABLED))
70 v |= MX25_H1_PM_BIT;
71
72 if (flags & MXC_EHCI_PWR_PIN_ACTIVE_HIGH)
73 v |= MX25_H1_PP_BIT;
74
75 if (!(flags & MXC_EHCI_OC_PIN_ACTIVE_LOW))
76 v |= MX25_H1_OCPOL_BIT;
77
78 if (!(flags & MXC_EHCI_TTL_ENABLED))
79 v |= MX25_H1_TLL_BIT;
80
81 if (flags & MXC_EHCI_INTERNAL_PHY)
82 v |= MX25_H1_USBTE_BIT;
83
84 if (flags & MXC_EHCI_IPPUE_DOWN)
85 v |= MX25_H1_IPPUE_DOWN_BIT;
86
87 if (flags & MXC_EHCI_IPPUE_UP)
88 v |= MX25_H1_IPPUE_UP_BIT;
89
90 break;
91 default:
92 return -EINVAL;
93 }
94
95 writel(v, MX25_IO_ADDRESS(MX25_USB_BASE_ADDR + USBCTRL_OTGBASE_OFFSET));
96
97 return 0;
98}
99
diff --git a/arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c b/arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c
deleted file mode 100644
index e77cc3af6db2..000000000000
--- a/arch/arm/mach-imx/eukrea_mbimxsd25-baseboard.c
+++ /dev/null
@@ -1,310 +0,0 @@
1/*
2 * Copyright (C) 2010 Eric Benard - eric@eukrea.com
3 *
4 * Based on pcm970-baseboard.c which is :
5 * Copyright (C) 2008 Juergen Beisert (kernel@pengutronix.de)
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19 * MA 02110-1301, USA.
20 */
21
22#include <linux/gpio.h>
23#include <linux/leds.h>
24#include <linux/platform_device.h>
25#include <linux/input.h>
26#include <linux/spi/spi.h>
27#include <video/platform_lcd.h>
28
29#include <asm/mach-types.h>
30#include <asm/mach/arch.h>
31
32#include "common.h"
33#include "devices-imx25.h"
34#include "hardware.h"
35#include "iomux-mx25.h"
36#include "mx25.h"
37
38static iomux_v3_cfg_t eukrea_mbimxsd_pads[] = {
39 /* LCD */
40 MX25_PAD_LD0__LD0,
41 MX25_PAD_LD1__LD1,
42 MX25_PAD_LD2__LD2,
43 MX25_PAD_LD3__LD3,
44 MX25_PAD_LD4__LD4,
45 MX25_PAD_LD5__LD5,
46 MX25_PAD_LD6__LD6,
47 MX25_PAD_LD7__LD7,
48 MX25_PAD_LD8__LD8,
49 MX25_PAD_LD9__LD9,
50 MX25_PAD_LD10__LD10,
51 MX25_PAD_LD11__LD11,
52 MX25_PAD_LD12__LD12,
53 MX25_PAD_LD13__LD13,
54 MX25_PAD_LD14__LD14,
55 MX25_PAD_LD15__LD15,
56 MX25_PAD_GPIO_E__LD16,
57 MX25_PAD_GPIO_F__LD17,
58 MX25_PAD_HSYNC__HSYNC,
59 MX25_PAD_VSYNC__VSYNC,
60 MX25_PAD_LSCLK__LSCLK,
61 MX25_PAD_OE_ACD__OE_ACD,
62 MX25_PAD_CONTRAST__CONTRAST,
63 /* LCD_PWR */
64 MX25_PAD_PWM__GPIO_1_26,
65 /* LED */
66 MX25_PAD_POWER_FAIL__GPIO_3_19,
67 /* SWITCH */
68 MX25_PAD_VSTBY_ACK__GPIO_3_18,
69 /* UART2 */
70 MX25_PAD_UART2_RTS__UART2_RTS,
71 MX25_PAD_UART2_CTS__UART2_CTS,
72 MX25_PAD_UART2_TXD__UART2_TXD,
73 MX25_PAD_UART2_RXD__UART2_RXD,
74 /* SD1 */
75 MX25_PAD_SD1_CMD__SD1_CMD,
76 MX25_PAD_SD1_CLK__SD1_CLK,
77 MX25_PAD_SD1_DATA0__SD1_DATA0,
78 MX25_PAD_SD1_DATA1__SD1_DATA1,
79 MX25_PAD_SD1_DATA2__SD1_DATA2,
80 MX25_PAD_SD1_DATA3__SD1_DATA3,
81 /* SD1 CD */
82 MX25_PAD_DE_B__GPIO_2_20,
83 /* I2S */
84 MX25_PAD_KPP_COL3__AUD5_TXFS,
85 MX25_PAD_KPP_COL2__AUD5_TXC,
86 MX25_PAD_KPP_COL1__AUD5_RXD,
87 MX25_PAD_KPP_COL0__AUD5_TXD,
88 /* CAN */
89 MX25_PAD_GPIO_D__CAN2_RX,
90 MX25_PAD_GPIO_C__CAN2_TX,
91 /* SPI1 */
92 MX25_PAD_CSPI1_MOSI__CSPI1_MOSI,
93 MX25_PAD_CSPI1_MISO__CSPI1_MISO,
94 MX25_PAD_CSPI1_SS0__GPIO_1_16,
95 MX25_PAD_CSPI1_SS1__GPIO_1_17,
96 MX25_PAD_CSPI1_SCLK__CSPI1_SCLK,
97 MX25_PAD_CSPI1_RDY__GPIO_2_22,
98};
99
100#define GPIO_LED1 IMX_GPIO_NR(3, 19)
101#define GPIO_SWITCH1 IMX_GPIO_NR(3, 18)
102#define GPIO_SD1CD IMX_GPIO_NR(2, 20)
103#define GPIO_LCDPWR IMX_GPIO_NR(1, 26)
104#define GPIO_SPI1_SS0 IMX_GPIO_NR(1, 16)
105#define GPIO_SPI1_SS1 IMX_GPIO_NR(1, 17)
106#define GPIO_SPI1_IRQ IMX_GPIO_NR(2, 22)
107
108static struct imx_fb_videomode eukrea_mximxsd_modes[] = {
109 {
110 .mode = {
111 .name = "CMO-QVGA",
112 .refresh = 60,
113 .xres = 320,
114 .yres = 240,
115 .pixclock = KHZ2PICOS(6500),
116 .left_margin = 30,
117 .right_margin = 38,
118 .upper_margin = 20,
119 .lower_margin = 3,
120 .hsync_len = 15,
121 .vsync_len = 4,
122 },
123 .bpp = 16,
124 .pcr = 0xCAD08B80,
125 }, {
126 .mode = {
127 .name = "DVI-VGA",
128 .refresh = 60,
129 .xres = 640,
130 .yres = 480,
131 .pixclock = 32000,
132 .hsync_len = 7,
133 .left_margin = 100,
134 .right_margin = 100,
135 .vsync_len = 7,
136 .upper_margin = 7,
137 .lower_margin = 100,
138 },
139 .pcr = 0xFA208B80,
140 .bpp = 16,
141 }, {
142 .mode = {
143 .name = "DVI-SVGA",
144 .refresh = 60,
145 .xres = 800,
146 .yres = 600,
147 .pixclock = 25000,
148 .hsync_len = 7,
149 .left_margin = 75,
150 .right_margin = 75,
151 .vsync_len = 7,
152 .upper_margin = 7,
153 .lower_margin = 75,
154 },
155 .pcr = 0xFA208B80,
156 .bpp = 16,
157 },
158};
159
160static const struct imx_fb_platform_data eukrea_mximxsd_fb_pdata __initconst = {
161 .mode = eukrea_mximxsd_modes,
162 .num_modes = ARRAY_SIZE(eukrea_mximxsd_modes),
163 .pwmr = 0x00A903FF,
164 .lscr1 = 0x00120300,
165 .dmacr = 0x00040060,
166};
167
168static void eukrea_mbimxsd_lcd_power_set(struct plat_lcd_data *pd,
169 unsigned int power)
170{
171 if (power)
172 gpio_direction_output(GPIO_LCDPWR, 1);
173 else
174 gpio_direction_output(GPIO_LCDPWR, 0);
175}
176
177static struct plat_lcd_data eukrea_mbimxsd_lcd_power_data = {
178 .set_power = eukrea_mbimxsd_lcd_power_set,
179};
180
181static struct platform_device eukrea_mbimxsd_lcd_powerdev = {
182 .name = "platform-lcd",
183 .dev.platform_data = &eukrea_mbimxsd_lcd_power_data,
184};
185
186static const struct gpio_led eukrea_mbimxsd_leds[] __initconst = {
187 {
188 .name = "led1",
189 .default_trigger = "heartbeat",
190 .active_low = 1,
191 .gpio = GPIO_LED1,
192 },
193};
194
195static const struct gpio_led_platform_data
196 eukrea_mbimxsd_led_info __initconst = {
197 .leds = eukrea_mbimxsd_leds,
198 .num_leds = ARRAY_SIZE(eukrea_mbimxsd_leds),
199};
200
201static struct gpio_keys_button eukrea_mbimxsd_gpio_buttons[] = {
202 {
203 .gpio = GPIO_SWITCH1,
204 .code = BTN_0,
205 .desc = "BP1",
206 .active_low = 1,
207 .wakeup = 1,
208 },
209};
210
211static const struct gpio_keys_platform_data
212 eukrea_mbimxsd_button_data __initconst = {
213 .buttons = eukrea_mbimxsd_gpio_buttons,
214 .nbuttons = ARRAY_SIZE(eukrea_mbimxsd_gpio_buttons),
215};
216
217static struct platform_device *platform_devices[] __initdata = {
218 &eukrea_mbimxsd_lcd_powerdev,
219};
220
221static const struct imxuart_platform_data uart_pdata __initconst = {
222 .flags = IMXUART_HAVE_RTSCTS,
223};
224
225static struct i2c_board_info eukrea_mbimxsd_i2c_devices[] = {
226 {
227 I2C_BOARD_INFO("tlv320aic23", 0x1a),
228 },
229};
230
231static const
232struct imx_ssi_platform_data eukrea_mbimxsd_ssi_pdata __initconst = {
233 .flags = IMX_SSI_SYN | IMX_SSI_NET | IMX_SSI_USE_I2S_SLAVE,
234};
235
236static struct esdhc_platform_data sd1_pdata = {
237 .cd_gpio = GPIO_SD1CD,
238 .cd_type = ESDHC_CD_GPIO,
239 .wp_type = ESDHC_WP_NONE,
240};
241
242static struct spi_board_info eukrea_mbimxsd25_spi_board_info[] __initdata = {
243 {
244 .modalias = "spidev",
245 .max_speed_hz = 20000000,
246 .bus_num = 0,
247 .chip_select = 0,
248 .mode = SPI_MODE_0,
249 },
250 {
251 .modalias = "spidev",
252 .max_speed_hz = 20000000,
253 .bus_num = 0,
254 .chip_select = 1,
255 .mode = SPI_MODE_0,
256 },
257};
258
259static int eukrea_mbimxsd25_spi_cs[] = {GPIO_SPI1_SS0, GPIO_SPI1_SS1};
260
261static const struct spi_imx_master eukrea_mbimxsd25_spi0_data __initconst = {
262 .chipselect = eukrea_mbimxsd25_spi_cs,
263 .num_chipselect = ARRAY_SIZE(eukrea_mbimxsd25_spi_cs),
264};
265
266/*
267 * system init for baseboard usage. Will be called by cpuimx25 init.
268 *
269 * Add platform devices present on this baseboard and init
270 * them from CPU side as far as required to use them later on
271 */
272void __init eukrea_mbimxsd25_baseboard_init(void)
273{
274 if (mxc_iomux_v3_setup_multiple_pads(eukrea_mbimxsd_pads,
275 ARRAY_SIZE(eukrea_mbimxsd_pads)))
276 printk(KERN_ERR "error setting mbimxsd pads !\n");
277
278 imx25_add_imx_uart1(&uart_pdata);
279 imx25_add_imx_fb(&eukrea_mximxsd_fb_pdata);
280 imx25_add_imx_ssi(0, &eukrea_mbimxsd_ssi_pdata);
281
282 imx25_add_flexcan1();
283 imx25_add_sdhci_esdhc_imx(0, &sd1_pdata);
284
285 gpio_request(GPIO_LED1, "LED1");
286 gpio_direction_output(GPIO_LED1, 1);
287 gpio_free(GPIO_LED1);
288
289 gpio_request(GPIO_SWITCH1, "SWITCH1");
290 gpio_direction_input(GPIO_SWITCH1);
291 gpio_free(GPIO_SWITCH1);
292
293 gpio_request(GPIO_LCDPWR, "LCDPWR");
294 gpio_direction_output(GPIO_LCDPWR, 1);
295
296 i2c_register_board_info(0, eukrea_mbimxsd_i2c_devices,
297 ARRAY_SIZE(eukrea_mbimxsd_i2c_devices));
298
299 gpio_request(GPIO_SPI1_IRQ, "SPI1_IRQ");
300 gpio_direction_input(GPIO_SPI1_IRQ);
301 gpio_free(GPIO_SPI1_IRQ);
302 imx25_add_spi_imx0(&eukrea_mbimxsd25_spi0_data);
303 spi_register_board_info(eukrea_mbimxsd25_spi_board_info,
304 ARRAY_SIZE(eukrea_mbimxsd25_spi_board_info));
305
306 platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
307 gpio_led_register_device(-1, &eukrea_mbimxsd_led_info);
308 imx_add_gpio_keys(&eukrea_mbimxsd_button_data);
309 imx_add_platform_device("eukrea_tlv320", 0, NULL, 0, NULL, 0);
310}
diff --git a/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c b/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c
index 14d6c8249b76..6edc940e0865 100644
--- a/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c
+++ b/arch/arm/mach-imx/eukrea_mbimxsd35-baseboard.c
@@ -100,7 +100,7 @@ static struct mx3fb_platform_data mx3fb_pdata __initdata = {
100 .num_modes = ARRAY_SIZE(fb_modedb), 100 .num_modes = ARRAY_SIZE(fb_modedb),
101}; 101};
102 102
103static iomux_v3_cfg_t eukrea_mbimxsd_pads[] = { 103static const iomux_v3_cfg_t eukrea_mbimxsd_pads[] __initconst = {
104 /* LCD */ 104 /* LCD */
105 MX35_PAD_LD0__IPU_DISPB_DAT_0, 105 MX35_PAD_LD0__IPU_DISPB_DAT_0,
106 MX35_PAD_LD1__IPU_DISPB_DAT_1, 106 MX35_PAD_LD1__IPU_DISPB_DAT_1,
diff --git a/arch/arm/mach-imx/gpc.c b/arch/arm/mach-imx/gpc.c
index 745caa18ab2c..4d60005e9277 100644
--- a/arch/arm/mach-imx/gpc.c
+++ b/arch/arm/mach-imx/gpc.c
@@ -10,15 +10,25 @@
10 * http://www.gnu.org/copyleft/gpl.html 10 * http://www.gnu.org/copyleft/gpl.html
11 */ 11 */
12 12
13#include <linux/clk.h>
14#include <linux/delay.h>
13#include <linux/io.h> 15#include <linux/io.h>
14#include <linux/irq.h> 16#include <linux/irq.h>
15#include <linux/of.h> 17#include <linux/of.h>
16#include <linux/of_address.h> 18#include <linux/of_address.h>
17#include <linux/of_irq.h> 19#include <linux/of_irq.h>
20#include <linux/platform_device.h>
21#include <linux/pm_domain.h>
22#include <linux/regulator/consumer.h>
18#include <linux/irqchip/arm-gic.h> 23#include <linux/irqchip/arm-gic.h>
19#include "common.h" 24#include "common.h"
25#include "hardware.h"
20 26
27#define GPC_CNTR 0x000
21#define GPC_IMR1 0x008 28#define GPC_IMR1 0x008
29#define GPC_PGC_GPU_PDN 0x260
30#define GPC_PGC_GPU_PUPSCR 0x264
31#define GPC_PGC_GPU_PDNSCR 0x268
22#define GPC_PGC_CPU_PDN 0x2a0 32#define GPC_PGC_CPU_PDN 0x2a0
23#define GPC_PGC_CPU_PUPSCR 0x2a4 33#define GPC_PGC_CPU_PUPSCR 0x2a4
24#define GPC_PGC_CPU_PDNSCR 0x2a8 34#define GPC_PGC_CPU_PDNSCR 0x2a8
@@ -26,6 +36,19 @@
26#define GPC_PGC_SW_SHIFT 0x0 36#define GPC_PGC_SW_SHIFT 0x0
27 37
28#define IMR_NUM 4 38#define IMR_NUM 4
39#define GPC_MAX_IRQS (IMR_NUM * 32)
40
41#define GPU_VPU_PUP_REQ BIT(1)
42#define GPU_VPU_PDN_REQ BIT(0)
43
44#define GPC_CLK_MAX 6
45
46struct pu_domain {
47 struct generic_pm_domain base;
48 struct regulator *reg;
49 struct clk *clk[GPC_CLK_MAX];
50 int num_clks;
51};
29 52
30static void __iomem *gpc_base; 53static void __iomem *gpc_base;
31static u32 gpc_wake_irqs[IMR_NUM]; 54static u32 gpc_wake_irqs[IMR_NUM];
@@ -77,17 +100,17 @@ void imx_gpc_post_resume(void)
77 100
78static int imx_gpc_irq_set_wake(struct irq_data *d, unsigned int on) 101static int imx_gpc_irq_set_wake(struct irq_data *d, unsigned int on)
79{ 102{
80 unsigned int idx = d->hwirq / 32 - 1; 103 unsigned int idx = d->hwirq / 32;
81 u32 mask; 104 u32 mask;
82 105
83 /* Sanity check for SPI irq */
84 if (d->hwirq < 32)
85 return -EINVAL;
86
87 mask = 1 << d->hwirq % 32; 106 mask = 1 << d->hwirq % 32;
88 gpc_wake_irqs[idx] = on ? gpc_wake_irqs[idx] | mask : 107 gpc_wake_irqs[idx] = on ? gpc_wake_irqs[idx] | mask :
89 gpc_wake_irqs[idx] & ~mask; 108 gpc_wake_irqs[idx] & ~mask;
90 109
110 /*
111 * Do *not* call into the parent, as the GIC doesn't have any
112 * wake-up facility...
113 */
91 return 0; 114 return 0;
92} 115}
93 116
@@ -117,7 +140,7 @@ void imx_gpc_hwirq_unmask(unsigned int hwirq)
117 void __iomem *reg; 140 void __iomem *reg;
118 u32 val; 141 u32 val;
119 142
120 reg = gpc_base + GPC_IMR1 + (hwirq / 32 - 1) * 4; 143 reg = gpc_base + GPC_IMR1 + hwirq / 32 * 4;
121 val = readl_relaxed(reg); 144 val = readl_relaxed(reg);
122 val &= ~(1 << hwirq % 32); 145 val &= ~(1 << hwirq % 32);
123 writel_relaxed(val, reg); 146 writel_relaxed(val, reg);
@@ -128,7 +151,7 @@ void imx_gpc_hwirq_mask(unsigned int hwirq)
128 void __iomem *reg; 151 void __iomem *reg;
129 u32 val; 152 u32 val;
130 153
131 reg = gpc_base + GPC_IMR1 + (hwirq / 32 - 1) * 4; 154 reg = gpc_base + GPC_IMR1 + hwirq / 32 * 4;
132 val = readl_relaxed(reg); 155 val = readl_relaxed(reg);
133 val |= 1 << (hwirq % 32); 156 val |= 1 << (hwirq % 32);
134 writel_relaxed(val, reg); 157 writel_relaxed(val, reg);
@@ -136,37 +159,319 @@ void imx_gpc_hwirq_mask(unsigned int hwirq)
136 159
137static void imx_gpc_irq_unmask(struct irq_data *d) 160static void imx_gpc_irq_unmask(struct irq_data *d)
138{ 161{
139 /* Sanity check for SPI irq */
140 if (d->hwirq < 32)
141 return;
142
143 imx_gpc_hwirq_unmask(d->hwirq); 162 imx_gpc_hwirq_unmask(d->hwirq);
163 irq_chip_unmask_parent(d);
144} 164}
145 165
146static void imx_gpc_irq_mask(struct irq_data *d) 166static void imx_gpc_irq_mask(struct irq_data *d)
147{ 167{
148 /* Sanity check for SPI irq */
149 if (d->hwirq < 32)
150 return;
151
152 imx_gpc_hwirq_mask(d->hwirq); 168 imx_gpc_hwirq_mask(d->hwirq);
169 irq_chip_mask_parent(d);
153} 170}
154 171
155void __init imx_gpc_init(void) 172static struct irq_chip imx_gpc_chip = {
173 .name = "GPC",
174 .irq_eoi = irq_chip_eoi_parent,
175 .irq_mask = imx_gpc_irq_mask,
176 .irq_unmask = imx_gpc_irq_unmask,
177 .irq_retrigger = irq_chip_retrigger_hierarchy,
178 .irq_set_wake = imx_gpc_irq_set_wake,
179#ifdef CONFIG_SMP
180 .irq_set_affinity = irq_chip_set_affinity_parent,
181#endif
182};
183
184static int imx_gpc_domain_xlate(struct irq_domain *domain,
185 struct device_node *controller,
186 const u32 *intspec,
187 unsigned int intsize,
188 unsigned long *out_hwirq,
189 unsigned int *out_type)
156{ 190{
157 struct device_node *np; 191 if (domain->of_node != controller)
192 return -EINVAL; /* Shouldn't happen, really... */
193 if (intsize != 3)
194 return -EINVAL; /* Not GIC compliant */
195 if (intspec[0] != 0)
196 return -EINVAL; /* No PPI should point to this domain */
197
198 *out_hwirq = intspec[1];
199 *out_type = intspec[2];
200 return 0;
201}
202
203static int imx_gpc_domain_alloc(struct irq_domain *domain,
204 unsigned int irq,
205 unsigned int nr_irqs, void *data)
206{
207 struct of_phandle_args *args = data;
208 struct of_phandle_args parent_args;
209 irq_hw_number_t hwirq;
158 int i; 210 int i;
159 211
160 np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-gpc"); 212 if (args->args_count != 3)
161 gpc_base = of_iomap(np, 0); 213 return -EINVAL; /* Not GIC compliant */
162 WARN_ON(!gpc_base); 214 if (args->args[0] != 0)
215 return -EINVAL; /* No PPI should point to this domain */
216
217 hwirq = args->args[1];
218 if (hwirq >= GPC_MAX_IRQS)
219 return -EINVAL; /* Can't deal with this */
220
221 for (i = 0; i < nr_irqs; i++)
222 irq_domain_set_hwirq_and_chip(domain, irq + i, hwirq + i,
223 &imx_gpc_chip, NULL);
224
225 parent_args = *args;
226 parent_args.np = domain->parent->of_node;
227 return irq_domain_alloc_irqs_parent(domain, irq, nr_irqs, &parent_args);
228}
229
230static struct irq_domain_ops imx_gpc_domain_ops = {
231 .xlate = imx_gpc_domain_xlate,
232 .alloc = imx_gpc_domain_alloc,
233 .free = irq_domain_free_irqs_common,
234};
235
236static int __init imx_gpc_init(struct device_node *node,
237 struct device_node *parent)
238{
239 struct irq_domain *parent_domain, *domain;
240 int i;
241
242 if (!parent) {
243 pr_err("%s: no parent, giving up\n", node->full_name);
244 return -ENODEV;
245 }
246
247 parent_domain = irq_find_host(parent);
248 if (!parent_domain) {
249 pr_err("%s: unable to obtain parent domain\n", node->full_name);
250 return -ENXIO;
251 }
252
253 gpc_base = of_iomap(node, 0);
254 if (WARN_ON(!gpc_base))
255 return -ENOMEM;
256
257 domain = irq_domain_add_hierarchy(parent_domain, 0, GPC_MAX_IRQS,
258 node, &imx_gpc_domain_ops,
259 NULL);
260 if (!domain) {
261 iounmap(gpc_base);
262 return -ENOMEM;
263 }
163 264
164 /* Initially mask all interrupts */ 265 /* Initially mask all interrupts */
165 for (i = 0; i < IMR_NUM; i++) 266 for (i = 0; i < IMR_NUM; i++)
166 writel_relaxed(~0, gpc_base + GPC_IMR1 + i * 4); 267 writel_relaxed(~0, gpc_base + GPC_IMR1 + i * 4);
167 268
168 /* Register GPC as the secondary interrupt controller behind GIC */ 269 return 0;
169 gic_arch_extn.irq_mask = imx_gpc_irq_mask; 270}
170 gic_arch_extn.irq_unmask = imx_gpc_irq_unmask; 271
171 gic_arch_extn.irq_set_wake = imx_gpc_irq_set_wake; 272/*
273 * We cannot use the IRQCHIP_DECLARE macro that lives in
274 * drivers/irqchip, so we're forced to roll our own. Not very nice.
275 */
276OF_DECLARE_2(irqchip, imx_gpc, "fsl,imx6q-gpc", imx_gpc_init);
277
278void __init imx_gpc_check_dt(void)
279{
280 struct device_node *np;
281
282 np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-gpc");
283 if (WARN_ON(!np ||
284 !of_find_property(np, "interrupt-controller", NULL)))
285 pr_warn("Outdated DT detected, system is about to crash!!!\n");
286}
287
288#ifdef CONFIG_PM_GENERIC_DOMAINS
289
290static void _imx6q_pm_pu_power_off(struct generic_pm_domain *genpd)
291{
292 int iso, iso2sw;
293 u32 val;
294
295 /* Read ISO and ISO2SW power down delays */
296 val = readl_relaxed(gpc_base + GPC_PGC_GPU_PDNSCR);
297 iso = val & 0x3f;
298 iso2sw = (val >> 8) & 0x3f;
299
300 /* Gate off PU domain when GPU/VPU when powered down */
301 writel_relaxed(0x1, gpc_base + GPC_PGC_GPU_PDN);
302
303 /* Request GPC to power down GPU/VPU */
304 val = readl_relaxed(gpc_base + GPC_CNTR);
305 val |= GPU_VPU_PDN_REQ;
306 writel_relaxed(val, gpc_base + GPC_CNTR);
307
308 /* Wait ISO + ISO2SW IPG clock cycles */
309 ndelay((iso + iso2sw) * 1000 / 66);
310}
311
312static int imx6q_pm_pu_power_off(struct generic_pm_domain *genpd)
313{
314 struct pu_domain *pu = container_of(genpd, struct pu_domain, base);
315
316 _imx6q_pm_pu_power_off(genpd);
317
318 if (pu->reg)
319 regulator_disable(pu->reg);
320
321 return 0;
322}
323
324static int imx6q_pm_pu_power_on(struct generic_pm_domain *genpd)
325{
326 struct pu_domain *pu = container_of(genpd, struct pu_domain, base);
327 int i, ret, sw, sw2iso;
328 u32 val;
329
330 if (pu->reg)
331 ret = regulator_enable(pu->reg);
332 if (pu->reg && ret) {
333 pr_err("%s: failed to enable regulator: %d\n", __func__, ret);
334 return ret;
335 }
336
337 /* Enable reset clocks for all devices in the PU domain */
338 for (i = 0; i < pu->num_clks; i++)
339 clk_prepare_enable(pu->clk[i]);
340
341 /* Gate off PU domain when GPU/VPU when powered down */
342 writel_relaxed(0x1, gpc_base + GPC_PGC_GPU_PDN);
343
344 /* Read ISO and ISO2SW power down delays */
345 val = readl_relaxed(gpc_base + GPC_PGC_GPU_PUPSCR);
346 sw = val & 0x3f;
347 sw2iso = (val >> 8) & 0x3f;
348
349 /* Request GPC to power up GPU/VPU */
350 val = readl_relaxed(gpc_base + GPC_CNTR);
351 val |= GPU_VPU_PUP_REQ;
352 writel_relaxed(val, gpc_base + GPC_CNTR);
353
354 /* Wait ISO + ISO2SW IPG clock cycles */
355 ndelay((sw + sw2iso) * 1000 / 66);
356
357 /* Disable reset clocks for all devices in the PU domain */
358 for (i = 0; i < pu->num_clks; i++)
359 clk_disable_unprepare(pu->clk[i]);
360
361 return 0;
362}
363
364static struct generic_pm_domain imx6q_arm_domain = {
365 .name = "ARM",
366};
367
368static struct pu_domain imx6q_pu_domain = {
369 .base = {
370 .name = "PU",
371 .power_off = imx6q_pm_pu_power_off,
372 .power_on = imx6q_pm_pu_power_on,
373 .power_off_latency_ns = 25000,
374 .power_on_latency_ns = 2000000,
375 },
376};
377
378static struct generic_pm_domain imx6sl_display_domain = {
379 .name = "DISPLAY",
380};
381
382static struct generic_pm_domain *imx_gpc_domains[] = {
383 &imx6q_arm_domain,
384 &imx6q_pu_domain.base,
385 &imx6sl_display_domain,
386};
387
388static struct genpd_onecell_data imx_gpc_onecell_data = {
389 .domains = imx_gpc_domains,
390 .num_domains = ARRAY_SIZE(imx_gpc_domains),
391};
392
393static int imx_gpc_genpd_init(struct device *dev, struct regulator *pu_reg)
394{
395 struct clk *clk;
396 bool is_off;
397 int i;
398
399 imx6q_pu_domain.reg = pu_reg;
400
401 for (i = 0; ; i++) {
402 clk = of_clk_get(dev->of_node, i);
403 if (IS_ERR(clk))
404 break;
405 if (i >= GPC_CLK_MAX) {
406 dev_err(dev, "more than %d clocks\n", GPC_CLK_MAX);
407 goto clk_err;
408 }
409 imx6q_pu_domain.clk[i] = clk;
410 }
411 imx6q_pu_domain.num_clks = i;
412
413 is_off = IS_ENABLED(CONFIG_PM);
414 if (is_off) {
415 _imx6q_pm_pu_power_off(&imx6q_pu_domain.base);
416 } else {
417 /*
418 * Enable power if compiled without CONFIG_PM in case the
419 * bootloader disabled it.
420 */
421 imx6q_pm_pu_power_on(&imx6q_pu_domain.base);
422 }
423
424 pm_genpd_init(&imx6q_pu_domain.base, NULL, is_off);
425 return of_genpd_add_provider_onecell(dev->of_node,
426 &imx_gpc_onecell_data);
427
428clk_err:
429 while (i--)
430 clk_put(imx6q_pu_domain.clk[i]);
431 return -EINVAL;
432}
433
434#else
435static inline int imx_gpc_genpd_init(struct device *dev, struct regulator *reg)
436{
437 return 0;
438}
439#endif /* CONFIG_PM_GENERIC_DOMAINS */
440
441static int imx_gpc_probe(struct platform_device *pdev)
442{
443 struct regulator *pu_reg;
444 int ret;
445
446 pu_reg = devm_regulator_get_optional(&pdev->dev, "pu");
447 if (PTR_ERR(pu_reg) == -ENODEV)
448 pu_reg = NULL;
449 if (IS_ERR(pu_reg)) {
450 ret = PTR_ERR(pu_reg);
451 dev_err(&pdev->dev, "failed to get pu regulator: %d\n", ret);
452 return ret;
453 }
454
455 return imx_gpc_genpd_init(&pdev->dev, pu_reg);
456}
457
458static const struct of_device_id imx_gpc_dt_ids[] = {
459 { .compatible = "fsl,imx6q-gpc" },
460 { .compatible = "fsl,imx6sl-gpc" },
461 { }
462};
463
464static struct platform_driver imx_gpc_driver = {
465 .driver = {
466 .name = "imx-gpc",
467 .owner = THIS_MODULE,
468 .of_match_table = imx_gpc_dt_ids,
469 },
470 .probe = imx_gpc_probe,
471};
472
473static int __init imx_pgc_init(void)
474{
475 return platform_driver_register(&imx_gpc_driver);
172} 476}
477subsys_initcall(imx_pgc_init);
diff --git a/arch/arm/mach-imx/hardware.h b/arch/arm/mach-imx/hardware.h
index 66b2b564c463..76af2c03c241 100644
--- a/arch/arm/mach-imx/hardware.h
+++ b/arch/arm/mach-imx/hardware.h
@@ -112,7 +112,6 @@
112#include "mx21.h" 112#include "mx21.h"
113#include "mx27.h" 113#include "mx27.h"
114#include "mx1.h" 114#include "mx1.h"
115#include "mx25.h"
116 115
117#define imx_map_entry(soc, name, _type) { \ 116#define imx_map_entry(soc, name, _type) { \
118 .virtual = soc ## _IO_P2V(soc ## _ ## name ## _BASE_ADDR), \ 117 .virtual = soc ## _IO_P2V(soc ## _ ## name ## _BASE_ADDR), \
diff --git a/arch/arm/mach-imx/iomux-mx25.h b/arch/arm/mach-imx/iomux-mx25.h
deleted file mode 100644
index be51e838375c..000000000000
--- a/arch/arm/mach-imx/iomux-mx25.h
+++ /dev/null
@@ -1,524 +0,0 @@
1/*
2 * arch/arm/plat-mxc/include/mach/iomux-mx25.h
3 *
4 * Copyright (C) 2009 by Lothar Wassmann <LW@KARO-electronics.de>
5 *
6 * based on arch/arm/mach-mx25/mx25_pins.h
7 * Copyright 2008 Freescale Semiconductor, Inc. All Rights Reserved.
8 * and
9 * arch/arm/plat-mxc/include/mach/iomux-mx35.h
10 * Copyright (C) 2009 by Jan Weitzel Phytec Messtechnik GmbH <armlinux@phytec.de>
11 *
12 * The code contained herein is licensed under the GNU General Public
13 * License. You may obtain a copy of the GNU General Public License
14 * Version 2 or later at the following locations:
15 *
16 * http://www.opensource.org/licenses/gpl-license.html
17 * http://www.gnu.org/copyleft/gpl.html
18 */
19#ifndef __MACH_IOMUX_MX25_H__
20#define __MACH_IOMUX_MX25_H__
21
22#include "iomux-v3.h"
23
24/*
25 * IOMUX/PAD Bit field definitions
26 */
27
28#define MX25_PAD_A10__A10 IOMUX_PAD(0x000, 0x008, 0x00, 0, 0, NO_PAD_CTRL)
29#define MX25_PAD_A10__GPIO_4_0 IOMUX_PAD(0x000, 0x008, 0x05, 0, 0, NO_PAD_CTRL)
30
31#define MX25_PAD_A13__A13 IOMUX_PAD(0x22C, 0x00c, 0x00, 0, 0, NO_PAD_CTRL)
32#define MX25_PAD_A13__GPIO_4_1 IOMUX_PAD(0x22C, 0x00c, 0x05, 0, 0, NO_PAD_CTRL)
33
34#define MX25_PAD_A14__A14 IOMUX_PAD(0x230, 0x010, 0x10, 0, 0, NO_PAD_CTRL)
35#define MX25_PAD_A14__GPIO_2_0 IOMUX_PAD(0x230, 0x010, 0x15, 0, 0, NO_PAD_CTRL)
36
37#define MX25_PAD_A15__A15 IOMUX_PAD(0x234, 0x014, 0x10, 0, 0, NO_PAD_CTRL)
38#define MX25_PAD_A15__GPIO_2_1 IOMUX_PAD(0x234, 0x014, 0x15, 0, 0, NO_PAD_CTRL)
39
40#define MX25_PAD_A16__A16 IOMUX_PAD(0x000, 0x018, 0x10, 0, 0, NO_PAD_CTRL)
41#define MX25_PAD_A16__GPIO_2_2 IOMUX_PAD(0x000, 0x018, 0x15, 0, 0, NO_PAD_CTRL)
42
43#define MX25_PAD_A17__A17 IOMUX_PAD(0x238, 0x01c, 0x10, 0, 0, NO_PAD_CTRL)
44#define MX25_PAD_A17__GPIO_2_3 IOMUX_PAD(0x238, 0x01c, 0x15, 0, 0, NO_PAD_CTRL)
45
46#define MX25_PAD_A18__A18 IOMUX_PAD(0x23c, 0x020, 0x10, 0, 0, NO_PAD_CTRL)
47#define MX25_PAD_A18__GPIO_2_4 IOMUX_PAD(0x23c, 0x020, 0x15, 0, 0, NO_PAD_CTRL)
48#define MX25_PAD_A18__FEC_COL IOMUX_PAD(0x23c, 0x020, 0x17, 0x504, 0, NO_PAD_CTRL)
49
50#define MX25_PAD_A19__A19 IOMUX_PAD(0x240, 0x024, 0x10, 0, 0, NO_PAD_CTRL)
51#define MX25_PAD_A19__FEC_RX_ER IOMUX_PAD(0x240, 0x024, 0x17, 0x518, 0, NO_PAD_CTRL)
52#define MX25_PAD_A19__GPIO_2_5 IOMUX_PAD(0x240, 0x024, 0x15, 0, 0, NO_PAD_CTRL)
53
54#define MX25_PAD_A20__A20 IOMUX_PAD(0x244, 0x028, 0x10, 0, 0, NO_PAD_CTRL)
55#define MX25_PAD_A20__GPIO_2_6 IOMUX_PAD(0x244, 0x028, 0x15, 0, 0, NO_PAD_CTRL)
56#define MX25_PAD_A20__FEC_RDATA2 IOMUX_PAD(0x244, 0x028, 0x17, 0x50c, 0, NO_PAD_CTRL)
57
58#define MX25_PAD_A21__A21 IOMUX_PAD(0x248, 0x02c, 0x10, 0, 0, NO_PAD_CTRL)
59#define MX25_PAD_A21__GPIO_2_7 IOMUX_PAD(0x248, 0x02c, 0x15, 0, 0, NO_PAD_CTRL)
60#define MX25_PAD_A21__FEC_RDATA3 IOMUX_PAD(0x248, 0x02c, 0x17, 0x510, 0, NO_PAD_CTRL)
61
62#define MX25_PAD_A22__A22 IOMUX_PAD(0x000, 0x030, 0x10, 0, 0, NO_PAD_CTRL)
63#define MX25_PAD_A22__GPIO_2_8 IOMUX_PAD(0x000, 0x030, 0x15, 0, 0, NO_PAD_CTRL)
64
65#define MX25_PAD_A23__A23 IOMUX_PAD(0x24c, 0x034, 0x10, 0, 0, NO_PAD_CTRL)
66#define MX25_PAD_A23__GPIO_2_9 IOMUX_PAD(0x24c, 0x034, 0x15, 0, 0, NO_PAD_CTRL)
67
68#define MX25_PAD_A24__A24 IOMUX_PAD(0x250, 0x038, 0x10, 0, 0, NO_PAD_CTRL)
69#define MX25_PAD_A24__GPIO_2_10 IOMUX_PAD(0x250, 0x038, 0x15, 0, 0, NO_PAD_CTRL)
70#define MX25_PAD_A24__FEC_RX_CLK IOMUX_PAD(0x250, 0x038, 0x17, 0x514, 0, NO_PAD_CTRL)
71
72#define MX25_PAD_A25__A25 IOMUX_PAD(0x254, 0x03c, 0x10, 0, 0, NO_PAD_CTRL)
73#define MX25_PAD_A25__GPIO_2_11 IOMUX_PAD(0x254, 0x03c, 0x15, 0, 0, NO_PAD_CTRL)
74#define MX25_PAD_A25__FEC_CRS IOMUX_PAD(0x254, 0x03c, 0x17, 0x508, 0, NO_PAD_CTRL)
75
76#define MX25_PAD_EB0__EB0 IOMUX_PAD(0x258, 0x040, 0x10, 0, 0, NO_PAD_CTRL)
77#define MX25_PAD_EB0__AUD4_TXD IOMUX_PAD(0x258, 0x040, 0x14, 0x464, 0, NO_PAD_CTRL)
78#define MX25_PAD_EB0__GPIO_2_12 IOMUX_PAD(0x258, 0x040, 0x15, 0, 0, NO_PAD_CTRL)
79
80#define MX25_PAD_EB1__EB1 IOMUX_PAD(0x25c, 0x044, 0x10, 0, 0, NO_PAD_CTRL)
81#define MX25_PAD_EB1__AUD4_RXD IOMUX_PAD(0x25c, 0x044, 0x14, 0x460, 0, NO_PAD_CTRL)
82#define MX25_PAD_EB1__GPIO_2_13 IOMUX_PAD(0x25c, 0x044, 0x15, 0, 0, NO_PAD_CTRL)
83
84#define MX25_PAD_OE__OE IOMUX_PAD(0x260, 0x048, 0x10, 0, 0, NO_PAD_CTRL)
85#define MX25_PAD_OE__AUD4_TXC IOMUX_PAD(0x260, 0x048, 0x14, 0, 0, NO_PAD_CTRL)
86#define MX25_PAD_OE__GPIO_2_14 IOMUX_PAD(0x260, 0x048, 0x15, 0, 0, NO_PAD_CTRL)
87
88#define MX25_PAD_CS0__CS0 IOMUX_PAD(0x000, 0x04c, 0x00, 0, 0, NO_PAD_CTRL)
89#define MX25_PAD_CS0__GPIO_4_2 IOMUX_PAD(0x000, 0x04c, 0x05, 0, 0, NO_PAD_CTRL)
90
91#define MX25_PAD_CS1__CS1 IOMUX_PAD(0x000, 0x050, 0x00, 0, 0, NO_PAD_CTRL)
92#define MX25_PAD_CS1__NF_CE3 IOMUX_PAD(0x000, 0x050, 0x01, 0, 0, NO_PAD_CTRL)
93#define MX25_PAD_CS1__GPIO_4_3 IOMUX_PAD(0x000, 0x050, 0x05, 0, 0, NO_PAD_CTRL)
94
95#define MX25_PAD_CS4__CS4 IOMUX_PAD(0x264, 0x054, 0x10, 0, 0, NO_PAD_CTRL)
96#define MX25_PAD_CS4__NF_CE1 IOMUX_PAD(0x264, 0x054, 0x01, 0, 0, NO_PAD_CTRL)
97#define MX25_PAD_CS4__UART5_CTS IOMUX_PAD(0x264, 0x054, 0x13, 0, 0, NO_PAD_CTRL)
98#define MX25_PAD_CS4__GPIO_3_20 IOMUX_PAD(0x264, 0x054, 0x15, 0, 0, NO_PAD_CTRL)
99
100#define MX25_PAD_CS5__CS5 IOMUX_PAD(0x268, 0x058, 0x10, 0, 0, NO_PAD_CTRL)
101#define MX25_PAD_CS5__NF_CE2 IOMUX_PAD(0x268, 0x058, 0x01, 0, 0, NO_PAD_CTRL)
102#define MX25_PAD_CS5__UART5_RTS IOMUX_PAD(0x268, 0x058, 0x13, 0x574, 0, NO_PAD_CTRL)
103#define MX25_PAD_CS5__GPIO_3_21 IOMUX_PAD(0x268, 0x058, 0x15, 0, 0, NO_PAD_CTRL)
104
105#define MX25_PAD_NF_CE0__NF_CE0 IOMUX_PAD(0x26c, 0x05c, 0x10, 0, 0, NO_PAD_CTRL)
106#define MX25_PAD_NF_CE0__GPIO_3_22 IOMUX_PAD(0x26c, 0x05c, 0x15, 0, 0, NO_PAD_CTRL)
107
108#define MX25_PAD_ECB__ECB IOMUX_PAD(0x270, 0x060, 0x10, 0, 0, NO_PAD_CTRL)
109#define MX25_PAD_ECB__UART5_TXD_MUX IOMUX_PAD(0x270, 0x060, 0x13, 0, 0, NO_PAD_CTRL)
110#define MX25_PAD_ECB__GPIO_3_23 IOMUX_PAD(0x270, 0x060, 0x15, 0, 0, NO_PAD_CTRL)
111
112#define MX25_PAD_LBA__LBA IOMUX_PAD(0x274, 0x064, 0x10, 0, 0, NO_PAD_CTRL)
113#define MX25_PAD_LBA__UART5_RXD_MUX IOMUX_PAD(0x274, 0x064, 0x13, 0x578, 0, NO_PAD_CTRL)
114#define MX25_PAD_LBA__GPIO_3_24 IOMUX_PAD(0x274, 0x064, 0x15, 0, 0, NO_PAD_CTRL)
115
116#define MX25_PAD_BCLK__BCLK IOMUX_PAD(0x000, 0x068, 0x00, 0, 0, NO_PAD_CTRL)
117#define MX25_PAD_BCLK__GPIO_4_4 IOMUX_PAD(0x000, 0x068, 0x05, 0, 0, NO_PAD_CTRL)
118
119#define MX25_PAD_RW__RW IOMUX_PAD(0x278, 0x06c, 0x10, 0, 0, NO_PAD_CTRL)
120#define MX25_PAD_RW__AUD4_TXFS IOMUX_PAD(0x278, 0x06c, 0x14, 0x474, 0, NO_PAD_CTRL)
121#define MX25_PAD_RW__GPIO_3_25 IOMUX_PAD(0x278, 0x06c, 0x15, 0, 0, NO_PAD_CTRL)
122
123#define MX25_PAD_NFWE_B__NFWE_B IOMUX_PAD(0x000, 0x070, 0x10, 0, 0, NO_PAD_CTRL)
124#define MX25_PAD_NFWE_B__GPIO_3_26 IOMUX_PAD(0x000, 0x070, 0x15, 0, 0, NO_PAD_CTRL)
125
126#define MX25_PAD_NFRE_B__NFRE_B IOMUX_PAD(0x000, 0x074, 0x10, 0, 0, NO_PAD_CTRL)
127#define MX25_PAD_NFRE_B__GPIO_3_27 IOMUX_PAD(0x000, 0x074, 0x15, 0, 0, NO_PAD_CTRL)
128
129#define MX25_PAD_NFALE__NFALE IOMUX_PAD(0x000, 0x078, 0x10, 0, 0, NO_PAD_CTRL)
130#define MX25_PAD_NFALE__GPIO_3_28 IOMUX_PAD(0x000, 0x078, 0x15, 0, 0, NO_PAD_CTRL)
131
132#define MX25_PAD_NFCLE__NFCLE IOMUX_PAD(0x000, 0x07c, 0x10, 0, 0, NO_PAD_CTRL)
133#define MX25_PAD_NFCLE__GPIO_3_29 IOMUX_PAD(0x000, 0x07c, 0x15, 0, 0, NO_PAD_CTRL)
134
135#define MX25_PAD_NFWP_B__NFWP_B IOMUX_PAD(0x000, 0x080, 0x10, 0, 0, NO_PAD_CTRL)
136#define MX25_PAD_NFWP_B__GPIO_3_30 IOMUX_PAD(0x000, 0x080, 0x15, 0, 0, NO_PAD_CTRL)
137
138#define MX25_PAD_NFRB__NFRB IOMUX_PAD(0x27c, 0x084, 0x10, 0, 0, PAD_CTL_PKE)
139#define MX25_PAD_NFRB__GPIO_3_31 IOMUX_PAD(0x27c, 0x084, 0x15, 0, 0, NO_PAD_CTRL)
140
141#define MX25_PAD_D15__D15 IOMUX_PAD(0x280, 0x088, 0x00, 0, 0, NO_PAD_CTRL)
142#define MX25_PAD_D15__LD16 IOMUX_PAD(0x280, 0x088, 0x01, 0, 0, PAD_CTL_SRE_FAST)
143#define MX25_PAD_D15__GPIO_4_5 IOMUX_PAD(0x280, 0x088, 0x05, 0, 0, NO_PAD_CTRL)
144
145#define MX25_PAD_D14__D14 IOMUX_PAD(0x284, 0x08c, 0x00, 0, 0, NO_PAD_CTRL)
146#define MX25_PAD_D14__LD17 IOMUX_PAD(0x284, 0x08c, 0x01, 0, 0, PAD_CTL_SRE_FAST)
147#define MX25_PAD_D14__GPIO_4_6 IOMUX_PAD(0x284, 0x08c, 0x05, 0, 0, NO_PAD_CTRL)
148
149#define MX25_PAD_D13__D13 IOMUX_PAD(0x288, 0x090, 0x00, 0, 0, NO_PAD_CTRL)
150#define MX25_PAD_D13__LD18 IOMUX_PAD(0x288, 0x090, 0x01, 0, 0, PAD_CTL_SRE_FAST)
151#define MX25_PAD_D13__GPIO_4_7 IOMUX_PAD(0x288, 0x090, 0x05, 0, 0, NO_PAD_CTRL)
152
153#define MX25_PAD_D12__D12 IOMUX_PAD(0x28c, 0x094, 0x00, 0, 0, NO_PAD_CTRL)
154#define MX25_PAD_D12__GPIO_4_8 IOMUX_PAD(0x28c, 0x094, 0x05, 0, 0, NO_PAD_CTRL)
155
156#define MX25_PAD_D11__D11 IOMUX_PAD(0x290, 0x098, 0x00, 0, 0, NO_PAD_CTRL)
157#define MX25_PAD_D11__GPIO_4_9 IOMUX_PAD(0x290, 0x098, 0x05, 0, 0, NO_PAD_CTRL)
158
159#define MX25_PAD_D10__D10 IOMUX_PAD(0x294, 0x09c, 0x00, 0, 0, NO_PAD_CTRL)
160#define MX25_PAD_D10__GPIO_4_10 IOMUX_PAD(0x294, 0x09c, 0x05, 0, 0, NO_PAD_CTRL)
161#define MX25_PAD_D10__USBOTG_OC IOMUX_PAD(0x294, 0x09c, 0x06, 0x57c, 0, PAD_CTL_PUS_100K_UP)
162
163#define MX25_PAD_D9__D9 IOMUX_PAD(0x298, 0x0a0, 0x00, 0, 0, NO_PAD_CTRL)
164#define MX25_PAD_D9__GPIO_4_11 IOMUX_PAD(0x298, 0x0a0, 0x05, 0, 0, NO_PAD_CTRL)
165#define MX25_PAD_D9__USBH2_PWR IOMUX_PAD(0x298, 0x0a0, 0x06, 0, 0, PAD_CTL_PKE)
166
167#define MX25_PAD_D8__D8 IOMUX_PAD(0x29c, 0x0a4, 0x00, 0, 0, NO_PAD_CTRL)
168#define MX25_PAD_D8__GPIO_4_12 IOMUX_PAD(0x29c, 0x0a4, 0x05, 0, 0, NO_PAD_CTRL)
169#define MX25_PAD_D8__USBH2_OC IOMUX_PAD(0x29c, 0x0a4, 0x06, 0x580, 0, PAD_CTL_PUS_100K_UP)
170
171#define MX25_PAD_D7__D7 IOMUX_PAD(0x2a0, 0x0a8, 0x00, 0, 0, NO_PAD_CTRL)
172#define MX25_PAD_D7__GPIO_4_13 IOMUX_PAD(0x2a0, 0x0a8, 0x05, 0, 0, NO_PAD_CTRL)
173
174#define MX25_PAD_D6__D6 IOMUX_PAD(0x2a4, 0x0ac, 0x00, 0, 0, NO_PAD_CTRL)
175#define MX25_PAD_D6__GPIO_4_14 IOMUX_PAD(0x2a4, 0x0ac, 0x05, 0, 0, NO_PAD_CTRL)
176
177#define MX25_PAD_D5__D5 IOMUX_PAD(0x2a8, 0x0b0, 0x00, 0, 0, NO_PAD_CTRL)
178#define MX25_PAD_D5__GPIO_4_15 IOMUX_PAD(0x2a8, 0x0b0, 0x05, 0, 0, NO_PAD_CTRL)
179
180#define MX25_PAD_D4__D4 IOMUX_PAD(0x2ac, 0x0b4, 0x00, 0, 0, NO_PAD_CTRL)
181#define MX25_PAD_D4__GPIO_4_16 IOMUX_PAD(0x2ac, 0x0b4, 0x05, 0, 0, NO_PAD_CTRL)
182
183#define MX25_PAD_D3__D3 IOMUX_PAD(0x2b0, 0x0b8, 0x00, 0, 0, NO_PAD_CTRL)
184#define MX25_PAD_D3__GPIO_4_17 IOMUX_PAD(0x2b0, 0x0b8, 0x05, 0, 0, NO_PAD_CTRL)
185
186#define MX25_PAD_D2__D2 IOMUX_PAD(0x2b4, 0x0bc, 0x00, 0, 0, NO_PAD_CTRL)
187#define MX25_PAD_D2__GPIO_4_18 IOMUX_PAD(0x2b4, 0x0bc, 0x05, 0, 0, NO_PAD_CTRL)
188
189#define MX25_PAD_D1__D1 IOMUX_PAD(0x2b8, 0x0c0, 0x00, 0, 0, NO_PAD_CTRL)
190#define MX25_PAD_D1__GPIO_4_19 IOMUX_PAD(0x2b8, 0x0c0, 0x05, 0, 0, NO_PAD_CTRL)
191
192#define MX25_PAD_D0__D0 IOMUX_PAD(0x2bc, 0x0c4, 0x00, 0, 0, NO_PAD_CTRL)
193#define MX25_PAD_D0__GPIO_4_20 IOMUX_PAD(0x2bc, 0x0c4, 0x05, 0, 0, NO_PAD_CTRL)
194
195#define MX25_PAD_LD0__LD0 IOMUX_PAD(0x2c0, 0x0c8, 0x10, 0, 0, PAD_CTL_SRE_FAST)
196#define MX25_PAD_LD0__CSI_D0 IOMUX_PAD(0x2c0, 0x0c8, 0x12, 0x488, 0, NO_PAD_CTRL)
197#define MX25_PAD_LD0__GPIO_2_15 IOMUX_PAD(0x2c0, 0x0c8, 0x15, 0, 0, NO_PAD_CTRL)
198
199#define MX25_PAD_LD1__LD1 IOMUX_PAD(0x2c4, 0x0cc, 0x10, 0, 0, PAD_CTL_SRE_FAST)
200#define MX25_PAD_LD1__CSI_D1 IOMUX_PAD(0x2c4, 0x0cc, 0x12, 0x48c, 0, NO_PAD_CTRL)
201#define MX25_PAD_LD1__GPIO_2_16 IOMUX_PAD(0x2c4, 0x0cc, 0x15, 0, 0, NO_PAD_CTRL)
202
203#define MX25_PAD_LD2__LD2 IOMUX_PAD(0x2c8, 0x0d0, 0x10, 0, 0, PAD_CTL_SRE_FAST)
204#define MX25_PAD_LD2__GPIO_2_17 IOMUX_PAD(0x2c8, 0x0d0, 0x15, 0, 0, NO_PAD_CTRL)
205
206#define MX25_PAD_LD3__LD3 IOMUX_PAD(0x2cc, 0x0d4, 0x10, 0, 0, PAD_CTL_SRE_FAST)
207#define MX25_PAD_LD3__GPIO_2_18 IOMUX_PAD(0x2cc, 0x0d4, 0x15, 0, 0, NO_PAD_CTRL)
208
209#define MX25_PAD_LD4__LD4 IOMUX_PAD(0x2d0, 0x0d8, 0x10, 0, 0, PAD_CTL_SRE_FAST)
210#define MX25_PAD_LD4__GPIO_2_19 IOMUX_PAD(0x2d0, 0x0d8, 0x15, 0, 0, NO_PAD_CTRL)
211
212#define MX25_PAD_LD5__LD5 IOMUX_PAD(0x2d4, 0x0dc, 0x10, 0, 0, PAD_CTL_SRE_FAST)
213#define MX25_PAD_LD5__GPIO_1_19 IOMUX_PAD(0x2d4, 0x0dc, 0x15, 0, 0, NO_PAD_CTRL)
214
215#define MX25_PAD_LD6__LD6 IOMUX_PAD(0x2d8, 0x0e0, 0x10, 0, 0, PAD_CTL_SRE_FAST)
216#define MX25_PAD_LD6__GPIO_1_20 IOMUX_PAD(0x2d8, 0x0e0, 0x15, 0, 0, NO_PAD_CTRL)
217
218#define MX25_PAD_LD7__LD7 IOMUX_PAD(0x2dc, 0x0e4, 0x10, 0, 0, PAD_CTL_SRE_FAST)
219#define MX25_PAD_LD7__GPIO_1_21 IOMUX_PAD(0x2dc, 0x0e4, 0x15, 0, 0, NO_PAD_CTRL)
220
221#define MX25_PAD_LD8__LD8 IOMUX_PAD(0x2e0, 0x0e8, 0x10, 0, 0, PAD_CTL_SRE_FAST)
222#define MX25_PAD_LD8__FEC_TX_ERR IOMUX_PAD(0x2e0, 0x0e8, 0x15, 0, 0, NO_PAD_CTRL)
223
224#define MX25_PAD_LD9__LD9 IOMUX_PAD(0x2e4, 0x0ec, 0x10, 0, 0, PAD_CTL_SRE_FAST)
225#define MX25_PAD_LD9__FEC_COL IOMUX_PAD(0x2e4, 0x0ec, 0x15, 0x504, 1, NO_PAD_CTRL)
226
227#define MX25_PAD_LD10__LD10 IOMUX_PAD(0x2e8, 0x0f0, 0x10, 0, 0, PAD_CTL_SRE_FAST)
228#define MX25_PAD_LD10__FEC_RX_ER IOMUX_PAD(0x2e8, 0x0f0, 0x15, 0x518, 1, NO_PAD_CTRL)
229
230#define MX25_PAD_LD11__LD11 IOMUX_PAD(0x2ec, 0x0f4, 0x10, 0, 0, PAD_CTL_SRE_FAST)
231#define MX25_PAD_LD11__FEC_RDATA2 IOMUX_PAD(0x2ec, 0x0f4, 0x15, 0x50c, 1, NO_PAD_CTRL)
232
233#define MX25_PAD_LD12__LD12 IOMUX_PAD(0x2f0, 0x0f8, 0x10, 0, 0, PAD_CTL_SRE_FAST)
234#define MX25_PAD_LD12__FEC_RDATA3 IOMUX_PAD(0x2f0, 0x0f8, 0x15, 0x510, 1, NO_PAD_CTRL)
235
236#define MX25_PAD_LD13__LD13 IOMUX_PAD(0x2f4, 0x0fc, 0x10, 0, 0, PAD_CTL_SRE_FAST)
237#define MX25_PAD_LD13__FEC_TDATA2 IOMUX_PAD(0x2f4, 0x0fc, 0x15, 0, 0, NO_PAD_CTRL)
238
239#define MX25_PAD_LD14__LD14 IOMUX_PAD(0x2f8, 0x100, 0x10, 0, 0, PAD_CTL_SRE_FAST)
240#define MX25_PAD_LD14__FEC_TDATA3 IOMUX_PAD(0x2f8, 0x100, 0x15, 0, 0, NO_PAD_CTRL)
241
242#define MX25_PAD_LD15__LD15 IOMUX_PAD(0x2fc, 0x104, 0x10, 0, 0, PAD_CTL_SRE_FAST)
243#define MX25_PAD_LD15__FEC_RX_CLK IOMUX_PAD(0x2fc, 0x104, 0x15, 0x514, 1, NO_PAD_CTRL)
244
245#define MX25_PAD_HSYNC__HSYNC IOMUX_PAD(0x300, 0x108, 0x10, 0, 0, NO_PAD_CTRL)
246#define MX25_PAD_HSYNC__GPIO_1_22 IOMUX_PAD(0x300, 0x108, 0x15, 0, 0, NO_PAD_CTRL)
247
248#define MX25_PAD_VSYNC__VSYNC IOMUX_PAD(0x304, 0x10c, 0x10, 0, 0, NO_PAD_CTRL)
249#define MX25_PAD_VSYNC__GPIO_1_23 IOMUX_PAD(0x304, 0x10c, 0x15, 0, 0, NO_PAD_CTRL)
250
251#define MX25_PAD_LSCLK__LSCLK IOMUX_PAD(0x308, 0x110, 0x10, 0, 0, NO_PAD_CTRL)
252#define MX25_PAD_LSCLK__GPIO_1_24 IOMUX_PAD(0x308, 0x110, 0x15, 0, 0, NO_PAD_CTRL)
253
254#define MX25_PAD_OE_ACD__OE_ACD IOMUX_PAD(0x30c, 0x114, 0x10, 0, 0, NO_PAD_CTRL)
255#define MX25_PAD_OE_ACD__GPIO_1_25 IOMUX_PAD(0x30c, 0x114, 0x15, 0, 0, NO_PAD_CTRL)
256
257#define MX25_PAD_CONTRAST__CONTRAST IOMUX_PAD(0x310, 0x118, 0x10, 0, 0, NO_PAD_CTRL)
258#define MX25_PAD_CONTRAST__PWM4_PWMO IOMUX_PAD(0x310, 0x118, 0x14, 0, 0, NO_PAD_CTRL)
259#define MX25_PAD_CONTRAST__FEC_CRS IOMUX_PAD(0x310, 0x118, 0x15, 0x508, 1, NO_PAD_CTRL)
260
261#define MX25_PAD_PWM__PWM IOMUX_PAD(0x314, 0x11c, 0x10, 0, 0, NO_PAD_CTRL)
262#define MX25_PAD_PWM__GPIO_1_26 IOMUX_PAD(0x314, 0x11c, 0x15, 0, 0, NO_PAD_CTRL)
263#define MX25_PAD_PWM__USBH2_OC IOMUX_PAD(0x314, 0x11c, 0x16, 0x580, 1, PAD_CTL_PUS_100K_UP)
264
265#define MX25_PAD_CSI_D2__CSI_D2 IOMUX_PAD(0x318, 0x120, 0x10, 0, 0, NO_PAD_CTRL)
266#define MX25_PAD_CSI_D2__UART5_RXD_MUX IOMUX_PAD(0x318, 0x120, 0x11, 0x578, 1, NO_PAD_CTRL)
267#define MX25_PAD_CSI_D2__GPIO_1_27 IOMUX_PAD(0x318, 0x120, 0x15, 0, 0, NO_PAD_CTRL)
268#define MX25_PAD_CSI_D2__CSPI3_MOSI IOMUX_PAD(0x318, 0x120, 0x17, 0, 0, NO_PAD_CTRL)
269
270#define MX25_PAD_CSI_D3__CSI_D3 IOMUX_PAD(0x31c, 0x124, 0x10, 0, 0, NO_PAD_CTRL)
271#define MX25_PAD_CSI_D3__GPIO_1_28 IOMUX_PAD(0x31c, 0x124, 0x15, 0, 0, NO_PAD_CTRL)
272#define MX25_PAD_CSI_D3__CSPI3_MISO IOMUX_PAD(0x31c, 0x124, 0x17, 0x4b4, 1, NO_PAD_CTRL)
273
274#define MX25_PAD_CSI_D4__CSI_D4 IOMUX_PAD(0x320, 0x128, 0x10, 0, 0, NO_PAD_CTRL)
275#define MX25_PAD_CSI_D4__UART5_RTS IOMUX_PAD(0x320, 0x128, 0x11, 0x574, 1, NO_PAD_CTRL)
276#define MX25_PAD_CSI_D4__GPIO_1_29 IOMUX_PAD(0x320, 0x128, 0x15, 0, 0, NO_PAD_CTRL)
277#define MX25_PAD_CSI_D4__CSPI3_SCLK IOMUX_PAD(0x320, 0x128, 0x17, 0, 0, NO_PAD_CTRL)
278
279#define MX25_PAD_CSI_D5__CSI_D5 IOMUX_PAD(0x324, 0x12c, 0x10, 0, 0, NO_PAD_CTRL)
280#define MX25_PAD_CSI_D5__GPIO_1_30 IOMUX_PAD(0x324, 0x12c, 0x15, 0, 0, NO_PAD_CTRL)
281#define MX25_PAD_CSI_D5__CSPI3_RDY IOMUX_PAD(0x324, 0x12c, 0x17, 0, 0, NO_PAD_CTRL)
282
283#define MX25_PAD_CSI_D6__CSI_D6 IOMUX_PAD(0x328, 0x130, 0x10, 0, 0, NO_PAD_CTRL)
284#define MX25_PAD_CSI_D6__GPIO_1_31 IOMUX_PAD(0x328, 0x130, 0x15, 0, 0, NO_PAD_CTRL)
285
286#define MX25_PAD_CSI_D7__CSI_D7 IOMUX_PAD(0x32c, 0x134, 0x10, 0, 0, NO_PAD_CTRL)
287#define MX25_PAD_CSI_D7__GPIO_1_6 IOMUX_PAD(0x32c, 0x134, 0x15, 0, 0, NO_PAD_CTRL)
288
289#define MX25_PAD_CSI_D8__CSI_D8 IOMUX_PAD(0x330, 0x138, 0x10, 0, 0, NO_PAD_CTRL)
290#define MX25_PAD_CSI_D8__GPIO_1_7 IOMUX_PAD(0x330, 0x138, 0x15, 0, 0, NO_PAD_CTRL)
291
292#define MX25_PAD_CSI_D9__CSI_D9 IOMUX_PAD(0x334, 0x13c, 0x10, 0, 0, NO_PAD_CTRL)
293#define MX25_PAD_CSI_D9__GPIO_4_21 IOMUX_PAD(0x334, 0x13c, 0x15, 0, 0, NO_PAD_CTRL)
294
295#define MX25_PAD_CSI_MCLK__CSI_MCLK IOMUX_PAD(0x338, 0x140, 0x10, 0, 0, NO_PAD_CTRL)
296#define MX25_PAD_CSI_MCLK__GPIO_1_8 IOMUX_PAD(0x338, 0x140, 0x15, 0, 0, NO_PAD_CTRL)
297
298#define MX25_PAD_CSI_VSYNC__CSI_VSYNC IOMUX_PAD(0x33c, 0x144, 0x10, 0, 0, NO_PAD_CTRL)
299#define MX25_PAD_CSI_VSYNC__GPIO_1_9 IOMUX_PAD(0x33c, 0x144, 0x15, 0, 0, NO_PAD_CTRL)
300
301#define MX25_PAD_CSI_HSYNC__CSI_HSYNC IOMUX_PAD(0x340, 0x148, 0x10, 0, 0, NO_PAD_CTRL)
302#define MX25_PAD_CSI_HSYNC__GPIO_1_10 IOMUX_PAD(0x340, 0x148, 0x15, 0, 0, NO_PAD_CTRL)
303
304#define MX25_PAD_CSI_PIXCLK__CSI_PIXCLK IOMUX_PAD(0x344, 0x14c, 0x10, 0, 0, NO_PAD_CTRL)
305#define MX25_PAD_CSI_PIXCLK__GPIO_1_11 IOMUX_PAD(0x344, 0x14c, 0x15, 0, 0, NO_PAD_CTRL)
306
307#define MX25_PAD_I2C1_CLK__I2C1_CLK IOMUX_PAD(0x348, 0x150, 0x10, 0, 0, NO_PAD_CTRL)
308#define MX25_PAD_I2C1_CLK__GPIO_1_12 IOMUX_PAD(0x348, 0x150, 0x15, 0, 0, NO_PAD_CTRL)
309
310#define MX25_PAD_I2C1_DAT__I2C1_DAT IOMUX_PAD(0x34c, 0x154, 0x10, 0, 0, NO_PAD_CTRL)
311#define MX25_PAD_I2C1_DAT__GPIO_1_13 IOMUX_PAD(0x34c, 0x154, 0x15, 0, 0, NO_PAD_CTRL)
312
313#define MX25_PAD_CSPI1_MOSI__CSPI1_MOSI IOMUX_PAD(0x350, 0x158, 0x10, 0, 0, NO_PAD_CTRL)
314#define MX25_PAD_CSPI1_MOSI__GPIO_1_14 IOMUX_PAD(0x350, 0x158, 0x15, 0, 0, NO_PAD_CTRL)
315
316#define MX25_PAD_CSPI1_MISO__CSPI1_MISO IOMUX_PAD(0x354, 0x15c, 0x10, 0, 0, NO_PAD_CTRL)
317#define MX25_PAD_CSPI1_MISO__GPIO_1_15 IOMUX_PAD(0x354, 0x15c, 0x15, 0, 0, NO_PAD_CTRL)
318
319#define MX25_PAD_CSPI1_SS0__CSPI1_SS0 IOMUX_PAD(0x358, 0x160, 0x10, 0, 0, NO_PAD_CTRL)
320#define MX25_PAD_CSPI1_SS0__GPIO_1_16 IOMUX_PAD(0x358, 0x160, 0x15, 0, 0, NO_PAD_CTRL)
321
322#define MX25_PAD_CSPI1_SS1__CSPI1_SS1 IOMUX_PAD(0x35c, 0x164, 0x10, 0, 0, NO_PAD_CTRL)
323#define MX25_PAD_CSPI1_SS1__GPIO_1_17 IOMUX_PAD(0x35c, 0x164, 0x15, 0, 0, NO_PAD_CTRL)
324
325#define MX25_PAD_CSPI1_SCLK__CSPI1_SCLK IOMUX_PAD(0x360, 0x168, 0x10, 0, 0, NO_PAD_CTRL)
326#define MX25_PAD_CSPI1_SCLK__GPIO_1_18 IOMUX_PAD(0x360, 0x168, 0x15, 0, 0, NO_PAD_CTRL)
327
328#define MX25_PAD_CSPI1_RDY__CSPI1_RDY IOMUX_PAD(0x364, 0x16c, 0x10, 0, 0, PAD_CTL_PKE)
329#define MX25_PAD_CSPI1_RDY__GPIO_2_22 IOMUX_PAD(0x364, 0x16c, 0x15, 0, 0, NO_PAD_CTRL)
330
331#define MX25_PAD_UART1_RXD__UART1_RXD IOMUX_PAD(0x368, 0x170, 0x10, 0, 0, PAD_CTL_PUS_100K_DOWN)
332#define MX25_PAD_UART1_RXD__GPIO_4_22 IOMUX_PAD(0x368, 0x170, 0x15, 0, 0, NO_PAD_CTRL)
333
334#define MX25_PAD_UART1_TXD__UART1_TXD IOMUX_PAD(0x36c, 0x174, 0x10, 0, 0, NO_PAD_CTRL)
335#define MX25_PAD_UART1_TXD__GPIO_4_23 IOMUX_PAD(0x36c, 0x174, 0x15, 0, 0, NO_PAD_CTRL)
336
337#define MX25_PAD_UART1_RTS__UART1_RTS IOMUX_PAD(0x370, 0x178, 0x10, 0, 0, PAD_CTL_PUS_100K_UP)
338#define MX25_PAD_UART1_RTS__CSI_D0 IOMUX_PAD(0x370, 0x178, 0x11, 0x488, 1, NO_PAD_CTRL)
339#define MX25_PAD_UART1_RTS__GPIO_4_24 IOMUX_PAD(0x370, 0x178, 0x15, 0, 0, NO_PAD_CTRL)
340
341#define MX25_PAD_UART1_CTS__UART1_CTS IOMUX_PAD(0x374, 0x17c, 0x10, 0, 0, PAD_CTL_PUS_100K_UP)
342#define MX25_PAD_UART1_CTS__CSI_D1 IOMUX_PAD(0x374, 0x17c, 0x11, 0x48c, 1, NO_PAD_CTRL)
343#define MX25_PAD_UART1_CTS__GPIO_4_25 IOMUX_PAD(0x374, 0x17c, 0x15, 0, 0, NO_PAD_CTRL)
344
345#define MX25_PAD_UART2_RXD__UART2_RXD IOMUX_PAD(0x378, 0x180, 0x10, 0, 0, NO_PAD_CTRL)
346#define MX25_PAD_UART2_RXD__GPIO_4_26 IOMUX_PAD(0x378, 0x180, 0x15, 0, 0, NO_PAD_CTRL)
347
348#define MX25_PAD_UART2_TXD__UART2_TXD IOMUX_PAD(0x37c, 0x184, 0x10, 0, 0, NO_PAD_CTRL)
349#define MX25_PAD_UART2_TXD__GPIO_4_27 IOMUX_PAD(0x37c, 0x184, 0x15, 0, 0, NO_PAD_CTRL)
350
351#define MX25_PAD_UART2_RTS__UART2_RTS IOMUX_PAD(0x380, 0x188, 0x10, 0, 0, NO_PAD_CTRL)
352#define MX25_PAD_UART2_RTS__FEC_COL IOMUX_PAD(0x380, 0x188, 0x12, 0x504, 2, NO_PAD_CTRL)
353#define MX25_PAD_UART2_RTS__GPIO_4_28 IOMUX_PAD(0x380, 0x188, 0x15, 0, 0, NO_PAD_CTRL)
354
355#define MX25_PAD_UART2_CTS__FEC_RX_ER IOMUX_PAD(0x384, 0x18c, 0x12, 0x518, 2, NO_PAD_CTRL)
356#define MX25_PAD_UART2_CTS__UART2_CTS IOMUX_PAD(0x384, 0x18c, 0x10, 0, 0, NO_PAD_CTRL)
357#define MX25_PAD_UART2_CTS__GPIO_4_29 IOMUX_PAD(0x384, 0x18c, 0x15, 0, 0, NO_PAD_CTRL)
358
359#define MX25_PAD_SD1_CMD__SD1_CMD IOMUX_PAD(0x388, 0x190, 0x10, 0, 0, PAD_CTL_PUS_47K_UP)
360#define MX25_PAD_SD1_CMD__FEC_RDATA2 IOMUX_PAD(0x388, 0x190, 0x12, 0x50c, 2, NO_PAD_CTRL)
361#define MX25_PAD_SD1_CMD__GPIO_2_23 IOMUX_PAD(0x388, 0x190, 0x15, 0, 0, NO_PAD_CTRL)
362
363#define MX25_PAD_SD1_CLK__SD1_CLK IOMUX_PAD(0x38c, 0x194, 0x10, 0, 0, PAD_CTL_PUS_47K_UP)
364#define MX25_PAD_SD1_CLK__FEC_RDATA3 IOMUX_PAD(0x38c, 0x194, 0x12, 0x510, 2, NO_PAD_CTRL)
365#define MX25_PAD_SD1_CLK__GPIO_2_24 IOMUX_PAD(0x38c, 0x194, 0x15, 0, 0, NO_PAD_CTRL)
366
367#define MX25_PAD_SD1_DATA0__SD1_DATA0 IOMUX_PAD(0x390, 0x198, 0x10, 0, 0, PAD_CTL_PUS_47K_UP)
368#define MX25_PAD_SD1_DATA0__GPIO_2_25 IOMUX_PAD(0x390, 0x198, 0x15, 0, 0, NO_PAD_CTRL)
369
370#define MX25_PAD_SD1_DATA1__SD1_DATA1 IOMUX_PAD(0x394, 0x19c, 0x10, 0, 0, PAD_CTL_PUS_47K_UP)
371#define MX25_PAD_SD1_DATA1__AUD7_RXD IOMUX_PAD(0x394, 0x19c, 0x13, 0x478, 0, NO_PAD_CTRL)
372#define MX25_PAD_SD1_DATA1__GPIO_2_26 IOMUX_PAD(0x394, 0x19c, 0x15, 0, 0, NO_PAD_CTRL)
373
374#define MX25_PAD_SD1_DATA2__SD1_DATA2 IOMUX_PAD(0x398, 0x1a0, 0x10, 0, 0, PAD_CTL_PUS_47K_UP)
375#define MX25_PAD_SD1_DATA2__FEC_RX_CLK IOMUX_PAD(0x398, 0x1a0, 0x15, 0x514, 2, NO_PAD_CTRL)
376#define MX25_PAD_SD1_DATA2__GPIO_2_27 IOMUX_PAD(0x398, 0x1a0, 0x15, 0, 0, NO_PAD_CTRL)
377
378#define MX25_PAD_SD1_DATA3__SD1_DATA3 IOMUX_PAD(0x39c, 0x1a4, 0x10, 0, 0, PAD_CTL_PUS_47K_UP)
379#define MX25_PAD_SD1_DATA3__FEC_CRS IOMUX_PAD(0x39c, 0x1a4, 0x10, 0x508, 2, NO_PAD_CTRL)
380#define MX25_PAD_SD1_DATA3__GPIO_2_28 IOMUX_PAD(0x39c, 0x1a4, 0x15, 0, 0, NO_PAD_CTRL)
381
382#define KPP_CTL_ROW (PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_100K_UP)
383#define KPP_CTL_COL (PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_100K_UP | PAD_CTL_ODE)
384
385#define MX25_PAD_KPP_ROW0__KPP_ROW0 IOMUX_PAD(0x3a0, 0x1a8, 0x10, 0, 0, KPP_CTL_ROW)
386#define MX25_PAD_KPP_ROW0__GPIO_2_29 IOMUX_PAD(0x3a0, 0x1a8, 0x15, 0, 0, NO_PAD_CTRL)
387
388#define MX25_PAD_KPP_ROW1__KPP_ROW1 IOMUX_PAD(0x3a4, 0x1ac, 0x10, 0, 0, KPP_CTL_ROW)
389#define MX25_PAD_KPP_ROW1__GPIO_2_30 IOMUX_PAD(0x3a4, 0x1ac, 0x15, 0, 0, NO_PAD_CTRL)
390
391#define MX25_PAD_KPP_ROW2__KPP_ROW2 IOMUX_PAD(0x3a8, 0x1b0, 0x10, 0, 0, KPP_CTL_ROW)
392#define MX25_PAD_KPP_ROW2__CSI_D0 IOMUX_PAD(0x3a8, 0x1b0, 0x13, 0x488, 2, NO_PAD_CTRL)
393#define MX25_PAD_KPP_ROW2__GPIO_2_31 IOMUX_PAD(0x3a8, 0x1b0, 0x15, 0, 0, NO_PAD_CTRL)
394
395#define MX25_PAD_KPP_ROW3__KPP_ROW3 IOMUX_PAD(0x3ac, 0x1b4, 0x10, 0, 0, KPP_CTL_ROW)
396#define MX25_PAD_KPP_ROW3__CSI_LD1 IOMUX_PAD(0x3ac, 0x1b4, 0x13, 0x48c, 2, NO_PAD_CTRL)
397#define MX25_PAD_KPP_ROW3__GPIO_3_0 IOMUX_PAD(0x3ac, 0x1b4, 0x15, 0, 0, NO_PAD_CTRL)
398
399#define MX25_PAD_KPP_COL0__KPP_COL0 IOMUX_PAD(0x3b0, 0x1b8, 0x10, 0, 0, KPP_CTL_COL)
400#define MX25_PAD_KPP_COL0__UART4_RXD_MUX IOMUX_PAD(0x3b0, 0x1b8, 0x11, 0x570, 1, NO_PAD_CTRL)
401#define MX25_PAD_KPP_COL0__AUD5_TXD IOMUX_PAD(0x3b0, 0x1b8, 0x12, 0, 0, PAD_CTL_PKE | PAD_CTL_PUS_100K_UP)
402#define MX25_PAD_KPP_COL0__GPIO_3_1 IOMUX_PAD(0x3b0, 0x1b8, 0x15, 0, 0, NO_PAD_CTRL)
403
404#define MX25_PAD_KPP_COL1__KPP_COL1 IOMUX_PAD(0x3b4, 0x1bc, 0x10, 0, 0, KPP_CTL_COL)
405#define MX25_PAD_KPP_COL1__UART4_TXD_MUX IOMUX_PAD(0x3b4, 0x1bc, 0x11, 0, 0, NO_PAD_CTRL)
406#define MX25_PAD_KPP_COL1__AUD5_RXD IOMUX_PAD(0x3b4, 0x1bc, 0x12, 0, 0, PAD_CTL_PKE | PAD_CTL_PUS_100K_UP)
407#define MX25_PAD_KPP_COL1__GPIO_3_2 IOMUX_PAD(0x3b4, 0x1bc, 0x15, 0, 0, NO_PAD_CTRL)
408
409#define MX25_PAD_KPP_COL2__KPP_COL2 IOMUX_PAD(0x3b8, 0x1c0, 0x10, 0, 0, KPP_CTL_COL)
410#define MX25_PAD_KPP_COL2__UART4_RTS IOMUX_PAD(0x3b8, 0x1c0, 0x11, 0, 0, NO_PAD_CTRL)
411#define MX25_PAD_KPP_COL2__AUD5_TXC IOMUX_PAD(0x3b8, 0x1c0, 0x12, 0, 0, PAD_CTL_PKE | PAD_CTL_PUS_100K_UP)
412#define MX25_PAD_KPP_COL2__GPIO_3_3 IOMUX_PAD(0x3b8, 0x1c0, 0x15, 0, 0, NO_PAD_CTRL)
413
414#define MX25_PAD_KPP_COL3__KPP_COL3 IOMUX_PAD(0x3bc, 0x1c4, 0x10, 0, 0, KPP_CTL_COL)
415#define MX25_PAD_KPP_COL3__UART4_CTS IOMUX_PAD(0x3bc, 0x1c4, 0x11, 0, 0, NO_PAD_CTRL)
416#define MX25_PAD_KPP_COL3__AUD5_TXFS IOMUX_PAD(0x3bc, 0x1c4, 0x12, 0, 0, PAD_CTL_PKE | PAD_CTL_PUS_100K_UP)
417#define MX25_PAD_KPP_COL3__GPIO_3_4 IOMUX_PAD(0x3bc, 0x1c4, 0x15, 0, 0, NO_PAD_CTRL)
418
419#define MX25_PAD_FEC_MDC__FEC_MDC IOMUX_PAD(0x3c0, 0x1c8, 0x10, 0, 0, NO_PAD_CTRL)
420#define MX25_PAD_FEC_MDC__AUD4_TXD IOMUX_PAD(0x3c0, 0x1c8, 0x12, 0x464, 1, NO_PAD_CTRL)
421#define MX25_PAD_FEC_MDC__GPIO_3_5 IOMUX_PAD(0x3c0, 0x1c8, 0x15, 0, 0, NO_PAD_CTRL)
422
423#define MX25_PAD_FEC_MDIO__FEC_MDIO IOMUX_PAD(0x3c4, 0x1cc, 0x10, 0, 0, PAD_CTL_HYS | PAD_CTL_PUS_22K_UP)
424#define MX25_PAD_FEC_MDIO__AUD4_RXD IOMUX_PAD(0x3c4, 0x1cc, 0x12, 0x460, 1, NO_PAD_CTRL)
425#define MX25_PAD_FEC_MDIO__GPIO_3_6 IOMUX_PAD(0x3c4, 0x1cc, 0x15, 0, 0, NO_PAD_CTRL)
426
427#define MX25_PAD_FEC_TDATA0__FEC_TDATA0 IOMUX_PAD(0x3c8, 0x1d0, 0x10, 0, 0, NO_PAD_CTRL)
428#define MX25_PAD_FEC_TDATA0__GPIO_3_7 IOMUX_PAD(0x3c8, 0x1d0, 0x15, 0, 0, NO_PAD_CTRL)
429
430#define MX25_PAD_FEC_TDATA1__FEC_TDATA1 IOMUX_PAD(0x3cc, 0x1d4, 0x10, 0, 0, NO_PAD_CTRL)
431#define MX25_PAD_FEC_TDATA1__AUD4_TXFS IOMUX_PAD(0x3cc, 0x1d4, 0x12, 0x474, 1, NO_PAD_CTRL)
432#define MX25_PAD_FEC_TDATA1__GPIO_3_8 IOMUX_PAD(0x3cc, 0x1d4, 0x15, 0, 0, NO_PAD_CTRL)
433
434#define MX25_PAD_FEC_TX_EN__FEC_TX_EN IOMUX_PAD(0x3d0, 0x1d8, 0x10, 0, 0, NO_PAD_CTRL)
435#define MX25_PAD_FEC_TX_EN__GPIO_3_9 IOMUX_PAD(0x3d0, 0x1d8, 0x15, 0, 0, NO_PAD_CTRL)
436
437#define MX25_PAD_FEC_RDATA0__FEC_RDATA0 IOMUX_PAD(0x3d4, 0x1dc, 0x10, 0, 0, PAD_CTL_PUS_100K_DOWN | NO_PAD_CTRL)
438#define MX25_PAD_FEC_RDATA0__GPIO_3_10 IOMUX_PAD(0x3d4, 0x1dc, 0x15, 0, 0, NO_PAD_CTRL)
439
440#define MX25_PAD_FEC_RDATA1__FEC_RDATA1 IOMUX_PAD(0x3d8, 0x1e0, 0x10, 0, 0, PAD_CTL_PUS_100K_DOWN | NO_PAD_CTRL)
441#define MX25_PAD_FEC_RDATA1__GPIO_3_11 IOMUX_PAD(0x3d8, 0x1e0, 0x15, 0, 0, NO_PAD_CTRL)
442
443#define MX25_PAD_FEC_RX_DV__FEC_RX_DV IOMUX_PAD(0x3dc, 0x1e4, 0x10, 0, 0, PAD_CTL_PUS_100K_DOWN | NO_PAD_CTRL)
444#define MX25_PAD_FEC_RX_DV__CAN2_RX IOMUX_PAD(0x3dc, 0x1e4, 0x14, 0x484, 0, PAD_CTL_PUS_22K_UP)
445#define MX25_PAD_FEC_RX_DV__GPIO_3_12 IOMUX_PAD(0x3dc, 0x1e4, 0x15, 0, 0, NO_PAD_CTRL)
446
447#define MX25_PAD_FEC_TX_CLK__FEC_TX_CLK IOMUX_PAD(0x3e0, 0x1e8, 0x10, 0, 0, PAD_CTL_HYS | PAD_CTL_PUS_100K_DOWN)
448#define MX25_PAD_FEC_TX_CLK__GPIO_3_13 IOMUX_PAD(0x3e0, 0x1e8, 0x15, 0, 0, NO_PAD_CTRL)
449
450#define MX25_PAD_RTCK__RTCK IOMUX_PAD(0x3e4, 0x1ec, 0x10, 0, 0, NO_PAD_CTRL)
451#define MX25_PAD_RTCK__OWIRE IOMUX_PAD(0x3e4, 0x1ec, 0x11, 0, 0, NO_PAD_CTRL)
452#define MX25_PAD_RTCK__GPIO_3_14 IOMUX_PAD(0x3e4, 0x1ec, 0x15, 0, 0, NO_PAD_CTRL)
453
454#define MX25_PAD_DE_B__DE_B IOMUX_PAD(0x3ec, 0x1f0, 0x10, 0, 0, NO_PAD_CTRL)
455#define MX25_PAD_DE_B__GPIO_2_20 IOMUX_PAD(0x3ec, 0x1f0, 0x15, 0, 0, NO_PAD_CTRL)
456
457#define MX25_PAD_TDO__TDO IOMUX_PAD(0x3e8, 0x000, 0x00, 0, 0, NO_PAD_CTRL)
458
459#define MX25_PAD_GPIO_A__GPIO_A IOMUX_PAD(0x3f0, 0x1f4, 0x10, 0, 0, NO_PAD_CTRL)
460#define MX25_PAD_GPIO_A__CAN1_TX IOMUX_PAD(0x3f0, 0x1f4, 0x16, 0, 0, PAD_CTL_PUS_22K_UP)
461#define MX25_PAD_GPIO_A__USBOTG_PWR IOMUX_PAD(0x3f0, 0x1f4, 0x12, 0, 0, PAD_CTL_PKE)
462
463#define MX25_PAD_GPIO_B__GPIO_B IOMUX_PAD(0x3f4, 0x1f8, 0x10, 0, 0, NO_PAD_CTRL)
464#define MX25_PAD_GPIO_B__CAN1_RX IOMUX_PAD(0x3f4, 0x1f8, 0x16, 0x480, 1, PAD_CTL_PUS_22K_UP)
465#define MX25_PAD_GPIO_B__USBOTG_OC IOMUX_PAD(0x3f4, 0x1f8, 0x12, 0x57c, 1, PAD_CTL_PUS_100K_UP)
466
467#define MX25_PAD_GPIO_C__GPIO_C IOMUX_PAD(0x3f8, 0x1fc, 0x10, 0, 0, NO_PAD_CTRL)
468#define MX25_PAD_GPIO_C__CAN2_TX IOMUX_PAD(0x3f8, 0x1fc, 0x16, 0, 0, PAD_CTL_PUS_22K_UP)
469
470#define MX25_PAD_GPIO_D__GPIO_D IOMUX_PAD(0x3fc, 0x200, 0x10, 0, 0, NO_PAD_CTRL)
471#define MX25_PAD_GPIO_E__LD16 IOMUX_PAD(0x400, 0x204, 0x02, 0, 0, PAD_CTL_SRE_FAST)
472#define MX25_PAD_GPIO_D__CAN2_RX IOMUX_PAD(0x3fc, 0x200, 0x16, 0x484, 1, PAD_CTL_PUS_22K_UP)
473
474#define MX25_PAD_GPIO_E__GPIO_E IOMUX_PAD(0x400, 0x204, 0x10, 0, 0, NO_PAD_CTRL)
475#define MX25_PAD_GPIO_F__LD17 IOMUX_PAD(0x404, 0x208, 0x02, 0, 0, PAD_CTL_SRE_FAST)
476#define MX25_PAD_GPIO_E__AUD7_TXD IOMUX_PAD(0x400, 0x204, 0x14, 0, 0, NO_PAD_CTRL)
477
478#define MX25_PAD_GPIO_F__GPIO_F IOMUX_PAD(0x404, 0x208, 0x10, 0, 0, NO_PAD_CTRL)
479#define MX25_PAD_GPIO_F__AUD7_TXC IOMUX_PAD(0x404, 0x208, 0x14, 0, 0, NO_PAD_CTRL)
480
481#define MX25_PAD_EXT_ARMCLK__EXT_ARMCLK IOMUX_PAD(0x000, 0x20c, 0x10, 0, 0, NO_PAD_CTRL)
482#define MX25_PAD_EXT_ARMCLK__GPIO_3_15 IOMUX_PAD(0x000, 0x20c, 0x15, 0, 0, NO_PAD_CTRL)
483
484#define MX25_PAD_UPLL_BYPCLK__UPLL_BYPCLK IOMUX_PAD(0x000, 0x210, 0x10, 0, 0, NO_PAD_CTRL)
485#define MX25_PAD_UPLL_BYPCLK__GPIO_3_16 IOMUX_PAD(0x000, 0x210, 0x15, 0, 0, NO_PAD_CTRL)
486
487#define MX25_PAD_VSTBY_REQ__VSTBY_REQ IOMUX_PAD(0x408, 0x214, 0x10, 0, 0, NO_PAD_CTRL)
488#define MX25_PAD_VSTBY_REQ__AUD7_TXFS IOMUX_PAD(0x408, 0x214, 0x14, 0, 0, NO_PAD_CTRL)
489#define MX25_PAD_VSTBY_REQ__GPIO_3_17 IOMUX_PAD(0x408, 0x214, 0x15, 0, 0, NO_PAD_CTRL)
490#define MX25_PAD_VSTBY_ACK__VSTBY_ACK IOMUX_PAD(0x40c, 0x218, 0x10, 0, 0, NO_PAD_CTRL)
491#define MX25_PAD_VSTBY_ACK__GPIO_3_18 IOMUX_PAD(0x40c, 0x218, 0x15, 0, 0, NO_PAD_CTRL)
492
493#define MX25_PAD_POWER_FAIL__POWER_FAIL IOMUX_PAD(0x410, 0x21c, 0x10, 0, 0, NO_PAD_CTRL)
494#define MX25_PAD_POWER_FAIL__AUD7_RXD IOMUX_PAD(0x410, 0x21c, 0x14, 0x478, 1, NO_PAD_CTRL)
495#define MX25_PAD_POWER_FAIL__GPIO_3_19 IOMUX_PAD(0x410, 0x21c, 0x15, 0, 0, NO_PAD_CTRL)
496
497#define MX25_PAD_CLKO__CLKO IOMUX_PAD(0x414, 0x220, 0x10, 0, 0, NO_PAD_CTRL)
498#define MX25_PAD_CLKO__GPIO_2_21 IOMUX_PAD(0x414, 0x220, 0x15, 0, 0, NO_PAD_CTRL)
499
500#define MX25_PAD_BOOT_MODE0__BOOT_MODE0 IOMUX_PAD(0x000, 0x224, 0x00, 0, 0, NO_PAD_CTRL)
501#define MX25_PAD_BOOT_MODE0__GPIO_4_30 IOMUX_PAD(0x000, 0x224, 0x05, 0, 0, NO_PAD_CTRL)
502#define MX25_PAD_BOOT_MODE1__BOOT_MODE1 IOMUX_PAD(0x000, 0x228, 0x00, 0, 0, NO_PAD_CTRL)
503#define MX25_PAD_BOOT_MODE1__GPIO_4_31 IOMUX_PAD(0x000, 0x228, 0x05, 0, 0, NO_PAD_CTRL)
504
505#define MX25_PAD_CTL_GRP_DVS_MISC IOMUX_PAD(0x418, 0x000, 0, 0, 0, NO_PAD_CTRL)
506#define MX25_PAD_CTL_GRP_DSE_FEC IOMUX_PAD(0x41c, 0x000, 0, 0, 0, NO_PAD_CTRL)
507#define MX25_PAD_CTL_GRP_DVS_JTAG IOMUX_PAD(0x420, 0x000, 0, 0, 0, NO_PAD_CTRL)
508#define MX25_PAD_CTL_GRP_DSE_NFC IOMUX_PAD(0x424, 0x000, 0, 0, 0, NO_PAD_CTRL)
509#define MX25_PAD_CTL_GRP_DSE_CSI IOMUX_PAD(0x428, 0x000, 0, 0, 0, NO_PAD_CTRL)
510#define MX25_PAD_CTL_GRP_DSE_WEIM IOMUX_PAD(0x42c, 0x000, 0, 0, 0, NO_PAD_CTRL)
511#define MX25_PAD_CTL_GRP_DSE_DDR IOMUX_PAD(0x430, 0x000, 0, 0, 0, NO_PAD_CTRL)
512#define MX25_PAD_CTL_GRP_DVS_CRM IOMUX_PAD(0x434, 0x000, 0, 0, 0, NO_PAD_CTRL)
513#define MX25_PAD_CTL_GRP_DSE_KPP IOMUX_PAD(0x438, 0x000, 0, 0, 0, NO_PAD_CTRL)
514#define MX25_PAD_CTL_GRP_DSE_SDHC1 IOMUX_PAD(0x43c, 0x000, 0, 0, 0, NO_PAD_CTRL)
515#define MX25_PAD_CTL_GRP_DSE_LCD IOMUX_PAD(0x440, 0x000, 0, 0, 0, NO_PAD_CTRL)
516#define MX25_PAD_CTL_GRP_DSE_UART IOMUX_PAD(0x444, 0x000, 0, 0, 0, NO_PAD_CTRL)
517#define MX25_PAD_CTL_GRP_DVS_NFC IOMUX_PAD(0x448, 0x000, 0, 0, 0, NO_PAD_CTRL)
518#define MX25_PAD_CTL_GRP_DVS_CSI IOMUX_PAD(0x44c, 0x000, 0, 0, 0, NO_PAD_CTRL)
519#define MX25_PAD_CTL_GRP_DSE_CSPI1 IOMUX_PAD(0x450, 0x000, 0, 0, 0, NO_PAD_CTRL)
520#define MX25_PAD_CTL_GRP_DDRTYPE IOMUX_PAD(0x454, 0x000, 0, 0, 0, NO_PAD_CTRL)
521#define MX25_PAD_CTL_GRP_DVS_SDHC1 IOMUX_PAD(0x458, 0x000, 0, 0, 0, NO_PAD_CTRL)
522#define MX25_PAD_CTL_GRP_DVS_LCD IOMUX_PAD(0x45c, 0x000, 0, 0, 0, NO_PAD_CTRL)
523
524#endif /* __MACH_IOMUX_MX25_H__ */
diff --git a/arch/arm/mach-imx/iomux-mx3.h b/arch/arm/mach-imx/iomux-mx3.h
index 0a5adba61e0b..2e4a0ddca76c 100644
--- a/arch/arm/mach-imx/iomux-mx3.h
+++ b/arch/arm/mach-imx/iomux-mx3.h
@@ -114,7 +114,7 @@ enum iomux_gp_func {
114 */ 114 */
115int mxc_iomux_alloc_pin(unsigned int pin, const char *label); 115int mxc_iomux_alloc_pin(unsigned int pin, const char *label);
116/* 116/*
117 * setups mutliple pins 117 * setups multiple pins
118 * convenient way to call the above function with tables 118 * convenient way to call the above function with tables
119 */ 119 */
120int mxc_iomux_setup_multiple_pins(const unsigned int *pin_list, unsigned count, 120int mxc_iomux_setup_multiple_pins(const unsigned int *pin_list, unsigned count,
diff --git a/arch/arm/mach-imx/iomux-v3.c b/arch/arm/mach-imx/iomux-v3.c
index d61f9606fc56..a53b2e64f98d 100644
--- a/arch/arm/mach-imx/iomux-v3.c
+++ b/arch/arm/mach-imx/iomux-v3.c
@@ -56,9 +56,10 @@ int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t pad)
56 return 0; 56 return 0;
57} 57}
58 58
59int mxc_iomux_v3_setup_multiple_pads(iomux_v3_cfg_t *pad_list, unsigned count) 59int mxc_iomux_v3_setup_multiple_pads(const iomux_v3_cfg_t *pad_list,
60 unsigned count)
60{ 61{
61 iomux_v3_cfg_t *p = pad_list; 62 const iomux_v3_cfg_t *p = pad_list;
62 int i; 63 int i;
63 int ret; 64 int ret;
64 65
diff --git a/arch/arm/mach-imx/iomux-v3.h b/arch/arm/mach-imx/iomux-v3.h
index 2fa3b5430102..f79e165a3b3c 100644
--- a/arch/arm/mach-imx/iomux-v3.h
+++ b/arch/arm/mach-imx/iomux-v3.h
@@ -128,10 +128,11 @@ typedef u64 iomux_v3_cfg_t;
128int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t pad); 128int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t pad);
129 129
130/* 130/*
131 * setups mutliple pads 131 * setups multiple pads
132 * convenient way to call the above function with tables 132 * convenient way to call the above function with tables
133 */ 133 */
134int mxc_iomux_v3_setup_multiple_pads(iomux_v3_cfg_t *pad_list, unsigned count); 134int mxc_iomux_v3_setup_multiple_pads(const iomux_v3_cfg_t *pad_list,
135 unsigned count);
135 136
136/* 137/*
137 * Initialise the iomux controller 138 * Initialise the iomux controller
diff --git a/arch/arm/mach-imx/mach-cpuimx35.c b/arch/arm/mach-imx/mach-cpuimx35.c
index 62a6e02f4763..922ffd6ca039 100644
--- a/arch/arm/mach-imx/mach-cpuimx35.c
+++ b/arch/arm/mach-imx/mach-cpuimx35.c
@@ -75,7 +75,7 @@ static struct i2c_board_info eukrea_cpuimx35_i2c_devices[] = {
75 }, 75 },
76}; 76};
77 77
78static iomux_v3_cfg_t eukrea_cpuimx35_pads[] = { 78static const iomux_v3_cfg_t eukrea_cpuimx35_pads[] __initconst = {
79 /* UART1 */ 79 /* UART1 */
80 MX35_PAD_CTS1__UART1_CTS, 80 MX35_PAD_CTS1__UART1_CTS,
81 MX35_PAD_RTS1__UART1_RTS, 81 MX35_PAD_RTS1__UART1_RTS,
diff --git a/arch/arm/mach-imx/mach-eukrea_cpuimx25.c b/arch/arm/mach-imx/mach-eukrea_cpuimx25.c
deleted file mode 100644
index b2ee6e009fe4..000000000000
--- a/arch/arm/mach-imx/mach-eukrea_cpuimx25.c
+++ /dev/null
@@ -1,172 +0,0 @@
1/*
2 * Copyright 2009 Sascha Hauer, <kernel@pengutronix.de>
3 * Copyright 2010 Eric Bénard - Eukréa Electromatique, <eric@eukrea.com>
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18 */
19
20#include <linux/types.h>
21#include <linux/init.h>
22#include <linux/delay.h>
23#include <linux/clk.h>
24#include <linux/irq.h>
25#include <linux/gpio.h>
26#include <linux/platform_device.h>
27#include <linux/usb/otg.h>
28#include <linux/usb/ulpi.h>
29
30#include <asm/mach-types.h>
31#include <asm/mach/arch.h>
32#include <asm/mach/time.h>
33#include <asm/memory.h>
34#include <asm/mach/map.h>
35
36#include "common.h"
37#include "devices-imx25.h"
38#include "ehci.h"
39#include "eukrea-baseboards.h"
40#include "hardware.h"
41#include "iomux-mx25.h"
42#include "mx25.h"
43
44static const struct imxuart_platform_data uart_pdata __initconst = {
45 .flags = IMXUART_HAVE_RTSCTS,
46};
47
48static iomux_v3_cfg_t eukrea_cpuimx25_pads[] = {
49 /* FEC - RMII */
50 MX25_PAD_FEC_MDC__FEC_MDC,
51 MX25_PAD_FEC_MDIO__FEC_MDIO,
52 MX25_PAD_FEC_TDATA0__FEC_TDATA0,
53 MX25_PAD_FEC_TDATA1__FEC_TDATA1,
54 MX25_PAD_FEC_TX_EN__FEC_TX_EN,
55 MX25_PAD_FEC_RDATA0__FEC_RDATA0,
56 MX25_PAD_FEC_RDATA1__FEC_RDATA1,
57 MX25_PAD_FEC_RX_DV__FEC_RX_DV,
58 MX25_PAD_FEC_TX_CLK__FEC_TX_CLK,
59 /* I2C1 */
60 MX25_PAD_I2C1_CLK__I2C1_CLK,
61 MX25_PAD_I2C1_DAT__I2C1_DAT,
62};
63
64static const struct fec_platform_data mx25_fec_pdata __initconst = {
65 .phy = PHY_INTERFACE_MODE_RMII,
66};
67
68static const struct mxc_nand_platform_data
69eukrea_cpuimx25_nand_board_info __initconst = {
70 .width = 1,
71 .hw_ecc = 1,
72 .flash_bbt = 1,
73};
74
75static const struct imxi2c_platform_data
76eukrea_cpuimx25_i2c0_data __initconst = {
77 .bitrate = 100000,
78};
79
80static struct i2c_board_info eukrea_cpuimx25_i2c_devices[] = {
81 {
82 I2C_BOARD_INFO("pcf8563", 0x51),
83 },
84};
85
86static int eukrea_cpuimx25_otg_init(struct platform_device *pdev)
87{
88 return mx25_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_DIFF_UNI);
89}
90
91static const struct mxc_usbh_platform_data otg_pdata __initconst = {
92 .init = eukrea_cpuimx25_otg_init,
93 .portsc = MXC_EHCI_MODE_UTMI,
94};
95
96static int eukrea_cpuimx25_usbh2_init(struct platform_device *pdev)
97{
98 return mx25_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_SINGLE_UNI |
99 MXC_EHCI_INTERNAL_PHY | MXC_EHCI_IPPUE_DOWN);
100}
101
102static const struct mxc_usbh_platform_data usbh2_pdata __initconst = {
103 .init = eukrea_cpuimx25_usbh2_init,
104 .portsc = MXC_EHCI_MODE_SERIAL,
105};
106
107static const struct fsl_usb2_platform_data otg_device_pdata __initconst = {
108 .operating_mode = FSL_USB2_DR_DEVICE,
109 .phy_mode = FSL_USB2_PHY_UTMI,
110 .workaround = FLS_USB2_WORKAROUND_ENGCM09152,
111};
112
113static bool otg_mode_host __initdata;
114
115static int __init eukrea_cpuimx25_otg_mode(char *options)
116{
117 if (!strcmp(options, "host"))
118 otg_mode_host = true;
119 else if (!strcmp(options, "device"))
120 otg_mode_host = false;
121 else
122 pr_info("otg_mode neither \"host\" nor \"device\". "
123 "Defaulting to device\n");
124 return 1;
125}
126__setup("otg_mode=", eukrea_cpuimx25_otg_mode);
127
128static void __init eukrea_cpuimx25_init(void)
129{
130 imx25_soc_init();
131
132 if (mxc_iomux_v3_setup_multiple_pads(eukrea_cpuimx25_pads,
133 ARRAY_SIZE(eukrea_cpuimx25_pads)))
134 printk(KERN_ERR "error setting cpuimx25 pads !\n");
135
136 imx25_add_imx_uart0(&uart_pdata);
137 imx25_add_mxc_nand(&eukrea_cpuimx25_nand_board_info);
138 imx25_add_imxdi_rtc();
139 imx25_add_fec(&mx25_fec_pdata);
140 imx25_add_imx2_wdt();
141
142 i2c_register_board_info(0, eukrea_cpuimx25_i2c_devices,
143 ARRAY_SIZE(eukrea_cpuimx25_i2c_devices));
144 imx25_add_imx_i2c0(&eukrea_cpuimx25_i2c0_data);
145
146 if (otg_mode_host)
147 imx25_add_mxc_ehci_otg(&otg_pdata);
148 else
149 imx25_add_fsl_usb2_udc(&otg_device_pdata);
150
151 imx25_add_mxc_ehci_hs(&usbh2_pdata);
152
153#ifdef CONFIG_MACH_EUKREA_MBIMXSD25_BASEBOARD
154 eukrea_mbimxsd25_baseboard_init();
155#endif
156}
157
158static void __init eukrea_cpuimx25_timer_init(void)
159{
160 mx25_clocks_init();
161}
162
163MACHINE_START(EUKREA_CPUIMX25SD, "Eukrea CPUIMX25")
164 /* Maintainer: Eukrea Electromatique */
165 .atag_offset = 0x100,
166 .map_io = mx25_map_io,
167 .init_early = imx25_init_early,
168 .init_irq = mx25_init_irq,
169 .init_time = eukrea_cpuimx25_timer_init,
170 .init_machine = eukrea_cpuimx25_init,
171 .restart = mxc_restart,
172MACHINE_END
diff --git a/arch/arm/mach-imx/imx25-dt.c b/arch/arm/mach-imx/mach-imx25.c
index 25defbdb06c4..9379fd0a7b4d 100644
--- a/arch/arm/mach-imx/imx25-dt.c
+++ b/arch/arm/mach-imx/mach-imx25.c
@@ -10,12 +10,29 @@
10 */ 10 */
11 11
12#include <linux/irq.h> 12#include <linux/irq.h>
13#include <linux/of_address.h>
13#include <linux/of_irq.h> 14#include <linux/of_irq.h>
14#include <linux/of_platform.h> 15#include <linux/of_platform.h>
15#include <asm/mach/arch.h> 16#include <asm/mach/arch.h>
16#include <asm/mach/time.h> 17#include <asm/mach/time.h>
17#include "common.h" 18#include "common.h"
18#include "mx25.h" 19#include "hardware.h"
20
21static void __init imx25_init_early(void)
22{
23 mxc_set_cpu_type(MXC_CPU_MX25);
24}
25
26static void __init mx25_init_irq(void)
27{
28 struct device_node *np;
29 void __iomem *avic_base;
30
31 np = of_find_compatible_node(NULL, NULL, "fsl,avic");
32 avic_base = of_iomap(np, 0);
33 BUG_ON(!avic_base);
34 mxc_init_irq(avic_base);
35}
19 36
20static const char * const imx25_dt_board_compat[] __initconst = { 37static const char * const imx25_dt_board_compat[] __initconst = {
21 "fsl,imx25", 38 "fsl,imx25",
@@ -23,7 +40,6 @@ static const char * const imx25_dt_board_compat[] __initconst = {
23}; 40};
24 41
25DT_MACHINE_START(IMX25_DT, "Freescale i.MX25 (Device Tree Support)") 42DT_MACHINE_START(IMX25_DT, "Freescale i.MX25 (Device Tree Support)")
26 .map_io = mx25_map_io,
27 .init_early = imx25_init_early, 43 .init_early = imx25_init_early,
28 .init_irq = mx25_init_irq, 44 .init_irq = mx25_init_irq,
29 .dt_compat = imx25_dt_board_compat, 45 .dt_compat = imx25_dt_board_compat,
diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c
index 4ad6e473cf83..e21a693fc984 100644
--- a/arch/arm/mach-imx/mach-imx6q.c
+++ b/arch/arm/mach-imx/mach-imx6q.c
@@ -387,10 +387,10 @@ static void __init imx6q_map_io(void)
387 387
388static void __init imx6q_init_irq(void) 388static void __init imx6q_init_irq(void)
389{ 389{
390 imx_gpc_check_dt();
390 imx_init_revision_from_anatop(); 391 imx_init_revision_from_anatop();
391 imx_init_l2cache(); 392 imx_init_l2cache();
392 imx_src_init(); 393 imx_src_init();
393 imx_gpc_init();
394 irqchip_init(); 394 irqchip_init();
395} 395}
396 396
diff --git a/arch/arm/mach-imx/mach-imx6sl.c b/arch/arm/mach-imx/mach-imx6sl.c
index 24bfaaf944c8..12a1b098fc6a 100644
--- a/arch/arm/mach-imx/mach-imx6sl.c
+++ b/arch/arm/mach-imx/mach-imx6sl.c
@@ -61,10 +61,10 @@ static void __init imx6sl_init_machine(void)
61 61
62static void __init imx6sl_init_irq(void) 62static void __init imx6sl_init_irq(void)
63{ 63{
64 imx_gpc_check_dt();
64 imx_init_revision_from_anatop(); 65 imx_init_revision_from_anatop();
65 imx_init_l2cache(); 66 imx_init_l2cache();
66 imx_src_init(); 67 imx_src_init();
67 imx_gpc_init();
68 irqchip_init(); 68 irqchip_init();
69} 69}
70 70
diff --git a/arch/arm/mach-imx/mach-imx6sx.c b/arch/arm/mach-imx/mach-imx6sx.c
index 66988eb6a3a4..f17b7004c24b 100644
--- a/arch/arm/mach-imx/mach-imx6sx.c
+++ b/arch/arm/mach-imx/mach-imx6sx.c
@@ -81,10 +81,10 @@ static void __init imx6sx_init_machine(void)
81 81
82static void __init imx6sx_init_irq(void) 82static void __init imx6sx_init_irq(void)
83{ 83{
84 imx_gpc_check_dt();
84 imx_init_revision_from_anatop(); 85 imx_init_revision_from_anatop();
85 imx_init_l2cache(); 86 imx_init_l2cache();
86 imx_src_init(); 87 imx_src_init();
87 imx_gpc_init();
88 irqchip_init(); 88 irqchip_init();
89} 89}
90 90
diff --git a/arch/arm/mach-imx/mach-mx25_3ds.c b/arch/arm/mach-imx/mach-mx25_3ds.c
deleted file mode 100644
index 0d01e367b062..000000000000
--- a/arch/arm/mach-imx/mach-mx25_3ds.c
+++ /dev/null
@@ -1,270 +0,0 @@
1/*
2 * Copyright 2009 Sascha Hauer, <kernel@pengutronix.de>
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 51 Franklin Street, Fifth Floor,
16 * Boston, MA 02110-1301, USA.
17 */
18
19/*
20 * This machine is known as:
21 * - i.MX25 3-Stack Development System
22 * - i.MX25 Platform Development Kit (i.MX25 PDK)
23 */
24
25#include <linux/types.h>
26#include <linux/init.h>
27#include <linux/delay.h>
28#include <linux/clk.h>
29#include <linux/irq.h>
30#include <linux/gpio.h>
31#include <linux/platform_device.h>
32#include <linux/usb/otg.h>
33
34#include <asm/mach-types.h>
35#include <asm/mach/arch.h>
36#include <asm/mach/time.h>
37#include <asm/memory.h>
38#include <asm/mach/map.h>
39
40#include "common.h"
41#include "devices-imx25.h"
42#include "ehci.h"
43#include "hardware.h"
44#include "iomux-mx25.h"
45#include "mx25.h"
46
47#define MX25PDK_CAN_PWDN IMX_GPIO_NR(4, 6)
48
49static const struct imxuart_platform_data uart_pdata __initconst = {
50 .flags = IMXUART_HAVE_RTSCTS,
51};
52
53static iomux_v3_cfg_t mx25pdk_pads[] = {
54 MX25_PAD_FEC_MDC__FEC_MDC,
55 MX25_PAD_FEC_MDIO__FEC_MDIO,
56 MX25_PAD_FEC_TDATA0__FEC_TDATA0,
57 MX25_PAD_FEC_TDATA1__FEC_TDATA1,
58 MX25_PAD_FEC_TX_EN__FEC_TX_EN,
59 MX25_PAD_FEC_RDATA0__FEC_RDATA0,
60 MX25_PAD_FEC_RDATA1__FEC_RDATA1,
61 MX25_PAD_FEC_RX_DV__FEC_RX_DV,
62 MX25_PAD_FEC_TX_CLK__FEC_TX_CLK,
63 MX25_PAD_A17__GPIO_2_3, /* FEC_EN, GPIO 35 */
64 MX25_PAD_D12__GPIO_4_8, /* FEC_RESET_B, GPIO 104 */
65
66 /* LCD */
67 MX25_PAD_LD0__LD0,
68 MX25_PAD_LD1__LD1,
69 MX25_PAD_LD2__LD2,
70 MX25_PAD_LD3__LD3,
71 MX25_PAD_LD4__LD4,
72 MX25_PAD_LD5__LD5,
73 MX25_PAD_LD6__LD6,
74 MX25_PAD_LD7__LD7,
75 MX25_PAD_LD8__LD8,
76 MX25_PAD_LD9__LD9,
77 MX25_PAD_LD10__LD10,
78 MX25_PAD_LD11__LD11,
79 MX25_PAD_LD12__LD12,
80 MX25_PAD_LD13__LD13,
81 MX25_PAD_LD14__LD14,
82 MX25_PAD_LD15__LD15,
83 MX25_PAD_GPIO_E__LD16,
84 MX25_PAD_GPIO_F__LD17,
85 MX25_PAD_HSYNC__HSYNC,
86 MX25_PAD_VSYNC__VSYNC,
87 MX25_PAD_LSCLK__LSCLK,
88 MX25_PAD_OE_ACD__OE_ACD,
89 MX25_PAD_CONTRAST__CONTRAST,
90
91 /* Keypad */
92 MX25_PAD_KPP_ROW0__KPP_ROW0,
93 MX25_PAD_KPP_ROW1__KPP_ROW1,
94 MX25_PAD_KPP_ROW2__KPP_ROW2,
95 MX25_PAD_KPP_ROW3__KPP_ROW3,
96 MX25_PAD_KPP_COL0__KPP_COL0,
97 MX25_PAD_KPP_COL1__KPP_COL1,
98 MX25_PAD_KPP_COL2__KPP_COL2,
99 MX25_PAD_KPP_COL3__KPP_COL3,
100
101 /* SD1 */
102 MX25_PAD_SD1_CMD__SD1_CMD,
103 MX25_PAD_SD1_CLK__SD1_CLK,
104 MX25_PAD_SD1_DATA0__SD1_DATA0,
105 MX25_PAD_SD1_DATA1__SD1_DATA1,
106 MX25_PAD_SD1_DATA2__SD1_DATA2,
107 MX25_PAD_SD1_DATA3__SD1_DATA3,
108 MX25_PAD_A14__GPIO_2_0, /* WriteProtect */
109 MX25_PAD_A15__GPIO_2_1, /* CardDetect */
110
111 /* I2C1 */
112 MX25_PAD_I2C1_CLK__I2C1_CLK,
113 MX25_PAD_I2C1_DAT__I2C1_DAT,
114
115 /* CAN1 */
116 MX25_PAD_GPIO_A__CAN1_TX,
117 MX25_PAD_GPIO_B__CAN1_RX,
118 MX25_PAD_D14__GPIO_4_6, /* CAN_PWDN */
119};
120
121static const struct fec_platform_data mx25_fec_pdata __initconst = {
122 .phy = PHY_INTERFACE_MODE_RMII,
123};
124
125#define FEC_ENABLE_GPIO IMX_GPIO_NR(2, 3)
126#define FEC_RESET_B_GPIO IMX_GPIO_NR(4, 8)
127
128static void __init mx25pdk_fec_reset(void)
129{
130 gpio_request(FEC_ENABLE_GPIO, "FEC PHY enable");
131 gpio_request(FEC_RESET_B_GPIO, "FEC PHY reset");
132
133 gpio_direction_output(FEC_ENABLE_GPIO, 0); /* drop PHY power */
134 gpio_direction_output(FEC_RESET_B_GPIO, 0); /* assert reset */
135 udelay(2);
136
137 /* turn on PHY power and lift reset */
138 gpio_set_value(FEC_ENABLE_GPIO, 1);
139 gpio_set_value(FEC_RESET_B_GPIO, 1);
140}
141
142static const struct mxc_nand_platform_data
143mx25pdk_nand_board_info __initconst = {
144 .width = 1,
145 .hw_ecc = 1,
146 .flash_bbt = 1,
147};
148
149static struct imx_fb_videomode mx25pdk_modes[] = {
150 {
151 .mode = {
152 .name = "CRT-VGA",
153 .refresh = 60,
154 .xres = 640,
155 .yres = 480,
156 .pixclock = 39683,
157 .left_margin = 45,
158 .right_margin = 114,
159 .upper_margin = 33,
160 .lower_margin = 11,
161 .hsync_len = 1,
162 .vsync_len = 1,
163 },
164 .bpp = 16,
165 .pcr = 0xFA208B80,
166 },
167};
168
169static const struct imx_fb_platform_data mx25pdk_fb_pdata __initconst = {
170 .mode = mx25pdk_modes,
171 .num_modes = ARRAY_SIZE(mx25pdk_modes),
172 .pwmr = 0x00A903FF,
173 .lscr1 = 0x00120300,
174 .dmacr = 0x00020010,
175};
176
177static const uint32_t mx25pdk_keymap[] = {
178 KEY(0, 0, KEY_UP),
179 KEY(0, 1, KEY_DOWN),
180 KEY(0, 2, KEY_VOLUMEDOWN),
181 KEY(0, 3, KEY_HOME),
182 KEY(1, 0, KEY_RIGHT),
183 KEY(1, 1, KEY_LEFT),
184 KEY(1, 2, KEY_ENTER),
185 KEY(1, 3, KEY_VOLUMEUP),
186 KEY(2, 0, KEY_F6),
187 KEY(2, 1, KEY_F8),
188 KEY(2, 2, KEY_F9),
189 KEY(2, 3, KEY_F10),
190 KEY(3, 0, KEY_F1),
191 KEY(3, 1, KEY_F2),
192 KEY(3, 2, KEY_F3),
193 KEY(3, 3, KEY_POWER),
194};
195
196static const struct matrix_keymap_data mx25pdk_keymap_data __initconst = {
197 .keymap = mx25pdk_keymap,
198 .keymap_size = ARRAY_SIZE(mx25pdk_keymap),
199};
200
201static int mx25pdk_usbh2_init(struct platform_device *pdev)
202{
203 return mx25_initialize_usb_hw(pdev->id, MXC_EHCI_INTERNAL_PHY);
204}
205
206static const struct mxc_usbh_platform_data usbh2_pdata __initconst = {
207 .init = mx25pdk_usbh2_init,
208 .portsc = MXC_EHCI_MODE_SERIAL,
209};
210
211static const struct fsl_usb2_platform_data otg_device_pdata __initconst = {
212 .operating_mode = FSL_USB2_DR_DEVICE,
213 .phy_mode = FSL_USB2_PHY_UTMI,
214};
215
216static const struct imxi2c_platform_data mx25_3ds_i2c0_data __initconst = {
217 .bitrate = 100000,
218};
219
220#define SD1_GPIO_WP IMX_GPIO_NR(2, 0)
221#define SD1_GPIO_CD IMX_GPIO_NR(2, 1)
222
223static const struct esdhc_platform_data mx25pdk_esdhc_pdata __initconst = {
224 .wp_gpio = SD1_GPIO_WP,
225 .cd_gpio = SD1_GPIO_CD,
226 .wp_type = ESDHC_WP_GPIO,
227 .cd_type = ESDHC_CD_GPIO,
228};
229
230static void __init mx25pdk_init(void)
231{
232 imx25_soc_init();
233
234 mxc_iomux_v3_setup_multiple_pads(mx25pdk_pads,
235 ARRAY_SIZE(mx25pdk_pads));
236
237 imx25_add_imx_uart0(&uart_pdata);
238 imx25_add_fsl_usb2_udc(&otg_device_pdata);
239 imx25_add_mxc_ehci_hs(&usbh2_pdata);
240 imx25_add_mxc_nand(&mx25pdk_nand_board_info);
241 imx25_add_imxdi_rtc();
242 imx25_add_imx_fb(&mx25pdk_fb_pdata);
243 imx25_add_imx2_wdt();
244
245 mx25pdk_fec_reset();
246 imx25_add_fec(&mx25_fec_pdata);
247 imx25_add_imx_keypad(&mx25pdk_keymap_data);
248
249 imx25_add_sdhci_esdhc_imx(0, &mx25pdk_esdhc_pdata);
250 imx25_add_imx_i2c0(&mx25_3ds_i2c0_data);
251
252 gpio_request_one(MX25PDK_CAN_PWDN, GPIOF_OUT_INIT_LOW, "can-pwdn");
253 imx25_add_flexcan0();
254}
255
256static void __init mx25pdk_timer_init(void)
257{
258 mx25_clocks_init();
259}
260
261MACHINE_START(MX25_3DS, "Freescale MX25PDK (3DS)")
262 /* Maintainer: Freescale Semiconductor, Inc. */
263 .atag_offset = 0x100,
264 .map_io = mx25_map_io,
265 .init_early = imx25_init_early,
266 .init_irq = mx25_init_irq,
267 .init_time = mx25pdk_timer_init,
268 .init_machine = mx25pdk_init,
269 .restart = mxc_restart,
270MACHINE_END
diff --git a/arch/arm/mach-imx/mach-mx35_3ds.c b/arch/arm/mach-imx/mach-mx35_3ds.c
index 72cd77d21f63..7e315f00648d 100644
--- a/arch/arm/mach-imx/mach-mx35_3ds.c
+++ b/arch/arm/mach-imx/mach-mx35_3ds.c
@@ -166,7 +166,7 @@ static struct platform_device *devices[] __initdata = {
166 &mx35pdk_flash, 166 &mx35pdk_flash,
167}; 167};
168 168
169static iomux_v3_cfg_t mx35pdk_pads[] = { 169static const iomux_v3_cfg_t mx35pdk_pads[] __initconst = {
170 /* UART1 */ 170 /* UART1 */
171 MX35_PAD_CTS1__UART1_CTS, 171 MX35_PAD_CTS1__UART1_CTS,
172 MX35_PAD_RTS1__UART1_RTS, 172 MX35_PAD_RTS1__UART1_RTS,
diff --git a/arch/arm/mach-imx/mach-pcm043.c b/arch/arm/mach-imx/mach-pcm043.c
index b623bcaca76c..e447e59c0604 100644
--- a/arch/arm/mach-imx/mach-pcm043.c
+++ b/arch/arm/mach-imx/mach-pcm043.c
@@ -129,7 +129,7 @@ static struct platform_device *devices[] __initdata = {
129 &pcm043_flash, 129 &pcm043_flash,
130}; 130};
131 131
132static iomux_v3_cfg_t pcm043_pads[] = { 132static const iomux_v3_cfg_t pcm043_pads[] __initconst = {
133 /* UART1 */ 133 /* UART1 */
134 MX35_PAD_CTS1__UART1_CTS, 134 MX35_PAD_CTS1__UART1_CTS,
135 MX35_PAD_RTS1__UART1_RTS, 135 MX35_PAD_RTS1__UART1_RTS,
diff --git a/arch/arm/mach-imx/mach-vpr200.c b/arch/arm/mach-imx/mach-vpr200.c
index 97836e94451c..27a8f7e3ec08 100644
--- a/arch/arm/mach-imx/mach-vpr200.c
+++ b/arch/arm/mach-imx/mach-vpr200.c
@@ -161,7 +161,7 @@ static struct i2c_board_info vpr200_i2c_devices[] = {
161 } 161 }
162}; 162};
163 163
164static iomux_v3_cfg_t vpr200_pads[] = { 164static const iomux_v3_cfg_t vpr200_pads[] __initconst = {
165 /* UART1 */ 165 /* UART1 */
166 MX35_PAD_TXD1__UART1_TXD_MUX, 166 MX35_PAD_TXD1__UART1_TXD_MUX,
167 MX35_PAD_RXD1__UART1_RXD_MUX, 167 MX35_PAD_RXD1__UART1_RXD_MUX,
diff --git a/arch/arm/mach-imx/mm-imx25.c b/arch/arm/mach-imx/mm-imx25.c
deleted file mode 100644
index 5211f62c624e..000000000000
--- a/arch/arm/mach-imx/mm-imx25.c
+++ /dev/null
@@ -1,89 +0,0 @@
1/*
2 * Copyright (C) 1999,2000 Arm Limited
3 * Copyright (C) 2000 Deep Blue Solutions Ltd
4 * Copyright (C) 2002 Shane Nay (shane@minirl.com)
5 * Copyright 2005-2007 Freescale Semiconductor, Inc. All Rights Reserved.
6 * - add MX31 specific definitions
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 */
18
19#include <linux/mm.h>
20#include <linux/init.h>
21#include <linux/err.h>
22#include <linux/pinctrl/machine.h>
23
24#include <asm/pgtable.h>
25#include <asm/mach/map.h>
26
27#include "common.h"
28#include "devices/devices-common.h"
29#include "hardware.h"
30#include "iomux-v3.h"
31#include "mx25.h"
32
33/*
34 * This table defines static virtual address mappings for I/O regions.
35 * These are the mappings common across all MX25 boards.
36 */
37static struct map_desc mx25_io_desc[] __initdata = {
38 imx_map_entry(MX25, AVIC, MT_DEVICE_NONSHARED),
39 imx_map_entry(MX25, AIPS1, MT_DEVICE_NONSHARED),
40 imx_map_entry(MX25, AIPS2, MT_DEVICE_NONSHARED),
41};
42
43/*
44 * This function initializes the memory map. It is called during the
45 * system startup to create static physical to virtual memory mappings
46 * for the IO modules.
47 */
48void __init mx25_map_io(void)
49{
50 iotable_init(mx25_io_desc, ARRAY_SIZE(mx25_io_desc));
51}
52
53void __init imx25_init_early(void)
54{
55 mxc_set_cpu_type(MXC_CPU_MX25);
56 mxc_iomux_v3_init(MX25_IO_ADDRESS(MX25_IOMUXC_BASE_ADDR));
57}
58
59void __init mx25_init_irq(void)
60{
61 mxc_init_irq(MX25_IO_ADDRESS(MX25_AVIC_BASE_ADDR));
62}
63
64static struct sdma_platform_data imx25_sdma_pdata __initdata = {
65 .fw_name = "sdma-imx25.bin",
66};
67
68static const struct resource imx25_audmux_res[] __initconst = {
69 DEFINE_RES_MEM(MX25_AUDMUX_BASE_ADDR, SZ_16K),
70};
71
72void __init imx25_soc_init(void)
73{
74 mxc_arch_reset_init(MX25_IO_ADDRESS(MX25_WDOG_BASE_ADDR));
75 mxc_device_init();
76
77 /* i.mx25 has the i.mx35 type gpio */
78 mxc_register_gpio("imx35-gpio", 0, MX25_GPIO1_BASE_ADDR, SZ_16K, MX25_INT_GPIO1, 0);
79 mxc_register_gpio("imx35-gpio", 1, MX25_GPIO2_BASE_ADDR, SZ_16K, MX25_INT_GPIO2, 0);
80 mxc_register_gpio("imx35-gpio", 2, MX25_GPIO3_BASE_ADDR, SZ_16K, MX25_INT_GPIO3, 0);
81 mxc_register_gpio("imx35-gpio", 3, MX25_GPIO4_BASE_ADDR, SZ_16K, MX25_INT_GPIO4, 0);
82
83 pinctrl_provide_dummies();
84 /* i.mx25 has the i.mx35 type sdma */
85 imx_add_imx_sdma("imx35-sdma", MX25_SDMA_BASE_ADDR, MX25_INT_SDMA, &imx25_sdma_pdata);
86 /* i.mx25 has the i.mx31 type audmux */
87 platform_device_register_simple("imx31-audmux", 0, imx25_audmux_res,
88 ARRAY_SIZE(imx25_audmux_res));
89}
diff --git a/arch/arm/mach-imx/mx25.h b/arch/arm/mach-imx/mx25.h
deleted file mode 100644
index ec466400a200..000000000000
--- a/arch/arm/mach-imx/mx25.h
+++ /dev/null
@@ -1,117 +0,0 @@
1#ifndef __MACH_MX25_H__
2#define __MACH_MX25_H__
3
4#define MX25_AIPS1_BASE_ADDR 0x43f00000
5#define MX25_AIPS1_SIZE SZ_1M
6#define MX25_AIPS2_BASE_ADDR 0x53f00000
7#define MX25_AIPS2_SIZE SZ_1M
8#define MX25_AVIC_BASE_ADDR 0x68000000
9#define MX25_AVIC_SIZE SZ_1M
10
11#define MX25_I2C1_BASE_ADDR (MX25_AIPS1_BASE_ADDR + 0x80000)
12#define MX25_I2C3_BASE_ADDR (MX25_AIPS1_BASE_ADDR + 0x84000)
13#define MX25_CAN1_BASE_ADDR (MX25_AIPS1_BASE_ADDR + 0x88000)
14#define MX25_CAN2_BASE_ADDR (MX25_AIPS1_BASE_ADDR + 0x8c000)
15#define MX25_I2C2_BASE_ADDR (MX25_AIPS1_BASE_ADDR + 0x98000)
16#define MX25_CSPI1_BASE_ADDR (MX25_AIPS1_BASE_ADDR + 0xa4000)
17#define MX25_IOMUXC_BASE_ADDR (MX25_AIPS1_BASE_ADDR + 0xac000)
18
19#define MX25_CRM_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0x80000)
20#define MX25_GPT1_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0x90000)
21#define MX25_GPIO4_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0x9c000)
22#define MX25_PWM2_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0xa0000)
23#define MX25_GPIO3_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0xa4000)
24#define MX25_PWM3_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0xa8000)
25#define MX25_PWM4_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0xc8000)
26#define MX25_GPIO1_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0xcc000)
27#define MX25_GPIO2_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0xd0000)
28#define MX25_WDOG_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0xdc000)
29#define MX25_PWM1_BASE_ADDR (MX25_AIPS2_BASE_ADDR + 0xe0000)
30
31#define MX25_UART1_BASE_ADDR 0x43f90000
32#define MX25_UART2_BASE_ADDR 0x43f94000
33#define MX25_AUDMUX_BASE_ADDR 0x43fb0000
34#define MX25_UART3_BASE_ADDR 0x5000c000
35#define MX25_UART4_BASE_ADDR 0x50008000
36#define MX25_UART5_BASE_ADDR 0x5002c000
37
38#define MX25_CSPI3_BASE_ADDR 0x50004000
39#define MX25_CSPI2_BASE_ADDR 0x50010000
40#define MX25_FEC_BASE_ADDR 0x50038000
41#define MX25_SSI2_BASE_ADDR 0x50014000
42#define MX25_SSI1_BASE_ADDR 0x50034000
43#define MX25_NFC_BASE_ADDR 0xbb000000
44#define MX25_IIM_BASE_ADDR 0x53ff0000
45#define MX25_DRYICE_BASE_ADDR 0x53ffc000
46#define MX25_ESDHC1_BASE_ADDR 0x53fb4000
47#define MX25_ESDHC2_BASE_ADDR 0x53fb8000
48#define MX25_LCDC_BASE_ADDR 0x53fbc000
49#define MX25_KPP_BASE_ADDR 0x43fa8000
50#define MX25_SDMA_BASE_ADDR 0x53fd4000
51#define MX25_USB_BASE_ADDR 0x53ff4000
52#define MX25_USB_OTG_BASE_ADDR (MX25_USB_BASE_ADDR + 0x0000)
53/*
54 * The reference manual (IMX25RM, Rev. 1, 06/2009) specifies an offset of 0x200
55 * for the host controller. Early documentation drafts specified 0x400 and
56 * Freescale internal sources confirm only the latter value to work.
57 */
58#define MX25_USB_HS_BASE_ADDR (MX25_USB_BASE_ADDR + 0x0400)
59#define MX25_CSI_BASE_ADDR 0x53ff8000
60
61#define MX25_IO_P2V(x) IMX_IO_P2V(x)
62#define MX25_IO_ADDRESS(x) IOMEM(MX25_IO_P2V(x))
63
64/*
65 * Interrupt numbers
66 */
67#include <asm/irq.h>
68#define MX25_INT_CSPI3 (NR_IRQS_LEGACY + 0)
69#define MX25_INT_I2C1 (NR_IRQS_LEGACY + 3)
70#define MX25_INT_I2C2 (NR_IRQS_LEGACY + 4)
71#define MX25_INT_UART4 (NR_IRQS_LEGACY + 5)
72#define MX25_INT_ESDHC2 (NR_IRQS_LEGACY + 8)
73#define MX25_INT_ESDHC1 (NR_IRQS_LEGACY + 9)
74#define MX25_INT_I2C3 (NR_IRQS_LEGACY + 10)
75#define MX25_INT_SSI2 (NR_IRQS_LEGACY + 11)
76#define MX25_INT_SSI1 (NR_IRQS_LEGACY + 12)
77#define MX25_INT_CSPI2 (NR_IRQS_LEGACY + 13)
78#define MX25_INT_CSPI1 (NR_IRQS_LEGACY + 14)
79#define MX25_INT_GPIO3 (NR_IRQS_LEGACY + 16)
80#define MX25_INT_CSI (NR_IRQS_LEGACY + 17)
81#define MX25_INT_UART3 (NR_IRQS_LEGACY + 18)
82#define MX25_INT_GPIO4 (NR_IRQS_LEGACY + 23)
83#define MX25_INT_KPP (NR_IRQS_LEGACY + 24)
84#define MX25_INT_DRYICE (NR_IRQS_LEGACY + 25)
85#define MX25_INT_PWM1 (NR_IRQS_LEGACY + 26)
86#define MX25_INT_UART2 (NR_IRQS_LEGACY + 32)
87#define MX25_INT_NFC (NR_IRQS_LEGACY + 33)
88#define MX25_INT_SDMA (NR_IRQS_LEGACY + 34)
89#define MX25_INT_USB_HS (NR_IRQS_LEGACY + 35)
90#define MX25_INT_PWM2 (NR_IRQS_LEGACY + 36)
91#define MX25_INT_USB_OTG (NR_IRQS_LEGACY + 37)
92#define MX25_INT_LCDC (NR_IRQS_LEGACY + 39)
93#define MX25_INT_UART5 (NR_IRQS_LEGACY + 40)
94#define MX25_INT_PWM3 (NR_IRQS_LEGACY + 41)
95#define MX25_INT_PWM4 (NR_IRQS_LEGACY + 42)
96#define MX25_INT_CAN1 (NR_IRQS_LEGACY + 43)
97#define MX25_INT_CAN2 (NR_IRQS_LEGACY + 44)
98#define MX25_INT_UART1 (NR_IRQS_LEGACY + 45)
99#define MX25_INT_GPIO2 (NR_IRQS_LEGACY + 51)
100#define MX25_INT_GPIO1 (NR_IRQS_LEGACY + 52)
101#define MX25_INT_GPT1 (NR_IRQS_LEGACY + 54)
102#define MX25_INT_FEC (NR_IRQS_LEGACY + 57)
103
104#define MX25_DMA_REQ_SSI2_RX1 22
105#define MX25_DMA_REQ_SSI2_TX1 23
106#define MX25_DMA_REQ_SSI2_RX0 24
107#define MX25_DMA_REQ_SSI2_TX0 25
108#define MX25_DMA_REQ_SSI1_RX1 26
109#define MX25_DMA_REQ_SSI1_TX1 27
110#define MX25_DMA_REQ_SSI1_RX0 28
111#define MX25_DMA_REQ_SSI1_TX0 29
112
113#ifndef __ASSEMBLY__
114extern int mx25_revision(void);
115#endif
116
117#endif /* ifndef __MACH_MX25_H__ */
diff --git a/arch/arm/mach-imx/pm-imx6.c b/arch/arm/mach-imx/pm-imx6.c
index 46fd695203c7..6a7c6fc780cc 100644
--- a/arch/arm/mach-imx/pm-imx6.c
+++ b/arch/arm/mach-imx/pm-imx6.c
@@ -310,10 +310,12 @@ int imx6q_set_lpm(enum mxc_cpu_pwr_mode mode)
310 * Low-Power mode. 310 * Low-Power mode.
311 * 3) Software should mask IRQ #32 right after CCM Low-Power mode 311 * 3) Software should mask IRQ #32 right after CCM Low-Power mode
312 * is set (set bits 0-1 of CCM_CLPCR). 312 * is set (set bits 0-1 of CCM_CLPCR).
313 *
314 * Note that IRQ #32 is GIC SPI #0.
313 */ 315 */
314 imx_gpc_hwirq_unmask(32); 316 imx_gpc_hwirq_unmask(0);
315 writel_relaxed(val, ccm_base + CLPCR); 317 writel_relaxed(val, ccm_base + CLPCR);
316 imx_gpc_hwirq_mask(32); 318 imx_gpc_hwirq_mask(0);
317 319
318 return 0; 320 return 0;
319} 321}
diff --git a/arch/arm/mach-omap1/pm.c b/arch/arm/mach-omap1/pm.c
index 34b4c0044961..dd94567c3628 100644
--- a/arch/arm/mach-omap1/pm.c
+++ b/arch/arm/mach-omap1/pm.c
@@ -71,13 +71,7 @@ static unsigned int mpui7xx_sleep_save[MPUI7XX_SLEEP_SAVE_SIZE];
71static unsigned int mpui1510_sleep_save[MPUI1510_SLEEP_SAVE_SIZE]; 71static unsigned int mpui1510_sleep_save[MPUI1510_SLEEP_SAVE_SIZE];
72static unsigned int mpui1610_sleep_save[MPUI1610_SLEEP_SAVE_SIZE]; 72static unsigned int mpui1610_sleep_save[MPUI1610_SLEEP_SAVE_SIZE];
73 73
74#ifndef CONFIG_OMAP_32K_TIMER 74static unsigned short enable_dyn_sleep;
75
76static unsigned short enable_dyn_sleep = 0;
77
78#else
79
80static unsigned short enable_dyn_sleep = 1;
81 75
82static ssize_t idle_show(struct kobject *kobj, struct kobj_attribute *attr, 76static ssize_t idle_show(struct kobject *kobj, struct kobj_attribute *attr,
83 char *buf) 77 char *buf)
@@ -90,8 +84,9 @@ static ssize_t idle_store(struct kobject *kobj, struct kobj_attribute *attr,
90{ 84{
91 unsigned short value; 85 unsigned short value;
92 if (sscanf(buf, "%hu", &value) != 1 || 86 if (sscanf(buf, "%hu", &value) != 1 ||
93 (value != 0 && value != 1)) { 87 (value != 0 && value != 1) ||
94 printk(KERN_ERR "idle_sleep_store: Invalid value\n"); 88 (value != 0 && !IS_ENABLED(CONFIG_OMAP_32K_TIMER))) {
89 pr_err("idle_sleep_store: Invalid value\n");
95 return -EINVAL; 90 return -EINVAL;
96 } 91 }
97 enable_dyn_sleep = value; 92 enable_dyn_sleep = value;
@@ -101,7 +96,6 @@ static ssize_t idle_store(struct kobject *kobj, struct kobj_attribute *attr,
101static struct kobj_attribute sleep_while_idle_attr = 96static struct kobj_attribute sleep_while_idle_attr =
102 __ATTR(sleep_while_idle, 0644, idle_show, idle_store); 97 __ATTR(sleep_while_idle, 0644, idle_show, idle_store);
103 98
104#endif
105 99
106static void (*omap_sram_suspend)(unsigned long r0, unsigned long r1) = NULL; 100static void (*omap_sram_suspend)(unsigned long r0, unsigned long r1) = NULL;
107 101
@@ -115,16 +109,11 @@ void omap1_pm_idle(void)
115{ 109{
116 extern __u32 arm_idlect1_mask; 110 extern __u32 arm_idlect1_mask;
117 __u32 use_idlect1 = arm_idlect1_mask; 111 __u32 use_idlect1 = arm_idlect1_mask;
118 int do_sleep = 0;
119 112
120 local_fiq_disable(); 113 local_fiq_disable();
121 114
122#if defined(CONFIG_OMAP_MPU_TIMER) && !defined(CONFIG_OMAP_DM_TIMER) 115#if defined(CONFIG_OMAP_MPU_TIMER) && !defined(CONFIG_OMAP_DM_TIMER)
123#warning Enable 32kHz OS timer in order to allow sleep states in idle
124 use_idlect1 = use_idlect1 & ~(1 << 9); 116 use_idlect1 = use_idlect1 & ~(1 << 9);
125#else
126 if (enable_dyn_sleep)
127 do_sleep = 1;
128#endif 117#endif
129 118
130#ifdef CONFIG_OMAP_DM_TIMER 119#ifdef CONFIG_OMAP_DM_TIMER
@@ -134,10 +123,12 @@ void omap1_pm_idle(void)
134 if (omap_dma_running()) 123 if (omap_dma_running())
135 use_idlect1 &= ~(1 << 6); 124 use_idlect1 &= ~(1 << 6);
136 125
137 /* We should be able to remove the do_sleep variable and multiple 126 /*
127 * We should be able to remove the do_sleep variable and multiple
138 * tests above as soon as drivers, timer and DMA code have been fixed. 128 * tests above as soon as drivers, timer and DMA code have been fixed.
139 * Even the sleep block count should become obsolete. */ 129 * Even the sleep block count should become obsolete.
140 if ((use_idlect1 != ~0) || !do_sleep) { 130 */
131 if ((use_idlect1 != ~0) || !enable_dyn_sleep) {
141 132
142 __u32 saved_idlect1 = omap_readl(ARM_IDLECT1); 133 __u32 saved_idlect1 = omap_readl(ARM_IDLECT1);
143 if (cpu_is_omap15xx()) 134 if (cpu_is_omap15xx())
@@ -635,15 +626,25 @@ static const struct platform_suspend_ops omap_pm_ops = {
635 626
636static int __init omap_pm_init(void) 627static int __init omap_pm_init(void)
637{ 628{
638 629 int error = 0;
639#ifdef CONFIG_OMAP_32K_TIMER
640 int error;
641#endif
642 630
643 if (!cpu_class_is_omap1()) 631 if (!cpu_class_is_omap1())
644 return -ENODEV; 632 return -ENODEV;
645 633
646 printk("Power Management for TI OMAP.\n"); 634 pr_info("Power Management for TI OMAP.\n");
635
636 if (!IS_ENABLED(CONFIG_OMAP_32K_TIMER))
637 pr_info("OMAP1 PM: sleep states in idle disabled due to no 32KiHz timer\n");
638
639 if (!IS_ENABLED(CONFIG_OMAP_DM_TIMER))
640 pr_info("OMAP1 PM: sleep states in idle disabled due to no DMTIMER support\n");
641
642 if (IS_ENABLED(CONFIG_OMAP_32K_TIMER) &&
643 IS_ENABLED(CONFIG_OMAP_DM_TIMER)) {
644 /* OMAP16xx only */
645 pr_info("OMAP1 PM: sleep states in idle enabled\n");
646 enable_dyn_sleep = 1;
647 }
647 648
648 /* 649 /*
649 * We copy the assembler sleep/wakeup routines to SRAM. 650 * We copy the assembler sleep/wakeup routines to SRAM.
@@ -693,17 +694,15 @@ static int __init omap_pm_init(void)
693 omap_pm_init_debugfs(); 694 omap_pm_init_debugfs();
694#endif 695#endif
695 696
696#ifdef CONFIG_OMAP_32K_TIMER
697 error = sysfs_create_file(power_kobj, &sleep_while_idle_attr.attr); 697 error = sysfs_create_file(power_kobj, &sleep_while_idle_attr.attr);
698 if (error) 698 if (error)
699 printk(KERN_ERR "sysfs_create_file failed: %d\n", error); 699 printk(KERN_ERR "sysfs_create_file failed: %d\n", error);
700#endif
701 700
702 if (cpu_is_omap16xx()) { 701 if (cpu_is_omap16xx()) {
703 /* configure LOW_PWR pin */ 702 /* configure LOW_PWR pin */
704 omap_cfg_reg(T20_1610_LOW_PWR); 703 omap_cfg_reg(T20_1610_LOW_PWR);
705 } 704 }
706 705
707 return 0; 706 return error;
708} 707}
709__initcall(omap_pm_init); 708__initcall(omap_pm_init);
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
index 02f5f3faac1f..f92f389890bd 100644
--- a/arch/arm/mach-omap2/Kconfig
+++ b/arch/arm/mach-omap2/Kconfig
@@ -69,6 +69,7 @@ config SOC_DRA7XX
69 select ARM_GIC 69 select ARM_GIC
70 select HAVE_ARM_ARCH_TIMER 70 select HAVE_ARM_ARCH_TIMER
71 select IRQ_CROSSBAR 71 select IRQ_CROSSBAR
72 select ARM_ERRATA_798181 if SMP
72 73
73config ARCH_OMAP2PLUS 74config ARCH_OMAP2PLUS
74 bool 75 bool
@@ -279,27 +280,6 @@ config OMAP3_SDRC_AC_TIMING
279 wish to say no. Selecting yes without understanding what is 280 wish to say no. Selecting yes without understanding what is
280 going on could result in system crashes; 281 going on could result in system crashes;
281 282
282config OMAP4_ERRATA_I688
283 bool "OMAP4 errata: Async Bridge Corruption"
284 depends on (ARCH_OMAP4 || SOC_OMAP5) && !ARCH_MULTIPLATFORM
285 select ARCH_HAS_BARRIERS
286 help
287 If a data is stalled inside asynchronous bridge because of back
288 pressure, it may be accepted multiple times, creating pointer
289 misalignment that will corrupt next transfers on that data path
290 until next reset of the system (No recovery procedure once the
291 issue is hit, the path remains consistently broken). Async bridge
292 can be found on path between MPU to EMIF and MPU to L3 interconnect.
293 This situation can happen only when the idle is initiated by a
294 Master Request Disconnection (which is trigged by software when
295 executing WFI on CPU).
296 The work-around for this errata needs all the initiators connected
297 through async bridge must ensure that data path is properly drained
298 before issuing WFI. This condition will be met if one Strongly ordered
299 access is performed to the target right before executing the WFI.
300 In MPU case, L3 T2ASYNC FIFO and DDR T2ASYNC FIFO needs to be drained.
301 IO barrier ensure that there is no synchronisation loss on initiators
302 operating on both interconnect port simultaneously.
303endmenu 283endmenu
304 284
305endif 285endif
diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c
index 6124db5c37ae..a699d7169307 100644
--- a/arch/arm/mach-omap2/clock.c
+++ b/arch/arm/mach-omap2/clock.c
@@ -23,6 +23,9 @@
23#include <linux/clk-provider.h> 23#include <linux/clk-provider.h>
24#include <linux/io.h> 24#include <linux/io.h>
25#include <linux/bitops.h> 25#include <linux/bitops.h>
26#include <linux/regmap.h>
27#include <linux/of_address.h>
28#include <linux/bootmem.h>
26#include <asm/cpu.h> 29#include <asm/cpu.h>
27 30
28#include <trace/events/power.h> 31#include <trace/events/power.h>
@@ -72,30 +75,110 @@ struct ti_clk_features ti_clk_features;
72static bool clkdm_control = true; 75static bool clkdm_control = true;
73 76
74static LIST_HEAD(clk_hw_omap_clocks); 77static LIST_HEAD(clk_hw_omap_clocks);
75void __iomem *clk_memmaps[CLK_MAX_MEMMAPS]; 78
79struct clk_iomap {
80 struct regmap *regmap;
81 void __iomem *mem;
82};
83
84static struct clk_iomap *clk_memmaps[CLK_MAX_MEMMAPS];
85
86static void clk_memmap_writel(u32 val, void __iomem *reg)
87{
88 struct clk_omap_reg *r = (struct clk_omap_reg *)&reg;
89 struct clk_iomap *io = clk_memmaps[r->index];
90
91 if (io->regmap)
92 regmap_write(io->regmap, r->offset, val);
93 else
94 writel_relaxed(val, io->mem + r->offset);
95}
96
97static u32 clk_memmap_readl(void __iomem *reg)
98{
99 u32 val;
100 struct clk_omap_reg *r = (struct clk_omap_reg *)&reg;
101 struct clk_iomap *io = clk_memmaps[r->index];
102
103 if (io->regmap)
104 regmap_read(io->regmap, r->offset, &val);
105 else
106 val = readl_relaxed(io->mem + r->offset);
107
108 return val;
109}
76 110
77void omap2_clk_writel(u32 val, struct clk_hw_omap *clk, void __iomem *reg) 111void omap2_clk_writel(u32 val, struct clk_hw_omap *clk, void __iomem *reg)
78{ 112{
79 if (clk->flags & MEMMAP_ADDRESSING) { 113 if (WARN_ON_ONCE(!(clk->flags & MEMMAP_ADDRESSING)))
80 struct clk_omap_reg *r = (struct clk_omap_reg *)&reg;
81 writel_relaxed(val, clk_memmaps[r->index] + r->offset);
82 } else {
83 writel_relaxed(val, reg); 114 writel_relaxed(val, reg);
84 } 115 else
116 clk_memmap_writel(val, reg);
85} 117}
86 118
87u32 omap2_clk_readl(struct clk_hw_omap *clk, void __iomem *reg) 119u32 omap2_clk_readl(struct clk_hw_omap *clk, void __iomem *reg)
88{ 120{
89 u32 val; 121 if (WARN_ON_ONCE(!(clk->flags & MEMMAP_ADDRESSING)))
122 return readl_relaxed(reg);
123 else
124 return clk_memmap_readl(reg);
125}
90 126
91 if (clk->flags & MEMMAP_ADDRESSING) { 127static struct ti_clk_ll_ops omap_clk_ll_ops = {
92 struct clk_omap_reg *r = (struct clk_omap_reg *)&reg; 128 .clk_readl = clk_memmap_readl,
93 val = readl_relaxed(clk_memmaps[r->index] + r->offset); 129 .clk_writel = clk_memmap_writel,
94 } else { 130};
95 val = readl_relaxed(reg);
96 }
97 131
98 return val; 132/**
133 * omap2_clk_provider_init - initialize a clock provider
134 * @match_table: DT device table to match for devices to init
135 * @np: device node pointer for the this clock provider
136 * @index: index for the clock provider
137 + @syscon: syscon regmap pointer
138 * @mem: iomem pointer for the clock provider memory area, only used if
139 * syscon is not provided
140 *
141 * Initializes a clock provider module (CM/PRM etc.), registering
142 * the memory mapping at specified index and initializing the
143 * low level driver infrastructure. Returns 0 in success.
144 */
145int __init omap2_clk_provider_init(struct device_node *np, int index,
146 struct regmap *syscon, void __iomem *mem)
147{
148 struct clk_iomap *io;
149
150 ti_clk_ll_ops = &omap_clk_ll_ops;
151
152 io = kzalloc(sizeof(*io), GFP_KERNEL);
153
154 io->regmap = syscon;
155 io->mem = mem;
156
157 clk_memmaps[index] = io;
158
159 ti_dt_clk_init_provider(np, index);
160
161 return 0;
162}
163
164/**
165 * omap2_clk_legacy_provider_init - initialize a legacy clock provider
166 * @index: index for the clock provider
167 * @mem: iomem pointer for the clock provider memory area
168 *
169 * Initializes a legacy clock provider memory mapping.
170 */
171void __init omap2_clk_legacy_provider_init(int index, void __iomem *mem)
172{
173 struct clk_iomap *io;
174
175 ti_clk_ll_ops = &omap_clk_ll_ops;
176
177 io = memblock_virt_alloc(sizeof(*io), 0);
178
179 io->mem = mem;
180
181 clk_memmaps[index] = io;
99} 182}
100 183
101/* 184/*
diff --git a/arch/arm/mach-omap2/clock.h b/arch/arm/mach-omap2/clock.h
index a56742f96000..652ed0ab86ec 100644
--- a/arch/arm/mach-omap2/clock.h
+++ b/arch/arm/mach-omap2/clock.h
@@ -271,10 +271,14 @@ extern const struct clksel_rate div_1_3_rates[];
271extern const struct clksel_rate div_1_4_rates[]; 271extern const struct clksel_rate div_1_4_rates[];
272extern const struct clksel_rate div31_1to31_rates[]; 272extern const struct clksel_rate div31_1to31_rates[];
273 273
274extern void __iomem *clk_memmaps[];
275
276extern int omap2_clkops_enable_clkdm(struct clk_hw *hw); 274extern int omap2_clkops_enable_clkdm(struct clk_hw *hw);
277extern void omap2_clkops_disable_clkdm(struct clk_hw *hw); 275extern void omap2_clkops_disable_clkdm(struct clk_hw *hw);
278 276
277struct regmap;
278
279int __init omap2_clk_provider_init(struct device_node *np, int index,
280 struct regmap *syscon, void __iomem *mem);
281void __init omap2_clk_legacy_provider_init(int index, void __iomem *mem);
282
279void __init ti_clk_init_features(void); 283void __init ti_clk_init_features(void);
280#endif 284#endif
diff --git a/arch/arm/mach-omap2/cm.h b/arch/arm/mach-omap2/cm.h
index 6222e87a79b6..1fe3e6b833d2 100644
--- a/arch/arm/mach-omap2/cm.h
+++ b/arch/arm/mach-omap2/cm.h
@@ -70,6 +70,8 @@ int omap_cm_module_enable(u8 mode, u8 part, u16 inst, u16 clkctrl_offs);
70int omap_cm_module_disable(u8 part, u16 inst, u16 clkctrl_offs); 70int omap_cm_module_disable(u8 part, u16 inst, u16 clkctrl_offs);
71extern int cm_register(struct cm_ll_data *cld); 71extern int cm_register(struct cm_ll_data *cld);
72extern int cm_unregister(struct cm_ll_data *cld); 72extern int cm_unregister(struct cm_ll_data *cld);
73int omap_cm_init(void);
74int omap2_cm_base_init(void);
73 75
74# endif 76# endif
75 77
diff --git a/arch/arm/mach-omap2/cm2xxx.c b/arch/arm/mach-omap2/cm2xxx.c
index ef62ac9dcd05..3e5fd3587eb1 100644
--- a/arch/arm/mach-omap2/cm2xxx.c
+++ b/arch/arm/mach-omap2/cm2xxx.c
@@ -393,7 +393,7 @@ static struct cm_ll_data omap2xxx_cm_ll_data = {
393 .wait_module_ready = &omap2xxx_cm_wait_module_ready, 393 .wait_module_ready = &omap2xxx_cm_wait_module_ready,
394}; 394};
395 395
396int __init omap2xxx_cm_init(void) 396int __init omap2xxx_cm_init(const struct omap_prcm_init_data *data)
397{ 397{
398 return cm_register(&omap2xxx_cm_ll_data); 398 return cm_register(&omap2xxx_cm_ll_data);
399} 399}
diff --git a/arch/arm/mach-omap2/cm2xxx.h b/arch/arm/mach-omap2/cm2xxx.h
index 83b6c597b0e1..7b8c79c0ce27 100644
--- a/arch/arm/mach-omap2/cm2xxx.h
+++ b/arch/arm/mach-omap2/cm2xxx.h
@@ -63,7 +63,7 @@ extern u32 omap2xxx_cm_get_core_pll_config(void);
63extern void omap2xxx_cm_set_mod_dividers(u32 mpu, u32 dsp, u32 gfx, u32 core, 63extern void omap2xxx_cm_set_mod_dividers(u32 mpu, u32 dsp, u32 gfx, u32 core,
64 u32 mdm); 64 u32 mdm);
65 65
66extern int __init omap2xxx_cm_init(void); 66int __init omap2xxx_cm_init(const struct omap_prcm_init_data *data);
67 67
68#endif 68#endif
69 69
diff --git a/arch/arm/mach-omap2/cm33xx.c b/arch/arm/mach-omap2/cm33xx.c
index cc5aac784278..7b181f929525 100644
--- a/arch/arm/mach-omap2/cm33xx.c
+++ b/arch/arm/mach-omap2/cm33xx.c
@@ -352,7 +352,7 @@ static struct cm_ll_data am33xx_cm_ll_data = {
352 .module_disable = &am33xx_cm_module_disable, 352 .module_disable = &am33xx_cm_module_disable,
353}; 353};
354 354
355int __init am33xx_cm_init(void) 355int __init am33xx_cm_init(const struct omap_prcm_init_data *data)
356{ 356{
357 return cm_register(&am33xx_cm_ll_data); 357 return cm_register(&am33xx_cm_ll_data);
358} 358}
diff --git a/arch/arm/mach-omap2/cm33xx.h b/arch/arm/mach-omap2/cm33xx.h
index 046b4b2bc9d9..a91f7d282455 100644
--- a/arch/arm/mach-omap2/cm33xx.h
+++ b/arch/arm/mach-omap2/cm33xx.h
@@ -19,6 +19,7 @@
19 19
20#include "cm.h" 20#include "cm.h"
21#include "cm-regbits-33xx.h" 21#include "cm-regbits-33xx.h"
22#include "prcm-common.h"
22 23
23/* CM base address */ 24/* CM base address */
24#define AM33XX_CM_BASE 0x44e00000 25#define AM33XX_CM_BASE 0x44e00000
@@ -374,6 +375,6 @@
374 375
375 376
376#ifndef __ASSEMBLER__ 377#ifndef __ASSEMBLER__
377int am33xx_cm_init(void); 378int am33xx_cm_init(const struct omap_prcm_init_data *data);
378#endif /* ASSEMBLER */ 379#endif /* ASSEMBLER */
379#endif 380#endif
diff --git a/arch/arm/mach-omap2/cm3xxx.c b/arch/arm/mach-omap2/cm3xxx.c
index ebead8f035f9..187fa4386718 100644
--- a/arch/arm/mach-omap2/cm3xxx.c
+++ b/arch/arm/mach-omap2/cm3xxx.c
@@ -671,8 +671,9 @@ static struct cm_ll_data omap3xxx_cm_ll_data = {
671 .wait_module_ready = &omap3xxx_cm_wait_module_ready, 671 .wait_module_ready = &omap3xxx_cm_wait_module_ready,
672}; 672};
673 673
674int __init omap3xxx_cm_init(void) 674int __init omap3xxx_cm_init(const struct omap_prcm_init_data *data)
675{ 675{
676 omap2_clk_legacy_provider_init(TI_CLKM_CM, cm_base + OMAP3430_IVA2_MOD);
676 return cm_register(&omap3xxx_cm_ll_data); 677 return cm_register(&omap3xxx_cm_ll_data);
677} 678}
678 679
diff --git a/arch/arm/mach-omap2/cm3xxx.h b/arch/arm/mach-omap2/cm3xxx.h
index 734a8581c0c4..bc444e2080a1 100644
--- a/arch/arm/mach-omap2/cm3xxx.h
+++ b/arch/arm/mach-omap2/cm3xxx.h
@@ -72,7 +72,7 @@ extern void omap3_cm_save_context(void);
72extern void omap3_cm_restore_context(void); 72extern void omap3_cm_restore_context(void);
73extern void omap3_cm_save_scratchpad_contents(u32 *ptr); 73extern void omap3_cm_save_scratchpad_contents(u32 *ptr);
74 74
75extern int __init omap3xxx_cm_init(void); 75int __init omap3xxx_cm_init(const struct omap_prcm_init_data *data);
76 76
77#endif 77#endif
78 78
diff --git a/arch/arm/mach-omap2/cm44xx.h b/arch/arm/mach-omap2/cm44xx.h
index 728d06a4af19..309a4c913448 100644
--- a/arch/arm/mach-omap2/cm44xx.h
+++ b/arch/arm/mach-omap2/cm44xx.h
@@ -23,7 +23,6 @@
23#define OMAP4_CM_CLKSTCTRL 0x0000 23#define OMAP4_CM_CLKSTCTRL 0x0000
24#define OMAP4_CM_STATICDEP 0x0004 24#define OMAP4_CM_STATICDEP 0x0004
25 25
26void omap_cm_base_init(void); 26int omap4_cm_init(const struct omap_prcm_init_data *data);
27int omap4_cm_init(void);
28 27
29#endif 28#endif
diff --git a/arch/arm/mach-omap2/cm_common.c b/arch/arm/mach-omap2/cm_common.c
index 8fe02fcedc48..23e8bcec34e3 100644
--- a/arch/arm/mach-omap2/cm_common.c
+++ b/arch/arm/mach-omap2/cm_common.c
@@ -15,10 +15,14 @@
15#include <linux/init.h> 15#include <linux/init.h>
16#include <linux/errno.h> 16#include <linux/errno.h>
17#include <linux/bug.h> 17#include <linux/bug.h>
18#include <linux/of.h>
19#include <linux/of_address.h>
18 20
19#include "cm2xxx.h" 21#include "cm2xxx.h"
20#include "cm3xxx.h" 22#include "cm3xxx.h"
23#include "cm33xx.h"
21#include "cm44xx.h" 24#include "cm44xx.h"
25#include "clock.h"
22 26
23/* 27/*
24 * cm_ll_data: function pointers to SoC-specific implementations of 28 * cm_ll_data: function pointers to SoC-specific implementations of
@@ -33,6 +37,9 @@ void __iomem *cm_base;
33/* cm2_base: base virtual address of the CM2 IP block (OMAP44xx only) */ 37/* cm2_base: base virtual address of the CM2 IP block (OMAP44xx only) */
34void __iomem *cm2_base; 38void __iomem *cm2_base;
35 39
40#define CM_NO_CLOCKS 0x1
41#define CM_SINGLE_INSTANCE 0x2
42
36/** 43/**
37 * omap2_set_globals_cm - set the CM/CM2 base addresses (for early use) 44 * omap2_set_globals_cm - set the CM/CM2 base addresses (for early use)
38 * @cm: CM base virtual address 45 * @cm: CM base virtual address
@@ -212,3 +219,152 @@ int cm_unregister(struct cm_ll_data *cld)
212 219
213 return 0; 220 return 0;
214} 221}
222
223#if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5) || \
224 defined(CONFIG_SOC_DRA7XX)
225static struct omap_prcm_init_data cm_data __initdata = {
226 .index = TI_CLKM_CM,
227 .init = omap4_cm_init,
228};
229
230static struct omap_prcm_init_data cm2_data __initdata = {
231 .index = TI_CLKM_CM2,
232 .init = omap4_cm_init,
233};
234#endif
235
236#ifdef CONFIG_ARCH_OMAP2
237static struct omap_prcm_init_data omap2_prcm_data __initdata = {
238 .index = TI_CLKM_CM,
239 .init = omap2xxx_cm_init,
240 .flags = CM_NO_CLOCKS | CM_SINGLE_INSTANCE,
241};
242#endif
243
244#ifdef CONFIG_ARCH_OMAP3
245static struct omap_prcm_init_data omap3_cm_data __initdata = {
246 .index = TI_CLKM_CM,
247 .init = omap3xxx_cm_init,
248 .flags = CM_SINGLE_INSTANCE,
249
250 /*
251 * IVA2 offset is a negative value, must offset the cm_base address
252 * by this to get it to positive side on the iomap
253 */
254 .offset = -OMAP3430_IVA2_MOD,
255};
256#endif
257
258#if defined(CONFIG_SOC_AM33XX) || defined(CONFIG_SOC_TI81XX)
259static struct omap_prcm_init_data am3_prcm_data __initdata = {
260 .index = TI_CLKM_CM,
261 .flags = CM_NO_CLOCKS | CM_SINGLE_INSTANCE,
262 .init = am33xx_cm_init,
263};
264#endif
265
266#ifdef CONFIG_SOC_AM43XX
267static struct omap_prcm_init_data am4_prcm_data __initdata = {
268 .index = TI_CLKM_CM,
269 .flags = CM_NO_CLOCKS | CM_SINGLE_INSTANCE,
270 .init = omap4_cm_init,
271};
272#endif
273
274static const struct of_device_id omap_cm_dt_match_table[] __initconst = {
275#ifdef CONFIG_ARCH_OMAP2
276 { .compatible = "ti,omap2-prcm", .data = &omap2_prcm_data },
277#endif
278#ifdef CONFIG_ARCH_OMAP3
279 { .compatible = "ti,omap3-cm", .data = &omap3_cm_data },
280#endif
281#ifdef CONFIG_ARCH_OMAP4
282 { .compatible = "ti,omap4-cm1", .data = &cm_data },
283 { .compatible = "ti,omap4-cm2", .data = &cm2_data },
284#endif
285#ifdef CONFIG_SOC_OMAP5
286 { .compatible = "ti,omap5-cm-core-aon", .data = &cm_data },
287 { .compatible = "ti,omap5-cm-core", .data = &cm2_data },
288#endif
289#ifdef CONFIG_SOC_DRA7XX
290 { .compatible = "ti,dra7-cm-core-aon", .data = &cm_data },
291 { .compatible = "ti,dra7-cm-core", .data = &cm2_data },
292#endif
293#ifdef CONFIG_SOC_AM33XX
294 { .compatible = "ti,am3-prcm", .data = &am3_prcm_data },
295#endif
296#ifdef CONFIG_SOC_AM43XX
297 { .compatible = "ti,am4-prcm", .data = &am4_prcm_data },
298#endif
299#ifdef CONFIG_SOC_TI81XX
300 { .compatible = "ti,dm814-prcm", .data = &am3_prcm_data },
301 { .compatible = "ti,dm816-prcm", .data = &am3_prcm_data },
302#endif
303 { }
304};
305
306/**
307 * omap2_cm_base_init - initialize iomappings for the CM drivers
308 *
309 * Detects and initializes the iomappings for the CM driver, based
310 * on the DT data. Returns 0 in success, negative error value
311 * otherwise.
312 */
313int __init omap2_cm_base_init(void)
314{
315 struct device_node *np;
316 const struct of_device_id *match;
317 struct omap_prcm_init_data *data;
318 void __iomem *mem;
319
320 for_each_matching_node_and_match(np, omap_cm_dt_match_table, &match) {
321 data = (struct omap_prcm_init_data *)match->data;
322
323 mem = of_iomap(np, 0);
324 if (!mem)
325 return -ENOMEM;
326
327 if (data->index == TI_CLKM_CM)
328 cm_base = mem + data->offset;
329
330 if (data->index == TI_CLKM_CM2)
331 cm2_base = mem + data->offset;
332
333 data->mem = mem;
334
335 data->np = np;
336
337 if (data->init && (data->flags & CM_SINGLE_INSTANCE ||
338 (cm_base && cm2_base)))
339 data->init(data);
340 }
341
342 return 0;
343}
344
345/**
346 * omap_cm_init - low level init for the CM drivers
347 *
348 * Initializes the low level clock infrastructure for CM drivers.
349 * Returns 0 in success, negative error value in failure.
350 */
351int __init omap_cm_init(void)
352{
353 struct device_node *np;
354 const struct of_device_id *match;
355 const struct omap_prcm_init_data *data;
356 int ret;
357
358 for_each_matching_node_and_match(np, omap_cm_dt_match_table, &match) {
359 data = match->data;
360
361 if (data->flags & CM_NO_CLOCKS)
362 continue;
363
364 ret = omap2_clk_provider_init(np, data->index, NULL, data->mem);
365 if (ret)
366 return ret;
367 }
368
369 return 0;
370}
diff --git a/arch/arm/mach-omap2/cminst44xx.c b/arch/arm/mach-omap2/cminst44xx.c
index 95a8cff66aff..2c0e07ed6b99 100644
--- a/arch/arm/mach-omap2/cminst44xx.c
+++ b/arch/arm/mach-omap2/cminst44xx.c
@@ -63,7 +63,7 @@ static void __iomem *_cm_bases[OMAP4_MAX_PRCM_PARTITIONS];
63 * Populates the base addresses of the _cm_bases 63 * Populates the base addresses of the _cm_bases
64 * array used for read/write of cm module registers. 64 * array used for read/write of cm module registers.
65 */ 65 */
66void omap_cm_base_init(void) 66static void omap_cm_base_init(void)
67{ 67{
68 _cm_bases[OMAP4430_PRM_PARTITION] = prm_base; 68 _cm_bases[OMAP4430_PRM_PARTITION] = prm_base;
69 _cm_bases[OMAP4430_CM1_PARTITION] = cm_base; 69 _cm_bases[OMAP4430_CM1_PARTITION] = cm_base;
@@ -514,8 +514,10 @@ static struct cm_ll_data omap4xxx_cm_ll_data = {
514 .module_disable = &omap4_cminst_module_disable, 514 .module_disable = &omap4_cminst_module_disable,
515}; 515};
516 516
517int __init omap4_cm_init(void) 517int __init omap4_cm_init(const struct omap_prcm_init_data *data)
518{ 518{
519 omap_cm_base_init();
520
519 return cm_register(&omap4xxx_cm_ll_data); 521 return cm_register(&omap4xxx_cm_ll_data);
520} 522}
521 523
diff --git a/arch/arm/mach-omap2/common.c b/arch/arm/mach-omap2/common.c
index 484cdadfb187..eae6a0e87c90 100644
--- a/arch/arm/mach-omap2/common.c
+++ b/arch/arm/mach-omap2/common.c
@@ -30,5 +30,4 @@ int __weak omap_secure_ram_reserve_memblock(void)
30void __init omap_reserve(void) 30void __init omap_reserve(void)
31{ 31{
32 omap_secure_ram_reserve_memblock(); 32 omap_secure_ram_reserve_memblock();
33 omap_barrier_reserve_memblock();
34} 33}
diff --git a/arch/arm/mach-omap2/common.h b/arch/arm/mach-omap2/common.h
index 46e24581d624..cf3cf22ecd42 100644
--- a/arch/arm/mach-omap2/common.h
+++ b/arch/arm/mach-omap2/common.h
@@ -200,9 +200,6 @@ void __init omap4_map_io(void);
200void __init omap5_map_io(void); 200void __init omap5_map_io(void);
201void __init ti81xx_map_io(void); 201void __init ti81xx_map_io(void);
202 202
203/* omap_barriers_init() is OMAP4 only */
204void omap_barriers_init(void);
205
206/** 203/**
207 * omap_test_timeout - busy-loop, testing a condition 204 * omap_test_timeout - busy-loop, testing a condition
208 * @cond: condition to test until it evaluates to true 205 * @cond: condition to test until it evaluates to true
diff --git a/arch/arm/mach-omap2/control.c b/arch/arm/mach-omap2/control.c
index da041b4ab29c..af95a624fe71 100644
--- a/arch/arm/mach-omap2/control.c
+++ b/arch/arm/mach-omap2/control.c
@@ -14,6 +14,9 @@
14 14
15#include <linux/kernel.h> 15#include <linux/kernel.h>
16#include <linux/io.h> 16#include <linux/io.h>
17#include <linux/of_address.h>
18#include <linux/regmap.h>
19#include <linux/mfd/syscon.h>
17 20
18#include "soc.h" 21#include "soc.h"
19#include "iomap.h" 22#include "iomap.h"
@@ -25,13 +28,15 @@
25#include "sdrc.h" 28#include "sdrc.h"
26#include "pm.h" 29#include "pm.h"
27#include "control.h" 30#include "control.h"
31#include "clock.h"
28 32
29/* Used by omap3_ctrl_save_padconf() */ 33/* Used by omap3_ctrl_save_padconf() */
30#define START_PADCONF_SAVE 0x2 34#define START_PADCONF_SAVE 0x2
31#define PADCONF_SAVE_DONE 0x1 35#define PADCONF_SAVE_DONE 0x1
32 36
33static void __iomem *omap2_ctrl_base; 37static void __iomem *omap2_ctrl_base;
34static void __iomem *omap4_ctrl_pad_base; 38static s16 omap2_ctrl_offset;
39static struct regmap *omap2_ctrl_syscon;
35 40
36#if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM) 41#if defined(CONFIG_ARCH_OMAP3) && defined(CONFIG_PM)
37struct omap3_scratchpad { 42struct omap3_scratchpad {
@@ -133,66 +138,79 @@ struct omap3_control_regs {
133static struct omap3_control_regs control_context; 138static struct omap3_control_regs control_context;
134#endif /* CONFIG_ARCH_OMAP3 && CONFIG_PM */ 139#endif /* CONFIG_ARCH_OMAP3 && CONFIG_PM */
135 140
136#define OMAP_CTRL_REGADDR(reg) (omap2_ctrl_base + (reg)) 141void __init omap2_set_globals_control(void __iomem *ctrl)
137#define OMAP4_CTRL_PAD_REGADDR(reg) (omap4_ctrl_pad_base + (reg))
138
139void __init omap2_set_globals_control(void __iomem *ctrl,
140 void __iomem *ctrl_pad)
141{ 142{
142 omap2_ctrl_base = ctrl; 143 omap2_ctrl_base = ctrl;
143 omap4_ctrl_pad_base = ctrl_pad;
144}
145
146void __iomem *omap_ctrl_base_get(void)
147{
148 return omap2_ctrl_base;
149} 144}
150 145
151u8 omap_ctrl_readb(u16 offset) 146u8 omap_ctrl_readb(u16 offset)
152{ 147{
153 return readb_relaxed(OMAP_CTRL_REGADDR(offset)); 148 u32 val;
149 u8 byte_offset = offset & 0x3;
150
151 val = omap_ctrl_readl(offset);
152
153 return (val >> (byte_offset * 8)) & 0xff;
154} 154}
155 155
156u16 omap_ctrl_readw(u16 offset) 156u16 omap_ctrl_readw(u16 offset)
157{ 157{
158 return readw_relaxed(OMAP_CTRL_REGADDR(offset)); 158 u32 val;
159 u16 byte_offset = offset & 0x2;
160
161 val = omap_ctrl_readl(offset);
162
163 return (val >> (byte_offset * 8)) & 0xffff;
159} 164}
160 165
161u32 omap_ctrl_readl(u16 offset) 166u32 omap_ctrl_readl(u16 offset)
162{ 167{
163 return readl_relaxed(OMAP_CTRL_REGADDR(offset)); 168 u32 val;
169
170 offset &= 0xfffc;
171 if (!omap2_ctrl_syscon)
172 val = readl_relaxed(omap2_ctrl_base + offset);
173 else
174 regmap_read(omap2_ctrl_syscon, omap2_ctrl_offset + offset,
175 &val);
176
177 return val;
164} 178}
165 179
166void omap_ctrl_writeb(u8 val, u16 offset) 180void omap_ctrl_writeb(u8 val, u16 offset)
167{ 181{
168 writeb_relaxed(val, OMAP_CTRL_REGADDR(offset)); 182 u32 tmp;
183 u8 byte_offset = offset & 0x3;
184
185 tmp = omap_ctrl_readl(offset);
186
187 tmp &= 0xffffffff ^ (0xff << (byte_offset * 8));
188 tmp |= val << (byte_offset * 8);
189
190 omap_ctrl_writel(tmp, offset);
169} 191}
170 192
171void omap_ctrl_writew(u16 val, u16 offset) 193void omap_ctrl_writew(u16 val, u16 offset)
172{ 194{
173 writew_relaxed(val, OMAP_CTRL_REGADDR(offset)); 195 u32 tmp;
174} 196 u8 byte_offset = offset & 0x2;
175 197
176void omap_ctrl_writel(u32 val, u16 offset) 198 tmp = omap_ctrl_readl(offset);
177{
178 writel_relaxed(val, OMAP_CTRL_REGADDR(offset));
179}
180 199
181/* 200 tmp &= 0xffffffff ^ (0xffff << (byte_offset * 8));
182 * On OMAP4 control pad are not addressable from control 201 tmp |= val << (byte_offset * 8);
183 * core base. So the common omap_ctrl_read/write APIs breaks
184 * Hence export separate APIs to manage the omap4 pad control
185 * registers. This APIs will work only for OMAP4
186 */
187 202
188u32 omap4_ctrl_pad_readl(u16 offset) 203 omap_ctrl_writel(tmp, offset);
189{
190 return readl_relaxed(OMAP4_CTRL_PAD_REGADDR(offset));
191} 204}
192 205
193void omap4_ctrl_pad_writel(u32 val, u16 offset) 206void omap_ctrl_writel(u32 val, u16 offset)
194{ 207{
195 writel_relaxed(val, OMAP4_CTRL_PAD_REGADDR(offset)); 208 offset &= 0xfffc;
209 if (!omap2_ctrl_syscon)
210 writel_relaxed(val, omap2_ctrl_base + offset);
211 else
212 regmap_write(omap2_ctrl_syscon, omap2_ctrl_offset + offset,
213 val);
196} 214}
197 215
198#ifdef CONFIG_ARCH_OMAP3 216#ifdef CONFIG_ARCH_OMAP3
@@ -611,3 +629,120 @@ void __init omap3_ctrl_init(void)
611 omap3_ctrl_setup_d2d_padconf(); 629 omap3_ctrl_setup_d2d_padconf();
612} 630}
613#endif /* CONFIG_ARCH_OMAP3 && CONFIG_PM */ 631#endif /* CONFIG_ARCH_OMAP3 && CONFIG_PM */
632
633struct control_init_data {
634 int index;
635 s16 offset;
636};
637
638static struct control_init_data ctrl_data = {
639 .index = TI_CLKM_CTRL,
640};
641
642static const struct control_init_data omap2_ctrl_data = {
643 .index = TI_CLKM_CTRL,
644 .offset = -OMAP2_CONTROL_GENERAL,
645};
646
647static const struct of_device_id omap_scrm_dt_match_table[] = {
648 { .compatible = "ti,am3-scm", .data = &ctrl_data },
649 { .compatible = "ti,am4-scm", .data = &ctrl_data },
650 { .compatible = "ti,omap2-scm", .data = &omap2_ctrl_data },
651 { .compatible = "ti,omap3-scm", .data = &omap2_ctrl_data },
652 { .compatible = "ti,dm816-scrm", .data = &ctrl_data },
653 { .compatible = "ti,omap4-scm-core", .data = &ctrl_data },
654 { .compatible = "ti,omap5-scm-core", .data = &ctrl_data },
655 { .compatible = "ti,dra7-scm-core", .data = &ctrl_data },
656 { }
657};
658
659/**
660 * omap2_control_base_init - initialize iomappings for the control driver
661 *
662 * Detects and initializes the iomappings for the control driver, based
663 * on the DT data. Returns 0 in success, negative error value
664 * otherwise.
665 */
666int __init omap2_control_base_init(void)
667{
668 struct device_node *np;
669 const struct of_device_id *match;
670 struct control_init_data *data;
671
672 for_each_matching_node_and_match(np, omap_scrm_dt_match_table, &match) {
673 data = (struct control_init_data *)match->data;
674
675 omap2_ctrl_base = of_iomap(np, 0);
676 if (!omap2_ctrl_base)
677 return -ENOMEM;
678
679 omap2_ctrl_offset = data->offset;
680 }
681
682 return 0;
683}
684
685/**
686 * omap_control_init - low level init for the control driver
687 *
688 * Initializes the low level clock infrastructure for control driver.
689 * Returns 0 in success, negative error value in failure.
690 */
691int __init omap_control_init(void)
692{
693 struct device_node *np, *scm_conf;
694 const struct of_device_id *match;
695 const struct omap_prcm_init_data *data;
696 int ret;
697 struct regmap *syscon;
698
699 for_each_matching_node_and_match(np, omap_scrm_dt_match_table, &match) {
700 data = match->data;
701
702 /*
703 * Check if we have scm_conf node, if yes, use this to
704 * access clock registers.
705 */
706 scm_conf = of_get_child_by_name(np, "scm_conf");
707
708 if (scm_conf) {
709 syscon = syscon_node_to_regmap(scm_conf);
710
711 if (IS_ERR(syscon))
712 return PTR_ERR(syscon);
713
714 omap2_ctrl_syscon = syscon;
715
716 if (of_get_child_by_name(scm_conf, "clocks")) {
717 ret = omap2_clk_provider_init(scm_conf,
718 data->index,
719 syscon, NULL);
720 if (ret)
721 return ret;
722 }
723
724 iounmap(omap2_ctrl_base);
725 omap2_ctrl_base = NULL;
726 } else {
727 /* No scm_conf found, direct access */
728 ret = omap2_clk_provider_init(np, data->index, NULL,
729 omap2_ctrl_base);
730 if (ret)
731 return ret;
732 }
733 }
734
735 return 0;
736}
737
738/**
739 * omap3_control_legacy_iomap_init - legacy iomap init for clock providers
740 *
741 * Legacy iomap init for clock provider. Needed only by legacy boot mode,
742 * where the base addresses are not parsed from DT, but still required
743 * by the clock driver to be setup properly.
744 */
745void __init omap3_control_legacy_iomap_init(void)
746{
747 omap2_clk_legacy_provider_init(TI_CLKM_SCRM, omap2_ctrl_base);
748}
diff --git a/arch/arm/mach-omap2/control.h b/arch/arm/mach-omap2/control.h
index b8a487181210..80d2b7d8e36e 100644
--- a/arch/arm/mach-omap2/control.h
+++ b/arch/arm/mach-omap2/control.h
@@ -440,15 +440,12 @@
440 440
441#ifndef __ASSEMBLY__ 441#ifndef __ASSEMBLY__
442#ifdef CONFIG_ARCH_OMAP2PLUS 442#ifdef CONFIG_ARCH_OMAP2PLUS
443extern void __iomem *omap_ctrl_base_get(void);
444extern u8 omap_ctrl_readb(u16 offset); 443extern u8 omap_ctrl_readb(u16 offset);
445extern u16 omap_ctrl_readw(u16 offset); 444extern u16 omap_ctrl_readw(u16 offset);
446extern u32 omap_ctrl_readl(u16 offset); 445extern u32 omap_ctrl_readl(u16 offset);
447extern u32 omap4_ctrl_pad_readl(u16 offset);
448extern void omap_ctrl_writeb(u8 val, u16 offset); 446extern void omap_ctrl_writeb(u8 val, u16 offset);
449extern void omap_ctrl_writew(u16 val, u16 offset); 447extern void omap_ctrl_writew(u16 val, u16 offset);
450extern void omap_ctrl_writel(u32 val, u16 offset); 448extern void omap_ctrl_writel(u32 val, u16 offset);
451extern void omap4_ctrl_pad_writel(u32 val, u16 offset);
452 449
453extern void omap3_save_scratchpad_contents(void); 450extern void omap3_save_scratchpad_contents(void);
454extern void omap3_clear_scratchpad_contents(void); 451extern void omap3_clear_scratchpad_contents(void);
@@ -464,10 +461,11 @@ extern void omap_ctrl_write_dsp_boot_mode(u8 bootmode);
464extern void omap3630_ctrl_disable_rta(void); 461extern void omap3630_ctrl_disable_rta(void);
465extern int omap3_ctrl_save_padconf(void); 462extern int omap3_ctrl_save_padconf(void);
466void omap3_ctrl_init(void); 463void omap3_ctrl_init(void);
467extern void omap2_set_globals_control(void __iomem *ctrl, 464int omap2_control_base_init(void);
468 void __iomem *ctrl_pad); 465int omap_control_init(void);
466void omap2_set_globals_control(void __iomem *ctrl);
467void __init omap3_control_legacy_iomap_init(void);
469#else 468#else
470#define omap_ctrl_base_get() 0
471#define omap_ctrl_readb(x) 0 469#define omap_ctrl_readb(x) 0
472#define omap_ctrl_readw(x) 0 470#define omap_ctrl_readw(x) 0
473#define omap_ctrl_readl(x) 0 471#define omap_ctrl_readl(x) 0
diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
index 7a050f9c37ff..f492ae147c6a 100644
--- a/arch/arm/mach-omap2/display.c
+++ b/arch/arm/mach-omap2/display.c
@@ -26,6 +26,8 @@
26#include <linux/of.h> 26#include <linux/of.h>
27#include <linux/of_platform.h> 27#include <linux/of_platform.h>
28#include <linux/slab.h> 28#include <linux/slab.h>
29#include <linux/mfd/syscon.h>
30#include <linux/regmap.h>
29 31
30#include <video/omapdss.h> 32#include <video/omapdss.h>
31#include "omap_hwmod.h" 33#include "omap_hwmod.h"
@@ -104,6 +106,10 @@ static const struct omap_dss_hwmod_data omap4_dss_hwmod_data[] __initconst = {
104 { "dss_hdmi", "omapdss_hdmi", -1 }, 106 { "dss_hdmi", "omapdss_hdmi", -1 },
105}; 107};
106 108
109#define OMAP4_DSIPHY_SYSCON_OFFSET 0x78
110
111static struct regmap *omap4_dsi_mux_syscon;
112
107static int omap4_dsi_mux_pads(int dsi_id, unsigned lanes) 113static int omap4_dsi_mux_pads(int dsi_id, unsigned lanes)
108{ 114{
109 u32 enable_mask, enable_shift; 115 u32 enable_mask, enable_shift;
@@ -124,7 +130,7 @@ static int omap4_dsi_mux_pads(int dsi_id, unsigned lanes)
124 return -ENODEV; 130 return -ENODEV;
125 } 131 }
126 132
127 reg = omap4_ctrl_pad_readl(OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_DSIPHY); 133 regmap_read(omap4_dsi_mux_syscon, OMAP4_DSIPHY_SYSCON_OFFSET, &reg);
128 134
129 reg &= ~enable_mask; 135 reg &= ~enable_mask;
130 reg &= ~pipd_mask; 136 reg &= ~pipd_mask;
@@ -132,7 +138,7 @@ static int omap4_dsi_mux_pads(int dsi_id, unsigned lanes)
132 reg |= (lanes << enable_shift) & enable_mask; 138 reg |= (lanes << enable_shift) & enable_mask;
133 reg |= (lanes << pipd_shift) & pipd_mask; 139 reg |= (lanes << pipd_shift) & pipd_mask;
134 140
135 omap4_ctrl_pad_writel(reg, OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_DSIPHY); 141 regmap_write(omap4_dsi_mux_syscon, OMAP4_DSIPHY_SYSCON_OFFSET, reg);
136 142
137 return 0; 143 return 0;
138} 144}
@@ -665,5 +671,10 @@ int __init omapdss_init_of(void)
665 return r; 671 return r;
666 } 672 }
667 673
674 /* add DSI info for omap4 */
675 node = of_find_node_by_name(NULL, "omap4_padconf_global");
676 if (node)
677 omap4_dsi_mux_syscon = syscon_node_to_regmap(node);
678
668 return 0; 679 return 0;
669} 680}
diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c
index 2a2f4d56e4c8..f8121dbc9d48 100644
--- a/arch/arm/mach-omap2/id.c
+++ b/arch/arm/mach-omap2/id.c
@@ -52,7 +52,10 @@ EXPORT_SYMBOL(omap_rev);
52 52
53int omap_type(void) 53int omap_type(void)
54{ 54{
55 u32 val = 0; 55 static u32 val = OMAP2_DEVICETYPE_MASK;
56
57 if (val < OMAP2_DEVICETYPE_MASK)
58 return val;
56 59
57 if (cpu_is_omap24xx()) { 60 if (cpu_is_omap24xx()) {
58 val = omap_ctrl_readl(OMAP24XX_CONTROL_STATUS); 61 val = omap_ctrl_readl(OMAP24XX_CONTROL_STATUS);
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c
index c4871c55bd8b..820dde8b5b04 100644
--- a/arch/arm/mach-omap2/io.c
+++ b/arch/arm/mach-omap2/io.c
@@ -306,7 +306,6 @@ void __init am33xx_map_io(void)
306void __init omap4_map_io(void) 306void __init omap4_map_io(void)
307{ 307{
308 iotable_init(omap44xx_io_desc, ARRAY_SIZE(omap44xx_io_desc)); 308 iotable_init(omap44xx_io_desc, ARRAY_SIZE(omap44xx_io_desc));
309 omap_barriers_init();
310} 309}
311#endif 310#endif
312 311
@@ -314,7 +313,6 @@ void __init omap4_map_io(void)
314void __init omap5_map_io(void) 313void __init omap5_map_io(void)
315{ 314{
316 iotable_init(omap54xx_io_desc, ARRAY_SIZE(omap54xx_io_desc)); 315 iotable_init(omap54xx_io_desc, ARRAY_SIZE(omap54xx_io_desc));
317 omap_barriers_init();
318} 316}
319#endif 317#endif
320/* 318/*
@@ -384,13 +382,9 @@ void __init omap2420_init_early(void)
384 omap2_set_globals_tap(OMAP242X_CLASS, OMAP2_L4_IO_ADDRESS(0x48014000)); 382 omap2_set_globals_tap(OMAP242X_CLASS, OMAP2_L4_IO_ADDRESS(0x48014000));
385 omap2_set_globals_sdrc(OMAP2_L3_IO_ADDRESS(OMAP2420_SDRC_BASE), 383 omap2_set_globals_sdrc(OMAP2_L3_IO_ADDRESS(OMAP2420_SDRC_BASE),
386 OMAP2_L3_IO_ADDRESS(OMAP2420_SMS_BASE)); 384 OMAP2_L3_IO_ADDRESS(OMAP2420_SMS_BASE));
387 omap2_set_globals_control(OMAP2_L4_IO_ADDRESS(OMAP242X_CTRL_BASE), 385 omap2_control_base_init();
388 NULL);
389 omap2_set_globals_prm(OMAP2_L4_IO_ADDRESS(OMAP2420_PRM_BASE));
390 omap2_set_globals_cm(OMAP2_L4_IO_ADDRESS(OMAP2420_CM_BASE), NULL);
391 omap2xxx_check_revision(); 386 omap2xxx_check_revision();
392 omap2xxx_prm_init(); 387 omap2_prcm_base_init();
393 omap2xxx_cm_init();
394 omap2xxx_voltagedomains_init(); 388 omap2xxx_voltagedomains_init();
395 omap242x_powerdomains_init(); 389 omap242x_powerdomains_init();
396 omap242x_clockdomains_init(); 390 omap242x_clockdomains_init();
@@ -414,13 +408,9 @@ void __init omap2430_init_early(void)
414 omap2_set_globals_tap(OMAP243X_CLASS, OMAP2_L4_IO_ADDRESS(0x4900a000)); 408 omap2_set_globals_tap(OMAP243X_CLASS, OMAP2_L4_IO_ADDRESS(0x4900a000));
415 omap2_set_globals_sdrc(OMAP2_L3_IO_ADDRESS(OMAP243X_SDRC_BASE), 409 omap2_set_globals_sdrc(OMAP2_L3_IO_ADDRESS(OMAP243X_SDRC_BASE),
416 OMAP2_L3_IO_ADDRESS(OMAP243X_SMS_BASE)); 410 OMAP2_L3_IO_ADDRESS(OMAP243X_SMS_BASE));
417 omap2_set_globals_control(OMAP2_L4_IO_ADDRESS(OMAP243X_CTRL_BASE), 411 omap2_control_base_init();
418 NULL);
419 omap2_set_globals_prm(OMAP2_L4_IO_ADDRESS(OMAP2430_PRM_BASE));
420 omap2_set_globals_cm(OMAP2_L4_IO_ADDRESS(OMAP2430_CM_BASE), NULL);
421 omap2xxx_check_revision(); 412 omap2xxx_check_revision();
422 omap2xxx_prm_init(); 413 omap2_prcm_base_init();
423 omap2xxx_cm_init();
424 omap2xxx_voltagedomains_init(); 414 omap2xxx_voltagedomains_init();
425 omap243x_powerdomains_init(); 415 omap243x_powerdomains_init();
426 omap243x_clockdomains_init(); 416 omap243x_clockdomains_init();
@@ -448,21 +438,30 @@ void __init omap3_init_early(void)
448 omap2_set_globals_tap(OMAP343X_CLASS, OMAP2_L4_IO_ADDRESS(0x4830A000)); 438 omap2_set_globals_tap(OMAP343X_CLASS, OMAP2_L4_IO_ADDRESS(0x4830A000));
449 omap2_set_globals_sdrc(OMAP2_L3_IO_ADDRESS(OMAP343X_SDRC_BASE), 439 omap2_set_globals_sdrc(OMAP2_L3_IO_ADDRESS(OMAP343X_SDRC_BASE),
450 OMAP2_L3_IO_ADDRESS(OMAP343X_SMS_BASE)); 440 OMAP2_L3_IO_ADDRESS(OMAP343X_SMS_BASE));
451 omap2_set_globals_control(OMAP2_L4_IO_ADDRESS(OMAP343X_CTRL_BASE), 441 /* XXX: remove these once OMAP3 is DT only */
452 NULL); 442 if (!of_have_populated_dt()) {
453 omap2_set_globals_prm(OMAP2_L4_IO_ADDRESS(OMAP3430_PRM_BASE)); 443 omap2_set_globals_control(
454 omap2_set_globals_cm(OMAP2_L4_IO_ADDRESS(OMAP3430_CM_BASE), NULL); 444 OMAP2_L4_IO_ADDRESS(OMAP343X_CTRL_BASE));
445 omap2_set_globals_prm(OMAP2_L4_IO_ADDRESS(OMAP3430_PRM_BASE));
446 omap2_set_globals_cm(OMAP2_L4_IO_ADDRESS(OMAP3430_CM_BASE),
447 NULL);
448 }
449 omap2_control_base_init();
455 omap3xxx_check_revision(); 450 omap3xxx_check_revision();
456 omap3xxx_check_features(); 451 omap3xxx_check_features();
457 omap3xxx_prm_init(); 452 omap2_prcm_base_init();
458 omap3xxx_cm_init(); 453 /* XXX: remove these once OMAP3 is DT only */
454 if (!of_have_populated_dt()) {
455 omap3xxx_prm_init(NULL);
456 omap3xxx_cm_init(NULL);
457 }
459 omap3xxx_voltagedomains_init(); 458 omap3xxx_voltagedomains_init();
460 omap3xxx_powerdomains_init(); 459 omap3xxx_powerdomains_init();
461 omap3xxx_clockdomains_init(); 460 omap3xxx_clockdomains_init();
462 omap3xxx_hwmod_init(); 461 omap3xxx_hwmod_init();
463 omap_hwmod_init_postsetup(); 462 omap_hwmod_init_postsetup();
464 if (!of_have_populated_dt()) { 463 if (!of_have_populated_dt()) {
465 omap3_prcm_legacy_iomaps_init(); 464 omap3_control_legacy_iomap_init();
466 if (soc_is_am35xx()) 465 if (soc_is_am35xx())
467 omap_clk_soc_init = am35xx_clk_legacy_init; 466 omap_clk_soc_init = am35xx_clk_legacy_init;
468 else if (cpu_is_omap3630()) 467 else if (cpu_is_omap3630())
@@ -549,14 +548,10 @@ void __init ti814x_init_early(void)
549{ 548{
550 omap2_set_globals_tap(TI814X_CLASS, 549 omap2_set_globals_tap(TI814X_CLASS,
551 OMAP2_L4_IO_ADDRESS(TI81XX_TAP_BASE)); 550 OMAP2_L4_IO_ADDRESS(TI81XX_TAP_BASE));
552 omap2_set_globals_control(OMAP2_L4_IO_ADDRESS(TI81XX_CTRL_BASE), 551 omap2_control_base_init();
553 NULL);
554 omap2_set_globals_prm(OMAP2_L4_IO_ADDRESS(TI81XX_PRCM_BASE));
555 omap2_set_globals_cm(OMAP2_L4_IO_ADDRESS(TI81XX_PRCM_BASE), NULL);
556 omap3xxx_check_revision(); 552 omap3xxx_check_revision();
557 ti81xx_check_features(); 553 ti81xx_check_features();
558 am33xx_prm_init(); 554 omap2_prcm_base_init();
559 am33xx_cm_init();
560 omap3xxx_voltagedomains_init(); 555 omap3xxx_voltagedomains_init();
561 omap3xxx_powerdomains_init(); 556 omap3xxx_powerdomains_init();
562 ti81xx_clockdomains_init(); 557 ti81xx_clockdomains_init();
@@ -570,14 +565,10 @@ void __init ti816x_init_early(void)
570{ 565{
571 omap2_set_globals_tap(TI816X_CLASS, 566 omap2_set_globals_tap(TI816X_CLASS,
572 OMAP2_L4_IO_ADDRESS(TI81XX_TAP_BASE)); 567 OMAP2_L4_IO_ADDRESS(TI81XX_TAP_BASE));
573 omap2_set_globals_control(OMAP2_L4_IO_ADDRESS(TI81XX_CTRL_BASE), 568 omap2_control_base_init();
574 NULL);
575 omap2_set_globals_prm(OMAP2_L4_IO_ADDRESS(TI81XX_PRCM_BASE));
576 omap2_set_globals_cm(OMAP2_L4_IO_ADDRESS(TI81XX_PRCM_BASE), NULL);
577 omap3xxx_check_revision(); 569 omap3xxx_check_revision();
578 ti81xx_check_features(); 570 ti81xx_check_features();
579 am33xx_prm_init(); 571 omap2_prcm_base_init();
580 am33xx_cm_init();
581 omap3xxx_voltagedomains_init(); 572 omap3xxx_voltagedomains_init();
582 omap3xxx_powerdomains_init(); 573 omap3xxx_powerdomains_init();
583 ti81xx_clockdomains_init(); 574 ti81xx_clockdomains_init();
@@ -593,14 +584,10 @@ void __init am33xx_init_early(void)
593{ 584{
594 omap2_set_globals_tap(AM335X_CLASS, 585 omap2_set_globals_tap(AM335X_CLASS,
595 AM33XX_L4_WK_IO_ADDRESS(AM33XX_TAP_BASE)); 586 AM33XX_L4_WK_IO_ADDRESS(AM33XX_TAP_BASE));
596 omap2_set_globals_control(AM33XX_L4_WK_IO_ADDRESS(AM33XX_CTRL_BASE), 587 omap2_control_base_init();
597 NULL);
598 omap2_set_globals_prm(AM33XX_L4_WK_IO_ADDRESS(AM33XX_PRCM_BASE));
599 omap2_set_globals_cm(AM33XX_L4_WK_IO_ADDRESS(AM33XX_PRCM_BASE), NULL);
600 omap3xxx_check_revision(); 588 omap3xxx_check_revision();
601 am33xx_check_features(); 589 am33xx_check_features();
602 am33xx_prm_init(); 590 omap2_prcm_base_init();
603 am33xx_cm_init();
604 am33xx_powerdomains_init(); 591 am33xx_powerdomains_init();
605 am33xx_clockdomains_init(); 592 am33xx_clockdomains_init();
606 am33xx_hwmod_init(); 593 am33xx_hwmod_init();
@@ -619,16 +606,10 @@ void __init am43xx_init_early(void)
619{ 606{
620 omap2_set_globals_tap(AM335X_CLASS, 607 omap2_set_globals_tap(AM335X_CLASS,
621 AM33XX_L4_WK_IO_ADDRESS(AM33XX_TAP_BASE)); 608 AM33XX_L4_WK_IO_ADDRESS(AM33XX_TAP_BASE));
622 omap2_set_globals_control(AM33XX_L4_WK_IO_ADDRESS(AM33XX_CTRL_BASE), 609 omap2_control_base_init();
623 NULL);
624 omap2_set_globals_prm(AM33XX_L4_WK_IO_ADDRESS(AM43XX_PRCM_BASE));
625 omap2_set_globals_cm(AM33XX_L4_WK_IO_ADDRESS(AM43XX_PRCM_BASE), NULL);
626 omap_prm_base_init();
627 omap_cm_base_init();
628 omap3xxx_check_revision(); 610 omap3xxx_check_revision();
629 am33xx_check_features(); 611 am33xx_check_features();
630 omap44xx_prm_init(); 612 omap2_prcm_base_init();
631 omap4_cm_init();
632 am43xx_powerdomains_init(); 613 am43xx_powerdomains_init();
633 am43xx_clockdomains_init(); 614 am43xx_clockdomains_init();
634 am43xx_hwmod_init(); 615 am43xx_hwmod_init();
@@ -648,19 +629,12 @@ void __init omap4430_init_early(void)
648{ 629{
649 omap2_set_globals_tap(OMAP443X_CLASS, 630 omap2_set_globals_tap(OMAP443X_CLASS,
650 OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE)); 631 OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE));
651 omap2_set_globals_control(OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE),
652 OMAP2_L4_IO_ADDRESS(OMAP443X_CTRL_BASE));
653 omap2_set_globals_prm(OMAP2_L4_IO_ADDRESS(OMAP4430_PRM_BASE));
654 omap2_set_globals_cm(OMAP2_L4_IO_ADDRESS(OMAP4430_CM_BASE),
655 OMAP2_L4_IO_ADDRESS(OMAP4430_CM2_BASE));
656 omap2_set_globals_prcm_mpu(OMAP2_L4_IO_ADDRESS(OMAP4430_PRCM_MPU_BASE)); 632 omap2_set_globals_prcm_mpu(OMAP2_L4_IO_ADDRESS(OMAP4430_PRCM_MPU_BASE));
657 omap_prm_base_init(); 633 omap2_control_base_init();
658 omap_cm_base_init();
659 omap4xxx_check_revision(); 634 omap4xxx_check_revision();
660 omap4xxx_check_features(); 635 omap4xxx_check_features();
661 omap4_cm_init(); 636 omap2_prcm_base_init();
662 omap4_pm_init_early(); 637 omap4_pm_init_early();
663 omap44xx_prm_init();
664 omap44xx_voltagedomains_init(); 638 omap44xx_voltagedomains_init();
665 omap44xx_powerdomains_init(); 639 omap44xx_powerdomains_init();
666 omap44xx_clockdomains_init(); 640 omap44xx_clockdomains_init();
@@ -683,18 +657,11 @@ void __init omap5_init_early(void)
683{ 657{
684 omap2_set_globals_tap(OMAP54XX_CLASS, 658 omap2_set_globals_tap(OMAP54XX_CLASS,
685 OMAP2_L4_IO_ADDRESS(OMAP54XX_SCM_BASE)); 659 OMAP2_L4_IO_ADDRESS(OMAP54XX_SCM_BASE));
686 omap2_set_globals_control(OMAP2_L4_IO_ADDRESS(OMAP54XX_SCM_BASE),
687 OMAP2_L4_IO_ADDRESS(OMAP54XX_CTRL_BASE));
688 omap2_set_globals_prm(OMAP2_L4_IO_ADDRESS(OMAP54XX_PRM_BASE));
689 omap2_set_globals_cm(OMAP2_L4_IO_ADDRESS(OMAP54XX_CM_CORE_AON_BASE),
690 OMAP2_L4_IO_ADDRESS(OMAP54XX_CM_CORE_BASE));
691 omap2_set_globals_prcm_mpu(OMAP2_L4_IO_ADDRESS(OMAP54XX_PRCM_MPU_BASE)); 660 omap2_set_globals_prcm_mpu(OMAP2_L4_IO_ADDRESS(OMAP54XX_PRCM_MPU_BASE));
661 omap2_control_base_init();
692 omap4_pm_init_early(); 662 omap4_pm_init_early();
693 omap_prm_base_init(); 663 omap2_prcm_base_init();
694 omap_cm_base_init();
695 omap44xx_prm_init();
696 omap5xxx_check_revision(); 664 omap5xxx_check_revision();
697 omap4_cm_init();
698 omap54xx_voltagedomains_init(); 665 omap54xx_voltagedomains_init();
699 omap54xx_powerdomains_init(); 666 omap54xx_powerdomains_init();
700 omap54xx_clockdomains_init(); 667 omap54xx_clockdomains_init();
@@ -715,18 +682,11 @@ void __init omap5_init_late(void)
715void __init dra7xx_init_early(void) 682void __init dra7xx_init_early(void)
716{ 683{
717 omap2_set_globals_tap(-1, OMAP2_L4_IO_ADDRESS(DRA7XX_TAP_BASE)); 684 omap2_set_globals_tap(-1, OMAP2_L4_IO_ADDRESS(DRA7XX_TAP_BASE));
718 omap2_set_globals_control(OMAP2_L4_IO_ADDRESS(OMAP54XX_SCM_BASE),
719 OMAP2_L4_IO_ADDRESS(DRA7XX_CTRL_BASE));
720 omap2_set_globals_prm(OMAP2_L4_IO_ADDRESS(OMAP54XX_PRM_BASE));
721 omap2_set_globals_cm(OMAP2_L4_IO_ADDRESS(DRA7XX_CM_CORE_AON_BASE),
722 OMAP2_L4_IO_ADDRESS(OMAP54XX_CM_CORE_BASE));
723 omap2_set_globals_prcm_mpu(OMAP2_L4_IO_ADDRESS(OMAP54XX_PRCM_MPU_BASE)); 685 omap2_set_globals_prcm_mpu(OMAP2_L4_IO_ADDRESS(OMAP54XX_PRCM_MPU_BASE));
686 omap2_control_base_init();
724 omap4_pm_init_early(); 687 omap4_pm_init_early();
725 omap_prm_base_init(); 688 omap2_prcm_base_init();
726 omap_cm_base_init();
727 omap44xx_prm_init();
728 dra7xxx_check_revision(); 689 dra7xxx_check_revision();
729 omap4_cm_init();
730 dra7xx_powerdomains_init(); 690 dra7xx_powerdomains_init();
731 dra7xx_clockdomains_init(); 691 dra7xx_clockdomains_init();
732 dra7xx_hwmod_init(); 692 dra7xx_hwmod_init();
@@ -764,7 +724,11 @@ int __init omap_clk_init(void)
764 ti_clk_init_features(); 724 ti_clk_init_features();
765 725
766 if (of_have_populated_dt()) { 726 if (of_have_populated_dt()) {
767 ret = of_prcm_init(); 727 ret = omap_control_init();
728 if (ret)
729 return ret;
730
731 ret = omap_prcm_init();
768 if (ret) 732 if (ret)
769 return ret; 733 return ret;
770 734
diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c
index 78064b0d4db5..176eef6ef338 100644
--- a/arch/arm/mach-omap2/mux.c
+++ b/arch/arm/mach-omap2/mux.c
@@ -1053,7 +1053,7 @@ static void __init omap_mux_init_list(struct omap_mux_partition *partition,
1053 struct omap_mux *entry; 1053 struct omap_mux *entry;
1054 1054
1055#ifdef CONFIG_OMAP_MUX 1055#ifdef CONFIG_OMAP_MUX
1056 if (!superset->muxnames || !superset->muxnames[0]) { 1056 if (!superset->muxnames[0]) {
1057 superset++; 1057 superset++;
1058 continue; 1058 continue;
1059 } 1059 }
diff --git a/arch/arm/mach-omap2/omap-secure.h b/arch/arm/mach-omap2/omap-secure.h
index dec2b05d184b..af2851fbcdf0 100644
--- a/arch/arm/mach-omap2/omap-secure.h
+++ b/arch/arm/mach-omap2/omap-secure.h
@@ -70,13 +70,6 @@ extern u32 rx51_secure_dispatcher(u32 idx, u32 process, u32 flag, u32 nargs,
70extern u32 rx51_secure_update_aux_cr(u32 set_bits, u32 clear_bits); 70extern u32 rx51_secure_update_aux_cr(u32 set_bits, u32 clear_bits);
71extern u32 rx51_secure_rng_call(u32 ptr, u32 count, u32 flag); 71extern u32 rx51_secure_rng_call(u32 ptr, u32 count, u32 flag);
72 72
73#ifdef CONFIG_OMAP4_ERRATA_I688
74extern int omap_barrier_reserve_memblock(void);
75#else
76static inline void omap_barrier_reserve_memblock(void)
77{ }
78#endif
79
80#ifdef CONFIG_SOC_HAS_REALTIME_COUNTER 73#ifdef CONFIG_SOC_HAS_REALTIME_COUNTER
81void set_cntfreq(void); 74void set_cntfreq(void);
82#else 75#else
diff --git a/arch/arm/mach-omap2/omap4-common.c b/arch/arm/mach-omap2/omap4-common.c
index cee0fe1ee6ff..afaac9e25764 100644
--- a/arch/arm/mach-omap2/omap4-common.c
+++ b/arch/arm/mach-omap2/omap4-common.c
@@ -52,75 +52,6 @@ static void __iomem *twd_base;
52 52
53#define IRQ_LOCALTIMER 29 53#define IRQ_LOCALTIMER 29
54 54
55#ifdef CONFIG_OMAP4_ERRATA_I688
56/* Used to implement memory barrier on DRAM path */
57#define OMAP4_DRAM_BARRIER_VA 0xfe600000
58
59void __iomem *dram_sync, *sram_sync;
60
61static phys_addr_t paddr;
62static u32 size;
63
64void omap_bus_sync(void)
65{
66 if (dram_sync && sram_sync) {
67 writel_relaxed(readl_relaxed(dram_sync), dram_sync);
68 writel_relaxed(readl_relaxed(sram_sync), sram_sync);
69 isb();
70 }
71}
72EXPORT_SYMBOL(omap_bus_sync);
73
74static int __init omap4_sram_init(void)
75{
76 struct device_node *np;
77 struct gen_pool *sram_pool;
78
79 np = of_find_compatible_node(NULL, NULL, "ti,omap4-mpu");
80 if (!np)
81 pr_warn("%s:Unable to allocate sram needed to handle errata I688\n",
82 __func__);
83 sram_pool = of_get_named_gen_pool(np, "sram", 0);
84 if (!sram_pool)
85 pr_warn("%s:Unable to get sram pool needed to handle errata I688\n",
86 __func__);
87 else
88 sram_sync = (void *)gen_pool_alloc(sram_pool, PAGE_SIZE);
89
90 return 0;
91}
92omap_arch_initcall(omap4_sram_init);
93
94/* Steal one page physical memory for barrier implementation */
95int __init omap_barrier_reserve_memblock(void)
96{
97
98 size = ALIGN(PAGE_SIZE, SZ_1M);
99 paddr = arm_memblock_steal(size, SZ_1M);
100
101 return 0;
102}
103
104void __init omap_barriers_init(void)
105{
106 struct map_desc dram_io_desc[1];
107
108 dram_io_desc[0].virtual = OMAP4_DRAM_BARRIER_VA;
109 dram_io_desc[0].pfn = __phys_to_pfn(paddr);
110 dram_io_desc[0].length = size;
111 dram_io_desc[0].type = MT_MEMORY_RW_SO;
112 iotable_init(dram_io_desc, ARRAY_SIZE(dram_io_desc));
113 dram_sync = (void __iomem *) dram_io_desc[0].virtual;
114
115 pr_info("OMAP4: Map 0x%08llx to 0x%08lx for dram barrier\n",
116 (long long) paddr, dram_io_desc[0].virtual);
117
118}
119#else
120void __init omap_barriers_init(void)
121{}
122#endif
123
124void gic_dist_disable(void) 55void gic_dist_disable(void)
125{ 56{
126 if (gic_dist_base_addr) 57 if (gic_dist_base_addr)
diff --git a/arch/arm/mach-omap2/pm24xx.c b/arch/arm/mach-omap2/pm24xx.c
index fe01c5a03aa2..b1aad7e1426c 100644
--- a/arch/arm/mach-omap2/pm24xx.c
+++ b/arch/arm/mach-omap2/pm24xx.c
@@ -75,9 +75,9 @@ static int omap2_enter_full_retention(void)
75 75
76 /* Clear old wake-up events */ 76 /* Clear old wake-up events */
77 /* REVISIT: These write to reserved bits? */ 77 /* REVISIT: These write to reserved bits? */
78 omap2xxx_prm_clear_mod_irqs(CORE_MOD, PM_WKST1, ~0); 78 omap_prm_clear_mod_irqs(CORE_MOD, PM_WKST1, ~0);
79 omap2xxx_prm_clear_mod_irqs(CORE_MOD, OMAP24XX_PM_WKST2, ~0); 79 omap_prm_clear_mod_irqs(CORE_MOD, OMAP24XX_PM_WKST2, ~0);
80 omap2xxx_prm_clear_mod_irqs(WKUP_MOD, PM_WKST, ~0); 80 omap_prm_clear_mod_irqs(WKUP_MOD, PM_WKST, ~0);
81 81
82 pwrdm_set_next_pwrst(core_pwrdm, PWRDM_POWER_RET); 82 pwrdm_set_next_pwrst(core_pwrdm, PWRDM_POWER_RET);
83 pwrdm_set_next_pwrst(mpu_pwrdm, PWRDM_POWER_RET); 83 pwrdm_set_next_pwrst(mpu_pwrdm, PWRDM_POWER_RET);
@@ -104,18 +104,16 @@ no_sleep:
104 clk_enable(osc_ck); 104 clk_enable(osc_ck);
105 105
106 /* clear CORE wake-up events */ 106 /* clear CORE wake-up events */
107 omap2xxx_prm_clear_mod_irqs(CORE_MOD, PM_WKST1, ~0); 107 omap_prm_clear_mod_irqs(CORE_MOD, PM_WKST1, ~0);
108 omap2xxx_prm_clear_mod_irqs(CORE_MOD, OMAP24XX_PM_WKST2, ~0); 108 omap_prm_clear_mod_irqs(CORE_MOD, OMAP24XX_PM_WKST2, ~0);
109 109
110 /* wakeup domain events - bit 1: GPT1, bit5 GPIO */ 110 /* wakeup domain events - bit 1: GPT1, bit5 GPIO */
111 omap2xxx_prm_clear_mod_irqs(WKUP_MOD, PM_WKST, 0x4 | 0x1); 111 omap_prm_clear_mod_irqs(WKUP_MOD, PM_WKST, 0x4 | 0x1);
112 112
113 /* MPU domain wake events */ 113 /* MPU domain wake events */
114 omap2xxx_prm_clear_mod_irqs(OCP_MOD, OMAP2_PRCM_IRQSTATUS_MPU_OFFSET, 114 omap_prm_clear_mod_irqs(OCP_MOD, OMAP2_PRCM_IRQSTATUS_MPU_OFFSET, 0x1);
115 0x1);
116 115
117 omap2xxx_prm_clear_mod_irqs(OCP_MOD, OMAP2_PRCM_IRQSTATUS_MPU_OFFSET, 116 omap_prm_clear_mod_irqs(OCP_MOD, OMAP2_PRCM_IRQSTATUS_MPU_OFFSET, 0x20);
118 0x20);
119 117
120 pwrdm_set_next_pwrst(mpu_pwrdm, PWRDM_POWER_ON); 118 pwrdm_set_next_pwrst(mpu_pwrdm, PWRDM_POWER_ON);
121 pwrdm_set_next_pwrst(core_pwrdm, PWRDM_POWER_ON); 119 pwrdm_set_next_pwrst(core_pwrdm, PWRDM_POWER_ON);
@@ -143,9 +141,9 @@ static void omap2_enter_mpu_retention(void)
143 * it is in retention mode. */ 141 * it is in retention mode. */
144 if (omap2_allow_mpu_retention()) { 142 if (omap2_allow_mpu_retention()) {
145 /* REVISIT: These write to reserved bits? */ 143 /* REVISIT: These write to reserved bits? */
146 omap2xxx_prm_clear_mod_irqs(CORE_MOD, PM_WKST1, ~0); 144 omap_prm_clear_mod_irqs(CORE_MOD, PM_WKST1, ~0);
147 omap2xxx_prm_clear_mod_irqs(CORE_MOD, OMAP24XX_PM_WKST2, ~0); 145 omap_prm_clear_mod_irqs(CORE_MOD, OMAP24XX_PM_WKST2, ~0);
148 omap2xxx_prm_clear_mod_irqs(WKUP_MOD, PM_WKST, ~0); 146 omap_prm_clear_mod_irqs(WKUP_MOD, PM_WKST, ~0);
149 147
150 /* Try to enter MPU retention */ 148 /* Try to enter MPU retention */
151 pwrdm_set_next_pwrst(mpu_pwrdm, PWRDM_POWER_RET); 149 pwrdm_set_next_pwrst(mpu_pwrdm, PWRDM_POWER_RET);
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
index 88721df6001d..87b98bf92366 100644
--- a/arch/arm/mach-omap2/pm34xx.c
+++ b/arch/arm/mach-omap2/pm34xx.c
@@ -137,9 +137,8 @@ static irqreturn_t _prcm_int_handle_io(int irq, void *unused)
137{ 137{
138 int c; 138 int c;
139 139
140 c = omap3xxx_prm_clear_mod_irqs(WKUP_MOD, 1, 140 c = omap_prm_clear_mod_irqs(WKUP_MOD, 1, OMAP3430_ST_IO_MASK |
141 ~(OMAP3430_ST_IO_MASK | 141 OMAP3430_ST_IO_CHAIN_MASK);
142 OMAP3430_ST_IO_CHAIN_MASK));
143 142
144 return c ? IRQ_HANDLED : IRQ_NONE; 143 return c ? IRQ_HANDLED : IRQ_NONE;
145} 144}
@@ -153,14 +152,13 @@ static irqreturn_t _prcm_int_handle_wakeup(int irq, void *unused)
153 * these are handled in a separate handler to avoid acking 152 * these are handled in a separate handler to avoid acking
154 * IO events before parsing in mux code 153 * IO events before parsing in mux code
155 */ 154 */
156 c = omap3xxx_prm_clear_mod_irqs(WKUP_MOD, 1, 155 c = omap_prm_clear_mod_irqs(WKUP_MOD, 1, ~(OMAP3430_ST_IO_MASK |
157 OMAP3430_ST_IO_MASK | 156 OMAP3430_ST_IO_CHAIN_MASK));
158 OMAP3430_ST_IO_CHAIN_MASK); 157 c += omap_prm_clear_mod_irqs(CORE_MOD, 1, ~0);
159 c += omap3xxx_prm_clear_mod_irqs(CORE_MOD, 1, 0); 158 c += omap_prm_clear_mod_irqs(OMAP3430_PER_MOD, 1, ~0);
160 c += omap3xxx_prm_clear_mod_irqs(OMAP3430_PER_MOD, 1, 0);
161 if (omap_rev() > OMAP3430_REV_ES1_0) { 159 if (omap_rev() > OMAP3430_REV_ES1_0) {
162 c += omap3xxx_prm_clear_mod_irqs(CORE_MOD, 3, 0); 160 c += omap_prm_clear_mod_irqs(CORE_MOD, 3, ~0);
163 c += omap3xxx_prm_clear_mod_irqs(OMAP3430ES2_USBHOST_MOD, 1, 0); 161 c += omap_prm_clear_mod_irqs(OMAP3430ES2_USBHOST_MOD, 1, ~0);
164 } 162 }
165 163
166 return c ? IRQ_HANDLED : IRQ_NONE; 164 return c ? IRQ_HANDLED : IRQ_NONE;
diff --git a/arch/arm/mach-omap2/prcm-common.h b/arch/arm/mach-omap2/prcm-common.h
index 6163d66102a3..6ae0b3a1781e 100644
--- a/arch/arm/mach-omap2/prcm-common.h
+++ b/arch/arm/mach-omap2/prcm-common.h
@@ -518,6 +518,26 @@ struct omap_prcm_irq_setup {
518 .priority = _priority \ 518 .priority = _priority \
519 } 519 }
520 520
521/**
522 * struct omap_prcm_init_data - PRCM driver init data
523 * @index: clock memory mapping index to be used
524 * @mem: IO mem pointer for this module
525 * @offset: module base address offset from the IO base
526 * @flags: PRCM module init flags
527 * @device_inst_offset: device instance offset within the module address space
528 * @init: low level PRCM init function for this module
529 * @np: device node for this PRCM module
530 */
531struct omap_prcm_init_data {
532 int index;
533 void __iomem *mem;
534 s16 offset;
535 u16 flags;
536 s32 device_inst_offset;
537 int (*init)(const struct omap_prcm_init_data *data);
538 struct device_node *np;
539};
540
521extern void omap_prcm_irq_cleanup(void); 541extern void omap_prcm_irq_cleanup(void);
522extern int omap_prcm_register_chain_handler( 542extern int omap_prcm_register_chain_handler(
523 struct omap_prcm_irq_setup *irq_setup); 543 struct omap_prcm_irq_setup *irq_setup);
diff --git a/arch/arm/mach-omap2/prm.h b/arch/arm/mach-omap2/prm.h
index b9061a6a2db8..233bc84fbc0e 100644
--- a/arch/arm/mach-omap2/prm.h
+++ b/arch/arm/mach-omap2/prm.h
@@ -19,8 +19,9 @@
19extern void __iomem *prm_base; 19extern void __iomem *prm_base;
20extern u16 prm_features; 20extern u16 prm_features;
21extern void omap2_set_globals_prm(void __iomem *prm); 21extern void omap2_set_globals_prm(void __iomem *prm);
22int of_prcm_init(void); 22int omap_prcm_init(void);
23void omap3_prcm_legacy_iomaps_init(void); 23int omap2_prm_base_init(void);
24int omap2_prcm_base_init(void);
24# endif 25# endif
25 26
26/* 27/*
@@ -28,9 +29,11 @@ void omap3_prcm_legacy_iomaps_init(void);
28 * 29 *
29 * PRM_HAS_IO_WAKEUP: has IO wakeup capability 30 * PRM_HAS_IO_WAKEUP: has IO wakeup capability
30 * PRM_HAS_VOLTAGE: has voltage domains 31 * PRM_HAS_VOLTAGE: has voltage domains
32 * PRM_IRQ_DEFAULT: use default irq number for PRM irq
31 */ 33 */
32#define PRM_HAS_IO_WAKEUP (1 << 0) 34#define PRM_HAS_IO_WAKEUP BIT(0)
33#define PRM_HAS_VOLTAGE (1 << 1) 35#define PRM_HAS_VOLTAGE BIT(1)
36#define PRM_IRQ_DEFAULT BIT(2)
34 37
35/* 38/*
36 * MAX_MODULE_SOFTRESET_WAIT: Maximum microseconds to wait for OMAP 39 * MAX_MODULE_SOFTRESET_WAIT: Maximum microseconds to wait for OMAP
@@ -146,6 +149,9 @@ struct prm_ll_data {
146 int (*is_hardreset_asserted)(u8 shift, u8 part, s16 prm_mod, 149 int (*is_hardreset_asserted)(u8 shift, u8 part, s16 prm_mod,
147 u16 offset); 150 u16 offset);
148 void (*reset_system)(void); 151 void (*reset_system)(void);
152 int (*clear_mod_irqs)(s16 module, u8 regs, u32 wkst_mask);
153 u32 (*vp_check_txdone)(u8 vp_id);
154 void (*vp_clear_txdone)(u8 vp_id);
149}; 155};
150 156
151extern int prm_register(struct prm_ll_data *pld); 157extern int prm_register(struct prm_ll_data *pld);
@@ -161,6 +167,19 @@ extern void prm_clear_context_loss_flags_old(u8 part, s16 inst, u16 idx);
161void omap_prm_reset_system(void); 167void omap_prm_reset_system(void);
162 168
163void omap_prm_reconfigure_io_chain(void); 169void omap_prm_reconfigure_io_chain(void);
170int omap_prm_clear_mod_irqs(s16 module, u8 regs, u32 wkst_mask);
171
172/*
173 * Voltage Processor (VP) identifiers
174 */
175#define OMAP3_VP_VDD_MPU_ID 0
176#define OMAP3_VP_VDD_CORE_ID 1
177#define OMAP4_VP_VDD_CORE_ID 0
178#define OMAP4_VP_VDD_IVA_ID 1
179#define OMAP4_VP_VDD_MPU_ID 2
180
181u32 omap_prm_vp_check_txdone(u8 vp_id);
182void omap_prm_vp_clear_txdone(u8 vp_id);
164 183
165#endif 184#endif
166 185
diff --git a/arch/arm/mach-omap2/prm2xxx.c b/arch/arm/mach-omap2/prm2xxx.c
index af0f15278fc2..752018ce129c 100644
--- a/arch/arm/mach-omap2/prm2xxx.c
+++ b/arch/arm/mach-omap2/prm2xxx.c
@@ -123,13 +123,14 @@ static void omap2xxx_prm_dpll_reset(void)
123 * Clears wakeup status bits for a given module, so that the device can 123 * Clears wakeup status bits for a given module, so that the device can
124 * re-enter idle. 124 * re-enter idle.
125 */ 125 */
126void omap2xxx_prm_clear_mod_irqs(s16 module, u8 regs, u32 wkst_mask) 126static int omap2xxx_prm_clear_mod_irqs(s16 module, u8 regs, u32 wkst_mask)
127{ 127{
128 u32 wkst; 128 u32 wkst;
129 129
130 wkst = omap2_prm_read_mod_reg(module, regs); 130 wkst = omap2_prm_read_mod_reg(module, regs);
131 wkst &= wkst_mask; 131 wkst &= wkst_mask;
132 omap2_prm_write_mod_reg(wkst, module, regs); 132 omap2_prm_write_mod_reg(wkst, module, regs);
133 return 0;
133} 134}
134 135
135int omap2xxx_clkdm_sleep(struct clockdomain *clkdm) 136int omap2xxx_clkdm_sleep(struct clockdomain *clkdm)
@@ -216,9 +217,10 @@ static struct prm_ll_data omap2xxx_prm_ll_data = {
216 .deassert_hardreset = &omap2_prm_deassert_hardreset, 217 .deassert_hardreset = &omap2_prm_deassert_hardreset,
217 .is_hardreset_asserted = &omap2_prm_is_hardreset_asserted, 218 .is_hardreset_asserted = &omap2_prm_is_hardreset_asserted,
218 .reset_system = &omap2xxx_prm_dpll_reset, 219 .reset_system = &omap2xxx_prm_dpll_reset,
220 .clear_mod_irqs = &omap2xxx_prm_clear_mod_irqs,
219}; 221};
220 222
221int __init omap2xxx_prm_init(void) 223int __init omap2xxx_prm_init(const struct omap_prcm_init_data *data)
222{ 224{
223 return prm_register(&omap2xxx_prm_ll_data); 225 return prm_register(&omap2xxx_prm_ll_data);
224} 226}
diff --git a/arch/arm/mach-omap2/prm2xxx.h b/arch/arm/mach-omap2/prm2xxx.h
index 1d51643062f7..9008a9e55a1a 100644
--- a/arch/arm/mach-omap2/prm2xxx.h
+++ b/arch/arm/mach-omap2/prm2xxx.h
@@ -124,9 +124,7 @@
124extern int omap2xxx_clkdm_sleep(struct clockdomain *clkdm); 124extern int omap2xxx_clkdm_sleep(struct clockdomain *clkdm);
125extern int omap2xxx_clkdm_wakeup(struct clockdomain *clkdm); 125extern int omap2xxx_clkdm_wakeup(struct clockdomain *clkdm);
126 126
127void omap2xxx_prm_clear_mod_irqs(s16 module, u8 regs, u32 wkst_mask); 127int __init omap2xxx_prm_init(const struct omap_prcm_init_data *data);
128
129extern int __init omap2xxx_prm_init(void);
130 128
131#endif 129#endif
132 130
diff --git a/arch/arm/mach-omap2/prm33xx.c b/arch/arm/mach-omap2/prm33xx.c
index 02f628601b09..dcb5001d77da 100644
--- a/arch/arm/mach-omap2/prm33xx.c
+++ b/arch/arm/mach-omap2/prm33xx.c
@@ -378,7 +378,7 @@ static struct prm_ll_data am33xx_prm_ll_data = {
378 .reset_system = am33xx_prm_global_warm_sw_reset, 378 .reset_system = am33xx_prm_global_warm_sw_reset,
379}; 379};
380 380
381int __init am33xx_prm_init(void) 381int __init am33xx_prm_init(const struct omap_prcm_init_data *data)
382{ 382{
383 return prm_register(&am33xx_prm_ll_data); 383 return prm_register(&am33xx_prm_ll_data);
384} 384}
diff --git a/arch/arm/mach-omap2/prm33xx.h b/arch/arm/mach-omap2/prm33xx.h
index 98ac41f271da..2bc4ec52ba78 100644
--- a/arch/arm/mach-omap2/prm33xx.h
+++ b/arch/arm/mach-omap2/prm33xx.h
@@ -118,7 +118,7 @@
118#define AM33XX_PM_CEFUSE_PWRSTST AM33XX_PRM_REGADDR(AM33XX_PRM_CEFUSE_MOD, 0x0004) 118#define AM33XX_PM_CEFUSE_PWRSTST AM33XX_PRM_REGADDR(AM33XX_PRM_CEFUSE_MOD, 0x0004)
119 119
120#ifndef __ASSEMBLER__ 120#ifndef __ASSEMBLER__
121int am33xx_prm_init(void); 121int am33xx_prm_init(const struct omap_prcm_init_data *data);
122 122
123#endif /* ASSEMBLER */ 123#endif /* ASSEMBLER */
124#endif 124#endif
diff --git a/arch/arm/mach-omap2/prm3xxx.c b/arch/arm/mach-omap2/prm3xxx.c
index 5713bbdf83bc..62680aad2126 100644
--- a/arch/arm/mach-omap2/prm3xxx.c
+++ b/arch/arm/mach-omap2/prm3xxx.c
@@ -29,6 +29,7 @@
29#include "prm-regbits-34xx.h" 29#include "prm-regbits-34xx.h"
30#include "cm3xxx.h" 30#include "cm3xxx.h"
31#include "cm-regbits-34xx.h" 31#include "cm-regbits-34xx.h"
32#include "clock.h"
32 33
33static void omap3xxx_prm_read_pending_irqs(unsigned long *events); 34static void omap3xxx_prm_read_pending_irqs(unsigned long *events);
34static void omap3xxx_prm_ocp_barrier(void); 35static void omap3xxx_prm_ocp_barrier(void);
@@ -96,7 +97,7 @@ static struct omap3_vp omap3_vp[] = {
96 97
97#define MAX_VP_ID ARRAY_SIZE(omap3_vp); 98#define MAX_VP_ID ARRAY_SIZE(omap3_vp);
98 99
99u32 omap3_prm_vp_check_txdone(u8 vp_id) 100static u32 omap3_prm_vp_check_txdone(u8 vp_id)
100{ 101{
101 struct omap3_vp *vp = &omap3_vp[vp_id]; 102 struct omap3_vp *vp = &omap3_vp[vp_id];
102 u32 irqstatus; 103 u32 irqstatus;
@@ -106,7 +107,7 @@ u32 omap3_prm_vp_check_txdone(u8 vp_id)
106 return irqstatus & vp->tranxdone_status; 107 return irqstatus & vp->tranxdone_status;
107} 108}
108 109
109void omap3_prm_vp_clear_txdone(u8 vp_id) 110static void omap3_prm_vp_clear_txdone(u8 vp_id)
110{ 111{
111 struct omap3_vp *vp = &omap3_vp[vp_id]; 112 struct omap3_vp *vp = &omap3_vp[vp_id];
112 113
@@ -217,7 +218,7 @@ static void omap3xxx_prm_restore_irqen(u32 *saved_mask)
217 * omap3xxx_prm_clear_mod_irqs - clear wake-up events from PRCM interrupt 218 * omap3xxx_prm_clear_mod_irqs - clear wake-up events from PRCM interrupt
218 * @module: PRM module to clear wakeups from 219 * @module: PRM module to clear wakeups from
219 * @regs: register set to clear, 1 or 3 220 * @regs: register set to clear, 1 or 3
220 * @ignore_bits: wakeup status bits to ignore 221 * @wkst_mask: wkst bits to clear
221 * 222 *
222 * The purpose of this function is to clear any wake-up events latched 223 * The purpose of this function is to clear any wake-up events latched
223 * in the PRCM PM_WKST_x registers. It is possible that a wake-up event 224 * in the PRCM PM_WKST_x registers. It is possible that a wake-up event
@@ -226,7 +227,7 @@ static void omap3xxx_prm_restore_irqen(u32 *saved_mask)
226 * that any peripheral wake-up events occurring while attempting to 227 * that any peripheral wake-up events occurring while attempting to
227 * clear the PM_WKST_x are detected and cleared. 228 * clear the PM_WKST_x are detected and cleared.
228 */ 229 */
229int omap3xxx_prm_clear_mod_irqs(s16 module, u8 regs, u32 ignore_bits) 230static int omap3xxx_prm_clear_mod_irqs(s16 module, u8 regs, u32 wkst_mask)
230{ 231{
231 u32 wkst, fclk, iclk, clken; 232 u32 wkst, fclk, iclk, clken;
232 u16 wkst_off = (regs == 3) ? OMAP3430ES2_PM_WKST3 : PM_WKST1; 233 u16 wkst_off = (regs == 3) ? OMAP3430ES2_PM_WKST3 : PM_WKST1;
@@ -238,7 +239,7 @@ int omap3xxx_prm_clear_mod_irqs(s16 module, u8 regs, u32 ignore_bits)
238 239
239 wkst = omap2_prm_read_mod_reg(module, wkst_off); 240 wkst = omap2_prm_read_mod_reg(module, wkst_off);
240 wkst &= omap2_prm_read_mod_reg(module, grpsel_off); 241 wkst &= omap2_prm_read_mod_reg(module, grpsel_off);
241 wkst &= ~ignore_bits; 242 wkst &= wkst_mask;
242 if (wkst) { 243 if (wkst) {
243 iclk = omap2_cm_read_mod_reg(module, iclk_off); 244 iclk = omap2_cm_read_mod_reg(module, iclk_off);
244 fclk = omap2_cm_read_mod_reg(module, fclk_off); 245 fclk = omap2_cm_read_mod_reg(module, fclk_off);
@@ -254,7 +255,7 @@ int omap3xxx_prm_clear_mod_irqs(s16 module, u8 regs, u32 ignore_bits)
254 omap2_cm_set_mod_reg_bits(clken, module, fclk_off); 255 omap2_cm_set_mod_reg_bits(clken, module, fclk_off);
255 omap2_prm_write_mod_reg(wkst, module, wkst_off); 256 omap2_prm_write_mod_reg(wkst, module, wkst_off);
256 wkst = omap2_prm_read_mod_reg(module, wkst_off); 257 wkst = omap2_prm_read_mod_reg(module, wkst_off);
257 wkst &= ~ignore_bits; 258 wkst &= wkst_mask;
258 c++; 259 c++;
259 } 260 }
260 omap2_cm_write_mod_reg(iclk, module, iclk_off); 261 omap2_cm_write_mod_reg(iclk, module, iclk_off);
@@ -664,10 +665,15 @@ static struct prm_ll_data omap3xxx_prm_ll_data = {
664 .deassert_hardreset = &omap2_prm_deassert_hardreset, 665 .deassert_hardreset = &omap2_prm_deassert_hardreset,
665 .is_hardreset_asserted = &omap2_prm_is_hardreset_asserted, 666 .is_hardreset_asserted = &omap2_prm_is_hardreset_asserted,
666 .reset_system = &omap3xxx_prm_dpll3_reset, 667 .reset_system = &omap3xxx_prm_dpll3_reset,
668 .clear_mod_irqs = &omap3xxx_prm_clear_mod_irqs,
669 .vp_check_txdone = &omap3_prm_vp_check_txdone,
670 .vp_clear_txdone = &omap3_prm_vp_clear_txdone,
667}; 671};
668 672
669int __init omap3xxx_prm_init(void) 673int __init omap3xxx_prm_init(const struct omap_prcm_init_data *data)
670{ 674{
675 omap2_clk_legacy_provider_init(TI_CLKM_PRM,
676 prm_base + OMAP3430_IVA2_MOD);
671 if (omap3_has_io_wakeup()) 677 if (omap3_has_io_wakeup())
672 prm_features |= PRM_HAS_IO_WAKEUP; 678 prm_features |= PRM_HAS_IO_WAKEUP;
673 679
diff --git a/arch/arm/mach-omap2/prm3xxx.h b/arch/arm/mach-omap2/prm3xxx.h
index ed8a3d8b739a..5f095eec339c 100644
--- a/arch/arm/mach-omap2/prm3xxx.h
+++ b/arch/arm/mach-omap2/prm3xxx.h
@@ -132,10 +132,6 @@
132 132
133#ifndef __ASSEMBLER__ 133#ifndef __ASSEMBLER__
134 134
135/* OMAP3-specific VP functions */
136u32 omap3_prm_vp_check_txdone(u8 vp_id);
137void omap3_prm_vp_clear_txdone(u8 vp_id);
138
139/* 135/*
140 * OMAP3 access functions for voltage controller (VC) and 136 * OMAP3 access functions for voltage controller (VC) and
141 * voltage proccessor (VP) in the PRM. 137 * voltage proccessor (VP) in the PRM.
@@ -144,8 +140,7 @@ extern u32 omap3_prm_vcvp_read(u8 offset);
144extern void omap3_prm_vcvp_write(u32 val, u8 offset); 140extern void omap3_prm_vcvp_write(u32 val, u8 offset);
145extern u32 omap3_prm_vcvp_rmw(u32 mask, u32 bits, u8 offset); 141extern u32 omap3_prm_vcvp_rmw(u32 mask, u32 bits, u8 offset);
146 142
147extern int __init omap3xxx_prm_init(void); 143int __init omap3xxx_prm_init(const struct omap_prcm_init_data *data);
148int omap3xxx_prm_clear_mod_irqs(s16 module, u8 regs, u32 ignore_bits);
149void omap3xxx_prm_iva_idle(void); 144void omap3xxx_prm_iva_idle(void);
150void omap3_prm_reset_modem(void); 145void omap3_prm_reset_modem(void);
151int omap3xxx_prm_clear_global_cold_reset(void); 146int omap3xxx_prm_clear_global_cold_reset(void);
diff --git a/arch/arm/mach-omap2/prm44xx.c b/arch/arm/mach-omap2/prm44xx.c
index a08a617a6c11..c35ad0bedf81 100644
--- a/arch/arm/mach-omap2/prm44xx.c
+++ b/arch/arm/mach-omap2/prm44xx.c
@@ -138,7 +138,7 @@ static struct omap4_vp omap4_vp[] = {
138 }, 138 },
139}; 139};
140 140
141u32 omap4_prm_vp_check_txdone(u8 vp_id) 141static u32 omap4_prm_vp_check_txdone(u8 vp_id)
142{ 142{
143 struct omap4_vp *vp = &omap4_vp[vp_id]; 143 struct omap4_vp *vp = &omap4_vp[vp_id];
144 u32 irqstatus; 144 u32 irqstatus;
@@ -149,7 +149,7 @@ u32 omap4_prm_vp_check_txdone(u8 vp_id)
149 return irqstatus & vp->tranxdone_status; 149 return irqstatus & vp->tranxdone_status;
150} 150}
151 151
152void omap4_prm_vp_clear_txdone(u8 vp_id) 152static void omap4_prm_vp_clear_txdone(u8 vp_id)
153{ 153{
154 struct omap4_vp *vp = &omap4_vp[vp_id]; 154 struct omap4_vp *vp = &omap4_vp[vp_id];
155 155
@@ -699,29 +699,31 @@ static struct prm_ll_data omap44xx_prm_ll_data = {
699 .deassert_hardreset = omap4_prminst_deassert_hardreset, 699 .deassert_hardreset = omap4_prminst_deassert_hardreset,
700 .is_hardreset_asserted = omap4_prminst_is_hardreset_asserted, 700 .is_hardreset_asserted = omap4_prminst_is_hardreset_asserted,
701 .reset_system = omap4_prminst_global_warm_sw_reset, 701 .reset_system = omap4_prminst_global_warm_sw_reset,
702 .vp_check_txdone = omap4_prm_vp_check_txdone,
703 .vp_clear_txdone = omap4_prm_vp_clear_txdone,
702}; 704};
703 705
704int __init omap44xx_prm_init(void) 706static const struct omap_prcm_init_data *prm_init_data;
707
708int __init omap44xx_prm_init(const struct omap_prcm_init_data *data)
705{ 709{
706 if (cpu_is_omap44xx() || soc_is_omap54xx() || soc_is_dra7xx()) 710 omap_prm_base_init();
711
712 prm_init_data = data;
713
714 if (data->flags & PRM_HAS_IO_WAKEUP)
707 prm_features |= PRM_HAS_IO_WAKEUP; 715 prm_features |= PRM_HAS_IO_WAKEUP;
708 716
709 if (!soc_is_dra7xx()) 717 if (data->flags & PRM_HAS_VOLTAGE)
710 prm_features |= PRM_HAS_VOLTAGE; 718 prm_features |= PRM_HAS_VOLTAGE;
711 719
720 omap4_prminst_set_prm_dev_inst(data->device_inst_offset);
721
712 return prm_register(&omap44xx_prm_ll_data); 722 return prm_register(&omap44xx_prm_ll_data);
713} 723}
714 724
715static const struct of_device_id omap_prm_dt_match_table[] = {
716 { .compatible = "ti,omap4-prm" },
717 { .compatible = "ti,omap5-prm" },
718 { .compatible = "ti,dra7-prm" },
719 { }
720};
721
722static int omap44xx_prm_late_init(void) 725static int omap44xx_prm_late_init(void)
723{ 726{
724 struct device_node *np;
725 int irq_num; 727 int irq_num;
726 728
727 if (!(prm_features & PRM_HAS_IO_WAKEUP)) 729 if (!(prm_features & PRM_HAS_IO_WAKEUP))
@@ -731,31 +733,23 @@ static int omap44xx_prm_late_init(void)
731 if (!of_have_populated_dt()) 733 if (!of_have_populated_dt())
732 return 0; 734 return 0;
733 735
734 np = of_find_matching_node(NULL, omap_prm_dt_match_table); 736 irq_num = of_irq_get(prm_init_data->np, 0);
735 737 /*
736 if (!np) { 738 * Already have OMAP4 IRQ num. For all other platforms, we need
737 /* Default loaded up with OMAP4 values */ 739 * IRQ numbers from DT
738 if (!cpu_is_omap44xx()) 740 */
739 return 0; 741 if (irq_num < 0 && !(prm_init_data->flags & PRM_IRQ_DEFAULT)) {
740 } else { 742 if (irq_num == -EPROBE_DEFER)
741 irq_num = of_irq_get(np, 0); 743 return irq_num;
742 /* 744
743 * Already have OMAP4 IRQ num. For all other platforms, we need 745 /* Have nothing to do */
744 * IRQ numbers from DT 746 return 0;
745 */ 747 }
746 if (irq_num < 0 && !cpu_is_omap44xx()) { 748
747 if (irq_num == -EPROBE_DEFER) 749 /* Once OMAP4 DT is filled as well */
748 return irq_num; 750 if (irq_num >= 0) {
749 751 omap4_prcm_irq_setup.irq = irq_num;
750 /* Have nothing to do */ 752 omap4_prcm_irq_setup.xlate_irq = NULL;
751 return 0;
752 }
753
754 /* Once OMAP4 DT is filled as well */
755 if (irq_num >= 0) {
756 omap4_prcm_irq_setup.irq = irq_num;
757 omap4_prcm_irq_setup.xlate_irq = NULL;
758 }
759 } 753 }
760 754
761 omap44xx_prm_enable_io_wakeup(); 755 omap44xx_prm_enable_io_wakeup();
diff --git a/arch/arm/mach-omap2/prm44xx.h b/arch/arm/mach-omap2/prm44xx.h
index 7db2422faa16..efd6035d0871 100644
--- a/arch/arm/mach-omap2/prm44xx.h
+++ b/arch/arm/mach-omap2/prm44xx.h
@@ -26,7 +26,6 @@
26#define __ARCH_ARM_MACH_OMAP2_PRM44XX_H 26#define __ARCH_ARM_MACH_OMAP2_PRM44XX_H
27 27
28#include "prm44xx_54xx.h" 28#include "prm44xx_54xx.h"
29#include "prcm-common.h"
30#include "prm.h" 29#include "prm.h"
31 30
32#define OMAP4430_PRM_BASE 0x4a306000 31#define OMAP4430_PRM_BASE 0x4a306000
diff --git a/arch/arm/mach-omap2/prm44xx_54xx.h b/arch/arm/mach-omap2/prm44xx_54xx.h
index 714329565b90..3f139ebc8398 100644
--- a/arch/arm/mach-omap2/prm44xx_54xx.h
+++ b/arch/arm/mach-omap2/prm44xx_54xx.h
@@ -23,13 +23,11 @@
23#ifndef __ARCH_ARM_MACH_OMAP2_PRM44XX_54XX_H 23#ifndef __ARCH_ARM_MACH_OMAP2_PRM44XX_54XX_H
24#define __ARCH_ARM_MACH_OMAP2_PRM44XX_54XX_H 24#define __ARCH_ARM_MACH_OMAP2_PRM44XX_54XX_H
25 25
26#include "prcm-common.h"
27
26/* Function prototypes */ 28/* Function prototypes */
27#ifndef __ASSEMBLER__ 29#ifndef __ASSEMBLER__
28 30
29/* OMAP4/OMAP5-specific VP functions */
30u32 omap4_prm_vp_check_txdone(u8 vp_id);
31void omap4_prm_vp_clear_txdone(u8 vp_id);
32
33/* 31/*
34 * OMAP4/OMAP5 access functions for voltage controller (VC) and 32 * OMAP4/OMAP5 access functions for voltage controller (VC) and
35 * voltage proccessor (VP) in the PRM. 33 * voltage proccessor (VP) in the PRM.
@@ -38,7 +36,7 @@ extern u32 omap4_prm_vcvp_read(u8 offset);
38extern void omap4_prm_vcvp_write(u32 val, u8 offset); 36extern void omap4_prm_vcvp_write(u32 val, u8 offset);
39extern u32 omap4_prm_vcvp_rmw(u32 mask, u32 bits, u8 offset); 37extern u32 omap4_prm_vcvp_rmw(u32 mask, u32 bits, u8 offset);
40 38
41extern int __init omap44xx_prm_init(void); 39int __init omap44xx_prm_init(const struct omap_prcm_init_data *data);
42 40
43#endif 41#endif
44 42
diff --git a/arch/arm/mach-omap2/prm54xx.h b/arch/arm/mach-omap2/prm54xx.h
index e4411010309c..1eb22ff087dc 100644
--- a/arch/arm/mach-omap2/prm54xx.h
+++ b/arch/arm/mach-omap2/prm54xx.h
@@ -22,7 +22,6 @@
22#define __ARCH_ARM_MACH_OMAP2_PRM54XX_H 22#define __ARCH_ARM_MACH_OMAP2_PRM54XX_H
23 23
24#include "prm44xx_54xx.h" 24#include "prm44xx_54xx.h"
25#include "prcm-common.h"
26#include "prm.h" 25#include "prm.h"
27 26
28#define OMAP54XX_PRM_BASE 0x4ae06000 27#define OMAP54XX_PRM_BASE 0x4ae06000
diff --git a/arch/arm/mach-omap2/prm7xx.h b/arch/arm/mach-omap2/prm7xx.h
index 4bb50fbf29be..cc1e6a2b97f6 100644
--- a/arch/arm/mach-omap2/prm7xx.h
+++ b/arch/arm/mach-omap2/prm7xx.h
@@ -22,8 +22,8 @@
22#ifndef __ARCH_ARM_MACH_OMAP2_PRM7XX_H 22#ifndef __ARCH_ARM_MACH_OMAP2_PRM7XX_H
23#define __ARCH_ARM_MACH_OMAP2_PRM7XX_H 23#define __ARCH_ARM_MACH_OMAP2_PRM7XX_H
24 24
25#include "prm44xx_54xx.h"
26#include "prcm-common.h" 25#include "prcm-common.h"
26#include "prm44xx_54xx.h"
27#include "prm.h" 27#include "prm.h"
28 28
29#define DRA7XX_PRM_BASE 0x4ae06000 29#define DRA7XX_PRM_BASE 0x4ae06000
diff --git a/arch/arm/mach-omap2/prm_common.c b/arch/arm/mach-omap2/prm_common.c
index bfaa7ba595cc..7add7994dbfc 100644
--- a/arch/arm/mach-omap2/prm_common.c
+++ b/arch/arm/mach-omap2/prm_common.c
@@ -32,7 +32,11 @@
32#include "prm2xxx_3xxx.h" 32#include "prm2xxx_3xxx.h"
33#include "prm2xxx.h" 33#include "prm2xxx.h"
34#include "prm3xxx.h" 34#include "prm3xxx.h"
35#include "prm33xx.h"
35#include "prm44xx.h" 36#include "prm44xx.h"
37#include "prm54xx.h"
38#include "prm7xx.h"
39#include "prcm43xx.h"
36#include "common.h" 40#include "common.h"
37#include "clock.h" 41#include "clock.h"
38#include "cm.h" 42#include "cm.h"
@@ -534,6 +538,61 @@ void omap_prm_reset_system(void)
534} 538}
535 539
536/** 540/**
541 * omap_prm_clear_mod_irqs - clear wake-up events from PRCM interrupt
542 * @module: PRM module to clear wakeups from
543 * @regs: register to clear
544 * @wkst_mask: wkst bits to clear
545 *
546 * Clears any wakeup events for the module and register set defined.
547 * Uses SoC specific implementation to do the actual wakeup status
548 * clearing.
549 */
550int omap_prm_clear_mod_irqs(s16 module, u8 regs, u32 wkst_mask)
551{
552 if (!prm_ll_data->clear_mod_irqs) {
553 WARN_ONCE(1, "prm: %s: no mapping function defined\n",
554 __func__);
555 return -EINVAL;
556 }
557
558 return prm_ll_data->clear_mod_irqs(module, regs, wkst_mask);
559}
560
561/**
562 * omap_prm_vp_check_txdone - check voltage processor TX done status
563 *
564 * Checks if voltage processor transmission has been completed.
565 * Returns non-zero if a transmission has completed, 0 otherwise.
566 */
567u32 omap_prm_vp_check_txdone(u8 vp_id)
568{
569 if (!prm_ll_data->vp_check_txdone) {
570 WARN_ONCE(1, "prm: %s: no mapping function defined\n",
571 __func__);
572 return 0;
573 }
574
575 return prm_ll_data->vp_check_txdone(vp_id);
576}
577
578/**
579 * omap_prm_vp_clear_txdone - clears voltage processor TX done status
580 *
581 * Clears the status bit for completed voltage processor transmission
582 * returned by prm_vp_check_txdone.
583 */
584void omap_prm_vp_clear_txdone(u8 vp_id)
585{
586 if (!prm_ll_data->vp_clear_txdone) {
587 WARN_ONCE(1, "prm: %s: no mapping function defined\n",
588 __func__);
589 return;
590 }
591
592 prm_ll_data->vp_clear_txdone(vp_id);
593}
594
595/**
537 * prm_register - register per-SoC low-level data with the PRM 596 * prm_register - register per-SoC low-level data with the PRM
538 * @pld: low-level per-SoC OMAP PRM data & function pointers to register 597 * @pld: low-level per-SoC OMAP PRM data & function pointers to register
539 * 598 *
@@ -578,78 +637,175 @@ int prm_unregister(struct prm_ll_data *pld)
578 return 0; 637 return 0;
579} 638}
580 639
581static const struct of_device_id omap_prcm_dt_match_table[] = { 640#ifdef CONFIG_ARCH_OMAP2
582 { .compatible = "ti,am3-prcm" }, 641static struct omap_prcm_init_data omap2_prm_data __initdata = {
583 { .compatible = "ti,am3-scrm" }, 642 .index = TI_CLKM_PRM,
584 { .compatible = "ti,am4-prcm" }, 643 .init = omap2xxx_prm_init,
585 { .compatible = "ti,am4-scrm" },
586 { .compatible = "ti,dm814-prcm" },
587 { .compatible = "ti,dm814-scrm" },
588 { .compatible = "ti,dm816-prcm" },
589 { .compatible = "ti,dm816-scrm" },
590 { .compatible = "ti,omap2-prcm" },
591 { .compatible = "ti,omap2-scrm" },
592 { .compatible = "ti,omap3-prm" },
593 { .compatible = "ti,omap3-cm" },
594 { .compatible = "ti,omap3-scrm" },
595 { .compatible = "ti,omap4-cm1" },
596 { .compatible = "ti,omap4-prm" },
597 { .compatible = "ti,omap4-cm2" },
598 { .compatible = "ti,omap4-scrm" },
599 { .compatible = "ti,omap5-prm" },
600 { .compatible = "ti,omap5-cm-core-aon" },
601 { .compatible = "ti,omap5-scrm" },
602 { .compatible = "ti,omap5-cm-core" },
603 { .compatible = "ti,dra7-prm" },
604 { .compatible = "ti,dra7-cm-core-aon" },
605 { .compatible = "ti,dra7-cm-core" },
606 { }
607}; 644};
645#endif
646
647#ifdef CONFIG_ARCH_OMAP3
648static struct omap_prcm_init_data omap3_prm_data __initdata = {
649 .index = TI_CLKM_PRM,
650 .init = omap3xxx_prm_init,
608 651
609static struct clk_hw_omap memmap_dummy_ck = { 652 /*
610 .flags = MEMMAP_ADDRESSING, 653 * IVA2 offset is a negative value, must offset the prm_base
654 * address by this to get it to positive
655 */
656 .offset = -OMAP3430_IVA2_MOD,
611}; 657};
658#endif
612 659
613static u32 prm_clk_readl(void __iomem *reg) 660#if defined(CONFIG_SOC_AM33XX) || defined(CONFIG_SOC_TI81XX)
614{ 661static struct omap_prcm_init_data am3_prm_data __initdata = {
615 return omap2_clk_readl(&memmap_dummy_ck, reg); 662 .index = TI_CLKM_PRM,
616} 663 .init = am33xx_prm_init,
664};
665#endif
666
667#ifdef CONFIG_ARCH_OMAP4
668static struct omap_prcm_init_data omap4_prm_data __initdata = {
669 .index = TI_CLKM_PRM,
670 .init = omap44xx_prm_init,
671 .device_inst_offset = OMAP4430_PRM_DEVICE_INST,
672 .flags = PRM_HAS_IO_WAKEUP | PRM_HAS_VOLTAGE | PRM_IRQ_DEFAULT,
673};
674#endif
675
676#ifdef CONFIG_SOC_OMAP5
677static struct omap_prcm_init_data omap5_prm_data __initdata = {
678 .index = TI_CLKM_PRM,
679 .init = omap44xx_prm_init,
680 .device_inst_offset = OMAP54XX_PRM_DEVICE_INST,
681 .flags = PRM_HAS_IO_WAKEUP | PRM_HAS_VOLTAGE,
682};
683#endif
684
685#ifdef CONFIG_SOC_DRA7XX
686static struct omap_prcm_init_data dra7_prm_data __initdata = {
687 .index = TI_CLKM_PRM,
688 .init = omap44xx_prm_init,
689 .device_inst_offset = DRA7XX_PRM_DEVICE_INST,
690 .flags = PRM_HAS_IO_WAKEUP,
691};
692#endif
617 693
618static void prm_clk_writel(u32 val, void __iomem *reg) 694#ifdef CONFIG_SOC_AM43XX
619{ 695static struct omap_prcm_init_data am4_prm_data __initdata = {
620 omap2_clk_writel(val, &memmap_dummy_ck, reg); 696 .index = TI_CLKM_PRM,
621} 697 .init = omap44xx_prm_init,
698 .device_inst_offset = AM43XX_PRM_DEVICE_INST,
699};
700#endif
622 701
623static struct ti_clk_ll_ops omap_clk_ll_ops = { 702#if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5)
624 .clk_readl = prm_clk_readl, 703static struct omap_prcm_init_data scrm_data __initdata = {
625 .clk_writel = prm_clk_writel, 704 .index = TI_CLKM_SCRM,
705};
706#endif
707
708static const struct of_device_id omap_prcm_dt_match_table[] __initconst = {
709#ifdef CONFIG_SOC_AM33XX
710 { .compatible = "ti,am3-prcm", .data = &am3_prm_data },
711#endif
712#ifdef CONFIG_SOC_AM43XX
713 { .compatible = "ti,am4-prcm", .data = &am4_prm_data },
714#endif
715#ifdef CONFIG_SOC_TI81XX
716 { .compatible = "ti,dm814-prcm", .data = &am3_prm_data },
717 { .compatible = "ti,dm816-prcm", .data = &am3_prm_data },
718#endif
719#ifdef CONFIG_ARCH_OMAP2
720 { .compatible = "ti,omap2-prcm", .data = &omap2_prm_data },
721#endif
722#ifdef CONFIG_ARCH_OMAP3
723 { .compatible = "ti,omap3-prm", .data = &omap3_prm_data },
724#endif
725#ifdef CONFIG_ARCH_OMAP4
726 { .compatible = "ti,omap4-prm", .data = &omap4_prm_data },
727 { .compatible = "ti,omap4-scrm", .data = &scrm_data },
728#endif
729#ifdef CONFIG_SOC_OMAP5
730 { .compatible = "ti,omap5-prm", .data = &omap5_prm_data },
731 { .compatible = "ti,omap5-scrm", .data = &scrm_data },
732#endif
733#ifdef CONFIG_SOC_DRA7XX
734 { .compatible = "ti,dra7-prm", .data = &dra7_prm_data },
735#endif
736 { }
626}; 737};
627 738
628int __init of_prcm_init(void) 739/**
740 * omap2_prm_base_init - initialize iomappings for the PRM driver
741 *
742 * Detects and initializes the iomappings for the PRM driver, based
743 * on the DT data. Returns 0 in success, negative error value
744 * otherwise.
745 */
746int __init omap2_prm_base_init(void)
629{ 747{
630 struct device_node *np; 748 struct device_node *np;
749 const struct of_device_id *match;
750 struct omap_prcm_init_data *data;
631 void __iomem *mem; 751 void __iomem *mem;
632 int memmap_index = 0;
633 752
634 ti_clk_ll_ops = &omap_clk_ll_ops; 753 for_each_matching_node_and_match(np, omap_prcm_dt_match_table, &match) {
754 data = (struct omap_prcm_init_data *)match->data;
635 755
636 for_each_matching_node(np, omap_prcm_dt_match_table) {
637 mem = of_iomap(np, 0); 756 mem = of_iomap(np, 0);
638 clk_memmaps[memmap_index] = mem; 757 if (!mem)
639 ti_dt_clk_init_provider(np, memmap_index); 758 return -ENOMEM;
640 memmap_index++; 759
760 if (data->index == TI_CLKM_PRM)
761 prm_base = mem + data->offset;
762
763 data->mem = mem;
764
765 data->np = np;
766
767 if (data->init)
768 data->init(data);
641 } 769 }
642 770
643 return 0; 771 return 0;
644} 772}
645 773
646void __init omap3_prcm_legacy_iomaps_init(void) 774int __init omap2_prcm_base_init(void)
647{ 775{
648 ti_clk_ll_ops = &omap_clk_ll_ops; 776 int ret;
649 777
650 clk_memmaps[TI_CLKM_CM] = cm_base + OMAP3430_IVA2_MOD; 778 ret = omap2_prm_base_init();
651 clk_memmaps[TI_CLKM_PRM] = prm_base + OMAP3430_IVA2_MOD; 779 if (ret)
652 clk_memmaps[TI_CLKM_SCRM] = omap_ctrl_base_get(); 780 return ret;
781
782 return omap2_cm_base_init();
783}
784
785/**
786 * omap_prcm_init - low level init for the PRCM drivers
787 *
788 * Initializes the low level clock infrastructure for PRCM drivers.
789 * Returns 0 in success, negative error value in failure.
790 */
791int __init omap_prcm_init(void)
792{
793 struct device_node *np;
794 const struct of_device_id *match;
795 const struct omap_prcm_init_data *data;
796 int ret;
797
798 for_each_matching_node_and_match(np, omap_prcm_dt_match_table, &match) {
799 data = match->data;
800
801 ret = omap2_clk_provider_init(np, data->index, NULL, data->mem);
802 if (ret)
803 return ret;
804 }
805
806 omap_cm_init();
807
808 return 0;
653} 809}
654 810
655static int __init prm_late_init(void) 811static int __init prm_late_init(void)
diff --git a/arch/arm/mach-omap2/prminst44xx.c b/arch/arm/mach-omap2/prminst44xx.c
index 8adf7b1a1dce..c4859c4d3646 100644
--- a/arch/arm/mach-omap2/prminst44xx.c
+++ b/arch/arm/mach-omap2/prminst44xx.c
@@ -47,22 +47,14 @@ void omap_prm_base_init(void)
47 47
48s32 omap4_prmst_get_prm_dev_inst(void) 48s32 omap4_prmst_get_prm_dev_inst(void)
49{ 49{
50 if (prm_dev_inst != PRM_INSTANCE_UNKNOWN)
51 return prm_dev_inst;
52
53 /* This cannot be done way early at boot.. as things are not setup */
54 if (cpu_is_omap44xx())
55 prm_dev_inst = OMAP4430_PRM_DEVICE_INST;
56 else if (soc_is_omap54xx())
57 prm_dev_inst = OMAP54XX_PRM_DEVICE_INST;
58 else if (soc_is_dra7xx())
59 prm_dev_inst = DRA7XX_PRM_DEVICE_INST;
60 else if (soc_is_am43xx())
61 prm_dev_inst = AM43XX_PRM_DEVICE_INST;
62
63 return prm_dev_inst; 50 return prm_dev_inst;
64} 51}
65 52
53void omap4_prminst_set_prm_dev_inst(s32 dev_inst)
54{
55 prm_dev_inst = dev_inst;
56}
57
66/* Read a register in a PRM instance */ 58/* Read a register in a PRM instance */
67u32 omap4_prminst_read_inst_reg(u8 part, s16 inst, u16 idx) 59u32 omap4_prminst_read_inst_reg(u8 part, s16 inst, u16 idx)
68{ 60{
diff --git a/arch/arm/mach-omap2/prminst44xx.h b/arch/arm/mach-omap2/prminst44xx.h
index fb1c9d7a2f9d..0c03d0731d7f 100644
--- a/arch/arm/mach-omap2/prminst44xx.h
+++ b/arch/arm/mach-omap2/prminst44xx.h
@@ -14,6 +14,7 @@
14 14
15#define PRM_INSTANCE_UNKNOWN -1 15#define PRM_INSTANCE_UNKNOWN -1
16extern s32 omap4_prmst_get_prm_dev_inst(void); 16extern s32 omap4_prmst_get_prm_dev_inst(void);
17void omap4_prminst_set_prm_dev_inst(s32 dev_inst);
17 18
18/* 19/*
19 * In an ideal world, we would not export these low-level functions, 20 * In an ideal world, we would not export these low-level functions,
diff --git a/arch/arm/mach-omap2/sleep44xx.S b/arch/arm/mach-omap2/sleep44xx.S
index b84a0122d823..ad1bb9431e94 100644
--- a/arch/arm/mach-omap2/sleep44xx.S
+++ b/arch/arm/mach-omap2/sleep44xx.S
@@ -333,11 +333,9 @@ ENDPROC(omap4_cpu_resume)
333 333
334#endif /* defined(CONFIG_SMP) && defined(CONFIG_PM) */ 334#endif /* defined(CONFIG_SMP) && defined(CONFIG_PM) */
335 335
336#ifndef CONFIG_OMAP4_ERRATA_I688
337ENTRY(omap_bus_sync) 336ENTRY(omap_bus_sync)
338 ret lr 337 ret lr
339ENDPROC(omap_bus_sync) 338ENDPROC(omap_bus_sync)
340#endif
341 339
342ENTRY(omap_do_wfi) 340ENTRY(omap_do_wfi)
343 stmfd sp!, {lr} 341 stmfd sp!, {lr}
diff --git a/arch/arm/mach-omap2/vp.h b/arch/arm/mach-omap2/vp.h
index 0fdf7080e4a6..7e0829682bd0 100644
--- a/arch/arm/mach-omap2/vp.h
+++ b/arch/arm/mach-omap2/vp.h
@@ -21,15 +21,6 @@
21 21
22struct voltagedomain; 22struct voltagedomain;
23 23
24/*
25 * Voltage Processor (VP) identifiers
26 */
27#define OMAP3_VP_VDD_MPU_ID 0
28#define OMAP3_VP_VDD_CORE_ID 1
29#define OMAP4_VP_VDD_CORE_ID 0
30#define OMAP4_VP_VDD_IVA_ID 1
31#define OMAP4_VP_VDD_MPU_ID 2
32
33/* XXX document */ 24/* XXX document */
34#define VP_IDLE_TIMEOUT 200 25#define VP_IDLE_TIMEOUT 200
35#define VP_TRANXDONE_TIMEOUT 300 26#define VP_TRANXDONE_TIMEOUT 300
diff --git a/arch/arm/mach-omap2/vp3xxx_data.c b/arch/arm/mach-omap2/vp3xxx_data.c
index 1914e026245e..b0590fe6ab01 100644
--- a/arch/arm/mach-omap2/vp3xxx_data.c
+++ b/arch/arm/mach-omap2/vp3xxx_data.c
@@ -28,8 +28,8 @@
28#include "prm2xxx_3xxx.h" 28#include "prm2xxx_3xxx.h"
29 29
30static const struct omap_vp_ops omap3_vp_ops = { 30static const struct omap_vp_ops omap3_vp_ops = {
31 .check_txdone = omap3_prm_vp_check_txdone, 31 .check_txdone = omap_prm_vp_check_txdone,
32 .clear_txdone = omap3_prm_vp_clear_txdone, 32 .clear_txdone = omap_prm_vp_clear_txdone,
33}; 33};
34 34
35/* 35/*
diff --git a/arch/arm/mach-omap2/vp44xx_data.c b/arch/arm/mach-omap2/vp44xx_data.c
index e62f6b018beb..2448bb9a8716 100644
--- a/arch/arm/mach-omap2/vp44xx_data.c
+++ b/arch/arm/mach-omap2/vp44xx_data.c
@@ -28,8 +28,8 @@
28#include "vp.h" 28#include "vp.h"
29 29
30static const struct omap_vp_ops omap4_vp_ops = { 30static const struct omap_vp_ops omap4_vp_ops = {
31 .check_txdone = omap4_prm_vp_check_txdone, 31 .check_txdone = omap_prm_vp_check_txdone,
32 .clear_txdone = omap4_prm_vp_clear_txdone, 32 .clear_txdone = omap_prm_vp_clear_txdone,
33}; 33};
34 34
35/* 35/*
diff --git a/arch/arm64/boot/dts/arm/foundation-v8.dts b/arch/arm64/boot/dts/arm/foundation-v8.dts
index 27f32962e55c..4eac8dcea423 100644
--- a/arch/arm64/boot/dts/arm/foundation-v8.dts
+++ b/arch/arm64/boot/dts/arm/foundation-v8.dts
@@ -34,6 +34,7 @@
34 reg = <0x0 0x0>; 34 reg = <0x0 0x0>;
35 enable-method = "spin-table"; 35 enable-method = "spin-table";
36 cpu-release-addr = <0x0 0x8000fff8>; 36 cpu-release-addr = <0x0 0x8000fff8>;
37 next-level-cache = <&L2_0>;
37 }; 38 };
38 cpu@1 { 39 cpu@1 {
39 device_type = "cpu"; 40 device_type = "cpu";
@@ -41,6 +42,7 @@
41 reg = <0x0 0x1>; 42 reg = <0x0 0x1>;
42 enable-method = "spin-table"; 43 enable-method = "spin-table";
43 cpu-release-addr = <0x0 0x8000fff8>; 44 cpu-release-addr = <0x0 0x8000fff8>;
45 next-level-cache = <&L2_0>;
44 }; 46 };
45 cpu@2 { 47 cpu@2 {
46 device_type = "cpu"; 48 device_type = "cpu";
@@ -48,6 +50,7 @@
48 reg = <0x0 0x2>; 50 reg = <0x0 0x2>;
49 enable-method = "spin-table"; 51 enable-method = "spin-table";
50 cpu-release-addr = <0x0 0x8000fff8>; 52 cpu-release-addr = <0x0 0x8000fff8>;
53 next-level-cache = <&L2_0>;
51 }; 54 };
52 cpu@3 { 55 cpu@3 {
53 device_type = "cpu"; 56 device_type = "cpu";
@@ -55,6 +58,11 @@
55 reg = <0x0 0x3>; 58 reg = <0x0 0x3>;
56 enable-method = "spin-table"; 59 enable-method = "spin-table";
57 cpu-release-addr = <0x0 0x8000fff8>; 60 cpu-release-addr = <0x0 0x8000fff8>;
61 next-level-cache = <&L2_0>;
62 };
63
64 L2_0: l2-cache0 {
65 compatible = "cache";
58 }; 66 };
59 }; 67 };
60 68
diff --git a/arch/arm64/boot/dts/arm/juno.dts b/arch/arm64/boot/dts/arm/juno.dts
index d429129ecb3d..133ee59de2d7 100644
--- a/arch/arm64/boot/dts/arm/juno.dts
+++ b/arch/arm64/boot/dts/arm/juno.dts
@@ -39,6 +39,7 @@
39 reg = <0x0 0x0>; 39 reg = <0x0 0x0>;
40 device_type = "cpu"; 40 device_type = "cpu";
41 enable-method = "psci"; 41 enable-method = "psci";
42 next-level-cache = <&A57_L2>;
42 }; 43 };
43 44
44 A57_1: cpu@1 { 45 A57_1: cpu@1 {
@@ -46,6 +47,7 @@
46 reg = <0x0 0x1>; 47 reg = <0x0 0x1>;
47 device_type = "cpu"; 48 device_type = "cpu";
48 enable-method = "psci"; 49 enable-method = "psci";
50 next-level-cache = <&A57_L2>;
49 }; 51 };
50 52
51 A53_0: cpu@100 { 53 A53_0: cpu@100 {
@@ -53,6 +55,7 @@
53 reg = <0x0 0x100>; 55 reg = <0x0 0x100>;
54 device_type = "cpu"; 56 device_type = "cpu";
55 enable-method = "psci"; 57 enable-method = "psci";
58 next-level-cache = <&A53_L2>;
56 }; 59 };
57 60
58 A53_1: cpu@101 { 61 A53_1: cpu@101 {
@@ -60,6 +63,7 @@
60 reg = <0x0 0x101>; 63 reg = <0x0 0x101>;
61 device_type = "cpu"; 64 device_type = "cpu";
62 enable-method = "psci"; 65 enable-method = "psci";
66 next-level-cache = <&A53_L2>;
63 }; 67 };
64 68
65 A53_2: cpu@102 { 69 A53_2: cpu@102 {
@@ -67,6 +71,7 @@
67 reg = <0x0 0x102>; 71 reg = <0x0 0x102>;
68 device_type = "cpu"; 72 device_type = "cpu";
69 enable-method = "psci"; 73 enable-method = "psci";
74 next-level-cache = <&A53_L2>;
70 }; 75 };
71 76
72 A53_3: cpu@103 { 77 A53_3: cpu@103 {
@@ -74,6 +79,15 @@
74 reg = <0x0 0x103>; 79 reg = <0x0 0x103>;
75 device_type = "cpu"; 80 device_type = "cpu";
76 enable-method = "psci"; 81 enable-method = "psci";
82 next-level-cache = <&A53_L2>;
83 };
84
85 A57_L2: l2-cache0 {
86 compatible = "cache";
87 };
88
89 A53_L2: l2-cache1 {
90 compatible = "cache";
77 }; 91 };
78 }; 92 };
79 93
diff --git a/arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts b/arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts
index efc59b3baf63..20addabbd127 100644
--- a/arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts
+++ b/arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts
@@ -37,6 +37,7 @@
37 reg = <0x0 0x0>; 37 reg = <0x0 0x0>;
38 enable-method = "spin-table"; 38 enable-method = "spin-table";
39 cpu-release-addr = <0x0 0x8000fff8>; 39 cpu-release-addr = <0x0 0x8000fff8>;
40 next-level-cache = <&L2_0>;
40 }; 41 };
41 cpu@1 { 42 cpu@1 {
42 device_type = "cpu"; 43 device_type = "cpu";
@@ -44,6 +45,7 @@
44 reg = <0x0 0x1>; 45 reg = <0x0 0x1>;
45 enable-method = "spin-table"; 46 enable-method = "spin-table";
46 cpu-release-addr = <0x0 0x8000fff8>; 47 cpu-release-addr = <0x0 0x8000fff8>;
48 next-level-cache = <&L2_0>;
47 }; 49 };
48 cpu@2 { 50 cpu@2 {
49 device_type = "cpu"; 51 device_type = "cpu";
@@ -51,6 +53,7 @@
51 reg = <0x0 0x2>; 53 reg = <0x0 0x2>;
52 enable-method = "spin-table"; 54 enable-method = "spin-table";
53 cpu-release-addr = <0x0 0x8000fff8>; 55 cpu-release-addr = <0x0 0x8000fff8>;
56 next-level-cache = <&L2_0>;
54 }; 57 };
55 cpu@3 { 58 cpu@3 {
56 device_type = "cpu"; 59 device_type = "cpu";
@@ -58,6 +61,11 @@
58 reg = <0x0 0x3>; 61 reg = <0x0 0x3>;
59 enable-method = "spin-table"; 62 enable-method = "spin-table";
60 cpu-release-addr = <0x0 0x8000fff8>; 63 cpu-release-addr = <0x0 0x8000fff8>;
64 next-level-cache = <&L2_0>;
65 };
66
67 L2_0: l2-cache0 {
68 compatible = "cache";
61 }; 69 };
62 }; 70 };
63 71
diff --git a/arch/arm64/crypto/Makefile b/arch/arm64/crypto/Makefile
index 5720608c50b1..abb79b3cfcfe 100644
--- a/arch/arm64/crypto/Makefile
+++ b/arch/arm64/crypto/Makefile
@@ -29,7 +29,7 @@ aes-ce-blk-y := aes-glue-ce.o aes-ce.o
29obj-$(CONFIG_CRYPTO_AES_ARM64_NEON_BLK) += aes-neon-blk.o 29obj-$(CONFIG_CRYPTO_AES_ARM64_NEON_BLK) += aes-neon-blk.o
30aes-neon-blk-y := aes-glue-neon.o aes-neon.o 30aes-neon-blk-y := aes-glue-neon.o aes-neon.o
31 31
32AFLAGS_aes-ce.o := -DINTERLEAVE=2 -DINTERLEAVE_INLINE 32AFLAGS_aes-ce.o := -DINTERLEAVE=4
33AFLAGS_aes-neon.o := -DINTERLEAVE=4 33AFLAGS_aes-neon.o := -DINTERLEAVE=4
34 34
35CFLAGS_aes-glue-ce.o := -DUSE_V8_CRYPTO_EXTENSIONS 35CFLAGS_aes-glue-ce.o := -DUSE_V8_CRYPTO_EXTENSIONS
diff --git a/arch/arm64/include/asm/assembler.h b/arch/arm64/include/asm/assembler.h
index 5901480bfdca..750bac4e637e 100644
--- a/arch/arm64/include/asm/assembler.h
+++ b/arch/arm64/include/asm/assembler.h
@@ -20,6 +20,9 @@
20#error "Only include this from assembly code" 20#error "Only include this from assembly code"
21#endif 21#endif
22 22
23#ifndef __ASM_ASSEMBLER_H
24#define __ASM_ASSEMBLER_H
25
23#include <asm/ptrace.h> 26#include <asm/ptrace.h>
24#include <asm/thread_info.h> 27#include <asm/thread_info.h>
25 28
@@ -155,3 +158,5 @@ lr .req x30 // link register
155#endif 158#endif
156 orr \rd, \lbits, \hbits, lsl #32 159 orr \rd, \lbits, \hbits, lsl #32
157 .endm 160 .endm
161
162#endif /* __ASM_ASSEMBLER_H */
diff --git a/arch/arm64/include/asm/cpuidle.h b/arch/arm64/include/asm/cpuidle.h
index 0710654631e7..c60643f14cda 100644
--- a/arch/arm64/include/asm/cpuidle.h
+++ b/arch/arm64/include/asm/cpuidle.h
@@ -1,6 +1,8 @@
1#ifndef __ASM_CPUIDLE_H 1#ifndef __ASM_CPUIDLE_H
2#define __ASM_CPUIDLE_H 2#define __ASM_CPUIDLE_H
3 3
4#include <asm/proc-fns.h>
5
4#ifdef CONFIG_CPU_IDLE 6#ifdef CONFIG_CPU_IDLE
5extern int cpu_init_idle(unsigned int cpu); 7extern int cpu_init_idle(unsigned int cpu);
6extern int cpu_suspend(unsigned long arg); 8extern int cpu_suspend(unsigned long arg);
diff --git a/arch/arm64/include/asm/insn.h b/arch/arm64/include/asm/insn.h
index e2ff32a93b5c..d2f49423c5dc 100644
--- a/arch/arm64/include/asm/insn.h
+++ b/arch/arm64/include/asm/insn.h
@@ -264,8 +264,10 @@ __AARCH64_INSN_FUNCS(ands, 0x7F200000, 0x6A000000)
264__AARCH64_INSN_FUNCS(bics, 0x7F200000, 0x6A200000) 264__AARCH64_INSN_FUNCS(bics, 0x7F200000, 0x6A200000)
265__AARCH64_INSN_FUNCS(b, 0xFC000000, 0x14000000) 265__AARCH64_INSN_FUNCS(b, 0xFC000000, 0x14000000)
266__AARCH64_INSN_FUNCS(bl, 0xFC000000, 0x94000000) 266__AARCH64_INSN_FUNCS(bl, 0xFC000000, 0x94000000)
267__AARCH64_INSN_FUNCS(cbz, 0xFE000000, 0x34000000) 267__AARCH64_INSN_FUNCS(cbz, 0x7F000000, 0x34000000)
268__AARCH64_INSN_FUNCS(cbnz, 0xFE000000, 0x35000000) 268__AARCH64_INSN_FUNCS(cbnz, 0x7F000000, 0x35000000)
269__AARCH64_INSN_FUNCS(tbz, 0x7F000000, 0x36000000)
270__AARCH64_INSN_FUNCS(tbnz, 0x7F000000, 0x37000000)
269__AARCH64_INSN_FUNCS(bcond, 0xFF000010, 0x54000000) 271__AARCH64_INSN_FUNCS(bcond, 0xFF000010, 0x54000000)
270__AARCH64_INSN_FUNCS(svc, 0xFFE0001F, 0xD4000001) 272__AARCH64_INSN_FUNCS(svc, 0xFFE0001F, 0xD4000001)
271__AARCH64_INSN_FUNCS(hvc, 0xFFE0001F, 0xD4000002) 273__AARCH64_INSN_FUNCS(hvc, 0xFFE0001F, 0xD4000002)
diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
index 16449c535e50..800ec0e87ed9 100644
--- a/arch/arm64/include/asm/pgtable.h
+++ b/arch/arm64/include/asm/pgtable.h
@@ -460,7 +460,7 @@ static inline pud_t *pud_offset(pgd_t *pgd, unsigned long addr)
460static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) 460static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
461{ 461{
462 const pteval_t mask = PTE_USER | PTE_PXN | PTE_UXN | PTE_RDONLY | 462 const pteval_t mask = PTE_USER | PTE_PXN | PTE_UXN | PTE_RDONLY |
463 PTE_PROT_NONE | PTE_VALID | PTE_WRITE; 463 PTE_PROT_NONE | PTE_WRITE | PTE_TYPE_MASK;
464 pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask); 464 pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask);
465 return pte; 465 return pte;
466} 466}
diff --git a/arch/arm64/include/asm/processor.h b/arch/arm64/include/asm/processor.h
index f9be30ea1cbd..20e9591a60cf 100644
--- a/arch/arm64/include/asm/processor.h
+++ b/arch/arm64/include/asm/processor.h
@@ -45,7 +45,8 @@
45#define STACK_TOP STACK_TOP_MAX 45#define STACK_TOP STACK_TOP_MAX
46#endif /* CONFIG_COMPAT */ 46#endif /* CONFIG_COMPAT */
47 47
48#define ARCH_LOW_ADDRESS_LIMIT PHYS_MASK 48extern phys_addr_t arm64_dma_phys_limit;
49#define ARCH_LOW_ADDRESS_LIMIT (arm64_dma_phys_limit - 1)
49#endif /* __KERNEL__ */ 50#endif /* __KERNEL__ */
50 51
51struct debug_info { 52struct debug_info {
diff --git a/arch/arm64/include/asm/tlbflush.h b/arch/arm64/include/asm/tlbflush.h
index 73f0ce570fb3..4abe9b945f77 100644
--- a/arch/arm64/include/asm/tlbflush.h
+++ b/arch/arm64/include/asm/tlbflush.h
@@ -24,11 +24,6 @@
24#include <linux/sched.h> 24#include <linux/sched.h>
25#include <asm/cputype.h> 25#include <asm/cputype.h>
26 26
27extern void __cpu_flush_user_tlb_range(unsigned long, unsigned long, struct vm_area_struct *);
28extern void __cpu_flush_kern_tlb_range(unsigned long, unsigned long);
29
30extern struct cpu_tlb_fns cpu_tlb;
31
32/* 27/*
33 * TLB Management 28 * TLB Management
34 * ============== 29 * ==============
diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile
index bef04afd6031..5ee07eee80c2 100644
--- a/arch/arm64/kernel/Makefile
+++ b/arch/arm64/kernel/Makefile
@@ -15,8 +15,9 @@ CFLAGS_REMOVE_return_address.o = -pg
15arm64-obj-y := cputable.o debug-monitors.o entry.o irq.o fpsimd.o \ 15arm64-obj-y := cputable.o debug-monitors.o entry.o irq.o fpsimd.o \
16 entry-fpsimd.o process.o ptrace.o setup.o signal.o \ 16 entry-fpsimd.o process.o ptrace.o setup.o signal.o \
17 sys.o stacktrace.o time.o traps.o io.o vdso.o \ 17 sys.o stacktrace.o time.o traps.o io.o vdso.o \
18 hyp-stub.o psci.o cpu_ops.o insn.o return_address.o \ 18 hyp-stub.o psci.o psci-call.o cpu_ops.o insn.o \
19 cpuinfo.o cpu_errata.o alternative.o cacheinfo.o 19 return_address.o cpuinfo.o cpu_errata.o \
20 alternative.o cacheinfo.o
20 21
21arm64-obj-$(CONFIG_COMPAT) += sys32.o kuser32.o signal32.o \ 22arm64-obj-$(CONFIG_COMPAT) += sys32.o kuser32.o signal32.o \
22 sys_compat.o entry32.o \ 23 sys_compat.o entry32.o \
diff --git a/arch/arm64/kernel/ftrace.c b/arch/arm64/kernel/ftrace.c
index cf8556ae09d0..c851be795080 100644
--- a/arch/arm64/kernel/ftrace.c
+++ b/arch/arm64/kernel/ftrace.c
@@ -156,7 +156,7 @@ static int ftrace_modify_graph_caller(bool enable)
156 156
157 branch = aarch64_insn_gen_branch_imm(pc, 157 branch = aarch64_insn_gen_branch_imm(pc,
158 (unsigned long)ftrace_graph_caller, 158 (unsigned long)ftrace_graph_caller,
159 AARCH64_INSN_BRANCH_LINK); 159 AARCH64_INSN_BRANCH_NOLINK);
160 nop = aarch64_insn_gen_nop(); 160 nop = aarch64_insn_gen_nop();
161 161
162 if (enable) 162 if (enable)
diff --git a/arch/arm64/kernel/insn.c b/arch/arm64/kernel/insn.c
index 27d4864577e5..c8eca88f12e6 100644
--- a/arch/arm64/kernel/insn.c
+++ b/arch/arm64/kernel/insn.c
@@ -87,8 +87,10 @@ static void __kprobes *patch_map(void *addr, int fixmap)
87 87
88 if (module && IS_ENABLED(CONFIG_DEBUG_SET_MODULE_RONX)) 88 if (module && IS_ENABLED(CONFIG_DEBUG_SET_MODULE_RONX))
89 page = vmalloc_to_page(addr); 89 page = vmalloc_to_page(addr);
90 else 90 else if (!module && IS_ENABLED(CONFIG_DEBUG_RODATA))
91 page = virt_to_page(addr); 91 page = virt_to_page(addr);
92 else
93 return addr;
92 94
93 BUG_ON(!page); 95 BUG_ON(!page);
94 set_fixmap(fixmap, page_to_phys(page)); 96 set_fixmap(fixmap, page_to_phys(page));
diff --git a/arch/arm64/kernel/psci-call.S b/arch/arm64/kernel/psci-call.S
new file mode 100644
index 000000000000..cf83e61cd3b5
--- /dev/null
+++ b/arch/arm64/kernel/psci-call.S
@@ -0,0 +1,28 @@
1/*
2 * This program is free software; you can redistribute it and/or modify
3 * it under the terms of the GNU General Public License version 2 as
4 * published by the Free Software Foundation.
5 *
6 * This program is distributed in the hope that it will be useful,
7 * but WITHOUT ANY WARRANTY; without even the implied warranty of
8 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 * GNU General Public License for more details.
10 *
11 * Copyright (C) 2015 ARM Limited
12 *
13 * Author: Will Deacon <will.deacon@arm.com>
14 */
15
16#include <linux/linkage.h>
17
18/* int __invoke_psci_fn_hvc(u64 function_id, u64 arg0, u64 arg1, u64 arg2) */
19ENTRY(__invoke_psci_fn_hvc)
20 hvc #0
21 ret
22ENDPROC(__invoke_psci_fn_hvc)
23
24/* int __invoke_psci_fn_smc(u64 function_id, u64 arg0, u64 arg1, u64 arg2) */
25ENTRY(__invoke_psci_fn_smc)
26 smc #0
27 ret
28ENDPROC(__invoke_psci_fn_smc)
diff --git a/arch/arm64/kernel/psci.c b/arch/arm64/kernel/psci.c
index 3425f311c49e..9b8a70ae64a1 100644
--- a/arch/arm64/kernel/psci.c
+++ b/arch/arm64/kernel/psci.c
@@ -57,6 +57,9 @@ static struct psci_operations psci_ops;
57static int (*invoke_psci_fn)(u64, u64, u64, u64); 57static int (*invoke_psci_fn)(u64, u64, u64, u64);
58typedef int (*psci_initcall_t)(const struct device_node *); 58typedef int (*psci_initcall_t)(const struct device_node *);
59 59
60asmlinkage int __invoke_psci_fn_hvc(u64, u64, u64, u64);
61asmlinkage int __invoke_psci_fn_smc(u64, u64, u64, u64);
62
60enum psci_function { 63enum psci_function {
61 PSCI_FN_CPU_SUSPEND, 64 PSCI_FN_CPU_SUSPEND,
62 PSCI_FN_CPU_ON, 65 PSCI_FN_CPU_ON,
@@ -109,40 +112,6 @@ static void psci_power_state_unpack(u32 power_state,
109 PSCI_0_2_POWER_STATE_AFFL_SHIFT; 112 PSCI_0_2_POWER_STATE_AFFL_SHIFT;
110} 113}
111 114
112/*
113 * The following two functions are invoked via the invoke_psci_fn pointer
114 * and will not be inlined, allowing us to piggyback on the AAPCS.
115 */
116static noinline int __invoke_psci_fn_hvc(u64 function_id, u64 arg0, u64 arg1,
117 u64 arg2)
118{
119 asm volatile(
120 __asmeq("%0", "x0")
121 __asmeq("%1", "x1")
122 __asmeq("%2", "x2")
123 __asmeq("%3", "x3")
124 "hvc #0\n"
125 : "+r" (function_id)
126 : "r" (arg0), "r" (arg1), "r" (arg2));
127
128 return function_id;
129}
130
131static noinline int __invoke_psci_fn_smc(u64 function_id, u64 arg0, u64 arg1,
132 u64 arg2)
133{
134 asm volatile(
135 __asmeq("%0", "x0")
136 __asmeq("%1", "x1")
137 __asmeq("%2", "x2")
138 __asmeq("%3", "x3")
139 "smc #0\n"
140 : "+r" (function_id)
141 : "r" (arg0), "r" (arg1), "r" (arg2));
142
143 return function_id;
144}
145
146static int psci_get_version(void) 115static int psci_get_version(void)
147{ 116{
148 int err; 117 int err;
diff --git a/arch/arm64/kernel/signal32.c b/arch/arm64/kernel/signal32.c
index c20a300e2213..d26fcd4cd6e6 100644
--- a/arch/arm64/kernel/signal32.c
+++ b/arch/arm64/kernel/signal32.c
@@ -154,8 +154,7 @@ int copy_siginfo_to_user32(compat_siginfo_t __user *to, const siginfo_t *from)
154 case __SI_TIMER: 154 case __SI_TIMER:
155 err |= __put_user(from->si_tid, &to->si_tid); 155 err |= __put_user(from->si_tid, &to->si_tid);
156 err |= __put_user(from->si_overrun, &to->si_overrun); 156 err |= __put_user(from->si_overrun, &to->si_overrun);
157 err |= __put_user((compat_uptr_t)(unsigned long)from->si_ptr, 157 err |= __put_user(from->si_int, &to->si_int);
158 &to->si_ptr);
159 break; 158 break;
160 case __SI_POLL: 159 case __SI_POLL:
161 err |= __put_user(from->si_band, &to->si_band); 160 err |= __put_user(from->si_band, &to->si_band);
@@ -184,7 +183,7 @@ int copy_siginfo_to_user32(compat_siginfo_t __user *to, const siginfo_t *from)
184 case __SI_MESGQ: /* But this is */ 183 case __SI_MESGQ: /* But this is */
185 err |= __put_user(from->si_pid, &to->si_pid); 184 err |= __put_user(from->si_pid, &to->si_pid);
186 err |= __put_user(from->si_uid, &to->si_uid); 185 err |= __put_user(from->si_uid, &to->si_uid);
187 err |= __put_user((compat_uptr_t)(unsigned long)from->si_ptr, &to->si_ptr); 186 err |= __put_user(from->si_int, &to->si_int);
188 break; 187 break;
189 case __SI_SYS: 188 case __SI_SYS:
190 err |= __put_user((compat_uptr_t)(unsigned long) 189 err |= __put_user((compat_uptr_t)(unsigned long)
diff --git a/arch/arm64/kernel/vdso/gettimeofday.S b/arch/arm64/kernel/vdso/gettimeofday.S
index fe652ffd34c2..efa79e8d4196 100644
--- a/arch/arm64/kernel/vdso/gettimeofday.S
+++ b/arch/arm64/kernel/vdso/gettimeofday.S
@@ -174,8 +174,6 @@ ENDPROC(__kernel_clock_gettime)
174/* int __kernel_clock_getres(clockid_t clock_id, struct timespec *res); */ 174/* int __kernel_clock_getres(clockid_t clock_id, struct timespec *res); */
175ENTRY(__kernel_clock_getres) 175ENTRY(__kernel_clock_getres)
176 .cfi_startproc 176 .cfi_startproc
177 cbz w1, 3f
178
179 cmp w0, #CLOCK_REALTIME 177 cmp w0, #CLOCK_REALTIME
180 ccmp w0, #CLOCK_MONOTONIC, #0x4, ne 178 ccmp w0, #CLOCK_MONOTONIC, #0x4, ne
181 b.ne 1f 179 b.ne 1f
@@ -188,6 +186,7 @@ ENTRY(__kernel_clock_getres)
188 b.ne 4f 186 b.ne 4f
189 ldr x2, 6f 187 ldr x2, 6f
1902: 1882:
189 cbz w1, 3f
191 stp xzr, x2, [x1] 190 stp xzr, x2, [x1]
192 191
1933: /* res == NULL. */ 1923: /* res == NULL. */
diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
index 0a24b9b8c698..58e0c2bdde04 100644
--- a/arch/arm64/mm/dma-mapping.c
+++ b/arch/arm64/mm/dma-mapping.c
@@ -348,8 +348,6 @@ static struct dma_map_ops swiotlb_dma_ops = {
348 .mapping_error = swiotlb_dma_mapping_error, 348 .mapping_error = swiotlb_dma_mapping_error,
349}; 349};
350 350
351extern int swiotlb_late_init_with_default_size(size_t default_size);
352
353static int __init atomic_pool_init(void) 351static int __init atomic_pool_init(void)
354{ 352{
355 pgprot_t prot = __pgprot(PROT_NORMAL_NC); 353 pgprot_t prot = __pgprot(PROT_NORMAL_NC);
@@ -411,21 +409,13 @@ out:
411 return -ENOMEM; 409 return -ENOMEM;
412} 410}
413 411
414static int __init swiotlb_late_init(void) 412static int __init arm64_dma_init(void)
415{ 413{
416 size_t swiotlb_size = min(SZ_64M, MAX_ORDER_NR_PAGES << PAGE_SHIFT); 414 int ret;
417 415
418 dma_ops = &swiotlb_dma_ops; 416 dma_ops = &swiotlb_dma_ops;
419 417
420 return swiotlb_late_init_with_default_size(swiotlb_size); 418 ret = atomic_pool_init();
421}
422
423static int __init arm64_dma_init(void)
424{
425 int ret = 0;
426
427 ret |= swiotlb_late_init();
428 ret |= atomic_pool_init();
429 419
430 return ret; 420 return ret;
431} 421}
diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
index 71145f952070..ae85da6307bb 100644
--- a/arch/arm64/mm/init.c
+++ b/arch/arm64/mm/init.c
@@ -33,6 +33,7 @@
33#include <linux/dma-mapping.h> 33#include <linux/dma-mapping.h>
34#include <linux/dma-contiguous.h> 34#include <linux/dma-contiguous.h>
35#include <linux/efi.h> 35#include <linux/efi.h>
36#include <linux/swiotlb.h>
36 37
37#include <asm/fixmap.h> 38#include <asm/fixmap.h>
38#include <asm/memory.h> 39#include <asm/memory.h>
@@ -45,6 +46,7 @@
45#include "mm.h" 46#include "mm.h"
46 47
47phys_addr_t memstart_addr __read_mostly = 0; 48phys_addr_t memstart_addr __read_mostly = 0;
49phys_addr_t arm64_dma_phys_limit __read_mostly;
48 50
49#ifdef CONFIG_BLK_DEV_INITRD 51#ifdef CONFIG_BLK_DEV_INITRD
50static int __init early_initrd(char *p) 52static int __init early_initrd(char *p)
@@ -85,7 +87,7 @@ static void __init zone_sizes_init(unsigned long min, unsigned long max)
85 87
86 /* 4GB maximum for 32-bit only capable devices */ 88 /* 4GB maximum for 32-bit only capable devices */
87 if (IS_ENABLED(CONFIG_ZONE_DMA)) { 89 if (IS_ENABLED(CONFIG_ZONE_DMA)) {
88 max_dma = PFN_DOWN(max_zone_dma_phys()); 90 max_dma = PFN_DOWN(arm64_dma_phys_limit);
89 zone_size[ZONE_DMA] = max_dma - min; 91 zone_size[ZONE_DMA] = max_dma - min;
90 } 92 }
91 zone_size[ZONE_NORMAL] = max - max_dma; 93 zone_size[ZONE_NORMAL] = max - max_dma;
@@ -156,8 +158,6 @@ early_param("mem", early_mem);
156 158
157void __init arm64_memblock_init(void) 159void __init arm64_memblock_init(void)
158{ 160{
159 phys_addr_t dma_phys_limit = 0;
160
161 memblock_enforce_memory_limit(memory_limit); 161 memblock_enforce_memory_limit(memory_limit);
162 162
163 /* 163 /*
@@ -174,8 +174,10 @@ void __init arm64_memblock_init(void)
174 174
175 /* 4GB maximum for 32-bit only capable devices */ 175 /* 4GB maximum for 32-bit only capable devices */
176 if (IS_ENABLED(CONFIG_ZONE_DMA)) 176 if (IS_ENABLED(CONFIG_ZONE_DMA))
177 dma_phys_limit = max_zone_dma_phys(); 177 arm64_dma_phys_limit = max_zone_dma_phys();
178 dma_contiguous_reserve(dma_phys_limit); 178 else
179 arm64_dma_phys_limit = PHYS_MASK + 1;
180 dma_contiguous_reserve(arm64_dma_phys_limit);
179 181
180 memblock_allow_resize(); 182 memblock_allow_resize();
181 memblock_dump_all(); 183 memblock_dump_all();
@@ -276,6 +278,8 @@ static void __init free_unused_memmap(void)
276 */ 278 */
277void __init mem_init(void) 279void __init mem_init(void)
278{ 280{
281 swiotlb_init(1);
282
279 set_max_mapnr(pfn_to_page(max_pfn) - mem_map); 283 set_max_mapnr(pfn_to_page(max_pfn) - mem_map);
280 284
281#ifndef CONFIG_SPARSEMEM_VMEMMAP 285#ifndef CONFIG_SPARSEMEM_VMEMMAP
diff --git a/arch/frv/include/asm/pgtable.h b/arch/frv/include/asm/pgtable.h
index 93bcf2abd1a1..07d7a7ef8bd5 100644
--- a/arch/frv/include/asm/pgtable.h
+++ b/arch/frv/include/asm/pgtable.h
@@ -123,12 +123,14 @@ extern unsigned long empty_zero_page;
123#define PGDIR_MASK (~(PGDIR_SIZE - 1)) 123#define PGDIR_MASK (~(PGDIR_SIZE - 1))
124#define PTRS_PER_PGD 64 124#define PTRS_PER_PGD 64
125 125
126#define __PAGETABLE_PUD_FOLDED
126#define PUD_SHIFT 26 127#define PUD_SHIFT 26
127#define PTRS_PER_PUD 1 128#define PTRS_PER_PUD 1
128#define PUD_SIZE (1UL << PUD_SHIFT) 129#define PUD_SIZE (1UL << PUD_SHIFT)
129#define PUD_MASK (~(PUD_SIZE - 1)) 130#define PUD_MASK (~(PUD_SIZE - 1))
130#define PUE_SIZE 256 131#define PUE_SIZE 256
131 132
133#define __PAGETABLE_PMD_FOLDED
132#define PMD_SHIFT 26 134#define PMD_SHIFT 26
133#define PMD_SIZE (1UL << PMD_SHIFT) 135#define PMD_SIZE (1UL << PMD_SHIFT)
134#define PMD_MASK (~(PMD_SIZE - 1)) 136#define PMD_MASK (~(PMD_SIZE - 1))
diff --git a/arch/m32r/include/asm/pgtable-2level.h b/arch/m32r/include/asm/pgtable-2level.h
index 8fd8ee70266a..421e6ba3a173 100644
--- a/arch/m32r/include/asm/pgtable-2level.h
+++ b/arch/m32r/include/asm/pgtable-2level.h
@@ -13,6 +13,7 @@
13 * the M32R is two-level, so we don't really have any 13 * the M32R is two-level, so we don't really have any
14 * PMD directory physically. 14 * PMD directory physically.
15 */ 15 */
16#define __PAGETABLE_PMD_FOLDED
16#define PMD_SHIFT 22 17#define PMD_SHIFT 22
17#define PTRS_PER_PMD 1 18#define PTRS_PER_PMD 1
18 19
diff --git a/arch/m68k/include/asm/pgtable_mm.h b/arch/m68k/include/asm/pgtable_mm.h
index 28a145bfbb71..35ed4a9981ae 100644
--- a/arch/m68k/include/asm/pgtable_mm.h
+++ b/arch/m68k/include/asm/pgtable_mm.h
@@ -54,10 +54,12 @@
54 */ 54 */
55#ifdef CONFIG_SUN3 55#ifdef CONFIG_SUN3
56#define PTRS_PER_PTE 16 56#define PTRS_PER_PTE 16
57#define __PAGETABLE_PMD_FOLDED
57#define PTRS_PER_PMD 1 58#define PTRS_PER_PMD 1
58#define PTRS_PER_PGD 2048 59#define PTRS_PER_PGD 2048
59#elif defined(CONFIG_COLDFIRE) 60#elif defined(CONFIG_COLDFIRE)
60#define PTRS_PER_PTE 512 61#define PTRS_PER_PTE 512
62#define __PAGETABLE_PMD_FOLDED
61#define PTRS_PER_PMD 1 63#define PTRS_PER_PMD 1
62#define PTRS_PER_PGD 1024 64#define PTRS_PER_PGD 1024
63#else 65#else
diff --git a/arch/metag/include/asm/processor.h b/arch/metag/include/asm/processor.h
index 881071c07942..13272fd5a5ba 100644
--- a/arch/metag/include/asm/processor.h
+++ b/arch/metag/include/asm/processor.h
@@ -149,8 +149,8 @@ extern void exit_thread(void);
149 149
150unsigned long get_wchan(struct task_struct *p); 150unsigned long get_wchan(struct task_struct *p);
151 151
152#define KSTK_EIP(tsk) ((tsk)->thread.kernel_context->CurrPC) 152#define KSTK_EIP(tsk) (task_pt_regs(tsk)->ctx.CurrPC)
153#define KSTK_ESP(tsk) ((tsk)->thread.kernel_context->AX[0].U0) 153#define KSTK_ESP(tsk) (task_pt_regs(tsk)->ctx.AX[0].U0)
154 154
155#define user_stack_pointer(regs) ((regs)->ctx.AX[0].U0) 155#define user_stack_pointer(regs) ((regs)->ctx.AX[0].U0)
156 156
diff --git a/arch/mn10300/include/asm/pgtable.h b/arch/mn10300/include/asm/pgtable.h
index afab728ab65e..96d3f9deb59c 100644
--- a/arch/mn10300/include/asm/pgtable.h
+++ b/arch/mn10300/include/asm/pgtable.h
@@ -56,7 +56,9 @@ extern void paging_init(void);
56#define PGDIR_SHIFT 22 56#define PGDIR_SHIFT 22
57#define PTRS_PER_PGD 1024 57#define PTRS_PER_PGD 1024
58#define PTRS_PER_PUD 1 /* we don't really have any PUD physically */ 58#define PTRS_PER_PUD 1 /* we don't really have any PUD physically */
59#define __PAGETABLE_PUD_FOLDED
59#define PTRS_PER_PMD 1 /* we don't really have any PMD physically */ 60#define PTRS_PER_PMD 1 /* we don't really have any PMD physically */
61#define __PAGETABLE_PMD_FOLDED
60#define PTRS_PER_PTE 1024 62#define PTRS_PER_PTE 1024
61 63
62#define PGD_SIZE PAGE_SIZE 64#define PGD_SIZE PAGE_SIZE
diff --git a/arch/parisc/include/asm/pgtable.h b/arch/parisc/include/asm/pgtable.h
index 8c966b2270aa..15207b9362bf 100644
--- a/arch/parisc/include/asm/pgtable.h
+++ b/arch/parisc/include/asm/pgtable.h
@@ -96,6 +96,7 @@ extern void purge_tlb_entries(struct mm_struct *, unsigned long);
96#if PT_NLEVELS == 3 96#if PT_NLEVELS == 3
97#define BITS_PER_PMD (PAGE_SHIFT + PMD_ORDER - BITS_PER_PMD_ENTRY) 97#define BITS_PER_PMD (PAGE_SHIFT + PMD_ORDER - BITS_PER_PMD_ENTRY)
98#else 98#else
99#define __PAGETABLE_PMD_FOLDED
99#define BITS_PER_PMD 0 100#define BITS_PER_PMD 0
100#endif 101#endif
101#define PTRS_PER_PMD (1UL << BITS_PER_PMD) 102#define PTRS_PER_PMD (1UL << BITS_PER_PMD)
diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h
index fbb5ee3ae57c..e08ec38f8c6e 100644
--- a/arch/s390/include/asm/pgtable.h
+++ b/arch/s390/include/asm/pgtable.h
@@ -91,7 +91,9 @@ extern unsigned long zero_page_mask;
91 */ 91 */
92#define PTRS_PER_PTE 256 92#define PTRS_PER_PTE 256
93#ifndef CONFIG_64BIT 93#ifndef CONFIG_64BIT
94#define __PAGETABLE_PUD_FOLDED
94#define PTRS_PER_PMD 1 95#define PTRS_PER_PMD 1
96#define __PAGETABLE_PMD_FOLDED
95#define PTRS_PER_PUD 1 97#define PTRS_PER_PUD 1
96#else /* CONFIG_64BIT */ 98#else /* CONFIG_64BIT */
97#define PTRS_PER_PMD 2048 99#define PTRS_PER_PMD 2048
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index b5c8ff5e9dfc..2346c95c6ab1 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -1396,6 +1396,12 @@ void cpu_init(void)
1396 1396
1397 wait_for_master_cpu(cpu); 1397 wait_for_master_cpu(cpu);
1398 1398
1399 /*
1400 * Initialize the CR4 shadow before doing anything that could
1401 * try to read it.
1402 */
1403 cr4_init_shadow();
1404
1399 show_ucode_info_early(); 1405 show_ucode_info_early();
1400 1406
1401 printk(KERN_INFO "Initializing CPU#%d\n", cpu); 1407 printk(KERN_INFO "Initializing CPU#%d\n", cpu);
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
index 94d7dcb12145..50163fa9034f 100644
--- a/arch/x86/kernel/cpu/intel.c
+++ b/arch/x86/kernel/cpu/intel.c
@@ -565,8 +565,8 @@ static const struct _tlb_table intel_tlb_table[] = {
565 { 0xb2, TLB_INST_4K, 64, " TLB_INST 4KByte pages, 4-way set associative" }, 565 { 0xb2, TLB_INST_4K, 64, " TLB_INST 4KByte pages, 4-way set associative" },
566 { 0xb3, TLB_DATA_4K, 128, " TLB_DATA 4 KByte pages, 4-way set associative" }, 566 { 0xb3, TLB_DATA_4K, 128, " TLB_DATA 4 KByte pages, 4-way set associative" },
567 { 0xb4, TLB_DATA_4K, 256, " TLB_DATA 4 KByte pages, 4-way associative" }, 567 { 0xb4, TLB_DATA_4K, 256, " TLB_DATA 4 KByte pages, 4-way associative" },
568 { 0xb5, TLB_INST_4K, 64, " TLB_INST 4 KByte pages, 8-way set ssociative" }, 568 { 0xb5, TLB_INST_4K, 64, " TLB_INST 4 KByte pages, 8-way set associative" },
569 { 0xb6, TLB_INST_4K, 128, " TLB_INST 4 KByte pages, 8-way set ssociative" }, 569 { 0xb6, TLB_INST_4K, 128, " TLB_INST 4 KByte pages, 8-way set associative" },
570 { 0xba, TLB_DATA_4K, 64, " TLB_DATA 4 KByte pages, 4-way associative" }, 570 { 0xba, TLB_DATA_4K, 64, " TLB_DATA 4 KByte pages, 4-way associative" },
571 { 0xc0, TLB_DATA_4K_4M, 8, " TLB_DATA 4 KByte and 4 MByte pages, 4-way associative" }, 571 { 0xc0, TLB_DATA_4K_4M, 8, " TLB_DATA 4 KByte and 4 MByte pages, 4-way associative" },
572 { 0xc1, STLB_4K_2M, 1024, " STLB 4 KByte and 2 MByte pages, 8-way associative" }, 572 { 0xc1, STLB_4K_2M, 1024, " STLB 4 KByte and 2 MByte pages, 8-way associative" },
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S
index 000d4199b03e..31e2d5bf3e38 100644
--- a/arch/x86/kernel/entry_32.S
+++ b/arch/x86/kernel/entry_32.S
@@ -982,6 +982,9 @@ ENTRY(xen_hypervisor_callback)
982ENTRY(xen_do_upcall) 982ENTRY(xen_do_upcall)
9831: mov %esp, %eax 9831: mov %esp, %eax
984 call xen_evtchn_do_upcall 984 call xen_evtchn_do_upcall
985#ifndef CONFIG_PREEMPT
986 call xen_maybe_preempt_hcall
987#endif
985 jmp ret_from_intr 988 jmp ret_from_intr
986 CFI_ENDPROC 989 CFI_ENDPROC
987ENDPROC(xen_hypervisor_callback) 990ENDPROC(xen_hypervisor_callback)
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index db13655c3a2a..10074ad9ebf8 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -1208,6 +1208,9 @@ ENTRY(xen_do_hypervisor_callback) # do_hypervisor_callback(struct *pt_regs)
1208 popq %rsp 1208 popq %rsp
1209 CFI_DEF_CFA_REGISTER rsp 1209 CFI_DEF_CFA_REGISTER rsp
1210 decl PER_CPU_VAR(irq_count) 1210 decl PER_CPU_VAR(irq_count)
1211#ifndef CONFIG_PREEMPT
1212 call xen_maybe_preempt_hcall
1213#endif
1211 jmp error_exit 1214 jmp error_exit
1212 CFI_ENDPROC 1215 CFI_ENDPROC
1213END(xen_do_hypervisor_callback) 1216END(xen_do_hypervisor_callback)
diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c
index 6a1146ea4d4d..4e3d5a9621fe 100644
--- a/arch/x86/kernel/kprobes/core.c
+++ b/arch/x86/kernel/kprobes/core.c
@@ -223,27 +223,48 @@ static unsigned long
223__recover_probed_insn(kprobe_opcode_t *buf, unsigned long addr) 223__recover_probed_insn(kprobe_opcode_t *buf, unsigned long addr)
224{ 224{
225 struct kprobe *kp; 225 struct kprobe *kp;
226 unsigned long faddr;
226 227
227 kp = get_kprobe((void *)addr); 228 kp = get_kprobe((void *)addr);
228 /* There is no probe, return original address */ 229 faddr = ftrace_location(addr);
229 if (!kp) 230 /*
231 * Addresses inside the ftrace location are refused by
232 * arch_check_ftrace_location(). Something went terribly wrong
233 * if such an address is checked here.
234 */
235 if (WARN_ON(faddr && faddr != addr))
236 return 0UL;
237 /*
238 * Use the current code if it is not modified by Kprobe
239 * and it cannot be modified by ftrace.
240 */
241 if (!kp && !faddr)
230 return addr; 242 return addr;
231 243
232 /* 244 /*
233 * Basically, kp->ainsn.insn has an original instruction. 245 * Basically, kp->ainsn.insn has an original instruction.
234 * However, RIP-relative instruction can not do single-stepping 246 * However, RIP-relative instruction can not do single-stepping
235 * at different place, __copy_instruction() tweaks the displacement of 247 * at different place, __copy_instruction() tweaks the displacement of
236 * that instruction. In that case, we can't recover the instruction 248 * that instruction. In that case, we can't recover the instruction
237 * from the kp->ainsn.insn. 249 * from the kp->ainsn.insn.
238 * 250 *
239 * On the other hand, kp->opcode has a copy of the first byte of 251 * On the other hand, in case on normal Kprobe, kp->opcode has a copy
240 * the probed instruction, which is overwritten by int3. And 252 * of the first byte of the probed instruction, which is overwritten
241 * the instruction at kp->addr is not modified by kprobes except 253 * by int3. And the instruction at kp->addr is not modified by kprobes
242 * for the first byte, we can recover the original instruction 254 * except for the first byte, we can recover the original instruction
243 * from it and kp->opcode. 255 * from it and kp->opcode.
256 *
257 * In case of Kprobes using ftrace, we do not have a copy of
258 * the original instruction. In fact, the ftrace location might
259 * be modified at anytime and even could be in an inconsistent state.
260 * Fortunately, we know that the original code is the ideal 5-byte
261 * long NOP.
244 */ 262 */
245 memcpy(buf, kp->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t)); 263 memcpy(buf, (void *)addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t));
246 buf[0] = kp->opcode; 264 if (faddr)
265 memcpy(buf, ideal_nops[NOP_ATOMIC5], 5);
266 else
267 buf[0] = kp->opcode;
247 return (unsigned long)buf; 268 return (unsigned long)buf;
248} 269}
249 270
@@ -251,6 +272,7 @@ __recover_probed_insn(kprobe_opcode_t *buf, unsigned long addr)
251 * Recover the probed instruction at addr for further analysis. 272 * Recover the probed instruction at addr for further analysis.
252 * Caller must lock kprobes by kprobe_mutex, or disable preemption 273 * Caller must lock kprobes by kprobe_mutex, or disable preemption
253 * for preventing to release referencing kprobes. 274 * for preventing to release referencing kprobes.
275 * Returns zero if the instruction can not get recovered.
254 */ 276 */
255unsigned long recover_probed_instruction(kprobe_opcode_t *buf, unsigned long addr) 277unsigned long recover_probed_instruction(kprobe_opcode_t *buf, unsigned long addr)
256{ 278{
@@ -285,6 +307,8 @@ static int can_probe(unsigned long paddr)
285 * normally used, we just go through if there is no kprobe. 307 * normally used, we just go through if there is no kprobe.
286 */ 308 */
287 __addr = recover_probed_instruction(buf, addr); 309 __addr = recover_probed_instruction(buf, addr);
310 if (!__addr)
311 return 0;
288 kernel_insn_init(&insn, (void *)__addr, MAX_INSN_SIZE); 312 kernel_insn_init(&insn, (void *)__addr, MAX_INSN_SIZE);
289 insn_get_length(&insn); 313 insn_get_length(&insn);
290 314
@@ -333,6 +357,8 @@ int __copy_instruction(u8 *dest, u8 *src)
333 unsigned long recovered_insn = 357 unsigned long recovered_insn =
334 recover_probed_instruction(buf, (unsigned long)src); 358 recover_probed_instruction(buf, (unsigned long)src);
335 359
360 if (!recovered_insn)
361 return 0;
336 kernel_insn_init(&insn, (void *)recovered_insn, MAX_INSN_SIZE); 362 kernel_insn_init(&insn, (void *)recovered_insn, MAX_INSN_SIZE);
337 insn_get_length(&insn); 363 insn_get_length(&insn);
338 /* Another subsystem puts a breakpoint, failed to recover */ 364 /* Another subsystem puts a breakpoint, failed to recover */
diff --git a/arch/x86/kernel/kprobes/opt.c b/arch/x86/kernel/kprobes/opt.c
index 0dd8d089c315..7b3b9d15c47a 100644
--- a/arch/x86/kernel/kprobes/opt.c
+++ b/arch/x86/kernel/kprobes/opt.c
@@ -259,6 +259,8 @@ static int can_optimize(unsigned long paddr)
259 */ 259 */
260 return 0; 260 return 0;
261 recovered_insn = recover_probed_instruction(buf, addr); 261 recovered_insn = recover_probed_instruction(buf, addr);
262 if (!recovered_insn)
263 return 0;
262 kernel_insn_init(&insn, (void *)recovered_insn, MAX_INSN_SIZE); 264 kernel_insn_init(&insn, (void *)recovered_insn, MAX_INSN_SIZE);
263 insn_get_length(&insn); 265 insn_get_length(&insn);
264 /* Another subsystem puts a breakpoint */ 266 /* Another subsystem puts a breakpoint */
diff --git a/arch/x86/lguest/Kconfig b/arch/x86/lguest/Kconfig
index 4a0890f815c4..08f41caada45 100644
--- a/arch/x86/lguest/Kconfig
+++ b/arch/x86/lguest/Kconfig
@@ -1,6 +1,6 @@
1config LGUEST_GUEST 1config LGUEST_GUEST
2 bool "Lguest guest support" 2 bool "Lguest guest support"
3 depends on X86_32 && PARAVIRT 3 depends on X86_32 && PARAVIRT && PCI
4 select TTY 4 select TTY
5 select VIRTUALIZATION 5 select VIRTUALIZATION
6 select VIRTIO 6 select VIRTIO
@@ -8,7 +8,7 @@ config LGUEST_GUEST
8 help 8 help
9 Lguest is a tiny in-kernel hypervisor. Selecting this will 9 Lguest is a tiny in-kernel hypervisor. Selecting this will
10 allow your kernel to boot under lguest. This option will increase 10 allow your kernel to boot under lguest. This option will increase
11 your kernel size by about 6k. If in doubt, say N. 11 your kernel size by about 10k. If in doubt, say N.
12 12
13 If you say Y here, make sure you say Y (or M) to the virtio block 13 If you say Y here, make sure you say Y (or M) to the virtio block
14 and net drivers which lguest needs. 14 and net drivers which lguest needs.
diff --git a/arch/x86/platform/intel-mid/intel-mid.c b/arch/x86/platform/intel-mid/intel-mid.c
index 1bbedc4b0f88..3005f0c89f2e 100644
--- a/arch/x86/platform/intel-mid/intel-mid.c
+++ b/arch/x86/platform/intel-mid/intel-mid.c
@@ -130,7 +130,7 @@ static void intel_mid_arch_setup(void)
130 intel_mid_ops = get_intel_mid_ops[__intel_mid_cpu_chip](); 130 intel_mid_ops = get_intel_mid_ops[__intel_mid_cpu_chip]();
131 else { 131 else {
132 intel_mid_ops = get_intel_mid_ops[INTEL_MID_CPU_CHIP_PENWELL](); 132 intel_mid_ops = get_intel_mid_ops[INTEL_MID_CPU_CHIP_PENWELL]();
133 pr_info("ARCH: Uknown SoC, assuming PENWELL!\n"); 133 pr_info("ARCH: Unknown SoC, assuming PENWELL!\n");
134 } 134 }
135 135
136out: 136out:
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index bd8b8459c3d0..5240f563076d 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -1070,6 +1070,23 @@ static inline void xen_write_cr8(unsigned long val)
1070 BUG_ON(val); 1070 BUG_ON(val);
1071} 1071}
1072#endif 1072#endif
1073
1074static u64 xen_read_msr_safe(unsigned int msr, int *err)
1075{
1076 u64 val;
1077
1078 val = native_read_msr_safe(msr, err);
1079 switch (msr) {
1080 case MSR_IA32_APICBASE:
1081#ifdef CONFIG_X86_X2APIC
1082 if (!(cpuid_ecx(1) & (1 << (X86_FEATURE_X2APIC & 31))))
1083#endif
1084 val &= ~X2APIC_ENABLE;
1085 break;
1086 }
1087 return val;
1088}
1089
1073static int xen_write_msr_safe(unsigned int msr, unsigned low, unsigned high) 1090static int xen_write_msr_safe(unsigned int msr, unsigned low, unsigned high)
1074{ 1091{
1075 int ret; 1092 int ret;
@@ -1240,7 +1257,7 @@ static const struct pv_cpu_ops xen_cpu_ops __initconst = {
1240 1257
1241 .wbinvd = native_wbinvd, 1258 .wbinvd = native_wbinvd,
1242 1259
1243 .read_msr = native_read_msr_safe, 1260 .read_msr = xen_read_msr_safe,
1244 .write_msr = xen_write_msr_safe, 1261 .write_msr = xen_write_msr_safe,
1245 1262
1246 .read_tsc = native_read_tsc, 1263 .read_tsc = native_read_tsc,
@@ -1741,6 +1758,7 @@ asmlinkage __visible void __init xen_start_kernel(void)
1741#ifdef CONFIG_X86_32 1758#ifdef CONFIG_X86_32
1742 i386_start_kernel(); 1759 i386_start_kernel();
1743#else 1760#else
1761 cr4_init_shadow(); /* 32b kernel does this in i386_start_kernel() */
1744 x86_64_start_reservations((char *)__pa_symbol(&boot_params)); 1762 x86_64_start_reservations((char *)__pa_symbol(&boot_params));
1745#endif 1763#endif
1746} 1764}