diff options
Diffstat (limited to 'arch/arm')
241 files changed, 2518 insertions, 2117 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index ba412e02ec0c..75e2edaac61a 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -20,7 +20,6 @@ config ARM | |||
20 | select GENERIC_STRNCPY_FROM_USER | 20 | select GENERIC_STRNCPY_FROM_USER |
21 | select GENERIC_STRNLEN_USER | 21 | select GENERIC_STRNLEN_USER |
22 | select HARDIRQS_SW_RESEND | 22 | select HARDIRQS_SW_RESEND |
23 | select HAVE_AOUT | ||
24 | select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL | 23 | select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL |
25 | select HAVE_ARCH_KGDB | 24 | select HAVE_ARCH_KGDB |
26 | select HAVE_ARCH_SECCOMP_FILTER | 25 | select HAVE_ARCH_SECCOMP_FILTER |
@@ -218,7 +217,8 @@ config VECTORS_BASE | |||
218 | default DRAM_BASE if REMAP_VECTORS_TO_RAM | 217 | default DRAM_BASE if REMAP_VECTORS_TO_RAM |
219 | default 0x00000000 | 218 | default 0x00000000 |
220 | help | 219 | help |
221 | The base address of exception vectors. | 220 | The base address of exception vectors. This must be two pages |
221 | in size. | ||
222 | 222 | ||
223 | config ARM_PATCH_PHYS_VIRT | 223 | config ARM_PATCH_PHYS_VIRT |
224 | bool "Patch physical to virtual translations at runtime" if EMBEDDED | 224 | bool "Patch physical to virtual translations at runtime" if EMBEDDED |
@@ -557,6 +557,7 @@ config ARCH_MMP | |||
557 | select GENERIC_CLOCKEVENTS | 557 | select GENERIC_CLOCKEVENTS |
558 | select GPIO_PXA | 558 | select GPIO_PXA |
559 | select IRQ_DOMAIN | 559 | select IRQ_DOMAIN |
560 | select MULTI_IRQ_HANDLER | ||
560 | select NEED_MACH_GPIO_H | 561 | select NEED_MACH_GPIO_H |
561 | select PINCTRL | 562 | select PINCTRL |
562 | select PLAT_PXA | 563 | select PLAT_PXA |
@@ -1600,8 +1601,7 @@ config LOCAL_TIMERS | |||
1600 | config ARCH_NR_GPIO | 1601 | config ARCH_NR_GPIO |
1601 | int | 1602 | int |
1602 | default 1024 if ARCH_SHMOBILE || ARCH_TEGRA | 1603 | default 1024 if ARCH_SHMOBILE || ARCH_TEGRA |
1603 | default 512 if SOC_OMAP5 | 1604 | default 512 if ARCH_EXYNOS || ARCH_KEYSTONE || SOC_OMAP5 |
1604 | default 512 if ARCH_KEYSTONE | ||
1605 | default 392 if ARCH_U8500 | 1605 | default 392 if ARCH_U8500 |
1606 | default 352 if ARCH_VT8500 | 1606 | default 352 if ARCH_VT8500 |
1607 | default 288 if ARCH_SUNXI | 1607 | default 288 if ARCH_SUNXI |
diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug index e401a766c0bd..583f4a00ec32 100644 --- a/arch/arm/Kconfig.debug +++ b/arch/arm/Kconfig.debug | |||
@@ -804,9 +804,19 @@ config DEBUG_LL_INCLUDE | |||
804 | 804 | ||
805 | config DEBUG_UNCOMPRESS | 805 | config DEBUG_UNCOMPRESS |
806 | bool | 806 | bool |
807 | default y if ARCH_MULTIPLATFORM && DEBUG_LL && \ | 807 | depends on ARCH_MULTIPLATFORM |
808 | !DEBUG_OMAP2PLUS_UART && \ | 808 | default y if DEBUG_LL && !DEBUG_OMAP2PLUS_UART && \ |
809 | !DEBUG_TEGRA_UART | 809 | !DEBUG_TEGRA_UART |
810 | help | ||
811 | This option influences the normal decompressor output for | ||
812 | multiplatform kernels. Normally, multiplatform kernels disable | ||
813 | decompressor output because it is not possible to know where to | ||
814 | send the decompressor output. | ||
815 | |||
816 | When this option is set, the selected DEBUG_LL output method | ||
817 | will be re-used for normal decompressor output on multiplatform | ||
818 | kernels. | ||
819 | |||
810 | 820 | ||
811 | config UNCOMPRESS_INCLUDE | 821 | config UNCOMPRESS_INCLUDE |
812 | string | 822 | string |
diff --git a/arch/arm/Makefile b/arch/arm/Makefile index c0ac0f5e5e5c..6fd2ceae305a 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile | |||
@@ -153,6 +153,7 @@ machine-$(CONFIG_ARCH_DAVINCI) += davinci | |||
153 | machine-$(CONFIG_ARCH_DOVE) += dove | 153 | machine-$(CONFIG_ARCH_DOVE) += dove |
154 | machine-$(CONFIG_ARCH_EBSA110) += ebsa110 | 154 | machine-$(CONFIG_ARCH_EBSA110) += ebsa110 |
155 | machine-$(CONFIG_ARCH_EP93XX) += ep93xx | 155 | machine-$(CONFIG_ARCH_EP93XX) += ep93xx |
156 | machine-$(CONFIG_ARCH_EXYNOS) += exynos | ||
156 | machine-$(CONFIG_ARCH_GEMINI) += gemini | 157 | machine-$(CONFIG_ARCH_GEMINI) += gemini |
157 | machine-$(CONFIG_ARCH_HIGHBANK) += highbank | 158 | machine-$(CONFIG_ARCH_HIGHBANK) += highbank |
158 | machine-$(CONFIG_ARCH_INTEGRATOR) += integrator | 159 | machine-$(CONFIG_ARCH_INTEGRATOR) += integrator |
@@ -160,15 +161,16 @@ machine-$(CONFIG_ARCH_IOP13XX) += iop13xx | |||
160 | machine-$(CONFIG_ARCH_IOP32X) += iop32x | 161 | machine-$(CONFIG_ARCH_IOP32X) += iop32x |
161 | machine-$(CONFIG_ARCH_IOP33X) += iop33x | 162 | machine-$(CONFIG_ARCH_IOP33X) += iop33x |
162 | machine-$(CONFIG_ARCH_IXP4XX) += ixp4xx | 163 | machine-$(CONFIG_ARCH_IXP4XX) += ixp4xx |
164 | machine-$(CONFIG_ARCH_KEYSTONE) += keystone | ||
163 | machine-$(CONFIG_ARCH_KIRKWOOD) += kirkwood | 165 | machine-$(CONFIG_ARCH_KIRKWOOD) += kirkwood |
164 | machine-$(CONFIG_ARCH_KS8695) += ks8695 | 166 | machine-$(CONFIG_ARCH_KS8695) += ks8695 |
165 | machine-$(CONFIG_ARCH_LPC32XX) += lpc32xx | 167 | machine-$(CONFIG_ARCH_LPC32XX) += lpc32xx |
166 | machine-$(CONFIG_ARCH_MMP) += mmp | 168 | machine-$(CONFIG_ARCH_MMP) += mmp |
167 | machine-$(CONFIG_ARCH_MSM) += msm | 169 | machine-$(CONFIG_ARCH_MSM) += msm |
168 | machine-$(CONFIG_ARCH_MV78XX0) += mv78xx0 | 170 | machine-$(CONFIG_ARCH_MV78XX0) += mv78xx0 |
171 | machine-$(CONFIG_ARCH_MVEBU) += mvebu | ||
169 | machine-$(CONFIG_ARCH_MXC) += imx | 172 | machine-$(CONFIG_ARCH_MXC) += imx |
170 | machine-$(CONFIG_ARCH_MXS) += mxs | 173 | machine-$(CONFIG_ARCH_MXS) += mxs |
171 | machine-$(CONFIG_ARCH_MVEBU) += mvebu | ||
172 | machine-$(CONFIG_ARCH_NETX) += netx | 174 | machine-$(CONFIG_ARCH_NETX) += netx |
173 | machine-$(CONFIG_ARCH_NOMADIK) += nomadik | 175 | machine-$(CONFIG_ARCH_NOMADIK) += nomadik |
174 | machine-$(CONFIG_ARCH_NSPIRE) += nspire | 176 | machine-$(CONFIG_ARCH_NSPIRE) += nspire |
@@ -176,7 +178,6 @@ machine-$(CONFIG_ARCH_OMAP1) += omap1 | |||
176 | machine-$(CONFIG_ARCH_OMAP2PLUS) += omap2 | 178 | machine-$(CONFIG_ARCH_OMAP2PLUS) += omap2 |
177 | machine-$(CONFIG_ARCH_ORION5X) += orion5x | 179 | machine-$(CONFIG_ARCH_ORION5X) += orion5x |
178 | machine-$(CONFIG_ARCH_PICOXCELL) += picoxcell | 180 | machine-$(CONFIG_ARCH_PICOXCELL) += picoxcell |
179 | machine-$(CONFIG_ARCH_SIRF) += prima2 | ||
180 | machine-$(CONFIG_ARCH_PXA) += pxa | 181 | machine-$(CONFIG_ARCH_PXA) += pxa |
181 | machine-$(CONFIG_ARCH_REALVIEW) += realview | 182 | machine-$(CONFIG_ARCH_REALVIEW) += realview |
182 | machine-$(CONFIG_ARCH_ROCKCHIP) += rockchip | 183 | machine-$(CONFIG_ARCH_ROCKCHIP) += rockchip |
@@ -186,25 +187,24 @@ machine-$(CONFIG_ARCH_S3C64XX) += s3c64xx | |||
186 | machine-$(CONFIG_ARCH_S5P64X0) += s5p64x0 | 187 | machine-$(CONFIG_ARCH_S5P64X0) += s5p64x0 |
187 | machine-$(CONFIG_ARCH_S5PC100) += s5pc100 | 188 | machine-$(CONFIG_ARCH_S5PC100) += s5pc100 |
188 | machine-$(CONFIG_ARCH_S5PV210) += s5pv210 | 189 | machine-$(CONFIG_ARCH_S5PV210) += s5pv210 |
189 | machine-$(CONFIG_ARCH_EXYNOS) += exynos | ||
190 | machine-$(CONFIG_ARCH_SA1100) += sa1100 | 190 | machine-$(CONFIG_ARCH_SA1100) += sa1100 |
191 | machine-$(CONFIG_ARCH_SHARK) += shark | 191 | machine-$(CONFIG_ARCH_SHARK) += shark |
192 | machine-$(CONFIG_ARCH_SHMOBILE) += shmobile | 192 | machine-$(CONFIG_ARCH_SHMOBILE) += shmobile |
193 | machine-$(CONFIG_ARCH_SIRF) += prima2 | ||
194 | machine-$(CONFIG_ARCH_SOCFPGA) += socfpga | ||
195 | machine-$(CONFIG_ARCH_STI) += sti | ||
196 | machine-$(CONFIG_ARCH_SUNXI) += sunxi | ||
193 | machine-$(CONFIG_ARCH_TEGRA) += tegra | 197 | machine-$(CONFIG_ARCH_TEGRA) += tegra |
194 | machine-$(CONFIG_ARCH_U300) += u300 | 198 | machine-$(CONFIG_ARCH_U300) += u300 |
195 | machine-$(CONFIG_ARCH_U8500) += ux500 | 199 | machine-$(CONFIG_ARCH_U8500) += ux500 |
196 | machine-$(CONFIG_ARCH_VERSATILE) += versatile | 200 | machine-$(CONFIG_ARCH_VERSATILE) += versatile |
197 | machine-$(CONFIG_ARCH_VEXPRESS) += vexpress | 201 | machine-$(CONFIG_ARCH_VEXPRESS) += vexpress |
202 | machine-$(CONFIG_ARCH_VIRT) += virt | ||
198 | machine-$(CONFIG_ARCH_VT8500) += vt8500 | 203 | machine-$(CONFIG_ARCH_VT8500) += vt8500 |
199 | machine-$(CONFIG_ARCH_W90X900) += w90x900 | 204 | machine-$(CONFIG_ARCH_W90X900) += w90x900 |
205 | machine-$(CONFIG_ARCH_ZYNQ) += zynq | ||
200 | machine-$(CONFIG_FOOTBRIDGE) += footbridge | 206 | machine-$(CONFIG_FOOTBRIDGE) += footbridge |
201 | machine-$(CONFIG_ARCH_SOCFPGA) += socfpga | ||
202 | machine-$(CONFIG_PLAT_SPEAR) += spear | 207 | machine-$(CONFIG_PLAT_SPEAR) += spear |
203 | machine-$(CONFIG_ARCH_STI) += sti | ||
204 | machine-$(CONFIG_ARCH_VIRT) += virt | ||
205 | machine-$(CONFIG_ARCH_ZYNQ) += zynq | ||
206 | machine-$(CONFIG_ARCH_SUNXI) += sunxi | ||
207 | machine-$(CONFIG_ARCH_KEYSTONE) += keystone | ||
208 | 208 | ||
209 | # Platform directory name. This list is sorted alphanumerically | 209 | # Platform directory name. This list is sorted alphanumerically |
210 | # by CONFIG_* macro name. | 210 | # by CONFIG_* macro name. |
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index ec1a3f50d226..05f6c2a29019 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile | |||
@@ -53,13 +53,14 @@ dtb-$(CONFIG_ARCH_EXYNOS) += exynos4210-origen.dtb \ | |||
53 | exynos4210-trats.dtb \ | 53 | exynos4210-trats.dtb \ |
54 | exynos4210-universal_c210.dtb \ | 54 | exynos4210-universal_c210.dtb \ |
55 | exynos4412-odroidx.dtb \ | 55 | exynos4412-odroidx.dtb \ |
56 | exynos4412-smdk4412.dtb \ | ||
57 | exynos4412-origen.dtb \ | 56 | exynos4412-origen.dtb \ |
57 | exynos4412-smdk4412.dtb \ | ||
58 | exynos4412-trats2.dtb \ | ||
58 | exynos5250-arndale.dtb \ | 59 | exynos5250-arndale.dtb \ |
59 | exynos5440-sd5v1.dtb \ | ||
60 | exynos5250-smdk5250.dtb \ | 60 | exynos5250-smdk5250.dtb \ |
61 | exynos5250-snow.dtb \ | 61 | exynos5250-snow.dtb \ |
62 | exynos5420-smdk5420.dtb \ | 62 | exynos5420-smdk5420.dtb \ |
63 | exynos5440-sd5v1.dtb \ | ||
63 | exynos5440-ssdk5440.dtb | 64 | exynos5440-ssdk5440.dtb |
64 | dtb-$(CONFIG_ARCH_HIGHBANK) += highbank.dtb \ | 65 | dtb-$(CONFIG_ARCH_HIGHBANK) += highbank.dtb \ |
65 | ecx-2000.dtb | 66 | ecx-2000.dtb |
diff --git a/arch/arm/boot/dts/at91rm9200.dtsi b/arch/arm/boot/dts/at91rm9200.dtsi index 92b9e21389db..f77065506f1e 100644 --- a/arch/arm/boot/dts/at91rm9200.dtsi +++ b/arch/arm/boot/dts/at91rm9200.dtsi | |||
@@ -120,6 +120,7 @@ | |||
120 | interrupts = <10 IRQ_TYPE_LEVEL_HIGH 0>; | 120 | interrupts = <10 IRQ_TYPE_LEVEL_HIGH 0>; |
121 | #address-cells = <1>; | 121 | #address-cells = <1>; |
122 | #size-cells = <0>; | 122 | #size-cells = <0>; |
123 | pinctrl-names = "default"; | ||
123 | status = "disabled"; | 124 | status = "disabled"; |
124 | }; | 125 | }; |
125 | 126 | ||
diff --git a/arch/arm/boot/dts/at91rm9200_pqfp.dtsi b/arch/arm/boot/dts/at91rm9200_pqfp.dtsi new file mode 100644 index 000000000000..93ca66f80360 --- /dev/null +++ b/arch/arm/boot/dts/at91rm9200_pqfp.dtsi | |||
@@ -0,0 +1,17 @@ | |||
1 | /* | ||
2 | * at91rm9200_pqfp.dtsi - Device Tree Include file for AT91RM9200 PQFP family SoC | ||
3 | * | ||
4 | * Copyright (C) 2013 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | ||
5 | * | ||
6 | * Licensed under GPLv2 or later. | ||
7 | */ | ||
8 | |||
9 | #include "at91rm9200.dtsi" | ||
10 | |||
11 | / { | ||
12 | compatible = "atmel,at91rm9200-pqfp", "atmel,at91rm9200"; | ||
13 | }; | ||
14 | |||
15 | &pioD { | ||
16 | status = "disabled"; | ||
17 | }; | ||
diff --git a/arch/arm/boot/dts/at91sam9260.dtsi b/arch/arm/boot/dts/at91sam9260.dtsi index c7ccbcbffb3e..56ee8282a7a8 100644 --- a/arch/arm/boot/dts/at91sam9260.dtsi +++ b/arch/arm/boot/dts/at91sam9260.dtsi | |||
@@ -572,6 +572,7 @@ | |||
572 | interrupts = <9 IRQ_TYPE_LEVEL_HIGH 0>; | 572 | interrupts = <9 IRQ_TYPE_LEVEL_HIGH 0>; |
573 | #address-cells = <1>; | 573 | #address-cells = <1>; |
574 | #size-cells = <0>; | 574 | #size-cells = <0>; |
575 | pinctrl-names = "default"; | ||
575 | status = "disabled"; | 576 | status = "disabled"; |
576 | }; | 577 | }; |
577 | 578 | ||
diff --git a/arch/arm/boot/dts/at91sam9n12.dtsi b/arch/arm/boot/dts/at91sam9n12.dtsi index bb7f564b3a55..9fb7ffd32af2 100644 --- a/arch/arm/boot/dts/at91sam9n12.dtsi +++ b/arch/arm/boot/dts/at91sam9n12.dtsi | |||
@@ -291,6 +291,22 @@ | |||
291 | }; | 291 | }; |
292 | }; | 292 | }; |
293 | 293 | ||
294 | i2c0 { | ||
295 | pinctrl_i2c0: i2c0-0 { | ||
296 | atmel,pins = | ||
297 | <AT91_PIOA 30 AT91_PERIPH_A AT91_PINCTRL_NONE | ||
298 | AT91_PIOA 31 AT91_PERIPH_A AT91_PINCTRL_NONE>; | ||
299 | }; | ||
300 | }; | ||
301 | |||
302 | i2c1 { | ||
303 | pinctrl_i2c1: i2c1-0 { | ||
304 | atmel,pins = | ||
305 | <AT91_PIOC 0 AT91_PERIPH_C AT91_PINCTRL_NONE | ||
306 | AT91_PIOC 1 AT91_PERIPH_C AT91_PINCTRL_NONE>; | ||
307 | }; | ||
308 | }; | ||
309 | |||
294 | tcb0 { | 310 | tcb0 { |
295 | pinctrl_tcb0_tclk0: tcb0_tclk0-0 { | 311 | pinctrl_tcb0_tclk0: tcb0_tclk0-0 { |
296 | atmel,pins = <AT91_PIOA 24 AT91_PERIPH_A AT91_PINCTRL_NONE>; | 312 | atmel,pins = <AT91_PIOA 24 AT91_PERIPH_A AT91_PINCTRL_NONE>; |
@@ -471,6 +487,8 @@ | |||
471 | dma-names = "tx", "rx"; | 487 | dma-names = "tx", "rx"; |
472 | #address-cells = <1>; | 488 | #address-cells = <1>; |
473 | #size-cells = <0>; | 489 | #size-cells = <0>; |
490 | pinctrl-names = "default"; | ||
491 | pinctrl-0 = <&pinctrl_i2c0>; | ||
474 | status = "disabled"; | 492 | status = "disabled"; |
475 | }; | 493 | }; |
476 | 494 | ||
@@ -483,6 +501,8 @@ | |||
483 | dma-names = "tx", "rx"; | 501 | dma-names = "tx", "rx"; |
484 | #address-cells = <1>; | 502 | #address-cells = <1>; |
485 | #size-cells = <0>; | 503 | #size-cells = <0>; |
504 | pinctrl-names = "default"; | ||
505 | pinctrl-0 = <&pinctrl_i2c1>; | ||
486 | status = "disabled"; | 506 | status = "disabled"; |
487 | }; | 507 | }; |
488 | 508 | ||
diff --git a/arch/arm/boot/dts/at91sam9n12ek.dts b/arch/arm/boot/dts/at91sam9n12ek.dts index d59b70c6a6a0..27a9352b9d7a 100644 --- a/arch/arm/boot/dts/at91sam9n12ek.dts +++ b/arch/arm/boot/dts/at91sam9n12ek.dts | |||
@@ -14,11 +14,11 @@ | |||
14 | compatible = "atmel,at91sam9n12ek", "atmel,at91sam9n12", "atmel,at91sam9"; | 14 | compatible = "atmel,at91sam9n12ek", "atmel,at91sam9n12", "atmel,at91sam9"; |
15 | 15 | ||
16 | chosen { | 16 | chosen { |
17 | bootargs = "mem=128M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=jffs2"; | 17 | bootargs = "console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=jffs2"; |
18 | }; | 18 | }; |
19 | 19 | ||
20 | memory { | 20 | memory { |
21 | reg = <0x20000000 0x10000000>; | 21 | reg = <0x20000000 0x8000000>; |
22 | }; | 22 | }; |
23 | 23 | ||
24 | clocks { | 24 | clocks { |
@@ -40,6 +40,15 @@ | |||
40 | 40 | ||
41 | i2c0: i2c@f8010000 { | 41 | i2c0: i2c@f8010000 { |
42 | status = "okay"; | 42 | status = "okay"; |
43 | |||
44 | qt1070: keyboard@1b { | ||
45 | compatible = "qt1070"; | ||
46 | reg = <0x1b>; | ||
47 | interrupt-parent = <&pioA>; | ||
48 | interrupts = <2 IRQ_TYPE_EDGE_FALLING>; | ||
49 | pinctrl-names = "default"; | ||
50 | pinctrl-0 = <&pinctrl_qt1070_irq>; | ||
51 | }; | ||
43 | }; | 52 | }; |
44 | 53 | ||
45 | i2c1: i2c@f8014000 { | 54 | i2c1: i2c@f8014000 { |
@@ -66,6 +75,13 @@ | |||
66 | <AT91_PIOA 7 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>; /* PA7 gpio CD pin pull up and deglitch */ | 75 | <AT91_PIOA 7 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>; /* PA7 gpio CD pin pull up and deglitch */ |
67 | }; | 76 | }; |
68 | }; | 77 | }; |
78 | |||
79 | qt1070 { | ||
80 | pinctrl_qt1070_irq: qt1070_irq { | ||
81 | atmel,pins = | ||
82 | <AT91_PIOA 2 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>; | ||
83 | }; | ||
84 | }; | ||
69 | }; | 85 | }; |
70 | 86 | ||
71 | spi0: spi@f0000000 { | 87 | spi0: spi@f0000000 { |
@@ -121,7 +137,7 @@ | |||
121 | 137 | ||
122 | enter { | 138 | enter { |
123 | label = "Enter"; | 139 | label = "Enter"; |
124 | gpios = <&pioB 4 GPIO_ACTIVE_LOW>; | 140 | gpios = <&pioB 3 GPIO_ACTIVE_LOW>; |
125 | linux,code = <28>; | 141 | linux,code = <28>; |
126 | gpio-key,wakeup; | 142 | gpio-key,wakeup; |
127 | }; | 143 | }; |
diff --git a/arch/arm/boot/dts/at91sam9x5.dtsi b/arch/arm/boot/dts/at91sam9x5.dtsi index 57d45f5bea09..cf78ac0b04b1 100644 --- a/arch/arm/boot/dts/at91sam9x5.dtsi +++ b/arch/arm/boot/dts/at91sam9x5.dtsi | |||
@@ -542,6 +542,9 @@ | |||
542 | compatible = "atmel,at91sam9g45-ssc"; | 542 | compatible = "atmel,at91sam9g45-ssc"; |
543 | reg = <0xf0010000 0x4000>; | 543 | reg = <0xf0010000 0x4000>; |
544 | interrupts = <28 IRQ_TYPE_LEVEL_HIGH 5>; | 544 | interrupts = <28 IRQ_TYPE_LEVEL_HIGH 5>; |
545 | dmas = <&dma0 1 AT91_DMA_CFG_PER_ID(13)>, | ||
546 | <&dma0 1 AT91_DMA_CFG_PER_ID(14)>; | ||
547 | dma-names = "tx", "rx"; | ||
545 | pinctrl-names = "default"; | 548 | pinctrl-names = "default"; |
546 | pinctrl-0 = <&pinctrl_ssc0_tx &pinctrl_ssc0_rx>; | 549 | pinctrl-0 = <&pinctrl_ssc0_tx &pinctrl_ssc0_rx>; |
547 | status = "disabled"; | 550 | status = "disabled"; |
diff --git a/arch/arm/boot/dts/at91sam9x5ek.dtsi b/arch/arm/boot/dts/at91sam9x5ek.dtsi index b753855b2058..3a9f6fa4a36a 100644 --- a/arch/arm/boot/dts/at91sam9x5ek.dtsi +++ b/arch/arm/boot/dts/at91sam9x5ek.dtsi | |||
@@ -59,6 +59,11 @@ | |||
59 | 59 | ||
60 | i2c0: i2c@f8010000 { | 60 | i2c0: i2c@f8010000 { |
61 | status = "okay"; | 61 | status = "okay"; |
62 | |||
63 | wm8731: wm8731@1a { | ||
64 | compatible = "wm8731"; | ||
65 | reg = <0x1a>; | ||
66 | }; | ||
62 | }; | 67 | }; |
63 | 68 | ||
64 | pinctrl@fffff400 { | 69 | pinctrl@fffff400 { |
@@ -90,12 +95,17 @@ | |||
90 | watchdog@fffffe40 { | 95 | watchdog@fffffe40 { |
91 | status = "okay"; | 96 | status = "okay"; |
92 | }; | 97 | }; |
98 | |||
99 | ssc0: ssc@f0010000 { | ||
100 | status = "okay"; | ||
101 | }; | ||
93 | }; | 102 | }; |
94 | 103 | ||
95 | usb0: ohci@00600000 { | 104 | usb0: ohci@00600000 { |
96 | status = "okay"; | 105 | status = "okay"; |
97 | num-ports = <2>; | 106 | num-ports = <3>; |
98 | atmel,vbus-gpio = <&pioD 19 GPIO_ACTIVE_LOW | 107 | atmel,vbus-gpio = <0 /* &pioD 18 GPIO_ACTIVE_LOW *//* Activate to have access to port A */ |
108 | &pioD 19 GPIO_ACTIVE_LOW | ||
99 | &pioD 20 GPIO_ACTIVE_LOW | 109 | &pioD 20 GPIO_ACTIVE_LOW |
100 | >; | 110 | >; |
101 | }; | 111 | }; |
@@ -104,4 +114,19 @@ | |||
104 | status = "okay"; | 114 | status = "okay"; |
105 | }; | 115 | }; |
106 | }; | 116 | }; |
117 | |||
118 | sound { | ||
119 | compatible = "atmel,sam9x5-wm8731-audio"; | ||
120 | |||
121 | atmel,model = "wm8731 @ AT91SAM9X5EK"; | ||
122 | |||
123 | atmel,audio-routing = | ||
124 | "Headphone Jack", "RHPOUT", | ||
125 | "Headphone Jack", "LHPOUT", | ||
126 | "LLINEIN", "Line In Jack", | ||
127 | "RLINEIN", "Line In Jack"; | ||
128 | |||
129 | atmel,ssc-controller = <&ssc0>; | ||
130 | atmel,audio-codec = <&wm8731>; | ||
131 | }; | ||
107 | }; | 132 | }; |
diff --git a/arch/arm/boot/dts/atlas6.dtsi b/arch/arm/boot/dts/atlas6.dtsi index 9866cd736dee..a0f2721ea583 100644 --- a/arch/arm/boot/dts/atlas6.dtsi +++ b/arch/arm/boot/dts/atlas6.dtsi | |||
@@ -485,6 +485,12 @@ | |||
485 | sirf,function = "usp0"; | 485 | sirf,function = "usp0"; |
486 | }; | 486 | }; |
487 | }; | 487 | }; |
488 | usp0_uart_nostreamctrl_pins_a: usp0@1 { | ||
489 | usp0 { | ||
490 | sirf,pins = "usp0_uart_nostreamctrl_grp"; | ||
491 | sirf,function = "usp0_uart_nostreamctrl"; | ||
492 | }; | ||
493 | }; | ||
488 | usp1_pins_a: usp1@0 { | 494 | usp1_pins_a: usp1@0 { |
489 | usp1 { | 495 | usp1 { |
490 | sirf,pins = "usp1grp"; | 496 | sirf,pins = "usp1grp"; |
@@ -515,16 +521,16 @@ | |||
515 | sirf,function = "pulse_count"; | 521 | sirf,function = "pulse_count"; |
516 | }; | 522 | }; |
517 | }; | 523 | }; |
518 | cko0_rst_pins_a: cko0_rst@0 { | 524 | cko0_pins_a: cko0@0 { |
519 | cko0_rst { | 525 | cko0 { |
520 | sirf,pins = "cko0_rstgrp"; | 526 | sirf,pins = "cko0grp"; |
521 | sirf,function = "cko0_rst"; | 527 | sirf,function = "cko0"; |
522 | }; | 528 | }; |
523 | }; | 529 | }; |
524 | cko1_rst_pins_a: cko1_rst@0 { | 530 | cko1_pins_a: cko1@0 { |
525 | cko1_rst { | 531 | cko1 { |
526 | sirf,pins = "cko1_rstgrp"; | 532 | sirf,pins = "cko1grp"; |
527 | sirf,function = "cko1_rst"; | 533 | sirf,function = "cko1"; |
528 | }; | 534 | }; |
529 | }; | 535 | }; |
530 | }; | 536 | }; |
diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi index 3f94fe8e3706..93c250139159 100644 --- a/arch/arm/boot/dts/exynos4.dtsi +++ b/arch/arm/boot/dts/exynos4.dtsi | |||
@@ -36,6 +36,12 @@ | |||
36 | i2c5 = &i2c_5; | 36 | i2c5 = &i2c_5; |
37 | i2c6 = &i2c_6; | 37 | i2c6 = &i2c_6; |
38 | i2c7 = &i2c_7; | 38 | i2c7 = &i2c_7; |
39 | csis0 = &csis_0; | ||
40 | csis1 = &csis_1; | ||
41 | fimc0 = &fimc_0; | ||
42 | fimc1 = &fimc_1; | ||
43 | fimc2 = &fimc_2; | ||
44 | fimc3 = &fimc_3; | ||
39 | }; | 45 | }; |
40 | 46 | ||
41 | chipid@10000000 { | 47 | chipid@10000000 { |
@@ -92,6 +98,88 @@ | |||
92 | reg = <0x10010000 0x400>; | 98 | reg = <0x10010000 0x400>; |
93 | }; | 99 | }; |
94 | 100 | ||
101 | camera { | ||
102 | compatible = "samsung,fimc", "simple-bus"; | ||
103 | status = "disabled"; | ||
104 | #address-cells = <1>; | ||
105 | #size-cells = <1>; | ||
106 | ranges; | ||
107 | |||
108 | clock_cam: clock-controller { | ||
109 | #clock-cells = <1>; | ||
110 | }; | ||
111 | |||
112 | fimc_0: fimc@11800000 { | ||
113 | compatible = "samsung,exynos4210-fimc"; | ||
114 | reg = <0x11800000 0x1000>; | ||
115 | interrupts = <0 84 0>; | ||
116 | clocks = <&clock 256>, <&clock 128>; | ||
117 | clock-names = "fimc", "sclk_fimc"; | ||
118 | samsung,power-domain = <&pd_cam>; | ||
119 | samsung,sysreg = <&sys_reg>; | ||
120 | status = "disabled"; | ||
121 | }; | ||
122 | |||
123 | fimc_1: fimc@11810000 { | ||
124 | compatible = "samsung,exynos4210-fimc"; | ||
125 | reg = <0x11810000 0x1000>; | ||
126 | interrupts = <0 85 0>; | ||
127 | clocks = <&clock 257>, <&clock 129>; | ||
128 | clock-names = "fimc", "sclk_fimc"; | ||
129 | samsung,power-domain = <&pd_cam>; | ||
130 | samsung,sysreg = <&sys_reg>; | ||
131 | status = "disabled"; | ||
132 | }; | ||
133 | |||
134 | fimc_2: fimc@11820000 { | ||
135 | compatible = "samsung,exynos4210-fimc"; | ||
136 | reg = <0x11820000 0x1000>; | ||
137 | interrupts = <0 86 0>; | ||
138 | clocks = <&clock 258>, <&clock 130>; | ||
139 | clock-names = "fimc", "sclk_fimc"; | ||
140 | samsung,power-domain = <&pd_cam>; | ||
141 | samsung,sysreg = <&sys_reg>; | ||
142 | status = "disabled"; | ||
143 | }; | ||
144 | |||
145 | fimc_3: fimc@11830000 { | ||
146 | compatible = "samsung,exynos4210-fimc"; | ||
147 | reg = <0x11830000 0x1000>; | ||
148 | interrupts = <0 87 0>; | ||
149 | clocks = <&clock 259>, <&clock 131>; | ||
150 | clock-names = "fimc", "sclk_fimc"; | ||
151 | samsung,power-domain = <&pd_cam>; | ||
152 | samsung,sysreg = <&sys_reg>; | ||
153 | status = "disabled"; | ||
154 | }; | ||
155 | |||
156 | csis_0: csis@11880000 { | ||
157 | compatible = "samsung,exynos4210-csis"; | ||
158 | reg = <0x11880000 0x4000>; | ||
159 | interrupts = <0 78 0>; | ||
160 | clocks = <&clock 260>, <&clock 134>; | ||
161 | clock-names = "csis", "sclk_csis"; | ||
162 | bus-width = <4>; | ||
163 | samsung,power-domain = <&pd_cam>; | ||
164 | status = "disabled"; | ||
165 | #address-cells = <1>; | ||
166 | #size-cells = <0>; | ||
167 | }; | ||
168 | |||
169 | csis_1: csis@11890000 { | ||
170 | compatible = "samsung,exynos4210-csis"; | ||
171 | reg = <0x11890000 0x4000>; | ||
172 | interrupts = <0 80 0>; | ||
173 | clocks = <&clock 261>, <&clock 135>; | ||
174 | clock-names = "csis", "sclk_csis"; | ||
175 | bus-width = <2>; | ||
176 | samsung,power-domain = <&pd_cam>; | ||
177 | status = "disabled"; | ||
178 | #address-cells = <1>; | ||
179 | #size-cells = <0>; | ||
180 | }; | ||
181 | }; | ||
182 | |||
95 | watchdog@10060000 { | 183 | watchdog@10060000 { |
96 | compatible = "samsung,s3c2410-wdt"; | 184 | compatible = "samsung,s3c2410-wdt"; |
97 | reg = <0x10060000 0x100>; | 185 | reg = <0x10060000 0x100>; |
@@ -155,13 +243,31 @@ | |||
155 | status = "disabled"; | 243 | status = "disabled"; |
156 | }; | 244 | }; |
157 | 245 | ||
246 | ehci@12580000 { | ||
247 | compatible = "samsung,exynos4210-ehci"; | ||
248 | reg = <0x12580000 0x100>; | ||
249 | interrupts = <0 70 0>; | ||
250 | clocks = <&clock 304>; | ||
251 | clock-names = "usbhost"; | ||
252 | status = "disabled"; | ||
253 | }; | ||
254 | |||
255 | ohci@12590000 { | ||
256 | compatible = "samsung,exynos4210-ohci"; | ||
257 | reg = <0x12590000 0x100>; | ||
258 | interrupts = <0 70 0>; | ||
259 | clocks = <&clock 304>; | ||
260 | clock-names = "usbhost"; | ||
261 | status = "disabled"; | ||
262 | }; | ||
263 | |||
158 | mfc: codec@13400000 { | 264 | mfc: codec@13400000 { |
159 | compatible = "samsung,mfc-v5"; | 265 | compatible = "samsung,mfc-v5"; |
160 | reg = <0x13400000 0x10000>; | 266 | reg = <0x13400000 0x10000>; |
161 | interrupts = <0 94 0>; | 267 | interrupts = <0 94 0>; |
162 | samsung,power-domain = <&pd_mfc>; | 268 | samsung,power-domain = <&pd_mfc>; |
163 | clocks = <&clock 170>, <&clock 273>; | 269 | clocks = <&clock 273>; |
164 | clock-names = "sclk_mfc", "mfc"; | 270 | clock-names = "mfc"; |
165 | status = "disabled"; | 271 | status = "disabled"; |
166 | }; | 272 | }; |
167 | 273 | ||
@@ -297,8 +403,8 @@ | |||
297 | compatible = "samsung,exynos4210-spi"; | 403 | compatible = "samsung,exynos4210-spi"; |
298 | reg = <0x13920000 0x100>; | 404 | reg = <0x13920000 0x100>; |
299 | interrupts = <0 66 0>; | 405 | interrupts = <0 66 0>; |
300 | tx-dma-channel = <&pdma0 7>; /* preliminary */ | 406 | dmas = <&pdma0 7>, <&pdma0 6>; |
301 | rx-dma-channel = <&pdma0 6>; /* preliminary */ | 407 | dma-names = "tx", "rx"; |
302 | #address-cells = <1>; | 408 | #address-cells = <1>; |
303 | #size-cells = <0>; | 409 | #size-cells = <0>; |
304 | clocks = <&clock 327>, <&clock 159>; | 410 | clocks = <&clock 327>, <&clock 159>; |
@@ -312,8 +418,8 @@ | |||
312 | compatible = "samsung,exynos4210-spi"; | 418 | compatible = "samsung,exynos4210-spi"; |
313 | reg = <0x13930000 0x100>; | 419 | reg = <0x13930000 0x100>; |
314 | interrupts = <0 67 0>; | 420 | interrupts = <0 67 0>; |
315 | tx-dma-channel = <&pdma1 7>; /* preliminary */ | 421 | dmas = <&pdma1 7>, <&pdma1 6>; |
316 | rx-dma-channel = <&pdma1 6>; /* preliminary */ | 422 | dma-names = "tx", "rx"; |
317 | #address-cells = <1>; | 423 | #address-cells = <1>; |
318 | #size-cells = <0>; | 424 | #size-cells = <0>; |
319 | clocks = <&clock 328>, <&clock 160>; | 425 | clocks = <&clock 328>, <&clock 160>; |
@@ -327,8 +433,8 @@ | |||
327 | compatible = "samsung,exynos4210-spi"; | 433 | compatible = "samsung,exynos4210-spi"; |
328 | reg = <0x13940000 0x100>; | 434 | reg = <0x13940000 0x100>; |
329 | interrupts = <0 68 0>; | 435 | interrupts = <0 68 0>; |
330 | tx-dma-channel = <&pdma0 9>; /* preliminary */ | 436 | dmas = <&pdma0 9>, <&pdma0 8>; |
331 | rx-dma-channel = <&pdma0 8>; /* preliminary */ | 437 | dma-names = "tx", "rx"; |
332 | #address-cells = <1>; | 438 | #address-cells = <1>; |
333 | #size-cells = <0>; | 439 | #size-cells = <0>; |
334 | clocks = <&clock 329>, <&clock 161>; | 440 | clocks = <&clock 329>, <&clock 161>; |
diff --git a/arch/arm/boot/dts/exynos4210-pinctrl.dtsi b/arch/arm/boot/dts/exynos4210-pinctrl.dtsi index 553bceae8967..a7c212891674 100644 --- a/arch/arm/boot/dts/exynos4210-pinctrl.dtsi +++ b/arch/arm/boot/dts/exynos4210-pinctrl.dtsi | |||
@@ -797,6 +797,29 @@ | |||
797 | samsung,pin-pud = <0>; | 797 | samsung,pin-pud = <0>; |
798 | samsung,pin-drv = <0>; | 798 | samsung,pin-drv = <0>; |
799 | }; | 799 | }; |
800 | |||
801 | cam_port_a_io: cam-port-a-io { | ||
802 | samsung,pins = "gpj0-0", "gpj0-1", "gpj0-2", "gpj0-3", | ||
803 | "gpj0-4", "gpj0-5", "gpj0-6", "gpj0-7", | ||
804 | "gpj1-0", "gpj1-1", "gpj1-2", "gpj1-4"; | ||
805 | samsung,pin-function = <2>; | ||
806 | samsung,pin-pud = <0>; | ||
807 | samsung,pin-drv = <0>; | ||
808 | }; | ||
809 | |||
810 | cam_port_a_clk_active: cam-port-a-clk-active { | ||
811 | samsung,pins = "gpj1-3"; | ||
812 | samsung,pin-function = <2>; | ||
813 | samsung,pin-pud = <0>; | ||
814 | samsung,pin-drv = <3>; | ||
815 | }; | ||
816 | |||
817 | cam_port_a_clk_idle: cam-port-a-clk-idle { | ||
818 | samsung,pins = "gpj1-3"; | ||
819 | samsung,pin-function = <0>; | ||
820 | samsung,pin-pud = <1>; | ||
821 | samsung,pin-drv = <0>; | ||
822 | }; | ||
800 | }; | 823 | }; |
801 | 824 | ||
802 | pinctrl@03860000 { | 825 | pinctrl@03860000 { |
diff --git a/arch/arm/boot/dts/exynos4210-trats.dts b/arch/arm/boot/dts/exynos4210-trats.dts index 94eebffe3044..1c164f234bcc 100644 --- a/arch/arm/boot/dts/exynos4210-trats.dts +++ b/arch/arm/boot/dts/exynos4210-trats.dts | |||
@@ -30,13 +30,62 @@ | |||
30 | bootargs = "console=ttySAC2,115200N8 root=/dev/mmcblk0p5 rootwait earlyprintk panic=5"; | 30 | bootargs = "console=ttySAC2,115200N8 root=/dev/mmcblk0p5 rootwait earlyprintk panic=5"; |
31 | }; | 31 | }; |
32 | 32 | ||
33 | vemmc_reg: voltage-regulator@0 { | 33 | regulators { |
34 | compatible = "regulator-fixed"; | 34 | compatible = "simple-bus"; |
35 | regulator-name = "VMEM_VDD_2.8V"; | 35 | |
36 | regulator-min-microvolt = <2800000>; | 36 | vemmc_reg: regulator-0 { |
37 | regulator-max-microvolt = <2800000>; | 37 | compatible = "regulator-fixed"; |
38 | gpio = <&gpk0 2 0>; | 38 | regulator-name = "VMEM_VDD_2.8V"; |
39 | enable-active-high; | 39 | regulator-min-microvolt = <2800000>; |
40 | regulator-max-microvolt = <2800000>; | ||
41 | gpio = <&gpk0 2 0>; | ||
42 | enable-active-high; | ||
43 | }; | ||
44 | |||
45 | tsp_reg: regulator-1 { | ||
46 | compatible = "regulator-fixed"; | ||
47 | regulator-name = "TSP_FIXED_VOLTAGES"; | ||
48 | regulator-min-microvolt = <2800000>; | ||
49 | regulator-max-microvolt = <2800000>; | ||
50 | gpio = <&gpl0 3 0>; | ||
51 | enable-active-high; | ||
52 | }; | ||
53 | |||
54 | cam_af_28v_reg: regulator-2 { | ||
55 | compatible = "regulator-fixed"; | ||
56 | regulator-name = "8M_AF_2.8V_EN"; | ||
57 | regulator-min-microvolt = <2800000>; | ||
58 | regulator-max-microvolt = <2800000>; | ||
59 | gpio = <&gpk1 1 0>; | ||
60 | enable-active-high; | ||
61 | }; | ||
62 | |||
63 | cam_io_en_reg: regulator-3 { | ||
64 | compatible = "regulator-fixed"; | ||
65 | regulator-name = "CAM_IO_EN"; | ||
66 | regulator-min-microvolt = <2800000>; | ||
67 | regulator-max-microvolt = <2800000>; | ||
68 | gpio = <&gpe2 1 0>; | ||
69 | enable-active-high; | ||
70 | }; | ||
71 | |||
72 | cam_io_12v_reg: regulator-4 { | ||
73 | compatible = "regulator-fixed"; | ||
74 | regulator-name = "8M_1.2V_EN"; | ||
75 | regulator-min-microvolt = <1200000>; | ||
76 | regulator-max-microvolt = <1200000>; | ||
77 | gpio = <&gpe2 5 0>; | ||
78 | enable-active-high; | ||
79 | }; | ||
80 | |||
81 | vt_core_15v_reg: regulator-5 { | ||
82 | compatible = "regulator-fixed"; | ||
83 | regulator-name = "VT_CORE_1.5V"; | ||
84 | regulator-min-microvolt = <1500000>; | ||
85 | regulator-max-microvolt = <1500000>; | ||
86 | gpio = <&gpe2 2 0>; | ||
87 | enable-active-high; | ||
88 | }; | ||
40 | }; | 89 | }; |
41 | 90 | ||
42 | sdhci_emmc: sdhci@12510000 { | 91 | sdhci_emmc: sdhci@12510000 { |
@@ -97,15 +146,6 @@ | |||
97 | }; | 146 | }; |
98 | }; | 147 | }; |
99 | 148 | ||
100 | tsp_reg: voltage-regulator { | ||
101 | compatible = "regulator-fixed"; | ||
102 | regulator-name = "TSP_FIXED_VOLTAGES"; | ||
103 | regulator-min-microvolt = <2800000>; | ||
104 | regulator-max-microvolt = <2800000>; | ||
105 | gpio = <&gpl0 3 0>; | ||
106 | enable-active-high; | ||
107 | }; | ||
108 | |||
109 | i2c@13890000 { | 149 | i2c@13890000 { |
110 | samsung,i2c-sda-delay = <100>; | 150 | samsung,i2c-sda-delay = <100>; |
111 | samsung,i2c-slave-addr = <0x10>; | 151 | samsung,i2c-slave-addr = <0x10>; |
@@ -218,6 +258,12 @@ | |||
218 | regulator-always-on; | 258 | regulator-always-on; |
219 | }; | 259 | }; |
220 | 260 | ||
261 | vtcam_reg: LDO12 { | ||
262 | regulator-name = "VT_CAM_1.8V"; | ||
263 | regulator-min-microvolt = <1800000>; | ||
264 | regulator-max-microvolt = <1800000>; | ||
265 | }; | ||
266 | |||
221 | vcclcd_reg: LDO13 { | 267 | vcclcd_reg: LDO13 { |
222 | regulator-name = "VCC_3.3V_LCD"; | 268 | regulator-name = "VCC_3.3V_LCD"; |
223 | regulator-min-microvolt = <3300000>; | 269 | regulator-min-microvolt = <3300000>; |
@@ -301,4 +347,26 @@ | |||
301 | clock-frequency = <24000000>; | 347 | clock-frequency = <24000000>; |
302 | }; | 348 | }; |
303 | }; | 349 | }; |
350 | |||
351 | camera { | ||
352 | pinctrl-names = "default"; | ||
353 | pinctrl-0 = <>; | ||
354 | status = "okay"; | ||
355 | |||
356 | fimc_0: fimc@11800000 { | ||
357 | status = "okay"; | ||
358 | }; | ||
359 | |||
360 | fimc_1: fimc@11810000 { | ||
361 | status = "okay"; | ||
362 | }; | ||
363 | |||
364 | fimc_2: fimc@11820000 { | ||
365 | status = "okay"; | ||
366 | }; | ||
367 | |||
368 | fimc_3: fimc@11830000 { | ||
369 | status = "okay"; | ||
370 | }; | ||
371 | }; | ||
304 | }; | 372 | }; |
diff --git a/arch/arm/boot/dts/exynos4210.dtsi b/arch/arm/boot/dts/exynos4210.dtsi index b7f358a93bcb..ef8c2a5d2d7f 100644 --- a/arch/arm/boot/dts/exynos4210.dtsi +++ b/arch/arm/boot/dts/exynos4210.dtsi | |||
@@ -125,4 +125,34 @@ | |||
125 | clock-names = "sclk_fimg2d", "fimg2d"; | 125 | clock-names = "sclk_fimg2d", "fimg2d"; |
126 | status = "disabled"; | 126 | status = "disabled"; |
127 | }; | 127 | }; |
128 | |||
129 | camera { | ||
130 | clocks = <&clock 132>, <&clock 133>, <&clock 351>, <&clock 352>; | ||
131 | clock-names = "sclk_cam0", "sclk_cam1", "pxl_async0", "pxl_async1"; | ||
132 | |||
133 | fimc_0: fimc@11800000 { | ||
134 | samsung,pix-limits = <4224 8192 1920 4224>; | ||
135 | samsung,mainscaler-ext; | ||
136 | samsung,cam-if; | ||
137 | }; | ||
138 | |||
139 | fimc_1: fimc@11810000 { | ||
140 | samsung,pix-limits = <4224 8192 1920 4224>; | ||
141 | samsung,mainscaler-ext; | ||
142 | samsung,cam-if; | ||
143 | }; | ||
144 | |||
145 | fimc_2: fimc@11820000 { | ||
146 | samsung,pix-limits = <4224 8192 1920 4224>; | ||
147 | samsung,mainscaler-ext; | ||
148 | samsung,lcd-wb; | ||
149 | }; | ||
150 | |||
151 | fimc_3: fimc@11830000 { | ||
152 | samsung,pix-limits = <1920 8192 1366 1920>; | ||
153 | samsung,rotators = <0>; | ||
154 | samsung,mainscaler-ext; | ||
155 | samsung,lcd-wb; | ||
156 | }; | ||
157 | }; | ||
128 | }; | 158 | }; |
diff --git a/arch/arm/boot/dts/exynos4412-origen.dts b/arch/arm/boot/dts/exynos4412-origen.dts index 7993641cb32a..8768b03702e5 100644 --- a/arch/arm/boot/dts/exynos4412-origen.dts +++ b/arch/arm/boot/dts/exynos4412-origen.dts | |||
@@ -27,6 +27,11 @@ | |||
27 | bootargs ="console=ttySAC2,115200"; | 27 | bootargs ="console=ttySAC2,115200"; |
28 | }; | 28 | }; |
29 | 29 | ||
30 | firmware@0203F000 { | ||
31 | compatible = "samsung,secure-firmware"; | ||
32 | reg = <0x0203F000 0x1000>; | ||
33 | }; | ||
34 | |||
30 | mmc_reg: voltage-regulator { | 35 | mmc_reg: voltage-regulator { |
31 | compatible = "regulator-fixed"; | 36 | compatible = "regulator-fixed"; |
32 | regulator-name = "VMEM_VDD_2.8V"; | 37 | regulator-name = "VMEM_VDD_2.8V"; |
diff --git a/arch/arm/boot/dts/exynos4412-trats2.dts b/arch/arm/boot/dts/exynos4412-trats2.dts new file mode 100644 index 000000000000..fb7b9ae5f399 --- /dev/null +++ b/arch/arm/boot/dts/exynos4412-trats2.dts | |||
@@ -0,0 +1,579 @@ | |||
1 | /* | ||
2 | * Samsung's Exynos4412 based Trats 2 board device tree source | ||
3 | * | ||
4 | * Copyright (c) 2013 Samsung Electronics Co., Ltd. | ||
5 | * http://www.samsung.com | ||
6 | * | ||
7 | * Device tree source file for Samsung's Trats 2 board which is based on | ||
8 | * Samsung's Exynos4412 SoC. | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | */ | ||
14 | |||
15 | /dts-v1/; | ||
16 | #include "exynos4412.dtsi" | ||
17 | |||
18 | / { | ||
19 | model = "Samsung Trats 2 based on Exynos4412"; | ||
20 | compatible = "samsung,trats2", "samsung,exynos4412"; | ||
21 | |||
22 | aliases { | ||
23 | i2c8 = &i2c_ak8975; | ||
24 | }; | ||
25 | |||
26 | memory { | ||
27 | reg = <0x40000000 0x40000000>; | ||
28 | }; | ||
29 | |||
30 | chosen { | ||
31 | bootargs = "console=ttySAC2,115200N8 root=/dev/mmcblk0p5 rootwait earlyprintk panic=5"; | ||
32 | }; | ||
33 | |||
34 | firmware@0204F000 { | ||
35 | compatible = "samsung,secure-firmware"; | ||
36 | reg = <0x0204F000 0x1000>; | ||
37 | }; | ||
38 | |||
39 | fixed-rate-clocks { | ||
40 | xxti { | ||
41 | compatible = "samsung,clock-xxti", "fixed-clock"; | ||
42 | clock-frequency = <0>; | ||
43 | }; | ||
44 | |||
45 | xusbxti { | ||
46 | compatible = "samsung,clock-xusbxti", "fixed-clock"; | ||
47 | clock-frequency = <24000000>; | ||
48 | }; | ||
49 | }; | ||
50 | |||
51 | regulators { | ||
52 | compatible = "simple-bus"; | ||
53 | #address-cells = <1>; | ||
54 | #size-cells = <0>; | ||
55 | |||
56 | vemmc_reg: regulator-0 { | ||
57 | compatible = "regulator-fixed"; | ||
58 | regulator-name = "VMEM_VDD_2.8V"; | ||
59 | regulator-min-microvolt = <2800000>; | ||
60 | regulator-max-microvolt = <2800000>; | ||
61 | gpio = <&gpk0 2 0>; | ||
62 | enable-active-high; | ||
63 | }; | ||
64 | |||
65 | cam_io_reg: voltage-regulator-1 { | ||
66 | compatible = "regulator-fixed"; | ||
67 | regulator-name = "CAM_SENSOR_A"; | ||
68 | regulator-min-microvolt = <2800000>; | ||
69 | regulator-max-microvolt = <2800000>; | ||
70 | gpio = <&gpm0 2 0>; | ||
71 | enable-active-high; | ||
72 | }; | ||
73 | |||
74 | /* More to come */ | ||
75 | }; | ||
76 | |||
77 | gpio-keys { | ||
78 | compatible = "gpio-keys"; | ||
79 | |||
80 | key-down { | ||
81 | interrupt-parent = <&gpj1>; | ||
82 | interrupts = <2 0>; | ||
83 | gpios = <&gpj1 2 1>; | ||
84 | linux,code = <114>; | ||
85 | label = "volume down"; | ||
86 | debounce-interval = <10>; | ||
87 | }; | ||
88 | |||
89 | key-up { | ||
90 | interrupt-parent = <&gpj1>; | ||
91 | interrupts = <1 0>; | ||
92 | gpios = <&gpj1 1 1>; | ||
93 | linux,code = <115>; | ||
94 | label = "volume up"; | ||
95 | debounce-interval = <10>; | ||
96 | }; | ||
97 | |||
98 | key-power { | ||
99 | interrupt-parent = <&gpx2>; | ||
100 | interrupts = <7 0>; | ||
101 | gpios = <&gpx2 7 1>; | ||
102 | linux,code = <116>; | ||
103 | label = "power"; | ||
104 | debounce-interval = <10>; | ||
105 | gpio-key,wakeup; | ||
106 | }; | ||
107 | }; | ||
108 | |||
109 | i2c@13890000 { | ||
110 | samsung,i2c-sda-delay = <100>; | ||
111 | samsung,i2c-slave-addr = <0x10>; | ||
112 | samsung,i2c-max-bus-freq = <400000>; | ||
113 | pinctrl-0 = <&i2c3_bus>; | ||
114 | pinctrl-names = "default"; | ||
115 | status = "okay"; | ||
116 | |||
117 | mms114-touchscreen@48 { | ||
118 | compatible = "melfas,mms114"; | ||
119 | reg = <0x48>; | ||
120 | interrupt-parent = <&gpm2>; | ||
121 | interrupts = <3 2>; | ||
122 | x-size = <720>; | ||
123 | y-size = <1280>; | ||
124 | avdd-supply = <&ldo23_reg>; | ||
125 | vdd-supply = <&ldo24_reg>; | ||
126 | }; | ||
127 | }; | ||
128 | |||
129 | i2c@138D0000 { | ||
130 | samsung,i2c-sda-delay = <100>; | ||
131 | samsung,i2c-slave-addr = <0x10>; | ||
132 | samsung,i2c-max-bus-freq = <100000>; | ||
133 | pinctrl-0 = <&i2c7_bus>; | ||
134 | pinctrl-names = "default"; | ||
135 | status = "okay"; | ||
136 | |||
137 | max77686_pmic@09 { | ||
138 | compatible = "maxim,max77686"; | ||
139 | interrupt-parent = <&gpx0>; | ||
140 | interrupts = <7 0>; | ||
141 | reg = <0x09>; | ||
142 | |||
143 | voltage-regulators { | ||
144 | ldo1_reg: ldo1 { | ||
145 | regulator-compatible = "LDO1"; | ||
146 | regulator-name = "VALIVE_1.0V_AP"; | ||
147 | regulator-min-microvolt = <1000000>; | ||
148 | regulator-max-microvolt = <1000000>; | ||
149 | regulator-always-on; | ||
150 | regulator-mem-on; | ||
151 | }; | ||
152 | |||
153 | ldo2_reg: ldo2 { | ||
154 | regulator-compatible = "LDO2"; | ||
155 | regulator-name = "VM1M2_1.2V_AP"; | ||
156 | regulator-min-microvolt = <1200000>; | ||
157 | regulator-max-microvolt = <1200000>; | ||
158 | regulator-always-on; | ||
159 | regulator-mem-on; | ||
160 | }; | ||
161 | |||
162 | ldo3_reg: ldo3 { | ||
163 | regulator-compatible = "LDO3"; | ||
164 | regulator-name = "VCC_1.8V_AP"; | ||
165 | regulator-min-microvolt = <1800000>; | ||
166 | regulator-max-microvolt = <1800000>; | ||
167 | regulator-always-on; | ||
168 | regulator-mem-on; | ||
169 | }; | ||
170 | |||
171 | ldo4_reg: ldo4 { | ||
172 | regulator-compatible = "LDO4"; | ||
173 | regulator-name = "VCC_2.8V_AP"; | ||
174 | regulator-min-microvolt = <2800000>; | ||
175 | regulator-max-microvolt = <2800000>; | ||
176 | regulator-always-on; | ||
177 | regulator-mem-on; | ||
178 | }; | ||
179 | |||
180 | ldo5_reg: ldo5 { | ||
181 | regulator-compatible = "LDO5"; | ||
182 | regulator-name = "VCC_1.8V_IO"; | ||
183 | regulator-min-microvolt = <1800000>; | ||
184 | regulator-max-microvolt = <1800000>; | ||
185 | regulator-always-on; | ||
186 | regulator-mem-on; | ||
187 | }; | ||
188 | |||
189 | ldo6_reg: ldo6 { | ||
190 | regulator-compatible = "LDO6"; | ||
191 | regulator-name = "VMPLL_1.0V_AP"; | ||
192 | regulator-min-microvolt = <1000000>; | ||
193 | regulator-max-microvolt = <1000000>; | ||
194 | regulator-always-on; | ||
195 | regulator-mem-on; | ||
196 | }; | ||
197 | |||
198 | ldo7_reg: ldo7 { | ||
199 | regulator-compatible = "LDO7"; | ||
200 | regulator-name = "VPLL_1.0V_AP"; | ||
201 | regulator-min-microvolt = <1000000>; | ||
202 | regulator-max-microvolt = <1000000>; | ||
203 | regulator-always-on; | ||
204 | regulator-mem-on; | ||
205 | }; | ||
206 | |||
207 | ldo8_reg: ldo8 { | ||
208 | regulator-compatible = "LDO8"; | ||
209 | regulator-name = "VMIPI_1.0V"; | ||
210 | regulator-min-microvolt = <1000000>; | ||
211 | regulator-max-microvolt = <1000000>; | ||
212 | regulator-mem-off; | ||
213 | }; | ||
214 | |||
215 | ldo9_reg: ldo9 { | ||
216 | regulator-compatible = "LDO9"; | ||
217 | regulator-name = "CAM_ISP_MIPI_1.2V"; | ||
218 | regulator-min-microvolt = <1200000>; | ||
219 | regulator-max-microvolt = <1200000>; | ||
220 | regulator-mem-idle; | ||
221 | }; | ||
222 | |||
223 | ldo10_reg: ldo10 { | ||
224 | regulator-compatible = "LDO10"; | ||
225 | regulator-name = "VMIPI_1.8V"; | ||
226 | regulator-min-microvolt = <1800000>; | ||
227 | regulator-max-microvolt = <1800000>; | ||
228 | regulator-mem-off; | ||
229 | }; | ||
230 | |||
231 | ldo11_reg: ldo11 { | ||
232 | regulator-compatible = "LDO11"; | ||
233 | regulator-name = "VABB1_1.95V"; | ||
234 | regulator-min-microvolt = <1950000>; | ||
235 | regulator-max-microvolt = <1950000>; | ||
236 | regulator-always-on; | ||
237 | regulator-mem-off; | ||
238 | }; | ||
239 | |||
240 | ldo12_reg: ldo12 { | ||
241 | regulator-compatible = "LDO12"; | ||
242 | regulator-name = "VUOTG_3.0V"; | ||
243 | regulator-min-microvolt = <3000000>; | ||
244 | regulator-max-microvolt = <3000000>; | ||
245 | regulator-mem-off; | ||
246 | }; | ||
247 | |||
248 | ldo13_reg: ldo13 { | ||
249 | regulator-compatible = "LDO13"; | ||
250 | regulator-name = "NFC_AVDD_1.8V"; | ||
251 | regulator-min-microvolt = <1800000>; | ||
252 | regulator-max-microvolt = <1800000>; | ||
253 | regulator-mem-idle; | ||
254 | }; | ||
255 | |||
256 | ldo14_reg: ldo14 { | ||
257 | regulator-compatible = "LDO14"; | ||
258 | regulator-name = "VABB2_1.95V"; | ||
259 | regulator-min-microvolt = <1950000>; | ||
260 | regulator-max-microvolt = <1950000>; | ||
261 | regulator-always-on; | ||
262 | regulator-mem-off; | ||
263 | }; | ||
264 | |||
265 | ldo15_reg: ldo15 { | ||
266 | regulator-compatible = "LDO15"; | ||
267 | regulator-name = "VHSIC_1.0V"; | ||
268 | regulator-min-microvolt = <1000000>; | ||
269 | regulator-max-microvolt = <1000000>; | ||
270 | regulator-mem-off; | ||
271 | }; | ||
272 | |||
273 | ldo16_reg: ldo16 { | ||
274 | regulator-compatible = "LDO16"; | ||
275 | regulator-name = "VHSIC_1.8V"; | ||
276 | regulator-min-microvolt = <1800000>; | ||
277 | regulator-max-microvolt = <1800000>; | ||
278 | regulator-mem-off; | ||
279 | }; | ||
280 | |||
281 | ldo17_reg: ldo17 { | ||
282 | regulator-compatible = "LDO17"; | ||
283 | regulator-name = "CAM_SENSOR_CORE_1.2V"; | ||
284 | regulator-min-microvolt = <1200000>; | ||
285 | regulator-max-microvolt = <1200000>; | ||
286 | regulator-mem-idle; | ||
287 | }; | ||
288 | |||
289 | ldo18_reg: ldo18 { | ||
290 | regulator-compatible = "LDO18"; | ||
291 | regulator-name = "CAM_ISP_SEN_IO_1.8V"; | ||
292 | regulator-min-microvolt = <1800000>; | ||
293 | regulator-max-microvolt = <1800000>; | ||
294 | regulator-mem-idle; | ||
295 | }; | ||
296 | |||
297 | ldo19_reg: ldo19 { | ||
298 | regulator-compatible = "LDO19"; | ||
299 | regulator-name = "VT_CAM_1.8V"; | ||
300 | regulator-min-microvolt = <1800000>; | ||
301 | regulator-max-microvolt = <1800000>; | ||
302 | regulator-mem-idle; | ||
303 | }; | ||
304 | |||
305 | ldo20_reg: ldo20 { | ||
306 | regulator-compatible = "LDO20"; | ||
307 | regulator-name = "VDDQ_PRE_1.8V"; | ||
308 | regulator-min-microvolt = <1800000>; | ||
309 | regulator-max-microvolt = <1800000>; | ||
310 | regulator-mem-idle; | ||
311 | }; | ||
312 | |||
313 | ldo21_reg: ldo21 { | ||
314 | regulator-compatible = "LDO21"; | ||
315 | regulator-name = "VTF_2.8V"; | ||
316 | regulator-min-microvolt = <2800000>; | ||
317 | regulator-max-microvolt = <2800000>; | ||
318 | regulator-mem-idle; | ||
319 | }; | ||
320 | |||
321 | ldo22_reg: ldo22 { | ||
322 | regulator-compatible = "LDO22"; | ||
323 | regulator-name = "VMEM_VDD_2.8V"; | ||
324 | regulator-min-microvolt = <2800000>; | ||
325 | regulator-max-microvolt = <2800000>; | ||
326 | regulator-always-on; | ||
327 | regulator-mem-off; | ||
328 | }; | ||
329 | |||
330 | ldo23_reg: ldo23 { | ||
331 | regulator-compatible = "LDO23"; | ||
332 | regulator-name = "TSP_AVDD_3.3V"; | ||
333 | regulator-min-microvolt = <3300000>; | ||
334 | regulator-max-microvolt = <3300000>; | ||
335 | regulator-mem-idle; | ||
336 | }; | ||
337 | |||
338 | ldo24_reg: ldo24 { | ||
339 | regulator-compatible = "LDO24"; | ||
340 | regulator-name = "TSP_VDD_1.8V"; | ||
341 | regulator-min-microvolt = <1800000>; | ||
342 | regulator-max-microvolt = <1800000>; | ||
343 | regulator-mem-idle; | ||
344 | }; | ||
345 | |||
346 | ldo25_reg: ldo25 { | ||
347 | regulator-compatible = "LDO25"; | ||
348 | regulator-name = "LCD_VCC_3.3V"; | ||
349 | regulator-min-microvolt = <2800000>; | ||
350 | regulator-max-microvolt = <2800000>; | ||
351 | regulator-mem-idle; | ||
352 | }; | ||
353 | |||
354 | ldo26_reg: ldo26 { | ||
355 | regulator-compatible = "LDO26"; | ||
356 | regulator-name = "MOTOR_VCC_3.0V"; | ||
357 | regulator-min-microvolt = <3000000>; | ||
358 | regulator-max-microvolt = <3000000>; | ||
359 | regulator-mem-idle; | ||
360 | }; | ||
361 | |||
362 | buck1_reg: buck1 { | ||
363 | regulator-compatible = "BUCK1"; | ||
364 | regulator-name = "vdd_mif"; | ||
365 | regulator-min-microvolt = <850000>; | ||
366 | regulator-max-microvolt = <1100000>; | ||
367 | regulator-always-on; | ||
368 | regulator-boot-on; | ||
369 | regulator-mem-off; | ||
370 | }; | ||
371 | |||
372 | buck2_reg: buck2 { | ||
373 | regulator-compatible = "BUCK2"; | ||
374 | regulator-name = "vdd_arm"; | ||
375 | regulator-min-microvolt = <850000>; | ||
376 | regulator-max-microvolt = <1500000>; | ||
377 | regulator-always-on; | ||
378 | regulator-boot-on; | ||
379 | regulator-mem-off; | ||
380 | }; | ||
381 | |||
382 | buck3_reg: buck3 { | ||
383 | regulator-compatible = "BUCK3"; | ||
384 | regulator-name = "vdd_int"; | ||
385 | regulator-min-microvolt = <850000>; | ||
386 | regulator-max-microvolt = <1150000>; | ||
387 | regulator-always-on; | ||
388 | regulator-boot-on; | ||
389 | regulator-mem-off; | ||
390 | }; | ||
391 | |||
392 | buck4_reg: buck4 { | ||
393 | regulator-compatible = "BUCK4"; | ||
394 | regulator-name = "vdd_g3d"; | ||
395 | regulator-min-microvolt = <850000>; | ||
396 | regulator-max-microvolt = <1150000>; | ||
397 | regulator-boot-on; | ||
398 | regulator-mem-off; | ||
399 | }; | ||
400 | |||
401 | buck5_reg: buck5 { | ||
402 | regulator-compatible = "BUCK5"; | ||
403 | regulator-name = "VMEM_1.2V_AP"; | ||
404 | regulator-min-microvolt = <1200000>; | ||
405 | regulator-max-microvolt = <1200000>; | ||
406 | regulator-always-on; | ||
407 | }; | ||
408 | |||
409 | buck6_reg: buck6 { | ||
410 | regulator-compatible = "BUCK6"; | ||
411 | regulator-name = "VCC_SUB_1.35V"; | ||
412 | regulator-min-microvolt = <1350000>; | ||
413 | regulator-max-microvolt = <1350000>; | ||
414 | regulator-always-on; | ||
415 | }; | ||
416 | |||
417 | buck7_reg: buck7 { | ||
418 | regulator-compatible = "BUCK7"; | ||
419 | regulator-name = "VCC_SUB_2.0V"; | ||
420 | regulator-min-microvolt = <2000000>; | ||
421 | regulator-max-microvolt = <2000000>; | ||
422 | regulator-always-on; | ||
423 | }; | ||
424 | |||
425 | buck8_reg: buck8 { | ||
426 | regulator-compatible = "BUCK8"; | ||
427 | regulator-name = "VMEM_VDDF_3.0V"; | ||
428 | regulator-min-microvolt = <2850000>; | ||
429 | regulator-max-microvolt = <2850000>; | ||
430 | regulator-always-on; | ||
431 | regulator-mem-off; | ||
432 | }; | ||
433 | |||
434 | buck9_reg: buck9 { | ||
435 | regulator-compatible = "BUCK9"; | ||
436 | regulator-name = "CAM_ISP_CORE_1.2V"; | ||
437 | regulator-min-microvolt = <1000000>; | ||
438 | regulator-max-microvolt = <1200000>; | ||
439 | regulator-mem-off; | ||
440 | }; | ||
441 | }; | ||
442 | }; | ||
443 | }; | ||
444 | |||
445 | sdhci@12510000 { | ||
446 | bus-width = <8>; | ||
447 | non-removable; | ||
448 | pinctrl-0 = <&sd0_clk &sd0_cmd &sd0_bus8>; | ||
449 | pinctrl-names = "default"; | ||
450 | vmmc-supply = <&vemmc_reg>; | ||
451 | status = "okay"; | ||
452 | }; | ||
453 | |||
454 | serial@13800000 { | ||
455 | status = "okay"; | ||
456 | }; | ||
457 | |||
458 | serial@13810000 { | ||
459 | status = "okay"; | ||
460 | }; | ||
461 | |||
462 | serial@13820000 { | ||
463 | status = "okay"; | ||
464 | }; | ||
465 | |||
466 | serial@13830000 { | ||
467 | status = "okay"; | ||
468 | }; | ||
469 | |||
470 | i2c_ak8975: i2c-gpio-0 { | ||
471 | compatible = "i2c-gpio"; | ||
472 | gpios = <&gpy2 4 0>, <&gpy2 5 0>; | ||
473 | i2c-gpio,delay-us = <2>; | ||
474 | #address-cells = <1>; | ||
475 | #size-cells = <0>; | ||
476 | status = "okay"; | ||
477 | |||
478 | ak8975@0c { | ||
479 | compatible = "ak,ak8975"; | ||
480 | reg = <0x0c>; | ||
481 | gpios = <&gpj0 7 0>; | ||
482 | }; | ||
483 | }; | ||
484 | |||
485 | spi_1: spi@13930000 { | ||
486 | pinctrl-names = "default"; | ||
487 | pinctrl-0 = <&spi1_bus>; | ||
488 | status = "okay"; | ||
489 | |||
490 | s5c73m3_spi: s5c73m3 { | ||
491 | compatible = "samsung,s5c73m3"; | ||
492 | spi-max-frequency = <50000000>; | ||
493 | reg = <0>; | ||
494 | controller-data { | ||
495 | cs-gpio = <&gpb 5 0>; | ||
496 | samsung,spi-feedback-delay = <2>; | ||
497 | }; | ||
498 | }; | ||
499 | }; | ||
500 | |||
501 | camera { | ||
502 | pinctrl-0 = <&cam_port_b_clk_active>; | ||
503 | pinctrl-names = "default"; | ||
504 | status = "okay"; | ||
505 | |||
506 | fimc_0: fimc@11800000 { | ||
507 | status = "okay"; | ||
508 | }; | ||
509 | |||
510 | fimc_1: fimc@11810000 { | ||
511 | status = "okay"; | ||
512 | }; | ||
513 | |||
514 | fimc_2: fimc@11820000 { | ||
515 | status = "okay"; | ||
516 | }; | ||
517 | |||
518 | fimc_3: fimc@11830000 { | ||
519 | status = "okay"; | ||
520 | }; | ||
521 | |||
522 | csis_1: csis@11890000 { | ||
523 | vddcore-supply = <&ldo8_reg>; | ||
524 | vddio-supply = <&ldo10_reg>; | ||
525 | clock-frequency = <160000000>; | ||
526 | status = "okay"; | ||
527 | |||
528 | /* Camera D (4) MIPI CSI-2 (CSIS1) */ | ||
529 | port@4 { | ||
530 | reg = <4>; | ||
531 | csis1_ep: endpoint { | ||
532 | remote-endpoint = <&is_s5k6a3_ep>; | ||
533 | data-lanes = <1>; | ||
534 | samsung,csis-hs-settle = <18>; | ||
535 | samsung,csis-wclk; | ||
536 | }; | ||
537 | }; | ||
538 | }; | ||
539 | |||
540 | fimc_lite_0: fimc-lite@12390000 { | ||
541 | status = "okay"; | ||
542 | }; | ||
543 | |||
544 | fimc_lite_1: fimc-lite@123A0000 { | ||
545 | status = "okay"; | ||
546 | }; | ||
547 | |||
548 | fimc-is@12000000 { | ||
549 | pinctrl-0 = <&fimc_is_uart>; | ||
550 | pinctrl-names = "default"; | ||
551 | status = "okay"; | ||
552 | |||
553 | i2c1_isp: i2c-isp@12140000 { | ||
554 | pinctrl-0 = <&fimc_is_i2c1>; | ||
555 | pinctrl-names = "default"; | ||
556 | |||
557 | s5k6a3@10 { | ||
558 | compatible = "samsung,s5k6a3"; | ||
559 | reg = <0x10>; | ||
560 | svdda-supply = <&cam_io_reg>; | ||
561 | svddio-supply = <&ldo19_reg>; | ||
562 | clock-frequency = <24000000>; | ||
563 | /* CAM_B_CLKOUT */ | ||
564 | clocks = <&clock_cam 1>; | ||
565 | clock-names = "mclk"; | ||
566 | samsung,camclk-out = <1>; | ||
567 | gpios = <&gpm1 6 0>; | ||
568 | |||
569 | port { | ||
570 | is_s5k6a3_ep: endpoint { | ||
571 | remote-endpoint = <&csis1_ep>; | ||
572 | data-lanes = <1>; | ||
573 | }; | ||
574 | }; | ||
575 | }; | ||
576 | }; | ||
577 | }; | ||
578 | }; | ||
579 | }; | ||
diff --git a/arch/arm/boot/dts/exynos4x12-pinctrl.dtsi b/arch/arm/boot/dts/exynos4x12-pinctrl.dtsi index 704290f7c5c0..99b26df8dbc7 100644 --- a/arch/arm/boot/dts/exynos4x12-pinctrl.dtsi +++ b/arch/arm/boot/dts/exynos4x12-pinctrl.dtsi | |||
@@ -401,13 +401,26 @@ | |||
401 | samsung,pin-drv = <0>; | 401 | samsung,pin-drv = <0>; |
402 | }; | 402 | }; |
403 | 403 | ||
404 | cam_port_a: cam-port-a { | 404 | cam_port_a_io: cam-port-a-io { |
405 | samsung,pins = "gpj0-0", "gpj0-1", "gpj0-2", "gpj0-3", | 405 | samsung,pins = "gpj0-0", "gpj0-1", "gpj0-2", "gpj0-3", |
406 | "gpj0-4", "gpj0-5", "gpj0-6", "gpj0-7", | 406 | "gpj0-4", "gpj0-5", "gpj0-6", "gpj0-7", |
407 | "gpj1-0", "gpj1-1", "gpj1-2", "gpj1-3", | 407 | "gpj1-0", "gpj1-1", "gpj1-2", "gpj1-4"; |
408 | "gpj1-4"; | ||
409 | samsung,pin-function = <2>; | 408 | samsung,pin-function = <2>; |
410 | samsung,pin-pud = <3>; | 409 | samsung,pin-pud = <0>; |
410 | samsung,pin-drv = <0>; | ||
411 | }; | ||
412 | |||
413 | cam_port_a_clk_active: cam-port-a-clk-active { | ||
414 | samsung,pins = "gpj1-3"; | ||
415 | samsung,pin-function = <2>; | ||
416 | samsung,pin-pud = <0>; | ||
417 | samsung,pin-drv = <3>; | ||
418 | }; | ||
419 | |||
420 | cam_port_a_clk_idle: cam-port-a-clk-idle { | ||
421 | samsung,pins = "gpj1-3"; | ||
422 | samsung,pin-function = <0>; | ||
423 | samsung,pin-pud = <1>; | ||
411 | samsung,pin-drv = <0>; | 424 | samsung,pin-drv = <0>; |
412 | }; | 425 | }; |
413 | }; | 426 | }; |
@@ -778,16 +791,29 @@ | |||
778 | samsung,pin-drv = <3>; | 791 | samsung,pin-drv = <3>; |
779 | }; | 792 | }; |
780 | 793 | ||
781 | cam_port_b: cam-port-b { | 794 | cam_port_b_io: cam-port-b-io { |
782 | samsung,pins = "gpm0-0", "gpm0-1", "gpm0-2", "gpm0-3", | 795 | samsung,pins = "gpm0-0", "gpm0-1", "gpm0-2", "gpm0-3", |
783 | "gpm0-4", "gpm0-5", "gpm0-6", "gpm0-7", | 796 | "gpm0-4", "gpm0-5", "gpm0-6", "gpm0-7", |
784 | "gpm1-0", "gpm1-1", "gpm2-0", "gpm2-1", | 797 | "gpm1-0", "gpm1-1", "gpm2-0", "gpm2-1"; |
785 | "gpm2-2"; | ||
786 | samsung,pin-function = <3>; | 798 | samsung,pin-function = <3>; |
787 | samsung,pin-pud = <3>; | 799 | samsung,pin-pud = <3>; |
788 | samsung,pin-drv = <0>; | 800 | samsung,pin-drv = <0>; |
789 | }; | 801 | }; |
790 | 802 | ||
803 | cam_port_b_clk_active: cam-port-b-clk-active { | ||
804 | samsung,pins = "gpm2-2"; | ||
805 | samsung,pin-function = <3>; | ||
806 | samsung,pin-pud = <0>; | ||
807 | samsung,pin-drv = <3>; | ||
808 | }; | ||
809 | |||
810 | cam_port_b_clk_idle: cam-port-b-clk-idle { | ||
811 | samsung,pins = "gpm2-2"; | ||
812 | samsung,pin-function = <0>; | ||
813 | samsung,pin-pud = <1>; | ||
814 | samsung,pin-drv = <0>; | ||
815 | }; | ||
816 | |||
791 | eint0: ext-int0 { | 817 | eint0: ext-int0 { |
792 | samsung,pins = "gpx0-0"; | 818 | samsung,pins = "gpx0-0"; |
793 | samsung,pin-function = <0xf>; | 819 | samsung,pin-function = <0xf>; |
@@ -822,6 +848,27 @@ | |||
822 | samsung,pin-pud = <0>; | 848 | samsung,pin-pud = <0>; |
823 | samsung,pin-drv = <0>; | 849 | samsung,pin-drv = <0>; |
824 | }; | 850 | }; |
851 | |||
852 | fimc_is_i2c0: fimc-is-i2c0 { | ||
853 | samsung,pins = "gpm4-0", "gpm4-1"; | ||
854 | samsung,pin-function = <2>; | ||
855 | samsung,pin-pud = <0>; | ||
856 | samsung,pin-drv = <0>; | ||
857 | }; | ||
858 | |||
859 | fimc_is_i2c1: fimc-is-i2c1 { | ||
860 | samsung,pins = "gpm4-2", "gpm4-3"; | ||
861 | samsung,pin-function = <2>; | ||
862 | samsung,pin-pud = <0>; | ||
863 | samsung,pin-drv = <0>; | ||
864 | }; | ||
865 | |||
866 | fimc_is_uart: fimc-is-uart { | ||
867 | samsung,pins = "gpm3-5", "gpm3-7"; | ||
868 | samsung,pin-function = <3>; | ||
869 | samsung,pin-pud = <0>; | ||
870 | samsung,pin-drv = <0>; | ||
871 | }; | ||
825 | }; | 872 | }; |
826 | 873 | ||
827 | pinctrl@03860000 { | 874 | pinctrl@03860000 { |
diff --git a/arch/arm/boot/dts/exynos4x12.dtsi b/arch/arm/boot/dts/exynos4x12.dtsi index 01da194ba329..954628c7f167 100644 --- a/arch/arm/boot/dts/exynos4x12.dtsi +++ b/arch/arm/boot/dts/exynos4x12.dtsi | |||
@@ -26,6 +26,13 @@ | |||
26 | pinctrl1 = &pinctrl_1; | 26 | pinctrl1 = &pinctrl_1; |
27 | pinctrl2 = &pinctrl_2; | 27 | pinctrl2 = &pinctrl_2; |
28 | pinctrl3 = &pinctrl_3; | 28 | pinctrl3 = &pinctrl_3; |
29 | fimc-lite0 = &fimc_lite_0; | ||
30 | fimc-lite1 = &fimc_lite_1; | ||
31 | }; | ||
32 | |||
33 | pd_isp: isp-power-domain@10023CA0 { | ||
34 | compatible = "samsung,exynos4210-pd"; | ||
35 | reg = <0x10023CA0 0x20>; | ||
29 | }; | 36 | }; |
30 | 37 | ||
31 | clock: clock-controller@0x10030000 { | 38 | clock: clock-controller@0x10030000 { |
@@ -73,4 +80,100 @@ | |||
73 | clock-names = "sclk_fimg2d", "fimg2d"; | 80 | clock-names = "sclk_fimg2d", "fimg2d"; |
74 | status = "disabled"; | 81 | status = "disabled"; |
75 | }; | 82 | }; |
83 | |||
84 | camera { | ||
85 | clocks = <&clock 132>, <&clock 133>, <&clock 351>, <&clock 352>; | ||
86 | clock-names = "sclk_cam0", "sclk_cam1", "pxl_async0", "pxl_async1"; | ||
87 | |||
88 | fimc_0: fimc@11800000 { | ||
89 | compatible = "samsung,exynos4212-fimc"; | ||
90 | samsung,pix-limits = <4224 8192 1920 4224>; | ||
91 | samsung,mainscaler-ext; | ||
92 | samsung,isp-wb; | ||
93 | samsung,cam-if; | ||
94 | }; | ||
95 | |||
96 | fimc_1: fimc@11810000 { | ||
97 | compatible = "samsung,exynos4212-fimc"; | ||
98 | samsung,pix-limits = <4224 8192 1920 4224>; | ||
99 | samsung,mainscaler-ext; | ||
100 | samsung,isp-wb; | ||
101 | samsung,cam-if; | ||
102 | }; | ||
103 | |||
104 | fimc_2: fimc@11820000 { | ||
105 | compatible = "samsung,exynos4212-fimc"; | ||
106 | samsung,pix-limits = <4224 8192 1920 4224>; | ||
107 | samsung,mainscaler-ext; | ||
108 | samsung,isp-wb; | ||
109 | samsung,lcd-wb; | ||
110 | samsung,cam-if; | ||
111 | }; | ||
112 | |||
113 | fimc_3: fimc@11830000 { | ||
114 | compatible = "samsung,exynos4212-fimc"; | ||
115 | samsung,pix-limits = <1920 8192 1366 1920>; | ||
116 | samsung,rotators = <0>; | ||
117 | samsung,mainscaler-ext; | ||
118 | samsung,isp-wb; | ||
119 | samsung,lcd-wb; | ||
120 | }; | ||
121 | |||
122 | fimc_lite_0: fimc-lite@12390000 { | ||
123 | compatible = "samsung,exynos4212-fimc-lite"; | ||
124 | reg = <0x12390000 0x1000>; | ||
125 | interrupts = <0 105 0>; | ||
126 | samsung,power-domain = <&pd_isp>; | ||
127 | clocks = <&clock 353>; | ||
128 | clock-names = "flite"; | ||
129 | status = "disabled"; | ||
130 | }; | ||
131 | |||
132 | fimc_lite_1: fimc-lite@123A0000 { | ||
133 | compatible = "samsung,exynos4212-fimc-lite"; | ||
134 | reg = <0x123A0000 0x1000>; | ||
135 | interrupts = <0 106 0>; | ||
136 | samsung,power-domain = <&pd_isp>; | ||
137 | clocks = <&clock 354>; | ||
138 | clock-names = "flite"; | ||
139 | status = "disabled"; | ||
140 | }; | ||
141 | |||
142 | fimc_is: fimc-is@12000000 { | ||
143 | compatible = "samsung,exynos4212-fimc-is", "simple-bus"; | ||
144 | reg = <0x12000000 0x260000>; | ||
145 | interrupts = <0 90 0>, <0 95 0>; | ||
146 | samsung,power-domain = <&pd_isp>; | ||
147 | clocks = <&clock 353>, <&clock 354>, <&clock 355>, | ||
148 | <&clock 356>, <&clock 17>, <&clock 357>, | ||
149 | <&clock 358>, <&clock 359>, <&clock 360>, | ||
150 | <&clock 450>,<&clock 451>, <&clock 452>, | ||
151 | <&clock 453>, <&clock 176>, <&clock 13>, | ||
152 | <&clock 454>, <&clock 395>, <&clock 455>; | ||
153 | clock-names = "lite0", "lite1", "ppmuispx", | ||
154 | "ppmuispmx", "mpll", "isp", | ||
155 | "drc", "fd", "mcuisp", | ||
156 | "ispdiv0", "ispdiv1", "mcuispdiv0", | ||
157 | "mcuispdiv1", "uart", "aclk200", | ||
158 | "div_aclk200", "aclk400mcuisp", | ||
159 | "div_aclk400mcuisp"; | ||
160 | #address-cells = <1>; | ||
161 | #size-cells = <1>; | ||
162 | ranges; | ||
163 | status = "disabled"; | ||
164 | |||
165 | pmu { | ||
166 | reg = <0x10020000 0x3000>; | ||
167 | }; | ||
168 | |||
169 | i2c1_isp: i2c-isp@12140000 { | ||
170 | compatible = "samsung,exynos4212-i2c-isp"; | ||
171 | reg = <0x12140000 0x100>; | ||
172 | clocks = <&clock 370>; | ||
173 | clock-names = "i2c_isp"; | ||
174 | #address-cells = <1>; | ||
175 | #size-cells = <0>; | ||
176 | }; | ||
177 | }; | ||
178 | }; | ||
76 | }; | 179 | }; |
diff --git a/arch/arm/boot/dts/exynos5.dtsi b/arch/arm/boot/dts/exynos5.dtsi index f65e124c04a6..074739d39e2d 100644 --- a/arch/arm/boot/dts/exynos5.dtsi +++ b/arch/arm/boot/dts/exynos5.dtsi | |||
@@ -95,7 +95,7 @@ | |||
95 | interrupts = <0 54 0>; | 95 | interrupts = <0 54 0>; |
96 | }; | 96 | }; |
97 | 97 | ||
98 | rtc { | 98 | rtc@101E0000 { |
99 | compatible = "samsung,s3c6410-rtc"; | 99 | compatible = "samsung,s3c6410-rtc"; |
100 | reg = <0x101E0000 0x100>; | 100 | reg = <0x101E0000 0x100>; |
101 | interrupts = <0 43 0>, <0 44 0>; | 101 | interrupts = <0 43 0>, <0 44 0>; |
@@ -108,4 +108,23 @@ | |||
108 | interrupts = <0 42 0>; | 108 | interrupts = <0 42 0>; |
109 | status = "disabled"; | 109 | status = "disabled"; |
110 | }; | 110 | }; |
111 | |||
112 | fimd@14400000 { | ||
113 | compatible = "samsung,exynos5250-fimd"; | ||
114 | interrupt-parent = <&combiner>; | ||
115 | reg = <0x14400000 0x40000>; | ||
116 | interrupt-names = "fifo", "vsync", "lcd_sys"; | ||
117 | interrupts = <18 4>, <18 5>, <18 6>; | ||
118 | status = "disabled"; | ||
119 | }; | ||
120 | |||
121 | dp-controller@145B0000 { | ||
122 | compatible = "samsung,exynos5-dp"; | ||
123 | reg = <0x145B0000 0x1000>; | ||
124 | interrupts = <10 3>; | ||
125 | interrupt-parent = <&combiner>; | ||
126 | #address-cells = <1>; | ||
127 | #size-cells = <0>; | ||
128 | status = "disabled"; | ||
129 | }; | ||
111 | }; | 130 | }; |
diff --git a/arch/arm/boot/dts/exynos5250-arndale.dts b/arch/arm/boot/dts/exynos5250-arndale.dts index abc7272c7afd..cee55fa33731 100644 --- a/arch/arm/boot/dts/exynos5250-arndale.dts +++ b/arch/arm/boot/dts/exynos5250-arndale.dts | |||
@@ -11,6 +11,7 @@ | |||
11 | 11 | ||
12 | /dts-v1/; | 12 | /dts-v1/; |
13 | #include "exynos5250.dtsi" | 13 | #include "exynos5250.dtsi" |
14 | #include <dt-bindings/interrupt-controller/irq.h> | ||
14 | 15 | ||
15 | / { | 16 | / { |
16 | model = "Insignal Arndale evaluation board based on EXYNOS5250"; | 17 | model = "Insignal Arndale evaluation board based on EXYNOS5250"; |
@@ -37,6 +38,28 @@ | |||
37 | s5m8767_pmic@66 { | 38 | s5m8767_pmic@66 { |
38 | compatible = "samsung,s5m8767-pmic"; | 39 | compatible = "samsung,s5m8767-pmic"; |
39 | reg = <0x66>; | 40 | reg = <0x66>; |
41 | interrupt-parent = <&gpx3>; | ||
42 | interrupts = <2 IRQ_TYPE_LEVEL_LOW>; | ||
43 | |||
44 | vinb1-supply = <&main_dc_reg>; | ||
45 | vinb2-supply = <&main_dc_reg>; | ||
46 | vinb3-supply = <&main_dc_reg>; | ||
47 | vinb4-supply = <&main_dc_reg>; | ||
48 | vinb5-supply = <&main_dc_reg>; | ||
49 | vinb6-supply = <&main_dc_reg>; | ||
50 | vinb7-supply = <&main_dc_reg>; | ||
51 | vinb8-supply = <&main_dc_reg>; | ||
52 | vinb9-supply = <&main_dc_reg>; | ||
53 | |||
54 | vinl1-supply = <&buck7_reg>; | ||
55 | vinl2-supply = <&buck7_reg>; | ||
56 | vinl3-supply = <&buck7_reg>; | ||
57 | vinl4-supply = <&main_dc_reg>; | ||
58 | vinl5-supply = <&main_dc_reg>; | ||
59 | vinl6-supply = <&main_dc_reg>; | ||
60 | vinl7-supply = <&main_dc_reg>; | ||
61 | vinl8-supply = <&buck8_reg>; | ||
62 | vinl9-supply = <&buck8_reg>; | ||
40 | 63 | ||
41 | s5m8767,pmic-buck2-dvs-voltage = <1300000>; | 64 | s5m8767,pmic-buck2-dvs-voltage = <1300000>; |
42 | s5m8767,pmic-buck3-dvs-voltage = <1100000>; | 65 | s5m8767,pmic-buck3-dvs-voltage = <1100000>; |
@@ -276,6 +299,16 @@ | |||
276 | op_mode = <1>; | 299 | op_mode = <1>; |
277 | }; | 300 | }; |
278 | 301 | ||
302 | buck7_reg: BUCK7 { | ||
303 | regulator-name = "PVDD_BUCK7"; | ||
304 | regulator-always-on; | ||
305 | }; | ||
306 | |||
307 | buck8_reg: BUCK8 { | ||
308 | regulator-name = "PVDD_BUCK8"; | ||
309 | regulator-always-on; | ||
310 | }; | ||
311 | |||
279 | buck9_reg: BUCK9 { | 312 | buck9_reg: BUCK9 { |
280 | regulator-name = "VDD_33_OFF_EXT1"; | 313 | regulator-name = "VDD_33_OFF_EXT1"; |
281 | regulator-min-microvolt = <750000>; | 314 | regulator-min-microvolt = <750000>; |
@@ -295,7 +328,22 @@ | |||
295 | }; | 328 | }; |
296 | 329 | ||
297 | i2c@12C90000 { | 330 | i2c@12C90000 { |
298 | status = "disabled"; | 331 | wm1811a@1a { |
332 | compatible = "wlf,wm1811"; | ||
333 | reg = <0x1a>; | ||
334 | |||
335 | AVDD2-supply = <&main_dc_reg>; | ||
336 | CPVDD-supply = <&main_dc_reg>; | ||
337 | DBVDD1-supply = <&main_dc_reg>; | ||
338 | DBVDD2-supply = <&main_dc_reg>; | ||
339 | DBVDD3-supply = <&main_dc_reg>; | ||
340 | LDO1VDD-supply = <&main_dc_reg>; | ||
341 | SPKVDD1-supply = <&main_dc_reg>; | ||
342 | SPKVDD2-supply = <&main_dc_reg>; | ||
343 | |||
344 | wlf,ldo1ena = <&gpb0 0 0>; | ||
345 | wlf,ldo2ena = <&gpb0 1 0>; | ||
346 | }; | ||
299 | }; | 347 | }; |
300 | 348 | ||
301 | i2c@12CA0000 { | 349 | i2c@12CA0000 { |
@@ -429,18 +477,29 @@ | |||
429 | vdd-supply = <&ldo8_reg>; | 477 | vdd-supply = <&ldo8_reg>; |
430 | }; | 478 | }; |
431 | 479 | ||
432 | mmc_reg: voltage-regulator { | 480 | regulators { |
433 | compatible = "regulator-fixed"; | 481 | compatible = "simple-bus"; |
434 | regulator-name = "VDD_33ON_2.8V"; | 482 | #address-cells = <1>; |
435 | regulator-min-microvolt = <2800000>; | 483 | #size-cells = <0>; |
436 | regulator-max-microvolt = <2800000>; | 484 | |
437 | gpio = <&gpx1 1 1>; | 485 | main_dc_reg: fixedregulator@1 { |
438 | enable-active-high; | 486 | compatible = "regulator-fixed"; |
439 | }; | 487 | regulator-name = "MAIN_DC"; |
488 | }; | ||
440 | 489 | ||
441 | reg_hdmi_en: fixedregulator@0 { | 490 | mmc_reg: voltage-regulator { |
442 | compatible = "regulator-fixed"; | 491 | compatible = "regulator-fixed"; |
443 | regulator-name = "hdmi-en"; | 492 | regulator-name = "VDD_33ON_2.8V"; |
493 | regulator-min-microvolt = <2800000>; | ||
494 | regulator-max-microvolt = <2800000>; | ||
495 | gpio = <&gpx1 1 1>; | ||
496 | enable-active-high; | ||
497 | }; | ||
498 | |||
499 | reg_hdmi_en: fixedregulator@0 { | ||
500 | compatible = "regulator-fixed"; | ||
501 | regulator-name = "hdmi-en"; | ||
502 | }; | ||
444 | }; | 503 | }; |
445 | 504 | ||
446 | fixed-rate-clocks { | 505 | fixed-rate-clocks { |
@@ -450,16 +509,18 @@ | |||
450 | }; | 509 | }; |
451 | }; | 510 | }; |
452 | 511 | ||
453 | dp-controller { | 512 | dp-controller@145B0000 { |
454 | samsung,color-space = <0>; | 513 | samsung,color-space = <0>; |
455 | samsung,dynamic-range = <0>; | 514 | samsung,dynamic-range = <0>; |
456 | samsung,ycbcr-coeff = <0>; | 515 | samsung,ycbcr-coeff = <0>; |
457 | samsung,color-depth = <1>; | 516 | samsung,color-depth = <1>; |
458 | samsung,link-rate = <0x0a>; | 517 | samsung,link-rate = <0x0a>; |
459 | samsung,lane-count = <4>; | 518 | samsung,lane-count = <4>; |
519 | status = "okay"; | ||
460 | }; | 520 | }; |
461 | 521 | ||
462 | fimd: fimd@14400000 { | 522 | fimd: fimd@14400000 { |
523 | status = "okay"; | ||
463 | display-timings { | 524 | display-timings { |
464 | native-mode = <&timing0>; | 525 | native-mode = <&timing0>; |
465 | timing0: timing@0 { | 526 | timing0: timing@0 { |
@@ -477,7 +538,21 @@ | |||
477 | }; | 538 | }; |
478 | }; | 539 | }; |
479 | 540 | ||
480 | rtc { | 541 | usb_hub_bus { |
481 | status = "okay"; | 542 | compatible = "simple-bus"; |
543 | #address-cells = <1>; | ||
544 | #size-cells = <0>; | ||
545 | |||
546 | // SMSC USB3503 connected in hardware only mode as a PHY | ||
547 | usb_hub: usb_hub { | ||
548 | compatible = "smsc,usb3503a"; | ||
549 | |||
550 | reset-gpios = <&gpx3 5 1>; | ||
551 | connect-gpios = <&gpd1 7 1>; | ||
552 | }; | ||
553 | }; | ||
554 | |||
555 | usb@12110000 { | ||
556 | usb-phy = <&usb2_phy>; | ||
482 | }; | 557 | }; |
483 | }; | 558 | }; |
diff --git a/arch/arm/boot/dts/exynos5250-smdk5250.dts b/arch/arm/boot/dts/exynos5250-smdk5250.dts index 49f18c24a576..2538b329f2ce 100644 --- a/arch/arm/boot/dts/exynos5250-smdk5250.dts +++ b/arch/arm/boot/dts/exynos5250-smdk5250.dts | |||
@@ -250,7 +250,7 @@ | |||
250 | samsung,vbus-gpio = <&gpx2 6 0>; | 250 | samsung,vbus-gpio = <&gpx2 6 0>; |
251 | }; | 251 | }; |
252 | 252 | ||
253 | dp-controller { | 253 | dp-controller@145B0000 { |
254 | samsung,color-space = <0>; | 254 | samsung,color-space = <0>; |
255 | samsung,dynamic-range = <0>; | 255 | samsung,dynamic-range = <0>; |
256 | samsung,ycbcr-coeff = <0>; | 256 | samsung,ycbcr-coeff = <0>; |
@@ -260,21 +260,25 @@ | |||
260 | 260 | ||
261 | pinctrl-names = "default"; | 261 | pinctrl-names = "default"; |
262 | pinctrl-0 = <&dp_hpd>; | 262 | pinctrl-0 = <&dp_hpd>; |
263 | status = "okay"; | ||
263 | }; | 264 | }; |
264 | 265 | ||
265 | display-timings { | 266 | fimd@14400000 { |
266 | native-mode = <&timing0>; | 267 | status = "okay"; |
267 | timing0: timing@0 { | 268 | display-timings { |
268 | /* 1280x800 */ | 269 | native-mode = <&timing0>; |
269 | clock-frequency = <50000>; | 270 | timing0: timing@0 { |
270 | hactive = <1280>; | 271 | /* 1280x800 */ |
271 | vactive = <800>; | 272 | clock-frequency = <50000>; |
272 | hfront-porch = <4>; | 273 | hactive = <1280>; |
273 | hback-porch = <4>; | 274 | vactive = <800>; |
274 | hsync-len = <4>; | 275 | hfront-porch = <4>; |
275 | vback-porch = <4>; | 276 | hback-porch = <4>; |
276 | vfront-porch = <4>; | 277 | hsync-len = <4>; |
277 | vsync-len = <4>; | 278 | vback-porch = <4>; |
279 | vfront-porch = <4>; | ||
280 | vsync-len = <4>; | ||
281 | }; | ||
278 | }; | 282 | }; |
279 | }; | 283 | }; |
280 | 284 | ||
diff --git a/arch/arm/boot/dts/exynos5250-snow.dts b/arch/arm/boot/dts/exynos5250-snow.dts index e79331dba12d..fd711e245e8d 100644 --- a/arch/arm/boot/dts/exynos5250-snow.dts +++ b/arch/arm/boot/dts/exynos5250-snow.dts | |||
@@ -171,10 +171,6 @@ | |||
171 | }; | 171 | }; |
172 | }; | 172 | }; |
173 | 173 | ||
174 | rtc { | ||
175 | status = "okay"; | ||
176 | }; | ||
177 | |||
178 | /* | 174 | /* |
179 | * On Snow we've got SIP WiFi and so can keep drive strengths low to | 175 | * On Snow we've got SIP WiFi and so can keep drive strengths low to |
180 | * reduce EMI. | 176 | * reduce EMI. |
diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi index ef57277fc38f..b2841e6ed6a5 100644 --- a/arch/arm/boot/dts/exynos5250.dtsi +++ b/arch/arm/boot/dts/exynos5250.dtsi | |||
@@ -163,16 +163,27 @@ | |||
163 | clock-names = "watchdog"; | 163 | clock-names = "watchdog"; |
164 | }; | 164 | }; |
165 | 165 | ||
166 | g2d@10850000 { | ||
167 | compatible = "samsung,exynos5250-g2d"; | ||
168 | reg = <0x10850000 0x1000>; | ||
169 | interrupts = <0 91 0>; | ||
170 | clocks = <&clock 345>; | ||
171 | clock-names = "fimg2d"; | ||
172 | }; | ||
173 | |||
166 | codec@11000000 { | 174 | codec@11000000 { |
167 | compatible = "samsung,mfc-v6"; | 175 | compatible = "samsung,mfc-v6"; |
168 | reg = <0x11000000 0x10000>; | 176 | reg = <0x11000000 0x10000>; |
169 | interrupts = <0 96 0>; | 177 | interrupts = <0 96 0>; |
170 | samsung,power-domain = <&pd_mfc>; | 178 | samsung,power-domain = <&pd_mfc>; |
179 | clocks = <&clock 266>; | ||
180 | clock-names = "mfc"; | ||
171 | }; | 181 | }; |
172 | 182 | ||
173 | rtc { | 183 | rtc@101E0000 { |
174 | clocks = <&clock 337>; | 184 | clocks = <&clock 337>; |
175 | clock-names = "rtc"; | 185 | clock-names = "rtc"; |
186 | status = "okay"; | ||
176 | }; | 187 | }; |
177 | 188 | ||
178 | tmu@10060000 { | 189 | tmu@10060000 { |
@@ -614,29 +625,32 @@ | |||
614 | interrupts = <0 94 0>; | 625 | interrupts = <0 94 0>; |
615 | }; | 626 | }; |
616 | 627 | ||
617 | dp-controller { | 628 | dp_phy: video-phy@10040720 { |
618 | compatible = "samsung,exynos5-dp"; | 629 | compatible = "samsung,exynos5250-dp-video-phy"; |
619 | reg = <0x145b0000 0x1000>; | 630 | reg = <0x10040720 4>; |
620 | interrupts = <10 3>; | 631 | #phy-cells = <0>; |
621 | interrupt-parent = <&combiner>; | 632 | }; |
633 | |||
634 | dp-controller@145B0000 { | ||
622 | clocks = <&clock 342>; | 635 | clocks = <&clock 342>; |
623 | clock-names = "dp"; | 636 | clock-names = "dp"; |
624 | #address-cells = <1>; | 637 | phys = <&dp_phy>; |
625 | #size-cells = <0>; | 638 | phy-names = "dp"; |
626 | |||
627 | dptx-phy { | ||
628 | reg = <0x10040720>; | ||
629 | samsung,enable-mask = <1>; | ||
630 | }; | ||
631 | }; | 639 | }; |
632 | 640 | ||
633 | fimd { | 641 | fimd@14400000 { |
634 | compatible = "samsung,exynos5250-fimd"; | ||
635 | interrupt-parent = <&combiner>; | ||
636 | reg = <0x14400000 0x40000>; | ||
637 | interrupt-names = "fifo", "vsync", "lcd_sys"; | ||
638 | interrupts = <18 4>, <18 5>, <18 6>; | ||
639 | clocks = <&clock 133>, <&clock 339>; | 642 | clocks = <&clock 133>, <&clock 339>; |
640 | clock-names = "sclk_fimd", "fimd"; | 643 | clock-names = "sclk_fimd", "fimd"; |
641 | }; | 644 | }; |
645 | |||
646 | adc: adc@12D10000 { | ||
647 | compatible = "samsung,exynos-adc-v1"; | ||
648 | reg = <0x12D10000 0x100>, <0x10040718 0x4>; | ||
649 | interrupts = <0 106 0>; | ||
650 | clocks = <&clock 303>; | ||
651 | clock-names = "adc"; | ||
652 | #io-channel-cells = <1>; | ||
653 | io-channel-ranges; | ||
654 | status = "disabled"; | ||
655 | }; | ||
642 | }; | 656 | }; |
diff --git a/arch/arm/boot/dts/exynos5420-pinctrl.dtsi b/arch/arm/boot/dts/exynos5420-pinctrl.dtsi index 5848c425ae4d..e695aba5f73c 100644 --- a/arch/arm/boot/dts/exynos5420-pinctrl.dtsi +++ b/arch/arm/boot/dts/exynos5420-pinctrl.dtsi | |||
@@ -59,6 +59,13 @@ | |||
59 | interrupt-controller; | 59 | interrupt-controller; |
60 | #interrupt-cells = <2>; | 60 | #interrupt-cells = <2>; |
61 | }; | 61 | }; |
62 | |||
63 | dp_hpd: dp_hpd { | ||
64 | samsung,pins = "gpx0-7"; | ||
65 | samsung,pin-function = <3>; | ||
66 | samsung,pin-pud = <0>; | ||
67 | samaung,pin-drv = <0>; | ||
68 | }; | ||
62 | }; | 69 | }; |
63 | 70 | ||
64 | pinctrl@13410000 { | 71 | pinctrl@13410000 { |
diff --git a/arch/arm/boot/dts/exynos5420-smdk5420.dts b/arch/arm/boot/dts/exynos5420-smdk5420.dts index 08607df6a180..bafba25ba7c2 100644 --- a/arch/arm/boot/dts/exynos5420-smdk5420.dts +++ b/arch/arm/boot/dts/exynos5420-smdk5420.dts | |||
@@ -30,4 +30,35 @@ | |||
30 | clock-frequency = <24000000>; | 30 | clock-frequency = <24000000>; |
31 | }; | 31 | }; |
32 | }; | 32 | }; |
33 | |||
34 | dp-controller@145B0000 { | ||
35 | pinctrl-names = "default"; | ||
36 | pinctrl-0 = <&dp_hpd>; | ||
37 | samsung,color-space = <0>; | ||
38 | samsung,dynamic-range = <0>; | ||
39 | samsung,ycbcr-coeff = <0>; | ||
40 | samsung,color-depth = <1>; | ||
41 | samsung,link-rate = <0x0a>; | ||
42 | samsung,lane-count = <4>; | ||
43 | status = "okay"; | ||
44 | }; | ||
45 | |||
46 | fimd@14400000 { | ||
47 | status = "okay"; | ||
48 | display-timings { | ||
49 | native-mode = <&timing0>; | ||
50 | timing0: timing@0 { | ||
51 | clock-frequency = <50000>; | ||
52 | hactive = <2560>; | ||
53 | vactive = <1600>; | ||
54 | hfront-porch = <48>; | ||
55 | hback-porch = <80>; | ||
56 | hsync-len = <32>; | ||
57 | vback-porch = <16>; | ||
58 | vfront-porch = <8>; | ||
59 | vsync-len = <6>; | ||
60 | }; | ||
61 | }; | ||
62 | }; | ||
63 | |||
33 | }; | 64 | }; |
diff --git a/arch/arm/boot/dts/exynos5420.dtsi b/arch/arm/boot/dts/exynos5420.dtsi index 8c54c4b74f0e..0646fa7dc5df 100644 --- a/arch/arm/boot/dts/exynos5420.dtsi +++ b/arch/arm/boot/dts/exynos5420.dtsi | |||
@@ -14,7 +14,10 @@ | |||
14 | */ | 14 | */ |
15 | 15 | ||
16 | #include "exynos5.dtsi" | 16 | #include "exynos5.dtsi" |
17 | /include/ "exynos5420-pinctrl.dtsi" | 17 | #include "exynos5420-pinctrl.dtsi" |
18 | |||
19 | #include <dt-bindings/clk/exynos-audss-clk.h> | ||
20 | |||
18 | / { | 21 | / { |
19 | compatible = "samsung,exynos5420"; | 22 | compatible = "samsung,exynos5420"; |
20 | 23 | ||
@@ -65,6 +68,22 @@ | |||
65 | #clock-cells = <1>; | 68 | #clock-cells = <1>; |
66 | }; | 69 | }; |
67 | 70 | ||
71 | clock_audss: audss-clock-controller@3810000 { | ||
72 | compatible = "samsung,exynos5420-audss-clock"; | ||
73 | reg = <0x03810000 0x0C>; | ||
74 | #clock-cells = <1>; | ||
75 | clocks = <&clock 148>; | ||
76 | clock-names = "sclk_audio"; | ||
77 | }; | ||
78 | |||
79 | codec@11000000 { | ||
80 | compatible = "samsung,mfc-v7"; | ||
81 | reg = <0x11000000 0x10000>; | ||
82 | interrupts = <0 96 0>; | ||
83 | clocks = <&clock 401>; | ||
84 | clock-names = "mfc"; | ||
85 | }; | ||
86 | |||
68 | mct@101C0000 { | 87 | mct@101C0000 { |
69 | compatible = "samsung,exynos4210-mct"; | 88 | compatible = "samsung,exynos4210-mct"; |
70 | reg = <0x101C0000 0x800>; | 89 | reg = <0x101C0000 0x800>; |
@@ -90,6 +109,41 @@ | |||
90 | }; | 109 | }; |
91 | }; | 110 | }; |
92 | 111 | ||
112 | gsc_pd: power-domain@10044000 { | ||
113 | compatible = "samsung,exynos4210-pd"; | ||
114 | reg = <0x10044000 0x20>; | ||
115 | }; | ||
116 | |||
117 | isp_pd: power-domain@10044020 { | ||
118 | compatible = "samsung,exynos4210-pd"; | ||
119 | reg = <0x10044020 0x20>; | ||
120 | }; | ||
121 | |||
122 | mfc_pd: power-domain@10044060 { | ||
123 | compatible = "samsung,exynos4210-pd"; | ||
124 | reg = <0x10044060 0x20>; | ||
125 | }; | ||
126 | |||
127 | disp_pd: power-domain@100440C0 { | ||
128 | compatible = "samsung,exynos4210-pd"; | ||
129 | reg = <0x100440C0 0x20>; | ||
130 | }; | ||
131 | |||
132 | mau_pd: power-domain@100440E0 { | ||
133 | compatible = "samsung,exynos4210-pd"; | ||
134 | reg = <0x100440E0 0x20>; | ||
135 | }; | ||
136 | |||
137 | g2d_pd: power-domain@10044100 { | ||
138 | compatible = "samsung,exynos4210-pd"; | ||
139 | reg = <0x10044100 0x20>; | ||
140 | }; | ||
141 | |||
142 | msc_pd: power-domain@10044120 { | ||
143 | compatible = "samsung,exynos4210-pd"; | ||
144 | reg = <0x10044120 0x20>; | ||
145 | }; | ||
146 | |||
93 | pinctrl_0: pinctrl@13400000 { | 147 | pinctrl_0: pinctrl@13400000 { |
94 | compatible = "samsung,exynos5420-pinctrl"; | 148 | compatible = "samsung,exynos5420-pinctrl"; |
95 | reg = <0x13400000 0x1000>; | 149 | reg = <0x13400000 0x1000>; |
@@ -126,6 +180,12 @@ | |||
126 | interrupts = <0 47 0>; | 180 | interrupts = <0 47 0>; |
127 | }; | 181 | }; |
128 | 182 | ||
183 | rtc@101E0000 { | ||
184 | clocks = <&clock 317>; | ||
185 | clock-names = "rtc"; | ||
186 | status = "okay"; | ||
187 | }; | ||
188 | |||
129 | serial@12C00000 { | 189 | serial@12C00000 { |
130 | clocks = <&clock 257>, <&clock 128>; | 190 | clocks = <&clock 257>, <&clock 128>; |
131 | clock-names = "uart", "clk_uart_baud0"; | 191 | clock-names = "uart", "clk_uart_baud0"; |
@@ -145,4 +205,34 @@ | |||
145 | clocks = <&clock 260>, <&clock 131>; | 205 | clocks = <&clock 260>, <&clock 131>; |
146 | clock-names = "uart", "clk_uart_baud0"; | 206 | clock-names = "uart", "clk_uart_baud0"; |
147 | }; | 207 | }; |
208 | |||
209 | dp_phy: video-phy@10040728 { | ||
210 | compatible = "samsung,exynos5250-dp-video-phy"; | ||
211 | reg = <0x10040728 4>; | ||
212 | #phy-cells = <0>; | ||
213 | }; | ||
214 | |||
215 | dp-controller@145B0000 { | ||
216 | clocks = <&clock 412>; | ||
217 | clock-names = "dp"; | ||
218 | phys = <&dp_phy>; | ||
219 | phy-names = "dp"; | ||
220 | }; | ||
221 | |||
222 | fimd@14400000 { | ||
223 | samsung,power-domain = <&disp_pd>; | ||
224 | clocks = <&clock 147>, <&clock 421>; | ||
225 | clock-names = "sclk_fimd", "fimd"; | ||
226 | }; | ||
227 | |||
228 | adc: adc@12D10000 { | ||
229 | compatible = "samsung,exynos-adc-v2"; | ||
230 | reg = <0x12D10000 0x100>, <0x10040720 0x4>; | ||
231 | interrupts = <0 106 0>; | ||
232 | clocks = <&clock 270>; | ||
233 | clock-names = "adc"; | ||
234 | #io-channel-cells = <1>; | ||
235 | io-channel-ranges; | ||
236 | status = "disabled"; | ||
237 | }; | ||
148 | }; | 238 | }; |
diff --git a/arch/arm/boot/dts/exynos5440.dtsi b/arch/arm/boot/dts/exynos5440.dtsi index ff7f5d855845..606da5f39269 100644 --- a/arch/arm/boot/dts/exynos5440.dtsi +++ b/arch/arm/boot/dts/exynos5440.dtsi | |||
@@ -18,6 +18,9 @@ | |||
18 | 18 | ||
19 | aliases { | 19 | aliases { |
20 | spi0 = &spi_0; | 20 | spi0 = &spi_0; |
21 | tmuctrl0 = &tmuctrl_0; | ||
22 | tmuctrl1 = &tmuctrl_1; | ||
23 | tmuctrl2 = &tmuctrl_2; | ||
21 | }; | 24 | }; |
22 | 25 | ||
23 | clock: clock-controller@0x160000 { | 26 | clock: clock-controller@0x160000 { |
@@ -207,6 +210,30 @@ | |||
207 | clock-names = "rtc"; | 210 | clock-names = "rtc"; |
208 | }; | 211 | }; |
209 | 212 | ||
213 | tmuctrl_0: tmuctrl@160118 { | ||
214 | compatible = "samsung,exynos5440-tmu"; | ||
215 | reg = <0x160118 0x230>, <0x160368 0x10>; | ||
216 | interrupts = <0 58 0>; | ||
217 | clocks = <&clock 21>; | ||
218 | clock-names = "tmu_apbif"; | ||
219 | }; | ||
220 | |||
221 | tmuctrl_1: tmuctrl@16011C { | ||
222 | compatible = "samsung,exynos5440-tmu"; | ||
223 | reg = <0x16011C 0x230>, <0x160368 0x10>; | ||
224 | interrupts = <0 58 0>; | ||
225 | clocks = <&clock 21>; | ||
226 | clock-names = "tmu_apbif"; | ||
227 | }; | ||
228 | |||
229 | tmuctrl_2: tmuctrl@160120 { | ||
230 | compatible = "samsung,exynos5440-tmu"; | ||
231 | reg = <0x160120 0x230>, <0x160368 0x10>; | ||
232 | interrupts = <0 58 0>; | ||
233 | clocks = <&clock 21>; | ||
234 | clock-names = "tmu_apbif"; | ||
235 | }; | ||
236 | |||
210 | sata@210000 { | 237 | sata@210000 { |
211 | compatible = "snps,exynos5440-ahci"; | 238 | compatible = "snps,exynos5440-ahci"; |
212 | reg = <0x210000 0x10000>; | 239 | reg = <0x210000 0x10000>; |
diff --git a/arch/arm/boot/dts/imx28-apx4devkit.dts b/arch/arm/boot/dts/imx28-apx4devkit.dts index 43bf3c796cba..0e7fed47bd8d 100644 --- a/arch/arm/boot/dts/imx28-apx4devkit.dts +++ b/arch/arm/boot/dts/imx28-apx4devkit.dts | |||
@@ -147,7 +147,7 @@ | |||
147 | reg = <0x0a>; | 147 | reg = <0x0a>; |
148 | VDDA-supply = <®_3p3v>; | 148 | VDDA-supply = <®_3p3v>; |
149 | VDDIO-supply = <®_3p3v>; | 149 | VDDIO-supply = <®_3p3v>; |
150 | 150 | clocks = <&saif0>; | |
151 | }; | 151 | }; |
152 | 152 | ||
153 | pcf8563: rtc@51 { | 153 | pcf8563: rtc@51 { |
diff --git a/arch/arm/boot/dts/imx28-evk.dts b/arch/arm/boot/dts/imx28-evk.dts index 1f0d38d7b16f..e035f4664b97 100644 --- a/arch/arm/boot/dts/imx28-evk.dts +++ b/arch/arm/boot/dts/imx28-evk.dts | |||
@@ -195,7 +195,7 @@ | |||
195 | reg = <0x0a>; | 195 | reg = <0x0a>; |
196 | VDDA-supply = <®_3p3v>; | 196 | VDDA-supply = <®_3p3v>; |
197 | VDDIO-supply = <®_3p3v>; | 197 | VDDIO-supply = <®_3p3v>; |
198 | 198 | clocks = <&saif0>; | |
199 | }; | 199 | }; |
200 | 200 | ||
201 | at24@51 { | 201 | at24@51 { |
diff --git a/arch/arm/boot/dts/imx28-m28evk.dts b/arch/arm/boot/dts/imx28-m28evk.dts index 880df2f13be8..44d9da57736e 100644 --- a/arch/arm/boot/dts/imx28-m28evk.dts +++ b/arch/arm/boot/dts/imx28-m28evk.dts | |||
@@ -184,7 +184,7 @@ | |||
184 | reg = <0x0a>; | 184 | reg = <0x0a>; |
185 | VDDA-supply = <®_3p3v>; | 185 | VDDA-supply = <®_3p3v>; |
186 | VDDIO-supply = <®_3p3v>; | 186 | VDDIO-supply = <®_3p3v>; |
187 | 187 | clocks = <&saif0>; | |
188 | }; | 188 | }; |
189 | 189 | ||
190 | eeprom: eeprom@51 { | 190 | eeprom: eeprom@51 { |
diff --git a/arch/arm/boot/dts/imx28.dtsi b/arch/arm/boot/dts/imx28.dtsi index 6a8acb01b1d3..9524a0571281 100644 --- a/arch/arm/boot/dts/imx28.dtsi +++ b/arch/arm/boot/dts/imx28.dtsi | |||
@@ -837,6 +837,7 @@ | |||
837 | compatible = "fsl,imx28-saif"; | 837 | compatible = "fsl,imx28-saif"; |
838 | reg = <0x80042000 0x2000>; | 838 | reg = <0x80042000 0x2000>; |
839 | interrupts = <59 80>; | 839 | interrupts = <59 80>; |
840 | #clock-cells = <0>; | ||
840 | clocks = <&clks 53>; | 841 | clocks = <&clks 53>; |
841 | dmas = <&dma_apbx 4>; | 842 | dmas = <&dma_apbx 4>; |
842 | dma-names = "rx-tx"; | 843 | dma-names = "rx-tx"; |
diff --git a/arch/arm/boot/dts/imx51-babbage.dts b/arch/arm/boot/dts/imx51-babbage.dts index 6dd9486c755b..ad3471ca17c7 100644 --- a/arch/arm/boot/dts/imx51-babbage.dts +++ b/arch/arm/boot/dts/imx51-babbage.dts | |||
@@ -61,6 +61,16 @@ | |||
61 | mux-int-port = <2>; | 61 | mux-int-port = <2>; |
62 | mux-ext-port = <3>; | 62 | mux-ext-port = <3>; |
63 | }; | 63 | }; |
64 | |||
65 | clocks { | ||
66 | clk_26M: codec_clock { | ||
67 | compatible = "fixed-clock"; | ||
68 | reg=<0>; | ||
69 | #clock-cells = <0>; | ||
70 | clock-frequency = <26000000>; | ||
71 | gpios = <&gpio4 26 1>; | ||
72 | }; | ||
73 | }; | ||
64 | }; | 74 | }; |
65 | 75 | ||
66 | &esdhc1 { | 76 | &esdhc1 { |
@@ -229,6 +239,7 @@ | |||
229 | MX51_PAD_EIM_A27__GPIO2_21 0x5 | 239 | MX51_PAD_EIM_A27__GPIO2_21 0x5 |
230 | MX51_PAD_CSPI1_SS0__GPIO4_24 0x85 | 240 | MX51_PAD_CSPI1_SS0__GPIO4_24 0x85 |
231 | MX51_PAD_CSPI1_SS1__GPIO4_25 0x85 | 241 | MX51_PAD_CSPI1_SS1__GPIO4_25 0x85 |
242 | MX51_PAD_CSPI1_RDY__GPIO4_26 0x80000000 | ||
232 | >; | 243 | >; |
233 | }; | 244 | }; |
234 | }; | 245 | }; |
@@ -255,7 +266,7 @@ | |||
255 | sgtl5000: codec@0a { | 266 | sgtl5000: codec@0a { |
256 | compatible = "fsl,sgtl5000"; | 267 | compatible = "fsl,sgtl5000"; |
257 | reg = <0x0a>; | 268 | reg = <0x0a>; |
258 | clock-frequency = <26000000>; | 269 | clocks = <&clk_26M>; |
259 | VDDA-supply = <&vdig_reg>; | 270 | VDDA-supply = <&vdig_reg>; |
260 | VDDIO-supply = <&vvideo_reg>; | 271 | VDDIO-supply = <&vvideo_reg>; |
261 | }; | 272 | }; |
diff --git a/arch/arm/boot/dts/imx53-mba53.dts b/arch/arm/boot/dts/imx53-mba53.dts index aaa33bc99f78..a63090267941 100644 --- a/arch/arm/boot/dts/imx53-mba53.dts +++ b/arch/arm/boot/dts/imx53-mba53.dts | |||
@@ -27,7 +27,7 @@ | |||
27 | 27 | ||
28 | backlight { | 28 | backlight { |
29 | compatible = "pwm-backlight"; | 29 | compatible = "pwm-backlight"; |
30 | pwms = <&pwm2 0 50000 0 0>; | 30 | pwms = <&pwm2 0 50000>; |
31 | brightness-levels = <0 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100>; | 31 | brightness-levels = <0 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100>; |
32 | default-brightness-level = <10>; | 32 | default-brightness-level = <10>; |
33 | enable-gpios = <&gpio7 7 0>; | 33 | enable-gpios = <&gpio7 7 0>; |
diff --git a/arch/arm/boot/dts/imx53.dtsi b/arch/arm/boot/dts/imx53.dtsi index 3895fbba8fce..569aa9f2c4ed 100644 --- a/arch/arm/boot/dts/imx53.dtsi +++ b/arch/arm/boot/dts/imx53.dtsi | |||
@@ -725,15 +725,15 @@ | |||
725 | uart1 { | 725 | uart1 { |
726 | pinctrl_uart1_1: uart1grp-1 { | 726 | pinctrl_uart1_1: uart1grp-1 { |
727 | fsl,pins = < | 727 | fsl,pins = < |
728 | MX53_PAD_CSI0_DAT10__UART1_TXD_MUX 0x1c5 | 728 | MX53_PAD_CSI0_DAT10__UART1_TXD_MUX 0x1e4 |
729 | MX53_PAD_CSI0_DAT11__UART1_RXD_MUX 0x1c5 | 729 | MX53_PAD_CSI0_DAT11__UART1_RXD_MUX 0x1e4 |
730 | >; | 730 | >; |
731 | }; | 731 | }; |
732 | 732 | ||
733 | pinctrl_uart1_2: uart1grp-2 { | 733 | pinctrl_uart1_2: uart1grp-2 { |
734 | fsl,pins = < | 734 | fsl,pins = < |
735 | MX53_PAD_PATA_DIOW__UART1_TXD_MUX 0x1c5 | 735 | MX53_PAD_PATA_DIOW__UART1_TXD_MUX 0x1e4 |
736 | MX53_PAD_PATA_DMACK__UART1_RXD_MUX 0x1c5 | 736 | MX53_PAD_PATA_DMACK__UART1_RXD_MUX 0x1e4 |
737 | >; | 737 | >; |
738 | }; | 738 | }; |
739 | 739 | ||
@@ -748,8 +748,8 @@ | |||
748 | uart2 { | 748 | uart2 { |
749 | pinctrl_uart2_1: uart2grp-1 { | 749 | pinctrl_uart2_1: uart2grp-1 { |
750 | fsl,pins = < | 750 | fsl,pins = < |
751 | MX53_PAD_PATA_BUFFER_EN__UART2_RXD_MUX 0x1c5 | 751 | MX53_PAD_PATA_BUFFER_EN__UART2_RXD_MUX 0x1e4 |
752 | MX53_PAD_PATA_DMARQ__UART2_TXD_MUX 0x1c5 | 752 | MX53_PAD_PATA_DMARQ__UART2_TXD_MUX 0x1e4 |
753 | >; | 753 | >; |
754 | }; | 754 | }; |
755 | 755 | ||
@@ -766,17 +766,17 @@ | |||
766 | uart3 { | 766 | uart3 { |
767 | pinctrl_uart3_1: uart3grp-1 { | 767 | pinctrl_uart3_1: uart3grp-1 { |
768 | fsl,pins = < | 768 | fsl,pins = < |
769 | MX53_PAD_PATA_CS_0__UART3_TXD_MUX 0x1c5 | 769 | MX53_PAD_PATA_CS_0__UART3_TXD_MUX 0x1e4 |
770 | MX53_PAD_PATA_CS_1__UART3_RXD_MUX 0x1c5 | 770 | MX53_PAD_PATA_CS_1__UART3_RXD_MUX 0x1e4 |
771 | MX53_PAD_PATA_DA_1__UART3_CTS 0x1c5 | 771 | MX53_PAD_PATA_DA_1__UART3_CTS 0x1e4 |
772 | MX53_PAD_PATA_DA_2__UART3_RTS 0x1c5 | 772 | MX53_PAD_PATA_DA_2__UART3_RTS 0x1e4 |
773 | >; | 773 | >; |
774 | }; | 774 | }; |
775 | 775 | ||
776 | pinctrl_uart3_2: uart3grp-2 { | 776 | pinctrl_uart3_2: uart3grp-2 { |
777 | fsl,pins = < | 777 | fsl,pins = < |
778 | MX53_PAD_PATA_CS_0__UART3_TXD_MUX 0x1c5 | 778 | MX53_PAD_PATA_CS_0__UART3_TXD_MUX 0x1e4 |
779 | MX53_PAD_PATA_CS_1__UART3_RXD_MUX 0x1c5 | 779 | MX53_PAD_PATA_CS_1__UART3_RXD_MUX 0x1e4 |
780 | >; | 780 | >; |
781 | }; | 781 | }; |
782 | 782 | ||
@@ -785,8 +785,8 @@ | |||
785 | uart4 { | 785 | uart4 { |
786 | pinctrl_uart4_1: uart4grp-1 { | 786 | pinctrl_uart4_1: uart4grp-1 { |
787 | fsl,pins = < | 787 | fsl,pins = < |
788 | MX53_PAD_KEY_COL0__UART4_TXD_MUX 0x1c5 | 788 | MX53_PAD_KEY_COL0__UART4_TXD_MUX 0x1e4 |
789 | MX53_PAD_KEY_ROW0__UART4_RXD_MUX 0x1c5 | 789 | MX53_PAD_KEY_ROW0__UART4_RXD_MUX 0x1e4 |
790 | >; | 790 | >; |
791 | }; | 791 | }; |
792 | }; | 792 | }; |
@@ -794,8 +794,8 @@ | |||
794 | uart5 { | 794 | uart5 { |
795 | pinctrl_uart5_1: uart5grp-1 { | 795 | pinctrl_uart5_1: uart5grp-1 { |
796 | fsl,pins = < | 796 | fsl,pins = < |
797 | MX53_PAD_KEY_COL1__UART5_TXD_MUX 0x1c5 | 797 | MX53_PAD_KEY_COL1__UART5_TXD_MUX 0x1e4 |
798 | MX53_PAD_KEY_ROW1__UART5_RXD_MUX 0x1c5 | 798 | MX53_PAD_KEY_ROW1__UART5_RXD_MUX 0x1e4 |
799 | >; | 799 | >; |
800 | }; | 800 | }; |
801 | }; | 801 | }; |
diff --git a/arch/arm/boot/dts/msm8960-cdp.dts b/arch/arm/boot/dts/msm8960-cdp.dts index db2060c46540..9c1167b0459b 100644 --- a/arch/arm/boot/dts/msm8960-cdp.dts +++ b/arch/arm/boot/dts/msm8960-cdp.dts | |||
@@ -26,7 +26,7 @@ | |||
26 | cpu-offset = <0x80000>; | 26 | cpu-offset = <0x80000>; |
27 | }; | 27 | }; |
28 | 28 | ||
29 | msmgpio: gpio@fd510000 { | 29 | msmgpio: gpio@800000 { |
30 | compatible = "qcom,msm-gpio"; | 30 | compatible = "qcom,msm-gpio"; |
31 | gpio-controller; | 31 | gpio-controller; |
32 | #gpio-cells = <2>; | 32 | #gpio-cells = <2>; |
@@ -34,7 +34,7 @@ | |||
34 | interrupts = <0 32 0x4>; | 34 | interrupts = <0 32 0x4>; |
35 | interrupt-controller; | 35 | interrupt-controller; |
36 | #interrupt-cells = <2>; | 36 | #interrupt-cells = <2>; |
37 | reg = <0xfd510000 0x4000>; | 37 | reg = <0x800000 0x4000>; |
38 | }; | 38 | }; |
39 | 39 | ||
40 | serial@16440000 { | 40 | serial@16440000 { |
diff --git a/arch/arm/boot/dts/omap5-uevm.dts b/arch/arm/boot/dts/omap5-uevm.dts index 08b72678abff..65d7b601651c 100644 --- a/arch/arm/boot/dts/omap5-uevm.dts +++ b/arch/arm/boot/dts/omap5-uevm.dts | |||
@@ -235,7 +235,7 @@ | |||
235 | }; | 235 | }; |
236 | 236 | ||
237 | &mmc1 { | 237 | &mmc1 { |
238 | vmmc-supply = <&vmmcsd_fixed>; | 238 | vmmc-supply = <&ldo9_reg>; |
239 | bus-width = <4>; | 239 | bus-width = <4>; |
240 | }; | 240 | }; |
241 | 241 | ||
@@ -282,6 +282,7 @@ | |||
282 | 282 | ||
283 | regulators { | 283 | regulators { |
284 | smps123_reg: smps123 { | 284 | smps123_reg: smps123 { |
285 | /* VDD_OPP_MPU */ | ||
285 | regulator-name = "smps123"; | 286 | regulator-name = "smps123"; |
286 | regulator-min-microvolt = < 600000>; | 287 | regulator-min-microvolt = < 600000>; |
287 | regulator-max-microvolt = <1500000>; | 288 | regulator-max-microvolt = <1500000>; |
@@ -290,6 +291,7 @@ | |||
290 | }; | 291 | }; |
291 | 292 | ||
292 | smps45_reg: smps45 { | 293 | smps45_reg: smps45 { |
294 | /* VDD_OPP_MM */ | ||
293 | regulator-name = "smps45"; | 295 | regulator-name = "smps45"; |
294 | regulator-min-microvolt = < 600000>; | 296 | regulator-min-microvolt = < 600000>; |
295 | regulator-max-microvolt = <1310000>; | 297 | regulator-max-microvolt = <1310000>; |
@@ -298,6 +300,7 @@ | |||
298 | }; | 300 | }; |
299 | 301 | ||
300 | smps6_reg: smps6 { | 302 | smps6_reg: smps6 { |
303 | /* VDD_DDR3 - over VDD_SMPS6 */ | ||
301 | regulator-name = "smps6"; | 304 | regulator-name = "smps6"; |
302 | regulator-min-microvolt = <1200000>; | 305 | regulator-min-microvolt = <1200000>; |
303 | regulator-max-microvolt = <1200000>; | 306 | regulator-max-microvolt = <1200000>; |
@@ -306,6 +309,7 @@ | |||
306 | }; | 309 | }; |
307 | 310 | ||
308 | smps7_reg: smps7 { | 311 | smps7_reg: smps7 { |
312 | /* VDDS_1v8_OMAP over VDDS_1v8_MAIN */ | ||
309 | regulator-name = "smps7"; | 313 | regulator-name = "smps7"; |
310 | regulator-min-microvolt = <1800000>; | 314 | regulator-min-microvolt = <1800000>; |
311 | regulator-max-microvolt = <1800000>; | 315 | regulator-max-microvolt = <1800000>; |
@@ -314,6 +318,7 @@ | |||
314 | }; | 318 | }; |
315 | 319 | ||
316 | smps8_reg: smps8 { | 320 | smps8_reg: smps8 { |
321 | /* VDD_OPP_CORE */ | ||
317 | regulator-name = "smps8"; | 322 | regulator-name = "smps8"; |
318 | regulator-min-microvolt = < 600000>; | 323 | regulator-min-microvolt = < 600000>; |
319 | regulator-max-microvolt = <1310000>; | 324 | regulator-max-microvolt = <1310000>; |
@@ -322,15 +327,15 @@ | |||
322 | }; | 327 | }; |
323 | 328 | ||
324 | smps9_reg: smps9 { | 329 | smps9_reg: smps9 { |
330 | /* VDDA_2v1_AUD over VDD_2v1 */ | ||
325 | regulator-name = "smps9"; | 331 | regulator-name = "smps9"; |
326 | regulator-min-microvolt = <2100000>; | 332 | regulator-min-microvolt = <2100000>; |
327 | regulator-max-microvolt = <2100000>; | 333 | regulator-max-microvolt = <2100000>; |
328 | regulator-always-on; | ||
329 | regulator-boot-on; | ||
330 | ti,smps-range = <0x80>; | 334 | ti,smps-range = <0x80>; |
331 | }; | 335 | }; |
332 | 336 | ||
333 | smps10_reg: smps10 { | 337 | smps10_reg: smps10 { |
338 | /* VBUS_5V_OTG */ | ||
334 | regulator-name = "smps10"; | 339 | regulator-name = "smps10"; |
335 | regulator-min-microvolt = <5000000>; | 340 | regulator-min-microvolt = <5000000>; |
336 | regulator-max-microvolt = <5000000>; | 341 | regulator-max-microvolt = <5000000>; |
@@ -339,38 +344,40 @@ | |||
339 | }; | 344 | }; |
340 | 345 | ||
341 | ldo1_reg: ldo1 { | 346 | ldo1_reg: ldo1 { |
347 | /* VDDAPHY_CAM: vdda_csiport */ | ||
342 | regulator-name = "ldo1"; | 348 | regulator-name = "ldo1"; |
343 | regulator-min-microvolt = <2800000>; | 349 | regulator-min-microvolt = <1500000>; |
344 | regulator-max-microvolt = <2800000>; | 350 | regulator-max-microvolt = <1800000>; |
345 | regulator-always-on; | ||
346 | regulator-boot-on; | ||
347 | }; | 351 | }; |
348 | 352 | ||
349 | ldo2_reg: ldo2 { | 353 | ldo2_reg: ldo2 { |
354 | /* VCC_2V8_DISP: Does not go anywhere */ | ||
350 | regulator-name = "ldo2"; | 355 | regulator-name = "ldo2"; |
351 | regulator-min-microvolt = <2900000>; | 356 | regulator-min-microvolt = <2800000>; |
352 | regulator-max-microvolt = <2900000>; | 357 | regulator-max-microvolt = <2800000>; |
353 | regulator-always-on; | 358 | /* Unused */ |
354 | regulator-boot-on; | 359 | status = "disabled"; |
355 | }; | 360 | }; |
356 | 361 | ||
357 | ldo3_reg: ldo3 { | 362 | ldo3_reg: ldo3 { |
363 | /* VDDAPHY_MDM: vdda_lli */ | ||
358 | regulator-name = "ldo3"; | 364 | regulator-name = "ldo3"; |
359 | regulator-min-microvolt = <3000000>; | 365 | regulator-min-microvolt = <1500000>; |
360 | regulator-max-microvolt = <3000000>; | 366 | regulator-max-microvolt = <1500000>; |
361 | regulator-always-on; | ||
362 | regulator-boot-on; | 367 | regulator-boot-on; |
368 | /* Only if Modem is used */ | ||
369 | status = "disabled"; | ||
363 | }; | 370 | }; |
364 | 371 | ||
365 | ldo4_reg: ldo4 { | 372 | ldo4_reg: ldo4 { |
373 | /* VDDAPHY_DISP: vdda_dsiport/hdmi */ | ||
366 | regulator-name = "ldo4"; | 374 | regulator-name = "ldo4"; |
367 | regulator-min-microvolt = <2200000>; | 375 | regulator-min-microvolt = <1500000>; |
368 | regulator-max-microvolt = <2200000>; | 376 | regulator-max-microvolt = <1800000>; |
369 | regulator-always-on; | ||
370 | regulator-boot-on; | ||
371 | }; | 377 | }; |
372 | 378 | ||
373 | ldo5_reg: ldo5 { | 379 | ldo5_reg: ldo5 { |
380 | /* VDDA_1V8_PHY: usb/sata/hdmi.. */ | ||
374 | regulator-name = "ldo5"; | 381 | regulator-name = "ldo5"; |
375 | regulator-min-microvolt = <1800000>; | 382 | regulator-min-microvolt = <1800000>; |
376 | regulator-max-microvolt = <1800000>; | 383 | regulator-max-microvolt = <1800000>; |
@@ -379,38 +386,43 @@ | |||
379 | }; | 386 | }; |
380 | 387 | ||
381 | ldo6_reg: ldo6 { | 388 | ldo6_reg: ldo6 { |
389 | /* VDDS_1V2_WKUP: hsic/ldo_emu_wkup */ | ||
382 | regulator-name = "ldo6"; | 390 | regulator-name = "ldo6"; |
383 | regulator-min-microvolt = <1500000>; | 391 | regulator-min-microvolt = <1200000>; |
384 | regulator-max-microvolt = <1500000>; | 392 | regulator-max-microvolt = <1200000>; |
385 | regulator-always-on; | 393 | regulator-always-on; |
386 | regulator-boot-on; | 394 | regulator-boot-on; |
387 | }; | 395 | }; |
388 | 396 | ||
389 | ldo7_reg: ldo7 { | 397 | ldo7_reg: ldo7 { |
398 | /* VDD_VPP: vpp1 */ | ||
390 | regulator-name = "ldo7"; | 399 | regulator-name = "ldo7"; |
391 | regulator-min-microvolt = <1500000>; | 400 | regulator-min-microvolt = <2000000>; |
392 | regulator-max-microvolt = <1500000>; | 401 | regulator-max-microvolt = <2000000>; |
393 | regulator-always-on; | 402 | /* Only for efuse reprograming! */ |
394 | regulator-boot-on; | 403 | status = "disabled"; |
395 | }; | 404 | }; |
396 | 405 | ||
397 | ldo8_reg: ldo8 { | 406 | ldo8_reg: ldo8 { |
407 | /* VDD_3v0: Does not go anywhere */ | ||
398 | regulator-name = "ldo8"; | 408 | regulator-name = "ldo8"; |
399 | regulator-min-microvolt = <1500000>; | 409 | regulator-min-microvolt = <3000000>; |
400 | regulator-max-microvolt = <1500000>; | 410 | regulator-max-microvolt = <3000000>; |
401 | regulator-always-on; | ||
402 | regulator-boot-on; | 411 | regulator-boot-on; |
412 | /* Unused */ | ||
413 | status = "disabled"; | ||
403 | }; | 414 | }; |
404 | 415 | ||
405 | ldo9_reg: ldo9 { | 416 | ldo9_reg: ldo9 { |
417 | /* VCC_DV_SDIO: vdds_sdcard */ | ||
406 | regulator-name = "ldo9"; | 418 | regulator-name = "ldo9"; |
407 | regulator-min-microvolt = <1800000>; | 419 | regulator-min-microvolt = <1800000>; |
408 | regulator-max-microvolt = <3300000>; | 420 | regulator-max-microvolt = <3000000>; |
409 | regulator-always-on; | ||
410 | regulator-boot-on; | 421 | regulator-boot-on; |
411 | }; | 422 | }; |
412 | 423 | ||
413 | ldoln_reg: ldoln { | 424 | ldoln_reg: ldoln { |
425 | /* VDDA_1v8_REF: vdds_osc/mm_l4per.. */ | ||
414 | regulator-name = "ldoln"; | 426 | regulator-name = "ldoln"; |
415 | regulator-min-microvolt = <1800000>; | 427 | regulator-min-microvolt = <1800000>; |
416 | regulator-max-microvolt = <1800000>; | 428 | regulator-max-microvolt = <1800000>; |
@@ -419,12 +431,20 @@ | |||
419 | }; | 431 | }; |
420 | 432 | ||
421 | ldousb_reg: ldousb { | 433 | ldousb_reg: ldousb { |
434 | /* VDDA_3V_USB: VDDA_USBHS33 */ | ||
422 | regulator-name = "ldousb"; | 435 | regulator-name = "ldousb"; |
423 | regulator-min-microvolt = <3250000>; | 436 | regulator-min-microvolt = <3250000>; |
424 | regulator-max-microvolt = <3250000>; | 437 | regulator-max-microvolt = <3250000>; |
425 | regulator-always-on; | 438 | regulator-always-on; |
426 | regulator-boot-on; | 439 | regulator-boot-on; |
427 | }; | 440 | }; |
441 | |||
442 | regen3_reg: regen3 { | ||
443 | /* REGEN3 controls LDO9 supply to card */ | ||
444 | regulator-name = "regen3"; | ||
445 | regulator-always-on; | ||
446 | regulator-boot-on; | ||
447 | }; | ||
428 | }; | 448 | }; |
429 | }; | 449 | }; |
430 | }; | 450 | }; |
diff --git a/arch/arm/boot/dts/prima2.dtsi b/arch/arm/boot/dts/prima2.dtsi index 05e9489cf95c..bbeb623fc2c6 100644 --- a/arch/arm/boot/dts/prima2.dtsi +++ b/arch/arm/boot/dts/prima2.dtsi | |||
@@ -515,16 +515,16 @@ | |||
515 | sirf,function = "pulse_count"; | 515 | sirf,function = "pulse_count"; |
516 | }; | 516 | }; |
517 | }; | 517 | }; |
518 | cko0_rst_pins_a: cko0_rst@0 { | 518 | cko0_pins_a: cko0@0 { |
519 | cko0_rst { | 519 | cko0 { |
520 | sirf,pins = "cko0_rstgrp"; | 520 | sirf,pins = "cko0grp"; |
521 | sirf,function = "cko0_rst"; | 521 | sirf,function = "cko0"; |
522 | }; | 522 | }; |
523 | }; | 523 | }; |
524 | cko1_rst_pins_a: cko1_rst@0 { | 524 | cko1_pins_a: cko1@0 { |
525 | cko1_rst { | 525 | cko1 { |
526 | sirf,pins = "cko1_rstgrp"; | 526 | sirf,pins = "cko1grp"; |
527 | sirf,function = "cko1_rst"; | 527 | sirf,function = "cko1"; |
528 | }; | 528 | }; |
529 | }; | 529 | }; |
530 | }; | 530 | }; |
diff --git a/arch/arm/boot/dts/sama5d3.dtsi b/arch/arm/boot/dts/sama5d3.dtsi index a1d5e25a6698..b7f49615120d 100644 --- a/arch/arm/boot/dts/sama5d3.dtsi +++ b/arch/arm/boot/dts/sama5d3.dtsi | |||
@@ -48,6 +48,11 @@ | |||
48 | }; | 48 | }; |
49 | }; | 49 | }; |
50 | 50 | ||
51 | pmu { | ||
52 | compatible = "arm,cortex-a5-pmu"; | ||
53 | interrupts = <46 IRQ_TYPE_LEVEL_HIGH 0>; | ||
54 | }; | ||
55 | |||
51 | memory { | 56 | memory { |
52 | reg = <0x20000000 0x8000000>; | 57 | reg = <0x20000000 0x8000000>; |
53 | }; | 58 | }; |
@@ -1029,21 +1034,30 @@ | |||
1029 | compatible = "atmel,at91rm9200-nand"; | 1034 | compatible = "atmel,at91rm9200-nand"; |
1030 | #address-cells = <1>; | 1035 | #address-cells = <1>; |
1031 | #size-cells = <1>; | 1036 | #size-cells = <1>; |
1037 | ranges; | ||
1032 | reg = < 0x60000000 0x01000000 /* EBI CS3 */ | 1038 | reg = < 0x60000000 0x01000000 /* EBI CS3 */ |
1033 | 0xffffc070 0x00000490 /* SMC PMECC regs */ | 1039 | 0xffffc070 0x00000490 /* SMC PMECC regs */ |
1034 | 0xffffc500 0x00000100 /* SMC PMECC Error Location regs */ | 1040 | 0xffffc500 0x00000100 /* SMC PMECC Error Location regs */ |
1035 | 0x00100000 0x00100000 /* ROM code */ | 1041 | 0x00110000 0x00018000 /* ROM code */ |
1036 | 0x70000000 0x10000000 /* NFC Command Registers */ | ||
1037 | 0xffffc000 0x00000070 /* NFC HSMC regs */ | ||
1038 | 0x00200000 0x00100000 /* NFC SRAM banks */ | ||
1039 | >; | 1042 | >; |
1040 | interrupts = <5 IRQ_TYPE_LEVEL_HIGH 6>; | 1043 | interrupts = <5 IRQ_TYPE_LEVEL_HIGH 6>; |
1041 | atmel,nand-addr-offset = <21>; | 1044 | atmel,nand-addr-offset = <21>; |
1042 | atmel,nand-cmd-offset = <22>; | 1045 | atmel,nand-cmd-offset = <22>; |
1043 | pinctrl-names = "default"; | 1046 | pinctrl-names = "default"; |
1044 | pinctrl-0 = <&pinctrl_nand0_ale_cle>; | 1047 | pinctrl-0 = <&pinctrl_nand0_ale_cle>; |
1045 | atmel,pmecc-lookup-table-offset = <0x10000 0x18000>; | 1048 | atmel,pmecc-lookup-table-offset = <0x0 0x8000>; |
1046 | status = "disabled"; | 1049 | status = "disabled"; |
1050 | |||
1051 | nfc@70000000 { | ||
1052 | compatible = "atmel,sama5d3-nfc"; | ||
1053 | #address-cells = <1>; | ||
1054 | #size-cells = <1>; | ||
1055 | reg = < | ||
1056 | 0x70000000 0x10000000 /* NFC Command Registers */ | ||
1057 | 0xffffc000 0x00000070 /* NFC HSMC regs */ | ||
1058 | 0x00200000 0x00100000 /* NFC SRAM banks */ | ||
1059 | >; | ||
1060 | }; | ||
1047 | }; | 1061 | }; |
1048 | }; | 1062 | }; |
1049 | }; | 1063 | }; |
diff --git a/arch/arm/boot/dts/sama5d3xcm.dtsi b/arch/arm/boot/dts/sama5d3xcm.dtsi index 1f8050813a54..31ed9e3bb649 100644 --- a/arch/arm/boot/dts/sama5d3xcm.dtsi +++ b/arch/arm/boot/dts/sama5d3xcm.dtsi | |||
@@ -47,8 +47,6 @@ | |||
47 | atmel,has-pmecc; | 47 | atmel,has-pmecc; |
48 | atmel,pmecc-cap = <4>; | 48 | atmel,pmecc-cap = <4>; |
49 | atmel,pmecc-sector-size = <512>; | 49 | atmel,pmecc-sector-size = <512>; |
50 | atmel,has-nfc; | ||
51 | atmel,use-nfc-sram; | ||
52 | nand-on-flash-bbt; | 50 | nand-on-flash-bbt; |
53 | status = "okay"; | 51 | status = "okay"; |
54 | 52 | ||
diff --git a/arch/arm/boot/dts/stih416-pinctrl.dtsi b/arch/arm/boot/dts/stih416-pinctrl.dtsi index 957b21a71b4b..0f246c979262 100644 --- a/arch/arm/boot/dts/stih416-pinctrl.dtsi +++ b/arch/arm/boot/dts/stih416-pinctrl.dtsi | |||
@@ -166,6 +166,15 @@ | |||
166 | reg = <0x9000 0x100>; | 166 | reg = <0x9000 0x100>; |
167 | st,bank-name = "PIO31"; | 167 | st,bank-name = "PIO31"; |
168 | }; | 168 | }; |
169 | |||
170 | serial2-oe { | ||
171 | pinctrl_serial2_oe: serial2-1 { | ||
172 | st,pins { | ||
173 | output-enable = <&PIO11 3 ALT2 OUT>; | ||
174 | }; | ||
175 | }; | ||
176 | }; | ||
177 | |||
169 | }; | 178 | }; |
170 | 179 | ||
171 | pin-controller-rear { | 180 | pin-controller-rear { |
@@ -218,7 +227,6 @@ | |||
218 | st,pins { | 227 | st,pins { |
219 | tx = <&PIO17 4 ALT2 OUT>; | 228 | tx = <&PIO17 4 ALT2 OUT>; |
220 | rx = <&PIO17 5 ALT2 IN>; | 229 | rx = <&PIO17 5 ALT2 IN>; |
221 | output-enable = <&PIO11 3 ALT2 OUT>; | ||
222 | }; | 230 | }; |
223 | }; | 231 | }; |
224 | }; | 232 | }; |
diff --git a/arch/arm/boot/dts/stih416.dtsi b/arch/arm/boot/dts/stih416.dtsi index 3cecd9689a49..1a0326ea7d07 100644 --- a/arch/arm/boot/dts/stih416.dtsi +++ b/arch/arm/boot/dts/stih416.dtsi | |||
@@ -79,7 +79,7 @@ | |||
79 | interrupts = <0 197 0>; | 79 | interrupts = <0 197 0>; |
80 | clocks = <&CLK_S_ICN_REG_0>; | 80 | clocks = <&CLK_S_ICN_REG_0>; |
81 | pinctrl-names = "default"; | 81 | pinctrl-names = "default"; |
82 | pinctrl-0 = <&pinctrl_serial2>; | 82 | pinctrl-0 = <&pinctrl_serial2 &pinctrl_serial2_oe>; |
83 | }; | 83 | }; |
84 | 84 | ||
85 | /* SBC_UART1 */ | 85 | /* SBC_UART1 */ |
diff --git a/arch/arm/boot/dts/stih41x.dtsi b/arch/arm/boot/dts/stih41x.dtsi index 7321403cab8a..f5b9898d9c6e 100644 --- a/arch/arm/boot/dts/stih41x.dtsi +++ b/arch/arm/boot/dts/stih41x.dtsi | |||
@@ -6,10 +6,12 @@ | |||
6 | #address-cells = <1>; | 6 | #address-cells = <1>; |
7 | #size-cells = <0>; | 7 | #size-cells = <0>; |
8 | cpu@0 { | 8 | cpu@0 { |
9 | device_type = "cpu"; | ||
9 | compatible = "arm,cortex-a9"; | 10 | compatible = "arm,cortex-a9"; |
10 | reg = <0>; | 11 | reg = <0>; |
11 | }; | 12 | }; |
12 | cpu@1 { | 13 | cpu@1 { |
14 | device_type = "cpu"; | ||
13 | compatible = "arm,cortex-a9"; | 15 | compatible = "arm,cortex-a9"; |
14 | reg = <1>; | 16 | reg = <1>; |
15 | }; | 17 | }; |
diff --git a/arch/arm/boot/dts/tegra20-colibri-512.dtsi b/arch/arm/boot/dts/tegra20-colibri-512.dtsi index 2fcb3f2ca160..5592be6f2f7a 100644 --- a/arch/arm/boot/dts/tegra20-colibri-512.dtsi +++ b/arch/arm/boot/dts/tegra20-colibri-512.dtsi | |||
@@ -457,6 +457,7 @@ | |||
457 | }; | 457 | }; |
458 | 458 | ||
459 | usb-phy@c5004000 { | 459 | usb-phy@c5004000 { |
460 | status = "okay"; | ||
460 | nvidia,phy-reset-gpio = <&gpio TEGRA_GPIO(V, 1) | 461 | nvidia,phy-reset-gpio = <&gpio TEGRA_GPIO(V, 1) |
461 | GPIO_ACTIVE_LOW>; | 462 | GPIO_ACTIVE_LOW>; |
462 | }; | 463 | }; |
diff --git a/arch/arm/boot/dts/tegra20-seaboard.dts b/arch/arm/boot/dts/tegra20-seaboard.dts index 365760b33a26..40e6fb280333 100644 --- a/arch/arm/boot/dts/tegra20-seaboard.dts +++ b/arch/arm/boot/dts/tegra20-seaboard.dts | |||
@@ -830,6 +830,8 @@ | |||
830 | regulator-max-microvolt = <5000000>; | 830 | regulator-max-microvolt = <5000000>; |
831 | enable-active-high; | 831 | enable-active-high; |
832 | gpio = <&gpio 24 0>; /* PD0 */ | 832 | gpio = <&gpio 24 0>; /* PD0 */ |
833 | regulator-always-on; | ||
834 | regulator-boot-on; | ||
833 | }; | 835 | }; |
834 | }; | 836 | }; |
835 | 837 | ||
diff --git a/arch/arm/boot/dts/tegra20-trimslice.dts b/arch/arm/boot/dts/tegra20-trimslice.dts index ed4b901b0227..37c93d3c4812 100644 --- a/arch/arm/boot/dts/tegra20-trimslice.dts +++ b/arch/arm/boot/dts/tegra20-trimslice.dts | |||
@@ -412,6 +412,8 @@ | |||
412 | regulator-max-microvolt = <5000000>; | 412 | regulator-max-microvolt = <5000000>; |
413 | enable-active-high; | 413 | enable-active-high; |
414 | gpio = <&gpio 170 0>; /* PV2 */ | 414 | gpio = <&gpio 170 0>; /* PV2 */ |
415 | regulator-always-on; | ||
416 | regulator-boot-on; | ||
415 | }; | 417 | }; |
416 | }; | 418 | }; |
417 | 419 | ||
diff --git a/arch/arm/boot/dts/tegra20-whistler.dts b/arch/arm/boot/dts/tegra20-whistler.dts index ab67c94db280..a3d0ebad78a1 100644 --- a/arch/arm/boot/dts/tegra20-whistler.dts +++ b/arch/arm/boot/dts/tegra20-whistler.dts | |||
@@ -588,6 +588,8 @@ | |||
588 | regulator-max-microvolt = <5000000>; | 588 | regulator-max-microvolt = <5000000>; |
589 | enable-active-high; | 589 | enable-active-high; |
590 | gpio = <&tca6416 0 0>; /* GPIO_PMU0 */ | 590 | gpio = <&tca6416 0 0>; /* GPIO_PMU0 */ |
591 | regulator-always-on; | ||
592 | regulator-boot-on; | ||
591 | }; | 593 | }; |
592 | 594 | ||
593 | vbus3_reg: regulator@3 { | 595 | vbus3_reg: regulator@3 { |
@@ -598,6 +600,8 @@ | |||
598 | regulator-max-microvolt = <5000000>; | 600 | regulator-max-microvolt = <5000000>; |
599 | enable-active-high; | 601 | enable-active-high; |
600 | gpio = <&tca6416 1 0>; /* GPIO_PMU1 */ | 602 | gpio = <&tca6416 1 0>; /* GPIO_PMU1 */ |
603 | regulator-always-on; | ||
604 | regulator-boot-on; | ||
601 | }; | 605 | }; |
602 | }; | 606 | }; |
603 | 607 | ||
diff --git a/arch/arm/boot/dts/twl4030.dtsi b/arch/arm/boot/dts/twl4030.dtsi index b3034da00a37..ae6a17aed9ee 100644 --- a/arch/arm/boot/dts/twl4030.dtsi +++ b/arch/arm/boot/dts/twl4030.dtsi | |||
@@ -47,6 +47,12 @@ | |||
47 | regulator-max-microvolt = <3150000>; | 47 | regulator-max-microvolt = <3150000>; |
48 | }; | 48 | }; |
49 | 49 | ||
50 | vmmc2: regulator-vmmc2 { | ||
51 | compatible = "ti,twl4030-vmmc2"; | ||
52 | regulator-min-microvolt = <1850000>; | ||
53 | regulator-max-microvolt = <3150000>; | ||
54 | }; | ||
55 | |||
50 | vusb1v5: regulator-vusb1v5 { | 56 | vusb1v5: regulator-vusb1v5 { |
51 | compatible = "ti,twl4030-vusb1v5"; | 57 | compatible = "ti,twl4030-vusb1v5"; |
52 | }; | 58 | }; |
diff --git a/arch/arm/boot/dts/vf610.dtsi b/arch/arm/boot/dts/vf610.dtsi index e1eb7dadda80..67d929cf9804 100644 --- a/arch/arm/boot/dts/vf610.dtsi +++ b/arch/arm/boot/dts/vf610.dtsi | |||
@@ -442,8 +442,8 @@ | |||
442 | compatible = "fsl,mvf600-fec"; | 442 | compatible = "fsl,mvf600-fec"; |
443 | reg = <0x400d0000 0x1000>; | 443 | reg = <0x400d0000 0x1000>; |
444 | interrupts = <0 78 0x04>; | 444 | interrupts = <0 78 0x04>; |
445 | clocks = <&clks VF610_CLK_ENET>, | 445 | clocks = <&clks VF610_CLK_ENET0>, |
446 | <&clks VF610_CLK_ENET>, | 446 | <&clks VF610_CLK_ENET0>, |
447 | <&clks VF610_CLK_ENET>; | 447 | <&clks VF610_CLK_ENET>; |
448 | clock-names = "ipg", "ahb", "ptp"; | 448 | clock-names = "ipg", "ahb", "ptp"; |
449 | status = "disabled"; | 449 | status = "disabled"; |
@@ -453,8 +453,8 @@ | |||
453 | compatible = "fsl,mvf600-fec"; | 453 | compatible = "fsl,mvf600-fec"; |
454 | reg = <0x400d1000 0x1000>; | 454 | reg = <0x400d1000 0x1000>; |
455 | interrupts = <0 79 0x04>; | 455 | interrupts = <0 79 0x04>; |
456 | clocks = <&clks VF610_CLK_ENET>, | 456 | clocks = <&clks VF610_CLK_ENET1>, |
457 | <&clks VF610_CLK_ENET>, | 457 | <&clks VF610_CLK_ENET1>, |
458 | <&clks VF610_CLK_ENET>; | 458 | <&clks VF610_CLK_ENET>; |
459 | clock-names = "ipg", "ahb", "ptp"; | 459 | clock-names = "ipg", "ahb", "ptp"; |
460 | status = "disabled"; | 460 | status = "disabled"; |
diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c index a432e6c1dac1..39ad030ac0c7 100644 --- a/arch/arm/common/edma.c +++ b/arch/arm/common/edma.c | |||
@@ -26,7 +26,6 @@ | |||
26 | #include <linux/io.h> | 26 | #include <linux/io.h> |
27 | #include <linux/slab.h> | 27 | #include <linux/slab.h> |
28 | #include <linux/edma.h> | 28 | #include <linux/edma.h> |
29 | #include <linux/err.h> | ||
30 | #include <linux/of_address.h> | 29 | #include <linux/of_address.h> |
31 | #include <linux/of_device.h> | 30 | #include <linux/of_device.h> |
32 | #include <linux/of_dma.h> | 31 | #include <linux/of_dma.h> |
diff --git a/arch/arm/common/mcpm_platsmp.c b/arch/arm/common/mcpm_platsmp.c index 510e5b13aa2e..1bc34c7567fd 100644 --- a/arch/arm/common/mcpm_platsmp.c +++ b/arch/arm/common/mcpm_platsmp.c | |||
@@ -19,7 +19,7 @@ | |||
19 | #include <asm/smp.h> | 19 | #include <asm/smp.h> |
20 | #include <asm/smp_plat.h> | 20 | #include <asm/smp_plat.h> |
21 | 21 | ||
22 | static int __cpuinit mcpm_boot_secondary(unsigned int cpu, struct task_struct *idle) | 22 | static int mcpm_boot_secondary(unsigned int cpu, struct task_struct *idle) |
23 | { | 23 | { |
24 | unsigned int mpidr, pcpu, pcluster, ret; | 24 | unsigned int mpidr, pcpu, pcluster, ret; |
25 | extern void secondary_startup(void); | 25 | extern void secondary_startup(void); |
@@ -40,7 +40,7 @@ static int __cpuinit mcpm_boot_secondary(unsigned int cpu, struct task_struct *i | |||
40 | return 0; | 40 | return 0; |
41 | } | 41 | } |
42 | 42 | ||
43 | static void __cpuinit mcpm_secondary_init(unsigned int cpu) | 43 | static void mcpm_secondary_init(unsigned int cpu) |
44 | { | 44 | { |
45 | mcpm_cpu_powered_up(); | 45 | mcpm_cpu_powered_up(); |
46 | } | 46 | } |
diff --git a/arch/arm/configs/da8xx_omapl_defconfig b/arch/arm/configs/da8xx_omapl_defconfig index 7c868139bdb0..1571bea48bed 100644 --- a/arch/arm/configs/da8xx_omapl_defconfig +++ b/arch/arm/configs/da8xx_omapl_defconfig | |||
@@ -102,6 +102,8 @@ CONFIG_SND_SOC=m | |||
102 | CONFIG_SND_DAVINCI_SOC=m | 102 | CONFIG_SND_DAVINCI_SOC=m |
103 | # CONFIG_HID_SUPPORT is not set | 103 | # CONFIG_HID_SUPPORT is not set |
104 | # CONFIG_USB_SUPPORT is not set | 104 | # CONFIG_USB_SUPPORT is not set |
105 | CONFIG_DMADEVICES=y | ||
106 | CONFIG_TI_EDMA=y | ||
105 | CONFIG_EXT2_FS=y | 107 | CONFIG_EXT2_FS=y |
106 | CONFIG_EXT3_FS=y | 108 | CONFIG_EXT3_FS=y |
107 | CONFIG_XFS_FS=m | 109 | CONFIG_XFS_FS=m |
diff --git a/arch/arm/configs/davinci_all_defconfig b/arch/arm/configs/davinci_all_defconfig index c86fd75e181a..ab2f7378352c 100644 --- a/arch/arm/configs/davinci_all_defconfig +++ b/arch/arm/configs/davinci_all_defconfig | |||
@@ -162,6 +162,8 @@ CONFIG_LEDS_TRIGGERS=y | |||
162 | CONFIG_LEDS_TRIGGER_TIMER=m | 162 | CONFIG_LEDS_TRIGGER_TIMER=m |
163 | CONFIG_LEDS_TRIGGER_HEARTBEAT=m | 163 | CONFIG_LEDS_TRIGGER_HEARTBEAT=m |
164 | CONFIG_RTC_CLASS=y | 164 | CONFIG_RTC_CLASS=y |
165 | CONFIG_DMADEVICES=y | ||
166 | CONFIG_TI_EDMA=y | ||
165 | CONFIG_EXT2_FS=y | 167 | CONFIG_EXT2_FS=y |
166 | CONFIG_EXT3_FS=y | 168 | CONFIG_EXT3_FS=y |
167 | CONFIG_XFS_FS=m | 169 | CONFIG_XFS_FS=m |
diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig index fe0bdc361d2c..6e572c64cf5a 100644 --- a/arch/arm/configs/multi_v7_defconfig +++ b/arch/arm/configs/multi_v7_defconfig | |||
@@ -53,6 +53,7 @@ CONFIG_IP_PNP=y | |||
53 | CONFIG_IP_PNP_DHCP=y | 53 | CONFIG_IP_PNP_DHCP=y |
54 | CONFIG_DEVTMPFS=y | 54 | CONFIG_DEVTMPFS=y |
55 | CONFIG_DEVTMPFS_MOUNT=y | 55 | CONFIG_DEVTMPFS_MOUNT=y |
56 | CONFIG_OMAP_OCP2SCP=y | ||
56 | CONFIG_BLK_DEV_SD=y | 57 | CONFIG_BLK_DEV_SD=y |
57 | CONFIG_ATA=y | 58 | CONFIG_ATA=y |
58 | CONFIG_SATA_AHCI_PLATFORM=y | 59 | CONFIG_SATA_AHCI_PLATFORM=y |
@@ -61,6 +62,7 @@ CONFIG_SATA_MV=y | |||
61 | CONFIG_NETDEVICES=y | 62 | CONFIG_NETDEVICES=y |
62 | CONFIG_SUN4I_EMAC=y | 63 | CONFIG_SUN4I_EMAC=y |
63 | CONFIG_NET_CALXEDA_XGMAC=y | 64 | CONFIG_NET_CALXEDA_XGMAC=y |
65 | CONFIG_KS8851=y | ||
64 | CONFIG_SMSC911X=y | 66 | CONFIG_SMSC911X=y |
65 | CONFIG_STMMAC_ETH=y | 67 | CONFIG_STMMAC_ETH=y |
66 | CONFIG_MDIO_SUN4I=y | 68 | CONFIG_MDIO_SUN4I=y |
@@ -89,6 +91,7 @@ CONFIG_I2C_DESIGNWARE_PLATFORM=y | |||
89 | CONFIG_I2C_SIRF=y | 91 | CONFIG_I2C_SIRF=y |
90 | CONFIG_I2C_TEGRA=y | 92 | CONFIG_I2C_TEGRA=y |
91 | CONFIG_SPI=y | 93 | CONFIG_SPI=y |
94 | CONFIG_SPI_OMAP24XX=y | ||
92 | CONFIG_SPI_PL022=y | 95 | CONFIG_SPI_PL022=y |
93 | CONFIG_SPI_SIRF=y | 96 | CONFIG_SPI_SIRF=y |
94 | CONFIG_SPI_TEGRA114=y | 97 | CONFIG_SPI_TEGRA114=y |
@@ -111,11 +114,12 @@ CONFIG_FB_SIMPLE=y | |||
111 | CONFIG_USB=y | 114 | CONFIG_USB=y |
112 | CONFIG_USB_XHCI_HCD=y | 115 | CONFIG_USB_XHCI_HCD=y |
113 | CONFIG_USB_EHCI_HCD=y | 116 | CONFIG_USB_EHCI_HCD=y |
114 | CONFIG_USB_EHCI_MXC=y | ||
115 | CONFIG_USB_EHCI_TEGRA=y | 117 | CONFIG_USB_EHCI_TEGRA=y |
116 | CONFIG_USB_EHCI_HCD_PLATFORM=y | 118 | CONFIG_USB_EHCI_HCD_PLATFORM=y |
117 | CONFIG_USB_ISP1760_HCD=y | 119 | CONFIG_USB_ISP1760_HCD=y |
118 | CONFIG_USB_STORAGE=y | 120 | CONFIG_USB_STORAGE=y |
121 | CONFIG_USB_CHIPIDEA=y | ||
122 | CONFIG_USB_CHIPIDEA_HOST=y | ||
119 | CONFIG_AB8500_USB=y | 123 | CONFIG_AB8500_USB=y |
120 | CONFIG_NOP_USB_XCEIV=y | 124 | CONFIG_NOP_USB_XCEIV=y |
121 | CONFIG_OMAP_USB2=y | 125 | CONFIG_OMAP_USB2=y |
diff --git a/arch/arm/configs/nhk8815_defconfig b/arch/arm/configs/nhk8815_defconfig index 35f8cf299fa2..263ae3869e32 100644 --- a/arch/arm/configs/nhk8815_defconfig +++ b/arch/arm/configs/nhk8815_defconfig | |||
@@ -1,6 +1,8 @@ | |||
1 | # CONFIG_LOCALVERSION_AUTO is not set | 1 | # CONFIG_LOCALVERSION_AUTO is not set |
2 | # CONFIG_SWAP is not set | 2 | # CONFIG_SWAP is not set |
3 | CONFIG_SYSVIPC=y | 3 | CONFIG_SYSVIPC=y |
4 | CONFIG_NO_HZ_IDLE=y | ||
5 | CONFIG_HIGH_RES_TIMERS=y | ||
4 | CONFIG_IKCONFIG=y | 6 | CONFIG_IKCONFIG=y |
5 | CONFIG_IKCONFIG_PROC=y | 7 | CONFIG_IKCONFIG_PROC=y |
6 | CONFIG_LOG_BUF_SHIFT=14 | 8 | CONFIG_LOG_BUF_SHIFT=14 |
@@ -48,7 +50,6 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | |||
48 | CONFIG_MTD=y | 50 | CONFIG_MTD=y |
49 | CONFIG_MTD_TESTS=m | 51 | CONFIG_MTD_TESTS=m |
50 | CONFIG_MTD_CMDLINE_PARTS=y | 52 | CONFIG_MTD_CMDLINE_PARTS=y |
51 | CONFIG_MTD_CHAR=y | ||
52 | CONFIG_MTD_BLOCK=y | 53 | CONFIG_MTD_BLOCK=y |
53 | CONFIG_MTD_NAND_ECC_SMC=y | 54 | CONFIG_MTD_NAND_ECC_SMC=y |
54 | CONFIG_MTD_NAND=y | 55 | CONFIG_MTD_NAND=y |
@@ -94,8 +95,10 @@ CONFIG_I2C_GPIO=y | |||
94 | CONFIG_I2C_NOMADIK=y | 95 | CONFIG_I2C_NOMADIK=y |
95 | CONFIG_DEBUG_GPIO=y | 96 | CONFIG_DEBUG_GPIO=y |
96 | # CONFIG_HWMON is not set | 97 | # CONFIG_HWMON is not set |
98 | CONFIG_REGULATOR=y | ||
97 | CONFIG_MMC=y | 99 | CONFIG_MMC=y |
98 | CONFIG_MMC_CLKGATE=y | 100 | CONFIG_MMC_UNSAFE_RESUME=y |
101 | # CONFIG_MMC_BLOCK_BOUNCE is not set | ||
99 | CONFIG_MMC_ARMMMCI=y | 102 | CONFIG_MMC_ARMMMCI=y |
100 | CONFIG_NEW_LEDS=y | 103 | CONFIG_NEW_LEDS=y |
101 | CONFIG_LEDS_CLASS=y | 104 | CONFIG_LEDS_CLASS=y |
diff --git a/arch/arm/include/asm/a.out-core.h b/arch/arm/include/asm/a.out-core.h deleted file mode 100644 index 92f10cb5c70c..000000000000 --- a/arch/arm/include/asm/a.out-core.h +++ /dev/null | |||
@@ -1,45 +0,0 @@ | |||
1 | /* a.out coredump register dumper | ||
2 | * | ||
3 | * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. | ||
4 | * Written by David Howells (dhowells@redhat.com) | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or | ||
7 | * modify it under the terms of the GNU General Public Licence | ||
8 | * as published by the Free Software Foundation; either version | ||
9 | * 2 of the Licence, or (at your option) any later version. | ||
10 | */ | ||
11 | |||
12 | #ifndef _ASM_A_OUT_CORE_H | ||
13 | #define _ASM_A_OUT_CORE_H | ||
14 | |||
15 | #ifdef __KERNEL__ | ||
16 | |||
17 | #include <linux/user.h> | ||
18 | #include <linux/elfcore.h> | ||
19 | |||
20 | /* | ||
21 | * fill in the user structure for an a.out core dump | ||
22 | */ | ||
23 | static inline void aout_dump_thread(struct pt_regs *regs, struct user *dump) | ||
24 | { | ||
25 | struct task_struct *tsk = current; | ||
26 | |||
27 | dump->magic = CMAGIC; | ||
28 | dump->start_code = tsk->mm->start_code; | ||
29 | dump->start_stack = regs->ARM_sp & ~(PAGE_SIZE - 1); | ||
30 | |||
31 | dump->u_tsize = (tsk->mm->end_code - tsk->mm->start_code) >> PAGE_SHIFT; | ||
32 | dump->u_dsize = (tsk->mm->brk - tsk->mm->start_data + PAGE_SIZE - 1) >> PAGE_SHIFT; | ||
33 | dump->u_ssize = 0; | ||
34 | |||
35 | memset(dump->u_debugreg, 0, sizeof(dump->u_debugreg)); | ||
36 | |||
37 | if (dump->start_stack < 0x04000000) | ||
38 | dump->u_ssize = (0x04000000 - dump->start_stack) >> PAGE_SHIFT; | ||
39 | |||
40 | dump->regs = *regs; | ||
41 | dump->u_fpvalid = dump_fpu (regs, &dump->u_fp); | ||
42 | } | ||
43 | |||
44 | #endif /* __KERNEL__ */ | ||
45 | #endif /* _ASM_A_OUT_CORE_H */ | ||
diff --git a/arch/arm/include/asm/arch_timer.h b/arch/arm/include/asm/arch_timer.h index accefe099182..e406d575c94f 100644 --- a/arch/arm/include/asm/arch_timer.h +++ b/arch/arm/include/asm/arch_timer.h | |||
@@ -89,7 +89,7 @@ static inline u64 arch_counter_get_cntvct(void) | |||
89 | return cval; | 89 | return cval; |
90 | } | 90 | } |
91 | 91 | ||
92 | static inline void __cpuinit arch_counter_set_user_access(void) | 92 | static inline void arch_counter_set_user_access(void) |
93 | { | 93 | { |
94 | u32 cntkctl; | 94 | u32 cntkctl; |
95 | 95 | ||
diff --git a/arch/arm/include/asm/cputype.h b/arch/arm/include/asm/cputype.h index 8c25dc4e9851..9672e978d50d 100644 --- a/arch/arm/include/asm/cputype.h +++ b/arch/arm/include/asm/cputype.h | |||
@@ -89,13 +89,18 @@ extern unsigned int processor_id; | |||
89 | __val; \ | 89 | __val; \ |
90 | }) | 90 | }) |
91 | 91 | ||
92 | /* | ||
93 | * The memory clobber prevents gcc 4.5 from reordering the mrc before | ||
94 | * any is_smp() tests, which can cause undefined instruction aborts on | ||
95 | * ARM1136 r0 due to the missing extended CP15 registers. | ||
96 | */ | ||
92 | #define read_cpuid_ext(ext_reg) \ | 97 | #define read_cpuid_ext(ext_reg) \ |
93 | ({ \ | 98 | ({ \ |
94 | unsigned int __val; \ | 99 | unsigned int __val; \ |
95 | asm("mrc p15, 0, %0, c0, " ext_reg \ | 100 | asm("mrc p15, 0, %0, c0, " ext_reg \ |
96 | : "=r" (__val) \ | 101 | : "=r" (__val) \ |
97 | : \ | 102 | : \ |
98 | : "cc"); \ | 103 | : "memory"); \ |
99 | __val; \ | 104 | __val; \ |
100 | }) | 105 | }) |
101 | 106 | ||
diff --git a/arch/arm/include/asm/elf.h b/arch/arm/include/asm/elf.h index 38050b1c4800..56211f2084ef 100644 --- a/arch/arm/include/asm/elf.h +++ b/arch/arm/include/asm/elf.h | |||
@@ -130,4 +130,10 @@ struct mm_struct; | |||
130 | extern unsigned long arch_randomize_brk(struct mm_struct *mm); | 130 | extern unsigned long arch_randomize_brk(struct mm_struct *mm); |
131 | #define arch_randomize_brk arch_randomize_brk | 131 | #define arch_randomize_brk arch_randomize_brk |
132 | 132 | ||
133 | #ifdef CONFIG_MMU | ||
134 | #define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1 | ||
135 | struct linux_binprm; | ||
136 | int arch_setup_additional_pages(struct linux_binprm *, int); | ||
137 | #endif | ||
138 | |||
133 | #endif | 139 | #endif |
diff --git a/arch/arm/include/asm/mmu.h b/arch/arm/include/asm/mmu.h index e3d55547e755..6f18da09668b 100644 --- a/arch/arm/include/asm/mmu.h +++ b/arch/arm/include/asm/mmu.h | |||
@@ -6,8 +6,11 @@ | |||
6 | typedef struct { | 6 | typedef struct { |
7 | #ifdef CONFIG_CPU_HAS_ASID | 7 | #ifdef CONFIG_CPU_HAS_ASID |
8 | atomic64_t id; | 8 | atomic64_t id; |
9 | #else | ||
10 | int switch_pending; | ||
9 | #endif | 11 | #endif |
10 | unsigned int vmalloc_seq; | 12 | unsigned int vmalloc_seq; |
13 | unsigned long sigpage; | ||
11 | } mm_context_t; | 14 | } mm_context_t; |
12 | 15 | ||
13 | #ifdef CONFIG_CPU_HAS_ASID | 16 | #ifdef CONFIG_CPU_HAS_ASID |
diff --git a/arch/arm/include/asm/mmu_context.h b/arch/arm/include/asm/mmu_context.h index b5792b7fd8d3..9b32f76bb0dd 100644 --- a/arch/arm/include/asm/mmu_context.h +++ b/arch/arm/include/asm/mmu_context.h | |||
@@ -56,7 +56,7 @@ static inline void check_and_switch_context(struct mm_struct *mm, | |||
56 | * on non-ASID CPUs, the old mm will remain valid until the | 56 | * on non-ASID CPUs, the old mm will remain valid until the |
57 | * finish_arch_post_lock_switch() call. | 57 | * finish_arch_post_lock_switch() call. |
58 | */ | 58 | */ |
59 | set_ti_thread_flag(task_thread_info(tsk), TIF_SWITCH_MM); | 59 | mm->context.switch_pending = 1; |
60 | else | 60 | else |
61 | cpu_switch_mm(mm->pgd, mm); | 61 | cpu_switch_mm(mm->pgd, mm); |
62 | } | 62 | } |
@@ -65,9 +65,21 @@ static inline void check_and_switch_context(struct mm_struct *mm, | |||
65 | finish_arch_post_lock_switch | 65 | finish_arch_post_lock_switch |
66 | static inline void finish_arch_post_lock_switch(void) | 66 | static inline void finish_arch_post_lock_switch(void) |
67 | { | 67 | { |
68 | if (test_and_clear_thread_flag(TIF_SWITCH_MM)) { | 68 | struct mm_struct *mm = current->mm; |
69 | struct mm_struct *mm = current->mm; | 69 | |
70 | cpu_switch_mm(mm->pgd, mm); | 70 | if (mm && mm->context.switch_pending) { |
71 | /* | ||
72 | * Preemption must be disabled during cpu_switch_mm() as we | ||
73 | * have some stateful cache flush implementations. Check | ||
74 | * switch_pending again in case we were preempted and the | ||
75 | * switch to this mm was already done. | ||
76 | */ | ||
77 | preempt_disable(); | ||
78 | if (mm->context.switch_pending) { | ||
79 | mm->context.switch_pending = 0; | ||
80 | cpu_switch_mm(mm->pgd, mm); | ||
81 | } | ||
82 | preempt_enable_no_resched(); | ||
71 | } | 83 | } |
72 | } | 84 | } |
73 | 85 | ||
diff --git a/arch/arm/include/asm/page.h b/arch/arm/include/asm/page.h index 6363f3d1d505..4355f0ec44d6 100644 --- a/arch/arm/include/asm/page.h +++ b/arch/arm/include/asm/page.h | |||
@@ -142,7 +142,9 @@ extern void __cpu_copy_user_highpage(struct page *to, struct page *from, | |||
142 | #define clear_page(page) memset((void *)(page), 0, PAGE_SIZE) | 142 | #define clear_page(page) memset((void *)(page), 0, PAGE_SIZE) |
143 | extern void copy_page(void *to, const void *from); | 143 | extern void copy_page(void *to, const void *from); |
144 | 144 | ||
145 | #ifdef CONFIG_KUSER_HELPERS | ||
145 | #define __HAVE_ARCH_GATE_AREA 1 | 146 | #define __HAVE_ARCH_GATE_AREA 1 |
147 | #endif | ||
146 | 148 | ||
147 | #ifdef CONFIG_ARM_LPAE | 149 | #ifdef CONFIG_ARM_LPAE |
148 | #include <asm/pgtable-3level-types.h> | 150 | #include <asm/pgtable-3level-types.h> |
diff --git a/arch/arm/include/asm/processor.h b/arch/arm/include/asm/processor.h index 06e7d509eaac..413f3876341c 100644 --- a/arch/arm/include/asm/processor.h +++ b/arch/arm/include/asm/processor.h | |||
@@ -54,7 +54,6 @@ struct thread_struct { | |||
54 | 54 | ||
55 | #define start_thread(regs,pc,sp) \ | 55 | #define start_thread(regs,pc,sp) \ |
56 | ({ \ | 56 | ({ \ |
57 | unsigned long *stack = (unsigned long *)sp; \ | ||
58 | memset(regs->uregs, 0, sizeof(regs->uregs)); \ | 57 | memset(regs->uregs, 0, sizeof(regs->uregs)); \ |
59 | if (current->personality & ADDR_LIMIT_32BIT) \ | 58 | if (current->personality & ADDR_LIMIT_32BIT) \ |
60 | regs->ARM_cpsr = USR_MODE; \ | 59 | regs->ARM_cpsr = USR_MODE; \ |
@@ -65,9 +64,6 @@ struct thread_struct { | |||
65 | regs->ARM_cpsr |= PSR_ENDSTATE; \ | 64 | regs->ARM_cpsr |= PSR_ENDSTATE; \ |
66 | regs->ARM_pc = pc & ~1; /* pc */ \ | 65 | regs->ARM_pc = pc & ~1; /* pc */ \ |
67 | regs->ARM_sp = sp; /* sp */ \ | 66 | regs->ARM_sp = sp; /* sp */ \ |
68 | regs->ARM_r2 = stack[2]; /* r2 (envp) */ \ | ||
69 | regs->ARM_r1 = stack[1]; /* r1 (argv) */ \ | ||
70 | regs->ARM_r0 = stack[0]; /* r0 (argc) */ \ | ||
71 | nommu_start_thread(regs); \ | 67 | nommu_start_thread(regs); \ |
72 | }) | 68 | }) |
73 | 69 | ||
diff --git a/arch/arm/include/asm/smp_plat.h b/arch/arm/include/asm/smp_plat.h index 6462a721ebd4..a252c0bfacf5 100644 --- a/arch/arm/include/asm/smp_plat.h +++ b/arch/arm/include/asm/smp_plat.h | |||
@@ -88,4 +88,7 @@ static inline u32 mpidr_hash_size(void) | |||
88 | { | 88 | { |
89 | return 1 << mpidr_hash.bits; | 89 | return 1 << mpidr_hash.bits; |
90 | } | 90 | } |
91 | |||
92 | extern int platform_can_cpu_hotplug(void); | ||
93 | |||
91 | #endif | 94 | #endif |
diff --git a/arch/arm/include/asm/spinlock.h b/arch/arm/include/asm/spinlock.h index f8b8965666e9..b07c09e5a0ac 100644 --- a/arch/arm/include/asm/spinlock.h +++ b/arch/arm/include/asm/spinlock.h | |||
@@ -107,7 +107,7 @@ static inline int arch_spin_trylock(arch_spinlock_t *lock) | |||
107 | " subs %1, %0, %0, ror #16\n" | 107 | " subs %1, %0, %0, ror #16\n" |
108 | " addeq %0, %0, %4\n" | 108 | " addeq %0, %0, %4\n" |
109 | " strexeq %2, %0, [%3]" | 109 | " strexeq %2, %0, [%3]" |
110 | : "=&r" (slock), "=&r" (contended), "=r" (res) | 110 | : "=&r" (slock), "=&r" (contended), "=&r" (res) |
111 | : "r" (&lock->slock), "I" (1 << TICKET_SHIFT) | 111 | : "r" (&lock->slock), "I" (1 << TICKET_SHIFT) |
112 | : "cc"); | 112 | : "cc"); |
113 | } while (res); | 113 | } while (res); |
@@ -168,17 +168,20 @@ static inline void arch_write_lock(arch_rwlock_t *rw) | |||
168 | 168 | ||
169 | static inline int arch_write_trylock(arch_rwlock_t *rw) | 169 | static inline int arch_write_trylock(arch_rwlock_t *rw) |
170 | { | 170 | { |
171 | unsigned long tmp; | 171 | unsigned long contended, res; |
172 | 172 | ||
173 | __asm__ __volatile__( | 173 | do { |
174 | " ldrex %0, [%1]\n" | 174 | __asm__ __volatile__( |
175 | " teq %0, #0\n" | 175 | " ldrex %0, [%2]\n" |
176 | " strexeq %0, %2, [%1]" | 176 | " mov %1, #0\n" |
177 | : "=&r" (tmp) | 177 | " teq %0, #0\n" |
178 | : "r" (&rw->lock), "r" (0x80000000) | 178 | " strexeq %1, %3, [%2]" |
179 | : "cc"); | 179 | : "=&r" (contended), "=&r" (res) |
180 | : "r" (&rw->lock), "r" (0x80000000) | ||
181 | : "cc"); | ||
182 | } while (res); | ||
180 | 183 | ||
181 | if (tmp == 0) { | 184 | if (!contended) { |
182 | smp_mb(); | 185 | smp_mb(); |
183 | return 1; | 186 | return 1; |
184 | } else { | 187 | } else { |
@@ -254,18 +257,26 @@ static inline void arch_read_unlock(arch_rwlock_t *rw) | |||
254 | 257 | ||
255 | static inline int arch_read_trylock(arch_rwlock_t *rw) | 258 | static inline int arch_read_trylock(arch_rwlock_t *rw) |
256 | { | 259 | { |
257 | unsigned long tmp, tmp2 = 1; | 260 | unsigned long contended, res; |
258 | 261 | ||
259 | __asm__ __volatile__( | 262 | do { |
260 | " ldrex %0, [%2]\n" | 263 | __asm__ __volatile__( |
261 | " adds %0, %0, #1\n" | 264 | " ldrex %0, [%2]\n" |
262 | " strexpl %1, %0, [%2]\n" | 265 | " mov %1, #0\n" |
263 | : "=&r" (tmp), "+r" (tmp2) | 266 | " adds %0, %0, #1\n" |
264 | : "r" (&rw->lock) | 267 | " strexpl %1, %0, [%2]" |
265 | : "cc"); | 268 | : "=&r" (contended), "=&r" (res) |
269 | : "r" (&rw->lock) | ||
270 | : "cc"); | ||
271 | } while (res); | ||
266 | 272 | ||
267 | smp_mb(); | 273 | /* If the lock is negative, then it is already held for write. */ |
268 | return tmp2 == 0; | 274 | if (contended < 0x80000000) { |
275 | smp_mb(); | ||
276 | return 1; | ||
277 | } else { | ||
278 | return 0; | ||
279 | } | ||
269 | } | 280 | } |
270 | 281 | ||
271 | /* read_can_lock - would read_trylock() succeed? */ | 282 | /* read_can_lock - would read_trylock() succeed? */ |
diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h index 214d4158089a..2b8114fcba09 100644 --- a/arch/arm/include/asm/thread_info.h +++ b/arch/arm/include/asm/thread_info.h | |||
@@ -156,7 +156,6 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *, | |||
156 | #define TIF_USING_IWMMXT 17 | 156 | #define TIF_USING_IWMMXT 17 |
157 | #define TIF_MEMDIE 18 /* is terminating due to OOM killer */ | 157 | #define TIF_MEMDIE 18 /* is terminating due to OOM killer */ |
158 | #define TIF_RESTORE_SIGMASK 20 | 158 | #define TIF_RESTORE_SIGMASK 20 |
159 | #define TIF_SWITCH_MM 22 /* deferred switch_mm */ | ||
160 | 159 | ||
161 | #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) | 160 | #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) |
162 | #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) | 161 | #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) |
diff --git a/arch/arm/include/asm/tlb.h b/arch/arm/include/asm/tlb.h index 46e7cfb3e721..0baf7f0d9394 100644 --- a/arch/arm/include/asm/tlb.h +++ b/arch/arm/include/asm/tlb.h | |||
@@ -43,6 +43,7 @@ struct mmu_gather { | |||
43 | struct mm_struct *mm; | 43 | struct mm_struct *mm; |
44 | unsigned int fullmm; | 44 | unsigned int fullmm; |
45 | struct vm_area_struct *vma; | 45 | struct vm_area_struct *vma; |
46 | unsigned long start, end; | ||
46 | unsigned long range_start; | 47 | unsigned long range_start; |
47 | unsigned long range_end; | 48 | unsigned long range_end; |
48 | unsigned int nr; | 49 | unsigned int nr; |
@@ -107,10 +108,12 @@ static inline void tlb_flush_mmu(struct mmu_gather *tlb) | |||
107 | } | 108 | } |
108 | 109 | ||
109 | static inline void | 110 | static inline void |
110 | tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, unsigned int fullmm) | 111 | tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, unsigned long start, unsigned long end) |
111 | { | 112 | { |
112 | tlb->mm = mm; | 113 | tlb->mm = mm; |
113 | tlb->fullmm = fullmm; | 114 | tlb->fullmm = !(start | (end+1)); |
115 | tlb->start = start; | ||
116 | tlb->end = end; | ||
114 | tlb->vma = NULL; | 117 | tlb->vma = NULL; |
115 | tlb->max = ARRAY_SIZE(tlb->local); | 118 | tlb->max = ARRAY_SIZE(tlb->local); |
116 | tlb->pages = tlb->local; | 119 | tlb->pages = tlb->local; |
diff --git a/arch/arm/include/asm/tlbflush.h b/arch/arm/include/asm/tlbflush.h index fdbb9e369745..f467e9b3f8d5 100644 --- a/arch/arm/include/asm/tlbflush.h +++ b/arch/arm/include/asm/tlbflush.h | |||
@@ -443,7 +443,18 @@ static inline void local_flush_bp_all(void) | |||
443 | isb(); | 443 | isb(); |
444 | } | 444 | } |
445 | 445 | ||
446 | #include <asm/cputype.h> | ||
446 | #ifdef CONFIG_ARM_ERRATA_798181 | 447 | #ifdef CONFIG_ARM_ERRATA_798181 |
448 | static inline int erratum_a15_798181(void) | ||
449 | { | ||
450 | unsigned int midr = read_cpuid_id(); | ||
451 | |||
452 | /* Cortex-A15 r0p0..r3p2 affected */ | ||
453 | if ((midr & 0xff0ffff0) != 0x410fc0f0 || midr > 0x413fc0f2) | ||
454 | return 0; | ||
455 | return 1; | ||
456 | } | ||
457 | |||
447 | static inline void dummy_flush_tlb_a15_erratum(void) | 458 | static inline void dummy_flush_tlb_a15_erratum(void) |
448 | { | 459 | { |
449 | /* | 460 | /* |
@@ -453,6 +464,11 @@ static inline void dummy_flush_tlb_a15_erratum(void) | |||
453 | dsb(); | 464 | dsb(); |
454 | } | 465 | } |
455 | #else | 466 | #else |
467 | static inline int erratum_a15_798181(void) | ||
468 | { | ||
469 | return 0; | ||
470 | } | ||
471 | |||
456 | static inline void dummy_flush_tlb_a15_erratum(void) | 472 | static inline void dummy_flush_tlb_a15_erratum(void) |
457 | { | 473 | { |
458 | } | 474 | } |
diff --git a/arch/arm/include/asm/virt.h b/arch/arm/include/asm/virt.h index 50af92bac737..4371f45c5784 100644 --- a/arch/arm/include/asm/virt.h +++ b/arch/arm/include/asm/virt.h | |||
@@ -29,6 +29,7 @@ | |||
29 | #define BOOT_CPU_MODE_MISMATCH PSR_N_BIT | 29 | #define BOOT_CPU_MODE_MISMATCH PSR_N_BIT |
30 | 30 | ||
31 | #ifndef __ASSEMBLY__ | 31 | #ifndef __ASSEMBLY__ |
32 | #include <asm/cacheflush.h> | ||
32 | 33 | ||
33 | #ifdef CONFIG_ARM_VIRT_EXT | 34 | #ifdef CONFIG_ARM_VIRT_EXT |
34 | /* | 35 | /* |
@@ -41,10 +42,21 @@ | |||
41 | */ | 42 | */ |
42 | extern int __boot_cpu_mode; | 43 | extern int __boot_cpu_mode; |
43 | 44 | ||
45 | static inline void sync_boot_mode(void) | ||
46 | { | ||
47 | /* | ||
48 | * As secondaries write to __boot_cpu_mode with caches disabled, we | ||
49 | * must flush the corresponding cache entries to ensure the visibility | ||
50 | * of their writes. | ||
51 | */ | ||
52 | sync_cache_r(&__boot_cpu_mode); | ||
53 | } | ||
54 | |||
44 | void __hyp_set_vectors(unsigned long phys_vector_base); | 55 | void __hyp_set_vectors(unsigned long phys_vector_base); |
45 | unsigned long __hyp_get_vectors(void); | 56 | unsigned long __hyp_get_vectors(void); |
46 | #else | 57 | #else |
47 | #define __boot_cpu_mode (SVC_MODE) | 58 | #define __boot_cpu_mode (SVC_MODE) |
59 | #define sync_boot_mode() | ||
48 | #endif | 60 | #endif |
49 | 61 | ||
50 | #ifndef ZIMAGE | 62 | #ifndef ZIMAGE |
diff --git a/arch/arm/include/uapi/asm/Kbuild b/arch/arm/include/uapi/asm/Kbuild index 47bcb2d254af..18d76fd5a2af 100644 --- a/arch/arm/include/uapi/asm/Kbuild +++ b/arch/arm/include/uapi/asm/Kbuild | |||
@@ -1,7 +1,6 @@ | |||
1 | # UAPI Header export list | 1 | # UAPI Header export list |
2 | include include/uapi/asm-generic/Kbuild.asm | 2 | include include/uapi/asm-generic/Kbuild.asm |
3 | 3 | ||
4 | header-y += a.out.h | ||
5 | header-y += byteorder.h | 4 | header-y += byteorder.h |
6 | header-y += fcntl.h | 5 | header-y += fcntl.h |
7 | header-y += hwcap.h | 6 | header-y += hwcap.h |
diff --git a/arch/arm/include/uapi/asm/a.out.h b/arch/arm/include/uapi/asm/a.out.h deleted file mode 100644 index 083894b2e3bc..000000000000 --- a/arch/arm/include/uapi/asm/a.out.h +++ /dev/null | |||
@@ -1,34 +0,0 @@ | |||
1 | #ifndef __ARM_A_OUT_H__ | ||
2 | #define __ARM_A_OUT_H__ | ||
3 | |||
4 | #include <linux/personality.h> | ||
5 | #include <linux/types.h> | ||
6 | |||
7 | struct exec | ||
8 | { | ||
9 | __u32 a_info; /* Use macros N_MAGIC, etc for access */ | ||
10 | __u32 a_text; /* length of text, in bytes */ | ||
11 | __u32 a_data; /* length of data, in bytes */ | ||
12 | __u32 a_bss; /* length of uninitialized data area for file, in bytes */ | ||
13 | __u32 a_syms; /* length of symbol table data in file, in bytes */ | ||
14 | __u32 a_entry; /* start address */ | ||
15 | __u32 a_trsize; /* length of relocation info for text, in bytes */ | ||
16 | __u32 a_drsize; /* length of relocation info for data, in bytes */ | ||
17 | }; | ||
18 | |||
19 | /* | ||
20 | * This is always the same | ||
21 | */ | ||
22 | #define N_TXTADDR(a) (0x00008000) | ||
23 | |||
24 | #define N_TRSIZE(a) ((a).a_trsize) | ||
25 | #define N_DRSIZE(a) ((a).a_drsize) | ||
26 | #define N_SYMSIZE(a) ((a).a_syms) | ||
27 | |||
28 | #define M_ARM 103 | ||
29 | |||
30 | #ifndef LIBRARY_START_TEXT | ||
31 | #define LIBRARY_START_TEXT (0x00c00000) | ||
32 | #endif | ||
33 | |||
34 | #endif /* __A_OUT_GNU_H__ */ | ||
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index a39cfc2a1f90..9cbe70c8b0ef 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
@@ -357,7 +357,8 @@ ENDPROC(__pabt_svc) | |||
357 | .endm | 357 | .endm |
358 | 358 | ||
359 | .macro kuser_cmpxchg_check | 359 | .macro kuser_cmpxchg_check |
360 | #if !defined(CONFIG_CPU_32v6K) && !defined(CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG) | 360 | #if !defined(CONFIG_CPU_32v6K) && defined(CONFIG_KUSER_HELPERS) && \ |
361 | !defined(CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG) | ||
361 | #ifndef CONFIG_MMU | 362 | #ifndef CONFIG_MMU |
362 | #warning "NPTL on non MMU needs fixing" | 363 | #warning "NPTL on non MMU needs fixing" |
363 | #else | 364 | #else |
@@ -742,6 +743,18 @@ ENDPROC(__switch_to) | |||
742 | #endif | 743 | #endif |
743 | .endm | 744 | .endm |
744 | 745 | ||
746 | .macro kuser_pad, sym, size | ||
747 | .if (. - \sym) & 3 | ||
748 | .rept 4 - (. - \sym) & 3 | ||
749 | .byte 0 | ||
750 | .endr | ||
751 | .endif | ||
752 | .rept (\size - (. - \sym)) / 4 | ||
753 | .word 0xe7fddef1 | ||
754 | .endr | ||
755 | .endm | ||
756 | |||
757 | #ifdef CONFIG_KUSER_HELPERS | ||
745 | .align 5 | 758 | .align 5 |
746 | .globl __kuser_helper_start | 759 | .globl __kuser_helper_start |
747 | __kuser_helper_start: | 760 | __kuser_helper_start: |
@@ -832,18 +845,13 @@ kuser_cmpxchg64_fixup: | |||
832 | #error "incoherent kernel configuration" | 845 | #error "incoherent kernel configuration" |
833 | #endif | 846 | #endif |
834 | 847 | ||
835 | /* pad to next slot */ | 848 | kuser_pad __kuser_cmpxchg64, 64 |
836 | .rept (16 - (. - __kuser_cmpxchg64)/4) | ||
837 | .word 0 | ||
838 | .endr | ||
839 | |||
840 | .align 5 | ||
841 | 849 | ||
842 | __kuser_memory_barrier: @ 0xffff0fa0 | 850 | __kuser_memory_barrier: @ 0xffff0fa0 |
843 | smp_dmb arm | 851 | smp_dmb arm |
844 | usr_ret lr | 852 | usr_ret lr |
845 | 853 | ||
846 | .align 5 | 854 | kuser_pad __kuser_memory_barrier, 32 |
847 | 855 | ||
848 | __kuser_cmpxchg: @ 0xffff0fc0 | 856 | __kuser_cmpxchg: @ 0xffff0fc0 |
849 | 857 | ||
@@ -916,13 +924,14 @@ kuser_cmpxchg32_fixup: | |||
916 | 924 | ||
917 | #endif | 925 | #endif |
918 | 926 | ||
919 | .align 5 | 927 | kuser_pad __kuser_cmpxchg, 32 |
920 | 928 | ||
921 | __kuser_get_tls: @ 0xffff0fe0 | 929 | __kuser_get_tls: @ 0xffff0fe0 |
922 | ldr r0, [pc, #(16 - 8)] @ read TLS, set in kuser_get_tls_init | 930 | ldr r0, [pc, #(16 - 8)] @ read TLS, set in kuser_get_tls_init |
923 | usr_ret lr | 931 | usr_ret lr |
924 | mrc p15, 0, r0, c13, c0, 3 @ 0xffff0fe8 hardware TLS code | 932 | mrc p15, 0, r0, c13, c0, 3 @ 0xffff0fe8 hardware TLS code |
925 | .rep 4 | 933 | kuser_pad __kuser_get_tls, 16 |
934 | .rep 3 | ||
926 | .word 0 @ 0xffff0ff0 software TLS value, then | 935 | .word 0 @ 0xffff0ff0 software TLS value, then |
927 | .endr @ pad up to __kuser_helper_version | 936 | .endr @ pad up to __kuser_helper_version |
928 | 937 | ||
@@ -932,14 +941,16 @@ __kuser_helper_version: @ 0xffff0ffc | |||
932 | .globl __kuser_helper_end | 941 | .globl __kuser_helper_end |
933 | __kuser_helper_end: | 942 | __kuser_helper_end: |
934 | 943 | ||
944 | #endif | ||
945 | |||
935 | THUMB( .thumb ) | 946 | THUMB( .thumb ) |
936 | 947 | ||
937 | /* | 948 | /* |
938 | * Vector stubs. | 949 | * Vector stubs. |
939 | * | 950 | * |
940 | * This code is copied to 0xffff0200 so we can use branches in the | 951 | * This code is copied to 0xffff1000 so we can use branches in the |
941 | * vectors, rather than ldr's. Note that this code must not | 952 | * vectors, rather than ldr's. Note that this code must not exceed |
942 | * exceed 0x300 bytes. | 953 | * a page size. |
943 | * | 954 | * |
944 | * Common stub entry macro: | 955 | * Common stub entry macro: |
945 | * Enter in IRQ mode, spsr = SVC/USR CPSR, lr = SVC/USR PC | 956 | * Enter in IRQ mode, spsr = SVC/USR CPSR, lr = SVC/USR PC |
@@ -986,8 +997,17 @@ ENDPROC(vector_\name) | |||
986 | 1: | 997 | 1: |
987 | .endm | 998 | .endm |
988 | 999 | ||
989 | .globl __stubs_start | 1000 | .section .stubs, "ax", %progbits |
990 | __stubs_start: | 1001 | __stubs_start: |
1002 | @ This must be the first word | ||
1003 | .word vector_swi | ||
1004 | |||
1005 | vector_rst: | ||
1006 | ARM( swi SYS_ERROR0 ) | ||
1007 | THUMB( svc #0 ) | ||
1008 | THUMB( nop ) | ||
1009 | b vector_und | ||
1010 | |||
991 | /* | 1011 | /* |
992 | * Interrupt dispatcher | 1012 | * Interrupt dispatcher |
993 | */ | 1013 | */ |
@@ -1082,6 +1102,16 @@ __stubs_start: | |||
1082 | .align 5 | 1102 | .align 5 |
1083 | 1103 | ||
1084 | /*============================================================================= | 1104 | /*============================================================================= |
1105 | * Address exception handler | ||
1106 | *----------------------------------------------------------------------------- | ||
1107 | * These aren't too critical. | ||
1108 | * (they're not supposed to happen, and won't happen in 32-bit data mode). | ||
1109 | */ | ||
1110 | |||
1111 | vector_addrexcptn: | ||
1112 | b vector_addrexcptn | ||
1113 | |||
1114 | /*============================================================================= | ||
1085 | * Undefined FIQs | 1115 | * Undefined FIQs |
1086 | *----------------------------------------------------------------------------- | 1116 | *----------------------------------------------------------------------------- |
1087 | * Enter in FIQ mode, spsr = ANY CPSR, lr = ANY PC | 1117 | * Enter in FIQ mode, spsr = ANY CPSR, lr = ANY PC |
@@ -1094,45 +1124,19 @@ __stubs_start: | |||
1094 | vector_fiq: | 1124 | vector_fiq: |
1095 | subs pc, lr, #4 | 1125 | subs pc, lr, #4 |
1096 | 1126 | ||
1097 | /*============================================================================= | 1127 | .globl vector_fiq_offset |
1098 | * Address exception handler | 1128 | .equ vector_fiq_offset, vector_fiq |
1099 | *----------------------------------------------------------------------------- | ||
1100 | * These aren't too critical. | ||
1101 | * (they're not supposed to happen, and won't happen in 32-bit data mode). | ||
1102 | */ | ||
1103 | |||
1104 | vector_addrexcptn: | ||
1105 | b vector_addrexcptn | ||
1106 | |||
1107 | /* | ||
1108 | * We group all the following data together to optimise | ||
1109 | * for CPUs with separate I & D caches. | ||
1110 | */ | ||
1111 | .align 5 | ||
1112 | |||
1113 | .LCvswi: | ||
1114 | .word vector_swi | ||
1115 | |||
1116 | .globl __stubs_end | ||
1117 | __stubs_end: | ||
1118 | |||
1119 | .equ stubs_offset, __vectors_start + 0x200 - __stubs_start | ||
1120 | 1129 | ||
1121 | .globl __vectors_start | 1130 | .section .vectors, "ax", %progbits |
1122 | __vectors_start: | 1131 | __vectors_start: |
1123 | ARM( swi SYS_ERROR0 ) | 1132 | W(b) vector_rst |
1124 | THUMB( svc #0 ) | 1133 | W(b) vector_und |
1125 | THUMB( nop ) | 1134 | W(ldr) pc, __vectors_start + 0x1000 |
1126 | W(b) vector_und + stubs_offset | 1135 | W(b) vector_pabt |
1127 | W(ldr) pc, .LCvswi + stubs_offset | 1136 | W(b) vector_dabt |
1128 | W(b) vector_pabt + stubs_offset | 1137 | W(b) vector_addrexcptn |
1129 | W(b) vector_dabt + stubs_offset | 1138 | W(b) vector_irq |
1130 | W(b) vector_addrexcptn + stubs_offset | 1139 | W(b) vector_fiq |
1131 | W(b) vector_irq + stubs_offset | ||
1132 | W(b) vector_fiq + stubs_offset | ||
1133 | |||
1134 | .globl __vectors_end | ||
1135 | __vectors_end: | ||
1136 | 1140 | ||
1137 | .data | 1141 | .data |
1138 | 1142 | ||
diff --git a/arch/arm/kernel/entry-v7m.S b/arch/arm/kernel/entry-v7m.S index e00621f1403f..52b26432c9a9 100644 --- a/arch/arm/kernel/entry-v7m.S +++ b/arch/arm/kernel/entry-v7m.S | |||
@@ -49,7 +49,7 @@ __irq_entry: | |||
49 | mov r1, sp | 49 | mov r1, sp |
50 | stmdb sp!, {lr} | 50 | stmdb sp!, {lr} |
51 | @ routine called with r0 = irq number, r1 = struct pt_regs * | 51 | @ routine called with r0 = irq number, r1 = struct pt_regs * |
52 | bl nvic_do_IRQ | 52 | bl nvic_handle_irq |
53 | 53 | ||
54 | pop {lr} | 54 | pop {lr} |
55 | @ | 55 | @ |
diff --git a/arch/arm/kernel/fiq.c b/arch/arm/kernel/fiq.c index 2adda11f712f..918875d96d5d 100644 --- a/arch/arm/kernel/fiq.c +++ b/arch/arm/kernel/fiq.c | |||
@@ -47,6 +47,11 @@ | |||
47 | #include <asm/irq.h> | 47 | #include <asm/irq.h> |
48 | #include <asm/traps.h> | 48 | #include <asm/traps.h> |
49 | 49 | ||
50 | #define FIQ_OFFSET ({ \ | ||
51 | extern void *vector_fiq_offset; \ | ||
52 | (unsigned)&vector_fiq_offset; \ | ||
53 | }) | ||
54 | |||
50 | static unsigned long no_fiq_insn; | 55 | static unsigned long no_fiq_insn; |
51 | 56 | ||
52 | /* Default reacquire function | 57 | /* Default reacquire function |
@@ -79,14 +84,14 @@ int show_fiq_list(struct seq_file *p, int prec) | |||
79 | 84 | ||
80 | void set_fiq_handler(void *start, unsigned int length) | 85 | void set_fiq_handler(void *start, unsigned int length) |
81 | { | 86 | { |
82 | #if defined(CONFIG_CPU_USE_DOMAINS) | 87 | void *base = vectors_page; |
83 | memcpy((void *)0xffff001c, start, length); | 88 | unsigned offset = FIQ_OFFSET; |
84 | #else | 89 | |
85 | memcpy(vectors_page + 0x1c, start, length); | 90 | memcpy(base + offset, start, length); |
86 | #endif | 91 | if (!cache_is_vipt_nonaliasing()) |
87 | flush_icache_range(0xffff001c, 0xffff001c + length); | 92 | flush_icache_range((unsigned long)base + offset, offset + |
88 | if (!vectors_high()) | 93 | length); |
89 | flush_icache_range(0x1c, 0x1c + length); | 94 | flush_icache_range(0xffff0000 + offset, 0xffff0000 + offset + length); |
90 | } | 95 | } |
91 | 96 | ||
92 | int claim_fiq(struct fiq_handler *f) | 97 | int claim_fiq(struct fiq_handler *f) |
@@ -144,6 +149,7 @@ EXPORT_SYMBOL(disable_fiq); | |||
144 | 149 | ||
145 | void __init init_FIQ(int start) | 150 | void __init init_FIQ(int start) |
146 | { | 151 | { |
147 | no_fiq_insn = *(unsigned long *)0xffff001c; | 152 | unsigned offset = FIQ_OFFSET; |
153 | no_fiq_insn = *(unsigned long *)(0xffff0000 + offset); | ||
148 | fiq_start = start; | 154 | fiq_start = start; |
149 | } | 155 | } |
diff --git a/arch/arm/kernel/head-common.S b/arch/arm/kernel/head-common.S index 76ab5ca50610..47cd974e57ea 100644 --- a/arch/arm/kernel/head-common.S +++ b/arch/arm/kernel/head-common.S | |||
@@ -149,7 +149,6 @@ ENDPROC(lookup_processor_type) | |||
149 | * r5 = proc_info pointer in physical address space | 149 | * r5 = proc_info pointer in physical address space |
150 | * r9 = cpuid (preserved) | 150 | * r9 = cpuid (preserved) |
151 | */ | 151 | */ |
152 | __CPUINIT | ||
153 | __lookup_processor_type: | 152 | __lookup_processor_type: |
154 | adr r3, __lookup_processor_type_data | 153 | adr r3, __lookup_processor_type_data |
155 | ldmia r3, {r4 - r6} | 154 | ldmia r3, {r4 - r6} |
diff --git a/arch/arm/kernel/head-nommu.S b/arch/arm/kernel/head-nommu.S index 75f14cc3e073..14235ba64a90 100644 --- a/arch/arm/kernel/head-nommu.S +++ b/arch/arm/kernel/head-nommu.S | |||
@@ -87,7 +87,7 @@ ENTRY(stext) | |||
87 | ENDPROC(stext) | 87 | ENDPROC(stext) |
88 | 88 | ||
89 | #ifdef CONFIG_SMP | 89 | #ifdef CONFIG_SMP |
90 | __CPUINIT | 90 | .text |
91 | ENTRY(secondary_startup) | 91 | ENTRY(secondary_startup) |
92 | /* | 92 | /* |
93 | * Common entry point for secondary CPUs. | 93 | * Common entry point for secondary CPUs. |
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S index 45e8935cae4e..2c7cc1e03473 100644 --- a/arch/arm/kernel/head.S +++ b/arch/arm/kernel/head.S | |||
@@ -343,7 +343,7 @@ __turn_mmu_on_loc: | |||
343 | .long __turn_mmu_on_end | 343 | .long __turn_mmu_on_end |
344 | 344 | ||
345 | #if defined(CONFIG_SMP) | 345 | #if defined(CONFIG_SMP) |
346 | __CPUINIT | 346 | .text |
347 | ENTRY(secondary_startup) | 347 | ENTRY(secondary_startup) |
348 | /* | 348 | /* |
349 | * Common entry point for secondary CPUs. | 349 | * Common entry point for secondary CPUs. |
diff --git a/arch/arm/kernel/hw_breakpoint.c b/arch/arm/kernel/hw_breakpoint.c index 1fd749ee4a1b..7b95de601357 100644 --- a/arch/arm/kernel/hw_breakpoint.c +++ b/arch/arm/kernel/hw_breakpoint.c | |||
@@ -1020,7 +1020,7 @@ out_mdbgen: | |||
1020 | cpumask_or(&debug_err_mask, &debug_err_mask, cpumask_of(cpu)); | 1020 | cpumask_or(&debug_err_mask, &debug_err_mask, cpumask_of(cpu)); |
1021 | } | 1021 | } |
1022 | 1022 | ||
1023 | static int __cpuinit dbg_reset_notify(struct notifier_block *self, | 1023 | static int dbg_reset_notify(struct notifier_block *self, |
1024 | unsigned long action, void *cpu) | 1024 | unsigned long action, void *cpu) |
1025 | { | 1025 | { |
1026 | if ((action & ~CPU_TASKS_FROZEN) == CPU_ONLINE) | 1026 | if ((action & ~CPU_TASKS_FROZEN) == CPU_ONLINE) |
@@ -1029,7 +1029,7 @@ static int __cpuinit dbg_reset_notify(struct notifier_block *self, | |||
1029 | return NOTIFY_OK; | 1029 | return NOTIFY_OK; |
1030 | } | 1030 | } |
1031 | 1031 | ||
1032 | static struct notifier_block __cpuinitdata dbg_reset_nb = { | 1032 | static struct notifier_block dbg_reset_nb = { |
1033 | .notifier_call = dbg_reset_notify, | 1033 | .notifier_call = dbg_reset_notify, |
1034 | }; | 1034 | }; |
1035 | 1035 | ||
diff --git a/arch/arm/kernel/hyp-stub.S b/arch/arm/kernel/hyp-stub.S index 4910232c4833..797b1a6a4906 100644 --- a/arch/arm/kernel/hyp-stub.S +++ b/arch/arm/kernel/hyp-stub.S | |||
@@ -56,8 +56,8 @@ ENTRY(__boot_cpu_mode) | |||
56 | ldr \reg3, [\reg2] | 56 | ldr \reg3, [\reg2] |
57 | ldr \reg1, [\reg2, \reg3] | 57 | ldr \reg1, [\reg2, \reg3] |
58 | cmp \mode, \reg1 @ matches primary CPU boot mode? | 58 | cmp \mode, \reg1 @ matches primary CPU boot mode? |
59 | orrne r7, r7, #BOOT_CPU_MODE_MISMATCH | 59 | orrne \reg1, \reg1, #BOOT_CPU_MODE_MISMATCH |
60 | strne r7, [r5, r6] @ record what happened and give up | 60 | strne \reg1, [\reg2, \reg3] @ record what happened and give up |
61 | .endm | 61 | .endm |
62 | 62 | ||
63 | #else /* ZIMAGE */ | 63 | #else /* ZIMAGE */ |
diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c index 4fb074c446bf..57221e349a7c 100644 --- a/arch/arm/kernel/machine_kexec.c +++ b/arch/arm/kernel/machine_kexec.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <asm/mmu_context.h> | 15 | #include <asm/mmu_context.h> |
16 | #include <asm/cacheflush.h> | 16 | #include <asm/cacheflush.h> |
17 | #include <asm/mach-types.h> | 17 | #include <asm/mach-types.h> |
18 | #include <asm/smp_plat.h> | ||
18 | #include <asm/system_misc.h> | 19 | #include <asm/system_misc.h> |
19 | 20 | ||
20 | extern const unsigned char relocate_new_kernel[]; | 21 | extern const unsigned char relocate_new_kernel[]; |
@@ -39,6 +40,14 @@ int machine_kexec_prepare(struct kimage *image) | |||
39 | int i, err; | 40 | int i, err; |
40 | 41 | ||
41 | /* | 42 | /* |
43 | * Validate that if the current HW supports SMP, then the SW supports | ||
44 | * and implements CPU hotplug for the current HW. If not, we won't be | ||
45 | * able to kexec reliably, so fail the prepare operation. | ||
46 | */ | ||
47 | if (num_possible_cpus() > 1 && !platform_can_cpu_hotplug()) | ||
48 | return -EINVAL; | ||
49 | |||
50 | /* | ||
42 | * No segment at default ATAGs address. try to locate | 51 | * No segment at default ATAGs address. try to locate |
43 | * a dtb using magic. | 52 | * a dtb using magic. |
44 | */ | 53 | */ |
@@ -73,6 +82,7 @@ void machine_crash_nonpanic_core(void *unused) | |||
73 | crash_save_cpu(®s, smp_processor_id()); | 82 | crash_save_cpu(®s, smp_processor_id()); |
74 | flush_cache_all(); | 83 | flush_cache_all(); |
75 | 84 | ||
85 | set_cpu_online(smp_processor_id(), false); | ||
76 | atomic_dec(&waiting_for_crash_ipi); | 86 | atomic_dec(&waiting_for_crash_ipi); |
77 | while (1) | 87 | while (1) |
78 | cpu_relax(); | 88 | cpu_relax(); |
@@ -134,10 +144,13 @@ void machine_kexec(struct kimage *image) | |||
134 | unsigned long reboot_code_buffer_phys; | 144 | unsigned long reboot_code_buffer_phys; |
135 | void *reboot_code_buffer; | 145 | void *reboot_code_buffer; |
136 | 146 | ||
137 | if (num_online_cpus() > 1) { | 147 | /* |
138 | pr_err("kexec: error: multiple CPUs still online\n"); | 148 | * This can only happen if machine_shutdown() failed to disable some |
139 | return; | 149 | * CPU, and that can only happen if the checks in |
140 | } | 150 | * machine_kexec_prepare() were not correct. If this fails, we can't |
151 | * reliably kexec anyway, so BUG_ON is appropriate. | ||
152 | */ | ||
153 | BUG_ON(num_online_cpus() > 1); | ||
141 | 154 | ||
142 | page_list = image->head & PAGE_MASK; | 155 | page_list = image->head & PAGE_MASK; |
143 | 156 | ||
diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c index d9f5cd4e533f..e186ee1e63f6 100644 --- a/arch/arm/kernel/perf_event.c +++ b/arch/arm/kernel/perf_event.c | |||
@@ -53,7 +53,12 @@ armpmu_map_cache_event(const unsigned (*cache_map) | |||
53 | static int | 53 | static int |
54 | armpmu_map_hw_event(const unsigned (*event_map)[PERF_COUNT_HW_MAX], u64 config) | 54 | armpmu_map_hw_event(const unsigned (*event_map)[PERF_COUNT_HW_MAX], u64 config) |
55 | { | 55 | { |
56 | int mapping = (*event_map)[config]; | 56 | int mapping; |
57 | |||
58 | if (config >= PERF_COUNT_HW_MAX) | ||
59 | return -EINVAL; | ||
60 | |||
61 | mapping = (*event_map)[config]; | ||
57 | return mapping == HW_OP_UNSUPPORTED ? -ENOENT : mapping; | 62 | return mapping == HW_OP_UNSUPPORTED ? -ENOENT : mapping; |
58 | } | 63 | } |
59 | 64 | ||
@@ -253,6 +258,9 @@ validate_event(struct pmu_hw_events *hw_events, | |||
253 | struct arm_pmu *armpmu = to_arm_pmu(event->pmu); | 258 | struct arm_pmu *armpmu = to_arm_pmu(event->pmu); |
254 | struct pmu *leader_pmu = event->group_leader->pmu; | 259 | struct pmu *leader_pmu = event->group_leader->pmu; |
255 | 260 | ||
261 | if (is_software_event(event)) | ||
262 | return 1; | ||
263 | |||
256 | if (event->pmu != leader_pmu || event->state < PERF_EVENT_STATE_OFF) | 264 | if (event->pmu != leader_pmu || event->state < PERF_EVENT_STATE_OFF) |
257 | return 1; | 265 | return 1; |
258 | 266 | ||
diff --git a/arch/arm/kernel/perf_event_cpu.c b/arch/arm/kernel/perf_event_cpu.c index 1f2740e3dbc0..aebe0e99c153 100644 --- a/arch/arm/kernel/perf_event_cpu.c +++ b/arch/arm/kernel/perf_event_cpu.c | |||
@@ -157,8 +157,8 @@ static void cpu_pmu_init(struct arm_pmu *cpu_pmu) | |||
157 | * UNKNOWN at reset, the PMU must be explicitly reset to avoid reading | 157 | * UNKNOWN at reset, the PMU must be explicitly reset to avoid reading |
158 | * junk values out of them. | 158 | * junk values out of them. |
159 | */ | 159 | */ |
160 | static int __cpuinit cpu_pmu_notify(struct notifier_block *b, | 160 | static int cpu_pmu_notify(struct notifier_block *b, unsigned long action, |
161 | unsigned long action, void *hcpu) | 161 | void *hcpu) |
162 | { | 162 | { |
163 | if ((action & ~CPU_TASKS_FROZEN) != CPU_STARTING) | 163 | if ((action & ~CPU_TASKS_FROZEN) != CPU_STARTING) |
164 | return NOTIFY_DONE; | 164 | return NOTIFY_DONE; |
@@ -171,7 +171,7 @@ static int __cpuinit cpu_pmu_notify(struct notifier_block *b, | |||
171 | return NOTIFY_OK; | 171 | return NOTIFY_OK; |
172 | } | 172 | } |
173 | 173 | ||
174 | static struct notifier_block __cpuinitdata cpu_pmu_hotplug_notifier = { | 174 | static struct notifier_block cpu_pmu_hotplug_notifier = { |
175 | .notifier_call = cpu_pmu_notify, | 175 | .notifier_call = cpu_pmu_notify, |
176 | }; | 176 | }; |
177 | 177 | ||
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index d3ca4f6915af..94f6b05f9e24 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c | |||
@@ -197,6 +197,7 @@ void machine_shutdown(void) | |||
197 | */ | 197 | */ |
198 | void machine_halt(void) | 198 | void machine_halt(void) |
199 | { | 199 | { |
200 | local_irq_disable(); | ||
200 | smp_send_stop(); | 201 | smp_send_stop(); |
201 | 202 | ||
202 | local_irq_disable(); | 203 | local_irq_disable(); |
@@ -211,6 +212,7 @@ void machine_halt(void) | |||
211 | */ | 212 | */ |
212 | void machine_power_off(void) | 213 | void machine_power_off(void) |
213 | { | 214 | { |
215 | local_irq_disable(); | ||
214 | smp_send_stop(); | 216 | smp_send_stop(); |
215 | 217 | ||
216 | if (pm_power_off) | 218 | if (pm_power_off) |
@@ -230,6 +232,7 @@ void machine_power_off(void) | |||
230 | */ | 232 | */ |
231 | void machine_restart(char *cmd) | 233 | void machine_restart(char *cmd) |
232 | { | 234 | { |
235 | local_irq_disable(); | ||
233 | smp_send_stop(); | 236 | smp_send_stop(); |
234 | 237 | ||
235 | arm_pm_restart(reboot_mode, cmd); | 238 | arm_pm_restart(reboot_mode, cmd); |
@@ -426,10 +429,11 @@ unsigned long arch_randomize_brk(struct mm_struct *mm) | |||
426 | } | 429 | } |
427 | 430 | ||
428 | #ifdef CONFIG_MMU | 431 | #ifdef CONFIG_MMU |
432 | #ifdef CONFIG_KUSER_HELPERS | ||
429 | /* | 433 | /* |
430 | * The vectors page is always readable from user space for the | 434 | * The vectors page is always readable from user space for the |
431 | * atomic helpers and the signal restart code. Insert it into the | 435 | * atomic helpers. Insert it into the gate_vma so that it is visible |
432 | * gate_vma so that it is visible through ptrace and /proc/<pid>/mem. | 436 | * through ptrace and /proc/<pid>/mem. |
433 | */ | 437 | */ |
434 | static struct vm_area_struct gate_vma = { | 438 | static struct vm_area_struct gate_vma = { |
435 | .vm_start = 0xffff0000, | 439 | .vm_start = 0xffff0000, |
@@ -458,9 +462,48 @@ int in_gate_area_no_mm(unsigned long addr) | |||
458 | { | 462 | { |
459 | return in_gate_area(NULL, addr); | 463 | return in_gate_area(NULL, addr); |
460 | } | 464 | } |
465 | #define is_gate_vma(vma) ((vma) == &gate_vma) | ||
466 | #else | ||
467 | #define is_gate_vma(vma) 0 | ||
468 | #endif | ||
461 | 469 | ||
462 | const char *arch_vma_name(struct vm_area_struct *vma) | 470 | const char *arch_vma_name(struct vm_area_struct *vma) |
463 | { | 471 | { |
464 | return (vma == &gate_vma) ? "[vectors]" : NULL; | 472 | return is_gate_vma(vma) ? "[vectors]" : |
473 | (vma->vm_mm && vma->vm_start == vma->vm_mm->context.sigpage) ? | ||
474 | "[sigpage]" : NULL; | ||
475 | } | ||
476 | |||
477 | static struct page *signal_page; | ||
478 | extern struct page *get_signal_page(void); | ||
479 | |||
480 | int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) | ||
481 | { | ||
482 | struct mm_struct *mm = current->mm; | ||
483 | unsigned long addr; | ||
484 | int ret; | ||
485 | |||
486 | if (!signal_page) | ||
487 | signal_page = get_signal_page(); | ||
488 | if (!signal_page) | ||
489 | return -ENOMEM; | ||
490 | |||
491 | down_write(&mm->mmap_sem); | ||
492 | addr = get_unmapped_area(NULL, 0, PAGE_SIZE, 0, 0); | ||
493 | if (IS_ERR_VALUE(addr)) { | ||
494 | ret = addr; | ||
495 | goto up_fail; | ||
496 | } | ||
497 | |||
498 | ret = install_special_mapping(mm, addr, PAGE_SIZE, | ||
499 | VM_READ | VM_EXEC | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC, | ||
500 | &signal_page); | ||
501 | |||
502 | if (ret == 0) | ||
503 | mm->context.sigpage = addr; | ||
504 | |||
505 | up_fail: | ||
506 | up_write(&mm->mmap_sem); | ||
507 | return ret; | ||
465 | } | 508 | } |
466 | #endif | 509 | #endif |
diff --git a/arch/arm/kernel/psci_smp.c b/arch/arm/kernel/psci_smp.c index 219f1d73572a..70ded3fb42d9 100644 --- a/arch/arm/kernel/psci_smp.c +++ b/arch/arm/kernel/psci_smp.c | |||
@@ -46,8 +46,7 @@ | |||
46 | 46 | ||
47 | extern void secondary_startup(void); | 47 | extern void secondary_startup(void); |
48 | 48 | ||
49 | static int __cpuinit psci_boot_secondary(unsigned int cpu, | 49 | static int psci_boot_secondary(unsigned int cpu, struct task_struct *idle) |
50 | struct task_struct *idle) | ||
51 | { | 50 | { |
52 | if (psci_ops.cpu_on) | 51 | if (psci_ops.cpu_on) |
53 | return psci_ops.cpu_on(cpu_logical_map(cpu), | 52 | return psci_ops.cpu_on(cpu_logical_map(cpu), |
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index 63af9a7ae512..afc2489ee13b 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c | |||
@@ -836,6 +836,8 @@ static int __init meminfo_cmp(const void *_a, const void *_b) | |||
836 | void __init hyp_mode_check(void) | 836 | void __init hyp_mode_check(void) |
837 | { | 837 | { |
838 | #ifdef CONFIG_ARM_VIRT_EXT | 838 | #ifdef CONFIG_ARM_VIRT_EXT |
839 | sync_boot_mode(); | ||
840 | |||
839 | if (is_hyp_mode_available()) { | 841 | if (is_hyp_mode_available()) { |
840 | pr_info("CPU: All CPU(s) started in HYP mode.\n"); | 842 | pr_info("CPU: All CPU(s) started in HYP mode.\n"); |
841 | pr_info("CPU: Virtualization extensions available.\n"); | 843 | pr_info("CPU: Virtualization extensions available.\n"); |
@@ -971,6 +973,7 @@ static const char *hwcap_str[] = { | |||
971 | "vfpv4", | 973 | "vfpv4", |
972 | "idiva", | 974 | "idiva", |
973 | "idivt", | 975 | "idivt", |
976 | "vfpd32", | ||
974 | "lpae", | 977 | "lpae", |
975 | NULL | 978 | NULL |
976 | }; | 979 | }; |
diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c index 1c16c35c271a..ab3304225272 100644 --- a/arch/arm/kernel/signal.c +++ b/arch/arm/kernel/signal.c | |||
@@ -8,6 +8,7 @@ | |||
8 | * published by the Free Software Foundation. | 8 | * published by the Free Software Foundation. |
9 | */ | 9 | */ |
10 | #include <linux/errno.h> | 10 | #include <linux/errno.h> |
11 | #include <linux/random.h> | ||
11 | #include <linux/signal.h> | 12 | #include <linux/signal.h> |
12 | #include <linux/personality.h> | 13 | #include <linux/personality.h> |
13 | #include <linux/uaccess.h> | 14 | #include <linux/uaccess.h> |
@@ -15,12 +16,11 @@ | |||
15 | 16 | ||
16 | #include <asm/elf.h> | 17 | #include <asm/elf.h> |
17 | #include <asm/cacheflush.h> | 18 | #include <asm/cacheflush.h> |
19 | #include <asm/traps.h> | ||
18 | #include <asm/ucontext.h> | 20 | #include <asm/ucontext.h> |
19 | #include <asm/unistd.h> | 21 | #include <asm/unistd.h> |
20 | #include <asm/vfp.h> | 22 | #include <asm/vfp.h> |
21 | 23 | ||
22 | #include "signal.h" | ||
23 | |||
24 | /* | 24 | /* |
25 | * For ARM syscalls, we encode the syscall number into the instruction. | 25 | * For ARM syscalls, we encode the syscall number into the instruction. |
26 | */ | 26 | */ |
@@ -40,11 +40,13 @@ | |||
40 | #define SWI_THUMB_SIGRETURN (0xdf00 << 16 | 0x2700 | (__NR_sigreturn - __NR_SYSCALL_BASE)) | 40 | #define SWI_THUMB_SIGRETURN (0xdf00 << 16 | 0x2700 | (__NR_sigreturn - __NR_SYSCALL_BASE)) |
41 | #define SWI_THUMB_RT_SIGRETURN (0xdf00 << 16 | 0x2700 | (__NR_rt_sigreturn - __NR_SYSCALL_BASE)) | 41 | #define SWI_THUMB_RT_SIGRETURN (0xdf00 << 16 | 0x2700 | (__NR_rt_sigreturn - __NR_SYSCALL_BASE)) |
42 | 42 | ||
43 | const unsigned long sigreturn_codes[7] = { | 43 | static const unsigned long sigreturn_codes[7] = { |
44 | MOV_R7_NR_SIGRETURN, SWI_SYS_SIGRETURN, SWI_THUMB_SIGRETURN, | 44 | MOV_R7_NR_SIGRETURN, SWI_SYS_SIGRETURN, SWI_THUMB_SIGRETURN, |
45 | MOV_R7_NR_RT_SIGRETURN, SWI_SYS_RT_SIGRETURN, SWI_THUMB_RT_SIGRETURN, | 45 | MOV_R7_NR_RT_SIGRETURN, SWI_SYS_RT_SIGRETURN, SWI_THUMB_RT_SIGRETURN, |
46 | }; | 46 | }; |
47 | 47 | ||
48 | static unsigned long signal_return_offset; | ||
49 | |||
48 | #ifdef CONFIG_CRUNCH | 50 | #ifdef CONFIG_CRUNCH |
49 | static int preserve_crunch_context(struct crunch_sigframe __user *frame) | 51 | static int preserve_crunch_context(struct crunch_sigframe __user *frame) |
50 | { | 52 | { |
@@ -400,14 +402,20 @@ setup_return(struct pt_regs *regs, struct ksignal *ksig, | |||
400 | __put_user(sigreturn_codes[idx+1], rc+1)) | 402 | __put_user(sigreturn_codes[idx+1], rc+1)) |
401 | return 1; | 403 | return 1; |
402 | 404 | ||
403 | if ((cpsr & MODE32_BIT) && !IS_ENABLED(CONFIG_ARM_MPU)) { | 405 | #ifdef CONFIG_MMU |
406 | if (cpsr & MODE32_BIT) { | ||
407 | struct mm_struct *mm = current->mm; | ||
408 | |||
404 | /* | 409 | /* |
405 | * 32-bit code can use the new high-page | 410 | * 32-bit code can use the signal return page |
406 | * signal return code support except when the MPU has | 411 | * except when the MPU has protected the vectors |
407 | * protected the vectors page from PL0 | 412 | * page from PL0 |
408 | */ | 413 | */ |
409 | retcode = KERN_SIGRETURN_CODE + (idx << 2) + thumb; | 414 | retcode = mm->context.sigpage + signal_return_offset + |
410 | } else { | 415 | (idx << 2) + thumb; |
416 | } else | ||
417 | #endif | ||
418 | { | ||
411 | /* | 419 | /* |
412 | * Ensure that the instruction cache sees | 420 | * Ensure that the instruction cache sees |
413 | * the return code written onto the stack. | 421 | * the return code written onto the stack. |
@@ -608,3 +616,33 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall) | |||
608 | } while (thread_flags & _TIF_WORK_MASK); | 616 | } while (thread_flags & _TIF_WORK_MASK); |
609 | return 0; | 617 | return 0; |
610 | } | 618 | } |
619 | |||
620 | struct page *get_signal_page(void) | ||
621 | { | ||
622 | unsigned long ptr; | ||
623 | unsigned offset; | ||
624 | struct page *page; | ||
625 | void *addr; | ||
626 | |||
627 | page = alloc_pages(GFP_KERNEL, 0); | ||
628 | |||
629 | if (!page) | ||
630 | return NULL; | ||
631 | |||
632 | addr = page_address(page); | ||
633 | |||
634 | /* Give the signal return code some randomness */ | ||
635 | offset = 0x200 + (get_random_int() & 0x7fc); | ||
636 | signal_return_offset = offset; | ||
637 | |||
638 | /* | ||
639 | * Copy signal return handlers into the vector page, and | ||
640 | * set sigreturn to be a pointer to these. | ||
641 | */ | ||
642 | memcpy(addr + offset, sigreturn_codes, sizeof(sigreturn_codes)); | ||
643 | |||
644 | ptr = (unsigned long)addr + offset; | ||
645 | flush_icache_range(ptr, ptr + sizeof(sigreturn_codes)); | ||
646 | |||
647 | return page; | ||
648 | } | ||
diff --git a/arch/arm/kernel/signal.h b/arch/arm/kernel/signal.h deleted file mode 100644 index 5ff067b7c752..000000000000 --- a/arch/arm/kernel/signal.h +++ /dev/null | |||
@@ -1,12 +0,0 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/kernel/signal.h | ||
3 | * | ||
4 | * Copyright (C) 2005-2009 Russell King. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #define KERN_SIGRETURN_CODE (CONFIG_VECTORS_BASE + 0x00000500) | ||
11 | |||
12 | extern const unsigned long sigreturn_codes[7]; | ||
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index c5fb5469054b..2dc19349eb19 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c | |||
@@ -58,7 +58,7 @@ struct secondary_data secondary_data; | |||
58 | * control for which core is the next to come out of the secondary | 58 | * control for which core is the next to come out of the secondary |
59 | * boot "holding pen" | 59 | * boot "holding pen" |
60 | */ | 60 | */ |
61 | volatile int __cpuinitdata pen_release = -1; | 61 | volatile int pen_release = -1; |
62 | 62 | ||
63 | enum ipi_msg_type { | 63 | enum ipi_msg_type { |
64 | IPI_WAKEUP, | 64 | IPI_WAKEUP, |
@@ -86,7 +86,7 @@ static unsigned long get_arch_pgd(pgd_t *pgd) | |||
86 | return pgdir >> ARCH_PGD_SHIFT; | 86 | return pgdir >> ARCH_PGD_SHIFT; |
87 | } | 87 | } |
88 | 88 | ||
89 | int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *idle) | 89 | int __cpu_up(unsigned int cpu, struct task_struct *idle) |
90 | { | 90 | { |
91 | int ret; | 91 | int ret; |
92 | 92 | ||
@@ -138,13 +138,23 @@ void __init smp_init_cpus(void) | |||
138 | smp_ops.smp_init_cpus(); | 138 | smp_ops.smp_init_cpus(); |
139 | } | 139 | } |
140 | 140 | ||
141 | int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) | 141 | int boot_secondary(unsigned int cpu, struct task_struct *idle) |
142 | { | 142 | { |
143 | if (smp_ops.smp_boot_secondary) | 143 | if (smp_ops.smp_boot_secondary) |
144 | return smp_ops.smp_boot_secondary(cpu, idle); | 144 | return smp_ops.smp_boot_secondary(cpu, idle); |
145 | return -ENOSYS; | 145 | return -ENOSYS; |
146 | } | 146 | } |
147 | 147 | ||
148 | int platform_can_cpu_hotplug(void) | ||
149 | { | ||
150 | #ifdef CONFIG_HOTPLUG_CPU | ||
151 | if (smp_ops.cpu_kill) | ||
152 | return 1; | ||
153 | #endif | ||
154 | |||
155 | return 0; | ||
156 | } | ||
157 | |||
148 | #ifdef CONFIG_HOTPLUG_CPU | 158 | #ifdef CONFIG_HOTPLUG_CPU |
149 | static void percpu_timer_stop(void); | 159 | static void percpu_timer_stop(void); |
150 | 160 | ||
@@ -170,7 +180,7 @@ static int platform_cpu_disable(unsigned int cpu) | |||
170 | /* | 180 | /* |
171 | * __cpu_disable runs on the processor to be shutdown. | 181 | * __cpu_disable runs on the processor to be shutdown. |
172 | */ | 182 | */ |
173 | int __cpuinit __cpu_disable(void) | 183 | int __cpu_disable(void) |
174 | { | 184 | { |
175 | unsigned int cpu = smp_processor_id(); | 185 | unsigned int cpu = smp_processor_id(); |
176 | int ret; | 186 | int ret; |
@@ -216,7 +226,7 @@ static DECLARE_COMPLETION(cpu_died); | |||
216 | * called on the thread which is asking for a CPU to be shutdown - | 226 | * called on the thread which is asking for a CPU to be shutdown - |
217 | * waits until shutdown has completed, or it is timed out. | 227 | * waits until shutdown has completed, or it is timed out. |
218 | */ | 228 | */ |
219 | void __cpuinit __cpu_die(unsigned int cpu) | 229 | void __cpu_die(unsigned int cpu) |
220 | { | 230 | { |
221 | if (!wait_for_completion_timeout(&cpu_died, msecs_to_jiffies(5000))) { | 231 | if (!wait_for_completion_timeout(&cpu_died, msecs_to_jiffies(5000))) { |
222 | pr_err("CPU%u: cpu didn't die\n", cpu); | 232 | pr_err("CPU%u: cpu didn't die\n", cpu); |
@@ -306,7 +316,7 @@ void __ref cpu_die(void) | |||
306 | * Called by both boot and secondaries to move global data into | 316 | * Called by both boot and secondaries to move global data into |
307 | * per-processor storage. | 317 | * per-processor storage. |
308 | */ | 318 | */ |
309 | static void __cpuinit smp_store_cpu_info(unsigned int cpuid) | 319 | static void smp_store_cpu_info(unsigned int cpuid) |
310 | { | 320 | { |
311 | struct cpuinfo_arm *cpu_info = &per_cpu(cpu_data, cpuid); | 321 | struct cpuinfo_arm *cpu_info = &per_cpu(cpu_data, cpuid); |
312 | 322 | ||
@@ -322,7 +332,7 @@ static void percpu_timer_setup(void); | |||
322 | * This is the secondary CPU boot entry. We're using this CPUs | 332 | * This is the secondary CPU boot entry. We're using this CPUs |
323 | * idle thread stack, but a set of temporary page tables. | 333 | * idle thread stack, but a set of temporary page tables. |
324 | */ | 334 | */ |
325 | asmlinkage void __cpuinit secondary_start_kernel(void) | 335 | asmlinkage void secondary_start_kernel(void) |
326 | { | 336 | { |
327 | struct mm_struct *mm = &init_mm; | 337 | struct mm_struct *mm = &init_mm; |
328 | unsigned int cpu; | 338 | unsigned int cpu; |
@@ -521,7 +531,7 @@ static void broadcast_timer_set_mode(enum clock_event_mode mode, | |||
521 | { | 531 | { |
522 | } | 532 | } |
523 | 533 | ||
524 | static void __cpuinit broadcast_timer_setup(struct clock_event_device *evt) | 534 | static void broadcast_timer_setup(struct clock_event_device *evt) |
525 | { | 535 | { |
526 | evt->name = "dummy_timer"; | 536 | evt->name = "dummy_timer"; |
527 | evt->features = CLOCK_EVT_FEAT_ONESHOT | | 537 | evt->features = CLOCK_EVT_FEAT_ONESHOT | |
@@ -550,7 +560,7 @@ int local_timer_register(struct local_timer_ops *ops) | |||
550 | } | 560 | } |
551 | #endif | 561 | #endif |
552 | 562 | ||
553 | static void __cpuinit percpu_timer_setup(void) | 563 | static void percpu_timer_setup(void) |
554 | { | 564 | { |
555 | unsigned int cpu = smp_processor_id(); | 565 | unsigned int cpu = smp_processor_id(); |
556 | struct clock_event_device *evt = &per_cpu(percpu_clockevent, cpu); | 566 | struct clock_event_device *evt = &per_cpu(percpu_clockevent, cpu); |
diff --git a/arch/arm/kernel/smp_tlb.c b/arch/arm/kernel/smp_tlb.c index a98b62dca2fa..c2edfff573c2 100644 --- a/arch/arm/kernel/smp_tlb.c +++ b/arch/arm/kernel/smp_tlb.c | |||
@@ -70,23 +70,6 @@ static inline void ipi_flush_bp_all(void *ignored) | |||
70 | local_flush_bp_all(); | 70 | local_flush_bp_all(); |
71 | } | 71 | } |
72 | 72 | ||
73 | #ifdef CONFIG_ARM_ERRATA_798181 | ||
74 | static int erratum_a15_798181(void) | ||
75 | { | ||
76 | unsigned int midr = read_cpuid_id(); | ||
77 | |||
78 | /* Cortex-A15 r0p0..r3p2 affected */ | ||
79 | if ((midr & 0xff0ffff0) != 0x410fc0f0 || midr > 0x413fc0f2) | ||
80 | return 0; | ||
81 | return 1; | ||
82 | } | ||
83 | #else | ||
84 | static int erratum_a15_798181(void) | ||
85 | { | ||
86 | return 0; | ||
87 | } | ||
88 | #endif | ||
89 | |||
90 | static void ipi_flush_tlb_a15_erratum(void *arg) | 73 | static void ipi_flush_tlb_a15_erratum(void *arg) |
91 | { | 74 | { |
92 | dmb(); | 75 | dmb(); |
diff --git a/arch/arm/kernel/smp_twd.c b/arch/arm/kernel/smp_twd.c index f6fd1d4398c6..25956204ef23 100644 --- a/arch/arm/kernel/smp_twd.c +++ b/arch/arm/kernel/smp_twd.c | |||
@@ -187,7 +187,7 @@ core_initcall(twd_cpufreq_init); | |||
187 | 187 | ||
188 | #endif | 188 | #endif |
189 | 189 | ||
190 | static void __cpuinit twd_calibrate_rate(void) | 190 | static void twd_calibrate_rate(void) |
191 | { | 191 | { |
192 | unsigned long count; | 192 | unsigned long count; |
193 | u64 waitjiffies; | 193 | u64 waitjiffies; |
@@ -265,7 +265,7 @@ static void twd_get_clock(struct device_node *np) | |||
265 | /* | 265 | /* |
266 | * Setup the local clock events for a CPU. | 266 | * Setup the local clock events for a CPU. |
267 | */ | 267 | */ |
268 | static int __cpuinit twd_timer_setup(struct clock_event_device *clk) | 268 | static int twd_timer_setup(struct clock_event_device *clk) |
269 | { | 269 | { |
270 | struct clock_event_device **this_cpu_clk; | 270 | struct clock_event_device **this_cpu_clk; |
271 | int cpu = smp_processor_id(); | 271 | int cpu = smp_processor_id(); |
@@ -308,7 +308,7 @@ static int __cpuinit twd_timer_setup(struct clock_event_device *clk) | |||
308 | return 0; | 308 | return 0; |
309 | } | 309 | } |
310 | 310 | ||
311 | static struct local_timer_ops twd_lt_ops __cpuinitdata = { | 311 | static struct local_timer_ops twd_lt_ops = { |
312 | .setup = twd_timer_setup, | 312 | .setup = twd_timer_setup, |
313 | .stop = twd_timer_stop, | 313 | .stop = twd_timer_stop, |
314 | }; | 314 | }; |
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c index cab094c234ee..ab517fcce21b 100644 --- a/arch/arm/kernel/traps.c +++ b/arch/arm/kernel/traps.c | |||
@@ -35,8 +35,6 @@ | |||
35 | #include <asm/tls.h> | 35 | #include <asm/tls.h> |
36 | #include <asm/system_misc.h> | 36 | #include <asm/system_misc.h> |
37 | 37 | ||
38 | #include "signal.h" | ||
39 | |||
40 | static const char *handler[]= { "prefetch abort", "data abort", "address exception", "interrupt" }; | 38 | static const char *handler[]= { "prefetch abort", "data abort", "address exception", "interrupt" }; |
41 | 39 | ||
42 | void *vectors_page; | 40 | void *vectors_page; |
@@ -800,15 +798,26 @@ void __init trap_init(void) | |||
800 | return; | 798 | return; |
801 | } | 799 | } |
802 | 800 | ||
803 | static void __init kuser_get_tls_init(unsigned long vectors) | 801 | #ifdef CONFIG_KUSER_HELPERS |
802 | static void __init kuser_init(void *vectors) | ||
804 | { | 803 | { |
804 | extern char __kuser_helper_start[], __kuser_helper_end[]; | ||
805 | int kuser_sz = __kuser_helper_end - __kuser_helper_start; | ||
806 | |||
807 | memcpy(vectors + 0x1000 - kuser_sz, __kuser_helper_start, kuser_sz); | ||
808 | |||
805 | /* | 809 | /* |
806 | * vectors + 0xfe0 = __kuser_get_tls | 810 | * vectors + 0xfe0 = __kuser_get_tls |
807 | * vectors + 0xfe8 = hardware TLS instruction at 0xffff0fe8 | 811 | * vectors + 0xfe8 = hardware TLS instruction at 0xffff0fe8 |
808 | */ | 812 | */ |
809 | if (tls_emu || has_tls_reg) | 813 | if (tls_emu || has_tls_reg) |
810 | memcpy((void *)vectors + 0xfe0, (void *)vectors + 0xfe8, 4); | 814 | memcpy(vectors + 0xfe0, vectors + 0xfe8, 4); |
811 | } | 815 | } |
816 | #else | ||
817 | static void __init kuser_init(void *vectors) | ||
818 | { | ||
819 | } | ||
820 | #endif | ||
812 | 821 | ||
813 | void __init early_trap_init(void *vectors_base) | 822 | void __init early_trap_init(void *vectors_base) |
814 | { | 823 | { |
@@ -816,33 +825,30 @@ void __init early_trap_init(void *vectors_base) | |||
816 | unsigned long vectors = (unsigned long)vectors_base; | 825 | unsigned long vectors = (unsigned long)vectors_base; |
817 | extern char __stubs_start[], __stubs_end[]; | 826 | extern char __stubs_start[], __stubs_end[]; |
818 | extern char __vectors_start[], __vectors_end[]; | 827 | extern char __vectors_start[], __vectors_end[]; |
819 | extern char __kuser_helper_start[], __kuser_helper_end[]; | 828 | unsigned i; |
820 | int kuser_sz = __kuser_helper_end - __kuser_helper_start; | ||
821 | 829 | ||
822 | vectors_page = vectors_base; | 830 | vectors_page = vectors_base; |
823 | 831 | ||
824 | /* | 832 | /* |
833 | * Poison the vectors page with an undefined instruction. This | ||
834 | * instruction is chosen to be undefined for both ARM and Thumb | ||
835 | * ISAs. The Thumb version is an undefined instruction with a | ||
836 | * branch back to the undefined instruction. | ||
837 | */ | ||
838 | for (i = 0; i < PAGE_SIZE / sizeof(u32); i++) | ||
839 | ((u32 *)vectors_base)[i] = 0xe7fddef1; | ||
840 | |||
841 | /* | ||
825 | * Copy the vectors, stubs and kuser helpers (in entry-armv.S) | 842 | * Copy the vectors, stubs and kuser helpers (in entry-armv.S) |
826 | * into the vector page, mapped at 0xffff0000, and ensure these | 843 | * into the vector page, mapped at 0xffff0000, and ensure these |
827 | * are visible to the instruction stream. | 844 | * are visible to the instruction stream. |
828 | */ | 845 | */ |
829 | memcpy((void *)vectors, __vectors_start, __vectors_end - __vectors_start); | 846 | memcpy((void *)vectors, __vectors_start, __vectors_end - __vectors_start); |
830 | memcpy((void *)vectors + 0x200, __stubs_start, __stubs_end - __stubs_start); | 847 | memcpy((void *)vectors + 0x1000, __stubs_start, __stubs_end - __stubs_start); |
831 | memcpy((void *)vectors + 0x1000 - kuser_sz, __kuser_helper_start, kuser_sz); | ||
832 | 848 | ||
833 | /* | 849 | kuser_init(vectors_base); |
834 | * Do processor specific fixups for the kuser helpers | ||
835 | */ | ||
836 | kuser_get_tls_init(vectors); | ||
837 | |||
838 | /* | ||
839 | * Copy signal return handlers into the vector page, and | ||
840 | * set sigreturn to be a pointer to these. | ||
841 | */ | ||
842 | memcpy((void *)(vectors + KERN_SIGRETURN_CODE - CONFIG_VECTORS_BASE), | ||
843 | sigreturn_codes, sizeof(sigreturn_codes)); | ||
844 | 850 | ||
845 | flush_icache_range(vectors, vectors + PAGE_SIZE); | 851 | flush_icache_range(vectors, vectors + PAGE_SIZE * 2); |
846 | modify_domain(DOMAIN_USER, DOMAIN_CLIENT); | 852 | modify_domain(DOMAIN_USER, DOMAIN_CLIENT); |
847 | #else /* ifndef CONFIG_CPU_V7M */ | 853 | #else /* ifndef CONFIG_CPU_V7M */ |
848 | /* | 854 | /* |
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S index fa25e4e425f6..7bcee5c9b604 100644 --- a/arch/arm/kernel/vmlinux.lds.S +++ b/arch/arm/kernel/vmlinux.lds.S | |||
@@ -148,6 +148,23 @@ SECTIONS | |||
148 | . = ALIGN(PAGE_SIZE); | 148 | . = ALIGN(PAGE_SIZE); |
149 | __init_begin = .; | 149 | __init_begin = .; |
150 | #endif | 150 | #endif |
151 | /* | ||
152 | * The vectors and stubs are relocatable code, and the | ||
153 | * only thing that matters is their relative offsets | ||
154 | */ | ||
155 | __vectors_start = .; | ||
156 | .vectors 0 : AT(__vectors_start) { | ||
157 | *(.vectors) | ||
158 | } | ||
159 | . = __vectors_start + SIZEOF(.vectors); | ||
160 | __vectors_end = .; | ||
161 | |||
162 | __stubs_start = .; | ||
163 | .stubs 0x1000 : AT(__stubs_start) { | ||
164 | *(.stubs) | ||
165 | } | ||
166 | . = __stubs_start + SIZEOF(.stubs); | ||
167 | __stubs_end = .; | ||
151 | 168 | ||
152 | INIT_TEXT_SECTION(8) | 169 | INIT_TEXT_SECTION(8) |
153 | .exit.text : { | 170 | .exit.text : { |
diff --git a/arch/arm/kvm/coproc.c b/arch/arm/kvm/coproc.c index 4a5199070430..db9cf692d4dd 100644 --- a/arch/arm/kvm/coproc.c +++ b/arch/arm/kvm/coproc.c | |||
@@ -146,7 +146,11 @@ static bool pm_fake(struct kvm_vcpu *vcpu, | |||
146 | #define access_pmintenclr pm_fake | 146 | #define access_pmintenclr pm_fake |
147 | 147 | ||
148 | /* Architected CP15 registers. | 148 | /* Architected CP15 registers. |
149 | * Important: Must be sorted ascending by CRn, CRM, Op1, Op2 | 149 | * CRn denotes the primary register number, but is copied to the CRm in the |
150 | * user space API for 64-bit register access in line with the terminology used | ||
151 | * in the ARM ARM. | ||
152 | * Important: Must be sorted ascending by CRn, CRM, Op1, Op2 and with 64-bit | ||
153 | * registers preceding 32-bit ones. | ||
150 | */ | 154 | */ |
151 | static const struct coproc_reg cp15_regs[] = { | 155 | static const struct coproc_reg cp15_regs[] = { |
152 | /* CSSELR: swapped by interrupt.S. */ | 156 | /* CSSELR: swapped by interrupt.S. */ |
@@ -154,8 +158,8 @@ static const struct coproc_reg cp15_regs[] = { | |||
154 | NULL, reset_unknown, c0_CSSELR }, | 158 | NULL, reset_unknown, c0_CSSELR }, |
155 | 159 | ||
156 | /* TTBR0/TTBR1: swapped by interrupt.S. */ | 160 | /* TTBR0/TTBR1: swapped by interrupt.S. */ |
157 | { CRm( 2), Op1( 0), is64, NULL, reset_unknown64, c2_TTBR0 }, | 161 | { CRm64( 2), Op1( 0), is64, NULL, reset_unknown64, c2_TTBR0 }, |
158 | { CRm( 2), Op1( 1), is64, NULL, reset_unknown64, c2_TTBR1 }, | 162 | { CRm64( 2), Op1( 1), is64, NULL, reset_unknown64, c2_TTBR1 }, |
159 | 163 | ||
160 | /* TTBCR: swapped by interrupt.S. */ | 164 | /* TTBCR: swapped by interrupt.S. */ |
161 | { CRn( 2), CRm( 0), Op1( 0), Op2( 2), is32, | 165 | { CRn( 2), CRm( 0), Op1( 0), Op2( 2), is32, |
@@ -182,7 +186,7 @@ static const struct coproc_reg cp15_regs[] = { | |||
182 | NULL, reset_unknown, c6_IFAR }, | 186 | NULL, reset_unknown, c6_IFAR }, |
183 | 187 | ||
184 | /* PAR swapped by interrupt.S */ | 188 | /* PAR swapped by interrupt.S */ |
185 | { CRn( 7), Op1( 0), is64, NULL, reset_unknown64, c7_PAR }, | 189 | { CRm64( 7), Op1( 0), is64, NULL, reset_unknown64, c7_PAR }, |
186 | 190 | ||
187 | /* | 191 | /* |
188 | * DC{C,I,CI}SW operations: | 192 | * DC{C,I,CI}SW operations: |
@@ -399,12 +403,13 @@ static bool index_to_params(u64 id, struct coproc_params *params) | |||
399 | | KVM_REG_ARM_OPC1_MASK)) | 403 | | KVM_REG_ARM_OPC1_MASK)) |
400 | return false; | 404 | return false; |
401 | params->is_64bit = true; | 405 | params->is_64bit = true; |
402 | params->CRm = ((id & KVM_REG_ARM_CRM_MASK) | 406 | /* CRm to CRn: see cp15_to_index for details */ |
407 | params->CRn = ((id & KVM_REG_ARM_CRM_MASK) | ||
403 | >> KVM_REG_ARM_CRM_SHIFT); | 408 | >> KVM_REG_ARM_CRM_SHIFT); |
404 | params->Op1 = ((id & KVM_REG_ARM_OPC1_MASK) | 409 | params->Op1 = ((id & KVM_REG_ARM_OPC1_MASK) |
405 | >> KVM_REG_ARM_OPC1_SHIFT); | 410 | >> KVM_REG_ARM_OPC1_SHIFT); |
406 | params->Op2 = 0; | 411 | params->Op2 = 0; |
407 | params->CRn = 0; | 412 | params->CRm = 0; |
408 | return true; | 413 | return true; |
409 | default: | 414 | default: |
410 | return false; | 415 | return false; |
@@ -898,7 +903,14 @@ static u64 cp15_to_index(const struct coproc_reg *reg) | |||
898 | if (reg->is_64) { | 903 | if (reg->is_64) { |
899 | val |= KVM_REG_SIZE_U64; | 904 | val |= KVM_REG_SIZE_U64; |
900 | val |= (reg->Op1 << KVM_REG_ARM_OPC1_SHIFT); | 905 | val |= (reg->Op1 << KVM_REG_ARM_OPC1_SHIFT); |
901 | val |= (reg->CRm << KVM_REG_ARM_CRM_SHIFT); | 906 | /* |
907 | * CRn always denotes the primary coproc. reg. nr. for the | ||
908 | * in-kernel representation, but the user space API uses the | ||
909 | * CRm for the encoding, because it is modelled after the | ||
910 | * MRRC/MCRR instructions: see the ARM ARM rev. c page | ||
911 | * B3-1445 | ||
912 | */ | ||
913 | val |= (reg->CRn << KVM_REG_ARM_CRM_SHIFT); | ||
902 | } else { | 914 | } else { |
903 | val |= KVM_REG_SIZE_U32; | 915 | val |= KVM_REG_SIZE_U32; |
904 | val |= (reg->Op1 << KVM_REG_ARM_OPC1_SHIFT); | 916 | val |= (reg->Op1 << KVM_REG_ARM_OPC1_SHIFT); |
diff --git a/arch/arm/kvm/coproc.h b/arch/arm/kvm/coproc.h index b7301d3e4799..0461d5c8d3de 100644 --- a/arch/arm/kvm/coproc.h +++ b/arch/arm/kvm/coproc.h | |||
@@ -135,6 +135,8 @@ static inline int cmp_reg(const struct coproc_reg *i1, | |||
135 | return -1; | 135 | return -1; |
136 | if (i1->CRn != i2->CRn) | 136 | if (i1->CRn != i2->CRn) |
137 | return i1->CRn - i2->CRn; | 137 | return i1->CRn - i2->CRn; |
138 | if (i1->is_64 != i2->is_64) | ||
139 | return i2->is_64 - i1->is_64; | ||
138 | if (i1->CRm != i2->CRm) | 140 | if (i1->CRm != i2->CRm) |
139 | return i1->CRm - i2->CRm; | 141 | return i1->CRm - i2->CRm; |
140 | if (i1->Op1 != i2->Op1) | 142 | if (i1->Op1 != i2->Op1) |
@@ -145,6 +147,7 @@ static inline int cmp_reg(const struct coproc_reg *i1, | |||
145 | 147 | ||
146 | #define CRn(_x) .CRn = _x | 148 | #define CRn(_x) .CRn = _x |
147 | #define CRm(_x) .CRm = _x | 149 | #define CRm(_x) .CRm = _x |
150 | #define CRm64(_x) .CRn = _x, .CRm = 0 | ||
148 | #define Op1(_x) .Op1 = _x | 151 | #define Op1(_x) .Op1 = _x |
149 | #define Op2(_x) .Op2 = _x | 152 | #define Op2(_x) .Op2 = _x |
150 | #define is64 .is_64 = true | 153 | #define is64 .is_64 = true |
diff --git a/arch/arm/kvm/coproc_a15.c b/arch/arm/kvm/coproc_a15.c index 685063a6d0cf..cf93472b9dd6 100644 --- a/arch/arm/kvm/coproc_a15.c +++ b/arch/arm/kvm/coproc_a15.c | |||
@@ -114,7 +114,11 @@ static bool access_l2ectlr(struct kvm_vcpu *vcpu, | |||
114 | 114 | ||
115 | /* | 115 | /* |
116 | * A15-specific CP15 registers. | 116 | * A15-specific CP15 registers. |
117 | * Important: Must be sorted ascending by CRn, CRM, Op1, Op2 | 117 | * CRn denotes the primary register number, but is copied to the CRm in the |
118 | * user space API for 64-bit register access in line with the terminology used | ||
119 | * in the ARM ARM. | ||
120 | * Important: Must be sorted ascending by CRn, CRM, Op1, Op2 and with 64-bit | ||
121 | * registers preceding 32-bit ones. | ||
118 | */ | 122 | */ |
119 | static const struct coproc_reg a15_regs[] = { | 123 | static const struct coproc_reg a15_regs[] = { |
120 | /* MPIDR: we use VMPIDR for guest access. */ | 124 | /* MPIDR: we use VMPIDR for guest access. */ |
diff --git a/arch/arm/kvm/mmio.c b/arch/arm/kvm/mmio.c index b8e06b7a2833..0c25d9487d53 100644 --- a/arch/arm/kvm/mmio.c +++ b/arch/arm/kvm/mmio.c | |||
@@ -63,7 +63,8 @@ int kvm_handle_mmio_return(struct kvm_vcpu *vcpu, struct kvm_run *run) | |||
63 | static int decode_hsr(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, | 63 | static int decode_hsr(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, |
64 | struct kvm_exit_mmio *mmio) | 64 | struct kvm_exit_mmio *mmio) |
65 | { | 65 | { |
66 | unsigned long rt, len; | 66 | unsigned long rt; |
67 | int len; | ||
67 | bool is_write, sign_extend; | 68 | bool is_write, sign_extend; |
68 | 69 | ||
69 | if (kvm_vcpu_dabt_isextabt(vcpu)) { | 70 | if (kvm_vcpu_dabt_isextabt(vcpu)) { |
diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c index ca6bea4859b4..0988d9e04dd4 100644 --- a/arch/arm/kvm/mmu.c +++ b/arch/arm/kvm/mmu.c | |||
@@ -85,6 +85,12 @@ static void *mmu_memory_cache_alloc(struct kvm_mmu_memory_cache *mc) | |||
85 | return p; | 85 | return p; |
86 | } | 86 | } |
87 | 87 | ||
88 | static bool page_empty(void *ptr) | ||
89 | { | ||
90 | struct page *ptr_page = virt_to_page(ptr); | ||
91 | return page_count(ptr_page) == 1; | ||
92 | } | ||
93 | |||
88 | static void clear_pud_entry(struct kvm *kvm, pud_t *pud, phys_addr_t addr) | 94 | static void clear_pud_entry(struct kvm *kvm, pud_t *pud, phys_addr_t addr) |
89 | { | 95 | { |
90 | pmd_t *pmd_table = pmd_offset(pud, 0); | 96 | pmd_t *pmd_table = pmd_offset(pud, 0); |
@@ -103,12 +109,6 @@ static void clear_pmd_entry(struct kvm *kvm, pmd_t *pmd, phys_addr_t addr) | |||
103 | put_page(virt_to_page(pmd)); | 109 | put_page(virt_to_page(pmd)); |
104 | } | 110 | } |
105 | 111 | ||
106 | static bool pmd_empty(pmd_t *pmd) | ||
107 | { | ||
108 | struct page *pmd_page = virt_to_page(pmd); | ||
109 | return page_count(pmd_page) == 1; | ||
110 | } | ||
111 | |||
112 | static void clear_pte_entry(struct kvm *kvm, pte_t *pte, phys_addr_t addr) | 112 | static void clear_pte_entry(struct kvm *kvm, pte_t *pte, phys_addr_t addr) |
113 | { | 113 | { |
114 | if (pte_present(*pte)) { | 114 | if (pte_present(*pte)) { |
@@ -118,12 +118,6 @@ static void clear_pte_entry(struct kvm *kvm, pte_t *pte, phys_addr_t addr) | |||
118 | } | 118 | } |
119 | } | 119 | } |
120 | 120 | ||
121 | static bool pte_empty(pte_t *pte) | ||
122 | { | ||
123 | struct page *pte_page = virt_to_page(pte); | ||
124 | return page_count(pte_page) == 1; | ||
125 | } | ||
126 | |||
127 | static void unmap_range(struct kvm *kvm, pgd_t *pgdp, | 121 | static void unmap_range(struct kvm *kvm, pgd_t *pgdp, |
128 | unsigned long long start, u64 size) | 122 | unsigned long long start, u64 size) |
129 | { | 123 | { |
@@ -132,37 +126,37 @@ static void unmap_range(struct kvm *kvm, pgd_t *pgdp, | |||
132 | pmd_t *pmd; | 126 | pmd_t *pmd; |
133 | pte_t *pte; | 127 | pte_t *pte; |
134 | unsigned long long addr = start, end = start + size; | 128 | unsigned long long addr = start, end = start + size; |
135 | u64 range; | 129 | u64 next; |
136 | 130 | ||
137 | while (addr < end) { | 131 | while (addr < end) { |
138 | pgd = pgdp + pgd_index(addr); | 132 | pgd = pgdp + pgd_index(addr); |
139 | pud = pud_offset(pgd, addr); | 133 | pud = pud_offset(pgd, addr); |
140 | if (pud_none(*pud)) { | 134 | if (pud_none(*pud)) { |
141 | addr += PUD_SIZE; | 135 | addr = pud_addr_end(addr, end); |
142 | continue; | 136 | continue; |
143 | } | 137 | } |
144 | 138 | ||
145 | pmd = pmd_offset(pud, addr); | 139 | pmd = pmd_offset(pud, addr); |
146 | if (pmd_none(*pmd)) { | 140 | if (pmd_none(*pmd)) { |
147 | addr += PMD_SIZE; | 141 | addr = pmd_addr_end(addr, end); |
148 | continue; | 142 | continue; |
149 | } | 143 | } |
150 | 144 | ||
151 | pte = pte_offset_kernel(pmd, addr); | 145 | pte = pte_offset_kernel(pmd, addr); |
152 | clear_pte_entry(kvm, pte, addr); | 146 | clear_pte_entry(kvm, pte, addr); |
153 | range = PAGE_SIZE; | 147 | next = addr + PAGE_SIZE; |
154 | 148 | ||
155 | /* If we emptied the pte, walk back up the ladder */ | 149 | /* If we emptied the pte, walk back up the ladder */ |
156 | if (pte_empty(pte)) { | 150 | if (page_empty(pte)) { |
157 | clear_pmd_entry(kvm, pmd, addr); | 151 | clear_pmd_entry(kvm, pmd, addr); |
158 | range = PMD_SIZE; | 152 | next = pmd_addr_end(addr, end); |
159 | if (pmd_empty(pmd)) { | 153 | if (page_empty(pmd) && !page_empty(pud)) { |
160 | clear_pud_entry(kvm, pud, addr); | 154 | clear_pud_entry(kvm, pud, addr); |
161 | range = PUD_SIZE; | 155 | next = pud_addr_end(addr, end); |
162 | } | 156 | } |
163 | } | 157 | } |
164 | 158 | ||
165 | addr += range; | 159 | addr = next; |
166 | } | 160 | } |
167 | } | 161 | } |
168 | 162 | ||
diff --git a/arch/arm/lib/delay.c b/arch/arm/lib/delay.c index 64dbfa57204a..5306de350133 100644 --- a/arch/arm/lib/delay.c +++ b/arch/arm/lib/delay.c | |||
@@ -86,7 +86,7 @@ void __init register_current_timer_delay(const struct delay_timer *timer) | |||
86 | } | 86 | } |
87 | } | 87 | } |
88 | 88 | ||
89 | unsigned long __cpuinit calibrate_delay_is_known(void) | 89 | unsigned long calibrate_delay_is_known(void) |
90 | { | 90 | { |
91 | delay_calibrated = true; | 91 | delay_calibrated = true; |
92 | return lpj_fine; | 92 | return lpj_fine; |
diff --git a/arch/arm/mach-at91/at91sam9x5.c b/arch/arm/mach-at91/at91sam9x5.c index 2abee6626aac..916e5a142917 100644 --- a/arch/arm/mach-at91/at91sam9x5.c +++ b/arch/arm/mach-at91/at91sam9x5.c | |||
@@ -227,6 +227,8 @@ static struct clk_lookup periph_clocks_lookups[] = { | |||
227 | CLKDEV_CON_DEV_ID("usart", "f8020000.serial", &usart1_clk), | 227 | CLKDEV_CON_DEV_ID("usart", "f8020000.serial", &usart1_clk), |
228 | CLKDEV_CON_DEV_ID("usart", "f8024000.serial", &usart2_clk), | 228 | CLKDEV_CON_DEV_ID("usart", "f8024000.serial", &usart2_clk), |
229 | CLKDEV_CON_DEV_ID("usart", "f8028000.serial", &usart3_clk), | 229 | CLKDEV_CON_DEV_ID("usart", "f8028000.serial", &usart3_clk), |
230 | CLKDEV_CON_DEV_ID("usart", "f8040000.serial", &uart0_clk), | ||
231 | CLKDEV_CON_DEV_ID("usart", "f8044000.serial", &uart1_clk), | ||
230 | CLKDEV_CON_DEV_ID("t0_clk", "f8008000.timer", &tcb0_clk), | 232 | CLKDEV_CON_DEV_ID("t0_clk", "f8008000.timer", &tcb0_clk), |
231 | CLKDEV_CON_DEV_ID("t0_clk", "f800c000.timer", &tcb0_clk), | 233 | CLKDEV_CON_DEV_ID("t0_clk", "f800c000.timer", &tcb0_clk), |
232 | CLKDEV_CON_DEV_ID("mci_clk", "f0008000.mmc", &mmc0_clk), | 234 | CLKDEV_CON_DEV_ID("mci_clk", "f0008000.mmc", &mmc0_clk), |
diff --git a/arch/arm/mach-davinci/board-dm355-leopard.c b/arch/arm/mach-davinci/board-dm355-leopard.c index dff4ddc5ef81..139e42da25f0 100644 --- a/arch/arm/mach-davinci/board-dm355-leopard.c +++ b/arch/arm/mach-davinci/board-dm355-leopard.c | |||
@@ -75,6 +75,7 @@ static struct davinci_nand_pdata davinci_nand_data = { | |||
75 | .parts = davinci_nand_partitions, | 75 | .parts = davinci_nand_partitions, |
76 | .nr_parts = ARRAY_SIZE(davinci_nand_partitions), | 76 | .nr_parts = ARRAY_SIZE(davinci_nand_partitions), |
77 | .ecc_mode = NAND_ECC_HW_SYNDROME, | 77 | .ecc_mode = NAND_ECC_HW_SYNDROME, |
78 | .ecc_bits = 4, | ||
78 | .bbt_options = NAND_BBT_USE_FLASH, | 79 | .bbt_options = NAND_BBT_USE_FLASH, |
79 | }; | 80 | }; |
80 | 81 | ||
diff --git a/arch/arm/mach-davinci/board-dm365-evm.c b/arch/arm/mach-davinci/board-dm365-evm.c index afbc439f11d4..4cdb61c54459 100644 --- a/arch/arm/mach-davinci/board-dm365-evm.c +++ b/arch/arm/mach-davinci/board-dm365-evm.c | |||
@@ -505,7 +505,7 @@ static struct vpbe_output dm365evm_vpbe_outputs[] = { | |||
505 | /* | 505 | /* |
506 | * Amplifiers on the board | 506 | * Amplifiers on the board |
507 | */ | 507 | */ |
508 | struct ths7303_platform_data ths7303_pdata = { | 508 | static struct ths7303_platform_data ths7303_pdata = { |
509 | .ch_1 = 3, | 509 | .ch_1 = 3, |
510 | .ch_2 = 3, | 510 | .ch_2 = 3, |
511 | .ch_3 = 3, | 511 | .ch_3 = 3, |
diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c b/arch/arm/mach-davinci/board-dm644x-evm.c index a33686a6fbb2..fa4bfaf952d8 100644 --- a/arch/arm/mach-davinci/board-dm644x-evm.c +++ b/arch/arm/mach-davinci/board-dm644x-evm.c | |||
@@ -153,6 +153,7 @@ static struct davinci_nand_pdata davinci_evm_nandflash_data = { | |||
153 | .parts = davinci_evm_nandflash_partition, | 153 | .parts = davinci_evm_nandflash_partition, |
154 | .nr_parts = ARRAY_SIZE(davinci_evm_nandflash_partition), | 154 | .nr_parts = ARRAY_SIZE(davinci_evm_nandflash_partition), |
155 | .ecc_mode = NAND_ECC_HW, | 155 | .ecc_mode = NAND_ECC_HW, |
156 | .ecc_bits = 1, | ||
156 | .bbt_options = NAND_BBT_USE_FLASH, | 157 | .bbt_options = NAND_BBT_USE_FLASH, |
157 | .timing = &davinci_evm_nandflash_timing, | 158 | .timing = &davinci_evm_nandflash_timing, |
158 | }; | 159 | }; |
diff --git a/arch/arm/mach-davinci/board-dm646x-evm.c b/arch/arm/mach-davinci/board-dm646x-evm.c index fbb8e5ab1dc1..0c005e876cac 100644 --- a/arch/arm/mach-davinci/board-dm646x-evm.c +++ b/arch/arm/mach-davinci/board-dm646x-evm.c | |||
@@ -90,6 +90,7 @@ static struct davinci_nand_pdata davinci_nand_data = { | |||
90 | .parts = davinci_nand_partitions, | 90 | .parts = davinci_nand_partitions, |
91 | .nr_parts = ARRAY_SIZE(davinci_nand_partitions), | 91 | .nr_parts = ARRAY_SIZE(davinci_nand_partitions), |
92 | .ecc_mode = NAND_ECC_HW, | 92 | .ecc_mode = NAND_ECC_HW, |
93 | .ecc_bits = 1, | ||
93 | .options = 0, | 94 | .options = 0, |
94 | }; | 95 | }; |
95 | 96 | ||
diff --git a/arch/arm/mach-davinci/board-neuros-osd2.c b/arch/arm/mach-davinci/board-neuros-osd2.c index 2bc112adf565..808233b60e3d 100644 --- a/arch/arm/mach-davinci/board-neuros-osd2.c +++ b/arch/arm/mach-davinci/board-neuros-osd2.c | |||
@@ -88,6 +88,7 @@ static struct davinci_nand_pdata davinci_ntosd2_nandflash_data = { | |||
88 | .parts = davinci_ntosd2_nandflash_partition, | 88 | .parts = davinci_ntosd2_nandflash_partition, |
89 | .nr_parts = ARRAY_SIZE(davinci_ntosd2_nandflash_partition), | 89 | .nr_parts = ARRAY_SIZE(davinci_ntosd2_nandflash_partition), |
90 | .ecc_mode = NAND_ECC_HW, | 90 | .ecc_mode = NAND_ECC_HW, |
91 | .ecc_bits = 1, | ||
91 | .bbt_options = NAND_BBT_USE_FLASH, | 92 | .bbt_options = NAND_BBT_USE_FLASH, |
92 | }; | 93 | }; |
93 | 94 | ||
diff --git a/arch/arm/mach-davinci/dm355.c b/arch/arm/mach-davinci/dm355.c index 42ef53f62c6c..86100d179694 100644 --- a/arch/arm/mach-davinci/dm355.c +++ b/arch/arm/mach-davinci/dm355.c | |||
@@ -860,7 +860,7 @@ static struct platform_device dm355_vpbe_display = { | |||
860 | }, | 860 | }, |
861 | }; | 861 | }; |
862 | 862 | ||
863 | struct venc_platform_data dm355_venc_pdata = { | 863 | static struct venc_platform_data dm355_venc_pdata = { |
864 | .setup_pinmux = dm355_vpbe_setup_pinmux, | 864 | .setup_pinmux = dm355_vpbe_setup_pinmux, |
865 | .setup_clock = dm355_venc_setup_clock, | 865 | .setup_clock = dm355_venc_setup_clock, |
866 | }; | 866 | }; |
diff --git a/arch/arm/mach-davinci/dm365.c b/arch/arm/mach-davinci/dm365.c index fa7af5eda52d..dad28029ba9b 100644 --- a/arch/arm/mach-davinci/dm365.c +++ b/arch/arm/mach-davinci/dm365.c | |||
@@ -1349,7 +1349,7 @@ static struct platform_device dm365_vpbe_display = { | |||
1349 | }, | 1349 | }, |
1350 | }; | 1350 | }; |
1351 | 1351 | ||
1352 | struct venc_platform_data dm365_venc_pdata = { | 1352 | static struct venc_platform_data dm365_venc_pdata = { |
1353 | .setup_pinmux = dm365_vpbe_setup_pinmux, | 1353 | .setup_pinmux = dm365_vpbe_setup_pinmux, |
1354 | .setup_clock = dm365_venc_setup_clock, | 1354 | .setup_clock = dm365_venc_setup_clock, |
1355 | }; | 1355 | }; |
diff --git a/arch/arm/mach-exynos/Kconfig b/arch/arm/mach-exynos/Kconfig index 855d4a7b462d..56fe819ee10b 100644 --- a/arch/arm/mach-exynos/Kconfig +++ b/arch/arm/mach-exynos/Kconfig | |||
@@ -36,6 +36,7 @@ config CPU_EXYNOS4210 | |||
36 | bool "SAMSUNG EXYNOS4210" | 36 | bool "SAMSUNG EXYNOS4210" |
37 | default y | 37 | default y |
38 | depends on ARCH_EXYNOS4 | 38 | depends on ARCH_EXYNOS4 |
39 | select ARCH_HAS_BANDGAP | ||
39 | select ARM_CPU_SUSPEND if PM | 40 | select ARM_CPU_SUSPEND if PM |
40 | select PINCTRL_EXYNOS | 41 | select PINCTRL_EXYNOS |
41 | select PM_GENERIC_DOMAINS if PM | 42 | select PM_GENERIC_DOMAINS if PM |
@@ -49,7 +50,9 @@ config SOC_EXYNOS4212 | |||
49 | bool "SAMSUNG EXYNOS4212" | 50 | bool "SAMSUNG EXYNOS4212" |
50 | default y | 51 | default y |
51 | depends on ARCH_EXYNOS4 | 52 | depends on ARCH_EXYNOS4 |
53 | select ARCH_HAS_BANDGAP | ||
52 | select PINCTRL_EXYNOS | 54 | select PINCTRL_EXYNOS |
55 | select PM_GENERIC_DOMAINS if PM | ||
53 | select S5P_PM if PM | 56 | select S5P_PM if PM |
54 | select S5P_SLEEP if PM | 57 | select S5P_SLEEP if PM |
55 | select SAMSUNG_DMADEV | 58 | select SAMSUNG_DMADEV |
@@ -60,7 +63,9 @@ config SOC_EXYNOS4412 | |||
60 | bool "SAMSUNG EXYNOS4412" | 63 | bool "SAMSUNG EXYNOS4412" |
61 | default y | 64 | default y |
62 | depends on ARCH_EXYNOS4 | 65 | depends on ARCH_EXYNOS4 |
66 | select ARCH_HAS_BANDGAP | ||
63 | select PINCTRL_EXYNOS | 67 | select PINCTRL_EXYNOS |
68 | select PM_GENERIC_DOMAINS if PM | ||
64 | select SAMSUNG_DMADEV | 69 | select SAMSUNG_DMADEV |
65 | help | 70 | help |
66 | Enable EXYNOS4412 SoC support | 71 | Enable EXYNOS4412 SoC support |
@@ -69,6 +74,7 @@ config SOC_EXYNOS5250 | |||
69 | bool "SAMSUNG EXYNOS5250" | 74 | bool "SAMSUNG EXYNOS5250" |
70 | default y | 75 | default y |
71 | depends on ARCH_EXYNOS5 | 76 | depends on ARCH_EXYNOS5 |
77 | select ARCH_HAS_BANDGAP | ||
72 | select PINCTRL_EXYNOS | 78 | select PINCTRL_EXYNOS |
73 | select PM_GENERIC_DOMAINS if PM | 79 | select PM_GENERIC_DOMAINS if PM |
74 | select S5P_PM if PM | 80 | select S5P_PM if PM |
@@ -92,6 +98,8 @@ config SOC_EXYNOS5440 | |||
92 | bool "SAMSUNG EXYNOS5440" | 98 | bool "SAMSUNG EXYNOS5440" |
93 | default y | 99 | default y |
94 | depends on ARCH_EXYNOS5 | 100 | depends on ARCH_EXYNOS5 |
101 | select ARCH_DMA_ADDR_T_64BIT if ARM_LPAE | ||
102 | select ARCH_HAS_BANDGAP | ||
95 | select ARCH_HAS_OPP | 103 | select ARCH_HAS_OPP |
96 | select HAVE_ARM_ARCH_TIMER | 104 | select HAVE_ARM_ARCH_TIMER |
97 | select AUTO_ZRELADDR | 105 | select AUTO_ZRELADDR |
diff --git a/arch/arm/mach-exynos/Makefile b/arch/arm/mach-exynos/Makefile index e970a7a4e278..53696154aead 100644 --- a/arch/arm/mach-exynos/Makefile +++ b/arch/arm/mach-exynos/Makefile | |||
@@ -14,7 +14,7 @@ obj- := | |||
14 | 14 | ||
15 | obj-$(CONFIG_ARCH_EXYNOS) += common.o | 15 | obj-$(CONFIG_ARCH_EXYNOS) += common.o |
16 | 16 | ||
17 | obj-$(CONFIG_PM) += pm.o | 17 | obj-$(CONFIG_S5P_PM) += pm.o |
18 | obj-$(CONFIG_PM_GENERIC_DOMAINS) += pm_domains.o | 18 | obj-$(CONFIG_PM_GENERIC_DOMAINS) += pm_domains.o |
19 | obj-$(CONFIG_CPU_IDLE) += cpuidle.o | 19 | obj-$(CONFIG_CPU_IDLE) += cpuidle.o |
20 | 20 | ||
diff --git a/arch/arm/mach-exynos/common.c b/arch/arm/mach-exynos/common.c index 164685bd25c8..ba95e5db2501 100644 --- a/arch/arm/mach-exynos/common.c +++ b/arch/arm/mach-exynos/common.c | |||
@@ -58,7 +58,6 @@ static const char name_exynos5440[] = "EXYNOS5440"; | |||
58 | 58 | ||
59 | static void exynos4_map_io(void); | 59 | static void exynos4_map_io(void); |
60 | static void exynos5_map_io(void); | 60 | static void exynos5_map_io(void); |
61 | static void exynos5440_map_io(void); | ||
62 | static int exynos_init(void); | 61 | static int exynos_init(void); |
63 | 62 | ||
64 | static struct cpu_table cpu_ids[] __initdata = { | 63 | static struct cpu_table cpu_ids[] __initdata = { |
@@ -95,7 +94,6 @@ static struct cpu_table cpu_ids[] __initdata = { | |||
95 | }, { | 94 | }, { |
96 | .idcode = EXYNOS5440_SOC_ID, | 95 | .idcode = EXYNOS5440_SOC_ID, |
97 | .idmask = EXYNOS5_SOC_MASK, | 96 | .idmask = EXYNOS5_SOC_MASK, |
98 | .map_io = exynos5440_map_io, | ||
99 | .init = exynos_init, | 97 | .init = exynos_init, |
100 | .name = name_exynos5440, | 98 | .name = name_exynos5440, |
101 | }, | 99 | }, |
@@ -150,11 +148,6 @@ static struct map_desc exynos4_iodesc[] __initdata = { | |||
150 | .length = SZ_64K, | 148 | .length = SZ_64K, |
151 | .type = MT_DEVICE, | 149 | .type = MT_DEVICE, |
152 | }, { | 150 | }, { |
153 | .virtual = (unsigned long)S3C_VA_UART, | ||
154 | .pfn = __phys_to_pfn(EXYNOS4_PA_UART), | ||
155 | .length = SZ_512K, | ||
156 | .type = MT_DEVICE, | ||
157 | }, { | ||
158 | .virtual = (unsigned long)S5P_VA_CMU, | 151 | .virtual = (unsigned long)S5P_VA_CMU, |
159 | .pfn = __phys_to_pfn(EXYNOS4_PA_CMU), | 152 | .pfn = __phys_to_pfn(EXYNOS4_PA_CMU), |
160 | .length = SZ_128K, | 153 | .length = SZ_128K, |
@@ -268,20 +261,6 @@ static struct map_desc exynos5_iodesc[] __initdata = { | |||
268 | .pfn = __phys_to_pfn(EXYNOS5_PA_PMU), | 261 | .pfn = __phys_to_pfn(EXYNOS5_PA_PMU), |
269 | .length = SZ_64K, | 262 | .length = SZ_64K, |
270 | .type = MT_DEVICE, | 263 | .type = MT_DEVICE, |
271 | }, { | ||
272 | .virtual = (unsigned long)S3C_VA_UART, | ||
273 | .pfn = __phys_to_pfn(EXYNOS5_PA_UART), | ||
274 | .length = SZ_512K, | ||
275 | .type = MT_DEVICE, | ||
276 | }, | ||
277 | }; | ||
278 | |||
279 | static struct map_desc exynos5440_iodesc0[] __initdata = { | ||
280 | { | ||
281 | .virtual = (unsigned long)S3C_VA_UART, | ||
282 | .pfn = __phys_to_pfn(EXYNOS5440_PA_UART0), | ||
283 | .length = SZ_512K, | ||
284 | .type = MT_DEVICE, | ||
285 | }, | 264 | }, |
286 | }; | 265 | }; |
287 | 266 | ||
@@ -388,11 +367,6 @@ static void __init exynos5_map_io(void) | |||
388 | iotable_init(exynos5250_iodesc, ARRAY_SIZE(exynos5250_iodesc)); | 367 | iotable_init(exynos5250_iodesc, ARRAY_SIZE(exynos5250_iodesc)); |
389 | } | 368 | } |
390 | 369 | ||
391 | static void __init exynos5440_map_io(void) | ||
392 | { | ||
393 | iotable_init(exynos5440_iodesc0, ARRAY_SIZE(exynos5440_iodesc0)); | ||
394 | } | ||
395 | |||
396 | void __init exynos_init_time(void) | 370 | void __init exynos_init_time(void) |
397 | { | 371 | { |
398 | of_clk_init(NULL); | 372 | of_clk_init(NULL); |
diff --git a/arch/arm/mach-exynos/common.h b/arch/arm/mach-exynos/common.h index 3e156bcddcb4..972490fc09d6 100644 --- a/arch/arm/mach-exynos/common.h +++ b/arch/arm/mach-exynos/common.h | |||
@@ -97,6 +97,5 @@ struct exynos_pmu_conf { | |||
97 | }; | 97 | }; |
98 | 98 | ||
99 | extern void exynos_sys_powerdown_conf(enum sys_powerdown mode); | 99 | extern void exynos_sys_powerdown_conf(enum sys_powerdown mode); |
100 | extern void s3c_cpu_resume(void); | ||
101 | 100 | ||
102 | #endif /* __ARCH_ARM_MACH_EXYNOS_COMMON_H */ | 101 | #endif /* __ARCH_ARM_MACH_EXYNOS_COMMON_H */ |
diff --git a/arch/arm/mach-exynos/cpuidle.c b/arch/arm/mach-exynos/cpuidle.c index 17a18ff3d71e..ac139226d63c 100644 --- a/arch/arm/mach-exynos/cpuidle.c +++ b/arch/arm/mach-exynos/cpuidle.c | |||
@@ -25,6 +25,7 @@ | |||
25 | #include <mach/regs-pmu.h> | 25 | #include <mach/regs-pmu.h> |
26 | 26 | ||
27 | #include <plat/cpu.h> | 27 | #include <plat/cpu.h> |
28 | #include <plat/pm.h> | ||
28 | 29 | ||
29 | #include "common.h" | 30 | #include "common.h" |
30 | 31 | ||
@@ -199,6 +200,9 @@ static int __init exynos4_init_cpuidle(void) | |||
199 | if (soc_is_exynos5250()) | 200 | if (soc_is_exynos5250()) |
200 | exynos5_core_down_clk(); | 201 | exynos5_core_down_clk(); |
201 | 202 | ||
203 | if (soc_is_exynos5440()) | ||
204 | exynos4_idle_driver.state_count = 1; | ||
205 | |||
202 | ret = cpuidle_register_driver(&exynos4_idle_driver); | 206 | ret = cpuidle_register_driver(&exynos4_idle_driver); |
203 | if (ret) { | 207 | if (ret) { |
204 | printk(KERN_ERR "CPUidle failed to register driver\n"); | 208 | printk(KERN_ERR "CPUidle failed to register driver\n"); |
diff --git a/arch/arm/mach-exynos/headsmp.S b/arch/arm/mach-exynos/headsmp.S index 5364d4bfa8bc..cdd9d91e9933 100644 --- a/arch/arm/mach-exynos/headsmp.S +++ b/arch/arm/mach-exynos/headsmp.S | |||
@@ -13,8 +13,6 @@ | |||
13 | #include <linux/linkage.h> | 13 | #include <linux/linkage.h> |
14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
15 | 15 | ||
16 | __CPUINIT | ||
17 | |||
18 | /* | 16 | /* |
19 | * exynos4 specific entry point for secondary CPUs. This provides | 17 | * exynos4 specific entry point for secondary CPUs. This provides |
20 | * a "holding pen" into which all secondary cores are held until we're | 18 | * a "holding pen" into which all secondary cores are held until we're |
diff --git a/arch/arm/mach-exynos/include/mach/memory.h b/arch/arm/mach-exynos/include/mach/memory.h index 374ef2cf7152..2a4cdb7cb326 100644 --- a/arch/arm/mach-exynos/include/mach/memory.h +++ b/arch/arm/mach-exynos/include/mach/memory.h | |||
@@ -15,8 +15,13 @@ | |||
15 | 15 | ||
16 | #define PLAT_PHYS_OFFSET UL(0x40000000) | 16 | #define PLAT_PHYS_OFFSET UL(0x40000000) |
17 | 17 | ||
18 | #ifndef CONFIG_ARM_LPAE | ||
18 | /* Maximum of 256MiB in one bank */ | 19 | /* Maximum of 256MiB in one bank */ |
19 | #define MAX_PHYSMEM_BITS 32 | 20 | #define MAX_PHYSMEM_BITS 32 |
20 | #define SECTION_SIZE_BITS 28 | 21 | #define SECTION_SIZE_BITS 28 |
22 | #else | ||
23 | #define MAX_PHYSMEM_BITS 36 | ||
24 | #define SECTION_SIZE_BITS 31 | ||
25 | #endif | ||
21 | 26 | ||
22 | #endif /* __ASM_ARCH_MEMORY_H */ | 27 | #endif /* __ASM_ARCH_MEMORY_H */ |
diff --git a/arch/arm/mach-exynos/platsmp.c b/arch/arm/mach-exynos/platsmp.c index deba1308ff16..58b43e6f9262 100644 --- a/arch/arm/mach-exynos/platsmp.c +++ b/arch/arm/mach-exynos/platsmp.c | |||
@@ -75,7 +75,7 @@ static void __iomem *scu_base_addr(void) | |||
75 | 75 | ||
76 | static DEFINE_SPINLOCK(boot_lock); | 76 | static DEFINE_SPINLOCK(boot_lock); |
77 | 77 | ||
78 | static void __cpuinit exynos_secondary_init(unsigned int cpu) | 78 | static void exynos_secondary_init(unsigned int cpu) |
79 | { | 79 | { |
80 | /* | 80 | /* |
81 | * let the primary processor know we're out of the | 81 | * let the primary processor know we're out of the |
@@ -90,7 +90,7 @@ static void __cpuinit exynos_secondary_init(unsigned int cpu) | |||
90 | spin_unlock(&boot_lock); | 90 | spin_unlock(&boot_lock); |
91 | } | 91 | } |
92 | 92 | ||
93 | static int __cpuinit exynos_boot_secondary(unsigned int cpu, struct task_struct *idle) | 93 | static int exynos_boot_secondary(unsigned int cpu, struct task_struct *idle) |
94 | { | 94 | { |
95 | unsigned long timeout; | 95 | unsigned long timeout; |
96 | unsigned long phys_cpu = cpu_logical_map(cpu); | 96 | unsigned long phys_cpu = cpu_logical_map(cpu); |
diff --git a/arch/arm/mach-exynos/pm.c b/arch/arm/mach-exynos/pm.c index 41c20692a13f..c679db577269 100644 --- a/arch/arm/mach-exynos/pm.c +++ b/arch/arm/mach-exynos/pm.c | |||
@@ -217,6 +217,9 @@ static __init int exynos_pm_drvinit(void) | |||
217 | struct clk *pll_base; | 217 | struct clk *pll_base; |
218 | unsigned int tmp; | 218 | unsigned int tmp; |
219 | 219 | ||
220 | if (soc_is_exynos5440()) | ||
221 | return 0; | ||
222 | |||
220 | s3c_pm_init(); | 223 | s3c_pm_init(); |
221 | 224 | ||
222 | /* All wakeup disable */ | 225 | /* All wakeup disable */ |
@@ -340,6 +343,9 @@ static struct syscore_ops exynos_pm_syscore_ops = { | |||
340 | 343 | ||
341 | static __init int exynos_pm_syscore_init(void) | 344 | static __init int exynos_pm_syscore_init(void) |
342 | { | 345 | { |
346 | if (soc_is_exynos5440()) | ||
347 | return 0; | ||
348 | |||
343 | register_syscore_ops(&exynos_pm_syscore_ops); | 349 | register_syscore_ops(&exynos_pm_syscore_ops); |
344 | return 0; | 350 | return 0; |
345 | } | 351 | } |
diff --git a/arch/arm/mach-footbridge/dc21285.c b/arch/arm/mach-footbridge/dc21285.c index a7cd2cf5e08d..3490a24f969e 100644 --- a/arch/arm/mach-footbridge/dc21285.c +++ b/arch/arm/mach-footbridge/dc21285.c | |||
@@ -276,8 +276,6 @@ int __init dc21285_setup(int nr, struct pci_sys_data *sys) | |||
276 | 276 | ||
277 | sys->mem_offset = DC21285_PCI_MEM; | 277 | sys->mem_offset = DC21285_PCI_MEM; |
278 | 278 | ||
279 | pci_ioremap_io(0, DC21285_PCI_IO); | ||
280 | |||
281 | pci_add_resource_offset(&sys->resources, &res[0], sys->mem_offset); | 279 | pci_add_resource_offset(&sys->resources, &res[0], sys->mem_offset); |
282 | pci_add_resource_offset(&sys->resources, &res[1], sys->mem_offset); | 280 | pci_add_resource_offset(&sys->resources, &res[1], sys->mem_offset); |
283 | 281 | ||
diff --git a/arch/arm/mach-highbank/highbank.c b/arch/arm/mach-highbank/highbank.c index dc5d6becd8c7..88815795fe26 100644 --- a/arch/arm/mach-highbank/highbank.c +++ b/arch/arm/mach-highbank/highbank.c | |||
@@ -115,6 +115,7 @@ static int highbank_platform_notifier(struct notifier_block *nb, | |||
115 | { | 115 | { |
116 | struct resource *res; | 116 | struct resource *res; |
117 | int reg = -1; | 117 | int reg = -1; |
118 | u32 val; | ||
118 | struct device *dev = __dev; | 119 | struct device *dev = __dev; |
119 | 120 | ||
120 | if (event != BUS_NOTIFY_ADD_DEVICE) | 121 | if (event != BUS_NOTIFY_ADD_DEVICE) |
@@ -141,10 +142,10 @@ static int highbank_platform_notifier(struct notifier_block *nb, | |||
141 | return NOTIFY_DONE; | 142 | return NOTIFY_DONE; |
142 | 143 | ||
143 | if (of_property_read_bool(dev->of_node, "dma-coherent")) { | 144 | if (of_property_read_bool(dev->of_node, "dma-coherent")) { |
144 | writel(0xff31, sregs_base + reg); | 145 | val = readl(sregs_base + reg); |
146 | writel(val | 0xff01, sregs_base + reg); | ||
145 | set_dma_ops(dev, &arm_coherent_dma_ops); | 147 | set_dma_ops(dev, &arm_coherent_dma_ops); |
146 | } else | 148 | } |
147 | writel(0, sregs_base + reg); | ||
148 | 149 | ||
149 | return NOTIFY_OK; | 150 | return NOTIFY_OK; |
150 | } | 151 | } |
diff --git a/arch/arm/mach-highbank/platsmp.c b/arch/arm/mach-highbank/platsmp.c index a984573e0d02..32d75cf55cbc 100644 --- a/arch/arm/mach-highbank/platsmp.c +++ b/arch/arm/mach-highbank/platsmp.c | |||
@@ -24,7 +24,7 @@ | |||
24 | 24 | ||
25 | extern void secondary_startup(void); | 25 | extern void secondary_startup(void); |
26 | 26 | ||
27 | static int __cpuinit highbank_boot_secondary(unsigned int cpu, struct task_struct *idle) | 27 | static int highbank_boot_secondary(unsigned int cpu, struct task_struct *idle) |
28 | { | 28 | { |
29 | highbank_set_cpu_jump(cpu, secondary_startup); | 29 | highbank_set_cpu_jump(cpu, secondary_startup); |
30 | arch_send_wakeup_ipi_mask(cpumask_of(cpu)); | 30 | arch_send_wakeup_ipi_mask(cpumask_of(cpu)); |
diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c index 4282e99f5ca1..86567d980b07 100644 --- a/arch/arm/mach-imx/clk-imx6q.c +++ b/arch/arm/mach-imx/clk-imx6q.c | |||
@@ -199,7 +199,8 @@ static const char *pcie_axi_sels[] = { "axi", "ahb", }; | |||
199 | static const char *ssi_sels[] = { "pll3_pfd2_508m", "pll3_pfd3_454m", "pll4_post_div", }; | 199 | static const char *ssi_sels[] = { "pll3_pfd2_508m", "pll3_pfd3_454m", "pll4_post_div", }; |
200 | static const char *usdhc_sels[] = { "pll2_pfd2_396m", "pll2_pfd0_352m", }; | 200 | static const char *usdhc_sels[] = { "pll2_pfd2_396m", "pll2_pfd0_352m", }; |
201 | static const char *enfc_sels[] = { "pll2_pfd0_352m", "pll2_bus", "pll3_usb_otg", "pll2_pfd2_396m", }; | 201 | static const char *enfc_sels[] = { "pll2_pfd0_352m", "pll2_bus", "pll3_usb_otg", "pll2_pfd2_396m", }; |
202 | static const char *emi_sels[] = { "axi", "pll3_usb_otg", "pll2_pfd2_396m", "pll2_pfd0_352m", }; | 202 | static const char *emi_sels[] = { "pll2_pfd2_396m", "pll3_usb_otg", "axi", "pll2_pfd0_352m", }; |
203 | static const char *emi_slow_sels[] = { "axi", "pll3_usb_otg", "pll2_pfd2_396m", "pll2_pfd0_352m", }; | ||
203 | static const char *vdo_axi_sels[] = { "axi", "ahb", }; | 204 | static const char *vdo_axi_sels[] = { "axi", "ahb", }; |
204 | static const char *vpu_axi_sels[] = { "axi", "pll2_pfd2_396m", "pll2_pfd0_352m", }; | 205 | static const char *vpu_axi_sels[] = { "axi", "pll2_pfd2_396m", "pll2_pfd0_352m", }; |
205 | static const char *cko1_sels[] = { "pll3_usb_otg", "pll2_bus", "pll1_sys", "pll5_video_div", | 206 | static const char *cko1_sels[] = { "pll3_usb_otg", "pll2_bus", "pll1_sys", "pll5_video_div", |
@@ -392,7 +393,7 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) | |||
392 | clk[usdhc4_sel] = imx_clk_mux("usdhc4_sel", base + 0x1c, 19, 1, usdhc_sels, ARRAY_SIZE(usdhc_sels)); | 393 | clk[usdhc4_sel] = imx_clk_mux("usdhc4_sel", base + 0x1c, 19, 1, usdhc_sels, ARRAY_SIZE(usdhc_sels)); |
393 | clk[enfc_sel] = imx_clk_mux("enfc_sel", base + 0x2c, 16, 2, enfc_sels, ARRAY_SIZE(enfc_sels)); | 394 | clk[enfc_sel] = imx_clk_mux("enfc_sel", base + 0x2c, 16, 2, enfc_sels, ARRAY_SIZE(enfc_sels)); |
394 | clk[emi_sel] = imx_clk_mux("emi_sel", base + 0x1c, 27, 2, emi_sels, ARRAY_SIZE(emi_sels)); | 395 | clk[emi_sel] = imx_clk_mux("emi_sel", base + 0x1c, 27, 2, emi_sels, ARRAY_SIZE(emi_sels)); |
395 | clk[emi_slow_sel] = imx_clk_mux("emi_slow_sel", base + 0x1c, 29, 2, emi_sels, ARRAY_SIZE(emi_sels)); | 396 | clk[emi_slow_sel] = imx_clk_mux("emi_slow_sel", base + 0x1c, 29, 2, emi_slow_sels, ARRAY_SIZE(emi_slow_sels)); |
396 | clk[vdo_axi_sel] = imx_clk_mux("vdo_axi_sel", base + 0x18, 11, 1, vdo_axi_sels, ARRAY_SIZE(vdo_axi_sels)); | 397 | clk[vdo_axi_sel] = imx_clk_mux("vdo_axi_sel", base + 0x18, 11, 1, vdo_axi_sels, ARRAY_SIZE(vdo_axi_sels)); |
397 | clk[vpu_axi_sel] = imx_clk_mux("vpu_axi_sel", base + 0x18, 14, 2, vpu_axi_sels, ARRAY_SIZE(vpu_axi_sels)); | 398 | clk[vpu_axi_sel] = imx_clk_mux("vpu_axi_sel", base + 0x18, 14, 2, vpu_axi_sels, ARRAY_SIZE(vpu_axi_sels)); |
398 | clk[cko1_sel] = imx_clk_mux("cko1_sel", base + 0x60, 0, 4, cko1_sels, ARRAY_SIZE(cko1_sels)); | 399 | clk[cko1_sel] = imx_clk_mux("cko1_sel", base + 0x60, 0, 4, cko1_sels, ARRAY_SIZE(cko1_sels)); |
diff --git a/arch/arm/mach-imx/clk-vf610.c b/arch/arm/mach-imx/clk-vf610.c index d617c0b7c809..b169a396d93b 100644 --- a/arch/arm/mach-imx/clk-vf610.c +++ b/arch/arm/mach-imx/clk-vf610.c | |||
@@ -183,6 +183,8 @@ static void __init vf610_clocks_init(struct device_node *ccm_node) | |||
183 | clk[VF610_CLK_ENET_TS_SEL] = imx_clk_mux("enet_ts_sel", CCM_CSCMR2, 0, 3, enet_ts_sels, 7); | 183 | clk[VF610_CLK_ENET_TS_SEL] = imx_clk_mux("enet_ts_sel", CCM_CSCMR2, 0, 3, enet_ts_sels, 7); |
184 | clk[VF610_CLK_ENET] = imx_clk_gate("enet", "enet_sel", CCM_CSCDR1, 24); | 184 | clk[VF610_CLK_ENET] = imx_clk_gate("enet", "enet_sel", CCM_CSCDR1, 24); |
185 | clk[VF610_CLK_ENET_TS] = imx_clk_gate("enet_ts", "enet_ts_sel", CCM_CSCDR1, 23); | 185 | clk[VF610_CLK_ENET_TS] = imx_clk_gate("enet_ts", "enet_ts_sel", CCM_CSCDR1, 23); |
186 | clk[VF610_CLK_ENET0] = imx_clk_gate2("enet0", "ipg_bus", CCM_CCGR9, CCM_CCGRx_CGn(0)); | ||
187 | clk[VF610_CLK_ENET1] = imx_clk_gate2("enet1", "ipg_bus", CCM_CCGR9, CCM_CCGRx_CGn(1)); | ||
186 | 188 | ||
187 | clk[VF610_CLK_PIT] = imx_clk_gate2("pit", "ipg_bus", CCM_CCGR1, CCM_CCGRx_CGn(7)); | 189 | clk[VF610_CLK_PIT] = imx_clk_gate2("pit", "ipg_bus", CCM_CCGR1, CCM_CCGRx_CGn(7)); |
188 | 190 | ||
diff --git a/arch/arm/mach-imx/mx27.h b/arch/arm/mach-imx/mx27.h index e074616d54ca..8a65f192e7f3 100644 --- a/arch/arm/mach-imx/mx27.h +++ b/arch/arm/mach-imx/mx27.h | |||
@@ -135,7 +135,7 @@ | |||
135 | #define MX27_INT_GPT4 (NR_IRQS_LEGACY + 4) | 135 | #define MX27_INT_GPT4 (NR_IRQS_LEGACY + 4) |
136 | #define MX27_INT_RTIC (NR_IRQS_LEGACY + 5) | 136 | #define MX27_INT_RTIC (NR_IRQS_LEGACY + 5) |
137 | #define MX27_INT_CSPI3 (NR_IRQS_LEGACY + 6) | 137 | #define MX27_INT_CSPI3 (NR_IRQS_LEGACY + 6) |
138 | #define MX27_INT_SDHC (NR_IRQS_LEGACY + 7) | 138 | #define MX27_INT_MSHC (NR_IRQS_LEGACY + 7) |
139 | #define MX27_INT_GPIO (NR_IRQS_LEGACY + 8) | 139 | #define MX27_INT_GPIO (NR_IRQS_LEGACY + 8) |
140 | #define MX27_INT_SDHC3 (NR_IRQS_LEGACY + 9) | 140 | #define MX27_INT_SDHC3 (NR_IRQS_LEGACY + 9) |
141 | #define MX27_INT_SDHC2 (NR_IRQS_LEGACY + 10) | 141 | #define MX27_INT_SDHC2 (NR_IRQS_LEGACY + 10) |
diff --git a/arch/arm/mach-imx/platsmp.c b/arch/arm/mach-imx/platsmp.c index c6e1ab544882..1f24c1fdfea4 100644 --- a/arch/arm/mach-imx/platsmp.c +++ b/arch/arm/mach-imx/platsmp.c | |||
@@ -53,7 +53,7 @@ void imx_scu_standby_enable(void) | |||
53 | writel_relaxed(val, scu_base); | 53 | writel_relaxed(val, scu_base); |
54 | } | 54 | } |
55 | 55 | ||
56 | static int __cpuinit imx_boot_secondary(unsigned int cpu, struct task_struct *idle) | 56 | static int imx_boot_secondary(unsigned int cpu, struct task_struct *idle) |
57 | { | 57 | { |
58 | imx_set_cpu_jump(cpu, v7_secondary_startup); | 58 | imx_set_cpu_jump(cpu, v7_secondary_startup); |
59 | imx_enable_cpu(cpu, true); | 59 | imx_enable_cpu(cpu, true); |
diff --git a/arch/arm/mach-keystone/keystone.c b/arch/arm/mach-keystone/keystone.c index fe4d9ff93a7e..b661c5c2870a 100644 --- a/arch/arm/mach-keystone/keystone.c +++ b/arch/arm/mach-keystone/keystone.c | |||
@@ -49,7 +49,7 @@ static const char *keystone_match[] __initconst = { | |||
49 | NULL, | 49 | NULL, |
50 | }; | 50 | }; |
51 | 51 | ||
52 | void keystone_restart(char mode, const char *cmd) | 52 | void keystone_restart(enum reboot_mode mode, const char *cmd) |
53 | { | 53 | { |
54 | u32 val; | 54 | u32 val; |
55 | 55 | ||
diff --git a/arch/arm/mach-keystone/platsmp.c b/arch/arm/mach-keystone/platsmp.c index 1d4181e1daf2..14378e3fef16 100644 --- a/arch/arm/mach-keystone/platsmp.c +++ b/arch/arm/mach-keystone/platsmp.c | |||
@@ -21,7 +21,7 @@ | |||
21 | 21 | ||
22 | #include "keystone.h" | 22 | #include "keystone.h" |
23 | 23 | ||
24 | static int __cpuinit keystone_smp_boot_secondary(unsigned int cpu, | 24 | static int keystone_smp_boot_secondary(unsigned int cpu, |
25 | struct task_struct *idle) | 25 | struct task_struct *idle) |
26 | { | 26 | { |
27 | unsigned long start = virt_to_phys(&secondary_startup); | 27 | unsigned long start = virt_to_phys(&secondary_startup); |
diff --git a/arch/arm/mach-mmp/Makefile b/arch/arm/mach-mmp/Makefile index 095c155d6fb8..9b702a1dc7b0 100644 --- a/arch/arm/mach-mmp/Makefile +++ b/arch/arm/mach-mmp/Makefile | |||
@@ -2,7 +2,7 @@ | |||
2 | # Makefile for Marvell's PXA168 processors line | 2 | # Makefile for Marvell's PXA168 processors line |
3 | # | 3 | # |
4 | 4 | ||
5 | obj-y += common.o devices.o time.o irq.o | 5 | obj-y += common.o devices.o time.o |
6 | 6 | ||
7 | # SoC support | 7 | # SoC support |
8 | obj-$(CONFIG_CPU_PXA168) += pxa168.o | 8 | obj-$(CONFIG_CPU_PXA168) += pxa168.o |
diff --git a/arch/arm/mach-mmp/common.h b/arch/arm/mach-mmp/common.h index 991d7e9877de..cf445bae6d77 100644 --- a/arch/arm/mach-mmp/common.h +++ b/arch/arm/mach-mmp/common.h | |||
@@ -3,7 +3,6 @@ | |||
3 | 3 | ||
4 | extern void timer_init(int irq); | 4 | extern void timer_init(int irq); |
5 | 5 | ||
6 | extern void __init icu_init_irq(void); | ||
7 | extern void __init mmp_map_io(void); | 6 | extern void __init mmp_map_io(void); |
8 | extern void mmp_restart(enum reboot_mode, const char *); | 7 | extern void mmp_restart(enum reboot_mode, const char *); |
9 | extern void __init pxa168_clk_init(void); | 8 | extern void __init pxa168_clk_init(void); |
diff --git a/arch/arm/mach-mmp/include/mach/entry-macro.S b/arch/arm/mach-mmp/include/mach/entry-macro.S deleted file mode 100644 index bd152e24e6d7..000000000000 --- a/arch/arm/mach-mmp/include/mach/entry-macro.S +++ /dev/null | |||
@@ -1,26 +0,0 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-mmp/include/mach/entry-macro.S | ||
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 <asm/irq.h> | ||
10 | #include <mach/regs-icu.h> | ||
11 | |||
12 | .macro get_irqnr_preamble, base, tmp | ||
13 | mrc p15, 0, \tmp, c0, c0, 0 @ CPUID | ||
14 | and \tmp, \tmp, #0xff00 | ||
15 | cmp \tmp, #0x5800 | ||
16 | ldr \base, =mmp_icu_base | ||
17 | ldr \base, [\base, #0] | ||
18 | addne \base, \base, #0x10c @ PJ1 AP INT SEL register | ||
19 | addeq \base, \base, #0x104 @ PJ4 IRQ SEL register | ||
20 | .endm | ||
21 | |||
22 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
23 | ldr \tmp, [\base, #0] | ||
24 | and \irqnr, \tmp, #0x3f | ||
25 | tst \tmp, #(1 << 6) | ||
26 | .endm | ||
diff --git a/arch/arm/mach-mmp/include/mach/pxa168.h b/arch/arm/mach-mmp/include/mach/pxa168.h index 459c2d03eb5c..a83ba7cb525d 100644 --- a/arch/arm/mach-mmp/include/mach/pxa168.h +++ b/arch/arm/mach-mmp/include/mach/pxa168.h | |||
@@ -4,6 +4,7 @@ | |||
4 | #include <linux/reboot.h> | 4 | #include <linux/reboot.h> |
5 | 5 | ||
6 | extern void pxa168_timer_init(void); | 6 | extern void pxa168_timer_init(void); |
7 | extern void __init icu_init_irq(void); | ||
7 | extern void __init pxa168_init_irq(void); | 8 | extern void __init pxa168_init_irq(void); |
8 | extern void pxa168_restart(enum reboot_mode, const char *); | 9 | extern void pxa168_restart(enum reboot_mode, const char *); |
9 | extern void pxa168_clear_keypad_wakeup(void); | 10 | extern void pxa168_clear_keypad_wakeup(void); |
diff --git a/arch/arm/mach-mmp/include/mach/pxa910.h b/arch/arm/mach-mmp/include/mach/pxa910.h index b914afa1fcdc..92253203f5b4 100644 --- a/arch/arm/mach-mmp/include/mach/pxa910.h +++ b/arch/arm/mach-mmp/include/mach/pxa910.h | |||
@@ -2,6 +2,7 @@ | |||
2 | #define __ASM_MACH_PXA910_H | 2 | #define __ASM_MACH_PXA910_H |
3 | 3 | ||
4 | extern void pxa910_timer_init(void); | 4 | extern void pxa910_timer_init(void); |
5 | extern void __init icu_init_irq(void); | ||
5 | extern void __init pxa910_init_irq(void); | 6 | extern void __init pxa910_init_irq(void); |
6 | 7 | ||
7 | #include <linux/i2c.h> | 8 | #include <linux/i2c.h> |
diff --git a/arch/arm/mach-mmp/irq.c b/arch/arm/mach-mmp/irq.c deleted file mode 100644 index 3c71246cd994..000000000000 --- a/arch/arm/mach-mmp/irq.c +++ /dev/null | |||
@@ -1,463 +0,0 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-mmp/irq.c | ||
3 | * | ||
4 | * Generic IRQ handling, GPIO IRQ demultiplexing, etc. | ||
5 | * Copyright (C) 2008 - 2012 Marvell Technology Group Ltd. | ||
6 | * | ||
7 | * Author: Bin Yang <bin.yang@marvell.com> | ||
8 | * Haojian Zhuang <haojian.zhuang@gmail.com> | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | */ | ||
14 | |||
15 | #include <linux/module.h> | ||
16 | #include <linux/init.h> | ||
17 | #include <linux/irq.h> | ||
18 | #include <linux/irqdomain.h> | ||
19 | #include <linux/io.h> | ||
20 | #include <linux/ioport.h> | ||
21 | #include <linux/of_address.h> | ||
22 | #include <linux/of_irq.h> | ||
23 | |||
24 | #include <mach/irqs.h> | ||
25 | |||
26 | #ifdef CONFIG_CPU_MMP2 | ||
27 | #include <mach/pm-mmp2.h> | ||
28 | #endif | ||
29 | #ifdef CONFIG_CPU_PXA910 | ||
30 | #include <mach/pm-pxa910.h> | ||
31 | #endif | ||
32 | |||
33 | #include "common.h" | ||
34 | |||
35 | #define MAX_ICU_NR 16 | ||
36 | |||
37 | struct icu_chip_data { | ||
38 | int nr_irqs; | ||
39 | unsigned int virq_base; | ||
40 | unsigned int cascade_irq; | ||
41 | void __iomem *reg_status; | ||
42 | void __iomem *reg_mask; | ||
43 | unsigned int conf_enable; | ||
44 | unsigned int conf_disable; | ||
45 | unsigned int conf_mask; | ||
46 | unsigned int clr_mfp_irq_base; | ||
47 | unsigned int clr_mfp_hwirq; | ||
48 | struct irq_domain *domain; | ||
49 | }; | ||
50 | |||
51 | struct mmp_intc_conf { | ||
52 | unsigned int conf_enable; | ||
53 | unsigned int conf_disable; | ||
54 | unsigned int conf_mask; | ||
55 | }; | ||
56 | |||
57 | void __iomem *mmp_icu_base; | ||
58 | static struct icu_chip_data icu_data[MAX_ICU_NR]; | ||
59 | static int max_icu_nr; | ||
60 | |||
61 | extern void mmp2_clear_pmic_int(void); | ||
62 | |||
63 | static void icu_mask_ack_irq(struct irq_data *d) | ||
64 | { | ||
65 | struct irq_domain *domain = d->domain; | ||
66 | struct icu_chip_data *data = (struct icu_chip_data *)domain->host_data; | ||
67 | int hwirq; | ||
68 | u32 r; | ||
69 | |||
70 | hwirq = d->irq - data->virq_base; | ||
71 | if (data == &icu_data[0]) { | ||
72 | r = readl_relaxed(mmp_icu_base + (hwirq << 2)); | ||
73 | r &= ~data->conf_mask; | ||
74 | r |= data->conf_disable; | ||
75 | writel_relaxed(r, mmp_icu_base + (hwirq << 2)); | ||
76 | } else { | ||
77 | #ifdef CONFIG_CPU_MMP2 | ||
78 | if ((data->virq_base == data->clr_mfp_irq_base) | ||
79 | && (hwirq == data->clr_mfp_hwirq)) | ||
80 | mmp2_clear_pmic_int(); | ||
81 | #endif | ||
82 | r = readl_relaxed(data->reg_mask) | (1 << hwirq); | ||
83 | writel_relaxed(r, data->reg_mask); | ||
84 | } | ||
85 | } | ||
86 | |||
87 | static void icu_mask_irq(struct irq_data *d) | ||
88 | { | ||
89 | struct irq_domain *domain = d->domain; | ||
90 | struct icu_chip_data *data = (struct icu_chip_data *)domain->host_data; | ||
91 | int hwirq; | ||
92 | u32 r; | ||
93 | |||
94 | hwirq = d->irq - data->virq_base; | ||
95 | if (data == &icu_data[0]) { | ||
96 | r = readl_relaxed(mmp_icu_base + (hwirq << 2)); | ||
97 | r &= ~data->conf_mask; | ||
98 | r |= data->conf_disable; | ||
99 | writel_relaxed(r, mmp_icu_base + (hwirq << 2)); | ||
100 | } else { | ||
101 | r = readl_relaxed(data->reg_mask) | (1 << hwirq); | ||
102 | writel_relaxed(r, data->reg_mask); | ||
103 | } | ||
104 | } | ||
105 | |||
106 | static void icu_unmask_irq(struct irq_data *d) | ||
107 | { | ||
108 | struct irq_domain *domain = d->domain; | ||
109 | struct icu_chip_data *data = (struct icu_chip_data *)domain->host_data; | ||
110 | int hwirq; | ||
111 | u32 r; | ||
112 | |||
113 | hwirq = d->irq - data->virq_base; | ||
114 | if (data == &icu_data[0]) { | ||
115 | r = readl_relaxed(mmp_icu_base + (hwirq << 2)); | ||
116 | r &= ~data->conf_mask; | ||
117 | r |= data->conf_enable; | ||
118 | writel_relaxed(r, mmp_icu_base + (hwirq << 2)); | ||
119 | } else { | ||
120 | r = readl_relaxed(data->reg_mask) & ~(1 << hwirq); | ||
121 | writel_relaxed(r, data->reg_mask); | ||
122 | } | ||
123 | } | ||
124 | |||
125 | static struct irq_chip icu_irq_chip = { | ||
126 | .name = "icu_irq", | ||
127 | .irq_mask = icu_mask_irq, | ||
128 | .irq_mask_ack = icu_mask_ack_irq, | ||
129 | .irq_unmask = icu_unmask_irq, | ||
130 | }; | ||
131 | |||
132 | static void icu_mux_irq_demux(unsigned int irq, struct irq_desc *desc) | ||
133 | { | ||
134 | struct irq_domain *domain; | ||
135 | struct icu_chip_data *data; | ||
136 | int i; | ||
137 | unsigned long mask, status, n; | ||
138 | |||
139 | for (i = 1; i < max_icu_nr; i++) { | ||
140 | if (irq == icu_data[i].cascade_irq) { | ||
141 | domain = icu_data[i].domain; | ||
142 | data = (struct icu_chip_data *)domain->host_data; | ||
143 | break; | ||
144 | } | ||
145 | } | ||
146 | if (i >= max_icu_nr) { | ||
147 | pr_err("Spurious irq %d in MMP INTC\n", irq); | ||
148 | return; | ||
149 | } | ||
150 | |||
151 | mask = readl_relaxed(data->reg_mask); | ||
152 | while (1) { | ||
153 | status = readl_relaxed(data->reg_status) & ~mask; | ||
154 | if (status == 0) | ||
155 | break; | ||
156 | for_each_set_bit(n, &status, BITS_PER_LONG) { | ||
157 | generic_handle_irq(icu_data[i].virq_base + n); | ||
158 | } | ||
159 | } | ||
160 | } | ||
161 | |||
162 | static int mmp_irq_domain_map(struct irq_domain *d, unsigned int irq, | ||
163 | irq_hw_number_t hw) | ||
164 | { | ||
165 | irq_set_chip_and_handler(irq, &icu_irq_chip, handle_level_irq); | ||
166 | set_irq_flags(irq, IRQF_VALID); | ||
167 | return 0; | ||
168 | } | ||
169 | |||
170 | static int mmp_irq_domain_xlate(struct irq_domain *d, struct device_node *node, | ||
171 | const u32 *intspec, unsigned int intsize, | ||
172 | unsigned long *out_hwirq, | ||
173 | unsigned int *out_type) | ||
174 | { | ||
175 | *out_hwirq = intspec[0]; | ||
176 | return 0; | ||
177 | } | ||
178 | |||
179 | const struct irq_domain_ops mmp_irq_domain_ops = { | ||
180 | .map = mmp_irq_domain_map, | ||
181 | .xlate = mmp_irq_domain_xlate, | ||
182 | }; | ||
183 | |||
184 | static struct mmp_intc_conf mmp_conf = { | ||
185 | .conf_enable = 0x51, | ||
186 | .conf_disable = 0x0, | ||
187 | .conf_mask = 0x7f, | ||
188 | }; | ||
189 | |||
190 | static struct mmp_intc_conf mmp2_conf = { | ||
191 | .conf_enable = 0x20, | ||
192 | .conf_disable = 0x0, | ||
193 | .conf_mask = 0x7f, | ||
194 | }; | ||
195 | |||
196 | /* MMP (ARMv5) */ | ||
197 | void __init icu_init_irq(void) | ||
198 | { | ||
199 | int irq; | ||
200 | |||
201 | max_icu_nr = 1; | ||
202 | mmp_icu_base = ioremap(0xd4282000, 0x1000); | ||
203 | icu_data[0].conf_enable = mmp_conf.conf_enable; | ||
204 | icu_data[0].conf_disable = mmp_conf.conf_disable; | ||
205 | icu_data[0].conf_mask = mmp_conf.conf_mask; | ||
206 | icu_data[0].nr_irqs = 64; | ||
207 | icu_data[0].virq_base = 0; | ||
208 | icu_data[0].domain = irq_domain_add_legacy(NULL, 64, 0, 0, | ||
209 | &irq_domain_simple_ops, | ||
210 | &icu_data[0]); | ||
211 | for (irq = 0; irq < 64; irq++) { | ||
212 | icu_mask_irq(irq_get_irq_data(irq)); | ||
213 | irq_set_chip_and_handler(irq, &icu_irq_chip, handle_level_irq); | ||
214 | set_irq_flags(irq, IRQF_VALID); | ||
215 | } | ||
216 | irq_set_default_host(icu_data[0].domain); | ||
217 | #ifdef CONFIG_CPU_PXA910 | ||
218 | icu_irq_chip.irq_set_wake = pxa910_set_wake; | ||
219 | #endif | ||
220 | } | ||
221 | |||
222 | /* MMP2 (ARMv7) */ | ||
223 | void __init mmp2_init_icu(void) | ||
224 | { | ||
225 | int irq; | ||
226 | |||
227 | max_icu_nr = 8; | ||
228 | mmp_icu_base = ioremap(0xd4282000, 0x1000); | ||
229 | icu_data[0].conf_enable = mmp2_conf.conf_enable; | ||
230 | icu_data[0].conf_disable = mmp2_conf.conf_disable; | ||
231 | icu_data[0].conf_mask = mmp2_conf.conf_mask; | ||
232 | icu_data[0].nr_irqs = 64; | ||
233 | icu_data[0].virq_base = 0; | ||
234 | icu_data[0].domain = irq_domain_add_legacy(NULL, 64, 0, 0, | ||
235 | &irq_domain_simple_ops, | ||
236 | &icu_data[0]); | ||
237 | icu_data[1].reg_status = mmp_icu_base + 0x150; | ||
238 | icu_data[1].reg_mask = mmp_icu_base + 0x168; | ||
239 | icu_data[1].clr_mfp_irq_base = IRQ_MMP2_PMIC_BASE; | ||
240 | icu_data[1].clr_mfp_hwirq = IRQ_MMP2_PMIC - IRQ_MMP2_PMIC_BASE; | ||
241 | icu_data[1].nr_irqs = 2; | ||
242 | icu_data[1].cascade_irq = 4; | ||
243 | icu_data[1].virq_base = IRQ_MMP2_PMIC_BASE; | ||
244 | icu_data[1].domain = irq_domain_add_legacy(NULL, icu_data[1].nr_irqs, | ||
245 | icu_data[1].virq_base, 0, | ||
246 | &irq_domain_simple_ops, | ||
247 | &icu_data[1]); | ||
248 | icu_data[2].reg_status = mmp_icu_base + 0x154; | ||
249 | icu_data[2].reg_mask = mmp_icu_base + 0x16c; | ||
250 | icu_data[2].nr_irqs = 2; | ||
251 | icu_data[2].cascade_irq = 5; | ||
252 | icu_data[2].virq_base = IRQ_MMP2_RTC_BASE; | ||
253 | icu_data[2].domain = irq_domain_add_legacy(NULL, icu_data[2].nr_irqs, | ||
254 | icu_data[2].virq_base, 0, | ||
255 | &irq_domain_simple_ops, | ||
256 | &icu_data[2]); | ||
257 | icu_data[3].reg_status = mmp_icu_base + 0x180; | ||
258 | icu_data[3].reg_mask = mmp_icu_base + 0x17c; | ||
259 | icu_data[3].nr_irqs = 3; | ||
260 | icu_data[3].cascade_irq = 9; | ||
261 | icu_data[3].virq_base = IRQ_MMP2_KEYPAD_BASE; | ||
262 | icu_data[3].domain = irq_domain_add_legacy(NULL, icu_data[3].nr_irqs, | ||
263 | icu_data[3].virq_base, 0, | ||
264 | &irq_domain_simple_ops, | ||
265 | &icu_data[3]); | ||
266 | icu_data[4].reg_status = mmp_icu_base + 0x158; | ||
267 | icu_data[4].reg_mask = mmp_icu_base + 0x170; | ||
268 | icu_data[4].nr_irqs = 5; | ||
269 | icu_data[4].cascade_irq = 17; | ||
270 | icu_data[4].virq_base = IRQ_MMP2_TWSI_BASE; | ||
271 | icu_data[4].domain = irq_domain_add_legacy(NULL, icu_data[4].nr_irqs, | ||
272 | icu_data[4].virq_base, 0, | ||
273 | &irq_domain_simple_ops, | ||
274 | &icu_data[4]); | ||
275 | icu_data[5].reg_status = mmp_icu_base + 0x15c; | ||
276 | icu_data[5].reg_mask = mmp_icu_base + 0x174; | ||
277 | icu_data[5].nr_irqs = 15; | ||
278 | icu_data[5].cascade_irq = 35; | ||
279 | icu_data[5].virq_base = IRQ_MMP2_MISC_BASE; | ||
280 | icu_data[5].domain = irq_domain_add_legacy(NULL, icu_data[5].nr_irqs, | ||
281 | icu_data[5].virq_base, 0, | ||
282 | &irq_domain_simple_ops, | ||
283 | &icu_data[5]); | ||
284 | icu_data[6].reg_status = mmp_icu_base + 0x160; | ||
285 | icu_data[6].reg_mask = mmp_icu_base + 0x178; | ||
286 | icu_data[6].nr_irqs = 2; | ||
287 | icu_data[6].cascade_irq = 51; | ||
288 | icu_data[6].virq_base = IRQ_MMP2_MIPI_HSI1_BASE; | ||
289 | icu_data[6].domain = irq_domain_add_legacy(NULL, icu_data[6].nr_irqs, | ||
290 | icu_data[6].virq_base, 0, | ||
291 | &irq_domain_simple_ops, | ||
292 | &icu_data[6]); | ||
293 | icu_data[7].reg_status = mmp_icu_base + 0x188; | ||
294 | icu_data[7].reg_mask = mmp_icu_base + 0x184; | ||
295 | icu_data[7].nr_irqs = 2; | ||
296 | icu_data[7].cascade_irq = 55; | ||
297 | icu_data[7].virq_base = IRQ_MMP2_MIPI_HSI0_BASE; | ||
298 | icu_data[7].domain = irq_domain_add_legacy(NULL, icu_data[7].nr_irqs, | ||
299 | icu_data[7].virq_base, 0, | ||
300 | &irq_domain_simple_ops, | ||
301 | &icu_data[7]); | ||
302 | for (irq = 0; irq < IRQ_MMP2_MUX_END; irq++) { | ||
303 | icu_mask_irq(irq_get_irq_data(irq)); | ||
304 | switch (irq) { | ||
305 | case IRQ_MMP2_PMIC_MUX: | ||
306 | case IRQ_MMP2_RTC_MUX: | ||
307 | case IRQ_MMP2_KEYPAD_MUX: | ||
308 | case IRQ_MMP2_TWSI_MUX: | ||
309 | case IRQ_MMP2_MISC_MUX: | ||
310 | case IRQ_MMP2_MIPI_HSI1_MUX: | ||
311 | case IRQ_MMP2_MIPI_HSI0_MUX: | ||
312 | irq_set_chip(irq, &icu_irq_chip); | ||
313 | irq_set_chained_handler(irq, icu_mux_irq_demux); | ||
314 | break; | ||
315 | default: | ||
316 | irq_set_chip_and_handler(irq, &icu_irq_chip, | ||
317 | handle_level_irq); | ||
318 | break; | ||
319 | } | ||
320 | set_irq_flags(irq, IRQF_VALID); | ||
321 | } | ||
322 | irq_set_default_host(icu_data[0].domain); | ||
323 | #ifdef CONFIG_CPU_MMP2 | ||
324 | icu_irq_chip.irq_set_wake = mmp2_set_wake; | ||
325 | #endif | ||
326 | } | ||
327 | |||
328 | #ifdef CONFIG_OF | ||
329 | static const struct of_device_id intc_ids[] __initconst = { | ||
330 | { .compatible = "mrvl,mmp-intc", .data = &mmp_conf }, | ||
331 | { .compatible = "mrvl,mmp2-intc", .data = &mmp2_conf }, | ||
332 | {} | ||
333 | }; | ||
334 | |||
335 | static const struct of_device_id mmp_mux_irq_match[] __initconst = { | ||
336 | { .compatible = "mrvl,mmp2-mux-intc" }, | ||
337 | {} | ||
338 | }; | ||
339 | |||
340 | int __init mmp2_mux_init(struct device_node *parent) | ||
341 | { | ||
342 | struct device_node *node; | ||
343 | const struct of_device_id *of_id; | ||
344 | struct resource res; | ||
345 | int i, irq_base, ret, irq; | ||
346 | u32 nr_irqs, mfp_irq; | ||
347 | |||
348 | node = parent; | ||
349 | max_icu_nr = 1; | ||
350 | for (i = 1; i < MAX_ICU_NR; i++) { | ||
351 | node = of_find_matching_node(node, mmp_mux_irq_match); | ||
352 | if (!node) | ||
353 | break; | ||
354 | of_id = of_match_node(&mmp_mux_irq_match[0], node); | ||
355 | ret = of_property_read_u32(node, "mrvl,intc-nr-irqs", | ||
356 | &nr_irqs); | ||
357 | if (ret) { | ||
358 | pr_err("Not found mrvl,intc-nr-irqs property\n"); | ||
359 | ret = -EINVAL; | ||
360 | goto err; | ||
361 | } | ||
362 | ret = of_address_to_resource(node, 0, &res); | ||
363 | if (ret < 0) { | ||
364 | pr_err("Not found reg property\n"); | ||
365 | ret = -EINVAL; | ||
366 | goto err; | ||
367 | } | ||
368 | icu_data[i].reg_status = mmp_icu_base + res.start; | ||
369 | ret = of_address_to_resource(node, 1, &res); | ||
370 | if (ret < 0) { | ||
371 | pr_err("Not found reg property\n"); | ||
372 | ret = -EINVAL; | ||
373 | goto err; | ||
374 | } | ||
375 | icu_data[i].reg_mask = mmp_icu_base + res.start; | ||
376 | icu_data[i].cascade_irq = irq_of_parse_and_map(node, 0); | ||
377 | if (!icu_data[i].cascade_irq) { | ||
378 | ret = -EINVAL; | ||
379 | goto err; | ||
380 | } | ||
381 | |||
382 | irq_base = irq_alloc_descs(-1, 0, nr_irqs, 0); | ||
383 | if (irq_base < 0) { | ||
384 | pr_err("Failed to allocate IRQ numbers for mux intc\n"); | ||
385 | ret = irq_base; | ||
386 | goto err; | ||
387 | } | ||
388 | if (!of_property_read_u32(node, "mrvl,clr-mfp-irq", | ||
389 | &mfp_irq)) { | ||
390 | icu_data[i].clr_mfp_irq_base = irq_base; | ||
391 | icu_data[i].clr_mfp_hwirq = mfp_irq; | ||
392 | } | ||
393 | irq_set_chained_handler(icu_data[i].cascade_irq, | ||
394 | icu_mux_irq_demux); | ||
395 | icu_data[i].nr_irqs = nr_irqs; | ||
396 | icu_data[i].virq_base = irq_base; | ||
397 | icu_data[i].domain = irq_domain_add_legacy(node, nr_irqs, | ||
398 | irq_base, 0, | ||
399 | &mmp_irq_domain_ops, | ||
400 | &icu_data[i]); | ||
401 | for (irq = irq_base; irq < irq_base + nr_irqs; irq++) | ||
402 | icu_mask_irq(irq_get_irq_data(irq)); | ||
403 | } | ||
404 | max_icu_nr = i; | ||
405 | return 0; | ||
406 | err: | ||
407 | of_node_put(node); | ||
408 | max_icu_nr = i; | ||
409 | return ret; | ||
410 | } | ||
411 | |||
412 | void __init mmp_dt_irq_init(void) | ||
413 | { | ||
414 | struct device_node *node; | ||
415 | const struct of_device_id *of_id; | ||
416 | struct mmp_intc_conf *conf; | ||
417 | int nr_irqs, irq_base, ret, irq; | ||
418 | |||
419 | node = of_find_matching_node(NULL, intc_ids); | ||
420 | if (!node) { | ||
421 | pr_err("Failed to find interrupt controller in arch-mmp\n"); | ||
422 | return; | ||
423 | } | ||
424 | of_id = of_match_node(intc_ids, node); | ||
425 | conf = of_id->data; | ||
426 | |||
427 | ret = of_property_read_u32(node, "mrvl,intc-nr-irqs", &nr_irqs); | ||
428 | if (ret) { | ||
429 | pr_err("Not found mrvl,intc-nr-irqs property\n"); | ||
430 | return; | ||
431 | } | ||
432 | |||
433 | mmp_icu_base = of_iomap(node, 0); | ||
434 | if (!mmp_icu_base) { | ||
435 | pr_err("Failed to get interrupt controller register\n"); | ||
436 | return; | ||
437 | } | ||
438 | |||
439 | irq_base = irq_alloc_descs(-1, 0, nr_irqs - NR_IRQS_LEGACY, 0); | ||
440 | if (irq_base < 0) { | ||
441 | pr_err("Failed to allocate IRQ numbers\n"); | ||
442 | goto err; | ||
443 | } else if (irq_base != NR_IRQS_LEGACY) { | ||
444 | pr_err("ICU's irqbase should be started from 0\n"); | ||
445 | goto err; | ||
446 | } | ||
447 | icu_data[0].conf_enable = conf->conf_enable; | ||
448 | icu_data[0].conf_disable = conf->conf_disable; | ||
449 | icu_data[0].conf_mask = conf->conf_mask; | ||
450 | icu_data[0].nr_irqs = nr_irqs; | ||
451 | icu_data[0].virq_base = 0; | ||
452 | icu_data[0].domain = irq_domain_add_legacy(node, nr_irqs, 0, 0, | ||
453 | &mmp_irq_domain_ops, | ||
454 | &icu_data[0]); | ||
455 | irq_set_default_host(icu_data[0].domain); | ||
456 | for (irq = 0; irq < nr_irqs; irq++) | ||
457 | icu_mask_irq(irq_get_irq_data(irq)); | ||
458 | mmp2_mux_init(node); | ||
459 | return; | ||
460 | err: | ||
461 | iounmap(mmp_icu_base); | ||
462 | } | ||
463 | #endif | ||
diff --git a/arch/arm/mach-mmp/mmp-dt.c b/arch/arm/mach-mmp/mmp-dt.c index b37915dc4470..cca529ceecb7 100644 --- a/arch/arm/mach-mmp/mmp-dt.c +++ b/arch/arm/mach-mmp/mmp-dt.c | |||
@@ -9,17 +9,13 @@ | |||
9 | * publishhed by the Free Software Foundation. | 9 | * publishhed by the Free Software Foundation. |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <linux/irq.h> | 12 | #include <linux/irqchip.h> |
13 | #include <linux/irqdomain.h> | ||
14 | #include <linux/of_irq.h> | ||
15 | #include <linux/of_platform.h> | 13 | #include <linux/of_platform.h> |
16 | #include <asm/mach/arch.h> | 14 | #include <asm/mach/arch.h> |
17 | #include <asm/mach/time.h> | 15 | #include <asm/mach/time.h> |
18 | #include <mach/irqs.h> | ||
19 | 16 | ||
20 | #include "common.h" | 17 | #include "common.h" |
21 | 18 | ||
22 | extern void __init mmp_dt_irq_init(void); | ||
23 | extern void __init mmp_dt_init_timer(void); | 19 | extern void __init mmp_dt_init_timer(void); |
24 | 20 | ||
25 | static const struct of_dev_auxdata pxa168_auxdata_lookup[] __initconst = { | 21 | static const struct of_dev_auxdata pxa168_auxdata_lookup[] __initconst = { |
@@ -64,7 +60,6 @@ static const char *mmp_dt_board_compat[] __initdata = { | |||
64 | 60 | ||
65 | DT_MACHINE_START(PXA168_DT, "Marvell PXA168 (Device Tree Support)") | 61 | DT_MACHINE_START(PXA168_DT, "Marvell PXA168 (Device Tree Support)") |
66 | .map_io = mmp_map_io, | 62 | .map_io = mmp_map_io, |
67 | .init_irq = mmp_dt_irq_init, | ||
68 | .init_time = mmp_dt_init_timer, | 63 | .init_time = mmp_dt_init_timer, |
69 | .init_machine = pxa168_dt_init, | 64 | .init_machine = pxa168_dt_init, |
70 | .dt_compat = mmp_dt_board_compat, | 65 | .dt_compat = mmp_dt_board_compat, |
@@ -72,7 +67,6 @@ MACHINE_END | |||
72 | 67 | ||
73 | DT_MACHINE_START(PXA910_DT, "Marvell PXA910 (Device Tree Support)") | 68 | DT_MACHINE_START(PXA910_DT, "Marvell PXA910 (Device Tree Support)") |
74 | .map_io = mmp_map_io, | 69 | .map_io = mmp_map_io, |
75 | .init_irq = mmp_dt_irq_init, | ||
76 | .init_time = mmp_dt_init_timer, | 70 | .init_time = mmp_dt_init_timer, |
77 | .init_machine = pxa910_dt_init, | 71 | .init_machine = pxa910_dt_init, |
78 | .dt_compat = mmp_dt_board_compat, | 72 | .dt_compat = mmp_dt_board_compat, |
diff --git a/arch/arm/mach-mmp/mmp2-dt.c b/arch/arm/mach-mmp/mmp2-dt.c index 4ac256720f7d..023cb453f157 100644 --- a/arch/arm/mach-mmp/mmp2-dt.c +++ b/arch/arm/mach-mmp/mmp2-dt.c | |||
@@ -10,18 +10,13 @@ | |||
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <linux/io.h> | 12 | #include <linux/io.h> |
13 | #include <linux/irq.h> | 13 | #include <linux/irqchip.h> |
14 | #include <linux/irqdomain.h> | ||
15 | #include <linux/of_irq.h> | ||
16 | #include <linux/of_platform.h> | 14 | #include <linux/of_platform.h> |
17 | #include <asm/mach/arch.h> | 15 | #include <asm/mach/arch.h> |
18 | #include <asm/mach/time.h> | 16 | #include <asm/mach/time.h> |
19 | #include <mach/irqs.h> | ||
20 | #include <mach/regs-apbc.h> | ||
21 | 17 | ||
22 | #include "common.h" | 18 | #include "common.h" |
23 | 19 | ||
24 | extern void __init mmp_dt_irq_init(void); | ||
25 | extern void __init mmp_dt_init_timer(void); | 20 | extern void __init mmp_dt_init_timer(void); |
26 | 21 | ||
27 | static const struct of_dev_auxdata mmp2_auxdata_lookup[] __initconst = { | 22 | static const struct of_dev_auxdata mmp2_auxdata_lookup[] __initconst = { |
@@ -49,7 +44,6 @@ static const char *mmp2_dt_board_compat[] __initdata = { | |||
49 | 44 | ||
50 | DT_MACHINE_START(MMP2_DT, "Marvell MMP2 (Device Tree Support)") | 45 | DT_MACHINE_START(MMP2_DT, "Marvell MMP2 (Device Tree Support)") |
51 | .map_io = mmp_map_io, | 46 | .map_io = mmp_map_io, |
52 | .init_irq = mmp_dt_irq_init, | ||
53 | .init_time = mmp_dt_init_timer, | 47 | .init_time = mmp_dt_init_timer, |
54 | .init_machine = mmp2_dt_init, | 48 | .init_machine = mmp2_dt_init, |
55 | .dt_compat = mmp2_dt_board_compat, | 49 | .dt_compat = mmp2_dt_board_compat, |
diff --git a/arch/arm/mach-mmp/mmp2.c b/arch/arm/mach-mmp/mmp2.c index c7592f168bbd..a70b5530bd42 100644 --- a/arch/arm/mach-mmp/mmp2.c +++ b/arch/arm/mach-mmp/mmp2.c | |||
@@ -13,6 +13,8 @@ | |||
13 | #include <linux/kernel.h> | 13 | #include <linux/kernel.h> |
14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
15 | #include <linux/io.h> | 15 | #include <linux/io.h> |
16 | #include <linux/irq.h> | ||
17 | #include <linux/irqchip/mmp.h> | ||
16 | #include <linux/platform_device.h> | 18 | #include <linux/platform_device.h> |
17 | 19 | ||
18 | #include <asm/hardware/cache-tauros2.h> | 20 | #include <asm/hardware/cache-tauros2.h> |
@@ -26,6 +28,7 @@ | |||
26 | #include <mach/mfp.h> | 28 | #include <mach/mfp.h> |
27 | #include <mach/devices.h> | 29 | #include <mach/devices.h> |
28 | #include <mach/mmp2.h> | 30 | #include <mach/mmp2.h> |
31 | #include <mach/pm-mmp2.h> | ||
29 | 32 | ||
30 | #include "common.h" | 33 | #include "common.h" |
31 | 34 | ||
@@ -94,6 +97,9 @@ void mmp2_clear_pmic_int(void) | |||
94 | void __init mmp2_init_irq(void) | 97 | void __init mmp2_init_irq(void) |
95 | { | 98 | { |
96 | mmp2_init_icu(); | 99 | mmp2_init_icu(); |
100 | #ifdef CONFIG_PM | ||
101 | icu_irq_chip.irq_set_wake = mmp2_set_wake; | ||
102 | #endif | ||
97 | } | 103 | } |
98 | 104 | ||
99 | static int __init mmp2_init(void) | 105 | static int __init mmp2_init(void) |
diff --git a/arch/arm/mach-mmp/pxa910.c b/arch/arm/mach-mmp/pxa910.c index ce6393acad86..eb57ee196842 100644 --- a/arch/arm/mach-mmp/pxa910.c +++ b/arch/arm/mach-mmp/pxa910.c | |||
@@ -12,6 +12,8 @@ | |||
12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
13 | #include <linux/list.h> | 13 | #include <linux/list.h> |
14 | #include <linux/io.h> | 14 | #include <linux/io.h> |
15 | #include <linux/irq.h> | ||
16 | #include <linux/irqchip/mmp.h> | ||
15 | #include <linux/platform_device.h> | 17 | #include <linux/platform_device.h> |
16 | 18 | ||
17 | #include <asm/hardware/cache-tauros2.h> | 19 | #include <asm/hardware/cache-tauros2.h> |
@@ -23,6 +25,8 @@ | |||
23 | #include <mach/dma.h> | 25 | #include <mach/dma.h> |
24 | #include <mach/mfp.h> | 26 | #include <mach/mfp.h> |
25 | #include <mach/devices.h> | 27 | #include <mach/devices.h> |
28 | #include <mach/pm-pxa910.h> | ||
29 | #include <mach/pxa910.h> | ||
26 | 30 | ||
27 | #include "common.h" | 31 | #include "common.h" |
28 | 32 | ||
@@ -79,6 +83,9 @@ static struct mfp_addr_map pxa910_mfp_addr_map[] __initdata = | |||
79 | void __init pxa910_init_irq(void) | 83 | void __init pxa910_init_irq(void) |
80 | { | 84 | { |
81 | icu_init_irq(); | 85 | icu_init_irq(); |
86 | #ifdef CONFIG_PM | ||
87 | icu_irq_chip.irq_set_wake = pxa910_set_wake; | ||
88 | #endif | ||
82 | } | 89 | } |
83 | 90 | ||
84 | static int __init pxa910_init(void) | 91 | static int __init pxa910_init(void) |
diff --git a/arch/arm/mach-msm/Kconfig b/arch/arm/mach-msm/Kconfig index 614e41e7881b..905efc8cac79 100644 --- a/arch/arm/mach-msm/Kconfig +++ b/arch/arm/mach-msm/Kconfig | |||
@@ -121,8 +121,7 @@ config MSM_SMD | |||
121 | bool | 121 | bool |
122 | 122 | ||
123 | config MSM_GPIOMUX | 123 | config MSM_GPIOMUX |
124 | depends on !(ARCH_MSM8X60 || ARCH_MSM8960) | 124 | bool |
125 | bool "MSM V1 TLMM GPIOMUX architecture" | ||
126 | help | 125 | help |
127 | Support for MSM V1 TLMM GPIOMUX architecture. | 126 | Support for MSM V1 TLMM GPIOMUX architecture. |
128 | 127 | ||
diff --git a/arch/arm/mach-msm/gpiomux-v1.c b/arch/arm/mach-msm/gpiomux-v1.c deleted file mode 100644 index 27de2abd7144..000000000000 --- a/arch/arm/mach-msm/gpiomux-v1.c +++ /dev/null | |||
@@ -1,33 +0,0 @@ | |||
1 | /* Copyright (c) 2010, Code Aurora Forum. All rights reserved. | ||
2 | * | ||
3 | * This program is free software; you can redistribute it and/or modify | ||
4 | * it under the terms of the GNU General Public License version 2 and | ||
5 | * only version 2 as published by the Free Software Foundation. | ||
6 | * | ||
7 | * This program is distributed in the hope that it will be useful, | ||
8 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
9 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
10 | * GNU General Public License for more details. | ||
11 | * | ||
12 | * You should have received a copy of the GNU General Public License | ||
13 | * along with this program; if not, write to the Free Software | ||
14 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA | ||
15 | * 02110-1301, USA. | ||
16 | */ | ||
17 | #include <linux/kernel.h> | ||
18 | #include "gpiomux.h" | ||
19 | #include "proc_comm.h" | ||
20 | |||
21 | void __msm_gpiomux_write(unsigned gpio, gpiomux_config_t val) | ||
22 | { | ||
23 | unsigned tlmm_config = (val & ~GPIOMUX_CTL_MASK) | | ||
24 | ((gpio & 0x3ff) << 4); | ||
25 | unsigned tlmm_disable = 0; | ||
26 | int rc; | ||
27 | |||
28 | rc = msm_proc_comm(PCOM_RPC_GPIO_TLMM_CONFIG_EX, | ||
29 | &tlmm_config, &tlmm_disable); | ||
30 | if (rc) | ||
31 | pr_err("%s: unexpected proc_comm failure %d: %08x %08x\n", | ||
32 | __func__, rc, tlmm_config, tlmm_disable); | ||
33 | } | ||
diff --git a/arch/arm/mach-msm/gpiomux.h b/arch/arm/mach-msm/gpiomux.h index 8e82f41a8923..4410d7766f93 100644 --- a/arch/arm/mach-msm/gpiomux.h +++ b/arch/arm/mach-msm/gpiomux.h | |||
@@ -73,16 +73,6 @@ extern struct msm_gpiomux_config msm_gpiomux_configs[GPIOMUX_NGPIOS]; | |||
73 | int msm_gpiomux_write(unsigned gpio, | 73 | int msm_gpiomux_write(unsigned gpio, |
74 | gpiomux_config_t active, | 74 | gpiomux_config_t active, |
75 | gpiomux_config_t suspended); | 75 | gpiomux_config_t suspended); |
76 | |||
77 | /* Architecture-internal function for use by the framework only. | ||
78 | * This function can assume the following: | ||
79 | * - the gpio value has passed a bounds-check | ||
80 | * - the gpiomux spinlock has been obtained | ||
81 | * | ||
82 | * This function is not for public consumption. External users | ||
83 | * should use msm_gpiomux_write. | ||
84 | */ | ||
85 | void __msm_gpiomux_write(unsigned gpio, gpiomux_config_t val); | ||
86 | #else | 76 | #else |
87 | static inline int msm_gpiomux_write(unsigned gpio, | 77 | static inline int msm_gpiomux_write(unsigned gpio, |
88 | gpiomux_config_t active, | 78 | gpiomux_config_t active, |
diff --git a/arch/arm/mach-msm/headsmp.S b/arch/arm/mach-msm/headsmp.S index bcd5af223dea..6c62c3f82fe6 100644 --- a/arch/arm/mach-msm/headsmp.S +++ b/arch/arm/mach-msm/headsmp.S | |||
@@ -11,8 +11,6 @@ | |||
11 | #include <linux/linkage.h> | 11 | #include <linux/linkage.h> |
12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
13 | 13 | ||
14 | __CPUINIT | ||
15 | |||
16 | /* | 14 | /* |
17 | * MSM specific entry point for secondary CPUs. This provides | 15 | * MSM specific entry point for secondary CPUs. This provides |
18 | * a "holding pen" into which all secondary cores are held until we're | 16 | * a "holding pen" into which all secondary cores are held until we're |
diff --git a/arch/arm/mach-msm/platsmp.c b/arch/arm/mach-msm/platsmp.c index 00cdb0a5dac8..3f06edcdd0ce 100644 --- a/arch/arm/mach-msm/platsmp.c +++ b/arch/arm/mach-msm/platsmp.c | |||
@@ -38,7 +38,7 @@ static inline int get_core_count(void) | |||
38 | return ((read_cpuid_id() >> 4) & 3) + 1; | 38 | return ((read_cpuid_id() >> 4) & 3) + 1; |
39 | } | 39 | } |
40 | 40 | ||
41 | static void __cpuinit msm_secondary_init(unsigned int cpu) | 41 | static void msm_secondary_init(unsigned int cpu) |
42 | { | 42 | { |
43 | /* | 43 | /* |
44 | * let the primary processor know we're out of the | 44 | * let the primary processor know we're out of the |
@@ -54,7 +54,7 @@ static void __cpuinit msm_secondary_init(unsigned int cpu) | |||
54 | spin_unlock(&boot_lock); | 54 | spin_unlock(&boot_lock); |
55 | } | 55 | } |
56 | 56 | ||
57 | static __cpuinit void prepare_cold_cpu(unsigned int cpu) | 57 | static void prepare_cold_cpu(unsigned int cpu) |
58 | { | 58 | { |
59 | int ret; | 59 | int ret; |
60 | ret = scm_set_boot_addr(virt_to_phys(msm_secondary_startup), | 60 | ret = scm_set_boot_addr(virt_to_phys(msm_secondary_startup), |
@@ -73,7 +73,7 @@ static __cpuinit void prepare_cold_cpu(unsigned int cpu) | |||
73 | "address\n"); | 73 | "address\n"); |
74 | } | 74 | } |
75 | 75 | ||
76 | static int __cpuinit msm_boot_secondary(unsigned int cpu, struct task_struct *idle) | 76 | static int msm_boot_secondary(unsigned int cpu, struct task_struct *idle) |
77 | { | 77 | { |
78 | unsigned long timeout; | 78 | unsigned long timeout; |
79 | static int cold_boot_done; | 79 | static int cold_boot_done; |
diff --git a/arch/arm/mach-msm/timer.c b/arch/arm/mach-msm/timer.c index b6418fd5fe0d..8697cfc0d0b6 100644 --- a/arch/arm/mach-msm/timer.c +++ b/arch/arm/mach-msm/timer.c | |||
@@ -139,7 +139,7 @@ static struct clocksource msm_clocksource = { | |||
139 | }; | 139 | }; |
140 | 140 | ||
141 | #ifdef CONFIG_LOCAL_TIMERS | 141 | #ifdef CONFIG_LOCAL_TIMERS |
142 | static int __cpuinit msm_local_timer_setup(struct clock_event_device *evt) | 142 | static int msm_local_timer_setup(struct clock_event_device *evt) |
143 | { | 143 | { |
144 | /* Use existing clock_event for cpu 0 */ | 144 | /* Use existing clock_event for cpu 0 */ |
145 | if (!smp_processor_id()) | 145 | if (!smp_processor_id()) |
@@ -164,7 +164,7 @@ static void msm_local_timer_stop(struct clock_event_device *evt) | |||
164 | disable_percpu_irq(evt->irq); | 164 | disable_percpu_irq(evt->irq); |
165 | } | 165 | } |
166 | 166 | ||
167 | static struct local_timer_ops msm_local_timer_ops __cpuinitdata = { | 167 | static struct local_timer_ops msm_local_timer_ops = { |
168 | .setup = msm_local_timer_setup, | 168 | .setup = msm_local_timer_setup, |
169 | .stop = msm_local_timer_stop, | 169 | .stop = msm_local_timer_stop, |
170 | }; | 170 | }; |
diff --git a/arch/arm/mach-mvebu/coherency.c b/arch/arm/mach-mvebu/coherency.c index be117591f7f2..4c24303ec481 100644 --- a/arch/arm/mach-mvebu/coherency.c +++ b/arch/arm/mach-mvebu/coherency.c | |||
@@ -28,7 +28,7 @@ | |||
28 | #include <asm/cacheflush.h> | 28 | #include <asm/cacheflush.h> |
29 | #include "armada-370-xp.h" | 29 | #include "armada-370-xp.h" |
30 | 30 | ||
31 | unsigned long __cpuinitdata coherency_phys_base; | 31 | unsigned long coherency_phys_base; |
32 | static void __iomem *coherency_base; | 32 | static void __iomem *coherency_base; |
33 | static void __iomem *coherency_cpu_base; | 33 | static void __iomem *coherency_cpu_base; |
34 | 34 | ||
diff --git a/arch/arm/mach-mvebu/headsmp.S b/arch/arm/mach-mvebu/headsmp.S index 7147300c8af2..8a1b0c96e9ec 100644 --- a/arch/arm/mach-mvebu/headsmp.S +++ b/arch/arm/mach-mvebu/headsmp.S | |||
@@ -21,8 +21,6 @@ | |||
21 | #include <linux/linkage.h> | 21 | #include <linux/linkage.h> |
22 | #include <linux/init.h> | 22 | #include <linux/init.h> |
23 | 23 | ||
24 | __CPUINIT | ||
25 | |||
26 | /* | 24 | /* |
27 | * Armada XP specific entry point for secondary CPUs. | 25 | * Armada XP specific entry point for secondary CPUs. |
28 | * We add the CPU to the coherency fabric and then jump to secondary | 26 | * We add the CPU to the coherency fabric and then jump to secondary |
diff --git a/arch/arm/mach-mvebu/platsmp.c b/arch/arm/mach-mvebu/platsmp.c index 93f2f3ab45f1..ce81d3031405 100644 --- a/arch/arm/mach-mvebu/platsmp.c +++ b/arch/arm/mach-mvebu/platsmp.c | |||
@@ -71,13 +71,12 @@ void __init set_secondary_cpus_clock(void) | |||
71 | } | 71 | } |
72 | } | 72 | } |
73 | 73 | ||
74 | static void __cpuinit armada_xp_secondary_init(unsigned int cpu) | 74 | static void armada_xp_secondary_init(unsigned int cpu) |
75 | { | 75 | { |
76 | armada_xp_mpic_smp_cpu_init(); | 76 | armada_xp_mpic_smp_cpu_init(); |
77 | } | 77 | } |
78 | 78 | ||
79 | static int __cpuinit armada_xp_boot_secondary(unsigned int cpu, | 79 | static int armada_xp_boot_secondary(unsigned int cpu, struct task_struct *idle) |
80 | struct task_struct *idle) | ||
81 | { | 80 | { |
82 | pr_info("Booting CPU %d\n", cpu); | 81 | pr_info("Booting CPU %d\n", cpu); |
83 | 82 | ||
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index 627fa7e41fba..3eed0006d189 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig | |||
@@ -62,7 +62,7 @@ config SOC_OMAP5 | |||
62 | select HAVE_SMP | 62 | select HAVE_SMP |
63 | select COMMON_CLK | 63 | select COMMON_CLK |
64 | select HAVE_ARM_ARCH_TIMER | 64 | select HAVE_ARM_ARCH_TIMER |
65 | select ARM_ERRATA_798181 | 65 | select ARM_ERRATA_798181 if SMP |
66 | 66 | ||
67 | config SOC_AM33XX | 67 | config SOC_AM33XX |
68 | bool "AM33XX support" | 68 | bool "AM33XX support" |
diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c index e5fbfed69aa2..be5d005ebad2 100644 --- a/arch/arm/mach-omap2/board-generic.c +++ b/arch/arm/mach-omap2/board-generic.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/of_irq.h> | 15 | #include <linux/of_irq.h> |
16 | #include <linux/of_platform.h> | 16 | #include <linux/of_platform.h> |
17 | #include <linux/irqdomain.h> | 17 | #include <linux/irqdomain.h> |
18 | #include <linux/clk.h> | ||
18 | 19 | ||
19 | #include <asm/mach/arch.h> | 20 | #include <asm/mach/arch.h> |
20 | 21 | ||
@@ -35,6 +36,21 @@ static struct of_device_id omap_dt_match_table[] __initdata = { | |||
35 | { } | 36 | { } |
36 | }; | 37 | }; |
37 | 38 | ||
39 | /* | ||
40 | * Create alias for USB host PHY clock. | ||
41 | * Remove this when clock phandle can be provided via DT | ||
42 | */ | ||
43 | static void __init legacy_init_ehci_clk(char *clkname) | ||
44 | { | ||
45 | int ret; | ||
46 | |||
47 | ret = clk_add_alias("main_clk", NULL, clkname, NULL); | ||
48 | if (ret) { | ||
49 | pr_err("%s:Failed to add main_clk alias to %s :%d\n", | ||
50 | __func__, clkname, ret); | ||
51 | } | ||
52 | } | ||
53 | |||
38 | static void __init omap_generic_init(void) | 54 | static void __init omap_generic_init(void) |
39 | { | 55 | { |
40 | omap_sdrc_init(NULL, NULL); | 56 | omap_sdrc_init(NULL, NULL); |
@@ -45,10 +61,15 @@ static void __init omap_generic_init(void) | |||
45 | * HACK: call display setup code for selected boards to enable omapdss. | 61 | * HACK: call display setup code for selected boards to enable omapdss. |
46 | * This will be removed when omapdss supports DT. | 62 | * This will be removed when omapdss supports DT. |
47 | */ | 63 | */ |
48 | if (of_machine_is_compatible("ti,omap4-panda")) | 64 | if (of_machine_is_compatible("ti,omap4-panda")) { |
49 | omap4_panda_display_init_of(); | 65 | omap4_panda_display_init_of(); |
66 | legacy_init_ehci_clk("auxclk3_ck"); | ||
67 | |||
68 | } | ||
50 | else if (of_machine_is_compatible("ti,omap4-sdp")) | 69 | else if (of_machine_is_compatible("ti,omap4-sdp")) |
51 | omap_4430sdp_display_init_of(); | 70 | omap_4430sdp_display_init_of(); |
71 | else if (of_machine_is_compatible("ti,omap5-uevm")) | ||
72 | legacy_init_ehci_clk("auxclk1_ck"); | ||
52 | } | 73 | } |
53 | 74 | ||
54 | #ifdef CONFIG_SOC_OMAP2420 | 75 | #ifdef CONFIG_SOC_OMAP2420 |
diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c index f6eeb87e4e95..827d15009a86 100644 --- a/arch/arm/mach-omap2/board-n8x0.c +++ b/arch/arm/mach-omap2/board-n8x0.c | |||
@@ -122,11 +122,7 @@ static struct musb_hdrc_config musb_config = { | |||
122 | }; | 122 | }; |
123 | 123 | ||
124 | static struct musb_hdrc_platform_data tusb_data = { | 124 | static struct musb_hdrc_platform_data tusb_data = { |
125 | #ifdef CONFIG_USB_GADGET_MUSB_HDRC | ||
126 | .mode = MUSB_OTG, | 125 | .mode = MUSB_OTG, |
127 | #else | ||
128 | .mode = MUSB_HOST, | ||
129 | #endif | ||
130 | .set_power = tusb_set_power, | 126 | .set_power = tusb_set_power, |
131 | .min_power = 25, /* x2 = 50 mA drawn from VBUS as peripheral */ | 127 | .min_power = 25, /* x2 = 50 mA drawn from VBUS as peripheral */ |
132 | .power = 100, /* Max 100 mA VBUS for host mode */ | 128 | .power = 100, /* Max 100 mA VBUS for host mode */ |
diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c index d2ea68ea678a..7735105561d8 100644 --- a/arch/arm/mach-omap2/board-rx51.c +++ b/arch/arm/mach-omap2/board-rx51.c | |||
@@ -85,7 +85,7 @@ static struct omap_board_mux board_mux[] __initdata = { | |||
85 | 85 | ||
86 | static struct omap_musb_board_data musb_board_data = { | 86 | static struct omap_musb_board_data musb_board_data = { |
87 | .interface_type = MUSB_INTERFACE_ULPI, | 87 | .interface_type = MUSB_INTERFACE_ULPI, |
88 | .mode = MUSB_PERIPHERAL, | 88 | .mode = MUSB_OTG, |
89 | .power = 0, | 89 | .power = 0, |
90 | }; | 90 | }; |
91 | 91 | ||
diff --git a/arch/arm/mach-omap2/dss-common.c b/arch/arm/mach-omap2/dss-common.c index 393aeefaebb0..043e5705f2a6 100644 --- a/arch/arm/mach-omap2/dss-common.c +++ b/arch/arm/mach-omap2/dss-common.c | |||
@@ -42,7 +42,7 @@ | |||
42 | 42 | ||
43 | /* Using generic display panel */ | 43 | /* Using generic display panel */ |
44 | static struct tfp410_platform_data omap4_dvi_panel = { | 44 | static struct tfp410_platform_data omap4_dvi_panel = { |
45 | .i2c_bus_num = 3, | 45 | .i2c_bus_num = 2, |
46 | .power_down_gpio = PANDA_DVI_TFP410_POWER_DOWN_GPIO, | 46 | .power_down_gpio = PANDA_DVI_TFP410_POWER_DOWN_GPIO, |
47 | }; | 47 | }; |
48 | 48 | ||
diff --git a/arch/arm/mach-omap2/omap-headsmp.S b/arch/arm/mach-omap2/omap-headsmp.S index 4ea308114165..75e92952c18e 100644 --- a/arch/arm/mach-omap2/omap-headsmp.S +++ b/arch/arm/mach-omap2/omap-headsmp.S | |||
@@ -20,8 +20,6 @@ | |||
20 | 20 | ||
21 | #include "omap44xx.h" | 21 | #include "omap44xx.h" |
22 | 22 | ||
23 | __CPUINIT | ||
24 | |||
25 | /* Physical address needed since MMU not enabled yet on secondary core */ | 23 | /* Physical address needed since MMU not enabled yet on secondary core */ |
26 | #define AUX_CORE_BOOT0_PA 0x48281800 | 24 | #define AUX_CORE_BOOT0_PA 0x48281800 |
27 | 25 | ||
diff --git a/arch/arm/mach-omap2/omap-mpuss-lowpower.c b/arch/arm/mach-omap2/omap-mpuss-lowpower.c index f993a4188701..f991016e2a6a 100644 --- a/arch/arm/mach-omap2/omap-mpuss-lowpower.c +++ b/arch/arm/mach-omap2/omap-mpuss-lowpower.c | |||
@@ -291,7 +291,7 @@ int omap4_enter_lowpower(unsigned int cpu, unsigned int power_state) | |||
291 | * @cpu : CPU ID | 291 | * @cpu : CPU ID |
292 | * @power_state: CPU low power state. | 292 | * @power_state: CPU low power state. |
293 | */ | 293 | */ |
294 | int __cpuinit omap4_hotplug_cpu(unsigned int cpu, unsigned int power_state) | 294 | int omap4_hotplug_cpu(unsigned int cpu, unsigned int power_state) |
295 | { | 295 | { |
296 | struct omap4_cpu_pm_info *pm_info = &per_cpu(omap4_pm_info, cpu); | 296 | struct omap4_cpu_pm_info *pm_info = &per_cpu(omap4_pm_info, cpu); |
297 | unsigned int cpu_state = 0; | 297 | unsigned int cpu_state = 0; |
diff --git a/arch/arm/mach-omap2/omap-smp.c b/arch/arm/mach-omap2/omap-smp.c index 98a11463a843..8708b2a9da45 100644 --- a/arch/arm/mach-omap2/omap-smp.c +++ b/arch/arm/mach-omap2/omap-smp.c | |||
@@ -51,7 +51,7 @@ void __iomem *omap4_get_scu_base(void) | |||
51 | return scu_base; | 51 | return scu_base; |
52 | } | 52 | } |
53 | 53 | ||
54 | static void __cpuinit omap4_secondary_init(unsigned int cpu) | 54 | static void omap4_secondary_init(unsigned int cpu) |
55 | { | 55 | { |
56 | /* | 56 | /* |
57 | * Configure ACTRL and enable NS SMP bit access on CPU1 on HS device. | 57 | * Configure ACTRL and enable NS SMP bit access on CPU1 on HS device. |
@@ -72,7 +72,7 @@ static void __cpuinit omap4_secondary_init(unsigned int cpu) | |||
72 | spin_unlock(&boot_lock); | 72 | spin_unlock(&boot_lock); |
73 | } | 73 | } |
74 | 74 | ||
75 | static int __cpuinit omap4_boot_secondary(unsigned int cpu, struct task_struct *idle) | 75 | static int omap4_boot_secondary(unsigned int cpu, struct task_struct *idle) |
76 | { | 76 | { |
77 | static struct clockdomain *cpu1_clkdm; | 77 | static struct clockdomain *cpu1_clkdm; |
78 | static bool booted; | 78 | static bool booted; |
diff --git a/arch/arm/mach-omap2/omap-wakeupgen.c b/arch/arm/mach-omap2/omap-wakeupgen.c index f8bb3b9b6a76..813c61558a5f 100644 --- a/arch/arm/mach-omap2/omap-wakeupgen.c +++ b/arch/arm/mach-omap2/omap-wakeupgen.c | |||
@@ -323,8 +323,8 @@ static void irq_save_secure_context(void) | |||
323 | #endif | 323 | #endif |
324 | 324 | ||
325 | #ifdef CONFIG_HOTPLUG_CPU | 325 | #ifdef CONFIG_HOTPLUG_CPU |
326 | static int __cpuinit irq_cpu_hotplug_notify(struct notifier_block *self, | 326 | static int irq_cpu_hotplug_notify(struct notifier_block *self, |
327 | unsigned long action, void *hcpu) | 327 | unsigned long action, void *hcpu) |
328 | { | 328 | { |
329 | unsigned int cpu = (unsigned int)hcpu; | 329 | unsigned int cpu = (unsigned int)hcpu; |
330 | 330 | ||
diff --git a/arch/arm/mach-omap2/omap_device.c b/arch/arm/mach-omap2/omap_device.c index 5cc92874be7e..f99f68e1e85b 100644 --- a/arch/arm/mach-omap2/omap_device.c +++ b/arch/arm/mach-omap2/omap_device.c | |||
@@ -129,6 +129,7 @@ static int omap_device_build_from_dt(struct platform_device *pdev) | |||
129 | struct device_node *node = pdev->dev.of_node; | 129 | struct device_node *node = pdev->dev.of_node; |
130 | const char *oh_name; | 130 | const char *oh_name; |
131 | int oh_cnt, i, ret = 0; | 131 | int oh_cnt, i, ret = 0; |
132 | bool device_active = false; | ||
132 | 133 | ||
133 | oh_cnt = of_property_count_strings(node, "ti,hwmods"); | 134 | oh_cnt = of_property_count_strings(node, "ti,hwmods"); |
134 | if (oh_cnt <= 0) { | 135 | if (oh_cnt <= 0) { |
@@ -152,6 +153,8 @@ static int omap_device_build_from_dt(struct platform_device *pdev) | |||
152 | goto odbfd_exit1; | 153 | goto odbfd_exit1; |
153 | } | 154 | } |
154 | hwmods[i] = oh; | 155 | hwmods[i] = oh; |
156 | if (oh->flags & HWMOD_INIT_NO_IDLE) | ||
157 | device_active = true; | ||
155 | } | 158 | } |
156 | 159 | ||
157 | od = omap_device_alloc(pdev, hwmods, oh_cnt); | 160 | od = omap_device_alloc(pdev, hwmods, oh_cnt); |
@@ -172,6 +175,11 @@ static int omap_device_build_from_dt(struct platform_device *pdev) | |||
172 | 175 | ||
173 | pdev->dev.pm_domain = &omap_device_pm_domain; | 176 | pdev->dev.pm_domain = &omap_device_pm_domain; |
174 | 177 | ||
178 | if (device_active) { | ||
179 | omap_device_enable(pdev); | ||
180 | pm_runtime_set_active(&pdev->dev); | ||
181 | } | ||
182 | |||
175 | odbfd_exit1: | 183 | odbfd_exit1: |
176 | kfree(hwmods); | 184 | kfree(hwmods); |
177 | odbfd_exit: | 185 | odbfd_exit: |
@@ -842,6 +850,7 @@ static int __init omap_device_late_idle(struct device *dev, void *data) | |||
842 | { | 850 | { |
843 | struct platform_device *pdev = to_platform_device(dev); | 851 | struct platform_device *pdev = to_platform_device(dev); |
844 | struct omap_device *od = to_omap_device(pdev); | 852 | struct omap_device *od = to_omap_device(pdev); |
853 | int i; | ||
845 | 854 | ||
846 | if (!od) | 855 | if (!od) |
847 | return 0; | 856 | return 0; |
@@ -850,6 +859,15 @@ static int __init omap_device_late_idle(struct device *dev, void *data) | |||
850 | * If omap_device state is enabled, but has no driver bound, | 859 | * If omap_device state is enabled, but has no driver bound, |
851 | * idle it. | 860 | * idle it. |
852 | */ | 861 | */ |
862 | |||
863 | /* | ||
864 | * Some devices (like memory controllers) are always kept | ||
865 | * enabled, and should not be idled even with no drivers. | ||
866 | */ | ||
867 | for (i = 0; i < od->hwmods_cnt; i++) | ||
868 | if (od->hwmods[i]->flags & HWMOD_INIT_NO_IDLE) | ||
869 | return 0; | ||
870 | |||
853 | if (od->_driver_status != BUS_NOTIFY_BOUND_DRIVER) { | 871 | if (od->_driver_status != BUS_NOTIFY_BOUND_DRIVER) { |
854 | if (od->_state == OMAP_DEVICE_STATE_ENABLED) { | 872 | if (od->_state == OMAP_DEVICE_STATE_ENABLED) { |
855 | dev_warn(dev, "%s: enabled but no driver. Idling\n", | 873 | dev_warn(dev, "%s: enabled but no driver. Idling\n", |
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 7341eff63f56..7f4db12b1459 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c | |||
@@ -2386,7 +2386,7 @@ static void __init _init_mpu_rt_base(struct omap_hwmod *oh, void *data) | |||
2386 | 2386 | ||
2387 | np = of_dev_hwmod_lookup(of_find_node_by_name(NULL, "ocp"), oh); | 2387 | np = of_dev_hwmod_lookup(of_find_node_by_name(NULL, "ocp"), oh); |
2388 | if (np) | 2388 | if (np) |
2389 | va_start = of_iomap(np, 0); | 2389 | va_start = of_iomap(np, oh->mpu_rt_idx); |
2390 | } else { | 2390 | } else { |
2391 | va_start = ioremap(mem->pa_start, mem->pa_end - mem->pa_start); | 2391 | va_start = ioremap(mem->pa_start, mem->pa_end - mem->pa_start); |
2392 | } | 2392 | } |
diff --git a/arch/arm/mach-omap2/omap_hwmod.h b/arch/arm/mach-omap2/omap_hwmod.h index aab33fd814c0..e1482a9b3bc2 100644 --- a/arch/arm/mach-omap2/omap_hwmod.h +++ b/arch/arm/mach-omap2/omap_hwmod.h | |||
@@ -95,6 +95,54 @@ extern struct omap_hwmod_sysc_fields omap_hwmod_sysc_type3; | |||
95 | #define MODULEMODE_HWCTRL 1 | 95 | #define MODULEMODE_HWCTRL 1 |
96 | #define MODULEMODE_SWCTRL 2 | 96 | #define MODULEMODE_SWCTRL 2 |
97 | 97 | ||
98 | #define DEBUG_OMAP2UART1_FLAGS 0 | ||
99 | #define DEBUG_OMAP2UART2_FLAGS 0 | ||
100 | #define DEBUG_OMAP2UART3_FLAGS 0 | ||
101 | #define DEBUG_OMAP3UART3_FLAGS 0 | ||
102 | #define DEBUG_OMAP3UART4_FLAGS 0 | ||
103 | #define DEBUG_OMAP4UART3_FLAGS 0 | ||
104 | #define DEBUG_OMAP4UART4_FLAGS 0 | ||
105 | #define DEBUG_TI81XXUART1_FLAGS 0 | ||
106 | #define DEBUG_TI81XXUART2_FLAGS 0 | ||
107 | #define DEBUG_TI81XXUART3_FLAGS 0 | ||
108 | #define DEBUG_AM33XXUART1_FLAGS 0 | ||
109 | |||
110 | #define DEBUG_OMAPUART_FLAGS (HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET) | ||
111 | |||
112 | #if defined(CONFIG_DEBUG_OMAP2UART1) | ||
113 | #undef DEBUG_OMAP2UART1_FLAGS | ||
114 | #define DEBUG_OMAP2UART1_FLAGS DEBUG_OMAPUART_FLAGS | ||
115 | #elif defined(CONFIG_DEBUG_OMAP2UART2) | ||
116 | #undef DEBUG_OMAP2UART2_FLAGS | ||
117 | #define DEBUG_OMAP2UART2_FLAGS DEBUG_OMAPUART_FLAGS | ||
118 | #elif defined(CONFIG_DEBUG_OMAP2UART3) | ||
119 | #undef DEBUG_OMAP2UART3_FLAGS | ||
120 | #define DEBUG_OMAP2UART3_FLAGS DEBUG_OMAPUART_FLAGS | ||
121 | #elif defined(CONFIG_DEBUG_OMAP3UART3) | ||
122 | #undef DEBUG_OMAP3UART3_FLAGS | ||
123 | #define DEBUG_OMAP3UART3_FLAGS DEBUG_OMAPUART_FLAGS | ||
124 | #elif defined(CONFIG_DEBUG_OMAP3UART4) | ||
125 | #undef DEBUG_OMAP3UART4_FLAGS | ||
126 | #define DEBUG_OMAP3UART4_FLAGS DEBUG_OMAPUART_FLAGS | ||
127 | #elif defined(CONFIG_DEBUG_OMAP4UART3) | ||
128 | #undef DEBUG_OMAP4UART3_FLAGS | ||
129 | #define DEBUG_OMAP4UART3_FLAGS DEBUG_OMAPUART_FLAGS | ||
130 | #elif defined(CONFIG_DEBUG_OMAP4UART4) | ||
131 | #undef DEBUG_OMAP4UART4_FLAGS | ||
132 | #define DEBUG_OMAP4UART4_FLAGS DEBUG_OMAPUART_FLAGS | ||
133 | #elif defined(CONFIG_DEBUG_TI81XXUART1) | ||
134 | #undef DEBUG_TI81XXUART1_FLAGS | ||
135 | #define DEBUG_TI81XXUART1_FLAGS DEBUG_OMAPUART_FLAGS | ||
136 | #elif defined(CONFIG_DEBUG_TI81XXUART2) | ||
137 | #undef DEBUG_TI81XXUART2_FLAGS | ||
138 | #define DEBUG_TI81XXUART2_FLAGS DEBUG_OMAPUART_FLAGS | ||
139 | #elif defined(CONFIG_DEBUG_TI81XXUART3) | ||
140 | #undef DEBUG_TI81XXUART3_FLAGS | ||
141 | #define DEBUG_TI81XXUART3_FLAGS DEBUG_OMAPUART_FLAGS | ||
142 | #elif defined(CONFIG_DEBUG_AM33XXUART1) | ||
143 | #undef DEBUG_AM33XXUART1_FLAGS | ||
144 | #define DEBUG_AM33XXUART1_FLAGS DEBUG_OMAPUART_FLAGS | ||
145 | #endif | ||
98 | 146 | ||
99 | /** | 147 | /** |
100 | * struct omap_hwmod_mux_info - hwmod specific mux configuration | 148 | * struct omap_hwmod_mux_info - hwmod specific mux configuration |
@@ -568,6 +616,7 @@ struct omap_hwmod_link { | |||
568 | * @voltdm: pointer to voltage domain (filled in at runtime) | 616 | * @voltdm: pointer to voltage domain (filled in at runtime) |
569 | * @dev_attr: arbitrary device attributes that can be passed to the driver | 617 | * @dev_attr: arbitrary device attributes that can be passed to the driver |
570 | * @_sysc_cache: internal-use hwmod flags | 618 | * @_sysc_cache: internal-use hwmod flags |
619 | * @mpu_rt_idx: index of device address space for register target (for DT boot) | ||
571 | * @_mpu_rt_va: cached register target start address (internal use) | 620 | * @_mpu_rt_va: cached register target start address (internal use) |
572 | * @_mpu_port: cached MPU register target slave (internal use) | 621 | * @_mpu_port: cached MPU register target slave (internal use) |
573 | * @opt_clks_cnt: number of @opt_clks | 622 | * @opt_clks_cnt: number of @opt_clks |
@@ -617,6 +666,7 @@ struct omap_hwmod { | |||
617 | struct list_head node; | 666 | struct list_head node; |
618 | struct omap_hwmod_ocp_if *_mpu_port; | 667 | struct omap_hwmod_ocp_if *_mpu_port; |
619 | u16 flags; | 668 | u16 flags; |
669 | u8 mpu_rt_idx; | ||
620 | u8 response_lat; | 670 | u8 response_lat; |
621 | u8 rst_lines_cnt; | 671 | u8 rst_lines_cnt; |
622 | u8 opt_clks_cnt; | 672 | u8 opt_clks_cnt; |
diff --git a/arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c b/arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c index d05fc7b54567..56cebb05509e 100644 --- a/arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_2xxx_ipblock_data.c | |||
@@ -512,7 +512,7 @@ struct omap_hwmod omap2xxx_uart1_hwmod = { | |||
512 | .mpu_irqs = omap2_uart1_mpu_irqs, | 512 | .mpu_irqs = omap2_uart1_mpu_irqs, |
513 | .sdma_reqs = omap2_uart1_sdma_reqs, | 513 | .sdma_reqs = omap2_uart1_sdma_reqs, |
514 | .main_clk = "uart1_fck", | 514 | .main_clk = "uart1_fck", |
515 | .flags = HWMOD_SWSUP_SIDLE_ACT, | 515 | .flags = DEBUG_OMAP2UART1_FLAGS | HWMOD_SWSUP_SIDLE_ACT, |
516 | .prcm = { | 516 | .prcm = { |
517 | .omap2 = { | 517 | .omap2 = { |
518 | .module_offs = CORE_MOD, | 518 | .module_offs = CORE_MOD, |
@@ -532,7 +532,7 @@ struct omap_hwmod omap2xxx_uart2_hwmod = { | |||
532 | .mpu_irqs = omap2_uart2_mpu_irqs, | 532 | .mpu_irqs = omap2_uart2_mpu_irqs, |
533 | .sdma_reqs = omap2_uart2_sdma_reqs, | 533 | .sdma_reqs = omap2_uart2_sdma_reqs, |
534 | .main_clk = "uart2_fck", | 534 | .main_clk = "uart2_fck", |
535 | .flags = HWMOD_SWSUP_SIDLE_ACT, | 535 | .flags = DEBUG_OMAP2UART2_FLAGS | HWMOD_SWSUP_SIDLE_ACT, |
536 | .prcm = { | 536 | .prcm = { |
537 | .omap2 = { | 537 | .omap2 = { |
538 | .module_offs = CORE_MOD, | 538 | .module_offs = CORE_MOD, |
@@ -552,7 +552,7 @@ struct omap_hwmod omap2xxx_uart3_hwmod = { | |||
552 | .mpu_irqs = omap2_uart3_mpu_irqs, | 552 | .mpu_irqs = omap2_uart3_mpu_irqs, |
553 | .sdma_reqs = omap2_uart3_sdma_reqs, | 553 | .sdma_reqs = omap2_uart3_sdma_reqs, |
554 | .main_clk = "uart3_fck", | 554 | .main_clk = "uart3_fck", |
555 | .flags = HWMOD_SWSUP_SIDLE_ACT, | 555 | .flags = DEBUG_OMAP2UART3_FLAGS | HWMOD_SWSUP_SIDLE_ACT, |
556 | .prcm = { | 556 | .prcm = { |
557 | .omap2 = { | 557 | .omap2 = { |
558 | .module_offs = CORE_MOD, | 558 | .module_offs = CORE_MOD, |
diff --git a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c index 28bbd56346a9..eb2f3b93b51c 100644 --- a/arch/arm/mach-omap2/omap_hwmod_33xx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_33xx_data.c | |||
@@ -562,6 +562,7 @@ static struct omap_hwmod am33xx_cpgmac0_hwmod = { | |||
562 | .clkdm_name = "cpsw_125mhz_clkdm", | 562 | .clkdm_name = "cpsw_125mhz_clkdm", |
563 | .flags = (HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY), | 563 | .flags = (HWMOD_SWSUP_SIDLE | HWMOD_SWSUP_MSTANDBY), |
564 | .main_clk = "cpsw_125mhz_gclk", | 564 | .main_clk = "cpsw_125mhz_gclk", |
565 | .mpu_rt_idx = 1, | ||
565 | .prcm = { | 566 | .prcm = { |
566 | .omap4 = { | 567 | .omap4 = { |
567 | .clkctrl_offs = AM33XX_CM_PER_CPGMAC0_CLKCTRL_OFFSET, | 568 | .clkctrl_offs = AM33XX_CM_PER_CPGMAC0_CLKCTRL_OFFSET, |
@@ -1512,7 +1513,7 @@ static struct omap_hwmod am33xx_uart1_hwmod = { | |||
1512 | .name = "uart1", | 1513 | .name = "uart1", |
1513 | .class = &uart_class, | 1514 | .class = &uart_class, |
1514 | .clkdm_name = "l4_wkup_clkdm", | 1515 | .clkdm_name = "l4_wkup_clkdm", |
1515 | .flags = HWMOD_SWSUP_SIDLE_ACT, | 1516 | .flags = DEBUG_AM33XXUART1_FLAGS | HWMOD_SWSUP_SIDLE_ACT, |
1516 | .main_clk = "dpll_per_m2_div4_wkupdm_ck", | 1517 | .main_clk = "dpll_per_m2_div4_wkupdm_ck", |
1517 | .prcm = { | 1518 | .prcm = { |
1518 | .omap4 = { | 1519 | .omap4 = { |
diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c index f7a3df2fb579..0c3a427da544 100644 --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | |||
@@ -490,7 +490,7 @@ static struct omap_hwmod omap3xxx_uart1_hwmod = { | |||
490 | .mpu_irqs = omap2_uart1_mpu_irqs, | 490 | .mpu_irqs = omap2_uart1_mpu_irqs, |
491 | .sdma_reqs = omap2_uart1_sdma_reqs, | 491 | .sdma_reqs = omap2_uart1_sdma_reqs, |
492 | .main_clk = "uart1_fck", | 492 | .main_clk = "uart1_fck", |
493 | .flags = HWMOD_SWSUP_SIDLE_ACT, | 493 | .flags = DEBUG_TI81XXUART1_FLAGS | HWMOD_SWSUP_SIDLE_ACT, |
494 | .prcm = { | 494 | .prcm = { |
495 | .omap2 = { | 495 | .omap2 = { |
496 | .module_offs = CORE_MOD, | 496 | .module_offs = CORE_MOD, |
@@ -509,7 +509,7 @@ static struct omap_hwmod omap3xxx_uart2_hwmod = { | |||
509 | .mpu_irqs = omap2_uart2_mpu_irqs, | 509 | .mpu_irqs = omap2_uart2_mpu_irqs, |
510 | .sdma_reqs = omap2_uart2_sdma_reqs, | 510 | .sdma_reqs = omap2_uart2_sdma_reqs, |
511 | .main_clk = "uart2_fck", | 511 | .main_clk = "uart2_fck", |
512 | .flags = HWMOD_SWSUP_SIDLE_ACT, | 512 | .flags = DEBUG_TI81XXUART2_FLAGS | HWMOD_SWSUP_SIDLE_ACT, |
513 | .prcm = { | 513 | .prcm = { |
514 | .omap2 = { | 514 | .omap2 = { |
515 | .module_offs = CORE_MOD, | 515 | .module_offs = CORE_MOD, |
@@ -528,7 +528,8 @@ static struct omap_hwmod omap3xxx_uart3_hwmod = { | |||
528 | .mpu_irqs = omap2_uart3_mpu_irqs, | 528 | .mpu_irqs = omap2_uart3_mpu_irqs, |
529 | .sdma_reqs = omap2_uart3_sdma_reqs, | 529 | .sdma_reqs = omap2_uart3_sdma_reqs, |
530 | .main_clk = "uart3_fck", | 530 | .main_clk = "uart3_fck", |
531 | .flags = HWMOD_SWSUP_SIDLE_ACT, | 531 | .flags = DEBUG_OMAP3UART3_FLAGS | DEBUG_TI81XXUART3_FLAGS | |
532 | HWMOD_SWSUP_SIDLE_ACT, | ||
532 | .prcm = { | 533 | .prcm = { |
533 | .omap2 = { | 534 | .omap2 = { |
534 | .module_offs = OMAP3430_PER_MOD, | 535 | .module_offs = OMAP3430_PER_MOD, |
@@ -558,7 +559,7 @@ static struct omap_hwmod omap36xx_uart4_hwmod = { | |||
558 | .mpu_irqs = uart4_mpu_irqs, | 559 | .mpu_irqs = uart4_mpu_irqs, |
559 | .sdma_reqs = uart4_sdma_reqs, | 560 | .sdma_reqs = uart4_sdma_reqs, |
560 | .main_clk = "uart4_fck", | 561 | .main_clk = "uart4_fck", |
561 | .flags = HWMOD_SWSUP_SIDLE_ACT, | 562 | .flags = DEBUG_OMAP3UART4_FLAGS | HWMOD_SWSUP_SIDLE_ACT, |
562 | .prcm = { | 563 | .prcm = { |
563 | .omap2 = { | 564 | .omap2 = { |
564 | .module_offs = OMAP3430_PER_MOD, | 565 | .module_offs = OMAP3430_PER_MOD, |
diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c index d04b5e60fdbe..9c3b504477d7 100644 --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c | |||
@@ -2858,8 +2858,7 @@ static struct omap_hwmod omap44xx_uart3_hwmod = { | |||
2858 | .name = "uart3", | 2858 | .name = "uart3", |
2859 | .class = &omap44xx_uart_hwmod_class, | 2859 | .class = &omap44xx_uart_hwmod_class, |
2860 | .clkdm_name = "l4_per_clkdm", | 2860 | .clkdm_name = "l4_per_clkdm", |
2861 | .flags = HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET | | 2861 | .flags = DEBUG_OMAP4UART3_FLAGS | HWMOD_SWSUP_SIDLE_ACT, |
2862 | HWMOD_SWSUP_SIDLE_ACT, | ||
2863 | .main_clk = "func_48m_fclk", | 2862 | .main_clk = "func_48m_fclk", |
2864 | .prcm = { | 2863 | .prcm = { |
2865 | .omap4 = { | 2864 | .omap4 = { |
@@ -2875,7 +2874,7 @@ static struct omap_hwmod omap44xx_uart4_hwmod = { | |||
2875 | .name = "uart4", | 2874 | .name = "uart4", |
2876 | .class = &omap44xx_uart_hwmod_class, | 2875 | .class = &omap44xx_uart_hwmod_class, |
2877 | .clkdm_name = "l4_per_clkdm", | 2876 | .clkdm_name = "l4_per_clkdm", |
2878 | .flags = HWMOD_SWSUP_SIDLE_ACT, | 2877 | .flags = DEBUG_OMAP4UART4_FLAGS | HWMOD_SWSUP_SIDLE_ACT, |
2879 | .main_clk = "func_48m_fclk", | 2878 | .main_clk = "func_48m_fclk", |
2880 | .prcm = { | 2879 | .prcm = { |
2881 | .omap4 = { | 2880 | .omap4 = { |
diff --git a/arch/arm/mach-omap2/omap_hwmod_54xx_data.c b/arch/arm/mach-omap2/omap_hwmod_54xx_data.c index f37ae96b70a1..3c70f5c1860f 100644 --- a/arch/arm/mach-omap2/omap_hwmod_54xx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_54xx_data.c | |||
@@ -1375,7 +1375,7 @@ static struct omap_hwmod omap54xx_uart3_hwmod = { | |||
1375 | .name = "uart3", | 1375 | .name = "uart3", |
1376 | .class = &omap54xx_uart_hwmod_class, | 1376 | .class = &omap54xx_uart_hwmod_class, |
1377 | .clkdm_name = "l4per_clkdm", | 1377 | .clkdm_name = "l4per_clkdm", |
1378 | .flags = HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET, | 1378 | .flags = DEBUG_OMAP4UART3_FLAGS, |
1379 | .main_clk = "func_48m_fclk", | 1379 | .main_clk = "func_48m_fclk", |
1380 | .prcm = { | 1380 | .prcm = { |
1381 | .omap4 = { | 1381 | .omap4 = { |
@@ -1391,6 +1391,7 @@ static struct omap_hwmod omap54xx_uart4_hwmod = { | |||
1391 | .name = "uart4", | 1391 | .name = "uart4", |
1392 | .class = &omap54xx_uart_hwmod_class, | 1392 | .class = &omap54xx_uart_hwmod_class, |
1393 | .clkdm_name = "l4per_clkdm", | 1393 | .clkdm_name = "l4per_clkdm", |
1394 | .flags = DEBUG_OMAP4UART4_FLAGS, | ||
1394 | .main_clk = "func_48m_fclk", | 1395 | .main_clk = "func_48m_fclk", |
1395 | .prcm = { | 1396 | .prcm = { |
1396 | .omap4 = { | 1397 | .omap4 = { |
diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c index 3a674de6cb63..a388f8c1bcb3 100644 --- a/arch/arm/mach-omap2/serial.c +++ b/arch/arm/mach-omap2/serial.c | |||
@@ -208,17 +208,6 @@ static int __init omap_serial_early_init(void) | |||
208 | pr_info("%s used as console in debug mode: uart%d clocks will not be gated", | 208 | pr_info("%s used as console in debug mode: uart%d clocks will not be gated", |
209 | uart_name, uart->num); | 209 | uart_name, uart->num); |
210 | } | 210 | } |
211 | |||
212 | /* | ||
213 | * omap-uart can be used for earlyprintk logs | ||
214 | * So if omap-uart is used as console then prevent | ||
215 | * uart reset and idle to get logs from omap-uart | ||
216 | * until uart console driver is available to take | ||
217 | * care for console messages. | ||
218 | * Idling or resetting omap-uart while printing logs | ||
219 | * early boot logs can stall the boot-up. | ||
220 | */ | ||
221 | oh->flags |= HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET; | ||
222 | } | 211 | } |
223 | } while (1); | 212 | } while (1); |
224 | 213 | ||
diff --git a/arch/arm/mach-omap2/usb-musb.c b/arch/arm/mach-omap2/usb-musb.c index 8c4de2708cf2..bc897231bd10 100644 --- a/arch/arm/mach-omap2/usb-musb.c +++ b/arch/arm/mach-omap2/usb-musb.c | |||
@@ -38,11 +38,8 @@ static struct musb_hdrc_config musb_config = { | |||
38 | }; | 38 | }; |
39 | 39 | ||
40 | static struct musb_hdrc_platform_data musb_plat = { | 40 | static struct musb_hdrc_platform_data musb_plat = { |
41 | #ifdef CONFIG_USB_GADGET_MUSB_HDRC | ||
42 | .mode = MUSB_OTG, | 41 | .mode = MUSB_OTG, |
43 | #else | 42 | |
44 | .mode = MUSB_HOST, | ||
45 | #endif | ||
46 | /* .clock is set dynamically */ | 43 | /* .clock is set dynamically */ |
47 | .config = &musb_config, | 44 | .config = &musb_config, |
48 | 45 | ||
diff --git a/arch/arm/mach-prima2/headsmp.S b/arch/arm/mach-prima2/headsmp.S index 5b8a408d8921..d86fe33c5f53 100644 --- a/arch/arm/mach-prima2/headsmp.S +++ b/arch/arm/mach-prima2/headsmp.S | |||
@@ -9,8 +9,6 @@ | |||
9 | #include <linux/linkage.h> | 9 | #include <linux/linkage.h> |
10 | #include <linux/init.h> | 10 | #include <linux/init.h> |
11 | 11 | ||
12 | __CPUINIT | ||
13 | |||
14 | /* | 12 | /* |
15 | * SIRFSOC specific entry point for secondary CPUs. This provides | 13 | * SIRFSOC specific entry point for secondary CPUs. This provides |
16 | * a "holding pen" into which all secondary cores are held until we're | 14 | * a "holding pen" into which all secondary cores are held until we're |
diff --git a/arch/arm/mach-prima2/platsmp.c b/arch/arm/mach-prima2/platsmp.c index 1c3de7bed841..3dbcb1ab6e37 100644 --- a/arch/arm/mach-prima2/platsmp.c +++ b/arch/arm/mach-prima2/platsmp.c | |||
@@ -44,7 +44,7 @@ void __init sirfsoc_map_scu(void) | |||
44 | scu_base = (void __iomem *)SIRFSOC_VA(base); | 44 | scu_base = (void __iomem *)SIRFSOC_VA(base); |
45 | } | 45 | } |
46 | 46 | ||
47 | static void __cpuinit sirfsoc_secondary_init(unsigned int cpu) | 47 | static void sirfsoc_secondary_init(unsigned int cpu) |
48 | { | 48 | { |
49 | /* | 49 | /* |
50 | * let the primary processor know we're out of the | 50 | * let the primary processor know we're out of the |
@@ -65,7 +65,7 @@ static struct of_device_id rsc_ids[] = { | |||
65 | {}, | 65 | {}, |
66 | }; | 66 | }; |
67 | 67 | ||
68 | static int __cpuinit sirfsoc_boot_secondary(unsigned int cpu, struct task_struct *idle) | 68 | static int sirfsoc_boot_secondary(unsigned int cpu, struct task_struct *idle) |
69 | { | 69 | { |
70 | unsigned long timeout; | 70 | unsigned long timeout; |
71 | struct device_node *np; | 71 | struct device_node *np; |
diff --git a/arch/arm/mach-pxa/em-x270.c b/arch/arm/mach-pxa/em-x270.c index f6726bb4eb95..3a3362fa793e 100644 --- a/arch/arm/mach-pxa/em-x270.c +++ b/arch/arm/mach-pxa/em-x270.c | |||
@@ -477,16 +477,24 @@ static int em_x270_usb_hub_init(void) | |||
477 | /* USB Hub power-on and reset */ | 477 | /* USB Hub power-on and reset */ |
478 | gpio_direction_output(usb_hub_reset, 1); | 478 | gpio_direction_output(usb_hub_reset, 1); |
479 | gpio_direction_output(GPIO9_USB_VBUS_EN, 0); | 479 | gpio_direction_output(GPIO9_USB_VBUS_EN, 0); |
480 | regulator_enable(em_x270_usb_ldo); | 480 | err = regulator_enable(em_x270_usb_ldo); |
481 | if (err) | ||
482 | goto err_free_rst_gpio; | ||
483 | |||
481 | gpio_set_value(usb_hub_reset, 0); | 484 | gpio_set_value(usb_hub_reset, 0); |
482 | gpio_set_value(usb_hub_reset, 1); | 485 | gpio_set_value(usb_hub_reset, 1); |
483 | regulator_disable(em_x270_usb_ldo); | 486 | regulator_disable(em_x270_usb_ldo); |
484 | regulator_enable(em_x270_usb_ldo); | 487 | err = regulator_enable(em_x270_usb_ldo); |
488 | if (err) | ||
489 | goto err_free_rst_gpio; | ||
490 | |||
485 | gpio_set_value(usb_hub_reset, 0); | 491 | gpio_set_value(usb_hub_reset, 0); |
486 | gpio_set_value(GPIO9_USB_VBUS_EN, 1); | 492 | gpio_set_value(GPIO9_USB_VBUS_EN, 1); |
487 | 493 | ||
488 | return 0; | 494 | return 0; |
489 | 495 | ||
496 | err_free_rst_gpio: | ||
497 | gpio_free(usb_hub_reset); | ||
490 | err_free_vbus_gpio: | 498 | err_free_vbus_gpio: |
491 | gpio_free(GPIO9_USB_VBUS_EN); | 499 | gpio_free(GPIO9_USB_VBUS_EN); |
492 | err_free_usb_ldo: | 500 | err_free_usb_ldo: |
@@ -592,7 +600,7 @@ err_irq: | |||
592 | return err; | 600 | return err; |
593 | } | 601 | } |
594 | 602 | ||
595 | static void em_x270_mci_setpower(struct device *dev, unsigned int vdd) | 603 | static int em_x270_mci_setpower(struct device *dev, unsigned int vdd) |
596 | { | 604 | { |
597 | struct pxamci_platform_data* p_d = dev->platform_data; | 605 | struct pxamci_platform_data* p_d = dev->platform_data; |
598 | 606 | ||
@@ -600,10 +608,11 @@ static void em_x270_mci_setpower(struct device *dev, unsigned int vdd) | |||
600 | int vdd_uV = (2000 + (vdd - __ffs(MMC_VDD_20_21)) * 100) * 1000; | 608 | int vdd_uV = (2000 + (vdd - __ffs(MMC_VDD_20_21)) * 100) * 1000; |
601 | 609 | ||
602 | regulator_set_voltage(em_x270_sdio_ldo, vdd_uV, vdd_uV); | 610 | regulator_set_voltage(em_x270_sdio_ldo, vdd_uV, vdd_uV); |
603 | regulator_enable(em_x270_sdio_ldo); | 611 | return regulator_enable(em_x270_sdio_ldo); |
604 | } else { | 612 | } else { |
605 | regulator_disable(em_x270_sdio_ldo); | 613 | regulator_disable(em_x270_sdio_ldo); |
606 | } | 614 | } |
615 | return 0; | ||
607 | } | 616 | } |
608 | 617 | ||
609 | static void em_x270_mci_exit(struct device *dev, void *data) | 618 | static void em_x270_mci_exit(struct device *dev, void *data) |
diff --git a/arch/arm/mach-pxa/mainstone.c b/arch/arm/mach-pxa/mainstone.c index d2c652318376..dd70343c8708 100644 --- a/arch/arm/mach-pxa/mainstone.c +++ b/arch/arm/mach-pxa/mainstone.c | |||
@@ -408,7 +408,7 @@ static int mainstone_mci_init(struct device *dev, irq_handler_t mstone_detect_in | |||
408 | return err; | 408 | return err; |
409 | } | 409 | } |
410 | 410 | ||
411 | static void mainstone_mci_setpower(struct device *dev, unsigned int vdd) | 411 | static int mainstone_mci_setpower(struct device *dev, unsigned int vdd) |
412 | { | 412 | { |
413 | struct pxamci_platform_data* p_d = dev->platform_data; | 413 | struct pxamci_platform_data* p_d = dev->platform_data; |
414 | 414 | ||
@@ -420,6 +420,7 @@ static void mainstone_mci_setpower(struct device *dev, unsigned int vdd) | |||
420 | printk(KERN_DEBUG "%s: off\n", __func__); | 420 | printk(KERN_DEBUG "%s: off\n", __func__); |
421 | MST_MSCWR1 &= ~MST_MSCWR1_MMC_ON; | 421 | MST_MSCWR1 &= ~MST_MSCWR1_MMC_ON; |
422 | } | 422 | } |
423 | return 0; | ||
423 | } | 424 | } |
424 | 425 | ||
425 | static void mainstone_mci_exit(struct device *dev, void *data) | 426 | static void mainstone_mci_exit(struct device *dev, void *data) |
diff --git a/arch/arm/mach-pxa/pcm990-baseboard.c b/arch/arm/mach-pxa/pcm990-baseboard.c index fb7f1d1627dc..13e5b00eae90 100644 --- a/arch/arm/mach-pxa/pcm990-baseboard.c +++ b/arch/arm/mach-pxa/pcm990-baseboard.c | |||
@@ -335,7 +335,7 @@ static int pcm990_mci_init(struct device *dev, irq_handler_t mci_detect_int, | |||
335 | return err; | 335 | return err; |
336 | } | 336 | } |
337 | 337 | ||
338 | static void pcm990_mci_setpower(struct device *dev, unsigned int vdd) | 338 | static int pcm990_mci_setpower(struct device *dev, unsigned int vdd) |
339 | { | 339 | { |
340 | struct pxamci_platform_data *p_d = dev->platform_data; | 340 | struct pxamci_platform_data *p_d = dev->platform_data; |
341 | u8 val; | 341 | u8 val; |
@@ -348,6 +348,7 @@ static void pcm990_mci_setpower(struct device *dev, unsigned int vdd) | |||
348 | val &= ~PCM990_CTRL_MMC2PWR; | 348 | val &= ~PCM990_CTRL_MMC2PWR; |
349 | 349 | ||
350 | pcm990_cpld_writeb(PCM990_CTRL_MMC2PWR, PCM990_CTRL_REG5); | 350 | pcm990_cpld_writeb(PCM990_CTRL_MMC2PWR, PCM990_CTRL_REG5); |
351 | return 0; | ||
351 | } | 352 | } |
352 | 353 | ||
353 | static void pcm990_mci_exit(struct device *dev, void *data) | 354 | static void pcm990_mci_exit(struct device *dev, void *data) |
diff --git a/arch/arm/mach-pxa/poodle.c b/arch/arm/mach-pxa/poodle.c index 711d37e26bd8..aedf053a1de5 100644 --- a/arch/arm/mach-pxa/poodle.c +++ b/arch/arm/mach-pxa/poodle.c | |||
@@ -258,7 +258,7 @@ err_free_2: | |||
258 | return err; | 258 | return err; |
259 | } | 259 | } |
260 | 260 | ||
261 | static void poodle_mci_setpower(struct device *dev, unsigned int vdd) | 261 | static int poodle_mci_setpower(struct device *dev, unsigned int vdd) |
262 | { | 262 | { |
263 | struct pxamci_platform_data* p_d = dev->platform_data; | 263 | struct pxamci_platform_data* p_d = dev->platform_data; |
264 | 264 | ||
@@ -270,6 +270,8 @@ static void poodle_mci_setpower(struct device *dev, unsigned int vdd) | |||
270 | gpio_set_value(POODLE_GPIO_SD_PWR1, 0); | 270 | gpio_set_value(POODLE_GPIO_SD_PWR1, 0); |
271 | gpio_set_value(POODLE_GPIO_SD_PWR, 0); | 271 | gpio_set_value(POODLE_GPIO_SD_PWR, 0); |
272 | } | 272 | } |
273 | |||
274 | return 0; | ||
273 | } | 275 | } |
274 | 276 | ||
275 | static void poodle_mci_exit(struct device *dev, void *data) | 277 | static void poodle_mci_exit(struct device *dev, void *data) |
diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c index 2125df0444e7..4c29173026e8 100644 --- a/arch/arm/mach-pxa/spitz.c +++ b/arch/arm/mach-pxa/spitz.c | |||
@@ -598,7 +598,7 @@ static inline void spitz_spi_init(void) {} | |||
598 | * NOTE: The card detect interrupt isn't debounced so we delay it by 250ms to | 598 | * NOTE: The card detect interrupt isn't debounced so we delay it by 250ms to |
599 | * give the card a chance to fully insert/eject. | 599 | * give the card a chance to fully insert/eject. |
600 | */ | 600 | */ |
601 | static void spitz_mci_setpower(struct device *dev, unsigned int vdd) | 601 | static int spitz_mci_setpower(struct device *dev, unsigned int vdd) |
602 | { | 602 | { |
603 | struct pxamci_platform_data* p_d = dev->platform_data; | 603 | struct pxamci_platform_data* p_d = dev->platform_data; |
604 | 604 | ||
@@ -606,6 +606,8 @@ static void spitz_mci_setpower(struct device *dev, unsigned int vdd) | |||
606 | spitz_card_pwr_ctrl(SCOOP_CPR_SD_3V, SCOOP_CPR_SD_3V); | 606 | spitz_card_pwr_ctrl(SCOOP_CPR_SD_3V, SCOOP_CPR_SD_3V); |
607 | else | 607 | else |
608 | spitz_card_pwr_ctrl(SCOOP_CPR_SD_3V, 0x0); | 608 | spitz_card_pwr_ctrl(SCOOP_CPR_SD_3V, 0x0); |
609 | |||
610 | return 0; | ||
609 | } | 611 | } |
610 | 612 | ||
611 | static struct pxamci_platform_data spitz_mci_platform_data = { | 613 | static struct pxamci_platform_data spitz_mci_platform_data = { |
diff --git a/arch/arm/mach-pxa/stargate2.c b/arch/arm/mach-pxa/stargate2.c index 88fde43c948c..62aea3e835f3 100644 --- a/arch/arm/mach-pxa/stargate2.c +++ b/arch/arm/mach-pxa/stargate2.c | |||
@@ -734,9 +734,10 @@ static int stargate2_mci_init(struct device *dev, | |||
734 | * | 734 | * |
735 | * Very simple control. Either it is on or off and is controlled by | 735 | * Very simple control. Either it is on or off and is controlled by |
736 | * a gpio pin */ | 736 | * a gpio pin */ |
737 | static void stargate2_mci_setpower(struct device *dev, unsigned int vdd) | 737 | static int stargate2_mci_setpower(struct device *dev, unsigned int vdd) |
738 | { | 738 | { |
739 | gpio_set_value(SG2_SD_POWER_ENABLE, !!vdd); | 739 | gpio_set_value(SG2_SD_POWER_ENABLE, !!vdd); |
740 | return 0; | ||
740 | } | 741 | } |
741 | 742 | ||
742 | static void stargate2_mci_exit(struct device *dev, void *data) | 743 | static void stargate2_mci_exit(struct device *dev, void *data) |
diff --git a/arch/arm/mach-s3c24xx/Kconfig b/arch/arm/mach-s3c24xx/Kconfig index 6d9252e081ce..7791ac76f945 100644 --- a/arch/arm/mach-s3c24xx/Kconfig +++ b/arch/arm/mach-s3c24xx/Kconfig | |||
@@ -208,7 +208,7 @@ config S3C24XX_GPIO_EXTRA128 | |||
208 | 208 | ||
209 | config S3C24XX_PLL | 209 | config S3C24XX_PLL |
210 | bool "Support CPUfreq changing of PLL frequency (EXPERIMENTAL)" | 210 | bool "Support CPUfreq changing of PLL frequency (EXPERIMENTAL)" |
211 | depends on ARM_S3C24XX | 211 | depends on ARM_S3C24XX_CPUFREQ |
212 | help | 212 | help |
213 | Compile in support for changing the PLL frequency from the | 213 | Compile in support for changing the PLL frequency from the |
214 | S3C24XX series CPUfreq driver. The PLL takes time to settle | 214 | S3C24XX series CPUfreq driver. The PLL takes time to settle |
diff --git a/arch/arm/mach-s3c24xx/clock-s3c2410.c b/arch/arm/mach-s3c24xx/clock-s3c2410.c index 34fffdf6fc1d..564553694b54 100644 --- a/arch/arm/mach-s3c24xx/clock-s3c2410.c +++ b/arch/arm/mach-s3c24xx/clock-s3c2410.c | |||
@@ -119,66 +119,101 @@ static struct clk init_clocks_off[] = { | |||
119 | } | 119 | } |
120 | }; | 120 | }; |
121 | 121 | ||
122 | static struct clk init_clocks[] = { | 122 | static struct clk clk_lcd = { |
123 | { | 123 | .name = "lcd", |
124 | .name = "lcd", | 124 | .parent = &clk_h, |
125 | .parent = &clk_h, | 125 | .enable = s3c2410_clkcon_enable, |
126 | .enable = s3c2410_clkcon_enable, | 126 | .ctrlbit = S3C2410_CLKCON_LCDC, |
127 | .ctrlbit = S3C2410_CLKCON_LCDC, | 127 | }; |
128 | }, { | 128 | |
129 | .name = "gpio", | 129 | static struct clk clk_gpio = { |
130 | .parent = &clk_p, | 130 | .name = "gpio", |
131 | .enable = s3c2410_clkcon_enable, | 131 | .parent = &clk_p, |
132 | .ctrlbit = S3C2410_CLKCON_GPIO, | 132 | .enable = s3c2410_clkcon_enable, |
133 | }, { | 133 | .ctrlbit = S3C2410_CLKCON_GPIO, |
134 | .name = "usb-host", | 134 | }; |
135 | .parent = &clk_h, | 135 | |
136 | .enable = s3c2410_clkcon_enable, | 136 | static struct clk clk_usb_host = { |
137 | .ctrlbit = S3C2410_CLKCON_USBH, | 137 | .name = "usb-host", |
138 | }, { | 138 | .parent = &clk_h, |
139 | .name = "usb-device", | 139 | .enable = s3c2410_clkcon_enable, |
140 | .parent = &clk_h, | 140 | .ctrlbit = S3C2410_CLKCON_USBH, |
141 | .enable = s3c2410_clkcon_enable, | 141 | }; |
142 | .ctrlbit = S3C2410_CLKCON_USBD, | 142 | |
143 | }, { | 143 | static struct clk clk_usb_device = { |
144 | .name = "timers", | 144 | .name = "usb-device", |
145 | .parent = &clk_p, | 145 | .parent = &clk_h, |
146 | .enable = s3c2410_clkcon_enable, | 146 | .enable = s3c2410_clkcon_enable, |
147 | .ctrlbit = S3C2410_CLKCON_PWMT, | 147 | .ctrlbit = S3C2410_CLKCON_USBD, |
148 | }, { | 148 | }; |
149 | .name = "uart", | 149 | |
150 | .devname = "s3c2410-uart.0", | 150 | static struct clk clk_timers = { |
151 | .parent = &clk_p, | 151 | .name = "timers", |
152 | .enable = s3c2410_clkcon_enable, | 152 | .parent = &clk_p, |
153 | .ctrlbit = S3C2410_CLKCON_UART0, | 153 | .enable = s3c2410_clkcon_enable, |
154 | }, { | 154 | .ctrlbit = S3C2410_CLKCON_PWMT, |
155 | .name = "uart", | 155 | }; |
156 | .devname = "s3c2410-uart.1", | 156 | |
157 | .parent = &clk_p, | 157 | struct clk s3c24xx_clk_uart0 = { |
158 | .enable = s3c2410_clkcon_enable, | 158 | .name = "uart", |
159 | .ctrlbit = S3C2410_CLKCON_UART1, | 159 | .devname = "s3c2410-uart.0", |
160 | }, { | 160 | .parent = &clk_p, |
161 | .name = "uart", | 161 | .enable = s3c2410_clkcon_enable, |
162 | .devname = "s3c2410-uart.2", | 162 | .ctrlbit = S3C2410_CLKCON_UART0, |
163 | .parent = &clk_p, | 163 | }; |
164 | .enable = s3c2410_clkcon_enable, | 164 | |
165 | .ctrlbit = S3C2410_CLKCON_UART2, | 165 | struct clk s3c24xx_clk_uart1 = { |
166 | }, { | 166 | .name = "uart", |
167 | .name = "rtc", | 167 | .devname = "s3c2410-uart.1", |
168 | .parent = &clk_p, | 168 | .parent = &clk_p, |
169 | .enable = s3c2410_clkcon_enable, | 169 | .enable = s3c2410_clkcon_enable, |
170 | .ctrlbit = S3C2410_CLKCON_RTC, | 170 | .ctrlbit = S3C2410_CLKCON_UART1, |
171 | }, { | 171 | }; |
172 | .name = "watchdog", | 172 | |
173 | .parent = &clk_p, | 173 | struct clk s3c24xx_clk_uart2 = { |
174 | .ctrlbit = 0, | 174 | .name = "uart", |
175 | }, { | 175 | .devname = "s3c2410-uart.2", |
176 | .name = "usb-bus-host", | 176 | .parent = &clk_p, |
177 | .parent = &clk_usb_bus, | 177 | .enable = s3c2410_clkcon_enable, |
178 | }, { | 178 | .ctrlbit = S3C2410_CLKCON_UART2, |
179 | .name = "usb-bus-gadget", | 179 | }; |
180 | .parent = &clk_usb_bus, | 180 | |
181 | }, | 181 | static struct clk clk_rtc = { |
182 | .name = "rtc", | ||
183 | .parent = &clk_p, | ||
184 | .enable = s3c2410_clkcon_enable, | ||
185 | .ctrlbit = S3C2410_CLKCON_RTC, | ||
186 | }; | ||
187 | |||
188 | static struct clk clk_watchdog = { | ||
189 | .name = "watchdog", | ||
190 | .parent = &clk_p, | ||
191 | .ctrlbit = 0, | ||
192 | }; | ||
193 | |||
194 | static struct clk clk_usb_bus_host = { | ||
195 | .name = "usb-bus-host", | ||
196 | .parent = &clk_usb_bus, | ||
197 | }; | ||
198 | |||
199 | static struct clk clk_usb_bus_gadget = { | ||
200 | .name = "usb-bus-gadget", | ||
201 | .parent = &clk_usb_bus, | ||
202 | }; | ||
203 | |||
204 | static struct clk *init_clocks[] = { | ||
205 | &clk_lcd, | ||
206 | &clk_gpio, | ||
207 | &clk_usb_host, | ||
208 | &clk_usb_device, | ||
209 | &clk_timers, | ||
210 | &s3c24xx_clk_uart0, | ||
211 | &s3c24xx_clk_uart1, | ||
212 | &s3c24xx_clk_uart2, | ||
213 | &clk_rtc, | ||
214 | &clk_watchdog, | ||
215 | &clk_usb_bus_host, | ||
216 | &clk_usb_bus_gadget, | ||
182 | }; | 217 | }; |
183 | 218 | ||
184 | /* s3c2410_baseclk_add() | 219 | /* s3c2410_baseclk_add() |
@@ -195,7 +230,6 @@ int __init s3c2410_baseclk_add(void) | |||
195 | { | 230 | { |
196 | unsigned long clkslow = __raw_readl(S3C2410_CLKSLOW); | 231 | unsigned long clkslow = __raw_readl(S3C2410_CLKSLOW); |
197 | unsigned long clkcon = __raw_readl(S3C2410_CLKCON); | 232 | unsigned long clkcon = __raw_readl(S3C2410_CLKCON); |
198 | struct clk *clkp; | ||
199 | struct clk *xtal; | 233 | struct clk *xtal; |
200 | int ret; | 234 | int ret; |
201 | int ptr; | 235 | int ptr; |
@@ -207,8 +241,9 @@ int __init s3c2410_baseclk_add(void) | |||
207 | 241 | ||
208 | /* register clocks from clock array */ | 242 | /* register clocks from clock array */ |
209 | 243 | ||
210 | clkp = init_clocks; | 244 | for (ptr = 0; ptr < ARRAY_SIZE(init_clocks); ptr++) { |
211 | for (ptr = 0; ptr < ARRAY_SIZE(init_clocks); ptr++, clkp++) { | 245 | struct clk *clkp = init_clocks[ptr]; |
246 | |||
212 | /* ensure that we note the clock state */ | 247 | /* ensure that we note the clock state */ |
213 | 248 | ||
214 | clkp->usage = clkcon & clkp->ctrlbit ? 1 : 0; | 249 | clkp->usage = clkcon & clkp->ctrlbit ? 1 : 0; |
diff --git a/arch/arm/mach-s3c24xx/clock-s3c2440.c b/arch/arm/mach-s3c24xx/clock-s3c2440.c index 1069b5680826..aaf006d1d6dc 100644 --- a/arch/arm/mach-s3c24xx/clock-s3c2440.c +++ b/arch/arm/mach-s3c24xx/clock-s3c2440.c | |||
@@ -166,6 +166,9 @@ static struct clk_lookup s3c2440_clk_lookup[] = { | |||
166 | CLKDEV_INIT(NULL, "clk_uart_baud1", &s3c24xx_uclk), | 166 | CLKDEV_INIT(NULL, "clk_uart_baud1", &s3c24xx_uclk), |
167 | CLKDEV_INIT(NULL, "clk_uart_baud2", &clk_p), | 167 | CLKDEV_INIT(NULL, "clk_uart_baud2", &clk_p), |
168 | CLKDEV_INIT(NULL, "clk_uart_baud3", &s3c2440_clk_fclk_n), | 168 | CLKDEV_INIT(NULL, "clk_uart_baud3", &s3c2440_clk_fclk_n), |
169 | CLKDEV_INIT("s3c2440-uart.0", "uart", &s3c24xx_clk_uart0), | ||
170 | CLKDEV_INIT("s3c2440-uart.1", "uart", &s3c24xx_clk_uart1), | ||
171 | CLKDEV_INIT("s3c2440-uart.2", "uart", &s3c24xx_clk_uart2), | ||
169 | CLKDEV_INIT("s3c2440-camif", "camera", &s3c2440_clk_cam_upll), | 172 | CLKDEV_INIT("s3c2440-camif", "camera", &s3c2440_clk_cam_upll), |
170 | }; | 173 | }; |
171 | 174 | ||
diff --git a/arch/arm/mach-shmobile/board-armadillo800eva.c b/arch/arm/mach-shmobile/board-armadillo800eva.c index e115f6742107..c5be60d85e4b 100644 --- a/arch/arm/mach-shmobile/board-armadillo800eva.c +++ b/arch/arm/mach-shmobile/board-armadillo800eva.c | |||
@@ -1162,9 +1162,6 @@ static void __init eva_init(void) | |||
1162 | gpio_request_one(61, GPIOF_OUT_INIT_HIGH, NULL); /* LCDDON */ | 1162 | gpio_request_one(61, GPIOF_OUT_INIT_HIGH, NULL); /* LCDDON */ |
1163 | gpio_request_one(202, GPIOF_OUT_INIT_LOW, NULL); /* LCD0_LED_CONT */ | 1163 | gpio_request_one(202, GPIOF_OUT_INIT_LOW, NULL); /* LCD0_LED_CONT */ |
1164 | 1164 | ||
1165 | /* Touchscreen */ | ||
1166 | gpio_request_one(166, GPIOF_OUT_INIT_HIGH, NULL); /* TP_RST_B */ | ||
1167 | |||
1168 | /* GETHER */ | 1165 | /* GETHER */ |
1169 | gpio_request_one(18, GPIOF_OUT_INIT_HIGH, NULL); /* PHY_RST */ | 1166 | gpio_request_one(18, GPIOF_OUT_INIT_HIGH, NULL); /* PHY_RST */ |
1170 | 1167 | ||
diff --git a/arch/arm/mach-shmobile/board-bockw.c b/arch/arm/mach-shmobile/board-bockw.c index d5554646916c..3354a85c90f7 100644 --- a/arch/arm/mach-shmobile/board-bockw.c +++ b/arch/arm/mach-shmobile/board-bockw.c | |||
@@ -167,7 +167,13 @@ static const struct pinctrl_map bockw_pinctrl_map[] = { | |||
167 | "usb1", "usb1"), | 167 | "usb1", "usb1"), |
168 | /* SDHI0 */ | 168 | /* SDHI0 */ |
169 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-r8a7778", | 169 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-r8a7778", |
170 | "sdhi0", "sdhi0"), | 170 | "sdhi0_data4", "sdhi0"), |
171 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-r8a7778", | ||
172 | "sdhi0_ctrl", "sdhi0"), | ||
173 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-r8a7778", | ||
174 | "sdhi0_cd", "sdhi0"), | ||
175 | PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-r8a7778", | ||
176 | "sdhi0_wp", "sdhi0"), | ||
171 | }; | 177 | }; |
172 | 178 | ||
173 | #define FPGA 0x18200000 | 179 | #define FPGA 0x18200000 |
diff --git a/arch/arm/mach-shmobile/board-lager.c b/arch/arm/mach-shmobile/board-lager.c index d73e21d3ea8a..8d6bd5c5efb9 100644 --- a/arch/arm/mach-shmobile/board-lager.c +++ b/arch/arm/mach-shmobile/board-lager.c | |||
@@ -59,7 +59,7 @@ static __initdata struct gpio_led_platform_data lager_leds_pdata = { | |||
59 | #define GPIO_KEY(c, g, d, ...) \ | 59 | #define GPIO_KEY(c, g, d, ...) \ |
60 | { .code = c, .gpio = g, .desc = d, .active_low = 1 } | 60 | { .code = c, .gpio = g, .desc = d, .active_low = 1 } |
61 | 61 | ||
62 | static __initdata struct gpio_keys_button gpio_buttons[] = { | 62 | static struct gpio_keys_button gpio_buttons[] = { |
63 | GPIO_KEY(KEY_4, RCAR_GP_PIN(1, 28), "SW2-pin4"), | 63 | GPIO_KEY(KEY_4, RCAR_GP_PIN(1, 28), "SW2-pin4"), |
64 | GPIO_KEY(KEY_3, RCAR_GP_PIN(1, 26), "SW2-pin3"), | 64 | GPIO_KEY(KEY_3, RCAR_GP_PIN(1, 26), "SW2-pin3"), |
65 | GPIO_KEY(KEY_2, RCAR_GP_PIN(1, 24), "SW2-pin2"), | 65 | GPIO_KEY(KEY_2, RCAR_GP_PIN(1, 24), "SW2-pin2"), |
diff --git a/arch/arm/mach-shmobile/headsmp-scu.S b/arch/arm/mach-shmobile/headsmp-scu.S index 6f9865467258..bfd920083a3b 100644 --- a/arch/arm/mach-shmobile/headsmp-scu.S +++ b/arch/arm/mach-shmobile/headsmp-scu.S | |||
@@ -23,7 +23,6 @@ | |||
23 | #include <linux/init.h> | 23 | #include <linux/init.h> |
24 | #include <asm/memory.h> | 24 | #include <asm/memory.h> |
25 | 25 | ||
26 | __CPUINIT | ||
27 | /* | 26 | /* |
28 | * Boot code for secondary CPUs. | 27 | * Boot code for secondary CPUs. |
29 | * | 28 | * |
diff --git a/arch/arm/mach-shmobile/headsmp.S b/arch/arm/mach-shmobile/headsmp.S index 559d1ce5f57e..a9d212498987 100644 --- a/arch/arm/mach-shmobile/headsmp.S +++ b/arch/arm/mach-shmobile/headsmp.S | |||
@@ -14,8 +14,6 @@ | |||
14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
15 | #include <asm/memory.h> | 15 | #include <asm/memory.h> |
16 | 16 | ||
17 | __CPUINIT | ||
18 | |||
19 | ENTRY(shmobile_invalidate_start) | 17 | ENTRY(shmobile_invalidate_start) |
20 | bl v7_invalidate_l1 | 18 | bl v7_invalidate_l1 |
21 | b secondary_startup | 19 | b secondary_startup |
diff --git a/arch/arm/mach-shmobile/smp-emev2.c b/arch/arm/mach-shmobile/smp-emev2.c index 80991b35f4ac..22a05a869d25 100644 --- a/arch/arm/mach-shmobile/smp-emev2.c +++ b/arch/arm/mach-shmobile/smp-emev2.c | |||
@@ -30,7 +30,7 @@ | |||
30 | 30 | ||
31 | #define EMEV2_SCU_BASE 0x1e000000 | 31 | #define EMEV2_SCU_BASE 0x1e000000 |
32 | 32 | ||
33 | static int __cpuinit emev2_boot_secondary(unsigned int cpu, struct task_struct *idle) | 33 | static int emev2_boot_secondary(unsigned int cpu, struct task_struct *idle) |
34 | { | 34 | { |
35 | arch_send_wakeup_ipi_mask(cpumask_of(cpu_logical_map(cpu))); | 35 | arch_send_wakeup_ipi_mask(cpumask_of(cpu_logical_map(cpu))); |
36 | return 0; | 36 | return 0; |
diff --git a/arch/arm/mach-shmobile/smp-r8a7779.c b/arch/arm/mach-shmobile/smp-r8a7779.c index 526cfaae81c1..9bdf810f2a87 100644 --- a/arch/arm/mach-shmobile/smp-r8a7779.c +++ b/arch/arm/mach-shmobile/smp-r8a7779.c | |||
@@ -81,7 +81,7 @@ static int r8a7779_platform_cpu_kill(unsigned int cpu) | |||
81 | return ret ? ret : 1; | 81 | return ret ? ret : 1; |
82 | } | 82 | } |
83 | 83 | ||
84 | static int __cpuinit r8a7779_boot_secondary(unsigned int cpu, struct task_struct *idle) | 84 | static int r8a7779_boot_secondary(unsigned int cpu, struct task_struct *idle) |
85 | { | 85 | { |
86 | struct r8a7779_pm_ch *ch = NULL; | 86 | struct r8a7779_pm_ch *ch = NULL; |
87 | int ret = -EIO; | 87 | int ret = -EIO; |
diff --git a/arch/arm/mach-shmobile/smp-sh73a0.c b/arch/arm/mach-shmobile/smp-sh73a0.c index d613113a04bd..d5fc3ed4e315 100644 --- a/arch/arm/mach-shmobile/smp-sh73a0.c +++ b/arch/arm/mach-shmobile/smp-sh73a0.c | |||
@@ -48,7 +48,7 @@ void __init sh73a0_register_twd(void) | |||
48 | } | 48 | } |
49 | #endif | 49 | #endif |
50 | 50 | ||
51 | static int __cpuinit sh73a0_boot_secondary(unsigned int cpu, struct task_struct *idle) | 51 | static int sh73a0_boot_secondary(unsigned int cpu, struct task_struct *idle) |
52 | { | 52 | { |
53 | cpu = cpu_logical_map(cpu); | 53 | cpu = cpu_logical_map(cpu); |
54 | 54 | ||
diff --git a/arch/arm/mach-socfpga/headsmp.S b/arch/arm/mach-socfpga/headsmp.S index 9004bfb1756e..95c115d8b5ee 100644 --- a/arch/arm/mach-socfpga/headsmp.S +++ b/arch/arm/mach-socfpga/headsmp.S | |||
@@ -10,7 +10,6 @@ | |||
10 | #include <linux/linkage.h> | 10 | #include <linux/linkage.h> |
11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
12 | 12 | ||
13 | __CPUINIT | ||
14 | .arch armv7-a | 13 | .arch armv7-a |
15 | 14 | ||
16 | ENTRY(secondary_trampoline) | 15 | ENTRY(secondary_trampoline) |
diff --git a/arch/arm/mach-socfpga/platsmp.c b/arch/arm/mach-socfpga/platsmp.c index b51ce8c7929d..5356a72bc8ce 100644 --- a/arch/arm/mach-socfpga/platsmp.c +++ b/arch/arm/mach-socfpga/platsmp.c | |||
@@ -29,7 +29,7 @@ | |||
29 | 29 | ||
30 | #include "core.h" | 30 | #include "core.h" |
31 | 31 | ||
32 | static int __cpuinit socfpga_boot_secondary(unsigned int cpu, struct task_struct *idle) | 32 | static int socfpga_boot_secondary(unsigned int cpu, struct task_struct *idle) |
33 | { | 33 | { |
34 | int trampoline_size = &secondary_trampoline_end - &secondary_trampoline; | 34 | int trampoline_size = &secondary_trampoline_end - &secondary_trampoline; |
35 | 35 | ||
diff --git a/arch/arm/mach-spear/generic.h b/arch/arm/mach-spear/generic.h index 904f2c907b46..a99d90a4d09c 100644 --- a/arch/arm/mach-spear/generic.h +++ b/arch/arm/mach-spear/generic.h | |||
@@ -37,7 +37,7 @@ void __init spear13xx_l2x0_init(void); | |||
37 | void spear_restart(enum reboot_mode, const char *); | 37 | void spear_restart(enum reboot_mode, const char *); |
38 | 38 | ||
39 | void spear13xx_secondary_startup(void); | 39 | void spear13xx_secondary_startup(void); |
40 | void __cpuinit spear13xx_cpu_die(unsigned int cpu); | 40 | void spear13xx_cpu_die(unsigned int cpu); |
41 | 41 | ||
42 | extern struct smp_operations spear13xx_smp_ops; | 42 | extern struct smp_operations spear13xx_smp_ops; |
43 | 43 | ||
diff --git a/arch/arm/mach-spear/platsmp.c b/arch/arm/mach-spear/platsmp.c index 9c4c722c954e..5c4a19887b2b 100644 --- a/arch/arm/mach-spear/platsmp.c +++ b/arch/arm/mach-spear/platsmp.c | |||
@@ -24,7 +24,7 @@ static DEFINE_SPINLOCK(boot_lock); | |||
24 | 24 | ||
25 | static void __iomem *scu_base = IOMEM(VA_SCU_BASE); | 25 | static void __iomem *scu_base = IOMEM(VA_SCU_BASE); |
26 | 26 | ||
27 | static void __cpuinit spear13xx_secondary_init(unsigned int cpu) | 27 | static void spear13xx_secondary_init(unsigned int cpu) |
28 | { | 28 | { |
29 | /* | 29 | /* |
30 | * let the primary processor know we're out of the | 30 | * let the primary processor know we're out of the |
@@ -40,7 +40,7 @@ static void __cpuinit spear13xx_secondary_init(unsigned int cpu) | |||
40 | spin_unlock(&boot_lock); | 40 | spin_unlock(&boot_lock); |
41 | } | 41 | } |
42 | 42 | ||
43 | static int __cpuinit spear13xx_boot_secondary(unsigned int cpu, struct task_struct *idle) | 43 | static int spear13xx_boot_secondary(unsigned int cpu, struct task_struct *idle) |
44 | { | 44 | { |
45 | unsigned long timeout; | 45 | unsigned long timeout; |
46 | 46 | ||
diff --git a/arch/arm/mach-sti/Kconfig b/arch/arm/mach-sti/Kconfig index d04e3bfe1918..835833e3c4f8 100644 --- a/arch/arm/mach-sti/Kconfig +++ b/arch/arm/mach-sti/Kconfig | |||
@@ -11,8 +11,9 @@ menuconfig ARCH_STI | |||
11 | select HAVE_SMP | 11 | select HAVE_SMP |
12 | select HAVE_ARM_SCU if SMP | 12 | select HAVE_ARM_SCU if SMP |
13 | select ARCH_REQUIRE_GPIOLIB | 13 | select ARCH_REQUIRE_GPIOLIB |
14 | select ARM_ERRATA_720789 | ||
15 | select ARM_ERRATA_754322 | 14 | select ARM_ERRATA_754322 |
15 | select ARM_ERRATA_764369 | ||
16 | select ARM_ERRATA_775420 | ||
16 | select PL310_ERRATA_753970 if CACHE_PL310 | 17 | select PL310_ERRATA_753970 if CACHE_PL310 |
17 | select PL310_ERRATA_769419 if CACHE_PL310 | 18 | select PL310_ERRATA_769419 if CACHE_PL310 |
18 | help | 19 | help |
diff --git a/arch/arm/mach-sti/headsmp.S b/arch/arm/mach-sti/headsmp.S index 78ebc7559f53..4c09bae86edf 100644 --- a/arch/arm/mach-sti/headsmp.S +++ b/arch/arm/mach-sti/headsmp.S | |||
@@ -16,8 +16,6 @@ | |||
16 | #include <linux/linkage.h> | 16 | #include <linux/linkage.h> |
17 | #include <linux/init.h> | 17 | #include <linux/init.h> |
18 | 18 | ||
19 | __INIT | ||
20 | |||
21 | /* | 19 | /* |
22 | * ST specific entry point for secondary CPUs. This provides | 20 | * ST specific entry point for secondary CPUs. This provides |
23 | * a "holding pen" into which all secondary cores are held until we're | 21 | * a "holding pen" into which all secondary cores are held until we're |
diff --git a/arch/arm/mach-sti/platsmp.c b/arch/arm/mach-sti/platsmp.c index 977a863468fc..dce50d983a8e 100644 --- a/arch/arm/mach-sti/platsmp.c +++ b/arch/arm/mach-sti/platsmp.c | |||
@@ -27,7 +27,7 @@ | |||
27 | 27 | ||
28 | #include "smp.h" | 28 | #include "smp.h" |
29 | 29 | ||
30 | static void __cpuinit write_pen_release(int val) | 30 | static void write_pen_release(int val) |
31 | { | 31 | { |
32 | pen_release = val; | 32 | pen_release = val; |
33 | smp_wmb(); | 33 | smp_wmb(); |
@@ -37,7 +37,7 @@ static void __cpuinit write_pen_release(int val) | |||
37 | 37 | ||
38 | static DEFINE_SPINLOCK(boot_lock); | 38 | static DEFINE_SPINLOCK(boot_lock); |
39 | 39 | ||
40 | void __cpuinit sti_secondary_init(unsigned int cpu) | 40 | void sti_secondary_init(unsigned int cpu) |
41 | { | 41 | { |
42 | trace_hardirqs_off(); | 42 | trace_hardirqs_off(); |
43 | 43 | ||
@@ -54,7 +54,7 @@ void __cpuinit sti_secondary_init(unsigned int cpu) | |||
54 | spin_unlock(&boot_lock); | 54 | spin_unlock(&boot_lock); |
55 | } | 55 | } |
56 | 56 | ||
57 | int __cpuinit sti_boot_secondary(unsigned int cpu, struct task_struct *idle) | 57 | int sti_boot_secondary(unsigned int cpu, struct task_struct *idle) |
58 | { | 58 | { |
59 | unsigned long timeout; | 59 | unsigned long timeout; |
60 | 60 | ||
diff --git a/arch/arm/mach-tegra/platsmp.c b/arch/arm/mach-tegra/platsmp.c index 24db4ac428ae..97b33a2a2d75 100644 --- a/arch/arm/mach-tegra/platsmp.c +++ b/arch/arm/mach-tegra/platsmp.c | |||
@@ -35,7 +35,7 @@ | |||
35 | 35 | ||
36 | static cpumask_t tegra_cpu_init_mask; | 36 | static cpumask_t tegra_cpu_init_mask; |
37 | 37 | ||
38 | static void __cpuinit tegra_secondary_init(unsigned int cpu) | 38 | static void tegra_secondary_init(unsigned int cpu) |
39 | { | 39 | { |
40 | cpumask_set_cpu(cpu, &tegra_cpu_init_mask); | 40 | cpumask_set_cpu(cpu, &tegra_cpu_init_mask); |
41 | } | 41 | } |
@@ -167,7 +167,7 @@ static int tegra114_boot_secondary(unsigned int cpu, struct task_struct *idle) | |||
167 | return ret; | 167 | return ret; |
168 | } | 168 | } |
169 | 169 | ||
170 | static int __cpuinit tegra_boot_secondary(unsigned int cpu, | 170 | static int tegra_boot_secondary(unsigned int cpu, |
171 | struct task_struct *idle) | 171 | struct task_struct *idle) |
172 | { | 172 | { |
173 | if (IS_ENABLED(CONFIG_ARCH_TEGRA_2x_SOC) && tegra_chip_id == TEGRA20) | 173 | if (IS_ENABLED(CONFIG_ARCH_TEGRA_2x_SOC) && tegra_chip_id == TEGRA20) |
diff --git a/arch/arm/mach-tegra/pm.c b/arch/arm/mach-tegra/pm.c index 94e69bee3da5..261fec140c06 100644 --- a/arch/arm/mach-tegra/pm.c +++ b/arch/arm/mach-tegra/pm.c | |||
@@ -191,7 +191,7 @@ static const char *lp_state[TEGRA_MAX_SUSPEND_MODE] = { | |||
191 | [TEGRA_SUSPEND_LP0] = "LP0", | 191 | [TEGRA_SUSPEND_LP0] = "LP0", |
192 | }; | 192 | }; |
193 | 193 | ||
194 | static int __cpuinit tegra_suspend_enter(suspend_state_t state) | 194 | static int tegra_suspend_enter(suspend_state_t state) |
195 | { | 195 | { |
196 | enum tegra_suspend_mode mode = tegra_pmc_get_suspend_mode(); | 196 | enum tegra_suspend_mode mode = tegra_pmc_get_suspend_mode(); |
197 | 197 | ||
diff --git a/arch/arm/mach-ux500/board-mop500-audio.c b/arch/arm/mach-ux500/board-mop500-audio.c index bfe443daf4b0..ec0807247e60 100644 --- a/arch/arm/mach-ux500/board-mop500-audio.c +++ b/arch/arm/mach-ux500/board-mop500-audio.c | |||
@@ -17,7 +17,6 @@ | |||
17 | #include "ste-dma40-db8500.h" | 17 | #include "ste-dma40-db8500.h" |
18 | #include "board-mop500.h" | 18 | #include "board-mop500.h" |
19 | #include "devices-db8500.h" | 19 | #include "devices-db8500.h" |
20 | #include "pins-db8500.h" | ||
21 | 20 | ||
22 | static struct stedma40_chan_cfg msp0_dma_rx = { | 21 | static struct stedma40_chan_cfg msp0_dma_rx = { |
23 | .high_priority = true, | 22 | .high_priority = true, |
diff --git a/arch/arm/mach-ux500/board-mop500-pins.c b/arch/arm/mach-ux500/board-mop500-pins.c index 7936d40a5c37..0efb1560fc35 100644 --- a/arch/arm/mach-ux500/board-mop500-pins.c +++ b/arch/arm/mach-ux500/board-mop500-pins.c | |||
@@ -14,7 +14,6 @@ | |||
14 | 14 | ||
15 | #include <asm/mach-types.h> | 15 | #include <asm/mach-types.h> |
16 | 16 | ||
17 | #include "pins-db8500.h" | ||
18 | #include "board-mop500.h" | 17 | #include "board-mop500.h" |
19 | 18 | ||
20 | enum custom_pin_cfg_t { | 19 | enum custom_pin_cfg_t { |
diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c index df5d27a532e9..ad0806eff762 100644 --- a/arch/arm/mach-ux500/board-mop500.c +++ b/arch/arm/mach-ux500/board-mop500.c | |||
@@ -42,7 +42,6 @@ | |||
42 | #include <linux/platform_data/dma-ste-dma40.h> | 42 | #include <linux/platform_data/dma-ste-dma40.h> |
43 | 43 | ||
44 | #include <asm/mach-types.h> | 44 | #include <asm/mach-types.h> |
45 | #include <asm/mach/arch.h> | ||
46 | 45 | ||
47 | #include "setup.h" | 46 | #include "setup.h" |
48 | #include "devices.h" | 47 | #include "devices.h" |
@@ -325,21 +324,19 @@ static struct lp55xx_platform_data __initdata lp5521_sec_data = { | |||
325 | .clock_mode = LP55XX_CLOCK_EXT, | 324 | .clock_mode = LP55XX_CLOCK_EXT, |
326 | }; | 325 | }; |
327 | 326 | ||
327 | /* I2C0 devices only available on the first HREF/MOP500 */ | ||
328 | static struct i2c_board_info __initdata mop500_i2c0_devices[] = { | 328 | static struct i2c_board_info __initdata mop500_i2c0_devices[] = { |
329 | { | 329 | { |
330 | I2C_BOARD_INFO("tc3589x", 0x42), | 330 | I2C_BOARD_INFO("tc3589x", 0x42), |
331 | .irq = NOMADIK_GPIO_TO_IRQ(217), | 331 | .irq = NOMADIK_GPIO_TO_IRQ(217), |
332 | .platform_data = &mop500_tc35892_data, | 332 | .platform_data = &mop500_tc35892_data, |
333 | }, | 333 | }, |
334 | /* I2C0 devices only available prior to HREFv60 */ | ||
335 | { | 334 | { |
336 | I2C_BOARD_INFO("tps61052", 0x33), | 335 | I2C_BOARD_INFO("tps61052", 0x33), |
337 | .platform_data = &mop500_tps61052_data, | 336 | .platform_data = &mop500_tps61052_data, |
338 | }, | 337 | }, |
339 | }; | 338 | }; |
340 | 339 | ||
341 | #define NUM_PRE_V60_I2C0_DEVICES 1 | ||
342 | |||
343 | static struct i2c_board_info __initdata mop500_i2c2_devices[] = { | 340 | static struct i2c_board_info __initdata mop500_i2c2_devices[] = { |
344 | { | 341 | { |
345 | /* lp5521 LED driver, 1st device */ | 342 | /* lp5521 LED driver, 1st device */ |
@@ -357,6 +354,17 @@ static struct i2c_board_info __initdata mop500_i2c2_devices[] = { | |||
357 | }, | 354 | }, |
358 | }; | 355 | }; |
359 | 356 | ||
357 | static int __init mop500_i2c_board_init(void) | ||
358 | { | ||
359 | if (machine_is_u8500()) | ||
360 | mop500_uib_i2c_add(0, mop500_i2c0_devices, | ||
361 | ARRAY_SIZE(mop500_i2c0_devices)); | ||
362 | mop500_uib_i2c_add(2, mop500_i2c2_devices, | ||
363 | ARRAY_SIZE(mop500_i2c2_devices)); | ||
364 | return 0; | ||
365 | } | ||
366 | device_initcall(mop500_i2c_board_init); | ||
367 | |||
360 | static void __init mop500_i2c_init(struct device *parent) | 368 | static void __init mop500_i2c_init(struct device *parent) |
361 | { | 369 | { |
362 | db8500_add_i2c0(parent, NULL); | 370 | db8500_add_i2c0(parent, NULL); |
@@ -565,7 +573,6 @@ static struct platform_device *snowball_platform_devs[] __initdata = { | |||
565 | static void __init mop500_init_machine(void) | 573 | static void __init mop500_init_machine(void) |
566 | { | 574 | { |
567 | struct device *parent = NULL; | 575 | struct device *parent = NULL; |
568 | int i2c0_devs; | ||
569 | int i; | 576 | int i; |
570 | 577 | ||
571 | platform_device_register(&db8500_prcmu_device); | 578 | platform_device_register(&db8500_prcmu_device); |
@@ -588,19 +595,13 @@ static void __init mop500_init_machine(void) | |||
588 | mop500_spi_init(parent); | 595 | mop500_spi_init(parent); |
589 | mop500_audio_init(parent); | 596 | mop500_audio_init(parent); |
590 | mop500_uart_init(parent); | 597 | mop500_uart_init(parent); |
591 | |||
592 | u8500_cryp1_hash1_init(parent); | 598 | u8500_cryp1_hash1_init(parent); |
593 | 599 | ||
594 | i2c0_devs = ARRAY_SIZE(mop500_i2c0_devices); | ||
595 | |||
596 | i2c_register_board_info(0, mop500_i2c0_devices, i2c0_devs); | ||
597 | i2c_register_board_info(2, mop500_i2c2_devices, | ||
598 | ARRAY_SIZE(mop500_i2c2_devices)); | ||
599 | |||
600 | /* This board has full regulator constraints */ | 600 | /* This board has full regulator constraints */ |
601 | regulator_has_full_constraints(); | 601 | regulator_has_full_constraints(); |
602 | } | 602 | } |
603 | 603 | ||
604 | |||
604 | static void __init snowball_init_machine(void) | 605 | static void __init snowball_init_machine(void) |
605 | { | 606 | { |
606 | struct device *parent = NULL; | 607 | struct device *parent = NULL; |
@@ -635,7 +636,6 @@ static void __init snowball_init_machine(void) | |||
635 | static void __init hrefv60_init_machine(void) | 636 | static void __init hrefv60_init_machine(void) |
636 | { | 637 | { |
637 | struct device *parent = NULL; | 638 | struct device *parent = NULL; |
638 | int i2c0_devs; | ||
639 | int i; | 639 | int i; |
640 | 640 | ||
641 | platform_device_register(&db8500_prcmu_device); | 641 | platform_device_register(&db8500_prcmu_device); |
@@ -664,14 +664,6 @@ static void __init hrefv60_init_machine(void) | |||
664 | mop500_audio_init(parent); | 664 | mop500_audio_init(parent); |
665 | mop500_uart_init(parent); | 665 | mop500_uart_init(parent); |
666 | 666 | ||
667 | i2c0_devs = ARRAY_SIZE(mop500_i2c0_devices); | ||
668 | |||
669 | i2c0_devs -= NUM_PRE_V60_I2C0_DEVICES; | ||
670 | |||
671 | i2c_register_board_info(0, mop500_i2c0_devices, i2c0_devs); | ||
672 | i2c_register_board_info(2, mop500_i2c2_devices, | ||
673 | ARRAY_SIZE(mop500_i2c2_devices)); | ||
674 | |||
675 | /* This board has full regulator constraints */ | 667 | /* This board has full regulator constraints */ |
676 | regulator_has_full_constraints(); | 668 | regulator_has_full_constraints(); |
677 | } | 669 | } |
@@ -686,6 +678,7 @@ MACHINE_START(U8500, "ST-Ericsson MOP500 platform") | |||
686 | .init_time = ux500_timer_init, | 678 | .init_time = ux500_timer_init, |
687 | .init_machine = mop500_init_machine, | 679 | .init_machine = mop500_init_machine, |
688 | .init_late = ux500_init_late, | 680 | .init_late = ux500_init_late, |
681 | .restart = ux500_restart, | ||
689 | MACHINE_END | 682 | MACHINE_END |
690 | 683 | ||
691 | MACHINE_START(U8520, "ST-Ericsson U8520 Platform HREFP520") | 684 | MACHINE_START(U8520, "ST-Ericsson U8520 Platform HREFP520") |
@@ -695,6 +688,7 @@ MACHINE_START(U8520, "ST-Ericsson U8520 Platform HREFP520") | |||
695 | .init_time = ux500_timer_init, | 688 | .init_time = ux500_timer_init, |
696 | .init_machine = mop500_init_machine, | 689 | .init_machine = mop500_init_machine, |
697 | .init_late = ux500_init_late, | 690 | .init_late = ux500_init_late, |
691 | .restart = ux500_restart, | ||
698 | MACHINE_END | 692 | MACHINE_END |
699 | 693 | ||
700 | MACHINE_START(HREFV60, "ST-Ericsson U8500 Platform HREFv60+") | 694 | MACHINE_START(HREFV60, "ST-Ericsson U8500 Platform HREFv60+") |
@@ -705,6 +699,7 @@ MACHINE_START(HREFV60, "ST-Ericsson U8500 Platform HREFv60+") | |||
705 | .init_time = ux500_timer_init, | 699 | .init_time = ux500_timer_init, |
706 | .init_machine = hrefv60_init_machine, | 700 | .init_machine = hrefv60_init_machine, |
707 | .init_late = ux500_init_late, | 701 | .init_late = ux500_init_late, |
702 | .restart = ux500_restart, | ||
708 | MACHINE_END | 703 | MACHINE_END |
709 | 704 | ||
710 | MACHINE_START(SNOWBALL, "Calao Systems Snowball platform") | 705 | MACHINE_START(SNOWBALL, "Calao Systems Snowball platform") |
@@ -716,4 +711,5 @@ MACHINE_START(SNOWBALL, "Calao Systems Snowball platform") | |||
716 | .init_time = ux500_timer_init, | 711 | .init_time = ux500_timer_init, |
717 | .init_machine = snowball_init_machine, | 712 | .init_machine = snowball_init_machine, |
718 | .init_late = NULL, | 713 | .init_late = NULL, |
714 | .restart = ux500_restart, | ||
719 | MACHINE_END | 715 | MACHINE_END |
diff --git a/arch/arm/mach-ux500/cpu-db8500.c b/arch/arm/mach-ux500/cpu-db8500.c index 12eee8167525..23590b7f00b7 100644 --- a/arch/arm/mach-ux500/cpu-db8500.c +++ b/arch/arm/mach-ux500/cpu-db8500.c | |||
@@ -26,7 +26,6 @@ | |||
26 | 26 | ||
27 | #include <asm/pmu.h> | 27 | #include <asm/pmu.h> |
28 | #include <asm/mach/map.h> | 28 | #include <asm/mach/map.h> |
29 | #include <asm/mach/arch.h> | ||
30 | 29 | ||
31 | #include "setup.h" | 30 | #include "setup.h" |
32 | #include "devices.h" | 31 | #include "devices.h" |
@@ -157,7 +156,8 @@ static void __init db8500_add_gpios(struct device *parent) | |||
157 | .supports_sleepmode = true, | 156 | .supports_sleepmode = true, |
158 | }; | 157 | }; |
159 | 158 | ||
160 | dbx500_add_gpios(parent, ARRAY_AND_SIZE(db8500_gpio_base), | 159 | dbx500_add_gpios(parent, db8500_gpio_base, |
160 | ARRAY_SIZE(db8500_gpio_base), | ||
161 | IRQ_DB8500_GPIO0, &pdata); | 161 | IRQ_DB8500_GPIO0, &pdata); |
162 | dbx500_add_pinctrl(parent, "pinctrl-db8500", U8500_PRCMU_BASE); | 162 | dbx500_add_pinctrl(parent, "pinctrl-db8500", U8500_PRCMU_BASE); |
163 | } | 163 | } |
@@ -325,6 +325,7 @@ DT_MACHINE_START(U8500_DT, "ST-Ericsson Ux5x0 platform (Device Tree Support)") | |||
325 | .init_machine = u8500_init_machine, | 325 | .init_machine = u8500_init_machine, |
326 | .init_late = NULL, | 326 | .init_late = NULL, |
327 | .dt_compat = stericsson_dt_platform_compat, | 327 | .dt_compat = stericsson_dt_platform_compat, |
328 | .restart = ux500_restart, | ||
328 | MACHINE_END | 329 | MACHINE_END |
329 | 330 | ||
330 | #endif | 331 | #endif |
diff --git a/arch/arm/mach-ux500/cpu.c b/arch/arm/mach-ux500/cpu.c index e6fb0239151b..5d7eebcabc63 100644 --- a/arch/arm/mach-ux500/cpu.c +++ b/arch/arm/mach-ux500/cpu.c | |||
@@ -31,6 +31,14 @@ | |||
31 | #include "db8500-regs.h" | 31 | #include "db8500-regs.h" |
32 | #include "id.h" | 32 | #include "id.h" |
33 | 33 | ||
34 | void ux500_restart(enum reboot_mode mode, const char *cmd) | ||
35 | { | ||
36 | local_irq_disable(); | ||
37 | local_fiq_disable(); | ||
38 | |||
39 | prcmu_system_reset(0); | ||
40 | } | ||
41 | |||
34 | /* | 42 | /* |
35 | * FIXME: Should we set up the GPIO domain here? | 43 | * FIXME: Should we set up the GPIO domain here? |
36 | * | 44 | * |
diff --git a/arch/arm/mach-ux500/devices-db8500.c b/arch/arm/mach-ux500/devices-db8500.c index 516a6f57d159..bc316062e0c2 100644 --- a/arch/arm/mach-ux500/devices-db8500.c +++ b/arch/arm/mach-ux500/devices-db8500.c | |||
@@ -49,6 +49,7 @@ struct stedma40_platform_data dma40_plat_data = { | |||
49 | struct platform_device u8500_dma40_device = { | 49 | struct platform_device u8500_dma40_device = { |
50 | .dev = { | 50 | .dev = { |
51 | .platform_data = &dma40_plat_data, | 51 | .platform_data = &dma40_plat_data, |
52 | .coherent_dma_mask = DMA_BIT_MASK(32), | ||
52 | }, | 53 | }, |
53 | .name = "dma40", | 54 | .name = "dma40", |
54 | .id = 0, | 55 | .id = 0, |
diff --git a/arch/arm/mach-ux500/headsmp.S b/arch/arm/mach-ux500/headsmp.S index 08da5589bcd8..9cdea049485d 100644 --- a/arch/arm/mach-ux500/headsmp.S +++ b/arch/arm/mach-ux500/headsmp.S | |||
@@ -11,8 +11,6 @@ | |||
11 | #include <linux/linkage.h> | 11 | #include <linux/linkage.h> |
12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
13 | 13 | ||
14 | __INIT | ||
15 | |||
16 | /* | 14 | /* |
17 | * U8500 specific entry point for secondary CPUs. | 15 | * U8500 specific entry point for secondary CPUs. |
18 | */ | 16 | */ |
diff --git a/arch/arm/mach-ux500/pins-db8500.h b/arch/arm/mach-ux500/pins-db8500.h deleted file mode 100644 index 062c7acf4576..000000000000 --- a/arch/arm/mach-ux500/pins-db8500.h +++ /dev/null | |||
@@ -1,746 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) ST-Ericsson SA 2010 | ||
3 | * | ||
4 | * License terms: GNU General Public License, version 2 | ||
5 | * Author: Rabin Vincent <rabin.vincent@stericsson.com> | ||
6 | */ | ||
7 | |||
8 | #ifndef __MACH_PINS_DB8500_H | ||
9 | #define __MACH_PINS_DB8500_H | ||
10 | |||
11 | /* | ||
12 | * TODO: Eventually encode all non-board specific pull up/down configuration | ||
13 | * here. | ||
14 | */ | ||
15 | |||
16 | #define GPIO0_GPIO PIN_CFG(0, GPIO) | ||
17 | #define GPIO0_U0_CTSn PIN_CFG(0, ALT_A) | ||
18 | #define GPIO0_TRIG_OUT PIN_CFG(0, ALT_B) | ||
19 | #define GPIO0_IP_TDO PIN_CFG(0, ALT_C) | ||
20 | |||
21 | #define GPIO1_GPIO PIN_CFG(1, GPIO) | ||
22 | #define GPIO1_U0_RTSn PIN_CFG(1, ALT_A) | ||
23 | #define GPIO1_TRIG_IN PIN_CFG(1, ALT_B) | ||
24 | #define GPIO1_IP_TDI PIN_CFG(1, ALT_C) | ||
25 | |||
26 | #define GPIO2_GPIO PIN_CFG(2, GPIO) | ||
27 | #define GPIO2_U0_RXD PIN_CFG(2, ALT_A) | ||
28 | #define GPIO2_NONE PIN_CFG(2, ALT_B) | ||
29 | #define GPIO2_IP_TMS PIN_CFG(2, ALT_C) | ||
30 | |||
31 | #define GPIO3_GPIO PIN_CFG(3, GPIO) | ||
32 | #define GPIO3_U0_TXD PIN_CFG(3, ALT_A) | ||
33 | #define GPIO3_NONE PIN_CFG(3, ALT_B) | ||
34 | #define GPIO3_IP_TCK PIN_CFG(3, ALT_C) | ||
35 | |||
36 | #define GPIO4_GPIO PIN_CFG(4, GPIO) | ||
37 | #define GPIO4_U1_RXD PIN_CFG(4, ALT_A) | ||
38 | #define GPIO4_I2C4_SCL PIN_CFG(4, ALT_B) | ||
39 | #define GPIO4_IP_TRSTn PIN_CFG(4, ALT_C) | ||
40 | |||
41 | #define GPIO5_GPIO PIN_CFG(5, GPIO) | ||
42 | #define GPIO5_U1_TXD PIN_CFG(5, ALT_A) | ||
43 | #define GPIO5_I2C4_SDA PIN_CFG(5, ALT_B) | ||
44 | #define GPIO5_IP_GPIO6 PIN_CFG(5, ALT_C) | ||
45 | |||
46 | #define GPIO6_GPIO PIN_CFG(6, GPIO) | ||
47 | #define GPIO6_U1_CTSn PIN_CFG(6, ALT_A) | ||
48 | #define GPIO6_I2C1_SCL PIN_CFG(6, ALT_B) | ||
49 | #define GPIO6_IP_GPIO0 PIN_CFG(6, ALT_C) | ||
50 | |||
51 | #define GPIO7_GPIO PIN_CFG(7, GPIO) | ||
52 | #define GPIO7_U1_RTSn PIN_CFG(7, ALT_A) | ||
53 | #define GPIO7_I2C1_SDA PIN_CFG(7, ALT_B) | ||
54 | #define GPIO7_IP_GPIO1 PIN_CFG(7, ALT_C) | ||
55 | |||
56 | #define GPIO8_GPIO PIN_CFG(8, GPIO) | ||
57 | #define GPIO8_IPI2C_SDA PIN_CFG(8, ALT_A) | ||
58 | #define GPIO8_I2C2_SDA PIN_CFG(8, ALT_B) | ||
59 | |||
60 | #define GPIO9_GPIO PIN_CFG(9, GPIO) | ||
61 | #define GPIO9_IPI2C_SCL PIN_CFG(9, ALT_A) | ||
62 | #define GPIO9_I2C2_SCL PIN_CFG(9, ALT_B) | ||
63 | |||
64 | #define GPIO10_GPIO PIN_CFG(10, GPIO) | ||
65 | #define GPIO10_IPI2C_SDA PIN_CFG(10, ALT_A) | ||
66 | #define GPIO10_I2C2_SDA PIN_CFG(10, ALT_B) | ||
67 | #define GPIO10_IP_GPIO3 PIN_CFG(10, ALT_C) | ||
68 | |||
69 | #define GPIO11_GPIO PIN_CFG(11, GPIO) | ||
70 | #define GPIO11_IPI2C_SCL PIN_CFG(11, ALT_A) | ||
71 | #define GPIO11_I2C2_SCL PIN_CFG(11, ALT_B) | ||
72 | #define GPIO11_IP_GPIO2 PIN_CFG(11, ALT_C) | ||
73 | |||
74 | #define GPIO12_GPIO PIN_CFG(12, GPIO) | ||
75 | #define GPIO12_MSP0_TXD PIN_CFG(12, ALT_A) | ||
76 | #define GPIO12_MSP0_RXD PIN_CFG(12, ALT_B) | ||
77 | |||
78 | #define GPIO13_GPIO PIN_CFG(13, GPIO) | ||
79 | #define GPIO13_MSP0_TFS PIN_CFG(13, ALT_A) | ||
80 | |||
81 | #define GPIO14_GPIO PIN_CFG(14, GPIO) | ||
82 | #define GPIO14_MSP0_TCK PIN_CFG(14, ALT_A) | ||
83 | |||
84 | #define GPIO15_GPIO PIN_CFG(15, GPIO) | ||
85 | #define GPIO15_MSP0_RXD PIN_CFG(15, ALT_A) | ||
86 | #define GPIO15_MSP0_TXD PIN_CFG(15, ALT_B) | ||
87 | |||
88 | #define GPIO16_GPIO PIN_CFG(16, GPIO) | ||
89 | #define GPIO16_MSP0_RFS PIN_CFG(16, ALT_A) | ||
90 | #define GPIO16_I2C1_SCL PIN_CFG(16, ALT_B) | ||
91 | #define GPIO16_SLIM0_DAT PIN_CFG(16, ALT_C) | ||
92 | |||
93 | #define GPIO17_GPIO PIN_CFG(17, GPIO) | ||
94 | #define GPIO17_MSP0_RCK PIN_CFG(17, ALT_A) | ||
95 | #define GPIO17_I2C1_SDA PIN_CFG(17, ALT_B) | ||
96 | #define GPIO17_SLIM0_CLK PIN_CFG(17, ALT_C) | ||
97 | |||
98 | #define GPIO18_GPIO PIN_CFG(18, GPIO) | ||
99 | #define GPIO18_MC0_CMDDIR PIN_CFG_INPUT(18, ALT_A, PULLUP) | ||
100 | #define GPIO18_U2_RXD PIN_CFG(18, ALT_B) | ||
101 | #define GPIO18_MS_IEP PIN_CFG(18, ALT_C) | ||
102 | |||
103 | #define GPIO19_GPIO PIN_CFG(19, GPIO) | ||
104 | #define GPIO19_MC0_DAT0DIR PIN_CFG_INPUT(19, ALT_A, PULLUP) | ||
105 | #define GPIO19_U2_TXD PIN_CFG(19, ALT_B) | ||
106 | #define GPIO19_MS_DAT0DIR PIN_CFG(19, ALT_C) | ||
107 | |||
108 | #define GPIO20_GPIO PIN_CFG(20, GPIO) | ||
109 | #define GPIO20_MC0_DAT2DIR PIN_CFG_INPUT(20, ALT_A, PULLUP) | ||
110 | #define GPIO20_UARTMOD_TXD PIN_CFG(20, ALT_B) | ||
111 | #define GPIO20_IP_TRIGOUT PIN_CFG(20, ALT_C) | ||
112 | |||
113 | #define GPIO21_GPIO PIN_CFG(21, GPIO) | ||
114 | #define GPIO21_MC0_DAT31DIR PIN_CFG_INPUT(21, ALT_A, PULLUP) | ||
115 | #define GPIO21_MSP0_SCK PIN_CFG(21, ALT_B) | ||
116 | #define GPIO21_MS_DAT31DIR PIN_CFG(21, ALT_C) | ||
117 | |||
118 | #define GPIO22_GPIO PIN_CFG(22, GPIO) | ||
119 | #define GPIO22_MC0_FBCLK PIN_CFG_INPUT(22, ALT_A, PULLUP) | ||
120 | #define GPIO22_UARTMOD_RXD PIN_CFG(22, ALT_B) | ||
121 | #define GPIO22_MS_FBCLK PIN_CFG(22, ALT_C) | ||
122 | |||
123 | #define GPIO23_GPIO PIN_CFG(23, GPIO) | ||
124 | #define GPIO23_MC0_CLK PIN_CFG_INPUT(23, ALT_A, PULLUP) | ||
125 | #define GPIO23_STMMOD_CLK PIN_CFG(23, ALT_B) | ||
126 | #define GPIO23_MS_CLK PIN_CFG(23, ALT_C) | ||
127 | |||
128 | #define GPIO24_GPIO PIN_CFG(24, GPIO) | ||
129 | #define GPIO24_MC0_CMD PIN_CFG_INPUT(24, ALT_A, PULLUP) | ||
130 | #define GPIO24_UARTMOD_RXD PIN_CFG(24, ALT_B) | ||
131 | #define GPIO24_MS_BS PIN_CFG(24, ALT_C) | ||
132 | |||
133 | #define GPIO25_GPIO PIN_CFG(25, GPIO) | ||
134 | #define GPIO25_MC0_DAT0 PIN_CFG_INPUT(25, ALT_A, PULLUP) | ||
135 | #define GPIO25_STMMOD_DAT0 PIN_CFG(25, ALT_B) | ||
136 | #define GPIO25_MS_DAT0 PIN_CFG(25, ALT_C) | ||
137 | |||
138 | #define GPIO26_GPIO PIN_CFG(26, GPIO) | ||
139 | #define GPIO26_MC0_DAT1 PIN_CFG_INPUT(26, ALT_A, PULLUP) | ||
140 | #define GPIO26_STMMOD_DAT1 PIN_CFG(26, ALT_B) | ||
141 | #define GPIO26_MS_DAT1 PIN_CFG(26, ALT_C) | ||
142 | |||
143 | #define GPIO27_GPIO PIN_CFG(27, GPIO) | ||
144 | #define GPIO27_MC0_DAT2 PIN_CFG_INPUT(27, ALT_A, PULLUP) | ||
145 | #define GPIO27_STMMOD_DAT2 PIN_CFG(27, ALT_B) | ||
146 | #define GPIO27_MS_DAT2 PIN_CFG(27, ALT_C) | ||
147 | |||
148 | #define GPIO28_GPIO PIN_CFG(28, GPIO) | ||
149 | #define GPIO28_MC0_DAT3 PIN_CFG_INPUT(28, ALT_A, PULLUP) | ||
150 | #define GPIO28_STMMOD_DAT3 PIN_CFG(28, ALT_B) | ||
151 | #define GPIO28_MS_DAT3 PIN_CFG(28, ALT_C) | ||
152 | |||
153 | #define GPIO29_GPIO PIN_CFG(29, GPIO) | ||
154 | #define GPIO29_MC0_DAT4 PIN_CFG(29, ALT_A) | ||
155 | #define GPIO29_SPI3_CLK PIN_CFG(29, ALT_B) | ||
156 | #define GPIO29_U2_RXD PIN_CFG(29, ALT_C) | ||
157 | |||
158 | #define GPIO30_GPIO PIN_CFG(30, GPIO) | ||
159 | #define GPIO30_MC0_DAT5 PIN_CFG(30, ALT_A) | ||
160 | #define GPIO30_SPI3_RXD PIN_CFG(30, ALT_B) | ||
161 | #define GPIO30_U2_TXD PIN_CFG(30, ALT_C) | ||
162 | |||
163 | #define GPIO31_GPIO PIN_CFG(31, GPIO) | ||
164 | #define GPIO31_MC0_DAT6 PIN_CFG(31, ALT_A) | ||
165 | #define GPIO31_SPI3_FRM PIN_CFG(31, ALT_B) | ||
166 | #define GPIO31_U2_CTSn PIN_CFG(31, ALT_C) | ||
167 | |||
168 | #define GPIO32_GPIO PIN_CFG(32, GPIO) | ||
169 | #define GPIO32_MC0_DAT7 PIN_CFG(32, ALT_A) | ||
170 | #define GPIO32_SPI3_TXD PIN_CFG(32, ALT_B) | ||
171 | #define GPIO32_U2_RTSn PIN_CFG(32, ALT_C) | ||
172 | |||
173 | #define GPIO33_GPIO PIN_CFG(33, GPIO) | ||
174 | #define GPIO33_MSP1_TXD PIN_CFG(33, ALT_A) | ||
175 | #define GPIO33_MSP1_RXD PIN_CFG(33, ALT_B) | ||
176 | #define GPIO33_U0_DTRn PIN_CFG(33, ALT_C) | ||
177 | |||
178 | #define GPIO34_GPIO PIN_CFG(34, GPIO) | ||
179 | #define GPIO34_MSP1_TFS PIN_CFG(34, ALT_A) | ||
180 | #define GPIO34_NONE PIN_CFG(34, ALT_B) | ||
181 | #define GPIO34_U0_DCDn PIN_CFG(34, ALT_C) | ||
182 | |||
183 | #define GPIO35_GPIO PIN_CFG(35, GPIO) | ||
184 | #define GPIO35_MSP1_TCK PIN_CFG(35, ALT_A) | ||
185 | #define GPIO35_NONE PIN_CFG(35, ALT_B) | ||
186 | #define GPIO35_U0_DSRn PIN_CFG(35, ALT_C) | ||
187 | |||
188 | #define GPIO36_GPIO PIN_CFG(36, GPIO) | ||
189 | #define GPIO36_MSP1_RXD PIN_CFG(36, ALT_A) | ||
190 | #define GPIO36_MSP1_TXD PIN_CFG(36, ALT_B) | ||
191 | #define GPIO36_U0_RIn PIN_CFG(36, ALT_C) | ||
192 | |||
193 | #define GPIO64_GPIO PIN_CFG(64, GPIO) | ||
194 | #define GPIO64_LCDB_DE PIN_CFG(64, ALT_A) | ||
195 | #define GPIO64_KP_O1 PIN_CFG(64, ALT_B) | ||
196 | #define GPIO64_IP_GPIO4 PIN_CFG(64, ALT_C) | ||
197 | |||
198 | #define GPIO65_GPIO PIN_CFG(65, GPIO) | ||
199 | #define GPIO65_LCDB_HSO PIN_CFG(65, ALT_A) | ||
200 | #define GPIO65_KP_O0 PIN_CFG(65, ALT_B) | ||
201 | #define GPIO65_IP_GPIO5 PIN_CFG(65, ALT_C) | ||
202 | |||
203 | #define GPIO66_GPIO PIN_CFG(66, GPIO) | ||
204 | #define GPIO66_LCDB_VSO PIN_CFG(66, ALT_A) | ||
205 | #define GPIO66_KP_I1 PIN_CFG(66, ALT_B) | ||
206 | #define GPIO66_IP_GPIO6 PIN_CFG(66, ALT_C) | ||
207 | |||
208 | #define GPIO67_GPIO PIN_CFG(67, GPIO) | ||
209 | #define GPIO67_LCDB_CLK PIN_CFG(67, ALT_A) | ||
210 | #define GPIO67_KP_I0 PIN_CFG(67, ALT_B) | ||
211 | #define GPIO67_IP_GPIO7 PIN_CFG(67, ALT_C) | ||
212 | |||
213 | #define GPIO68_GPIO PIN_CFG(68, GPIO) | ||
214 | #define GPIO68_LCD_VSI0 PIN_CFG(68, ALT_A) | ||
215 | #define GPIO68_KP_O7 PIN_CFG(68, ALT_B) | ||
216 | #define GPIO68_SM_CLE PIN_CFG(68, ALT_C) | ||
217 | |||
218 | #define GPIO69_GPIO PIN_CFG(69, GPIO) | ||
219 | #define GPIO69_LCD_VSI1 PIN_CFG(69, ALT_A) | ||
220 | #define GPIO69_KP_I7 PIN_CFG(69, ALT_B) | ||
221 | #define GPIO69_SM_ALE PIN_CFG(69, ALT_C) | ||
222 | |||
223 | #define GPIO70_GPIO PIN_CFG(70, GPIO) | ||
224 | #define GPIO70_LCD_D0 PIN_CFG(70, ALT_A) | ||
225 | #define GPIO70_KP_O5 PIN_CFG(70, ALT_B) | ||
226 | #define GPIO70_STMAPE_CLK PIN_CFG(70, ALT_C) | ||
227 | |||
228 | #define GPIO71_GPIO PIN_CFG(71, GPIO) | ||
229 | #define GPIO71_LCD_D1 PIN_CFG(71, ALT_A) | ||
230 | #define GPIO71_KP_O4 PIN_CFG(71, ALT_B) | ||
231 | #define GPIO71_STMAPE_DAT3 PIN_CFG(71, ALT_C) | ||
232 | |||
233 | #define GPIO72_GPIO PIN_CFG(72, GPIO) | ||
234 | #define GPIO72_LCD_D2 PIN_CFG(72, ALT_A) | ||
235 | #define GPIO72_KP_O3 PIN_CFG(72, ALT_B) | ||
236 | #define GPIO72_STMAPE_DAT2 PIN_CFG(72, ALT_C) | ||
237 | |||
238 | #define GPIO73_GPIO PIN_CFG(73, GPIO) | ||
239 | #define GPIO73_LCD_D3 PIN_CFG(73, ALT_A) | ||
240 | #define GPIO73_KP_O2 PIN_CFG(73, ALT_B) | ||
241 | #define GPIO73_STMAPE_DAT1 PIN_CFG(73, ALT_C) | ||
242 | |||
243 | #define GPIO74_GPIO PIN_CFG(74, GPIO) | ||
244 | #define GPIO74_LCD_D4 PIN_CFG(74, ALT_A) | ||
245 | #define GPIO74_KP_I5 PIN_CFG(74, ALT_B) | ||
246 | #define GPIO74_STMAPE_DAT0 PIN_CFG(74, ALT_C) | ||
247 | |||
248 | #define GPIO75_GPIO PIN_CFG(75, GPIO) | ||
249 | #define GPIO75_LCD_D5 PIN_CFG(75, ALT_A) | ||
250 | #define GPIO75_KP_I4 PIN_CFG(75, ALT_B) | ||
251 | #define GPIO75_U2_RXD PIN_CFG(75, ALT_C) | ||
252 | |||
253 | #define GPIO76_GPIO PIN_CFG(76, GPIO) | ||
254 | #define GPIO76_LCD_D6 PIN_CFG(76, ALT_A) | ||
255 | #define GPIO76_KP_I3 PIN_CFG(76, ALT_B) | ||
256 | #define GPIO76_U2_TXD PIN_CFG(76, ALT_C) | ||
257 | |||
258 | #define GPIO77_GPIO PIN_CFG(77, GPIO) | ||
259 | #define GPIO77_LCD_D7 PIN_CFG(77, ALT_A) | ||
260 | #define GPIO77_KP_I2 PIN_CFG(77, ALT_B) | ||
261 | #define GPIO77_NONE PIN_CFG(77, ALT_C) | ||
262 | |||
263 | #define GPIO78_GPIO PIN_CFG(78, GPIO) | ||
264 | #define GPIO78_LCD_D8 PIN_CFG(78, ALT_A) | ||
265 | #define GPIO78_KP_O6 PIN_CFG(78, ALT_B) | ||
266 | #define GPIO78_IP_GPIO2 PIN_CFG(78, ALT_C) | ||
267 | |||
268 | #define GPIO79_GPIO PIN_CFG(79, GPIO) | ||
269 | #define GPIO79_LCD_D9 PIN_CFG(79, ALT_A) | ||
270 | #define GPIO79_KP_I6 PIN_CFG(79, ALT_B) | ||
271 | #define GPIO79_IP_GPIO3 PIN_CFG(79, ALT_C) | ||
272 | |||
273 | #define GPIO80_GPIO PIN_CFG(80, GPIO) | ||
274 | #define GPIO80_LCD_D10 PIN_CFG(80, ALT_A) | ||
275 | #define GPIO80_KP_SKA0 PIN_CFG(80, ALT_B) | ||
276 | #define GPIO80_IP_GPIO4 PIN_CFG(80, ALT_C) | ||
277 | |||
278 | #define GPIO81_GPIO PIN_CFG(81, GPIO) | ||
279 | #define GPIO81_LCD_D11 PIN_CFG(81, ALT_A) | ||
280 | #define GPIO81_KP_SKB0 PIN_CFG(81, ALT_B) | ||
281 | #define GPIO81_IP_GPIO5 PIN_CFG(81, ALT_C) | ||
282 | |||
283 | #define GPIO82_GPIO PIN_CFG(82, GPIO) | ||
284 | #define GPIO82_LCD_D12 PIN_CFG(82, ALT_A) | ||
285 | #define GPIO82_KP_O5 PIN_CFG(82, ALT_B) | ||
286 | |||
287 | #define GPIO83_GPIO PIN_CFG(83, GPIO) | ||
288 | #define GPIO83_LCD_D13 PIN_CFG(83, ALT_A) | ||
289 | #define GPIO83_KP_O4 PIN_CFG(83, ALT_B) | ||
290 | |||
291 | #define GPIO84_GPIO PIN_CFG(84, GPIO) | ||
292 | #define GPIO84_LCD_D14 PIN_CFG(84, ALT_A) | ||
293 | #define GPIO84_KP_I5 PIN_CFG(84, ALT_B) | ||
294 | |||
295 | #define GPIO85_GPIO PIN_CFG(85, GPIO) | ||
296 | #define GPIO85_LCD_D15 PIN_CFG(85, ALT_A) | ||
297 | #define GPIO85_KP_I4 PIN_CFG(85, ALT_B) | ||
298 | |||
299 | #define GPIO86_GPIO PIN_CFG(86, GPIO) | ||
300 | #define GPIO86_LCD_D16 PIN_CFG(86, ALT_A) | ||
301 | #define GPIO86_SM_ADQ0 PIN_CFG(86, ALT_B) | ||
302 | #define GPIO86_MC5_DAT0 PIN_CFG(86, ALT_C) | ||
303 | |||
304 | #define GPIO87_GPIO PIN_CFG(87, GPIO) | ||
305 | #define GPIO87_LCD_D17 PIN_CFG(87, ALT_A) | ||
306 | #define GPIO87_SM_ADQ1 PIN_CFG(87, ALT_B) | ||
307 | #define GPIO87_MC5_DAT1 PIN_CFG(87, ALT_C) | ||
308 | |||
309 | #define GPIO88_GPIO PIN_CFG(88, GPIO) | ||
310 | #define GPIO88_LCD_D18 PIN_CFG(88, ALT_A) | ||
311 | #define GPIO88_SM_ADQ2 PIN_CFG(88, ALT_B) | ||
312 | #define GPIO88_MC5_DAT2 PIN_CFG(88, ALT_C) | ||
313 | |||
314 | #define GPIO89_GPIO PIN_CFG(89, GPIO) | ||
315 | #define GPIO89_LCD_D19 PIN_CFG(89, ALT_A) | ||
316 | #define GPIO89_SM_ADQ3 PIN_CFG(89, ALT_B) | ||
317 | #define GPIO89_MC5_DAT3 PIN_CFG(89, ALT_C) | ||
318 | |||
319 | #define GPIO90_GPIO PIN_CFG(90, GPIO) | ||
320 | #define GPIO90_LCD_D20 PIN_CFG(90, ALT_A) | ||
321 | #define GPIO90_SM_ADQ4 PIN_CFG(90, ALT_B) | ||
322 | #define GPIO90_MC5_CMD PIN_CFG(90, ALT_C) | ||
323 | |||
324 | #define GPIO91_GPIO PIN_CFG(91, GPIO) | ||
325 | #define GPIO91_LCD_D21 PIN_CFG(91, ALT_A) | ||
326 | #define GPIO91_SM_ADQ5 PIN_CFG(91, ALT_B) | ||
327 | #define GPIO91_MC5_FBCLK PIN_CFG(91, ALT_C) | ||
328 | |||
329 | #define GPIO92_GPIO PIN_CFG(92, GPIO) | ||
330 | #define GPIO92_LCD_D22 PIN_CFG(92, ALT_A) | ||
331 | #define GPIO92_SM_ADQ6 PIN_CFG(92, ALT_B) | ||
332 | #define GPIO92_MC5_CLK PIN_CFG(92, ALT_C) | ||
333 | |||
334 | #define GPIO93_GPIO PIN_CFG(93, GPIO) | ||
335 | #define GPIO93_LCD_D23 PIN_CFG(93, ALT_A) | ||
336 | #define GPIO93_SM_ADQ7 PIN_CFG(93, ALT_B) | ||
337 | #define GPIO93_MC5_DAT4 PIN_CFG(93, ALT_C) | ||
338 | |||
339 | #define GPIO94_GPIO PIN_CFG(94, GPIO) | ||
340 | #define GPIO94_KP_O7 PIN_CFG(94, ALT_A) | ||
341 | #define GPIO94_SM_ADVn PIN_CFG(94, ALT_B) | ||
342 | #define GPIO94_MC5_DAT5 PIN_CFG(94, ALT_C) | ||
343 | |||
344 | #define GPIO95_GPIO PIN_CFG(95, GPIO) | ||
345 | #define GPIO95_KP_I7 PIN_CFG(95, ALT_A) | ||
346 | #define GPIO95_SM_CS0n PIN_CFG(95, ALT_B) | ||
347 | #define GPIO95_SM_PS0n PIN_CFG(95, ALT_C) | ||
348 | |||
349 | #define GPIO96_GPIO PIN_CFG(96, GPIO) | ||
350 | #define GPIO96_KP_O6 PIN_CFG(96, ALT_A) | ||
351 | #define GPIO96_SM_OEn PIN_CFG(96, ALT_B) | ||
352 | #define GPIO96_MC5_DAT6 PIN_CFG(96, ALT_C) | ||
353 | |||
354 | #define GPIO97_GPIO PIN_CFG(97, GPIO) | ||
355 | #define GPIO97_KP_I6 PIN_CFG(97, ALT_A) | ||
356 | #define GPIO97_SM_WEn PIN_CFG(97, ALT_B) | ||
357 | #define GPIO97_MC5_DAT7 PIN_CFG(97, ALT_C) | ||
358 | |||
359 | #define GPIO128_GPIO PIN_CFG(128, GPIO) | ||
360 | #define GPIO128_MC2_CLK PIN_CFG_INPUT(128, ALT_A, PULLUP) | ||
361 | #define GPIO128_SM_CKO PIN_CFG(128, ALT_B) | ||
362 | |||
363 | #define GPIO129_GPIO PIN_CFG(129, GPIO) | ||
364 | #define GPIO129_MC2_CMD PIN_CFG_INPUT(129, ALT_A, PULLUP) | ||
365 | #define GPIO129_SM_WAIT0n PIN_CFG(129, ALT_B) | ||
366 | |||
367 | #define GPIO130_GPIO PIN_CFG(130, GPIO) | ||
368 | #define GPIO130_MC2_FBCLK PIN_CFG_INPUT(130, ALT_A, PULLUP) | ||
369 | #define GPIO130_SM_FBCLK PIN_CFG(130, ALT_B) | ||
370 | #define GPIO130_MC2_RSTN PIN_CFG(130, ALT_C) | ||
371 | |||
372 | #define GPIO131_GPIO PIN_CFG(131, GPIO) | ||
373 | #define GPIO131_MC2_DAT0 PIN_CFG_INPUT(131, ALT_A, PULLUP) | ||
374 | #define GPIO131_SM_ADQ8 PIN_CFG(131, ALT_B) | ||
375 | |||
376 | #define GPIO132_GPIO PIN_CFG(132, GPIO) | ||
377 | #define GPIO132_MC2_DAT1 PIN_CFG_INPUT(132, ALT_A, PULLUP) | ||
378 | #define GPIO132_SM_ADQ9 PIN_CFG(132, ALT_B) | ||
379 | |||
380 | #define GPIO133_GPIO PIN_CFG(133, GPIO) | ||
381 | #define GPIO133_MC2_DAT2 PIN_CFG_INPUT(133, ALT_A, PULLUP) | ||
382 | #define GPIO133_SM_ADQ10 PIN_CFG(133, ALT_B) | ||
383 | |||
384 | #define GPIO134_GPIO PIN_CFG(134, GPIO) | ||
385 | #define GPIO134_MC2_DAT3 PIN_CFG_INPUT(134, ALT_A, PULLUP) | ||
386 | #define GPIO134_SM_ADQ11 PIN_CFG(134, ALT_B) | ||
387 | |||
388 | #define GPIO135_GPIO PIN_CFG(135, GPIO) | ||
389 | #define GPIO135_MC2_DAT4 PIN_CFG_INPUT(135, ALT_A, PULLUP) | ||
390 | #define GPIO135_SM_ADQ12 PIN_CFG(135, ALT_B) | ||
391 | |||
392 | #define GPIO136_GPIO PIN_CFG(136, GPIO) | ||
393 | #define GPIO136_MC2_DAT5 PIN_CFG_INPUT(136, ALT_A, PULLUP) | ||
394 | #define GPIO136_SM_ADQ13 PIN_CFG(136, ALT_B) | ||
395 | |||
396 | #define GPIO137_GPIO PIN_CFG(137, GPIO) | ||
397 | #define GPIO137_MC2_DAT6 PIN_CFG_INPUT(137, ALT_A, PULLUP) | ||
398 | #define GPIO137_SM_ADQ14 PIN_CFG(137, ALT_B) | ||
399 | |||
400 | #define GPIO138_GPIO PIN_CFG(138, GPIO) | ||
401 | #define GPIO138_MC2_DAT7 PIN_CFG_INPUT(138, ALT_A, PULLUP) | ||
402 | #define GPIO138_SM_ADQ15 PIN_CFG(138, ALT_B) | ||
403 | |||
404 | #define GPIO139_GPIO PIN_CFG(139, GPIO) | ||
405 | #define GPIO139_SSP1_RXD PIN_CFG(139, ALT_A) | ||
406 | #define GPIO139_SM_WAIT1n PIN_CFG(139, ALT_B) | ||
407 | #define GPIO139_KP_O8 PIN_CFG(139, ALT_C) | ||
408 | |||
409 | #define GPIO140_GPIO PIN_CFG(140, GPIO) | ||
410 | #define GPIO140_SSP1_TXD PIN_CFG(140, ALT_A) | ||
411 | #define GPIO140_IP_GPIO7 PIN_CFG(140, ALT_B) | ||
412 | #define GPIO140_KP_SKA1 PIN_CFG(140, ALT_C) | ||
413 | |||
414 | #define GPIO141_GPIO PIN_CFG(141, GPIO) | ||
415 | #define GPIO141_SSP1_CLK PIN_CFG(141, ALT_A) | ||
416 | #define GPIO141_IP_GPIO2 PIN_CFG(141, ALT_B) | ||
417 | #define GPIO141_KP_O9 PIN_CFG(141, ALT_C) | ||
418 | |||
419 | #define GPIO142_GPIO PIN_CFG(142, GPIO) | ||
420 | #define GPIO142_SSP1_FRM PIN_CFG(142, ALT_A) | ||
421 | #define GPIO142_IP_GPIO3 PIN_CFG(142, ALT_B) | ||
422 | #define GPIO142_KP_SKB1 PIN_CFG(142, ALT_C) | ||
423 | |||
424 | #define GPIO143_GPIO PIN_CFG(143, GPIO) | ||
425 | #define GPIO143_SSP0_CLK PIN_CFG(143, ALT_A) | ||
426 | |||
427 | #define GPIO144_GPIO PIN_CFG(144, GPIO) | ||
428 | #define GPIO144_SSP0_FRM PIN_CFG(144, ALT_A) | ||
429 | |||
430 | #define GPIO145_GPIO PIN_CFG(145, GPIO) | ||
431 | #define GPIO145_SSP0_RXD PIN_CFG(145, ALT_A) | ||
432 | |||
433 | #define GPIO146_GPIO PIN_CFG(146, GPIO) | ||
434 | #define GPIO146_SSP0_TXD PIN_CFG(146, ALT_A) | ||
435 | |||
436 | #define GPIO147_GPIO PIN_CFG(147, GPIO) | ||
437 | #define GPIO147_I2C0_SCL PIN_CFG(147, ALT_A) | ||
438 | |||
439 | #define GPIO148_GPIO PIN_CFG(148, GPIO) | ||
440 | #define GPIO148_I2C0_SDA PIN_CFG(148, ALT_A) | ||
441 | |||
442 | #define GPIO149_GPIO PIN_CFG(149, GPIO) | ||
443 | #define GPIO149_IP_GPIO0 PIN_CFG(149, ALT_A) | ||
444 | #define GPIO149_SM_CS1n PIN_CFG(149, ALT_B) | ||
445 | #define GPIO149_SM_PS1n PIN_CFG(149, ALT_C) | ||
446 | |||
447 | #define GPIO150_GPIO PIN_CFG(150, GPIO) | ||
448 | #define GPIO150_IP_GPIO1 PIN_CFG(150, ALT_A) | ||
449 | #define GPIO150_LCDA_CLK PIN_CFG(150, ALT_B) | ||
450 | |||
451 | #define GPIO151_GPIO PIN_CFG(151, GPIO) | ||
452 | #define GPIO151_KP_SKA0 PIN_CFG(151, ALT_A) | ||
453 | #define GPIO151_LCD_VSI0 PIN_CFG(151, ALT_B) | ||
454 | #define GPIO151_KP_O8 PIN_CFG(151, ALT_C) | ||
455 | |||
456 | #define GPIO152_GPIO PIN_CFG(152, GPIO) | ||
457 | #define GPIO152_KP_SKB0 PIN_CFG(152, ALT_A) | ||
458 | #define GPIO152_LCD_VSI1 PIN_CFG(152, ALT_B) | ||
459 | #define GPIO152_KP_O9 PIN_CFG(152, ALT_C) | ||
460 | |||
461 | #define GPIO153_GPIO PIN_CFG(153, GPIO) | ||
462 | #define GPIO153_KP_I7 PIN_CFG(153, ALT_A) | ||
463 | #define GPIO153_LCD_D24 PIN_CFG(153, ALT_B) | ||
464 | #define GPIO153_U2_RXD PIN_CFG(153, ALT_C) | ||
465 | |||
466 | #define GPIO154_GPIO PIN_CFG(154, GPIO) | ||
467 | #define GPIO154_KP_I6 PIN_CFG(154, ALT_A) | ||
468 | #define GPIO154_LCD_D25 PIN_CFG(154, ALT_B) | ||
469 | #define GPIO154_U2_TXD PIN_CFG(154, ALT_C) | ||
470 | |||
471 | #define GPIO155_GPIO PIN_CFG(155, GPIO) | ||
472 | #define GPIO155_KP_I5 PIN_CFG(155, ALT_A) | ||
473 | #define GPIO155_LCD_D26 PIN_CFG(155, ALT_B) | ||
474 | #define GPIO155_STMAPE_CLK PIN_CFG(155, ALT_C) | ||
475 | |||
476 | #define GPIO156_GPIO PIN_CFG(156, GPIO) | ||
477 | #define GPIO156_KP_I4 PIN_CFG(156, ALT_A) | ||
478 | #define GPIO156_LCD_D27 PIN_CFG(156, ALT_B) | ||
479 | #define GPIO156_STMAPE_DAT3 PIN_CFG(156, ALT_C) | ||
480 | |||
481 | #define GPIO157_GPIO PIN_CFG(157, GPIO) | ||
482 | #define GPIO157_KP_O7 PIN_CFG(157, ALT_A) | ||
483 | #define GPIO157_LCD_D28 PIN_CFG(157, ALT_B) | ||
484 | #define GPIO157_STMAPE_DAT2 PIN_CFG(157, ALT_C) | ||
485 | |||
486 | #define GPIO158_GPIO PIN_CFG(158, GPIO) | ||
487 | #define GPIO158_KP_O6 PIN_CFG(158, ALT_A) | ||
488 | #define GPIO158_LCD_D29 PIN_CFG(158, ALT_B) | ||
489 | #define GPIO158_STMAPE_DAT1 PIN_CFG(158, ALT_C) | ||
490 | |||
491 | #define GPIO159_GPIO PIN_CFG(159, GPIO) | ||
492 | #define GPIO159_KP_O5 PIN_CFG(159, ALT_A) | ||
493 | #define GPIO159_LCD_D30 PIN_CFG(159, ALT_B) | ||
494 | #define GPIO159_STMAPE_DAT0 PIN_CFG(159, ALT_C) | ||
495 | |||
496 | #define GPIO160_GPIO PIN_CFG(160, GPIO) | ||
497 | #define GPIO160_KP_O4 PIN_CFG(160, ALT_A) | ||
498 | #define GPIO160_LCD_D31 PIN_CFG(160, ALT_B) | ||
499 | #define GPIO160_NONE PIN_CFG(160, ALT_C) | ||
500 | |||
501 | #define GPIO161_GPIO PIN_CFG(161, GPIO) | ||
502 | #define GPIO161_KP_I3 PIN_CFG(161, ALT_A) | ||
503 | #define GPIO161_LCD_D32 PIN_CFG(161, ALT_B) | ||
504 | #define GPIO161_UARTMOD_RXD PIN_CFG(161, ALT_C) | ||
505 | |||
506 | #define GPIO162_GPIO PIN_CFG(162, GPIO) | ||
507 | #define GPIO162_KP_I2 PIN_CFG(162, ALT_A) | ||
508 | #define GPIO162_LCD_D33 PIN_CFG(162, ALT_B) | ||
509 | #define GPIO162_UARTMOD_TXD PIN_CFG(162, ALT_C) | ||
510 | |||
511 | #define GPIO163_GPIO PIN_CFG(163, GPIO) | ||
512 | #define GPIO163_KP_I1 PIN_CFG(163, ALT_A) | ||
513 | #define GPIO163_LCD_D34 PIN_CFG(163, ALT_B) | ||
514 | #define GPIO163_STMMOD_CLK PIN_CFG(163, ALT_C) | ||
515 | |||
516 | #define GPIO164_GPIO PIN_CFG(164, GPIO) | ||
517 | #define GPIO164_KP_I0 PIN_CFG(164, ALT_A) | ||
518 | #define GPIO164_LCD_D35 PIN_CFG(164, ALT_B) | ||
519 | #define GPIO164_STMMOD_DAT3 PIN_CFG(164, ALT_C) | ||
520 | |||
521 | #define GPIO165_GPIO PIN_CFG(165, GPIO) | ||
522 | #define GPIO165_KP_O3 PIN_CFG(165, ALT_A) | ||
523 | #define GPIO165_LCD_D36 PIN_CFG(165, ALT_B) | ||
524 | #define GPIO165_STMMOD_DAT2 PIN_CFG(165, ALT_C) | ||
525 | |||
526 | #define GPIO166_GPIO PIN_CFG(166, GPIO) | ||
527 | #define GPIO166_KP_O2 PIN_CFG(166, ALT_A) | ||
528 | #define GPIO166_LCD_D37 PIN_CFG(166, ALT_B) | ||
529 | #define GPIO166_STMMOD_DAT1 PIN_CFG(166, ALT_C) | ||
530 | |||
531 | #define GPIO167_GPIO PIN_CFG(167, GPIO) | ||
532 | #define GPIO167_KP_O1 PIN_CFG(167, ALT_A) | ||
533 | #define GPIO167_LCD_D38 PIN_CFG(167, ALT_B) | ||
534 | #define GPIO167_STMMOD_DAT0 PIN_CFG(167, ALT_C) | ||
535 | |||
536 | #define GPIO168_GPIO PIN_CFG(168, GPIO) | ||
537 | #define GPIO168_KP_O0 PIN_CFG(168, ALT_A) | ||
538 | #define GPIO168_LCD_D39 PIN_CFG(168, ALT_B) | ||
539 | #define GPIO168_NONE PIN_CFG(168, ALT_C) | ||
540 | |||
541 | #define GPIO169_GPIO PIN_CFG(169, GPIO) | ||
542 | #define GPIO169_RF_PURn PIN_CFG(169, ALT_A) | ||
543 | #define GPIO169_LCDA_DE PIN_CFG(169, ALT_B) | ||
544 | #define GPIO169_USBSIM_PDC PIN_CFG(169, ALT_C) | ||
545 | |||
546 | #define GPIO170_GPIO PIN_CFG(170, GPIO) | ||
547 | #define GPIO170_MODEM_STATE PIN_CFG(170, ALT_A) | ||
548 | #define GPIO170_LCDA_VSO PIN_CFG(170, ALT_B) | ||
549 | #define GPIO170_KP_SKA1 PIN_CFG(170, ALT_C) | ||
550 | |||
551 | #define GPIO171_GPIO PIN_CFG(171, GPIO) | ||
552 | #define GPIO171_MODEM_PWREN PIN_CFG(171, ALT_A) | ||
553 | #define GPIO171_LCDA_HSO PIN_CFG(171, ALT_B) | ||
554 | #define GPIO171_KP_SKB1 PIN_CFG(171, ALT_C) | ||
555 | |||
556 | #define GPIO192_GPIO PIN_CFG(192, GPIO) | ||
557 | #define GPIO192_MSP2_SCK PIN_CFG(192, ALT_A) | ||
558 | |||
559 | #define GPIO193_GPIO PIN_CFG(193, GPIO) | ||
560 | #define GPIO193_MSP2_TXD PIN_CFG(193, ALT_A) | ||
561 | |||
562 | #define GPIO194_GPIO PIN_CFG(194, GPIO) | ||
563 | #define GPIO194_MSP2_TCK PIN_CFG(194, ALT_A) | ||
564 | |||
565 | #define GPIO195_GPIO PIN_CFG(195, GPIO) | ||
566 | #define GPIO195_MSP2_TFS PIN_CFG(195, ALT_A) | ||
567 | |||
568 | #define GPIO196_GPIO PIN_CFG(196, GPIO) | ||
569 | #define GPIO196_MSP2_RXD PIN_CFG(196, ALT_A) | ||
570 | |||
571 | #define GPIO197_GPIO PIN_CFG(197, GPIO) | ||
572 | #define GPIO197_MC4_DAT3 PIN_CFG_INPUT(197, ALT_A, PULLUP) | ||
573 | |||
574 | #define GPIO198_GPIO PIN_CFG(198, GPIO) | ||
575 | #define GPIO198_MC4_DAT2 PIN_CFG_INPUT(198, ALT_A, PULLUP) | ||
576 | |||
577 | #define GPIO199_GPIO PIN_CFG(199, GPIO) | ||
578 | #define GPIO199_MC4_DAT1 PIN_CFG_INPUT(199, ALT_A, PULLUP) | ||
579 | |||
580 | #define GPIO200_GPIO PIN_CFG(200, GPIO) | ||
581 | #define GPIO200_MC4_DAT0 PIN_CFG_INPUT(200, ALT_A, PULLUP) | ||
582 | |||
583 | #define GPIO201_GPIO PIN_CFG(201, GPIO) | ||
584 | #define GPIO201_MC4_CMD PIN_CFG_INPUT(201, ALT_A, PULLUP) | ||
585 | |||
586 | #define GPIO202_GPIO PIN_CFG(202, GPIO) | ||
587 | #define GPIO202_MC4_FBCLK PIN_CFG_INPUT(202, ALT_A, PULLUP) | ||
588 | #define GPIO202_PWL PIN_CFG(202, ALT_B) | ||
589 | #define GPIO202_MC4_RSTN PIN_CFG(202, ALT_C) | ||
590 | |||
591 | #define GPIO203_GPIO PIN_CFG(203, GPIO) | ||
592 | #define GPIO203_MC4_CLK PIN_CFG_INPUT(203, ALT_A, PULLUP) | ||
593 | |||
594 | #define GPIO204_GPIO PIN_CFG(204, GPIO) | ||
595 | #define GPIO204_MC4_DAT7 PIN_CFG_INPUT(204, ALT_A, PULLUP) | ||
596 | |||
597 | #define GPIO205_GPIO PIN_CFG(205, GPIO) | ||
598 | #define GPIO205_MC4_DAT6 PIN_CFG_INPUT(205, ALT_A, PULLUP) | ||
599 | |||
600 | #define GPIO206_GPIO PIN_CFG(206, GPIO) | ||
601 | #define GPIO206_MC4_DAT5 PIN_CFG_INPUT(206, ALT_A, PULLUP) | ||
602 | |||
603 | #define GPIO207_GPIO PIN_CFG(207, GPIO) | ||
604 | #define GPIO207_MC4_DAT4 PIN_CFG_INPUT(207, ALT_A, PULLUP) | ||
605 | |||
606 | #define GPIO208_GPIO PIN_CFG(208, GPIO) | ||
607 | #define GPIO208_MC1_CLK PIN_CFG(208, ALT_A) | ||
608 | |||
609 | #define GPIO209_GPIO PIN_CFG(209, GPIO) | ||
610 | #define GPIO209_MC1_FBCLK PIN_CFG(209, ALT_A) | ||
611 | #define GPIO209_SPI1_CLK PIN_CFG(209, ALT_B) | ||
612 | |||
613 | #define GPIO210_GPIO PIN_CFG(210, GPIO) | ||
614 | #define GPIO210_MC1_CMD PIN_CFG(210, ALT_A) | ||
615 | |||
616 | #define GPIO211_GPIO PIN_CFG(211, GPIO) | ||
617 | #define GPIO211_MC1_DAT0 PIN_CFG(211, ALT_A) | ||
618 | |||
619 | #define GPIO212_GPIO PIN_CFG(212, GPIO) | ||
620 | #define GPIO212_MC1_DAT1 PIN_CFG(212, ALT_A) | ||
621 | #define GPIO212_SPI1_FRM PIN_CFG(212, ALT_B) | ||
622 | |||
623 | #define GPIO213_GPIO PIN_CFG(213, GPIO) | ||
624 | #define GPIO213_MC1_DAT2 PIN_CFG(213, ALT_A) | ||
625 | #define GPIO213_SPI1_TXD PIN_CFG(213, ALT_B) | ||
626 | |||
627 | #define GPIO214_GPIO PIN_CFG(214, GPIO) | ||
628 | #define GPIO214_MC1_DAT3 PIN_CFG(214, ALT_A) | ||
629 | #define GPIO214_SPI1_RXD PIN_CFG(214, ALT_B) | ||
630 | |||
631 | #define GPIO215_GPIO PIN_CFG(215, GPIO) | ||
632 | #define GPIO215_MC1_CMDDIR PIN_CFG(215, ALT_A) | ||
633 | #define GPIO215_MC3_DAT2DIR PIN_CFG(215, ALT_B) | ||
634 | #define GPIO215_CLKOUT1 PIN_CFG(215, ALT_C) | ||
635 | #define GPIO215_SPI2_TXD PIN_CFG(215, ALT_C) | ||
636 | |||
637 | #define GPIO216_GPIO PIN_CFG(216, GPIO) | ||
638 | #define GPIO216_MC1_DAT2DIR PIN_CFG(216, ALT_A) | ||
639 | #define GPIO216_MC3_CMDDIR PIN_CFG(216, ALT_B) | ||
640 | #define GPIO216_I2C3_SDA PIN_CFG(216, ALT_C) | ||
641 | #define GPIO216_SPI2_FRM PIN_CFG(216, ALT_C) | ||
642 | |||
643 | #define GPIO217_GPIO PIN_CFG(217, GPIO) | ||
644 | #define GPIO217_MC1_DAT0DIR PIN_CFG(217, ALT_A) | ||
645 | #define GPIO217_MC3_DAT31DIR PIN_CFG(217, ALT_B) | ||
646 | #define GPIO217_CLKOUT2 PIN_CFG(217, ALT_C) | ||
647 | #define GPIO217_SPI2_CLK PIN_CFG(217, ALT_C) | ||
648 | |||
649 | #define GPIO218_GPIO PIN_CFG(218, GPIO) | ||
650 | #define GPIO218_MC1_DAT31DIR PIN_CFG(218, ALT_A) | ||
651 | #define GPIO218_MC3_DAT0DIR PIN_CFG(218, ALT_B) | ||
652 | #define GPIO218_I2C3_SCL PIN_CFG(218, ALT_C) | ||
653 | #define GPIO218_SPI2_RXD PIN_CFG(218, ALT_C) | ||
654 | |||
655 | #define GPIO219_GPIO PIN_CFG(219, GPIO) | ||
656 | #define GPIO219_HSIR_FLA0 PIN_CFG(219, ALT_A) | ||
657 | #define GPIO219_MC3_CLK PIN_CFG(219, ALT_B) | ||
658 | |||
659 | #define GPIO220_GPIO PIN_CFG(220, GPIO) | ||
660 | #define GPIO220_HSIR_DAT0 PIN_CFG(220, ALT_A) | ||
661 | #define GPIO220_MC3_FBCLK PIN_CFG(220, ALT_B) | ||
662 | #define GPIO220_SPI0_CLK PIN_CFG(220, ALT_C) | ||
663 | |||
664 | #define GPIO221_GPIO PIN_CFG(221, GPIO) | ||
665 | #define GPIO221_HSIR_RDY0 PIN_CFG(221, ALT_A) | ||
666 | #define GPIO221_MC3_CMD PIN_CFG(221, ALT_B) | ||
667 | |||
668 | #define GPIO222_GPIO PIN_CFG(222, GPIO) | ||
669 | #define GPIO222_HSIT_FLA0 PIN_CFG(222, ALT_A) | ||
670 | #define GPIO222_MC3_DAT0 PIN_CFG(222, ALT_B) | ||
671 | |||
672 | #define GPIO223_GPIO PIN_CFG(223, GPIO) | ||
673 | #define GPIO223_HSIT_DAT0 PIN_CFG(223, ALT_A) | ||
674 | #define GPIO223_MC3_DAT1 PIN_CFG(223, ALT_B) | ||
675 | #define GPIO223_SPI0_FRM PIN_CFG(223, ALT_C) | ||
676 | |||
677 | #define GPIO224_GPIO PIN_CFG(224, GPIO) | ||
678 | #define GPIO224_HSIT_RDY0 PIN_CFG(224, ALT_A) | ||
679 | #define GPIO224_MC3_DAT2 PIN_CFG(224, ALT_B) | ||
680 | #define GPIO224_SPI0_TXD PIN_CFG(224, ALT_C) | ||
681 | |||
682 | #define GPIO225_GPIO PIN_CFG(225, GPIO) | ||
683 | #define GPIO225_HSIT_CAWAKE0 PIN_CFG(225, ALT_A) | ||
684 | #define GPIO225_MC3_DAT3 PIN_CFG(225, ALT_B) | ||
685 | #define GPIO225_SPI0_RXD PIN_CFG(225, ALT_C) | ||
686 | |||
687 | #define GPIO226_GPIO PIN_CFG(226, GPIO) | ||
688 | #define GPIO226_HSIT_ACWAKE0 PIN_CFG(226, ALT_A) | ||
689 | #define GPIO226_PWL PIN_CFG(226, ALT_B) | ||
690 | #define GPIO226_USBSIM_PDC PIN_CFG(226, ALT_C) | ||
691 | |||
692 | #define GPIO227_GPIO PIN_CFG(227, GPIO) | ||
693 | #define GPIO227_CLKOUT1 PIN_CFG(227, ALT_A) | ||
694 | |||
695 | #define GPIO228_GPIO PIN_CFG(228, GPIO) | ||
696 | #define GPIO228_CLKOUT2 PIN_CFG(228, ALT_A) | ||
697 | |||
698 | #define GPIO229_GPIO PIN_CFG(229, GPIO) | ||
699 | #define GPIO229_CLKOUT1 PIN_CFG(229, ALT_A) | ||
700 | #define GPIO229_PWL PIN_CFG(229, ALT_B) | ||
701 | #define GPIO229_I2C3_SDA PIN_CFG(229, ALT_C) | ||
702 | |||
703 | #define GPIO230_GPIO PIN_CFG(230, GPIO) | ||
704 | #define GPIO230_CLKOUT2 PIN_CFG(230, ALT_A) | ||
705 | #define GPIO230_PWL PIN_CFG(230, ALT_B) | ||
706 | #define GPIO230_I2C3_SCL PIN_CFG(230, ALT_C) | ||
707 | |||
708 | #define GPIO256_GPIO PIN_CFG(256, GPIO) | ||
709 | #define GPIO256_USB_NXT PIN_CFG(256, ALT_A) | ||
710 | |||
711 | #define GPIO257_GPIO PIN_CFG(257, GPIO) | ||
712 | #define GPIO257_USB_STP PIN_CFG(257, ALT_A) | ||
713 | |||
714 | #define GPIO258_GPIO PIN_CFG(258, GPIO) | ||
715 | #define GPIO258_USB_XCLK PIN_CFG(258, ALT_A) | ||
716 | #define GPIO258_NONE PIN_CFG(258, ALT_B) | ||
717 | #define GPIO258_DDR_TRIG PIN_CFG(258, ALT_C) | ||
718 | |||
719 | #define GPIO259_GPIO PIN_CFG(259, GPIO) | ||
720 | #define GPIO259_USB_DIR PIN_CFG(259, ALT_A) | ||
721 | |||
722 | #define GPIO260_GPIO PIN_CFG(260, GPIO) | ||
723 | #define GPIO260_USB_DAT7 PIN_CFG(260, ALT_A) | ||
724 | |||
725 | #define GPIO261_GPIO PIN_CFG(261, GPIO) | ||
726 | #define GPIO261_USB_DAT6 PIN_CFG(261, ALT_A) | ||
727 | |||
728 | #define GPIO262_GPIO PIN_CFG(262, GPIO) | ||
729 | #define GPIO262_USB_DAT5 PIN_CFG(262, ALT_A) | ||
730 | |||
731 | #define GPIO263_GPIO PIN_CFG(263, GPIO) | ||
732 | #define GPIO263_USB_DAT4 PIN_CFG(263, ALT_A) | ||
733 | |||
734 | #define GPIO264_GPIO PIN_CFG(264, GPIO) | ||
735 | #define GPIO264_USB_DAT3 PIN_CFG(264, ALT_A) | ||
736 | |||
737 | #define GPIO265_GPIO PIN_CFG(265, GPIO) | ||
738 | #define GPIO265_USB_DAT2 PIN_CFG(265, ALT_A) | ||
739 | |||
740 | #define GPIO266_GPIO PIN_CFG(266, GPIO) | ||
741 | #define GPIO266_USB_DAT1 PIN_CFG(266, ALT_A) | ||
742 | |||
743 | #define GPIO267_GPIO PIN_CFG(267, GPIO) | ||
744 | #define GPIO267_USB_DAT0 PIN_CFG(267, ALT_A) | ||
745 | |||
746 | #endif | ||
diff --git a/arch/arm/mach-ux500/platsmp.c b/arch/arm/mach-ux500/platsmp.c index 14d90469392f..1f296e796a4f 100644 --- a/arch/arm/mach-ux500/platsmp.c +++ b/arch/arm/mach-ux500/platsmp.c | |||
@@ -54,7 +54,7 @@ static void __iomem *scu_base_addr(void) | |||
54 | 54 | ||
55 | static DEFINE_SPINLOCK(boot_lock); | 55 | static DEFINE_SPINLOCK(boot_lock); |
56 | 56 | ||
57 | static void __cpuinit ux500_secondary_init(unsigned int cpu) | 57 | static void ux500_secondary_init(unsigned int cpu) |
58 | { | 58 | { |
59 | /* | 59 | /* |
60 | * let the primary processor know we're out of the | 60 | * let the primary processor know we're out of the |
@@ -69,7 +69,7 @@ static void __cpuinit ux500_secondary_init(unsigned int cpu) | |||
69 | spin_unlock(&boot_lock); | 69 | spin_unlock(&boot_lock); |
70 | } | 70 | } |
71 | 71 | ||
72 | static int __cpuinit ux500_boot_secondary(unsigned int cpu, struct task_struct *idle) | 72 | static int ux500_boot_secondary(unsigned int cpu, struct task_struct *idle) |
73 | { | 73 | { |
74 | unsigned long timeout; | 74 | unsigned long timeout; |
75 | 75 | ||
diff --git a/arch/arm/mach-ux500/setup.h b/arch/arm/mach-ux500/setup.h index cad3ca86c540..656324aad18e 100644 --- a/arch/arm/mach-ux500/setup.h +++ b/arch/arm/mach-ux500/setup.h | |||
@@ -11,10 +11,13 @@ | |||
11 | #ifndef __ASM_ARCH_SETUP_H | 11 | #ifndef __ASM_ARCH_SETUP_H |
12 | #define __ASM_ARCH_SETUP_H | 12 | #define __ASM_ARCH_SETUP_H |
13 | 13 | ||
14 | #include <asm/mach/arch.h> | ||
14 | #include <asm/mach/time.h> | 15 | #include <asm/mach/time.h> |
15 | #include <linux/init.h> | 16 | #include <linux/init.h> |
16 | #include <linux/mfd/abx500/ab8500.h> | 17 | #include <linux/mfd/abx500/ab8500.h> |
17 | 18 | ||
19 | void ux500_restart(enum reboot_mode mode, const char *cmd); | ||
20 | |||
18 | void __init ux500_map_io(void); | 21 | void __init ux500_map_io(void); |
19 | extern void __init u8500_map_io(void); | 22 | extern void __init u8500_map_io(void); |
20 | 23 | ||
diff --git a/arch/arm/mach-zynq/common.c b/arch/arm/mach-zynq/common.c index 5b799c29886e..5f252569c689 100644 --- a/arch/arm/mach-zynq/common.c +++ b/arch/arm/mach-zynq/common.c | |||
@@ -91,7 +91,7 @@ static void __init zynq_map_io(void) | |||
91 | zynq_scu_map_io(); | 91 | zynq_scu_map_io(); |
92 | } | 92 | } |
93 | 93 | ||
94 | static void zynq_system_reset(char mode, const char *cmd) | 94 | static void zynq_system_reset(enum reboot_mode mode, const char *cmd) |
95 | { | 95 | { |
96 | zynq_slcr_system_reset(); | 96 | zynq_slcr_system_reset(); |
97 | } | 97 | } |
diff --git a/arch/arm/mach-zynq/common.h b/arch/arm/mach-zynq/common.h index fbbd0e21c404..3040d219570f 100644 --- a/arch/arm/mach-zynq/common.h +++ b/arch/arm/mach-zynq/common.h | |||
@@ -27,7 +27,7 @@ extern void secondary_startup(void); | |||
27 | extern char zynq_secondary_trampoline; | 27 | extern char zynq_secondary_trampoline; |
28 | extern char zynq_secondary_trampoline_jump; | 28 | extern char zynq_secondary_trampoline_jump; |
29 | extern char zynq_secondary_trampoline_end; | 29 | extern char zynq_secondary_trampoline_end; |
30 | extern int __cpuinit zynq_cpun_start(u32 address, int cpu); | 30 | extern int zynq_cpun_start(u32 address, int cpu); |
31 | extern struct smp_operations zynq_smp_ops __initdata; | 31 | extern struct smp_operations zynq_smp_ops __initdata; |
32 | #endif | 32 | #endif |
33 | 33 | ||
diff --git a/arch/arm/mach-zynq/headsmp.S b/arch/arm/mach-zynq/headsmp.S index d183cd234a9b..d4cd5f34fe5c 100644 --- a/arch/arm/mach-zynq/headsmp.S +++ b/arch/arm/mach-zynq/headsmp.S | |||
@@ -9,8 +9,6 @@ | |||
9 | #include <linux/linkage.h> | 9 | #include <linux/linkage.h> |
10 | #include <linux/init.h> | 10 | #include <linux/init.h> |
11 | 11 | ||
12 | __CPUINIT | ||
13 | |||
14 | ENTRY(zynq_secondary_trampoline) | 12 | ENTRY(zynq_secondary_trampoline) |
15 | ldr r0, [pc] | 13 | ldr r0, [pc] |
16 | bx r0 | 14 | bx r0 |
diff --git a/arch/arm/mach-zynq/platsmp.c b/arch/arm/mach-zynq/platsmp.c index 023f225493f2..689fbbc3d9c8 100644 --- a/arch/arm/mach-zynq/platsmp.c +++ b/arch/arm/mach-zynq/platsmp.c | |||
@@ -30,11 +30,11 @@ | |||
30 | /* | 30 | /* |
31 | * Store number of cores in the system | 31 | * Store number of cores in the system |
32 | * Because of scu_get_core_count() must be in __init section and can't | 32 | * Because of scu_get_core_count() must be in __init section and can't |
33 | * be called from zynq_cpun_start() because it is in __cpuinit section. | 33 | * be called from zynq_cpun_start() because it is not in __init section. |
34 | */ | 34 | */ |
35 | static int ncores; | 35 | static int ncores; |
36 | 36 | ||
37 | int __cpuinit zynq_cpun_start(u32 address, int cpu) | 37 | int zynq_cpun_start(u32 address, int cpu) |
38 | { | 38 | { |
39 | u32 trampoline_code_size = &zynq_secondary_trampoline_end - | 39 | u32 trampoline_code_size = &zynq_secondary_trampoline_end - |
40 | &zynq_secondary_trampoline; | 40 | &zynq_secondary_trampoline; |
@@ -92,7 +92,7 @@ int __cpuinit zynq_cpun_start(u32 address, int cpu) | |||
92 | } | 92 | } |
93 | EXPORT_SYMBOL(zynq_cpun_start); | 93 | EXPORT_SYMBOL(zynq_cpun_start); |
94 | 94 | ||
95 | static int __cpuinit zynq_boot_secondary(unsigned int cpu, | 95 | static int zynq_boot_secondary(unsigned int cpu, |
96 | struct task_struct *idle) | 96 | struct task_struct *idle) |
97 | { | 97 | { |
98 | return zynq_cpun_start(virt_to_phys(secondary_startup), cpu); | 98 | return zynq_cpun_start(virt_to_phys(secondary_startup), cpu); |
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig index 6cacdc8dd654..cd2c88e7a8f7 100644 --- a/arch/arm/mm/Kconfig +++ b/arch/arm/mm/Kconfig | |||
@@ -421,24 +421,28 @@ config CPU_32v3 | |||
421 | select CPU_USE_DOMAINS if MMU | 421 | select CPU_USE_DOMAINS if MMU |
422 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP | 422 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP |
423 | select TLS_REG_EMUL if SMP || !MMU | 423 | select TLS_REG_EMUL if SMP || !MMU |
424 | select NEED_KUSER_HELPERS | ||
424 | 425 | ||
425 | config CPU_32v4 | 426 | config CPU_32v4 |
426 | bool | 427 | bool |
427 | select CPU_USE_DOMAINS if MMU | 428 | select CPU_USE_DOMAINS if MMU |
428 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP | 429 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP |
429 | select TLS_REG_EMUL if SMP || !MMU | 430 | select TLS_REG_EMUL if SMP || !MMU |
431 | select NEED_KUSER_HELPERS | ||
430 | 432 | ||
431 | config CPU_32v4T | 433 | config CPU_32v4T |
432 | bool | 434 | bool |
433 | select CPU_USE_DOMAINS if MMU | 435 | select CPU_USE_DOMAINS if MMU |
434 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP | 436 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP |
435 | select TLS_REG_EMUL if SMP || !MMU | 437 | select TLS_REG_EMUL if SMP || !MMU |
438 | select NEED_KUSER_HELPERS | ||
436 | 439 | ||
437 | config CPU_32v5 | 440 | config CPU_32v5 |
438 | bool | 441 | bool |
439 | select CPU_USE_DOMAINS if MMU | 442 | select CPU_USE_DOMAINS if MMU |
440 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP | 443 | select NEEDS_SYSCALL_FOR_CMPXCHG if SMP |
441 | select TLS_REG_EMUL if SMP || !MMU | 444 | select TLS_REG_EMUL if SMP || !MMU |
445 | select NEED_KUSER_HELPERS | ||
442 | 446 | ||
443 | config CPU_32v6 | 447 | config CPU_32v6 |
444 | bool | 448 | bool |
@@ -776,6 +780,7 @@ config CPU_BPREDICT_DISABLE | |||
776 | 780 | ||
777 | config TLS_REG_EMUL | 781 | config TLS_REG_EMUL |
778 | bool | 782 | bool |
783 | select NEED_KUSER_HELPERS | ||
779 | help | 784 | help |
780 | An SMP system using a pre-ARMv6 processor (there are apparently | 785 | An SMP system using a pre-ARMv6 processor (there are apparently |
781 | a few prototypes like that in existence) and therefore access to | 786 | a few prototypes like that in existence) and therefore access to |
@@ -783,11 +788,43 @@ config TLS_REG_EMUL | |||
783 | 788 | ||
784 | config NEEDS_SYSCALL_FOR_CMPXCHG | 789 | config NEEDS_SYSCALL_FOR_CMPXCHG |
785 | bool | 790 | bool |
791 | select NEED_KUSER_HELPERS | ||
786 | help | 792 | help |
787 | SMP on a pre-ARMv6 processor? Well OK then. | 793 | SMP on a pre-ARMv6 processor? Well OK then. |
788 | Forget about fast user space cmpxchg support. | 794 | Forget about fast user space cmpxchg support. |
789 | It is just not possible. | 795 | It is just not possible. |
790 | 796 | ||
797 | config NEED_KUSER_HELPERS | ||
798 | bool | ||
799 | |||
800 | config KUSER_HELPERS | ||
801 | bool "Enable kuser helpers in vector page" if !NEED_KUSER_HELPERS | ||
802 | default y | ||
803 | help | ||
804 | Warning: disabling this option may break user programs. | ||
805 | |||
806 | Provide kuser helpers in the vector page. The kernel provides | ||
807 | helper code to userspace in read only form at a fixed location | ||
808 | in the high vector page to allow userspace to be independent of | ||
809 | the CPU type fitted to the system. This permits binaries to be | ||
810 | run on ARMv4 through to ARMv7 without modification. | ||
811 | |||
812 | See Documentation/arm/kernel_user_helpers.txt for details. | ||
813 | |||
814 | However, the fixed address nature of these helpers can be used | ||
815 | by ROP (return orientated programming) authors when creating | ||
816 | exploits. | ||
817 | |||
818 | If all of the binaries and libraries which run on your platform | ||
819 | are built specifically for your platform, and make no use of | ||
820 | these helpers, then you can turn this option off to hinder | ||
821 | such exploits. However, in that case, if a binary or library | ||
822 | relying on those helpers is run, it will receive a SIGILL signal, | ||
823 | which will terminate the program. | ||
824 | |||
825 | Say N here only if you are absolutely certain that you do not | ||
826 | need these helpers; otherwise, the safe option is to say Y. | ||
827 | |||
791 | config DMA_CACHE_RWFO | 828 | config DMA_CACHE_RWFO |
792 | bool "Enable read/write for ownership DMA cache maintenance" | 829 | bool "Enable read/write for ownership DMA cache maintenance" |
793 | depends on CPU_V6K && SMP | 830 | depends on CPU_V6K && SMP |
diff --git a/arch/arm/mm/context.c b/arch/arm/mm/context.c index b55b1015724b..4a0544492f10 100644 --- a/arch/arm/mm/context.c +++ b/arch/arm/mm/context.c | |||
@@ -245,7 +245,8 @@ void check_and_switch_context(struct mm_struct *mm, struct task_struct *tsk) | |||
245 | if (cpumask_test_and_clear_cpu(cpu, &tlb_flush_pending)) { | 245 | if (cpumask_test_and_clear_cpu(cpu, &tlb_flush_pending)) { |
246 | local_flush_bp_all(); | 246 | local_flush_bp_all(); |
247 | local_flush_tlb_all(); | 247 | local_flush_tlb_all(); |
248 | dummy_flush_tlb_a15_erratum(); | 248 | if (erratum_a15_798181()) |
249 | dummy_flush_tlb_a15_erratum(); | ||
249 | } | 250 | } |
250 | 251 | ||
251 | atomic64_set(&per_cpu(active_asids, cpu), asid); | 252 | atomic64_set(&per_cpu(active_asids, cpu), asid); |
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index 4f56617a2392..53cdbd39ec8e 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c | |||
@@ -989,6 +989,7 @@ phys_addr_t arm_lowmem_limit __initdata = 0; | |||
989 | 989 | ||
990 | void __init sanity_check_meminfo(void) | 990 | void __init sanity_check_meminfo(void) |
991 | { | 991 | { |
992 | phys_addr_t memblock_limit = 0; | ||
992 | int i, j, highmem = 0; | 993 | int i, j, highmem = 0; |
993 | phys_addr_t vmalloc_limit = __pa(vmalloc_min - 1) + 1; | 994 | phys_addr_t vmalloc_limit = __pa(vmalloc_min - 1) + 1; |
994 | 995 | ||
@@ -1052,9 +1053,32 @@ void __init sanity_check_meminfo(void) | |||
1052 | bank->size = size_limit; | 1053 | bank->size = size_limit; |
1053 | } | 1054 | } |
1054 | #endif | 1055 | #endif |
1055 | if (!bank->highmem && bank->start + bank->size > arm_lowmem_limit) | 1056 | if (!bank->highmem) { |
1056 | arm_lowmem_limit = bank->start + bank->size; | 1057 | phys_addr_t bank_end = bank->start + bank->size; |
1057 | 1058 | ||
1059 | if (bank_end > arm_lowmem_limit) | ||
1060 | arm_lowmem_limit = bank_end; | ||
1061 | |||
1062 | /* | ||
1063 | * Find the first non-section-aligned page, and point | ||
1064 | * memblock_limit at it. This relies on rounding the | ||
1065 | * limit down to be section-aligned, which happens at | ||
1066 | * the end of this function. | ||
1067 | * | ||
1068 | * With this algorithm, the start or end of almost any | ||
1069 | * bank can be non-section-aligned. The only exception | ||
1070 | * is that the start of the bank 0 must be section- | ||
1071 | * aligned, since otherwise memory would need to be | ||
1072 | * allocated when mapping the start of bank 0, which | ||
1073 | * occurs before any free memory is mapped. | ||
1074 | */ | ||
1075 | if (!memblock_limit) { | ||
1076 | if (!IS_ALIGNED(bank->start, SECTION_SIZE)) | ||
1077 | memblock_limit = bank->start; | ||
1078 | else if (!IS_ALIGNED(bank_end, SECTION_SIZE)) | ||
1079 | memblock_limit = bank_end; | ||
1080 | } | ||
1081 | } | ||
1058 | j++; | 1082 | j++; |
1059 | } | 1083 | } |
1060 | #ifdef CONFIG_HIGHMEM | 1084 | #ifdef CONFIG_HIGHMEM |
@@ -1079,7 +1103,18 @@ void __init sanity_check_meminfo(void) | |||
1079 | #endif | 1103 | #endif |
1080 | meminfo.nr_banks = j; | 1104 | meminfo.nr_banks = j; |
1081 | high_memory = __va(arm_lowmem_limit - 1) + 1; | 1105 | high_memory = __va(arm_lowmem_limit - 1) + 1; |
1082 | memblock_set_current_limit(arm_lowmem_limit); | 1106 | |
1107 | /* | ||
1108 | * Round the memblock limit down to a section size. This | ||
1109 | * helps to ensure that we will allocate memory from the | ||
1110 | * last full section, which should be mapped. | ||
1111 | */ | ||
1112 | if (memblock_limit) | ||
1113 | memblock_limit = round_down(memblock_limit, SECTION_SIZE); | ||
1114 | if (!memblock_limit) | ||
1115 | memblock_limit = arm_lowmem_limit; | ||
1116 | |||
1117 | memblock_set_current_limit(memblock_limit); | ||
1083 | } | 1118 | } |
1084 | 1119 | ||
1085 | static inline void prepare_page_table(void) | 1120 | static inline void prepare_page_table(void) |
@@ -1160,7 +1195,7 @@ static void __init devicemaps_init(struct machine_desc *mdesc) | |||
1160 | /* | 1195 | /* |
1161 | * Allocate the vector page early. | 1196 | * Allocate the vector page early. |
1162 | */ | 1197 | */ |
1163 | vectors = early_alloc(PAGE_SIZE); | 1198 | vectors = early_alloc(PAGE_SIZE * 2); |
1164 | 1199 | ||
1165 | early_trap_init(vectors); | 1200 | early_trap_init(vectors); |
1166 | 1201 | ||
@@ -1205,15 +1240,27 @@ static void __init devicemaps_init(struct machine_desc *mdesc) | |||
1205 | map.pfn = __phys_to_pfn(virt_to_phys(vectors)); | 1240 | map.pfn = __phys_to_pfn(virt_to_phys(vectors)); |
1206 | map.virtual = 0xffff0000; | 1241 | map.virtual = 0xffff0000; |
1207 | map.length = PAGE_SIZE; | 1242 | map.length = PAGE_SIZE; |
1243 | #ifdef CONFIG_KUSER_HELPERS | ||
1208 | map.type = MT_HIGH_VECTORS; | 1244 | map.type = MT_HIGH_VECTORS; |
1245 | #else | ||
1246 | map.type = MT_LOW_VECTORS; | ||
1247 | #endif | ||
1209 | create_mapping(&map); | 1248 | create_mapping(&map); |
1210 | 1249 | ||
1211 | if (!vectors_high()) { | 1250 | if (!vectors_high()) { |
1212 | map.virtual = 0; | 1251 | map.virtual = 0; |
1252 | map.length = PAGE_SIZE * 2; | ||
1213 | map.type = MT_LOW_VECTORS; | 1253 | map.type = MT_LOW_VECTORS; |
1214 | create_mapping(&map); | 1254 | create_mapping(&map); |
1215 | } | 1255 | } |
1216 | 1256 | ||
1257 | /* Now create a kernel read-only mapping */ | ||
1258 | map.pfn += 1; | ||
1259 | map.virtual = 0xffff0000 + PAGE_SIZE; | ||
1260 | map.length = PAGE_SIZE; | ||
1261 | map.type = MT_LOW_VECTORS; | ||
1262 | create_mapping(&map); | ||
1263 | |||
1217 | /* | 1264 | /* |
1218 | * Ask the machine support to map in the statically mapped devices. | 1265 | * Ask the machine support to map in the statically mapped devices. |
1219 | */ | 1266 | */ |
@@ -1276,8 +1323,6 @@ void __init paging_init(struct machine_desc *mdesc) | |||
1276 | { | 1323 | { |
1277 | void *zero_page; | 1324 | void *zero_page; |
1278 | 1325 | ||
1279 | memblock_set_current_limit(arm_lowmem_limit); | ||
1280 | |||
1281 | build_mem_type_table(); | 1326 | build_mem_type_table(); |
1282 | prepare_page_table(); | 1327 | prepare_page_table(); |
1283 | map_lowmem(); | 1328 | map_lowmem(); |
diff --git a/arch/arm/mm/proc-arm1020.S b/arch/arm/mm/proc-arm1020.S index 2bb61e703d6c..d1a2d05971e0 100644 --- a/arch/arm/mm/proc-arm1020.S +++ b/arch/arm/mm/proc-arm1020.S | |||
@@ -443,8 +443,6 @@ ENTRY(cpu_arm1020_set_pte_ext) | |||
443 | #endif /* CONFIG_MMU */ | 443 | #endif /* CONFIG_MMU */ |
444 | mov pc, lr | 444 | mov pc, lr |
445 | 445 | ||
446 | __CPUINIT | ||
447 | |||
448 | .type __arm1020_setup, #function | 446 | .type __arm1020_setup, #function |
449 | __arm1020_setup: | 447 | __arm1020_setup: |
450 | mov r0, #0 | 448 | mov r0, #0 |
diff --git a/arch/arm/mm/proc-arm1020e.S b/arch/arm/mm/proc-arm1020e.S index 8f96aa40f510..9d89405c3d03 100644 --- a/arch/arm/mm/proc-arm1020e.S +++ b/arch/arm/mm/proc-arm1020e.S | |||
@@ -425,8 +425,6 @@ ENTRY(cpu_arm1020e_set_pte_ext) | |||
425 | #endif /* CONFIG_MMU */ | 425 | #endif /* CONFIG_MMU */ |
426 | mov pc, lr | 426 | mov pc, lr |
427 | 427 | ||
428 | __CPUINIT | ||
429 | |||
430 | .type __arm1020e_setup, #function | 428 | .type __arm1020e_setup, #function |
431 | __arm1020e_setup: | 429 | __arm1020e_setup: |
432 | mov r0, #0 | 430 | mov r0, #0 |
diff --git a/arch/arm/mm/proc-arm1022.S b/arch/arm/mm/proc-arm1022.S index 8ebe4a469a22..6f01a0ae3b30 100644 --- a/arch/arm/mm/proc-arm1022.S +++ b/arch/arm/mm/proc-arm1022.S | |||
@@ -407,8 +407,6 @@ ENTRY(cpu_arm1022_set_pte_ext) | |||
407 | #endif /* CONFIG_MMU */ | 407 | #endif /* CONFIG_MMU */ |
408 | mov pc, lr | 408 | mov pc, lr |
409 | 409 | ||
410 | __CPUINIT | ||
411 | |||
412 | .type __arm1022_setup, #function | 410 | .type __arm1022_setup, #function |
413 | __arm1022_setup: | 411 | __arm1022_setup: |
414 | mov r0, #0 | 412 | mov r0, #0 |
diff --git a/arch/arm/mm/proc-arm1026.S b/arch/arm/mm/proc-arm1026.S index 093fc7e520c3..4799a24b43e6 100644 --- a/arch/arm/mm/proc-arm1026.S +++ b/arch/arm/mm/proc-arm1026.S | |||
@@ -396,9 +396,6 @@ ENTRY(cpu_arm1026_set_pte_ext) | |||
396 | #endif /* CONFIG_MMU */ | 396 | #endif /* CONFIG_MMU */ |
397 | mov pc, lr | 397 | mov pc, lr |
398 | 398 | ||
399 | |||
400 | __CPUINIT | ||
401 | |||
402 | .type __arm1026_setup, #function | 399 | .type __arm1026_setup, #function |
403 | __arm1026_setup: | 400 | __arm1026_setup: |
404 | mov r0, #0 | 401 | mov r0, #0 |
diff --git a/arch/arm/mm/proc-arm720.S b/arch/arm/mm/proc-arm720.S index 0ac908c7ade1..d42c37f9f5bc 100644 --- a/arch/arm/mm/proc-arm720.S +++ b/arch/arm/mm/proc-arm720.S | |||
@@ -116,8 +116,6 @@ ENTRY(cpu_arm720_reset) | |||
116 | ENDPROC(cpu_arm720_reset) | 116 | ENDPROC(cpu_arm720_reset) |
117 | .popsection | 117 | .popsection |
118 | 118 | ||
119 | __CPUINIT | ||
120 | |||
121 | .type __arm710_setup, #function | 119 | .type __arm710_setup, #function |
122 | __arm710_setup: | 120 | __arm710_setup: |
123 | mov r0, #0 | 121 | mov r0, #0 |
diff --git a/arch/arm/mm/proc-arm740.S b/arch/arm/mm/proc-arm740.S index fde2d2a794cf..9b0ae90cbf17 100644 --- a/arch/arm/mm/proc-arm740.S +++ b/arch/arm/mm/proc-arm740.S | |||
@@ -60,8 +60,6 @@ ENTRY(cpu_arm740_reset) | |||
60 | ENDPROC(cpu_arm740_reset) | 60 | ENDPROC(cpu_arm740_reset) |
61 | .popsection | 61 | .popsection |
62 | 62 | ||
63 | __CPUINIT | ||
64 | |||
65 | .type __arm740_setup, #function | 63 | .type __arm740_setup, #function |
66 | __arm740_setup: | 64 | __arm740_setup: |
67 | mov r0, #0 | 65 | mov r0, #0 |
diff --git a/arch/arm/mm/proc-arm7tdmi.S b/arch/arm/mm/proc-arm7tdmi.S index 6ddea3e464bd..f6cc3f63ce39 100644 --- a/arch/arm/mm/proc-arm7tdmi.S +++ b/arch/arm/mm/proc-arm7tdmi.S | |||
@@ -51,8 +51,6 @@ ENTRY(cpu_arm7tdmi_reset) | |||
51 | ENDPROC(cpu_arm7tdmi_reset) | 51 | ENDPROC(cpu_arm7tdmi_reset) |
52 | .popsection | 52 | .popsection |
53 | 53 | ||
54 | __CPUINIT | ||
55 | |||
56 | .type __arm7tdmi_setup, #function | 54 | .type __arm7tdmi_setup, #function |
57 | __arm7tdmi_setup: | 55 | __arm7tdmi_setup: |
58 | mov pc, lr | 56 | mov pc, lr |
diff --git a/arch/arm/mm/proc-arm920.S b/arch/arm/mm/proc-arm920.S index 2556cf1c2da1..549557df6d57 100644 --- a/arch/arm/mm/proc-arm920.S +++ b/arch/arm/mm/proc-arm920.S | |||
@@ -410,8 +410,6 @@ ENTRY(cpu_arm920_do_resume) | |||
410 | ENDPROC(cpu_arm920_do_resume) | 410 | ENDPROC(cpu_arm920_do_resume) |
411 | #endif | 411 | #endif |
412 | 412 | ||
413 | __CPUINIT | ||
414 | |||
415 | .type __arm920_setup, #function | 413 | .type __arm920_setup, #function |
416 | __arm920_setup: | 414 | __arm920_setup: |
417 | mov r0, #0 | 415 | mov r0, #0 |
diff --git a/arch/arm/mm/proc-arm922.S b/arch/arm/mm/proc-arm922.S index 4464c49d7449..2a758b06c6f6 100644 --- a/arch/arm/mm/proc-arm922.S +++ b/arch/arm/mm/proc-arm922.S | |||
@@ -388,8 +388,6 @@ ENTRY(cpu_arm922_set_pte_ext) | |||
388 | #endif /* CONFIG_MMU */ | 388 | #endif /* CONFIG_MMU */ |
389 | mov pc, lr | 389 | mov pc, lr |
390 | 390 | ||
391 | __CPUINIT | ||
392 | |||
393 | .type __arm922_setup, #function | 391 | .type __arm922_setup, #function |
394 | __arm922_setup: | 392 | __arm922_setup: |
395 | mov r0, #0 | 393 | mov r0, #0 |
diff --git a/arch/arm/mm/proc-arm925.S b/arch/arm/mm/proc-arm925.S index 281eb9b9c1d6..97448c3acf38 100644 --- a/arch/arm/mm/proc-arm925.S +++ b/arch/arm/mm/proc-arm925.S | |||
@@ -438,8 +438,6 @@ ENTRY(cpu_arm925_set_pte_ext) | |||
438 | #endif /* CONFIG_MMU */ | 438 | #endif /* CONFIG_MMU */ |
439 | mov pc, lr | 439 | mov pc, lr |
440 | 440 | ||
441 | __CPUINIT | ||
442 | |||
443 | .type __arm925_setup, #function | 441 | .type __arm925_setup, #function |
444 | __arm925_setup: | 442 | __arm925_setup: |
445 | mov r0, #0 | 443 | mov r0, #0 |
diff --git a/arch/arm/mm/proc-arm926.S b/arch/arm/mm/proc-arm926.S index 344c8a548cc0..0f098f407c9f 100644 --- a/arch/arm/mm/proc-arm926.S +++ b/arch/arm/mm/proc-arm926.S | |||
@@ -425,8 +425,6 @@ ENTRY(cpu_arm926_do_resume) | |||
425 | ENDPROC(cpu_arm926_do_resume) | 425 | ENDPROC(cpu_arm926_do_resume) |
426 | #endif | 426 | #endif |
427 | 427 | ||
428 | __CPUINIT | ||
429 | |||
430 | .type __arm926_setup, #function | 428 | .type __arm926_setup, #function |
431 | __arm926_setup: | 429 | __arm926_setup: |
432 | mov r0, #0 | 430 | mov r0, #0 |
diff --git a/arch/arm/mm/proc-arm940.S b/arch/arm/mm/proc-arm940.S index 8da189d4a402..1c39a704ff6e 100644 --- a/arch/arm/mm/proc-arm940.S +++ b/arch/arm/mm/proc-arm940.S | |||
@@ -273,8 +273,6 @@ ENDPROC(arm940_dma_unmap_area) | |||
273 | @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S) | 273 | @ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S) |
274 | define_cache_functions arm940 | 274 | define_cache_functions arm940 |
275 | 275 | ||
276 | __CPUINIT | ||
277 | |||
278 | .type __arm940_setup, #function | 276 | .type __arm940_setup, #function |
279 | __arm940_setup: | 277 | __arm940_setup: |
280 | mov r0, #0 | 278 | mov r0, #0 |
diff --git a/arch/arm/mm/proc-arm946.S b/arch/arm/mm/proc-arm946.S index f666cf34075a..0289cd905e73 100644 --- a/arch/arm/mm/proc-arm946.S +++ b/arch/arm/mm/proc-arm946.S | |||
@@ -326,8 +326,6 @@ ENTRY(cpu_arm946_dcache_clean_area) | |||
326 | mcr p15, 0, r0, c7, c10, 4 @ drain WB | 326 | mcr p15, 0, r0, c7, c10, 4 @ drain WB |
327 | mov pc, lr | 327 | mov pc, lr |
328 | 328 | ||
329 | __CPUINIT | ||
330 | |||
331 | .type __arm946_setup, #function | 329 | .type __arm946_setup, #function |
332 | __arm946_setup: | 330 | __arm946_setup: |
333 | mov r0, #0 | 331 | mov r0, #0 |
diff --git a/arch/arm/mm/proc-arm9tdmi.S b/arch/arm/mm/proc-arm9tdmi.S index 8881391dfb9e..f51197ba754a 100644 --- a/arch/arm/mm/proc-arm9tdmi.S +++ b/arch/arm/mm/proc-arm9tdmi.S | |||
@@ -51,8 +51,6 @@ ENTRY(cpu_arm9tdmi_reset) | |||
51 | ENDPROC(cpu_arm9tdmi_reset) | 51 | ENDPROC(cpu_arm9tdmi_reset) |
52 | .popsection | 52 | .popsection |
53 | 53 | ||
54 | __CPUINIT | ||
55 | |||
56 | .type __arm9tdmi_setup, #function | 54 | .type __arm9tdmi_setup, #function |
57 | __arm9tdmi_setup: | 55 | __arm9tdmi_setup: |
58 | mov pc, lr | 56 | mov pc, lr |
diff --git a/arch/arm/mm/proc-fa526.S b/arch/arm/mm/proc-fa526.S index aaeb6c127c7a..2dfc0f1d3bfd 100644 --- a/arch/arm/mm/proc-fa526.S +++ b/arch/arm/mm/proc-fa526.S | |||
@@ -135,8 +135,6 @@ ENTRY(cpu_fa526_set_pte_ext) | |||
135 | #endif | 135 | #endif |
136 | mov pc, lr | 136 | mov pc, lr |
137 | 137 | ||
138 | __CPUINIT | ||
139 | |||
140 | .type __fa526_setup, #function | 138 | .type __fa526_setup, #function |
141 | __fa526_setup: | 139 | __fa526_setup: |
142 | /* On return of this routine, r0 must carry correct flags for CFG register */ | 140 | /* On return of this routine, r0 must carry correct flags for CFG register */ |
diff --git a/arch/arm/mm/proc-feroceon.S b/arch/arm/mm/proc-feroceon.S index 4106b09e0c29..d5146b98c8d1 100644 --- a/arch/arm/mm/proc-feroceon.S +++ b/arch/arm/mm/proc-feroceon.S | |||
@@ -514,8 +514,6 @@ ENTRY(cpu_feroceon_set_pte_ext) | |||
514 | #endif | 514 | #endif |
515 | mov pc, lr | 515 | mov pc, lr |
516 | 516 | ||
517 | __CPUINIT | ||
518 | |||
519 | .type __feroceon_setup, #function | 517 | .type __feroceon_setup, #function |
520 | __feroceon_setup: | 518 | __feroceon_setup: |
521 | mov r0, #0 | 519 | mov r0, #0 |
diff --git a/arch/arm/mm/proc-mohawk.S b/arch/arm/mm/proc-mohawk.S index 0b60dd3d742a..40acba595731 100644 --- a/arch/arm/mm/proc-mohawk.S +++ b/arch/arm/mm/proc-mohawk.S | |||
@@ -383,8 +383,6 @@ ENTRY(cpu_mohawk_do_resume) | |||
383 | ENDPROC(cpu_mohawk_do_resume) | 383 | ENDPROC(cpu_mohawk_do_resume) |
384 | #endif | 384 | #endif |
385 | 385 | ||
386 | __CPUINIT | ||
387 | |||
388 | .type __mohawk_setup, #function | 386 | .type __mohawk_setup, #function |
389 | __mohawk_setup: | 387 | __mohawk_setup: |
390 | mov r0, #0 | 388 | mov r0, #0 |
diff --git a/arch/arm/mm/proc-sa110.S b/arch/arm/mm/proc-sa110.S index 775d70fba937..c45319c8f1d9 100644 --- a/arch/arm/mm/proc-sa110.S +++ b/arch/arm/mm/proc-sa110.S | |||
@@ -159,8 +159,6 @@ ENTRY(cpu_sa110_set_pte_ext) | |||
159 | #endif | 159 | #endif |
160 | mov pc, lr | 160 | mov pc, lr |
161 | 161 | ||
162 | __CPUINIT | ||
163 | |||
164 | .type __sa110_setup, #function | 162 | .type __sa110_setup, #function |
165 | __sa110_setup: | 163 | __sa110_setup: |
166 | mov r10, #0 | 164 | mov r10, #0 |
diff --git a/arch/arm/mm/proc-sa1100.S b/arch/arm/mm/proc-sa1100.S index d92dfd081429..09d241ae2dbe 100644 --- a/arch/arm/mm/proc-sa1100.S +++ b/arch/arm/mm/proc-sa1100.S | |||
@@ -198,8 +198,6 @@ ENTRY(cpu_sa1100_do_resume) | |||
198 | ENDPROC(cpu_sa1100_do_resume) | 198 | ENDPROC(cpu_sa1100_do_resume) |
199 | #endif | 199 | #endif |
200 | 200 | ||
201 | __CPUINIT | ||
202 | |||
203 | .type __sa1100_setup, #function | 201 | .type __sa1100_setup, #function |
204 | __sa1100_setup: | 202 | __sa1100_setup: |
205 | mov r0, #0 | 203 | mov r0, #0 |
diff --git a/arch/arm/mm/proc-v6.S b/arch/arm/mm/proc-v6.S index 2d1ef87328a1..1128064fddcb 100644 --- a/arch/arm/mm/proc-v6.S +++ b/arch/arm/mm/proc-v6.S | |||
@@ -180,8 +180,6 @@ ENDPROC(cpu_v6_do_resume) | |||
180 | 180 | ||
181 | .align | 181 | .align |
182 | 182 | ||
183 | __CPUINIT | ||
184 | |||
185 | /* | 183 | /* |
186 | * __v6_setup | 184 | * __v6_setup |
187 | * | 185 | * |
diff --git a/arch/arm/mm/proc-v7-2level.S b/arch/arm/mm/proc-v7-2level.S index 9704097c450e..bdd3be4be77a 100644 --- a/arch/arm/mm/proc-v7-2level.S +++ b/arch/arm/mm/proc-v7-2level.S | |||
@@ -110,7 +110,7 @@ ENTRY(cpu_v7_set_pte_ext) | |||
110 | ARM( str r3, [r0, #2048]! ) | 110 | ARM( str r3, [r0, #2048]! ) |
111 | THUMB( add r0, r0, #2048 ) | 111 | THUMB( add r0, r0, #2048 ) |
112 | THUMB( str r3, [r0] ) | 112 | THUMB( str r3, [r0] ) |
113 | ALT_SMP(mov pc,lr) | 113 | ALT_SMP(W(nop)) |
114 | ALT_UP (mcr p15, 0, r0, c7, c10, 1) @ flush_pte | 114 | ALT_UP (mcr p15, 0, r0, c7, c10, 1) @ flush_pte |
115 | #endif | 115 | #endif |
116 | mov pc, lr | 116 | mov pc, lr |
@@ -160,8 +160,6 @@ ENDPROC(cpu_v7_set_pte_ext) | |||
160 | mcr p15, 0, \ttbr1, c2, c0, 1 @ load TTB1 | 160 | mcr p15, 0, \ttbr1, c2, c0, 1 @ load TTB1 |
161 | .endm | 161 | .endm |
162 | 162 | ||
163 | __CPUINIT | ||
164 | |||
165 | /* AT | 163 | /* AT |
166 | * TFR EV X F I D LR S | 164 | * TFR EV X F I D LR S |
167 | * .EEE ..EE PUI. .T.T 4RVI ZWRS BLDP WCAM | 165 | * .EEE ..EE PUI. .T.T 4RVI ZWRS BLDP WCAM |
@@ -172,5 +170,3 @@ ENDPROC(cpu_v7_set_pte_ext) | |||
172 | .type v7_crval, #object | 170 | .type v7_crval, #object |
173 | v7_crval: | 171 | v7_crval: |
174 | crval clear=0x2120c302, mmuset=0x10c03c7d, ucset=0x00c01c7c | 172 | crval clear=0x2120c302, mmuset=0x10c03c7d, ucset=0x00c01c7c |
175 | |||
176 | .previous | ||
diff --git a/arch/arm/mm/proc-v7-3level.S b/arch/arm/mm/proc-v7-3level.S index 5ffe1956c6d9..01a719e18bb0 100644 --- a/arch/arm/mm/proc-v7-3level.S +++ b/arch/arm/mm/proc-v7-3level.S | |||
@@ -81,7 +81,7 @@ ENTRY(cpu_v7_set_pte_ext) | |||
81 | tst r3, #1 << (55 - 32) @ L_PTE_DIRTY | 81 | tst r3, #1 << (55 - 32) @ L_PTE_DIRTY |
82 | orreq r2, #L_PTE_RDONLY | 82 | orreq r2, #L_PTE_RDONLY |
83 | 1: strd r2, r3, [r0] | 83 | 1: strd r2, r3, [r0] |
84 | ALT_SMP(mov pc, lr) | 84 | ALT_SMP(W(nop)) |
85 | ALT_UP (mcr p15, 0, r0, c7, c10, 1) @ flush_pte | 85 | ALT_UP (mcr p15, 0, r0, c7, c10, 1) @ flush_pte |
86 | #endif | 86 | #endif |
87 | mov pc, lr | 87 | mov pc, lr |
@@ -140,8 +140,6 @@ ENDPROC(cpu_v7_set_pte_ext) | |||
140 | mcrr p15, 0, \ttbr0, \zero, c2 @ load TTBR0 | 140 | mcrr p15, 0, \ttbr0, \zero, c2 @ load TTBR0 |
141 | .endm | 141 | .endm |
142 | 142 | ||
143 | __CPUINIT | ||
144 | |||
145 | /* | 143 | /* |
146 | * AT | 144 | * AT |
147 | * TFR EV X F IHD LR S | 145 | * TFR EV X F IHD LR S |
@@ -153,5 +151,3 @@ ENDPROC(cpu_v7_set_pte_ext) | |||
153 | .type v7_crval, #object | 151 | .type v7_crval, #object |
154 | v7_crval: | 152 | v7_crval: |
155 | crval clear=0x0120c302, mmuset=0x30c23c7d, ucset=0x00c01c7c | 153 | crval clear=0x0120c302, mmuset=0x30c23c7d, ucset=0x00c01c7c |
156 | |||
157 | .previous | ||
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S index 7ef3ad05df39..73398bcf9bd8 100644 --- a/arch/arm/mm/proc-v7.S +++ b/arch/arm/mm/proc-v7.S | |||
@@ -75,13 +75,14 @@ ENTRY(cpu_v7_do_idle) | |||
75 | ENDPROC(cpu_v7_do_idle) | 75 | ENDPROC(cpu_v7_do_idle) |
76 | 76 | ||
77 | ENTRY(cpu_v7_dcache_clean_area) | 77 | ENTRY(cpu_v7_dcache_clean_area) |
78 | ALT_SMP(mov pc, lr) @ MP extensions imply L1 PTW | 78 | ALT_SMP(W(nop)) @ MP extensions imply L1 PTW |
79 | ALT_UP(W(nop)) | 79 | ALT_UP_B(1f) |
80 | dcache_line_size r2, r3 | 80 | mov pc, lr |
81 | 1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry | 81 | 1: dcache_line_size r2, r3 |
82 | 2: mcr p15, 0, r0, c7, c10, 1 @ clean D entry | ||
82 | add r0, r0, r2 | 83 | add r0, r0, r2 |
83 | subs r1, r1, r2 | 84 | subs r1, r1, r2 |
84 | bhi 1b | 85 | bhi 2b |
85 | dsb | 86 | dsb |
86 | mov pc, lr | 87 | mov pc, lr |
87 | ENDPROC(cpu_v7_dcache_clean_area) | 88 | ENDPROC(cpu_v7_dcache_clean_area) |
@@ -167,8 +168,6 @@ ENDPROC(cpu_pj4b_do_idle) | |||
167 | 168 | ||
168 | #endif | 169 | #endif |
169 | 170 | ||
170 | __CPUINIT | ||
171 | |||
172 | /* | 171 | /* |
173 | * __v7_setup | 172 | * __v7_setup |
174 | * | 173 | * |
diff --git a/arch/arm/mm/proc-xsc3.S b/arch/arm/mm/proc-xsc3.S index e8efd83b6f25..dc1645890042 100644 --- a/arch/arm/mm/proc-xsc3.S +++ b/arch/arm/mm/proc-xsc3.S | |||
@@ -446,8 +446,6 @@ ENTRY(cpu_xsc3_do_resume) | |||
446 | ENDPROC(cpu_xsc3_do_resume) | 446 | ENDPROC(cpu_xsc3_do_resume) |
447 | #endif | 447 | #endif |
448 | 448 | ||
449 | __CPUINIT | ||
450 | |||
451 | .type __xsc3_setup, #function | 449 | .type __xsc3_setup, #function |
452 | __xsc3_setup: | 450 | __xsc3_setup: |
453 | mov r0, #PSR_F_BIT|PSR_I_BIT|SVC_MODE | 451 | mov r0, #PSR_F_BIT|PSR_I_BIT|SVC_MODE |
diff --git a/arch/arm/mm/proc-xscale.S b/arch/arm/mm/proc-xscale.S index e766f889bfd6..d19b1cfcad91 100644 --- a/arch/arm/mm/proc-xscale.S +++ b/arch/arm/mm/proc-xscale.S | |||
@@ -558,8 +558,6 @@ ENTRY(cpu_xscale_do_resume) | |||
558 | ENDPROC(cpu_xscale_do_resume) | 558 | ENDPROC(cpu_xscale_do_resume) |
559 | #endif | 559 | #endif |
560 | 560 | ||
561 | __CPUINIT | ||
562 | |||
563 | .type __xscale_setup, #function | 561 | .type __xscale_setup, #function |
564 | __xscale_setup: | 562 | __xscale_setup: |
565 | mcr p15, 0, ip, c7, c7, 0 @ invalidate I, D caches & BTB | 563 | mcr p15, 0, ip, c7, c7, 0 @ invalidate I, D caches & BTB |
diff --git a/arch/arm/plat-samsung/Kconfig b/arch/arm/plat-samsung/Kconfig index 3dc5cbea86cc..a5b5ff6e68d2 100644 --- a/arch/arm/plat-samsung/Kconfig +++ b/arch/arm/plat-samsung/Kconfig | |||
@@ -29,6 +29,13 @@ config PLAT_S5P | |||
29 | help | 29 | help |
30 | Base platform code for Samsung's S5P series SoC. | 30 | Base platform code for Samsung's S5P series SoC. |
31 | 31 | ||
32 | config SAMSUNG_PM | ||
33 | bool | ||
34 | depends on PM && (PLAT_S3C24XX || ARCH_S3C64XX || ARCH_S5P64X0 || S5P_PM) | ||
35 | default y | ||
36 | help | ||
37 | Base platform power management code for samsung code | ||
38 | |||
32 | if PLAT_SAMSUNG | 39 | if PLAT_SAMSUNG |
33 | 40 | ||
34 | # boot configurations | 41 | # boot configurations |
diff --git a/arch/arm/plat-samsung/Makefile b/arch/arm/plat-samsung/Makefile index 98d07d8fc7a7..199bbe304d02 100644 --- a/arch/arm/plat-samsung/Makefile +++ b/arch/arm/plat-samsung/Makefile | |||
@@ -51,7 +51,7 @@ obj-$(CONFIG_SAMSUNG_DMADEV) += dma-ops.o | |||
51 | 51 | ||
52 | # PM support | 52 | # PM support |
53 | 53 | ||
54 | obj-$(CONFIG_PM) += pm.o | 54 | obj-$(CONFIG_SAMSUNG_PM) += pm.o |
55 | obj-$(CONFIG_SAMSUNG_PM_GPIO) += pm-gpio.o | 55 | obj-$(CONFIG_SAMSUNG_PM_GPIO) += pm-gpio.o |
56 | obj-$(CONFIG_SAMSUNG_PM_CHECK) += pm-check.o | 56 | obj-$(CONFIG_SAMSUNG_PM_CHECK) += pm-check.o |
57 | 57 | ||
diff --git a/arch/arm/plat-samsung/include/plat/clock.h b/arch/arm/plat-samsung/include/plat/clock.h index a62753dc15ba..df45d6edc98d 100644 --- a/arch/arm/plat-samsung/include/plat/clock.h +++ b/arch/arm/plat-samsung/include/plat/clock.h | |||
@@ -83,6 +83,11 @@ extern struct clk clk_ext; | |||
83 | extern struct clksrc_clk clk_epllref; | 83 | extern struct clksrc_clk clk_epllref; |
84 | extern struct clksrc_clk clk_esysclk; | 84 | extern struct clksrc_clk clk_esysclk; |
85 | 85 | ||
86 | /* S3C24XX UART clocks */ | ||
87 | extern struct clk s3c24xx_clk_uart0; | ||
88 | extern struct clk s3c24xx_clk_uart1; | ||
89 | extern struct clk s3c24xx_clk_uart2; | ||
90 | |||
86 | /* S3C64XX specific clocks */ | 91 | /* S3C64XX specific clocks */ |
87 | extern struct clk clk_h2; | 92 | extern struct clk clk_h2; |
88 | extern struct clk clk_27m; | 93 | extern struct clk clk_27m; |
diff --git a/arch/arm/plat-samsung/include/plat/pm.h b/arch/arm/plat-samsung/include/plat/pm.h index 5d47ca35cabd..6bc1a8f471e3 100644 --- a/arch/arm/plat-samsung/include/plat/pm.h +++ b/arch/arm/plat-samsung/include/plat/pm.h | |||
@@ -19,7 +19,7 @@ | |||
19 | 19 | ||
20 | struct device; | 20 | struct device; |
21 | 21 | ||
22 | #ifdef CONFIG_PM | 22 | #ifdef CONFIG_SAMSUNG_PM |
23 | 23 | ||
24 | extern __init int s3c_pm_init(void); | 24 | extern __init int s3c_pm_init(void); |
25 | extern __init int s3c64xx_pm_init(void); | 25 | extern __init int s3c64xx_pm_init(void); |
@@ -58,8 +58,6 @@ extern unsigned char pm_uart_udivslot; /* true to save UART UDIVSLOT */ | |||
58 | 58 | ||
59 | /* from sleep.S */ | 59 | /* from sleep.S */ |
60 | 60 | ||
61 | extern void s3c_cpu_resume(void); | ||
62 | |||
63 | extern int s3c2410_cpu_suspend(unsigned long); | 61 | extern int s3c2410_cpu_suspend(unsigned long); |
64 | 62 | ||
65 | /* sleep save info */ | 63 | /* sleep save info */ |
@@ -106,12 +104,14 @@ extern void s3c_pm_do_save(struct sleep_save *ptr, int count); | |||
106 | extern void s3c_pm_do_restore(struct sleep_save *ptr, int count); | 104 | extern void s3c_pm_do_restore(struct sleep_save *ptr, int count); |
107 | extern void s3c_pm_do_restore_core(struct sleep_save *ptr, int count); | 105 | extern void s3c_pm_do_restore_core(struct sleep_save *ptr, int count); |
108 | 106 | ||
109 | #ifdef CONFIG_PM | 107 | #ifdef CONFIG_SAMSUNG_PM |
110 | extern int s3c_irq_wake(struct irq_data *data, unsigned int state); | 108 | extern int s3c_irq_wake(struct irq_data *data, unsigned int state); |
111 | extern int s3c_irqext_wake(struct irq_data *data, unsigned int state); | 109 | extern int s3c_irqext_wake(struct irq_data *data, unsigned int state); |
110 | extern void s3c_cpu_resume(void); | ||
112 | #else | 111 | #else |
113 | #define s3c_irq_wake NULL | 112 | #define s3c_irq_wake NULL |
114 | #define s3c_irqext_wake NULL | 113 | #define s3c_irqext_wake NULL |
114 | #define s3c_cpu_resume NULL | ||
115 | #endif | 115 | #endif |
116 | 116 | ||
117 | /* PM debug functions */ | 117 | /* PM debug functions */ |
diff --git a/arch/arm/plat-samsung/init.c b/arch/arm/plat-samsung/init.c index 3e5c4619caa5..50a3ea0037db 100644 --- a/arch/arm/plat-samsung/init.c +++ b/arch/arm/plat-samsung/init.c | |||
@@ -55,12 +55,13 @@ void __init s3c_init_cpu(unsigned long idcode, | |||
55 | 55 | ||
56 | printk("CPU %s (id 0x%08lx)\n", cpu->name, idcode); | 56 | printk("CPU %s (id 0x%08lx)\n", cpu->name, idcode); |
57 | 57 | ||
58 | if (cpu->map_io == NULL || cpu->init == NULL) { | 58 | if (cpu->init == NULL) { |
59 | printk(KERN_ERR "CPU %s support not enabled\n", cpu->name); | 59 | printk(KERN_ERR "CPU %s support not enabled\n", cpu->name); |
60 | panic("Unsupported Samsung CPU"); | 60 | panic("Unsupported Samsung CPU"); |
61 | } | 61 | } |
62 | 62 | ||
63 | cpu->map_io(); | 63 | if (cpu->map_io) |
64 | cpu->map_io(); | ||
64 | } | 65 | } |
65 | 66 | ||
66 | /* s3c24xx_init_clocks | 67 | /* s3c24xx_init_clocks |
diff --git a/arch/arm/plat-samsung/pm.c b/arch/arm/plat-samsung/pm.c index ea3613642451..d0c23010b693 100644 --- a/arch/arm/plat-samsung/pm.c +++ b/arch/arm/plat-samsung/pm.c | |||
@@ -80,7 +80,7 @@ unsigned char pm_uart_udivslot; | |||
80 | 80 | ||
81 | #ifdef CONFIG_SAMSUNG_PM_DEBUG | 81 | #ifdef CONFIG_SAMSUNG_PM_DEBUG |
82 | 82 | ||
83 | static struct pm_uart_save uart_save[CONFIG_SERIAL_SAMSUNG_UARTS]; | 83 | static struct pm_uart_save uart_save; |
84 | 84 | ||
85 | static void s3c_pm_save_uart(unsigned int uart, struct pm_uart_save *save) | 85 | static void s3c_pm_save_uart(unsigned int uart, struct pm_uart_save *save) |
86 | { | 86 | { |
@@ -101,11 +101,7 @@ static void s3c_pm_save_uart(unsigned int uart, struct pm_uart_save *save) | |||
101 | 101 | ||
102 | static void s3c_pm_save_uarts(void) | 102 | static void s3c_pm_save_uarts(void) |
103 | { | 103 | { |
104 | struct pm_uart_save *save = uart_save; | 104 | s3c_pm_save_uart(CONFIG_DEBUG_S3C_UART, &uart_save); |
105 | unsigned int uart; | ||
106 | |||
107 | for (uart = 0; uart < CONFIG_SERIAL_SAMSUNG_UARTS; uart++, save++) | ||
108 | s3c_pm_save_uart(uart, save); | ||
109 | } | 105 | } |
110 | 106 | ||
111 | static void s3c_pm_restore_uart(unsigned int uart, struct pm_uart_save *save) | 107 | static void s3c_pm_restore_uart(unsigned int uart, struct pm_uart_save *save) |
@@ -126,11 +122,7 @@ static void s3c_pm_restore_uart(unsigned int uart, struct pm_uart_save *save) | |||
126 | 122 | ||
127 | static void s3c_pm_restore_uarts(void) | 123 | static void s3c_pm_restore_uarts(void) |
128 | { | 124 | { |
129 | struct pm_uart_save *save = uart_save; | 125 | s3c_pm_restore_uart(CONFIG_DEBUG_S3C_UART, &uart_save); |
130 | unsigned int uart; | ||
131 | |||
132 | for (uart = 0; uart < CONFIG_SERIAL_SAMSUNG_UARTS; uart++, save++) | ||
133 | s3c_pm_restore_uart(uart, save); | ||
134 | } | 126 | } |
135 | #else | 127 | #else |
136 | static void s3c_pm_save_uarts(void) { } | 128 | static void s3c_pm_save_uarts(void) { } |
diff --git a/arch/arm/plat-versatile/platsmp.c b/arch/arm/plat-versatile/platsmp.c index 1e1b2d769748..39895d892c3b 100644 --- a/arch/arm/plat-versatile/platsmp.c +++ b/arch/arm/plat-versatile/platsmp.c | |||
@@ -23,7 +23,7 @@ | |||
23 | * observers, irrespective of whether they're taking part in coherency | 23 | * observers, irrespective of whether they're taking part in coherency |
24 | * or not. This is necessary for the hotplug code to work reliably. | 24 | * or not. This is necessary for the hotplug code to work reliably. |
25 | */ | 25 | */ |
26 | static void __cpuinit write_pen_release(int val) | 26 | static void write_pen_release(int val) |
27 | { | 27 | { |
28 | pen_release = val; | 28 | pen_release = val; |
29 | smp_wmb(); | 29 | smp_wmb(); |
@@ -33,7 +33,7 @@ static void __cpuinit write_pen_release(int val) | |||
33 | 33 | ||
34 | static DEFINE_SPINLOCK(boot_lock); | 34 | static DEFINE_SPINLOCK(boot_lock); |
35 | 35 | ||
36 | void __cpuinit versatile_secondary_init(unsigned int cpu) | 36 | void versatile_secondary_init(unsigned int cpu) |
37 | { | 37 | { |
38 | /* | 38 | /* |
39 | * let the primary processor know we're out of the | 39 | * let the primary processor know we're out of the |
@@ -48,7 +48,7 @@ void __cpuinit versatile_secondary_init(unsigned int cpu) | |||
48 | spin_unlock(&boot_lock); | 48 | spin_unlock(&boot_lock); |
49 | } | 49 | } |
50 | 50 | ||
51 | int __cpuinit versatile_boot_secondary(unsigned int cpu, struct task_struct *idle) | 51 | int versatile_boot_secondary(unsigned int cpu, struct task_struct *idle) |
52 | { | 52 | { |
53 | unsigned long timeout; | 53 | unsigned long timeout; |
54 | 54 | ||
diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c index f71c37edca26..8a6295c86209 100644 --- a/arch/arm/xen/enlighten.c +++ b/arch/arm/xen/enlighten.c | |||
@@ -170,9 +170,10 @@ static void __init xen_percpu_init(void *unused) | |||
170 | per_cpu(xen_vcpu, cpu) = vcpup; | 170 | per_cpu(xen_vcpu, cpu) = vcpup; |
171 | 171 | ||
172 | enable_percpu_irq(xen_events_irq, 0); | 172 | enable_percpu_irq(xen_events_irq, 0); |
173 | put_cpu(); | ||
173 | } | 174 | } |
174 | 175 | ||
175 | static void xen_restart(char str, const char *cmd) | 176 | static void xen_restart(enum reboot_mode reboot_mode, const char *cmd) |
176 | { | 177 | { |
177 | struct sched_shutdown r = { .reason = SHUTDOWN_reboot }; | 178 | struct sched_shutdown r = { .reason = SHUTDOWN_reboot }; |
178 | int rc; | 179 | int rc; |