diff options
author | Jason Cooper <jason@lakedaemon.net> | 2013-04-15 10:55:23 -0400 |
---|---|---|
committer | Jason Cooper <jason@lakedaemon.net> | 2013-04-15 10:55:23 -0400 |
commit | b757f17e9184b65428c48a281d82f9acb3e96f0e (patch) | |
tree | 7dc22c9f82f78c20caeff00fdd68a2e92e40504a /arch/arm | |
parent | 3c76a8a95daeecd881718f88324041f6a5faab86 (diff) | |
parent | da497f6fbaa190d34907ecc9dd85cfc62ba9f5a2 (diff) |
Merge tag 'tags/soc_for_v3.10' into mvebu/dt
Pulling in mvebu branches which contain changes to armada*.dts? files for LPAE
conversion.
mvebu soc changes for v3.10
- use the mvebu-mbus driver
- prep for LPAE support
Depends:
- mvebu/cleanup (tags/cleanup_for_v3.10)
- mvebu/drivers (tags/drivers_for_v3.10)
Diffstat (limited to 'arch/arm')
109 files changed, 513 insertions, 1029 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 0c990b75082f..9462dd931b33 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -49,7 +49,6 @@ config ARM | |||
49 | select HAVE_REGS_AND_STACK_ACCESS_API | 49 | select HAVE_REGS_AND_STACK_ACCESS_API |
50 | select HAVE_SYSCALL_TRACEPOINTS | 50 | select HAVE_SYSCALL_TRACEPOINTS |
51 | select HAVE_UID16 | 51 | select HAVE_UID16 |
52 | select HAVE_VIRT_TO_BUS | ||
53 | select KTIME_SCALAR | 52 | select KTIME_SCALAR |
54 | select PERF_USE_VMALLOC | 53 | select PERF_USE_VMALLOC |
55 | select RTC_LIB | 54 | select RTC_LIB |
@@ -563,6 +562,7 @@ config ARCH_DOVE | |||
563 | select PINCTRL_DOVE | 562 | select PINCTRL_DOVE |
564 | select PLAT_ORION_LEGACY | 563 | select PLAT_ORION_LEGACY |
565 | select USB_ARCH_HAS_EHCI | 564 | select USB_ARCH_HAS_EHCI |
565 | select MVEBU_MBUS | ||
566 | help | 566 | help |
567 | Support for the Marvell Dove SoC 88AP510 | 567 | Support for the Marvell Dove SoC 88AP510 |
568 | 568 | ||
@@ -576,6 +576,7 @@ config ARCH_KIRKWOOD | |||
576 | select PINCTRL | 576 | select PINCTRL |
577 | select PINCTRL_KIRKWOOD | 577 | select PINCTRL_KIRKWOOD |
578 | select PLAT_ORION_LEGACY | 578 | select PLAT_ORION_LEGACY |
579 | select MVEBU_MBUS | ||
579 | help | 580 | help |
580 | Support for the following Marvell Kirkwood series SoCs: | 581 | Support for the following Marvell Kirkwood series SoCs: |
581 | 88F6180, 88F6192 and 88F6281. | 582 | 88F6180, 88F6192 and 88F6281. |
@@ -587,6 +588,7 @@ config ARCH_MV78XX0 | |||
587 | select GENERIC_CLOCKEVENTS | 588 | select GENERIC_CLOCKEVENTS |
588 | select PCI | 589 | select PCI |
589 | select PLAT_ORION_LEGACY | 590 | select PLAT_ORION_LEGACY |
591 | select MVEBU_MBUS | ||
590 | help | 592 | help |
591 | Support for the following Marvell MV78xx0 series SoCs: | 593 | Support for the following Marvell MV78xx0 series SoCs: |
592 | MV781x0, MV782x0. | 594 | MV781x0, MV782x0. |
@@ -599,6 +601,7 @@ config ARCH_ORION5X | |||
599 | select GENERIC_CLOCKEVENTS | 601 | select GENERIC_CLOCKEVENTS |
600 | select PCI | 602 | select PCI |
601 | select PLAT_ORION_LEGACY | 603 | select PLAT_ORION_LEGACY |
604 | select MVEBU_MBUS | ||
602 | help | 605 | help |
603 | Support for the following Marvell Orion 5x series SoCs: | 606 | Support for the following Marvell Orion 5x series SoCs: |
604 | Orion-1 (5181), Orion-VoIP (5181L), Orion-NAS (5182), | 607 | Orion-1 (5181), Orion-VoIP (5181L), Orion-NAS (5182), |
@@ -743,6 +746,7 @@ config ARCH_RPC | |||
743 | select NEED_MACH_IO_H | 746 | select NEED_MACH_IO_H |
744 | select NEED_MACH_MEMORY_H | 747 | select NEED_MACH_MEMORY_H |
745 | select NO_IOPORT | 748 | select NO_IOPORT |
749 | select VIRT_TO_BUS | ||
746 | help | 750 | help |
747 | On the Acorn Risc-PC, Linux can support the internal IDE disk and | 751 | On the Acorn Risc-PC, Linux can support the internal IDE disk and |
748 | CD-ROM interface, serial and parallel port, and the floppy drive. | 752 | CD-ROM interface, serial and parallel port, and the floppy drive. |
@@ -878,6 +882,7 @@ config ARCH_SHARK | |||
878 | select ISA_DMA | 882 | select ISA_DMA |
879 | select NEED_MACH_MEMORY_H | 883 | select NEED_MACH_MEMORY_H |
880 | select PCI | 884 | select PCI |
885 | select VIRT_TO_BUS | ||
881 | select ZONE_DMA | 886 | select ZONE_DMA |
882 | help | 887 | help |
883 | Support for the StrongARM based Digital DNARD machine, also known | 888 | Support for the StrongARM based Digital DNARD machine, also known |
@@ -1005,12 +1010,12 @@ config ARCH_MULTI_V4_V5 | |||
1005 | bool | 1010 | bool |
1006 | 1011 | ||
1007 | config ARCH_MULTI_V6 | 1012 | config ARCH_MULTI_V6 |
1008 | bool "ARMv6 based platforms (ARM11, Scorpion, ...)" | 1013 | bool "ARMv6 based platforms (ARM11)" |
1009 | select ARCH_MULTI_V6_V7 | 1014 | select ARCH_MULTI_V6_V7 |
1010 | select CPU_V6 | 1015 | select CPU_V6 |
1011 | 1016 | ||
1012 | config ARCH_MULTI_V7 | 1017 | config ARCH_MULTI_V7 |
1013 | bool "ARMv7 based platforms (Cortex-A, PJ4, Krait)" | 1018 | bool "ARMv7 based platforms (Cortex-A, PJ4, Scorpion, Krait)" |
1014 | default y | 1019 | default y |
1015 | select ARCH_MULTI_V6_V7 | 1020 | select ARCH_MULTI_V6_V7 |
1016 | select ARCH_VEXPRESS | 1021 | select ARCH_VEXPRESS |
@@ -1461,10 +1466,6 @@ config ISA_DMA | |||
1461 | bool | 1466 | bool |
1462 | select ISA_DMA_API | 1467 | select ISA_DMA_API |
1463 | 1468 | ||
1464 | config ARCH_NO_VIRT_TO_BUS | ||
1465 | def_bool y | ||
1466 | depends on !ARCH_RPC && !ARCH_NETWINDER && !ARCH_SHARK | ||
1467 | |||
1468 | # Select ISA DMA interface | 1469 | # Select ISA DMA interface |
1469 | config ISA_DMA_API | 1470 | config ISA_DMA_API |
1470 | bool | 1471 | bool |
@@ -1656,13 +1657,16 @@ config LOCAL_TIMERS | |||
1656 | accounting to be spread across the timer interval, preventing a | 1657 | accounting to be spread across the timer interval, preventing a |
1657 | "thundering herd" at every timer tick. | 1658 | "thundering herd" at every timer tick. |
1658 | 1659 | ||
1660 | # The GPIO number here must be sorted by descending number. In case of | ||
1661 | # a multiplatform kernel, we just want the highest value required by the | ||
1662 | # selected platforms. | ||
1659 | config ARCH_NR_GPIO | 1663 | config ARCH_NR_GPIO |
1660 | int | 1664 | int |
1661 | default 1024 if ARCH_SHMOBILE || ARCH_TEGRA | 1665 | default 1024 if ARCH_SHMOBILE || ARCH_TEGRA |
1662 | default 355 if ARCH_U8500 | ||
1663 | default 264 if MACH_H4700 | ||
1664 | default 512 if SOC_OMAP5 | 1666 | default 512 if SOC_OMAP5 |
1667 | default 355 if ARCH_U8500 | ||
1665 | default 288 if ARCH_VT8500 || ARCH_SUNXI | 1668 | default 288 if ARCH_VT8500 || ARCH_SUNXI |
1669 | default 264 if MACH_H4700 | ||
1666 | default 0 | 1670 | default 0 |
1667 | help | 1671 | help |
1668 | Maximum number of GPIOs in the system. | 1672 | Maximum number of GPIOs in the system. |
@@ -1886,8 +1890,9 @@ config XEN_DOM0 | |||
1886 | 1890 | ||
1887 | config XEN | 1891 | config XEN |
1888 | bool "Xen guest support on ARM (EXPERIMENTAL)" | 1892 | bool "Xen guest support on ARM (EXPERIMENTAL)" |
1889 | depends on ARM && OF | 1893 | depends on ARM && AEABI && OF |
1890 | depends on CPU_V7 && !CPU_V6 | 1894 | depends on CPU_V7 && !CPU_V6 |
1895 | depends on !GENERIC_ATOMIC64 | ||
1891 | help | 1896 | help |
1892 | Say Y if you want to run Linux in a Virtual Machine on Xen on ARM. | 1897 | Say Y if you want to run Linux in a Virtual Machine on Xen on ARM. |
1893 | 1898 | ||
diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug index acddddac7ee4..ecfcdba2d17c 100644 --- a/arch/arm/Kconfig.debug +++ b/arch/arm/Kconfig.debug | |||
@@ -492,7 +492,7 @@ config DEBUG_IMX_UART_PORT | |||
492 | DEBUG_IMX31_UART || \ | 492 | DEBUG_IMX31_UART || \ |
493 | DEBUG_IMX35_UART || \ | 493 | DEBUG_IMX35_UART || \ |
494 | DEBUG_IMX51_UART || \ | 494 | DEBUG_IMX51_UART || \ |
495 | DEBUG_IMX50_IMX53_UART || \ | 495 | DEBUG_IMX53_UART || \ |
496 | DEBUG_IMX6Q_UART | 496 | DEBUG_IMX6Q_UART |
497 | default 1 | 497 | default 1 |
498 | help | 498 | help |
diff --git a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile index 71768b8a1ab9..84aa2caf07ed 100644 --- a/arch/arm/boot/Makefile +++ b/arch/arm/boot/Makefile | |||
@@ -115,4 +115,4 @@ i: | |||
115 | $(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \ | 115 | $(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \ |
116 | $(obj)/Image System.map "$(INSTALL_PATH)" | 116 | $(obj)/Image System.map "$(INSTALL_PATH)" |
117 | 117 | ||
118 | subdir- := bootp compressed | 118 | subdir- := bootp compressed dts |
diff --git a/arch/arm/boot/dts/armada-370-xp.dtsi b/arch/arm/boot/dts/armada-370-xp.dtsi index 758c4ea90344..9693f796bcfe 100644 --- a/arch/arm/boot/dts/armada-370-xp.dtsi +++ b/arch/arm/boot/dts/armada-370-xp.dtsi | |||
@@ -73,11 +73,6 @@ | |||
73 | clocks = <&coreclk 2>; | 73 | clocks = <&coreclk 2>; |
74 | }; | 74 | }; |
75 | 75 | ||
76 | addr-decoding@d0020000 { | ||
77 | compatible = "marvell,armada-addr-decoding-controller"; | ||
78 | reg = <0xd0020000 0x258>; | ||
79 | }; | ||
80 | |||
81 | sata@d00a0000 { | 76 | sata@d00a0000 { |
82 | compatible = "marvell,orion-sata"; | 77 | compatible = "marvell,orion-sata"; |
83 | reg = <0xd00a0000 0x2400>; | 78 | reg = <0xd00a0000 0x2400>; |
diff --git a/arch/arm/boot/dts/at91sam9x5.dtsi b/arch/arm/boot/dts/at91sam9x5.dtsi index aa98e641931f..a98c0d50fbbe 100644 --- a/arch/arm/boot/dts/at91sam9x5.dtsi +++ b/arch/arm/boot/dts/at91sam9x5.dtsi | |||
@@ -238,8 +238,32 @@ | |||
238 | nand { | 238 | nand { |
239 | pinctrl_nand: nand-0 { | 239 | pinctrl_nand: nand-0 { |
240 | atmel,pins = | 240 | atmel,pins = |
241 | <3 4 0x0 0x1 /* PD5 gpio RDY pin pull_up */ | 241 | <3 0 0x1 0x0 /* PD0 periph A Read Enable */ |
242 | 3 5 0x0 0x1>; /* PD4 gpio enable pin pull_up */ | 242 | 3 1 0x1 0x0 /* PD1 periph A Write Enable */ |
243 | 3 2 0x1 0x0 /* PD2 periph A Address Latch Enable */ | ||
244 | 3 3 0x1 0x0 /* PD3 periph A Command Latch Enable */ | ||
245 | 3 4 0x0 0x1 /* PD4 gpio Chip Enable pin pull_up */ | ||
246 | 3 5 0x0 0x1 /* PD5 gpio RDY/BUSY pin pull_up */ | ||
247 | 3 6 0x1 0x0 /* PD6 periph A Data bit 0 */ | ||
248 | 3 7 0x1 0x0 /* PD7 periph A Data bit 1 */ | ||
249 | 3 8 0x1 0x0 /* PD8 periph A Data bit 2 */ | ||
250 | 3 9 0x1 0x0 /* PD9 periph A Data bit 3 */ | ||
251 | 3 10 0x1 0x0 /* PD10 periph A Data bit 4 */ | ||
252 | 3 11 0x1 0x0 /* PD11 periph A Data bit 5 */ | ||
253 | 3 12 0x1 0x0 /* PD12 periph A Data bit 6 */ | ||
254 | 3 13 0x1 0x0>; /* PD13 periph A Data bit 7 */ | ||
255 | }; | ||
256 | |||
257 | pinctrl_nand_16bits: nand_16bits-0 { | ||
258 | atmel,pins = | ||
259 | <3 14 0x1 0x0 /* PD14 periph A Data bit 8 */ | ||
260 | 3 15 0x1 0x0 /* PD15 periph A Data bit 9 */ | ||
261 | 3 16 0x1 0x0 /* PD16 periph A Data bit 10 */ | ||
262 | 3 17 0x1 0x0 /* PD17 periph A Data bit 11 */ | ||
263 | 3 18 0x1 0x0 /* PD18 periph A Data bit 12 */ | ||
264 | 3 19 0x1 0x0 /* PD19 periph A Data bit 13 */ | ||
265 | 3 20 0x1 0x0 /* PD20 periph A Data bit 14 */ | ||
266 | 3 21 0x1 0x0>; /* PD21 periph A Data bit 15 */ | ||
243 | }; | 267 | }; |
244 | }; | 268 | }; |
245 | 269 | ||
diff --git a/arch/arm/boot/dts/bcm2835.dtsi b/arch/arm/boot/dts/bcm2835.dtsi index 4bf2a8774aa7..7e0481e2441a 100644 --- a/arch/arm/boot/dts/bcm2835.dtsi +++ b/arch/arm/boot/dts/bcm2835.dtsi | |||
@@ -105,7 +105,7 @@ | |||
105 | compatible = "fixed-clock"; | 105 | compatible = "fixed-clock"; |
106 | reg = <1>; | 106 | reg = <1>; |
107 | #clock-cells = <0>; | 107 | #clock-cells = <0>; |
108 | clock-frequency = <150000000>; | 108 | clock-frequency = <250000000>; |
109 | }; | 109 | }; |
110 | }; | 110 | }; |
111 | }; | 111 | }; |
diff --git a/arch/arm/boot/dts/dbx5x0.dtsi b/arch/arm/boot/dts/dbx5x0.dtsi index 69140ba99f46..9de93096601a 100644 --- a/arch/arm/boot/dts/dbx5x0.dtsi +++ b/arch/arm/boot/dts/dbx5x0.dtsi | |||
@@ -319,9 +319,8 @@ | |||
319 | }; | 319 | }; |
320 | }; | 320 | }; |
321 | 321 | ||
322 | ab8500@5 { | 322 | ab8500 { |
323 | compatible = "stericsson,ab8500"; | 323 | compatible = "stericsson,ab8500"; |
324 | reg = <5>; /* mailbox 5 is i2c */ | ||
325 | interrupt-parent = <&intc>; | 324 | interrupt-parent = <&intc>; |
326 | interrupts = <0 40 0x4>; | 325 | interrupts = <0 40 0x4>; |
327 | interrupt-controller; | 326 | interrupt-controller; |
diff --git a/arch/arm/boot/dts/exynos4.dtsi b/arch/arm/boot/dts/exynos4.dtsi index e1347fceb5bc..1a62bcf18aa3 100644 --- a/arch/arm/boot/dts/exynos4.dtsi +++ b/arch/arm/boot/dts/exynos4.dtsi | |||
@@ -275,18 +275,27 @@ | |||
275 | compatible = "arm,pl330", "arm,primecell"; | 275 | compatible = "arm,pl330", "arm,primecell"; |
276 | reg = <0x12680000 0x1000>; | 276 | reg = <0x12680000 0x1000>; |
277 | interrupts = <0 35 0>; | 277 | interrupts = <0 35 0>; |
278 | #dma-cells = <1>; | ||
279 | #dma-channels = <8>; | ||
280 | #dma-requests = <32>; | ||
278 | }; | 281 | }; |
279 | 282 | ||
280 | pdma1: pdma@12690000 { | 283 | pdma1: pdma@12690000 { |
281 | compatible = "arm,pl330", "arm,primecell"; | 284 | compatible = "arm,pl330", "arm,primecell"; |
282 | reg = <0x12690000 0x1000>; | 285 | reg = <0x12690000 0x1000>; |
283 | interrupts = <0 36 0>; | 286 | interrupts = <0 36 0>; |
287 | #dma-cells = <1>; | ||
288 | #dma-channels = <8>; | ||
289 | #dma-requests = <32>; | ||
284 | }; | 290 | }; |
285 | 291 | ||
286 | mdma1: mdma@12850000 { | 292 | mdma1: mdma@12850000 { |
287 | compatible = "arm,pl330", "arm,primecell"; | 293 | compatible = "arm,pl330", "arm,primecell"; |
288 | reg = <0x12850000 0x1000>; | 294 | reg = <0x12850000 0x1000>; |
289 | interrupts = <0 34 0>; | 295 | interrupts = <0 34 0>; |
296 | #dma-cells = <1>; | ||
297 | #dma-channels = <8>; | ||
298 | #dma-requests = <1>; | ||
290 | }; | 299 | }; |
291 | }; | 300 | }; |
292 | }; | 301 | }; |
diff --git a/arch/arm/boot/dts/exynos5440.dtsi b/arch/arm/boot/dts/exynos5440.dtsi index 5f3562ad6746..9a99755920c0 100644 --- a/arch/arm/boot/dts/exynos5440.dtsi +++ b/arch/arm/boot/dts/exynos5440.dtsi | |||
@@ -142,12 +142,18 @@ | |||
142 | compatible = "arm,pl330", "arm,primecell"; | 142 | compatible = "arm,pl330", "arm,primecell"; |
143 | reg = <0x120000 0x1000>; | 143 | reg = <0x120000 0x1000>; |
144 | interrupts = <0 34 0>; | 144 | interrupts = <0 34 0>; |
145 | #dma-cells = <1>; | ||
146 | #dma-channels = <8>; | ||
147 | #dma-requests = <32>; | ||
145 | }; | 148 | }; |
146 | 149 | ||
147 | pdma1: pdma@121B0000 { | 150 | pdma1: pdma@121B0000 { |
148 | compatible = "arm,pl330", "arm,primecell"; | 151 | compatible = "arm,pl330", "arm,primecell"; |
149 | reg = <0x121000 0x1000>; | 152 | reg = <0x121000 0x1000>; |
150 | interrupts = <0 35 0>; | 153 | interrupts = <0 35 0>; |
154 | #dma-cells = <1>; | ||
155 | #dma-channels = <8>; | ||
156 | #dma-requests = <32>; | ||
151 | }; | 157 | }; |
152 | }; | 158 | }; |
153 | 159 | ||
diff --git a/arch/arm/boot/dts/href.dtsi b/arch/arm/boot/dts/href.dtsi index 592fb9dc35bd..379128eb9d98 100644 --- a/arch/arm/boot/dts/href.dtsi +++ b/arch/arm/boot/dts/href.dtsi | |||
@@ -221,7 +221,7 @@ | |||
221 | }; | 221 | }; |
222 | }; | 222 | }; |
223 | 223 | ||
224 | ab8500@5 { | 224 | ab8500 { |
225 | ab8500-regulators { | 225 | ab8500-regulators { |
226 | ab8500_ldo_aux1_reg: ab8500_ldo_aux1 { | 226 | ab8500_ldo_aux1_reg: ab8500_ldo_aux1 { |
227 | regulator-name = "V-DISPLAY"; | 227 | regulator-name = "V-DISPLAY"; |
diff --git a/arch/arm/boot/dts/hrefv60plus.dts b/arch/arm/boot/dts/hrefv60plus.dts index 55f4191a626e..2b587a74b813 100644 --- a/arch/arm/boot/dts/hrefv60plus.dts +++ b/arch/arm/boot/dts/hrefv60plus.dts | |||
@@ -158,7 +158,7 @@ | |||
158 | }; | 158 | }; |
159 | }; | 159 | }; |
160 | 160 | ||
161 | ab8500@5 { | 161 | ab8500 { |
162 | ab8500-regulators { | 162 | ab8500-regulators { |
163 | ab8500_ldo_aux1_reg: ab8500_ldo_aux1 { | 163 | ab8500_ldo_aux1_reg: ab8500_ldo_aux1 { |
164 | regulator-name = "V-DISPLAY"; | 164 | regulator-name = "V-DISPLAY"; |
diff --git a/arch/arm/boot/dts/imx53-mba53.dts b/arch/arm/boot/dts/imx53-mba53.dts index e54fffd48369..468c0a1d48d9 100644 --- a/arch/arm/boot/dts/imx53-mba53.dts +++ b/arch/arm/boot/dts/imx53-mba53.dts | |||
@@ -42,10 +42,9 @@ | |||
42 | fsl,pins = <689 0x10000 /* DISP1_DRDY */ | 42 | fsl,pins = <689 0x10000 /* DISP1_DRDY */ |
43 | 482 0x10000 /* DISP1_HSYNC */ | 43 | 482 0x10000 /* DISP1_HSYNC */ |
44 | 489 0x10000 /* DISP1_VSYNC */ | 44 | 489 0x10000 /* DISP1_VSYNC */ |
45 | 684 0x10000 /* DISP1_DAT_0 */ | ||
46 | 515 0x10000 /* DISP1_DAT_22 */ | 45 | 515 0x10000 /* DISP1_DAT_22 */ |
47 | 523 0x10000 /* DISP1_DAT_23 */ | 46 | 523 0x10000 /* DISP1_DAT_23 */ |
48 | 543 0x10000 /* DISP1_DAT_21 */ | 47 | 545 0x10000 /* DISP1_DAT_21 */ |
49 | 553 0x10000 /* DISP1_DAT_20 */ | 48 | 553 0x10000 /* DISP1_DAT_20 */ |
50 | 558 0x10000 /* DISP1_DAT_19 */ | 49 | 558 0x10000 /* DISP1_DAT_19 */ |
51 | 564 0x10000 /* DISP1_DAT_18 */ | 50 | 564 0x10000 /* DISP1_DAT_18 */ |
diff --git a/arch/arm/boot/dts/snowball.dts b/arch/arm/boot/dts/snowball.dts index 27f31a5fa494..d3ec32f6b790 100644 --- a/arch/arm/boot/dts/snowball.dts +++ b/arch/arm/boot/dts/snowball.dts | |||
@@ -298,7 +298,7 @@ | |||
298 | }; | 298 | }; |
299 | }; | 299 | }; |
300 | 300 | ||
301 | ab8500@5 { | 301 | ab8500 { |
302 | ab8500-regulators { | 302 | ab8500-regulators { |
303 | ab8500_ldo_aux1_reg: ab8500_ldo_aux1 { | 303 | ab8500_ldo_aux1_reg: ab8500_ldo_aux1 { |
304 | regulator-name = "V-DISPLAY"; | 304 | regulator-name = "V-DISPLAY"; |
diff --git a/arch/arm/boot/dts/socfpga.dtsi b/arch/arm/boot/dts/socfpga.dtsi index 936d2306e7e1..7e8769bd5977 100644 --- a/arch/arm/boot/dts/socfpga.dtsi +++ b/arch/arm/boot/dts/socfpga.dtsi | |||
@@ -75,6 +75,9 @@ | |||
75 | compatible = "arm,pl330", "arm,primecell"; | 75 | compatible = "arm,pl330", "arm,primecell"; |
76 | reg = <0xffe01000 0x1000>; | 76 | reg = <0xffe01000 0x1000>; |
77 | interrupts = <0 180 4>; | 77 | interrupts = <0 180 4>; |
78 | #dma-cells = <1>; | ||
79 | #dma-channels = <8>; | ||
80 | #dma-requests = <32>; | ||
78 | }; | 81 | }; |
79 | }; | 82 | }; |
80 | 83 | ||
diff --git a/arch/arm/boot/dts/tegra20.dtsi b/arch/arm/boot/dts/tegra20.dtsi index 9a428931d042..48d00a099ce3 100644 --- a/arch/arm/boot/dts/tegra20.dtsi +++ b/arch/arm/boot/dts/tegra20.dtsi | |||
@@ -118,6 +118,7 @@ | |||
118 | compatible = "arm,cortex-a9-twd-timer"; | 118 | compatible = "arm,cortex-a9-twd-timer"; |
119 | reg = <0x50040600 0x20>; | 119 | reg = <0x50040600 0x20>; |
120 | interrupts = <1 13 0x304>; | 120 | interrupts = <1 13 0x304>; |
121 | clocks = <&tegra_car 132>; | ||
121 | }; | 122 | }; |
122 | 123 | ||
123 | intc: interrupt-controller { | 124 | intc: interrupt-controller { |
diff --git a/arch/arm/boot/dts/tegra30.dtsi b/arch/arm/boot/dts/tegra30.dtsi index 767803e1fd55..9d87a3ffe998 100644 --- a/arch/arm/boot/dts/tegra30.dtsi +++ b/arch/arm/boot/dts/tegra30.dtsi | |||
@@ -119,6 +119,7 @@ | |||
119 | compatible = "arm,cortex-a9-twd-timer"; | 119 | compatible = "arm,cortex-a9-twd-timer"; |
120 | reg = <0x50040600 0x20>; | 120 | reg = <0x50040600 0x20>; |
121 | interrupts = <1 13 0xf04>; | 121 | interrupts = <1 13 0xf04>; |
122 | clocks = <&tegra_car 214>; | ||
122 | }; | 123 | }; |
123 | 124 | ||
124 | intc: interrupt-controller { | 125 | intc: interrupt-controller { |
diff --git a/arch/arm/configs/mxs_defconfig b/arch/arm/configs/mxs_defconfig index fbbc5bb022d5..6a99e30f81d2 100644 --- a/arch/arm/configs/mxs_defconfig +++ b/arch/arm/configs/mxs_defconfig | |||
@@ -116,6 +116,7 @@ CONFIG_SND_SOC=y | |||
116 | CONFIG_SND_MXS_SOC=y | 116 | CONFIG_SND_MXS_SOC=y |
117 | CONFIG_SND_SOC_MXS_SGTL5000=y | 117 | CONFIG_SND_SOC_MXS_SGTL5000=y |
118 | CONFIG_USB=y | 118 | CONFIG_USB=y |
119 | CONFIG_USB_EHCI_HCD=y | ||
119 | CONFIG_USB_CHIPIDEA=y | 120 | CONFIG_USB_CHIPIDEA=y |
120 | CONFIG_USB_CHIPIDEA_HOST=y | 121 | CONFIG_USB_CHIPIDEA_HOST=y |
121 | CONFIG_USB_STORAGE=y | 122 | CONFIG_USB_STORAGE=y |
diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig index b16bae2c9a60..bd07864f14a0 100644 --- a/arch/arm/configs/omap2plus_defconfig +++ b/arch/arm/configs/omap2plus_defconfig | |||
@@ -126,6 +126,8 @@ CONFIG_INPUT_MISC=y | |||
126 | CONFIG_INPUT_TWL4030_PWRBUTTON=y | 126 | CONFIG_INPUT_TWL4030_PWRBUTTON=y |
127 | CONFIG_VT_HW_CONSOLE_BINDING=y | 127 | CONFIG_VT_HW_CONSOLE_BINDING=y |
128 | # CONFIG_LEGACY_PTYS is not set | 128 | # CONFIG_LEGACY_PTYS is not set |
129 | CONFIG_SERIAL_8250=y | ||
130 | CONFIG_SERIAL_8250_CONSOLE=y | ||
129 | CONFIG_SERIAL_8250_NR_UARTS=32 | 131 | CONFIG_SERIAL_8250_NR_UARTS=32 |
130 | CONFIG_SERIAL_8250_EXTENDED=y | 132 | CONFIG_SERIAL_8250_EXTENDED=y |
131 | CONFIG_SERIAL_8250_MANY_PORTS=y | 133 | CONFIG_SERIAL_8250_MANY_PORTS=y |
diff --git a/arch/arm/include/asm/xen/events.h b/arch/arm/include/asm/xen/events.h index 5c27696de14f..8b1f37bfeeec 100644 --- a/arch/arm/include/asm/xen/events.h +++ b/arch/arm/include/asm/xen/events.h | |||
@@ -2,6 +2,7 @@ | |||
2 | #define _ASM_ARM_XEN_EVENTS_H | 2 | #define _ASM_ARM_XEN_EVENTS_H |
3 | 3 | ||
4 | #include <asm/ptrace.h> | 4 | #include <asm/ptrace.h> |
5 | #include <asm/atomic.h> | ||
5 | 6 | ||
6 | enum ipi_vector { | 7 | enum ipi_vector { |
7 | XEN_PLACEHOLDER_VECTOR, | 8 | XEN_PLACEHOLDER_VECTOR, |
@@ -15,26 +16,8 @@ static inline int xen_irqs_disabled(struct pt_regs *regs) | |||
15 | return raw_irqs_disabled_flags(regs->ARM_cpsr); | 16 | return raw_irqs_disabled_flags(regs->ARM_cpsr); |
16 | } | 17 | } |
17 | 18 | ||
18 | /* | 19 | #define xchg_xen_ulong(ptr, val) atomic64_xchg(container_of((ptr), \ |
19 | * We cannot use xchg because it does not support 8-byte | 20 | atomic64_t, \ |
20 | * values. However it is safe to use {ldr,dtd}exd directly because all | 21 | counter), (val)) |
21 | * platforms which Xen can run on support those instructions. | ||
22 | */ | ||
23 | static inline xen_ulong_t xchg_xen_ulong(xen_ulong_t *ptr, xen_ulong_t val) | ||
24 | { | ||
25 | xen_ulong_t oldval; | ||
26 | unsigned int tmp; | ||
27 | |||
28 | wmb(); | ||
29 | asm volatile("@ xchg_xen_ulong\n" | ||
30 | "1: ldrexd %0, %H0, [%3]\n" | ||
31 | " strexd %1, %2, %H2, [%3]\n" | ||
32 | " teq %1, #0\n" | ||
33 | " bne 1b" | ||
34 | : "=&r" (oldval), "=&r" (tmp) | ||
35 | : "r" (val), "r" (ptr) | ||
36 | : "memory", "cc"); | ||
37 | return oldval; | ||
38 | } | ||
39 | 22 | ||
40 | #endif /* _ASM_ARM_XEN_EVENTS_H */ | 23 | #endif /* _ASM_ARM_XEN_EVENTS_H */ |
diff --git a/arch/arm/include/debug/mvebu.S b/arch/arm/include/debug/mvebu.S index 865c6d02b332..df191afa3be1 100644 --- a/arch/arm/include/debug/mvebu.S +++ b/arch/arm/include/debug/mvebu.S | |||
@@ -12,7 +12,7 @@ | |||
12 | */ | 12 | */ |
13 | 13 | ||
14 | #define ARMADA_370_XP_REGS_PHYS_BASE 0xd0000000 | 14 | #define ARMADA_370_XP_REGS_PHYS_BASE 0xd0000000 |
15 | #define ARMADA_370_XP_REGS_VIRT_BASE 0xfeb00000 | 15 | #define ARMADA_370_XP_REGS_VIRT_BASE 0xfec00000 |
16 | 16 | ||
17 | .macro addruart, rp, rv, tmp | 17 | .macro addruart, rp, rv, tmp |
18 | ldr \rp, =ARMADA_370_XP_REGS_PHYS_BASE | 18 | ldr \rp, =ARMADA_370_XP_REGS_PHYS_BASE |
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index 31644f1978d5..79078edbb9bc 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c | |||
@@ -480,7 +480,7 @@ static void __cpuinit broadcast_timer_setup(struct clock_event_device *evt) | |||
480 | evt->features = CLOCK_EVT_FEAT_ONESHOT | | 480 | evt->features = CLOCK_EVT_FEAT_ONESHOT | |
481 | CLOCK_EVT_FEAT_PERIODIC | | 481 | CLOCK_EVT_FEAT_PERIODIC | |
482 | CLOCK_EVT_FEAT_DUMMY; | 482 | CLOCK_EVT_FEAT_DUMMY; |
483 | evt->rating = 400; | 483 | evt->rating = 100; |
484 | evt->mult = 1; | 484 | evt->mult = 1; |
485 | evt->set_mode = broadcast_timer_set_mode; | 485 | evt->set_mode = broadcast_timer_set_mode; |
486 | 486 | ||
diff --git a/arch/arm/lib/memset.S b/arch/arm/lib/memset.S index d912e7397ecc..94b0650ea98f 100644 --- a/arch/arm/lib/memset.S +++ b/arch/arm/lib/memset.S | |||
@@ -14,31 +14,15 @@ | |||
14 | 14 | ||
15 | .text | 15 | .text |
16 | .align 5 | 16 | .align 5 |
17 | .word 0 | ||
18 | |||
19 | 1: subs r2, r2, #4 @ 1 do we have enough | ||
20 | blt 5f @ 1 bytes to align with? | ||
21 | cmp r3, #2 @ 1 | ||
22 | strltb r1, [ip], #1 @ 1 | ||
23 | strleb r1, [ip], #1 @ 1 | ||
24 | strb r1, [ip], #1 @ 1 | ||
25 | add r2, r2, r3 @ 1 (r2 = r2 - (4 - r3)) | ||
26 | /* | ||
27 | * The pointer is now aligned and the length is adjusted. Try doing the | ||
28 | * memset again. | ||
29 | */ | ||
30 | 17 | ||
31 | ENTRY(memset) | 18 | ENTRY(memset) |
32 | /* | 19 | ands r3, r0, #3 @ 1 unaligned? |
33 | * Preserve the contents of r0 for the return value. | 20 | mov ip, r0 @ preserve r0 as return value |
34 | */ | 21 | bne 6f @ 1 |
35 | mov ip, r0 | ||
36 | ands r3, ip, #3 @ 1 unaligned? | ||
37 | bne 1b @ 1 | ||
38 | /* | 22 | /* |
39 | * we know that the pointer in ip is aligned to a word boundary. | 23 | * we know that the pointer in ip is aligned to a word boundary. |
40 | */ | 24 | */ |
41 | orr r1, r1, r1, lsl #8 | 25 | 1: orr r1, r1, r1, lsl #8 |
42 | orr r1, r1, r1, lsl #16 | 26 | orr r1, r1, r1, lsl #16 |
43 | mov r3, r1 | 27 | mov r3, r1 |
44 | cmp r2, #16 | 28 | cmp r2, #16 |
@@ -127,4 +111,13 @@ ENTRY(memset) | |||
127 | tst r2, #1 | 111 | tst r2, #1 |
128 | strneb r1, [ip], #1 | 112 | strneb r1, [ip], #1 |
129 | mov pc, lr | 113 | mov pc, lr |
114 | |||
115 | 6: subs r2, r2, #4 @ 1 do we have enough | ||
116 | blt 5b @ 1 bytes to align with? | ||
117 | cmp r3, #2 @ 1 | ||
118 | strltb r1, [ip], #1 @ 1 | ||
119 | strleb r1, [ip], #1 @ 1 | ||
120 | strb r1, [ip], #1 @ 1 | ||
121 | add r2, r2, r3 @ 1 (r2 = r2 - (4 - r3)) | ||
122 | b 1b | ||
130 | ENDPROC(memset) | 123 | ENDPROC(memset) |
diff --git a/arch/arm/mach-at91/board-foxg20.c b/arch/arm/mach-at91/board-foxg20.c index 2ea7059b840b..c20a870ea9c9 100644 --- a/arch/arm/mach-at91/board-foxg20.c +++ b/arch/arm/mach-at91/board-foxg20.c | |||
@@ -176,6 +176,7 @@ static struct w1_gpio_platform_data w1_gpio_pdata = { | |||
176 | /* If you choose to use a pin other than PB16 it needs to be 3.3V */ | 176 | /* If you choose to use a pin other than PB16 it needs to be 3.3V */ |
177 | .pin = AT91_PIN_PB16, | 177 | .pin = AT91_PIN_PB16, |
178 | .is_open_drain = 1, | 178 | .is_open_drain = 1, |
179 | .ext_pullup_enable_pin = -EINVAL, | ||
179 | }; | 180 | }; |
180 | 181 | ||
181 | static struct platform_device w1_device = { | 182 | static struct platform_device w1_device = { |
diff --git a/arch/arm/mach-at91/board-stamp9g20.c b/arch/arm/mach-at91/board-stamp9g20.c index a033b8df9fb2..869cbecf00b7 100644 --- a/arch/arm/mach-at91/board-stamp9g20.c +++ b/arch/arm/mach-at91/board-stamp9g20.c | |||
@@ -188,6 +188,7 @@ static struct spi_board_info portuxg20_spi_devices[] = { | |||
188 | static struct w1_gpio_platform_data w1_gpio_pdata = { | 188 | static struct w1_gpio_platform_data w1_gpio_pdata = { |
189 | .pin = AT91_PIN_PA29, | 189 | .pin = AT91_PIN_PA29, |
190 | .is_open_drain = 1, | 190 | .is_open_drain = 1, |
191 | .ext_pullup_enable_pin = -EINVAL, | ||
191 | }; | 192 | }; |
192 | 193 | ||
193 | static struct platform_device w1_device = { | 194 | static struct platform_device w1_device = { |
diff --git a/arch/arm/mach-at91/include/mach/gpio.h b/arch/arm/mach-at91/include/mach/gpio.h index eed465ab0dd7..5fc23771c154 100644 --- a/arch/arm/mach-at91/include/mach/gpio.h +++ b/arch/arm/mach-at91/include/mach/gpio.h | |||
@@ -209,6 +209,14 @@ extern int at91_get_gpio_value(unsigned pin); | |||
209 | extern void at91_gpio_suspend(void); | 209 | extern void at91_gpio_suspend(void); |
210 | extern void at91_gpio_resume(void); | 210 | extern void at91_gpio_resume(void); |
211 | 211 | ||
212 | #ifdef CONFIG_PINCTRL_AT91 | ||
213 | extern void at91_pinctrl_gpio_suspend(void); | ||
214 | extern void at91_pinctrl_gpio_resume(void); | ||
215 | #else | ||
216 | static inline void at91_pinctrl_gpio_suspend(void) {} | ||
217 | static inline void at91_pinctrl_gpio_resume(void) {} | ||
218 | #endif | ||
219 | |||
212 | #endif /* __ASSEMBLY__ */ | 220 | #endif /* __ASSEMBLY__ */ |
213 | 221 | ||
214 | #endif | 222 | #endif |
diff --git a/arch/arm/mach-at91/irq.c b/arch/arm/mach-at91/irq.c index 8e210262aeee..e0ca59171022 100644 --- a/arch/arm/mach-at91/irq.c +++ b/arch/arm/mach-at91/irq.c | |||
@@ -92,23 +92,21 @@ static int at91_aic_set_wake(struct irq_data *d, unsigned value) | |||
92 | 92 | ||
93 | void at91_irq_suspend(void) | 93 | void at91_irq_suspend(void) |
94 | { | 94 | { |
95 | int i = 0, bit; | 95 | int bit = -1; |
96 | 96 | ||
97 | if (has_aic5()) { | 97 | if (has_aic5()) { |
98 | /* disable enabled irqs */ | 98 | /* disable enabled irqs */ |
99 | while ((bit = find_next_bit(backups, n_irqs, i)) < n_irqs) { | 99 | while ((bit = find_next_bit(backups, n_irqs, bit + 1)) < n_irqs) { |
100 | at91_aic_write(AT91_AIC5_SSR, | 100 | at91_aic_write(AT91_AIC5_SSR, |
101 | bit & AT91_AIC5_INTSEL_MSK); | 101 | bit & AT91_AIC5_INTSEL_MSK); |
102 | at91_aic_write(AT91_AIC5_IDCR, 1); | 102 | at91_aic_write(AT91_AIC5_IDCR, 1); |
103 | i = bit; | ||
104 | } | 103 | } |
105 | /* enable wakeup irqs */ | 104 | /* enable wakeup irqs */ |
106 | i = 0; | 105 | bit = -1; |
107 | while ((bit = find_next_bit(wakeups, n_irqs, i)) < n_irqs) { | 106 | while ((bit = find_next_bit(wakeups, n_irqs, bit + 1)) < n_irqs) { |
108 | at91_aic_write(AT91_AIC5_SSR, | 107 | at91_aic_write(AT91_AIC5_SSR, |
109 | bit & AT91_AIC5_INTSEL_MSK); | 108 | bit & AT91_AIC5_INTSEL_MSK); |
110 | at91_aic_write(AT91_AIC5_IECR, 1); | 109 | at91_aic_write(AT91_AIC5_IECR, 1); |
111 | i = bit; | ||
112 | } | 110 | } |
113 | } else { | 111 | } else { |
114 | at91_aic_write(AT91_AIC_IDCR, *backups); | 112 | at91_aic_write(AT91_AIC_IDCR, *backups); |
@@ -118,23 +116,21 @@ void at91_irq_suspend(void) | |||
118 | 116 | ||
119 | void at91_irq_resume(void) | 117 | void at91_irq_resume(void) |
120 | { | 118 | { |
121 | int i = 0, bit; | 119 | int bit = -1; |
122 | 120 | ||
123 | if (has_aic5()) { | 121 | if (has_aic5()) { |
124 | /* disable wakeup irqs */ | 122 | /* disable wakeup irqs */ |
125 | while ((bit = find_next_bit(wakeups, n_irqs, i)) < n_irqs) { | 123 | while ((bit = find_next_bit(wakeups, n_irqs, bit + 1)) < n_irqs) { |
126 | at91_aic_write(AT91_AIC5_SSR, | 124 | at91_aic_write(AT91_AIC5_SSR, |
127 | bit & AT91_AIC5_INTSEL_MSK); | 125 | bit & AT91_AIC5_INTSEL_MSK); |
128 | at91_aic_write(AT91_AIC5_IDCR, 1); | 126 | at91_aic_write(AT91_AIC5_IDCR, 1); |
129 | i = bit; | ||
130 | } | 127 | } |
131 | /* enable irqs disabled for suspend */ | 128 | /* enable irqs disabled for suspend */ |
132 | i = 0; | 129 | bit = -1; |
133 | while ((bit = find_next_bit(backups, n_irqs, i)) < n_irqs) { | 130 | while ((bit = find_next_bit(backups, n_irqs, bit + 1)) < n_irqs) { |
134 | at91_aic_write(AT91_AIC5_SSR, | 131 | at91_aic_write(AT91_AIC5_SSR, |
135 | bit & AT91_AIC5_INTSEL_MSK); | 132 | bit & AT91_AIC5_INTSEL_MSK); |
136 | at91_aic_write(AT91_AIC5_IECR, 1); | 133 | at91_aic_write(AT91_AIC5_IECR, 1); |
137 | i = bit; | ||
138 | } | 134 | } |
139 | } else { | 135 | } else { |
140 | at91_aic_write(AT91_AIC_IDCR, *wakeups); | 136 | at91_aic_write(AT91_AIC_IDCR, *wakeups); |
diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c index adb6db888a1f..73f1f250403a 100644 --- a/arch/arm/mach-at91/pm.c +++ b/arch/arm/mach-at91/pm.c | |||
@@ -201,7 +201,10 @@ extern u32 at91_slow_clock_sz; | |||
201 | 201 | ||
202 | static int at91_pm_enter(suspend_state_t state) | 202 | static int at91_pm_enter(suspend_state_t state) |
203 | { | 203 | { |
204 | at91_gpio_suspend(); | 204 | if (of_have_populated_dt()) |
205 | at91_pinctrl_gpio_suspend(); | ||
206 | else | ||
207 | at91_gpio_suspend(); | ||
205 | at91_irq_suspend(); | 208 | at91_irq_suspend(); |
206 | 209 | ||
207 | pr_debug("AT91: PM - wake mask %08x, pm state %d\n", | 210 | pr_debug("AT91: PM - wake mask %08x, pm state %d\n", |
@@ -286,7 +289,10 @@ static int at91_pm_enter(suspend_state_t state) | |||
286 | error: | 289 | error: |
287 | target_state = PM_SUSPEND_ON; | 290 | target_state = PM_SUSPEND_ON; |
288 | at91_irq_resume(); | 291 | at91_irq_resume(); |
289 | at91_gpio_resume(); | 292 | if (of_have_populated_dt()) |
293 | at91_pinctrl_gpio_resume(); | ||
294 | else | ||
295 | at91_gpio_resume(); | ||
290 | return 0; | 296 | return 0; |
291 | } | 297 | } |
292 | 298 | ||
diff --git a/arch/arm/mach-davinci/dma.c b/arch/arm/mach-davinci/dma.c index a685e9706b7b..45b7c71d9cc1 100644 --- a/arch/arm/mach-davinci/dma.c +++ b/arch/arm/mach-davinci/dma.c | |||
@@ -743,6 +743,9 @@ EXPORT_SYMBOL(edma_free_channel); | |||
743 | */ | 743 | */ |
744 | int edma_alloc_slot(unsigned ctlr, int slot) | 744 | int edma_alloc_slot(unsigned ctlr, int slot) |
745 | { | 745 | { |
746 | if (!edma_cc[ctlr]) | ||
747 | return -EINVAL; | ||
748 | |||
746 | if (slot >= 0) | 749 | if (slot >= 0) |
747 | slot = EDMA_CHAN_SLOT(slot); | 750 | slot = EDMA_CHAN_SLOT(slot); |
748 | 751 | ||
diff --git a/arch/arm/mach-dove/Makefile b/arch/arm/mach-dove/Makefile index 3f0a858fb597..4d9d2ffc4535 100644 --- a/arch/arm/mach-dove/Makefile +++ b/arch/arm/mach-dove/Makefile | |||
@@ -1,4 +1,4 @@ | |||
1 | obj-y += common.o addr-map.o irq.o | 1 | obj-y += common.o irq.o |
2 | obj-$(CONFIG_DOVE_LEGACY) += mpp.o | 2 | obj-$(CONFIG_DOVE_LEGACY) += mpp.o |
3 | obj-$(CONFIG_PCI) += pcie.o | 3 | obj-$(CONFIG_PCI) += pcie.o |
4 | obj-$(CONFIG_MACH_DOVE_DB) += dove-db-setup.o | 4 | obj-$(CONFIG_MACH_DOVE_DB) += dove-db-setup.o |
diff --git a/arch/arm/mach-dove/addr-map.c b/arch/arm/mach-dove/addr-map.c deleted file mode 100644 index 2a06c0163418..000000000000 --- a/arch/arm/mach-dove/addr-map.c +++ /dev/null | |||
@@ -1,125 +0,0 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-dove/addr-map.c | ||
3 | * | ||
4 | * Address map functions for Marvell Dove 88AP510 SoC | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/init.h> | ||
13 | #include <linux/mbus.h> | ||
14 | #include <linux/io.h> | ||
15 | #include <asm/mach/arch.h> | ||
16 | #include <asm/setup.h> | ||
17 | #include <mach/dove.h> | ||
18 | #include <plat/addr-map.h> | ||
19 | #include "common.h" | ||
20 | |||
21 | /* | ||
22 | * Generic Address Decode Windows bit settings | ||
23 | */ | ||
24 | #define TARGET_DDR 0x0 | ||
25 | #define TARGET_BOOTROM 0x1 | ||
26 | #define TARGET_CESA 0x3 | ||
27 | #define TARGET_PCIE0 0x4 | ||
28 | #define TARGET_PCIE1 0x8 | ||
29 | #define TARGET_SCRATCHPAD 0xd | ||
30 | |||
31 | #define ATTR_CESA 0x01 | ||
32 | #define ATTR_BOOTROM 0xfd | ||
33 | #define ATTR_DEV_SPI0_ROM 0xfe | ||
34 | #define ATTR_DEV_SPI1_ROM 0xfb | ||
35 | #define ATTR_PCIE_IO 0xe0 | ||
36 | #define ATTR_PCIE_MEM 0xe8 | ||
37 | #define ATTR_SCRATCHPAD 0x0 | ||
38 | |||
39 | static inline void __iomem *ddr_map_sc(int i) | ||
40 | { | ||
41 | return (void __iomem *)(DOVE_MC_VIRT_BASE + 0x100 + ((i) << 4)); | ||
42 | } | ||
43 | |||
44 | /* | ||
45 | * Description of the windows needed by the platform code | ||
46 | */ | ||
47 | static struct __initdata orion_addr_map_cfg addr_map_cfg = { | ||
48 | .num_wins = 8, | ||
49 | .remappable_wins = 4, | ||
50 | .bridge_virt_base = BRIDGE_VIRT_BASE, | ||
51 | }; | ||
52 | |||
53 | static const struct __initdata orion_addr_map_info addr_map_info[] = { | ||
54 | /* | ||
55 | * Windows for PCIe IO+MEM space. | ||
56 | */ | ||
57 | { 0, DOVE_PCIE0_IO_PHYS_BASE, DOVE_PCIE0_IO_SIZE, | ||
58 | TARGET_PCIE0, ATTR_PCIE_IO, DOVE_PCIE0_IO_BUS_BASE | ||
59 | }, | ||
60 | { 1, DOVE_PCIE1_IO_PHYS_BASE, DOVE_PCIE1_IO_SIZE, | ||
61 | TARGET_PCIE1, ATTR_PCIE_IO, DOVE_PCIE1_IO_BUS_BASE | ||
62 | }, | ||
63 | { 2, DOVE_PCIE0_MEM_PHYS_BASE, DOVE_PCIE0_MEM_SIZE, | ||
64 | TARGET_PCIE0, ATTR_PCIE_MEM, -1 | ||
65 | }, | ||
66 | { 3, DOVE_PCIE1_MEM_PHYS_BASE, DOVE_PCIE1_MEM_SIZE, | ||
67 | TARGET_PCIE1, ATTR_PCIE_MEM, -1 | ||
68 | }, | ||
69 | /* | ||
70 | * Window for CESA engine. | ||
71 | */ | ||
72 | { 4, DOVE_CESA_PHYS_BASE, DOVE_CESA_SIZE, | ||
73 | TARGET_CESA, ATTR_CESA, -1 | ||
74 | }, | ||
75 | /* | ||
76 | * Window to the BootROM for Standby and Sleep Resume | ||
77 | */ | ||
78 | { 5, DOVE_BOOTROM_PHYS_BASE, DOVE_BOOTROM_SIZE, | ||
79 | TARGET_BOOTROM, ATTR_BOOTROM, -1 | ||
80 | }, | ||
81 | /* | ||
82 | * Window to the PMU Scratch Pad space | ||
83 | */ | ||
84 | { 6, DOVE_SCRATCHPAD_PHYS_BASE, DOVE_SCRATCHPAD_SIZE, | ||
85 | TARGET_SCRATCHPAD, ATTR_SCRATCHPAD, -1 | ||
86 | }, | ||
87 | /* End marker */ | ||
88 | { -1, 0, 0, 0, 0, 0 } | ||
89 | }; | ||
90 | |||
91 | void __init dove_setup_cpu_mbus(void) | ||
92 | { | ||
93 | int i; | ||
94 | int cs; | ||
95 | |||
96 | /* | ||
97 | * Disable, clear and configure windows. | ||
98 | */ | ||
99 | orion_config_wins(&addr_map_cfg, addr_map_info); | ||
100 | |||
101 | /* | ||
102 | * Setup MBUS dram target info. | ||
103 | */ | ||
104 | orion_mbus_dram_info.mbus_dram_target_id = TARGET_DDR; | ||
105 | |||
106 | for (i = 0, cs = 0; i < 2; i++) { | ||
107 | u32 map = readl(ddr_map_sc(i)); | ||
108 | |||
109 | /* | ||
110 | * Chip select enabled? | ||
111 | */ | ||
112 | if (map & 1) { | ||
113 | struct mbus_dram_window *w; | ||
114 | |||
115 | w = &orion_mbus_dram_info.cs[cs++]; | ||
116 | w->cs_index = i; | ||
117 | w->mbus_attr = 0; /* CS address decoding done inside */ | ||
118 | /* the DDR controller, no need to */ | ||
119 | /* provide attributes */ | ||
120 | w->base = map & 0xff800000; | ||
121 | w->size = 0x100000 << (((map & 0x000f0000) >> 16) - 4); | ||
122 | } | ||
123 | } | ||
124 | orion_mbus_dram_info.num_cs = cs; | ||
125 | } | ||
diff --git a/arch/arm/mach-dove/board-dt.c b/arch/arm/mach-dove/board-dt.c index fbde1dd67113..0b142803b2e1 100644 --- a/arch/arm/mach-dove/board-dt.c +++ b/arch/arm/mach-dove/board-dt.c | |||
@@ -64,7 +64,7 @@ static void __init dove_dt_init(void) | |||
64 | #ifdef CONFIG_CACHE_TAUROS2 | 64 | #ifdef CONFIG_CACHE_TAUROS2 |
65 | tauros2_init(0); | 65 | tauros2_init(0); |
66 | #endif | 66 | #endif |
67 | dove_setup_cpu_mbus(); | 67 | dove_setup_cpu_wins(); |
68 | 68 | ||
69 | /* Setup root of clk tree */ | 69 | /* Setup root of clk tree */ |
70 | dove_of_clk_init(); | 70 | dove_of_clk_init(); |
diff --git a/arch/arm/mach-dove/common.c b/arch/arm/mach-dove/common.c index c6b3b2bb50e7..e2b5da031f96 100644 --- a/arch/arm/mach-dove/common.c +++ b/arch/arm/mach-dove/common.c | |||
@@ -224,6 +224,9 @@ void __init dove_i2c_init(void) | |||
224 | void __init dove_init_early(void) | 224 | void __init dove_init_early(void) |
225 | { | 225 | { |
226 | orion_time_set_base(TIMER_VIRT_BASE); | 226 | orion_time_set_base(TIMER_VIRT_BASE); |
227 | mvebu_mbus_init("marvell,dove-mbus", | ||
228 | BRIDGE_WINS_BASE, BRIDGE_WINS_SZ, | ||
229 | DOVE_MC_WINS_BASE, DOVE_MC_WINS_SZ); | ||
227 | } | 230 | } |
228 | 231 | ||
229 | static int __init dove_find_tclk(void) | 232 | static int __init dove_find_tclk(void) |
@@ -326,6 +329,40 @@ void __init dove_sdio1_init(void) | |||
326 | platform_device_register(&dove_sdio1); | 329 | platform_device_register(&dove_sdio1); |
327 | } | 330 | } |
328 | 331 | ||
332 | void __init dove_setup_cpu_wins(void) | ||
333 | { | ||
334 | /* | ||
335 | * The PCIe windows will no longer be statically allocated | ||
336 | * here once Dove is migrated to the pci-mvebu driver. | ||
337 | */ | ||
338 | mvebu_mbus_add_window_remap_flags("pcie0.0", | ||
339 | DOVE_PCIE0_IO_PHYS_BASE, | ||
340 | DOVE_PCIE0_IO_SIZE, | ||
341 | DOVE_PCIE0_IO_BUS_BASE, | ||
342 | MVEBU_MBUS_PCI_IO); | ||
343 | mvebu_mbus_add_window_remap_flags("pcie1.0", | ||
344 | DOVE_PCIE1_IO_PHYS_BASE, | ||
345 | DOVE_PCIE1_IO_SIZE, | ||
346 | DOVE_PCIE1_IO_BUS_BASE, | ||
347 | MVEBU_MBUS_PCI_IO); | ||
348 | mvebu_mbus_add_window_remap_flags("pcie0.0", | ||
349 | DOVE_PCIE0_MEM_PHYS_BASE, | ||
350 | DOVE_PCIE0_MEM_SIZE, | ||
351 | MVEBU_MBUS_NO_REMAP, | ||
352 | MVEBU_MBUS_PCI_MEM); | ||
353 | mvebu_mbus_add_window_remap_flags("pcie1.0", | ||
354 | DOVE_PCIE1_MEM_PHYS_BASE, | ||
355 | DOVE_PCIE1_MEM_SIZE, | ||
356 | MVEBU_MBUS_NO_REMAP, | ||
357 | MVEBU_MBUS_PCI_MEM); | ||
358 | mvebu_mbus_add_window("cesa", DOVE_CESA_PHYS_BASE, | ||
359 | DOVE_CESA_SIZE); | ||
360 | mvebu_mbus_add_window("bootrom", DOVE_BOOTROM_PHYS_BASE, | ||
361 | DOVE_BOOTROM_SIZE); | ||
362 | mvebu_mbus_add_window("scratchpad", DOVE_SCRATCHPAD_PHYS_BASE, | ||
363 | DOVE_SCRATCHPAD_SIZE); | ||
364 | } | ||
365 | |||
329 | void __init dove_init(void) | 366 | void __init dove_init(void) |
330 | { | 367 | { |
331 | pr_info("Dove 88AP510 SoC, TCLK = %d MHz.\n", | 368 | pr_info("Dove 88AP510 SoC, TCLK = %d MHz.\n", |
@@ -334,7 +371,7 @@ void __init dove_init(void) | |||
334 | #ifdef CONFIG_CACHE_TAUROS2 | 371 | #ifdef CONFIG_CACHE_TAUROS2 |
335 | tauros2_init(0); | 372 | tauros2_init(0); |
336 | #endif | 373 | #endif |
337 | dove_setup_cpu_mbus(); | 374 | dove_setup_cpu_wins(); |
338 | 375 | ||
339 | /* Setup root of clk tree */ | 376 | /* Setup root of clk tree */ |
340 | dove_clk_init(); | 377 | dove_clk_init(); |
diff --git a/arch/arm/mach-dove/common.h b/arch/arm/mach-dove/common.h index ee59fba4c6d1..e86347928b67 100644 --- a/arch/arm/mach-dove/common.h +++ b/arch/arm/mach-dove/common.h | |||
@@ -23,7 +23,7 @@ void dove_map_io(void); | |||
23 | void dove_init(void); | 23 | void dove_init(void); |
24 | void dove_init_early(void); | 24 | void dove_init_early(void); |
25 | void dove_init_irq(void); | 25 | void dove_init_irq(void); |
26 | void dove_setup_cpu_mbus(void); | 26 | void dove_setup_cpu_wins(void); |
27 | void dove_ge00_init(struct mv643xx_eth_platform_data *eth_data); | 27 | void dove_ge00_init(struct mv643xx_eth_platform_data *eth_data); |
28 | void dove_sata_init(struct mv_sata_platform_data *sata_data); | 28 | void dove_sata_init(struct mv_sata_platform_data *sata_data); |
29 | #ifdef CONFIG_PCI | 29 | #ifdef CONFIG_PCI |
diff --git a/arch/arm/mach-dove/include/mach/dove.h b/arch/arm/mach-dove/include/mach/dove.h index 661725e3115a..0c4b35f4ee5b 100644 --- a/arch/arm/mach-dove/include/mach/dove.h +++ b/arch/arm/mach-dove/include/mach/dove.h | |||
@@ -77,6 +77,8 @@ | |||
77 | /* North-South Bridge */ | 77 | /* North-South Bridge */ |
78 | #define BRIDGE_VIRT_BASE (DOVE_SB_REGS_VIRT_BASE + 0x20000) | 78 | #define BRIDGE_VIRT_BASE (DOVE_SB_REGS_VIRT_BASE + 0x20000) |
79 | #define BRIDGE_PHYS_BASE (DOVE_SB_REGS_PHYS_BASE + 0x20000) | 79 | #define BRIDGE_PHYS_BASE (DOVE_SB_REGS_PHYS_BASE + 0x20000) |
80 | #define BRIDGE_WINS_BASE (BRIDGE_PHYS_BASE) | ||
81 | #define BRIDGE_WINS_SZ (0x80) | ||
80 | 82 | ||
81 | /* Cryptographic Engine */ | 83 | /* Cryptographic Engine */ |
82 | #define DOVE_CRYPT_PHYS_BASE (DOVE_SB_REGS_PHYS_BASE + 0x30000) | 84 | #define DOVE_CRYPT_PHYS_BASE (DOVE_SB_REGS_PHYS_BASE + 0x30000) |
@@ -168,6 +170,9 @@ | |||
168 | #define DOVE_SSP_CLOCK_ENABLE (1 << 1) | 170 | #define DOVE_SSP_CLOCK_ENABLE (1 << 1) |
169 | #define DOVE_SSP_BPB_CLOCK_SRC_SSP (1 << 11) | 171 | #define DOVE_SSP_BPB_CLOCK_SRC_SSP (1 << 11) |
170 | /* Memory Controller */ | 172 | /* Memory Controller */ |
173 | #define DOVE_MC_PHYS_BASE (DOVE_NB_REGS_PHYS_BASE + 0x00000) | ||
174 | #define DOVE_MC_WINS_BASE (DOVE_MC_PHYS_BASE + 0x100) | ||
175 | #define DOVE_MC_WINS_SZ (0x8) | ||
171 | #define DOVE_MC_VIRT_BASE (DOVE_NB_REGS_VIRT_BASE + 0x00000) | 176 | #define DOVE_MC_VIRT_BASE (DOVE_NB_REGS_VIRT_BASE + 0x00000) |
172 | 177 | ||
173 | /* LCD Controller */ | 178 | /* LCD Controller */ |
diff --git a/arch/arm/mach-footbridge/Kconfig b/arch/arm/mach-footbridge/Kconfig index abda5a18a664..0f2111a11315 100644 --- a/arch/arm/mach-footbridge/Kconfig +++ b/arch/arm/mach-footbridge/Kconfig | |||
@@ -67,6 +67,7 @@ config ARCH_NETWINDER | |||
67 | select ISA | 67 | select ISA |
68 | select ISA_DMA | 68 | select ISA_DMA |
69 | select PCI | 69 | select PCI |
70 | select VIRT_TO_BUS | ||
70 | help | 71 | help |
71 | Say Y here if you intend to run this kernel on the Rebel.COM | 72 | Say Y here if you intend to run this kernel on the Rebel.COM |
72 | NetWinder. Information about this machine can be found at: | 73 | NetWinder. Information about this machine can be found at: |
diff --git a/arch/arm/mach-imx/clk-imx35.c b/arch/arm/mach-imx/clk-imx35.c index 74e3a34d78b8..e13a8fa5e62c 100644 --- a/arch/arm/mach-imx/clk-imx35.c +++ b/arch/arm/mach-imx/clk-imx35.c | |||
@@ -264,6 +264,7 @@ int __init mx35_clocks_init(void) | |||
264 | clk_prepare_enable(clk[gpio3_gate]); | 264 | clk_prepare_enable(clk[gpio3_gate]); |
265 | clk_prepare_enable(clk[iim_gate]); | 265 | clk_prepare_enable(clk[iim_gate]); |
266 | clk_prepare_enable(clk[emi_gate]); | 266 | clk_prepare_enable(clk[emi_gate]); |
267 | clk_prepare_enable(clk[max_gate]); | ||
267 | 268 | ||
268 | /* | 269 | /* |
269 | * SCC is needed to boot via mmc after a watchdog reset. The clock code | 270 | * SCC is needed to boot via mmc after a watchdog reset. The clock code |
diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c index 7b025ee528a5..2f9ff93a4e61 100644 --- a/arch/arm/mach-imx/clk-imx6q.c +++ b/arch/arm/mach-imx/clk-imx6q.c | |||
@@ -172,7 +172,7 @@ static struct clk *clk[clk_max]; | |||
172 | static struct clk_onecell_data clk_data; | 172 | static struct clk_onecell_data clk_data; |
173 | 173 | ||
174 | static enum mx6q_clks const clks_init_on[] __initconst = { | 174 | static enum mx6q_clks const clks_init_on[] __initconst = { |
175 | mmdc_ch0_axi, rom, | 175 | mmdc_ch0_axi, rom, pll1_sys, |
176 | }; | 176 | }; |
177 | 177 | ||
178 | static struct clk_div_table clk_enet_ref_table[] = { | 178 | static struct clk_div_table clk_enet_ref_table[] = { |
diff --git a/arch/arm/mach-imx/headsmp.S b/arch/arm/mach-imx/headsmp.S index 921fc1555854..a58c8b0527cc 100644 --- a/arch/arm/mach-imx/headsmp.S +++ b/arch/arm/mach-imx/headsmp.S | |||
@@ -26,16 +26,16 @@ ENDPROC(v7_secondary_startup) | |||
26 | 26 | ||
27 | #ifdef CONFIG_PM | 27 | #ifdef CONFIG_PM |
28 | /* | 28 | /* |
29 | * The following code is located into the .data section. This is to | 29 | * The following code must assume it is running from physical address |
30 | * allow phys_l2x0_saved_regs to be accessed with a relative load | 30 | * where absolute virtual addresses to the data section have to be |
31 | * as we are running on physical address here. | 31 | * turned into relative ones. |
32 | */ | 32 | */ |
33 | .data | ||
34 | .align | ||
35 | 33 | ||
36 | #ifdef CONFIG_CACHE_L2X0 | 34 | #ifdef CONFIG_CACHE_L2X0 |
37 | .macro pl310_resume | 35 | .macro pl310_resume |
38 | ldr r2, phys_l2x0_saved_regs | 36 | adr r0, l2x0_saved_regs_offset |
37 | ldr r2, [r0] | ||
38 | add r2, r2, r0 | ||
39 | ldr r0, [r2, #L2X0_R_PHY_BASE] @ get physical base of l2x0 | 39 | ldr r0, [r2, #L2X0_R_PHY_BASE] @ get physical base of l2x0 |
40 | ldr r1, [r2, #L2X0_R_AUX_CTRL] @ get aux_ctrl value | 40 | ldr r1, [r2, #L2X0_R_AUX_CTRL] @ get aux_ctrl value |
41 | str r1, [r0, #L2X0_AUX_CTRL] @ restore aux_ctrl | 41 | str r1, [r0, #L2X0_AUX_CTRL] @ restore aux_ctrl |
@@ -43,9 +43,9 @@ ENDPROC(v7_secondary_startup) | |||
43 | str r1, [r0, #L2X0_CTRL] @ re-enable L2 | 43 | str r1, [r0, #L2X0_CTRL] @ re-enable L2 |
44 | .endm | 44 | .endm |
45 | 45 | ||
46 | .globl phys_l2x0_saved_regs | 46 | l2x0_saved_regs_offset: |
47 | phys_l2x0_saved_regs: | 47 | .word l2x0_saved_regs - . |
48 | .long 0 | 48 | |
49 | #else | 49 | #else |
50 | .macro pl310_resume | 50 | .macro pl310_resume |
51 | .endm | 51 | .endm |
diff --git a/arch/arm/mach-imx/imx25-dt.c b/arch/arm/mach-imx/imx25-dt.c index 03b65e5ea541..82348391582a 100644 --- a/arch/arm/mach-imx/imx25-dt.c +++ b/arch/arm/mach-imx/imx25-dt.c | |||
@@ -27,6 +27,11 @@ static const char * const imx25_dt_board_compat[] __initconst = { | |||
27 | NULL | 27 | NULL |
28 | }; | 28 | }; |
29 | 29 | ||
30 | static void __init imx25_timer_init(void) | ||
31 | { | ||
32 | mx25_clocks_init_dt(); | ||
33 | } | ||
34 | |||
30 | DT_MACHINE_START(IMX25_DT, "Freescale i.MX25 (Device Tree Support)") | 35 | DT_MACHINE_START(IMX25_DT, "Freescale i.MX25 (Device Tree Support)") |
31 | .map_io = mx25_map_io, | 36 | .map_io = mx25_map_io, |
32 | .init_early = imx25_init_early, | 37 | .init_early = imx25_init_early, |
diff --git a/arch/arm/mach-imx/pm-imx6q.c b/arch/arm/mach-imx/pm-imx6q.c index ee42d20cba19..5faba7a3c95f 100644 --- a/arch/arm/mach-imx/pm-imx6q.c +++ b/arch/arm/mach-imx/pm-imx6q.c | |||
@@ -22,8 +22,6 @@ | |||
22 | #include "common.h" | 22 | #include "common.h" |
23 | #include "hardware.h" | 23 | #include "hardware.h" |
24 | 24 | ||
25 | extern unsigned long phys_l2x0_saved_regs; | ||
26 | |||
27 | static int imx6q_suspend_finish(unsigned long val) | 25 | static int imx6q_suspend_finish(unsigned long val) |
28 | { | 26 | { |
29 | cpu_do_idle(); | 27 | cpu_do_idle(); |
@@ -57,18 +55,5 @@ static const struct platform_suspend_ops imx6q_pm_ops = { | |||
57 | 55 | ||
58 | void __init imx6q_pm_init(void) | 56 | void __init imx6q_pm_init(void) |
59 | { | 57 | { |
60 | /* | ||
61 | * The l2x0 core code provides an infrastucture to save and restore | ||
62 | * l2x0 registers across suspend/resume cycle. But because imx6q | ||
63 | * retains L2 content during suspend and needs to resume L2 before | ||
64 | * MMU is enabled, it can only utilize register saving support and | ||
65 | * have to take care of restoring on its own. So we save physical | ||
66 | * address of the data structure used by l2x0 core to save registers, | ||
67 | * and later restore the necessary ones in imx6q resume entry. | ||
68 | */ | ||
69 | #ifdef CONFIG_CACHE_L2X0 | ||
70 | phys_l2x0_saved_regs = __pa(&l2x0_saved_regs); | ||
71 | #endif | ||
72 | |||
73 | suspend_set_ops(&imx6q_pm_ops); | 58 | suspend_set_ops(&imx6q_pm_ops); |
74 | } | 59 | } |
diff --git a/arch/arm/mach-ixp4xx/vulcan-setup.c b/arch/arm/mach-ixp4xx/vulcan-setup.c index d42730a1d4ab..d599e354ca57 100644 --- a/arch/arm/mach-ixp4xx/vulcan-setup.c +++ b/arch/arm/mach-ixp4xx/vulcan-setup.c | |||
@@ -163,6 +163,7 @@ static struct platform_device vulcan_max6369 = { | |||
163 | 163 | ||
164 | static struct w1_gpio_platform_data vulcan_w1_gpio_pdata = { | 164 | static struct w1_gpio_platform_data vulcan_w1_gpio_pdata = { |
165 | .pin = 14, | 165 | .pin = 14, |
166 | .ext_pullup_enable_pin = -EINVAL, | ||
166 | }; | 167 | }; |
167 | 168 | ||
168 | static struct platform_device vulcan_w1_gpio = { | 169 | static struct platform_device vulcan_w1_gpio = { |
diff --git a/arch/arm/mach-kirkwood/Makefile b/arch/arm/mach-kirkwood/Makefile index 4cc4bee4d0cf..d805f8078fa3 100644 --- a/arch/arm/mach-kirkwood/Makefile +++ b/arch/arm/mach-kirkwood/Makefile | |||
@@ -1,4 +1,4 @@ | |||
1 | obj-y += common.o addr-map.o irq.o pcie.o mpp.o | 1 | obj-y += common.o irq.o pcie.o mpp.o |
2 | 2 | ||
3 | obj-$(CONFIG_MACH_DB88F6281_BP) += db88f6281-bp-setup.o | 3 | obj-$(CONFIG_MACH_DB88F6281_BP) += db88f6281-bp-setup.o |
4 | obj-$(CONFIG_MACH_RD88F6192_NAS) += rd88f6192-nas-setup.o | 4 | obj-$(CONFIG_MACH_RD88F6192_NAS) += rd88f6192-nas-setup.o |
diff --git a/arch/arm/mach-kirkwood/addr-map.c b/arch/arm/mach-kirkwood/addr-map.c deleted file mode 100644 index 8f0d162a1e1d..000000000000 --- a/arch/arm/mach-kirkwood/addr-map.c +++ /dev/null | |||
@@ -1,91 +0,0 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-kirkwood/addr-map.c | ||
3 | * | ||
4 | * Address map functions for Marvell Kirkwood SoCs | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/init.h> | ||
13 | #include <linux/mbus.h> | ||
14 | #include <linux/io.h> | ||
15 | #include <mach/hardware.h> | ||
16 | #include <plat/addr-map.h> | ||
17 | #include "common.h" | ||
18 | |||
19 | /* | ||
20 | * Generic Address Decode Windows bit settings | ||
21 | */ | ||
22 | #define TARGET_DEV_BUS 1 | ||
23 | #define TARGET_SRAM 3 | ||
24 | #define TARGET_PCIE 4 | ||
25 | #define ATTR_DEV_SPI_ROM 0x1e | ||
26 | #define ATTR_DEV_BOOT 0x1d | ||
27 | #define ATTR_DEV_NAND 0x2f | ||
28 | #define ATTR_DEV_CS3 0x37 | ||
29 | #define ATTR_DEV_CS2 0x3b | ||
30 | #define ATTR_DEV_CS1 0x3d | ||
31 | #define ATTR_DEV_CS0 0x3e | ||
32 | #define ATTR_PCIE_IO 0xe0 | ||
33 | #define ATTR_PCIE_MEM 0xe8 | ||
34 | #define ATTR_PCIE1_IO 0xd0 | ||
35 | #define ATTR_PCIE1_MEM 0xd8 | ||
36 | #define ATTR_SRAM 0x01 | ||
37 | |||
38 | /* | ||
39 | * Description of the windows needed by the platform code | ||
40 | */ | ||
41 | static struct __initdata orion_addr_map_cfg addr_map_cfg = { | ||
42 | .num_wins = 8, | ||
43 | .remappable_wins = 4, | ||
44 | .bridge_virt_base = BRIDGE_VIRT_BASE, | ||
45 | }; | ||
46 | |||
47 | static const struct __initdata orion_addr_map_info addr_map_info[] = { | ||
48 | /* | ||
49 | * Windows for PCIe IO+MEM space. | ||
50 | */ | ||
51 | { 0, KIRKWOOD_PCIE_IO_PHYS_BASE, KIRKWOOD_PCIE_IO_SIZE, | ||
52 | TARGET_PCIE, ATTR_PCIE_IO, KIRKWOOD_PCIE_IO_BUS_BASE | ||
53 | }, | ||
54 | { 1, KIRKWOOD_PCIE_MEM_PHYS_BASE, KIRKWOOD_PCIE_MEM_SIZE, | ||
55 | TARGET_PCIE, ATTR_PCIE_MEM, KIRKWOOD_PCIE_MEM_BUS_BASE | ||
56 | }, | ||
57 | { 2, KIRKWOOD_PCIE1_IO_PHYS_BASE, KIRKWOOD_PCIE1_IO_SIZE, | ||
58 | TARGET_PCIE, ATTR_PCIE1_IO, KIRKWOOD_PCIE1_IO_BUS_BASE | ||
59 | }, | ||
60 | { 3, KIRKWOOD_PCIE1_MEM_PHYS_BASE, KIRKWOOD_PCIE1_MEM_SIZE, | ||
61 | TARGET_PCIE, ATTR_PCIE1_MEM, KIRKWOOD_PCIE1_MEM_BUS_BASE | ||
62 | }, | ||
63 | /* | ||
64 | * Window for NAND controller. | ||
65 | */ | ||
66 | { 4, KIRKWOOD_NAND_MEM_PHYS_BASE, KIRKWOOD_NAND_MEM_SIZE, | ||
67 | TARGET_DEV_BUS, ATTR_DEV_NAND, -1 | ||
68 | }, | ||
69 | /* | ||
70 | * Window for SRAM. | ||
71 | */ | ||
72 | { 5, KIRKWOOD_SRAM_PHYS_BASE, KIRKWOOD_SRAM_SIZE, | ||
73 | TARGET_SRAM, ATTR_SRAM, -1 | ||
74 | }, | ||
75 | /* End marker */ | ||
76 | { -1, 0, 0, 0, 0, 0 } | ||
77 | }; | ||
78 | |||
79 | void __init kirkwood_setup_cpu_mbus(void) | ||
80 | { | ||
81 | /* | ||
82 | * Disable, clear and configure windows. | ||
83 | */ | ||
84 | orion_config_wins(&addr_map_cfg, addr_map_info); | ||
85 | |||
86 | /* | ||
87 | * Setup MBUS dram target info. | ||
88 | */ | ||
89 | orion_setup_cpu_mbus_target(&addr_map_cfg, | ||
90 | (void __iomem *) DDR_WINDOW_CPU_BASE); | ||
91 | } | ||
diff --git a/arch/arm/mach-kirkwood/board-dt.c b/arch/arm/mach-kirkwood/board-dt.c index d367aa6b47bb..f5437c27dc2a 100644 --- a/arch/arm/mach-kirkwood/board-dt.c +++ b/arch/arm/mach-kirkwood/board-dt.c | |||
@@ -93,7 +93,7 @@ static void __init kirkwood_dt_init(void) | |||
93 | */ | 93 | */ |
94 | writel(readl(CPU_CONFIG) & ~CPU_CONFIG_ERROR_PROP, CPU_CONFIG); | 94 | writel(readl(CPU_CONFIG) & ~CPU_CONFIG_ERROR_PROP, CPU_CONFIG); |
95 | 95 | ||
96 | kirkwood_setup_cpu_mbus(); | 96 | kirkwood_setup_wins(); |
97 | 97 | ||
98 | kirkwood_l2_init(); | 98 | kirkwood_l2_init(); |
99 | 99 | ||
diff --git a/arch/arm/mach-kirkwood/common.c b/arch/arm/mach-kirkwood/common.c index 49792a0cd2d3..c2cae69e6d2b 100644 --- a/arch/arm/mach-kirkwood/common.c +++ b/arch/arm/mach-kirkwood/common.c | |||
@@ -33,7 +33,6 @@ | |||
33 | #include <linux/platform_data/usb-ehci-orion.h> | 33 | #include <linux/platform_data/usb-ehci-orion.h> |
34 | #include <plat/common.h> | 34 | #include <plat/common.h> |
35 | #include <plat/time.h> | 35 | #include <plat/time.h> |
36 | #include <plat/addr-map.h> | ||
37 | #include <linux/platform_data/dma-mv_xor.h> | 36 | #include <linux/platform_data/dma-mv_xor.h> |
38 | #include "common.h" | 37 | #include "common.h" |
39 | 38 | ||
@@ -535,6 +534,9 @@ void __init kirkwood_init_early(void) | |||
535 | * the allocations won't fail. | 534 | * the allocations won't fail. |
536 | */ | 535 | */ |
537 | init_dma_coherent_pool_size(SZ_1M); | 536 | init_dma_coherent_pool_size(SZ_1M); |
537 | mvebu_mbus_init("marvell,kirkwood-mbus", | ||
538 | BRIDGE_WINS_BASE, BRIDGE_WINS_SZ, | ||
539 | DDR_WINDOW_CPU_BASE, DDR_WINDOW_CPU_SZ); | ||
538 | } | 540 | } |
539 | 541 | ||
540 | int kirkwood_tclk; | 542 | int kirkwood_tclk; |
@@ -650,6 +652,38 @@ char * __init kirkwood_id(void) | |||
650 | } | 652 | } |
651 | } | 653 | } |
652 | 654 | ||
655 | void __init kirkwood_setup_wins(void) | ||
656 | { | ||
657 | /* | ||
658 | * The PCIe windows will no longer be statically allocated | ||
659 | * here once Kirkwood is migrated to the pci-mvebu driver. | ||
660 | */ | ||
661 | mvebu_mbus_add_window_remap_flags("pcie0.0", | ||
662 | KIRKWOOD_PCIE_IO_PHYS_BASE, | ||
663 | KIRKWOOD_PCIE_IO_SIZE, | ||
664 | KIRKWOOD_PCIE_IO_BUS_BASE, | ||
665 | MVEBU_MBUS_PCI_IO); | ||
666 | mvebu_mbus_add_window_remap_flags("pcie0.0", | ||
667 | KIRKWOOD_PCIE_MEM_PHYS_BASE, | ||
668 | KIRKWOOD_PCIE_MEM_SIZE, | ||
669 | MVEBU_MBUS_NO_REMAP, | ||
670 | MVEBU_MBUS_PCI_MEM); | ||
671 | mvebu_mbus_add_window_remap_flags("pcie1.0", | ||
672 | KIRKWOOD_PCIE1_IO_PHYS_BASE, | ||
673 | KIRKWOOD_PCIE1_IO_SIZE, | ||
674 | KIRKWOOD_PCIE1_IO_BUS_BASE, | ||
675 | MVEBU_MBUS_PCI_IO); | ||
676 | mvebu_mbus_add_window_remap_flags("pcie1.0", | ||
677 | KIRKWOOD_PCIE1_MEM_PHYS_BASE, | ||
678 | KIRKWOOD_PCIE1_MEM_SIZE, | ||
679 | MVEBU_MBUS_NO_REMAP, | ||
680 | MVEBU_MBUS_PCI_MEM); | ||
681 | mvebu_mbus_add_window("nand", KIRKWOOD_NAND_MEM_PHYS_BASE, | ||
682 | KIRKWOOD_NAND_MEM_SIZE); | ||
683 | mvebu_mbus_add_window("sram", KIRKWOOD_SRAM_PHYS_BASE, | ||
684 | KIRKWOOD_SRAM_SIZE); | ||
685 | } | ||
686 | |||
653 | void __init kirkwood_l2_init(void) | 687 | void __init kirkwood_l2_init(void) |
654 | { | 688 | { |
655 | #ifdef CONFIG_CACHE_FEROCEON_L2 | 689 | #ifdef CONFIG_CACHE_FEROCEON_L2 |
@@ -675,7 +709,7 @@ void __init kirkwood_init(void) | |||
675 | */ | 709 | */ |
676 | writel(readl(CPU_CONFIG) & ~CPU_CONFIG_ERROR_PROP, CPU_CONFIG); | 710 | writel(readl(CPU_CONFIG) & ~CPU_CONFIG_ERROR_PROP, CPU_CONFIG); |
677 | 711 | ||
678 | kirkwood_setup_cpu_mbus(); | 712 | kirkwood_setup_wins(); |
679 | 713 | ||
680 | kirkwood_l2_init(); | 714 | kirkwood_l2_init(); |
681 | 715 | ||
diff --git a/arch/arm/mach-kirkwood/common.h b/arch/arm/mach-kirkwood/common.h index 5ed70565c843..e24f74305b34 100644 --- a/arch/arm/mach-kirkwood/common.h +++ b/arch/arm/mach-kirkwood/common.h | |||
@@ -30,7 +30,7 @@ void kirkwood_init(void); | |||
30 | void kirkwood_init_early(void); | 30 | void kirkwood_init_early(void); |
31 | void kirkwood_init_irq(void); | 31 | void kirkwood_init_irq(void); |
32 | 32 | ||
33 | void kirkwood_setup_cpu_mbus(void); | 33 | void kirkwood_setup_wins(void); |
34 | 34 | ||
35 | void kirkwood_enable_pcie(void); | 35 | void kirkwood_enable_pcie(void); |
36 | void kirkwood_pcie_id(u32 *dev, u32 *rev); | 36 | void kirkwood_pcie_id(u32 *dev, u32 *rev); |
diff --git a/arch/arm/mach-kirkwood/include/mach/kirkwood.h b/arch/arm/mach-kirkwood/include/mach/kirkwood.h index a05563a31c95..92976cef3910 100644 --- a/arch/arm/mach-kirkwood/include/mach/kirkwood.h +++ b/arch/arm/mach-kirkwood/include/mach/kirkwood.h | |||
@@ -60,8 +60,9 @@ | |||
60 | * Register Map | 60 | * Register Map |
61 | */ | 61 | */ |
62 | #define DDR_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE + 0x00000) | 62 | #define DDR_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE + 0x00000) |
63 | #define DDR_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE + 0x00000) | 63 | #define DDR_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE + 0x00000) |
64 | #define DDR_WINDOW_CPU_BASE (DDR_VIRT_BASE + 0x1500) | 64 | #define DDR_WINDOW_CPU_BASE (DDR_PHYS_BASE + 0x1500) |
65 | #define DDR_WINDOW_CPU_SZ (0x20) | ||
65 | #define DDR_OPERATION_BASE (DDR_PHYS_BASE + 0x1418) | 66 | #define DDR_OPERATION_BASE (DDR_PHYS_BASE + 0x1418) |
66 | 67 | ||
67 | #define DEV_BUS_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE + 0x10000) | 68 | #define DEV_BUS_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE + 0x10000) |
@@ -80,6 +81,8 @@ | |||
80 | 81 | ||
81 | #define BRIDGE_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE + 0x20000) | 82 | #define BRIDGE_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE + 0x20000) |
82 | #define BRIDGE_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE + 0x20000) | 83 | #define BRIDGE_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE + 0x20000) |
84 | #define BRIDGE_WINS_BASE (BRIDGE_PHYS_BASE) | ||
85 | #define BRIDGE_WINS_SZ (0x80) | ||
83 | 86 | ||
84 | #define CRYPTO_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE + 0x30000) | 87 | #define CRYPTO_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE + 0x30000) |
85 | 88 | ||
diff --git a/arch/arm/mach-kirkwood/pcie.c b/arch/arm/mach-kirkwood/pcie.c index d96ad4c09972..7f43e6c2f8c0 100644 --- a/arch/arm/mach-kirkwood/pcie.c +++ b/arch/arm/mach-kirkwood/pcie.c | |||
@@ -17,7 +17,6 @@ | |||
17 | #include <asm/mach/pci.h> | 17 | #include <asm/mach/pci.h> |
18 | #include <plat/pcie.h> | 18 | #include <plat/pcie.h> |
19 | #include <mach/bridge-regs.h> | 19 | #include <mach/bridge-regs.h> |
20 | #include <plat/addr-map.h> | ||
21 | #include "common.h" | 20 | #include "common.h" |
22 | 21 | ||
23 | static void kirkwood_enable_pcie_clk(const char *port) | 22 | static void kirkwood_enable_pcie_clk(const char *port) |
diff --git a/arch/arm/mach-mmp/gplugd.c b/arch/arm/mach-mmp/gplugd.c index d1e2d595e79c..f62b68d926f4 100644 --- a/arch/arm/mach-mmp/gplugd.c +++ b/arch/arm/mach-mmp/gplugd.c | |||
@@ -9,6 +9,7 @@ | |||
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
12 | #include <linux/platform_device.h> | ||
12 | #include <linux/gpio.h> | 13 | #include <linux/gpio.h> |
13 | 14 | ||
14 | #include <asm/mach/arch.h> | 15 | #include <asm/mach/arch.h> |
diff --git a/arch/arm/mach-mv78xx0/Makefile b/arch/arm/mach-mv78xx0/Makefile index 67a13f9bfe64..7cd04634d302 100644 --- a/arch/arm/mach-mv78xx0/Makefile +++ b/arch/arm/mach-mv78xx0/Makefile | |||
@@ -1,4 +1,4 @@ | |||
1 | obj-y += common.o addr-map.o mpp.o irq.o pcie.o | 1 | obj-y += common.o mpp.o irq.o pcie.o |
2 | obj-$(CONFIG_MACH_DB78X00_BP) += db78x00-bp-setup.o | 2 | obj-$(CONFIG_MACH_DB78X00_BP) += db78x00-bp-setup.o |
3 | obj-$(CONFIG_MACH_RD78X00_MASA) += rd78x00-masa-setup.o | 3 | obj-$(CONFIG_MACH_RD78X00_MASA) += rd78x00-masa-setup.o |
4 | obj-$(CONFIG_MACH_TERASTATION_WXL) += buffalo-wxl-setup.o | 4 | obj-$(CONFIG_MACH_TERASTATION_WXL) += buffalo-wxl-setup.o |
diff --git a/arch/arm/mach-mv78xx0/addr-map.c b/arch/arm/mach-mv78xx0/addr-map.c deleted file mode 100644 index 26e9876b50e9..000000000000 --- a/arch/arm/mach-mv78xx0/addr-map.c +++ /dev/null | |||
@@ -1,93 +0,0 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-mv78xx0/addr-map.c | ||
3 | * | ||
4 | * Address map functions for Marvell MV78xx0 SoCs | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/init.h> | ||
13 | #include <linux/mbus.h> | ||
14 | #include <linux/io.h> | ||
15 | #include <plat/addr-map.h> | ||
16 | #include <mach/mv78xx0.h> | ||
17 | #include "common.h" | ||
18 | |||
19 | /* | ||
20 | * Generic Address Decode Windows bit settings | ||
21 | */ | ||
22 | #define TARGET_DEV_BUS 1 | ||
23 | #define TARGET_PCIE0 4 | ||
24 | #define TARGET_PCIE1 8 | ||
25 | #define TARGET_PCIE(i) ((i) ? TARGET_PCIE1 : TARGET_PCIE0) | ||
26 | #define ATTR_DEV_SPI_ROM 0x1f | ||
27 | #define ATTR_DEV_BOOT 0x2f | ||
28 | #define ATTR_DEV_CS3 0x37 | ||
29 | #define ATTR_DEV_CS2 0x3b | ||
30 | #define ATTR_DEV_CS1 0x3d | ||
31 | #define ATTR_DEV_CS0 0x3e | ||
32 | #define ATTR_PCIE_IO(l) (0xf0 & ~(0x10 << (l))) | ||
33 | #define ATTR_PCIE_MEM(l) (0xf8 & ~(0x10 << (l))) | ||
34 | |||
35 | /* | ||
36 | * CPU Address Decode Windows registers | ||
37 | */ | ||
38 | #define WIN0_OFF(n) (BRIDGE_VIRT_BASE + 0x0000 + ((n) << 4)) | ||
39 | #define WIN8_OFF(n) (BRIDGE_VIRT_BASE + 0x0900 + (((n) - 8) << 4)) | ||
40 | |||
41 | static void __init __iomem *win_cfg_base(const struct orion_addr_map_cfg *cfg, int win) | ||
42 | { | ||
43 | /* | ||
44 | * Find the control register base address for this window. | ||
45 | * | ||
46 | * BRIDGE_VIRT_BASE points to the right (CPU0's or CPU1's) | ||
47 | * MBUS bridge depending on which CPU core we're running on, | ||
48 | * so we don't need to take that into account here. | ||
49 | */ | ||
50 | |||
51 | return (win < 8) ? WIN0_OFF(win) : WIN8_OFF(win); | ||
52 | } | ||
53 | |||
54 | /* | ||
55 | * Description of the windows needed by the platform code | ||
56 | */ | ||
57 | static struct orion_addr_map_cfg addr_map_cfg __initdata = { | ||
58 | .num_wins = 14, | ||
59 | .remappable_wins = 8, | ||
60 | .win_cfg_base = win_cfg_base, | ||
61 | }; | ||
62 | |||
63 | void __init mv78xx0_setup_cpu_mbus(void) | ||
64 | { | ||
65 | /* | ||
66 | * Disable, clear and configure windows. | ||
67 | */ | ||
68 | orion_config_wins(&addr_map_cfg, NULL); | ||
69 | |||
70 | /* | ||
71 | * Setup MBUS dram target info. | ||
72 | */ | ||
73 | if (mv78xx0_core_index() == 0) | ||
74 | orion_setup_cpu_mbus_target(&addr_map_cfg, | ||
75 | (void __iomem *) DDR_WINDOW_CPU0_BASE); | ||
76 | else | ||
77 | orion_setup_cpu_mbus_target(&addr_map_cfg, | ||
78 | (void __iomem *) DDR_WINDOW_CPU1_BASE); | ||
79 | } | ||
80 | |||
81 | void __init mv78xx0_setup_pcie_io_win(int window, u32 base, u32 size, | ||
82 | int maj, int min) | ||
83 | { | ||
84 | orion_setup_cpu_win(&addr_map_cfg, window, base, size, | ||
85 | TARGET_PCIE(maj), ATTR_PCIE_IO(min), 0); | ||
86 | } | ||
87 | |||
88 | void __init mv78xx0_setup_pcie_mem_win(int window, u32 base, u32 size, | ||
89 | int maj, int min) | ||
90 | { | ||
91 | orion_setup_cpu_win(&addr_map_cfg, window, base, size, | ||
92 | TARGET_PCIE(maj), ATTR_PCIE_MEM(min), -1); | ||
93 | } | ||
diff --git a/arch/arm/mach-mv78xx0/common.c b/arch/arm/mach-mv78xx0/common.c index 0efa14498ebc..749a7f8c4992 100644 --- a/arch/arm/mach-mv78xx0/common.c +++ b/arch/arm/mach-mv78xx0/common.c | |||
@@ -334,6 +334,14 @@ void __init mv78xx0_uart3_init(void) | |||
334 | void __init mv78xx0_init_early(void) | 334 | void __init mv78xx0_init_early(void) |
335 | { | 335 | { |
336 | orion_time_set_base(TIMER_VIRT_BASE); | 336 | orion_time_set_base(TIMER_VIRT_BASE); |
337 | if (mv78xx0_core_index() == 0) | ||
338 | mvebu_mbus_init("marvell,mv78xx0-mbus", | ||
339 | BRIDGE_WINS_CPU0_BASE, BRIDGE_WINS_SZ, | ||
340 | DDR_WINDOW_CPU0_BASE, DDR_WINDOW_CPU_SZ); | ||
341 | else | ||
342 | mvebu_mbus_init("marvell,mv78xx0-mbus", | ||
343 | BRIDGE_WINS_CPU1_BASE, BRIDGE_WINS_SZ, | ||
344 | DDR_WINDOW_CPU1_BASE, DDR_WINDOW_CPU_SZ); | ||
337 | } | 345 | } |
338 | 346 | ||
339 | void __init_refok mv78xx0_timer_init(void) | 347 | void __init_refok mv78xx0_timer_init(void) |
@@ -397,8 +405,6 @@ void __init mv78xx0_init(void) | |||
397 | printk("HCLK = %dMHz, ", (hclk + 499999) / 1000000); | 405 | printk("HCLK = %dMHz, ", (hclk + 499999) / 1000000); |
398 | printk("TCLK = %dMHz\n", (get_tclk() + 499999) / 1000000); | 406 | printk("TCLK = %dMHz\n", (get_tclk() + 499999) / 1000000); |
399 | 407 | ||
400 | mv78xx0_setup_cpu_mbus(); | ||
401 | |||
402 | #ifdef CONFIG_CACHE_FEROCEON_L2 | 408 | #ifdef CONFIG_CACHE_FEROCEON_L2 |
403 | feroceon_l2_init(is_l2_writethrough()); | 409 | feroceon_l2_init(is_l2_writethrough()); |
404 | #endif | 410 | #endif |
diff --git a/arch/arm/mach-mv78xx0/include/mach/mv78xx0.h b/arch/arm/mach-mv78xx0/include/mach/mv78xx0.h index 46200a183cf2..723748d8ba7d 100644 --- a/arch/arm/mach-mv78xx0/include/mach/mv78xx0.h +++ b/arch/arm/mach-mv78xx0/include/mach/mv78xx0.h | |||
@@ -60,13 +60,18 @@ | |||
60 | */ | 60 | */ |
61 | #define BRIDGE_VIRT_BASE (MV78XX0_CORE_REGS_VIRT_BASE) | 61 | #define BRIDGE_VIRT_BASE (MV78XX0_CORE_REGS_VIRT_BASE) |
62 | #define BRIDGE_PHYS_BASE (MV78XX0_CORE_REGS_PHYS_BASE) | 62 | #define BRIDGE_PHYS_BASE (MV78XX0_CORE_REGS_PHYS_BASE) |
63 | #define BRIDGE_WINS_CPU0_BASE (MV78XX0_CORE0_REGS_PHYS_BASE) | ||
64 | #define BRIDGE_WINS_CPU1_BASE (MV78XX0_CORE1_REGS_PHYS_BASE) | ||
65 | #define BRIDGE_WINS_SZ (0xA000) | ||
63 | 66 | ||
64 | /* | 67 | /* |
65 | * Register Map | 68 | * Register Map |
66 | */ | 69 | */ |
67 | #define DDR_VIRT_BASE (MV78XX0_REGS_VIRT_BASE + 0x00000) | 70 | #define DDR_VIRT_BASE (MV78XX0_REGS_VIRT_BASE + 0x00000) |
68 | #define DDR_WINDOW_CPU0_BASE (DDR_VIRT_BASE + 0x1500) | 71 | #define DDR_PHYS_BASE (MV78XX0_REGS_PHYS_BASE + 0x00000) |
69 | #define DDR_WINDOW_CPU1_BASE (DDR_VIRT_BASE + 0x1570) | 72 | #define DDR_WINDOW_CPU0_BASE (DDR_PHYS_BASE + 0x1500) |
73 | #define DDR_WINDOW_CPU1_BASE (DDR_PHYS_BASE + 0x1570) | ||
74 | #define DDR_WINDOW_CPU_SZ (0x20) | ||
70 | 75 | ||
71 | #define DEV_BUS_PHYS_BASE (MV78XX0_REGS_PHYS_BASE + 0x10000) | 76 | #define DEV_BUS_PHYS_BASE (MV78XX0_REGS_PHYS_BASE + 0x10000) |
72 | #define DEV_BUS_VIRT_BASE (MV78XX0_REGS_VIRT_BASE + 0x10000) | 77 | #define DEV_BUS_VIRT_BASE (MV78XX0_REGS_VIRT_BASE + 0x10000) |
diff --git a/arch/arm/mach-mv78xx0/pcie.c b/arch/arm/mach-mv78xx0/pcie.c index ee8c0b51df2c..dc26a654c496 100644 --- a/arch/arm/mach-mv78xx0/pcie.c +++ b/arch/arm/mach-mv78xx0/pcie.c | |||
@@ -10,11 +10,11 @@ | |||
10 | 10 | ||
11 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
12 | #include <linux/pci.h> | 12 | #include <linux/pci.h> |
13 | #include <linux/mbus.h> | ||
13 | #include <video/vga.h> | 14 | #include <video/vga.h> |
14 | #include <asm/irq.h> | 15 | #include <asm/irq.h> |
15 | #include <asm/mach/pci.h> | 16 | #include <asm/mach/pci.h> |
16 | #include <plat/pcie.h> | 17 | #include <plat/pcie.h> |
17 | #include <plat/addr-map.h> | ||
18 | #include <mach/mv78xx0.h> | 18 | #include <mach/mv78xx0.h> |
19 | #include "common.h" | 19 | #include "common.h" |
20 | 20 | ||
@@ -54,7 +54,6 @@ static void __init mv78xx0_pcie_preinit(void) | |||
54 | int i; | 54 | int i; |
55 | u32 size_each; | 55 | u32 size_each; |
56 | u32 start; | 56 | u32 start; |
57 | int win = 0; | ||
58 | 57 | ||
59 | pcie_io_space.name = "PCIe I/O Space"; | 58 | pcie_io_space.name = "PCIe I/O Space"; |
60 | pcie_io_space.start = MV78XX0_PCIE_IO_PHYS_BASE(0); | 59 | pcie_io_space.start = MV78XX0_PCIE_IO_PHYS_BASE(0); |
@@ -72,6 +71,7 @@ static void __init mv78xx0_pcie_preinit(void) | |||
72 | start = MV78XX0_PCIE_MEM_PHYS_BASE; | 71 | start = MV78XX0_PCIE_MEM_PHYS_BASE; |
73 | for (i = 0; i < num_pcie_ports; i++) { | 72 | for (i = 0; i < num_pcie_ports; i++) { |
74 | struct pcie_port *pp = pcie_port + i; | 73 | struct pcie_port *pp = pcie_port + i; |
74 | char winname[MVEBU_MBUS_MAX_WINNAME_SZ]; | ||
75 | 75 | ||
76 | snprintf(pp->mem_space_name, sizeof(pp->mem_space_name), | 76 | snprintf(pp->mem_space_name, sizeof(pp->mem_space_name), |
77 | "PCIe %d.%d MEM", pp->maj, pp->min); | 77 | "PCIe %d.%d MEM", pp->maj, pp->min); |
@@ -85,12 +85,17 @@ static void __init mv78xx0_pcie_preinit(void) | |||
85 | if (request_resource(&iomem_resource, &pp->res)) | 85 | if (request_resource(&iomem_resource, &pp->res)) |
86 | panic("can't allocate PCIe MEM sub-space"); | 86 | panic("can't allocate PCIe MEM sub-space"); |
87 | 87 | ||
88 | mv78xx0_setup_pcie_mem_win(win + i + 8, pp->res.start, | 88 | snprintf(winname, sizeof(winname), "pcie%d.%d", |
89 | resource_size(&pp->res), | 89 | pp->maj, pp->min); |
90 | pp->maj, pp->min); | 90 | |
91 | 91 | mvebu_mbus_add_window_remap_flags(winname, | |
92 | mv78xx0_setup_pcie_io_win(win + i, i * SZ_64K, SZ_64K, | 92 | pp->res.start, |
93 | pp->maj, pp->min); | 93 | resource_size(&pp->res), |
94 | MVEBU_MBUS_NO_REMAP, | ||
95 | MVEBU_MBUS_PCI_MEM); | ||
96 | mvebu_mbus_add_window_remap_flags(winname, | ||
97 | i * SZ_64K, SZ_64K, | ||
98 | 0, MVEBU_MBUS_PCI_IO); | ||
94 | } | 99 | } |
95 | } | 100 | } |
96 | 101 | ||
diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig index 440b13ef1fed..e11acbb0a46d 100644 --- a/arch/arm/mach-mvebu/Kconfig +++ b/arch/arm/mach-mvebu/Kconfig | |||
@@ -13,6 +13,8 @@ config ARCH_MVEBU | |||
13 | select MVEBU_CLK_CORE | 13 | select MVEBU_CLK_CORE |
14 | select MVEBU_CLK_CPU | 14 | select MVEBU_CLK_CPU |
15 | select MVEBU_CLK_GATING | 15 | select MVEBU_CLK_GATING |
16 | select MVEBU_MBUS | ||
17 | select ZONE_DMA if ARM_LPAE | ||
16 | 18 | ||
17 | if ARCH_MVEBU | 19 | if ARCH_MVEBU |
18 | 20 | ||
diff --git a/arch/arm/mach-mvebu/Makefile b/arch/arm/mach-mvebu/Makefile index da93bcbc74c1..ba769e082ad4 100644 --- a/arch/arm/mach-mvebu/Makefile +++ b/arch/arm/mach-mvebu/Makefile | |||
@@ -5,6 +5,6 @@ AFLAGS_coherency_ll.o := -Wa,-march=armv7-a | |||
5 | 5 | ||
6 | obj-y += system-controller.o | 6 | obj-y += system-controller.o |
7 | obj-$(CONFIG_MACH_ARMADA_370_XP) += armada-370-xp.o | 7 | obj-$(CONFIG_MACH_ARMADA_370_XP) += armada-370-xp.o |
8 | obj-$(CONFIG_ARCH_MVEBU) += addr-map.o coherency.o coherency_ll.o pmsu.o irq-armada-370-xp.o | 8 | obj-$(CONFIG_ARCH_MVEBU) += coherency.o coherency_ll.o pmsu.o irq-armada-370-xp.o |
9 | obj-$(CONFIG_SMP) += platsmp.o headsmp.o | 9 | obj-$(CONFIG_SMP) += platsmp.o headsmp.o |
10 | obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o | 10 | obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o |
diff --git a/arch/arm/mach-mvebu/addr-map.c b/arch/arm/mach-mvebu/addr-map.c deleted file mode 100644 index ab9b3bd4fef5..000000000000 --- a/arch/arm/mach-mvebu/addr-map.c +++ /dev/null | |||
@@ -1,137 +0,0 @@ | |||
1 | /* | ||
2 | * Address map functions for Marvell 370 / XP SoCs | ||
3 | * | ||
4 | * Copyright (C) 2012 Marvell | ||
5 | * | ||
6 | * Thomas Petazzoni <thomas.petazzoni@free-electrons.com> | ||
7 | * | ||
8 | * This file is licensed under the terms of the GNU General Public | ||
9 | * License version 2. This program is licensed "as is" without any | ||
10 | * warranty of any kind, whether express or implied. | ||
11 | */ | ||
12 | |||
13 | #include <linux/kernel.h> | ||
14 | #include <linux/init.h> | ||
15 | #include <linux/mbus.h> | ||
16 | #include <linux/io.h> | ||
17 | #include <linux/of.h> | ||
18 | #include <linux/of_address.h> | ||
19 | #include <plat/addr-map.h> | ||
20 | |||
21 | /* | ||
22 | * Generic Address Decode Windows bit settings | ||
23 | */ | ||
24 | #define ARMADA_XP_TARGET_DEV_BUS 1 | ||
25 | #define ARMADA_XP_ATTR_DEV_BOOTROM 0x1D | ||
26 | #define ARMADA_XP_TARGET_ETH1 3 | ||
27 | #define ARMADA_XP_TARGET_PCIE_0_2 4 | ||
28 | #define ARMADA_XP_TARGET_ETH0 7 | ||
29 | #define ARMADA_XP_TARGET_PCIE_1_3 8 | ||
30 | |||
31 | #define ARMADA_370_TARGET_DEV_BUS 1 | ||
32 | #define ARMADA_370_ATTR_DEV_BOOTROM 0x1D | ||
33 | #define ARMADA_370_TARGET_PCIE_0 4 | ||
34 | #define ARMADA_370_TARGET_PCIE_1 8 | ||
35 | |||
36 | #define ARMADA_WINDOW_8_PLUS_OFFSET 0x90 | ||
37 | #define ARMADA_SDRAM_ADDR_DECODING_OFFSET 0x180 | ||
38 | |||
39 | static const struct __initdata orion_addr_map_info | ||
40 | armada_xp_addr_map_info[] = { | ||
41 | /* | ||
42 | * Window for the BootROM, needed for SMP on Armada XP | ||
43 | */ | ||
44 | { 0, 0xfff00000, SZ_1M, ARMADA_XP_TARGET_DEV_BUS, | ||
45 | ARMADA_XP_ATTR_DEV_BOOTROM, -1 }, | ||
46 | /* End marker */ | ||
47 | { -1, 0, 0, 0, 0, 0 }, | ||
48 | }; | ||
49 | |||
50 | static const struct __initdata orion_addr_map_info | ||
51 | armada_370_addr_map_info[] = { | ||
52 | /* End marker */ | ||
53 | { -1, 0, 0, 0, 0, 0 }, | ||
54 | }; | ||
55 | |||
56 | static struct of_device_id of_addr_decoding_controller_table[] = { | ||
57 | { .compatible = "marvell,armada-addr-decoding-controller" }, | ||
58 | { /* end of list */ }, | ||
59 | }; | ||
60 | |||
61 | static void __iomem * | ||
62 | armada_cfg_base(const struct orion_addr_map_cfg *cfg, int win) | ||
63 | { | ||
64 | unsigned int offset; | ||
65 | |||
66 | /* The register layout is a bit annoying and the below code | ||
67 | * tries to cope with it. | ||
68 | * - At offset 0x0, there are the registers for the first 8 | ||
69 | * windows, with 4 registers of 32 bits per window (ctrl, | ||
70 | * base, remap low, remap high) | ||
71 | * - Then at offset 0x80, there is a hole of 0x10 bytes for | ||
72 | * the internal registers base address and internal units | ||
73 | * sync barrier register. | ||
74 | * - Then at offset 0x90, there the registers for 12 | ||
75 | * windows, with only 2 registers of 32 bits per window | ||
76 | * (ctrl, base). | ||
77 | */ | ||
78 | if (win < 8) | ||
79 | offset = (win << 4); | ||
80 | else | ||
81 | offset = ARMADA_WINDOW_8_PLUS_OFFSET + ((win - 8) << 3); | ||
82 | |||
83 | return cfg->bridge_virt_base + offset; | ||
84 | } | ||
85 | |||
86 | static struct __initdata orion_addr_map_cfg addr_map_cfg = { | ||
87 | .num_wins = 20, | ||
88 | .remappable_wins = 8, | ||
89 | .win_cfg_base = armada_cfg_base, | ||
90 | }; | ||
91 | |||
92 | static int __init armada_setup_cpu_mbus(void) | ||
93 | { | ||
94 | struct device_node *np; | ||
95 | void __iomem *mbus_unit_addr_decoding_base; | ||
96 | void __iomem *sdram_addr_decoding_base; | ||
97 | |||
98 | np = of_find_matching_node(NULL, of_addr_decoding_controller_table); | ||
99 | if (!np) | ||
100 | return -ENODEV; | ||
101 | |||
102 | mbus_unit_addr_decoding_base = of_iomap(np, 0); | ||
103 | BUG_ON(!mbus_unit_addr_decoding_base); | ||
104 | |||
105 | sdram_addr_decoding_base = | ||
106 | mbus_unit_addr_decoding_base + | ||
107 | ARMADA_SDRAM_ADDR_DECODING_OFFSET; | ||
108 | |||
109 | addr_map_cfg.bridge_virt_base = mbus_unit_addr_decoding_base; | ||
110 | |||
111 | if (of_find_compatible_node(NULL, NULL, "marvell,coherency-fabric")) | ||
112 | addr_map_cfg.hw_io_coherency = 1; | ||
113 | |||
114 | /* | ||
115 | * Disable, clear and configure windows. | ||
116 | */ | ||
117 | if (of_machine_is_compatible("marvell,armadaxp")) | ||
118 | orion_config_wins(&addr_map_cfg, armada_xp_addr_map_info); | ||
119 | else if (of_machine_is_compatible("marvell,armada370")) | ||
120 | orion_config_wins(&addr_map_cfg, armada_370_addr_map_info); | ||
121 | else { | ||
122 | pr_err("Unsupported SoC\n"); | ||
123 | return -EINVAL; | ||
124 | } | ||
125 | |||
126 | /* | ||
127 | * Setup MBUS dram target info. | ||
128 | */ | ||
129 | orion_setup_cpu_mbus_target(&addr_map_cfg, | ||
130 | sdram_addr_decoding_base); | ||
131 | return 0; | ||
132 | } | ||
133 | |||
134 | /* Using a early_initcall is needed so that this initialization gets | ||
135 | * done before the SMP initialization, which requires the BootROM to | ||
136 | * be remapped. */ | ||
137 | early_initcall(armada_setup_cpu_mbus); | ||
diff --git a/arch/arm/mach-mvebu/armada-370-xp.c b/arch/arm/mach-mvebu/armada-370-xp.c index a5ea616d6d12..12d3655830d1 100644 --- a/arch/arm/mach-mvebu/armada-370-xp.c +++ b/arch/arm/mach-mvebu/armada-370-xp.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/time-armada-370-xp.h> | 19 | #include <linux/time-armada-370-xp.h> |
20 | #include <linux/clk/mvebu.h> | 20 | #include <linux/clk/mvebu.h> |
21 | #include <linux/dma-mapping.h> | 21 | #include <linux/dma-mapping.h> |
22 | #include <linux/mbus.h> | ||
22 | #include <asm/mach/arch.h> | 23 | #include <asm/mach/arch.h> |
23 | #include <asm/mach/map.h> | 24 | #include <asm/mach/map.h> |
24 | #include <asm/mach/time.h> | 25 | #include <asm/mach/time.h> |
@@ -48,12 +49,29 @@ void __init armada_370_xp_timer_and_clk_init(void) | |||
48 | 49 | ||
49 | void __init armada_370_xp_init_early(void) | 50 | void __init armada_370_xp_init_early(void) |
50 | { | 51 | { |
52 | char *mbus_soc_name; | ||
53 | |||
51 | /* | 54 | /* |
52 | * Some Armada 370/XP devices allocate their coherent buffers | 55 | * Some Armada 370/XP devices allocate their coherent buffers |
53 | * from atomic context. Increase size of atomic coherent pool | 56 | * from atomic context. Increase size of atomic coherent pool |
54 | * to make sure such the allocations won't fail. | 57 | * to make sure such the allocations won't fail. |
55 | */ | 58 | */ |
56 | init_dma_coherent_pool_size(SZ_1M); | 59 | init_dma_coherent_pool_size(SZ_1M); |
60 | |||
61 | /* | ||
62 | * This initialization will be replaced by a DT-based | ||
63 | * initialization once the mvebu-mbus driver gains DT support. | ||
64 | */ | ||
65 | if (of_machine_is_compatible("marvell,armada370")) | ||
66 | mbus_soc_name = "marvell,armada370-mbus"; | ||
67 | else | ||
68 | mbus_soc_name = "marvell,armadaxp-mbus"; | ||
69 | |||
70 | mvebu_mbus_init(mbus_soc_name, | ||
71 | ARMADA_370_XP_MBUS_WINS_BASE, | ||
72 | ARMADA_370_XP_MBUS_WINS_SIZE, | ||
73 | ARMADA_370_XP_SDRAM_WINS_BASE, | ||
74 | ARMADA_370_XP_SDRAM_WINS_SIZE); | ||
57 | } | 75 | } |
58 | 76 | ||
59 | static void __init armada_370_xp_dt_init(void) | 77 | static void __init armada_370_xp_dt_init(void) |
diff --git a/arch/arm/mach-mvebu/armada-370-xp.h b/arch/arm/mach-mvebu/armada-370-xp.h index c6a7d74fddfe..2070e1b4f342 100644 --- a/arch/arm/mach-mvebu/armada-370-xp.h +++ b/arch/arm/mach-mvebu/armada-370-xp.h | |||
@@ -16,9 +16,15 @@ | |||
16 | #define __MACH_ARMADA_370_XP_H | 16 | #define __MACH_ARMADA_370_XP_H |
17 | 17 | ||
18 | #define ARMADA_370_XP_REGS_PHYS_BASE 0xd0000000 | 18 | #define ARMADA_370_XP_REGS_PHYS_BASE 0xd0000000 |
19 | #define ARMADA_370_XP_REGS_VIRT_BASE IOMEM(0xfeb00000) | 19 | #define ARMADA_370_XP_REGS_VIRT_BASE IOMEM(0xfec00000) |
20 | #define ARMADA_370_XP_REGS_SIZE SZ_1M | 20 | #define ARMADA_370_XP_REGS_SIZE SZ_1M |
21 | 21 | ||
22 | /* These defines can go away once mvebu-mbus has a DT binding */ | ||
23 | #define ARMADA_370_XP_MBUS_WINS_BASE (ARMADA_370_XP_REGS_PHYS_BASE + 0x20000) | ||
24 | #define ARMADA_370_XP_MBUS_WINS_SIZE 0x100 | ||
25 | #define ARMADA_370_XP_SDRAM_WINS_BASE (ARMADA_370_XP_REGS_PHYS_BASE + 0x20180) | ||
26 | #define ARMADA_370_XP_SDRAM_WINS_SIZE 0x20 | ||
27 | |||
22 | #ifdef CONFIG_SMP | 28 | #ifdef CONFIG_SMP |
23 | #include <linux/cpumask.h> | 29 | #include <linux/cpumask.h> |
24 | 30 | ||
diff --git a/arch/arm/mach-mvebu/platsmp.c b/arch/arm/mach-mvebu/platsmp.c index fe16aaf7c19c..875ea748391c 100644 --- a/arch/arm/mach-mvebu/platsmp.c +++ b/arch/arm/mach-mvebu/platsmp.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/smp.h> | 21 | #include <linux/smp.h> |
22 | #include <linux/clk.h> | 22 | #include <linux/clk.h> |
23 | #include <linux/of.h> | 23 | #include <linux/of.h> |
24 | #include <linux/mbus.h> | ||
24 | #include <asm/cacheflush.h> | 25 | #include <asm/cacheflush.h> |
25 | #include <asm/smp_plat.h> | 26 | #include <asm/smp_plat.h> |
26 | #include "common.h" | 27 | #include "common.h" |
@@ -109,6 +110,7 @@ void __init armada_xp_smp_prepare_cpus(unsigned int max_cpus) | |||
109 | set_secondary_cpus_clock(); | 110 | set_secondary_cpus_clock(); |
110 | flush_cache_all(); | 111 | flush_cache_all(); |
111 | set_cpu_coherent(cpu_logical_map(smp_processor_id()), 0); | 112 | set_cpu_coherent(cpu_logical_map(smp_processor_id()), 0); |
113 | mvebu_mbus_add_window("bootrom", 0xfff00000, SZ_1M); | ||
112 | } | 114 | } |
113 | 115 | ||
114 | struct smp_operations armada_xp_smp_ops __initdata = { | 116 | struct smp_operations armada_xp_smp_ops __initdata = { |
diff --git a/arch/arm/mach-mxs/icoll.c b/arch/arm/mach-mxs/icoll.c index 8fb23af154b3..e26eeba46598 100644 --- a/arch/arm/mach-mxs/icoll.c +++ b/arch/arm/mach-mxs/icoll.c | |||
@@ -100,7 +100,7 @@ static struct irq_domain_ops icoll_irq_domain_ops = { | |||
100 | .xlate = irq_domain_xlate_onecell, | 100 | .xlate = irq_domain_xlate_onecell, |
101 | }; | 101 | }; |
102 | 102 | ||
103 | void __init icoll_of_init(struct device_node *np, | 103 | static void __init icoll_of_init(struct device_node *np, |
104 | struct device_node *interrupt_parent) | 104 | struct device_node *interrupt_parent) |
105 | { | 105 | { |
106 | /* | 106 | /* |
diff --git a/arch/arm/mach-mxs/mach-mxs.c b/arch/arm/mach-mxs/mach-mxs.c index 052186713347..3218f1f2c0e0 100644 --- a/arch/arm/mach-mxs/mach-mxs.c +++ b/arch/arm/mach-mxs/mach-mxs.c | |||
@@ -402,17 +402,17 @@ static void __init cfa10049_init(void) | |||
402 | { | 402 | { |
403 | enable_clk_enet_out(); | 403 | enable_clk_enet_out(); |
404 | update_fec_mac_prop(OUI_CRYSTALFONTZ); | 404 | update_fec_mac_prop(OUI_CRYSTALFONTZ); |
405 | |||
406 | mxsfb_pdata.mode_list = cfa10049_video_modes; | ||
407 | mxsfb_pdata.mode_count = ARRAY_SIZE(cfa10049_video_modes); | ||
408 | mxsfb_pdata.default_bpp = 32; | ||
409 | mxsfb_pdata.ld_intf_width = STMLCDIF_18BIT; | ||
405 | } | 410 | } |
406 | 411 | ||
407 | static void __init cfa10037_init(void) | 412 | static void __init cfa10037_init(void) |
408 | { | 413 | { |
409 | enable_clk_enet_out(); | 414 | enable_clk_enet_out(); |
410 | update_fec_mac_prop(OUI_CRYSTALFONTZ); | 415 | update_fec_mac_prop(OUI_CRYSTALFONTZ); |
411 | |||
412 | mxsfb_pdata.mode_list = cfa10049_video_modes; | ||
413 | mxsfb_pdata.mode_count = ARRAY_SIZE(cfa10049_video_modes); | ||
414 | mxsfb_pdata.default_bpp = 32; | ||
415 | mxsfb_pdata.ld_intf_width = STMLCDIF_18BIT; | ||
416 | } | 416 | } |
417 | 417 | ||
418 | static void __init apf28_init(void) | 418 | static void __init apf28_init(void) |
diff --git a/arch/arm/mach-mxs/mm.c b/arch/arm/mach-mxs/mm.c index a4294aa9f301..e63b7d87acbd 100644 --- a/arch/arm/mach-mxs/mm.c +++ b/arch/arm/mach-mxs/mm.c | |||
@@ -18,6 +18,7 @@ | |||
18 | 18 | ||
19 | #include <mach/mx23.h> | 19 | #include <mach/mx23.h> |
20 | #include <mach/mx28.h> | 20 | #include <mach/mx28.h> |
21 | #include <mach/common.h> | ||
21 | 22 | ||
22 | /* | 23 | /* |
23 | * Define the MX23 memory map. | 24 | * Define the MX23 memory map. |
diff --git a/arch/arm/mach-mxs/ocotp.c b/arch/arm/mach-mxs/ocotp.c index 54add60f94c9..1dff46703753 100644 --- a/arch/arm/mach-mxs/ocotp.c +++ b/arch/arm/mach-mxs/ocotp.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <asm/processor.h> /* for cpu_relax() */ | 19 | #include <asm/processor.h> /* for cpu_relax() */ |
20 | 20 | ||
21 | #include <mach/mxs.h> | 21 | #include <mach/mxs.h> |
22 | #include <mach/common.h> | ||
22 | 23 | ||
23 | #define OCOTP_WORD_OFFSET 0x20 | 24 | #define OCOTP_WORD_OFFSET 0x20 |
24 | #define OCOTP_WORD_COUNT 0x20 | 25 | #define OCOTP_WORD_COUNT 0x20 |
diff --git a/arch/arm/mach-omap1/common.h b/arch/arm/mach-omap1/common.h index fb18831e88aa..14f7e9920479 100644 --- a/arch/arm/mach-omap1/common.h +++ b/arch/arm/mach-omap1/common.h | |||
@@ -31,6 +31,8 @@ | |||
31 | 31 | ||
32 | #include <plat/i2c.h> | 32 | #include <plat/i2c.h> |
33 | 33 | ||
34 | #include <mach/irqs.h> | ||
35 | |||
34 | #if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850) | 36 | #if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850) |
35 | void omap7xx_map_io(void); | 37 | void omap7xx_map_io(void); |
36 | #else | 38 | #else |
diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index 49ac3dfebef9..8111cd9ff3e5 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig | |||
@@ -311,9 +311,6 @@ config MACH_OMAP_ZOOM2 | |||
311 | default y | 311 | default y |
312 | select OMAP_PACKAGE_CBB | 312 | select OMAP_PACKAGE_CBB |
313 | select REGULATOR_FIXED_VOLTAGE if REGULATOR | 313 | select REGULATOR_FIXED_VOLTAGE if REGULATOR |
314 | select SERIAL_8250 | ||
315 | select SERIAL_8250_CONSOLE | ||
316 | select SERIAL_CORE_CONSOLE | ||
317 | 314 | ||
318 | config MACH_OMAP_ZOOM3 | 315 | config MACH_OMAP_ZOOM3 |
319 | bool "OMAP3630 Zoom3 board" | 316 | bool "OMAP3630 Zoom3 board" |
@@ -321,9 +318,6 @@ config MACH_OMAP_ZOOM3 | |||
321 | default y | 318 | default y |
322 | select OMAP_PACKAGE_CBP | 319 | select OMAP_PACKAGE_CBP |
323 | select REGULATOR_FIXED_VOLTAGE if REGULATOR | 320 | select REGULATOR_FIXED_VOLTAGE if REGULATOR |
324 | select SERIAL_8250 | ||
325 | select SERIAL_8250_CONSOLE | ||
326 | select SERIAL_CORE_CONSOLE | ||
327 | 321 | ||
328 | config MACH_CM_T35 | 322 | config MACH_CM_T35 |
329 | bool "CompuLab CM-T35/CM-T3730 modules" | 323 | bool "CompuLab CM-T35/CM-T3730 modules" |
diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c index 0274ff7a2a2b..e54a48060198 100644 --- a/arch/arm/mach-omap2/board-generic.c +++ b/arch/arm/mach-omap2/board-generic.c | |||
@@ -102,6 +102,7 @@ DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)") | |||
102 | .init_irq = omap_intc_of_init, | 102 | .init_irq = omap_intc_of_init, |
103 | .handle_irq = omap3_intc_handle_irq, | 103 | .handle_irq = omap3_intc_handle_irq, |
104 | .init_machine = omap_generic_init, | 104 | .init_machine = omap_generic_init, |
105 | .init_late = omap3_init_late, | ||
105 | .init_time = omap3_sync32k_timer_init, | 106 | .init_time = omap3_sync32k_timer_init, |
106 | .dt_compat = omap3_boards_compat, | 107 | .dt_compat = omap3_boards_compat, |
107 | .restart = omap3xxx_restart, | 108 | .restart = omap3xxx_restart, |
@@ -119,6 +120,7 @@ DT_MACHINE_START(OMAP3_GP_DT, "Generic OMAP3-GP (Flattened Device Tree)") | |||
119 | .init_irq = omap_intc_of_init, | 120 | .init_irq = omap_intc_of_init, |
120 | .handle_irq = omap3_intc_handle_irq, | 121 | .handle_irq = omap3_intc_handle_irq, |
121 | .init_machine = omap_generic_init, | 122 | .init_machine = omap_generic_init, |
123 | .init_late = omap3_init_late, | ||
122 | .init_time = omap3_secure_sync32k_timer_init, | 124 | .init_time = omap3_secure_sync32k_timer_init, |
123 | .dt_compat = omap3_gp_boards_compat, | 125 | .dt_compat = omap3_gp_boards_compat, |
124 | .restart = omap3xxx_restart, | 126 | .restart = omap3xxx_restart, |
diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c index f7c4616cbb60..d2ea68ea678a 100644 --- a/arch/arm/mach-omap2/board-rx51.c +++ b/arch/arm/mach-omap2/board-rx51.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/io.h> | 17 | #include <linux/io.h> |
18 | #include <linux/gpio.h> | 18 | #include <linux/gpio.h> |
19 | #include <linux/leds.h> | 19 | #include <linux/leds.h> |
20 | #include <linux/usb/phy.h> | ||
20 | #include <linux/usb/musb.h> | 21 | #include <linux/usb/musb.h> |
21 | #include <linux/platform_data/spi-omap2-mcspi.h> | 22 | #include <linux/platform_data/spi-omap2-mcspi.h> |
22 | 23 | ||
@@ -98,6 +99,7 @@ static void __init rx51_init(void) | |||
98 | sdrc_params = nokia_get_sdram_timings(); | 99 | sdrc_params = nokia_get_sdram_timings(); |
99 | omap_sdrc_init(sdrc_params, sdrc_params); | 100 | omap_sdrc_init(sdrc_params, sdrc_params); |
100 | 101 | ||
102 | usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); | ||
101 | usb_musb_init(&musb_board_data); | 103 | usb_musb_init(&musb_board_data); |
102 | rx51_peripherals_init(); | 104 | rx51_peripherals_init(); |
103 | 105 | ||
diff --git a/arch/arm/mach-omap2/common.h b/arch/arm/mach-omap2/common.h index 0a6b9c7a63da..40f4a03d728f 100644 --- a/arch/arm/mach-omap2/common.h +++ b/arch/arm/mach-omap2/common.h | |||
@@ -108,7 +108,6 @@ void omap35xx_init_late(void); | |||
108 | void omap3630_init_late(void); | 108 | void omap3630_init_late(void); |
109 | void am35xx_init_late(void); | 109 | void am35xx_init_late(void); |
110 | void ti81xx_init_late(void); | 110 | void ti81xx_init_late(void); |
111 | void omap4430_init_late(void); | ||
112 | int omap2_common_pm_late_init(void); | 111 | int omap2_common_pm_late_init(void); |
113 | 112 | ||
114 | #if defined(CONFIG_SOC_OMAP2420) || defined(CONFIG_SOC_OMAP2430) | 113 | #if defined(CONFIG_SOC_OMAP2420) || defined(CONFIG_SOC_OMAP2430) |
diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c index e4b16c8efe8b..410e1bac7815 100644 --- a/arch/arm/mach-omap2/gpmc.c +++ b/arch/arm/mach-omap2/gpmc.c | |||
@@ -1122,9 +1122,6 @@ int gpmc_calc_timings(struct gpmc_timings *gpmc_t, | |||
1122 | /* TODO: remove, see function definition */ | 1122 | /* TODO: remove, see function definition */ |
1123 | gpmc_convert_ps_to_ns(gpmc_t); | 1123 | gpmc_convert_ps_to_ns(gpmc_t); |
1124 | 1124 | ||
1125 | /* Now the GPMC is initialised, unreserve the chip-selects */ | ||
1126 | gpmc_cs_map = 0; | ||
1127 | |||
1128 | return 0; | 1125 | return 0; |
1129 | } | 1126 | } |
1130 | 1127 | ||
@@ -1383,6 +1380,9 @@ static int gpmc_probe(struct platform_device *pdev) | |||
1383 | if (IS_ERR_VALUE(gpmc_setup_irq())) | 1380 | if (IS_ERR_VALUE(gpmc_setup_irq())) |
1384 | dev_warn(gpmc_dev, "gpmc_setup_irq failed\n"); | 1381 | dev_warn(gpmc_dev, "gpmc_setup_irq failed\n"); |
1385 | 1382 | ||
1383 | /* Now the GPMC is initialised, unreserve the chip-selects */ | ||
1384 | gpmc_cs_map = 0; | ||
1385 | |||
1386 | rc = gpmc_probe_dt(pdev); | 1386 | rc = gpmc_probe_dt(pdev); |
1387 | if (rc < 0) { | 1387 | if (rc < 0) { |
1388 | clk_disable_unprepare(gpmc_l3_clk); | 1388 | clk_disable_unprepare(gpmc_l3_clk); |
diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c index 6a217c98db54..f82cf878d6af 100644 --- a/arch/arm/mach-omap2/mux.c +++ b/arch/arm/mach-omap2/mux.c | |||
@@ -211,8 +211,6 @@ static int __init _omap_mux_get_by_name(struct omap_mux_partition *partition, | |||
211 | return -EINVAL; | 211 | return -EINVAL; |
212 | } | 212 | } |
213 | 213 | ||
214 | pr_err("%s: Could not find signal %s\n", __func__, muxname); | ||
215 | |||
216 | return -ENODEV; | 214 | return -ENODEV; |
217 | } | 215 | } |
218 | 216 | ||
@@ -234,6 +232,8 @@ int __init omap_mux_get_by_name(const char *muxname, | |||
234 | return mux_mode; | 232 | return mux_mode; |
235 | } | 233 | } |
236 | 234 | ||
235 | pr_err("%s: Could not find signal %s\n", __func__, muxname); | ||
236 | |||
237 | return -ENODEV; | 237 | return -ENODEV; |
238 | } | 238 | } |
239 | 239 | ||
@@ -739,8 +739,9 @@ static void __init omap_mux_dbg_create_entry( | |||
739 | list_for_each_entry(e, &partition->muxmodes, node) { | 739 | list_for_each_entry(e, &partition->muxmodes, node) { |
740 | struct omap_mux *m = &e->mux; | 740 | struct omap_mux *m = &e->mux; |
741 | 741 | ||
742 | (void)debugfs_create_file(m->muxnames[0], S_IWUSR, mux_dbg_dir, | 742 | (void)debugfs_create_file(m->muxnames[0], S_IWUSR | S_IRUGO, |
743 | m, &omap_mux_dbg_signal_fops); | 743 | mux_dbg_dir, m, |
744 | &omap_mux_dbg_signal_fops); | ||
744 | } | 745 | } |
745 | } | 746 | } |
746 | 747 | ||
diff --git a/arch/arm/mach-orion5x/Makefile b/arch/arm/mach-orion5x/Makefile index 9e809a7c05c0..45da805fb236 100644 --- a/arch/arm/mach-orion5x/Makefile +++ b/arch/arm/mach-orion5x/Makefile | |||
@@ -1,4 +1,4 @@ | |||
1 | obj-y += common.o addr-map.o pci.o irq.o mpp.o | 1 | obj-y += common.o pci.o irq.o mpp.o |
2 | obj-$(CONFIG_MACH_DB88F5281) += db88f5281-setup.o | 2 | obj-$(CONFIG_MACH_DB88F5281) += db88f5281-setup.o |
3 | obj-$(CONFIG_MACH_RD88F5182) += rd88f5182-setup.o | 3 | obj-$(CONFIG_MACH_RD88F5182) += rd88f5182-setup.o |
4 | obj-$(CONFIG_MACH_KUROBOX_PRO) += kurobox_pro-setup.o | 4 | obj-$(CONFIG_MACH_KUROBOX_PRO) += kurobox_pro-setup.o |
diff --git a/arch/arm/mach-orion5x/addr-map.c b/arch/arm/mach-orion5x/addr-map.c deleted file mode 100644 index b5efc0fd31cb..000000000000 --- a/arch/arm/mach-orion5x/addr-map.c +++ /dev/null | |||
@@ -1,155 +0,0 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-orion5x/addr-map.c | ||
3 | * | ||
4 | * Address map functions for Marvell Orion 5x SoCs | ||
5 | * | ||
6 | * Maintainer: Tzachi Perelstein <tzachi@marvell.com> | ||
7 | * | ||
8 | * This file is licensed under the terms of the GNU General Public | ||
9 | * License version 2. This program is licensed "as is" without any | ||
10 | * warranty of any kind, whether express or implied. | ||
11 | */ | ||
12 | |||
13 | #include <linux/kernel.h> | ||
14 | #include <linux/init.h> | ||
15 | #include <linux/mbus.h> | ||
16 | #include <linux/io.h> | ||
17 | #include <mach/hardware.h> | ||
18 | #include <plat/addr-map.h> | ||
19 | #include "common.h" | ||
20 | |||
21 | /* | ||
22 | * The Orion has fully programmable address map. There's a separate address | ||
23 | * map for each of the device _master_ interfaces, e.g. CPU, PCI, PCIe, USB, | ||
24 | * Gigabit Ethernet, DMA/XOR engines, etc. Each interface has its own | ||
25 | * address decode windows that allow it to access any of the Orion resources. | ||
26 | * | ||
27 | * CPU address decoding -- | ||
28 | * Linux assumes that it is the boot loader that already setup the access to | ||
29 | * DDR and internal registers. | ||
30 | * Setup access to PCI and PCIe IO/MEM space is issued by this file. | ||
31 | * Setup access to various devices located on the device bus interface (e.g. | ||
32 | * flashes, RTC, etc) should be issued by machine-setup.c according to | ||
33 | * specific board population (by using orion5x_setup_*_win()). | ||
34 | * | ||
35 | * Non-CPU Masters address decoding -- | ||
36 | * Unlike the CPU, we setup the access from Orion's master interfaces to DDR | ||
37 | * banks only (the typical use case). | ||
38 | * Setup access for each master to DDR is issued by platform device setup. | ||
39 | */ | ||
40 | |||
41 | /* | ||
42 | * Generic Address Decode Windows bit settings | ||
43 | */ | ||
44 | #define TARGET_DEV_BUS 1 | ||
45 | #define TARGET_PCI 3 | ||
46 | #define TARGET_PCIE 4 | ||
47 | #define TARGET_SRAM 9 | ||
48 | #define ATTR_PCIE_MEM 0x59 | ||
49 | #define ATTR_PCIE_IO 0x51 | ||
50 | #define ATTR_PCIE_WA 0x79 | ||
51 | #define ATTR_PCI_MEM 0x59 | ||
52 | #define ATTR_PCI_IO 0x51 | ||
53 | #define ATTR_DEV_CS0 0x1e | ||
54 | #define ATTR_DEV_CS1 0x1d | ||
55 | #define ATTR_DEV_CS2 0x1b | ||
56 | #define ATTR_DEV_BOOT 0xf | ||
57 | #define ATTR_SRAM 0x0 | ||
58 | |||
59 | static int __initdata win_alloc_count; | ||
60 | |||
61 | static int __init cpu_win_can_remap(const struct orion_addr_map_cfg *cfg, | ||
62 | const int win) | ||
63 | { | ||
64 | u32 dev, rev; | ||
65 | |||
66 | orion5x_pcie_id(&dev, &rev); | ||
67 | if ((dev == MV88F5281_DEV_ID && win < 4) | ||
68 | || (dev == MV88F5182_DEV_ID && win < 2) | ||
69 | || (dev == MV88F5181_DEV_ID && win < 2) | ||
70 | || (dev == MV88F6183_DEV_ID && win < 4)) | ||
71 | return 1; | ||
72 | |||
73 | return 0; | ||
74 | } | ||
75 | |||
76 | /* | ||
77 | * Description of the windows needed by the platform code | ||
78 | */ | ||
79 | static struct orion_addr_map_cfg addr_map_cfg __initdata = { | ||
80 | .num_wins = 8, | ||
81 | .cpu_win_can_remap = cpu_win_can_remap, | ||
82 | .bridge_virt_base = ORION5X_BRIDGE_VIRT_BASE, | ||
83 | }; | ||
84 | |||
85 | static const struct __initdata orion_addr_map_info addr_map_info[] = { | ||
86 | /* | ||
87 | * Setup windows for PCI+PCIe IO+MEM space. | ||
88 | */ | ||
89 | { 0, ORION5X_PCIE_IO_PHYS_BASE, ORION5X_PCIE_IO_SIZE, | ||
90 | TARGET_PCIE, ATTR_PCIE_IO, ORION5X_PCIE_IO_BUS_BASE | ||
91 | }, | ||
92 | { 1, ORION5X_PCI_IO_PHYS_BASE, ORION5X_PCI_IO_SIZE, | ||
93 | TARGET_PCI, ATTR_PCI_IO, ORION5X_PCI_IO_BUS_BASE | ||
94 | }, | ||
95 | { 2, ORION5X_PCIE_MEM_PHYS_BASE, ORION5X_PCIE_MEM_SIZE, | ||
96 | TARGET_PCIE, ATTR_PCIE_MEM, -1 | ||
97 | }, | ||
98 | { 3, ORION5X_PCI_MEM_PHYS_BASE, ORION5X_PCI_MEM_SIZE, | ||
99 | TARGET_PCI, ATTR_PCI_MEM, -1 | ||
100 | }, | ||
101 | /* End marker */ | ||
102 | { -1, 0, 0, 0, 0, 0 } | ||
103 | }; | ||
104 | |||
105 | void __init orion5x_setup_cpu_mbus_bridge(void) | ||
106 | { | ||
107 | /* | ||
108 | * Disable, clear and configure windows. | ||
109 | */ | ||
110 | orion_config_wins(&addr_map_cfg, addr_map_info); | ||
111 | win_alloc_count = 4; | ||
112 | |||
113 | /* | ||
114 | * Setup MBUS dram target info. | ||
115 | */ | ||
116 | orion_setup_cpu_mbus_target(&addr_map_cfg, | ||
117 | (void __iomem *) ORION5X_DDR_WINDOW_CPU_BASE); | ||
118 | } | ||
119 | |||
120 | void __init orion5x_setup_dev_boot_win(u32 base, u32 size) | ||
121 | { | ||
122 | orion_setup_cpu_win(&addr_map_cfg, win_alloc_count++, base, size, | ||
123 | TARGET_DEV_BUS, ATTR_DEV_BOOT, -1); | ||
124 | } | ||
125 | |||
126 | void __init orion5x_setup_dev0_win(u32 base, u32 size) | ||
127 | { | ||
128 | orion_setup_cpu_win(&addr_map_cfg, win_alloc_count++, base, size, | ||
129 | TARGET_DEV_BUS, ATTR_DEV_CS0, -1); | ||
130 | } | ||
131 | |||
132 | void __init orion5x_setup_dev1_win(u32 base, u32 size) | ||
133 | { | ||
134 | orion_setup_cpu_win(&addr_map_cfg, win_alloc_count++, base, size, | ||
135 | TARGET_DEV_BUS, ATTR_DEV_CS1, -1); | ||
136 | } | ||
137 | |||
138 | void __init orion5x_setup_dev2_win(u32 base, u32 size) | ||
139 | { | ||
140 | orion_setup_cpu_win(&addr_map_cfg, win_alloc_count++, base, size, | ||
141 | TARGET_DEV_BUS, ATTR_DEV_CS2, -1); | ||
142 | } | ||
143 | |||
144 | void __init orion5x_setup_pcie_wa_win(u32 base, u32 size) | ||
145 | { | ||
146 | orion_setup_cpu_win(&addr_map_cfg, win_alloc_count++, base, size, | ||
147 | TARGET_PCIE, ATTR_PCIE_WA, -1); | ||
148 | } | ||
149 | |||
150 | void __init orion5x_setup_sram_win(void) | ||
151 | { | ||
152 | orion_setup_cpu_win(&addr_map_cfg, win_alloc_count++, | ||
153 | ORION5X_SRAM_PHYS_BASE, ORION5X_SRAM_SIZE, | ||
154 | TARGET_SRAM, ATTR_SRAM, -1); | ||
155 | } | ||
diff --git a/arch/arm/mach-orion5x/board-dt.c b/arch/arm/mach-orion5x/board-dt.c index 35a8014529ca..6bbc8786c1e3 100644 --- a/arch/arm/mach-orion5x/board-dt.c +++ b/arch/arm/mach-orion5x/board-dt.c | |||
@@ -41,7 +41,7 @@ static void __init orion5x_dt_init(void) | |||
41 | /* | 41 | /* |
42 | * Setup Orion address map | 42 | * Setup Orion address map |
43 | */ | 43 | */ |
44 | orion5x_setup_cpu_mbus_bridge(); | 44 | orion5x_setup_wins(); |
45 | 45 | ||
46 | /* Setup root of clk tree */ | 46 | /* Setup root of clk tree */ |
47 | clk_init(); | 47 | clk_init(); |
diff --git a/arch/arm/mach-orion5x/common.c b/arch/arm/mach-orion5x/common.c index d068f1431c40..8e468e3a6015 100644 --- a/arch/arm/mach-orion5x/common.c +++ b/arch/arm/mach-orion5x/common.c | |||
@@ -34,7 +34,6 @@ | |||
34 | #include <linux/platform_data/usb-ehci-orion.h> | 34 | #include <linux/platform_data/usb-ehci-orion.h> |
35 | #include <plat/time.h> | 35 | #include <plat/time.h> |
36 | #include <plat/common.h> | 36 | #include <plat/common.h> |
37 | #include <plat/addr-map.h> | ||
38 | #include "common.h" | 37 | #include "common.h" |
39 | 38 | ||
40 | /***************************************************************************** | 39 | /***************************************************************************** |
@@ -174,7 +173,8 @@ void __init orion5x_xor_init(void) | |||
174 | ****************************************************************************/ | 173 | ****************************************************************************/ |
175 | static void __init orion5x_crypto_init(void) | 174 | static void __init orion5x_crypto_init(void) |
176 | { | 175 | { |
177 | orion5x_setup_sram_win(); | 176 | mvebu_mbus_add_window("sram", ORION5X_SRAM_PHYS_BASE, |
177 | ORION5X_SRAM_SIZE); | ||
178 | orion_crypto_init(ORION5X_CRYPTO_PHYS_BASE, ORION5X_SRAM_PHYS_BASE, | 178 | orion_crypto_init(ORION5X_CRYPTO_PHYS_BASE, ORION5X_SRAM_PHYS_BASE, |
179 | SZ_8K, IRQ_ORION5X_CESA); | 179 | SZ_8K, IRQ_ORION5X_CESA); |
180 | } | 180 | } |
@@ -193,6 +193,9 @@ void __init orion5x_wdt_init(void) | |||
193 | ****************************************************************************/ | 193 | ****************************************************************************/ |
194 | void __init orion5x_init_early(void) | 194 | void __init orion5x_init_early(void) |
195 | { | 195 | { |
196 | u32 rev, dev; | ||
197 | const char *mbus_soc_name; | ||
198 | |||
196 | orion_time_set_base(TIMER_VIRT_BASE); | 199 | orion_time_set_base(TIMER_VIRT_BASE); |
197 | 200 | ||
198 | /* | 201 | /* |
@@ -201,6 +204,46 @@ void __init orion5x_init_early(void) | |||
201 | * the allocations won't fail. | 204 | * the allocations won't fail. |
202 | */ | 205 | */ |
203 | init_dma_coherent_pool_size(SZ_1M); | 206 | init_dma_coherent_pool_size(SZ_1M); |
207 | |||
208 | /* Initialize the MBUS driver */ | ||
209 | orion5x_pcie_id(&dev, &rev); | ||
210 | if (dev == MV88F5281_DEV_ID) | ||
211 | mbus_soc_name = "marvell,orion5x-88f5281-mbus"; | ||
212 | else if (dev == MV88F5182_DEV_ID) | ||
213 | mbus_soc_name = "marvell,orion5x-88f5182-mbus"; | ||
214 | else if (dev == MV88F5181_DEV_ID) | ||
215 | mbus_soc_name = "marvell,orion5x-88f5181-mbus"; | ||
216 | else if (dev == MV88F6183_DEV_ID) | ||
217 | mbus_soc_name = "marvell,orion5x-88f6183-mbus"; | ||
218 | else | ||
219 | mbus_soc_name = NULL; | ||
220 | mvebu_mbus_init(mbus_soc_name, ORION5X_BRIDGE_WINS_BASE, | ||
221 | ORION5X_BRIDGE_WINS_SZ, | ||
222 | ORION5X_DDR_WINS_BASE, ORION5X_DDR_WINS_SZ); | ||
223 | } | ||
224 | |||
225 | void orion5x_setup_wins(void) | ||
226 | { | ||
227 | /* | ||
228 | * The PCIe windows will no longer be statically allocated | ||
229 | * here once Orion5x is migrated to the pci-mvebu driver. | ||
230 | */ | ||
231 | mvebu_mbus_add_window_remap_flags("pcie0.0", ORION5X_PCIE_IO_PHYS_BASE, | ||
232 | ORION5X_PCIE_IO_SIZE, | ||
233 | ORION5X_PCIE_IO_BUS_BASE, | ||
234 | MVEBU_MBUS_PCI_IO); | ||
235 | mvebu_mbus_add_window_remap_flags("pcie0.0", ORION5X_PCIE_MEM_PHYS_BASE, | ||
236 | ORION5X_PCIE_MEM_SIZE, | ||
237 | MVEBU_MBUS_NO_REMAP, | ||
238 | MVEBU_MBUS_PCI_MEM); | ||
239 | mvebu_mbus_add_window_remap_flags("pci0.0", ORION5X_PCI_IO_PHYS_BASE, | ||
240 | ORION5X_PCI_IO_SIZE, | ||
241 | ORION5X_PCI_IO_BUS_BASE, | ||
242 | MVEBU_MBUS_PCI_IO); | ||
243 | mvebu_mbus_add_window_remap_flags("pci0.0", ORION5X_PCI_MEM_PHYS_BASE, | ||
244 | ORION5X_PCI_MEM_SIZE, | ||
245 | MVEBU_MBUS_NO_REMAP, | ||
246 | MVEBU_MBUS_PCI_MEM); | ||
204 | } | 247 | } |
205 | 248 | ||
206 | int orion5x_tclk; | 249 | int orion5x_tclk; |
@@ -282,7 +325,7 @@ void __init orion5x_init(void) | |||
282 | /* | 325 | /* |
283 | * Setup Orion address map | 326 | * Setup Orion address map |
284 | */ | 327 | */ |
285 | orion5x_setup_cpu_mbus_bridge(); | 328 | orion5x_setup_wins(); |
286 | 329 | ||
287 | /* Setup root of clk tree */ | 330 | /* Setup root of clk tree */ |
288 | clk_init(); | 331 | clk_init(); |
diff --git a/arch/arm/mach-orion5x/common.h b/arch/arm/mach-orion5x/common.h index e60345760283..cdaa01f3d186 100644 --- a/arch/arm/mach-orion5x/common.h +++ b/arch/arm/mach-orion5x/common.h | |||
@@ -17,18 +17,7 @@ void clk_init(void); | |||
17 | extern int orion5x_tclk; | 17 | extern int orion5x_tclk; |
18 | extern void orion5x_timer_init(void); | 18 | extern void orion5x_timer_init(void); |
19 | 19 | ||
20 | /* | 20 | void orion5x_setup_wins(void); |
21 | * Enumerations and functions for Orion windows mapping. Used by Orion core | ||
22 | * functions to map its interfaces and by the machine-setup to map its on- | ||
23 | * board devices. Details in /mach-orion/addr-map.c | ||
24 | */ | ||
25 | void orion5x_setup_cpu_mbus_bridge(void); | ||
26 | void orion5x_setup_dev_boot_win(u32 base, u32 size); | ||
27 | void orion5x_setup_dev0_win(u32 base, u32 size); | ||
28 | void orion5x_setup_dev1_win(u32 base, u32 size); | ||
29 | void orion5x_setup_dev2_win(u32 base, u32 size); | ||
30 | void orion5x_setup_pcie_wa_win(u32 base, u32 size); | ||
31 | void orion5x_setup_sram_win(void); | ||
32 | 21 | ||
33 | void orion5x_ehci0_init(void); | 22 | void orion5x_ehci0_init(void); |
34 | void orion5x_ehci1_init(void); | 23 | void orion5x_ehci1_init(void); |
diff --git a/arch/arm/mach-orion5x/d2net-setup.c b/arch/arm/mach-orion5x/d2net-setup.c index 57d0af74874d..16c88bbabc98 100644 --- a/arch/arm/mach-orion5x/d2net-setup.c +++ b/arch/arm/mach-orion5x/d2net-setup.c | |||
@@ -317,8 +317,8 @@ static void __init d2net_init(void) | |||
317 | d2net_sata_power_init(); | 317 | d2net_sata_power_init(); |
318 | orion5x_sata_init(&d2net_sata_data); | 318 | orion5x_sata_init(&d2net_sata_data); |
319 | 319 | ||
320 | orion5x_setup_dev_boot_win(D2NET_NOR_BOOT_BASE, | 320 | mvebu_mbus_add_window("devbus-boot", D2NET_NOR_BOOT_BASE, |
321 | D2NET_NOR_BOOT_SIZE); | 321 | D2NET_NOR_BOOT_SIZE); |
322 | platform_device_register(&d2net_nor_flash); | 322 | platform_device_register(&d2net_nor_flash); |
323 | 323 | ||
324 | platform_device_register(&d2net_gpio_buttons); | 324 | platform_device_register(&d2net_gpio_buttons); |
diff --git a/arch/arm/mach-orion5x/db88f5281-setup.c b/arch/arm/mach-orion5x/db88f5281-setup.c index 76665640087b..4e1263da38bb 100644 --- a/arch/arm/mach-orion5x/db88f5281-setup.c +++ b/arch/arm/mach-orion5x/db88f5281-setup.c | |||
@@ -340,16 +340,19 @@ static void __init db88f5281_init(void) | |||
340 | orion5x_uart0_init(); | 340 | orion5x_uart0_init(); |
341 | orion5x_uart1_init(); | 341 | orion5x_uart1_init(); |
342 | 342 | ||
343 | orion5x_setup_dev_boot_win(DB88F5281_NOR_BOOT_BASE, | 343 | mvebu_mbus_add_window("devbus-boot", DB88F5281_NOR_BOOT_BASE, |
344 | DB88F5281_NOR_BOOT_SIZE); | 344 | DB88F5281_NOR_BOOT_SIZE); |
345 | platform_device_register(&db88f5281_boot_flash); | 345 | platform_device_register(&db88f5281_boot_flash); |
346 | 346 | ||
347 | orion5x_setup_dev0_win(DB88F5281_7SEG_BASE, DB88F5281_7SEG_SIZE); | 347 | mvebu_mbus_add_window("devbus-cs0", DB88F5281_7SEG_BASE, |
348 | DB88F5281_7SEG_SIZE); | ||
348 | 349 | ||
349 | orion5x_setup_dev1_win(DB88F5281_NOR_BASE, DB88F5281_NOR_SIZE); | 350 | mvebu_mbus_add_window("devbus-cs1", DB88F5281_NOR_BASE, |
351 | DB88F5281_NOR_SIZE); | ||
350 | platform_device_register(&db88f5281_nor_flash); | 352 | platform_device_register(&db88f5281_nor_flash); |
351 | 353 | ||
352 | orion5x_setup_dev2_win(DB88F5281_NAND_BASE, DB88F5281_NAND_SIZE); | 354 | mvebu_mbus_add_window("devbus-cs2", DB88F5281_NAND_BASE, |
355 | DB88F5281_NAND_SIZE); | ||
353 | platform_device_register(&db88f5281_nand_flash); | 356 | platform_device_register(&db88f5281_nand_flash); |
354 | 357 | ||
355 | i2c_register_board_info(0, &db88f5281_i2c_rtc, 1); | 358 | i2c_register_board_info(0, &db88f5281_i2c_rtc, 1); |
diff --git a/arch/arm/mach-orion5x/dns323-setup.c b/arch/arm/mach-orion5x/dns323-setup.c index 6eb1732757fd..9e6baf581ed3 100644 --- a/arch/arm/mach-orion5x/dns323-setup.c +++ b/arch/arm/mach-orion5x/dns323-setup.c | |||
@@ -611,7 +611,8 @@ static void __init dns323_init(void) | |||
611 | /* setup flash mapping | 611 | /* setup flash mapping |
612 | * CS3 holds a 8 MB Spansion S29GL064M90TFIR4 | 612 | * CS3 holds a 8 MB Spansion S29GL064M90TFIR4 |
613 | */ | 613 | */ |
614 | orion5x_setup_dev_boot_win(DNS323_NOR_BOOT_BASE, DNS323_NOR_BOOT_SIZE); | 614 | mvebu_mbus_add_window("devbus-boot", DNS323_NOR_BOOT_BASE, |
615 | DNS323_NOR_BOOT_SIZE); | ||
615 | platform_device_register(&dns323_nor_flash); | 616 | platform_device_register(&dns323_nor_flash); |
616 | 617 | ||
617 | /* Sort out LEDs, Buttons and i2c devices */ | 618 | /* Sort out LEDs, Buttons and i2c devices */ |
diff --git a/arch/arm/mach-orion5x/edmini_v2-setup.c b/arch/arm/mach-orion5x/edmini_v2-setup.c index d675e727803d..147615510dd0 100644 --- a/arch/arm/mach-orion5x/edmini_v2-setup.c +++ b/arch/arm/mach-orion5x/edmini_v2-setup.c | |||
@@ -154,8 +154,8 @@ void __init edmini_v2_init(void) | |||
154 | orion5x_ehci0_init(); | 154 | orion5x_ehci0_init(); |
155 | orion5x_eth_init(&edmini_v2_eth_data); | 155 | orion5x_eth_init(&edmini_v2_eth_data); |
156 | 156 | ||
157 | orion5x_setup_dev_boot_win(EDMINI_V2_NOR_BOOT_BASE, | 157 | mvebu_mbus_add_window("devbus-boot", EDMINI_V2_NOR_BOOT_BASE, |
158 | EDMINI_V2_NOR_BOOT_SIZE); | 158 | EDMINI_V2_NOR_BOOT_SIZE); |
159 | platform_device_register(&edmini_v2_nor_flash); | 159 | platform_device_register(&edmini_v2_nor_flash); |
160 | 160 | ||
161 | pr_notice("edmini_v2: USB device port, flash write and power-off " | 161 | pr_notice("edmini_v2: USB device port, flash write and power-off " |
diff --git a/arch/arm/mach-orion5x/include/mach/orion5x.h b/arch/arm/mach-orion5x/include/mach/orion5x.h index d265f5484a8e..b78ff3248868 100644 --- a/arch/arm/mach-orion5x/include/mach/orion5x.h +++ b/arch/arm/mach-orion5x/include/mach/orion5x.h | |||
@@ -66,8 +66,10 @@ | |||
66 | * Orion Registers Map | 66 | * Orion Registers Map |
67 | ******************************************************************************/ | 67 | ******************************************************************************/ |
68 | 68 | ||
69 | #define ORION5X_DDR_PHYS_BASE (ORION5X_REGS_PHYS_BASE + 0x00000) | ||
70 | #define ORION5X_DDR_WINS_BASE (ORION5X_DDR_PHYS_BASE + 0x1500) | ||
71 | #define ORION5X_DDR_WINS_SZ (0x10) | ||
69 | #define ORION5X_DDR_VIRT_BASE (ORION5X_REGS_VIRT_BASE + 0x00000) | 72 | #define ORION5X_DDR_VIRT_BASE (ORION5X_REGS_VIRT_BASE + 0x00000) |
70 | #define ORION5X_DDR_WINDOW_CPU_BASE (ORION5X_DDR_VIRT_BASE + 0x1500) | ||
71 | #define ORION5X_DEV_BUS_PHYS_BASE (ORION5X_REGS_PHYS_BASE + 0x10000) | 73 | #define ORION5X_DEV_BUS_PHYS_BASE (ORION5X_REGS_PHYS_BASE + 0x10000) |
72 | #define ORION5X_DEV_BUS_VIRT_BASE (ORION5X_REGS_VIRT_BASE + 0x10000) | 74 | #define ORION5X_DEV_BUS_VIRT_BASE (ORION5X_REGS_VIRT_BASE + 0x10000) |
73 | #define ORION5X_DEV_BUS_REG(x) (ORION5X_DEV_BUS_VIRT_BASE + (x)) | 75 | #define ORION5X_DEV_BUS_REG(x) (ORION5X_DEV_BUS_VIRT_BASE + (x)) |
@@ -81,6 +83,8 @@ | |||
81 | 83 | ||
82 | #define ORION5X_BRIDGE_VIRT_BASE (ORION5X_REGS_VIRT_BASE + 0x20000) | 84 | #define ORION5X_BRIDGE_VIRT_BASE (ORION5X_REGS_VIRT_BASE + 0x20000) |
83 | #define ORION5X_BRIDGE_PHYS_BASE (ORION5X_REGS_PHYS_BASE + 0x20000) | 85 | #define ORION5X_BRIDGE_PHYS_BASE (ORION5X_REGS_PHYS_BASE + 0x20000) |
86 | #define ORION5X_BRIDGE_WINS_BASE (ORION5X_BRIDGE_PHYS_BASE) | ||
87 | #define ORION5X_BRIDGE_WINS_SZ (0x80) | ||
84 | 88 | ||
85 | #define ORION5X_PCI_VIRT_BASE (ORION5X_REGS_VIRT_BASE + 0x30000) | 89 | #define ORION5X_PCI_VIRT_BASE (ORION5X_REGS_VIRT_BASE + 0x30000) |
86 | 90 | ||
diff --git a/arch/arm/mach-orion5x/kurobox_pro-setup.c b/arch/arm/mach-orion5x/kurobox_pro-setup.c index b98403526218..aae10e4a917c 100644 --- a/arch/arm/mach-orion5x/kurobox_pro-setup.c +++ b/arch/arm/mach-orion5x/kurobox_pro-setup.c | |||
@@ -359,13 +359,13 @@ static void __init kurobox_pro_init(void) | |||
359 | orion5x_uart1_init(); | 359 | orion5x_uart1_init(); |
360 | orion5x_xor_init(); | 360 | orion5x_xor_init(); |
361 | 361 | ||
362 | orion5x_setup_dev_boot_win(KUROBOX_PRO_NOR_BOOT_BASE, | 362 | mvebu_mbus_add_window("devbus-boot", KUROBOX_PRO_NOR_BOOT_BASE, |
363 | KUROBOX_PRO_NOR_BOOT_SIZE); | 363 | KUROBOX_PRO_NOR_BOOT_SIZE); |
364 | platform_device_register(&kurobox_pro_nor_flash); | 364 | platform_device_register(&kurobox_pro_nor_flash); |
365 | 365 | ||
366 | if (machine_is_kurobox_pro()) { | 366 | if (machine_is_kurobox_pro()) { |
367 | orion5x_setup_dev0_win(KUROBOX_PRO_NAND_BASE, | 367 | mvebu_mbus_add_window("devbus-cs0", KUROBOX_PRO_NAND_BASE, |
368 | KUROBOX_PRO_NAND_SIZE); | 368 | KUROBOX_PRO_NAND_SIZE); |
369 | platform_device_register(&kurobox_pro_nand_flash); | 369 | platform_device_register(&kurobox_pro_nand_flash); |
370 | } | 370 | } |
371 | 371 | ||
diff --git a/arch/arm/mach-orion5x/ls-chl-setup.c b/arch/arm/mach-orion5x/ls-chl-setup.c index 044da5b6a6ae..24f4e14e5893 100644 --- a/arch/arm/mach-orion5x/ls-chl-setup.c +++ b/arch/arm/mach-orion5x/ls-chl-setup.c | |||
@@ -294,8 +294,8 @@ static void __init lschl_init(void) | |||
294 | orion5x_uart0_init(); | 294 | orion5x_uart0_init(); |
295 | orion5x_xor_init(); | 295 | orion5x_xor_init(); |
296 | 296 | ||
297 | orion5x_setup_dev_boot_win(LSCHL_NOR_BOOT_BASE, | 297 | mvebu_mbus_add_window("devbus-boot", LSCHL_NOR_BOOT_BASE, |
298 | LSCHL_NOR_BOOT_SIZE); | 298 | LSCHL_NOR_BOOT_SIZE); |
299 | platform_device_register(&lschl_nor_flash); | 299 | platform_device_register(&lschl_nor_flash); |
300 | 300 | ||
301 | platform_device_register(&lschl_leds); | 301 | platform_device_register(&lschl_leds); |
diff --git a/arch/arm/mach-orion5x/ls_hgl-setup.c b/arch/arm/mach-orion5x/ls_hgl-setup.c index d49f93423f52..fc653bb41e78 100644 --- a/arch/arm/mach-orion5x/ls_hgl-setup.c +++ b/arch/arm/mach-orion5x/ls_hgl-setup.c | |||
@@ -243,8 +243,8 @@ static void __init ls_hgl_init(void) | |||
243 | orion5x_uart0_init(); | 243 | orion5x_uart0_init(); |
244 | orion5x_xor_init(); | 244 | orion5x_xor_init(); |
245 | 245 | ||
246 | orion5x_setup_dev_boot_win(LS_HGL_NOR_BOOT_BASE, | 246 | mvebu_mbus_add_window("devbus-boot", LS_HGL_NOR_BOOT_BASE, |
247 | LS_HGL_NOR_BOOT_SIZE); | 247 | LS_HGL_NOR_BOOT_SIZE); |
248 | platform_device_register(&ls_hgl_nor_flash); | 248 | platform_device_register(&ls_hgl_nor_flash); |
249 | 249 | ||
250 | platform_device_register(&ls_hgl_button_device); | 250 | platform_device_register(&ls_hgl_button_device); |
diff --git a/arch/arm/mach-orion5x/lsmini-setup.c b/arch/arm/mach-orion5x/lsmini-setup.c index 8e3965c6c0fe..18e66e617dc2 100644 --- a/arch/arm/mach-orion5x/lsmini-setup.c +++ b/arch/arm/mach-orion5x/lsmini-setup.c | |||
@@ -244,8 +244,8 @@ static void __init lsmini_init(void) | |||
244 | orion5x_uart0_init(); | 244 | orion5x_uart0_init(); |
245 | orion5x_xor_init(); | 245 | orion5x_xor_init(); |
246 | 246 | ||
247 | orion5x_setup_dev_boot_win(LSMINI_NOR_BOOT_BASE, | 247 | mvebu_mbus_add_window("devbus-boot", LSMINI_NOR_BOOT_BASE, |
248 | LSMINI_NOR_BOOT_SIZE); | 248 | LSMINI_NOR_BOOT_SIZE); |
249 | platform_device_register(&lsmini_nor_flash); | 249 | platform_device_register(&lsmini_nor_flash); |
250 | 250 | ||
251 | platform_device_register(&lsmini_button_device); | 251 | platform_device_register(&lsmini_button_device); |
diff --git a/arch/arm/mach-orion5x/mss2-setup.c b/arch/arm/mach-orion5x/mss2-setup.c index 0ec94a1f2b16..827acbafc9dc 100644 --- a/arch/arm/mach-orion5x/mss2-setup.c +++ b/arch/arm/mach-orion5x/mss2-setup.c | |||
@@ -241,7 +241,8 @@ static void __init mss2_init(void) | |||
241 | orion5x_uart0_init(); | 241 | orion5x_uart0_init(); |
242 | orion5x_xor_init(); | 242 | orion5x_xor_init(); |
243 | 243 | ||
244 | orion5x_setup_dev_boot_win(MSS2_NOR_BOOT_BASE, MSS2_NOR_BOOT_SIZE); | 244 | mvebu_mbus_add_window("devbus-boot", MSS2_NOR_BOOT_BASE, |
245 | MSS2_NOR_BOOT_SIZE); | ||
245 | platform_device_register(&mss2_nor_flash); | 246 | platform_device_register(&mss2_nor_flash); |
246 | 247 | ||
247 | platform_device_register(&mss2_button_device); | 248 | platform_device_register(&mss2_button_device); |
diff --git a/arch/arm/mach-orion5x/mv2120-setup.c b/arch/arm/mach-orion5x/mv2120-setup.c index 18143f2a9093..92600ae2b4b6 100644 --- a/arch/arm/mach-orion5x/mv2120-setup.c +++ b/arch/arm/mach-orion5x/mv2120-setup.c | |||
@@ -204,7 +204,8 @@ static void __init mv2120_init(void) | |||
204 | orion5x_uart0_init(); | 204 | orion5x_uart0_init(); |
205 | orion5x_xor_init(); | 205 | orion5x_xor_init(); |
206 | 206 | ||
207 | orion5x_setup_dev_boot_win(MV2120_NOR_BOOT_BASE, MV2120_NOR_BOOT_SIZE); | 207 | mvebu_mbus_add_window("devbus-boot", MV2120_NOR_BOOT_BASE, |
208 | MV2120_NOR_BOOT_SIZE); | ||
208 | platform_device_register(&mv2120_nor_flash); | 209 | platform_device_register(&mv2120_nor_flash); |
209 | 210 | ||
210 | platform_device_register(&mv2120_button_device); | 211 | platform_device_register(&mv2120_button_device); |
diff --git a/arch/arm/mach-orion5x/net2big-setup.c b/arch/arm/mach-orion5x/net2big-setup.c index 282e503b003e..dd0641a0d074 100644 --- a/arch/arm/mach-orion5x/net2big-setup.c +++ b/arch/arm/mach-orion5x/net2big-setup.c | |||
@@ -397,8 +397,8 @@ static void __init net2big_init(void) | |||
397 | net2big_sata_power_init(); | 397 | net2big_sata_power_init(); |
398 | orion5x_sata_init(&net2big_sata_data); | 398 | orion5x_sata_init(&net2big_sata_data); |
399 | 399 | ||
400 | orion5x_setup_dev_boot_win(NET2BIG_NOR_BOOT_BASE, | 400 | mvebu_mbus_add_window("devbus-boot", NET2BIG_NOR_BOOT_BASE, |
401 | NET2BIG_NOR_BOOT_SIZE); | 401 | NET2BIG_NOR_BOOT_SIZE); |
402 | platform_device_register(&net2big_nor_flash); | 402 | platform_device_register(&net2big_nor_flash); |
403 | 403 | ||
404 | platform_device_register(&net2big_gpio_buttons); | 404 | platform_device_register(&net2big_gpio_buttons); |
diff --git a/arch/arm/mach-orion5x/pci.c b/arch/arm/mach-orion5x/pci.c index d9c7c3bf0d9c..503368023bb1 100644 --- a/arch/arm/mach-orion5x/pci.c +++ b/arch/arm/mach-orion5x/pci.c | |||
@@ -157,8 +157,11 @@ static int __init pcie_setup(struct pci_sys_data *sys) | |||
157 | if (dev == MV88F5181_DEV_ID || dev == MV88F5182_DEV_ID) { | 157 | if (dev == MV88F5181_DEV_ID || dev == MV88F5182_DEV_ID) { |
158 | printk(KERN_NOTICE "Applying Orion-1/Orion-NAS PCIe config " | 158 | printk(KERN_NOTICE "Applying Orion-1/Orion-NAS PCIe config " |
159 | "read transaction workaround\n"); | 159 | "read transaction workaround\n"); |
160 | orion5x_setup_pcie_wa_win(ORION5X_PCIE_WA_PHYS_BASE, | 160 | mvebu_mbus_add_window_remap_flags("pcie0.0", |
161 | ORION5X_PCIE_WA_SIZE); | 161 | ORION5X_PCIE_WA_PHYS_BASE, |
162 | ORION5X_PCIE_WA_SIZE, | ||
163 | MVEBU_MBUS_NO_REMAP, | ||
164 | MVEBU_MBUS_PCI_WA); | ||
162 | pcie_ops.read = pcie_rd_conf_wa; | 165 | pcie_ops.read = pcie_rd_conf_wa; |
163 | } | 166 | } |
164 | 167 | ||
@@ -402,8 +405,9 @@ static void __init orion5x_pci_master_slave_enable(void) | |||
402 | orion5x_pci_hw_wr_conf(bus_nr, 0, func, reg, 4, val | 0x7); | 405 | orion5x_pci_hw_wr_conf(bus_nr, 0, func, reg, 4, val | 0x7); |
403 | } | 406 | } |
404 | 407 | ||
405 | static void __init orion5x_setup_pci_wins(struct mbus_dram_target_info *dram) | 408 | static void __init orion5x_setup_pci_wins(void) |
406 | { | 409 | { |
410 | const struct mbus_dram_target_info *dram = mv_mbus_dram_info(); | ||
407 | u32 win_enable; | 411 | u32 win_enable; |
408 | int bus; | 412 | int bus; |
409 | int i; | 413 | int i; |
@@ -420,7 +424,7 @@ static void __init orion5x_setup_pci_wins(struct mbus_dram_target_info *dram) | |||
420 | bus = orion5x_pci_local_bus_nr(); | 424 | bus = orion5x_pci_local_bus_nr(); |
421 | 425 | ||
422 | for (i = 0; i < dram->num_cs; i++) { | 426 | for (i = 0; i < dram->num_cs; i++) { |
423 | struct mbus_dram_window *cs = dram->cs + i; | 427 | const struct mbus_dram_window *cs = dram->cs + i; |
424 | u32 func = PCI_CONF_FUNC_BAR_CS(cs->cs_index); | 428 | u32 func = PCI_CONF_FUNC_BAR_CS(cs->cs_index); |
425 | u32 reg; | 429 | u32 reg; |
426 | u32 val; | 430 | u32 val; |
@@ -467,7 +471,7 @@ static int __init pci_setup(struct pci_sys_data *sys) | |||
467 | /* | 471 | /* |
468 | * Point PCI unit MBUS decode windows to DRAM space. | 472 | * Point PCI unit MBUS decode windows to DRAM space. |
469 | */ | 473 | */ |
470 | orion5x_setup_pci_wins(&orion_mbus_dram_info); | 474 | orion5x_setup_pci_wins(); |
471 | 475 | ||
472 | /* | 476 | /* |
473 | * Master + Slave enable | 477 | * Master + Slave enable |
diff --git a/arch/arm/mach-orion5x/rd88f5181l-fxo-setup.c b/arch/arm/mach-orion5x/rd88f5181l-fxo-setup.c index d6e72f672afb..1c4498bf650a 100644 --- a/arch/arm/mach-orion5x/rd88f5181l-fxo-setup.c +++ b/arch/arm/mach-orion5x/rd88f5181l-fxo-setup.c | |||
@@ -123,8 +123,8 @@ static void __init rd88f5181l_fxo_init(void) | |||
123 | orion5x_eth_switch_init(&rd88f5181l_fxo_switch_plat_data, NO_IRQ); | 123 | orion5x_eth_switch_init(&rd88f5181l_fxo_switch_plat_data, NO_IRQ); |
124 | orion5x_uart0_init(); | 124 | orion5x_uart0_init(); |
125 | 125 | ||
126 | orion5x_setup_dev_boot_win(RD88F5181L_FXO_NOR_BOOT_BASE, | 126 | mvebu_mbus_add_window("devbus-boot", RD88F5181L_FXO_NOR_BOOT_BASE, |
127 | RD88F5181L_FXO_NOR_BOOT_SIZE); | 127 | RD88F5181L_FXO_NOR_BOOT_SIZE); |
128 | platform_device_register(&rd88f5181l_fxo_nor_boot_flash); | 128 | platform_device_register(&rd88f5181l_fxo_nor_boot_flash); |
129 | } | 129 | } |
130 | 130 | ||
diff --git a/arch/arm/mach-orion5x/rd88f5181l-ge-setup.c b/arch/arm/mach-orion5x/rd88f5181l-ge-setup.c index c8b7913310e5..adabe34c4fc6 100644 --- a/arch/arm/mach-orion5x/rd88f5181l-ge-setup.c +++ b/arch/arm/mach-orion5x/rd88f5181l-ge-setup.c | |||
@@ -130,8 +130,8 @@ static void __init rd88f5181l_ge_init(void) | |||
130 | orion5x_i2c_init(); | 130 | orion5x_i2c_init(); |
131 | orion5x_uart0_init(); | 131 | orion5x_uart0_init(); |
132 | 132 | ||
133 | orion5x_setup_dev_boot_win(RD88F5181L_GE_NOR_BOOT_BASE, | 133 | mvebu_mbus_add_window("devbus-boot", RD88F5181L_GE_NOR_BOOT_BASE, |
134 | RD88F5181L_GE_NOR_BOOT_SIZE); | 134 | RD88F5181L_GE_NOR_BOOT_SIZE); |
135 | platform_device_register(&rd88f5181l_ge_nor_boot_flash); | 135 | platform_device_register(&rd88f5181l_ge_nor_boot_flash); |
136 | 136 | ||
137 | i2c_register_board_info(0, &rd88f5181l_ge_i2c_rtc, 1); | 137 | i2c_register_board_info(0, &rd88f5181l_ge_i2c_rtc, 1); |
diff --git a/arch/arm/mach-orion5x/rd88f5182-setup.c b/arch/arm/mach-orion5x/rd88f5182-setup.c index f9e156725d7c..66e77ec91532 100644 --- a/arch/arm/mach-orion5x/rd88f5182-setup.c +++ b/arch/arm/mach-orion5x/rd88f5182-setup.c | |||
@@ -264,10 +264,11 @@ static void __init rd88f5182_init(void) | |||
264 | orion5x_uart0_init(); | 264 | orion5x_uart0_init(); |
265 | orion5x_xor_init(); | 265 | orion5x_xor_init(); |
266 | 266 | ||
267 | orion5x_setup_dev_boot_win(RD88F5182_NOR_BOOT_BASE, | 267 | mvebu_mbus_add_window("devbus-boot", RD88F5182_NOR_BOOT_BASE, |
268 | RD88F5182_NOR_BOOT_SIZE); | 268 | RD88F5182_NOR_BOOT_SIZE); |
269 | 269 | ||
270 | orion5x_setup_dev1_win(RD88F5182_NOR_BASE, RD88F5182_NOR_SIZE); | 270 | mvebu_mbus_add_window("devbus-cs1", RD88F5182_NOR_BASE, |
271 | RD88F5182_NOR_SIZE); | ||
271 | platform_device_register(&rd88f5182_nor_flash); | 272 | platform_device_register(&rd88f5182_nor_flash); |
272 | platform_device_register(&rd88f5182_gpio_leds); | 273 | platform_device_register(&rd88f5182_gpio_leds); |
273 | 274 | ||
diff --git a/arch/arm/mach-orion5x/terastation_pro2-setup.c b/arch/arm/mach-orion5x/terastation_pro2-setup.c index acc0877ec1c9..a0bfa53e7556 100644 --- a/arch/arm/mach-orion5x/terastation_pro2-setup.c +++ b/arch/arm/mach-orion5x/terastation_pro2-setup.c | |||
@@ -329,8 +329,8 @@ static void __init tsp2_init(void) | |||
329 | /* | 329 | /* |
330 | * Configure peripherals. | 330 | * Configure peripherals. |
331 | */ | 331 | */ |
332 | orion5x_setup_dev_boot_win(TSP2_NOR_BOOT_BASE, | 332 | mvebu_mbus_add_window("devbus-boot", TSP2_NOR_BOOT_BASE, |
333 | TSP2_NOR_BOOT_SIZE); | 333 | TSP2_NOR_BOOT_SIZE); |
334 | platform_device_register(&tsp2_nor_flash); | 334 | platform_device_register(&tsp2_nor_flash); |
335 | 335 | ||
336 | orion5x_ehci0_init(); | 336 | orion5x_ehci0_init(); |
diff --git a/arch/arm/mach-orion5x/ts209-setup.c b/arch/arm/mach-orion5x/ts209-setup.c index 9c17f0c2b488..80174f0f168e 100644 --- a/arch/arm/mach-orion5x/ts209-setup.c +++ b/arch/arm/mach-orion5x/ts209-setup.c | |||
@@ -286,8 +286,8 @@ static void __init qnap_ts209_init(void) | |||
286 | /* | 286 | /* |
287 | * Configure peripherals. | 287 | * Configure peripherals. |
288 | */ | 288 | */ |
289 | orion5x_setup_dev_boot_win(QNAP_TS209_NOR_BOOT_BASE, | 289 | mvebu_mbus_add_window("devbus-boot", QNAP_TS209_NOR_BOOT_BASE, |
290 | QNAP_TS209_NOR_BOOT_SIZE); | 290 | QNAP_TS209_NOR_BOOT_SIZE); |
291 | platform_device_register(&qnap_ts209_nor_flash); | 291 | platform_device_register(&qnap_ts209_nor_flash); |
292 | 292 | ||
293 | orion5x_ehci0_init(); | 293 | orion5x_ehci0_init(); |
diff --git a/arch/arm/mach-orion5x/ts409-setup.c b/arch/arm/mach-orion5x/ts409-setup.c index 8cc5ab6c503e..92592790d6da 100644 --- a/arch/arm/mach-orion5x/ts409-setup.c +++ b/arch/arm/mach-orion5x/ts409-setup.c | |||
@@ -277,8 +277,8 @@ static void __init qnap_ts409_init(void) | |||
277 | /* | 277 | /* |
278 | * Configure peripherals. | 278 | * Configure peripherals. |
279 | */ | 279 | */ |
280 | orion5x_setup_dev_boot_win(QNAP_TS409_NOR_BOOT_BASE, | 280 | mvebu_mbus_add_window("devbus-boot", QNAP_TS409_NOR_BOOT_BASE, |
281 | QNAP_TS409_NOR_BOOT_SIZE); | 281 | QNAP_TS409_NOR_BOOT_SIZE); |
282 | platform_device_register(&qnap_ts409_nor_flash); | 282 | platform_device_register(&qnap_ts409_nor_flash); |
283 | 283 | ||
284 | orion5x_ehci0_init(); | 284 | orion5x_ehci0_init(); |
diff --git a/arch/arm/mach-orion5x/wnr854t-setup.c b/arch/arm/mach-orion5x/wnr854t-setup.c index 66552ca7e05d..6b84863c018d 100644 --- a/arch/arm/mach-orion5x/wnr854t-setup.c +++ b/arch/arm/mach-orion5x/wnr854t-setup.c | |||
@@ -127,8 +127,8 @@ static void __init wnr854t_init(void) | |||
127 | orion5x_eth_switch_init(&wnr854t_switch_plat_data, NO_IRQ); | 127 | orion5x_eth_switch_init(&wnr854t_switch_plat_data, NO_IRQ); |
128 | orion5x_uart0_init(); | 128 | orion5x_uart0_init(); |
129 | 129 | ||
130 | orion5x_setup_dev_boot_win(WNR854T_NOR_BOOT_BASE, | 130 | mvebu_mbus_add_window("devbus-boot", WNR854T_NOR_BOOT_BASE, |
131 | WNR854T_NOR_BOOT_SIZE); | 131 | WNR854T_NOR_BOOT_SIZE); |
132 | platform_device_register(&wnr854t_nor_flash); | 132 | platform_device_register(&wnr854t_nor_flash); |
133 | } | 133 | } |
134 | 134 | ||
diff --git a/arch/arm/mach-orion5x/wrt350n-v2-setup.c b/arch/arm/mach-orion5x/wrt350n-v2-setup.c index 2c5408e2e689..fae684bc54f2 100644 --- a/arch/arm/mach-orion5x/wrt350n-v2-setup.c +++ b/arch/arm/mach-orion5x/wrt350n-v2-setup.c | |||
@@ -213,8 +213,8 @@ static void __init wrt350n_v2_init(void) | |||
213 | orion5x_eth_switch_init(&wrt350n_v2_switch_plat_data, NO_IRQ); | 213 | orion5x_eth_switch_init(&wrt350n_v2_switch_plat_data, NO_IRQ); |
214 | orion5x_uart0_init(); | 214 | orion5x_uart0_init(); |
215 | 215 | ||
216 | orion5x_setup_dev_boot_win(WRT350N_V2_NOR_BOOT_BASE, | 216 | mvebu_mbus_add_window("devbus-boot", WRT350N_V2_NOR_BOOT_BASE, |
217 | WRT350N_V2_NOR_BOOT_SIZE); | 217 | WRT350N_V2_NOR_BOOT_SIZE); |
218 | platform_device_register(&wrt350n_v2_nor_flash); | 218 | platform_device_register(&wrt350n_v2_nor_flash); |
219 | platform_device_register(&wrt350n_v2_leds); | 219 | platform_device_register(&wrt350n_v2_leds); |
220 | platform_device_register(&wrt350n_v2_button_device); | 220 | platform_device_register(&wrt350n_v2_button_device); |
diff --git a/arch/arm/mach-pxa/raumfeld.c b/arch/arm/mach-pxa/raumfeld.c index af41888acbd6..969b0ba7fa70 100644 --- a/arch/arm/mach-pxa/raumfeld.c +++ b/arch/arm/mach-pxa/raumfeld.c | |||
@@ -505,6 +505,7 @@ static struct w1_gpio_platform_data w1_gpio_platform_data = { | |||
505 | .pin = GPIO_ONE_WIRE, | 505 | .pin = GPIO_ONE_WIRE, |
506 | .is_open_drain = 0, | 506 | .is_open_drain = 0, |
507 | .enable_external_pullup = w1_enable_external_pullup, | 507 | .enable_external_pullup = w1_enable_external_pullup, |
508 | .ext_pullup_enable_pin = -EINVAL, | ||
508 | }; | 509 | }; |
509 | 510 | ||
510 | struct platform_device raumfeld_w1_gpio_device = { | 511 | struct platform_device raumfeld_w1_gpio_device = { |
diff --git a/arch/arm/mach-s5pv210/clock.c b/arch/arm/mach-s5pv210/clock.c index fcdf52dbcc49..f051f53e35b7 100644 --- a/arch/arm/mach-s5pv210/clock.c +++ b/arch/arm/mach-s5pv210/clock.c | |||
@@ -214,11 +214,6 @@ static struct clk clk_pcmcdclk2 = { | |||
214 | .name = "pcmcdclk", | 214 | .name = "pcmcdclk", |
215 | }; | 215 | }; |
216 | 216 | ||
217 | static struct clk dummy_apb_pclk = { | ||
218 | .name = "apb_pclk", | ||
219 | .id = -1, | ||
220 | }; | ||
221 | |||
222 | static struct clk *clkset_vpllsrc_list[] = { | 217 | static struct clk *clkset_vpllsrc_list[] = { |
223 | [0] = &clk_fin_vpll, | 218 | [0] = &clk_fin_vpll, |
224 | [1] = &clk_sclk_hdmi27m, | 219 | [1] = &clk_sclk_hdmi27m, |
@@ -305,18 +300,6 @@ static struct clk_ops clk_fout_apll_ops = { | |||
305 | 300 | ||
306 | static struct clk init_clocks_off[] = { | 301 | static struct clk init_clocks_off[] = { |
307 | { | 302 | { |
308 | .name = "dma", | ||
309 | .devname = "dma-pl330.0", | ||
310 | .parent = &clk_hclk_psys.clk, | ||
311 | .enable = s5pv210_clk_ip0_ctrl, | ||
312 | .ctrlbit = (1 << 3), | ||
313 | }, { | ||
314 | .name = "dma", | ||
315 | .devname = "dma-pl330.1", | ||
316 | .parent = &clk_hclk_psys.clk, | ||
317 | .enable = s5pv210_clk_ip0_ctrl, | ||
318 | .ctrlbit = (1 << 4), | ||
319 | }, { | ||
320 | .name = "rot", | 303 | .name = "rot", |
321 | .parent = &clk_hclk_dsys.clk, | 304 | .parent = &clk_hclk_dsys.clk, |
322 | .enable = s5pv210_clk_ip0_ctrl, | 305 | .enable = s5pv210_clk_ip0_ctrl, |
@@ -573,6 +556,20 @@ static struct clk clk_hsmmc3 = { | |||
573 | .ctrlbit = (1<<19), | 556 | .ctrlbit = (1<<19), |
574 | }; | 557 | }; |
575 | 558 | ||
559 | static struct clk clk_pdma0 = { | ||
560 | .name = "pdma0", | ||
561 | .parent = &clk_hclk_psys.clk, | ||
562 | .enable = s5pv210_clk_ip0_ctrl, | ||
563 | .ctrlbit = (1 << 3), | ||
564 | }; | ||
565 | |||
566 | static struct clk clk_pdma1 = { | ||
567 | .name = "pdma1", | ||
568 | .parent = &clk_hclk_psys.clk, | ||
569 | .enable = s5pv210_clk_ip0_ctrl, | ||
570 | .ctrlbit = (1 << 4), | ||
571 | }; | ||
572 | |||
576 | static struct clk *clkset_uart_list[] = { | 573 | static struct clk *clkset_uart_list[] = { |
577 | [6] = &clk_mout_mpll.clk, | 574 | [6] = &clk_mout_mpll.clk, |
578 | [7] = &clk_mout_epll.clk, | 575 | [7] = &clk_mout_epll.clk, |
@@ -1075,6 +1072,8 @@ static struct clk *clk_cdev[] = { | |||
1075 | &clk_hsmmc1, | 1072 | &clk_hsmmc1, |
1076 | &clk_hsmmc2, | 1073 | &clk_hsmmc2, |
1077 | &clk_hsmmc3, | 1074 | &clk_hsmmc3, |
1075 | &clk_pdma0, | ||
1076 | &clk_pdma1, | ||
1078 | }; | 1077 | }; |
1079 | 1078 | ||
1080 | /* Clock initialisation code */ | 1079 | /* Clock initialisation code */ |
@@ -1333,6 +1332,8 @@ static struct clk_lookup s5pv210_clk_lookup[] = { | |||
1333 | CLKDEV_INIT(NULL, "spi_busclk0", &clk_p), | 1332 | CLKDEV_INIT(NULL, "spi_busclk0", &clk_p), |
1334 | CLKDEV_INIT("s5pv210-spi.0", "spi_busclk1", &clk_sclk_spi0.clk), | 1333 | CLKDEV_INIT("s5pv210-spi.0", "spi_busclk1", &clk_sclk_spi0.clk), |
1335 | CLKDEV_INIT("s5pv210-spi.1", "spi_busclk1", &clk_sclk_spi1.clk), | 1334 | CLKDEV_INIT("s5pv210-spi.1", "spi_busclk1", &clk_sclk_spi1.clk), |
1335 | CLKDEV_INIT("dma-pl330.0", "apb_pclk", &clk_pdma0), | ||
1336 | CLKDEV_INIT("dma-pl330.1", "apb_pclk", &clk_pdma1), | ||
1336 | }; | 1337 | }; |
1337 | 1338 | ||
1338 | void __init s5pv210_register_clocks(void) | 1339 | void __init s5pv210_register_clocks(void) |
@@ -1361,6 +1362,5 @@ void __init s5pv210_register_clocks(void) | |||
1361 | for (ptr = 0; ptr < ARRAY_SIZE(clk_cdev); ptr++) | 1362 | for (ptr = 0; ptr < ARRAY_SIZE(clk_cdev); ptr++) |
1362 | s3c_disable_clocks(clk_cdev[ptr], 1); | 1363 | s3c_disable_clocks(clk_cdev[ptr], 1); |
1363 | 1364 | ||
1364 | s3c24xx_register_clock(&dummy_apb_pclk); | ||
1365 | s3c_pwmclk_init(); | 1365 | s3c_pwmclk_init(); |
1366 | } | 1366 | } |
diff --git a/arch/arm/mach-s5pv210/mach-goni.c b/arch/arm/mach-s5pv210/mach-goni.c index 3a38f7b34b94..e373de44a8b6 100644 --- a/arch/arm/mach-s5pv210/mach-goni.c +++ b/arch/arm/mach-s5pv210/mach-goni.c | |||
@@ -845,7 +845,7 @@ static struct fimc_source_info goni_camera_sensors[] = { | |||
845 | .mux_id = 0, | 845 | .mux_id = 0, |
846 | .flags = V4L2_MBUS_PCLK_SAMPLE_FALLING | | 846 | .flags = V4L2_MBUS_PCLK_SAMPLE_FALLING | |
847 | V4L2_MBUS_VSYNC_ACTIVE_LOW, | 847 | V4L2_MBUS_VSYNC_ACTIVE_LOW, |
848 | .bus_type = FIMC_BUS_TYPE_ITU_601, | 848 | .fimc_bus_type = FIMC_BUS_TYPE_ITU_601, |
849 | .board_info = &noon010pc30_board_info, | 849 | .board_info = &noon010pc30_board_info, |
850 | .i2c_bus_num = 0, | 850 | .i2c_bus_num = 0, |
851 | .clk_frequency = 16000000UL, | 851 | .clk_frequency = 16000000UL, |
diff --git a/arch/arm/mach-shmobile/board-marzen.c b/arch/arm/mach-shmobile/board-marzen.c index cdcb799e802f..fec49ebc359a 100644 --- a/arch/arm/mach-shmobile/board-marzen.c +++ b/arch/arm/mach-shmobile/board-marzen.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <linux/smsc911x.h> | 32 | #include <linux/smsc911x.h> |
33 | #include <linux/spi/spi.h> | 33 | #include <linux/spi/spi.h> |
34 | #include <linux/spi/sh_hspi.h> | 34 | #include <linux/spi/sh_hspi.h> |
35 | #include <linux/mmc/host.h> | ||
35 | #include <linux/mmc/sh_mobile_sdhi.h> | 36 | #include <linux/mmc/sh_mobile_sdhi.h> |
36 | #include <linux/mfd/tmio.h> | 37 | #include <linux/mfd/tmio.h> |
37 | #include <linux/usb/otg.h> | 38 | #include <linux/usb/otg.h> |
diff --git a/arch/arm/mach-spear3xx/spear3xx.c b/arch/arm/mach-spear3xx/spear3xx.c index f9d754f90c59..d2b3937c4014 100644 --- a/arch/arm/mach-spear3xx/spear3xx.c +++ b/arch/arm/mach-spear3xx/spear3xx.c | |||
@@ -14,7 +14,7 @@ | |||
14 | #define pr_fmt(fmt) "SPEAr3xx: " fmt | 14 | #define pr_fmt(fmt) "SPEAr3xx: " fmt |
15 | 15 | ||
16 | #include <linux/amba/pl022.h> | 16 | #include <linux/amba/pl022.h> |
17 | #include <linux/amba/pl08x.h> | 17 | #include <linux/amba/pl080.h> |
18 | #include <linux/io.h> | 18 | #include <linux/io.h> |
19 | #include <plat/pl080.h> | 19 | #include <plat/pl080.h> |
20 | #include <mach/generic.h> | 20 | #include <mach/generic.h> |
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index c7e3759f16d3..e9db6b4bf65a 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c | |||
@@ -342,6 +342,7 @@ static int __init atomic_pool_init(void) | |||
342 | { | 342 | { |
343 | struct dma_pool *pool = &atomic_pool; | 343 | struct dma_pool *pool = &atomic_pool; |
344 | pgprot_t prot = pgprot_dmacoherent(pgprot_kernel); | 344 | pgprot_t prot = pgprot_dmacoherent(pgprot_kernel); |
345 | gfp_t gfp = GFP_KERNEL | GFP_DMA; | ||
345 | unsigned long nr_pages = pool->size >> PAGE_SHIFT; | 346 | unsigned long nr_pages = pool->size >> PAGE_SHIFT; |
346 | unsigned long *bitmap; | 347 | unsigned long *bitmap; |
347 | struct page *page; | 348 | struct page *page; |
@@ -361,8 +362,8 @@ static int __init atomic_pool_init(void) | |||
361 | ptr = __alloc_from_contiguous(NULL, pool->size, prot, &page, | 362 | ptr = __alloc_from_contiguous(NULL, pool->size, prot, &page, |
362 | atomic_pool_init); | 363 | atomic_pool_init); |
363 | else | 364 | else |
364 | ptr = __alloc_remap_buffer(NULL, pool->size, GFP_KERNEL, prot, | 365 | ptr = __alloc_remap_buffer(NULL, pool->size, gfp, prot, &page, |
365 | &page, atomic_pool_init); | 366 | atomic_pool_init); |
366 | if (ptr) { | 367 | if (ptr) { |
367 | int i; | 368 | int i; |
368 | 369 | ||
diff --git a/arch/arm/net/bpf_jit_32.c b/arch/arm/net/bpf_jit_32.c index 6828ef6ce80e..a0bd8a755bdf 100644 --- a/arch/arm/net/bpf_jit_32.c +++ b/arch/arm/net/bpf_jit_32.c | |||
@@ -576,7 +576,7 @@ load_ind: | |||
576 | /* x = ((*(frame + k)) & 0xf) << 2; */ | 576 | /* x = ((*(frame + k)) & 0xf) << 2; */ |
577 | ctx->seen |= SEEN_X | SEEN_DATA | SEEN_CALL; | 577 | ctx->seen |= SEEN_X | SEEN_DATA | SEEN_CALL; |
578 | /* the interpreter should deal with the negative K */ | 578 | /* the interpreter should deal with the negative K */ |
579 | if (k < 0) | 579 | if ((int)k < 0) |
580 | return -1; | 580 | return -1; |
581 | /* offset in r1: we might have to take the slow path */ | 581 | /* offset in r1: we might have to take the slow path */ |
582 | emit_mov_i(r_off, k, ctx); | 582 | emit_mov_i(r_off, k, ctx); |
diff --git a/arch/arm/plat-orion/Makefile b/arch/arm/plat-orion/Makefile index a82cecb84948..2eca54b65906 100644 --- a/arch/arm/plat-orion/Makefile +++ b/arch/arm/plat-orion/Makefile | |||
@@ -3,8 +3,6 @@ | |||
3 | # | 3 | # |
4 | ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include | 4 | ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include |
5 | 5 | ||
6 | obj-y += addr-map.o | ||
7 | |||
8 | orion-gpio-$(CONFIG_GENERIC_GPIO) += gpio.o | 6 | orion-gpio-$(CONFIG_GENERIC_GPIO) += gpio.o |
9 | obj-$(CONFIG_PLAT_ORION_LEGACY) += irq.o pcie.o time.o common.o mpp.o | 7 | obj-$(CONFIG_PLAT_ORION_LEGACY) += irq.o pcie.o time.o common.o mpp.o |
10 | obj-$(CONFIG_PLAT_ORION_LEGACY) += $(orion-gpio-y) | 8 | obj-$(CONFIG_PLAT_ORION_LEGACY) += $(orion-gpio-y) |
diff --git a/arch/arm/plat-orion/addr-map.c b/arch/arm/plat-orion/addr-map.c deleted file mode 100644 index 807ac8e5cbc0..000000000000 --- a/arch/arm/plat-orion/addr-map.c +++ /dev/null | |||
@@ -1,178 +0,0 @@ | |||
1 | /* | ||
2 | * arch/arm/plat-orion/addr-map.c | ||
3 | * | ||
4 | * Address map functions for Marvell Orion based SoCs | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/module.h> | ||
13 | #include <linux/init.h> | ||
14 | #include <linux/mbus.h> | ||
15 | #include <linux/io.h> | ||
16 | #include <plat/addr-map.h> | ||
17 | |||
18 | struct mbus_dram_target_info orion_mbus_dram_info; | ||
19 | |||
20 | const struct mbus_dram_target_info *mv_mbus_dram_info(void) | ||
21 | { | ||
22 | return &orion_mbus_dram_info; | ||
23 | } | ||
24 | EXPORT_SYMBOL_GPL(mv_mbus_dram_info); | ||
25 | |||
26 | /* | ||
27 | * DDR target is the same on all Orion platforms. | ||
28 | */ | ||
29 | #define TARGET_DDR 0 | ||
30 | |||
31 | /* | ||
32 | * Helpers to get DDR bank info | ||
33 | */ | ||
34 | #define DDR_BASE_CS_OFF(n) (0x0000 + ((n) << 3)) | ||
35 | #define DDR_SIZE_CS_OFF(n) (0x0004 + ((n) << 3)) | ||
36 | |||
37 | /* | ||
38 | * CPU Address Decode Windows registers | ||
39 | */ | ||
40 | #define WIN_CTRL_OFF 0x0000 | ||
41 | #define WIN_BASE_OFF 0x0004 | ||
42 | #define WIN_REMAP_LO_OFF 0x0008 | ||
43 | #define WIN_REMAP_HI_OFF 0x000c | ||
44 | |||
45 | #define ATTR_HW_COHERENCY (0x1 << 4) | ||
46 | |||
47 | /* | ||
48 | * Default implementation | ||
49 | */ | ||
50 | static void __init __iomem * | ||
51 | orion_win_cfg_base(const struct orion_addr_map_cfg *cfg, int win) | ||
52 | { | ||
53 | return cfg->bridge_virt_base + (win << 4); | ||
54 | } | ||
55 | |||
56 | /* | ||
57 | * Default implementation | ||
58 | */ | ||
59 | static int __init orion_cpu_win_can_remap(const struct orion_addr_map_cfg *cfg, | ||
60 | const int win) | ||
61 | { | ||
62 | if (win < cfg->remappable_wins) | ||
63 | return 1; | ||
64 | |||
65 | return 0; | ||
66 | } | ||
67 | |||
68 | void __init orion_setup_cpu_win(const struct orion_addr_map_cfg *cfg, | ||
69 | const int win, const u32 base, | ||
70 | const u32 size, const u8 target, | ||
71 | const u8 attr, const int remap) | ||
72 | { | ||
73 | void __iomem *addr = cfg->win_cfg_base(cfg, win); | ||
74 | u32 ctrl, base_high, remap_addr; | ||
75 | |||
76 | if (win >= cfg->num_wins) { | ||
77 | printk(KERN_ERR "setup_cpu_win: trying to allocate window " | ||
78 | "%d when only %d allowed\n", win, cfg->num_wins); | ||
79 | } | ||
80 | |||
81 | base_high = base & 0xffff0000; | ||
82 | ctrl = ((size - 1) & 0xffff0000) | (attr << 8) | (target << 4) | 1; | ||
83 | |||
84 | writel(base_high, addr + WIN_BASE_OFF); | ||
85 | writel(ctrl, addr + WIN_CTRL_OFF); | ||
86 | if (cfg->cpu_win_can_remap(cfg, win)) { | ||
87 | if (remap < 0) | ||
88 | remap_addr = base; | ||
89 | else | ||
90 | remap_addr = remap; | ||
91 | writel(remap_addr & 0xffff0000, addr + WIN_REMAP_LO_OFF); | ||
92 | writel(0, addr + WIN_REMAP_HI_OFF); | ||
93 | } | ||
94 | } | ||
95 | |||
96 | /* | ||
97 | * Configure a number of windows. | ||
98 | */ | ||
99 | static void __init orion_setup_cpu_wins(const struct orion_addr_map_cfg * cfg, | ||
100 | const struct orion_addr_map_info *info) | ||
101 | { | ||
102 | while (info->win != -1) { | ||
103 | orion_setup_cpu_win(cfg, info->win, info->base, info->size, | ||
104 | info->target, info->attr, info->remap); | ||
105 | info++; | ||
106 | } | ||
107 | } | ||
108 | |||
109 | static void __init orion_disable_wins(const struct orion_addr_map_cfg * cfg) | ||
110 | { | ||
111 | void __iomem *addr; | ||
112 | int i; | ||
113 | |||
114 | for (i = 0; i < cfg->num_wins; i++) { | ||
115 | addr = cfg->win_cfg_base(cfg, i); | ||
116 | |||
117 | writel(0, addr + WIN_BASE_OFF); | ||
118 | writel(0, addr + WIN_CTRL_OFF); | ||
119 | if (cfg->cpu_win_can_remap(cfg, i)) { | ||
120 | writel(0, addr + WIN_REMAP_LO_OFF); | ||
121 | writel(0, addr + WIN_REMAP_HI_OFF); | ||
122 | } | ||
123 | } | ||
124 | } | ||
125 | |||
126 | /* | ||
127 | * Disable, clear and configure windows. | ||
128 | */ | ||
129 | void __init orion_config_wins(struct orion_addr_map_cfg * cfg, | ||
130 | const struct orion_addr_map_info *info) | ||
131 | { | ||
132 | if (!cfg->cpu_win_can_remap) | ||
133 | cfg->cpu_win_can_remap = orion_cpu_win_can_remap; | ||
134 | |||
135 | if (!cfg->win_cfg_base) | ||
136 | cfg->win_cfg_base = orion_win_cfg_base; | ||
137 | |||
138 | orion_disable_wins(cfg); | ||
139 | |||
140 | if (info) | ||
141 | orion_setup_cpu_wins(cfg, info); | ||
142 | } | ||
143 | |||
144 | /* | ||
145 | * Setup MBUS dram target info. | ||
146 | */ | ||
147 | void __init orion_setup_cpu_mbus_target(const struct orion_addr_map_cfg *cfg, | ||
148 | const void __iomem *ddr_window_cpu_base) | ||
149 | { | ||
150 | int i; | ||
151 | int cs; | ||
152 | |||
153 | orion_mbus_dram_info.mbus_dram_target_id = TARGET_DDR; | ||
154 | |||
155 | for (i = 0, cs = 0; i < 4; i++) { | ||
156 | u32 base = readl(ddr_window_cpu_base + DDR_BASE_CS_OFF(i)); | ||
157 | u32 size = readl(ddr_window_cpu_base + DDR_SIZE_CS_OFF(i)); | ||
158 | |||
159 | /* | ||
160 | * We only take care of entries for which the chip | ||
161 | * select is enabled, and that don't have high base | ||
162 | * address bits set (devices can only access the first | ||
163 | * 32 bits of the memory). | ||
164 | */ | ||
165 | if ((size & 1) && !(base & 0xF)) { | ||
166 | struct mbus_dram_window *w; | ||
167 | |||
168 | w = &orion_mbus_dram_info.cs[cs++]; | ||
169 | w->cs_index = i; | ||
170 | w->mbus_attr = 0xf & ~(1 << i); | ||
171 | if (cfg->hw_io_coherency) | ||
172 | w->mbus_attr |= ATTR_HW_COHERENCY; | ||
173 | w->base = base & 0xffff0000; | ||
174 | w->size = (size | 0x0000ffff) + 1; | ||
175 | } | ||
176 | } | ||
177 | orion_mbus_dram_info.num_cs = cs; | ||
178 | } | ||
diff --git a/arch/arm/plat-orion/gpio.c b/arch/arm/plat-orion/gpio.c index c29ee7ea200b..e39c2ba6e2fb 100644 --- a/arch/arm/plat-orion/gpio.c +++ b/arch/arm/plat-orion/gpio.c | |||
@@ -439,6 +439,64 @@ static void gpio_irq_handler(unsigned irq, struct irq_desc *desc) | |||
439 | } | 439 | } |
440 | } | 440 | } |
441 | 441 | ||
442 | #ifdef CONFIG_DEBUG_FS | ||
443 | #include <linux/seq_file.h> | ||
444 | |||
445 | static void orion_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip) | ||
446 | { | ||
447 | struct orion_gpio_chip *ochip = | ||
448 | container_of(chip, struct orion_gpio_chip, chip); | ||
449 | u32 out, io_conf, blink, in_pol, data_in, cause, edg_msk, lvl_msk; | ||
450 | int i; | ||
451 | |||
452 | out = readl_relaxed(GPIO_OUT(ochip)); | ||
453 | io_conf = readl_relaxed(GPIO_IO_CONF(ochip)); | ||
454 | blink = readl_relaxed(GPIO_BLINK_EN(ochip)); | ||
455 | in_pol = readl_relaxed(GPIO_IN_POL(ochip)); | ||
456 | data_in = readl_relaxed(GPIO_DATA_IN(ochip)); | ||
457 | cause = readl_relaxed(GPIO_EDGE_CAUSE(ochip)); | ||
458 | edg_msk = readl_relaxed(GPIO_EDGE_MASK(ochip)); | ||
459 | lvl_msk = readl_relaxed(GPIO_LEVEL_MASK(ochip)); | ||
460 | |||
461 | for (i = 0; i < chip->ngpio; i++) { | ||
462 | const char *label; | ||
463 | u32 msk; | ||
464 | bool is_out; | ||
465 | |||
466 | label = gpiochip_is_requested(chip, i); | ||
467 | if (!label) | ||
468 | continue; | ||
469 | |||
470 | msk = 1 << i; | ||
471 | is_out = !(io_conf & msk); | ||
472 | |||
473 | seq_printf(s, " gpio-%-3d (%-20.20s)", chip->base + i, label); | ||
474 | |||
475 | if (is_out) { | ||
476 | seq_printf(s, " out %s %s\n", | ||
477 | out & msk ? "hi" : "lo", | ||
478 | blink & msk ? "(blink )" : ""); | ||
479 | continue; | ||
480 | } | ||
481 | |||
482 | seq_printf(s, " in %s (act %s) - IRQ", | ||
483 | (data_in ^ in_pol) & msk ? "hi" : "lo", | ||
484 | in_pol & msk ? "lo" : "hi"); | ||
485 | if (!((edg_msk | lvl_msk) & msk)) { | ||
486 | seq_printf(s, " disabled\n"); | ||
487 | continue; | ||
488 | } | ||
489 | if (edg_msk & msk) | ||
490 | seq_printf(s, " edge "); | ||
491 | if (lvl_msk & msk) | ||
492 | seq_printf(s, " level"); | ||
493 | seq_printf(s, " (%s)\n", cause & msk ? "pending" : "clear "); | ||
494 | } | ||
495 | } | ||
496 | #else | ||
497 | #define orion_gpio_dbg_show NULL | ||
498 | #endif | ||
499 | |||
442 | void __init orion_gpio_init(struct device_node *np, | 500 | void __init orion_gpio_init(struct device_node *np, |
443 | int gpio_base, int ngpio, | 501 | int gpio_base, int ngpio, |
444 | void __iomem *base, int mask_offset, | 502 | void __iomem *base, int mask_offset, |
@@ -471,6 +529,7 @@ void __init orion_gpio_init(struct device_node *np, | |||
471 | #ifdef CONFIG_OF | 529 | #ifdef CONFIG_OF |
472 | ochip->chip.of_node = np; | 530 | ochip->chip.of_node = np; |
473 | #endif | 531 | #endif |
532 | ochip->chip.dbg_show = orion_gpio_dbg_show; | ||
474 | 533 | ||
475 | spin_lock_init(&ochip->lock); | 534 | spin_lock_init(&ochip->lock); |
476 | ochip->base = (void __iomem *)base; | 535 | ochip->base = (void __iomem *)base; |
diff --git a/arch/arm/plat-orion/pcie.c b/arch/arm/plat-orion/pcie.c index f20a321088a2..8b8c06d2e9c4 100644 --- a/arch/arm/plat-orion/pcie.c +++ b/arch/arm/plat-orion/pcie.c | |||
@@ -120,12 +120,14 @@ void __init orion_pcie_reset(void __iomem *base) | |||
120 | * BAR[0,2] -> disabled, BAR[1] -> covers all DRAM banks | 120 | * BAR[0,2] -> disabled, BAR[1] -> covers all DRAM banks |
121 | * WIN[0-3] -> DRAM bank[0-3] | 121 | * WIN[0-3] -> DRAM bank[0-3] |
122 | */ | 122 | */ |
123 | static void __init orion_pcie_setup_wins(void __iomem *base, | 123 | static void __init orion_pcie_setup_wins(void __iomem *base) |
124 | struct mbus_dram_target_info *dram) | ||
125 | { | 124 | { |
125 | const struct mbus_dram_target_info *dram; | ||
126 | u32 size; | 126 | u32 size; |
127 | int i; | 127 | int i; |
128 | 128 | ||
129 | dram = mv_mbus_dram_info(); | ||
130 | |||
129 | /* | 131 | /* |
130 | * First, disable and clear BARs and windows. | 132 | * First, disable and clear BARs and windows. |
131 | */ | 133 | */ |
@@ -150,7 +152,7 @@ static void __init orion_pcie_setup_wins(void __iomem *base, | |||
150 | */ | 152 | */ |
151 | size = 0; | 153 | size = 0; |
152 | for (i = 0; i < dram->num_cs; i++) { | 154 | for (i = 0; i < dram->num_cs; i++) { |
153 | struct mbus_dram_window *cs = dram->cs + i; | 155 | const struct mbus_dram_window *cs = dram->cs + i; |
154 | 156 | ||
155 | writel(cs->base & 0xffff0000, base + PCIE_WIN04_BASE_OFF(i)); | 157 | writel(cs->base & 0xffff0000, base + PCIE_WIN04_BASE_OFF(i)); |
156 | writel(0, base + PCIE_WIN04_REMAP_OFF(i)); | 158 | writel(0, base + PCIE_WIN04_REMAP_OFF(i)); |
@@ -184,7 +186,7 @@ void __init orion_pcie_setup(void __iomem *base) | |||
184 | /* | 186 | /* |
185 | * Point PCIe unit MBUS decode windows to DRAM space. | 187 | * Point PCIe unit MBUS decode windows to DRAM space. |
186 | */ | 188 | */ |
187 | orion_pcie_setup_wins(base, &orion_mbus_dram_info); | 189 | orion_pcie_setup_wins(base); |
188 | 190 | ||
189 | /* | 191 | /* |
190 | * Master + slave enable. | 192 | * Master + slave enable. |
diff --git a/arch/arm/plat-spear/Kconfig b/arch/arm/plat-spear/Kconfig index 739d016eb273..8a08c31b5e20 100644 --- a/arch/arm/plat-spear/Kconfig +++ b/arch/arm/plat-spear/Kconfig | |||
@@ -10,7 +10,7 @@ choice | |||
10 | 10 | ||
11 | config ARCH_SPEAR13XX | 11 | config ARCH_SPEAR13XX |
12 | bool "ST SPEAr13xx with Device Tree" | 12 | bool "ST SPEAr13xx with Device Tree" |
13 | select ARCH_HAVE_CPUFREQ | 13 | select ARCH_HAS_CPUFREQ |
14 | select ARM_GIC | 14 | select ARM_GIC |
15 | select CPU_V7 | 15 | select CPU_V7 |
16 | select GPIO_SPEAR_SPICS | 16 | select GPIO_SPEAR_SPICS |