diff options
Diffstat (limited to 'arch')
216 files changed, 4226 insertions, 2031 deletions
diff --git a/arch/Kconfig b/arch/Kconfig index 366ec06a5185..cc74aaea116c 100644 --- a/arch/Kconfig +++ b/arch/Kconfig | |||
@@ -300,15 +300,16 @@ config SECCOMP_FILTER | |||
300 | 300 | ||
301 | See Documentation/prctl/seccomp_filter.txt for details. | 301 | See Documentation/prctl/seccomp_filter.txt for details. |
302 | 302 | ||
303 | config HAVE_RCU_USER_QS | 303 | config HAVE_CONTEXT_TRACKING |
304 | bool | 304 | bool |
305 | help | 305 | help |
306 | Provide kernel entry/exit hooks necessary for userspace | 306 | Provide kernel/user boundaries probes necessary for subsystems |
307 | RCU extended quiescent state. Syscalls need to be wrapped inside | 307 | that need it, such as userspace RCU extended quiescent state. |
308 | rcu_user_exit()-rcu_user_enter() through the slow path using | 308 | Syscalls need to be wrapped inside user_exit()-user_enter() through |
309 | TIF_NOHZ flag. Exceptions handlers must be wrapped as well. Irqs | 309 | the slow path using TIF_NOHZ flag. Exceptions handlers must be |
310 | are already protected inside rcu_irq_enter/rcu_irq_exit() but | 310 | wrapped as well. Irqs are already protected inside |
311 | preemption or signal handling on irq exit still need to be protected. | 311 | rcu_irq_enter/rcu_irq_exit() but preemption or signal handling on |
312 | irq exit still need to be protected. | ||
312 | 313 | ||
313 | config HAVE_VIRT_CPU_ACCOUNTING | 314 | config HAVE_VIRT_CPU_ACCOUNTING |
314 | bool | 315 | bool |
diff --git a/arch/alpha/include/asm/ioctls.h b/arch/alpha/include/asm/ioctls.h index 80e1cee90f1f..92c557be49fc 100644 --- a/arch/alpha/include/asm/ioctls.h +++ b/arch/alpha/include/asm/ioctls.h | |||
@@ -95,6 +95,9 @@ | |||
95 | #define TIOCGDEV _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */ | 95 | #define TIOCGDEV _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */ |
96 | #define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */ | 96 | #define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */ |
97 | #define TIOCVHANGUP 0x5437 | 97 | #define TIOCVHANGUP 0x5437 |
98 | #define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */ | ||
99 | #define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */ | ||
100 | #define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */ | ||
98 | 101 | ||
99 | #define TIOCSERCONFIG 0x5453 | 102 | #define TIOCSERCONFIG 0x5453 |
100 | #define TIOCSERGWILD 0x5454 | 103 | #define TIOCSERGWILD 0x5454 |
diff --git a/arch/alpha/include/asm/mman.h b/arch/alpha/include/asm/mman.h index cbeb3616a28e..0086b472bc2b 100644 --- a/arch/alpha/include/asm/mman.h +++ b/arch/alpha/include/asm/mman.h | |||
@@ -63,4 +63,15 @@ | |||
63 | /* compatibility flags */ | 63 | /* compatibility flags */ |
64 | #define MAP_FILE 0 | 64 | #define MAP_FILE 0 |
65 | 65 | ||
66 | /* | ||
67 | * When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size. | ||
68 | * This gives us 6 bits, which is enough until someone invents 128 bit address | ||
69 | * spaces. | ||
70 | * | ||
71 | * Assume these are all power of twos. | ||
72 | * When 0 use the default page size. | ||
73 | */ | ||
74 | #define MAP_HUGE_SHIFT 26 | ||
75 | #define MAP_HUGE_MASK 0x3f | ||
76 | |||
66 | #endif /* __ALPHA_MMAN_H__ */ | 77 | #endif /* __ALPHA_MMAN_H__ */ |
diff --git a/arch/alpha/kernel/srmcons.c b/arch/alpha/kernel/srmcons.c index 5d5865204a1d..59b7bbad8394 100644 --- a/arch/alpha/kernel/srmcons.c +++ b/arch/alpha/kernel/srmcons.c | |||
@@ -205,7 +205,6 @@ static const struct tty_operations srmcons_ops = { | |||
205 | static int __init | 205 | static int __init |
206 | srmcons_init(void) | 206 | srmcons_init(void) |
207 | { | 207 | { |
208 | tty_port_init(&srmcons_singleton.port); | ||
209 | setup_timer(&srmcons_singleton.timer, srmcons_receive_chars, | 208 | setup_timer(&srmcons_singleton.timer, srmcons_receive_chars, |
210 | (unsigned long)&srmcons_singleton); | 209 | (unsigned long)&srmcons_singleton); |
211 | if (srm_is_registered_console) { | 210 | if (srm_is_registered_console) { |
@@ -215,6 +214,9 @@ srmcons_init(void) | |||
215 | driver = alloc_tty_driver(MAX_SRM_CONSOLE_DEVICES); | 214 | driver = alloc_tty_driver(MAX_SRM_CONSOLE_DEVICES); |
216 | if (!driver) | 215 | if (!driver) |
217 | return -ENOMEM; | 216 | return -ENOMEM; |
217 | |||
218 | tty_port_init(&srmcons_singleton.port); | ||
219 | |||
218 | driver->driver_name = "srm"; | 220 | driver->driver_name = "srm"; |
219 | driver->name = "srm"; | 221 | driver->name = "srm"; |
220 | driver->major = 0; /* dynamic */ | 222 | driver->major = 0; /* dynamic */ |
@@ -227,6 +229,7 @@ srmcons_init(void) | |||
227 | err = tty_register_driver(driver); | 229 | err = tty_register_driver(driver); |
228 | if (err) { | 230 | if (err) { |
229 | put_tty_driver(driver); | 231 | put_tty_driver(driver); |
232 | tty_port_destroy(&srmcons_singleton.port); | ||
230 | return err; | 233 | return err; |
231 | } | 234 | } |
232 | srmcons_driver = driver; | 235 | srmcons_driver = driver; |
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 9759fec0b704..8a027f9e339e 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -330,6 +330,8 @@ config ARCH_AT91 | |||
330 | select IRQ_DOMAIN | 330 | select IRQ_DOMAIN |
331 | select NEED_MACH_GPIO_H | 331 | select NEED_MACH_GPIO_H |
332 | select NEED_MACH_IO_H if PCCARD | 332 | select NEED_MACH_IO_H if PCCARD |
333 | select PINCTRL | ||
334 | select PINCTRL_AT91 if USE_OF | ||
333 | help | 335 | help |
334 | This enables support for systems based on Atmel | 336 | This enables support for systems based on Atmel |
335 | AT91RM9200 and AT91SAM9* processors. | 337 | AT91RM9200 and AT91SAM9* processors. |
@@ -364,6 +366,7 @@ config ARCH_CNS3XXX | |||
364 | 366 | ||
365 | config ARCH_CLPS711X | 367 | config ARCH_CLPS711X |
366 | bool "Cirrus Logic CLPS711x/EP721x/EP731x-based" | 368 | bool "Cirrus Logic CLPS711x/EP721x/EP731x-based" |
369 | select ARCH_REQUIRE_GPIOLIB | ||
367 | select ARCH_USES_GETTIMEOFFSET | 370 | select ARCH_USES_GETTIMEOFFSET |
368 | select CLKDEV_LOOKUP | 371 | select CLKDEV_LOOKUP |
369 | select COMMON_CLK | 372 | select COMMON_CLK |
@@ -587,6 +590,7 @@ config ARCH_MMP | |||
587 | select GPIO_PXA | 590 | select GPIO_PXA |
588 | select IRQ_DOMAIN | 591 | select IRQ_DOMAIN |
589 | select NEED_MACH_GPIO_H | 592 | select NEED_MACH_GPIO_H |
593 | select PINCTRL | ||
590 | select PLAT_PXA | 594 | select PLAT_PXA |
591 | select SPARSE_IRQ | 595 | select SPARSE_IRQ |
592 | help | 596 | help |
@@ -905,6 +909,7 @@ config ARCH_NOMADIK | |||
905 | 909 | ||
906 | config PLAT_SPEAR | 910 | config PLAT_SPEAR |
907 | bool "ST SPEAr" | 911 | bool "ST SPEAr" |
912 | select ARCH_HAS_CPUFREQ | ||
908 | select ARCH_REQUIRE_GPIOLIB | 913 | select ARCH_REQUIRE_GPIOLIB |
909 | select ARM_AMBA | 914 | select ARM_AMBA |
910 | select CLKDEV_LOOKUP | 915 | select CLKDEV_LOOKUP |
diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 5f914fca911b..c35baf102f6f 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile | |||
@@ -292,10 +292,10 @@ zinstall uinstall install: vmlinux | |||
292 | $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@ | 292 | $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@ |
293 | 293 | ||
294 | %.dtb: scripts | 294 | %.dtb: scripts |
295 | $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@ | 295 | $(Q)$(MAKE) $(build)=$(boot)/dts MACHINE=$(MACHINE) $(boot)/dts/$@ |
296 | 296 | ||
297 | dtbs: scripts | 297 | dtbs: scripts |
298 | $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@ | 298 | $(Q)$(MAKE) $(build)=$(boot)/dts MACHINE=$(MACHINE) dtbs |
299 | 299 | ||
300 | # We use MRPROPER_FILES and CLEAN_FILES now | 300 | # We use MRPROPER_FILES and CLEAN_FILES now |
301 | archclean: | 301 | archclean: |
diff --git a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile index 9137df539b61..abfce280f57b 100644 --- a/arch/arm/boot/Makefile +++ b/arch/arm/boot/Makefile | |||
@@ -15,8 +15,6 @@ ifneq ($(MACHINE),) | |||
15 | include $(srctree)/$(MACHINE)/Makefile.boot | 15 | include $(srctree)/$(MACHINE)/Makefile.boot |
16 | endif | 16 | endif |
17 | 17 | ||
18 | include $(srctree)/arch/arm/boot/dts/Makefile | ||
19 | |||
20 | # Note: the following conditions must always be true: | 18 | # Note: the following conditions must always be true: |
21 | # ZRELADDR == virt_to_phys(PAGE_OFFSET + TEXT_OFFSET) | 19 | # ZRELADDR == virt_to_phys(PAGE_OFFSET + TEXT_OFFSET) |
22 | # PARAMS_PHYS must be within 4MB of ZRELADDR | 20 | # PARAMS_PHYS must be within 4MB of ZRELADDR |
@@ -59,16 +57,6 @@ $(obj)/zImage: $(obj)/compressed/vmlinux FORCE | |||
59 | 57 | ||
60 | endif | 58 | endif |
61 | 59 | ||
62 | targets += $(dtb-y) | ||
63 | |||
64 | # Rule to build device tree blobs | ||
65 | $(obj)/%.dtb: $(src)/dts/%.dts FORCE | ||
66 | $(call if_changed_dep,dtc) | ||
67 | |||
68 | $(obj)/dtbs: $(addprefix $(obj)/, $(dtb-y)) | ||
69 | |||
70 | clean-files := *.dtb | ||
71 | |||
72 | ifneq ($(LOADADDR),) | 60 | ifneq ($(LOADADDR),) |
73 | UIMAGE_LOADADDR=$(LOADADDR) | 61 | UIMAGE_LOADADDR=$(LOADADDR) |
74 | else | 62 | else |
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index f37cf9fa5fa0..262493752234 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile | |||
@@ -1,21 +1,37 @@ | |||
1 | ifeq ($(CONFIG_OF),y) | 1 | ifeq ($(CONFIG_OF),y) |
2 | 2 | ||
3 | dtb-$(CONFIG_ARCH_AT91) += aks-cdu.dtb \ | 3 | # Keep at91 dtb files sorted alphabetically for each SoC |
4 | at91sam9263ek.dtb \ | 4 | # rm9200 |
5 | at91sam9g20ek_2mmc.dtb \ | 5 | dtb-$(CONFIG_ARCH_AT91) += at91rm9200ek.dtb |
6 | at91sam9g20ek.dtb \ | 6 | # sam9260 |
7 | at91sam9g25ek.dtb \ | 7 | dtb-$(CONFIG_ARCH_AT91) += animeo_ip.dtb |
8 | at91sam9m10g45ek.dtb \ | 8 | dtb-$(CONFIG_ARCH_AT91) += aks-cdu.dtb |
9 | at91sam9n12ek.dtb \ | 9 | dtb-$(CONFIG_ARCH_AT91) += ethernut5.dtb |
10 | ethernut5.dtb \ | 10 | dtb-$(CONFIG_ARCH_AT91) += evk-pro3.dtb |
11 | evk-pro3.dtb \ | 11 | dtb-$(CONFIG_ARCH_AT91) += tny_a9260.dtb |
12 | kizbox.dtb \ | 12 | dtb-$(CONFIG_ARCH_AT91) += usb_a9260.dtb |
13 | tny_a9260.dtb \ | 13 | # sam9263 |
14 | tny_a9263.dtb \ | 14 | dtb-$(CONFIG_ARCH_AT91) += at91sam9263ek.dtb |
15 | tny_a9g20.dtb \ | 15 | dtb-$(CONFIG_ARCH_AT91) += tny_a9263.dtb |
16 | usb_a9260.dtb \ | 16 | dtb-$(CONFIG_ARCH_AT91) += usb_a9263.dtb |
17 | usb_a9263.dtb \ | 17 | # sam9g20 |
18 | usb_a9g20.dtb | 18 | dtb-$(CONFIG_ARCH_AT91) += at91sam9g20ek.dtb |
19 | dtb-$(CONFIG_ARCH_AT91) += at91sam9g20ek_2mmc.dtb | ||
20 | dtb-$(CONFIG_ARCH_AT91) += kizbox.dtb | ||
21 | dtb-$(CONFIG_ARCH_AT91) += tny_a9g20.dtb | ||
22 | dtb-$(CONFIG_ARCH_AT91) += usb_a9g20.dtb | ||
23 | # sam9g45 | ||
24 | dtb-$(CONFIG_ARCH_AT91) += at91sam9m10g45ek.dtb | ||
25 | dtb-$(CONFIG_ARCH_AT91) += pm9g45.dtb | ||
26 | # sam9n12 | ||
27 | dtb-$(CONFIG_ARCH_AT91) += at91sam9n12ek.dtb | ||
28 | # sam9x5 | ||
29 | dtb-$(CONFIG_ARCH_AT91) += at91sam9g15ek.dtb | ||
30 | dtb-$(CONFIG_ARCH_AT91) += at91sam9g25ek.dtb | ||
31 | dtb-$(CONFIG_ARCH_AT91) += at91sam9g35ek.dtb | ||
32 | dtb-$(CONFIG_ARCH_AT91) += at91sam9x25ek.dtb | ||
33 | dtb-$(CONFIG_ARCH_AT91) += at91sam9x35ek.dtb | ||
34 | |||
19 | dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb | 35 | dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-b.dtb |
20 | dtb-$(CONFIG_ARCH_DOVE) += dove-cm-a510.dtb \ | 36 | dtb-$(CONFIG_ARCH_DOVE) += dove-cm-a510.dtb \ |
21 | dove-cubox.dtb \ | 37 | dove-cubox.dtb \ |
@@ -104,4 +120,12 @@ dtb-$(CONFIG_ARCH_VT8500) += vt8500-bv07.dtb \ | |||
104 | wm8505-ref.dtb \ | 120 | wm8505-ref.dtb \ |
105 | wm8650-mid.dtb | 121 | wm8650-mid.dtb |
106 | 122 | ||
123 | targets += dtbs | ||
107 | endif | 124 | endif |
125 | |||
126 | # *.dtb used to be generated in the directory above. Clean out the | ||
127 | # old build results so people don't accidentally use them. | ||
128 | dtbs: $(addprefix $(obj)/, $(dtb-y)) | ||
129 | $(Q)rm -f $(obj)/../*.dtb | ||
130 | |||
131 | clean-files := *.dtb | ||
diff --git a/arch/arm/boot/dts/animeo_ip.dts b/arch/arm/boot/dts/animeo_ip.dts new file mode 100644 index 000000000000..74d92cd29d87 --- /dev/null +++ b/arch/arm/boot/dts/animeo_ip.dts | |||
@@ -0,0 +1,178 @@ | |||
1 | /* | ||
2 | * animeo_ip.dts - Device Tree file for Somfy Animeo IP Boards | ||
3 | * | ||
4 | * Copyright (C) 2011-2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | ||
5 | * | ||
6 | * Licensed under GPLv2 only. | ||
7 | */ | ||
8 | |||
9 | /dts-v1/; | ||
10 | /include/ "at91sam9260.dtsi" | ||
11 | |||
12 | / { | ||
13 | model = "Somfy Animeo IP"; | ||
14 | compatible = "somfy,animeo-ip", "atmel,at91sam9260", "atmel,at91sam9"; | ||
15 | |||
16 | aliases { | ||
17 | serial0 = &usart1; | ||
18 | serial1 = &usart2; | ||
19 | serial2 = &usart0; | ||
20 | serial3 = &dbgu; | ||
21 | serial4 = &usart3; | ||
22 | serial5 = &uart0; | ||
23 | serial6 = &uart1; | ||
24 | }; | ||
25 | |||
26 | chosen { | ||
27 | linux,stdout-path = &usart2; | ||
28 | }; | ||
29 | |||
30 | memory { | ||
31 | reg = <0x20000000 0x4000000>; | ||
32 | }; | ||
33 | |||
34 | clocks { | ||
35 | #address-cells = <1>; | ||
36 | #size-cells = <1>; | ||
37 | ranges; | ||
38 | |||
39 | main_clock: clock@0 { | ||
40 | compatible = "atmel,osc", "fixed-clock"; | ||
41 | clock-frequency = <18432000>; | ||
42 | }; | ||
43 | }; | ||
44 | |||
45 | ahb { | ||
46 | apb { | ||
47 | usart0: serial@fffb0000 { | ||
48 | pinctrl-0 = <&pinctrl_usart0 &pinctrl_usart0_rts>; | ||
49 | linux,rs485-enabled-at-boot-time; | ||
50 | status = "okay"; | ||
51 | }; | ||
52 | |||
53 | usart1: serial@fffb4000 { | ||
54 | pinctrl-0 = <&pinctrl_usart1 &pinctrl_usart1_rts>; | ||
55 | linux,rs485-enabled-at-boot-time; | ||
56 | status = "okay"; | ||
57 | }; | ||
58 | |||
59 | usart2: serial@fffb8000 { | ||
60 | pinctrl-0 = <&pinctrl_usart2>; | ||
61 | status = "okay"; | ||
62 | }; | ||
63 | |||
64 | macb0: ethernet@fffc4000 { | ||
65 | pinctrl-0 = <&pinctrl_macb_rmii &pinctrl_macb_rmii_mii>; | ||
66 | phy-mode = "mii"; | ||
67 | status = "okay"; | ||
68 | }; | ||
69 | |||
70 | mmc0: mmc@fffa8000 { | ||
71 | pinctrl-0 = <&pinctrl_mmc0_clk | ||
72 | &pinctrl_mmc0_slot1_cmd_dat0 | ||
73 | &pinctrl_mmc0_slot1_dat1_3>; | ||
74 | status = "okay"; | ||
75 | |||
76 | slot@1 { | ||
77 | reg = <1>; | ||
78 | bus-width = <4>; | ||
79 | }; | ||
80 | }; | ||
81 | }; | ||
82 | |||
83 | nand0: nand@40000000 { | ||
84 | nand-bus-width = <8>; | ||
85 | nand-ecc-mode = "soft"; | ||
86 | nand-on-flash-bbt; | ||
87 | status = "okay"; | ||
88 | |||
89 | at91bootstrap@0 { | ||
90 | label = "at91bootstrap"; | ||
91 | reg = <0x0 0x8000>; | ||
92 | }; | ||
93 | |||
94 | barebox@8000 { | ||
95 | label = "barebox"; | ||
96 | reg = <0x8000 0x40000>; | ||
97 | }; | ||
98 | |||
99 | bareboxenv@48000 { | ||
100 | label = "bareboxenv"; | ||
101 | reg = <0x48000 0x8000>; | ||
102 | }; | ||
103 | |||
104 | user_block@0x50000 { | ||
105 | label = "user_block"; | ||
106 | reg = <0x50000 0xb0000>; | ||
107 | }; | ||
108 | |||
109 | kernel@100000 { | ||
110 | label = "kernel"; | ||
111 | reg = <0x100000 0x1b0000>; | ||
112 | }; | ||
113 | |||
114 | root@2b0000 { | ||
115 | label = "root"; | ||
116 | reg = <0x2b0000 0x1D50000>; | ||
117 | }; | ||
118 | }; | ||
119 | |||
120 | usb0: ohci@00500000 { | ||
121 | num-ports = <2>; | ||
122 | atmel,vbus-gpio = <&pioB 15 1>; | ||
123 | status = "okay"; | ||
124 | }; | ||
125 | }; | ||
126 | |||
127 | leds { | ||
128 | compatible = "gpio-leds"; | ||
129 | |||
130 | power_green { | ||
131 | label = "power_green"; | ||
132 | gpios = <&pioC 17 0>; | ||
133 | linux,default-trigger = "heartbeat"; | ||
134 | }; | ||
135 | |||
136 | power_red { | ||
137 | label = "power_red"; | ||
138 | gpios = <&pioA 2 0>; | ||
139 | }; | ||
140 | |||
141 | tx_green { | ||
142 | label = "tx_green"; | ||
143 | gpios = <&pioC 19 0>; | ||
144 | }; | ||
145 | |||
146 | tx_red { | ||
147 | label = "tx_red"; | ||
148 | gpios = <&pioC 18 0>; | ||
149 | }; | ||
150 | }; | ||
151 | |||
152 | gpio_keys { | ||
153 | compatible = "gpio-keys"; | ||
154 | #address-cells = <1>; | ||
155 | #size-cells = <0>; | ||
156 | |||
157 | keyswitch_in { | ||
158 | label = "keyswitch_in"; | ||
159 | gpios = <&pioB 1 0>; | ||
160 | linux,code = <28>; | ||
161 | gpio-key,wakeup; | ||
162 | }; | ||
163 | |||
164 | error_in { | ||
165 | label = "error_in"; | ||
166 | gpios = <&pioB 2 0>; | ||
167 | linux,code = <29>; | ||
168 | gpio-key,wakeup; | ||
169 | }; | ||
170 | |||
171 | btn { | ||
172 | label = "btn"; | ||
173 | gpios = <&pioC 23 0>; | ||
174 | linux,code = <31>; | ||
175 | gpio-key,wakeup; | ||
176 | }; | ||
177 | }; | ||
178 | }; | ||
diff --git a/arch/arm/boot/dts/at91rm9200.dtsi b/arch/arm/boot/dts/at91rm9200.dtsi new file mode 100644 index 000000000000..e154f242c680 --- /dev/null +++ b/arch/arm/boot/dts/at91rm9200.dtsi | |||
@@ -0,0 +1,349 @@ | |||
1 | /* | ||
2 | * at91rm9200.dtsi - Device Tree Include file for AT91RM9200 family SoC | ||
3 | * | ||
4 | * Copyright (C) 2011 Atmel, | ||
5 | * 2011 Nicolas Ferre <nicolas.ferre@atmel.com>, | ||
6 | * 2012 Joachim Eastwood <manabian@gmail.com> | ||
7 | * | ||
8 | * Based on at91sam9260.dtsi | ||
9 | * | ||
10 | * Licensed under GPLv2 or later. | ||
11 | */ | ||
12 | |||
13 | /include/ "skeleton.dtsi" | ||
14 | |||
15 | / { | ||
16 | model = "Atmel AT91RM9200 family SoC"; | ||
17 | compatible = "atmel,at91rm9200"; | ||
18 | interrupt-parent = <&aic>; | ||
19 | |||
20 | aliases { | ||
21 | serial0 = &dbgu; | ||
22 | serial1 = &usart0; | ||
23 | serial2 = &usart1; | ||
24 | serial3 = &usart2; | ||
25 | serial4 = &usart3; | ||
26 | gpio0 = &pioA; | ||
27 | gpio1 = &pioB; | ||
28 | gpio2 = &pioC; | ||
29 | gpio3 = &pioD; | ||
30 | tcb0 = &tcb0; | ||
31 | tcb1 = &tcb1; | ||
32 | }; | ||
33 | cpus { | ||
34 | cpu@0 { | ||
35 | compatible = "arm,arm920t"; | ||
36 | }; | ||
37 | }; | ||
38 | |||
39 | memory { | ||
40 | reg = <0x20000000 0x04000000>; | ||
41 | }; | ||
42 | |||
43 | ahb { | ||
44 | compatible = "simple-bus"; | ||
45 | #address-cells = <1>; | ||
46 | #size-cells = <1>; | ||
47 | ranges; | ||
48 | |||
49 | apb { | ||
50 | compatible = "simple-bus"; | ||
51 | #address-cells = <1>; | ||
52 | #size-cells = <1>; | ||
53 | ranges; | ||
54 | |||
55 | aic: interrupt-controller@fffff000 { | ||
56 | #interrupt-cells = <3>; | ||
57 | compatible = "atmel,at91rm9200-aic"; | ||
58 | interrupt-controller; | ||
59 | reg = <0xfffff000 0x200>; | ||
60 | atmel,external-irqs = <25 26 27 28 29 30 31>; | ||
61 | }; | ||
62 | |||
63 | ramc0: ramc@ffffff00 { | ||
64 | compatible = "atmel,at91rm9200-sdramc"; | ||
65 | reg = <0xffffff00 0x100>; | ||
66 | }; | ||
67 | |||
68 | pmc: pmc@fffffc00 { | ||
69 | compatible = "atmel,at91rm9200-pmc"; | ||
70 | reg = <0xfffffc00 0x100>; | ||
71 | }; | ||
72 | |||
73 | st: timer@fffffd00 { | ||
74 | compatible = "atmel,at91rm9200-st"; | ||
75 | reg = <0xfffffd00 0x100>; | ||
76 | interrupts = <1 4 7>; | ||
77 | }; | ||
78 | |||
79 | tcb0: timer@fffa0000 { | ||
80 | compatible = "atmel,at91rm9200-tcb"; | ||
81 | reg = <0xfffa0000 0x100>; | ||
82 | interrupts = <17 4 0 18 4 0 19 4 0>; | ||
83 | }; | ||
84 | |||
85 | tcb1: timer@fffa4000 { | ||
86 | compatible = "atmel,at91rm9200-tcb"; | ||
87 | reg = <0xfffa4000 0x100>; | ||
88 | interrupts = <20 4 0 21 4 0 22 4 0>; | ||
89 | }; | ||
90 | |||
91 | pinctrl@fffff400 { | ||
92 | #address-cells = <1>; | ||
93 | #size-cells = <1>; | ||
94 | compatible = "atmel,at91rm9200-pinctrl", "simple-bus"; | ||
95 | ranges = <0xfffff400 0xfffff400 0x800>; | ||
96 | |||
97 | atmel,mux-mask = < | ||
98 | /* A B */ | ||
99 | 0xffffffff 0xffffffff /* pioA */ | ||
100 | 0xffffffff 0x083fffff /* pioB */ | ||
101 | 0xffff3fff 0x00000000 /* pioC */ | ||
102 | 0x03ff87ff 0x0fffff80 /* pioD */ | ||
103 | >; | ||
104 | |||
105 | /* shared pinctrl settings */ | ||
106 | dbgu { | ||
107 | pinctrl_dbgu: dbgu-0 { | ||
108 | atmel,pins = | ||
109 | <0 30 0x1 0x0 /* PA30 periph A */ | ||
110 | 0 31 0x1 0x1>; /* PA31 periph with pullup */ | ||
111 | }; | ||
112 | }; | ||
113 | |||
114 | uart0 { | ||
115 | pinctrl_uart0: uart0-0 { | ||
116 | atmel,pins = | ||
117 | <0 17 0x1 0x0 /* PA17 periph A */ | ||
118 | 0 18 0x1 0x0>; /* PA18 periph A */ | ||
119 | }; | ||
120 | |||
121 | pinctrl_uart0_rts: uart0_rts-0 { | ||
122 | atmel,pins = | ||
123 | <0 20 0x1 0x0>; /* PA20 periph A */ | ||
124 | }; | ||
125 | |||
126 | pinctrl_uart0_cts: uart0_cts-0 { | ||
127 | atmel,pins = | ||
128 | <0 21 0x1 0x0>; /* PA21 periph A */ | ||
129 | }; | ||
130 | }; | ||
131 | |||
132 | uart1 { | ||
133 | pinctrl_uart1: uart1-0 { | ||
134 | atmel,pins = | ||
135 | <1 20 0x1 0x1 /* PB20 periph A with pullup */ | ||
136 | 1 21 0x1 0x0>; /* PB21 periph A */ | ||
137 | }; | ||
138 | |||
139 | pinctrl_uart1_rts: uart1_rts-0 { | ||
140 | atmel,pins = | ||
141 | <1 24 0x1 0x0>; /* PB24 periph A */ | ||
142 | }; | ||
143 | |||
144 | pinctrl_uart1_cts: uart1_cts-0 { | ||
145 | atmel,pins = | ||
146 | <1 26 0x1 0x0>; /* PB26 periph A */ | ||
147 | }; | ||
148 | |||
149 | pinctrl_uart1_dtr_dsr: uart1_dtr_dsr-0 { | ||
150 | atmel,pins = | ||
151 | <1 19 0x1 0x0 /* PB19 periph A */ | ||
152 | 1 25 0x1 0x0>; /* PB25 periph A */ | ||
153 | }; | ||
154 | |||
155 | pinctrl_uart1_dcd: uart1_dcd-0 { | ||
156 | atmel,pins = | ||
157 | <1 23 0x1 0x0>; /* PB23 periph A */ | ||
158 | }; | ||
159 | |||
160 | pinctrl_uart1_ri: uart1_ri-0 { | ||
161 | atmel,pins = | ||
162 | <1 18 0x1 0x0>; /* PB18 periph A */ | ||
163 | }; | ||
164 | }; | ||
165 | |||
166 | uart2 { | ||
167 | pinctrl_uart2: uart2-0 { | ||
168 | atmel,pins = | ||
169 | <0 22 0x1 0x0 /* PA22 periph A */ | ||
170 | 0 23 0x1 0x1>; /* PA23 periph A with pullup */ | ||
171 | }; | ||
172 | |||
173 | pinctrl_uart2_rts: uart2_rts-0 { | ||
174 | atmel,pins = | ||
175 | <0 30 0x2 0x0>; /* PA30 periph B */ | ||
176 | }; | ||
177 | |||
178 | pinctrl_uart2_cts: uart2_cts-0 { | ||
179 | atmel,pins = | ||
180 | <0 31 0x2 0x0>; /* PA31 periph B */ | ||
181 | }; | ||
182 | }; | ||
183 | |||
184 | uart3 { | ||
185 | pinctrl_uart3: uart3-0 { | ||
186 | atmel,pins = | ||
187 | <0 5 0x2 0x1 /* PA5 periph B with pullup */ | ||
188 | 0 6 0x2 0x0>; /* PA6 periph B */ | ||
189 | }; | ||
190 | |||
191 | pinctrl_uart3_rts: uart3_rts-0 { | ||
192 | atmel,pins = | ||
193 | <1 0 0x2 0x0>; /* PB0 periph B */ | ||
194 | }; | ||
195 | |||
196 | pinctrl_uart3_cts: uart3_cts-0 { | ||
197 | atmel,pins = | ||
198 | <1 1 0x2 0x0>; /* PB1 periph B */ | ||
199 | }; | ||
200 | }; | ||
201 | |||
202 | nand { | ||
203 | pinctrl_nand: nand-0 { | ||
204 | atmel,pins = | ||
205 | <2 2 0x0 0x1 /* PC2 gpio RDY pin pull_up */ | ||
206 | 1 1 0x0 0x1>; /* PB1 gpio CD pin pull_up */ | ||
207 | }; | ||
208 | }; | ||
209 | |||
210 | pioA: gpio@fffff400 { | ||
211 | compatible = "atmel,at91rm9200-gpio"; | ||
212 | reg = <0xfffff400 0x200>; | ||
213 | interrupts = <2 4 1>; | ||
214 | #gpio-cells = <2>; | ||
215 | gpio-controller; | ||
216 | interrupt-controller; | ||
217 | #interrupt-cells = <2>; | ||
218 | }; | ||
219 | |||
220 | pioB: gpio@fffff600 { | ||
221 | compatible = "atmel,at91rm9200-gpio"; | ||
222 | reg = <0xfffff600 0x200>; | ||
223 | interrupts = <3 4 1>; | ||
224 | #gpio-cells = <2>; | ||
225 | gpio-controller; | ||
226 | interrupt-controller; | ||
227 | #interrupt-cells = <2>; | ||
228 | }; | ||
229 | |||
230 | pioC: gpio@fffff800 { | ||
231 | compatible = "atmel,at91rm9200-gpio"; | ||
232 | reg = <0xfffff800 0x200>; | ||
233 | interrupts = <4 4 1>; | ||
234 | #gpio-cells = <2>; | ||
235 | gpio-controller; | ||
236 | interrupt-controller; | ||
237 | #interrupt-cells = <2>; | ||
238 | }; | ||
239 | |||
240 | pioD: gpio@fffffa00 { | ||
241 | compatible = "atmel,at91rm9200-gpio"; | ||
242 | reg = <0xfffffa00 0x200>; | ||
243 | interrupts = <5 4 1>; | ||
244 | #gpio-cells = <2>; | ||
245 | gpio-controller; | ||
246 | interrupt-controller; | ||
247 | #interrupt-cells = <2>; | ||
248 | }; | ||
249 | }; | ||
250 | |||
251 | dbgu: serial@fffff200 { | ||
252 | compatible = "atmel,at91rm9200-usart"; | ||
253 | reg = <0xfffff200 0x200>; | ||
254 | interrupts = <1 4 7>; | ||
255 | pinctrl-names = "default"; | ||
256 | pinctrl-0 = <&pinctrl_dbgu>; | ||
257 | status = "disabled"; | ||
258 | }; | ||
259 | |||
260 | usart0: serial@fffc0000 { | ||
261 | compatible = "atmel,at91rm9200-usart"; | ||
262 | reg = <0xfffc0000 0x200>; | ||
263 | interrupts = <6 4 5>; | ||
264 | atmel,use-dma-rx; | ||
265 | atmel,use-dma-tx; | ||
266 | pinctrl-names = "default"; | ||
267 | pinctrl-0 = <&pinctrl_uart0>; | ||
268 | status = "disabled"; | ||
269 | }; | ||
270 | |||
271 | usart1: serial@fffc4000 { | ||
272 | compatible = "atmel,at91rm9200-usart"; | ||
273 | reg = <0xfffc4000 0x200>; | ||
274 | interrupts = <7 4 5>; | ||
275 | atmel,use-dma-rx; | ||
276 | atmel,use-dma-tx; | ||
277 | pinctrl-names = "default"; | ||
278 | pinctrl-0 = <&pinctrl_uart1>; | ||
279 | status = "disabled"; | ||
280 | }; | ||
281 | |||
282 | usart2: serial@fffc8000 { | ||
283 | compatible = "atmel,at91rm9200-usart"; | ||
284 | reg = <0xfffc8000 0x200>; | ||
285 | interrupts = <8 4 5>; | ||
286 | atmel,use-dma-rx; | ||
287 | atmel,use-dma-tx; | ||
288 | pinctrl-names = "default"; | ||
289 | pinctrl-0 = <&pinctrl_uart2>; | ||
290 | status = "disabled"; | ||
291 | }; | ||
292 | |||
293 | usart3: serial@fffcc000 { | ||
294 | compatible = "atmel,at91rm9200-usart"; | ||
295 | reg = <0xfffcc000 0x200>; | ||
296 | interrupts = <23 4 5>; | ||
297 | atmel,use-dma-rx; | ||
298 | atmel,use-dma-tx; | ||
299 | pinctrl-names = "default"; | ||
300 | pinctrl-0 = <&pinctrl_uart3>; | ||
301 | status = "disabled"; | ||
302 | }; | ||
303 | |||
304 | usb1: gadget@fffb0000 { | ||
305 | compatible = "atmel,at91rm9200-udc"; | ||
306 | reg = <0xfffb0000 0x4000>; | ||
307 | interrupts = <11 4 2>; | ||
308 | status = "disabled"; | ||
309 | }; | ||
310 | }; | ||
311 | |||
312 | nand0: nand@40000000 { | ||
313 | compatible = "atmel,at91rm9200-nand"; | ||
314 | #address-cells = <1>; | ||
315 | #size-cells = <1>; | ||
316 | reg = <0x40000000 0x10000000>; | ||
317 | atmel,nand-addr-offset = <21>; | ||
318 | atmel,nand-cmd-offset = <22>; | ||
319 | pinctrl-names = "default"; | ||
320 | pinctrl-0 = <&pinctrl_nand>; | ||
321 | nand-ecc-mode = "soft"; | ||
322 | gpios = <&pioC 2 0 | ||
323 | 0 | ||
324 | &pioB 1 0 | ||
325 | >; | ||
326 | status = "disabled"; | ||
327 | }; | ||
328 | |||
329 | usb0: ohci@00300000 { | ||
330 | compatible = "atmel,at91rm9200-ohci", "usb-ohci"; | ||
331 | reg = <0x00300000 0x100000>; | ||
332 | interrupts = <23 4 2>; | ||
333 | status = "disabled"; | ||
334 | }; | ||
335 | }; | ||
336 | |||
337 | i2c@0 { | ||
338 | compatible = "i2c-gpio"; | ||
339 | gpios = <&pioA 23 0 /* sda */ | ||
340 | &pioA 24 0 /* scl */ | ||
341 | >; | ||
342 | i2c-gpio,sda-open-drain; | ||
343 | i2c-gpio,scl-open-drain; | ||
344 | i2c-gpio,delay-us = <2>; /* ~100 kHz */ | ||
345 | #address-cells = <1>; | ||
346 | #size-cells = <0>; | ||
347 | status = "disabled"; | ||
348 | }; | ||
349 | }; | ||
diff --git a/arch/arm/boot/dts/at91rm9200ek.dts b/arch/arm/boot/dts/at91rm9200ek.dts new file mode 100644 index 000000000000..8aa48931e0a2 --- /dev/null +++ b/arch/arm/boot/dts/at91rm9200ek.dts | |||
@@ -0,0 +1,79 @@ | |||
1 | /* | ||
2 | * at91rm9200ek.dts - Device Tree file for Atmel AT91RM9200 evaluation kit | ||
3 | * | ||
4 | * Copyright (C) 2012 Joachim Eastwood <manabian@gmail.com> | ||
5 | * | ||
6 | * Licensed under GPLv2 only | ||
7 | */ | ||
8 | /dts-v1/; | ||
9 | /include/ "at91rm9200.dtsi" | ||
10 | |||
11 | / { | ||
12 | model = "Atmel AT91RM9200 evaluation kit"; | ||
13 | compatible = "atmel,at91rm9200ek", "atmel,at91rm9200"; | ||
14 | |||
15 | memory { | ||
16 | reg = <0x20000000 0x4000000>; | ||
17 | }; | ||
18 | |||
19 | clocks { | ||
20 | #address-cells = <1>; | ||
21 | #size-cells = <1>; | ||
22 | ranges; | ||
23 | |||
24 | main_clock: clock@0 { | ||
25 | compatible = "atmel,osc", "fixed-clock"; | ||
26 | clock-frequency = <18432000>; | ||
27 | }; | ||
28 | }; | ||
29 | |||
30 | ahb { | ||
31 | apb { | ||
32 | dbgu: serial@fffff200 { | ||
33 | status = "okay"; | ||
34 | }; | ||
35 | |||
36 | usart1: serial@fffc4000 { | ||
37 | pinctrl-0 = | ||
38 | <&pinctrl_uart1 | ||
39 | &pinctrl_uart1_rts | ||
40 | &pinctrl_uart1_cts | ||
41 | &pinctrl_uart1_dtr_dsr | ||
42 | &pinctrl_uart1_dcd | ||
43 | &pinctrl_uart1_ri>; | ||
44 | status = "okay"; | ||
45 | }; | ||
46 | |||
47 | usb1: gadget@fffb0000 { | ||
48 | atmel,vbus-gpio = <&pioD 4 0>; | ||
49 | status = "okay"; | ||
50 | }; | ||
51 | }; | ||
52 | |||
53 | usb0: ohci@00300000 { | ||
54 | num-ports = <2>; | ||
55 | status = "okay"; | ||
56 | }; | ||
57 | }; | ||
58 | |||
59 | leds { | ||
60 | compatible = "gpio-leds"; | ||
61 | |||
62 | ds2 { | ||
63 | label = "green"; | ||
64 | gpios = <&pioB 0 0x1>; | ||
65 | linux,default-trigger = "mmc0"; | ||
66 | }; | ||
67 | |||
68 | ds4 { | ||
69 | label = "yellow"; | ||
70 | gpios = <&pioB 1 0x1>; | ||
71 | linux,default-trigger = "heartbeat"; | ||
72 | }; | ||
73 | |||
74 | ds6 { | ||
75 | label = "red"; | ||
76 | gpios = <&pioB 2 0x1>; | ||
77 | }; | ||
78 | }; | ||
79 | }; | ||
diff --git a/arch/arm/boot/dts/at91sam9260.dtsi b/arch/arm/boot/dts/at91sam9260.dtsi index d410581a5a85..b1d3fab60e0a 100644 --- a/arch/arm/boot/dts/at91sam9260.dtsi +++ b/arch/arm/boot/dts/at91sam9260.dtsi | |||
@@ -21,8 +21,8 @@ | |||
21 | serial2 = &usart1; | 21 | serial2 = &usart1; |
22 | serial3 = &usart2; | 22 | serial3 = &usart2; |
23 | serial4 = &usart3; | 23 | serial4 = &usart3; |
24 | serial5 = &usart4; | 24 | serial5 = &uart0; |
25 | serial6 = &usart5; | 25 | serial6 = &uart1; |
26 | gpio0 = &pioA; | 26 | gpio0 = &pioA; |
27 | gpio1 = &pioB; | 27 | gpio1 = &pioB; |
28 | gpio2 = &pioC; | 28 | gpio2 = &pioC; |
@@ -98,40 +98,250 @@ | |||
98 | interrupts = <26 4 0 27 4 0 28 4 0>; | 98 | interrupts = <26 4 0 27 4 0 28 4 0>; |
99 | }; | 99 | }; |
100 | 100 | ||
101 | pioA: gpio@fffff400 { | 101 | pinctrl@fffff400 { |
102 | compatible = "atmel,at91rm9200-gpio"; | 102 | #address-cells = <1>; |
103 | reg = <0xfffff400 0x100>; | 103 | #size-cells = <1>; |
104 | interrupts = <2 4 1>; | 104 | compatible = "atmel,at91rm9200-pinctrl", "simple-bus"; |
105 | #gpio-cells = <2>; | 105 | ranges = <0xfffff400 0xfffff400 0x600>; |
106 | gpio-controller; | 106 | |
107 | interrupt-controller; | 107 | atmel,mux-mask = < |
108 | #interrupt-cells = <2>; | 108 | /* A B */ |
109 | }; | 109 | 0xffffffff 0xffc00c3b /* pioA */ |
110 | 0xffffffff 0x7fff3ccf /* pioB */ | ||
111 | 0xffffffff 0x007fffff /* pioC */ | ||
112 | >; | ||
113 | |||
114 | /* shared pinctrl settings */ | ||
115 | dbgu { | ||
116 | pinctrl_dbgu: dbgu-0 { | ||
117 | atmel,pins = | ||
118 | <1 14 0x1 0x0 /* PB14 periph A */ | ||
119 | 1 15 0x1 0x1>; /* PB15 periph with pullup */ | ||
120 | }; | ||
121 | }; | ||
110 | 122 | ||
111 | pioB: gpio@fffff600 { | 123 | usart0 { |
112 | compatible = "atmel,at91rm9200-gpio"; | 124 | pinctrl_usart0: usart0-0 { |
113 | reg = <0xfffff600 0x100>; | 125 | atmel,pins = |
114 | interrupts = <3 4 1>; | 126 | <1 4 0x1 0x0 /* PB4 periph A */ |
115 | #gpio-cells = <2>; | 127 | 1 5 0x1 0x0>; /* PB5 periph A */ |
116 | gpio-controller; | 128 | }; |
117 | interrupt-controller; | 129 | |
118 | #interrupt-cells = <2>; | 130 | pinctrl_usart0_rts: usart0_rts-0 { |
119 | }; | 131 | atmel,pins = |
132 | <1 26 0x1 0x0>; /* PB26 periph A */ | ||
133 | }; | ||
134 | |||
135 | pinctrl_usart0_cts: usart0_cts-0 { | ||
136 | atmel,pins = | ||
137 | <1 27 0x1 0x0>; /* PB27 periph A */ | ||
138 | }; | ||
139 | |||
140 | pinctrl_usart0_dtr_dsr: usart0_dtr_dsr-0 { | ||
141 | atmel,pins = | ||
142 | <1 24 0x1 0x0 /* PB24 periph A */ | ||
143 | 1 22 0x1 0x0>; /* PB22 periph A */ | ||
144 | }; | ||
145 | |||
146 | pinctrl_usart0_dcd: usart0_dcd-0 { | ||
147 | atmel,pins = | ||
148 | <1 23 0x1 0x0>; /* PB23 periph A */ | ||
149 | }; | ||
150 | |||
151 | pinctrl_usart0_ri: usart0_ri-0 { | ||
152 | atmel,pins = | ||
153 | <1 25 0x1 0x0>; /* PB25 periph A */ | ||
154 | }; | ||
155 | }; | ||
120 | 156 | ||
121 | pioC: gpio@fffff800 { | 157 | usart1 { |
122 | compatible = "atmel,at91rm9200-gpio"; | 158 | pinctrl_usart1: usart1-0 { |
123 | reg = <0xfffff800 0x100>; | 159 | atmel,pins = |
124 | interrupts = <4 4 1>; | 160 | <2 6 0x1 0x1 /* PB6 periph A with pullup */ |
125 | #gpio-cells = <2>; | 161 | 2 7 0x1 0x0>; /* PB7 periph A */ |
126 | gpio-controller; | 162 | }; |
127 | interrupt-controller; | 163 | |
128 | #interrupt-cells = <2>; | 164 | pinctrl_usart1_rts: usart1_rts-0 { |
165 | atmel,pins = | ||
166 | <1 28 0x1 0x0>; /* PB28 periph A */ | ||
167 | }; | ||
168 | |||
169 | pinctrl_usart1_cts: usart1_cts-0 { | ||
170 | atmel,pins = | ||
171 | <1 29 0x1 0x0>; /* PB29 periph A */ | ||
172 | }; | ||
173 | }; | ||
174 | |||
175 | usart2 { | ||
176 | pinctrl_usart2: usart2-0 { | ||
177 | atmel,pins = | ||
178 | <1 8 0x1 0x1 /* PB8 periph A with pullup */ | ||
179 | 1 9 0x1 0x0>; /* PB9 periph A */ | ||
180 | }; | ||
181 | |||
182 | pinctrl_usart2_rts: usart2_rts-0 { | ||
183 | atmel,pins = | ||
184 | <0 4 0x1 0x0>; /* PA4 periph A */ | ||
185 | }; | ||
186 | |||
187 | pinctrl_usart2_cts: usart2_cts-0 { | ||
188 | atmel,pins = | ||
189 | <0 5 0x1 0x0>; /* PA5 periph A */ | ||
190 | }; | ||
191 | }; | ||
192 | |||
193 | usart3 { | ||
194 | pinctrl_usart3: usart3-0 { | ||
195 | atmel,pins = | ||
196 | <2 10 0x1 0x1 /* PB10 periph A with pullup */ | ||
197 | 2 11 0x1 0x0>; /* PB11 periph A */ | ||
198 | }; | ||
199 | |||
200 | pinctrl_usart3_rts: usart3_rts-0 { | ||
201 | atmel,pins = | ||
202 | <3 8 0x2 0x0>; /* PB8 periph B */ | ||
203 | }; | ||
204 | |||
205 | pinctrl_usart3_cts: usart3_cts-0 { | ||
206 | atmel,pins = | ||
207 | <3 10 0x2 0x0>; /* PB10 periph B */ | ||
208 | }; | ||
209 | }; | ||
210 | |||
211 | uart0 { | ||
212 | pinctrl_uart0: uart0-0 { | ||
213 | atmel,pins = | ||
214 | <0 31 0x2 0x1 /* PA31 periph B with pullup */ | ||
215 | 0 30 0x2 0x0>; /* PA30 periph B */ | ||
216 | }; | ||
217 | }; | ||
218 | |||
219 | uart1 { | ||
220 | pinctrl_uart1: uart1-0 { | ||
221 | atmel,pins = | ||
222 | <2 12 0x1 0x1 /* PB12 periph A with pullup */ | ||
223 | 2 13 0x1 0x0>; /* PB13 periph A */ | ||
224 | }; | ||
225 | }; | ||
226 | |||
227 | nand { | ||
228 | pinctrl_nand: nand-0 { | ||
229 | atmel,pins = | ||
230 | <2 13 0x0 0x1 /* PC13 gpio RDY pin pull_up */ | ||
231 | 2 14 0x0 0x1>; /* PC14 gpio enable pin pull_up */ | ||
232 | }; | ||
233 | }; | ||
234 | |||
235 | macb { | ||
236 | pinctrl_macb_rmii: macb_rmii-0 { | ||
237 | atmel,pins = | ||
238 | <0 12 0x1 0x0 /* PA12 periph A */ | ||
239 | 0 13 0x1 0x0 /* PA13 periph A */ | ||
240 | 0 14 0x1 0x0 /* PA14 periph A */ | ||
241 | 0 15 0x1 0x0 /* PA15 periph A */ | ||
242 | 0 16 0x1 0x0 /* PA16 periph A */ | ||
243 | 0 17 0x1 0x0 /* PA17 periph A */ | ||
244 | 0 18 0x1 0x0 /* PA18 periph A */ | ||
245 | 0 19 0x1 0x0 /* PA19 periph A */ | ||
246 | 0 20 0x1 0x0 /* PA20 periph A */ | ||
247 | 0 21 0x1 0x0>; /* PA21 periph A */ | ||
248 | }; | ||
249 | |||
250 | pinctrl_macb_rmii_mii: macb_rmii_mii-0 { | ||
251 | atmel,pins = | ||
252 | <0 22 0x2 0x0 /* PA22 periph B */ | ||
253 | 0 23 0x2 0x0 /* PA23 periph B */ | ||
254 | 0 24 0x2 0x0 /* PA24 periph B */ | ||
255 | 0 25 0x2 0x0 /* PA25 periph B */ | ||
256 | 0 26 0x2 0x0 /* PA26 periph B */ | ||
257 | 0 27 0x2 0x0 /* PA27 periph B */ | ||
258 | 0 28 0x2 0x0 /* PA28 periph B */ | ||
259 | 0 29 0x2 0x0>; /* PA29 periph B */ | ||
260 | }; | ||
261 | |||
262 | pinctrl_macb_rmii_mii_alt: macb_rmii_mii-1 { | ||
263 | atmel,pins = | ||
264 | <0 10 0x2 0x0 /* PA10 periph B */ | ||
265 | 0 11 0x2 0x0 /* PA11 periph B */ | ||
266 | 0 24 0x2 0x0 /* PA24 periph B */ | ||
267 | 0 25 0x2 0x0 /* PA25 periph B */ | ||
268 | 0 26 0x2 0x0 /* PA26 periph B */ | ||
269 | 0 27 0x2 0x0 /* PA27 periph B */ | ||
270 | 0 28 0x2 0x0 /* PA28 periph B */ | ||
271 | 0 29 0x2 0x0>; /* PA29 periph B */ | ||
272 | }; | ||
273 | }; | ||
274 | |||
275 | mmc0 { | ||
276 | pinctrl_mmc0_clk: mmc0_clk-0 { | ||
277 | atmel,pins = | ||
278 | <0 8 0x1 0x0>; /* PA8 periph A */ | ||
279 | }; | ||
280 | |||
281 | pinctrl_mmc0_slot0_cmd_dat0: mmc0_slot0_cmd_dat0-0 { | ||
282 | atmel,pins = | ||
283 | <0 7 0x1 0x1 /* PA7 periph A with pullup */ | ||
284 | 0 6 0x1 0x1>; /* PA6 periph A with pullup */ | ||
285 | }; | ||
286 | |||
287 | pinctrl_mmc0_slot0_dat1_3: mmc0_slot0_dat1_3-0 { | ||
288 | atmel,pins = | ||
289 | <0 9 0x1 0x1 /* PA9 periph A with pullup */ | ||
290 | 0 10 0x1 0x1 /* PA10 periph A with pullup */ | ||
291 | 0 11 0x1 0x1>; /* PA11 periph A with pullup */ | ||
292 | }; | ||
293 | |||
294 | pinctrl_mmc0_slot1_cmd_dat0: mmc0_slot1_cmd_dat0-0 { | ||
295 | atmel,pins = | ||
296 | <0 1 0x2 0x1 /* PA1 periph B with pullup */ | ||
297 | 0 0 0x2 0x1>; /* PA0 periph B with pullup */ | ||
298 | }; | ||
299 | |||
300 | pinctrl_mmc0_slot1_dat1_3: mmc0_slot1_dat1_3-0 { | ||
301 | atmel,pins = | ||
302 | <0 5 0x2 0x1 /* PA5 periph B with pullup */ | ||
303 | 0 4 0x2 0x1 /* PA4 periph B with pullup */ | ||
304 | 0 3 0x2 0x1>; /* PA3 periph B with pullup */ | ||
305 | }; | ||
306 | }; | ||
307 | |||
308 | pioA: gpio@fffff400 { | ||
309 | compatible = "atmel,at91rm9200-gpio"; | ||
310 | reg = <0xfffff400 0x200>; | ||
311 | interrupts = <2 4 1>; | ||
312 | #gpio-cells = <2>; | ||
313 | gpio-controller; | ||
314 | interrupt-controller; | ||
315 | #interrupt-cells = <2>; | ||
316 | }; | ||
317 | |||
318 | pioB: gpio@fffff600 { | ||
319 | compatible = "atmel,at91rm9200-gpio"; | ||
320 | reg = <0xfffff600 0x200>; | ||
321 | interrupts = <3 4 1>; | ||
322 | #gpio-cells = <2>; | ||
323 | gpio-controller; | ||
324 | interrupt-controller; | ||
325 | #interrupt-cells = <2>; | ||
326 | }; | ||
327 | |||
328 | pioC: gpio@fffff800 { | ||
329 | compatible = "atmel,at91rm9200-gpio"; | ||
330 | reg = <0xfffff800 0x200>; | ||
331 | interrupts = <4 4 1>; | ||
332 | #gpio-cells = <2>; | ||
333 | gpio-controller; | ||
334 | interrupt-controller; | ||
335 | #interrupt-cells = <2>; | ||
336 | }; | ||
129 | }; | 337 | }; |
130 | 338 | ||
131 | dbgu: serial@fffff200 { | 339 | dbgu: serial@fffff200 { |
132 | compatible = "atmel,at91sam9260-usart"; | 340 | compatible = "atmel,at91sam9260-usart"; |
133 | reg = <0xfffff200 0x200>; | 341 | reg = <0xfffff200 0x200>; |
134 | interrupts = <1 4 7>; | 342 | interrupts = <1 4 7>; |
343 | pinctrl-names = "default"; | ||
344 | pinctrl-0 = <&pinctrl_dbgu>; | ||
135 | status = "disabled"; | 345 | status = "disabled"; |
136 | }; | 346 | }; |
137 | 347 | ||
@@ -141,6 +351,8 @@ | |||
141 | interrupts = <6 4 5>; | 351 | interrupts = <6 4 5>; |
142 | atmel,use-dma-rx; | 352 | atmel,use-dma-rx; |
143 | atmel,use-dma-tx; | 353 | atmel,use-dma-tx; |
354 | pinctrl-names = "default"; | ||
355 | pinctrl-0 = <&pinctrl_usart0>; | ||
144 | status = "disabled"; | 356 | status = "disabled"; |
145 | }; | 357 | }; |
146 | 358 | ||
@@ -150,6 +362,8 @@ | |||
150 | interrupts = <7 4 5>; | 362 | interrupts = <7 4 5>; |
151 | atmel,use-dma-rx; | 363 | atmel,use-dma-rx; |
152 | atmel,use-dma-tx; | 364 | atmel,use-dma-tx; |
365 | pinctrl-names = "default"; | ||
366 | pinctrl-0 = <&pinctrl_usart1>; | ||
153 | status = "disabled"; | 367 | status = "disabled"; |
154 | }; | 368 | }; |
155 | 369 | ||
@@ -159,6 +373,8 @@ | |||
159 | interrupts = <8 4 5>; | 373 | interrupts = <8 4 5>; |
160 | atmel,use-dma-rx; | 374 | atmel,use-dma-rx; |
161 | atmel,use-dma-tx; | 375 | atmel,use-dma-tx; |
376 | pinctrl-names = "default"; | ||
377 | pinctrl-0 = <&pinctrl_usart2>; | ||
162 | status = "disabled"; | 378 | status = "disabled"; |
163 | }; | 379 | }; |
164 | 380 | ||
@@ -168,24 +384,30 @@ | |||
168 | interrupts = <23 4 5>; | 384 | interrupts = <23 4 5>; |
169 | atmel,use-dma-rx; | 385 | atmel,use-dma-rx; |
170 | atmel,use-dma-tx; | 386 | atmel,use-dma-tx; |
387 | pinctrl-names = "default"; | ||
388 | pinctrl-0 = <&pinctrl_usart3>; | ||
171 | status = "disabled"; | 389 | status = "disabled"; |
172 | }; | 390 | }; |
173 | 391 | ||
174 | usart4: serial@fffd4000 { | 392 | uart0: serial@fffd4000 { |
175 | compatible = "atmel,at91sam9260-usart"; | 393 | compatible = "atmel,at91sam9260-usart"; |
176 | reg = <0xfffd4000 0x200>; | 394 | reg = <0xfffd4000 0x200>; |
177 | interrupts = <24 4 5>; | 395 | interrupts = <24 4 5>; |
178 | atmel,use-dma-rx; | 396 | atmel,use-dma-rx; |
179 | atmel,use-dma-tx; | 397 | atmel,use-dma-tx; |
398 | pinctrl-names = "default"; | ||
399 | pinctrl-0 = <&pinctrl_uart0>; | ||
180 | status = "disabled"; | 400 | status = "disabled"; |
181 | }; | 401 | }; |
182 | 402 | ||
183 | usart5: serial@fffd8000 { | 403 | uart1: serial@fffd8000 { |
184 | compatible = "atmel,at91sam9260-usart"; | 404 | compatible = "atmel,at91sam9260-usart"; |
185 | reg = <0xfffd8000 0x200>; | 405 | reg = <0xfffd8000 0x200>; |
186 | interrupts = <25 4 5>; | 406 | interrupts = <25 4 5>; |
187 | atmel,use-dma-rx; | 407 | atmel,use-dma-rx; |
188 | atmel,use-dma-tx; | 408 | atmel,use-dma-tx; |
409 | pinctrl-names = "default"; | ||
410 | pinctrl-0 = <&pinctrl_uart1>; | ||
189 | status = "disabled"; | 411 | status = "disabled"; |
190 | }; | 412 | }; |
191 | 413 | ||
@@ -193,6 +415,8 @@ | |||
193 | compatible = "cdns,at32ap7000-macb", "cdns,macb"; | 415 | compatible = "cdns,at32ap7000-macb", "cdns,macb"; |
194 | reg = <0xfffc4000 0x100>; | 416 | reg = <0xfffc4000 0x100>; |
195 | interrupts = <21 4 3>; | 417 | interrupts = <21 4 3>; |
418 | pinctrl-names = "default"; | ||
419 | pinctrl-0 = <&pinctrl_macb_rmii>; | ||
196 | status = "disabled"; | 420 | status = "disabled"; |
197 | }; | 421 | }; |
198 | 422 | ||
@@ -212,6 +436,15 @@ | |||
212 | status = "disabled"; | 436 | status = "disabled"; |
213 | }; | 437 | }; |
214 | 438 | ||
439 | mmc0: mmc@fffa8000 { | ||
440 | compatible = "atmel,hsmci"; | ||
441 | reg = <0xfffa8000 0x600>; | ||
442 | interrupts = <9 4 0>; | ||
443 | #address-cells = <1>; | ||
444 | #size-cells = <0>; | ||
445 | status = "disabled"; | ||
446 | }; | ||
447 | |||
215 | adc0: adc@fffe0000 { | 448 | adc0: adc@fffe0000 { |
216 | compatible = "atmel,at91sam9260-adc"; | 449 | compatible = "atmel,at91sam9260-adc"; |
217 | reg = <0xfffe0000 0x100>; | 450 | reg = <0xfffe0000 0x100>; |
@@ -257,6 +490,8 @@ | |||
257 | >; | 490 | >; |
258 | atmel,nand-addr-offset = <21>; | 491 | atmel,nand-addr-offset = <21>; |
259 | atmel,nand-cmd-offset = <22>; | 492 | atmel,nand-cmd-offset = <22>; |
493 | pinctrl-names = "default"; | ||
494 | pinctrl-0 = <&pinctrl_nand>; | ||
260 | gpios = <&pioC 13 0 | 495 | gpios = <&pioC 13 0 |
261 | &pioC 14 0 | 496 | &pioC 14 0 |
262 | 0 | 497 | 0 |
diff --git a/arch/arm/boot/dts/at91sam9263.dtsi b/arch/arm/boot/dts/at91sam9263.dtsi index 3e6e5c1abbf3..66106eecf1ed 100644 --- a/arch/arm/boot/dts/at91sam9263.dtsi +++ b/arch/arm/boot/dts/at91sam9263.dtsi | |||
@@ -89,60 +89,243 @@ | |||
89 | reg = <0xfffffd10 0x10>; | 89 | reg = <0xfffffd10 0x10>; |
90 | }; | 90 | }; |
91 | 91 | ||
92 | pioA: gpio@fffff200 { | 92 | pinctrl@fffff200 { |
93 | compatible = "atmel,at91rm9200-gpio"; | 93 | #address-cells = <1>; |
94 | reg = <0xfffff200 0x100>; | 94 | #size-cells = <1>; |
95 | interrupts = <2 4 1>; | 95 | compatible = "atmel,at91rm9200-pinctrl", "simple-bus"; |
96 | #gpio-cells = <2>; | 96 | ranges = <0xfffff200 0xfffff200 0xa00>; |
97 | gpio-controller; | ||
98 | interrupt-controller; | ||
99 | #interrupt-cells = <2>; | ||
100 | }; | ||
101 | 97 | ||
102 | pioB: gpio@fffff400 { | 98 | atmel,mux-mask = < |
103 | compatible = "atmel,at91rm9200-gpio"; | 99 | /* A B */ |
104 | reg = <0xfffff400 0x100>; | 100 | 0xfffffffb 0xffffe07f /* pioA */ |
105 | interrupts = <3 4 1>; | 101 | 0x0007ffff 0x39072fff /* pioB */ |
106 | #gpio-cells = <2>; | 102 | 0xffffffff 0x3ffffff8 /* pioC */ |
107 | gpio-controller; | 103 | 0xfffffbff 0xffffffff /* pioD */ |
108 | interrupt-controller; | 104 | 0xffe00fff 0xfbfcff00 /* pioE */ |
109 | #interrupt-cells = <2>; | 105 | >; |
110 | }; | ||
111 | 106 | ||
112 | pioC: gpio@fffff600 { | 107 | /* shared pinctrl settings */ |
113 | compatible = "atmel,at91rm9200-gpio"; | 108 | dbgu { |
114 | reg = <0xfffff600 0x100>; | 109 | pinctrl_dbgu: dbgu-0 { |
115 | interrupts = <4 4 1>; | 110 | atmel,pins = |
116 | #gpio-cells = <2>; | 111 | <2 30 0x1 0x0 /* PC30 periph A */ |
117 | gpio-controller; | 112 | 2 31 0x1 0x1>; /* PC31 periph with pullup */ |
118 | interrupt-controller; | 113 | }; |
119 | #interrupt-cells = <2>; | 114 | }; |
120 | }; | ||
121 | 115 | ||
122 | pioD: gpio@fffff800 { | 116 | usart0 { |
123 | compatible = "atmel,at91rm9200-gpio"; | 117 | pinctrl_usart0: usart0-0 { |
124 | reg = <0xfffff800 0x100>; | 118 | atmel,pins = |
125 | interrupts = <4 4 1>; | 119 | <0 26 0x1 0x1 /* PA26 periph A with pullup */ |
126 | #gpio-cells = <2>; | 120 | 0 27 0x1 0x0>; /* PA27 periph A */ |
127 | gpio-controller; | 121 | }; |
128 | interrupt-controller; | ||
129 | #interrupt-cells = <2>; | ||
130 | }; | ||
131 | 122 | ||
132 | pioE: gpio@fffffa00 { | 123 | pinctrl_usart0_rts: usart0_rts-0 { |
133 | compatible = "atmel,at91rm9200-gpio"; | 124 | atmel,pins = |
134 | reg = <0xfffffa00 0x100>; | 125 | <0 28 0x1 0x0>; /* PA28 periph A */ |
135 | interrupts = <4 4 1>; | 126 | }; |
136 | #gpio-cells = <2>; | 127 | |
137 | gpio-controller; | 128 | pinctrl_usart0_cts: usart0_cts-0 { |
138 | interrupt-controller; | 129 | atmel,pins = |
139 | #interrupt-cells = <2>; | 130 | <0 29 0x1 0x0>; /* PA29 periph A */ |
131 | }; | ||
132 | }; | ||
133 | |||
134 | usart1 { | ||
135 | pinctrl_usart1: usart1-0 { | ||
136 | atmel,pins = | ||
137 | <3 0 0x1 0x1 /* PD0 periph A with pullup */ | ||
138 | 3 1 0x1 0x0>; /* PD1 periph A */ | ||
139 | }; | ||
140 | |||
141 | pinctrl_usart1_rts: usart1_rts-0 { | ||
142 | atmel,pins = | ||
143 | <3 7 0x2 0x0>; /* PD7 periph B */ | ||
144 | }; | ||
145 | |||
146 | pinctrl_usart1_cts: usart1_cts-0 { | ||
147 | atmel,pins = | ||
148 | <3 8 0x2 0x0>; /* PD8 periph B */ | ||
149 | }; | ||
150 | }; | ||
151 | |||
152 | usart2 { | ||
153 | pinctrl_usart2: usart2-0 { | ||
154 | atmel,pins = | ||
155 | <3 2 0x1 0x1 /* PD2 periph A with pullup */ | ||
156 | 3 3 0x1 0x0>; /* PD3 periph A */ | ||
157 | }; | ||
158 | |||
159 | pinctrl_usart2_rts: usart2_rts-0 { | ||
160 | atmel,pins = | ||
161 | <3 5 0x2 0x0>; /* PD5 periph B */ | ||
162 | }; | ||
163 | |||
164 | pinctrl_usart2_cts: usart2_cts-0 { | ||
165 | atmel,pins = | ||
166 | <4 6 0x2 0x0>; /* PD6 periph B */ | ||
167 | }; | ||
168 | }; | ||
169 | |||
170 | nand { | ||
171 | pinctrl_nand: nand-0 { | ||
172 | atmel,pins = | ||
173 | <0 22 0x0 0x1 /* PA22 gpio RDY pin pull_up*/ | ||
174 | 3 15 0x0 0x1>; /* PD15 gpio enable pin pull_up */ | ||
175 | }; | ||
176 | }; | ||
177 | |||
178 | macb { | ||
179 | pinctrl_macb_rmii: macb_rmii-0 { | ||
180 | atmel,pins = | ||
181 | <2 25 0x2 0x0 /* PC25 periph B */ | ||
182 | 4 21 0x1 0x0 /* PE21 periph A */ | ||
183 | 4 23 0x1 0x0 /* PE23 periph A */ | ||
184 | 4 24 0x1 0x0 /* PE24 periph A */ | ||
185 | 4 25 0x1 0x0 /* PE25 periph A */ | ||
186 | 4 26 0x1 0x0 /* PE26 periph A */ | ||
187 | 4 27 0x1 0x0 /* PE27 periph A */ | ||
188 | 4 28 0x1 0x0 /* PE28 periph A */ | ||
189 | 4 29 0x1 0x0 /* PE29 periph A */ | ||
190 | 4 30 0x1 0x0>; /* PE30 periph A */ | ||
191 | }; | ||
192 | |||
193 | pinctrl_macb_rmii_mii: macb_rmii_mii-0 { | ||
194 | atmel,pins = | ||
195 | <2 20 0x2 0x0 /* PC20 periph B */ | ||
196 | 2 21 0x2 0x0 /* PC21 periph B */ | ||
197 | 2 22 0x2 0x0 /* PC22 periph B */ | ||
198 | 2 23 0x2 0x0 /* PC23 periph B */ | ||
199 | 2 24 0x2 0x0 /* PC24 periph B */ | ||
200 | 2 25 0x2 0x0 /* PC25 periph B */ | ||
201 | 2 27 0x2 0x0 /* PC27 periph B */ | ||
202 | 4 22 0x2 0x0>; /* PE22 periph B */ | ||
203 | }; | ||
204 | }; | ||
205 | |||
206 | mmc0 { | ||
207 | pinctrl_mmc0_clk: mmc0_clk-0 { | ||
208 | atmel,pins = | ||
209 | <0 12 0x1 0x0>; /* PA12 periph A */ | ||
210 | }; | ||
211 | |||
212 | pinctrl_mmc0_slot0_cmd_dat0: mmc0_slot0_cmd_dat0-0 { | ||
213 | atmel,pins = | ||
214 | <0 1 0x1 0x1 /* PA1 periph A with pullup */ | ||
215 | 0 0 0x1 0x1>; /* PA0 periph A with pullup */ | ||
216 | }; | ||
217 | |||
218 | pinctrl_mmc0_slot0_dat1_3: mmc0_slot0_dat1_3-0 { | ||
219 | atmel,pins = | ||
220 | <0 3 0x1 0x1 /* PA3 periph A with pullup */ | ||
221 | 0 4 0x1 0x1 /* PA4 periph A with pullup */ | ||
222 | 0 5 0x1 0x1>; /* PA5 periph A with pullup */ | ||
223 | }; | ||
224 | |||
225 | pinctrl_mmc0_slot1_cmd_dat0: mmc0_slot1_cmd_dat0-0 { | ||
226 | atmel,pins = | ||
227 | <0 16 0x1 0x1 /* PA16 periph A with pullup */ | ||
228 | 0 17 0x1 0x1>; /* PA17 periph A with pullup */ | ||
229 | }; | ||
230 | |||
231 | pinctrl_mmc0_slot1_dat1_3: mmc0_slot1_dat1_3-0 { | ||
232 | atmel,pins = | ||
233 | <0 18 0x1 0x1 /* PA18 periph A with pullup */ | ||
234 | 0 19 0x1 0x1 /* PA19 periph A with pullup */ | ||
235 | 0 20 0x1 0x1>; /* PA20 periph A with pullup */ | ||
236 | }; | ||
237 | }; | ||
238 | |||
239 | mmc1 { | ||
240 | pinctrl_mmc1_clk: mmc1_clk-0 { | ||
241 | atmel,pins = | ||
242 | <0 6 0x1 0x0>; /* PA6 periph A */ | ||
243 | }; | ||
244 | |||
245 | pinctrl_mmc1_slot0_cmd_dat0: mmc1_slot0_cmd_dat0-0 { | ||
246 | atmel,pins = | ||
247 | <0 7 0x1 0x1 /* PA7 periph A with pullup */ | ||
248 | 0 8 0x1 0x1>; /* PA8 periph A with pullup */ | ||
249 | }; | ||
250 | |||
251 | pinctrl_mmc1_slot0_dat1_3: mmc1_slot0_dat1_3-0 { | ||
252 | atmel,pins = | ||
253 | <0 9 0x1 0x1 /* PA9 periph A with pullup */ | ||
254 | 0 10 0x1 0x1 /* PA10 periph A with pullup */ | ||
255 | 0 11 0x1 0x1>; /* PA11 periph A with pullup */ | ||
256 | }; | ||
257 | |||
258 | pinctrl_mmc1_slot1_cmd_dat0: mmc1_slot1_cmd_dat0-0 { | ||
259 | atmel,pins = | ||
260 | <0 21 0x1 0x1 /* PA21 periph A with pullup */ | ||
261 | 0 22 0x1 0x1>; /* PA22 periph A with pullup */ | ||
262 | }; | ||
263 | |||
264 | pinctrl_mmc1_slot1_dat1_3: mmc1_slot1_dat1_3-0 { | ||
265 | atmel,pins = | ||
266 | <0 23 0x1 0x1 /* PA23 periph A with pullup */ | ||
267 | 0 24 0x1 0x1 /* PA24 periph A with pullup */ | ||
268 | 0 25 0x1 0x1>; /* PA25 periph A with pullup */ | ||
269 | }; | ||
270 | }; | ||
271 | |||
272 | pioA: gpio@fffff200 { | ||
273 | compatible = "atmel,at91rm9200-gpio"; | ||
274 | reg = <0xfffff200 0x200>; | ||
275 | interrupts = <2 4 1>; | ||
276 | #gpio-cells = <2>; | ||
277 | gpio-controller; | ||
278 | interrupt-controller; | ||
279 | #interrupt-cells = <2>; | ||
280 | }; | ||
281 | |||
282 | pioB: gpio@fffff400 { | ||
283 | compatible = "atmel,at91rm9200-gpio"; | ||
284 | reg = <0xfffff400 0x200>; | ||
285 | interrupts = <3 4 1>; | ||
286 | #gpio-cells = <2>; | ||
287 | gpio-controller; | ||
288 | interrupt-controller; | ||
289 | #interrupt-cells = <2>; | ||
290 | }; | ||
291 | |||
292 | pioC: gpio@fffff600 { | ||
293 | compatible = "atmel,at91rm9200-gpio"; | ||
294 | reg = <0xfffff600 0x200>; | ||
295 | interrupts = <4 4 1>; | ||
296 | #gpio-cells = <2>; | ||
297 | gpio-controller; | ||
298 | interrupt-controller; | ||
299 | #interrupt-cells = <2>; | ||
300 | }; | ||
301 | |||
302 | pioD: gpio@fffff800 { | ||
303 | compatible = "atmel,at91rm9200-gpio"; | ||
304 | reg = <0xfffff800 0x200>; | ||
305 | interrupts = <4 4 1>; | ||
306 | #gpio-cells = <2>; | ||
307 | gpio-controller; | ||
308 | interrupt-controller; | ||
309 | #interrupt-cells = <2>; | ||
310 | }; | ||
311 | |||
312 | pioE: gpio@fffffa00 { | ||
313 | compatible = "atmel,at91rm9200-gpio"; | ||
314 | reg = <0xfffffa00 0x200>; | ||
315 | interrupts = <4 4 1>; | ||
316 | #gpio-cells = <2>; | ||
317 | gpio-controller; | ||
318 | interrupt-controller; | ||
319 | #interrupt-cells = <2>; | ||
320 | }; | ||
140 | }; | 321 | }; |
141 | 322 | ||
142 | dbgu: serial@ffffee00 { | 323 | dbgu: serial@ffffee00 { |
143 | compatible = "atmel,at91sam9260-usart"; | 324 | compatible = "atmel,at91sam9260-usart"; |
144 | reg = <0xffffee00 0x200>; | 325 | reg = <0xffffee00 0x200>; |
145 | interrupts = <1 4 7>; | 326 | interrupts = <1 4 7>; |
327 | pinctrl-names = "default"; | ||
328 | pinctrl-0 = <&pinctrl_dbgu>; | ||
146 | status = "disabled"; | 329 | status = "disabled"; |
147 | }; | 330 | }; |
148 | 331 | ||
@@ -152,6 +335,8 @@ | |||
152 | interrupts = <7 4 5>; | 335 | interrupts = <7 4 5>; |
153 | atmel,use-dma-rx; | 336 | atmel,use-dma-rx; |
154 | atmel,use-dma-tx; | 337 | atmel,use-dma-tx; |
338 | pinctrl-names = "default"; | ||
339 | pinctrl-0 = <&pinctrl_usart0>; | ||
155 | status = "disabled"; | 340 | status = "disabled"; |
156 | }; | 341 | }; |
157 | 342 | ||
@@ -161,6 +346,8 @@ | |||
161 | interrupts = <8 4 5>; | 346 | interrupts = <8 4 5>; |
162 | atmel,use-dma-rx; | 347 | atmel,use-dma-rx; |
163 | atmel,use-dma-tx; | 348 | atmel,use-dma-tx; |
349 | pinctrl-names = "default"; | ||
350 | pinctrl-0 = <&pinctrl_usart1>; | ||
164 | status = "disabled"; | 351 | status = "disabled"; |
165 | }; | 352 | }; |
166 | 353 | ||
@@ -170,6 +357,8 @@ | |||
170 | interrupts = <9 4 5>; | 357 | interrupts = <9 4 5>; |
171 | atmel,use-dma-rx; | 358 | atmel,use-dma-rx; |
172 | atmel,use-dma-tx; | 359 | atmel,use-dma-tx; |
360 | pinctrl-names = "default"; | ||
361 | pinctrl-0 = <&pinctrl_usart2>; | ||
173 | status = "disabled"; | 362 | status = "disabled"; |
174 | }; | 363 | }; |
175 | 364 | ||
@@ -177,6 +366,8 @@ | |||
177 | compatible = "cdns,at32ap7000-macb", "cdns,macb"; | 366 | compatible = "cdns,at32ap7000-macb", "cdns,macb"; |
178 | reg = <0xfffbc000 0x100>; | 367 | reg = <0xfffbc000 0x100>; |
179 | interrupts = <21 4 3>; | 368 | interrupts = <21 4 3>; |
369 | pinctrl-names = "default"; | ||
370 | pinctrl-0 = <&pinctrl_macb_rmii>; | ||
180 | status = "disabled"; | 371 | status = "disabled"; |
181 | }; | 372 | }; |
182 | 373 | ||
@@ -195,6 +386,24 @@ | |||
195 | #size-cells = <0>; | 386 | #size-cells = <0>; |
196 | status = "disabled"; | 387 | status = "disabled"; |
197 | }; | 388 | }; |
389 | |||
390 | mmc0: mmc@fff80000 { | ||
391 | compatible = "atmel,hsmci"; | ||
392 | reg = <0xfff80000 0x600>; | ||
393 | interrupts = <10 4 0>; | ||
394 | #address-cells = <1>; | ||
395 | #size-cells = <0>; | ||
396 | status = "disabled"; | ||
397 | }; | ||
398 | |||
399 | mmc1: mmc@fff84000 { | ||
400 | compatible = "atmel,hsmci"; | ||
401 | reg = <0xfff84000 0x600>; | ||
402 | interrupts = <11 4 0>; | ||
403 | #address-cells = <1>; | ||
404 | #size-cells = <0>; | ||
405 | status = "disabled"; | ||
406 | }; | ||
198 | }; | 407 | }; |
199 | 408 | ||
200 | nand0: nand@40000000 { | 409 | nand0: nand@40000000 { |
@@ -206,6 +415,8 @@ | |||
206 | >; | 415 | >; |
207 | atmel,nand-addr-offset = <21>; | 416 | atmel,nand-addr-offset = <21>; |
208 | atmel,nand-cmd-offset = <22>; | 417 | atmel,nand-cmd-offset = <22>; |
418 | pinctrl-names = "default"; | ||
419 | pinctrl-0 = <&pinctrl_nand>; | ||
209 | gpios = <&pioA 22 0 | 420 | gpios = <&pioA 22 0 |
210 | &pioD 15 0 | 421 | &pioD 15 0 |
211 | 0 | 422 | 0 |
diff --git a/arch/arm/boot/dts/at91sam9263ek.dts b/arch/arm/boot/dts/at91sam9263ek.dts index f86ac4b609fc..1eb08728f527 100644 --- a/arch/arm/boot/dts/at91sam9263ek.dts +++ b/arch/arm/boot/dts/at91sam9263ek.dts | |||
@@ -38,6 +38,10 @@ | |||
38 | }; | 38 | }; |
39 | 39 | ||
40 | usart0: serial@fff8c000 { | 40 | usart0: serial@fff8c000 { |
41 | pinctrl-0 = < | ||
42 | &pinctrl_usart0 | ||
43 | &pinctrl_usart0_rts | ||
44 | &pinctrl_usart0_cts>; | ||
41 | status = "okay"; | 45 | status = "okay"; |
42 | }; | 46 | }; |
43 | 47 | ||
@@ -50,6 +54,31 @@ | |||
50 | atmel,vbus-gpio = <&pioA 25 0>; | 54 | atmel,vbus-gpio = <&pioA 25 0>; |
51 | status = "okay"; | 55 | status = "okay"; |
52 | }; | 56 | }; |
57 | |||
58 | mmc0: mmc@fff80000 { | ||
59 | pinctrl-0 = < | ||
60 | &pinctrl_board_mmc0 | ||
61 | &pinctrl_mmc0_clk | ||
62 | &pinctrl_mmc0_slot0_cmd_dat0 | ||
63 | &pinctrl_mmc0_slot0_dat1_3>; | ||
64 | status = "okay"; | ||
65 | slot@0 { | ||
66 | reg = <0>; | ||
67 | bus-width = <4>; | ||
68 | cd-gpios = <&pioE 18 0>; | ||
69 | wp-gpios = <&pioE 19 0>; | ||
70 | }; | ||
71 | }; | ||
72 | |||
73 | pinctrl@fffff200 { | ||
74 | mmc0 { | ||
75 | pinctrl_board_mmc0: mmc0-board { | ||
76 | atmel,pins = | ||
77 | <5 18 0x0 0x5 /* PE18 gpio CD pin pull up and deglitch */ | ||
78 | 5 19 0x0 0x1>; /* PE19 gpio WP pin pull up */ | ||
79 | }; | ||
80 | }; | ||
81 | }; | ||
53 | }; | 82 | }; |
54 | 83 | ||
55 | nand0: nand@40000000 { | 84 | nand0: nand@40000000 { |
diff --git a/arch/arm/boot/dts/at91sam9g15.dtsi b/arch/arm/boot/dts/at91sam9g15.dtsi new file mode 100644 index 000000000000..fbe7a7089c2a --- /dev/null +++ b/arch/arm/boot/dts/at91sam9g15.dtsi | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * at91sam9g15.dtsi - Device Tree Include file for AT91SAM9G15 SoC | ||
3 | * | ||
4 | * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | ||
5 | * | ||
6 | * Licensed under GPLv2. | ||
7 | */ | ||
8 | |||
9 | /include/ "at91sam9x5.dtsi" | ||
10 | |||
11 | / { | ||
12 | model = "Atmel AT91SAM9G15 SoC"; | ||
13 | compatible = "atmel, at91sam9g15, atmel,at91sam9x5"; | ||
14 | |||
15 | ahb { | ||
16 | apb { | ||
17 | pinctrl@fffff400 { | ||
18 | atmel,mux-mask = < | ||
19 | /* A B C */ | ||
20 | 0xffffffff 0xffe0399f 0x00000000 /* pioA */ | ||
21 | 0x00040000 0x00047e3f 0x00000000 /* pioB */ | ||
22 | 0xfdffffff 0x00000000 0xb83fffff /* pioC */ | ||
23 | 0x003fffff 0x003f8000 0x00000000 /* pioD */ | ||
24 | >; | ||
25 | }; | ||
26 | }; | ||
27 | }; | ||
28 | }; | ||
diff --git a/arch/arm/boot/dts/at91sam9g15ek.dts b/arch/arm/boot/dts/at91sam9g15ek.dts new file mode 100644 index 000000000000..86dd3f6d938f --- /dev/null +++ b/arch/arm/boot/dts/at91sam9g15ek.dts | |||
@@ -0,0 +1,16 @@ | |||
1 | /* | ||
2 | * at91sam9g15ek.dts - Device Tree file for AT91SAM9G15-EK board | ||
3 | * | ||
4 | * Copyright (C) 2012 Atmel, | ||
5 | * 2012 Nicolas Ferre <nicolas.ferre@atmel.com> | ||
6 | * | ||
7 | * Licensed under GPLv2 or later. | ||
8 | */ | ||
9 | /dts-v1/; | ||
10 | /include/ "at91sam9g15.dtsi" | ||
11 | /include/ "at91sam9x5ek.dtsi" | ||
12 | |||
13 | / { | ||
14 | model = "Atmel AT91SAM9G25-EK"; | ||
15 | compatible = "atmel,at91sam9g15ek", "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9"; | ||
16 | }; | ||
diff --git a/arch/arm/boot/dts/at91sam9g20ek_2mmc.dts b/arch/arm/boot/dts/at91sam9g20ek_2mmc.dts index f1b2e148ac8c..66467b113126 100644 --- a/arch/arm/boot/dts/at91sam9g20ek_2mmc.dts +++ b/arch/arm/boot/dts/at91sam9g20ek_2mmc.dts | |||
@@ -12,6 +12,32 @@ | |||
12 | model = "Atmel at91sam9g20ek 2 mmc"; | 12 | model = "Atmel at91sam9g20ek 2 mmc"; |
13 | compatible = "atmel,at91sam9g20ek_2mmc", "atmel,at91sam9g20", "atmel,at91sam9"; | 13 | compatible = "atmel,at91sam9g20ek_2mmc", "atmel,at91sam9g20", "atmel,at91sam9"; |
14 | 14 | ||
15 | ahb { | ||
16 | apb{ | ||
17 | mmc0: mmc@fffa8000 { | ||
18 | /* clk already mux wuth slot0 */ | ||
19 | pinctrl-0 = < | ||
20 | &pinctrl_board_mmc0_slot0 | ||
21 | &pinctrl_mmc0_slot0_cmd_dat0 | ||
22 | &pinctrl_mmc0_slot0_dat1_3>; | ||
23 | slot@0 { | ||
24 | reg = <0>; | ||
25 | bus-width = <4>; | ||
26 | cd-gpios = <&pioC 2 0>; | ||
27 | }; | ||
28 | }; | ||
29 | |||
30 | pinctrl@fffff400 { | ||
31 | mmc0_slot0 { | ||
32 | pinctrl_board_mmc0_slot0: mmc0_slot0-board { | ||
33 | atmel,pins = | ||
34 | <2 2 0x0 0x5>; /* PC2 gpio CD pin pull up and deglitch */ | ||
35 | }; | ||
36 | }; | ||
37 | }; | ||
38 | }; | ||
39 | }; | ||
40 | |||
15 | leds { | 41 | leds { |
16 | compatible = "gpio-leds"; | 42 | compatible = "gpio-leds"; |
17 | 43 | ||
diff --git a/arch/arm/boot/dts/at91sam9g20ek_common.dtsi b/arch/arm/boot/dts/at91sam9g20ek_common.dtsi index e6391a4e6649..32a500a0e481 100644 --- a/arch/arm/boot/dts/at91sam9g20ek_common.dtsi +++ b/arch/arm/boot/dts/at91sam9g20ek_common.dtsi | |||
@@ -35,6 +35,13 @@ | |||
35 | }; | 35 | }; |
36 | 36 | ||
37 | usart0: serial@fffb0000 { | 37 | usart0: serial@fffb0000 { |
38 | pinctrl-0 = | ||
39 | <&pinctrl_usart0 | ||
40 | &pinctrl_usart0_rts | ||
41 | &pinctrl_usart0_cts | ||
42 | &pinctrl_usart0_dtr_dsr | ||
43 | &pinctrl_usart0_dcd | ||
44 | &pinctrl_usart0_ri>; | ||
38 | status = "okay"; | 45 | status = "okay"; |
39 | }; | 46 | }; |
40 | 47 | ||
@@ -51,6 +58,29 @@ | |||
51 | atmel,vbus-gpio = <&pioC 5 0>; | 58 | atmel,vbus-gpio = <&pioC 5 0>; |
52 | status = "okay"; | 59 | status = "okay"; |
53 | }; | 60 | }; |
61 | |||
62 | mmc0: mmc@fffa8000 { | ||
63 | pinctrl-0 = < | ||
64 | &pinctrl_board_mmc0_slot1 | ||
65 | &pinctrl_mmc0_clk | ||
66 | &pinctrl_mmc0_slot1_cmd_dat0 | ||
67 | &pinctrl_mmc0_slot1_dat1_3>; | ||
68 | status = "okay"; | ||
69 | slot@1 { | ||
70 | reg = <1>; | ||
71 | bus-width = <4>; | ||
72 | cd-gpios = <&pioC 9 0>; | ||
73 | }; | ||
74 | }; | ||
75 | |||
76 | pinctrl@fffff400 { | ||
77 | mmc0_slot1 { | ||
78 | pinctrl_board_mmc0_slot1: mmc0_slot1-board { | ||
79 | atmel,pins = | ||
80 | <2 9 0x0 0x5>; /* PC9 gpio CD pin pull up and deglitch */ | ||
81 | }; | ||
82 | }; | ||
83 | }; | ||
54 | }; | 84 | }; |
55 | 85 | ||
56 | nand0: nand@40000000 { | 86 | nand0: nand@40000000 { |
diff --git a/arch/arm/boot/dts/at91sam9g25.dtsi b/arch/arm/boot/dts/at91sam9g25.dtsi new file mode 100644 index 000000000000..05a718fb83c4 --- /dev/null +++ b/arch/arm/boot/dts/at91sam9g25.dtsi | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * at91sam9g25.dtsi - Device Tree Include file for AT91SAM9G25 SoC | ||
3 | * | ||
4 | * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | ||
5 | * | ||
6 | * Licensed under GPLv2. | ||
7 | */ | ||
8 | |||
9 | /include/ "at91sam9x5.dtsi" | ||
10 | |||
11 | / { | ||
12 | model = "Atmel AT91SAM9G25 SoC"; | ||
13 | compatible = "atmel, at91sam9g25, atmel,at91sam9x5"; | ||
14 | |||
15 | ahb { | ||
16 | apb { | ||
17 | pinctrl@fffff400 { | ||
18 | atmel,mux-mask = < | ||
19 | /* A B C */ | ||
20 | 0xffffffff 0xffe0399f 0xc000001c /* pioA */ | ||
21 | 0x0007ffff 0x8000fe3f 0x00000000 /* pioB */ | ||
22 | 0x80000000 0x07c0ffff 0xb83fffff /* pioC */ | ||
23 | 0x003fffff 0x003f8000 0x00000000 /* pioD */ | ||
24 | >; | ||
25 | }; | ||
26 | }; | ||
27 | }; | ||
28 | }; | ||
diff --git a/arch/arm/boot/dts/at91sam9g25ek.dts b/arch/arm/boot/dts/at91sam9g25ek.dts index 877c08f06763..c5ab16fba059 100644 --- a/arch/arm/boot/dts/at91sam9g25ek.dts +++ b/arch/arm/boot/dts/at91sam9g25ek.dts | |||
@@ -7,55 +7,10 @@ | |||
7 | * Licensed under GPLv2 or later. | 7 | * Licensed under GPLv2 or later. |
8 | */ | 8 | */ |
9 | /dts-v1/; | 9 | /dts-v1/; |
10 | /include/ "at91sam9x5.dtsi" | 10 | /include/ "at91sam9g25.dtsi" |
11 | /include/ "at91sam9x5cm.dtsi" | 11 | /include/ "at91sam9x5ek.dtsi" |
12 | 12 | ||
13 | / { | 13 | / { |
14 | model = "Atmel AT91SAM9G25-EK"; | 14 | model = "Atmel AT91SAM9G25-EK"; |
15 | compatible = "atmel,at91sam9g25ek", "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9"; | 15 | compatible = "atmel,at91sam9g25ek", "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9"; |
16 | |||
17 | chosen { | ||
18 | bootargs = "console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=ubifs ubi.mtd=1 root=ubi0:rootfs"; | ||
19 | }; | ||
20 | |||
21 | ahb { | ||
22 | apb { | ||
23 | dbgu: serial@fffff200 { | ||
24 | status = "okay"; | ||
25 | }; | ||
26 | |||
27 | usart0: serial@f801c000 { | ||
28 | status = "okay"; | ||
29 | }; | ||
30 | |||
31 | macb0: ethernet@f802c000 { | ||
32 | phy-mode = "rmii"; | ||
33 | status = "okay"; | ||
34 | }; | ||
35 | |||
36 | i2c0: i2c@f8010000 { | ||
37 | status = "okay"; | ||
38 | }; | ||
39 | |||
40 | i2c1: i2c@f8014000 { | ||
41 | status = "okay"; | ||
42 | }; | ||
43 | |||
44 | i2c2: i2c@f8018000 { | ||
45 | status = "okay"; | ||
46 | }; | ||
47 | }; | ||
48 | |||
49 | usb0: ohci@00600000 { | ||
50 | status = "okay"; | ||
51 | num-ports = <2>; | ||
52 | atmel,vbus-gpio = <&pioD 19 1 | ||
53 | &pioD 20 1 | ||
54 | >; | ||
55 | }; | ||
56 | |||
57 | usb1: ehci@00700000 { | ||
58 | status = "okay"; | ||
59 | }; | ||
60 | }; | ||
61 | }; | 16 | }; |
diff --git a/arch/arm/boot/dts/at91sam9g35.dtsi b/arch/arm/boot/dts/at91sam9g35.dtsi new file mode 100644 index 000000000000..f9d14a722794 --- /dev/null +++ b/arch/arm/boot/dts/at91sam9g35.dtsi | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * at91sam9g35.dtsi - Device Tree Include file for AT91SAM9G35 SoC | ||
3 | * | ||
4 | * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | ||
5 | * | ||
6 | * Licensed under GPLv2. | ||
7 | */ | ||
8 | |||
9 | /include/ "at91sam9x5.dtsi" | ||
10 | |||
11 | / { | ||
12 | model = "Atmel AT91SAM9G35 SoC"; | ||
13 | compatible = "atmel, at91sam9g35, atmel,at91sam9x5"; | ||
14 | |||
15 | ahb { | ||
16 | apb { | ||
17 | pinctrl@fffff400 { | ||
18 | atmel,mux-mask = < | ||
19 | /* A B C */ | ||
20 | 0xffffffff 0xffe0399f 0xc000000c /* pioA */ | ||
21 | 0x000406ff 0x00047e3f 0x00000000 /* pioB */ | ||
22 | 0xfdffffff 0x00000000 0xb83fffff /* pioC */ | ||
23 | 0x003fffff 0x003f8000 0x00000000 /* pioD */ | ||
24 | >; | ||
25 | }; | ||
26 | }; | ||
27 | }; | ||
28 | }; | ||
diff --git a/arch/arm/boot/dts/at91sam9g35ek.dts b/arch/arm/boot/dts/at91sam9g35ek.dts new file mode 100644 index 000000000000..95944bdd798d --- /dev/null +++ b/arch/arm/boot/dts/at91sam9g35ek.dts | |||
@@ -0,0 +1,16 @@ | |||
1 | /* | ||
2 | * at91sam9g35ek.dts - Device Tree file for AT91SAM9G35-EK board | ||
3 | * | ||
4 | * Copyright (C) 2012 Atmel, | ||
5 | * 2012 Nicolas Ferre <nicolas.ferre@atmel.com> | ||
6 | * | ||
7 | * Licensed under GPLv2 or later. | ||
8 | */ | ||
9 | /dts-v1/; | ||
10 | /include/ "at91sam9g35.dtsi" | ||
11 | /include/ "at91sam9x5ek.dtsi" | ||
12 | |||
13 | / { | ||
14 | model = "Atmel AT91SAM9G35-EK"; | ||
15 | compatible = "atmel,at91sam9g35ek", "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9"; | ||
16 | }; | ||
diff --git a/arch/arm/boot/dts/at91sam9g45.dtsi b/arch/arm/boot/dts/at91sam9g45.dtsi index 3add030d61f8..0741caeeced1 100644 --- a/arch/arm/boot/dts/at91sam9g45.dtsi +++ b/arch/arm/boot/dts/at91sam9g45.dtsi | |||
@@ -108,60 +108,243 @@ | |||
108 | interrupts = <21 4 0>; | 108 | interrupts = <21 4 0>; |
109 | }; | 109 | }; |
110 | 110 | ||
111 | pioA: gpio@fffff200 { | 111 | pinctrl@fffff200 { |
112 | compatible = "atmel,at91rm9200-gpio"; | 112 | #address-cells = <1>; |
113 | reg = <0xfffff200 0x100>; | 113 | #size-cells = <1>; |
114 | interrupts = <2 4 1>; | 114 | compatible = "atmel,at91rm9200-pinctrl", "simple-bus"; |
115 | #gpio-cells = <2>; | 115 | ranges = <0xfffff200 0xfffff200 0xa00>; |
116 | gpio-controller; | 116 | |
117 | interrupt-controller; | 117 | atmel,mux-mask = < |
118 | #interrupt-cells = <2>; | 118 | /* A B */ |
119 | }; | 119 | 0xffffffff 0xffc003ff /* pioA */ |
120 | 0xffffffff 0x800f8f00 /* pioB */ | ||
121 | 0xffffffff 0x00000e00 /* pioC */ | ||
122 | 0xffffffff 0xff0c1381 /* pioD */ | ||
123 | 0xffffffff 0x81ffff81 /* pioE */ | ||
124 | >; | ||
125 | |||
126 | /* shared pinctrl settings */ | ||
127 | dbgu { | ||
128 | pinctrl_dbgu: dbgu-0 { | ||
129 | atmel,pins = | ||
130 | <1 12 0x1 0x0 /* PB12 periph A */ | ||
131 | 1 13 0x1 0x0>; /* PB13 periph A */ | ||
132 | }; | ||
133 | }; | ||
120 | 134 | ||
121 | pioB: gpio@fffff400 { | 135 | usart0 { |
122 | compatible = "atmel,at91rm9200-gpio"; | 136 | pinctrl_usart0: usart0-0 { |
123 | reg = <0xfffff400 0x100>; | 137 | atmel,pins = |
124 | interrupts = <3 4 1>; | 138 | <1 19 0x1 0x1 /* PB19 periph A with pullup */ |
125 | #gpio-cells = <2>; | 139 | 1 18 0x1 0x0>; /* PB18 periph A */ |
126 | gpio-controller; | 140 | }; |
127 | interrupt-controller; | 141 | |
128 | #interrupt-cells = <2>; | 142 | pinctrl_usart0_rts: usart0_rts-0 { |
129 | }; | 143 | atmel,pins = |
144 | <1 17 0x2 0x0>; /* PB17 periph B */ | ||
145 | }; | ||
146 | |||
147 | pinctrl_usart0_cts: usart0_cts-0 { | ||
148 | atmel,pins = | ||
149 | <1 15 0x2 0x0>; /* PB15 periph B */ | ||
150 | }; | ||
151 | }; | ||
130 | 152 | ||
131 | pioC: gpio@fffff600 { | 153 | uart1 { |
132 | compatible = "atmel,at91rm9200-gpio"; | 154 | pinctrl_usart1: usart1-0 { |
133 | reg = <0xfffff600 0x100>; | 155 | atmel,pins = |
134 | interrupts = <4 4 1>; | 156 | <1 4 0x1 0x1 /* PB4 periph A with pullup */ |
135 | #gpio-cells = <2>; | 157 | 1 5 0x1 0x0>; /* PB5 periph A */ |
136 | gpio-controller; | 158 | }; |
137 | interrupt-controller; | 159 | |
138 | #interrupt-cells = <2>; | 160 | pinctrl_usart1_rts: usart1_rts-0 { |
139 | }; | 161 | atmel,pins = |
162 | <3 16 0x1 0x0>; /* PD16 periph A */ | ||
163 | }; | ||
164 | |||
165 | pinctrl_usart1_cts: usart1_cts-0 { | ||
166 | atmel,pins = | ||
167 | <3 17 0x1 0x0>; /* PD17 periph A */ | ||
168 | }; | ||
169 | }; | ||
140 | 170 | ||
141 | pioD: gpio@fffff800 { | 171 | usart2 { |
142 | compatible = "atmel,at91rm9200-gpio"; | 172 | pinctrl_usart2: usart2-0 { |
143 | reg = <0xfffff800 0x100>; | 173 | atmel,pins = |
144 | interrupts = <5 4 1>; | 174 | <1 6 0x1 0x1 /* PB6 periph A with pullup */ |
145 | #gpio-cells = <2>; | 175 | 1 7 0x1 0x0>; /* PB7 periph A */ |
146 | gpio-controller; | 176 | }; |
147 | interrupt-controller; | 177 | |
148 | #interrupt-cells = <2>; | 178 | pinctrl_usart2_rts: usart2_rts-0 { |
149 | }; | 179 | atmel,pins = |
180 | <2 9 0x2 0x0>; /* PC9 periph B */ | ||
181 | }; | ||
182 | |||
183 | pinctrl_usart2_cts: usart2_cts-0 { | ||
184 | atmel,pins = | ||
185 | <2 11 0x2 0x0>; /* PC11 periph B */ | ||
186 | }; | ||
187 | }; | ||
150 | 188 | ||
151 | pioE: gpio@fffffa00 { | 189 | usart3 { |
152 | compatible = "atmel,at91rm9200-gpio"; | 190 | pinctrl_usart3: usart3-0 { |
153 | reg = <0xfffffa00 0x100>; | 191 | atmel,pins = |
154 | interrupts = <5 4 1>; | 192 | <1 8 0x1 0x1 /* PB9 periph A with pullup */ |
155 | #gpio-cells = <2>; | 193 | 1 9 0x1 0x0>; /* PB8 periph A */ |
156 | gpio-controller; | 194 | }; |
157 | interrupt-controller; | 195 | |
158 | #interrupt-cells = <2>; | 196 | pinctrl_usart3_rts: usart3_rts-0 { |
197 | atmel,pins = | ||
198 | <0 23 0x2 0x0>; /* PA23 periph B */ | ||
199 | }; | ||
200 | |||
201 | pinctrl_usart3_cts: usart3_cts-0 { | ||
202 | atmel,pins = | ||
203 | <0 24 0x2 0x0>; /* PA24 periph B */ | ||
204 | }; | ||
205 | }; | ||
206 | |||
207 | nand { | ||
208 | pinctrl_nand: nand-0 { | ||
209 | atmel,pins = | ||
210 | <2 8 0x0 0x1 /* PC8 gpio RDY pin pull_up*/ | ||
211 | 2 14 0x0 0x1>; /* PC14 gpio enable pin pull_up */ | ||
212 | }; | ||
213 | }; | ||
214 | |||
215 | macb { | ||
216 | pinctrl_macb_rmii: macb_rmii-0 { | ||
217 | atmel,pins = | ||
218 | <0 10 0x1 0x0 /* PA10 periph A */ | ||
219 | 0 11 0x1 0x0 /* PA11 periph A */ | ||
220 | 0 12 0x1 0x0 /* PA12 periph A */ | ||
221 | 0 13 0x1 0x0 /* PA13 periph A */ | ||
222 | 0 14 0x1 0x0 /* PA14 periph A */ | ||
223 | 0 15 0x1 0x0 /* PA15 periph A */ | ||
224 | 0 16 0x1 0x0 /* PA16 periph A */ | ||
225 | 0 17 0x1 0x0 /* PA17 periph A */ | ||
226 | 0 18 0x1 0x0 /* PA18 periph A */ | ||
227 | 0 19 0x1 0x0>; /* PA19 periph A */ | ||
228 | }; | ||
229 | |||
230 | pinctrl_macb_rmii_mii: macb_rmii_mii-0 { | ||
231 | atmel,pins = | ||
232 | <0 6 0x2 0x0 /* PA6 periph B */ | ||
233 | 0 7 0x2 0x0 /* PA7 periph B */ | ||
234 | 0 8 0x2 0x0 /* PA8 periph B */ | ||
235 | 0 9 0x2 0x0 /* PA9 periph B */ | ||
236 | 0 27 0x2 0x0 /* PA27 periph B */ | ||
237 | 0 28 0x2 0x0 /* PA28 periph B */ | ||
238 | 0 29 0x2 0x0 /* PA29 periph B */ | ||
239 | 0 30 0x2 0x0>; /* PA30 periph B */ | ||
240 | }; | ||
241 | }; | ||
242 | |||
243 | mmc0 { | ||
244 | pinctrl_mmc0_slot0_clk_cmd_dat0: mmc0_slot0_clk_cmd_dat0-0 { | ||
245 | atmel,pins = | ||
246 | <0 0 0x1 0x0 /* PA0 periph A */ | ||
247 | 0 1 0x1 0x1 /* PA1 periph A with pullup */ | ||
248 | 0 2 0x1 0x1>; /* PA2 periph A with pullup */ | ||
249 | }; | ||
250 | |||
251 | pinctrl_mmc0_slot0_dat1_3: mmc0_slot0_dat1_3-0 { | ||
252 | atmel,pins = | ||
253 | <0 3 0x1 0x1 /* PA3 periph A with pullup */ | ||
254 | 0 4 0x1 0x1 /* PA4 periph A with pullup */ | ||
255 | 0 5 0x1 0x1>; /* PA5 periph A with pullup */ | ||
256 | }; | ||
257 | |||
258 | pinctrl_mmc0_slot0_dat4_7: mmc0_slot0_dat4_7-0 { | ||
259 | atmel,pins = | ||
260 | <0 6 0x1 0x1 /* PA6 periph A with pullup */ | ||
261 | 0 7 0x1 0x1 /* PA7 periph A with pullup */ | ||
262 | 0 8 0x1 0x1 /* PA8 periph A with pullup */ | ||
263 | 0 9 0x1 0x1>; /* PA9 periph A with pullup */ | ||
264 | }; | ||
265 | }; | ||
266 | |||
267 | mmc1 { | ||
268 | pinctrl_mmc1_slot0_clk_cmd_dat0: mmc1_slot0_clk_cmd_dat0-0 { | ||
269 | atmel,pins = | ||
270 | <0 31 0x1 0x0 /* PA31 periph A */ | ||
271 | 0 22 0x1 0x1 /* PA22 periph A with pullup */ | ||
272 | 0 23 0x1 0x1>; /* PA23 periph A with pullup */ | ||
273 | }; | ||
274 | |||
275 | pinctrl_mmc1_slot0_dat1_3: mmc1_slot0_dat1_3-0 { | ||
276 | atmel,pins = | ||
277 | <0 24 0x1 0x1 /* PA24 periph A with pullup */ | ||
278 | 0 25 0x1 0x1 /* PA25 periph A with pullup */ | ||
279 | 0 26 0x1 0x1>; /* PA26 periph A with pullup */ | ||
280 | }; | ||
281 | |||
282 | pinctrl_mmc1_slot0_dat4_7: mmc1_slot0_dat4_7-0 { | ||
283 | atmel,pins = | ||
284 | <0 27 0x1 0x1 /* PA27 periph A with pullup */ | ||
285 | 0 28 0x1 0x1 /* PA28 periph A with pullup */ | ||
286 | 0 29 0x1 0x1 /* PA29 periph A with pullup */ | ||
287 | 0 20 0x1 0x1>; /* PA30 periph A with pullup */ | ||
288 | }; | ||
289 | }; | ||
290 | |||
291 | pioA: gpio@fffff200 { | ||
292 | compatible = "atmel,at91rm9200-gpio"; | ||
293 | reg = <0xfffff200 0x200>; | ||
294 | interrupts = <2 4 1>; | ||
295 | #gpio-cells = <2>; | ||
296 | gpio-controller; | ||
297 | interrupt-controller; | ||
298 | #interrupt-cells = <2>; | ||
299 | }; | ||
300 | |||
301 | pioB: gpio@fffff400 { | ||
302 | compatible = "atmel,at91rm9200-gpio"; | ||
303 | reg = <0xfffff400 0x200>; | ||
304 | interrupts = <3 4 1>; | ||
305 | #gpio-cells = <2>; | ||
306 | gpio-controller; | ||
307 | interrupt-controller; | ||
308 | #interrupt-cells = <2>; | ||
309 | }; | ||
310 | |||
311 | pioC: gpio@fffff600 { | ||
312 | compatible = "atmel,at91rm9200-gpio"; | ||
313 | reg = <0xfffff600 0x200>; | ||
314 | interrupts = <4 4 1>; | ||
315 | #gpio-cells = <2>; | ||
316 | gpio-controller; | ||
317 | interrupt-controller; | ||
318 | #interrupt-cells = <2>; | ||
319 | }; | ||
320 | |||
321 | pioD: gpio@fffff800 { | ||
322 | compatible = "atmel,at91rm9200-gpio"; | ||
323 | reg = <0xfffff800 0x200>; | ||
324 | interrupts = <5 4 1>; | ||
325 | #gpio-cells = <2>; | ||
326 | gpio-controller; | ||
327 | interrupt-controller; | ||
328 | #interrupt-cells = <2>; | ||
329 | }; | ||
330 | |||
331 | pioE: gpio@fffffa00 { | ||
332 | compatible = "atmel,at91rm9200-gpio"; | ||
333 | reg = <0xfffffa00 0x200>; | ||
334 | interrupts = <5 4 1>; | ||
335 | #gpio-cells = <2>; | ||
336 | gpio-controller; | ||
337 | interrupt-controller; | ||
338 | #interrupt-cells = <2>; | ||
339 | }; | ||
159 | }; | 340 | }; |
160 | 341 | ||
161 | dbgu: serial@ffffee00 { | 342 | dbgu: serial@ffffee00 { |
162 | compatible = "atmel,at91sam9260-usart"; | 343 | compatible = "atmel,at91sam9260-usart"; |
163 | reg = <0xffffee00 0x200>; | 344 | reg = <0xffffee00 0x200>; |
164 | interrupts = <1 4 7>; | 345 | interrupts = <1 4 7>; |
346 | pinctrl-names = "default"; | ||
347 | pinctrl-0 = <&pinctrl_dbgu>; | ||
165 | status = "disabled"; | 348 | status = "disabled"; |
166 | }; | 349 | }; |
167 | 350 | ||
@@ -171,6 +354,8 @@ | |||
171 | interrupts = <7 4 5>; | 354 | interrupts = <7 4 5>; |
172 | atmel,use-dma-rx; | 355 | atmel,use-dma-rx; |
173 | atmel,use-dma-tx; | 356 | atmel,use-dma-tx; |
357 | pinctrl-names = "default"; | ||
358 | pinctrl-0 = <&pinctrl_usart0>; | ||
174 | status = "disabled"; | 359 | status = "disabled"; |
175 | }; | 360 | }; |
176 | 361 | ||
@@ -180,6 +365,8 @@ | |||
180 | interrupts = <8 4 5>; | 365 | interrupts = <8 4 5>; |
181 | atmel,use-dma-rx; | 366 | atmel,use-dma-rx; |
182 | atmel,use-dma-tx; | 367 | atmel,use-dma-tx; |
368 | pinctrl-names = "default"; | ||
369 | pinctrl-0 = <&pinctrl_usart1>; | ||
183 | status = "disabled"; | 370 | status = "disabled"; |
184 | }; | 371 | }; |
185 | 372 | ||
@@ -189,6 +376,8 @@ | |||
189 | interrupts = <9 4 5>; | 376 | interrupts = <9 4 5>; |
190 | atmel,use-dma-rx; | 377 | atmel,use-dma-rx; |
191 | atmel,use-dma-tx; | 378 | atmel,use-dma-tx; |
379 | pinctrl-names = "default"; | ||
380 | pinctrl-0 = <&pinctrl_usart2>; | ||
192 | status = "disabled"; | 381 | status = "disabled"; |
193 | }; | 382 | }; |
194 | 383 | ||
@@ -198,6 +387,8 @@ | |||
198 | interrupts = <10 4 5>; | 387 | interrupts = <10 4 5>; |
199 | atmel,use-dma-rx; | 388 | atmel,use-dma-rx; |
200 | atmel,use-dma-tx; | 389 | atmel,use-dma-tx; |
390 | pinctrl-names = "default"; | ||
391 | pinctrl-0 = <&pinctrl_usart3>; | ||
201 | status = "disabled"; | 392 | status = "disabled"; |
202 | }; | 393 | }; |
203 | 394 | ||
@@ -205,6 +396,8 @@ | |||
205 | compatible = "cdns,at32ap7000-macb", "cdns,macb"; | 396 | compatible = "cdns,at32ap7000-macb", "cdns,macb"; |
206 | reg = <0xfffbc000 0x100>; | 397 | reg = <0xfffbc000 0x100>; |
207 | interrupts = <25 4 3>; | 398 | interrupts = <25 4 3>; |
399 | pinctrl-names = "default"; | ||
400 | pinctrl-0 = <&pinctrl_macb_rmii>; | ||
208 | status = "disabled"; | 401 | status = "disabled"; |
209 | }; | 402 | }; |
210 | 403 | ||
@@ -262,6 +455,24 @@ | |||
262 | trigger-value = <0x6>; | 455 | trigger-value = <0x6>; |
263 | }; | 456 | }; |
264 | }; | 457 | }; |
458 | |||
459 | mmc0: mmc@fff80000 { | ||
460 | compatible = "atmel,hsmci"; | ||
461 | reg = <0xfff80000 0x600>; | ||
462 | interrupts = <11 4 0>; | ||
463 | #address-cells = <1>; | ||
464 | #size-cells = <0>; | ||
465 | status = "disabled"; | ||
466 | }; | ||
467 | |||
468 | mmc1: mmc@fffd0000 { | ||
469 | compatible = "atmel,hsmci"; | ||
470 | reg = <0xfffd0000 0x600>; | ||
471 | interrupts = <29 4 0>; | ||
472 | #address-cells = <1>; | ||
473 | #size-cells = <0>; | ||
474 | status = "disabled"; | ||
475 | }; | ||
265 | }; | 476 | }; |
266 | 477 | ||
267 | nand0: nand@40000000 { | 478 | nand0: nand@40000000 { |
@@ -273,6 +484,8 @@ | |||
273 | >; | 484 | >; |
274 | atmel,nand-addr-offset = <21>; | 485 | atmel,nand-addr-offset = <21>; |
275 | atmel,nand-cmd-offset = <22>; | 486 | atmel,nand-cmd-offset = <22>; |
487 | pinctrl-names = "default"; | ||
488 | pinctrl-0 = <&pinctrl_nand>; | ||
276 | gpios = <&pioC 8 0 | 489 | gpios = <&pioC 8 0 |
277 | &pioC 14 0 | 490 | &pioC 14 0 |
278 | 0 | 491 | 0 |
diff --git a/arch/arm/boot/dts/at91sam9m10g45ek.dts b/arch/arm/boot/dts/at91sam9m10g45ek.dts index 15e1dd43f625..20c31913c270 100644 --- a/arch/arm/boot/dts/at91sam9m10g45ek.dts +++ b/arch/arm/boot/dts/at91sam9m10g45ek.dts | |||
@@ -39,6 +39,10 @@ | |||
39 | }; | 39 | }; |
40 | 40 | ||
41 | usart1: serial@fff90000 { | 41 | usart1: serial@fff90000 { |
42 | pinctrl-0 = | ||
43 | <&pinctrl_usart1 | ||
44 | &pinctrl_usart1_rts | ||
45 | &pinctrl_usart1_cts>; | ||
42 | status = "okay"; | 46 | status = "okay"; |
43 | }; | 47 | }; |
44 | 48 | ||
@@ -54,6 +58,50 @@ | |||
54 | i2c1: i2c@fff88000 { | 58 | i2c1: i2c@fff88000 { |
55 | status = "okay"; | 59 | status = "okay"; |
56 | }; | 60 | }; |
61 | |||
62 | mmc0: mmc@fff80000 { | ||
63 | pinctrl-0 = < | ||
64 | &pinctrl_board_mmc0 | ||
65 | &pinctrl_mmc0_slot0_clk_cmd_dat0 | ||
66 | &pinctrl_mmc0_slot0_dat1_3>; | ||
67 | status = "okay"; | ||
68 | slot@0 { | ||
69 | reg = <0>; | ||
70 | bus-width = <4>; | ||
71 | cd-gpios = <&pioD 10 0>; | ||
72 | }; | ||
73 | }; | ||
74 | |||
75 | mmc1: mmc@fffd0000 { | ||
76 | pinctrl-0 = < | ||
77 | &pinctrl_board_mmc1 | ||
78 | &pinctrl_mmc1_slot0_clk_cmd_dat0 | ||
79 | &pinctrl_mmc1_slot0_dat1_3>; | ||
80 | status = "okay"; | ||
81 | slot@0 { | ||
82 | reg = <0>; | ||
83 | bus-width = <4>; | ||
84 | cd-gpios = <&pioD 11 0>; | ||
85 | wp-gpios = <&pioD 29 0>; | ||
86 | }; | ||
87 | }; | ||
88 | |||
89 | pinctrl@fffff200 { | ||
90 | mmc0 { | ||
91 | pinctrl_board_mmc0: mmc0-board { | ||
92 | atmel,pins = | ||
93 | <3 10 0x0 0x5>; /* PD10 gpio CD pin pull up and deglitch */ | ||
94 | }; | ||
95 | }; | ||
96 | |||
97 | mmc1 { | ||
98 | pinctrl_board_mmc1: mmc1-board { | ||
99 | atmel,pins = | ||
100 | <3 11 0x0 0x5 /* PD11 gpio CD pin pull up and deglitch */ | ||
101 | 3 29 0x0 0x1>; /* PD29 gpio WP pin pull up */ | ||
102 | }; | ||
103 | }; | ||
104 | }; | ||
57 | }; | 105 | }; |
58 | 106 | ||
59 | nand0: nand@40000000 { | 107 | nand0: nand@40000000 { |
diff --git a/arch/arm/boot/dts/at91sam9n12.dtsi b/arch/arm/boot/dts/at91sam9n12.dtsi index 82508d68aa7e..e9efb34f4379 100644 --- a/arch/arm/boot/dts/at91sam9n12.dtsi +++ b/arch/arm/boot/dts/at91sam9n12.dtsi | |||
@@ -84,6 +84,15 @@ | |||
84 | reg = <0xfffffe10 0x10>; | 84 | reg = <0xfffffe10 0x10>; |
85 | }; | 85 | }; |
86 | 86 | ||
87 | mmc0: mmc@f0008000 { | ||
88 | compatible = "atmel,hsmci"; | ||
89 | reg = <0xf0008000 0x600>; | ||
90 | interrupts = <12 4 0>; | ||
91 | #address-cells = <1>; | ||
92 | #size-cells = <0>; | ||
93 | status = "disabled"; | ||
94 | }; | ||
95 | |||
87 | tcb0: timer@f8008000 { | 96 | tcb0: timer@f8008000 { |
88 | compatible = "atmel,at91sam9x5-tcb"; | 97 | compatible = "atmel,at91sam9x5-tcb"; |
89 | reg = <0xf8008000 0x100>; | 98 | reg = <0xf8008000 0x100>; |
@@ -102,50 +111,186 @@ | |||
102 | interrupts = <20 4 0>; | 111 | interrupts = <20 4 0>; |
103 | }; | 112 | }; |
104 | 113 | ||
105 | pioA: gpio@fffff400 { | 114 | pinctrl@fffff400 { |
106 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; | 115 | #address-cells = <1>; |
107 | reg = <0xfffff400 0x100>; | 116 | #size-cells = <1>; |
108 | interrupts = <2 4 1>; | 117 | compatible = "atmel,at91sam9x5-pinctrl", "atmel,at91rm9200-pinctrl", "simple-bus"; |
109 | #gpio-cells = <2>; | 118 | ranges = <0xfffff400 0xfffff400 0x800>; |
110 | gpio-controller; | ||
111 | interrupt-controller; | ||
112 | #interrupt-cells = <2>; | ||
113 | }; | ||
114 | 119 | ||
115 | pioB: gpio@fffff600 { | 120 | atmel,mux-mask = < |
116 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; | 121 | /* A B C */ |
117 | reg = <0xfffff600 0x100>; | 122 | 0xffffffff 0xffe07983 0x00000000 /* pioA */ |
118 | interrupts = <2 4 1>; | 123 | 0x00040000 0x00047e0f 0x00000000 /* pioB */ |
119 | #gpio-cells = <2>; | 124 | 0xfdffffff 0x07c00000 0xb83fffff /* pioC */ |
120 | gpio-controller; | 125 | 0x003fffff 0x003f8000 0x00000000 /* pioD */ |
121 | interrupt-controller; | 126 | >; |
122 | #interrupt-cells = <2>; | ||
123 | }; | ||
124 | 127 | ||
125 | pioC: gpio@fffff800 { | 128 | /* shared pinctrl settings */ |
126 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; | 129 | dbgu { |
127 | reg = <0xfffff800 0x100>; | 130 | pinctrl_dbgu: dbgu-0 { |
128 | interrupts = <3 4 1>; | 131 | atmel,pins = |
129 | #gpio-cells = <2>; | 132 | <0 9 0x1 0x0 /* PA9 periph A */ |
130 | gpio-controller; | 133 | 0 10 0x1 0x1>; /* PA10 periph with pullup */ |
131 | interrupt-controller; | 134 | }; |
132 | #interrupt-cells = <2>; | 135 | }; |
133 | }; | ||
134 | 136 | ||
135 | pioD: gpio@fffffa00 { | 137 | usart0 { |
136 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; | 138 | pinctrl_usart0: usart0-0 { |
137 | reg = <0xfffffa00 0x100>; | 139 | atmel,pins = |
138 | interrupts = <3 4 1>; | 140 | <0 1 0x1 0x1 /* PA1 periph A with pullup */ |
139 | #gpio-cells = <2>; | 141 | 0 0 0x1 0x0>; /* PA0 periph A */ |
140 | gpio-controller; | 142 | }; |
141 | interrupt-controller; | 143 | |
142 | #interrupt-cells = <2>; | 144 | pinctrl_usart0_rts: usart0_rts-0 { |
145 | atmel,pins = | ||
146 | <0 2 0x1 0x0>; /* PA2 periph A */ | ||
147 | }; | ||
148 | |||
149 | pinctrl_usart0_cts: usart0_cts-0 { | ||
150 | atmel,pins = | ||
151 | <0 3 0x1 0x0>; /* PA3 periph A */ | ||
152 | }; | ||
153 | }; | ||
154 | |||
155 | usart1 { | ||
156 | pinctrl_usart1: usart1-0 { | ||
157 | atmel,pins = | ||
158 | <0 6 0x1 0x1 /* PA6 periph A with pullup */ | ||
159 | 0 5 0x1 0x0>; /* PA5 periph A */ | ||
160 | }; | ||
161 | }; | ||
162 | |||
163 | usart2 { | ||
164 | pinctrl_usart2: usart2-0 { | ||
165 | atmel,pins = | ||
166 | <0 8 0x1 0x1 /* PA8 periph A with pullup */ | ||
167 | 0 7 0x1 0x0>; /* PA7 periph A */ | ||
168 | }; | ||
169 | |||
170 | pinctrl_usart2_rts: usart2_rts-0 { | ||
171 | atmel,pins = | ||
172 | <1 0 0x2 0x0>; /* PB0 periph B */ | ||
173 | }; | ||
174 | |||
175 | pinctrl_usart2_cts: usart2_cts-0 { | ||
176 | atmel,pins = | ||
177 | <1 1 0x2 0x0>; /* PB1 periph B */ | ||
178 | }; | ||
179 | }; | ||
180 | |||
181 | usart3 { | ||
182 | pinctrl_usart3: usart3-0 { | ||
183 | atmel,pins = | ||
184 | <2 23 0x2 0x1 /* PC23 periph B with pullup */ | ||
185 | 2 22 0x2 0x0>; /* PC22 periph B */ | ||
186 | }; | ||
187 | |||
188 | pinctrl_usart3_rts: usart3_rts-0 { | ||
189 | atmel,pins = | ||
190 | <2 24 0x2 0x0>; /* PC24 periph B */ | ||
191 | }; | ||
192 | |||
193 | pinctrl_usart3_cts: usart3_cts-0 { | ||
194 | atmel,pins = | ||
195 | <2 25 0x2 0x0>; /* PC25 periph B */ | ||
196 | }; | ||
197 | }; | ||
198 | |||
199 | uart0 { | ||
200 | pinctrl_uart0: uart0-0 { | ||
201 | atmel,pins = | ||
202 | <2 9 0x3 0x1 /* PC9 periph C with pullup */ | ||
203 | 2 8 0x3 0x0>; /* PC8 periph C */ | ||
204 | }; | ||
205 | }; | ||
206 | |||
207 | uart1 { | ||
208 | pinctrl_uart1: uart1-0 { | ||
209 | atmel,pins = | ||
210 | <2 16 0x3 0x1 /* PC17 periph C with pullup */ | ||
211 | 2 17 0x3 0x0>; /* PC16 periph C */ | ||
212 | }; | ||
213 | }; | ||
214 | |||
215 | nand { | ||
216 | pinctrl_nand: nand-0 { | ||
217 | atmel,pins = | ||
218 | <3 5 0x0 0x1 /* PD5 gpio RDY pin pull_up*/ | ||
219 | 3 4 0x0 0x1>; /* PD4 gpio enable pin pull_up */ | ||
220 | }; | ||
221 | }; | ||
222 | |||
223 | mmc0 { | ||
224 | pinctrl_mmc0_slot0_clk_cmd_dat0: mmc0_slot0_clk_cmd_dat0-0 { | ||
225 | atmel,pins = | ||
226 | <0 17 0x1 0x0 /* PA17 periph A */ | ||
227 | 0 16 0x1 0x1 /* PA16 periph A with pullup */ | ||
228 | 0 15 0x1 0x1>; /* PA15 periph A with pullup */ | ||
229 | }; | ||
230 | |||
231 | pinctrl_mmc0_slot0_dat1_3: mmc0_slot0_dat1_3-0 { | ||
232 | atmel,pins = | ||
233 | <0 18 0x1 0x1 /* PA18 periph A with pullup */ | ||
234 | 0 19 0x1 0x1 /* PA19 periph A with pullup */ | ||
235 | 0 20 0x1 0x1>; /* PA20 periph A with pullup */ | ||
236 | }; | ||
237 | |||
238 | pinctrl_mmc0_slot0_dat4_7: mmc0_slot0_dat4_7-0 { | ||
239 | atmel,pins = | ||
240 | <0 11 0x2 0x1 /* PA11 periph B with pullup */ | ||
241 | 0 12 0x2 0x1 /* PA12 periph B with pullup */ | ||
242 | 0 13 0x2 0x1 /* PA13 periph B with pullup */ | ||
243 | 0 14 0x2 0x1>; /* PA14 periph B with pullup */ | ||
244 | }; | ||
245 | }; | ||
246 | |||
247 | pioA: gpio@fffff400 { | ||
248 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; | ||
249 | reg = <0xfffff400 0x200>; | ||
250 | interrupts = <2 4 1>; | ||
251 | #gpio-cells = <2>; | ||
252 | gpio-controller; | ||
253 | interrupt-controller; | ||
254 | #interrupt-cells = <2>; | ||
255 | }; | ||
256 | |||
257 | pioB: gpio@fffff600 { | ||
258 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; | ||
259 | reg = <0xfffff600 0x200>; | ||
260 | interrupts = <2 4 1>; | ||
261 | #gpio-cells = <2>; | ||
262 | gpio-controller; | ||
263 | interrupt-controller; | ||
264 | #interrupt-cells = <2>; | ||
265 | }; | ||
266 | |||
267 | pioC: gpio@fffff800 { | ||
268 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; | ||
269 | reg = <0xfffff800 0x200>; | ||
270 | interrupts = <3 4 1>; | ||
271 | #gpio-cells = <2>; | ||
272 | gpio-controller; | ||
273 | interrupt-controller; | ||
274 | #interrupt-cells = <2>; | ||
275 | }; | ||
276 | |||
277 | pioD: gpio@fffffa00 { | ||
278 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; | ||
279 | reg = <0xfffffa00 0x200>; | ||
280 | interrupts = <3 4 1>; | ||
281 | #gpio-cells = <2>; | ||
282 | gpio-controller; | ||
283 | interrupt-controller; | ||
284 | #interrupt-cells = <2>; | ||
285 | }; | ||
143 | }; | 286 | }; |
144 | 287 | ||
145 | dbgu: serial@fffff200 { | 288 | dbgu: serial@fffff200 { |
146 | compatible = "atmel,at91sam9260-usart"; | 289 | compatible = "atmel,at91sam9260-usart"; |
147 | reg = <0xfffff200 0x200>; | 290 | reg = <0xfffff200 0x200>; |
148 | interrupts = <1 4 7>; | 291 | interrupts = <1 4 7>; |
292 | pinctrl-names = "default"; | ||
293 | pinctrl-0 = <&pinctrl_dbgu>; | ||
149 | status = "disabled"; | 294 | status = "disabled"; |
150 | }; | 295 | }; |
151 | 296 | ||
@@ -155,6 +300,8 @@ | |||
155 | interrupts = <5 4 5>; | 300 | interrupts = <5 4 5>; |
156 | atmel,use-dma-rx; | 301 | atmel,use-dma-rx; |
157 | atmel,use-dma-tx; | 302 | atmel,use-dma-tx; |
303 | pinctrl-names = "default"; | ||
304 | pinctrl-0 = <&pinctrl_usart0>; | ||
158 | status = "disabled"; | 305 | status = "disabled"; |
159 | }; | 306 | }; |
160 | 307 | ||
@@ -164,6 +311,8 @@ | |||
164 | interrupts = <6 4 5>; | 311 | interrupts = <6 4 5>; |
165 | atmel,use-dma-rx; | 312 | atmel,use-dma-rx; |
166 | atmel,use-dma-tx; | 313 | atmel,use-dma-tx; |
314 | pinctrl-names = "default"; | ||
315 | pinctrl-0 = <&pinctrl_usart1>; | ||
167 | status = "disabled"; | 316 | status = "disabled"; |
168 | }; | 317 | }; |
169 | 318 | ||
@@ -173,6 +322,8 @@ | |||
173 | interrupts = <7 4 5>; | 322 | interrupts = <7 4 5>; |
174 | atmel,use-dma-rx; | 323 | atmel,use-dma-rx; |
175 | atmel,use-dma-tx; | 324 | atmel,use-dma-tx; |
325 | pinctrl-names = "default"; | ||
326 | pinctrl-0 = <&pinctrl_usart2>; | ||
176 | status = "disabled"; | 327 | status = "disabled"; |
177 | }; | 328 | }; |
178 | 329 | ||
@@ -182,6 +333,8 @@ | |||
182 | interrupts = <8 4 5>; | 333 | interrupts = <8 4 5>; |
183 | atmel,use-dma-rx; | 334 | atmel,use-dma-rx; |
184 | atmel,use-dma-tx; | 335 | atmel,use-dma-tx; |
336 | pinctrl-names = "default"; | ||
337 | pinctrl-0 = <&pinctrl_usart3>; | ||
185 | status = "disabled"; | 338 | status = "disabled"; |
186 | }; | 339 | }; |
187 | 340 | ||
@@ -215,6 +368,8 @@ | |||
215 | >; | 368 | >; |
216 | atmel,nand-addr-offset = <21>; | 369 | atmel,nand-addr-offset = <21>; |
217 | atmel,nand-cmd-offset = <22>; | 370 | atmel,nand-cmd-offset = <22>; |
371 | pinctrl-names = "default"; | ||
372 | pinctrl-0 = <&pinctrl_nand>; | ||
218 | gpios = <&pioD 5 0 | 373 | gpios = <&pioD 5 0 |
219 | &pioD 4 0 | 374 | &pioD 4 0 |
220 | 0 | 375 | 0 |
diff --git a/arch/arm/boot/dts/at91sam9n12ek.dts b/arch/arm/boot/dts/at91sam9n12ek.dts index 912b2c283d6f..0376bf4fd66b 100644 --- a/arch/arm/boot/dts/at91sam9n12ek.dts +++ b/arch/arm/boot/dts/at91sam9n12ek.dts | |||
@@ -45,6 +45,28 @@ | |||
45 | i2c1: i2c@f8014000 { | 45 | i2c1: i2c@f8014000 { |
46 | status = "okay"; | 46 | status = "okay"; |
47 | }; | 47 | }; |
48 | |||
49 | mmc0: mmc@f0008000 { | ||
50 | pinctrl-0 = < | ||
51 | &pinctrl_board_mmc0 | ||
52 | &pinctrl_mmc0_slot0_clk_cmd_dat0 | ||
53 | &pinctrl_mmc0_slot0_dat1_3>; | ||
54 | status = "okay"; | ||
55 | slot@0 { | ||
56 | reg = <0>; | ||
57 | bus-width = <4>; | ||
58 | cd-gpios = <&pioA 7 0>; | ||
59 | }; | ||
60 | }; | ||
61 | |||
62 | pinctrl@fffff400 { | ||
63 | mmc0 { | ||
64 | pinctrl_board_mmc0: mmc0-board { | ||
65 | atmel,pins = | ||
66 | <0 7 0x0 0x5>; /* PA7 gpio CD pin pull up and deglitch */ | ||
67 | }; | ||
68 | }; | ||
69 | }; | ||
48 | }; | 70 | }; |
49 | 71 | ||
50 | nand0: nand@40000000 { | 72 | nand0: nand@40000000 { |
diff --git a/arch/arm/boot/dts/at91sam9x25.dtsi b/arch/arm/boot/dts/at91sam9x25.dtsi new file mode 100644 index 000000000000..54eb33ba6d22 --- /dev/null +++ b/arch/arm/boot/dts/at91sam9x25.dtsi | |||
@@ -0,0 +1,49 @@ | |||
1 | /* | ||
2 | * at91sam9x25.dtsi - Device Tree Include file for AT91SAM9X25 SoC | ||
3 | * | ||
4 | * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | ||
5 | * | ||
6 | * Licensed under GPLv2. | ||
7 | */ | ||
8 | |||
9 | /include/ "at91sam9x5.dtsi" | ||
10 | |||
11 | / { | ||
12 | model = "Atmel AT91SAM9X25 SoC"; | ||
13 | compatible = "atmel, at91sam9x25, atmel,at91sam9x5"; | ||
14 | |||
15 | ahb { | ||
16 | apb { | ||
17 | pinctrl@fffff400 { | ||
18 | atmel,mux-mask = < | ||
19 | /* A B C */ | ||
20 | 0xffffffff 0xffe03fff 0xc000001c /* pioA */ | ||
21 | 0x0007ffff 0x00047e3f 0x00000000 /* pioB */ | ||
22 | 0x80000000 0xfffd0000 0xb83fffff /* pioC */ | ||
23 | 0x003fffff 0x003f8000 0x00000000 /* pioD */ | ||
24 | >; | ||
25 | |||
26 | macb1 { | ||
27 | pinctrl_macb1_rmii: macb1_rmii-0 { | ||
28 | atmel,pins = | ||
29 | <2 16 0x2 0x0 /* PC16 periph B */ | ||
30 | 2 18 0x2 0x0 /* PC18 periph B */ | ||
31 | 2 19 0x2 0x0 /* PC19 periph B */ | ||
32 | 2 20 0x2 0x0 /* PC20 periph B */ | ||
33 | 2 21 0x2 0x0 /* PC21 periph B */ | ||
34 | 2 27 0x2 0x0 /* PC27 periph B */ | ||
35 | 2 28 0x2 0x0 /* PC28 periph B */ | ||
36 | 2 29 0x2 0x0 /* PC29 periph B */ | ||
37 | 2 30 0x2 0x0 /* PC30 periph B */ | ||
38 | 2 31 0x2 0x0>; /* PC31 periph B */ | ||
39 | }; | ||
40 | }; | ||
41 | }; | ||
42 | |||
43 | macb1: ethernet@f8030000 { | ||
44 | pinctrl-names = "default"; | ||
45 | pinctrl-0 = <&pinctrl_macb1_rmii>; | ||
46 | }; | ||
47 | }; | ||
48 | }; | ||
49 | }; | ||
diff --git a/arch/arm/boot/dts/at91sam9x25ek.dts b/arch/arm/boot/dts/at91sam9x25ek.dts new file mode 100644 index 000000000000..af907eaa1f25 --- /dev/null +++ b/arch/arm/boot/dts/at91sam9x25ek.dts | |||
@@ -0,0 +1,16 @@ | |||
1 | /* | ||
2 | * at91sam9x25ek.dts - Device Tree file for AT91SAM9X25-EK board | ||
3 | * | ||
4 | * Copyright (C) 2012 Atmel, | ||
5 | * 2012 Nicolas Ferre <nicolas.ferre@atmel.com> | ||
6 | * | ||
7 | * Licensed under GPLv2 or later. | ||
8 | */ | ||
9 | /dts-v1/; | ||
10 | /include/ "at91sam9x25.dtsi" | ||
11 | /include/ "at91sam9x5ek.dtsi" | ||
12 | |||
13 | / { | ||
14 | model = "Atmel AT91SAM9G25-EK"; | ||
15 | compatible = "atmel,at91sam9x25ek", "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9"; | ||
16 | }; | ||
diff --git a/arch/arm/boot/dts/at91sam9x35.dtsi b/arch/arm/boot/dts/at91sam9x35.dtsi new file mode 100644 index 000000000000..fb102d6126ce --- /dev/null +++ b/arch/arm/boot/dts/at91sam9x35.dtsi | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * at91sam9x35.dtsi - Device Tree Include file for AT91SAM9X35 SoC | ||
3 | * | ||
4 | * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | ||
5 | * | ||
6 | * Licensed under GPLv2. | ||
7 | */ | ||
8 | |||
9 | /include/ "at91sam9x5.dtsi" | ||
10 | |||
11 | / { | ||
12 | model = "Atmel AT91SAM9X35 SoC"; | ||
13 | compatible = "atmel, at91sam9x35, atmel,at91sam9x5"; | ||
14 | |||
15 | ahb { | ||
16 | apb { | ||
17 | pinctrl@fffff400 { | ||
18 | atmel,mux-mask = < | ||
19 | /* A B C */ | ||
20 | 0xffffffff 0xffe03fff 0xc000000c /* pioA */ | ||
21 | 0x000406ff 0x00047e3f 0x00000000 /* pioB */ | ||
22 | 0xfdffffff 0x00000000 0xb83fffff /* pioC */ | ||
23 | 0x003fffff 0x003f8000 0x00000000 /* pioD */ | ||
24 | >; | ||
25 | }; | ||
26 | }; | ||
27 | }; | ||
28 | }; | ||
diff --git a/arch/arm/boot/dts/at91sam9x35ek.dts b/arch/arm/boot/dts/at91sam9x35ek.dts new file mode 100644 index 000000000000..5ccb607b5414 --- /dev/null +++ b/arch/arm/boot/dts/at91sam9x35ek.dts | |||
@@ -0,0 +1,16 @@ | |||
1 | /* | ||
2 | * at91sam9x35ek.dts - Device Tree file for AT91SAM9X35-EK board | ||
3 | * | ||
4 | * Copyright (C) 2012 Atmel, | ||
5 | * 2012 Nicolas Ferre <nicolas.ferre@atmel.com> | ||
6 | * | ||
7 | * Licensed under GPLv2 or later. | ||
8 | */ | ||
9 | /dts-v1/; | ||
10 | /include/ "at91sam9x35.dtsi" | ||
11 | /include/ "at91sam9x5ek.dtsi" | ||
12 | |||
13 | / { | ||
14 | model = "Atmel AT91SAM9X35-EK"; | ||
15 | compatible = "atmel,at91sam9x35ek", "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9"; | ||
16 | }; | ||
diff --git a/arch/arm/boot/dts/at91sam9x5.dtsi b/arch/arm/boot/dts/at91sam9x5.dtsi index 03fc136421c5..7ee49e8daf98 100644 --- a/arch/arm/boot/dts/at91sam9x5.dtsi +++ b/arch/arm/boot/dts/at91sam9x5.dtsi | |||
@@ -111,50 +111,244 @@ | |||
111 | interrupts = <21 4 0>; | 111 | interrupts = <21 4 0>; |
112 | }; | 112 | }; |
113 | 113 | ||
114 | pioA: gpio@fffff400 { | 114 | pinctrl@fffff400 { |
115 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; | 115 | #address-cells = <1>; |
116 | reg = <0xfffff400 0x100>; | 116 | #size-cells = <1>; |
117 | interrupts = <2 4 1>; | 117 | compatible = "atmel,at91sam9x5-pinctrl", "atmel,at91rm9200-pinctrl", "simple-bus"; |
118 | #gpio-cells = <2>; | 118 | ranges = <0xfffff400 0xfffff400 0x800>; |
119 | gpio-controller; | 119 | |
120 | interrupt-controller; | 120 | /* shared pinctrl settings */ |
121 | #interrupt-cells = <2>; | 121 | dbgu { |
122 | }; | 122 | pinctrl_dbgu: dbgu-0 { |
123 | atmel,pins = | ||
124 | <0 9 0x1 0x0 /* PA9 periph A */ | ||
125 | 0 10 0x1 0x1>; /* PA10 periph A with pullup */ | ||
126 | }; | ||
127 | }; | ||
123 | 128 | ||
124 | pioB: gpio@fffff600 { | 129 | usart0 { |
125 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; | 130 | pinctrl_usart0: usart0-0 { |
126 | reg = <0xfffff600 0x100>; | 131 | atmel,pins = |
127 | interrupts = <2 4 1>; | 132 | <0 0 0x1 0x1 /* PA0 periph A with pullup */ |
128 | #gpio-cells = <2>; | 133 | 0 1 0x1 0x0>; /* PA1 periph A */ |
129 | gpio-controller; | 134 | }; |
130 | interrupt-controller; | 135 | |
131 | #interrupt-cells = <2>; | 136 | pinctrl_usart0_rts: usart0_rts-0 { |
137 | atmel,pins = | ||
138 | <0 2 0x1 0x0>; /* PA2 periph A */ | ||
139 | }; | ||
140 | |||
141 | pinctrl_usart0_cts: usart0_cts-0 { | ||
142 | atmel,pins = | ||
143 | <0 3 0x1 0x0>; /* PA3 periph A */ | ||
144 | }; | ||
145 | }; | ||
146 | |||
147 | usart1 { | ||
148 | pinctrl_usart1: usart1-0 { | ||
149 | atmel,pins = | ||
150 | <0 5 0x1 0x1 /* PA5 periph A with pullup */ | ||
151 | 0 6 0x1 0x0>; /* PA6 periph A */ | ||
152 | }; | ||
153 | |||
154 | pinctrl_usart1_rts: usart1_rts-0 { | ||
155 | atmel,pins = | ||
156 | <3 27 0x3 0x0>; /* PC27 periph C */ | ||
157 | }; | ||
158 | |||
159 | pinctrl_usart1_cts: usart1_cts-0 { | ||
160 | atmel,pins = | ||
161 | <3 28 0x3 0x0>; /* PC28 periph C */ | ||
162 | }; | ||
163 | }; | ||
164 | |||
165 | usart2 { | ||
166 | pinctrl_usart2: usart2-0 { | ||
167 | atmel,pins = | ||
168 | <0 7 0x1 0x1 /* PA7 periph A with pullup */ | ||
169 | 0 8 0x1 0x0>; /* PA8 periph A */ | ||
170 | }; | ||
171 | |||
172 | pinctrl_uart2_rts: uart2_rts-0 { | ||
173 | atmel,pins = | ||
174 | <0 0 0x2 0x0>; /* PB0 periph B */ | ||
175 | }; | ||
176 | |||
177 | pinctrl_uart2_cts: uart2_cts-0 { | ||
178 | atmel,pins = | ||
179 | <0 1 0x2 0x0>; /* PB1 periph B */ | ||
180 | }; | ||
181 | }; | ||
182 | |||
183 | usart3 { | ||
184 | pinctrl_uart3: usart3-0 { | ||
185 | atmel,pins = | ||
186 | <3 23 0x2 0x1 /* PC22 periph B with pullup */ | ||
187 | 3 23 0x2 0x0>; /* PC23 periph B */ | ||
188 | }; | ||
189 | |||
190 | pinctrl_usart3_rts: usart3_rts-0 { | ||
191 | atmel,pins = | ||
192 | <3 24 0x2 0x0>; /* PC24 periph B */ | ||
193 | }; | ||
194 | |||
195 | pinctrl_usart3_cts: usart3_cts-0 { | ||
196 | atmel,pins = | ||
197 | <3 25 0x2 0x0>; /* PC25 periph B */ | ||
198 | }; | ||
199 | }; | ||
200 | |||
201 | uart0 { | ||
202 | pinctrl_uart0: uart0-0 { | ||
203 | atmel,pins = | ||
204 | <3 8 0x3 0x0 /* PC8 periph C */ | ||
205 | 3 9 0x3 0x1>; /* PC9 periph C with pullup */ | ||
206 | }; | ||
207 | }; | ||
208 | |||
209 | uart1 { | ||
210 | pinctrl_uart1: uart1-0 { | ||
211 | atmel,pins = | ||
212 | <3 16 0x3 0x0 /* PC16 periph C */ | ||
213 | 3 17 0x3 0x1>; /* PC17 periph C with pullup */ | ||
214 | }; | ||
215 | }; | ||
216 | |||
217 | nand { | ||
218 | pinctrl_nand: nand-0 { | ||
219 | atmel,pins = | ||
220 | <3 4 0x0 0x1 /* PD5 gpio RDY pin pull_up */ | ||
221 | 3 5 0x0 0x1>; /* PD4 gpio enable pin pull_up */ | ||
222 | }; | ||
223 | }; | ||
224 | |||
225 | macb0 { | ||
226 | pinctrl_macb0_rmii: macb0_rmii-0 { | ||
227 | atmel,pins = | ||
228 | <1 0 0x1 0x0 /* PB0 periph A */ | ||
229 | 1 1 0x1 0x0 /* PB1 periph A */ | ||
230 | 1 2 0x1 0x0 /* PB2 periph A */ | ||
231 | 1 3 0x1 0x0 /* PB3 periph A */ | ||
232 | 1 4 0x1 0x0 /* PB4 periph A */ | ||
233 | 1 5 0x1 0x0 /* PB5 periph A */ | ||
234 | 1 6 0x1 0x0 /* PB6 periph A */ | ||
235 | 1 7 0x1 0x0 /* PB7 periph A */ | ||
236 | 1 9 0x1 0x0 /* PB9 periph A */ | ||
237 | 1 10 0x1 0x0>; /* PB10 periph A */ | ||
238 | }; | ||
239 | |||
240 | pinctrl_macb0_rmii_mii: macb0_rmii_mii-0 { | ||
241 | atmel,pins = | ||
242 | <1 8 0x1 0x0 /* PA8 periph A */ | ||
243 | 1 11 0x1 0x0 /* PA11 periph A */ | ||
244 | 1 12 0x1 0x0 /* PA12 periph A */ | ||
245 | 1 13 0x1 0x0 /* PA13 periph A */ | ||
246 | 1 14 0x1 0x0 /* PA14 periph A */ | ||
247 | 1 15 0x1 0x0 /* PA15 periph A */ | ||
248 | 1 16 0x1 0x0 /* PA16 periph A */ | ||
249 | 1 17 0x1 0x0>; /* PA17 periph A */ | ||
250 | }; | ||
251 | }; | ||
252 | |||
253 | mmc0 { | ||
254 | pinctrl_mmc0_slot0_clk_cmd_dat0: mmc0_slot0_clk_cmd_dat0-0 { | ||
255 | atmel,pins = | ||
256 | <0 17 0x1 0x0 /* PA17 periph A */ | ||
257 | 0 16 0x1 0x1 /* PA16 periph A with pullup */ | ||
258 | 0 15 0x1 0x1>; /* PA15 periph A with pullup */ | ||
259 | }; | ||
260 | |||
261 | pinctrl_mmc0_slot0_dat1_3: mmc0_slot0_dat1_3-0 { | ||
262 | atmel,pins = | ||
263 | <0 18 0x1 0x1 /* PA18 periph A with pullup */ | ||
264 | 0 19 0x1 0x1 /* PA19 periph A with pullup */ | ||
265 | 0 20 0x1 0x1>; /* PA20 periph A with pullup */ | ||
266 | }; | ||
267 | }; | ||
268 | |||
269 | mmc1 { | ||
270 | pinctrl_mmc1_slot0_clk_cmd_dat0: mmc1_slot0_clk_cmd_dat0-0 { | ||
271 | atmel,pins = | ||
272 | <0 13 0x2 0x0 /* PA13 periph B */ | ||
273 | 0 12 0x2 0x1 /* PA12 periph B with pullup */ | ||
274 | 0 11 0x2 0x1>; /* PA11 periph B with pullup */ | ||
275 | }; | ||
276 | |||
277 | pinctrl_mmc1_slot0_dat1_3: mmc1_slot0_dat1_3-0 { | ||
278 | atmel,pins = | ||
279 | <0 2 0x2 0x1 /* PA2 periph B with pullup */ | ||
280 | 0 3 0x2 0x1 /* PA3 periph B with pullup */ | ||
281 | 0 4 0x2 0x1>; /* PA4 periph B with pullup */ | ||
282 | }; | ||
283 | }; | ||
284 | |||
285 | pioA: gpio@fffff400 { | ||
286 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; | ||
287 | reg = <0xfffff400 0x200>; | ||
288 | interrupts = <2 4 1>; | ||
289 | #gpio-cells = <2>; | ||
290 | gpio-controller; | ||
291 | interrupt-controller; | ||
292 | #interrupt-cells = <2>; | ||
293 | }; | ||
294 | |||
295 | pioB: gpio@fffff600 { | ||
296 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; | ||
297 | reg = <0xfffff600 0x200>; | ||
298 | interrupts = <2 4 1>; | ||
299 | #gpio-cells = <2>; | ||
300 | gpio-controller; | ||
301 | #gpio-lines = <19>; | ||
302 | interrupt-controller; | ||
303 | #interrupt-cells = <2>; | ||
304 | }; | ||
305 | |||
306 | pioC: gpio@fffff800 { | ||
307 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; | ||
308 | reg = <0xfffff800 0x200>; | ||
309 | interrupts = <3 4 1>; | ||
310 | #gpio-cells = <2>; | ||
311 | gpio-controller; | ||
312 | interrupt-controller; | ||
313 | #interrupt-cells = <2>; | ||
314 | }; | ||
315 | |||
316 | pioD: gpio@fffffa00 { | ||
317 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; | ||
318 | reg = <0xfffffa00 0x200>; | ||
319 | interrupts = <3 4 1>; | ||
320 | #gpio-cells = <2>; | ||
321 | gpio-controller; | ||
322 | #gpio-lines = <22>; | ||
323 | interrupt-controller; | ||
324 | #interrupt-cells = <2>; | ||
325 | }; | ||
132 | }; | 326 | }; |
133 | 327 | ||
134 | pioC: gpio@fffff800 { | 328 | mmc0: mmc@f0008000 { |
135 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; | 329 | compatible = "atmel,hsmci"; |
136 | reg = <0xfffff800 0x100>; | 330 | reg = <0xf0008000 0x600>; |
137 | interrupts = <3 4 1>; | 331 | interrupts = <12 4 0>; |
138 | #gpio-cells = <2>; | 332 | #address-cells = <1>; |
139 | gpio-controller; | 333 | #size-cells = <0>; |
140 | interrupt-controller; | 334 | status = "disabled"; |
141 | #interrupt-cells = <2>; | ||
142 | }; | 335 | }; |
143 | 336 | ||
144 | pioD: gpio@fffffa00 { | 337 | mmc1: mmc@f000c000 { |
145 | compatible = "atmel,at91sam9x5-gpio", "atmel,at91rm9200-gpio"; | 338 | compatible = "atmel,hsmci"; |
146 | reg = <0xfffffa00 0x100>; | 339 | reg = <0xf000c000 0x600>; |
147 | interrupts = <3 4 1>; | 340 | interrupts = <26 4 0>; |
148 | #gpio-cells = <2>; | 341 | #address-cells = <1>; |
149 | gpio-controller; | 342 | #size-cells = <0>; |
150 | interrupt-controller; | 343 | status = "disabled"; |
151 | #interrupt-cells = <2>; | ||
152 | }; | 344 | }; |
153 | 345 | ||
154 | dbgu: serial@fffff200 { | 346 | dbgu: serial@fffff200 { |
155 | compatible = "atmel,at91sam9260-usart"; | 347 | compatible = "atmel,at91sam9260-usart"; |
156 | reg = <0xfffff200 0x200>; | 348 | reg = <0xfffff200 0x200>; |
157 | interrupts = <1 4 7>; | 349 | interrupts = <1 4 7>; |
350 | pinctrl-names = "default"; | ||
351 | pinctrl-0 = <&pinctrl_dbgu>; | ||
158 | status = "disabled"; | 352 | status = "disabled"; |
159 | }; | 353 | }; |
160 | 354 | ||
@@ -164,6 +358,8 @@ | |||
164 | interrupts = <5 4 5>; | 358 | interrupts = <5 4 5>; |
165 | atmel,use-dma-rx; | 359 | atmel,use-dma-rx; |
166 | atmel,use-dma-tx; | 360 | atmel,use-dma-tx; |
361 | pinctrl-names = "default"; | ||
362 | pinctrl-0 = <&pinctrl_usart0>; | ||
167 | status = "disabled"; | 363 | status = "disabled"; |
168 | }; | 364 | }; |
169 | 365 | ||
@@ -173,6 +369,8 @@ | |||
173 | interrupts = <6 4 5>; | 369 | interrupts = <6 4 5>; |
174 | atmel,use-dma-rx; | 370 | atmel,use-dma-rx; |
175 | atmel,use-dma-tx; | 371 | atmel,use-dma-tx; |
372 | pinctrl-names = "default"; | ||
373 | pinctrl-0 = <&pinctrl_usart1>; | ||
176 | status = "disabled"; | 374 | status = "disabled"; |
177 | }; | 375 | }; |
178 | 376 | ||
@@ -182,6 +380,8 @@ | |||
182 | interrupts = <7 4 5>; | 380 | interrupts = <7 4 5>; |
183 | atmel,use-dma-rx; | 381 | atmel,use-dma-rx; |
184 | atmel,use-dma-tx; | 382 | atmel,use-dma-tx; |
383 | pinctrl-names = "default"; | ||
384 | pinctrl-0 = <&pinctrl_usart2>; | ||
185 | status = "disabled"; | 385 | status = "disabled"; |
186 | }; | 386 | }; |
187 | 387 | ||
@@ -189,6 +389,8 @@ | |||
189 | compatible = "cdns,at32ap7000-macb", "cdns,macb"; | 389 | compatible = "cdns,at32ap7000-macb", "cdns,macb"; |
190 | reg = <0xf802c000 0x100>; | 390 | reg = <0xf802c000 0x100>; |
191 | interrupts = <24 4 3>; | 391 | interrupts = <24 4 3>; |
392 | pinctrl-names = "default"; | ||
393 | pinctrl-0 = <&pinctrl_macb0_rmii>; | ||
192 | status = "disabled"; | 394 | status = "disabled"; |
193 | }; | 395 | }; |
194 | 396 | ||
@@ -273,6 +475,8 @@ | |||
273 | >; | 475 | >; |
274 | atmel,nand-addr-offset = <21>; | 476 | atmel,nand-addr-offset = <21>; |
275 | atmel,nand-cmd-offset = <22>; | 477 | atmel,nand-cmd-offset = <22>; |
478 | pinctrl-names = "default"; | ||
479 | pinctrl-0 = <&pinctrl_nand>; | ||
276 | gpios = <&pioD 5 0 | 480 | gpios = <&pioD 5 0 |
277 | &pioD 4 0 | 481 | &pioD 4 0 |
278 | 0 | 482 | 0 |
diff --git a/arch/arm/boot/dts/at91sam9x5ek.dtsi b/arch/arm/boot/dts/at91sam9x5ek.dtsi new file mode 100644 index 000000000000..8a7cf1d9cf5d --- /dev/null +++ b/arch/arm/boot/dts/at91sam9x5ek.dtsi | |||
@@ -0,0 +1,101 @@ | |||
1 | /* | ||
2 | * at91sam9x5ek.dtsi - Device Tree file for AT91SAM9x5CM Base board | ||
3 | * | ||
4 | * Copyright (C) 2012 Atmel, | ||
5 | * 2012 Nicolas Ferre <nicolas.ferre@atmel.com> | ||
6 | * | ||
7 | * Licensed under GPLv2 or later. | ||
8 | */ | ||
9 | /include/ "at91sam9x5cm.dtsi" | ||
10 | |||
11 | / { | ||
12 | model = "Atmel AT91SAM9X5-EK"; | ||
13 | compatible = "atmel,at91sam9x5ek", "atmel,at91sam9x5", "atmel,at91sam9"; | ||
14 | |||
15 | chosen { | ||
16 | bootargs = "128M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=ubifs ubi.mtd=1 root=ubi0:rootfs"; | ||
17 | }; | ||
18 | |||
19 | ahb { | ||
20 | apb { | ||
21 | mmc0: mmc@f0008000 { | ||
22 | pinctrl-0 = < | ||
23 | &pinctrl_board_mmc0 | ||
24 | &pinctrl_mmc0_slot0_clk_cmd_dat0 | ||
25 | &pinctrl_mmc0_slot0_dat1_3>; | ||
26 | status = "okay"; | ||
27 | slot@0 { | ||
28 | reg = <0>; | ||
29 | bus-width = <4>; | ||
30 | cd-gpios = <&pioD 15 0>; | ||
31 | }; | ||
32 | }; | ||
33 | |||
34 | mmc1: mmc@f000c000 { | ||
35 | pinctrl-0 = < | ||
36 | &pinctrl_board_mmc1 | ||
37 | &pinctrl_mmc1_slot0_clk_cmd_dat0 | ||
38 | &pinctrl_mmc1_slot0_dat1_3>; | ||
39 | status = "okay"; | ||
40 | slot@0 { | ||
41 | reg = <0>; | ||
42 | bus-width = <4>; | ||
43 | cd-gpios = <&pioD 14 0>; | ||
44 | }; | ||
45 | }; | ||
46 | |||
47 | dbgu: serial@fffff200 { | ||
48 | status = "okay"; | ||
49 | }; | ||
50 | |||
51 | usart0: serial@f801c000 { | ||
52 | status = "okay"; | ||
53 | }; | ||
54 | |||
55 | macb0: ethernet@f802c000 { | ||
56 | phy-mode = "rmii"; | ||
57 | status = "okay"; | ||
58 | }; | ||
59 | |||
60 | i2c0: i2c@f8010000 { | ||
61 | status = "okay"; | ||
62 | }; | ||
63 | |||
64 | i2c1: i2c@f8014000 { | ||
65 | status = "okay"; | ||
66 | }; | ||
67 | |||
68 | i2c2: i2c@f8018000 { | ||
69 | status = "okay"; | ||
70 | }; | ||
71 | |||
72 | pinctrl@fffff400 { | ||
73 | mmc0 { | ||
74 | pinctrl_board_mmc0: mmc0-board { | ||
75 | atmel,pins = | ||
76 | <3 15 0x0 0x5>; /* PD15 gpio CD pin pull up and deglitch */ | ||
77 | }; | ||
78 | }; | ||
79 | |||
80 | mmc1 { | ||
81 | pinctrl_board_mmc1: mmc1-board { | ||
82 | atmel,pins = | ||
83 | <3 14 0x0 0x5>; /* PD14 gpio CD pin pull up and deglitch */ | ||
84 | }; | ||
85 | }; | ||
86 | }; | ||
87 | }; | ||
88 | |||
89 | usb0: ohci@00600000 { | ||
90 | status = "okay"; | ||
91 | num-ports = <2>; | ||
92 | atmel,vbus-gpio = <&pioD 19 1 | ||
93 | &pioD 20 1 | ||
94 | >; | ||
95 | }; | ||
96 | |||
97 | usb1: ehci@00700000 { | ||
98 | status = "okay"; | ||
99 | }; | ||
100 | }; | ||
101 | }; | ||
diff --git a/arch/arm/boot/dts/imx28.dtsi b/arch/arm/boot/dts/imx28.dtsi index 55c57ea6169e..b4587b27ae42 100644 --- a/arch/arm/boot/dts/imx28.dtsi +++ b/arch/arm/boot/dts/imx28.dtsi | |||
@@ -799,6 +799,7 @@ | |||
799 | compatible = "fsl,imx28-auart", "fsl,imx23-auart"; | 799 | compatible = "fsl,imx28-auart", "fsl,imx23-auart"; |
800 | reg = <0x8006a000 0x2000>; | 800 | reg = <0x8006a000 0x2000>; |
801 | interrupts = <112 70 71>; | 801 | interrupts = <112 70 71>; |
802 | fsl,auart-dma-channel = <8 9>; | ||
802 | clocks = <&clks 45>; | 803 | clocks = <&clks 45>; |
803 | status = "disabled"; | 804 | status = "disabled"; |
804 | }; | 805 | }; |
diff --git a/arch/arm/boot/dts/pm9g45.dts b/arch/arm/boot/dts/pm9g45.dts new file mode 100644 index 000000000000..387fedb58988 --- /dev/null +++ b/arch/arm/boot/dts/pm9g45.dts | |||
@@ -0,0 +1,165 @@ | |||
1 | /* | ||
2 | * pm9g45.dts - Device Tree file for Ronetix pm9g45 board | ||
3 | * | ||
4 | * Copyright (C) 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | ||
5 | * | ||
6 | * Licensed under GPLv2. | ||
7 | */ | ||
8 | /dts-v1/; | ||
9 | /include/ "at91sam9g45.dtsi" | ||
10 | |||
11 | / { | ||
12 | model = "Ronetix pm9g45"; | ||
13 | compatible = "ronetix,pm9g45", "atmel,at91sam9g45", "atmel,at91sam9"; | ||
14 | |||
15 | chosen { | ||
16 | bootargs = "console=ttyS0,115200"; | ||
17 | }; | ||
18 | |||
19 | memory { | ||
20 | reg = <0x70000000 0x8000000>; | ||
21 | }; | ||
22 | |||
23 | clocks { | ||
24 | #address-cells = <1>; | ||
25 | #size-cells = <1>; | ||
26 | ranges; | ||
27 | |||
28 | main_clock: clock@0 { | ||
29 | compatible = "atmel,osc", "fixed-clock"; | ||
30 | clock-frequency = <12000000>; | ||
31 | }; | ||
32 | }; | ||
33 | |||
34 | ahb { | ||
35 | apb { | ||
36 | dbgu: serial@ffffee00 { | ||
37 | status = "okay"; | ||
38 | }; | ||
39 | |||
40 | pinctrl@fffff200 { | ||
41 | |||
42 | board { | ||
43 | pinctrl_board_nand: nand0-board { | ||
44 | atmel,pins = | ||
45 | <3 3 0x0 0x1 /* PD3 gpio RDY pin pull_up*/ | ||
46 | 2 14 0x0 0x1>; /* PC14 gpio enable pin pull_up */ | ||
47 | }; | ||
48 | }; | ||
49 | |||
50 | mmc { | ||
51 | pinctrl_board_mmc: mmc0-board { | ||
52 | atmel,pins = | ||
53 | <3 6 0x0 0x5>; /* PD6 gpio CD pin pull_up and deglitch */ | ||
54 | }; | ||
55 | }; | ||
56 | }; | ||
57 | |||
58 | mmc0: mmc@fff80000 { | ||
59 | pinctrl-0 = < | ||
60 | &pinctrl_board_mmc | ||
61 | &pinctrl_mmc0_slot0_clk_cmd_dat0 | ||
62 | &pinctrl_mmc0_slot0_dat1_3>; | ||
63 | status = "okay"; | ||
64 | slot@0 { | ||
65 | reg = <0>; | ||
66 | bus-width = <4>; | ||
67 | cd-gpios = <&pioD 6 0>; | ||
68 | }; | ||
69 | }; | ||
70 | |||
71 | macb0: ethernet@fffbc000 { | ||
72 | phy-mode = "rmii"; | ||
73 | status = "okay"; | ||
74 | }; | ||
75 | |||
76 | }; | ||
77 | |||
78 | nand0: nand@40000000 { | ||
79 | nand-bus-width = <8>; | ||
80 | nand-ecc-mode = "soft"; | ||
81 | nand-on-flash-bbt; | ||
82 | pinctrl-0 = <&pinctrl_board_nand>; | ||
83 | |||
84 | gpios = <&pioD 3 0 | ||
85 | &pioC 14 0 | ||
86 | 0 | ||
87 | >; | ||
88 | |||
89 | status = "okay"; | ||
90 | |||
91 | at91bootstrap@0 { | ||
92 | label = "at91bootstrap"; | ||
93 | reg = <0x0 0x20000>; | ||
94 | }; | ||
95 | |||
96 | barebox@20000 { | ||
97 | label = "barebox"; | ||
98 | reg = <0x20000 0x40000>; | ||
99 | }; | ||
100 | |||
101 | bareboxenv@60000 { | ||
102 | label = "bareboxenv"; | ||
103 | reg = <0x60000 0x1A0000>; | ||
104 | }; | ||
105 | |||
106 | kernel@200000 { | ||
107 | label = "bareboxenv2"; | ||
108 | reg = <0x200000 0x300000>; | ||
109 | }; | ||
110 | |||
111 | kernel@500000 { | ||
112 | label = "root"; | ||
113 | reg = <0x500000 0x400000>; | ||
114 | }; | ||
115 | |||
116 | data@900000 { | ||
117 | label = "data"; | ||
118 | reg = <0x900000 0x8340000>; | ||
119 | }; | ||
120 | }; | ||
121 | |||
122 | usb0: ohci@00700000 { | ||
123 | status = "okay"; | ||
124 | num-ports = <2>; | ||
125 | }; | ||
126 | |||
127 | usb1: ehci@00800000 { | ||
128 | status = "okay"; | ||
129 | }; | ||
130 | }; | ||
131 | |||
132 | leds { | ||
133 | compatible = "gpio-leds"; | ||
134 | |||
135 | led0 { | ||
136 | label = "led0"; | ||
137 | gpios = <&pioD 0 1>; | ||
138 | linux,default-trigger = "nand-disk"; | ||
139 | }; | ||
140 | |||
141 | led1 { | ||
142 | label = "led1"; | ||
143 | gpios = <&pioD 31 0>; | ||
144 | linux,default-trigger = "heartbeat"; | ||
145 | }; | ||
146 | }; | ||
147 | |||
148 | gpio_keys { | ||
149 | compatible = "gpio-keys"; | ||
150 | #address-cells = <1>; | ||
151 | #size-cells = <0>; | ||
152 | |||
153 | right { | ||
154 | label = "SW4"; | ||
155 | gpios = <&pioE 7 1>; | ||
156 | linux,code = <106>; | ||
157 | }; | ||
158 | |||
159 | up { | ||
160 | label = "SW3"; | ||
161 | gpios = <&pioE 8 1>; | ||
162 | linux,code = <103>; | ||
163 | }; | ||
164 | }; | ||
165 | }; | ||
diff --git a/arch/arm/boot/dts/spear1310-evb.dts b/arch/arm/boot/dts/spear1310-evb.dts index dd4358bc26e2..2e4c5727468e 100644 --- a/arch/arm/boot/dts/spear1310-evb.dts +++ b/arch/arm/boot/dts/spear1310-evb.dts | |||
@@ -181,6 +181,10 @@ | |||
181 | status = "okay"; | 181 | status = "okay"; |
182 | }; | 182 | }; |
183 | 183 | ||
184 | gpio@d8400000 { | ||
185 | status = "okay"; | ||
186 | }; | ||
187 | |||
184 | i2c0: i2c@e0280000 { | 188 | i2c0: i2c@e0280000 { |
185 | status = "okay"; | 189 | status = "okay"; |
186 | }; | 190 | }; |
diff --git a/arch/arm/boot/dts/spear1310.dtsi b/arch/arm/boot/dts/spear1310.dtsi index 419ea7413d23..7cd25eb4f8e0 100644 --- a/arch/arm/boot/dts/spear1310.dtsi +++ b/arch/arm/boot/dts/spear1310.dtsi | |||
@@ -70,6 +70,12 @@ | |||
70 | status = "disabled"; | 70 | status = "disabled"; |
71 | }; | 71 | }; |
72 | 72 | ||
73 | pinmux: pinmux@e0700000 { | ||
74 | compatible = "st,spear1310-pinmux"; | ||
75 | reg = <0xe0700000 0x1000>; | ||
76 | #gpio-range-cells = <2>; | ||
77 | }; | ||
78 | |||
73 | spi1: spi@5d400000 { | 79 | spi1: spi@5d400000 { |
74 | compatible = "arm,pl022", "arm,primecell"; | 80 | compatible = "arm,pl022", "arm,primecell"; |
75 | reg = <0x5d400000 0x1000>; | 81 | reg = <0x5d400000 0x1000>; |
@@ -179,6 +185,27 @@ | |||
179 | thermal@e07008c4 { | 185 | thermal@e07008c4 { |
180 | st,thermal-flags = <0x7000>; | 186 | st,thermal-flags = <0x7000>; |
181 | }; | 187 | }; |
188 | |||
189 | gpiopinctrl: gpio@d8400000 { | ||
190 | compatible = "st,spear-plgpio"; | ||
191 | reg = <0xd8400000 0x1000>; | ||
192 | interrupts = <0 100 0x4>; | ||
193 | #interrupt-cells = <1>; | ||
194 | interrupt-controller; | ||
195 | gpio-controller; | ||
196 | #gpio-cells = <2>; | ||
197 | gpio-ranges = <&pinmux 0 246>; | ||
198 | status = "disabled"; | ||
199 | |||
200 | st-plgpio,ngpio = <246>; | ||
201 | st-plgpio,enb-reg = <0xd0>; | ||
202 | st-plgpio,wdata-reg = <0x90>; | ||
203 | st-plgpio,dir-reg = <0xb0>; | ||
204 | st-plgpio,ie-reg = <0x30>; | ||
205 | st-plgpio,rdata-reg = <0x70>; | ||
206 | st-plgpio,mis-reg = <0x10>; | ||
207 | st-plgpio,eit-reg = <0x50>; | ||
208 | }; | ||
182 | }; | 209 | }; |
183 | }; | 210 | }; |
184 | }; | 211 | }; |
diff --git a/arch/arm/boot/dts/spear1340-evb.dts b/arch/arm/boot/dts/spear1340-evb.dts index c9a54e06fb68..045f7123ffac 100644 --- a/arch/arm/boot/dts/spear1340-evb.dts +++ b/arch/arm/boot/dts/spear1340-evb.dts | |||
@@ -193,6 +193,10 @@ | |||
193 | status = "okay"; | 193 | status = "okay"; |
194 | }; | 194 | }; |
195 | 195 | ||
196 | gpio@e2800000 { | ||
197 | status = "okay"; | ||
198 | }; | ||
199 | |||
196 | i2c0: i2c@e0280000 { | 200 | i2c0: i2c@e0280000 { |
197 | status = "okay"; | 201 | status = "okay"; |
198 | }; | 202 | }; |
diff --git a/arch/arm/boot/dts/spear1340.dtsi b/arch/arm/boot/dts/spear1340.dtsi index d71fe2a68f09..6c09eb0a1b2b 100644 --- a/arch/arm/boot/dts/spear1340.dtsi +++ b/arch/arm/boot/dts/spear1340.dtsi | |||
@@ -24,6 +24,12 @@ | |||
24 | status = "disabled"; | 24 | status = "disabled"; |
25 | }; | 25 | }; |
26 | 26 | ||
27 | pinmux: pinmux@e0700000 { | ||
28 | compatible = "st,spear1340-pinmux"; | ||
29 | reg = <0xe0700000 0x1000>; | ||
30 | #gpio-range-cells = <2>; | ||
31 | }; | ||
32 | |||
27 | spi1: spi@5d400000 { | 33 | spi1: spi@5d400000 { |
28 | compatible = "arm,pl022", "arm,primecell"; | 34 | compatible = "arm,pl022", "arm,primecell"; |
29 | reg = <0x5d400000 0x1000>; | 35 | reg = <0x5d400000 0x1000>; |
@@ -51,6 +57,26 @@ | |||
51 | thermal@e07008c4 { | 57 | thermal@e07008c4 { |
52 | st,thermal-flags = <0x2a00>; | 58 | st,thermal-flags = <0x2a00>; |
53 | }; | 59 | }; |
60 | |||
61 | gpiopinctrl: gpio@e2800000 { | ||
62 | compatible = "st,spear-plgpio"; | ||
63 | reg = <0xe2800000 0x1000>; | ||
64 | interrupts = <0 107 0x4>; | ||
65 | #interrupt-cells = <1>; | ||
66 | interrupt-controller; | ||
67 | gpio-controller; | ||
68 | #gpio-cells = <2>; | ||
69 | gpio-ranges = <&pinmux 0 252>; | ||
70 | status = "disabled"; | ||
71 | |||
72 | st-plgpio,ngpio = <250>; | ||
73 | st-plgpio,wdata-reg = <0x40>; | ||
74 | st-plgpio,dir-reg = <0x00>; | ||
75 | st-plgpio,ie-reg = <0x80>; | ||
76 | st-plgpio,rdata-reg = <0x20>; | ||
77 | st-plgpio,mis-reg = <0xa0>; | ||
78 | st-plgpio,eit-reg = <0x60>; | ||
79 | }; | ||
54 | }; | 80 | }; |
55 | }; | 81 | }; |
56 | }; | 82 | }; |
diff --git a/arch/arm/boot/dts/spear310.dtsi b/arch/arm/boot/dts/spear310.dtsi index 62fc4fb3e5f9..930303e48df9 100644 --- a/arch/arm/boot/dts/spear310.dtsi +++ b/arch/arm/boot/dts/spear310.dtsi | |||
@@ -22,9 +22,10 @@ | |||
22 | 0xb0000000 0xb0000000 0x10000000 | 22 | 0xb0000000 0xb0000000 0x10000000 |
23 | 0xd0000000 0xd0000000 0x30000000>; | 23 | 0xd0000000 0xd0000000 0x30000000>; |
24 | 24 | ||
25 | pinmux@b4000000 { | 25 | pinmux: pinmux@b4000000 { |
26 | compatible = "st,spear310-pinmux"; | 26 | compatible = "st,spear310-pinmux"; |
27 | reg = <0xb4000000 0x1000>; | 27 | reg = <0xb4000000 0x1000>; |
28 | #gpio-range-cells = <2>; | ||
28 | }; | 29 | }; |
29 | 30 | ||
30 | fsmc: flash@44000000 { | 31 | fsmc: flash@44000000 { |
@@ -75,6 +76,25 @@ | |||
75 | reg = <0xb2200000 0x1000>; | 76 | reg = <0xb2200000 0x1000>; |
76 | status = "disabled"; | 77 | status = "disabled"; |
77 | }; | 78 | }; |
79 | |||
80 | gpiopinctrl: gpio@b4000000 { | ||
81 | compatible = "st,spear-plgpio"; | ||
82 | reg = <0xb4000000 0x1000>; | ||
83 | #interrupt-cells = <1>; | ||
84 | interrupt-controller; | ||
85 | gpio-controller; | ||
86 | #gpio-cells = <2>; | ||
87 | gpio-ranges = <&pinmux 0 102>; | ||
88 | status = "disabled"; | ||
89 | |||
90 | st-plgpio,ngpio = <102>; | ||
91 | st-plgpio,enb-reg = <0x10>; | ||
92 | st-plgpio,wdata-reg = <0x20>; | ||
93 | st-plgpio,dir-reg = <0x30>; | ||
94 | st-plgpio,ie-reg = <0x50>; | ||
95 | st-plgpio,rdata-reg = <0x40>; | ||
96 | st-plgpio,mis-reg = <0x60>; | ||
97 | }; | ||
78 | }; | 98 | }; |
79 | }; | 99 | }; |
80 | }; | 100 | }; |
diff --git a/arch/arm/boot/dts/spear320-evb.dts b/arch/arm/boot/dts/spear320-evb.dts index 082328bd64ab..ad4bfc68ee05 100644 --- a/arch/arm/boot/dts/spear320-evb.dts +++ b/arch/arm/boot/dts/spear320-evb.dts | |||
@@ -164,6 +164,10 @@ | |||
164 | status = "okay"; | 164 | status = "okay"; |
165 | }; | 165 | }; |
166 | 166 | ||
167 | gpio@b3000000 { | ||
168 | status = "okay"; | ||
169 | }; | ||
170 | |||
167 | i2c0: i2c@d0180000 { | 171 | i2c0: i2c@d0180000 { |
168 | status = "okay"; | 172 | status = "okay"; |
169 | }; | 173 | }; |
diff --git a/arch/arm/boot/dts/spear320.dtsi b/arch/arm/boot/dts/spear320.dtsi index 1f49d69595a0..67d7ada71275 100644 --- a/arch/arm/boot/dts/spear320.dtsi +++ b/arch/arm/boot/dts/spear320.dtsi | |||
@@ -21,9 +21,10 @@ | |||
21 | ranges = <0x40000000 0x40000000 0x80000000 | 21 | ranges = <0x40000000 0x40000000 0x80000000 |
22 | 0xd0000000 0xd0000000 0x30000000>; | 22 | 0xd0000000 0xd0000000 0x30000000>; |
23 | 23 | ||
24 | pinmux@b3000000 { | 24 | pinmux: pinmux@b3000000 { |
25 | compatible = "st,spear320-pinmux"; | 25 | compatible = "st,spear320-pinmux"; |
26 | reg = <0xb3000000 0x1000>; | 26 | reg = <0xb3000000 0x1000>; |
27 | #gpio-range-cells = <2>; | ||
27 | }; | 28 | }; |
28 | 29 | ||
29 | clcd@90000000 { | 30 | clcd@90000000 { |
@@ -90,6 +91,26 @@ | |||
90 | reg = <0xa4000000 0x1000>; | 91 | reg = <0xa4000000 0x1000>; |
91 | status = "disabled"; | 92 | status = "disabled"; |
92 | }; | 93 | }; |
94 | |||
95 | gpiopinctrl: gpio@b3000000 { | ||
96 | compatible = "st,spear-plgpio"; | ||
97 | reg = <0xb3000000 0x1000>; | ||
98 | #interrupt-cells = <1>; | ||
99 | interrupt-controller; | ||
100 | gpio-controller; | ||
101 | #gpio-cells = <2>; | ||
102 | gpio-ranges = <&pinmux 0 102>; | ||
103 | status = "disabled"; | ||
104 | |||
105 | st-plgpio,ngpio = <102>; | ||
106 | st-plgpio,enb-reg = <0x24>; | ||
107 | st-plgpio,wdata-reg = <0x34>; | ||
108 | st-plgpio,dir-reg = <0x44>; | ||
109 | st-plgpio,ie-reg = <0x64>; | ||
110 | st-plgpio,rdata-reg = <0x54>; | ||
111 | st-plgpio,mis-reg = <0x84>; | ||
112 | st-plgpio,eit-reg = <0x94>; | ||
113 | }; | ||
93 | }; | 114 | }; |
94 | }; | 115 | }; |
95 | }; | 116 | }; |
diff --git a/arch/arm/boot/dts/tegra20-seaboard.dts b/arch/arm/boot/dts/tegra20-seaboard.dts index f0ba901676ac..a20d4ff3fb3c 100644 --- a/arch/arm/boot/dts/tegra20-seaboard.dts +++ b/arch/arm/boot/dts/tegra20-seaboard.dts | |||
@@ -523,12 +523,12 @@ | |||
523 | }; | 523 | }; |
524 | 524 | ||
525 | temperature-sensor@4c { | 525 | temperature-sensor@4c { |
526 | compatible = "nct1008"; | 526 | compatible = "onnn,nct1008"; |
527 | reg = <0x4c>; | 527 | reg = <0x4c>; |
528 | }; | 528 | }; |
529 | 529 | ||
530 | magnetometer@c { | 530 | magnetometer@c { |
531 | compatible = "ak8975"; | 531 | compatible = "ak,ak8975"; |
532 | reg = <0xc>; | 532 | reg = <0xc>; |
533 | interrupt-parent = <&gpio>; | 533 | interrupt-parent = <&gpio>; |
534 | interrupts = <109 0x04>; /* gpio PN5 */ | 534 | interrupts = <109 0x04>; /* gpio PN5 */ |
diff --git a/arch/arm/configs/afeb9260_defconfig b/arch/arm/configs/afeb9260_defconfig index c285a9d777d9..a8dbc1e05253 100644 --- a/arch/arm/configs/afeb9260_defconfig +++ b/arch/arm/configs/afeb9260_defconfig | |||
@@ -79,7 +79,7 @@ CONFIG_USB_STORAGE=y | |||
79 | CONFIG_USB_GADGET=y | 79 | CONFIG_USB_GADGET=y |
80 | CONFIG_USB_ZERO=m | 80 | CONFIG_USB_ZERO=m |
81 | CONFIG_USB_GADGETFS=m | 81 | CONFIG_USB_GADGETFS=m |
82 | CONFIG_USB_FILE_STORAGE=m | 82 | CONFIG_USB_MASS_STORAGE=m |
83 | CONFIG_USB_G_SERIAL=m | 83 | CONFIG_USB_G_SERIAL=m |
84 | CONFIG_RTC_CLASS=y | 84 | CONFIG_RTC_CLASS=y |
85 | CONFIG_RTC_DEBUG=y | 85 | CONFIG_RTC_DEBUG=y |
diff --git a/arch/arm/configs/at91_dt_defconfig b/arch/arm/configs/at91_dt_defconfig index 67bc571ed0c3..b175577d7abb 100644 --- a/arch/arm/configs/at91_dt_defconfig +++ b/arch/arm/configs/at91_dt_defconfig | |||
@@ -111,6 +111,7 @@ CONFIG_I2C=y | |||
111 | CONFIG_I2C_GPIO=y | 111 | CONFIG_I2C_GPIO=y |
112 | CONFIG_SPI=y | 112 | CONFIG_SPI=y |
113 | CONFIG_SPI_ATMEL=y | 113 | CONFIG_SPI_ATMEL=y |
114 | CONFIG_PINCTRL_AT91=y | ||
114 | # CONFIG_HWMON is not set | 115 | # CONFIG_HWMON is not set |
115 | CONFIG_WATCHDOG=y | 116 | CONFIG_WATCHDOG=y |
116 | CONFIG_AT91SAM9X_WATCHDOG=y | 117 | CONFIG_AT91SAM9X_WATCHDOG=y |
diff --git a/arch/arm/configs/at91sam9260_defconfig b/arch/arm/configs/at91sam9260_defconfig index 505b3765f87e..0ea5d2c97fc4 100644 --- a/arch/arm/configs/at91sam9260_defconfig +++ b/arch/arm/configs/at91sam9260_defconfig | |||
@@ -75,7 +75,7 @@ CONFIG_USB_STORAGE_DEBUG=y | |||
75 | CONFIG_USB_GADGET=y | 75 | CONFIG_USB_GADGET=y |
76 | CONFIG_USB_ZERO=m | 76 | CONFIG_USB_ZERO=m |
77 | CONFIG_USB_GADGETFS=m | 77 | CONFIG_USB_GADGETFS=m |
78 | CONFIG_USB_FILE_STORAGE=m | 78 | CONFIG_USB_MASS_STORAGE=m |
79 | CONFIG_USB_G_SERIAL=m | 79 | CONFIG_USB_G_SERIAL=m |
80 | CONFIG_RTC_CLASS=y | 80 | CONFIG_RTC_CLASS=y |
81 | CONFIG_RTC_DRV_AT91SAM9=y | 81 | CONFIG_RTC_DRV_AT91SAM9=y |
diff --git a/arch/arm/configs/at91sam9261_defconfig b/arch/arm/configs/at91sam9261_defconfig index 1e8712ef062e..c87beb973b37 100644 --- a/arch/arm/configs/at91sam9261_defconfig +++ b/arch/arm/configs/at91sam9261_defconfig | |||
@@ -125,7 +125,7 @@ CONFIG_USB_GADGET=y | |||
125 | CONFIG_USB_ZERO=m | 125 | CONFIG_USB_ZERO=m |
126 | CONFIG_USB_ETH=m | 126 | CONFIG_USB_ETH=m |
127 | CONFIG_USB_GADGETFS=m | 127 | CONFIG_USB_GADGETFS=m |
128 | CONFIG_USB_FILE_STORAGE=m | 128 | CONFIG_USB_MASS_STORAGE=m |
129 | CONFIG_USB_G_SERIAL=m | 129 | CONFIG_USB_G_SERIAL=m |
130 | CONFIG_MMC=y | 130 | CONFIG_MMC=y |
131 | CONFIG_MMC_ATMELMCI=m | 131 | CONFIG_MMC_ATMELMCI=m |
diff --git a/arch/arm/configs/at91sam9263_defconfig b/arch/arm/configs/at91sam9263_defconfig index d2050cada82d..c5212f43eee6 100644 --- a/arch/arm/configs/at91sam9263_defconfig +++ b/arch/arm/configs/at91sam9263_defconfig | |||
@@ -133,7 +133,7 @@ CONFIG_USB_GADGET=y | |||
133 | CONFIG_USB_ZERO=m | 133 | CONFIG_USB_ZERO=m |
134 | CONFIG_USB_ETH=m | 134 | CONFIG_USB_ETH=m |
135 | CONFIG_USB_GADGETFS=m | 135 | CONFIG_USB_GADGETFS=m |
136 | CONFIG_USB_FILE_STORAGE=m | 136 | CONFIG_USB_MASS_STORAGE=m |
137 | CONFIG_USB_G_SERIAL=m | 137 | CONFIG_USB_G_SERIAL=m |
138 | CONFIG_MMC=y | 138 | CONFIG_MMC=y |
139 | CONFIG_SDIO_UART=m | 139 | CONFIG_SDIO_UART=m |
diff --git a/arch/arm/configs/at91sam9g20_defconfig b/arch/arm/configs/at91sam9g20_defconfig index e1b0e80b54a5..3b1881033ad8 100644 --- a/arch/arm/configs/at91sam9g20_defconfig +++ b/arch/arm/configs/at91sam9g20_defconfig | |||
@@ -96,7 +96,7 @@ CONFIG_USB_STORAGE=y | |||
96 | CONFIG_USB_GADGET=y | 96 | CONFIG_USB_GADGET=y |
97 | CONFIG_USB_ZERO=m | 97 | CONFIG_USB_ZERO=m |
98 | CONFIG_USB_GADGETFS=m | 98 | CONFIG_USB_GADGETFS=m |
99 | CONFIG_USB_FILE_STORAGE=m | 99 | CONFIG_USB_MASS_STORAGE=m |
100 | CONFIG_USB_G_SERIAL=m | 100 | CONFIG_USB_G_SERIAL=m |
101 | CONFIG_MMC=y | 101 | CONFIG_MMC=y |
102 | CONFIG_MMC_ATMELMCI=m | 102 | CONFIG_MMC_ATMELMCI=m |
diff --git a/arch/arm/configs/corgi_defconfig b/arch/arm/configs/corgi_defconfig index 4b8a25d9e686..1fd1d1de3220 100644 --- a/arch/arm/configs/corgi_defconfig +++ b/arch/arm/configs/corgi_defconfig | |||
@@ -218,7 +218,7 @@ CONFIG_USB_GADGET=y | |||
218 | CONFIG_USB_ZERO=m | 218 | CONFIG_USB_ZERO=m |
219 | CONFIG_USB_ETH=m | 219 | CONFIG_USB_ETH=m |
220 | CONFIG_USB_GADGETFS=m | 220 | CONFIG_USB_GADGETFS=m |
221 | CONFIG_USB_FILE_STORAGE=m | 221 | CONFIG_USB_MASS_STORAGE=m |
222 | CONFIG_USB_G_SERIAL=m | 222 | CONFIG_USB_G_SERIAL=m |
223 | CONFIG_MMC=y | 223 | CONFIG_MMC=y |
224 | CONFIG_MMC_PXA=y | 224 | CONFIG_MMC_PXA=y |
diff --git a/arch/arm/configs/davinci_all_defconfig b/arch/arm/configs/davinci_all_defconfig index 67b5abb6f857..4ea7c95719d2 100644 --- a/arch/arm/configs/davinci_all_defconfig +++ b/arch/arm/configs/davinci_all_defconfig | |||
@@ -144,7 +144,7 @@ CONFIG_USB_GADGET_DEBUG_FS=y | |||
144 | CONFIG_USB_ZERO=m | 144 | CONFIG_USB_ZERO=m |
145 | CONFIG_USB_ETH=m | 145 | CONFIG_USB_ETH=m |
146 | CONFIG_USB_GADGETFS=m | 146 | CONFIG_USB_GADGETFS=m |
147 | CONFIG_USB_FILE_STORAGE=m | 147 | CONFIG_USB_MASS_STORAGE=m |
148 | CONFIG_USB_G_SERIAL=m | 148 | CONFIG_USB_G_SERIAL=m |
149 | CONFIG_USB_G_PRINTER=m | 149 | CONFIG_USB_G_PRINTER=m |
150 | CONFIG_USB_CDC_COMPOSITE=m | 150 | CONFIG_USB_CDC_COMPOSITE=m |
diff --git a/arch/arm/configs/h7202_defconfig b/arch/arm/configs/h7202_defconfig index 69405a762423..e16d3f372e2a 100644 --- a/arch/arm/configs/h7202_defconfig +++ b/arch/arm/configs/h7202_defconfig | |||
@@ -34,8 +34,7 @@ CONFIG_FB_MODE_HELPERS=y | |||
34 | CONFIG_USB_GADGET=m | 34 | CONFIG_USB_GADGET=m |
35 | CONFIG_USB_ZERO=m | 35 | CONFIG_USB_ZERO=m |
36 | CONFIG_USB_GADGETFS=m | 36 | CONFIG_USB_GADGETFS=m |
37 | CONFIG_USB_FILE_STORAGE=m | 37 | CONFIG_USB_MASS_STORAGE=m |
38 | CONFIG_USB_FILE_STORAGE_TEST=y | ||
39 | CONFIG_USB_G_SERIAL=m | 38 | CONFIG_USB_G_SERIAL=m |
40 | CONFIG_EXT2_FS=y | 39 | CONFIG_EXT2_FS=y |
41 | CONFIG_TMPFS=y | 40 | CONFIG_TMPFS=y |
diff --git a/arch/arm/configs/magician_defconfig b/arch/arm/configs/magician_defconfig index a691ef4c6008..557dd291288b 100644 --- a/arch/arm/configs/magician_defconfig +++ b/arch/arm/configs/magician_defconfig | |||
@@ -136,7 +136,7 @@ CONFIG_USB_PXA27X=y | |||
136 | CONFIG_USB_ETH=m | 136 | CONFIG_USB_ETH=m |
137 | # CONFIG_USB_ETH_RNDIS is not set | 137 | # CONFIG_USB_ETH_RNDIS is not set |
138 | CONFIG_USB_GADGETFS=m | 138 | CONFIG_USB_GADGETFS=m |
139 | CONFIG_USB_FILE_STORAGE=m | 139 | CONFIG_USB_MASS_STORAGE=m |
140 | CONFIG_USB_G_SERIAL=m | 140 | CONFIG_USB_G_SERIAL=m |
141 | CONFIG_USB_CDC_COMPOSITE=m | 141 | CONFIG_USB_CDC_COMPOSITE=m |
142 | CONFIG_USB_GPIO_VBUS=y | 142 | CONFIG_USB_GPIO_VBUS=y |
diff --git a/arch/arm/configs/mini2440_defconfig b/arch/arm/configs/mini2440_defconfig index 00630e6af45c..a07948a87caa 100644 --- a/arch/arm/configs/mini2440_defconfig +++ b/arch/arm/configs/mini2440_defconfig | |||
@@ -240,7 +240,7 @@ CONFIG_USB_GADGET_S3C2410=y | |||
240 | CONFIG_USB_ZERO=m | 240 | CONFIG_USB_ZERO=m |
241 | CONFIG_USB_ETH=m | 241 | CONFIG_USB_ETH=m |
242 | CONFIG_USB_GADGETFS=m | 242 | CONFIG_USB_GADGETFS=m |
243 | CONFIG_USB_FILE_STORAGE=m | 243 | CONFIG_USB_MASS_STORAGE=m |
244 | CONFIG_USB_G_SERIAL=m | 244 | CONFIG_USB_G_SERIAL=m |
245 | CONFIG_USB_CDC_COMPOSITE=m | 245 | CONFIG_USB_CDC_COMPOSITE=m |
246 | CONFIG_MMC=y | 246 | CONFIG_MMC=y |
diff --git a/arch/arm/configs/omap1_defconfig b/arch/arm/configs/omap1_defconfig index dde2a1af7b39..42eab9a2a0fd 100644 --- a/arch/arm/configs/omap1_defconfig +++ b/arch/arm/configs/omap1_defconfig | |||
@@ -214,8 +214,7 @@ CONFIG_USB_TEST=y | |||
214 | CONFIG_USB_GADGET=y | 214 | CONFIG_USB_GADGET=y |
215 | CONFIG_USB_ETH=m | 215 | CONFIG_USB_ETH=m |
216 | # CONFIG_USB_ETH_RNDIS is not set | 216 | # CONFIG_USB_ETH_RNDIS is not set |
217 | CONFIG_USB_FILE_STORAGE=m | 217 | CONFIG_USB_MASS_STORAGE=m |
218 | CONFIG_USB_FILE_STORAGE_TEST=y | ||
219 | CONFIG_MMC=y | 218 | CONFIG_MMC=y |
220 | CONFIG_MMC_SDHCI=y | 219 | CONFIG_MMC_SDHCI=y |
221 | CONFIG_MMC_SDHCI_PLTFM=y | 220 | CONFIG_MMC_SDHCI_PLTFM=y |
diff --git a/arch/arm/configs/prima2_defconfig b/arch/arm/configs/prima2_defconfig index 807d4e2acb17..6a936c7c078a 100644 --- a/arch/arm/configs/prima2_defconfig +++ b/arch/arm/configs/prima2_defconfig | |||
@@ -37,7 +37,6 @@ CONFIG_SPI_SIRF=y | |||
37 | CONFIG_SPI_SPIDEV=y | 37 | CONFIG_SPI_SPIDEV=y |
38 | # CONFIG_HWMON is not set | 38 | # CONFIG_HWMON is not set |
39 | CONFIG_USB_GADGET=y | 39 | CONFIG_USB_GADGET=y |
40 | CONFIG_USB_FILE_STORAGE=m | ||
41 | CONFIG_USB_MASS_STORAGE=m | 40 | CONFIG_USB_MASS_STORAGE=m |
42 | CONFIG_MMC=y | 41 | CONFIG_MMC=y |
43 | CONFIG_MMC_SDHCI=y | 42 | CONFIG_MMC_SDHCI=y |
diff --git a/arch/arm/configs/spitz_defconfig b/arch/arm/configs/spitz_defconfig index df77931a4326..2e0419d1b964 100644 --- a/arch/arm/configs/spitz_defconfig +++ b/arch/arm/configs/spitz_defconfig | |||
@@ -214,7 +214,7 @@ CONFIG_USB_GADGET_DUMMY_HCD=y | |||
214 | CONFIG_USB_ZERO=m | 214 | CONFIG_USB_ZERO=m |
215 | CONFIG_USB_ETH=m | 215 | CONFIG_USB_ETH=m |
216 | CONFIG_USB_GADGETFS=m | 216 | CONFIG_USB_GADGETFS=m |
217 | CONFIG_USB_FILE_STORAGE=m | 217 | CONFIG_USB_MASS_STORAGE=m |
218 | CONFIG_USB_G_SERIAL=m | 218 | CONFIG_USB_G_SERIAL=m |
219 | CONFIG_MMC=y | 219 | CONFIG_MMC=y |
220 | CONFIG_MMC_PXA=y | 220 | CONFIG_MMC_PXA=y |
diff --git a/arch/arm/configs/stamp9g20_defconfig b/arch/arm/configs/stamp9g20_defconfig index 52f1488591c7..b845f5519bcc 100644 --- a/arch/arm/configs/stamp9g20_defconfig +++ b/arch/arm/configs/stamp9g20_defconfig | |||
@@ -97,7 +97,7 @@ CONFIG_USB_STORAGE=y | |||
97 | CONFIG_USB_GADGET=m | 97 | CONFIG_USB_GADGET=m |
98 | CONFIG_USB_ZERO=m | 98 | CONFIG_USB_ZERO=m |
99 | CONFIG_USB_ETH=m | 99 | CONFIG_USB_ETH=m |
100 | CONFIG_USB_FILE_STORAGE=m | 100 | CONFIG_USB_MASS_STORAGE=m |
101 | CONFIG_USB_G_SERIAL=m | 101 | CONFIG_USB_G_SERIAL=m |
102 | CONFIG_MMC=y | 102 | CONFIG_MMC=y |
103 | CONFIG_MMC_ATMELMCI=y | 103 | CONFIG_MMC_ATMELMCI=y |
diff --git a/arch/arm/configs/viper_defconfig b/arch/arm/configs/viper_defconfig index 1d01ddd33122..d36e0d3c86ec 100644 --- a/arch/arm/configs/viper_defconfig +++ b/arch/arm/configs/viper_defconfig | |||
@@ -139,7 +139,7 @@ CONFIG_USB_SERIAL_MCT_U232=m | |||
139 | CONFIG_USB_GADGET=m | 139 | CONFIG_USB_GADGET=m |
140 | CONFIG_USB_ETH=m | 140 | CONFIG_USB_ETH=m |
141 | CONFIG_USB_GADGETFS=m | 141 | CONFIG_USB_GADGETFS=m |
142 | CONFIG_USB_FILE_STORAGE=m | 142 | CONFIG_USB_MASS_STORAGE=m |
143 | CONFIG_USB_G_SERIAL=m | 143 | CONFIG_USB_G_SERIAL=m |
144 | CONFIG_USB_G_PRINTER=m | 144 | CONFIG_USB_G_PRINTER=m |
145 | CONFIG_RTC_CLASS=y | 145 | CONFIG_RTC_CLASS=y |
diff --git a/arch/arm/configs/zeus_defconfig b/arch/arm/configs/zeus_defconfig index 547a3c1e59db..731d4f985310 100644 --- a/arch/arm/configs/zeus_defconfig +++ b/arch/arm/configs/zeus_defconfig | |||
@@ -143,7 +143,7 @@ CONFIG_USB_GADGET=m | |||
143 | CONFIG_USB_PXA27X=y | 143 | CONFIG_USB_PXA27X=y |
144 | CONFIG_USB_ETH=m | 144 | CONFIG_USB_ETH=m |
145 | CONFIG_USB_GADGETFS=m | 145 | CONFIG_USB_GADGETFS=m |
146 | CONFIG_USB_FILE_STORAGE=m | 146 | CONFIG_USB_MASS_STORAGE=m |
147 | CONFIG_USB_G_SERIAL=m | 147 | CONFIG_USB_G_SERIAL=m |
148 | CONFIG_USB_G_PRINTER=m | 148 | CONFIG_USB_G_PRINTER=m |
149 | CONFIG_MMC=y | 149 | CONFIG_MMC=y |
diff --git a/arch/arm/include/asm/hardware/sp810.h b/arch/arm/include/asm/hardware/sp810.h index 6b9b077d86b3..afd7e916472f 100644 --- a/arch/arm/include/asm/hardware/sp810.h +++ b/arch/arm/include/asm/hardware/sp810.h | |||
@@ -56,6 +56,8 @@ | |||
56 | #define SCCTRL_TIMEREN1SEL_REFCLK (0 << 17) | 56 | #define SCCTRL_TIMEREN1SEL_REFCLK (0 << 17) |
57 | #define SCCTRL_TIMEREN1SEL_TIMCLK (1 << 17) | 57 | #define SCCTRL_TIMEREN1SEL_TIMCLK (1 << 17) |
58 | 58 | ||
59 | #define SCCTRL_TIMERENnSEL_SHIFT(n) (15 + ((n) * 2)) | ||
60 | |||
59 | static inline void sysctl_soft_reset(void __iomem *base) | 61 | static inline void sysctl_soft_reset(void __iomem *base) |
60 | { | 62 | { |
61 | /* switch to slow mode */ | 63 | /* switch to slow mode */ |
diff --git a/arch/arm/include/asm/io.h b/arch/arm/include/asm/io.h index 42f042ee4ada..652b56086de7 100644 --- a/arch/arm/include/asm/io.h +++ b/arch/arm/include/asm/io.h | |||
@@ -374,7 +374,7 @@ extern void pci_iounmap(struct pci_dev *dev, void __iomem *addr); | |||
374 | 374 | ||
375 | #ifdef CONFIG_MMU | 375 | #ifdef CONFIG_MMU |
376 | #define ARCH_HAS_VALID_PHYS_ADDR_RANGE | 376 | #define ARCH_HAS_VALID_PHYS_ADDR_RANGE |
377 | extern int valid_phys_addr_range(unsigned long addr, size_t size); | 377 | extern int valid_phys_addr_range(phys_addr_t addr, size_t size); |
378 | extern int valid_mmap_phys_addr_range(unsigned long pfn, size_t size); | 378 | extern int valid_mmap_phys_addr_range(unsigned long pfn, size_t size); |
379 | extern int devmem_is_allowed(unsigned long pfn); | 379 | extern int devmem_is_allowed(unsigned long pfn); |
380 | #endif | 380 | #endif |
diff --git a/arch/arm/include/asm/prom.h b/arch/arm/include/asm/prom.h index aeae9c609df4..6d65ba222db9 100644 --- a/arch/arm/include/asm/prom.h +++ b/arch/arm/include/asm/prom.h | |||
@@ -11,6 +11,8 @@ | |||
11 | #ifndef __ASMARM_PROM_H | 11 | #ifndef __ASMARM_PROM_H |
12 | #define __ASMARM_PROM_H | 12 | #define __ASMARM_PROM_H |
13 | 13 | ||
14 | #define HAVE_ARCH_DEVTREE_FIXUPS | ||
15 | |||
14 | #ifdef CONFIG_OF | 16 | #ifdef CONFIG_OF |
15 | 17 | ||
16 | extern struct machine_desc *setup_machine_fdt(unsigned int dt_phys); | 18 | extern struct machine_desc *setup_machine_fdt(unsigned int dt_phys); |
diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig index 043624219b55..e34c1bdb804d 100644 --- a/arch/arm/mach-at91/Kconfig +++ b/arch/arm/mach-at91/Kconfig | |||
@@ -494,8 +494,17 @@ endif | |||
494 | 494 | ||
495 | comment "Generic Board Type" | 495 | comment "Generic Board Type" |
496 | 496 | ||
497 | config MACH_AT91RM9200_DT | ||
498 | bool "Atmel AT91RM9200 Evaluation Kits with device-tree support" | ||
499 | depends on SOC_AT91RM9200 | ||
500 | select USE_OF | ||
501 | help | ||
502 | Select this if you want to experiment device-tree with | ||
503 | an Atmel RM9200 Evaluation Kit. | ||
504 | |||
497 | config MACH_AT91SAM_DT | 505 | config MACH_AT91SAM_DT |
498 | bool "Atmel AT91SAM Evaluation Kits with device-tree support" | 506 | bool "Atmel AT91SAM Evaluation Kits with device-tree support" |
507 | depends on SOC_AT91SAM9 | ||
499 | select USE_OF | 508 | select USE_OF |
500 | help | 509 | help |
501 | Select this if you want to experiment device-tree with | 510 | Select this if you want to experiment device-tree with |
diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile index 3bb7a51efc9d..b38a1dcb79b8 100644 --- a/arch/arm/mach-at91/Makefile +++ b/arch/arm/mach-at91/Makefile | |||
@@ -88,6 +88,7 @@ obj-$(CONFIG_MACH_SNAPPER_9260) += board-snapper9260.o | |||
88 | obj-$(CONFIG_MACH_AT91SAM9M10G45EK) += board-sam9m10g45ek.o | 88 | obj-$(CONFIG_MACH_AT91SAM9M10G45EK) += board-sam9m10g45ek.o |
89 | 89 | ||
90 | # AT91SAM board with device-tree | 90 | # AT91SAM board with device-tree |
91 | obj-$(CONFIG_MACH_AT91RM9200_DT) += board-rm9200-dt.o | ||
91 | obj-$(CONFIG_MACH_AT91SAM_DT) += board-dt.o | 92 | obj-$(CONFIG_MACH_AT91SAM_DT) += board-dt.o |
92 | 93 | ||
93 | # AT91X40 board-specific support | 94 | # AT91X40 board-specific support |
diff --git a/arch/arm/mach-at91/at91rm9200.c b/arch/arm/mach-at91/at91rm9200.c index 5269825194a8..6cceb42a4c33 100644 --- a/arch/arm/mach-at91/at91rm9200.c +++ b/arch/arm/mach-at91/at91rm9200.c | |||
@@ -194,6 +194,24 @@ static struct clk_lookup periph_clocks_lookups[] = { | |||
194 | CLKDEV_CON_ID("pioB", &pioB_clk), | 194 | CLKDEV_CON_ID("pioB", &pioB_clk), |
195 | CLKDEV_CON_ID("pioC", &pioC_clk), | 195 | CLKDEV_CON_ID("pioC", &pioC_clk), |
196 | CLKDEV_CON_ID("pioD", &pioD_clk), | 196 | CLKDEV_CON_ID("pioD", &pioD_clk), |
197 | /* usart lookup table for DT entries */ | ||
198 | CLKDEV_CON_DEV_ID("usart", "fffff200.serial", &mck), | ||
199 | CLKDEV_CON_DEV_ID("usart", "fffc0000.serial", &usart0_clk), | ||
200 | CLKDEV_CON_DEV_ID("usart", "fffc4000.serial", &usart1_clk), | ||
201 | CLKDEV_CON_DEV_ID("usart", "fffc8000.serial", &usart2_clk), | ||
202 | CLKDEV_CON_DEV_ID("usart", "fffcc000.serial", &usart3_clk), | ||
203 | /* tc lookup table for DT entries */ | ||
204 | CLKDEV_CON_DEV_ID("t0_clk", "fffa0000.timer", &tc0_clk), | ||
205 | CLKDEV_CON_DEV_ID("t1_clk", "fffa0000.timer", &tc1_clk), | ||
206 | CLKDEV_CON_DEV_ID("t2_clk", "fffa0000.timer", &tc2_clk), | ||
207 | CLKDEV_CON_DEV_ID("t0_clk", "fffa4000.timer", &tc3_clk), | ||
208 | CLKDEV_CON_DEV_ID("t1_clk", "fffa4000.timer", &tc4_clk), | ||
209 | CLKDEV_CON_DEV_ID("t2_clk", "fffa4000.timer", &tc5_clk), | ||
210 | CLKDEV_CON_DEV_ID("hclk", "300000.ohci", &ohci_clk), | ||
211 | CLKDEV_CON_DEV_ID(NULL, "fffff400.gpio", &pioA_clk), | ||
212 | CLKDEV_CON_DEV_ID(NULL, "fffff600.gpio", &pioB_clk), | ||
213 | CLKDEV_CON_DEV_ID(NULL, "fffff800.gpio", &pioC_clk), | ||
214 | CLKDEV_CON_DEV_ID(NULL, "fffffa00.gpio", &pioD_clk), | ||
197 | }; | 215 | }; |
198 | 216 | ||
199 | static struct clk_lookup usart_clocks_lookups[] = { | 217 | static struct clk_lookup usart_clocks_lookups[] = { |
@@ -361,10 +379,10 @@ static unsigned int at91rm9200_default_irq_priority[NR_AIC_IRQS] __initdata = { | |||
361 | 0 /* Advanced Interrupt Controller (IRQ6) */ | 379 | 0 /* Advanced Interrupt Controller (IRQ6) */ |
362 | }; | 380 | }; |
363 | 381 | ||
364 | struct at91_init_soc __initdata at91rm9200_soc = { | 382 | AT91_SOC_START(rm9200) |
365 | .map_io = at91rm9200_map_io, | 383 | .map_io = at91rm9200_map_io, |
366 | .default_irq_priority = at91rm9200_default_irq_priority, | 384 | .default_irq_priority = at91rm9200_default_irq_priority, |
367 | .ioremap_registers = at91rm9200_ioremap_registers, | 385 | .ioremap_registers = at91rm9200_ioremap_registers, |
368 | .register_clocks = at91rm9200_register_clocks, | 386 | .register_clocks = at91rm9200_register_clocks, |
369 | .init = at91rm9200_initialize, | 387 | .init = at91rm9200_initialize, |
370 | }; | 388 | AT91_SOC_END |
diff --git a/arch/arm/mach-at91/at91rm9200_time.c b/arch/arm/mach-at91/at91rm9200_time.c index aaa443b48c91..cafe98836c8a 100644 --- a/arch/arm/mach-at91/at91rm9200_time.c +++ b/arch/arm/mach-at91/at91rm9200_time.c | |||
@@ -24,6 +24,9 @@ | |||
24 | #include <linux/irq.h> | 24 | #include <linux/irq.h> |
25 | #include <linux/clockchips.h> | 25 | #include <linux/clockchips.h> |
26 | #include <linux/export.h> | 26 | #include <linux/export.h> |
27 | #include <linux/of.h> | ||
28 | #include <linux/of_address.h> | ||
29 | #include <linux/of_irq.h> | ||
27 | 30 | ||
28 | #include <asm/mach/time.h> | 31 | #include <asm/mach/time.h> |
29 | 32 | ||
@@ -91,7 +94,8 @@ static irqreturn_t at91rm9200_timer_interrupt(int irq, void *dev_id) | |||
91 | static struct irqaction at91rm9200_timer_irq = { | 94 | static struct irqaction at91rm9200_timer_irq = { |
92 | .name = "at91_tick", | 95 | .name = "at91_tick", |
93 | .flags = IRQF_SHARED | IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, | 96 | .flags = IRQF_SHARED | IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL, |
94 | .handler = at91rm9200_timer_interrupt | 97 | .handler = at91rm9200_timer_interrupt, |
98 | .irq = NR_IRQS_LEGACY + AT91_ID_SYS, | ||
95 | }; | 99 | }; |
96 | 100 | ||
97 | static cycle_t read_clk32k(struct clocksource *cs) | 101 | static cycle_t read_clk32k(struct clocksource *cs) |
@@ -179,8 +183,60 @@ static struct clock_event_device clkevt = { | |||
179 | void __iomem *at91_st_base; | 183 | void __iomem *at91_st_base; |
180 | EXPORT_SYMBOL_GPL(at91_st_base); | 184 | EXPORT_SYMBOL_GPL(at91_st_base); |
181 | 185 | ||
186 | #ifdef CONFIG_OF | ||
187 | static struct of_device_id at91rm9200_st_timer_ids[] = { | ||
188 | { .compatible = "atmel,at91rm9200-st" }, | ||
189 | { /* sentinel */ } | ||
190 | }; | ||
191 | |||
192 | static int __init of_at91rm9200_st_init(void) | ||
193 | { | ||
194 | struct device_node *np; | ||
195 | int ret; | ||
196 | |||
197 | np = of_find_matching_node(NULL, at91rm9200_st_timer_ids); | ||
198 | if (!np) | ||
199 | goto err; | ||
200 | |||
201 | at91_st_base = of_iomap(np, 0); | ||
202 | if (!at91_st_base) | ||
203 | goto node_err; | ||
204 | |||
205 | /* Get the interrupts property */ | ||
206 | ret = irq_of_parse_and_map(np, 0); | ||
207 | if (!ret) | ||
208 | goto ioremap_err; | ||
209 | at91rm9200_timer_irq.irq = ret; | ||
210 | |||
211 | of_node_put(np); | ||
212 | |||
213 | return 0; | ||
214 | |||
215 | ioremap_err: | ||
216 | iounmap(at91_st_base); | ||
217 | node_err: | ||
218 | of_node_put(np); | ||
219 | err: | ||
220 | return -EINVAL; | ||
221 | } | ||
222 | #else | ||
223 | static int __init of_at91rm9200_st_init(void) | ||
224 | { | ||
225 | return -EINVAL; | ||
226 | } | ||
227 | #endif | ||
228 | |||
182 | void __init at91rm9200_ioremap_st(u32 addr) | 229 | void __init at91rm9200_ioremap_st(u32 addr) |
183 | { | 230 | { |
231 | #ifdef CONFIG_OF | ||
232 | struct device_node *np; | ||
233 | |||
234 | np = of_find_matching_node(NULL, at91rm9200_st_timer_ids); | ||
235 | if (np) { | ||
236 | of_node_put(np); | ||
237 | return; | ||
238 | } | ||
239 | #endif | ||
184 | at91_st_base = ioremap(addr, 256); | 240 | at91_st_base = ioremap(addr, 256); |
185 | if (!at91_st_base) | 241 | if (!at91_st_base) |
186 | panic("Impossible to ioremap ST\n"); | 242 | panic("Impossible to ioremap ST\n"); |
@@ -191,13 +247,16 @@ void __init at91rm9200_ioremap_st(u32 addr) | |||
191 | */ | 247 | */ |
192 | void __init at91rm9200_timer_init(void) | 248 | void __init at91rm9200_timer_init(void) |
193 | { | 249 | { |
250 | /* For device tree enabled device: initialize here */ | ||
251 | of_at91rm9200_st_init(); | ||
252 | |||
194 | /* Disable all timer interrupts, and clear any pending ones */ | 253 | /* Disable all timer interrupts, and clear any pending ones */ |
195 | at91_st_write(AT91_ST_IDR, | 254 | at91_st_write(AT91_ST_IDR, |
196 | AT91_ST_PITS | AT91_ST_WDOVF | AT91_ST_RTTINC | AT91_ST_ALMS); | 255 | AT91_ST_PITS | AT91_ST_WDOVF | AT91_ST_RTTINC | AT91_ST_ALMS); |
197 | at91_st_read(AT91_ST_SR); | 256 | at91_st_read(AT91_ST_SR); |
198 | 257 | ||
199 | /* Make IRQs happen for the system timer */ | 258 | /* Make IRQs happen for the system timer */ |
200 | setup_irq(NR_IRQS_LEGACY + AT91_ID_SYS, &at91rm9200_timer_irq); | 259 | setup_irq(at91rm9200_timer_irq.irq, &at91rm9200_timer_irq); |
201 | 260 | ||
202 | /* The 32KiHz "Slow Clock" (tick every 30517.58 nanoseconds) is used | 261 | /* The 32KiHz "Slow Clock" (tick every 30517.58 nanoseconds) is used |
203 | * directly for the clocksource and all clockevents, after adjusting | 262 | * directly for the clocksource and all clockevents, after adjusting |
diff --git a/arch/arm/mach-at91/at91sam9260.c b/arch/arm/mach-at91/at91sam9260.c index f8202615f4a8..c9e029e44d8a 100644 --- a/arch/arm/mach-at91/at91sam9260.c +++ b/arch/arm/mach-at91/at91sam9260.c | |||
@@ -230,11 +230,15 @@ static struct clk_lookup periph_clocks_lookups[] = { | |||
230 | CLKDEV_CON_DEV_ID("t1_clk", "fffdc000.timer", &tc4_clk), | 230 | CLKDEV_CON_DEV_ID("t1_clk", "fffdc000.timer", &tc4_clk), |
231 | CLKDEV_CON_DEV_ID("t2_clk", "fffdc000.timer", &tc5_clk), | 231 | CLKDEV_CON_DEV_ID("t2_clk", "fffdc000.timer", &tc5_clk), |
232 | CLKDEV_CON_DEV_ID("hclk", "500000.ohci", &ohci_clk), | 232 | CLKDEV_CON_DEV_ID("hclk", "500000.ohci", &ohci_clk), |
233 | CLKDEV_CON_DEV_ID("mci_clk", "fffa8000.mmc", &mmc_clk), | ||
233 | /* fake hclk clock */ | 234 | /* fake hclk clock */ |
234 | CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk), | 235 | CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &ohci_clk), |
235 | CLKDEV_CON_ID("pioA", &pioA_clk), | 236 | CLKDEV_CON_ID("pioA", &pioA_clk), |
236 | CLKDEV_CON_ID("pioB", &pioB_clk), | 237 | CLKDEV_CON_ID("pioB", &pioB_clk), |
237 | CLKDEV_CON_ID("pioC", &pioC_clk), | 238 | CLKDEV_CON_ID("pioC", &pioC_clk), |
239 | CLKDEV_CON_DEV_ID(NULL, "fffff400.gpio", &pioA_clk), | ||
240 | CLKDEV_CON_DEV_ID(NULL, "fffff600.gpio", &pioB_clk), | ||
241 | CLKDEV_CON_DEV_ID(NULL, "fffff800.gpio", &pioC_clk), | ||
238 | }; | 242 | }; |
239 | 243 | ||
240 | static struct clk_lookup usart_clocks_lookups[] = { | 244 | static struct clk_lookup usart_clocks_lookups[] = { |
@@ -390,10 +394,10 @@ static unsigned int at91sam9260_default_irq_priority[NR_AIC_IRQS] __initdata = { | |||
390 | 0, /* Advanced Interrupt Controller */ | 394 | 0, /* Advanced Interrupt Controller */ |
391 | }; | 395 | }; |
392 | 396 | ||
393 | struct at91_init_soc __initdata at91sam9260_soc = { | 397 | AT91_SOC_START(sam9260) |
394 | .map_io = at91sam9260_map_io, | 398 | .map_io = at91sam9260_map_io, |
395 | .default_irq_priority = at91sam9260_default_irq_priority, | 399 | .default_irq_priority = at91sam9260_default_irq_priority, |
396 | .ioremap_registers = at91sam9260_ioremap_registers, | 400 | .ioremap_registers = at91sam9260_ioremap_registers, |
397 | .register_clocks = at91sam9260_register_clocks, | 401 | .register_clocks = at91sam9260_register_clocks, |
398 | .init = at91sam9260_initialize, | 402 | .init = at91sam9260_initialize, |
399 | }; | 403 | AT91_SOC_END |
diff --git a/arch/arm/mach-at91/at91sam9261.c b/arch/arm/mach-at91/at91sam9261.c index 04295c04b3e0..4d262f346fd9 100644 --- a/arch/arm/mach-at91/at91sam9261.c +++ b/arch/arm/mach-at91/at91sam9261.c | |||
@@ -334,10 +334,10 @@ static unsigned int at91sam9261_default_irq_priority[NR_AIC_IRQS] __initdata = { | |||
334 | 0, /* Advanced Interrupt Controller */ | 334 | 0, /* Advanced Interrupt Controller */ |
335 | }; | 335 | }; |
336 | 336 | ||
337 | struct at91_init_soc __initdata at91sam9261_soc = { | 337 | AT91_SOC_START(sam9261) |
338 | .map_io = at91sam9261_map_io, | 338 | .map_io = at91sam9261_map_io, |
339 | .default_irq_priority = at91sam9261_default_irq_priority, | 339 | .default_irq_priority = at91sam9261_default_irq_priority, |
340 | .ioremap_registers = at91sam9261_ioremap_registers, | 340 | .ioremap_registers = at91sam9261_ioremap_registers, |
341 | .register_clocks = at91sam9261_register_clocks, | 341 | .register_clocks = at91sam9261_register_clocks, |
342 | .init = at91sam9261_initialize, | 342 | .init = at91sam9261_initialize, |
343 | }; | 343 | AT91_SOC_END |
diff --git a/arch/arm/mach-at91/at91sam9263.c b/arch/arm/mach-at91/at91sam9263.c index d6f9c23927c4..ed390f6fa232 100644 --- a/arch/arm/mach-at91/at91sam9263.c +++ b/arch/arm/mach-at91/at91sam9263.c | |||
@@ -211,7 +211,14 @@ static struct clk_lookup periph_clocks_lookups[] = { | |||
211 | CLKDEV_CON_DEV_ID("hclk", "a00000.ohci", &ohci_clk), | 211 | CLKDEV_CON_DEV_ID("hclk", "a00000.ohci", &ohci_clk), |
212 | CLKDEV_CON_DEV_ID("spi_clk", "fffa4000.spi", &spi0_clk), | 212 | CLKDEV_CON_DEV_ID("spi_clk", "fffa4000.spi", &spi0_clk), |
213 | CLKDEV_CON_DEV_ID("spi_clk", "fffa8000.spi", &spi1_clk), | 213 | CLKDEV_CON_DEV_ID("spi_clk", "fffa8000.spi", &spi1_clk), |
214 | CLKDEV_CON_DEV_ID("mci_clk", "fff80000.mmc", &mmc0_clk), | ||
215 | CLKDEV_CON_DEV_ID("mci_clk", "fff84000.mmc", &mmc1_clk), | ||
214 | CLKDEV_CON_DEV_ID(NULL, "fff88000.i2c", &twi_clk), | 216 | CLKDEV_CON_DEV_ID(NULL, "fff88000.i2c", &twi_clk), |
217 | CLKDEV_CON_DEV_ID(NULL, "fffff200.gpio", &pioA_clk), | ||
218 | CLKDEV_CON_DEV_ID(NULL, "fffff400.gpio", &pioB_clk), | ||
219 | CLKDEV_CON_DEV_ID(NULL, "fffff600.gpio", &pioCDE_clk), | ||
220 | CLKDEV_CON_DEV_ID(NULL, "fffff800.gpio", &pioCDE_clk), | ||
221 | CLKDEV_CON_DEV_ID(NULL, "fffffa00.gpio", &pioCDE_clk), | ||
215 | }; | 222 | }; |
216 | 223 | ||
217 | static struct clk_lookup usart_clocks_lookups[] = { | 224 | static struct clk_lookup usart_clocks_lookups[] = { |
@@ -365,10 +372,10 @@ static unsigned int at91sam9263_default_irq_priority[NR_AIC_IRQS] __initdata = { | |||
365 | 0, /* Advanced Interrupt Controller (IRQ1) */ | 372 | 0, /* Advanced Interrupt Controller (IRQ1) */ |
366 | }; | 373 | }; |
367 | 374 | ||
368 | struct at91_init_soc __initdata at91sam9263_soc = { | 375 | AT91_SOC_START(sam9263) |
369 | .map_io = at91sam9263_map_io, | 376 | .map_io = at91sam9263_map_io, |
370 | .default_irq_priority = at91sam9263_default_irq_priority, | 377 | .default_irq_priority = at91sam9263_default_irq_priority, |
371 | .ioremap_registers = at91sam9263_ioremap_registers, | 378 | .ioremap_registers = at91sam9263_ioremap_registers, |
372 | .register_clocks = at91sam9263_register_clocks, | 379 | .register_clocks = at91sam9263_register_clocks, |
373 | .init = at91sam9263_initialize, | 380 | .init = at91sam9263_initialize, |
374 | }; | 381 | AT91_SOC_END |
diff --git a/arch/arm/mach-at91/at91sam9g45.c b/arch/arm/mach-at91/at91sam9g45.c index 84af1b506d92..c5c2acc4bf22 100644 --- a/arch/arm/mach-at91/at91sam9g45.c +++ b/arch/arm/mach-at91/at91sam9g45.c | |||
@@ -256,10 +256,18 @@ static struct clk_lookup periph_clocks_lookups[] = { | |||
256 | CLKDEV_CON_DEV_ID("t0_clk", "fffd4000.timer", &tcb0_clk), | 256 | CLKDEV_CON_DEV_ID("t0_clk", "fffd4000.timer", &tcb0_clk), |
257 | CLKDEV_CON_DEV_ID("hclk", "700000.ohci", &uhphs_clk), | 257 | CLKDEV_CON_DEV_ID("hclk", "700000.ohci", &uhphs_clk), |
258 | CLKDEV_CON_DEV_ID("ehci_clk", "800000.ehci", &uhphs_clk), | 258 | CLKDEV_CON_DEV_ID("ehci_clk", "800000.ehci", &uhphs_clk), |
259 | CLKDEV_CON_DEV_ID("mci_clk", "fff80000.mmc", &mmc0_clk), | ||
260 | CLKDEV_CON_DEV_ID("mci_clk", "fffd0000.mmc", &mmc1_clk), | ||
259 | CLKDEV_CON_DEV_ID(NULL, "fff84000.i2c", &twi0_clk), | 261 | CLKDEV_CON_DEV_ID(NULL, "fff84000.i2c", &twi0_clk), |
260 | CLKDEV_CON_DEV_ID(NULL, "fff88000.i2c", &twi1_clk), | 262 | CLKDEV_CON_DEV_ID(NULL, "fff88000.i2c", &twi1_clk), |
261 | /* fake hclk clock */ | 263 | /* fake hclk clock */ |
262 | CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &uhphs_clk), | 264 | CLKDEV_CON_DEV_ID("hclk", "at91_ohci", &uhphs_clk), |
265 | CLKDEV_CON_DEV_ID(NULL, "fffff200.gpio", &pioA_clk), | ||
266 | CLKDEV_CON_DEV_ID(NULL, "fffff400.gpio", &pioB_clk), | ||
267 | CLKDEV_CON_DEV_ID(NULL, "fffff600.gpio", &pioC_clk), | ||
268 | CLKDEV_CON_DEV_ID(NULL, "fffff800.gpio", &pioDE_clk), | ||
269 | CLKDEV_CON_DEV_ID(NULL, "fffffa00.gpio", &pioDE_clk), | ||
270 | |||
263 | CLKDEV_CON_ID("pioA", &pioA_clk), | 271 | CLKDEV_CON_ID("pioA", &pioA_clk), |
264 | CLKDEV_CON_ID("pioB", &pioB_clk), | 272 | CLKDEV_CON_ID("pioB", &pioB_clk), |
265 | CLKDEV_CON_ID("pioC", &pioC_clk), | 273 | CLKDEV_CON_ID("pioC", &pioC_clk), |
@@ -409,10 +417,10 @@ static unsigned int at91sam9g45_default_irq_priority[NR_AIC_IRQS] __initdata = { | |||
409 | 0, /* Advanced Interrupt Controller (IRQ0) */ | 417 | 0, /* Advanced Interrupt Controller (IRQ0) */ |
410 | }; | 418 | }; |
411 | 419 | ||
412 | struct at91_init_soc __initdata at91sam9g45_soc = { | 420 | AT91_SOC_START(sam9g45) |
413 | .map_io = at91sam9g45_map_io, | 421 | .map_io = at91sam9g45_map_io, |
414 | .default_irq_priority = at91sam9g45_default_irq_priority, | 422 | .default_irq_priority = at91sam9g45_default_irq_priority, |
415 | .ioremap_registers = at91sam9g45_ioremap_registers, | 423 | .ioremap_registers = at91sam9g45_ioremap_registers, |
416 | .register_clocks = at91sam9g45_register_clocks, | 424 | .register_clocks = at91sam9g45_register_clocks, |
417 | .init = at91sam9g45_initialize, | 425 | .init = at91sam9g45_initialize, |
418 | }; | 426 | AT91_SOC_END |
diff --git a/arch/arm/mach-at91/at91sam9n12.c b/arch/arm/mach-at91/at91sam9n12.c index 732d3d3f4ec5..70b3a99244ab 100644 --- a/arch/arm/mach-at91/at91sam9n12.c +++ b/arch/arm/mach-at91/at91sam9n12.c | |||
@@ -168,13 +168,14 @@ static struct clk_lookup periph_clocks_lookups[] = { | |||
168 | CLKDEV_CON_DEV_ID("usart", "f8028000.serial", &usart3_clk), | 168 | CLKDEV_CON_DEV_ID("usart", "f8028000.serial", &usart3_clk), |
169 | CLKDEV_CON_DEV_ID("t0_clk", "f8008000.timer", &tcb_clk), | 169 | CLKDEV_CON_DEV_ID("t0_clk", "f8008000.timer", &tcb_clk), |
170 | CLKDEV_CON_DEV_ID("t0_clk", "f800c000.timer", &tcb_clk), | 170 | CLKDEV_CON_DEV_ID("t0_clk", "f800c000.timer", &tcb_clk), |
171 | CLKDEV_CON_DEV_ID("mci_clk", "f0008000.mmc", &mmc_clk), | ||
171 | CLKDEV_CON_DEV_ID("dma_clk", "ffffec00.dma-controller", &dma_clk), | 172 | CLKDEV_CON_DEV_ID("dma_clk", "ffffec00.dma-controller", &dma_clk), |
172 | CLKDEV_CON_DEV_ID(NULL, "f8010000.i2c", &twi0_clk), | 173 | CLKDEV_CON_DEV_ID(NULL, "f8010000.i2c", &twi0_clk), |
173 | CLKDEV_CON_DEV_ID(NULL, "f8014000.i2c", &twi1_clk), | 174 | CLKDEV_CON_DEV_ID(NULL, "f8014000.i2c", &twi1_clk), |
174 | CLKDEV_CON_ID("pioA", &pioAB_clk), | 175 | CLKDEV_CON_DEV_ID(NULL, "fffff400.gpio", &pioAB_clk), |
175 | CLKDEV_CON_ID("pioB", &pioAB_clk), | 176 | CLKDEV_CON_DEV_ID(NULL, "fffff600.gpio", &pioAB_clk), |
176 | CLKDEV_CON_ID("pioC", &pioCD_clk), | 177 | CLKDEV_CON_DEV_ID(NULL, "fffff800.gpio", &pioCD_clk), |
177 | CLKDEV_CON_ID("pioD", &pioCD_clk), | 178 | CLKDEV_CON_DEV_ID(NULL, "fffffa00.gpio", &pioCD_clk), |
178 | /* additional fake clock for macb_hclk */ | 179 | /* additional fake clock for macb_hclk */ |
179 | CLKDEV_CON_DEV_ID("hclk", "500000.ohci", &uhp_clk), | 180 | CLKDEV_CON_DEV_ID("hclk", "500000.ohci", &uhp_clk), |
180 | CLKDEV_CON_DEV_ID("ohci_clk", "500000.ohci", &uhp_clk), | 181 | CLKDEV_CON_DEV_ID("ohci_clk", "500000.ohci", &uhp_clk), |
@@ -223,13 +224,10 @@ static void __init at91sam9n12_map_io(void) | |||
223 | void __init at91sam9n12_initialize(void) | 224 | void __init at91sam9n12_initialize(void) |
224 | { | 225 | { |
225 | at91_extern_irq = (1 << AT91SAM9N12_ID_IRQ0); | 226 | at91_extern_irq = (1 << AT91SAM9N12_ID_IRQ0); |
226 | |||
227 | /* Register GPIO subsystem (using DT) */ | ||
228 | at91_gpio_init(NULL, 0); | ||
229 | } | 227 | } |
230 | 228 | ||
231 | struct at91_init_soc __initdata at91sam9n12_soc = { | 229 | AT91_SOC_START(sam9n12) |
232 | .map_io = at91sam9n12_map_io, | 230 | .map_io = at91sam9n12_map_io, |
233 | .register_clocks = at91sam9n12_register_clocks, | 231 | .register_clocks = at91sam9n12_register_clocks, |
234 | .init = at91sam9n12_initialize, | 232 | .init = at91sam9n12_initialize, |
235 | }; | 233 | AT91_SOC_END |
diff --git a/arch/arm/mach-at91/at91sam9rl.c b/arch/arm/mach-at91/at91sam9rl.c index 72e908412222..cbe72e44c13f 100644 --- a/arch/arm/mach-at91/at91sam9rl.c +++ b/arch/arm/mach-at91/at91sam9rl.c | |||
@@ -338,10 +338,10 @@ static unsigned int at91sam9rl_default_irq_priority[NR_AIC_IRQS] __initdata = { | |||
338 | 0, /* Advanced Interrupt Controller */ | 338 | 0, /* Advanced Interrupt Controller */ |
339 | }; | 339 | }; |
340 | 340 | ||
341 | struct at91_init_soc __initdata at91sam9rl_soc = { | 341 | AT91_SOC_START(sam9rl) |
342 | .map_io = at91sam9rl_map_io, | 342 | .map_io = at91sam9rl_map_io, |
343 | .default_irq_priority = at91sam9rl_default_irq_priority, | 343 | .default_irq_priority = at91sam9rl_default_irq_priority, |
344 | .ioremap_registers = at91sam9rl_ioremap_registers, | 344 | .ioremap_registers = at91sam9rl_ioremap_registers, |
345 | .register_clocks = at91sam9rl_register_clocks, | 345 | .register_clocks = at91sam9rl_register_clocks, |
346 | .init = at91sam9rl_initialize, | 346 | .init = at91sam9rl_initialize, |
347 | }; | 347 | AT91_SOC_END |
diff --git a/arch/arm/mach-at91/at91sam9x5.c b/arch/arm/mach-at91/at91sam9x5.c index e5035380dcbc..3c729f0e2d3c 100644 --- a/arch/arm/mach-at91/at91sam9x5.c +++ b/arch/arm/mach-at91/at91sam9x5.c | |||
@@ -229,15 +229,17 @@ static struct clk_lookup periph_clocks_lookups[] = { | |||
229 | CLKDEV_CON_DEV_ID("usart", "f8028000.serial", &usart3_clk), | 229 | CLKDEV_CON_DEV_ID("usart", "f8028000.serial", &usart3_clk), |
230 | CLKDEV_CON_DEV_ID("t0_clk", "f8008000.timer", &tcb0_clk), | 230 | CLKDEV_CON_DEV_ID("t0_clk", "f8008000.timer", &tcb0_clk), |
231 | CLKDEV_CON_DEV_ID("t0_clk", "f800c000.timer", &tcb0_clk), | 231 | CLKDEV_CON_DEV_ID("t0_clk", "f800c000.timer", &tcb0_clk), |
232 | CLKDEV_CON_DEV_ID("mci_clk", "f0008000.mmc", &mmc0_clk), | ||
233 | CLKDEV_CON_DEV_ID("mci_clk", "f000c000.mmc", &mmc1_clk), | ||
232 | CLKDEV_CON_DEV_ID("dma_clk", "ffffec00.dma-controller", &dma0_clk), | 234 | CLKDEV_CON_DEV_ID("dma_clk", "ffffec00.dma-controller", &dma0_clk), |
233 | CLKDEV_CON_DEV_ID("dma_clk", "ffffee00.dma-controller", &dma1_clk), | 235 | CLKDEV_CON_DEV_ID("dma_clk", "ffffee00.dma-controller", &dma1_clk), |
234 | CLKDEV_CON_DEV_ID(NULL, "f8010000.i2c", &twi0_clk), | 236 | CLKDEV_CON_DEV_ID(NULL, "f8010000.i2c", &twi0_clk), |
235 | CLKDEV_CON_DEV_ID(NULL, "f8014000.i2c", &twi1_clk), | 237 | CLKDEV_CON_DEV_ID(NULL, "f8014000.i2c", &twi1_clk), |
236 | CLKDEV_CON_DEV_ID(NULL, "f8018000.i2c", &twi2_clk), | 238 | CLKDEV_CON_DEV_ID(NULL, "f8018000.i2c", &twi2_clk), |
237 | CLKDEV_CON_ID("pioA", &pioAB_clk), | 239 | CLKDEV_CON_DEV_ID(NULL, "fffff400.gpio", &pioAB_clk), |
238 | CLKDEV_CON_ID("pioB", &pioAB_clk), | 240 | CLKDEV_CON_DEV_ID(NULL, "fffff600.gpio", &pioAB_clk), |
239 | CLKDEV_CON_ID("pioC", &pioCD_clk), | 241 | CLKDEV_CON_DEV_ID(NULL, "fffff800.gpio", &pioCD_clk), |
240 | CLKDEV_CON_ID("pioD", &pioCD_clk), | 242 | CLKDEV_CON_DEV_ID(NULL, "fffffa00.gpio", &pioCD_clk), |
241 | /* additional fake clock for macb_hclk */ | 243 | /* additional fake clock for macb_hclk */ |
242 | CLKDEV_CON_DEV_ID("hclk", "f802c000.ethernet", &macb0_clk), | 244 | CLKDEV_CON_DEV_ID("hclk", "f802c000.ethernet", &macb0_clk), |
243 | CLKDEV_CON_DEV_ID("hclk", "f8030000.ethernet", &macb1_clk), | 245 | CLKDEV_CON_DEV_ID("hclk", "f8030000.ethernet", &macb1_clk), |
@@ -313,18 +315,11 @@ static void __init at91sam9x5_map_io(void) | |||
313 | at91_init_sram(0, AT91SAM9X5_SRAM_BASE, AT91SAM9X5_SRAM_SIZE); | 315 | at91_init_sram(0, AT91SAM9X5_SRAM_BASE, AT91SAM9X5_SRAM_SIZE); |
314 | } | 316 | } |
315 | 317 | ||
316 | void __init at91sam9x5_initialize(void) | ||
317 | { | ||
318 | /* Register GPIO subsystem (using DT) */ | ||
319 | at91_gpio_init(NULL, 0); | ||
320 | } | ||
321 | |||
322 | /* -------------------------------------------------------------------- | 318 | /* -------------------------------------------------------------------- |
323 | * Interrupt initialization | 319 | * Interrupt initialization |
324 | * -------------------------------------------------------------------- */ | 320 | * -------------------------------------------------------------------- */ |
325 | 321 | ||
326 | struct at91_init_soc __initdata at91sam9x5_soc = { | 322 | AT91_SOC_START(sam9x5) |
327 | .map_io = at91sam9x5_map_io, | 323 | .map_io = at91sam9x5_map_io, |
328 | .register_clocks = at91sam9x5_register_clocks, | 324 | .register_clocks = at91sam9x5_register_clocks, |
329 | .init = at91sam9x5_initialize, | 325 | AT91_SOC_END |
330 | }; | ||
diff --git a/arch/arm/mach-at91/board-dt.c b/arch/arm/mach-at91/board-dt.c index e8f45c4e0ea8..3b6a94820fa0 100644 --- a/arch/arm/mach-at91/board-dt.c +++ b/arch/arm/mach-at91/board-dt.c | |||
@@ -30,8 +30,6 @@ | |||
30 | static const struct of_device_id irq_of_match[] __initconst = { | 30 | static const struct of_device_id irq_of_match[] __initconst = { |
31 | 31 | ||
32 | { .compatible = "atmel,at91rm9200-aic", .data = at91_aic_of_init }, | 32 | { .compatible = "atmel,at91rm9200-aic", .data = at91_aic_of_init }, |
33 | { .compatible = "atmel,at91rm9200-gpio", .data = at91_gpio_of_irq_setup }, | ||
34 | { .compatible = "atmel,at91sam9x5-gpio", .data = at91_gpio_of_irq_setup }, | ||
35 | { /*sentinel*/ } | 33 | { /*sentinel*/ } |
36 | }; | 34 | }; |
37 | 35 | ||
diff --git a/arch/arm/mach-at91/board-rm9200-dt.c b/arch/arm/mach-at91/board-rm9200-dt.c new file mode 100644 index 000000000000..5f9ce3da3fde --- /dev/null +++ b/arch/arm/mach-at91/board-rm9200-dt.c | |||
@@ -0,0 +1,57 @@ | |||
1 | /* | ||
2 | * Setup code for AT91RM9200 Evaluation Kits with Device Tree support | ||
3 | * | ||
4 | * Copyright (C) 2011 Atmel, | ||
5 | * 2011 Nicolas Ferre <nicolas.ferre@atmel.com> | ||
6 | * 2012 Joachim Eastwood <manabian@gmail.com> | ||
7 | * | ||
8 | * Licensed under GPLv2 or later. | ||
9 | */ | ||
10 | |||
11 | #include <linux/types.h> | ||
12 | #include <linux/init.h> | ||
13 | #include <linux/module.h> | ||
14 | #include <linux/gpio.h> | ||
15 | #include <linux/of.h> | ||
16 | #include <linux/of_irq.h> | ||
17 | #include <linux/of_platform.h> | ||
18 | |||
19 | #include <asm/setup.h> | ||
20 | #include <asm/irq.h> | ||
21 | #include <asm/mach/arch.h> | ||
22 | #include <asm/mach/map.h> | ||
23 | #include <asm/mach/irq.h> | ||
24 | |||
25 | #include "at91_aic.h" | ||
26 | #include "generic.h" | ||
27 | |||
28 | |||
29 | static const struct of_device_id irq_of_match[] __initconst = { | ||
30 | { .compatible = "atmel,at91rm9200-aic", .data = at91_aic_of_init }, | ||
31 | { /*sentinel*/ } | ||
32 | }; | ||
33 | |||
34 | static void __init at91rm9200_dt_init_irq(void) | ||
35 | { | ||
36 | of_irq_init(irq_of_match); | ||
37 | } | ||
38 | |||
39 | static void __init at91rm9200_dt_device_init(void) | ||
40 | { | ||
41 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | ||
42 | } | ||
43 | |||
44 | static const char *at91rm9200_dt_board_compat[] __initdata = { | ||
45 | "atmel,at91rm9200", | ||
46 | NULL | ||
47 | }; | ||
48 | |||
49 | DT_MACHINE_START(at91rm9200_dt, "Atmel AT91RM9200 (Device Tree)") | ||
50 | .timer = &at91rm9200_timer, | ||
51 | .map_io = at91_map_io, | ||
52 | .handle_irq = at91_aic_handle_irq, | ||
53 | .init_early = at91rm9200_dt_initialize, | ||
54 | .init_irq = at91rm9200_dt_init_irq, | ||
55 | .init_machine = at91rm9200_dt_device_init, | ||
56 | .dt_compat = at91rm9200_dt_board_compat, | ||
57 | MACHINE_END | ||
diff --git a/arch/arm/mach-at91/generic.h b/arch/arm/mach-at91/generic.h index b62f560e6c75..fc593d615e7d 100644 --- a/arch/arm/mach-at91/generic.h +++ b/arch/arm/mach-at91/generic.h | |||
@@ -20,6 +20,7 @@ extern void __init at91_init_sram(int bank, unsigned long base, | |||
20 | extern void __init at91rm9200_set_type(int type); | 20 | extern void __init at91rm9200_set_type(int type); |
21 | extern void __init at91_initialize(unsigned long main_clock); | 21 | extern void __init at91_initialize(unsigned long main_clock); |
22 | extern void __init at91x40_initialize(unsigned long main_clock); | 22 | extern void __init at91x40_initialize(unsigned long main_clock); |
23 | extern void __init at91rm9200_dt_initialize(void); | ||
23 | extern void __init at91_dt_initialize(void); | 24 | extern void __init at91_dt_initialize(void); |
24 | 25 | ||
25 | /* Interrupts */ | 26 | /* Interrupts */ |
diff --git a/arch/arm/mach-at91/gpio.c b/arch/arm/mach-at91/gpio.c index be42cf0e74bd..c5d7e1e9d757 100644 --- a/arch/arm/mach-at91/gpio.c +++ b/arch/arm/mach-at91/gpio.c | |||
@@ -23,8 +23,6 @@ | |||
23 | #include <linux/io.h> | 23 | #include <linux/io.h> |
24 | #include <linux/irqdomain.h> | 24 | #include <linux/irqdomain.h> |
25 | #include <linux/of_address.h> | 25 | #include <linux/of_address.h> |
26 | #include <linux/of_irq.h> | ||
27 | #include <linux/of_gpio.h> | ||
28 | 26 | ||
29 | #include <asm/mach/irq.h> | 27 | #include <asm/mach/irq.h> |
30 | 28 | ||
@@ -33,6 +31,8 @@ | |||
33 | 31 | ||
34 | #include "generic.h" | 32 | #include "generic.h" |
35 | 33 | ||
34 | #define MAX_NB_GPIO_PER_BANK 32 | ||
35 | |||
36 | struct at91_gpio_chip { | 36 | struct at91_gpio_chip { |
37 | struct gpio_chip chip; | 37 | struct gpio_chip chip; |
38 | struct at91_gpio_chip *next; /* Bank sharing same clock */ | 38 | struct at91_gpio_chip *next; /* Bank sharing same clock */ |
@@ -46,6 +46,7 @@ struct at91_gpio_chip { | |||
46 | 46 | ||
47 | #define to_at91_gpio_chip(c) container_of(c, struct at91_gpio_chip, chip) | 47 | #define to_at91_gpio_chip(c) container_of(c, struct at91_gpio_chip, chip) |
48 | 48 | ||
49 | static int at91_gpiolib_request(struct gpio_chip *chip, unsigned offset); | ||
49 | static void at91_gpiolib_dbg_show(struct seq_file *s, struct gpio_chip *chip); | 50 | static void at91_gpiolib_dbg_show(struct seq_file *s, struct gpio_chip *chip); |
50 | static void at91_gpiolib_set(struct gpio_chip *chip, unsigned offset, int val); | 51 | static void at91_gpiolib_set(struct gpio_chip *chip, unsigned offset, int val); |
51 | static int at91_gpiolib_get(struct gpio_chip *chip, unsigned offset); | 52 | static int at91_gpiolib_get(struct gpio_chip *chip, unsigned offset); |
@@ -55,26 +56,27 @@ static int at91_gpiolib_direction_input(struct gpio_chip *chip, | |||
55 | unsigned offset); | 56 | unsigned offset); |
56 | static int at91_gpiolib_to_irq(struct gpio_chip *chip, unsigned offset); | 57 | static int at91_gpiolib_to_irq(struct gpio_chip *chip, unsigned offset); |
57 | 58 | ||
58 | #define AT91_GPIO_CHIP(name, nr_gpio) \ | 59 | #define AT91_GPIO_CHIP(name) \ |
59 | { \ | 60 | { \ |
60 | .chip = { \ | 61 | .chip = { \ |
61 | .label = name, \ | 62 | .label = name, \ |
63 | .request = at91_gpiolib_request, \ | ||
62 | .direction_input = at91_gpiolib_direction_input, \ | 64 | .direction_input = at91_gpiolib_direction_input, \ |
63 | .direction_output = at91_gpiolib_direction_output, \ | 65 | .direction_output = at91_gpiolib_direction_output, \ |
64 | .get = at91_gpiolib_get, \ | 66 | .get = at91_gpiolib_get, \ |
65 | .set = at91_gpiolib_set, \ | 67 | .set = at91_gpiolib_set, \ |
66 | .dbg_show = at91_gpiolib_dbg_show, \ | 68 | .dbg_show = at91_gpiolib_dbg_show, \ |
67 | .to_irq = at91_gpiolib_to_irq, \ | 69 | .to_irq = at91_gpiolib_to_irq, \ |
68 | .ngpio = nr_gpio, \ | 70 | .ngpio = MAX_NB_GPIO_PER_BANK, \ |
69 | }, \ | 71 | }, \ |
70 | } | 72 | } |
71 | 73 | ||
72 | static struct at91_gpio_chip gpio_chip[] = { | 74 | static struct at91_gpio_chip gpio_chip[] = { |
73 | AT91_GPIO_CHIP("pioA", 32), | 75 | AT91_GPIO_CHIP("pioA"), |
74 | AT91_GPIO_CHIP("pioB", 32), | 76 | AT91_GPIO_CHIP("pioB"), |
75 | AT91_GPIO_CHIP("pioC", 32), | 77 | AT91_GPIO_CHIP("pioC"), |
76 | AT91_GPIO_CHIP("pioD", 32), | 78 | AT91_GPIO_CHIP("pioD"), |
77 | AT91_GPIO_CHIP("pioE", 32), | 79 | AT91_GPIO_CHIP("pioE"), |
78 | }; | 80 | }; |
79 | 81 | ||
80 | static int gpio_banks; | 82 | static int gpio_banks; |
@@ -89,7 +91,7 @@ static unsigned long at91_gpio_caps; | |||
89 | 91 | ||
90 | static inline void __iomem *pin_to_controller(unsigned pin) | 92 | static inline void __iomem *pin_to_controller(unsigned pin) |
91 | { | 93 | { |
92 | pin /= 32; | 94 | pin /= MAX_NB_GPIO_PER_BANK; |
93 | if (likely(pin < gpio_banks)) | 95 | if (likely(pin < gpio_banks)) |
94 | return gpio_chip[pin].regbase; | 96 | return gpio_chip[pin].regbase; |
95 | 97 | ||
@@ -98,7 +100,7 @@ static inline void __iomem *pin_to_controller(unsigned pin) | |||
98 | 100 | ||
99 | static inline unsigned pin_to_mask(unsigned pin) | 101 | static inline unsigned pin_to_mask(unsigned pin) |
100 | { | 102 | { |
101 | return 1 << (pin % 32); | 103 | return 1 << (pin % MAX_NB_GPIO_PER_BANK); |
102 | } | 104 | } |
103 | 105 | ||
104 | 106 | ||
@@ -713,80 +715,6 @@ postcore_initcall(at91_gpio_debugfs_init); | |||
713 | */ | 715 | */ |
714 | static struct lock_class_key gpio_lock_class; | 716 | static struct lock_class_key gpio_lock_class; |
715 | 717 | ||
716 | #if defined(CONFIG_OF) | ||
717 | static int at91_gpio_irq_map(struct irq_domain *h, unsigned int virq, | ||
718 | irq_hw_number_t hw) | ||
719 | { | ||
720 | struct at91_gpio_chip *at91_gpio = h->host_data; | ||
721 | |||
722 | irq_set_lockdep_class(virq, &gpio_lock_class); | ||
723 | |||
724 | /* | ||
725 | * Can use the "simple" and not "edge" handler since it's | ||
726 | * shorter, and the AIC handles interrupts sanely. | ||
727 | */ | ||
728 | irq_set_chip_and_handler(virq, &gpio_irqchip, | ||
729 | handle_simple_irq); | ||
730 | set_irq_flags(virq, IRQF_VALID); | ||
731 | irq_set_chip_data(virq, at91_gpio); | ||
732 | |||
733 | return 0; | ||
734 | } | ||
735 | |||
736 | static struct irq_domain_ops at91_gpio_ops = { | ||
737 | .map = at91_gpio_irq_map, | ||
738 | .xlate = irq_domain_xlate_twocell, | ||
739 | }; | ||
740 | |||
741 | int __init at91_gpio_of_irq_setup(struct device_node *node, | ||
742 | struct device_node *parent) | ||
743 | { | ||
744 | struct at91_gpio_chip *prev = NULL; | ||
745 | int alias_idx = of_alias_get_id(node, "gpio"); | ||
746 | struct at91_gpio_chip *at91_gpio = &gpio_chip[alias_idx]; | ||
747 | |||
748 | /* Setup proper .irq_set_type function */ | ||
749 | if (has_pio3()) | ||
750 | gpio_irqchip.irq_set_type = alt_gpio_irq_type; | ||
751 | else | ||
752 | gpio_irqchip.irq_set_type = gpio_irq_type; | ||
753 | |||
754 | /* Disable irqs of this PIO controller */ | ||
755 | __raw_writel(~0, at91_gpio->regbase + PIO_IDR); | ||
756 | |||
757 | /* Setup irq domain */ | ||
758 | at91_gpio->domain = irq_domain_add_linear(node, at91_gpio->chip.ngpio, | ||
759 | &at91_gpio_ops, at91_gpio); | ||
760 | if (!at91_gpio->domain) | ||
761 | panic("at91_gpio.%d: couldn't allocate irq domain (DT).\n", | ||
762 | at91_gpio->pioc_idx); | ||
763 | |||
764 | /* Setup chained handler */ | ||
765 | if (at91_gpio->pioc_idx) | ||
766 | prev = &gpio_chip[at91_gpio->pioc_idx - 1]; | ||
767 | |||
768 | /* The toplevel handler handles one bank of GPIOs, except | ||
769 | * on some SoC it can handles up to three... | ||
770 | * We only set up the handler for the first of the list. | ||
771 | */ | ||
772 | if (prev && prev->next == at91_gpio) | ||
773 | return 0; | ||
774 | |||
775 | at91_gpio->pioc_virq = irq_create_mapping(irq_find_host(parent), | ||
776 | at91_gpio->pioc_hwirq); | ||
777 | irq_set_chip_data(at91_gpio->pioc_virq, at91_gpio); | ||
778 | irq_set_chained_handler(at91_gpio->pioc_virq, gpio_irq_handler); | ||
779 | |||
780 | return 0; | ||
781 | } | ||
782 | #else | ||
783 | int __init at91_gpio_of_irq_setup(struct device_node *node, | ||
784 | struct device_node *parent) | ||
785 | { | ||
786 | return -EINVAL; | ||
787 | } | ||
788 | #endif | ||
789 | |||
790 | /* | 718 | /* |
791 | * irqdomain initialization: pile up irqdomains on top of AIC range | 719 | * irqdomain initialization: pile up irqdomains on top of AIC range |
792 | */ | 720 | */ |
@@ -862,6 +790,16 @@ void __init at91_gpio_irq_setup(void) | |||
862 | } | 790 | } |
863 | 791 | ||
864 | /* gpiolib support */ | 792 | /* gpiolib support */ |
793 | static int at91_gpiolib_request(struct gpio_chip *chip, unsigned offset) | ||
794 | { | ||
795 | struct at91_gpio_chip *at91_gpio = to_at91_gpio_chip(chip); | ||
796 | void __iomem *pio = at91_gpio->regbase; | ||
797 | unsigned mask = 1 << offset; | ||
798 | |||
799 | __raw_writel(mask, pio + PIO_PER); | ||
800 | return 0; | ||
801 | } | ||
802 | |||
865 | static int at91_gpiolib_direction_input(struct gpio_chip *chip, | 803 | static int at91_gpiolib_direction_input(struct gpio_chip *chip, |
866 | unsigned offset) | 804 | unsigned offset) |
867 | { | 805 | { |
@@ -975,81 +913,11 @@ err: | |||
975 | return -EINVAL; | 913 | return -EINVAL; |
976 | } | 914 | } |
977 | 915 | ||
978 | #ifdef CONFIG_OF_GPIO | ||
979 | static void __init of_at91_gpio_init_one(struct device_node *np) | ||
980 | { | ||
981 | int alias_idx; | ||
982 | struct at91_gpio_chip *at91_gpio; | ||
983 | |||
984 | if (!np) | ||
985 | return; | ||
986 | |||
987 | alias_idx = of_alias_get_id(np, "gpio"); | ||
988 | if (alias_idx >= MAX_GPIO_BANKS) { | ||
989 | pr_err("at91_gpio, failed alias idx(%d) > MAX_GPIO_BANKS(%d), ignoring.\n", | ||
990 | alias_idx, MAX_GPIO_BANKS); | ||
991 | return; | ||
992 | } | ||
993 | |||
994 | at91_gpio = &gpio_chip[alias_idx]; | ||
995 | at91_gpio->chip.base = alias_idx * at91_gpio->chip.ngpio; | ||
996 | |||
997 | at91_gpio->regbase = of_iomap(np, 0); | ||
998 | if (!at91_gpio->regbase) { | ||
999 | pr_err("at91_gpio.%d, failed to map registers, ignoring.\n", | ||
1000 | alias_idx); | ||
1001 | return; | ||
1002 | } | ||
1003 | |||
1004 | /* Get the interrupts property */ | ||
1005 | if (of_property_read_u32(np, "interrupts", &at91_gpio->pioc_hwirq)) { | ||
1006 | pr_err("at91_gpio.%d, failed to get interrupts property, ignoring.\n", | ||
1007 | alias_idx); | ||
1008 | goto ioremap_err; | ||
1009 | } | ||
1010 | |||
1011 | /* Get capabilities from compatibility property */ | ||
1012 | if (of_device_is_compatible(np, "atmel,at91sam9x5-gpio")) | ||
1013 | at91_gpio_caps |= AT91_GPIO_CAP_PIO3; | ||
1014 | |||
1015 | /* Setup clock */ | ||
1016 | if (at91_gpio_setup_clk(alias_idx)) | ||
1017 | goto ioremap_err; | ||
1018 | |||
1019 | at91_gpio->chip.of_node = np; | ||
1020 | gpio_banks = max(gpio_banks, alias_idx + 1); | ||
1021 | at91_gpio->pioc_idx = alias_idx; | ||
1022 | return; | ||
1023 | |||
1024 | ioremap_err: | ||
1025 | iounmap(at91_gpio->regbase); | ||
1026 | } | ||
1027 | |||
1028 | static int __init of_at91_gpio_init(void) | ||
1029 | { | ||
1030 | struct device_node *np = NULL; | ||
1031 | |||
1032 | /* | ||
1033 | * This isn't ideal, but it gets things hooked up until this | ||
1034 | * driver is converted into a platform_device | ||
1035 | */ | ||
1036 | for_each_compatible_node(np, NULL, "atmel,at91rm9200-gpio") | ||
1037 | of_at91_gpio_init_one(np); | ||
1038 | |||
1039 | return gpio_banks > 0 ? 0 : -EINVAL; | ||
1040 | } | ||
1041 | #else | ||
1042 | static int __init of_at91_gpio_init(void) | ||
1043 | { | ||
1044 | return -EINVAL; | ||
1045 | } | ||
1046 | #endif | ||
1047 | |||
1048 | static void __init at91_gpio_init_one(int idx, u32 regbase, int pioc_hwirq) | 916 | static void __init at91_gpio_init_one(int idx, u32 regbase, int pioc_hwirq) |
1049 | { | 917 | { |
1050 | struct at91_gpio_chip *at91_gpio = &gpio_chip[idx]; | 918 | struct at91_gpio_chip *at91_gpio = &gpio_chip[idx]; |
1051 | 919 | ||
1052 | at91_gpio->chip.base = idx * at91_gpio->chip.ngpio; | 920 | at91_gpio->chip.base = idx * MAX_NB_GPIO_PER_BANK; |
1053 | at91_gpio->pioc_hwirq = pioc_hwirq; | 921 | at91_gpio->pioc_hwirq = pioc_hwirq; |
1054 | at91_gpio->pioc_idx = idx; | 922 | at91_gpio->pioc_idx = idx; |
1055 | 923 | ||
@@ -1079,11 +947,11 @@ void __init at91_gpio_init(struct at91_gpio_bank *data, int nr_banks) | |||
1079 | 947 | ||
1080 | BUG_ON(nr_banks > MAX_GPIO_BANKS); | 948 | BUG_ON(nr_banks > MAX_GPIO_BANKS); |
1081 | 949 | ||
1082 | if (of_at91_gpio_init() < 0) { | 950 | if (of_have_populated_dt()) |
1083 | /* No GPIO controller found in device tree */ | 951 | return; |
1084 | for (i = 0; i < nr_banks; i++) | 952 | |
1085 | at91_gpio_init_one(i, data[i].regbase, data[i].id); | 953 | for (i = 0; i < nr_banks; i++) |
1086 | } | 954 | at91_gpio_init_one(i, data[i].regbase, data[i].id); |
1087 | 955 | ||
1088 | for (i = 0; i < gpio_banks; i++) { | 956 | for (i = 0; i < gpio_banks; i++) { |
1089 | at91_gpio = &gpio_chip[i]; | 957 | at91_gpio = &gpio_chip[i]; |
diff --git a/arch/arm/mach-at91/include/mach/board.h b/arch/arm/mach-at91/include/mach/board.h index c55a4364ffb4..a0d92a960f46 100644 --- a/arch/arm/mach-at91/include/mach/board.h +++ b/arch/arm/mach-at91/include/mach/board.h | |||
@@ -70,16 +70,6 @@ struct at91_cf_data { | |||
70 | extern void __init at91_add_device_cf(struct at91_cf_data *data); | 70 | extern void __init at91_add_device_cf(struct at91_cf_data *data); |
71 | 71 | ||
72 | /* MMC / SD */ | 72 | /* MMC / SD */ |
73 | /* at91_mci platform config */ | ||
74 | struct at91_mmc_data { | ||
75 | int det_pin; /* card detect IRQ */ | ||
76 | unsigned slot_b:1; /* uses Slot B */ | ||
77 | unsigned wire4:1; /* (SD) supports DAT0..DAT3 */ | ||
78 | int wp_pin; /* (SD) writeprotect detect */ | ||
79 | int vcc_pin; /* power switching (high == on) */ | ||
80 | }; | ||
81 | extern void __init at91_add_device_mmc(short mmc_id, struct at91_mmc_data *data); | ||
82 | |||
83 | /* atmel-mci platform config */ | 73 | /* atmel-mci platform config */ |
84 | extern void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data); | 74 | extern void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *data); |
85 | 75 | ||
diff --git a/arch/arm/mach-at91/setup.c b/arch/arm/mach-at91/setup.c index 0b32c81730a5..19cdd0b5b391 100644 --- a/arch/arm/mach-at91/setup.c +++ b/arch/arm/mach-at91/setup.c | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <linux/mm.h> | 10 | #include <linux/mm.h> |
11 | #include <linux/pm.h> | 11 | #include <linux/pm.h> |
12 | #include <linux/of_address.h> | 12 | #include <linux/of_address.h> |
13 | #include <linux/pinctrl/machine.h> | ||
13 | 14 | ||
14 | #include <asm/system_misc.h> | 15 | #include <asm/system_misc.h> |
15 | #include <asm/mach/map.h> | 16 | #include <asm/mach/map.h> |
@@ -338,6 +339,7 @@ static void at91_dt_rstc(void) | |||
338 | } | 339 | } |
339 | 340 | ||
340 | static struct of_device_id ramc_ids[] = { | 341 | static struct of_device_id ramc_ids[] = { |
342 | { .compatible = "atmel,at91rm9200-sdramc" }, | ||
341 | { .compatible = "atmel,at91sam9260-sdramc" }, | 343 | { .compatible = "atmel,at91sam9260-sdramc" }, |
342 | { .compatible = "atmel,at91sam9g45-ddramc" }, | 344 | { .compatible = "atmel,at91sam9g45-ddramc" }, |
343 | { /*sentinel*/ } | 345 | { /*sentinel*/ } |
@@ -436,6 +438,19 @@ end: | |||
436 | of_node_put(np); | 438 | of_node_put(np); |
437 | } | 439 | } |
438 | 440 | ||
441 | void __init at91rm9200_dt_initialize(void) | ||
442 | { | ||
443 | at91_dt_ramc(); | ||
444 | |||
445 | /* Init clock subsystem */ | ||
446 | at91_dt_clock_init(); | ||
447 | |||
448 | /* Register the processor-specific clocks */ | ||
449 | at91_boot_soc.register_clocks(); | ||
450 | |||
451 | at91_boot_soc.init(); | ||
452 | } | ||
453 | |||
439 | void __init at91_dt_initialize(void) | 454 | void __init at91_dt_initialize(void) |
440 | { | 455 | { |
441 | at91_dt_rstc(); | 456 | at91_dt_rstc(); |
@@ -448,7 +463,8 @@ void __init at91_dt_initialize(void) | |||
448 | /* Register the processor-specific clocks */ | 463 | /* Register the processor-specific clocks */ |
449 | at91_boot_soc.register_clocks(); | 464 | at91_boot_soc.register_clocks(); |
450 | 465 | ||
451 | at91_boot_soc.init(); | 466 | if (at91_boot_soc.init) |
467 | at91_boot_soc.init(); | ||
452 | } | 468 | } |
453 | #endif | 469 | #endif |
454 | 470 | ||
@@ -463,4 +479,6 @@ void __init at91_initialize(unsigned long main_clock) | |||
463 | at91_boot_soc.register_clocks(); | 479 | at91_boot_soc.register_clocks(); |
464 | 480 | ||
465 | at91_boot_soc.init(); | 481 | at91_boot_soc.init(); |
482 | |||
483 | pinctrl_provide_dummies(); | ||
466 | } | 484 | } |
diff --git a/arch/arm/mach-at91/soc.h b/arch/arm/mach-at91/soc.h index a9cfeb153719..9c6d3d4f9a23 100644 --- a/arch/arm/mach-at91/soc.h +++ b/arch/arm/mach-at91/soc.h | |||
@@ -5,6 +5,7 @@ | |||
5 | */ | 5 | */ |
6 | 6 | ||
7 | struct at91_init_soc { | 7 | struct at91_init_soc { |
8 | int builtin; | ||
8 | unsigned int *default_irq_priority; | 9 | unsigned int *default_irq_priority; |
9 | void (*map_io)(void); | 10 | void (*map_io)(void); |
10 | void (*ioremap_registers)(void); | 11 | void (*ioremap_registers)(void); |
@@ -22,9 +23,18 @@ extern struct at91_init_soc at91sam9rl_soc; | |||
22 | extern struct at91_init_soc at91sam9x5_soc; | 23 | extern struct at91_init_soc at91sam9x5_soc; |
23 | extern struct at91_init_soc at91sam9n12_soc; | 24 | extern struct at91_init_soc at91sam9n12_soc; |
24 | 25 | ||
26 | #define AT91_SOC_START(_name) \ | ||
27 | struct at91_init_soc __initdata at91##_name##_soc \ | ||
28 | __used \ | ||
29 | = { \ | ||
30 | .builtin = 1, \ | ||
31 | |||
32 | #define AT91_SOC_END \ | ||
33 | }; | ||
34 | |||
25 | static inline int at91_soc_is_enabled(void) | 35 | static inline int at91_soc_is_enabled(void) |
26 | { | 36 | { |
27 | return at91_boot_soc.init != NULL; | 37 | return at91_boot_soc.builtin; |
28 | } | 38 | } |
29 | 39 | ||
30 | #if !defined(CONFIG_SOC_AT91RM9200) | 40 | #if !defined(CONFIG_SOC_AT91RM9200) |
diff --git a/arch/arm/mach-cns3xxx/cns3420vb.c b/arch/arm/mach-cns3xxx/cns3420vb.c index 2c5fb4c7e509..ae305397003c 100644 --- a/arch/arm/mach-cns3xxx/cns3420vb.c +++ b/arch/arm/mach-cns3xxx/cns3420vb.c | |||
@@ -24,6 +24,8 @@ | |||
24 | #include <linux/mtd/mtd.h> | 24 | #include <linux/mtd/mtd.h> |
25 | #include <linux/mtd/physmap.h> | 25 | #include <linux/mtd/physmap.h> |
26 | #include <linux/mtd/partitions.h> | 26 | #include <linux/mtd/partitions.h> |
27 | #include <linux/usb/ehci_pdriver.h> | ||
28 | #include <linux/usb/ohci_pdriver.h> | ||
27 | #include <asm/setup.h> | 29 | #include <asm/setup.h> |
28 | #include <asm/mach-types.h> | 30 | #include <asm/mach-types.h> |
29 | #include <asm/hardware/gic.h> | 31 | #include <asm/hardware/gic.h> |
@@ -32,6 +34,7 @@ | |||
32 | #include <asm/mach/time.h> | 34 | #include <asm/mach/time.h> |
33 | #include <mach/cns3xxx.h> | 35 | #include <mach/cns3xxx.h> |
34 | #include <mach/irqs.h> | 36 | #include <mach/irqs.h> |
37 | #include <mach/pm.h> | ||
35 | #include "core.h" | 38 | #include "core.h" |
36 | #include "devices.h" | 39 | #include "devices.h" |
37 | 40 | ||
@@ -125,13 +128,52 @@ static struct resource cns3xxx_usb_ehci_resources[] = { | |||
125 | 128 | ||
126 | static u64 cns3xxx_usb_ehci_dma_mask = DMA_BIT_MASK(32); | 129 | static u64 cns3xxx_usb_ehci_dma_mask = DMA_BIT_MASK(32); |
127 | 130 | ||
131 | static int csn3xxx_usb_power_on(struct platform_device *pdev) | ||
132 | { | ||
133 | /* | ||
134 | * EHCI and OHCI share the same clock and power, | ||
135 | * resetting twice would cause the 1st controller been reset. | ||
136 | * Therefore only do power up at the first up device, and | ||
137 | * power down at the last down device. | ||
138 | * | ||
139 | * Set USB AHB INCR length to 16 | ||
140 | */ | ||
141 | if (atomic_inc_return(&usb_pwr_ref) == 1) { | ||
142 | cns3xxx_pwr_power_up(1 << PM_PLL_HM_PD_CTRL_REG_OFFSET_PLL_USB); | ||
143 | cns3xxx_pwr_clk_en(1 << PM_CLK_GATE_REG_OFFSET_USB_HOST); | ||
144 | cns3xxx_pwr_soft_rst(1 << PM_SOFT_RST_REG_OFFST_USB_HOST); | ||
145 | __raw_writel((__raw_readl(MISC_CHIP_CONFIG_REG) | (0X2 << 24)), | ||
146 | MISC_CHIP_CONFIG_REG); | ||
147 | } | ||
148 | |||
149 | return 0; | ||
150 | } | ||
151 | |||
152 | static void csn3xxx_usb_power_off(struct platform_device *pdev) | ||
153 | { | ||
154 | /* | ||
155 | * EHCI and OHCI share the same clock and power, | ||
156 | * resetting twice would cause the 1st controller been reset. | ||
157 | * Therefore only do power up at the first up device, and | ||
158 | * power down at the last down device. | ||
159 | */ | ||
160 | if (atomic_dec_return(&usb_pwr_ref) == 0) | ||
161 | cns3xxx_pwr_clk_dis(1 << PM_CLK_GATE_REG_OFFSET_USB_HOST); | ||
162 | } | ||
163 | |||
164 | static struct usb_ehci_pdata cns3xxx_usb_ehci_pdata = { | ||
165 | .power_on = csn3xxx_usb_power_on, | ||
166 | .power_off = csn3xxx_usb_power_off, | ||
167 | }; | ||
168 | |||
128 | static struct platform_device cns3xxx_usb_ehci_device = { | 169 | static struct platform_device cns3xxx_usb_ehci_device = { |
129 | .name = "cns3xxx-ehci", | 170 | .name = "ehci-platform", |
130 | .num_resources = ARRAY_SIZE(cns3xxx_usb_ehci_resources), | 171 | .num_resources = ARRAY_SIZE(cns3xxx_usb_ehci_resources), |
131 | .resource = cns3xxx_usb_ehci_resources, | 172 | .resource = cns3xxx_usb_ehci_resources, |
132 | .dev = { | 173 | .dev = { |
133 | .dma_mask = &cns3xxx_usb_ehci_dma_mask, | 174 | .dma_mask = &cns3xxx_usb_ehci_dma_mask, |
134 | .coherent_dma_mask = DMA_BIT_MASK(32), | 175 | .coherent_dma_mask = DMA_BIT_MASK(32), |
176 | .platform_data = &cns3xxx_usb_ehci_pdata, | ||
135 | }, | 177 | }, |
136 | }; | 178 | }; |
137 | 179 | ||
@@ -149,13 +191,20 @@ static struct resource cns3xxx_usb_ohci_resources[] = { | |||
149 | 191 | ||
150 | static u64 cns3xxx_usb_ohci_dma_mask = DMA_BIT_MASK(32); | 192 | static u64 cns3xxx_usb_ohci_dma_mask = DMA_BIT_MASK(32); |
151 | 193 | ||
194 | static struct usb_ohci_pdata cns3xxx_usb_ohci_pdata = { | ||
195 | .num_ports = 1, | ||
196 | .power_on = csn3xxx_usb_power_on, | ||
197 | .power_off = csn3xxx_usb_power_off, | ||
198 | }; | ||
199 | |||
152 | static struct platform_device cns3xxx_usb_ohci_device = { | 200 | static struct platform_device cns3xxx_usb_ohci_device = { |
153 | .name = "cns3xxx-ohci", | 201 | .name = "ohci-platform", |
154 | .num_resources = ARRAY_SIZE(cns3xxx_usb_ohci_resources), | 202 | .num_resources = ARRAY_SIZE(cns3xxx_usb_ohci_resources), |
155 | .resource = cns3xxx_usb_ohci_resources, | 203 | .resource = cns3xxx_usb_ohci_resources, |
156 | .dev = { | 204 | .dev = { |
157 | .dma_mask = &cns3xxx_usb_ohci_dma_mask, | 205 | .dma_mask = &cns3xxx_usb_ohci_dma_mask, |
158 | .coherent_dma_mask = DMA_BIT_MASK(32), | 206 | .coherent_dma_mask = DMA_BIT_MASK(32), |
207 | .platform_data = &cns3xxx_usb_ohci_pdata, | ||
159 | }, | 208 | }, |
160 | }; | 209 | }; |
161 | 210 | ||
diff --git a/arch/arm/mach-integrator/impd1.c b/arch/arm/mach-integrator/impd1.c index e428f3ab15c7..b3d86d7081a0 100644 --- a/arch/arm/mach-integrator/impd1.c +++ b/arch/arm/mach-integrator/impd1.c | |||
@@ -21,10 +21,9 @@ | |||
21 | #include <linux/amba/bus.h> | 21 | #include <linux/amba/bus.h> |
22 | #include <linux/amba/clcd.h> | 22 | #include <linux/amba/clcd.h> |
23 | #include <linux/io.h> | 23 | #include <linux/io.h> |
24 | #include <linux/platform_data/clk-integrator.h> | ||
24 | #include <linux/slab.h> | 25 | #include <linux/slab.h> |
25 | #include <linux/clkdev.h> | ||
26 | 26 | ||
27 | #include <asm/hardware/icst.h> | ||
28 | #include <mach/lm.h> | 27 | #include <mach/lm.h> |
29 | #include <mach/impd1.h> | 28 | #include <mach/impd1.h> |
30 | #include <asm/sizes.h> | 29 | #include <asm/sizes.h> |
@@ -36,45 +35,6 @@ MODULE_PARM_DESC(lmid, "logic module stack position"); | |||
36 | 35 | ||
37 | struct impd1_module { | 36 | struct impd1_module { |
38 | void __iomem *base; | 37 | void __iomem *base; |
39 | struct clk vcos[2]; | ||
40 | struct clk_lookup *clks[3]; | ||
41 | }; | ||
42 | |||
43 | static const struct icst_params impd1_vco_params = { | ||
44 | .ref = 24000000, /* 24 MHz */ | ||
45 | .vco_max = ICST525_VCO_MAX_3V, | ||
46 | .vco_min = ICST525_VCO_MIN, | ||
47 | .vd_min = 12, | ||
48 | .vd_max = 519, | ||
49 | .rd_min = 3, | ||
50 | .rd_max = 120, | ||
51 | .s2div = icst525_s2div, | ||
52 | .idx2s = icst525_idx2s, | ||
53 | }; | ||
54 | |||
55 | static void impd1_setvco(struct clk *clk, struct icst_vco vco) | ||
56 | { | ||
57 | struct impd1_module *impd1 = clk->data; | ||
58 | u32 val = vco.v | (vco.r << 9) | (vco.s << 16); | ||
59 | |||
60 | writel(0xa05f, impd1->base + IMPD1_LOCK); | ||
61 | writel(val, clk->vcoreg); | ||
62 | writel(0, impd1->base + IMPD1_LOCK); | ||
63 | |||
64 | #ifdef DEBUG | ||
65 | vco.v = val & 0x1ff; | ||
66 | vco.r = (val >> 9) & 0x7f; | ||
67 | vco.s = (val >> 16) & 7; | ||
68 | |||
69 | pr_debug("IM-PD1: VCO%d clock is %ld Hz\n", | ||
70 | vconr, icst525_hz(&impd1_vco_params, vco)); | ||
71 | #endif | ||
72 | } | ||
73 | |||
74 | static const struct clk_ops impd1_clk_ops = { | ||
75 | .round = icst_clk_round, | ||
76 | .set = icst_clk_set, | ||
77 | .setvco = impd1_setvco, | ||
78 | }; | 38 | }; |
79 | 39 | ||
80 | void impd1_tweak_control(struct device *dev, u32 mask, u32 val) | 40 | void impd1_tweak_control(struct device *dev, u32 mask, u32 val) |
@@ -344,10 +304,6 @@ static struct impd1_device impd1_devs[] = { | |||
344 | } | 304 | } |
345 | }; | 305 | }; |
346 | 306 | ||
347 | static struct clk fixed_14745600 = { | ||
348 | .rate = 14745600, | ||
349 | }; | ||
350 | |||
351 | static int impd1_probe(struct lm_device *dev) | 307 | static int impd1_probe(struct lm_device *dev) |
352 | { | 308 | { |
353 | struct impd1_module *impd1; | 309 | struct impd1_module *impd1; |
@@ -376,23 +332,7 @@ static int impd1_probe(struct lm_device *dev) | |||
376 | printk("IM-PD1 found at 0x%08lx\n", | 332 | printk("IM-PD1 found at 0x%08lx\n", |
377 | (unsigned long)dev->resource.start); | 333 | (unsigned long)dev->resource.start); |
378 | 334 | ||
379 | for (i = 0; i < ARRAY_SIZE(impd1->vcos); i++) { | 335 | integrator_impd1_clk_init(impd1->base, dev->id); |
380 | impd1->vcos[i].ops = &impd1_clk_ops, | ||
381 | impd1->vcos[i].owner = THIS_MODULE, | ||
382 | impd1->vcos[i].params = &impd1_vco_params, | ||
383 | impd1->vcos[i].data = impd1; | ||
384 | } | ||
385 | impd1->vcos[0].vcoreg = impd1->base + IMPD1_OSC1; | ||
386 | impd1->vcos[1].vcoreg = impd1->base + IMPD1_OSC2; | ||
387 | |||
388 | impd1->clks[0] = clkdev_alloc(&impd1->vcos[0], NULL, "lm%x:01000", | ||
389 | dev->id); | ||
390 | impd1->clks[1] = clkdev_alloc(&fixed_14745600, NULL, "lm%x:00100", | ||
391 | dev->id); | ||
392 | impd1->clks[2] = clkdev_alloc(&fixed_14745600, NULL, "lm%x:00200", | ||
393 | dev->id); | ||
394 | for (i = 0; i < ARRAY_SIZE(impd1->clks); i++) | ||
395 | clkdev_add(impd1->clks[i]); | ||
396 | 336 | ||
397 | for (i = 0; i < ARRAY_SIZE(impd1_devs); i++) { | 337 | for (i = 0; i < ARRAY_SIZE(impd1_devs); i++) { |
398 | struct impd1_device *idev = impd1_devs + i; | 338 | struct impd1_device *idev = impd1_devs + i; |
@@ -431,12 +371,9 @@ static int impd1_remove_one(struct device *dev, void *data) | |||
431 | static void impd1_remove(struct lm_device *dev) | 371 | static void impd1_remove(struct lm_device *dev) |
432 | { | 372 | { |
433 | struct impd1_module *impd1 = lm_get_drvdata(dev); | 373 | struct impd1_module *impd1 = lm_get_drvdata(dev); |
434 | int i; | ||
435 | 374 | ||
436 | device_for_each_child(&dev->dev, NULL, impd1_remove_one); | 375 | device_for_each_child(&dev->dev, NULL, impd1_remove_one); |
437 | 376 | integrator_impd1_clk_exit(dev->id); | |
438 | for (i = 0; i < ARRAY_SIZE(impd1->clks); i++) | ||
439 | clkdev_drop(impd1->clks[i]); | ||
440 | 377 | ||
441 | lm_set_drvdata(dev, NULL); | 378 | lm_set_drvdata(dev, NULL); |
442 | 379 | ||
diff --git a/arch/arm/mach-nomadik/board-nhk8815.c b/arch/arm/mach-nomadik/board-nhk8815.c index bfa1eab91f41..22ef8a1abe08 100644 --- a/arch/arm/mach-nomadik/board-nhk8815.c +++ b/arch/arm/mach-nomadik/board-nhk8815.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/i2c.h> | 24 | #include <linux/i2c.h> |
25 | #include <linux/io.h> | 25 | #include <linux/io.h> |
26 | #include <linux/pinctrl/machine.h> | 26 | #include <linux/pinctrl/machine.h> |
27 | #include <linux/platform_data/pinctrl-nomadik.h> | ||
27 | #include <asm/hardware/vic.h> | 28 | #include <asm/hardware/vic.h> |
28 | #include <asm/sizes.h> | 29 | #include <asm/sizes.h> |
29 | #include <asm/mach-types.h> | 30 | #include <asm/mach-types.h> |
@@ -32,9 +33,7 @@ | |||
32 | #include <asm/mach/flash.h> | 33 | #include <asm/mach/flash.h> |
33 | #include <asm/mach/time.h> | 34 | #include <asm/mach/time.h> |
34 | 35 | ||
35 | #include <plat/gpio-nomadik.h> | ||
36 | #include <plat/mtu.h> | 36 | #include <plat/mtu.h> |
37 | #include <plat/pincfg.h> | ||
38 | 37 | ||
39 | #include <linux/platform_data/mtd-nomadik-nand.h> | 38 | #include <linux/platform_data/mtd-nomadik-nand.h> |
40 | #include <mach/fsmc.h> | 39 | #include <mach/fsmc.h> |
diff --git a/arch/arm/mach-nomadik/cpu-8815.c b/arch/arm/mach-nomadik/cpu-8815.c index b617eaed0ce5..1273931303fb 100644 --- a/arch/arm/mach-nomadik/cpu-8815.c +++ b/arch/arm/mach-nomadik/cpu-8815.c | |||
@@ -26,8 +26,8 @@ | |||
26 | #include <linux/irq.h> | 26 | #include <linux/irq.h> |
27 | #include <linux/dma-mapping.h> | 27 | #include <linux/dma-mapping.h> |
28 | #include <linux/platform_data/clk-nomadik.h> | 28 | #include <linux/platform_data/clk-nomadik.h> |
29 | #include <linux/platform_data/pinctrl-nomadik.h> | ||
29 | 30 | ||
30 | #include <plat/gpio-nomadik.h> | ||
31 | #include <mach/hardware.h> | 31 | #include <mach/hardware.h> |
32 | #include <mach/irqs.h> | 32 | #include <mach/irqs.h> |
33 | #include <asm/mach/map.h> | 33 | #include <asm/mach/map.h> |
diff --git a/arch/arm/mach-nomadik/i2c-8815nhk.c b/arch/arm/mach-nomadik/i2c-8815nhk.c index 6d14454d4609..0c2f6628299a 100644 --- a/arch/arm/mach-nomadik/i2c-8815nhk.c +++ b/arch/arm/mach-nomadik/i2c-8815nhk.c | |||
@@ -4,8 +4,7 @@ | |||
4 | #include <linux/i2c-algo-bit.h> | 4 | #include <linux/i2c-algo-bit.h> |
5 | #include <linux/i2c-gpio.h> | 5 | #include <linux/i2c-gpio.h> |
6 | #include <linux/platform_device.h> | 6 | #include <linux/platform_device.h> |
7 | #include <plat/gpio-nomadik.h> | 7 | #include <linux/platform_data/pinctrl-nomadik.h> |
8 | #include <plat/pincfg.h> | ||
9 | 8 | ||
10 | /* | 9 | /* |
11 | * There are two busses in the 8815NHK. | 10 | * There are two busses in the 8815NHK. |
diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c index b700685762b5..56277a047136 100644 --- a/arch/arm/mach-omap2/board-overo.c +++ b/arch/arm/mach-omap2/board-overo.c | |||
@@ -45,7 +45,6 @@ | |||
45 | #include <asm/mach/flash.h> | 45 | #include <asm/mach/flash.h> |
46 | #include <asm/mach/map.h> | 46 | #include <asm/mach/map.h> |
47 | 47 | ||
48 | #include "common.h" | ||
49 | #include <video/omapdss.h> | 48 | #include <video/omapdss.h> |
50 | #include <video/omap-panel-generic-dpi.h> | 49 | #include <video/omap-panel-generic-dpi.h> |
51 | #include <video/omap-panel-tfp410.h> | 50 | #include <video/omap-panel-tfp410.h> |
diff --git a/arch/arm/mach-omap2/drm.c b/arch/arm/mach-omap2/drm.c index 72e0f01b715c..49a7ffb716a5 100644 --- a/arch/arm/mach-omap2/drm.c +++ b/arch/arm/mach-omap2/drm.c | |||
@@ -23,15 +23,20 @@ | |||
23 | #include <linux/init.h> | 23 | #include <linux/init.h> |
24 | #include <linux/platform_device.h> | 24 | #include <linux/platform_device.h> |
25 | #include <linux/dma-mapping.h> | 25 | #include <linux/dma-mapping.h> |
26 | #include <linux/platform_data/omap_drm.h> | ||
26 | 27 | ||
27 | #include <plat/omap_device.h> | 28 | #include <plat/omap_device.h> |
28 | #include <plat/omap_hwmod.h> | 29 | #include <plat/omap_hwmod.h> |
30 | #include <plat/cpu.h> | ||
29 | 31 | ||
30 | #if defined(CONFIG_DRM_OMAP) || (CONFIG_DRM_OMAP_MODULE) | 32 | #if defined(CONFIG_DRM_OMAP) || (CONFIG_DRM_OMAP_MODULE) |
31 | 33 | ||
34 | static struct omap_drm_platform_data platform_data; | ||
35 | |||
32 | static struct platform_device omap_drm_device = { | 36 | static struct platform_device omap_drm_device = { |
33 | .dev = { | 37 | .dev = { |
34 | .coherent_dma_mask = DMA_BIT_MASK(32), | 38 | .coherent_dma_mask = DMA_BIT_MASK(32), |
39 | .platform_data = &platform_data, | ||
35 | }, | 40 | }, |
36 | .name = "omapdrm", | 41 | .name = "omapdrm", |
37 | .id = 0, | 42 | .id = 0, |
@@ -52,6 +57,8 @@ static int __init omap_init_drm(void) | |||
52 | oh->name); | 57 | oh->name); |
53 | } | 58 | } |
54 | 59 | ||
60 | platform_data.omaprev = GET_OMAP_REVISION(); | ||
61 | |||
55 | return platform_device_register(&omap_drm_device); | 62 | return platform_device_register(&omap_drm_device); |
56 | 63 | ||
57 | } | 64 | } |
diff --git a/arch/arm/mach-shmobile/board-kzm9g.c b/arch/arm/mach-shmobile/board-kzm9g.c index 0a43f3189c21..7a05de794a8c 100644 --- a/arch/arm/mach-shmobile/board-kzm9g.c +++ b/arch/arm/mach-shmobile/board-kzm9g.c | |||
@@ -548,7 +548,6 @@ static struct platform_device fsi_ak4648_device = { | |||
548 | /* I2C */ | 548 | /* I2C */ |
549 | static struct pcf857x_platform_data pcf8575_pdata = { | 549 | static struct pcf857x_platform_data pcf8575_pdata = { |
550 | .gpio_base = GPIO_PCF8575_BASE, | 550 | .gpio_base = GPIO_PCF8575_BASE, |
551 | .irq = intcs_evt2irq(0x3260), /* IRQ19 */ | ||
552 | }; | 551 | }; |
553 | 552 | ||
554 | static struct i2c_board_info i2c0_devices[] = { | 553 | static struct i2c_board_info i2c0_devices[] = { |
@@ -570,6 +569,7 @@ static struct i2c_board_info i2c1_devices[] = { | |||
570 | static struct i2c_board_info i2c3_devices[] = { | 569 | static struct i2c_board_info i2c3_devices[] = { |
571 | { | 570 | { |
572 | I2C_BOARD_INFO("pcf8575", 0x20), | 571 | I2C_BOARD_INFO("pcf8575", 0x20), |
572 | .irq = intcs_evt2irq(0x3260), /* IRQ19 */ | ||
573 | .platform_data = &pcf8575_pdata, | 573 | .platform_data = &pcf8575_pdata, |
574 | }, | 574 | }, |
575 | }; | 575 | }; |
diff --git a/arch/arm/mach-u300/core.c b/arch/arm/mach-u300/core.c index b8efac4daed8..ece8a2dfb814 100644 --- a/arch/arm/mach-u300/core.c +++ b/arch/arm/mach-u300/core.c | |||
@@ -1445,8 +1445,6 @@ static struct platform_device pinctrl_device = { | |||
1445 | static struct u300_gpio_platform u300_gpio_plat = { | 1445 | static struct u300_gpio_platform u300_gpio_plat = { |
1446 | .ports = 7, | 1446 | .ports = 7, |
1447 | .gpio_base = 0, | 1447 | .gpio_base = 0, |
1448 | .gpio_irq_base = IRQ_U300_GPIO_BASE, | ||
1449 | .pinctrl_device = &pinctrl_device, | ||
1450 | }; | 1448 | }; |
1451 | 1449 | ||
1452 | static struct platform_device gpio_device = { | 1450 | static struct platform_device gpio_device = { |
@@ -1590,6 +1588,7 @@ static struct platform_device *platform_devs[] __initdata = { | |||
1590 | &i2c1_device, | 1588 | &i2c1_device, |
1591 | &keypad_device, | 1589 | &keypad_device, |
1592 | &rtc_device, | 1590 | &rtc_device, |
1591 | &pinctrl_device, | ||
1593 | &gpio_device, | 1592 | &gpio_device, |
1594 | &nand_device, | 1593 | &nand_device, |
1595 | &wdog_device, | 1594 | &wdog_device, |
@@ -1804,7 +1803,7 @@ MACHINE_START(U300, "Ericsson AB U335 S335/B335 Prototype Board") | |||
1804 | /* Maintainer: Linus Walleij <linus.walleij@stericsson.com> */ | 1803 | /* Maintainer: Linus Walleij <linus.walleij@stericsson.com> */ |
1805 | .atag_offset = 0x100, | 1804 | .atag_offset = 0x100, |
1806 | .map_io = u300_map_io, | 1805 | .map_io = u300_map_io, |
1807 | .nr_irqs = NR_IRQS_U300, | 1806 | .nr_irqs = 0, |
1808 | .init_irq = u300_init_irq, | 1807 | .init_irq = u300_init_irq, |
1809 | .handle_irq = vic_handle_irq, | 1808 | .handle_irq = vic_handle_irq, |
1810 | .timer = &u300_timer, | 1809 | .timer = &u300_timer, |
diff --git a/arch/arm/mach-u300/include/mach/irqs.h b/arch/arm/mach-u300/include/mach/irqs.h index e27425a63fa1..21d5e76a6cd3 100644 --- a/arch/arm/mach-u300/include/mach/irqs.h +++ b/arch/arm/mach-u300/include/mach/irqs.h | |||
@@ -12,79 +12,69 @@ | |||
12 | #ifndef __MACH_IRQS_H | 12 | #ifndef __MACH_IRQS_H |
13 | #define __MACH_IRQS_H | 13 | #define __MACH_IRQS_H |
14 | 14 | ||
15 | #define IRQ_U300_INTCON0_START 1 | 15 | #define IRQ_U300_INTCON0_START 32 |
16 | #define IRQ_U300_INTCON1_START 33 | 16 | #define IRQ_U300_INTCON1_START 64 |
17 | /* These are on INTCON0 - 30 lines */ | 17 | /* These are on INTCON0 - 30 lines */ |
18 | #define IRQ_U300_IRQ0_EXT 1 | 18 | #define IRQ_U300_IRQ0_EXT 32 |
19 | #define IRQ_U300_IRQ1_EXT 2 | 19 | #define IRQ_U300_IRQ1_EXT 33 |
20 | #define IRQ_U300_DMA 3 | 20 | #define IRQ_U300_DMA 34 |
21 | #define IRQ_U300_VIDEO_ENC_0 4 | 21 | #define IRQ_U300_VIDEO_ENC_0 35 |
22 | #define IRQ_U300_VIDEO_ENC_1 5 | 22 | #define IRQ_U300_VIDEO_ENC_1 36 |
23 | #define IRQ_U300_AAIF_RX 6 | 23 | #define IRQ_U300_AAIF_RX 37 |
24 | #define IRQ_U300_AAIF_TX 7 | 24 | #define IRQ_U300_AAIF_TX 38 |
25 | #define IRQ_U300_AAIF_VGPIO 8 | 25 | #define IRQ_U300_AAIF_VGPIO 39 |
26 | #define IRQ_U300_AAIF_WAKEUP 9 | 26 | #define IRQ_U300_AAIF_WAKEUP 40 |
27 | #define IRQ_U300_PCM_I2S0_FRAME 10 | 27 | #define IRQ_U300_PCM_I2S0_FRAME 41 |
28 | #define IRQ_U300_PCM_I2S0_FIFO 11 | 28 | #define IRQ_U300_PCM_I2S0_FIFO 42 |
29 | #define IRQ_U300_PCM_I2S1_FRAME 12 | 29 | #define IRQ_U300_PCM_I2S1_FRAME 43 |
30 | #define IRQ_U300_PCM_I2S1_FIFO 13 | 30 | #define IRQ_U300_PCM_I2S1_FIFO 44 |
31 | #define IRQ_U300_XGAM_GAMCON 14 | 31 | #define IRQ_U300_XGAM_GAMCON 45 |
32 | #define IRQ_U300_XGAM_CDI 15 | 32 | #define IRQ_U300_XGAM_CDI 46 |
33 | #define IRQ_U300_XGAM_CDICON 16 | 33 | #define IRQ_U300_XGAM_CDICON 47 |
34 | #define IRQ_U300_XGAM_PDI 18 | 34 | #define IRQ_U300_XGAM_PDI 49 |
35 | #define IRQ_U300_XGAM_PDICON 19 | 35 | #define IRQ_U300_XGAM_PDICON 50 |
36 | #define IRQ_U300_XGAM_GAMEACC 20 | 36 | #define IRQ_U300_XGAM_GAMEACC 51 |
37 | #define IRQ_U300_XGAM_MCIDCT 21 | 37 | #define IRQ_U300_XGAM_MCIDCT 52 |
38 | #define IRQ_U300_APEX 22 | 38 | #define IRQ_U300_APEX 53 |
39 | #define IRQ_U300_UART0 23 | 39 | #define IRQ_U300_UART0 54 |
40 | #define IRQ_U300_SPI 24 | 40 | #define IRQ_U300_SPI 55 |
41 | #define IRQ_U300_TIMER_APP_OS 25 | 41 | #define IRQ_U300_TIMER_APP_OS 56 |
42 | #define IRQ_U300_TIMER_APP_DD 26 | 42 | #define IRQ_U300_TIMER_APP_DD 57 |
43 | #define IRQ_U300_TIMER_APP_GP1 27 | 43 | #define IRQ_U300_TIMER_APP_GP1 58 |
44 | #define IRQ_U300_TIMER_APP_GP2 28 | 44 | #define IRQ_U300_TIMER_APP_GP2 59 |
45 | #define IRQ_U300_TIMER_OS 29 | 45 | #define IRQ_U300_TIMER_OS 60 |
46 | #define IRQ_U300_TIMER_MS 30 | 46 | #define IRQ_U300_TIMER_MS 61 |
47 | #define IRQ_U300_KEYPAD_KEYBF 31 | 47 | #define IRQ_U300_KEYPAD_KEYBF 62 |
48 | #define IRQ_U300_KEYPAD_KEYBR 32 | 48 | #define IRQ_U300_KEYPAD_KEYBR 63 |
49 | /* These are on INTCON1 - 32 lines */ | 49 | /* These are on INTCON1 - 32 lines */ |
50 | #define IRQ_U300_GPIO_PORT0 33 | 50 | #define IRQ_U300_GPIO_PORT0 64 |
51 | #define IRQ_U300_GPIO_PORT1 34 | 51 | #define IRQ_U300_GPIO_PORT1 65 |
52 | #define IRQ_U300_GPIO_PORT2 35 | 52 | #define IRQ_U300_GPIO_PORT2 66 |
53 | 53 | ||
54 | /* These are for DB3150, DB3200 and DB3350 */ | 54 | /* These are for DB3150, DB3200 and DB3350 */ |
55 | #define IRQ_U300_WDOG 36 | 55 | #define IRQ_U300_WDOG 67 |
56 | #define IRQ_U300_EVHIST 37 | 56 | #define IRQ_U300_EVHIST 68 |
57 | #define IRQ_U300_MSPRO 38 | 57 | #define IRQ_U300_MSPRO 69 |
58 | #define IRQ_U300_MMCSD_MCIINTR0 39 | 58 | #define IRQ_U300_MMCSD_MCIINTR0 70 |
59 | #define IRQ_U300_MMCSD_MCIINTR1 40 | 59 | #define IRQ_U300_MMCSD_MCIINTR1 71 |
60 | #define IRQ_U300_I2C0 41 | 60 | #define IRQ_U300_I2C0 72 |
61 | #define IRQ_U300_I2C1 42 | 61 | #define IRQ_U300_I2C1 73 |
62 | #define IRQ_U300_RTC 43 | 62 | #define IRQ_U300_RTC 74 |
63 | #define IRQ_U300_NFIF 44 | 63 | #define IRQ_U300_NFIF 75 |
64 | #define IRQ_U300_NFIF2 45 | 64 | #define IRQ_U300_NFIF2 76 |
65 | 65 | ||
66 | /* The DB3350-specific interrupt lines */ | 66 | /* The DB3350-specific interrupt lines */ |
67 | #define IRQ_U300_ISP_F0 46 | 67 | #define IRQ_U300_ISP_F0 77 |
68 | #define IRQ_U300_ISP_F1 47 | 68 | #define IRQ_U300_ISP_F1 78 |
69 | #define IRQ_U300_ISP_F2 48 | 69 | #define IRQ_U300_ISP_F2 79 |
70 | #define IRQ_U300_ISP_F3 49 | 70 | #define IRQ_U300_ISP_F3 80 |
71 | #define IRQ_U300_ISP_F4 50 | 71 | #define IRQ_U300_ISP_F4 81 |
72 | #define IRQ_U300_GPIO_PORT3 51 | 72 | #define IRQ_U300_GPIO_PORT3 82 |
73 | #define IRQ_U300_SYSCON_PLL_LOCK 52 | 73 | #define IRQ_U300_SYSCON_PLL_LOCK 83 |
74 | #define IRQ_U300_UART1 53 | 74 | #define IRQ_U300_UART1 84 |
75 | #define IRQ_U300_GPIO_PORT4 54 | 75 | #define IRQ_U300_GPIO_PORT4 85 |
76 | #define IRQ_U300_GPIO_PORT5 55 | 76 | #define IRQ_U300_GPIO_PORT5 86 |
77 | #define IRQ_U300_GPIO_PORT6 56 | 77 | #define IRQ_U300_GPIO_PORT6 87 |
78 | #define U300_VIC_IRQS_END 57 | 78 | #define U300_VIC_IRQS_END 88 |
79 | |||
80 | /* Maximum 8*7 GPIO lines */ | ||
81 | #ifdef CONFIG_PINCTRL_COH901 | ||
82 | #define IRQ_U300_GPIO_BASE (U300_VIC_IRQS_END) | ||
83 | #define IRQ_U300_GPIO_END (IRQ_U300_GPIO_BASE + 56) | ||
84 | #else | ||
85 | #define IRQ_U300_GPIO_END (U300_VIC_IRQS_END) | ||
86 | #endif | ||
87 | |||
88 | #define NR_IRQS_U300 (IRQ_U300_GPIO_END - IRQ_U300_INTCON0_START) | ||
89 | 79 | ||
90 | #endif | 80 | #endif |
diff --git a/arch/arm/mach-ux500/board-mop500-audio.c b/arch/arm/mach-ux500/board-mop500-audio.c index 070629a95625..33631c9f1218 100644 --- a/arch/arm/mach-ux500/board-mop500-audio.c +++ b/arch/arm/mach-ux500/board-mop500-audio.c | |||
@@ -7,9 +7,8 @@ | |||
7 | #include <linux/platform_device.h> | 7 | #include <linux/platform_device.h> |
8 | #include <linux/init.h> | 8 | #include <linux/init.h> |
9 | #include <linux/gpio.h> | 9 | #include <linux/gpio.h> |
10 | #include <linux/platform_data/pinctrl-nomadik.h> | ||
10 | 11 | ||
11 | #include <plat/gpio-nomadik.h> | ||
12 | #include <plat/pincfg.h> | ||
13 | #include <plat/ste_dma40.h> | 12 | #include <plat/ste_dma40.h> |
14 | 13 | ||
15 | #include <mach/devices.h> | 14 | #include <mach/devices.h> |
diff --git a/arch/arm/mach-ux500/board-mop500-pins.c b/arch/arm/mach-ux500/board-mop500-pins.c index a267c6d30e37..c34d4efd0d5c 100644 --- a/arch/arm/mach-ux500/board-mop500-pins.c +++ b/arch/arm/mach-ux500/board-mop500-pins.c | |||
@@ -9,10 +9,9 @@ | |||
9 | #include <linux/bug.h> | 9 | #include <linux/bug.h> |
10 | #include <linux/string.h> | 10 | #include <linux/string.h> |
11 | #include <linux/pinctrl/machine.h> | 11 | #include <linux/pinctrl/machine.h> |
12 | #include <linux/platform_data/pinctrl-nomadik.h> | ||
12 | 13 | ||
13 | #include <asm/mach-types.h> | 14 | #include <asm/mach-types.h> |
14 | #include <plat/pincfg.h> | ||
15 | #include <plat/gpio-nomadik.h> | ||
16 | 15 | ||
17 | #include <mach/hardware.h> | 16 | #include <mach/hardware.h> |
18 | 17 | ||
diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c index 416d436111f2..0a3dd601a400 100644 --- a/arch/arm/mach-ux500/board-mop500.c +++ b/arch/arm/mach-ux500/board-mop500.c | |||
@@ -37,13 +37,13 @@ | |||
37 | #include <linux/of_platform.h> | 37 | #include <linux/of_platform.h> |
38 | #include <linux/leds.h> | 38 | #include <linux/leds.h> |
39 | #include <linux/pinctrl/consumer.h> | 39 | #include <linux/pinctrl/consumer.h> |
40 | #include <linux/platform_data/pinctrl-nomadik.h> | ||
40 | 41 | ||
41 | #include <asm/mach-types.h> | 42 | #include <asm/mach-types.h> |
42 | #include <asm/mach/arch.h> | 43 | #include <asm/mach/arch.h> |
43 | #include <asm/hardware/gic.h> | 44 | #include <asm/hardware/gic.h> |
44 | 45 | ||
45 | #include <plat/ste_dma40.h> | 46 | #include <plat/ste_dma40.h> |
46 | #include <plat/gpio-nomadik.h> | ||
47 | 47 | ||
48 | #include <mach/hardware.h> | 48 | #include <mach/hardware.h> |
49 | #include <mach/setup.h> | 49 | #include <mach/setup.h> |
diff --git a/arch/arm/mach-ux500/cpu-db8500.c b/arch/arm/mach-ux500/cpu-db8500.c index bcdfe6b1d453..91f028c1264a 100644 --- a/arch/arm/mach-ux500/cpu-db8500.c +++ b/arch/arm/mach-ux500/cpu-db8500.c | |||
@@ -17,14 +17,14 @@ | |||
17 | #include <linux/platform_device.h> | 17 | #include <linux/platform_device.h> |
18 | #include <linux/io.h> | 18 | #include <linux/io.h> |
19 | #include <linux/mfd/abx500/ab8500.h> | 19 | #include <linux/mfd/abx500/ab8500.h> |
20 | #include <linux/platform_data/usb-musb-ux500.h> | ||
21 | #include <linux/platform_data/pinctrl-nomadik.h> | ||
20 | 22 | ||
21 | #include <asm/pmu.h> | 23 | #include <asm/pmu.h> |
22 | #include <asm/mach/map.h> | 24 | #include <asm/mach/map.h> |
23 | #include <plat/gpio-nomadik.h> | ||
24 | #include <mach/hardware.h> | 25 | #include <mach/hardware.h> |
25 | #include <mach/setup.h> | 26 | #include <mach/setup.h> |
26 | #include <mach/devices.h> | 27 | #include <mach/devices.h> |
27 | #include <linux/platform_data/usb-musb-ux500.h> | ||
28 | #include <mach/db8500-regs.h> | 28 | #include <mach/db8500-regs.h> |
29 | 29 | ||
30 | #include "devices-db8500.h" | 30 | #include "devices-db8500.h" |
@@ -158,7 +158,7 @@ static void __init db8500_add_gpios(struct device *parent) | |||
158 | 158 | ||
159 | dbx500_add_gpios(parent, ARRAY_AND_SIZE(db8500_gpio_base), | 159 | dbx500_add_gpios(parent, ARRAY_AND_SIZE(db8500_gpio_base), |
160 | IRQ_DB8500_GPIO0, &pdata); | 160 | IRQ_DB8500_GPIO0, &pdata); |
161 | dbx500_add_pinctrl(parent, "pinctrl-db8500"); | 161 | dbx500_add_pinctrl(parent, "pinctrl-db8500", U8500_PRCMU_BASE); |
162 | } | 162 | } |
163 | 163 | ||
164 | static int usb_db8500_rx_dma_cfg[] = { | 164 | static int usb_db8500_rx_dma_cfg[] = { |
@@ -214,9 +214,6 @@ struct device * __init u8500_init_devices(struct ab8500_platform_data *ab8500) | |||
214 | db8500_add_gpios(parent); | 214 | db8500_add_gpios(parent); |
215 | db8500_add_usb(parent, usb_db8500_rx_dma_cfg, usb_db8500_tx_dma_cfg); | 215 | db8500_add_usb(parent, usb_db8500_rx_dma_cfg, usb_db8500_tx_dma_cfg); |
216 | 216 | ||
217 | platform_device_register_data(parent, | ||
218 | "cpufreq-u8500", -1, NULL, 0); | ||
219 | |||
220 | for (i = 0; i < ARRAY_SIZE(platform_devs); i++) | 217 | for (i = 0; i < ARRAY_SIZE(platform_devs); i++) |
221 | platform_devs[i]->dev.parent = parent; | 218 | platform_devs[i]->dev.parent = parent; |
222 | 219 | ||
@@ -236,9 +233,6 @@ struct device * __init u8500_of_init_devices(void) | |||
236 | 233 | ||
237 | db8500_add_usb(parent, usb_db8500_rx_dma_cfg, usb_db8500_tx_dma_cfg); | 234 | db8500_add_usb(parent, usb_db8500_rx_dma_cfg, usb_db8500_tx_dma_cfg); |
238 | 235 | ||
239 | platform_device_register_data(parent, | ||
240 | "cpufreq-u8500", -1, NULL, 0); | ||
241 | |||
242 | u8500_dma40_device.dev.parent = parent; | 236 | u8500_dma40_device.dev.parent = parent; |
243 | 237 | ||
244 | /* | 238 | /* |
diff --git a/arch/arm/mach-ux500/devices-common.c b/arch/arm/mach-ux500/devices-common.c index dfdd4a54668d..692a77a1c153 100644 --- a/arch/arm/mach-ux500/devices-common.c +++ b/arch/arm/mach-ux500/devices-common.c | |||
@@ -11,8 +11,7 @@ | |||
11 | #include <linux/irq.h> | 11 | #include <linux/irq.h> |
12 | #include <linux/slab.h> | 12 | #include <linux/slab.h> |
13 | #include <linux/platform_device.h> | 13 | #include <linux/platform_device.h> |
14 | 14 | #include <linux/platform_data/pinctrl-nomadik.h> | |
15 | #include <plat/gpio-nomadik.h> | ||
16 | 15 | ||
17 | #include <mach/hardware.h> | 16 | #include <mach/hardware.h> |
18 | 17 | ||
diff --git a/arch/arm/mach-ux500/devices-common.h b/arch/arm/mach-ux500/devices-common.h index 7fbf0ba336e1..96fa4ac89e2e 100644 --- a/arch/arm/mach-ux500/devices-common.h +++ b/arch/arm/mach-ux500/devices-common.h | |||
@@ -129,12 +129,18 @@ void dbx500_add_gpios(struct device *parent, resource_size_t *base, int num, | |||
129 | int irq, struct nmk_gpio_platform_data *pdata); | 129 | int irq, struct nmk_gpio_platform_data *pdata); |
130 | 130 | ||
131 | static inline void | 131 | static inline void |
132 | dbx500_add_pinctrl(struct device *parent, const char *name) | 132 | dbx500_add_pinctrl(struct device *parent, const char *name, |
133 | resource_size_t base) | ||
133 | { | 134 | { |
135 | struct resource res[] = { | ||
136 | DEFINE_RES_MEM(base, SZ_8K), | ||
137 | }; | ||
134 | struct platform_device_info pdevinfo = { | 138 | struct platform_device_info pdevinfo = { |
135 | .parent = parent, | 139 | .parent = parent, |
136 | .name = name, | 140 | .name = name, |
137 | .id = -1, | 141 | .id = -1, |
142 | .res = res, | ||
143 | .num_res = ARRAY_SIZE(res), | ||
138 | }; | 144 | }; |
139 | 145 | ||
140 | platform_device_register_full(&pdevinfo); | 146 | platform_device_register_full(&pdevinfo); |
diff --git a/arch/arm/mach-vexpress/v2m.c b/arch/arm/mach-vexpress/v2m.c index 560e0df728f8..359f782c747d 100644 --- a/arch/arm/mach-vexpress/v2m.c +++ b/arch/arm/mach-vexpress/v2m.c | |||
@@ -589,7 +589,7 @@ void __init v2m_dt_init_early(void) | |||
589 | return; | 589 | return; |
590 | 590 | ||
591 | /* Confirm board type against DT property, if available */ | 591 | /* Confirm board type against DT property, if available */ |
592 | if (of_property_read_u32(allnodes, "arm,hbi", &dt_hbi) == 0) { | 592 | if (of_property_read_u32(of_allnodes, "arm,hbi", &dt_hbi) == 0) { |
593 | int site = v2m_get_master_site(); | 593 | int site = v2m_get_master_site(); |
594 | u32 id = readl(v2m_sysreg_base + (site == SYS_CFG_SITE_DB2 ? | 594 | u32 id = readl(v2m_sysreg_base + (site == SYS_CFG_SITE_DB2 ? |
595 | V2M_SYS_PROCID1 : V2M_SYS_PROCID0)); | 595 | V2M_SYS_PROCID1 : V2M_SYS_PROCID0)); |
diff --git a/arch/arm/mm/mmap.c b/arch/arm/mm/mmap.c index ce8cb1970d7a..10062ceadd1c 100644 --- a/arch/arm/mm/mmap.c +++ b/arch/arm/mm/mmap.c | |||
@@ -11,18 +11,6 @@ | |||
11 | #include <linux/random.h> | 11 | #include <linux/random.h> |
12 | #include <asm/cachetype.h> | 12 | #include <asm/cachetype.h> |
13 | 13 | ||
14 | static inline unsigned long COLOUR_ALIGN_DOWN(unsigned long addr, | ||
15 | unsigned long pgoff) | ||
16 | { | ||
17 | unsigned long base = addr & ~(SHMLBA-1); | ||
18 | unsigned long off = (pgoff << PAGE_SHIFT) & (SHMLBA-1); | ||
19 | |||
20 | if (base + off <= addr) | ||
21 | return base + off; | ||
22 | |||
23 | return base - off; | ||
24 | } | ||
25 | |||
26 | #define COLOUR_ALIGN(addr,pgoff) \ | 14 | #define COLOUR_ALIGN(addr,pgoff) \ |
27 | ((((addr)+SHMLBA-1)&~(SHMLBA-1)) + \ | 15 | ((((addr)+SHMLBA-1)&~(SHMLBA-1)) + \ |
28 | (((pgoff)<<PAGE_SHIFT) & (SHMLBA-1))) | 16 | (((pgoff)<<PAGE_SHIFT) & (SHMLBA-1))) |
@@ -69,9 +57,9 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, | |||
69 | { | 57 | { |
70 | struct mm_struct *mm = current->mm; | 58 | struct mm_struct *mm = current->mm; |
71 | struct vm_area_struct *vma; | 59 | struct vm_area_struct *vma; |
72 | unsigned long start_addr; | ||
73 | int do_align = 0; | 60 | int do_align = 0; |
74 | int aliasing = cache_is_vipt_aliasing(); | 61 | int aliasing = cache_is_vipt_aliasing(); |
62 | struct vm_unmapped_area_info info; | ||
75 | 63 | ||
76 | /* | 64 | /* |
77 | * We only need to do colour alignment if either the I or D | 65 | * We only need to do colour alignment if either the I or D |
@@ -104,46 +92,14 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, | |||
104 | (!vma || addr + len <= vma->vm_start)) | 92 | (!vma || addr + len <= vma->vm_start)) |
105 | return addr; | 93 | return addr; |
106 | } | 94 | } |
107 | if (len > mm->cached_hole_size) { | ||
108 | start_addr = addr = mm->free_area_cache; | ||
109 | } else { | ||
110 | start_addr = addr = mm->mmap_base; | ||
111 | mm->cached_hole_size = 0; | ||
112 | } | ||
113 | 95 | ||
114 | full_search: | 96 | info.flags = 0; |
115 | if (do_align) | 97 | info.length = len; |
116 | addr = COLOUR_ALIGN(addr, pgoff); | 98 | info.low_limit = mm->mmap_base; |
117 | else | 99 | info.high_limit = TASK_SIZE; |
118 | addr = PAGE_ALIGN(addr); | 100 | info.align_mask = do_align ? (PAGE_MASK & (SHMLBA - 1)) : 0; |
119 | 101 | info.align_offset = pgoff << PAGE_SHIFT; | |
120 | for (vma = find_vma(mm, addr); ; vma = vma->vm_next) { | 102 | return vm_unmapped_area(&info); |
121 | /* At this point: (!vma || addr < vma->vm_end). */ | ||
122 | if (TASK_SIZE - len < addr) { | ||
123 | /* | ||
124 | * Start a new search - just in case we missed | ||
125 | * some holes. | ||
126 | */ | ||
127 | if (start_addr != TASK_UNMAPPED_BASE) { | ||
128 | start_addr = addr = TASK_UNMAPPED_BASE; | ||
129 | mm->cached_hole_size = 0; | ||
130 | goto full_search; | ||
131 | } | ||
132 | return -ENOMEM; | ||
133 | } | ||
134 | if (!vma || addr + len <= vma->vm_start) { | ||
135 | /* | ||
136 | * Remember the place where we stopped the search: | ||
137 | */ | ||
138 | mm->free_area_cache = addr + len; | ||
139 | return addr; | ||
140 | } | ||
141 | if (addr + mm->cached_hole_size < vma->vm_start) | ||
142 | mm->cached_hole_size = vma->vm_start - addr; | ||
143 | addr = vma->vm_end; | ||
144 | if (do_align) | ||
145 | addr = COLOUR_ALIGN(addr, pgoff); | ||
146 | } | ||
147 | } | 103 | } |
148 | 104 | ||
149 | unsigned long | 105 | unsigned long |
@@ -156,6 +112,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, | |||
156 | unsigned long addr = addr0; | 112 | unsigned long addr = addr0; |
157 | int do_align = 0; | 113 | int do_align = 0; |
158 | int aliasing = cache_is_vipt_aliasing(); | 114 | int aliasing = cache_is_vipt_aliasing(); |
115 | struct vm_unmapped_area_info info; | ||
159 | 116 | ||
160 | /* | 117 | /* |
161 | * We only need to do colour alignment if either the I or D | 118 | * We only need to do colour alignment if either the I or D |
@@ -187,70 +144,27 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, | |||
187 | return addr; | 144 | return addr; |
188 | } | 145 | } |
189 | 146 | ||
190 | /* check if free_area_cache is useful for us */ | 147 | info.flags = VM_UNMAPPED_AREA_TOPDOWN; |
191 | if (len <= mm->cached_hole_size) { | 148 | info.length = len; |
192 | mm->cached_hole_size = 0; | 149 | info.low_limit = PAGE_SIZE; |
193 | mm->free_area_cache = mm->mmap_base; | 150 | info.high_limit = mm->mmap_base; |
194 | } | 151 | info.align_mask = do_align ? (PAGE_MASK & (SHMLBA - 1)) : 0; |
195 | 152 | info.align_offset = pgoff << PAGE_SHIFT; | |
196 | /* either no address requested or can't fit in requested address hole */ | 153 | addr = vm_unmapped_area(&info); |
197 | addr = mm->free_area_cache; | ||
198 | if (do_align) { | ||
199 | unsigned long base = COLOUR_ALIGN_DOWN(addr - len, pgoff); | ||
200 | addr = base + len; | ||
201 | } | ||
202 | |||
203 | /* make sure it can fit in the remaining address space */ | ||
204 | if (addr > len) { | ||
205 | vma = find_vma(mm, addr-len); | ||
206 | if (!vma || addr <= vma->vm_start) | ||
207 | /* remember the address as a hint for next time */ | ||
208 | return (mm->free_area_cache = addr-len); | ||
209 | } | ||
210 | |||
211 | if (mm->mmap_base < len) | ||
212 | goto bottomup; | ||
213 | |||
214 | addr = mm->mmap_base - len; | ||
215 | if (do_align) | ||
216 | addr = COLOUR_ALIGN_DOWN(addr, pgoff); | ||
217 | |||
218 | do { | ||
219 | /* | ||
220 | * Lookup failure means no vma is above this address, | ||
221 | * else if new region fits below vma->vm_start, | ||
222 | * return with success: | ||
223 | */ | ||
224 | vma = find_vma(mm, addr); | ||
225 | if (!vma || addr+len <= vma->vm_start) | ||
226 | /* remember the address as a hint for next time */ | ||
227 | return (mm->free_area_cache = addr); | ||
228 | 154 | ||
229 | /* remember the largest hole we saw so far */ | ||
230 | if (addr + mm->cached_hole_size < vma->vm_start) | ||
231 | mm->cached_hole_size = vma->vm_start - addr; | ||
232 | |||
233 | /* try just below the current vma->vm_start */ | ||
234 | addr = vma->vm_start - len; | ||
235 | if (do_align) | ||
236 | addr = COLOUR_ALIGN_DOWN(addr, pgoff); | ||
237 | } while (len < vma->vm_start); | ||
238 | |||
239 | bottomup: | ||
240 | /* | 155 | /* |
241 | * A failed mmap() very likely causes application failure, | 156 | * A failed mmap() very likely causes application failure, |
242 | * so fall back to the bottom-up function here. This scenario | 157 | * so fall back to the bottom-up function here. This scenario |
243 | * can happen with large stack limits and large mmap() | 158 | * can happen with large stack limits and large mmap() |
244 | * allocations. | 159 | * allocations. |
245 | */ | 160 | */ |
246 | mm->cached_hole_size = ~0UL; | 161 | if (addr & ~PAGE_MASK) { |
247 | mm->free_area_cache = TASK_UNMAPPED_BASE; | 162 | VM_BUG_ON(addr != -ENOMEM); |
248 | addr = arch_get_unmapped_area(filp, addr0, len, pgoff, flags); | 163 | info.flags = 0; |
249 | /* | 164 | info.low_limit = mm->mmap_base; |
250 | * Restore the topdown base: | 165 | info.high_limit = TASK_SIZE; |
251 | */ | 166 | addr = vm_unmapped_area(&info); |
252 | mm->free_area_cache = mm->mmap_base; | 167 | } |
253 | mm->cached_hole_size = ~0UL; | ||
254 | 168 | ||
255 | return addr; | 169 | return addr; |
256 | } | 170 | } |
@@ -279,7 +193,7 @@ void arch_pick_mmap_layout(struct mm_struct *mm) | |||
279 | * You really shouldn't be using read() or write() on /dev/mem. This | 193 | * You really shouldn't be using read() or write() on /dev/mem. This |
280 | * might go away in the future. | 194 | * might go away in the future. |
281 | */ | 195 | */ |
282 | int valid_phys_addr_range(unsigned long addr, size_t size) | 196 | int valid_phys_addr_range(phys_addr_t addr, size_t size) |
283 | { | 197 | { |
284 | if (addr < PHYS_OFFSET) | 198 | if (addr < PHYS_OFFSET) |
285 | return 0; | 199 | return 0; |
diff --git a/arch/arm/plat-nomadik/include/plat/gpio-nomadik.h b/arch/arm/plat-nomadik/include/plat/gpio-nomadik.h deleted file mode 100644 index c08a54d9d889..000000000000 --- a/arch/arm/plat-nomadik/include/plat/gpio-nomadik.h +++ /dev/null | |||
@@ -1,102 +0,0 @@ | |||
1 | /* | ||
2 | * Structures and registers for GPIO access in the Nomadik SoC | ||
3 | * | ||
4 | * Copyright (C) 2008 STMicroelectronics | ||
5 | * Author: Prafulla WADASKAR <prafulla.wadaskar@st.com> | ||
6 | * Copyright (C) 2009 Alessandro Rubini <rubini@unipv.it> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #ifndef __PLAT_NOMADIK_GPIO | ||
14 | #define __PLAT_NOMADIK_GPIO | ||
15 | |||
16 | /* | ||
17 | * "nmk_gpio" and "NMK_GPIO" stand for "Nomadik GPIO", leaving | ||
18 | * the "gpio" namespace for generic and cross-machine functions | ||
19 | */ | ||
20 | |||
21 | /* Register in the logic block */ | ||
22 | #define NMK_GPIO_DAT 0x00 | ||
23 | #define NMK_GPIO_DATS 0x04 | ||
24 | #define NMK_GPIO_DATC 0x08 | ||
25 | #define NMK_GPIO_PDIS 0x0c | ||
26 | #define NMK_GPIO_DIR 0x10 | ||
27 | #define NMK_GPIO_DIRS 0x14 | ||
28 | #define NMK_GPIO_DIRC 0x18 | ||
29 | #define NMK_GPIO_SLPC 0x1c | ||
30 | #define NMK_GPIO_AFSLA 0x20 | ||
31 | #define NMK_GPIO_AFSLB 0x24 | ||
32 | #define NMK_GPIO_LOWEMI 0x28 | ||
33 | |||
34 | #define NMK_GPIO_RIMSC 0x40 | ||
35 | #define NMK_GPIO_FIMSC 0x44 | ||
36 | #define NMK_GPIO_IS 0x48 | ||
37 | #define NMK_GPIO_IC 0x4c | ||
38 | #define NMK_GPIO_RWIMSC 0x50 | ||
39 | #define NMK_GPIO_FWIMSC 0x54 | ||
40 | #define NMK_GPIO_WKS 0x58 | ||
41 | |||
42 | /* Alternate functions: function C is set in hw by setting both A and B */ | ||
43 | #define NMK_GPIO_ALT_GPIO 0 | ||
44 | #define NMK_GPIO_ALT_A 1 | ||
45 | #define NMK_GPIO_ALT_B 2 | ||
46 | #define NMK_GPIO_ALT_C (NMK_GPIO_ALT_A | NMK_GPIO_ALT_B) | ||
47 | |||
48 | #define NMK_GPIO_ALT_CX_SHIFT 2 | ||
49 | #define NMK_GPIO_ALT_C1 ((1<<NMK_GPIO_ALT_CX_SHIFT) | NMK_GPIO_ALT_C) | ||
50 | #define NMK_GPIO_ALT_C2 ((2<<NMK_GPIO_ALT_CX_SHIFT) | NMK_GPIO_ALT_C) | ||
51 | #define NMK_GPIO_ALT_C3 ((3<<NMK_GPIO_ALT_CX_SHIFT) | NMK_GPIO_ALT_C) | ||
52 | #define NMK_GPIO_ALT_C4 ((4<<NMK_GPIO_ALT_CX_SHIFT) | NMK_GPIO_ALT_C) | ||
53 | |||
54 | /* Pull up/down values */ | ||
55 | enum nmk_gpio_pull { | ||
56 | NMK_GPIO_PULL_NONE, | ||
57 | NMK_GPIO_PULL_UP, | ||
58 | NMK_GPIO_PULL_DOWN, | ||
59 | }; | ||
60 | |||
61 | /* Sleep mode */ | ||
62 | enum nmk_gpio_slpm { | ||
63 | NMK_GPIO_SLPM_INPUT, | ||
64 | NMK_GPIO_SLPM_WAKEUP_ENABLE = NMK_GPIO_SLPM_INPUT, | ||
65 | NMK_GPIO_SLPM_NOCHANGE, | ||
66 | NMK_GPIO_SLPM_WAKEUP_DISABLE = NMK_GPIO_SLPM_NOCHANGE, | ||
67 | }; | ||
68 | |||
69 | extern int nmk_gpio_set_slpm(int gpio, enum nmk_gpio_slpm mode); | ||
70 | extern int nmk_gpio_set_pull(int gpio, enum nmk_gpio_pull pull); | ||
71 | #ifdef CONFIG_PINCTRL_NOMADIK | ||
72 | extern int nmk_gpio_set_mode(int gpio, int gpio_mode); | ||
73 | #else | ||
74 | static inline int nmk_gpio_set_mode(int gpio, int gpio_mode) | ||
75 | { | ||
76 | return -ENODEV; | ||
77 | } | ||
78 | #endif | ||
79 | extern int nmk_gpio_get_mode(int gpio); | ||
80 | |||
81 | extern void nmk_gpio_wakeups_suspend(void); | ||
82 | extern void nmk_gpio_wakeups_resume(void); | ||
83 | |||
84 | extern void nmk_gpio_clocks_enable(void); | ||
85 | extern void nmk_gpio_clocks_disable(void); | ||
86 | |||
87 | extern void nmk_gpio_read_pull(int gpio_bank, u32 *pull_up); | ||
88 | |||
89 | /* | ||
90 | * Platform data to register a block: only the initial gpio/irq number. | ||
91 | */ | ||
92 | struct nmk_gpio_platform_data { | ||
93 | char *name; | ||
94 | int first_gpio; | ||
95 | int first_irq; | ||
96 | int num_gpio; | ||
97 | u32 (*get_secondary_status)(unsigned int bank); | ||
98 | void (*set_ioforce)(bool enable); | ||
99 | bool supports_sleepmode; | ||
100 | }; | ||
101 | |||
102 | #endif /* __PLAT_NOMADIK_GPIO */ | ||
diff --git a/arch/arm/plat-nomadik/include/plat/pincfg.h b/arch/arm/plat-nomadik/include/plat/pincfg.h deleted file mode 100644 index 3b8ec60af351..000000000000 --- a/arch/arm/plat-nomadik/include/plat/pincfg.h +++ /dev/null | |||
@@ -1,173 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (C) ST-Ericsson SA 2010 | ||
3 | * | ||
4 | * License terms: GNU General Public License, version 2 | ||
5 | * Author: Rabin Vincent <rabin.vincent@stericsson.com> for ST-Ericsson | ||
6 | * | ||
7 | * Based on arch/arm/mach-pxa/include/mach/mfp.h: | ||
8 | * Copyright (C) 2007 Marvell International Ltd. | ||
9 | * eric miao <eric.miao@marvell.com> | ||
10 | */ | ||
11 | |||
12 | #ifndef __PLAT_PINCFG_H | ||
13 | #define __PLAT_PINCFG_H | ||
14 | |||
15 | /* | ||
16 | * pin configurations are represented by 32-bit integers: | ||
17 | * | ||
18 | * bit 0.. 8 - Pin Number (512 Pins Maximum) | ||
19 | * bit 9..10 - Alternate Function Selection | ||
20 | * bit 11..12 - Pull up/down state | ||
21 | * bit 13 - Sleep mode behaviour | ||
22 | * bit 14 - Direction | ||
23 | * bit 15 - Value (if output) | ||
24 | * bit 16..18 - SLPM pull up/down state | ||
25 | * bit 19..20 - SLPM direction | ||
26 | * bit 21..22 - SLPM Value (if output) | ||
27 | * bit 23..25 - PDIS value (if input) | ||
28 | * bit 26 - Gpio mode | ||
29 | * bit 27 - Sleep mode | ||
30 | * | ||
31 | * to facilitate the definition, the following macros are provided | ||
32 | * | ||
33 | * PIN_CFG_DEFAULT - default config (0): | ||
34 | * pull up/down = disabled | ||
35 | * sleep mode = input/wakeup | ||
36 | * direction = input | ||
37 | * value = low | ||
38 | * SLPM direction = same as normal | ||
39 | * SLPM pull = same as normal | ||
40 | * SLPM value = same as normal | ||
41 | * | ||
42 | * PIN_CFG - default config with alternate function | ||
43 | */ | ||
44 | |||
45 | typedef unsigned long pin_cfg_t; | ||
46 | |||
47 | #define PIN_NUM_MASK 0x1ff | ||
48 | #define PIN_NUM(x) ((x) & PIN_NUM_MASK) | ||
49 | |||
50 | #define PIN_ALT_SHIFT 9 | ||
51 | #define PIN_ALT_MASK (0x3 << PIN_ALT_SHIFT) | ||
52 | #define PIN_ALT(x) (((x) & PIN_ALT_MASK) >> PIN_ALT_SHIFT) | ||
53 | #define PIN_GPIO (NMK_GPIO_ALT_GPIO << PIN_ALT_SHIFT) | ||
54 | #define PIN_ALT_A (NMK_GPIO_ALT_A << PIN_ALT_SHIFT) | ||
55 | #define PIN_ALT_B (NMK_GPIO_ALT_B << PIN_ALT_SHIFT) | ||
56 | #define PIN_ALT_C (NMK_GPIO_ALT_C << PIN_ALT_SHIFT) | ||
57 | |||
58 | #define PIN_PULL_SHIFT 11 | ||
59 | #define PIN_PULL_MASK (0x3 << PIN_PULL_SHIFT) | ||
60 | #define PIN_PULL(x) (((x) & PIN_PULL_MASK) >> PIN_PULL_SHIFT) | ||
61 | #define PIN_PULL_NONE (NMK_GPIO_PULL_NONE << PIN_PULL_SHIFT) | ||
62 | #define PIN_PULL_UP (NMK_GPIO_PULL_UP << PIN_PULL_SHIFT) | ||
63 | #define PIN_PULL_DOWN (NMK_GPIO_PULL_DOWN << PIN_PULL_SHIFT) | ||
64 | |||
65 | #define PIN_SLPM_SHIFT 13 | ||
66 | #define PIN_SLPM_MASK (0x1 << PIN_SLPM_SHIFT) | ||
67 | #define PIN_SLPM(x) (((x) & PIN_SLPM_MASK) >> PIN_SLPM_SHIFT) | ||
68 | #define PIN_SLPM_MAKE_INPUT (NMK_GPIO_SLPM_INPUT << PIN_SLPM_SHIFT) | ||
69 | #define PIN_SLPM_NOCHANGE (NMK_GPIO_SLPM_NOCHANGE << PIN_SLPM_SHIFT) | ||
70 | /* These two replace the above in DB8500v2+ */ | ||
71 | #define PIN_SLPM_WAKEUP_ENABLE (NMK_GPIO_SLPM_WAKEUP_ENABLE << PIN_SLPM_SHIFT) | ||
72 | #define PIN_SLPM_WAKEUP_DISABLE (NMK_GPIO_SLPM_WAKEUP_DISABLE << PIN_SLPM_SHIFT) | ||
73 | #define PIN_SLPM_USE_MUX_SETTINGS_IN_SLEEP PIN_SLPM_WAKEUP_DISABLE | ||
74 | |||
75 | #define PIN_SLPM_GPIO PIN_SLPM_WAKEUP_ENABLE /* In SLPM, pin is a gpio */ | ||
76 | #define PIN_SLPM_ALTFUNC PIN_SLPM_WAKEUP_DISABLE /* In SLPM, pin is altfunc */ | ||
77 | |||
78 | #define PIN_DIR_SHIFT 14 | ||
79 | #define PIN_DIR_MASK (0x1 << PIN_DIR_SHIFT) | ||
80 | #define PIN_DIR(x) (((x) & PIN_DIR_MASK) >> PIN_DIR_SHIFT) | ||
81 | #define PIN_DIR_INPUT (0 << PIN_DIR_SHIFT) | ||
82 | #define PIN_DIR_OUTPUT (1 << PIN_DIR_SHIFT) | ||
83 | |||
84 | #define PIN_VAL_SHIFT 15 | ||
85 | #define PIN_VAL_MASK (0x1 << PIN_VAL_SHIFT) | ||
86 | #define PIN_VAL(x) (((x) & PIN_VAL_MASK) >> PIN_VAL_SHIFT) | ||
87 | #define PIN_VAL_LOW (0 << PIN_VAL_SHIFT) | ||
88 | #define PIN_VAL_HIGH (1 << PIN_VAL_SHIFT) | ||
89 | |||
90 | #define PIN_SLPM_PULL_SHIFT 16 | ||
91 | #define PIN_SLPM_PULL_MASK (0x7 << PIN_SLPM_PULL_SHIFT) | ||
92 | #define PIN_SLPM_PULL(x) \ | ||
93 | (((x) & PIN_SLPM_PULL_MASK) >> PIN_SLPM_PULL_SHIFT) | ||
94 | #define PIN_SLPM_PULL_NONE \ | ||
95 | ((1 + NMK_GPIO_PULL_NONE) << PIN_SLPM_PULL_SHIFT) | ||
96 | #define PIN_SLPM_PULL_UP \ | ||
97 | ((1 + NMK_GPIO_PULL_UP) << PIN_SLPM_PULL_SHIFT) | ||
98 | #define PIN_SLPM_PULL_DOWN \ | ||
99 | ((1 + NMK_GPIO_PULL_DOWN) << PIN_SLPM_PULL_SHIFT) | ||
100 | |||
101 | #define PIN_SLPM_DIR_SHIFT 19 | ||
102 | #define PIN_SLPM_DIR_MASK (0x3 << PIN_SLPM_DIR_SHIFT) | ||
103 | #define PIN_SLPM_DIR(x) \ | ||
104 | (((x) & PIN_SLPM_DIR_MASK) >> PIN_SLPM_DIR_SHIFT) | ||
105 | #define PIN_SLPM_DIR_INPUT ((1 + 0) << PIN_SLPM_DIR_SHIFT) | ||
106 | #define PIN_SLPM_DIR_OUTPUT ((1 + 1) << PIN_SLPM_DIR_SHIFT) | ||
107 | |||
108 | #define PIN_SLPM_VAL_SHIFT 21 | ||
109 | #define PIN_SLPM_VAL_MASK (0x3 << PIN_SLPM_VAL_SHIFT) | ||
110 | #define PIN_SLPM_VAL(x) \ | ||
111 | (((x) & PIN_SLPM_VAL_MASK) >> PIN_SLPM_VAL_SHIFT) | ||
112 | #define PIN_SLPM_VAL_LOW ((1 + 0) << PIN_SLPM_VAL_SHIFT) | ||
113 | #define PIN_SLPM_VAL_HIGH ((1 + 1) << PIN_SLPM_VAL_SHIFT) | ||
114 | |||
115 | #define PIN_SLPM_PDIS_SHIFT 23 | ||
116 | #define PIN_SLPM_PDIS_MASK (0x3 << PIN_SLPM_PDIS_SHIFT) | ||
117 | #define PIN_SLPM_PDIS(x) \ | ||
118 | (((x) & PIN_SLPM_PDIS_MASK) >> PIN_SLPM_PDIS_SHIFT) | ||
119 | #define PIN_SLPM_PDIS_NO_CHANGE (0 << PIN_SLPM_PDIS_SHIFT) | ||
120 | #define PIN_SLPM_PDIS_DISABLED (1 << PIN_SLPM_PDIS_SHIFT) | ||
121 | #define PIN_SLPM_PDIS_ENABLED (2 << PIN_SLPM_PDIS_SHIFT) | ||
122 | |||
123 | #define PIN_LOWEMI_SHIFT 25 | ||
124 | #define PIN_LOWEMI_MASK (0x1 << PIN_LOWEMI_SHIFT) | ||
125 | #define PIN_LOWEMI(x) (((x) & PIN_LOWEMI_MASK) >> PIN_LOWEMI_SHIFT) | ||
126 | #define PIN_LOWEMI_DISABLED (0 << PIN_LOWEMI_SHIFT) | ||
127 | #define PIN_LOWEMI_ENABLED (1 << PIN_LOWEMI_SHIFT) | ||
128 | |||
129 | #define PIN_GPIOMODE_SHIFT 26 | ||
130 | #define PIN_GPIOMODE_MASK (0x1 << PIN_GPIOMODE_SHIFT) | ||
131 | #define PIN_GPIOMODE(x) (((x) & PIN_GPIOMODE_MASK) >> PIN_GPIOMODE_SHIFT) | ||
132 | #define PIN_GPIOMODE_DISABLED (0 << PIN_GPIOMODE_SHIFT) | ||
133 | #define PIN_GPIOMODE_ENABLED (1 << PIN_GPIOMODE_SHIFT) | ||
134 | |||
135 | #define PIN_SLEEPMODE_SHIFT 27 | ||
136 | #define PIN_SLEEPMODE_MASK (0x1 << PIN_SLEEPMODE_SHIFT) | ||
137 | #define PIN_SLEEPMODE(x) (((x) & PIN_SLEEPMODE_MASK) >> PIN_SLEEPMODE_SHIFT) | ||
138 | #define PIN_SLEEPMODE_DISABLED (0 << PIN_SLEEPMODE_SHIFT) | ||
139 | #define PIN_SLEEPMODE_ENABLED (1 << PIN_SLEEPMODE_SHIFT) | ||
140 | |||
141 | |||
142 | /* Shortcuts. Use these instead of separate DIR, PULL, and VAL. */ | ||
143 | #define PIN_INPUT_PULLDOWN (PIN_DIR_INPUT | PIN_PULL_DOWN) | ||
144 | #define PIN_INPUT_PULLUP (PIN_DIR_INPUT | PIN_PULL_UP) | ||
145 | #define PIN_INPUT_NOPULL (PIN_DIR_INPUT | PIN_PULL_NONE) | ||
146 | #define PIN_OUTPUT_LOW (PIN_DIR_OUTPUT | PIN_VAL_LOW) | ||
147 | #define PIN_OUTPUT_HIGH (PIN_DIR_OUTPUT | PIN_VAL_HIGH) | ||
148 | |||
149 | #define PIN_SLPM_INPUT_PULLDOWN (PIN_SLPM_DIR_INPUT | PIN_SLPM_PULL_DOWN) | ||
150 | #define PIN_SLPM_INPUT_PULLUP (PIN_SLPM_DIR_INPUT | PIN_SLPM_PULL_UP) | ||
151 | #define PIN_SLPM_INPUT_NOPULL (PIN_SLPM_DIR_INPUT | PIN_SLPM_PULL_NONE) | ||
152 | #define PIN_SLPM_OUTPUT_LOW (PIN_SLPM_DIR_OUTPUT | PIN_SLPM_VAL_LOW) | ||
153 | #define PIN_SLPM_OUTPUT_HIGH (PIN_SLPM_DIR_OUTPUT | PIN_SLPM_VAL_HIGH) | ||
154 | |||
155 | #define PIN_CFG_DEFAULT (0) | ||
156 | |||
157 | #define PIN_CFG(num, alt) \ | ||
158 | (PIN_CFG_DEFAULT |\ | ||
159 | (PIN_NUM(num) | PIN_##alt)) | ||
160 | |||
161 | #define PIN_CFG_INPUT(num, alt, pull) \ | ||
162 | (PIN_CFG_DEFAULT |\ | ||
163 | (PIN_NUM(num) | PIN_##alt | PIN_INPUT_##pull)) | ||
164 | |||
165 | #define PIN_CFG_OUTPUT(num, alt, val) \ | ||
166 | (PIN_CFG_DEFAULT |\ | ||
167 | (PIN_NUM(num) | PIN_##alt | PIN_OUTPUT_##val)) | ||
168 | |||
169 | extern int nmk_config_pin(pin_cfg_t cfg, bool sleep); | ||
170 | extern int nmk_config_pins(pin_cfg_t *cfgs, int num); | ||
171 | extern int nmk_config_pins_sleep(pin_cfg_t *cfgs, int num); | ||
172 | |||
173 | #endif | ||
diff --git a/arch/arm/plat-omap/include/plat/mmc.h b/arch/arm/plat-omap/include/plat/mmc.h index 8b4e4f2da2f5..346af5b490be 100644 --- a/arch/arm/plat-omap/include/plat/mmc.h +++ b/arch/arm/plat-omap/include/plat/mmc.h | |||
@@ -126,6 +126,7 @@ struct omap_mmc_platform_data { | |||
126 | /* we can put the features above into this variable */ | 126 | /* we can put the features above into this variable */ |
127 | #define HSMMC_HAS_PBIAS (1 << 0) | 127 | #define HSMMC_HAS_PBIAS (1 << 0) |
128 | #define HSMMC_HAS_UPDATED_RESET (1 << 1) | 128 | #define HSMMC_HAS_UPDATED_RESET (1 << 1) |
129 | #define HSMMC_HAS_HSPE_SUPPORT (1 << 2) | ||
129 | unsigned features; | 130 | unsigned features; |
130 | 131 | ||
131 | int switch_pin; /* gpio (card detect) */ | 132 | int switch_pin; /* gpio (card detect) */ |
diff --git a/arch/arm/plat-omap/include/plat/serial.h b/arch/arm/plat-omap/include/plat/serial.h index 65fce44dce34..b780470d03ea 100644 --- a/arch/arm/plat-omap/include/plat/serial.h +++ b/arch/arm/plat-omap/include/plat/serial.h | |||
@@ -109,15 +109,6 @@ | |||
109 | #define OMAP5UART4 OMAP4UART4 | 109 | #define OMAP5UART4 OMAP4UART4 |
110 | #define ZOOM_UART 95 /* Only on zoom2/3 */ | 110 | #define ZOOM_UART 95 /* Only on zoom2/3 */ |
111 | 111 | ||
112 | /* This is only used by 8250.c for omap1510 */ | ||
113 | #define is_omap_port(pt) ({int __ret = 0; \ | ||
114 | if ((pt)->port.mapbase == OMAP1_UART1_BASE || \ | ||
115 | (pt)->port.mapbase == OMAP1_UART2_BASE || \ | ||
116 | (pt)->port.mapbase == OMAP1_UART3_BASE) \ | ||
117 | __ret = 1; \ | ||
118 | __ret; \ | ||
119 | }) | ||
120 | |||
121 | #ifndef __ASSEMBLER__ | 112 | #ifndef __ASSEMBLER__ |
122 | 113 | ||
123 | struct omap_board_data; | 114 | struct omap_board_data; |
diff --git a/arch/arm/plat-spear/Kconfig b/arch/arm/plat-spear/Kconfig index f8db7b2deb36..87dbd81bdf51 100644 --- a/arch/arm/plat-spear/Kconfig +++ b/arch/arm/plat-spear/Kconfig | |||
@@ -12,6 +12,7 @@ config ARCH_SPEAR13XX | |||
12 | bool "ST SPEAr13xx with Device Tree" | 12 | bool "ST SPEAr13xx with Device Tree" |
13 | select ARM_GIC | 13 | select ARM_GIC |
14 | select CPU_V7 | 14 | select CPU_V7 |
15 | select GPIO_SPEAR_SPICS | ||
15 | select HAVE_SMP | 16 | select HAVE_SMP |
16 | select MIGHT_HAVE_CACHE_L2X0 | 17 | select MIGHT_HAVE_CACHE_L2X0 |
17 | select PINCTRL | 18 | select PINCTRL |
diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile index 364191f3be43..c95c5cb212fd 100644 --- a/arch/arm64/Makefile +++ b/arch/arm64/Makefile | |||
@@ -41,20 +41,24 @@ libs-y := arch/arm64/lib/ $(libs-y) | |||
41 | libs-y += $(LIBGCC) | 41 | libs-y += $(LIBGCC) |
42 | 42 | ||
43 | # Default target when executing plain make | 43 | # Default target when executing plain make |
44 | KBUILD_IMAGE := Image.gz | 44 | KBUILD_IMAGE := Image.gz |
45 | KBUILD_DTBS := dtbs | ||
45 | 46 | ||
46 | all: $(KBUILD_IMAGE) | 47 | all: $(KBUILD_IMAGE) $(KBUILD_DTBS) |
47 | 48 | ||
48 | boot := arch/arm64/boot | 49 | boot := arch/arm64/boot |
49 | 50 | ||
50 | Image Image.gz: vmlinux | 51 | Image Image.gz: vmlinux |
51 | $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@ | 52 | $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ |
52 | 53 | ||
53 | zinstall install: vmlinux | 54 | zinstall install: vmlinux |
54 | $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $@ | 55 | $(Q)$(MAKE) $(build)=$(boot) $@ |
55 | 56 | ||
56 | %.dtb: | 57 | %.dtb: scripts |
57 | $(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@ | 58 | $(Q)$(MAKE) $(build)=$(boot)/dts $(boot)/dts/$@ |
59 | |||
60 | dtbs: scripts | ||
61 | $(Q)$(MAKE) $(build)=$(boot)/dts dtbs | ||
58 | 62 | ||
59 | # We use MRPROPER_FILES and CLEAN_FILES now | 63 | # We use MRPROPER_FILES and CLEAN_FILES now |
60 | archclean: | 64 | archclean: |
@@ -63,6 +67,7 @@ archclean: | |||
63 | define archhelp | 67 | define archhelp |
64 | echo '* Image.gz - Compressed kernel image (arch/$(ARCH)/boot/Image.gz)' | 68 | echo '* Image.gz - Compressed kernel image (arch/$(ARCH)/boot/Image.gz)' |
65 | echo ' Image - Uncompressed kernel image (arch/$(ARCH)/boot/Image)' | 69 | echo ' Image - Uncompressed kernel image (arch/$(ARCH)/boot/Image)' |
70 | echo '* dtbs - Build device tree blobs for enabled boards' | ||
66 | echo ' install - Install uncompressed kernel' | 71 | echo ' install - Install uncompressed kernel' |
67 | echo ' zinstall - Install compressed kernel' | 72 | echo ' zinstall - Install compressed kernel' |
68 | echo ' Install using (your) ~/bin/installkernel or' | 73 | echo ' Install using (your) ~/bin/installkernel or' |
diff --git a/arch/arm64/boot/Makefile b/arch/arm64/boot/Makefile index eca209b2b0bf..5a0e3ab854a5 100644 --- a/arch/arm64/boot/Makefile +++ b/arch/arm64/boot/Makefile | |||
@@ -22,9 +22,6 @@ $(obj)/Image: vmlinux FORCE | |||
22 | $(obj)/Image.gz: $(obj)/Image FORCE | 22 | $(obj)/Image.gz: $(obj)/Image FORCE |
23 | $(call if_changed,gzip) | 23 | $(call if_changed,gzip) |
24 | 24 | ||
25 | $(obj)/%.dtb: $(src)/dts/%.dts | ||
26 | $(call cmd,dtc) | ||
27 | |||
28 | install: $(obj)/Image | 25 | install: $(obj)/Image |
29 | $(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \ | 26 | $(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \ |
30 | $(obj)/Image System.map "$(INSTALL_PATH)" | 27 | $(obj)/Image System.map "$(INSTALL_PATH)" |
@@ -32,5 +29,3 @@ install: $(obj)/Image | |||
32 | zinstall: $(obj)/Image.gz | 29 | zinstall: $(obj)/Image.gz |
33 | $(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \ | 30 | $(CONFIG_SHELL) $(srctree)/$(src)/install.sh $(KERNELRELEASE) \ |
34 | $(obj)/Image.gz System.map "$(INSTALL_PATH)" | 31 | $(obj)/Image.gz System.map "$(INSTALL_PATH)" |
35 | |||
36 | clean-files += *.dtb | ||
diff --git a/arch/arm64/boot/dts/.gitignore b/arch/arm64/boot/dts/.gitignore new file mode 100644 index 000000000000..b60ed208c779 --- /dev/null +++ b/arch/arm64/boot/dts/.gitignore | |||
@@ -0,0 +1 @@ | |||
*.dtb | |||
diff --git a/arch/arm64/boot/dts/Makefile b/arch/arm64/boot/dts/Makefile new file mode 100644 index 000000000000..801e2d7fcbc6 --- /dev/null +++ b/arch/arm64/boot/dts/Makefile | |||
@@ -0,0 +1,5 @@ | |||
1 | targets += dtbs | ||
2 | |||
3 | dtbs: $(addprefix $(obj)/, $(dtb-y)) | ||
4 | |||
5 | clean-files := *.dtb | ||
diff --git a/arch/avr32/Kconfig b/arch/avr32/Kconfig index 06e73bf665e9..c2bbc9a72222 100644 --- a/arch/avr32/Kconfig +++ b/arch/avr32/Kconfig | |||
@@ -193,9 +193,6 @@ source "kernel/Kconfig.preempt" | |||
193 | config QUICKLIST | 193 | config QUICKLIST |
194 | def_bool y | 194 | def_bool y |
195 | 195 | ||
196 | config HAVE_ARCH_BOOTMEM | ||
197 | def_bool n | ||
198 | |||
199 | config ARCH_HAVE_MEMORY_PRESENT | 196 | config ARCH_HAVE_MEMORY_PRESENT |
200 | def_bool n | 197 | def_bool n |
201 | 198 | ||
diff --git a/arch/avr32/configs/atngw100_defconfig b/arch/avr32/configs/atngw100_defconfig index a06bfccc2840..f4025db184ff 100644 --- a/arch/avr32/configs/atngw100_defconfig +++ b/arch/avr32/configs/atngw100_defconfig | |||
@@ -109,7 +109,7 @@ CONFIG_USB_GADGET_VBUS_DRAW=350 | |||
109 | CONFIG_USB_ZERO=m | 109 | CONFIG_USB_ZERO=m |
110 | CONFIG_USB_ETH=m | 110 | CONFIG_USB_ETH=m |
111 | CONFIG_USB_GADGETFS=m | 111 | CONFIG_USB_GADGETFS=m |
112 | CONFIG_USB_FILE_STORAGE=m | 112 | CONFIG_USB_MASS_STORAGE=m |
113 | CONFIG_USB_G_SERIAL=m | 113 | CONFIG_USB_G_SERIAL=m |
114 | CONFIG_USB_CDC_COMPOSITE=m | 114 | CONFIG_USB_CDC_COMPOSITE=m |
115 | CONFIG_MMC=y | 115 | CONFIG_MMC=y |
diff --git a/arch/avr32/configs/atngw100_evklcd100_defconfig b/arch/avr32/configs/atngw100_evklcd100_defconfig index d8f1fe80d210..c76a49b9e9d0 100644 --- a/arch/avr32/configs/atngw100_evklcd100_defconfig +++ b/arch/avr32/configs/atngw100_evklcd100_defconfig | |||
@@ -125,7 +125,7 @@ CONFIG_USB_GADGET_VBUS_DRAW=350 | |||
125 | CONFIG_USB_ZERO=m | 125 | CONFIG_USB_ZERO=m |
126 | CONFIG_USB_ETH=m | 126 | CONFIG_USB_ETH=m |
127 | CONFIG_USB_GADGETFS=m | 127 | CONFIG_USB_GADGETFS=m |
128 | CONFIG_USB_FILE_STORAGE=m | 128 | CONFIG_USB_MASS_STORAGE=m |
129 | CONFIG_USB_G_SERIAL=m | 129 | CONFIG_USB_G_SERIAL=m |
130 | CONFIG_USB_CDC_COMPOSITE=m | 130 | CONFIG_USB_CDC_COMPOSITE=m |
131 | CONFIG_MMC=y | 131 | CONFIG_MMC=y |
diff --git a/arch/avr32/configs/atngw100_evklcd101_defconfig b/arch/avr32/configs/atngw100_evklcd101_defconfig index d4c5b19ec950..2d8ab089a64e 100644 --- a/arch/avr32/configs/atngw100_evklcd101_defconfig +++ b/arch/avr32/configs/atngw100_evklcd101_defconfig | |||
@@ -124,7 +124,7 @@ CONFIG_USB_GADGET_VBUS_DRAW=350 | |||
124 | CONFIG_USB_ZERO=m | 124 | CONFIG_USB_ZERO=m |
125 | CONFIG_USB_ETH=m | 125 | CONFIG_USB_ETH=m |
126 | CONFIG_USB_GADGETFS=m | 126 | CONFIG_USB_GADGETFS=m |
127 | CONFIG_USB_FILE_STORAGE=m | 127 | CONFIG_USB_MASS_STORAGE=m |
128 | CONFIG_USB_G_SERIAL=m | 128 | CONFIG_USB_G_SERIAL=m |
129 | CONFIG_USB_CDC_COMPOSITE=m | 129 | CONFIG_USB_CDC_COMPOSITE=m |
130 | CONFIG_MMC=y | 130 | CONFIG_MMC=y |
diff --git a/arch/avr32/configs/atngw100_mrmt_defconfig b/arch/avr32/configs/atngw100_mrmt_defconfig index 77ca4f905d2c..b189e0cab04b 100644 --- a/arch/avr32/configs/atngw100_mrmt_defconfig +++ b/arch/avr32/configs/atngw100_mrmt_defconfig | |||
@@ -99,7 +99,7 @@ CONFIG_SND_ATMEL_AC97C=m | |||
99 | # CONFIG_SND_SPI is not set | 99 | # CONFIG_SND_SPI is not set |
100 | CONFIG_USB_GADGET=m | 100 | CONFIG_USB_GADGET=m |
101 | CONFIG_USB_GADGET_DEBUG_FILES=y | 101 | CONFIG_USB_GADGET_DEBUG_FILES=y |
102 | CONFIG_USB_FILE_STORAGE=m | 102 | CONFIG_USB_MASS_STORAGE=m |
103 | CONFIG_USB_G_SERIAL=m | 103 | CONFIG_USB_G_SERIAL=m |
104 | CONFIG_MMC=y | 104 | CONFIG_MMC=y |
105 | CONFIG_MMC_ATMELMCI=y | 105 | CONFIG_MMC_ATMELMCI=y |
diff --git a/arch/avr32/configs/atngw100mkii_defconfig b/arch/avr32/configs/atngw100mkii_defconfig index 6e0dca4d3131..2e4de42a53c4 100644 --- a/arch/avr32/configs/atngw100mkii_defconfig +++ b/arch/avr32/configs/atngw100mkii_defconfig | |||
@@ -111,7 +111,7 @@ CONFIG_USB_GADGET_VBUS_DRAW=350 | |||
111 | CONFIG_USB_ZERO=m | 111 | CONFIG_USB_ZERO=m |
112 | CONFIG_USB_ETH=m | 112 | CONFIG_USB_ETH=m |
113 | CONFIG_USB_GADGETFS=m | 113 | CONFIG_USB_GADGETFS=m |
114 | CONFIG_USB_FILE_STORAGE=m | 114 | CONFIG_USB_MASS_STORAGE=m |
115 | CONFIG_USB_G_SERIAL=m | 115 | CONFIG_USB_G_SERIAL=m |
116 | CONFIG_USB_CDC_COMPOSITE=m | 116 | CONFIG_USB_CDC_COMPOSITE=m |
117 | CONFIG_MMC=y | 117 | CONFIG_MMC=y |
diff --git a/arch/avr32/configs/atngw100mkii_evklcd100_defconfig b/arch/avr32/configs/atngw100mkii_evklcd100_defconfig index 7f2a344a5fa8..fad3cd22dfd3 100644 --- a/arch/avr32/configs/atngw100mkii_evklcd100_defconfig +++ b/arch/avr32/configs/atngw100mkii_evklcd100_defconfig | |||
@@ -128,7 +128,7 @@ CONFIG_USB_GADGET_VBUS_DRAW=350 | |||
128 | CONFIG_USB_ZERO=m | 128 | CONFIG_USB_ZERO=m |
129 | CONFIG_USB_ETH=m | 129 | CONFIG_USB_ETH=m |
130 | CONFIG_USB_GADGETFS=m | 130 | CONFIG_USB_GADGETFS=m |
131 | CONFIG_USB_FILE_STORAGE=m | 131 | CONFIG_USB_MASS_STORAGE=m |
132 | CONFIG_USB_G_SERIAL=m | 132 | CONFIG_USB_G_SERIAL=m |
133 | CONFIG_USB_CDC_COMPOSITE=m | 133 | CONFIG_USB_CDC_COMPOSITE=m |
134 | CONFIG_MMC=y | 134 | CONFIG_MMC=y |
diff --git a/arch/avr32/configs/atngw100mkii_evklcd101_defconfig b/arch/avr32/configs/atngw100mkii_evklcd101_defconfig index 085eeba88f67..29986230aaa5 100644 --- a/arch/avr32/configs/atngw100mkii_evklcd101_defconfig +++ b/arch/avr32/configs/atngw100mkii_evklcd101_defconfig | |||
@@ -127,7 +127,7 @@ CONFIG_USB_GADGET_VBUS_DRAW=350 | |||
127 | CONFIG_USB_ZERO=m | 127 | CONFIG_USB_ZERO=m |
128 | CONFIG_USB_ETH=m | 128 | CONFIG_USB_ETH=m |
129 | CONFIG_USB_GADGETFS=m | 129 | CONFIG_USB_GADGETFS=m |
130 | CONFIG_USB_FILE_STORAGE=m | 130 | CONFIG_USB_MASS_STORAGE=m |
131 | CONFIG_USB_G_SERIAL=m | 131 | CONFIG_USB_G_SERIAL=m |
132 | CONFIG_USB_CDC_COMPOSITE=m | 132 | CONFIG_USB_CDC_COMPOSITE=m |
133 | CONFIG_MMC=y | 133 | CONFIG_MMC=y |
diff --git a/arch/avr32/configs/atstk1002_defconfig b/arch/avr32/configs/atstk1002_defconfig index d1a887e64055..a582465e1cef 100644 --- a/arch/avr32/configs/atstk1002_defconfig +++ b/arch/avr32/configs/atstk1002_defconfig | |||
@@ -126,7 +126,7 @@ CONFIG_USB_GADGET=y | |||
126 | CONFIG_USB_ZERO=m | 126 | CONFIG_USB_ZERO=m |
127 | CONFIG_USB_ETH=m | 127 | CONFIG_USB_ETH=m |
128 | CONFIG_USB_GADGETFS=m | 128 | CONFIG_USB_GADGETFS=m |
129 | CONFIG_USB_FILE_STORAGE=m | 129 | CONFIG_USB_MASS_STORAGE=m |
130 | CONFIG_USB_G_SERIAL=m | 130 | CONFIG_USB_G_SERIAL=m |
131 | CONFIG_USB_CDC_COMPOSITE=m | 131 | CONFIG_USB_CDC_COMPOSITE=m |
132 | CONFIG_MMC=y | 132 | CONFIG_MMC=y |
diff --git a/arch/avr32/configs/atstk1003_defconfig b/arch/avr32/configs/atstk1003_defconfig index 956f2819ad45..57a79df2ce5d 100644 --- a/arch/avr32/configs/atstk1003_defconfig +++ b/arch/avr32/configs/atstk1003_defconfig | |||
@@ -105,7 +105,7 @@ CONFIG_USB_GADGET=y | |||
105 | CONFIG_USB_ZERO=m | 105 | CONFIG_USB_ZERO=m |
106 | CONFIG_USB_ETH=m | 106 | CONFIG_USB_ETH=m |
107 | CONFIG_USB_GADGETFS=m | 107 | CONFIG_USB_GADGETFS=m |
108 | CONFIG_USB_FILE_STORAGE=m | 108 | CONFIG_USB_MASS_STORAGE=m |
109 | CONFIG_USB_G_SERIAL=m | 109 | CONFIG_USB_G_SERIAL=m |
110 | CONFIG_USB_CDC_COMPOSITE=m | 110 | CONFIG_USB_CDC_COMPOSITE=m |
111 | CONFIG_MMC=y | 111 | CONFIG_MMC=y |
diff --git a/arch/avr32/configs/atstk1004_defconfig b/arch/avr32/configs/atstk1004_defconfig index 40c69f38c61a..1a49bd8c6340 100644 --- a/arch/avr32/configs/atstk1004_defconfig +++ b/arch/avr32/configs/atstk1004_defconfig | |||
@@ -104,7 +104,7 @@ CONFIG_USB_GADGET=y | |||
104 | CONFIG_USB_ZERO=m | 104 | CONFIG_USB_ZERO=m |
105 | CONFIG_USB_ETH=m | 105 | CONFIG_USB_ETH=m |
106 | CONFIG_USB_GADGETFS=m | 106 | CONFIG_USB_GADGETFS=m |
107 | CONFIG_USB_FILE_STORAGE=m | 107 | CONFIG_USB_MASS_STORAGE=m |
108 | CONFIG_USB_G_SERIAL=m | 108 | CONFIG_USB_G_SERIAL=m |
109 | CONFIG_USB_CDC_COMPOSITE=m | 109 | CONFIG_USB_CDC_COMPOSITE=m |
110 | CONFIG_MMC=y | 110 | CONFIG_MMC=y |
diff --git a/arch/avr32/configs/atstk1006_defconfig b/arch/avr32/configs/atstk1006_defconfig index 511eb8af356d..206a1b67f763 100644 --- a/arch/avr32/configs/atstk1006_defconfig +++ b/arch/avr32/configs/atstk1006_defconfig | |||
@@ -129,7 +129,7 @@ CONFIG_USB_GADGET=y | |||
129 | CONFIG_USB_ZERO=m | 129 | CONFIG_USB_ZERO=m |
130 | CONFIG_USB_ETH=m | 130 | CONFIG_USB_ETH=m |
131 | CONFIG_USB_GADGETFS=m | 131 | CONFIG_USB_GADGETFS=m |
132 | CONFIG_USB_FILE_STORAGE=m | 132 | CONFIG_USB_MASS_STORAGE=m |
133 | CONFIG_USB_G_SERIAL=m | 133 | CONFIG_USB_G_SERIAL=m |
134 | CONFIG_USB_CDC_COMPOSITE=m | 134 | CONFIG_USB_CDC_COMPOSITE=m |
135 | CONFIG_MMC=y | 135 | CONFIG_MMC=y |
diff --git a/arch/avr32/configs/favr-32_defconfig b/arch/avr32/configs/favr-32_defconfig index 19973b06170c..0421498d666b 100644 --- a/arch/avr32/configs/favr-32_defconfig +++ b/arch/avr32/configs/favr-32_defconfig | |||
@@ -117,7 +117,7 @@ CONFIG_USB_GADGET=y | |||
117 | CONFIG_USB_ZERO=m | 117 | CONFIG_USB_ZERO=m |
118 | CONFIG_USB_ETH=m | 118 | CONFIG_USB_ETH=m |
119 | CONFIG_USB_GADGETFS=m | 119 | CONFIG_USB_GADGETFS=m |
120 | CONFIG_USB_FILE_STORAGE=m | 120 | CONFIG_USB_MASS_STORAGE=m |
121 | CONFIG_USB_G_SERIAL=m | 121 | CONFIG_USB_G_SERIAL=m |
122 | CONFIG_USB_CDC_COMPOSITE=m | 122 | CONFIG_USB_CDC_COMPOSITE=m |
123 | CONFIG_MMC=y | 123 | CONFIG_MMC=y |
diff --git a/arch/avr32/configs/hammerhead_defconfig b/arch/avr32/configs/hammerhead_defconfig index 6f45681196d1..82f24eb251bd 100644 --- a/arch/avr32/configs/hammerhead_defconfig +++ b/arch/avr32/configs/hammerhead_defconfig | |||
@@ -127,7 +127,7 @@ CONFIG_USB_GADGET=y | |||
127 | CONFIG_USB_ZERO=m | 127 | CONFIG_USB_ZERO=m |
128 | CONFIG_USB_ETH=m | 128 | CONFIG_USB_ETH=m |
129 | CONFIG_USB_GADGETFS=m | 129 | CONFIG_USB_GADGETFS=m |
130 | CONFIG_USB_FILE_STORAGE=m | 130 | CONFIG_USB_MASS_STORAGE=m |
131 | CONFIG_USB_G_SERIAL=m | 131 | CONFIG_USB_G_SERIAL=m |
132 | CONFIG_MMC=m | 132 | CONFIG_MMC=m |
133 | CONFIG_MMC_ATMELMCI=m | 133 | CONFIG_MMC_ATMELMCI=m |
diff --git a/arch/blackfin/configs/CM-BF527_defconfig b/arch/blackfin/configs/CM-BF527_defconfig index c280a50e7943..f59c80ee78e3 100644 --- a/arch/blackfin/configs/CM-BF527_defconfig +++ b/arch/blackfin/configs/CM-BF527_defconfig | |||
@@ -106,7 +106,7 @@ CONFIG_MUSB_PIO_ONLY=y | |||
106 | CONFIG_USB_STORAGE=m | 106 | CONFIG_USB_STORAGE=m |
107 | CONFIG_USB_GADGET=m | 107 | CONFIG_USB_GADGET=m |
108 | CONFIG_USB_ETH=m | 108 | CONFIG_USB_ETH=m |
109 | CONFIG_USB_FILE_STORAGE=m | 109 | CONFIG_USB_MASS_STORAGE=m |
110 | CONFIG_USB_G_SERIAL=m | 110 | CONFIG_USB_G_SERIAL=m |
111 | CONFIG_USB_G_PRINTER=m | 111 | CONFIG_USB_G_PRINTER=m |
112 | CONFIG_RTC_CLASS=y | 112 | CONFIG_RTC_CLASS=y |
diff --git a/arch/blackfin/configs/CM-BF548_defconfig b/arch/blackfin/configs/CM-BF548_defconfig index 349922be01f3..e961483f1879 100644 --- a/arch/blackfin/configs/CM-BF548_defconfig +++ b/arch/blackfin/configs/CM-BF548_defconfig | |||
@@ -107,7 +107,7 @@ CONFIG_USB_ZERO=m | |||
107 | CONFIG_USB_ETH=m | 107 | CONFIG_USB_ETH=m |
108 | # CONFIG_USB_ETH_RNDIS is not set | 108 | # CONFIG_USB_ETH_RNDIS is not set |
109 | CONFIG_USB_GADGETFS=m | 109 | CONFIG_USB_GADGETFS=m |
110 | CONFIG_USB_FILE_STORAGE=m | 110 | CONFIG_USB_MASS_STORAGE=m |
111 | CONFIG_USB_G_SERIAL=m | 111 | CONFIG_USB_G_SERIAL=m |
112 | CONFIG_USB_G_PRINTER=m | 112 | CONFIG_USB_G_PRINTER=m |
113 | CONFIG_MMC=m | 113 | CONFIG_MMC=m |
diff --git a/arch/blackfin/configs/CM-BF561_defconfig b/arch/blackfin/configs/CM-BF561_defconfig index 0456deaa2d6f..24936b91a6ee 100644 --- a/arch/blackfin/configs/CM-BF561_defconfig +++ b/arch/blackfin/configs/CM-BF561_defconfig | |||
@@ -83,7 +83,7 @@ CONFIG_GPIOLIB=y | |||
83 | CONFIG_GPIO_SYSFS=y | 83 | CONFIG_GPIO_SYSFS=y |
84 | CONFIG_USB_GADGET=m | 84 | CONFIG_USB_GADGET=m |
85 | CONFIG_USB_ETH=m | 85 | CONFIG_USB_ETH=m |
86 | CONFIG_USB_FILE_STORAGE=m | 86 | CONFIG_USB_MASS_STORAGE=m |
87 | CONFIG_USB_G_SERIAL=m | 87 | CONFIG_USB_G_SERIAL=m |
88 | CONFIG_USB_G_PRINTER=m | 88 | CONFIG_USB_G_PRINTER=m |
89 | CONFIG_MMC=y | 89 | CONFIG_MMC=y |
diff --git a/arch/c6x/Makefile b/arch/c6x/Makefile index a9eb9597e03c..e72eb3417239 100644 --- a/arch/c6x/Makefile +++ b/arch/c6x/Makefile | |||
@@ -41,7 +41,7 @@ DTB:=$(subst dtbImage.,,$(filter dtbImage.%, $(MAKECMDGOALS))) | |||
41 | export DTB | 41 | export DTB |
42 | 42 | ||
43 | ifneq ($(DTB),) | 43 | ifneq ($(DTB),) |
44 | core-y += $(boot)/ | 44 | core-y += $(boot)/dts/ |
45 | endif | 45 | endif |
46 | 46 | ||
47 | # With make 3.82 we cannot mix normal and wildcard targets | 47 | # With make 3.82 we cannot mix normal and wildcard targets |
diff --git a/arch/c6x/boot/Makefile b/arch/c6x/boot/Makefile index 6891257d514c..8734abee548e 100644 --- a/arch/c6x/boot/Makefile +++ b/arch/c6x/boot/Makefile | |||
@@ -6,25 +6,5 @@ OBJCOPYFLAGS_vmlinux.bin := -O binary | |||
6 | $(obj)/vmlinux.bin: vmlinux FORCE | 6 | $(obj)/vmlinux.bin: vmlinux FORCE |
7 | $(call if_changed,objcopy) | 7 | $(call if_changed,objcopy) |
8 | 8 | ||
9 | DTC_FLAGS ?= -p 1024 | ||
10 | |||
11 | ifneq ($(DTB),) | ||
12 | obj-y += linked_dtb.o | ||
13 | endif | ||
14 | |||
15 | $(obj)/%.dtb: $(src)/dts/%.dts FORCE | ||
16 | $(call if_changed_dep,dtc) | ||
17 | |||
18 | quiet_cmd_cp = CP $< $@$2 | ||
19 | cmd_cp = cat $< >$@$2 || (rm -f $@ && echo false) | ||
20 | |||
21 | # Generate builtin.dtb from $(DTB).dtb | ||
22 | $(obj)/builtin.dtb: $(obj)/$(DTB).dtb | ||
23 | $(call if_changed,cp) | ||
24 | |||
25 | $(obj)/linked_dtb.o: $(obj)/builtin.dtb | ||
26 | |||
27 | $(obj)/dtbImage.%: vmlinux | 9 | $(obj)/dtbImage.%: vmlinux |
28 | $(call if_changed,objcopy) | 10 | $(call if_changed,objcopy) |
29 | |||
30 | clean-files := $(obj)/*.dtb | ||
diff --git a/arch/c6x/boot/dts/Makefile b/arch/c6x/boot/dts/Makefile new file mode 100644 index 000000000000..c7528b02d061 --- /dev/null +++ b/arch/c6x/boot/dts/Makefile | |||
@@ -0,0 +1,20 @@ | |||
1 | # | ||
2 | # Makefile for device trees | ||
3 | # | ||
4 | |||
5 | DTC_FLAGS ?= -p 1024 | ||
6 | |||
7 | ifneq ($(DTB),) | ||
8 | obj-y += linked_dtb.o | ||
9 | endif | ||
10 | |||
11 | quiet_cmd_cp = CP $< $@$2 | ||
12 | cmd_cp = cat $< >$@$2 || (rm -f $@ && echo false) | ||
13 | |||
14 | # Generate builtin.dtb from $(DTB).dtb | ||
15 | $(obj)/builtin.dtb: $(obj)/$(DTB).dtb | ||
16 | $(call if_changed,cp) | ||
17 | |||
18 | $(obj)/linked_dtb.o: $(obj)/builtin.dtb | ||
19 | |||
20 | clean-files := *.dtb | ||
diff --git a/arch/c6x/boot/dts/linked_dtb.S b/arch/c6x/boot/dts/linked_dtb.S new file mode 100644 index 000000000000..cf347f1d16ce --- /dev/null +++ b/arch/c6x/boot/dts/linked_dtb.S | |||
@@ -0,0 +1,2 @@ | |||
1 | .section __fdt_blob,"a" | ||
2 | .incbin "arch/c6x/boot/dts/builtin.dtb" | ||
diff --git a/arch/c6x/boot/linked_dtb.S b/arch/c6x/boot/linked_dtb.S deleted file mode 100644 index 57a4454eaec3..000000000000 --- a/arch/c6x/boot/linked_dtb.S +++ /dev/null | |||
@@ -1,2 +0,0 @@ | |||
1 | .section __fdt_blob,"a" | ||
2 | .incbin "arch/c6x/boot/builtin.dtb" | ||
diff --git a/arch/ia64/hp/sim/simserial.c b/arch/ia64/hp/sim/simserial.c index ec536e4e36c9..fc3924d18c1f 100644 --- a/arch/ia64/hp/sim/simserial.c +++ b/arch/ia64/hp/sim/simserial.c | |||
@@ -555,6 +555,7 @@ static int __init simrs_init(void) | |||
555 | return 0; | 555 | return 0; |
556 | err_free_tty: | 556 | err_free_tty: |
557 | put_tty_driver(hp_simserial_driver); | 557 | put_tty_driver(hp_simserial_driver); |
558 | tty_port_destroy(&state->port); | ||
558 | return retval; | 559 | return retval; |
559 | } | 560 | } |
560 | 561 | ||
diff --git a/arch/ia64/include/asm/device.h b/arch/ia64/include/asm/device.h index d05e78f6db94..f69c32ffbe6a 100644 --- a/arch/ia64/include/asm/device.h +++ b/arch/ia64/include/asm/device.h | |||
@@ -7,9 +7,6 @@ | |||
7 | #define _ASM_IA64_DEVICE_H | 7 | #define _ASM_IA64_DEVICE_H |
8 | 8 | ||
9 | struct dev_archdata { | 9 | struct dev_archdata { |
10 | #ifdef CONFIG_ACPI | ||
11 | void *acpi_handle; | ||
12 | #endif | ||
13 | #ifdef CONFIG_INTEL_IOMMU | 10 | #ifdef CONFIG_INTEL_IOMMU |
14 | void *iommu; /* hook for IOMMU specific extension */ | 11 | void *iommu; /* hook for IOMMU specific extension */ |
15 | #endif | 12 | #endif |
diff --git a/arch/ia64/include/asm/io.h b/arch/ia64/include/asm/io.h index 2c26321c28c3..74a7cc3293bc 100644 --- a/arch/ia64/include/asm/io.h +++ b/arch/ia64/include/asm/io.h | |||
@@ -90,7 +90,7 @@ phys_to_virt (unsigned long address) | |||
90 | 90 | ||
91 | #define ARCH_HAS_VALID_PHYS_ADDR_RANGE | 91 | #define ARCH_HAS_VALID_PHYS_ADDR_RANGE |
92 | extern u64 kern_mem_attribute (unsigned long phys_addr, unsigned long size); | 92 | extern u64 kern_mem_attribute (unsigned long phys_addr, unsigned long size); |
93 | extern int valid_phys_addr_range (unsigned long addr, size_t count); /* efi.c */ | 93 | extern int valid_phys_addr_range (phys_addr_t addr, size_t count); /* efi.c */ |
94 | extern int valid_mmap_phys_addr_range (unsigned long pfn, size_t count); | 94 | extern int valid_mmap_phys_addr_range (unsigned long pfn, size_t count); |
95 | 95 | ||
96 | /* | 96 | /* |
diff --git a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c index 440578850ae5..e9682f5be343 100644 --- a/arch/ia64/kernel/acpi.c +++ b/arch/ia64/kernel/acpi.c | |||
@@ -633,6 +633,7 @@ int acpi_register_gsi(struct device *dev, u32 gsi, int triggering, int polarity) | |||
633 | ACPI_EDGE_SENSITIVE) ? IOSAPIC_EDGE : | 633 | ACPI_EDGE_SENSITIVE) ? IOSAPIC_EDGE : |
634 | IOSAPIC_LEVEL); | 634 | IOSAPIC_LEVEL); |
635 | } | 635 | } |
636 | EXPORT_SYMBOL_GPL(acpi_register_gsi); | ||
636 | 637 | ||
637 | void acpi_unregister_gsi(u32 gsi) | 638 | void acpi_unregister_gsi(u32 gsi) |
638 | { | 639 | { |
@@ -644,6 +645,7 @@ void acpi_unregister_gsi(u32 gsi) | |||
644 | 645 | ||
645 | iosapic_unregister_intr(gsi); | 646 | iosapic_unregister_intr(gsi); |
646 | } | 647 | } |
648 | EXPORT_SYMBOL_GPL(acpi_unregister_gsi); | ||
647 | 649 | ||
648 | static int __init acpi_parse_fadt(struct acpi_table_header *table) | 650 | static int __init acpi_parse_fadt(struct acpi_table_header *table) |
649 | { | 651 | { |
diff --git a/arch/ia64/kernel/efi.c b/arch/ia64/kernel/efi.c index d37bbd48637f..f034563aeae5 100644 --- a/arch/ia64/kernel/efi.c +++ b/arch/ia64/kernel/efi.c | |||
@@ -870,7 +870,7 @@ kern_mem_attribute (unsigned long phys_addr, unsigned long size) | |||
870 | EXPORT_SYMBOL(kern_mem_attribute); | 870 | EXPORT_SYMBOL(kern_mem_attribute); |
871 | 871 | ||
872 | int | 872 | int |
873 | valid_phys_addr_range (unsigned long phys_addr, unsigned long size) | 873 | valid_phys_addr_range (phys_addr_t phys_addr, unsigned long size) |
874 | { | 874 | { |
875 | u64 attr; | 875 | u64 attr; |
876 | 876 | ||
diff --git a/arch/m68k/emu/nfcon.c b/arch/m68k/emu/nfcon.c index 16d170f53bfd..6685bf45c2c3 100644 --- a/arch/m68k/emu/nfcon.c +++ b/arch/m68k/emu/nfcon.c | |||
@@ -120,8 +120,6 @@ static int __init nfcon_init(void) | |||
120 | { | 120 | { |
121 | int res; | 121 | int res; |
122 | 122 | ||
123 | tty_port_init(&nfcon_tty_port); | ||
124 | |||
125 | stderr_id = nf_get_id("NF_STDERR"); | 123 | stderr_id = nf_get_id("NF_STDERR"); |
126 | if (!stderr_id) | 124 | if (!stderr_id) |
127 | return -ENODEV; | 125 | return -ENODEV; |
@@ -130,6 +128,8 @@ static int __init nfcon_init(void) | |||
130 | if (!nfcon_tty_driver) | 128 | if (!nfcon_tty_driver) |
131 | return -ENOMEM; | 129 | return -ENOMEM; |
132 | 130 | ||
131 | tty_port_init(&nfcon_tty_port); | ||
132 | |||
133 | nfcon_tty_driver->driver_name = "nfcon"; | 133 | nfcon_tty_driver->driver_name = "nfcon"; |
134 | nfcon_tty_driver->name = "nfcon"; | 134 | nfcon_tty_driver->name = "nfcon"; |
135 | nfcon_tty_driver->type = TTY_DRIVER_TYPE_SYSTEM; | 135 | nfcon_tty_driver->type = TTY_DRIVER_TYPE_SYSTEM; |
@@ -143,6 +143,7 @@ static int __init nfcon_init(void) | |||
143 | if (res) { | 143 | if (res) { |
144 | pr_err("failed to register nfcon tty driver\n"); | 144 | pr_err("failed to register nfcon tty driver\n"); |
145 | put_tty_driver(nfcon_tty_driver); | 145 | put_tty_driver(nfcon_tty_driver); |
146 | tty_port_destroy(&nfcon_tty_port); | ||
146 | return res; | 147 | return res; |
147 | } | 148 | } |
148 | 149 | ||
@@ -157,6 +158,7 @@ static void __exit nfcon_exit(void) | |||
157 | unregister_console(&nf_console); | 158 | unregister_console(&nf_console); |
158 | tty_unregister_driver(nfcon_tty_driver); | 159 | tty_unregister_driver(nfcon_tty_driver); |
159 | put_tty_driver(nfcon_tty_driver); | 160 | put_tty_driver(nfcon_tty_driver); |
161 | tty_port_destroy(&nfcon_tty_port); | ||
160 | } | 162 | } |
161 | 163 | ||
162 | module_init(nfcon_init); | 164 | module_init(nfcon_init); |
diff --git a/arch/microblaze/Makefile b/arch/microblaze/Makefile index b23c40eb7a52..d26fb905ee0a 100644 --- a/arch/microblaze/Makefile +++ b/arch/microblaze/Makefile | |||
@@ -57,7 +57,7 @@ boot := arch/microblaze/boot | |||
57 | DTB:=$(subst simpleImage.,,$(filter simpleImage.%, $(MAKECMDGOALS))) | 57 | DTB:=$(subst simpleImage.,,$(filter simpleImage.%, $(MAKECMDGOALS))) |
58 | 58 | ||
59 | ifneq ($(DTB),) | 59 | ifneq ($(DTB),) |
60 | core-y += $(boot)/ | 60 | core-y += $(boot)/dts/ |
61 | endif | 61 | endif |
62 | 62 | ||
63 | # defines filename extension depending memory management type | 63 | # defines filename extension depending memory management type |
diff --git a/arch/microblaze/boot/Makefile b/arch/microblaze/boot/Makefile index fa83ea497db7..80fe54fb7ca3 100644 --- a/arch/microblaze/boot/Makefile +++ b/arch/microblaze/boot/Makefile | |||
@@ -2,21 +2,10 @@ | |||
2 | # arch/microblaze/boot/Makefile | 2 | # arch/microblaze/boot/Makefile |
3 | # | 3 | # |
4 | 4 | ||
5 | obj-y += linked_dtb.o | ||
6 | |||
7 | targets := linux.bin linux.bin.gz simpleImage.% | 5 | targets := linux.bin linux.bin.gz simpleImage.% |
8 | 6 | ||
9 | OBJCOPYFLAGS := -R .note -R .comment -R .note.gnu.build-id -O binary | 7 | OBJCOPYFLAGS := -R .note -R .comment -R .note.gnu.build-id -O binary |
10 | 8 | ||
11 | # Ensure system.dtb exists | ||
12 | $(obj)/linked_dtb.o: $(obj)/system.dtb | ||
13 | |||
14 | # Generate system.dtb from $(DTB).dtb | ||
15 | ifneq ($(DTB),system) | ||
16 | $(obj)/system.dtb: $(obj)/$(DTB).dtb | ||
17 | $(call if_changed,cp) | ||
18 | endif | ||
19 | |||
20 | $(obj)/linux.bin: vmlinux FORCE | 9 | $(obj)/linux.bin: vmlinux FORCE |
21 | $(call if_changed,objcopy) | 10 | $(call if_changed,objcopy) |
22 | $(call if_changed,uimage) | 11 | $(call if_changed,uimage) |
@@ -45,10 +34,4 @@ $(obj)/simpleImage.%: vmlinux FORCE | |||
45 | @echo 'Kernel: $@ is ready' ' (#'`cat .version`')' | 34 | @echo 'Kernel: $@ is ready' ' (#'`cat .version`')' |
46 | 35 | ||
47 | 36 | ||
48 | # Rule to build device tree blobs | 37 | clean-files += simpleImage.*.unstrip linux.bin.ub |
49 | DTC_FLAGS := -p 1024 | ||
50 | |||
51 | $(obj)/%.dtb: $(src)/dts/%.dts FORCE | ||
52 | $(call if_changed_dep,dtc) | ||
53 | |||
54 | clean-files += *.dtb simpleImage.*.unstrip linux.bin.ub | ||
diff --git a/arch/microblaze/boot/dts/Makefile b/arch/microblaze/boot/dts/Makefile new file mode 100644 index 000000000000..c3b3a5d67b89 --- /dev/null +++ b/arch/microblaze/boot/dts/Makefile | |||
@@ -0,0 +1,22 @@ | |||
1 | # | ||
2 | # arch/microblaze/boot/Makefile | ||
3 | # | ||
4 | |||
5 | obj-y += linked_dtb.o | ||
6 | |||
7 | # Ensure system.dtb exists | ||
8 | $(obj)/linked_dtb.o: $(obj)/system.dtb | ||
9 | |||
10 | # Generate system.dtb from $(DTB).dtb | ||
11 | ifneq ($(DTB),system) | ||
12 | $(obj)/system.dtb: $(obj)/$(DTB).dtb | ||
13 | $(call if_changed,cp) | ||
14 | endif | ||
15 | |||
16 | quiet_cmd_cp = CP $< $@$2 | ||
17 | cmd_cp = cat $< >$@$2 || (rm -f $@ && echo false) | ||
18 | |||
19 | # Rule to build device tree blobs | ||
20 | DTC_FLAGS := -p 1024 | ||
21 | |||
22 | clean-files += *.dtb | ||
diff --git a/arch/microblaze/boot/dts/linked_dtb.S b/arch/microblaze/boot/dts/linked_dtb.S new file mode 100644 index 000000000000..23345af3721f --- /dev/null +++ b/arch/microblaze/boot/dts/linked_dtb.S | |||
@@ -0,0 +1,2 @@ | |||
1 | .section __fdt_blob,"a" | ||
2 | .incbin "arch/microblaze/boot/dts/system.dtb" | ||
diff --git a/arch/microblaze/boot/linked_dtb.S b/arch/microblaze/boot/linked_dtb.S deleted file mode 100644 index cb2b537aebee..000000000000 --- a/arch/microblaze/boot/linked_dtb.S +++ /dev/null | |||
@@ -1,3 +0,0 @@ | |||
1 | .section __fdt_blob,"a" | ||
2 | .incbin "arch/microblaze/boot/system.dtb" | ||
3 | |||
diff --git a/arch/microblaze/pci/pci-common.c b/arch/microblaze/pci/pci-common.c index 4dbb5055d04b..a1c5b996d66d 100644 --- a/arch/microblaze/pci/pci-common.c +++ b/arch/microblaze/pci/pci-common.c | |||
@@ -1346,8 +1346,6 @@ void __init pcibios_resource_survey(void) | |||
1346 | pci_assign_unassigned_resources(); | 1346 | pci_assign_unassigned_resources(); |
1347 | } | 1347 | } |
1348 | 1348 | ||
1349 | #ifdef CONFIG_HOTPLUG | ||
1350 | |||
1351 | /* This is used by the PCI hotplug driver to allocate resource | 1349 | /* This is used by the PCI hotplug driver to allocate resource |
1352 | * of newly plugged busses. We can try to consolidate with the | 1350 | * of newly plugged busses. We can try to consolidate with the |
1353 | * rest of the code later, for now, keep it as-is as our main | 1351 | * rest of the code later, for now, keep it as-is as our main |
@@ -1407,8 +1405,6 @@ void pcibios_finish_adding_to_bus(struct pci_bus *bus) | |||
1407 | } | 1405 | } |
1408 | EXPORT_SYMBOL_GPL(pcibios_finish_adding_to_bus); | 1406 | EXPORT_SYMBOL_GPL(pcibios_finish_adding_to_bus); |
1409 | 1407 | ||
1410 | #endif /* CONFIG_HOTPLUG */ | ||
1411 | |||
1412 | int pcibios_enable_device(struct pci_dev *dev, int mask) | 1408 | int pcibios_enable_device(struct pci_dev *dev, int mask) |
1413 | { | 1409 | { |
1414 | return pci_enable_resources(dev, mask); | 1410 | return pci_enable_resources(dev, mask); |
diff --git a/arch/mips/alchemy/common/Makefile b/arch/mips/alchemy/common/Makefile index 407ebc00e661..cb83d8d21aef 100644 --- a/arch/mips/alchemy/common/Makefile +++ b/arch/mips/alchemy/common/Makefile | |||
@@ -6,7 +6,7 @@ | |||
6 | # | 6 | # |
7 | 7 | ||
8 | obj-y += prom.o time.o clocks.o platform.o power.o setup.o \ | 8 | obj-y += prom.o time.o clocks.o platform.o power.o setup.o \ |
9 | sleeper.o dma.o dbdma.o vss.o irq.o | 9 | sleeper.o dma.o dbdma.o vss.o irq.o usb.o |
10 | 10 | ||
11 | # optional gpiolib support | 11 | # optional gpiolib support |
12 | ifeq ($(CONFIG_ALCHEMY_GPIO_INDIRECT),) | 12 | ifeq ($(CONFIG_ALCHEMY_GPIO_INDIRECT),) |
diff --git a/arch/mips/alchemy/common/platform.c b/arch/mips/alchemy/common/platform.c index c0f3ce6dcb56..7af941d8e717 100644 --- a/arch/mips/alchemy/common/platform.c +++ b/arch/mips/alchemy/common/platform.c | |||
@@ -17,6 +17,8 @@ | |||
17 | #include <linux/platform_device.h> | 17 | #include <linux/platform_device.h> |
18 | #include <linux/serial_8250.h> | 18 | #include <linux/serial_8250.h> |
19 | #include <linux/slab.h> | 19 | #include <linux/slab.h> |
20 | #include <linux/usb/ehci_pdriver.h> | ||
21 | #include <linux/usb/ohci_pdriver.h> | ||
20 | 22 | ||
21 | #include <asm/mach-au1x00/au1000.h> | 23 | #include <asm/mach-au1x00/au1000.h> |
22 | #include <asm/mach-au1x00/au1xxx_dbdma.h> | 24 | #include <asm/mach-au1x00/au1xxx_dbdma.h> |
@@ -122,6 +124,53 @@ static void __init alchemy_setup_uarts(int ctype) | |||
122 | static u64 alchemy_ohci_dmamask = DMA_BIT_MASK(32); | 124 | static u64 alchemy_ohci_dmamask = DMA_BIT_MASK(32); |
123 | static u64 __maybe_unused alchemy_ehci_dmamask = DMA_BIT_MASK(32); | 125 | static u64 __maybe_unused alchemy_ehci_dmamask = DMA_BIT_MASK(32); |
124 | 126 | ||
127 | /* Power on callback for the ehci platform driver */ | ||
128 | static int alchemy_ehci_power_on(struct platform_device *pdev) | ||
129 | { | ||
130 | return alchemy_usb_control(ALCHEMY_USB_EHCI0, 1); | ||
131 | } | ||
132 | |||
133 | /* Power off/suspend callback for the ehci platform driver */ | ||
134 | static void alchemy_ehci_power_off(struct platform_device *pdev) | ||
135 | { | ||
136 | alchemy_usb_control(ALCHEMY_USB_EHCI0, 0); | ||
137 | } | ||
138 | |||
139 | static struct usb_ehci_pdata alchemy_ehci_pdata = { | ||
140 | .no_io_watchdog = 1, | ||
141 | .power_on = alchemy_ehci_power_on, | ||
142 | .power_off = alchemy_ehci_power_off, | ||
143 | .power_suspend = alchemy_ehci_power_off, | ||
144 | }; | ||
145 | |||
146 | /* Power on callback for the ohci platform driver */ | ||
147 | static int alchemy_ohci_power_on(struct platform_device *pdev) | ||
148 | { | ||
149 | int unit; | ||
150 | |||
151 | unit = (pdev->id == 1) ? | ||
152 | ALCHEMY_USB_OHCI1 : ALCHEMY_USB_OHCI0; | ||
153 | |||
154 | return alchemy_usb_control(unit, 1); | ||
155 | } | ||
156 | |||
157 | /* Power off/suspend callback for the ohci platform driver */ | ||
158 | static void alchemy_ohci_power_off(struct platform_device *pdev) | ||
159 | { | ||
160 | int unit; | ||
161 | |||
162 | unit = (pdev->id == 1) ? | ||
163 | ALCHEMY_USB_OHCI1 : ALCHEMY_USB_OHCI0; | ||
164 | |||
165 | alchemy_usb_control(unit, 0); | ||
166 | } | ||
167 | |||
168 | static struct usb_ohci_pdata alchemy_ohci_pdata = { | ||
169 | .power_on = alchemy_ohci_power_on, | ||
170 | .power_off = alchemy_ohci_power_off, | ||
171 | .power_suspend = alchemy_ohci_power_off, | ||
172 | }; | ||
173 | |||
125 | static unsigned long alchemy_ohci_data[][2] __initdata = { | 174 | static unsigned long alchemy_ohci_data[][2] __initdata = { |
126 | [ALCHEMY_CPU_AU1000] = { AU1000_USB_OHCI_PHYS_ADDR, AU1000_USB_HOST_INT }, | 175 | [ALCHEMY_CPU_AU1000] = { AU1000_USB_OHCI_PHYS_ADDR, AU1000_USB_HOST_INT }, |
127 | [ALCHEMY_CPU_AU1500] = { AU1000_USB_OHCI_PHYS_ADDR, AU1500_USB_HOST_INT }, | 176 | [ALCHEMY_CPU_AU1500] = { AU1000_USB_OHCI_PHYS_ADDR, AU1500_USB_HOST_INT }, |
@@ -169,9 +218,10 @@ static void __init alchemy_setup_usb(int ctype) | |||
169 | res[1].start = alchemy_ohci_data[ctype][1]; | 218 | res[1].start = alchemy_ohci_data[ctype][1]; |
170 | res[1].end = res[1].start; | 219 | res[1].end = res[1].start; |
171 | res[1].flags = IORESOURCE_IRQ; | 220 | res[1].flags = IORESOURCE_IRQ; |
172 | pdev->name = "au1xxx-ohci"; | 221 | pdev->name = "ohci-platform"; |
173 | pdev->id = 0; | 222 | pdev->id = 0; |
174 | pdev->dev.dma_mask = &alchemy_ohci_dmamask; | 223 | pdev->dev.dma_mask = &alchemy_ohci_dmamask; |
224 | pdev->dev.platform_data = &alchemy_ohci_pdata; | ||
175 | 225 | ||
176 | if (platform_device_register(pdev)) | 226 | if (platform_device_register(pdev)) |
177 | printk(KERN_INFO "Alchemy USB: cannot add OHCI0\n"); | 227 | printk(KERN_INFO "Alchemy USB: cannot add OHCI0\n"); |
@@ -188,9 +238,10 @@ static void __init alchemy_setup_usb(int ctype) | |||
188 | res[1].start = alchemy_ehci_data[ctype][1]; | 238 | res[1].start = alchemy_ehci_data[ctype][1]; |
189 | res[1].end = res[1].start; | 239 | res[1].end = res[1].start; |
190 | res[1].flags = IORESOURCE_IRQ; | 240 | res[1].flags = IORESOURCE_IRQ; |
191 | pdev->name = "au1xxx-ehci"; | 241 | pdev->name = "ehci-platform"; |
192 | pdev->id = 0; | 242 | pdev->id = 0; |
193 | pdev->dev.dma_mask = &alchemy_ehci_dmamask; | 243 | pdev->dev.dma_mask = &alchemy_ehci_dmamask; |
244 | pdev->dev.platform_data = &alchemy_ehci_pdata; | ||
194 | 245 | ||
195 | if (platform_device_register(pdev)) | 246 | if (platform_device_register(pdev)) |
196 | printk(KERN_INFO "Alchemy USB: cannot add EHCI0\n"); | 247 | printk(KERN_INFO "Alchemy USB: cannot add EHCI0\n"); |
@@ -207,9 +258,10 @@ static void __init alchemy_setup_usb(int ctype) | |||
207 | res[1].start = AU1300_USB_INT; | 258 | res[1].start = AU1300_USB_INT; |
208 | res[1].end = res[1].start; | 259 | res[1].end = res[1].start; |
209 | res[1].flags = IORESOURCE_IRQ; | 260 | res[1].flags = IORESOURCE_IRQ; |
210 | pdev->name = "au1xxx-ohci"; | 261 | pdev->name = "ohci-platform"; |
211 | pdev->id = 1; | 262 | pdev->id = 1; |
212 | pdev->dev.dma_mask = &alchemy_ohci_dmamask; | 263 | pdev->dev.dma_mask = &alchemy_ohci_dmamask; |
264 | pdev->dev.platform_data = &alchemy_ohci_pdata; | ||
213 | 265 | ||
214 | if (platform_device_register(pdev)) | 266 | if (platform_device_register(pdev)) |
215 | printk(KERN_INFO "Alchemy USB: cannot add OHCI1\n"); | 267 | printk(KERN_INFO "Alchemy USB: cannot add OHCI1\n"); |
diff --git a/arch/mips/alchemy/common/usb.c b/arch/mips/alchemy/common/usb.c new file mode 100644 index 000000000000..936af8359fb2 --- /dev/null +++ b/arch/mips/alchemy/common/usb.c | |||
@@ -0,0 +1,614 @@ | |||
1 | /* | ||
2 | * USB block power/access management abstraction. | ||
3 | * | ||
4 | * Au1000+: The OHCI block control register is at the far end of the OHCI memory | ||
5 | * area. Au1550 has OHCI on different base address. No need to handle | ||
6 | * UDC here. | ||
7 | * Au1200: one register to control access and clocks to O/EHCI, UDC and OTG | ||
8 | * as well as the PHY for EHCI and UDC. | ||
9 | * | ||
10 | */ | ||
11 | |||
12 | #include <linux/init.h> | ||
13 | #include <linux/io.h> | ||
14 | #include <linux/module.h> | ||
15 | #include <linux/spinlock.h> | ||
16 | #include <linux/syscore_ops.h> | ||
17 | #include <asm/mach-au1x00/au1000.h> | ||
18 | |||
19 | /* control register offsets */ | ||
20 | #define AU1000_OHCICFG 0x7fffc | ||
21 | #define AU1550_OHCICFG 0x07ffc | ||
22 | #define AU1200_USBCFG 0x04 | ||
23 | |||
24 | /* Au1000 USB block config bits */ | ||
25 | #define USBHEN_RD (1 << 4) /* OHCI reset-done indicator */ | ||
26 | #define USBHEN_CE (1 << 3) /* OHCI block clock enable */ | ||
27 | #define USBHEN_E (1 << 2) /* OHCI block enable */ | ||
28 | #define USBHEN_C (1 << 1) /* OHCI block coherency bit */ | ||
29 | #define USBHEN_BE (1 << 0) /* OHCI Big-Endian */ | ||
30 | |||
31 | /* Au1200 USB config bits */ | ||
32 | #define USBCFG_PFEN (1 << 31) /* prefetch enable (undoc) */ | ||
33 | #define USBCFG_RDCOMB (1 << 30) /* read combining (undoc) */ | ||
34 | #define USBCFG_UNKNOWN (5 << 20) /* unknown, leave this way */ | ||
35 | #define USBCFG_SSD (1 << 23) /* serial short detect en */ | ||
36 | #define USBCFG_PPE (1 << 19) /* HS PHY PLL */ | ||
37 | #define USBCFG_UCE (1 << 18) /* UDC clock enable */ | ||
38 | #define USBCFG_ECE (1 << 17) /* EHCI clock enable */ | ||
39 | #define USBCFG_OCE (1 << 16) /* OHCI clock enable */ | ||
40 | #define USBCFG_FLA(x) (((x) & 0x3f) << 8) | ||
41 | #define USBCFG_UCAM (1 << 7) /* coherent access (undoc) */ | ||
42 | #define USBCFG_GME (1 << 6) /* OTG mem access */ | ||
43 | #define USBCFG_DBE (1 << 5) /* UDC busmaster enable */ | ||
44 | #define USBCFG_DME (1 << 4) /* UDC mem enable */ | ||
45 | #define USBCFG_EBE (1 << 3) /* EHCI busmaster enable */ | ||
46 | #define USBCFG_EME (1 << 2) /* EHCI mem enable */ | ||
47 | #define USBCFG_OBE (1 << 1) /* OHCI busmaster enable */ | ||
48 | #define USBCFG_OME (1 << 0) /* OHCI mem enable */ | ||
49 | #define USBCFG_INIT_AU1200 (USBCFG_PFEN | USBCFG_RDCOMB | USBCFG_UNKNOWN |\ | ||
50 | USBCFG_SSD | USBCFG_FLA(0x20) | USBCFG_UCAM | \ | ||
51 | USBCFG_GME | USBCFG_DBE | USBCFG_DME | \ | ||
52 | USBCFG_EBE | USBCFG_EME | USBCFG_OBE | \ | ||
53 | USBCFG_OME) | ||
54 | |||
55 | /* Au1300 USB config registers */ | ||
56 | #define USB_DWC_CTRL1 0x00 | ||
57 | #define USB_DWC_CTRL2 0x04 | ||
58 | #define USB_VBUS_TIMER 0x10 | ||
59 | #define USB_SBUS_CTRL 0x14 | ||
60 | #define USB_MSR_ERR 0x18 | ||
61 | #define USB_DWC_CTRL3 0x1C | ||
62 | #define USB_DWC_CTRL4 0x20 | ||
63 | #define USB_OTG_STATUS 0x28 | ||
64 | #define USB_DWC_CTRL5 0x2C | ||
65 | #define USB_DWC_CTRL6 0x30 | ||
66 | #define USB_DWC_CTRL7 0x34 | ||
67 | #define USB_PHY_STATUS 0xC0 | ||
68 | #define USB_INT_STATUS 0xC4 | ||
69 | #define USB_INT_ENABLE 0xC8 | ||
70 | |||
71 | #define USB_DWC_CTRL1_OTGD 0x04 /* set to DISable OTG */ | ||
72 | #define USB_DWC_CTRL1_HSTRS 0x02 /* set to ENable EHCI */ | ||
73 | #define USB_DWC_CTRL1_DCRS 0x01 /* set to ENable UDC */ | ||
74 | |||
75 | #define USB_DWC_CTRL2_PHY1RS 0x04 /* set to enable PHY1 */ | ||
76 | #define USB_DWC_CTRL2_PHY0RS 0x02 /* set to enable PHY0 */ | ||
77 | #define USB_DWC_CTRL2_PHYRS 0x01 /* set to enable PHY */ | ||
78 | |||
79 | #define USB_DWC_CTRL3_OHCI1_CKEN (1 << 19) | ||
80 | #define USB_DWC_CTRL3_OHCI0_CKEN (1 << 18) | ||
81 | #define USB_DWC_CTRL3_EHCI0_CKEN (1 << 17) | ||
82 | #define USB_DWC_CTRL3_OTG0_CKEN (1 << 16) | ||
83 | |||
84 | #define USB_SBUS_CTRL_SBCA 0x04 /* coherent access */ | ||
85 | |||
86 | #define USB_INTEN_FORCE 0x20 | ||
87 | #define USB_INTEN_PHY 0x10 | ||
88 | #define USB_INTEN_UDC 0x08 | ||
89 | #define USB_INTEN_EHCI 0x04 | ||
90 | #define USB_INTEN_OHCI1 0x02 | ||
91 | #define USB_INTEN_OHCI0 0x01 | ||
92 | |||
93 | static DEFINE_SPINLOCK(alchemy_usb_lock); | ||
94 | |||
95 | static inline void __au1300_usb_phyctl(void __iomem *base, int enable) | ||
96 | { | ||
97 | unsigned long r, s; | ||
98 | |||
99 | r = __raw_readl(base + USB_DWC_CTRL2); | ||
100 | s = __raw_readl(base + USB_DWC_CTRL3); | ||
101 | |||
102 | s &= USB_DWC_CTRL3_OHCI1_CKEN | USB_DWC_CTRL3_OHCI0_CKEN | | ||
103 | USB_DWC_CTRL3_EHCI0_CKEN | USB_DWC_CTRL3_OTG0_CKEN; | ||
104 | |||
105 | if (enable) { | ||
106 | /* simply enable all PHYs */ | ||
107 | r |= USB_DWC_CTRL2_PHY1RS | USB_DWC_CTRL2_PHY0RS | | ||
108 | USB_DWC_CTRL2_PHYRS; | ||
109 | __raw_writel(r, base + USB_DWC_CTRL2); | ||
110 | wmb(); | ||
111 | } else if (!s) { | ||
112 | /* no USB block active, do disable all PHYs */ | ||
113 | r &= ~(USB_DWC_CTRL2_PHY1RS | USB_DWC_CTRL2_PHY0RS | | ||
114 | USB_DWC_CTRL2_PHYRS); | ||
115 | __raw_writel(r, base + USB_DWC_CTRL2); | ||
116 | wmb(); | ||
117 | } | ||
118 | } | ||
119 | |||
120 | static inline void __au1300_ohci_control(void __iomem *base, int enable, int id) | ||
121 | { | ||
122 | unsigned long r; | ||
123 | |||
124 | if (enable) { | ||
125 | __raw_writel(1, base + USB_DWC_CTRL7); /* start OHCI clock */ | ||
126 | wmb(); | ||
127 | |||
128 | r = __raw_readl(base + USB_DWC_CTRL3); /* enable OHCI block */ | ||
129 | r |= (id == 0) ? USB_DWC_CTRL3_OHCI0_CKEN | ||
130 | : USB_DWC_CTRL3_OHCI1_CKEN; | ||
131 | __raw_writel(r, base + USB_DWC_CTRL3); | ||
132 | wmb(); | ||
133 | |||
134 | __au1300_usb_phyctl(base, enable); /* power up the PHYs */ | ||
135 | |||
136 | r = __raw_readl(base + USB_INT_ENABLE); | ||
137 | r |= (id == 0) ? USB_INTEN_OHCI0 : USB_INTEN_OHCI1; | ||
138 | __raw_writel(r, base + USB_INT_ENABLE); | ||
139 | wmb(); | ||
140 | |||
141 | /* reset the OHCI start clock bit */ | ||
142 | __raw_writel(0, base + USB_DWC_CTRL7); | ||
143 | wmb(); | ||
144 | } else { | ||
145 | r = __raw_readl(base + USB_INT_ENABLE); | ||
146 | r &= ~((id == 0) ? USB_INTEN_OHCI0 : USB_INTEN_OHCI1); | ||
147 | __raw_writel(r, base + USB_INT_ENABLE); | ||
148 | wmb(); | ||
149 | |||
150 | r = __raw_readl(base + USB_DWC_CTRL3); | ||
151 | r &= ~((id == 0) ? USB_DWC_CTRL3_OHCI0_CKEN | ||
152 | : USB_DWC_CTRL3_OHCI1_CKEN); | ||
153 | __raw_writel(r, base + USB_DWC_CTRL3); | ||
154 | wmb(); | ||
155 | |||
156 | __au1300_usb_phyctl(base, enable); | ||
157 | } | ||
158 | } | ||
159 | |||
160 | static inline void __au1300_ehci_control(void __iomem *base, int enable) | ||
161 | { | ||
162 | unsigned long r; | ||
163 | |||
164 | if (enable) { | ||
165 | r = __raw_readl(base + USB_DWC_CTRL3); | ||
166 | r |= USB_DWC_CTRL3_EHCI0_CKEN; | ||
167 | __raw_writel(r, base + USB_DWC_CTRL3); | ||
168 | wmb(); | ||
169 | |||
170 | r = __raw_readl(base + USB_DWC_CTRL1); | ||
171 | r |= USB_DWC_CTRL1_HSTRS; | ||
172 | __raw_writel(r, base + USB_DWC_CTRL1); | ||
173 | wmb(); | ||
174 | |||
175 | __au1300_usb_phyctl(base, enable); | ||
176 | |||
177 | r = __raw_readl(base + USB_INT_ENABLE); | ||
178 | r |= USB_INTEN_EHCI; | ||
179 | __raw_writel(r, base + USB_INT_ENABLE); | ||
180 | wmb(); | ||
181 | } else { | ||
182 | r = __raw_readl(base + USB_INT_ENABLE); | ||
183 | r &= ~USB_INTEN_EHCI; | ||
184 | __raw_writel(r, base + USB_INT_ENABLE); | ||
185 | wmb(); | ||
186 | |||
187 | r = __raw_readl(base + USB_DWC_CTRL1); | ||
188 | r &= ~USB_DWC_CTRL1_HSTRS; | ||
189 | __raw_writel(r, base + USB_DWC_CTRL1); | ||
190 | wmb(); | ||
191 | |||
192 | r = __raw_readl(base + USB_DWC_CTRL3); | ||
193 | r &= ~USB_DWC_CTRL3_EHCI0_CKEN; | ||
194 | __raw_writel(r, base + USB_DWC_CTRL3); | ||
195 | wmb(); | ||
196 | |||
197 | __au1300_usb_phyctl(base, enable); | ||
198 | } | ||
199 | } | ||
200 | |||
201 | static inline void __au1300_udc_control(void __iomem *base, int enable) | ||
202 | { | ||
203 | unsigned long r; | ||
204 | |||
205 | if (enable) { | ||
206 | r = __raw_readl(base + USB_DWC_CTRL1); | ||
207 | r |= USB_DWC_CTRL1_DCRS; | ||
208 | __raw_writel(r, base + USB_DWC_CTRL1); | ||
209 | wmb(); | ||
210 | |||
211 | __au1300_usb_phyctl(base, enable); | ||
212 | |||
213 | r = __raw_readl(base + USB_INT_ENABLE); | ||
214 | r |= USB_INTEN_UDC; | ||
215 | __raw_writel(r, base + USB_INT_ENABLE); | ||
216 | wmb(); | ||
217 | } else { | ||
218 | r = __raw_readl(base + USB_INT_ENABLE); | ||
219 | r &= ~USB_INTEN_UDC; | ||
220 | __raw_writel(r, base + USB_INT_ENABLE); | ||
221 | wmb(); | ||
222 | |||
223 | r = __raw_readl(base + USB_DWC_CTRL1); | ||
224 | r &= ~USB_DWC_CTRL1_DCRS; | ||
225 | __raw_writel(r, base + USB_DWC_CTRL1); | ||
226 | wmb(); | ||
227 | |||
228 | __au1300_usb_phyctl(base, enable); | ||
229 | } | ||
230 | } | ||
231 | |||
232 | static inline void __au1300_otg_control(void __iomem *base, int enable) | ||
233 | { | ||
234 | unsigned long r; | ||
235 | if (enable) { | ||
236 | r = __raw_readl(base + USB_DWC_CTRL3); | ||
237 | r |= USB_DWC_CTRL3_OTG0_CKEN; | ||
238 | __raw_writel(r, base + USB_DWC_CTRL3); | ||
239 | wmb(); | ||
240 | |||
241 | r = __raw_readl(base + USB_DWC_CTRL1); | ||
242 | r &= ~USB_DWC_CTRL1_OTGD; | ||
243 | __raw_writel(r, base + USB_DWC_CTRL1); | ||
244 | wmb(); | ||
245 | |||
246 | __au1300_usb_phyctl(base, enable); | ||
247 | } else { | ||
248 | r = __raw_readl(base + USB_DWC_CTRL1); | ||
249 | r |= USB_DWC_CTRL1_OTGD; | ||
250 | __raw_writel(r, base + USB_DWC_CTRL1); | ||
251 | wmb(); | ||
252 | |||
253 | r = __raw_readl(base + USB_DWC_CTRL3); | ||
254 | r &= ~USB_DWC_CTRL3_OTG0_CKEN; | ||
255 | __raw_writel(r, base + USB_DWC_CTRL3); | ||
256 | wmb(); | ||
257 | |||
258 | __au1300_usb_phyctl(base, enable); | ||
259 | } | ||
260 | } | ||
261 | |||
262 | static inline int au1300_usb_control(int block, int enable) | ||
263 | { | ||
264 | void __iomem *base = | ||
265 | (void __iomem *)KSEG1ADDR(AU1300_USB_CTL_PHYS_ADDR); | ||
266 | int ret = 0; | ||
267 | |||
268 | switch (block) { | ||
269 | case ALCHEMY_USB_OHCI0: | ||
270 | __au1300_ohci_control(base, enable, 0); | ||
271 | break; | ||
272 | case ALCHEMY_USB_OHCI1: | ||
273 | __au1300_ohci_control(base, enable, 1); | ||
274 | break; | ||
275 | case ALCHEMY_USB_EHCI0: | ||
276 | __au1300_ehci_control(base, enable); | ||
277 | break; | ||
278 | case ALCHEMY_USB_UDC0: | ||
279 | __au1300_udc_control(base, enable); | ||
280 | break; | ||
281 | case ALCHEMY_USB_OTG0: | ||
282 | __au1300_otg_control(base, enable); | ||
283 | break; | ||
284 | default: | ||
285 | ret = -ENODEV; | ||
286 | } | ||
287 | return ret; | ||
288 | } | ||
289 | |||
290 | static inline void au1300_usb_init(void) | ||
291 | { | ||
292 | void __iomem *base = | ||
293 | (void __iomem *)KSEG1ADDR(AU1300_USB_CTL_PHYS_ADDR); | ||
294 | |||
295 | /* set some sane defaults. Note: we don't fiddle with DWC_CTRL4 | ||
296 | * here at all: Port 2 routing (EHCI or UDC) must be set either | ||
297 | * by boot firmware or platform init code; I can't autodetect | ||
298 | * a sane setting. | ||
299 | */ | ||
300 | __raw_writel(0, base + USB_INT_ENABLE); /* disable all USB irqs */ | ||
301 | wmb(); | ||
302 | __raw_writel(0, base + USB_DWC_CTRL3); /* disable all clocks */ | ||
303 | wmb(); | ||
304 | __raw_writel(~0, base + USB_MSR_ERR); /* clear all errors */ | ||
305 | wmb(); | ||
306 | __raw_writel(~0, base + USB_INT_STATUS); /* clear int status */ | ||
307 | wmb(); | ||
308 | /* set coherent access bit */ | ||
309 | __raw_writel(USB_SBUS_CTRL_SBCA, base + USB_SBUS_CTRL); | ||
310 | wmb(); | ||
311 | } | ||
312 | |||
313 | static inline void __au1200_ohci_control(void __iomem *base, int enable) | ||
314 | { | ||
315 | unsigned long r = __raw_readl(base + AU1200_USBCFG); | ||
316 | if (enable) { | ||
317 | __raw_writel(r | USBCFG_OCE, base + AU1200_USBCFG); | ||
318 | wmb(); | ||
319 | udelay(2000); | ||
320 | } else { | ||
321 | __raw_writel(r & ~USBCFG_OCE, base + AU1200_USBCFG); | ||
322 | wmb(); | ||
323 | udelay(1000); | ||
324 | } | ||
325 | } | ||
326 | |||
327 | static inline void __au1200_ehci_control(void __iomem *base, int enable) | ||
328 | { | ||
329 | unsigned long r = __raw_readl(base + AU1200_USBCFG); | ||
330 | if (enable) { | ||
331 | __raw_writel(r | USBCFG_ECE | USBCFG_PPE, base + AU1200_USBCFG); | ||
332 | wmb(); | ||
333 | udelay(1000); | ||
334 | } else { | ||
335 | if (!(r & USBCFG_UCE)) /* UDC also off? */ | ||
336 | r &= ~USBCFG_PPE; /* yes: disable HS PHY PLL */ | ||
337 | __raw_writel(r & ~USBCFG_ECE, base + AU1200_USBCFG); | ||
338 | wmb(); | ||
339 | udelay(1000); | ||
340 | } | ||
341 | } | ||
342 | |||
343 | static inline void __au1200_udc_control(void __iomem *base, int enable) | ||
344 | { | ||
345 | unsigned long r = __raw_readl(base + AU1200_USBCFG); | ||
346 | if (enable) { | ||
347 | __raw_writel(r | USBCFG_UCE | USBCFG_PPE, base + AU1200_USBCFG); | ||
348 | wmb(); | ||
349 | } else { | ||
350 | if (!(r & USBCFG_ECE)) /* EHCI also off? */ | ||
351 | r &= ~USBCFG_PPE; /* yes: disable HS PHY PLL */ | ||
352 | __raw_writel(r & ~USBCFG_UCE, base + AU1200_USBCFG); | ||
353 | wmb(); | ||
354 | } | ||
355 | } | ||
356 | |||
357 | static inline int au1200_coherency_bug(void) | ||
358 | { | ||
359 | #if defined(CONFIG_DMA_COHERENT) | ||
360 | /* Au1200 AB USB does not support coherent memory */ | ||
361 | if (!(read_c0_prid() & 0xff)) { | ||
362 | printk(KERN_INFO "Au1200 USB: this is chip revision AB !!\n"); | ||
363 | printk(KERN_INFO "Au1200 USB: update your board or re-configure" | ||
364 | " the kernel\n"); | ||
365 | return -ENODEV; | ||
366 | } | ||
367 | #endif | ||
368 | return 0; | ||
369 | } | ||
370 | |||
371 | static inline int au1200_usb_control(int block, int enable) | ||
372 | { | ||
373 | void __iomem *base = | ||
374 | (void __iomem *)KSEG1ADDR(AU1200_USB_CTL_PHYS_ADDR); | ||
375 | int ret = 0; | ||
376 | |||
377 | switch (block) { | ||
378 | case ALCHEMY_USB_OHCI0: | ||
379 | ret = au1200_coherency_bug(); | ||
380 | if (ret && enable) | ||
381 | goto out; | ||
382 | __au1200_ohci_control(base, enable); | ||
383 | break; | ||
384 | case ALCHEMY_USB_UDC0: | ||
385 | __au1200_udc_control(base, enable); | ||
386 | break; | ||
387 | case ALCHEMY_USB_EHCI0: | ||
388 | ret = au1200_coherency_bug(); | ||
389 | if (ret && enable) | ||
390 | goto out; | ||
391 | __au1200_ehci_control(base, enable); | ||
392 | break; | ||
393 | default: | ||
394 | ret = -ENODEV; | ||
395 | } | ||
396 | out: | ||
397 | return ret; | ||
398 | } | ||
399 | |||
400 | |||
401 | /* initialize USB block(s) to a known working state */ | ||
402 | static inline void au1200_usb_init(void) | ||
403 | { | ||
404 | void __iomem *base = | ||
405 | (void __iomem *)KSEG1ADDR(AU1200_USB_CTL_PHYS_ADDR); | ||
406 | __raw_writel(USBCFG_INIT_AU1200, base + AU1200_USBCFG); | ||
407 | wmb(); | ||
408 | udelay(1000); | ||
409 | } | ||
410 | |||
411 | static inline void au1000_usb_init(unsigned long rb, int reg) | ||
412 | { | ||
413 | void __iomem *base = (void __iomem *)KSEG1ADDR(rb + reg); | ||
414 | unsigned long r = __raw_readl(base); | ||
415 | |||
416 | #if defined(__BIG_ENDIAN) | ||
417 | r |= USBHEN_BE; | ||
418 | #endif | ||
419 | r |= USBHEN_C; | ||
420 | |||
421 | __raw_writel(r, base); | ||
422 | wmb(); | ||
423 | udelay(1000); | ||
424 | } | ||
425 | |||
426 | |||
427 | static inline void __au1xx0_ohci_control(int enable, unsigned long rb, int creg) | ||
428 | { | ||
429 | void __iomem *base = (void __iomem *)KSEG1ADDR(rb); | ||
430 | unsigned long r = __raw_readl(base + creg); | ||
431 | |||
432 | if (enable) { | ||
433 | __raw_writel(r | USBHEN_CE, base + creg); | ||
434 | wmb(); | ||
435 | udelay(1000); | ||
436 | __raw_writel(r | USBHEN_CE | USBHEN_E, base + creg); | ||
437 | wmb(); | ||
438 | udelay(1000); | ||
439 | |||
440 | /* wait for reset complete (read reg twice: au1500 erratum) */ | ||
441 | while (__raw_readl(base + creg), | ||
442 | !(__raw_readl(base + creg) & USBHEN_RD)) | ||
443 | udelay(1000); | ||
444 | } else { | ||
445 | __raw_writel(r & ~(USBHEN_CE | USBHEN_E), base + creg); | ||
446 | wmb(); | ||
447 | } | ||
448 | } | ||
449 | |||
450 | static inline int au1000_usb_control(int block, int enable, unsigned long rb, | ||
451 | int creg) | ||
452 | { | ||
453 | int ret = 0; | ||
454 | |||
455 | switch (block) { | ||
456 | case ALCHEMY_USB_OHCI0: | ||
457 | __au1xx0_ohci_control(enable, rb, creg); | ||
458 | break; | ||
459 | default: | ||
460 | ret = -ENODEV; | ||
461 | } | ||
462 | return ret; | ||
463 | } | ||
464 | |||
465 | /* | ||
466 | * alchemy_usb_control - control Alchemy on-chip USB blocks | ||
467 | * @block: USB block to target | ||
468 | * @enable: set 1 to enable a block, 0 to disable | ||
469 | */ | ||
470 | int alchemy_usb_control(int block, int enable) | ||
471 | { | ||
472 | unsigned long flags; | ||
473 | int ret; | ||
474 | |||
475 | spin_lock_irqsave(&alchemy_usb_lock, flags); | ||
476 | switch (alchemy_get_cputype()) { | ||
477 | case ALCHEMY_CPU_AU1000: | ||
478 | case ALCHEMY_CPU_AU1500: | ||
479 | case ALCHEMY_CPU_AU1100: | ||
480 | ret = au1000_usb_control(block, enable, | ||
481 | AU1000_USB_OHCI_PHYS_ADDR, AU1000_OHCICFG); | ||
482 | break; | ||
483 | case ALCHEMY_CPU_AU1550: | ||
484 | ret = au1000_usb_control(block, enable, | ||
485 | AU1550_USB_OHCI_PHYS_ADDR, AU1550_OHCICFG); | ||
486 | break; | ||
487 | case ALCHEMY_CPU_AU1200: | ||
488 | ret = au1200_usb_control(block, enable); | ||
489 | break; | ||
490 | case ALCHEMY_CPU_AU1300: | ||
491 | ret = au1300_usb_control(block, enable); | ||
492 | break; | ||
493 | default: | ||
494 | ret = -ENODEV; | ||
495 | } | ||
496 | spin_unlock_irqrestore(&alchemy_usb_lock, flags); | ||
497 | return ret; | ||
498 | } | ||
499 | EXPORT_SYMBOL_GPL(alchemy_usb_control); | ||
500 | |||
501 | |||
502 | static unsigned long alchemy_usb_pmdata[2]; | ||
503 | |||
504 | static void au1000_usb_pm(unsigned long br, int creg, int susp) | ||
505 | { | ||
506 | void __iomem *base = (void __iomem *)KSEG1ADDR(br); | ||
507 | |||
508 | if (susp) { | ||
509 | alchemy_usb_pmdata[0] = __raw_readl(base + creg); | ||
510 | /* There appears to be some undocumented reset register.... */ | ||
511 | __raw_writel(0, base + 0x04); | ||
512 | wmb(); | ||
513 | __raw_writel(0, base + creg); | ||
514 | wmb(); | ||
515 | } else { | ||
516 | __raw_writel(alchemy_usb_pmdata[0], base + creg); | ||
517 | wmb(); | ||
518 | } | ||
519 | } | ||
520 | |||
521 | static void au1200_usb_pm(int susp) | ||
522 | { | ||
523 | void __iomem *base = | ||
524 | (void __iomem *)KSEG1ADDR(AU1200_USB_OTG_PHYS_ADDR); | ||
525 | if (susp) { | ||
526 | /* save OTG_CAP/MUX registers which indicate port routing */ | ||
527 | /* FIXME: write an OTG driver to do that */ | ||
528 | alchemy_usb_pmdata[0] = __raw_readl(base + 0x00); | ||
529 | alchemy_usb_pmdata[1] = __raw_readl(base + 0x04); | ||
530 | } else { | ||
531 | /* restore access to all MMIO areas */ | ||
532 | au1200_usb_init(); | ||
533 | |||
534 | /* restore OTG_CAP/MUX registers */ | ||
535 | __raw_writel(alchemy_usb_pmdata[0], base + 0x00); | ||
536 | __raw_writel(alchemy_usb_pmdata[1], base + 0x04); | ||
537 | wmb(); | ||
538 | } | ||
539 | } | ||
540 | |||
541 | static void au1300_usb_pm(int susp) | ||
542 | { | ||
543 | void __iomem *base = | ||
544 | (void __iomem *)KSEG1ADDR(AU1300_USB_CTL_PHYS_ADDR); | ||
545 | /* remember Port2 routing */ | ||
546 | if (susp) { | ||
547 | alchemy_usb_pmdata[0] = __raw_readl(base + USB_DWC_CTRL4); | ||
548 | } else { | ||
549 | au1300_usb_init(); | ||
550 | __raw_writel(alchemy_usb_pmdata[0], base + USB_DWC_CTRL4); | ||
551 | wmb(); | ||
552 | } | ||
553 | } | ||
554 | |||
555 | static void alchemy_usb_pm(int susp) | ||
556 | { | ||
557 | switch (alchemy_get_cputype()) { | ||
558 | case ALCHEMY_CPU_AU1000: | ||
559 | case ALCHEMY_CPU_AU1500: | ||
560 | case ALCHEMY_CPU_AU1100: | ||
561 | au1000_usb_pm(AU1000_USB_OHCI_PHYS_ADDR, AU1000_OHCICFG, susp); | ||
562 | break; | ||
563 | case ALCHEMY_CPU_AU1550: | ||
564 | au1000_usb_pm(AU1550_USB_OHCI_PHYS_ADDR, AU1550_OHCICFG, susp); | ||
565 | break; | ||
566 | case ALCHEMY_CPU_AU1200: | ||
567 | au1200_usb_pm(susp); | ||
568 | break; | ||
569 | case ALCHEMY_CPU_AU1300: | ||
570 | au1300_usb_pm(susp); | ||
571 | break; | ||
572 | } | ||
573 | } | ||
574 | |||
575 | static int alchemy_usb_suspend(void) | ||
576 | { | ||
577 | alchemy_usb_pm(1); | ||
578 | return 0; | ||
579 | } | ||
580 | |||
581 | static void alchemy_usb_resume(void) | ||
582 | { | ||
583 | alchemy_usb_pm(0); | ||
584 | } | ||
585 | |||
586 | static struct syscore_ops alchemy_usb_pm_ops = { | ||
587 | .suspend = alchemy_usb_suspend, | ||
588 | .resume = alchemy_usb_resume, | ||
589 | }; | ||
590 | |||
591 | static int __init alchemy_usb_init(void) | ||
592 | { | ||
593 | switch (alchemy_get_cputype()) { | ||
594 | case ALCHEMY_CPU_AU1000: | ||
595 | case ALCHEMY_CPU_AU1500: | ||
596 | case ALCHEMY_CPU_AU1100: | ||
597 | au1000_usb_init(AU1000_USB_OHCI_PHYS_ADDR, AU1000_OHCICFG); | ||
598 | break; | ||
599 | case ALCHEMY_CPU_AU1550: | ||
600 | au1000_usb_init(AU1550_USB_OHCI_PHYS_ADDR, AU1550_OHCICFG); | ||
601 | break; | ||
602 | case ALCHEMY_CPU_AU1200: | ||
603 | au1200_usb_init(); | ||
604 | break; | ||
605 | case ALCHEMY_CPU_AU1300: | ||
606 | au1300_usb_init(); | ||
607 | break; | ||
608 | } | ||
609 | |||
610 | register_syscore_ops(&alchemy_usb_pm_ops); | ||
611 | |||
612 | return 0; | ||
613 | } | ||
614 | arch_initcall(alchemy_usb_init); | ||
diff --git a/arch/mips/ath79/dev-usb.c b/arch/mips/ath79/dev-usb.c index 072bb9be2304..bd2bc108e1b5 100644 --- a/arch/mips/ath79/dev-usb.c +++ b/arch/mips/ath79/dev-usb.c | |||
@@ -50,13 +50,11 @@ static u64 ath79_ehci_dmamask = DMA_BIT_MASK(32); | |||
50 | 50 | ||
51 | static struct usb_ehci_pdata ath79_ehci_pdata_v1 = { | 51 | static struct usb_ehci_pdata ath79_ehci_pdata_v1 = { |
52 | .has_synopsys_hc_bug = 1, | 52 | .has_synopsys_hc_bug = 1, |
53 | .port_power_off = 1, | ||
54 | }; | 53 | }; |
55 | 54 | ||
56 | static struct usb_ehci_pdata ath79_ehci_pdata_v2 = { | 55 | static struct usb_ehci_pdata ath79_ehci_pdata_v2 = { |
57 | .caps_offset = 0x100, | 56 | .caps_offset = 0x100, |
58 | .has_tt = 1, | 57 | .has_tt = 1, |
59 | .port_power_off = 1, | ||
60 | }; | 58 | }; |
61 | 59 | ||
62 | static struct platform_device ath79_ehci_device = { | 60 | static struct platform_device ath79_ehci_device = { |
diff --git a/arch/mips/cavium-octeon/Makefile b/arch/mips/cavium-octeon/Makefile index bc96e2908f14..6e927cf20df2 100644 --- a/arch/mips/cavium-octeon/Makefile +++ b/arch/mips/cavium-octeon/Makefile | |||
@@ -24,9 +24,6 @@ DTB_FILES = $(patsubst %.dts, %.dtb, $(DTS_FILES)) | |||
24 | 24 | ||
25 | obj-y += $(patsubst %.dts, %.dtb.o, $(DTS_FILES)) | 25 | obj-y += $(patsubst %.dts, %.dtb.o, $(DTS_FILES)) |
26 | 26 | ||
27 | $(obj)/%.dtb: $(src)/%.dts FORCE | ||
28 | $(call if_changed_dep,dtc) | ||
29 | |||
30 | # Let's keep the .dtb files around in case we want to look at them. | 27 | # Let's keep the .dtb files around in case we want to look at them. |
31 | .SECONDARY: $(addprefix $(obj)/, $(DTB_FILES)) | 28 | .SECONDARY: $(addprefix $(obj)/, $(DTB_FILES)) |
32 | 29 | ||
diff --git a/arch/mips/configs/bcm47xx_defconfig b/arch/mips/configs/bcm47xx_defconfig index b6fde2bb51b6..4ca8e5c99225 100644 --- a/arch/mips/configs/bcm47xx_defconfig +++ b/arch/mips/configs/bcm47xx_defconfig | |||
@@ -473,7 +473,7 @@ CONFIG_USB_GADGET_NET2280=y | |||
473 | CONFIG_USB_ZERO=m | 473 | CONFIG_USB_ZERO=m |
474 | CONFIG_USB_ETH=m | 474 | CONFIG_USB_ETH=m |
475 | CONFIG_USB_GADGETFS=m | 475 | CONFIG_USB_GADGETFS=m |
476 | CONFIG_USB_FILE_STORAGE=m | 476 | CONFIG_USB_MASS_STORAGE=m |
477 | CONFIG_USB_G_SERIAL=m | 477 | CONFIG_USB_G_SERIAL=m |
478 | CONFIG_USB_MIDI_GADGET=m | 478 | CONFIG_USB_MIDI_GADGET=m |
479 | CONFIG_LEDS_CLASS=y | 479 | CONFIG_LEDS_CLASS=y |
diff --git a/arch/mips/configs/db1000_defconfig b/arch/mips/configs/db1000_defconfig index 17a36c125172..face9d26e6d5 100644 --- a/arch/mips/configs/db1000_defconfig +++ b/arch/mips/configs/db1000_defconfig | |||
@@ -233,6 +233,7 @@ CONFIG_USB_EHCI_HCD=y | |||
233 | CONFIG_USB_EHCI_ROOT_HUB_TT=y | 233 | CONFIG_USB_EHCI_ROOT_HUB_TT=y |
234 | CONFIG_USB_EHCI_TT_NEWSCHED=y | 234 | CONFIG_USB_EHCI_TT_NEWSCHED=y |
235 | CONFIG_USB_OHCI_HCD=y | 235 | CONFIG_USB_OHCI_HCD=y |
236 | CONFIG_USB_OHCI_HCD_PLATFORM=y | ||
236 | CONFIG_USB_UHCI_HCD=y | 237 | CONFIG_USB_UHCI_HCD=y |
237 | CONFIG_USB_STORAGE=y | 238 | CONFIG_USB_STORAGE=y |
238 | CONFIG_NEW_LEDS=y | 239 | CONFIG_NEW_LEDS=y |
diff --git a/arch/mips/configs/db1235_defconfig b/arch/mips/configs/db1235_defconfig index c48998ffd198..14752dde7540 100644 --- a/arch/mips/configs/db1235_defconfig +++ b/arch/mips/configs/db1235_defconfig | |||
@@ -346,8 +346,10 @@ CONFIG_USB=y | |||
346 | CONFIG_USB_DYNAMIC_MINORS=y | 346 | CONFIG_USB_DYNAMIC_MINORS=y |
347 | CONFIG_USB_SUSPEND=y | 347 | CONFIG_USB_SUSPEND=y |
348 | CONFIG_USB_EHCI_HCD=y | 348 | CONFIG_USB_EHCI_HCD=y |
349 | CONFIG_USB_EHCI_HCD_PLATFORM=y | ||
349 | CONFIG_USB_EHCI_ROOT_HUB_TT=y | 350 | CONFIG_USB_EHCI_ROOT_HUB_TT=y |
350 | CONFIG_USB_OHCI_HCD=y | 351 | CONFIG_USB_OHCI_HCD=y |
352 | CONFIG_USB_OHCI_HCD_PLATFORM=y | ||
351 | CONFIG_USB_STORAGE=y | 353 | CONFIG_USB_STORAGE=y |
352 | CONFIG_MMC=y | 354 | CONFIG_MMC=y |
353 | CONFIG_MMC_CLKGATE=y | 355 | CONFIG_MMC_CLKGATE=y |
diff --git a/arch/mips/configs/gpr_defconfig b/arch/mips/configs/gpr_defconfig index 48a40aefaf58..fb64589015fc 100644 --- a/arch/mips/configs/gpr_defconfig +++ b/arch/mips/configs/gpr_defconfig | |||
@@ -291,6 +291,7 @@ CONFIG_USB_MON=y | |||
291 | CONFIG_USB_EHCI_HCD=y | 291 | CONFIG_USB_EHCI_HCD=y |
292 | CONFIG_USB_EHCI_ROOT_HUB_TT=y | 292 | CONFIG_USB_EHCI_ROOT_HUB_TT=y |
293 | CONFIG_USB_OHCI_HCD=y | 293 | CONFIG_USB_OHCI_HCD=y |
294 | CONFIG_USB_OHCI_HCD_PLATFORM=y | ||
294 | CONFIG_USB_STORAGE=m | 295 | CONFIG_USB_STORAGE=m |
295 | CONFIG_USB_LIBUSUAL=y | 296 | CONFIG_USB_LIBUSUAL=y |
296 | CONFIG_USB_SERIAL=y | 297 | CONFIG_USB_SERIAL=y |
diff --git a/arch/mips/configs/ls1b_defconfig b/arch/mips/configs/ls1b_defconfig index 80cff8bea8e8..7eb75543ca1a 100644 --- a/arch/mips/configs/ls1b_defconfig +++ b/arch/mips/configs/ls1b_defconfig | |||
@@ -76,6 +76,7 @@ CONFIG_HID_GENERIC=m | |||
76 | CONFIG_USB=y | 76 | CONFIG_USB=y |
77 | CONFIG_USB_ANNOUNCE_NEW_DEVICES=y | 77 | CONFIG_USB_ANNOUNCE_NEW_DEVICES=y |
78 | CONFIG_USB_EHCI_HCD=y | 78 | CONFIG_USB_EHCI_HCD=y |
79 | CONFIG_USB_EHCI_HCD_PLATFORM=y | ||
79 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | 80 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set |
80 | CONFIG_USB_STORAGE=m | 81 | CONFIG_USB_STORAGE=m |
81 | CONFIG_USB_SERIAL=m | 82 | CONFIG_USB_SERIAL=m |
diff --git a/arch/mips/configs/mtx1_defconfig b/arch/mips/configs/mtx1_defconfig index 46c61edcdf7b..9fa8f16068d8 100644 --- a/arch/mips/configs/mtx1_defconfig +++ b/arch/mips/configs/mtx1_defconfig | |||
@@ -581,6 +581,7 @@ CONFIG_USB_MON=m | |||
581 | CONFIG_USB_EHCI_HCD=m | 581 | CONFIG_USB_EHCI_HCD=m |
582 | CONFIG_USB_EHCI_ROOT_HUB_TT=y | 582 | CONFIG_USB_EHCI_ROOT_HUB_TT=y |
583 | CONFIG_USB_OHCI_HCD=m | 583 | CONFIG_USB_OHCI_HCD=m |
584 | CONFIG_USB_OHCI_HCD_PLATFORM=y | ||
584 | CONFIG_USB_UHCI_HCD=m | 585 | CONFIG_USB_UHCI_HCD=m |
585 | CONFIG_USB_U132_HCD=m | 586 | CONFIG_USB_U132_HCD=m |
586 | CONFIG_USB_SL811_HCD=m | 587 | CONFIG_USB_SL811_HCD=m |
@@ -661,7 +662,7 @@ CONFIG_USB_GADGET_NET2280=y | |||
661 | CONFIG_USB_ZERO=m | 662 | CONFIG_USB_ZERO=m |
662 | CONFIG_USB_ETH=m | 663 | CONFIG_USB_ETH=m |
663 | CONFIG_USB_GADGETFS=m | 664 | CONFIG_USB_GADGETFS=m |
664 | CONFIG_USB_FILE_STORAGE=m | 665 | CONFIG_USB_MASS_STORAGE=m |
665 | CONFIG_USB_G_SERIAL=m | 666 | CONFIG_USB_G_SERIAL=m |
666 | CONFIG_USB_MIDI_GADGET=m | 667 | CONFIG_USB_MIDI_GADGET=m |
667 | CONFIG_MMC=m | 668 | CONFIG_MMC=m |
diff --git a/arch/mips/include/uapi/asm/ioctls.h b/arch/mips/include/uapi/asm/ioctls.h index 92403c3d6007..addd56b60694 100644 --- a/arch/mips/include/uapi/asm/ioctls.h +++ b/arch/mips/include/uapi/asm/ioctls.h | |||
@@ -86,6 +86,9 @@ | |||
86 | #define TIOCGDEV _IOR('T', 0x32, unsigned int) /* Get primary device node of /dev/console */ | 86 | #define TIOCGDEV _IOR('T', 0x32, unsigned int) /* Get primary device node of /dev/console */ |
87 | #define TIOCSIG _IOW('T', 0x36, int) /* Generate signal on Pty slave */ | 87 | #define TIOCSIG _IOW('T', 0x36, int) /* Generate signal on Pty slave */ |
88 | #define TIOCVHANGUP 0x5437 | 88 | #define TIOCVHANGUP 0x5437 |
89 | #define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */ | ||
90 | #define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */ | ||
91 | #define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */ | ||
89 | 92 | ||
90 | /* I hope the range from 0x5480 on is free ... */ | 93 | /* I hope the range from 0x5480 on is free ... */ |
91 | #define TIOCSCTTY 0x5480 /* become controlling tty */ | 94 | #define TIOCSCTTY 0x5480 /* become controlling tty */ |
diff --git a/arch/mips/include/uapi/asm/mman.h b/arch/mips/include/uapi/asm/mman.h index 46d3da0d4b92..9a936ac9a942 100644 --- a/arch/mips/include/uapi/asm/mman.h +++ b/arch/mips/include/uapi/asm/mman.h | |||
@@ -87,4 +87,15 @@ | |||
87 | /* compatibility flags */ | 87 | /* compatibility flags */ |
88 | #define MAP_FILE 0 | 88 | #define MAP_FILE 0 |
89 | 89 | ||
90 | /* | ||
91 | * When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size. | ||
92 | * This gives us 6 bits, which is enough until someone invents 128 bit address | ||
93 | * spaces. | ||
94 | * | ||
95 | * Assume these are all power of twos. | ||
96 | * When 0 use the default page size. | ||
97 | */ | ||
98 | #define MAP_HUGE_SHIFT 26 | ||
99 | #define MAP_HUGE_MASK 0x3f | ||
100 | |||
90 | #endif /* _ASM_MMAN_H */ | 101 | #endif /* _ASM_MMAN_H */ |
diff --git a/arch/mips/lantiq/dts/Makefile b/arch/mips/lantiq/dts/Makefile index 674fca45f72d..6fa72dd641b2 100644 --- a/arch/mips/lantiq/dts/Makefile +++ b/arch/mips/lantiq/dts/Makefile | |||
@@ -1,4 +1 @@ | |||
1 | obj-$(CONFIG_DT_EASY50712) := easy50712.dtb.o | obj-$(CONFIG_DT_EASY50712) := easy50712.dtb.o | |
2 | |||
3 | $(obj)/%.dtb: $(obj)/%.dts | ||
4 | $(call if_changed,dtc) | ||
diff --git a/arch/mips/loongson1/common/platform.c b/arch/mips/loongson1/common/platform.c index e92d59c4bd78..0412ad61e290 100644 --- a/arch/mips/loongson1/common/platform.c +++ b/arch/mips/loongson1/common/platform.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #include <linux/phy.h> | 13 | #include <linux/phy.h> |
14 | #include <linux/serial_8250.h> | 14 | #include <linux/serial_8250.h> |
15 | #include <linux/stmmac.h> | 15 | #include <linux/stmmac.h> |
16 | #include <linux/usb/ehci_pdriver.h> | ||
16 | #include <asm-generic/sizes.h> | 17 | #include <asm-generic/sizes.h> |
17 | 18 | ||
18 | #include <loongson1.h> | 19 | #include <loongson1.h> |
@@ -107,13 +108,17 @@ static struct resource ls1x_ehci_resources[] = { | |||
107 | }, | 108 | }, |
108 | }; | 109 | }; |
109 | 110 | ||
111 | static struct usb_ehci_pdata ls1x_ehci_pdata = { | ||
112 | }; | ||
113 | |||
110 | struct platform_device ls1x_ehci_device = { | 114 | struct platform_device ls1x_ehci_device = { |
111 | .name = "ls1x-ehci", | 115 | .name = "ehci-platform", |
112 | .id = -1, | 116 | .id = -1, |
113 | .num_resources = ARRAY_SIZE(ls1x_ehci_resources), | 117 | .num_resources = ARRAY_SIZE(ls1x_ehci_resources), |
114 | .resource = ls1x_ehci_resources, | 118 | .resource = ls1x_ehci_resources, |
115 | .dev = { | 119 | .dev = { |
116 | .dma_mask = &ls1x_ehci_dmamask, | 120 | .dma_mask = &ls1x_ehci_dmamask, |
121 | .platform_data = &ls1x_ehci_pdata, | ||
117 | }, | 122 | }, |
118 | }; | 123 | }; |
119 | 124 | ||
diff --git a/arch/mips/mm/mmap.c b/arch/mips/mm/mmap.c index 302d779d5b0d..d9be7540a6be 100644 --- a/arch/mips/mm/mmap.c +++ b/arch/mips/mm/mmap.c | |||
@@ -45,18 +45,6 @@ static unsigned long mmap_base(unsigned long rnd) | |||
45 | return PAGE_ALIGN(TASK_SIZE - gap - rnd); | 45 | return PAGE_ALIGN(TASK_SIZE - gap - rnd); |
46 | } | 46 | } |
47 | 47 | ||
48 | static inline unsigned long COLOUR_ALIGN_DOWN(unsigned long addr, | ||
49 | unsigned long pgoff) | ||
50 | { | ||
51 | unsigned long base = addr & ~shm_align_mask; | ||
52 | unsigned long off = (pgoff << PAGE_SHIFT) & shm_align_mask; | ||
53 | |||
54 | if (base + off <= addr) | ||
55 | return base + off; | ||
56 | |||
57 | return base - off; | ||
58 | } | ||
59 | |||
60 | #define COLOUR_ALIGN(addr, pgoff) \ | 48 | #define COLOUR_ALIGN(addr, pgoff) \ |
61 | ((((addr) + shm_align_mask) & ~shm_align_mask) + \ | 49 | ((((addr) + shm_align_mask) & ~shm_align_mask) + \ |
62 | (((pgoff) << PAGE_SHIFT) & shm_align_mask)) | 50 | (((pgoff) << PAGE_SHIFT) & shm_align_mask)) |
@@ -71,6 +59,7 @@ static unsigned long arch_get_unmapped_area_common(struct file *filp, | |||
71 | struct vm_area_struct *vma; | 59 | struct vm_area_struct *vma; |
72 | unsigned long addr = addr0; | 60 | unsigned long addr = addr0; |
73 | int do_color_align; | 61 | int do_color_align; |
62 | struct vm_unmapped_area_info info; | ||
74 | 63 | ||
75 | if (unlikely(len > TASK_SIZE)) | 64 | if (unlikely(len > TASK_SIZE)) |
76 | return -ENOMEM; | 65 | return -ENOMEM; |
@@ -107,97 +96,31 @@ static unsigned long arch_get_unmapped_area_common(struct file *filp, | |||
107 | return addr; | 96 | return addr; |
108 | } | 97 | } |
109 | 98 | ||
110 | if (dir == UP) { | 99 | info.length = len; |
111 | addr = mm->mmap_base; | 100 | info.align_mask = do_color_align ? (PAGE_MASK & shm_align_mask) : 0; |
112 | if (do_color_align) | 101 | info.align_offset = pgoff << PAGE_SHIFT; |
113 | addr = COLOUR_ALIGN(addr, pgoff); | ||
114 | else | ||
115 | addr = PAGE_ALIGN(addr); | ||
116 | 102 | ||
117 | for (vma = find_vma(current->mm, addr); ; vma = vma->vm_next) { | 103 | if (dir == DOWN) { |
118 | /* At this point: (!vma || addr < vma->vm_end). */ | 104 | info.flags = VM_UNMAPPED_AREA_TOPDOWN; |
119 | if (TASK_SIZE - len < addr) | 105 | info.low_limit = PAGE_SIZE; |
120 | return -ENOMEM; | 106 | info.high_limit = mm->mmap_base; |
121 | if (!vma || addr + len <= vma->vm_start) | 107 | addr = vm_unmapped_area(&info); |
122 | return addr; | 108 | |
123 | addr = vma->vm_end; | 109 | if (!(addr & ~PAGE_MASK)) |
124 | if (do_color_align) | 110 | return addr; |
125 | addr = COLOUR_ALIGN(addr, pgoff); | ||
126 | } | ||
127 | } else { | ||
128 | /* check if free_area_cache is useful for us */ | ||
129 | if (len <= mm->cached_hole_size) { | ||
130 | mm->cached_hole_size = 0; | ||
131 | mm->free_area_cache = mm->mmap_base; | ||
132 | } | ||
133 | 111 | ||
134 | /* | ||
135 | * either no address requested, or the mapping can't fit into | ||
136 | * the requested address hole | ||
137 | */ | ||
138 | addr = mm->free_area_cache; | ||
139 | if (do_color_align) { | ||
140 | unsigned long base = | ||
141 | COLOUR_ALIGN_DOWN(addr - len, pgoff); | ||
142 | addr = base + len; | ||
143 | } | ||
144 | |||
145 | /* make sure it can fit in the remaining address space */ | ||
146 | if (likely(addr > len)) { | ||
147 | vma = find_vma(mm, addr - len); | ||
148 | if (!vma || addr <= vma->vm_start) { | ||
149 | /* cache the address as a hint for next time */ | ||
150 | return mm->free_area_cache = addr - len; | ||
151 | } | ||
152 | } | ||
153 | |||
154 | if (unlikely(mm->mmap_base < len)) | ||
155 | goto bottomup; | ||
156 | |||
157 | addr = mm->mmap_base - len; | ||
158 | if (do_color_align) | ||
159 | addr = COLOUR_ALIGN_DOWN(addr, pgoff); | ||
160 | |||
161 | do { | ||
162 | /* | ||
163 | * Lookup failure means no vma is above this address, | ||
164 | * else if new region fits below vma->vm_start, | ||
165 | * return with success: | ||
166 | */ | ||
167 | vma = find_vma(mm, addr); | ||
168 | if (likely(!vma || addr + len <= vma->vm_start)) { | ||
169 | /* cache the address as a hint for next time */ | ||
170 | return mm->free_area_cache = addr; | ||
171 | } | ||
172 | |||
173 | /* remember the largest hole we saw so far */ | ||
174 | if (addr + mm->cached_hole_size < vma->vm_start) | ||
175 | mm->cached_hole_size = vma->vm_start - addr; | ||
176 | |||
177 | /* try just below the current vma->vm_start */ | ||
178 | addr = vma->vm_start - len; | ||
179 | if (do_color_align) | ||
180 | addr = COLOUR_ALIGN_DOWN(addr, pgoff); | ||
181 | } while (likely(len < vma->vm_start)); | ||
182 | |||
183 | bottomup: | ||
184 | /* | 112 | /* |
185 | * A failed mmap() very likely causes application failure, | 113 | * A failed mmap() very likely causes application failure, |
186 | * so fall back to the bottom-up function here. This scenario | 114 | * so fall back to the bottom-up function here. This scenario |
187 | * can happen with large stack limits and large mmap() | 115 | * can happen with large stack limits and large mmap() |
188 | * allocations. | 116 | * allocations. |
189 | */ | 117 | */ |
190 | mm->cached_hole_size = ~0UL; | ||
191 | mm->free_area_cache = TASK_UNMAPPED_BASE; | ||
192 | addr = arch_get_unmapped_area(filp, addr0, len, pgoff, flags); | ||
193 | /* | ||
194 | * Restore the topdown base: | ||
195 | */ | ||
196 | mm->free_area_cache = mm->mmap_base; | ||
197 | mm->cached_hole_size = ~0UL; | ||
198 | |||
199 | return addr; | ||
200 | } | 118 | } |
119 | |||
120 | info.flags = 0; | ||
121 | info.low_limit = mm->mmap_base; | ||
122 | info.high_limit = TASK_SIZE; | ||
123 | return vm_unmapped_area(&info); | ||
201 | } | 124 | } |
202 | 125 | ||
203 | unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr0, | 126 | unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr0, |
diff --git a/arch/mips/netlogic/dts/Makefile b/arch/mips/netlogic/dts/Makefile index 67ae3fe296f0..d117d46413aa 100644 --- a/arch/mips/netlogic/dts/Makefile +++ b/arch/mips/netlogic/dts/Makefile | |||
@@ -1,4 +1 @@ | |||
1 | obj-$(CONFIG_DT_XLP_EVP) := xlp_evp.dtb.o | obj-$(CONFIG_DT_XLP_EVP) := xlp_evp.dtb.o | |
2 | |||
3 | $(obj)/%.dtb: $(obj)/%.dts | ||
4 | $(call if_changed,dtc) | ||
diff --git a/arch/mips/netlogic/xlr/platform.c b/arch/mips/netlogic/xlr/platform.c index 71b44d82621d..507230eeb768 100644 --- a/arch/mips/netlogic/xlr/platform.c +++ b/arch/mips/netlogic/xlr/platform.c | |||
@@ -15,6 +15,8 @@ | |||
15 | #include <linux/serial_8250.h> | 15 | #include <linux/serial_8250.h> |
16 | #include <linux/serial_reg.h> | 16 | #include <linux/serial_reg.h> |
17 | #include <linux/i2c.h> | 17 | #include <linux/i2c.h> |
18 | #include <linux/usb/ehci_pdriver.h> | ||
19 | #include <linux/usb/ohci_pdriver.h> | ||
18 | 20 | ||
19 | #include <asm/netlogic/haldefs.h> | 21 | #include <asm/netlogic/haldefs.h> |
20 | #include <asm/netlogic/xlr/iomap.h> | 22 | #include <asm/netlogic/xlr/iomap.h> |
@@ -123,12 +125,18 @@ static u64 xls_usb_dmamask = ~(u32)0; | |||
123 | }, \ | 125 | }, \ |
124 | } | 126 | } |
125 | 127 | ||
128 | static struct usb_ehci_pdata xls_usb_ehci_pdata = { | ||
129 | .caps_offset = 0, | ||
130 | }; | ||
131 | |||
132 | static struct usb_ohci_pdata xls_usb_ohci_pdata; | ||
133 | |||
126 | static struct platform_device xls_usb_ehci_device = | 134 | static struct platform_device xls_usb_ehci_device = |
127 | USB_PLATFORM_DEV("ehci-xls", 0, PIC_USB_IRQ); | 135 | USB_PLATFORM_DEV("ehci-platform", 0, PIC_USB_IRQ); |
128 | static struct platform_device xls_usb_ohci_device_0 = | 136 | static struct platform_device xls_usb_ohci_device_0 = |
129 | USB_PLATFORM_DEV("ohci-xls-0", 1, PIC_USB_IRQ); | 137 | USB_PLATFORM_DEV("ohci-platform", 1, PIC_USB_IRQ); |
130 | static struct platform_device xls_usb_ohci_device_1 = | 138 | static struct platform_device xls_usb_ohci_device_1 = |
131 | USB_PLATFORM_DEV("ohci-xls-1", 2, PIC_USB_IRQ); | 139 | USB_PLATFORM_DEV("ohci-platform", 2, PIC_USB_IRQ); |
132 | 140 | ||
133 | static struct platform_device *xls_platform_devices[] = { | 141 | static struct platform_device *xls_platform_devices[] = { |
134 | &xls_usb_ehci_device, | 142 | &xls_usb_ehci_device, |
@@ -172,14 +180,17 @@ int xls_platform_usb_init(void) | |||
172 | memres = CPHYSADDR((unsigned long)usb_mmio); | 180 | memres = CPHYSADDR((unsigned long)usb_mmio); |
173 | xls_usb_ehci_device.resource[0].start = memres; | 181 | xls_usb_ehci_device.resource[0].start = memres; |
174 | xls_usb_ehci_device.resource[0].end = memres + 0x400 - 1; | 182 | xls_usb_ehci_device.resource[0].end = memres + 0x400 - 1; |
183 | xls_usb_ehci_device.dev.platform_data = &xls_usb_ehci_pdata; | ||
175 | 184 | ||
176 | memres += 0x400; | 185 | memres += 0x400; |
177 | xls_usb_ohci_device_0.resource[0].start = memres; | 186 | xls_usb_ohci_device_0.resource[0].start = memres; |
178 | xls_usb_ohci_device_0.resource[0].end = memres + 0x400 - 1; | 187 | xls_usb_ohci_device_0.resource[0].end = memres + 0x400 - 1; |
188 | xls_usb_ohci_device_0.dev.platform_data = &xls_usb_ohci_pdata; | ||
179 | 189 | ||
180 | memres += 0x400; | 190 | memres += 0x400; |
181 | xls_usb_ohci_device_1.resource[0].start = memres; | 191 | xls_usb_ohci_device_1.resource[0].start = memres; |
182 | xls_usb_ohci_device_1.resource[0].end = memres + 0x400 - 1; | 192 | xls_usb_ohci_device_1.resource[0].end = memres + 0x400 - 1; |
193 | xls_usb_ohci_device_1.dev.platform_data = &xls_usb_ohci_pdata; | ||
183 | 194 | ||
184 | return platform_add_devices(xls_platform_devices, | 195 | return platform_add_devices(xls_platform_devices, |
185 | ARRAY_SIZE(xls_platform_devices)); | 196 | ARRAY_SIZE(xls_platform_devices)); |
diff --git a/arch/mips/pci/pci.c b/arch/mips/pci/pci.c index 04e35bcde07c..4040416e0603 100644 --- a/arch/mips/pci/pci.c +++ b/arch/mips/pci/pci.c | |||
@@ -313,10 +313,8 @@ void __devinit pcibios_fixup_bus(struct pci_bus *bus) | |||
313 | } | 313 | } |
314 | } | 314 | } |
315 | 315 | ||
316 | #ifdef CONFIG_HOTPLUG | ||
317 | EXPORT_SYMBOL(PCIBIOS_MIN_IO); | 316 | EXPORT_SYMBOL(PCIBIOS_MIN_IO); |
318 | EXPORT_SYMBOL(PCIBIOS_MIN_MEM); | 317 | EXPORT_SYMBOL(PCIBIOS_MIN_MEM); |
319 | #endif | ||
320 | 318 | ||
321 | int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, | 319 | int pci_mmap_page_range(struct pci_dev *dev, struct vm_area_struct *vma, |
322 | enum pci_mmap_state mmap_state, int write_combine) | 320 | enum pci_mmap_state mmap_state, int write_combine) |
diff --git a/arch/mips/pnx8550/common/platform.c b/arch/mips/pnx8550/common/platform.c index 5264cc09a27b..0a8faeaa7b70 100644 --- a/arch/mips/pnx8550/common/platform.c +++ b/arch/mips/pnx8550/common/platform.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/serial.h> | 20 | #include <linux/serial.h> |
21 | #include <linux/serial_pnx8xxx.h> | 21 | #include <linux/serial_pnx8xxx.h> |
22 | #include <linux/platform_device.h> | 22 | #include <linux/platform_device.h> |
23 | #include <linux/usb/ohci_pdriver.h> | ||
23 | 24 | ||
24 | #include <int.h> | 25 | #include <int.h> |
25 | #include <usb.h> | 26 | #include <usb.h> |
@@ -96,12 +97,40 @@ static u64 ohci_dmamask = DMA_BIT_MASK(32); | |||
96 | 97 | ||
97 | static u64 uart_dmamask = DMA_BIT_MASK(32); | 98 | static u64 uart_dmamask = DMA_BIT_MASK(32); |
98 | 99 | ||
100 | static int pnx8550_usb_ohci_power_on(struct platform_device *pdev) | ||
101 | { | ||
102 | /* | ||
103 | * Set register CLK48CTL to enable and 48MHz | ||
104 | */ | ||
105 | outl(0x00000003, PCI_BASE | 0x0004770c); | ||
106 | |||
107 | /* | ||
108 | * Set register CLK12CTL to enable and 48MHz | ||
109 | */ | ||
110 | outl(0x00000003, PCI_BASE | 0x00047710); | ||
111 | |||
112 | udelay(100); | ||
113 | |||
114 | return 0; | ||
115 | } | ||
116 | |||
117 | static void pnx8550_usb_ohci_power_off(struct platform_device *pdev) | ||
118 | { | ||
119 | udelay(10); | ||
120 | } | ||
121 | |||
122 | static struct usb_ohci_pdata pnx8550_usb_ohci_pdata = { | ||
123 | .power_on = pnx8550_usb_ohci_power_on, | ||
124 | .power_off = pnx8550_usb_ohci_power_off, | ||
125 | }; | ||
126 | |||
99 | static struct platform_device pnx8550_usb_ohci_device = { | 127 | static struct platform_device pnx8550_usb_ohci_device = { |
100 | .name = "pnx8550-ohci", | 128 | .name = "ohci-platform", |
101 | .id = -1, | 129 | .id = -1, |
102 | .dev = { | 130 | .dev = { |
103 | .dma_mask = &ohci_dmamask, | 131 | .dma_mask = &ohci_dmamask, |
104 | .coherent_dma_mask = DMA_BIT_MASK(32), | 132 | .coherent_dma_mask = DMA_BIT_MASK(32), |
133 | .platform_data = &pnx8550_usb_ohci_pdata, | ||
105 | }, | 134 | }, |
106 | .num_resources = ARRAY_SIZE(pnx8550_usb_ohci_resources), | 135 | .num_resources = ARRAY_SIZE(pnx8550_usb_ohci_resources), |
107 | .resource = pnx8550_usb_ohci_resources, | 136 | .resource = pnx8550_usb_ohci_resources, |
diff --git a/arch/openrisc/Makefile b/arch/openrisc/Makefile index 966886c8daf5..4739b8302a58 100644 --- a/arch/openrisc/Makefile +++ b/arch/openrisc/Makefile | |||
@@ -50,6 +50,6 @@ BUILTIN_DTB := y | |||
50 | else | 50 | else |
51 | BUILTIN_DTB := n | 51 | BUILTIN_DTB := n |
52 | endif | 52 | endif |
53 | core-$(BUILTIN_DTB) += arch/openrisc/boot/ | 53 | core-$(BUILTIN_DTB) += arch/openrisc/boot/dts/ |
54 | 54 | ||
55 | all: vmlinux | 55 | all: vmlinux |
diff --git a/arch/openrisc/boot/Makefile b/arch/openrisc/boot/dts/Makefile index 09958358601a..b092d30d6c23 100644 --- a/arch/openrisc/boot/Makefile +++ b/arch/openrisc/boot/dts/Makefile | |||
@@ -1,5 +1,3 @@ | |||
1 | |||
2 | |||
3 | ifneq '$(CONFIG_OPENRISC_BUILTIN_DTB)' '""' | 1 | ifneq '$(CONFIG_OPENRISC_BUILTIN_DTB)' '""' |
4 | BUILTIN_DTB := $(patsubst "%",%,$(CONFIG_OPENRISC_BUILTIN_DTB)).dtb.o | 2 | BUILTIN_DTB := $(patsubst "%",%,$(CONFIG_OPENRISC_BUILTIN_DTB)).dtb.o |
5 | else | 3 | else |
@@ -10,6 +8,3 @@ obj-y += $(BUILTIN_DTB) | |||
10 | clean-files := *.dtb.S | 8 | clean-files := *.dtb.S |
11 | 9 | ||
12 | #DTC_FLAGS ?= -p 1024 | 10 | #DTC_FLAGS ?= -p 1024 |
13 | |||
14 | $(obj)/%.dtb: $(src)/dts/%.dts FORCE | ||
15 | $(call if_changed_dep,dtc) | ||
diff --git a/arch/parisc/include/uapi/asm/ioctls.h b/arch/parisc/include/uapi/asm/ioctls.h index 054ec06f9e23..66719c38a36b 100644 --- a/arch/parisc/include/uapi/asm/ioctls.h +++ b/arch/parisc/include/uapi/asm/ioctls.h | |||
@@ -55,6 +55,9 @@ | |||
55 | #define TIOCGDEV _IOR('T',0x32, int) /* Get primary device node of /dev/console */ | 55 | #define TIOCGDEV _IOR('T',0x32, int) /* Get primary device node of /dev/console */ |
56 | #define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */ | 56 | #define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */ |
57 | #define TIOCVHANGUP 0x5437 | 57 | #define TIOCVHANGUP 0x5437 |
58 | #define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */ | ||
59 | #define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */ | ||
60 | #define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */ | ||
58 | 61 | ||
59 | #define FIONCLEX 0x5450 /* these numbers need to be adjusted. */ | 62 | #define FIONCLEX 0x5450 /* these numbers need to be adjusted. */ |
60 | #define FIOCLEX 0x5451 | 63 | #define FIOCLEX 0x5451 |
diff --git a/arch/parisc/include/uapi/asm/mman.h b/arch/parisc/include/uapi/asm/mman.h index 12219ebce869..294d251ca7b2 100644 --- a/arch/parisc/include/uapi/asm/mman.h +++ b/arch/parisc/include/uapi/asm/mman.h | |||
@@ -70,4 +70,15 @@ | |||
70 | #define MAP_FILE 0 | 70 | #define MAP_FILE 0 |
71 | #define MAP_VARIABLE 0 | 71 | #define MAP_VARIABLE 0 |
72 | 72 | ||
73 | /* | ||
74 | * When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size. | ||
75 | * This gives us 6 bits, which is enough until someone invents 128 bit address | ||
76 | * spaces. | ||
77 | * | ||
78 | * Assume these are all power of twos. | ||
79 | * When 0 use the default page size. | ||
80 | */ | ||
81 | #define MAP_HUGE_SHIFT 26 | ||
82 | #define MAP_HUGE_MASK 0x3f | ||
83 | |||
73 | #endif /* __PARISC_MMAN_H__ */ | 84 | #endif /* __PARISC_MMAN_H__ */ |
diff --git a/arch/parisc/kernel/pdc_cons.c b/arch/parisc/kernel/pdc_cons.c index 88238638aee6..efc5e7d30530 100644 --- a/arch/parisc/kernel/pdc_cons.c +++ b/arch/parisc/kernel/pdc_cons.c | |||
@@ -186,13 +186,13 @@ static int __init pdc_console_tty_driver_init(void) | |||
186 | printk(KERN_INFO "The PDC console driver is still registered, removing CON_BOOT flag\n"); | 186 | printk(KERN_INFO "The PDC console driver is still registered, removing CON_BOOT flag\n"); |
187 | pdc_cons.flags &= ~CON_BOOT; | 187 | pdc_cons.flags &= ~CON_BOOT; |
188 | 188 | ||
189 | tty_port_init(&tty_port); | ||
190 | |||
191 | pdc_console_tty_driver = alloc_tty_driver(1); | 189 | pdc_console_tty_driver = alloc_tty_driver(1); |
192 | 190 | ||
193 | if (!pdc_console_tty_driver) | 191 | if (!pdc_console_tty_driver) |
194 | return -ENOMEM; | 192 | return -ENOMEM; |
195 | 193 | ||
194 | tty_port_init(&tty_port); | ||
195 | |||
196 | pdc_console_tty_driver->driver_name = "pdc_cons"; | 196 | pdc_console_tty_driver->driver_name = "pdc_cons"; |
197 | pdc_console_tty_driver->name = "ttyB"; | 197 | pdc_console_tty_driver->name = "ttyB"; |
198 | pdc_console_tty_driver->major = MUX_MAJOR; | 198 | pdc_console_tty_driver->major = MUX_MAJOR; |
@@ -207,6 +207,7 @@ static int __init pdc_console_tty_driver_init(void) | |||
207 | err = tty_register_driver(pdc_console_tty_driver); | 207 | err = tty_register_driver(pdc_console_tty_driver); |
208 | if (err) { | 208 | if (err) { |
209 | printk(KERN_ERR "Unable to register the PDC console TTY driver\n"); | 209 | printk(KERN_ERR "Unable to register the PDC console TTY driver\n"); |
210 | tty_port_destroy(&tty_port); | ||
210 | return err; | 211 | return err; |
211 | } | 212 | } |
212 | 213 | ||
diff --git a/arch/powerpc/include/uapi/asm/ioctls.h b/arch/powerpc/include/uapi/asm/ioctls.h index e9b78870aaab..49a25796a61a 100644 --- a/arch/powerpc/include/uapi/asm/ioctls.h +++ b/arch/powerpc/include/uapi/asm/ioctls.h | |||
@@ -97,6 +97,9 @@ | |||
97 | #define TIOCGDEV _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */ | 97 | #define TIOCGDEV _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */ |
98 | #define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */ | 98 | #define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */ |
99 | #define TIOCVHANGUP 0x5437 | 99 | #define TIOCVHANGUP 0x5437 |
100 | #define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */ | ||
101 | #define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */ | ||
102 | #define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */ | ||
100 | 103 | ||
101 | #define TIOCSERCONFIG 0x5453 | 104 | #define TIOCSERCONFIG 0x5453 |
102 | #define TIOCSERGWILD 0x5454 | 105 | #define TIOCSERGWILD 0x5454 |
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c index 7f94f760dd0c..abc0d0856994 100644 --- a/arch/powerpc/kernel/pci-common.c +++ b/arch/powerpc/kernel/pci-common.c | |||
@@ -1428,8 +1428,6 @@ void __init pcibios_resource_survey(void) | |||
1428 | ppc_md.pcibios_fixup(); | 1428 | ppc_md.pcibios_fixup(); |
1429 | } | 1429 | } |
1430 | 1430 | ||
1431 | #ifdef CONFIG_HOTPLUG | ||
1432 | |||
1433 | /* This is used by the PCI hotplug driver to allocate resource | 1431 | /* This is used by the PCI hotplug driver to allocate resource |
1434 | * of newly plugged busses. We can try to consolidate with the | 1432 | * of newly plugged busses. We can try to consolidate with the |
1435 | * rest of the code later, for now, keep it as-is as our main | 1433 | * rest of the code later, for now, keep it as-is as our main |
@@ -1488,8 +1486,6 @@ void pcibios_finish_adding_to_bus(struct pci_bus *bus) | |||
1488 | } | 1486 | } |
1489 | EXPORT_SYMBOL_GPL(pcibios_finish_adding_to_bus); | 1487 | EXPORT_SYMBOL_GPL(pcibios_finish_adding_to_bus); |
1490 | 1488 | ||
1491 | #endif /* CONFIG_HOTPLUG */ | ||
1492 | |||
1493 | int pcibios_enable_device(struct pci_dev *dev, int mask) | 1489 | int pcibios_enable_device(struct pci_dev *dev, int mask) |
1494 | { | 1490 | { |
1495 | if (ppc_md.pcibios_enable_device_hook) | 1491 | if (ppc_md.pcibios_enable_device_hook) |
diff --git a/arch/powerpc/kernel/pci_64.c b/arch/powerpc/kernel/pci_64.c index 4ff190ff24a0..2cbe6768fddd 100644 --- a/arch/powerpc/kernel/pci_64.c +++ b/arch/powerpc/kernel/pci_64.c | |||
@@ -74,8 +74,6 @@ static int __init pcibios_init(void) | |||
74 | 74 | ||
75 | subsys_initcall(pcibios_init); | 75 | subsys_initcall(pcibios_init); |
76 | 76 | ||
77 | #ifdef CONFIG_HOTPLUG | ||
78 | |||
79 | int pcibios_unmap_io_space(struct pci_bus *bus) | 77 | int pcibios_unmap_io_space(struct pci_bus *bus) |
80 | { | 78 | { |
81 | struct pci_controller *hose; | 79 | struct pci_controller *hose; |
@@ -124,8 +122,6 @@ int pcibios_unmap_io_space(struct pci_bus *bus) | |||
124 | } | 122 | } |
125 | EXPORT_SYMBOL_GPL(pcibios_unmap_io_space); | 123 | EXPORT_SYMBOL_GPL(pcibios_unmap_io_space); |
126 | 124 | ||
127 | #endif /* CONFIG_HOTPLUG */ | ||
128 | |||
129 | static int __devinit pcibios_map_phb_io_space(struct pci_controller *hose) | 125 | static int __devinit pcibios_map_phb_io_space(struct pci_controller *hose) |
130 | { | 126 | { |
131 | struct vm_struct *area; | 127 | struct vm_struct *area; |
diff --git a/arch/powerpc/kernel/sysfs.c b/arch/powerpc/kernel/sysfs.c index cf357a059ddb..3ce1f864c2d3 100644 --- a/arch/powerpc/kernel/sysfs.c +++ b/arch/powerpc/kernel/sysfs.c | |||
@@ -607,7 +607,7 @@ static void register_nodes(void) | |||
607 | 607 | ||
608 | int sysfs_add_device_to_node(struct device *dev, int nid) | 608 | int sysfs_add_device_to_node(struct device *dev, int nid) |
609 | { | 609 | { |
610 | struct node *node = &node_devices[nid]; | 610 | struct node *node = node_devices[nid]; |
611 | return sysfs_create_link(&node->dev.kobj, &dev->kobj, | 611 | return sysfs_create_link(&node->dev.kobj, &dev->kobj, |
612 | kobject_name(&dev->kobj)); | 612 | kobject_name(&dev->kobj)); |
613 | } | 613 | } |
@@ -615,7 +615,7 @@ EXPORT_SYMBOL_GPL(sysfs_add_device_to_node); | |||
615 | 615 | ||
616 | void sysfs_remove_device_from_node(struct device *dev, int nid) | 616 | void sysfs_remove_device_from_node(struct device *dev, int nid) |
617 | { | 617 | { |
618 | struct node *node = &node_devices[nid]; | 618 | struct node *node = node_devices[nid]; |
619 | sysfs_remove_link(&node->dev.kobj, kobject_name(&dev->kobj)); | 619 | sysfs_remove_link(&node->dev.kobj, kobject_name(&dev->kobj)); |
620 | } | 620 | } |
621 | EXPORT_SYMBOL_GPL(sysfs_remove_device_from_node); | 621 | EXPORT_SYMBOL_GPL(sysfs_remove_device_from_node); |
diff --git a/arch/powerpc/platforms/cell/celleb_pci.c b/arch/powerpc/platforms/cell/celleb_pci.c index abc8af43ea7c..173568140a32 100644 --- a/arch/powerpc/platforms/cell/celleb_pci.c +++ b/arch/powerpc/platforms/cell/celleb_pci.c | |||
@@ -401,11 +401,11 @@ error: | |||
401 | } else { | 401 | } else { |
402 | if (config && *config) { | 402 | if (config && *config) { |
403 | size = 256; | 403 | size = 256; |
404 | free_bootmem((unsigned long)(*config), size); | 404 | free_bootmem(__pa(*config), size); |
405 | } | 405 | } |
406 | if (res && *res) { | 406 | if (res && *res) { |
407 | size = sizeof(struct celleb_pci_resource); | 407 | size = sizeof(struct celleb_pci_resource); |
408 | free_bootmem((unsigned long)(*res), size); | 408 | free_bootmem(__pa(*res), size); |
409 | } | 409 | } |
410 | } | 410 | } |
411 | 411 | ||
diff --git a/arch/powerpc/platforms/powermac/pfunc_core.c b/arch/powerpc/platforms/powermac/pfunc_core.c index b0c3777528a1..d588e48dff74 100644 --- a/arch/powerpc/platforms/powermac/pfunc_core.c +++ b/arch/powerpc/platforms/powermac/pfunc_core.c | |||
@@ -686,7 +686,7 @@ static int pmf_add_functions(struct pmf_device *dev, void *driverdata) | |||
686 | int count = 0; | 686 | int count = 0; |
687 | 687 | ||
688 | for (pp = dev->node->properties; pp != 0; pp = pp->next) { | 688 | for (pp = dev->node->properties; pp != 0; pp = pp->next) { |
689 | char *name; | 689 | const char *name; |
690 | if (strncmp(pp->name, PP_PREFIX, plen) != 0) | 690 | if (strncmp(pp->name, PP_PREFIX, plen) != 0) |
691 | continue; | 691 | continue; |
692 | name = pp->name + plen; | 692 | name = pp->name + plen; |
diff --git a/arch/powerpc/platforms/pseries/processor_idle.c b/arch/powerpc/platforms/pseries/processor_idle.c index 45d00e5fe14d..4d806b419606 100644 --- a/arch/powerpc/platforms/pseries/processor_idle.c +++ b/arch/powerpc/platforms/pseries/processor_idle.c | |||
@@ -36,7 +36,7 @@ static struct cpuidle_state *cpuidle_state_table; | |||
36 | static inline void idle_loop_prolog(unsigned long *in_purr, ktime_t *kt_before) | 36 | static inline void idle_loop_prolog(unsigned long *in_purr, ktime_t *kt_before) |
37 | { | 37 | { |
38 | 38 | ||
39 | *kt_before = ktime_get_real(); | 39 | *kt_before = ktime_get(); |
40 | *in_purr = mfspr(SPRN_PURR); | 40 | *in_purr = mfspr(SPRN_PURR); |
41 | /* | 41 | /* |
42 | * Indicate to the HV that we are idle. Now would be | 42 | * Indicate to the HV that we are idle. Now would be |
@@ -50,7 +50,7 @@ static inline s64 idle_loop_epilog(unsigned long in_purr, ktime_t kt_before) | |||
50 | get_lppaca()->wait_state_cycles += mfspr(SPRN_PURR) - in_purr; | 50 | get_lppaca()->wait_state_cycles += mfspr(SPRN_PURR) - in_purr; |
51 | get_lppaca()->idle = 0; | 51 | get_lppaca()->idle = 0; |
52 | 52 | ||
53 | return ktime_to_us(ktime_sub(ktime_get_real(), kt_before)); | 53 | return ktime_to_us(ktime_sub(ktime_get(), kt_before)); |
54 | } | 54 | } |
55 | 55 | ||
56 | static int snooze_loop(struct cpuidle_device *dev, | 56 | static int snooze_loop(struct cpuidle_device *dev, |
diff --git a/arch/powerpc/platforms/pseries/reconfig.c b/arch/powerpc/platforms/pseries/reconfig.c index 39f71fba9b38..2f4668136b20 100644 --- a/arch/powerpc/platforms/pseries/reconfig.c +++ b/arch/powerpc/platforms/pseries/reconfig.c | |||
@@ -281,12 +281,11 @@ static struct property *new_property(const char *name, const int length, | |||
281 | if (!new) | 281 | if (!new) |
282 | return NULL; | 282 | return NULL; |
283 | 283 | ||
284 | if (!(new->name = kmalloc(strlen(name) + 1, GFP_KERNEL))) | 284 | if (!(new->name = kstrdup(name, GFP_KERNEL))) |
285 | goto cleanup; | 285 | goto cleanup; |
286 | if (!(new->value = kmalloc(length + 1, GFP_KERNEL))) | 286 | if (!(new->value = kmalloc(length + 1, GFP_KERNEL))) |
287 | goto cleanup; | 287 | goto cleanup; |
288 | 288 | ||
289 | strcpy(new->name, name); | ||
290 | memcpy(new->value, value, length); | 289 | memcpy(new->value, value, length); |
291 | *(((char *)new->value) + length) = 0; | 290 | *(((char *)new->value) + length) = 0; |
292 | new->length = length; | 291 | new->length = length; |
diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c index ffb93ae9379b..01b62a62c635 100644 --- a/arch/powerpc/sysdev/fsl_pci.c +++ b/arch/powerpc/sysdev/fsl_pci.c | |||
@@ -136,7 +136,7 @@ static void __init setup_pci_atmu(struct pci_controller *hose, | |||
136 | u32 pcicsrbar = 0, pcicsrbar_sz; | 136 | u32 pcicsrbar = 0, pcicsrbar_sz; |
137 | u32 piwar = PIWAR_EN | PIWAR_PF | PIWAR_TGI_LOCAL | | 137 | u32 piwar = PIWAR_EN | PIWAR_PF | PIWAR_TGI_LOCAL | |
138 | PIWAR_READ_SNOOP | PIWAR_WRITE_SNOOP; | 138 | PIWAR_READ_SNOOP | PIWAR_WRITE_SNOOP; |
139 | char *name = hose->dn->full_name; | 139 | const char *name = hose->dn->full_name; |
140 | const u64 *reg; | 140 | const u64 *reg; |
141 | int len; | 141 | int len; |
142 | 142 | ||
diff --git a/arch/powerpc/sysdev/scom.c b/arch/powerpc/sysdev/scom.c index 702256a1ca11..9193e12df695 100644 --- a/arch/powerpc/sysdev/scom.c +++ b/arch/powerpc/sysdev/scom.c | |||
@@ -157,7 +157,7 @@ static int scom_debug_init_one(struct dentry *root, struct device_node *dn, | |||
157 | ent->map = SCOM_MAP_INVALID; | 157 | ent->map = SCOM_MAP_INVALID; |
158 | spin_lock_init(&ent->lock); | 158 | spin_lock_init(&ent->lock); |
159 | snprintf(ent->name, 8, "scom%d", i); | 159 | snprintf(ent->name, 8, "scom%d", i); |
160 | ent->blob.data = dn->full_name; | 160 | ent->blob.data = (void*) dn->full_name; |
161 | ent->blob.size = strlen(dn->full_name); | 161 | ent->blob.size = strlen(dn->full_name); |
162 | 162 | ||
163 | dir = debugfs_create_dir(ent->name, root); | 163 | dir = debugfs_create_dir(ent->name, root); |
diff --git a/arch/s390/include/asm/page.h b/arch/s390/include/asm/page.h index 6d5367060a56..39faa4ac9660 100644 --- a/arch/s390/include/asm/page.h +++ b/arch/s390/include/asm/page.h | |||
@@ -158,6 +158,9 @@ static inline int page_reset_referenced(unsigned long addr) | |||
158 | * race against modification of the referenced bit. This function | 158 | * race against modification of the referenced bit. This function |
159 | * should therefore only be called if it is not mapped in any | 159 | * should therefore only be called if it is not mapped in any |
160 | * address space. | 160 | * address space. |
161 | * | ||
162 | * Note that the bit gets set whenever page content is changed. That means | ||
163 | * also when the page is modified by DMA or from inside the kernel. | ||
161 | */ | 164 | */ |
162 | #define __HAVE_ARCH_PAGE_TEST_AND_CLEAR_DIRTY | 165 | #define __HAVE_ARCH_PAGE_TEST_AND_CLEAR_DIRTY |
163 | static inline int page_test_and_clear_dirty(unsigned long pfn, int mapped) | 166 | static inline int page_test_and_clear_dirty(unsigned long pfn, int mapped) |
diff --git a/arch/sh/configs/ecovec24_defconfig b/arch/sh/configs/ecovec24_defconfig index 911e30c9abfd..c6c2becdc8ab 100644 --- a/arch/sh/configs/ecovec24_defconfig +++ b/arch/sh/configs/ecovec24_defconfig | |||
@@ -112,7 +112,7 @@ CONFIG_USB_MON=y | |||
112 | CONFIG_USB_R8A66597_HCD=y | 112 | CONFIG_USB_R8A66597_HCD=y |
113 | CONFIG_USB_STORAGE=y | 113 | CONFIG_USB_STORAGE=y |
114 | CONFIG_USB_GADGET=y | 114 | CONFIG_USB_GADGET=y |
115 | CONFIG_USB_FILE_STORAGE=m | 115 | CONFIG_USB_MASS_STORAGE=m |
116 | CONFIG_MMC=y | 116 | CONFIG_MMC=y |
117 | CONFIG_MMC_SPI=y | 117 | CONFIG_MMC_SPI=y |
118 | CONFIG_MMC_SDHI=y | 118 | CONFIG_MMC_SDHI=y |
diff --git a/arch/sh/configs/se7724_defconfig b/arch/sh/configs/se7724_defconfig index ed35093e3758..1faa788aecae 100644 --- a/arch/sh/configs/se7724_defconfig +++ b/arch/sh/configs/se7724_defconfig | |||
@@ -109,7 +109,7 @@ CONFIG_USB_STORAGE=y | |||
109 | CONFIG_USB_GADGET=y | 109 | CONFIG_USB_GADGET=y |
110 | CONFIG_USB_ETH=m | 110 | CONFIG_USB_ETH=m |
111 | CONFIG_USB_GADGETFS=m | 111 | CONFIG_USB_GADGETFS=m |
112 | CONFIG_USB_FILE_STORAGE=m | 112 | CONFIG_USB_MASS_STORAGE=m |
113 | CONFIG_USB_G_SERIAL=m | 113 | CONFIG_USB_G_SERIAL=m |
114 | CONFIG_MMC=y | 114 | CONFIG_MMC=y |
115 | CONFIG_MMC_SPI=y | 115 | CONFIG_MMC_SPI=y |
diff --git a/arch/sh/drivers/pci/pci.c b/arch/sh/drivers/pci/pci.c index a7e078f2e2e4..81e5dafed3e4 100644 --- a/arch/sh/drivers/pci/pci.c +++ b/arch/sh/drivers/pci/pci.c | |||
@@ -319,7 +319,5 @@ EXPORT_SYMBOL(pci_iounmap); | |||
319 | 319 | ||
320 | #endif /* CONFIG_GENERIC_IOMAP */ | 320 | #endif /* CONFIG_GENERIC_IOMAP */ |
321 | 321 | ||
322 | #ifdef CONFIG_HOTPLUG | ||
323 | EXPORT_SYMBOL(PCIBIOS_MIN_IO); | 322 | EXPORT_SYMBOL(PCIBIOS_MIN_IO); |
324 | EXPORT_SYMBOL(PCIBIOS_MIN_MEM); | 323 | EXPORT_SYMBOL(PCIBIOS_MIN_MEM); |
325 | #endif | ||
diff --git a/arch/sh/include/asm/io.h b/arch/sh/include/asm/io.h index 73a23f4617a3..629db2ad7916 100644 --- a/arch/sh/include/asm/io.h +++ b/arch/sh/include/asm/io.h | |||
@@ -382,7 +382,7 @@ static inline int iounmap_fixed(void __iomem *addr) { return -EINVAL; } | |||
382 | #define xlate_dev_kmem_ptr(p) p | 382 | #define xlate_dev_kmem_ptr(p) p |
383 | 383 | ||
384 | #define ARCH_HAS_VALID_PHYS_ADDR_RANGE | 384 | #define ARCH_HAS_VALID_PHYS_ADDR_RANGE |
385 | int valid_phys_addr_range(unsigned long addr, size_t size); | 385 | int valid_phys_addr_range(phys_addr_t addr, size_t size); |
386 | int valid_mmap_phys_addr_range(unsigned long pfn, size_t size); | 386 | int valid_mmap_phys_addr_range(unsigned long pfn, size_t size); |
387 | 387 | ||
388 | #endif /* __KERNEL__ */ | 388 | #endif /* __KERNEL__ */ |
diff --git a/arch/sh/include/uapi/asm/ioctls.h b/arch/sh/include/uapi/asm/ioctls.h index a6769f352bf6..342241079760 100644 --- a/arch/sh/include/uapi/asm/ioctls.h +++ b/arch/sh/include/uapi/asm/ioctls.h | |||
@@ -88,6 +88,9 @@ | |||
88 | #define TIOCGDEV _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */ | 88 | #define TIOCGDEV _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */ |
89 | #define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */ | 89 | #define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */ |
90 | #define TIOCVHANGUP _IO('T', 0x37) | 90 | #define TIOCVHANGUP _IO('T', 0x37) |
91 | #define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */ | ||
92 | #define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */ | ||
93 | #define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */ | ||
91 | 94 | ||
92 | #define TIOCSERCONFIG _IO('T', 83) /* 0x5453 */ | 95 | #define TIOCSERCONFIG _IO('T', 83) /* 0x5453 */ |
93 | #define TIOCSERGWILD _IOR('T', 84, int) /* 0x5454 */ | 96 | #define TIOCSERGWILD _IOR('T', 84, int) /* 0x5454 */ |
diff --git a/arch/sh/kernel/cpu/sh3/setup-sh7720.c b/arch/sh/kernel/cpu/sh3/setup-sh7720.c index 0c2f1b2c2e19..42d991f632b1 100644 --- a/arch/sh/kernel/cpu/sh3/setup-sh7720.c +++ b/arch/sh/kernel/cpu/sh3/setup-sh7720.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/serial_sci.h> | 20 | #include <linux/serial_sci.h> |
21 | #include <linux/sh_timer.h> | 21 | #include <linux/sh_timer.h> |
22 | #include <linux/sh_intc.h> | 22 | #include <linux/sh_intc.h> |
23 | #include <linux/usb/ohci_pdriver.h> | ||
23 | #include <asm/rtc.h> | 24 | #include <asm/rtc.h> |
24 | #include <cpu/serial.h> | 25 | #include <cpu/serial.h> |
25 | 26 | ||
@@ -103,12 +104,15 @@ static struct resource usb_ohci_resources[] = { | |||
103 | 104 | ||
104 | static u64 usb_ohci_dma_mask = 0xffffffffUL; | 105 | static u64 usb_ohci_dma_mask = 0xffffffffUL; |
105 | 106 | ||
107 | static struct usb_ohci_pdata usb_ohci_pdata; | ||
108 | |||
106 | static struct platform_device usb_ohci_device = { | 109 | static struct platform_device usb_ohci_device = { |
107 | .name = "sh_ohci", | 110 | .name = "ohci-platform", |
108 | .id = -1, | 111 | .id = -1, |
109 | .dev = { | 112 | .dev = { |
110 | .dma_mask = &usb_ohci_dma_mask, | 113 | .dma_mask = &usb_ohci_dma_mask, |
111 | .coherent_dma_mask = 0xffffffff, | 114 | .coherent_dma_mask = 0xffffffff, |
115 | .platform_data = &usb_ohci_pdata, | ||
112 | }, | 116 | }, |
113 | .num_resources = ARRAY_SIZE(usb_ohci_resources), | 117 | .num_resources = ARRAY_SIZE(usb_ohci_resources), |
114 | .resource = usb_ohci_resources, | 118 | .resource = usb_ohci_resources, |
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7757.c b/arch/sh/kernel/cpu/sh4a/setup-sh7757.c index 4a2f357f4df8..9079a0f9ea9b 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7757.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7757.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/sh_timer.h> | 19 | #include <linux/sh_timer.h> |
20 | #include <linux/sh_dma.h> | 20 | #include <linux/sh_dma.h> |
21 | #include <linux/sh_intc.h> | 21 | #include <linux/sh_intc.h> |
22 | #include <linux/usb/ohci_pdriver.h> | ||
22 | #include <cpu/dma-register.h> | 23 | #include <cpu/dma-register.h> |
23 | #include <cpu/sh7757.h> | 24 | #include <cpu/sh7757.h> |
24 | 25 | ||
@@ -750,12 +751,15 @@ static struct resource usb_ohci_resources[] = { | |||
750 | }, | 751 | }, |
751 | }; | 752 | }; |
752 | 753 | ||
754 | static struct usb_ohci_pdata usb_ohci_pdata; | ||
755 | |||
753 | static struct platform_device usb_ohci_device = { | 756 | static struct platform_device usb_ohci_device = { |
754 | .name = "sh_ohci", | 757 | .name = "ohci-platform", |
755 | .id = -1, | 758 | .id = -1, |
756 | .dev = { | 759 | .dev = { |
757 | .dma_mask = &usb_ohci_device.dev.coherent_dma_mask, | 760 | .dma_mask = &usb_ohci_device.dev.coherent_dma_mask, |
758 | .coherent_dma_mask = DMA_BIT_MASK(32), | 761 | .coherent_dma_mask = DMA_BIT_MASK(32), |
762 | .platform_data = &usb_ohci_pdata, | ||
759 | }, | 763 | }, |
760 | .num_resources = ARRAY_SIZE(usb_ohci_resources), | 764 | .num_resources = ARRAY_SIZE(usb_ohci_resources), |
761 | .resource = usb_ohci_resources, | 765 | .resource = usb_ohci_resources, |
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7763.c b/arch/sh/kernel/cpu/sh4a/setup-sh7763.c index bd0a8fbe610f..1686acaaf45a 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7763.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7763.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/sh_intc.h> | 16 | #include <linux/sh_intc.h> |
17 | #include <linux/io.h> | 17 | #include <linux/io.h> |
18 | #include <linux/serial_sci.h> | 18 | #include <linux/serial_sci.h> |
19 | #include <linux/usb/ohci_pdriver.h> | ||
19 | 20 | ||
20 | static struct plat_sci_port scif0_platform_data = { | 21 | static struct plat_sci_port scif0_platform_data = { |
21 | .mapbase = 0xffe00000, | 22 | .mapbase = 0xffe00000, |
@@ -106,12 +107,15 @@ static struct resource usb_ohci_resources[] = { | |||
106 | 107 | ||
107 | static u64 usb_ohci_dma_mask = 0xffffffffUL; | 108 | static u64 usb_ohci_dma_mask = 0xffffffffUL; |
108 | 109 | ||
110 | static struct usb_ohci_pdata usb_ohci_pdata; | ||
111 | |||
109 | static struct platform_device usb_ohci_device = { | 112 | static struct platform_device usb_ohci_device = { |
110 | .name = "sh_ohci", | 113 | .name = "ohci-platform", |
111 | .id = -1, | 114 | .id = -1, |
112 | .dev = { | 115 | .dev = { |
113 | .dma_mask = &usb_ohci_dma_mask, | 116 | .dma_mask = &usb_ohci_dma_mask, |
114 | .coherent_dma_mask = 0xffffffff, | 117 | .coherent_dma_mask = 0xffffffff, |
118 | .platform_data = &usb_ohci_pdata, | ||
115 | }, | 119 | }, |
116 | .num_resources = ARRAY_SIZE(usb_ohci_resources), | 120 | .num_resources = ARRAY_SIZE(usb_ohci_resources), |
117 | .resource = usb_ohci_resources, | 121 | .resource = usb_ohci_resources, |
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7786.c b/arch/sh/kernel/cpu/sh4a/setup-sh7786.c index 2e6952f87848..ab52d4d4484d 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7786.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7786.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/sh_timer.h> | 23 | #include <linux/sh_timer.h> |
24 | #include <linux/sh_dma.h> | 24 | #include <linux/sh_dma.h> |
25 | #include <linux/sh_intc.h> | 25 | #include <linux/sh_intc.h> |
26 | #include <linux/usb/ohci_pdriver.h> | ||
26 | #include <cpu/dma-register.h> | 27 | #include <cpu/dma-register.h> |
27 | #include <asm/mmzone.h> | 28 | #include <asm/mmzone.h> |
28 | 29 | ||
@@ -583,12 +584,15 @@ static struct resource usb_ohci_resources[] = { | |||
583 | }, | 584 | }, |
584 | }; | 585 | }; |
585 | 586 | ||
587 | static struct usb_ohci_pdata usb_ohci_pdata; | ||
588 | |||
586 | static struct platform_device usb_ohci_device = { | 589 | static struct platform_device usb_ohci_device = { |
587 | .name = "sh_ohci", | 590 | .name = "ohci-platform", |
588 | .id = -1, | 591 | .id = -1, |
589 | .dev = { | 592 | .dev = { |
590 | .dma_mask = &usb_ohci_device.dev.coherent_dma_mask, | 593 | .dma_mask = &usb_ohci_device.dev.coherent_dma_mask, |
591 | .coherent_dma_mask = DMA_BIT_MASK(32), | 594 | .coherent_dma_mask = DMA_BIT_MASK(32), |
595 | .platform_data = &usb_ohci_pdata, | ||
592 | }, | 596 | }, |
593 | .num_resources = ARRAY_SIZE(usb_ohci_resources), | 597 | .num_resources = ARRAY_SIZE(usb_ohci_resources), |
594 | .resource = usb_ohci_resources, | 598 | .resource = usb_ohci_resources, |
diff --git a/arch/sh/mm/mmap.c b/arch/sh/mm/mmap.c index afeb710ec5c3..6777177807c2 100644 --- a/arch/sh/mm/mmap.c +++ b/arch/sh/mm/mmap.c | |||
@@ -30,25 +30,13 @@ static inline unsigned long COLOUR_ALIGN(unsigned long addr, | |||
30 | return base + off; | 30 | return base + off; |
31 | } | 31 | } |
32 | 32 | ||
33 | static inline unsigned long COLOUR_ALIGN_DOWN(unsigned long addr, | ||
34 | unsigned long pgoff) | ||
35 | { | ||
36 | unsigned long base = addr & ~shm_align_mask; | ||
37 | unsigned long off = (pgoff << PAGE_SHIFT) & shm_align_mask; | ||
38 | |||
39 | if (base + off <= addr) | ||
40 | return base + off; | ||
41 | |||
42 | return base - off; | ||
43 | } | ||
44 | |||
45 | unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, | 33 | unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, |
46 | unsigned long len, unsigned long pgoff, unsigned long flags) | 34 | unsigned long len, unsigned long pgoff, unsigned long flags) |
47 | { | 35 | { |
48 | struct mm_struct *mm = current->mm; | 36 | struct mm_struct *mm = current->mm; |
49 | struct vm_area_struct *vma; | 37 | struct vm_area_struct *vma; |
50 | unsigned long start_addr; | ||
51 | int do_colour_align; | 38 | int do_colour_align; |
39 | struct vm_unmapped_area_info info; | ||
52 | 40 | ||
53 | if (flags & MAP_FIXED) { | 41 | if (flags & MAP_FIXED) { |
54 | /* We do not accept a shared mapping if it would violate | 42 | /* We do not accept a shared mapping if it would violate |
@@ -79,47 +67,13 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, | |||
79 | return addr; | 67 | return addr; |
80 | } | 68 | } |
81 | 69 | ||
82 | if (len > mm->cached_hole_size) { | 70 | info.flags = 0; |
83 | start_addr = addr = mm->free_area_cache; | 71 | info.length = len; |
84 | } else { | 72 | info.low_limit = TASK_UNMAPPED_BASE; |
85 | mm->cached_hole_size = 0; | 73 | info.high_limit = TASK_SIZE; |
86 | start_addr = addr = TASK_UNMAPPED_BASE; | 74 | info.align_mask = do_colour_align ? (PAGE_MASK & shm_align_mask) : 0; |
87 | } | 75 | info.align_offset = pgoff << PAGE_SHIFT; |
88 | 76 | return vm_unmapped_area(&info); | |
89 | full_search: | ||
90 | if (do_colour_align) | ||
91 | addr = COLOUR_ALIGN(addr, pgoff); | ||
92 | else | ||
93 | addr = PAGE_ALIGN(mm->free_area_cache); | ||
94 | |||
95 | for (vma = find_vma(mm, addr); ; vma = vma->vm_next) { | ||
96 | /* At this point: (!vma || addr < vma->vm_end). */ | ||
97 | if (unlikely(TASK_SIZE - len < addr)) { | ||
98 | /* | ||
99 | * Start a new search - just in case we missed | ||
100 | * some holes. | ||
101 | */ | ||
102 | if (start_addr != TASK_UNMAPPED_BASE) { | ||
103 | start_addr = addr = TASK_UNMAPPED_BASE; | ||
104 | mm->cached_hole_size = 0; | ||
105 | goto full_search; | ||
106 | } | ||
107 | return -ENOMEM; | ||
108 | } | ||
109 | if (likely(!vma || addr + len <= vma->vm_start)) { | ||
110 | /* | ||
111 | * Remember the place where we stopped the search: | ||
112 | */ | ||
113 | mm->free_area_cache = addr + len; | ||
114 | return addr; | ||
115 | } | ||
116 | if (addr + mm->cached_hole_size < vma->vm_start) | ||
117 | mm->cached_hole_size = vma->vm_start - addr; | ||
118 | |||
119 | addr = vma->vm_end; | ||
120 | if (do_colour_align) | ||
121 | addr = COLOUR_ALIGN(addr, pgoff); | ||
122 | } | ||
123 | } | 77 | } |
124 | 78 | ||
125 | unsigned long | 79 | unsigned long |
@@ -131,6 +85,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, | |||
131 | struct mm_struct *mm = current->mm; | 85 | struct mm_struct *mm = current->mm; |
132 | unsigned long addr = addr0; | 86 | unsigned long addr = addr0; |
133 | int do_colour_align; | 87 | int do_colour_align; |
88 | struct vm_unmapped_area_info info; | ||
134 | 89 | ||
135 | if (flags & MAP_FIXED) { | 90 | if (flags & MAP_FIXED) { |
136 | /* We do not accept a shared mapping if it would violate | 91 | /* We do not accept a shared mapping if it would violate |
@@ -162,73 +117,27 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, | |||
162 | return addr; | 117 | return addr; |
163 | } | 118 | } |
164 | 119 | ||
165 | /* check if free_area_cache is useful for us */ | 120 | info.flags = VM_UNMAPPED_AREA_TOPDOWN; |
166 | if (len <= mm->cached_hole_size) { | 121 | info.length = len; |
167 | mm->cached_hole_size = 0; | 122 | info.low_limit = PAGE_SIZE; |
168 | mm->free_area_cache = mm->mmap_base; | 123 | info.high_limit = mm->mmap_base; |
169 | } | 124 | info.align_mask = do_colour_align ? (PAGE_MASK & shm_align_mask) : 0; |
170 | 125 | info.align_offset = pgoff << PAGE_SHIFT; | |
171 | /* either no address requested or can't fit in requested address hole */ | 126 | addr = vm_unmapped_area(&info); |
172 | addr = mm->free_area_cache; | ||
173 | if (do_colour_align) { | ||
174 | unsigned long base = COLOUR_ALIGN_DOWN(addr-len, pgoff); | ||
175 | 127 | ||
176 | addr = base + len; | ||
177 | } | ||
178 | |||
179 | /* make sure it can fit in the remaining address space */ | ||
180 | if (likely(addr > len)) { | ||
181 | vma = find_vma(mm, addr-len); | ||
182 | if (!vma || addr <= vma->vm_start) { | ||
183 | /* remember the address as a hint for next time */ | ||
184 | return (mm->free_area_cache = addr-len); | ||
185 | } | ||
186 | } | ||
187 | |||
188 | if (unlikely(mm->mmap_base < len)) | ||
189 | goto bottomup; | ||
190 | |||
191 | addr = mm->mmap_base-len; | ||
192 | if (do_colour_align) | ||
193 | addr = COLOUR_ALIGN_DOWN(addr, pgoff); | ||
194 | |||
195 | do { | ||
196 | /* | ||
197 | * Lookup failure means no vma is above this address, | ||
198 | * else if new region fits below vma->vm_start, | ||
199 | * return with success: | ||
200 | */ | ||
201 | vma = find_vma(mm, addr); | ||
202 | if (likely(!vma || addr+len <= vma->vm_start)) { | ||
203 | /* remember the address as a hint for next time */ | ||
204 | return (mm->free_area_cache = addr); | ||
205 | } | ||
206 | |||
207 | /* remember the largest hole we saw so far */ | ||
208 | if (addr + mm->cached_hole_size < vma->vm_start) | ||
209 | mm->cached_hole_size = vma->vm_start - addr; | ||
210 | |||
211 | /* try just below the current vma->vm_start */ | ||
212 | addr = vma->vm_start-len; | ||
213 | if (do_colour_align) | ||
214 | addr = COLOUR_ALIGN_DOWN(addr, pgoff); | ||
215 | } while (likely(len < vma->vm_start)); | ||
216 | |||
217 | bottomup: | ||
218 | /* | 128 | /* |
219 | * A failed mmap() very likely causes application failure, | 129 | * A failed mmap() very likely causes application failure, |
220 | * so fall back to the bottom-up function here. This scenario | 130 | * so fall back to the bottom-up function here. This scenario |
221 | * can happen with large stack limits and large mmap() | 131 | * can happen with large stack limits and large mmap() |
222 | * allocations. | 132 | * allocations. |
223 | */ | 133 | */ |
224 | mm->cached_hole_size = ~0UL; | 134 | if (addr & ~PAGE_MASK) { |
225 | mm->free_area_cache = TASK_UNMAPPED_BASE; | 135 | VM_BUG_ON(addr != -ENOMEM); |
226 | addr = arch_get_unmapped_area(filp, addr0, len, pgoff, flags); | 136 | info.flags = 0; |
227 | /* | 137 | info.low_limit = TASK_UNMAPPED_BASE; |
228 | * Restore the topdown base: | 138 | info.high_limit = TASK_SIZE; |
229 | */ | 139 | addr = vm_unmapped_area(&info); |
230 | mm->free_area_cache = mm->mmap_base; | 140 | } |
231 | mm->cached_hole_size = ~0UL; | ||
232 | 141 | ||
233 | return addr; | 142 | return addr; |
234 | } | 143 | } |
@@ -238,7 +147,7 @@ bottomup: | |||
238 | * You really shouldn't be using read() or write() on /dev/mem. This | 147 | * You really shouldn't be using read() or write() on /dev/mem. This |
239 | * might go away in the future. | 148 | * might go away in the future. |
240 | */ | 149 | */ |
241 | int valid_phys_addr_range(unsigned long addr, size_t count) | 150 | int valid_phys_addr_range(phys_addr_t addr, size_t count) |
242 | { | 151 | { |
243 | if (addr < __MEMORY_START) | 152 | if (addr < __MEMORY_START) |
244 | return 0; | 153 | return 0; |
diff --git a/arch/sparc/include/uapi/asm/ioctls.h b/arch/sparc/include/uapi/asm/ioctls.h index 9155f7041d44..897d1723fa14 100644 --- a/arch/sparc/include/uapi/asm/ioctls.h +++ b/arch/sparc/include/uapi/asm/ioctls.h | |||
@@ -21,6 +21,9 @@ | |||
21 | #define TCSETSF2 _IOW('T', 15, struct termios2) | 21 | #define TCSETSF2 _IOW('T', 15, struct termios2) |
22 | #define TIOCGDEV _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */ | 22 | #define TIOCGDEV _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */ |
23 | #define TIOCVHANGUP _IO('T', 0x37) | 23 | #define TIOCVHANGUP _IO('T', 0x37) |
24 | #define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */ | ||
25 | #define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */ | ||
26 | #define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */ | ||
24 | 27 | ||
25 | /* Note that all the ioctls that are not available in Linux have a | 28 | /* Note that all the ioctls that are not available in Linux have a |
26 | * double underscore on the front to: a) avoid some programs to | 29 | * double underscore on the front to: a) avoid some programs to |
diff --git a/arch/sparc/kernel/pci_impl.h b/arch/sparc/kernel/pci_impl.h index 918a2031c8bb..5f688531f48c 100644 --- a/arch/sparc/kernel/pci_impl.h +++ b/arch/sparc/kernel/pci_impl.h | |||
@@ -88,7 +88,7 @@ struct pci_pbm_info { | |||
88 | int chip_revision; | 88 | int chip_revision; |
89 | 89 | ||
90 | /* Name used for top-level resources. */ | 90 | /* Name used for top-level resources. */ |
91 | char *name; | 91 | const char *name; |
92 | 92 | ||
93 | /* OBP specific information. */ | 93 | /* OBP specific information. */ |
94 | struct platform_device *op; | 94 | struct platform_device *op; |
diff --git a/arch/sparc/kernel/sys_sparc_32.c b/arch/sparc/kernel/sys_sparc_32.c index 0c9b31b22e07..57277c830151 100644 --- a/arch/sparc/kernel/sys_sparc_32.c +++ b/arch/sparc/kernel/sys_sparc_32.c | |||
@@ -34,11 +34,9 @@ asmlinkage unsigned long sys_getpagesize(void) | |||
34 | return PAGE_SIZE; /* Possibly older binaries want 8192 on sun4's? */ | 34 | return PAGE_SIZE; /* Possibly older binaries want 8192 on sun4's? */ |
35 | } | 35 | } |
36 | 36 | ||
37 | #define COLOUR_ALIGN(addr) (((addr)+SHMLBA-1)&~(SHMLBA-1)) | ||
38 | |||
39 | unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags) | 37 | unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags) |
40 | { | 38 | { |
41 | struct vm_area_struct * vmm; | 39 | struct vm_unmapped_area_info info; |
42 | 40 | ||
43 | if (flags & MAP_FIXED) { | 41 | if (flags & MAP_FIXED) { |
44 | /* We do not accept a shared mapping if it would violate | 42 | /* We do not accept a shared mapping if it would violate |
@@ -56,21 +54,14 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi | |||
56 | if (!addr) | 54 | if (!addr) |
57 | addr = TASK_UNMAPPED_BASE; | 55 | addr = TASK_UNMAPPED_BASE; |
58 | 56 | ||
59 | if (flags & MAP_SHARED) | 57 | info.flags = 0; |
60 | addr = COLOUR_ALIGN(addr); | 58 | info.length = len; |
61 | else | 59 | info.low_limit = addr; |
62 | addr = PAGE_ALIGN(addr); | 60 | info.high_limit = TASK_SIZE; |
63 | 61 | info.align_mask = (flags & MAP_SHARED) ? | |
64 | for (vmm = find_vma(current->mm, addr); ; vmm = vmm->vm_next) { | 62 | (PAGE_MASK & (SHMLBA - 1)) : 0; |
65 | /* At this point: (!vmm || addr < vmm->vm_end). */ | 63 | info.align_offset = pgoff << PAGE_SHIFT; |
66 | if (TASK_SIZE - PAGE_SIZE - len < addr) | 64 | return vm_unmapped_area(&info); |
67 | return -ENOMEM; | ||
68 | if (!vmm || addr + len <= vmm->vm_start) | ||
69 | return addr; | ||
70 | addr = vmm->vm_end; | ||
71 | if (flags & MAP_SHARED) | ||
72 | addr = COLOUR_ALIGN(addr); | ||
73 | } | ||
74 | } | 65 | } |
75 | 66 | ||
76 | /* | 67 | /* |
diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c index 878ef3d5fec5..97309c0ec533 100644 --- a/arch/sparc/kernel/sys_sparc_64.c +++ b/arch/sparc/kernel/sys_sparc_64.c | |||
@@ -75,7 +75,7 @@ static inline int invalid_64bit_range(unsigned long addr, unsigned long len) | |||
75 | * the spitfire/niagara VA-hole. | 75 | * the spitfire/niagara VA-hole. |
76 | */ | 76 | */ |
77 | 77 | ||
78 | static inline unsigned long COLOUR_ALIGN(unsigned long addr, | 78 | static inline unsigned long COLOR_ALIGN(unsigned long addr, |
79 | unsigned long pgoff) | 79 | unsigned long pgoff) |
80 | { | 80 | { |
81 | unsigned long base = (addr+SHMLBA-1)&~(SHMLBA-1); | 81 | unsigned long base = (addr+SHMLBA-1)&~(SHMLBA-1); |
@@ -84,24 +84,13 @@ static inline unsigned long COLOUR_ALIGN(unsigned long addr, | |||
84 | return base + off; | 84 | return base + off; |
85 | } | 85 | } |
86 | 86 | ||
87 | static inline unsigned long COLOUR_ALIGN_DOWN(unsigned long addr, | ||
88 | unsigned long pgoff) | ||
89 | { | ||
90 | unsigned long base = addr & ~(SHMLBA-1); | ||
91 | unsigned long off = (pgoff<<PAGE_SHIFT) & (SHMLBA-1); | ||
92 | |||
93 | if (base + off <= addr) | ||
94 | return base + off; | ||
95 | return base - off; | ||
96 | } | ||
97 | |||
98 | unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags) | 87 | unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsigned long len, unsigned long pgoff, unsigned long flags) |
99 | { | 88 | { |
100 | struct mm_struct *mm = current->mm; | 89 | struct mm_struct *mm = current->mm; |
101 | struct vm_area_struct * vma; | 90 | struct vm_area_struct * vma; |
102 | unsigned long task_size = TASK_SIZE; | 91 | unsigned long task_size = TASK_SIZE; |
103 | unsigned long start_addr; | ||
104 | int do_color_align; | 92 | int do_color_align; |
93 | struct vm_unmapped_area_info info; | ||
105 | 94 | ||
106 | if (flags & MAP_FIXED) { | 95 | if (flags & MAP_FIXED) { |
107 | /* We do not accept a shared mapping if it would violate | 96 | /* We do not accept a shared mapping if it would violate |
@@ -124,7 +113,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi | |||
124 | 113 | ||
125 | if (addr) { | 114 | if (addr) { |
126 | if (do_color_align) | 115 | if (do_color_align) |
127 | addr = COLOUR_ALIGN(addr, pgoff); | 116 | addr = COLOR_ALIGN(addr, pgoff); |
128 | else | 117 | else |
129 | addr = PAGE_ALIGN(addr); | 118 | addr = PAGE_ALIGN(addr); |
130 | 119 | ||
@@ -134,50 +123,22 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr, unsi | |||
134 | return addr; | 123 | return addr; |
135 | } | 124 | } |
136 | 125 | ||
137 | if (len > mm->cached_hole_size) { | 126 | info.flags = 0; |
138 | start_addr = addr = mm->free_area_cache; | 127 | info.length = len; |
139 | } else { | 128 | info.low_limit = TASK_UNMAPPED_BASE; |
140 | start_addr = addr = TASK_UNMAPPED_BASE; | 129 | info.high_limit = min(task_size, VA_EXCLUDE_START); |
141 | mm->cached_hole_size = 0; | 130 | info.align_mask = do_color_align ? (PAGE_MASK & (SHMLBA - 1)) : 0; |
131 | info.align_offset = pgoff << PAGE_SHIFT; | ||
132 | addr = vm_unmapped_area(&info); | ||
133 | |||
134 | if ((addr & ~PAGE_MASK) && task_size > VA_EXCLUDE_END) { | ||
135 | VM_BUG_ON(addr != -ENOMEM); | ||
136 | info.low_limit = VA_EXCLUDE_END; | ||
137 | info.high_limit = task_size; | ||
138 | addr = vm_unmapped_area(&info); | ||
142 | } | 139 | } |
143 | 140 | ||
144 | task_size -= len; | 141 | return addr; |
145 | |||
146 | full_search: | ||
147 | if (do_color_align) | ||
148 | addr = COLOUR_ALIGN(addr, pgoff); | ||
149 | else | ||
150 | addr = PAGE_ALIGN(addr); | ||
151 | |||
152 | for (vma = find_vma(mm, addr); ; vma = vma->vm_next) { | ||
153 | /* At this point: (!vma || addr < vma->vm_end). */ | ||
154 | if (addr < VA_EXCLUDE_START && | ||
155 | (addr + len) >= VA_EXCLUDE_START) { | ||
156 | addr = VA_EXCLUDE_END; | ||
157 | vma = find_vma(mm, VA_EXCLUDE_END); | ||
158 | } | ||
159 | if (unlikely(task_size < addr)) { | ||
160 | if (start_addr != TASK_UNMAPPED_BASE) { | ||
161 | start_addr = addr = TASK_UNMAPPED_BASE; | ||
162 | mm->cached_hole_size = 0; | ||
163 | goto full_search; | ||
164 | } | ||
165 | return -ENOMEM; | ||
166 | } | ||
167 | if (likely(!vma || addr + len <= vma->vm_start)) { | ||
168 | /* | ||
169 | * Remember the place where we stopped the search: | ||
170 | */ | ||
171 | mm->free_area_cache = addr + len; | ||
172 | return addr; | ||
173 | } | ||
174 | if (addr + mm->cached_hole_size < vma->vm_start) | ||
175 | mm->cached_hole_size = vma->vm_start - addr; | ||
176 | |||
177 | addr = vma->vm_end; | ||
178 | if (do_color_align) | ||
179 | addr = COLOUR_ALIGN(addr, pgoff); | ||
180 | } | ||
181 | } | 142 | } |
182 | 143 | ||
183 | unsigned long | 144 | unsigned long |
@@ -190,6 +151,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, | |||
190 | unsigned long task_size = STACK_TOP32; | 151 | unsigned long task_size = STACK_TOP32; |
191 | unsigned long addr = addr0; | 152 | unsigned long addr = addr0; |
192 | int do_color_align; | 153 | int do_color_align; |
154 | struct vm_unmapped_area_info info; | ||
193 | 155 | ||
194 | /* This should only ever run for 32-bit processes. */ | 156 | /* This should only ever run for 32-bit processes. */ |
195 | BUG_ON(!test_thread_flag(TIF_32BIT)); | 157 | BUG_ON(!test_thread_flag(TIF_32BIT)); |
@@ -214,7 +176,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, | |||
214 | /* requesting a specific address */ | 176 | /* requesting a specific address */ |
215 | if (addr) { | 177 | if (addr) { |
216 | if (do_color_align) | 178 | if (do_color_align) |
217 | addr = COLOUR_ALIGN(addr, pgoff); | 179 | addr = COLOR_ALIGN(addr, pgoff); |
218 | else | 180 | else |
219 | addr = PAGE_ALIGN(addr); | 181 | addr = PAGE_ALIGN(addr); |
220 | 182 | ||
@@ -224,73 +186,27 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, | |||
224 | return addr; | 186 | return addr; |
225 | } | 187 | } |
226 | 188 | ||
227 | /* check if free_area_cache is useful for us */ | 189 | info.flags = VM_UNMAPPED_AREA_TOPDOWN; |
228 | if (len <= mm->cached_hole_size) { | 190 | info.length = len; |
229 | mm->cached_hole_size = 0; | 191 | info.low_limit = PAGE_SIZE; |
230 | mm->free_area_cache = mm->mmap_base; | 192 | info.high_limit = mm->mmap_base; |
231 | } | 193 | info.align_mask = do_color_align ? (PAGE_MASK & (SHMLBA - 1)) : 0; |
232 | 194 | info.align_offset = pgoff << PAGE_SHIFT; | |
233 | /* either no address requested or can't fit in requested address hole */ | 195 | addr = vm_unmapped_area(&info); |
234 | addr = mm->free_area_cache; | ||
235 | if (do_color_align) { | ||
236 | unsigned long base = COLOUR_ALIGN_DOWN(addr-len, pgoff); | ||
237 | 196 | ||
238 | addr = base + len; | ||
239 | } | ||
240 | |||
241 | /* make sure it can fit in the remaining address space */ | ||
242 | if (likely(addr > len)) { | ||
243 | vma = find_vma(mm, addr-len); | ||
244 | if (!vma || addr <= vma->vm_start) { | ||
245 | /* remember the address as a hint for next time */ | ||
246 | return (mm->free_area_cache = addr-len); | ||
247 | } | ||
248 | } | ||
249 | |||
250 | if (unlikely(mm->mmap_base < len)) | ||
251 | goto bottomup; | ||
252 | |||
253 | addr = mm->mmap_base-len; | ||
254 | if (do_color_align) | ||
255 | addr = COLOUR_ALIGN_DOWN(addr, pgoff); | ||
256 | |||
257 | do { | ||
258 | /* | ||
259 | * Lookup failure means no vma is above this address, | ||
260 | * else if new region fits below vma->vm_start, | ||
261 | * return with success: | ||
262 | */ | ||
263 | vma = find_vma(mm, addr); | ||
264 | if (likely(!vma || addr+len <= vma->vm_start)) { | ||
265 | /* remember the address as a hint for next time */ | ||
266 | return (mm->free_area_cache = addr); | ||
267 | } | ||
268 | |||
269 | /* remember the largest hole we saw so far */ | ||
270 | if (addr + mm->cached_hole_size < vma->vm_start) | ||
271 | mm->cached_hole_size = vma->vm_start - addr; | ||
272 | |||
273 | /* try just below the current vma->vm_start */ | ||
274 | addr = vma->vm_start-len; | ||
275 | if (do_color_align) | ||
276 | addr = COLOUR_ALIGN_DOWN(addr, pgoff); | ||
277 | } while (likely(len < vma->vm_start)); | ||
278 | |||
279 | bottomup: | ||
280 | /* | 197 | /* |
281 | * A failed mmap() very likely causes application failure, | 198 | * A failed mmap() very likely causes application failure, |
282 | * so fall back to the bottom-up function here. This scenario | 199 | * so fall back to the bottom-up function here. This scenario |
283 | * can happen with large stack limits and large mmap() | 200 | * can happen with large stack limits and large mmap() |
284 | * allocations. | 201 | * allocations. |
285 | */ | 202 | */ |
286 | mm->cached_hole_size = ~0UL; | 203 | if (addr & ~PAGE_MASK) { |
287 | mm->free_area_cache = TASK_UNMAPPED_BASE; | 204 | VM_BUG_ON(addr != -ENOMEM); |
288 | addr = arch_get_unmapped_area(filp, addr0, len, pgoff, flags); | 205 | info.flags = 0; |
289 | /* | 206 | info.low_limit = TASK_UNMAPPED_BASE; |
290 | * Restore the topdown base: | 207 | info.high_limit = STACK_TOP32; |
291 | */ | 208 | addr = vm_unmapped_area(&info); |
292 | mm->free_area_cache = mm->mmap_base; | 209 | } |
293 | mm->cached_hole_size = ~0UL; | ||
294 | 210 | ||
295 | return addr; | 211 | return addr; |
296 | } | 212 | } |
diff --git a/arch/sparc/mm/hugetlbpage.c b/arch/sparc/mm/hugetlbpage.c index f76f83d5ac63..d2b59441ebdd 100644 --- a/arch/sparc/mm/hugetlbpage.c +++ b/arch/sparc/mm/hugetlbpage.c | |||
@@ -30,55 +30,28 @@ static unsigned long hugetlb_get_unmapped_area_bottomup(struct file *filp, | |||
30 | unsigned long pgoff, | 30 | unsigned long pgoff, |
31 | unsigned long flags) | 31 | unsigned long flags) |
32 | { | 32 | { |
33 | struct mm_struct *mm = current->mm; | ||
34 | struct vm_area_struct * vma; | ||
35 | unsigned long task_size = TASK_SIZE; | 33 | unsigned long task_size = TASK_SIZE; |
36 | unsigned long start_addr; | 34 | struct vm_unmapped_area_info info; |
37 | 35 | ||
38 | if (test_thread_flag(TIF_32BIT)) | 36 | if (test_thread_flag(TIF_32BIT)) |
39 | task_size = STACK_TOP32; | 37 | task_size = STACK_TOP32; |
40 | if (unlikely(len >= VA_EXCLUDE_START)) | ||
41 | return -ENOMEM; | ||
42 | 38 | ||
43 | if (len > mm->cached_hole_size) { | 39 | info.flags = 0; |
44 | start_addr = addr = mm->free_area_cache; | 40 | info.length = len; |
45 | } else { | 41 | info.low_limit = TASK_UNMAPPED_BASE; |
46 | start_addr = addr = TASK_UNMAPPED_BASE; | 42 | info.high_limit = min(task_size, VA_EXCLUDE_START); |
47 | mm->cached_hole_size = 0; | 43 | info.align_mask = PAGE_MASK & ~HPAGE_MASK; |
44 | info.align_offset = 0; | ||
45 | addr = vm_unmapped_area(&info); | ||
46 | |||
47 | if ((addr & ~PAGE_MASK) && task_size > VA_EXCLUDE_END) { | ||
48 | VM_BUG_ON(addr != -ENOMEM); | ||
49 | info.low_limit = VA_EXCLUDE_END; | ||
50 | info.high_limit = task_size; | ||
51 | addr = vm_unmapped_area(&info); | ||
48 | } | 52 | } |
49 | 53 | ||
50 | task_size -= len; | 54 | return addr; |
51 | |||
52 | full_search: | ||
53 | addr = ALIGN(addr, HPAGE_SIZE); | ||
54 | |||
55 | for (vma = find_vma(mm, addr); ; vma = vma->vm_next) { | ||
56 | /* At this point: (!vma || addr < vma->vm_end). */ | ||
57 | if (addr < VA_EXCLUDE_START && | ||
58 | (addr + len) >= VA_EXCLUDE_START) { | ||
59 | addr = VA_EXCLUDE_END; | ||
60 | vma = find_vma(mm, VA_EXCLUDE_END); | ||
61 | } | ||
62 | if (unlikely(task_size < addr)) { | ||
63 | if (start_addr != TASK_UNMAPPED_BASE) { | ||
64 | start_addr = addr = TASK_UNMAPPED_BASE; | ||
65 | mm->cached_hole_size = 0; | ||
66 | goto full_search; | ||
67 | } | ||
68 | return -ENOMEM; | ||
69 | } | ||
70 | if (likely(!vma || addr + len <= vma->vm_start)) { | ||
71 | /* | ||
72 | * Remember the place where we stopped the search: | ||
73 | */ | ||
74 | mm->free_area_cache = addr + len; | ||
75 | return addr; | ||
76 | } | ||
77 | if (addr + mm->cached_hole_size < vma->vm_start) | ||
78 | mm->cached_hole_size = vma->vm_start - addr; | ||
79 | |||
80 | addr = ALIGN(vma->vm_end, HPAGE_SIZE); | ||
81 | } | ||
82 | } | 55 | } |
83 | 56 | ||
84 | static unsigned long | 57 | static unsigned long |
@@ -87,71 +60,34 @@ hugetlb_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, | |||
87 | const unsigned long pgoff, | 60 | const unsigned long pgoff, |
88 | const unsigned long flags) | 61 | const unsigned long flags) |
89 | { | 62 | { |
90 | struct vm_area_struct *vma; | ||
91 | struct mm_struct *mm = current->mm; | 63 | struct mm_struct *mm = current->mm; |
92 | unsigned long addr = addr0; | 64 | unsigned long addr = addr0; |
65 | struct vm_unmapped_area_info info; | ||
93 | 66 | ||
94 | /* This should only ever run for 32-bit processes. */ | 67 | /* This should only ever run for 32-bit processes. */ |
95 | BUG_ON(!test_thread_flag(TIF_32BIT)); | 68 | BUG_ON(!test_thread_flag(TIF_32BIT)); |
96 | 69 | ||
97 | /* check if free_area_cache is useful for us */ | 70 | info.flags = VM_UNMAPPED_AREA_TOPDOWN; |
98 | if (len <= mm->cached_hole_size) { | 71 | info.length = len; |
99 | mm->cached_hole_size = 0; | 72 | info.low_limit = PAGE_SIZE; |
100 | mm->free_area_cache = mm->mmap_base; | 73 | info.high_limit = mm->mmap_base; |
101 | } | 74 | info.align_mask = PAGE_MASK & ~HPAGE_MASK; |
102 | 75 | info.align_offset = 0; | |
103 | /* either no address requested or can't fit in requested address hole */ | 76 | addr = vm_unmapped_area(&info); |
104 | addr = mm->free_area_cache & HPAGE_MASK; | ||
105 | |||
106 | /* make sure it can fit in the remaining address space */ | ||
107 | if (likely(addr > len)) { | ||
108 | vma = find_vma(mm, addr-len); | ||
109 | if (!vma || addr <= vma->vm_start) { | ||
110 | /* remember the address as a hint for next time */ | ||
111 | return (mm->free_area_cache = addr-len); | ||
112 | } | ||
113 | } | ||
114 | |||
115 | if (unlikely(mm->mmap_base < len)) | ||
116 | goto bottomup; | ||
117 | |||
118 | addr = (mm->mmap_base-len) & HPAGE_MASK; | ||
119 | |||
120 | do { | ||
121 | /* | ||
122 | * Lookup failure means no vma is above this address, | ||
123 | * else if new region fits below vma->vm_start, | ||
124 | * return with success: | ||
125 | */ | ||
126 | vma = find_vma(mm, addr); | ||
127 | if (likely(!vma || addr+len <= vma->vm_start)) { | ||
128 | /* remember the address as a hint for next time */ | ||
129 | return (mm->free_area_cache = addr); | ||
130 | } | ||
131 | |||
132 | /* remember the largest hole we saw so far */ | ||
133 | if (addr + mm->cached_hole_size < vma->vm_start) | ||
134 | mm->cached_hole_size = vma->vm_start - addr; | ||
135 | |||
136 | /* try just below the current vma->vm_start */ | ||
137 | addr = (vma->vm_start-len) & HPAGE_MASK; | ||
138 | } while (likely(len < vma->vm_start)); | ||
139 | 77 | ||
140 | bottomup: | ||
141 | /* | 78 | /* |
142 | * A failed mmap() very likely causes application failure, | 79 | * A failed mmap() very likely causes application failure, |
143 | * so fall back to the bottom-up function here. This scenario | 80 | * so fall back to the bottom-up function here. This scenario |
144 | * can happen with large stack limits and large mmap() | 81 | * can happen with large stack limits and large mmap() |
145 | * allocations. | 82 | * allocations. |
146 | */ | 83 | */ |
147 | mm->cached_hole_size = ~0UL; | 84 | if (addr & ~PAGE_MASK) { |
148 | mm->free_area_cache = TASK_UNMAPPED_BASE; | 85 | VM_BUG_ON(addr != -ENOMEM); |
149 | addr = arch_get_unmapped_area(filp, addr0, len, pgoff, flags); | 86 | info.flags = 0; |
150 | /* | 87 | info.low_limit = TASK_UNMAPPED_BASE; |
151 | * Restore the topdown base: | 88 | info.high_limit = STACK_TOP32; |
152 | */ | 89 | addr = vm_unmapped_area(&info); |
153 | mm->free_area_cache = mm->mmap_base; | 90 | } |
154 | mm->cached_hole_size = ~0UL; | ||
155 | 91 | ||
156 | return addr; | 92 | return addr; |
157 | } | 93 | } |
diff --git a/arch/tile/mm/hugetlbpage.c b/arch/tile/mm/hugetlbpage.c index 812e2d037972..650ccff8378c 100644 --- a/arch/tile/mm/hugetlbpage.c +++ b/arch/tile/mm/hugetlbpage.c | |||
@@ -231,42 +231,15 @@ static unsigned long hugetlb_get_unmapped_area_bottomup(struct file *file, | |||
231 | unsigned long pgoff, unsigned long flags) | 231 | unsigned long pgoff, unsigned long flags) |
232 | { | 232 | { |
233 | struct hstate *h = hstate_file(file); | 233 | struct hstate *h = hstate_file(file); |
234 | struct mm_struct *mm = current->mm; | 234 | struct vm_unmapped_area_info info; |
235 | struct vm_area_struct *vma; | 235 | |
236 | unsigned long start_addr; | 236 | info.flags = 0; |
237 | 237 | info.length = len; | |
238 | if (len > mm->cached_hole_size) { | 238 | info.low_limit = TASK_UNMAPPED_BASE; |
239 | start_addr = mm->free_area_cache; | 239 | info.high_limit = TASK_SIZE; |
240 | } else { | 240 | info.align_mask = PAGE_MASK & ~huge_page_mask(h); |
241 | start_addr = TASK_UNMAPPED_BASE; | 241 | info.align_offset = 0; |
242 | mm->cached_hole_size = 0; | 242 | return vm_unmapped_area(&info); |
243 | } | ||
244 | |||
245 | full_search: | ||
246 | addr = ALIGN(start_addr, huge_page_size(h)); | ||
247 | |||
248 | for (vma = find_vma(mm, addr); ; vma = vma->vm_next) { | ||
249 | /* At this point: (!vma || addr < vma->vm_end). */ | ||
250 | if (TASK_SIZE - len < addr) { | ||
251 | /* | ||
252 | * Start a new search - just in case we missed | ||
253 | * some holes. | ||
254 | */ | ||
255 | if (start_addr != TASK_UNMAPPED_BASE) { | ||
256 | start_addr = TASK_UNMAPPED_BASE; | ||
257 | mm->cached_hole_size = 0; | ||
258 | goto full_search; | ||
259 | } | ||
260 | return -ENOMEM; | ||
261 | } | ||
262 | if (!vma || addr + len <= vma->vm_start) { | ||
263 | mm->free_area_cache = addr + len; | ||
264 | return addr; | ||
265 | } | ||
266 | if (addr + mm->cached_hole_size < vma->vm_start) | ||
267 | mm->cached_hole_size = vma->vm_start - addr; | ||
268 | addr = ALIGN(vma->vm_end, huge_page_size(h)); | ||
269 | } | ||
270 | } | 243 | } |
271 | 244 | ||
272 | static unsigned long hugetlb_get_unmapped_area_topdown(struct file *file, | 245 | static unsigned long hugetlb_get_unmapped_area_topdown(struct file *file, |
@@ -274,92 +247,30 @@ static unsigned long hugetlb_get_unmapped_area_topdown(struct file *file, | |||
274 | unsigned long pgoff, unsigned long flags) | 247 | unsigned long pgoff, unsigned long flags) |
275 | { | 248 | { |
276 | struct hstate *h = hstate_file(file); | 249 | struct hstate *h = hstate_file(file); |
277 | struct mm_struct *mm = current->mm; | 250 | struct vm_unmapped_area_info info; |
278 | struct vm_area_struct *vma, *prev_vma; | 251 | unsigned long addr; |
279 | unsigned long base = mm->mmap_base, addr = addr0; | ||
280 | unsigned long largest_hole = mm->cached_hole_size; | ||
281 | int first_time = 1; | ||
282 | |||
283 | /* don't allow allocations above current base */ | ||
284 | if (mm->free_area_cache > base) | ||
285 | mm->free_area_cache = base; | ||
286 | |||
287 | if (len <= largest_hole) { | ||
288 | largest_hole = 0; | ||
289 | mm->free_area_cache = base; | ||
290 | } | ||
291 | try_again: | ||
292 | /* make sure it can fit in the remaining address space */ | ||
293 | if (mm->free_area_cache < len) | ||
294 | goto fail; | ||
295 | |||
296 | /* either no address requested or can't fit in requested address hole */ | ||
297 | addr = (mm->free_area_cache - len) & huge_page_mask(h); | ||
298 | do { | ||
299 | /* | ||
300 | * Lookup failure means no vma is above this address, | ||
301 | * i.e. return with success: | ||
302 | */ | ||
303 | vma = find_vma_prev(mm, addr, &prev_vma); | ||
304 | if (!vma) { | ||
305 | return addr; | ||
306 | break; | ||
307 | } | ||
308 | |||
309 | /* | ||
310 | * new region fits between prev_vma->vm_end and | ||
311 | * vma->vm_start, use it: | ||
312 | */ | ||
313 | if (addr + len <= vma->vm_start && | ||
314 | (!prev_vma || (addr >= prev_vma->vm_end))) { | ||
315 | /* remember the address as a hint for next time */ | ||
316 | mm->cached_hole_size = largest_hole; | ||
317 | mm->free_area_cache = addr; | ||
318 | return addr; | ||
319 | } else { | ||
320 | /* pull free_area_cache down to the first hole */ | ||
321 | if (mm->free_area_cache == vma->vm_end) { | ||
322 | mm->free_area_cache = vma->vm_start; | ||
323 | mm->cached_hole_size = largest_hole; | ||
324 | } | ||
325 | } | ||
326 | 252 | ||
327 | /* remember the largest hole we saw so far */ | 253 | info.flags = VM_UNMAPPED_AREA_TOPDOWN; |
328 | if (addr + largest_hole < vma->vm_start) | 254 | info.length = len; |
329 | largest_hole = vma->vm_start - addr; | 255 | info.low_limit = PAGE_SIZE; |
256 | info.high_limit = current->mm->mmap_base; | ||
257 | info.align_mask = PAGE_MASK & ~huge_page_mask(h); | ||
258 | info.align_offset = 0; | ||
259 | addr = vm_unmapped_area(&info); | ||
330 | 260 | ||
331 | /* try just below the current vma->vm_start */ | ||
332 | addr = (vma->vm_start - len) & huge_page_mask(h); | ||
333 | |||
334 | } while (len <= vma->vm_start); | ||
335 | |||
336 | fail: | ||
337 | /* | ||
338 | * if hint left us with no space for the requested | ||
339 | * mapping then try again: | ||
340 | */ | ||
341 | if (first_time) { | ||
342 | mm->free_area_cache = base; | ||
343 | largest_hole = 0; | ||
344 | first_time = 0; | ||
345 | goto try_again; | ||
346 | } | ||
347 | /* | 261 | /* |
348 | * A failed mmap() very likely causes application failure, | 262 | * A failed mmap() very likely causes application failure, |
349 | * so fall back to the bottom-up function here. This scenario | 263 | * so fall back to the bottom-up function here. This scenario |
350 | * can happen with large stack limits and large mmap() | 264 | * can happen with large stack limits and large mmap() |
351 | * allocations. | 265 | * allocations. |
352 | */ | 266 | */ |
353 | mm->free_area_cache = TASK_UNMAPPED_BASE; | 267 | if (addr & ~PAGE_MASK) { |
354 | mm->cached_hole_size = ~0UL; | 268 | VM_BUG_ON(addr != -ENOMEM); |
355 | addr = hugetlb_get_unmapped_area_bottomup(file, addr0, | 269 | info.flags = 0; |
356 | len, pgoff, flags); | 270 | info.low_limit = TASK_UNMAPPED_BASE; |
357 | 271 | info.high_limit = TASK_SIZE; | |
358 | /* | 272 | addr = vm_unmapped_area(&info); |
359 | * Restore the topdown base: | 273 | } |
360 | */ | ||
361 | mm->free_area_cache = base; | ||
362 | mm->cached_hole_size = ~0UL; | ||
363 | 274 | ||
364 | return addr; | 275 | return addr; |
365 | } | 276 | } |
diff --git a/arch/um/drivers/chan_kern.c b/arch/um/drivers/chan_kern.c index c3bba73e4be6..e9a0abc6a32f 100644 --- a/arch/um/drivers/chan_kern.c +++ b/arch/um/drivers/chan_kern.c | |||
@@ -83,21 +83,8 @@ static const struct chan_ops not_configged_ops = { | |||
83 | 83 | ||
84 | static void tty_receive_char(struct tty_struct *tty, char ch) | 84 | static void tty_receive_char(struct tty_struct *tty, char ch) |
85 | { | 85 | { |
86 | if (tty == NULL) | 86 | if (tty) |
87 | return; | 87 | tty_insert_flip_char(tty, ch, TTY_NORMAL); |
88 | |||
89 | if (I_IXON(tty) && !I_IXOFF(tty) && !tty->raw) { | ||
90 | if (ch == STOP_CHAR(tty)) { | ||
91 | stop_tty(tty); | ||
92 | return; | ||
93 | } | ||
94 | else if (ch == START_CHAR(tty)) { | ||
95 | start_tty(tty); | ||
96 | return; | ||
97 | } | ||
98 | } | ||
99 | |||
100 | tty_insert_flip_char(tty, ch, TTY_NORMAL); | ||
101 | } | 88 | } |
102 | 89 | ||
103 | static int open_one_chan(struct chan *chan) | 90 | static int open_one_chan(struct chan *chan) |
diff --git a/arch/um/drivers/line.c b/arch/um/drivers/line.c index fd9a15b318af..9ffc28bd4b7a 100644 --- a/arch/um/drivers/line.c +++ b/arch/um/drivers/line.c | |||
@@ -584,6 +584,8 @@ int register_lines(struct line_driver *line_driver, | |||
584 | printk(KERN_ERR "register_lines : can't register %s driver\n", | 584 | printk(KERN_ERR "register_lines : can't register %s driver\n", |
585 | line_driver->name); | 585 | line_driver->name); |
586 | put_tty_driver(driver); | 586 | put_tty_driver(driver); |
587 | for (i = 0; i < nlines; i++) | ||
588 | tty_port_destroy(&lines[i].port); | ||
587 | return err; | 589 | return err; |
588 | } | 590 | } |
589 | 591 | ||
diff --git a/arch/um/drivers/mconsole_kern.c b/arch/um/drivers/mconsole_kern.c index 79ccfe6c7078..49e3b49e552f 100644 --- a/arch/um/drivers/mconsole_kern.c +++ b/arch/um/drivers/mconsole_kern.c | |||
@@ -648,7 +648,7 @@ static void stack_proc(void *arg) | |||
648 | struct task_struct *from = current, *to = arg; | 648 | struct task_struct *from = current, *to = arg; |
649 | 649 | ||
650 | to->thread.saved_task = from; | 650 | to->thread.saved_task = from; |
651 | rcu_switch(from, to); | 651 | rcu_user_hooks_switch(from, to); |
652 | switch_to(from, to, from); | 652 | switch_to(from, to, from); |
653 | } | 653 | } |
654 | 654 | ||
diff --git a/arch/unicore32/kernel/pci.c b/arch/unicore32/kernel/pci.c index b0056f68d321..7c4359240b81 100644 --- a/arch/unicore32/kernel/pci.c +++ b/arch/unicore32/kernel/pci.c | |||
@@ -250,9 +250,7 @@ void __devinit pcibios_fixup_bus(struct pci_bus *bus) | |||
250 | printk(KERN_INFO "PCI: bus%d: Fast back to back transfers %sabled\n", | 250 | printk(KERN_INFO "PCI: bus%d: Fast back to back transfers %sabled\n", |
251 | bus->number, (features & PCI_COMMAND_FAST_BACK) ? "en" : "dis"); | 251 | bus->number, (features & PCI_COMMAND_FAST_BACK) ? "en" : "dis"); |
252 | } | 252 | } |
253 | #ifdef CONFIG_HOTPLUG | ||
254 | EXPORT_SYMBOL(pcibios_fixup_bus); | 253 | EXPORT_SYMBOL(pcibios_fixup_bus); |
255 | #endif | ||
256 | 254 | ||
257 | static int __init pci_common_init(void) | 255 | static int __init pci_common_init(void) |
258 | { | 256 | { |
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 46c3bff3ced2..110cfad24f26 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
@@ -106,7 +106,7 @@ config X86 | |||
106 | select KTIME_SCALAR if X86_32 | 106 | select KTIME_SCALAR if X86_32 |
107 | select GENERIC_STRNCPY_FROM_USER | 107 | select GENERIC_STRNCPY_FROM_USER |
108 | select GENERIC_STRNLEN_USER | 108 | select GENERIC_STRNLEN_USER |
109 | select HAVE_RCU_USER_QS if X86_64 | 109 | select HAVE_CONTEXT_TRACKING if X86_64 |
110 | select HAVE_IRQ_TIME_ACCOUNTING | 110 | select HAVE_IRQ_TIME_ACCOUNTING |
111 | select GENERIC_KERNEL_THREAD | 111 | select GENERIC_KERNEL_THREAD |
112 | select GENERIC_KERNEL_EXECVE | 112 | select GENERIC_KERNEL_EXECVE |
diff --git a/arch/x86/include/asm/rcu.h b/arch/x86/include/asm/context_tracking.h index d1ac07a23979..1616562683e9 100644 --- a/arch/x86/include/asm/rcu.h +++ b/arch/x86/include/asm/context_tracking.h | |||
@@ -1,27 +1,26 @@ | |||
1 | #ifndef _ASM_X86_RCU_H | 1 | #ifndef _ASM_X86_CONTEXT_TRACKING_H |
2 | #define _ASM_X86_RCU_H | 2 | #define _ASM_X86_CONTEXT_TRACKING_H |
3 | 3 | ||
4 | #ifndef __ASSEMBLY__ | 4 | #ifndef __ASSEMBLY__ |
5 | 5 | #include <linux/context_tracking.h> | |
6 | #include <linux/rcupdate.h> | ||
7 | #include <asm/ptrace.h> | 6 | #include <asm/ptrace.h> |
8 | 7 | ||
9 | static inline void exception_enter(struct pt_regs *regs) | 8 | static inline void exception_enter(struct pt_regs *regs) |
10 | { | 9 | { |
11 | rcu_user_exit(); | 10 | user_exit(); |
12 | } | 11 | } |
13 | 12 | ||
14 | static inline void exception_exit(struct pt_regs *regs) | 13 | static inline void exception_exit(struct pt_regs *regs) |
15 | { | 14 | { |
16 | #ifdef CONFIG_RCU_USER_QS | 15 | #ifdef CONFIG_CONTEXT_TRACKING |
17 | if (user_mode(regs)) | 16 | if (user_mode(regs)) |
18 | rcu_user_enter(); | 17 | user_enter(); |
19 | #endif | 18 | #endif |
20 | } | 19 | } |
21 | 20 | ||
22 | #else /* __ASSEMBLY__ */ | 21 | #else /* __ASSEMBLY__ */ |
23 | 22 | ||
24 | #ifdef CONFIG_RCU_USER_QS | 23 | #ifdef CONFIG_CONTEXT_TRACKING |
25 | # define SCHEDULE_USER call schedule_user | 24 | # define SCHEDULE_USER call schedule_user |
26 | #else | 25 | #else |
27 | # define SCHEDULE_USER call schedule | 26 | # define SCHEDULE_USER call schedule |
diff --git a/arch/x86/include/asm/device.h b/arch/x86/include/asm/device.h index 93e1c55f14ab..03dd72957d2f 100644 --- a/arch/x86/include/asm/device.h +++ b/arch/x86/include/asm/device.h | |||
@@ -2,9 +2,6 @@ | |||
2 | #define _ASM_X86_DEVICE_H | 2 | #define _ASM_X86_DEVICE_H |
3 | 3 | ||
4 | struct dev_archdata { | 4 | struct dev_archdata { |
5 | #ifdef CONFIG_ACPI | ||
6 | void *acpi_handle; | ||
7 | #endif | ||
8 | #ifdef CONFIG_X86_DEV_DMA_OPS | 5 | #ifdef CONFIG_X86_DEV_DMA_OPS |
9 | struct dma_map_ops *dma_ops; | 6 | struct dma_map_ops *dma_ops; |
10 | #endif | 7 | #endif |
diff --git a/arch/x86/include/asm/elf.h b/arch/x86/include/asm/elf.h index 5939f44fe0c0..9c999c1674fa 100644 --- a/arch/x86/include/asm/elf.h +++ b/arch/x86/include/asm/elf.h | |||
@@ -354,12 +354,10 @@ static inline int mmap_is_ia32(void) | |||
354 | return 0; | 354 | return 0; |
355 | } | 355 | } |
356 | 356 | ||
357 | /* The first two values are special, do not change. See align_addr() */ | 357 | /* Do not change the values. See get_align_mask() */ |
358 | enum align_flags { | 358 | enum align_flags { |
359 | ALIGN_VA_32 = BIT(0), | 359 | ALIGN_VA_32 = BIT(0), |
360 | ALIGN_VA_64 = BIT(1), | 360 | ALIGN_VA_64 = BIT(1), |
361 | ALIGN_VDSO = BIT(2), | ||
362 | ALIGN_TOPDOWN = BIT(3), | ||
363 | }; | 361 | }; |
364 | 362 | ||
365 | struct va_alignment { | 363 | struct va_alignment { |
@@ -368,5 +366,5 @@ struct va_alignment { | |||
368 | } ____cacheline_aligned; | 366 | } ____cacheline_aligned; |
369 | 367 | ||
370 | extern struct va_alignment va_align; | 368 | extern struct va_alignment va_align; |
371 | extern unsigned long align_addr(unsigned long, struct file *, enum align_flags); | 369 | extern unsigned long align_vdso_addr(unsigned long); |
372 | #endif /* _ASM_X86_ELF_H */ | 370 | #endif /* _ASM_X86_ELF_H */ |
diff --git a/arch/x86/include/asm/mman.h b/arch/x86/include/asm/mman.h index 593e51d4643f..513b05f15bb4 100644 --- a/arch/x86/include/asm/mman.h +++ b/arch/x86/include/asm/mman.h | |||
@@ -3,6 +3,9 @@ | |||
3 | 3 | ||
4 | #define MAP_32BIT 0x40 /* only give out 32bit addresses */ | 4 | #define MAP_32BIT 0x40 /* only give out 32bit addresses */ |
5 | 5 | ||
6 | #define MAP_HUGE_2MB (21 << MAP_HUGE_SHIFT) | ||
7 | #define MAP_HUGE_1GB (30 << MAP_HUGE_SHIFT) | ||
8 | |||
6 | #include <asm-generic/mman.h> | 9 | #include <asm-generic/mman.h> |
7 | 10 | ||
8 | #endif /* _ASM_X86_MMAN_H */ | 11 | #endif /* _ASM_X86_MMAN_H */ |
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index e651f7a589ac..e48cafcf92ae 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c | |||
@@ -574,6 +574,12 @@ int acpi_register_gsi(struct device *dev, u32 gsi, int trigger, int polarity) | |||
574 | 574 | ||
575 | return irq; | 575 | return irq; |
576 | } | 576 | } |
577 | EXPORT_SYMBOL_GPL(acpi_register_gsi); | ||
578 | |||
579 | void acpi_unregister_gsi(u32 gsi) | ||
580 | { | ||
581 | } | ||
582 | EXPORT_SYMBOL_GPL(acpi_unregister_gsi); | ||
577 | 583 | ||
578 | void __init acpi_set_irq_model_pic(void) | 584 | void __init acpi_set_irq_model_pic(void) |
579 | { | 585 | { |
diff --git a/arch/x86/kernel/acpi/sleep.c b/arch/x86/kernel/acpi/sleep.c index 11676cf65aee..d5e0d717005a 100644 --- a/arch/x86/kernel/acpi/sleep.c +++ b/arch/x86/kernel/acpi/sleep.c | |||
@@ -101,6 +101,8 @@ static int __init acpi_sleep_setup(char *str) | |||
101 | #endif | 101 | #endif |
102 | if (strncmp(str, "nonvs", 5) == 0) | 102 | if (strncmp(str, "nonvs", 5) == 0) |
103 | acpi_nvs_nosave(); | 103 | acpi_nvs_nosave(); |
104 | if (strncmp(str, "nonvs_s3", 8) == 0) | ||
105 | acpi_nvs_nosave_s3(); | ||
104 | if (strncmp(str, "old_ordering", 12) == 0) | 106 | if (strncmp(str, "old_ordering", 12) == 0) |
105 | acpi_old_suspend_ordering(); | 107 | acpi_old_suspend_ordering(); |
106 | str = strchr(str, ','); | 108 | str = strchr(str, ','); |
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index 1328fe49a3f1..2a3806b95831 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S | |||
@@ -56,7 +56,7 @@ | |||
56 | #include <asm/ftrace.h> | 56 | #include <asm/ftrace.h> |
57 | #include <asm/percpu.h> | 57 | #include <asm/percpu.h> |
58 | #include <asm/asm.h> | 58 | #include <asm/asm.h> |
59 | #include <asm/rcu.h> | 59 | #include <asm/context_tracking.h> |
60 | #include <asm/smap.h> | 60 | #include <asm/smap.h> |
61 | #include <linux/err.h> | 61 | #include <linux/err.h> |
62 | 62 | ||
diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c index 974b67e46dd0..b629bbe0d9bd 100644 --- a/arch/x86/kernel/ptrace.c +++ b/arch/x86/kernel/ptrace.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/hw_breakpoint.h> | 23 | #include <linux/hw_breakpoint.h> |
24 | #include <linux/rcupdate.h> | 24 | #include <linux/rcupdate.h> |
25 | #include <linux/module.h> | 25 | #include <linux/module.h> |
26 | #include <linux/context_tracking.h> | ||
26 | 27 | ||
27 | #include <asm/uaccess.h> | 28 | #include <asm/uaccess.h> |
28 | #include <asm/pgtable.h> | 29 | #include <asm/pgtable.h> |
@@ -1491,7 +1492,7 @@ long syscall_trace_enter(struct pt_regs *regs) | |||
1491 | { | 1492 | { |
1492 | long ret = 0; | 1493 | long ret = 0; |
1493 | 1494 | ||
1494 | rcu_user_exit(); | 1495 | user_exit(); |
1495 | 1496 | ||
1496 | /* | 1497 | /* |
1497 | * If we stepped into a sysenter/syscall insn, it trapped in | 1498 | * If we stepped into a sysenter/syscall insn, it trapped in |
@@ -1546,7 +1547,7 @@ void syscall_trace_leave(struct pt_regs *regs) | |||
1546 | * or do_notify_resume(), in which case we can be in RCU | 1547 | * or do_notify_resume(), in which case we can be in RCU |
1547 | * user mode. | 1548 | * user mode. |
1548 | */ | 1549 | */ |
1549 | rcu_user_exit(); | 1550 | user_exit(); |
1550 | 1551 | ||
1551 | audit_syscall_exit(regs); | 1552 | audit_syscall_exit(regs); |
1552 | 1553 | ||
@@ -1564,5 +1565,5 @@ void syscall_trace_leave(struct pt_regs *regs) | |||
1564 | if (step || test_thread_flag(TIF_SYSCALL_TRACE)) | 1565 | if (step || test_thread_flag(TIF_SYSCALL_TRACE)) |
1565 | tracehook_report_syscall_exit(regs, step); | 1566 | tracehook_report_syscall_exit(regs, step); |
1566 | 1567 | ||
1567 | rcu_user_enter(); | 1568 | user_enter(); |
1568 | } | 1569 | } |
diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c index 70b27ee6118e..fbbb604313a2 100644 --- a/arch/x86/kernel/signal.c +++ b/arch/x86/kernel/signal.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/uaccess.h> | 22 | #include <linux/uaccess.h> |
23 | #include <linux/user-return-notifier.h> | 23 | #include <linux/user-return-notifier.h> |
24 | #include <linux/uprobes.h> | 24 | #include <linux/uprobes.h> |
25 | #include <linux/context_tracking.h> | ||
25 | 26 | ||
26 | #include <asm/processor.h> | 27 | #include <asm/processor.h> |
27 | #include <asm/ucontext.h> | 28 | #include <asm/ucontext.h> |
@@ -816,7 +817,7 @@ static void do_signal(struct pt_regs *regs) | |||
816 | void | 817 | void |
817 | do_notify_resume(struct pt_regs *regs, void *unused, __u32 thread_info_flags) | 818 | do_notify_resume(struct pt_regs *regs, void *unused, __u32 thread_info_flags) |
818 | { | 819 | { |
819 | rcu_user_exit(); | 820 | user_exit(); |
820 | 821 | ||
821 | #ifdef CONFIG_X86_MCE | 822 | #ifdef CONFIG_X86_MCE |
822 | /* notify userspace of pending MCEs */ | 823 | /* notify userspace of pending MCEs */ |
@@ -838,7 +839,7 @@ do_notify_resume(struct pt_regs *regs, void *unused, __u32 thread_info_flags) | |||
838 | if (thread_info_flags & _TIF_USER_RETURN_NOTIFY) | 839 | if (thread_info_flags & _TIF_USER_RETURN_NOTIFY) |
839 | fire_user_return_notifiers(); | 840 | fire_user_return_notifiers(); |
840 | 841 | ||
841 | rcu_user_enter(); | 842 | user_enter(); |
842 | } | 843 | } |
843 | 844 | ||
844 | void signal_fault(struct pt_regs *regs, void __user *frame, char *where) | 845 | void signal_fault(struct pt_regs *regs, void __user *frame, char *where) |
diff --git a/arch/x86/kernel/sys_x86_64.c b/arch/x86/kernel/sys_x86_64.c index b4d3c3927dd8..97ef74b88e0f 100644 --- a/arch/x86/kernel/sys_x86_64.c +++ b/arch/x86/kernel/sys_x86_64.c | |||
@@ -21,37 +21,23 @@ | |||
21 | 21 | ||
22 | /* | 22 | /* |
23 | * Align a virtual address to avoid aliasing in the I$ on AMD F15h. | 23 | * Align a virtual address to avoid aliasing in the I$ on AMD F15h. |
24 | * | ||
25 | * @flags denotes the allocation direction - bottomup or topdown - | ||
26 | * or vDSO; see call sites below. | ||
27 | */ | 24 | */ |
28 | unsigned long align_addr(unsigned long addr, struct file *filp, | 25 | static unsigned long get_align_mask(void) |
29 | enum align_flags flags) | ||
30 | { | 26 | { |
31 | unsigned long tmp_addr; | ||
32 | |||
33 | /* handle 32- and 64-bit case with a single conditional */ | 27 | /* handle 32- and 64-bit case with a single conditional */ |
34 | if (va_align.flags < 0 || !(va_align.flags & (2 - mmap_is_ia32()))) | 28 | if (va_align.flags < 0 || !(va_align.flags & (2 - mmap_is_ia32()))) |
35 | return addr; | 29 | return 0; |
36 | 30 | ||
37 | if (!(current->flags & PF_RANDOMIZE)) | 31 | if (!(current->flags & PF_RANDOMIZE)) |
38 | return addr; | 32 | return 0; |
39 | |||
40 | if (!((flags & ALIGN_VDSO) || filp)) | ||
41 | return addr; | ||
42 | |||
43 | tmp_addr = addr; | ||
44 | |||
45 | /* | ||
46 | * We need an address which is <= than the original | ||
47 | * one only when in topdown direction. | ||
48 | */ | ||
49 | if (!(flags & ALIGN_TOPDOWN)) | ||
50 | tmp_addr += va_align.mask; | ||
51 | 33 | ||
52 | tmp_addr &= ~va_align.mask; | 34 | return va_align.mask; |
35 | } | ||
53 | 36 | ||
54 | return tmp_addr; | 37 | unsigned long align_vdso_addr(unsigned long addr) |
38 | { | ||
39 | unsigned long align_mask = get_align_mask(); | ||
40 | return (addr + align_mask) & ~align_mask; | ||
55 | } | 41 | } |
56 | 42 | ||
57 | static int __init control_va_addr_alignment(char *str) | 43 | static int __init control_va_addr_alignment(char *str) |
@@ -126,7 +112,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, | |||
126 | { | 112 | { |
127 | struct mm_struct *mm = current->mm; | 113 | struct mm_struct *mm = current->mm; |
128 | struct vm_area_struct *vma; | 114 | struct vm_area_struct *vma; |
129 | unsigned long start_addr; | 115 | struct vm_unmapped_area_info info; |
130 | unsigned long begin, end; | 116 | unsigned long begin, end; |
131 | 117 | ||
132 | if (flags & MAP_FIXED) | 118 | if (flags & MAP_FIXED) |
@@ -144,50 +130,16 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, | |||
144 | (!vma || addr + len <= vma->vm_start)) | 130 | (!vma || addr + len <= vma->vm_start)) |
145 | return addr; | 131 | return addr; |
146 | } | 132 | } |
147 | if (((flags & MAP_32BIT) || test_thread_flag(TIF_ADDR32)) | ||
148 | && len <= mm->cached_hole_size) { | ||
149 | mm->cached_hole_size = 0; | ||
150 | mm->free_area_cache = begin; | ||
151 | } | ||
152 | addr = mm->free_area_cache; | ||
153 | if (addr < begin) | ||
154 | addr = begin; | ||
155 | start_addr = addr; | ||
156 | |||
157 | full_search: | ||
158 | |||
159 | addr = align_addr(addr, filp, 0); | ||
160 | |||
161 | for (vma = find_vma(mm, addr); ; vma = vma->vm_next) { | ||
162 | /* At this point: (!vma || addr < vma->vm_end). */ | ||
163 | if (end - len < addr) { | ||
164 | /* | ||
165 | * Start a new search - just in case we missed | ||
166 | * some holes. | ||
167 | */ | ||
168 | if (start_addr != begin) { | ||
169 | start_addr = addr = begin; | ||
170 | mm->cached_hole_size = 0; | ||
171 | goto full_search; | ||
172 | } | ||
173 | return -ENOMEM; | ||
174 | } | ||
175 | if (!vma || addr + len <= vma->vm_start) { | ||
176 | /* | ||
177 | * Remember the place where we stopped the search: | ||
178 | */ | ||
179 | mm->free_area_cache = addr + len; | ||
180 | return addr; | ||
181 | } | ||
182 | if (addr + mm->cached_hole_size < vma->vm_start) | ||
183 | mm->cached_hole_size = vma->vm_start - addr; | ||
184 | 133 | ||
185 | addr = vma->vm_end; | 134 | info.flags = 0; |
186 | addr = align_addr(addr, filp, 0); | 135 | info.length = len; |
187 | } | 136 | info.low_limit = begin; |
137 | info.high_limit = end; | ||
138 | info.align_mask = filp ? get_align_mask() : 0; | ||
139 | info.align_offset = pgoff << PAGE_SHIFT; | ||
140 | return vm_unmapped_area(&info); | ||
188 | } | 141 | } |
189 | 142 | ||
190 | |||
191 | unsigned long | 143 | unsigned long |
192 | arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, | 144 | arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, |
193 | const unsigned long len, const unsigned long pgoff, | 145 | const unsigned long len, const unsigned long pgoff, |
@@ -195,7 +147,8 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, | |||
195 | { | 147 | { |
196 | struct vm_area_struct *vma; | 148 | struct vm_area_struct *vma; |
197 | struct mm_struct *mm = current->mm; | 149 | struct mm_struct *mm = current->mm; |
198 | unsigned long addr = addr0, start_addr; | 150 | unsigned long addr = addr0; |
151 | struct vm_unmapped_area_info info; | ||
199 | 152 | ||
200 | /* requested length too big for entire address space */ | 153 | /* requested length too big for entire address space */ |
201 | if (len > TASK_SIZE) | 154 | if (len > TASK_SIZE) |
@@ -217,51 +170,16 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0, | |||
217 | return addr; | 170 | return addr; |
218 | } | 171 | } |
219 | 172 | ||
220 | /* check if free_area_cache is useful for us */ | 173 | info.flags = VM_UNMAPPED_AREA_TOPDOWN; |
221 | if (len <= mm->cached_hole_size) { | 174 | info.length = len; |
222 | mm->cached_hole_size = 0; | 175 | info.low_limit = PAGE_SIZE; |
223 | mm->free_area_cache = mm->mmap_base; | 176 | info.high_limit = mm->mmap_base; |
224 | } | 177 | info.align_mask = filp ? get_align_mask() : 0; |
225 | 178 | info.align_offset = pgoff << PAGE_SHIFT; | |
226 | try_again: | 179 | addr = vm_unmapped_area(&info); |
227 | /* either no address requested or can't fit in requested address hole */ | 180 | if (!(addr & ~PAGE_MASK)) |
228 | start_addr = addr = mm->free_area_cache; | 181 | return addr; |
229 | 182 | VM_BUG_ON(addr != -ENOMEM); | |
230 | if (addr < len) | ||
231 | goto fail; | ||
232 | |||
233 | addr -= len; | ||
234 | do { | ||
235 | addr = align_addr(addr, filp, ALIGN_TOPDOWN); | ||
236 | |||
237 | /* | ||
238 | * Lookup failure means no vma is above this address, | ||
239 | * else if new region fits below vma->vm_start, | ||
240 | * return with success: | ||
241 | */ | ||
242 | vma = find_vma(mm, addr); | ||
243 | if (!vma || addr+len <= vma->vm_start) | ||
244 | /* remember the address as a hint for next time */ | ||
245 | return mm->free_area_cache = addr; | ||
246 | |||
247 | /* remember the largest hole we saw so far */ | ||
248 | if (addr + mm->cached_hole_size < vma->vm_start) | ||
249 | mm->cached_hole_size = vma->vm_start - addr; | ||
250 | |||
251 | /* try just below the current vma->vm_start */ | ||
252 | addr = vma->vm_start-len; | ||
253 | } while (len < vma->vm_start); | ||
254 | |||
255 | fail: | ||
256 | /* | ||
257 | * if hint left us with no space for the requested | ||
258 | * mapping then try again: | ||
259 | */ | ||
260 | if (start_addr != mm->mmap_base) { | ||
261 | mm->free_area_cache = mm->mmap_base; | ||
262 | mm->cached_hole_size = 0; | ||
263 | goto try_again; | ||
264 | } | ||
265 | 183 | ||
266 | bottomup: | 184 | bottomup: |
267 | /* | 185 | /* |
@@ -270,14 +188,5 @@ bottomup: | |||
270 | * can happen with large stack limits and large mmap() | 188 | * can happen with large stack limits and large mmap() |
271 | * allocations. | 189 | * allocations. |
272 | */ | 190 | */ |
273 | mm->cached_hole_size = ~0UL; | 191 | return arch_get_unmapped_area(filp, addr0, len, pgoff, flags); |
274 | mm->free_area_cache = TASK_UNMAPPED_BASE; | ||
275 | addr = arch_get_unmapped_area(filp, addr0, len, pgoff, flags); | ||
276 | /* | ||
277 | * Restore the topdown base: | ||
278 | */ | ||
279 | mm->free_area_cache = mm->mmap_base; | ||
280 | mm->cached_hole_size = ~0UL; | ||
281 | |||
282 | return addr; | ||
283 | } | 192 | } |
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index 8276dc6794cc..eb8586693e0b 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c | |||
@@ -55,7 +55,7 @@ | |||
55 | #include <asm/i387.h> | 55 | #include <asm/i387.h> |
56 | #include <asm/fpu-internal.h> | 56 | #include <asm/fpu-internal.h> |
57 | #include <asm/mce.h> | 57 | #include <asm/mce.h> |
58 | #include <asm/rcu.h> | 58 | #include <asm/context_tracking.h> |
59 | 59 | ||
60 | #include <asm/mach_traps.h> | 60 | #include <asm/mach_traps.h> |
61 | 61 | ||
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c index 8e13ecb41bee..7a529cbab7ad 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c | |||
@@ -18,7 +18,7 @@ | |||
18 | #include <asm/pgalloc.h> /* pgd_*(), ... */ | 18 | #include <asm/pgalloc.h> /* pgd_*(), ... */ |
19 | #include <asm/kmemcheck.h> /* kmemcheck_*(), ... */ | 19 | #include <asm/kmemcheck.h> /* kmemcheck_*(), ... */ |
20 | #include <asm/fixmap.h> /* VSYSCALL_START */ | 20 | #include <asm/fixmap.h> /* VSYSCALL_START */ |
21 | #include <asm/rcu.h> /* exception_enter(), ... */ | 21 | #include <asm/context_tracking.h> /* exception_enter(), ... */ |
22 | 22 | ||
23 | /* | 23 | /* |
24 | * Page fault error code bits: | 24 | * Page fault error code bits: |
diff --git a/arch/x86/mm/hugetlbpage.c b/arch/x86/mm/hugetlbpage.c index 937bff5cdaa7..ae1aa71d0115 100644 --- a/arch/x86/mm/hugetlbpage.c +++ b/arch/x86/mm/hugetlbpage.c | |||
@@ -274,42 +274,15 @@ static unsigned long hugetlb_get_unmapped_area_bottomup(struct file *file, | |||
274 | unsigned long pgoff, unsigned long flags) | 274 | unsigned long pgoff, unsigned long flags) |
275 | { | 275 | { |
276 | struct hstate *h = hstate_file(file); | 276 | struct hstate *h = hstate_file(file); |
277 | struct mm_struct *mm = current->mm; | 277 | struct vm_unmapped_area_info info; |
278 | struct vm_area_struct *vma; | 278 | |
279 | unsigned long start_addr; | 279 | info.flags = 0; |
280 | 280 | info.length = len; | |
281 | if (len > mm->cached_hole_size) { | 281 | info.low_limit = TASK_UNMAPPED_BASE; |
282 | start_addr = mm->free_area_cache; | 282 | info.high_limit = TASK_SIZE; |
283 | } else { | 283 | info.align_mask = PAGE_MASK & ~huge_page_mask(h); |
284 | start_addr = TASK_UNMAPPED_BASE; | 284 | info.align_offset = 0; |
285 | mm->cached_hole_size = 0; | 285 | return vm_unmapped_area(&info); |
286 | } | ||
287 | |||
288 | full_search: | ||
289 | addr = ALIGN(start_addr, huge_page_size(h)); | ||
290 | |||
291 | for (vma = find_vma(mm, addr); ; vma = vma->vm_next) { | ||
292 | /* At this point: (!vma || addr < vma->vm_end). */ | ||
293 | if (TASK_SIZE - len < addr) { | ||
294 | /* | ||
295 | * Start a new search - just in case we missed | ||
296 | * some holes. | ||
297 | */ | ||
298 | if (start_addr != TASK_UNMAPPED_BASE) { | ||
299 | start_addr = TASK_UNMAPPED_BASE; | ||
300 | mm->cached_hole_size = 0; | ||
301 | goto full_search; | ||
302 | } | ||
303 | return -ENOMEM; | ||
304 | } | ||
305 | if (!vma || addr + len <= vma->vm_start) { | ||
306 | mm->free_area_cache = addr + len; | ||
307 | return addr; | ||
308 | } | ||
309 | if (addr + mm->cached_hole_size < vma->vm_start) | ||
310 | mm->cached_hole_size = vma->vm_start - addr; | ||
311 | addr = ALIGN(vma->vm_end, huge_page_size(h)); | ||
312 | } | ||
313 | } | 286 | } |
314 | 287 | ||
315 | static unsigned long hugetlb_get_unmapped_area_topdown(struct file *file, | 288 | static unsigned long hugetlb_get_unmapped_area_topdown(struct file *file, |
@@ -317,83 +290,30 @@ static unsigned long hugetlb_get_unmapped_area_topdown(struct file *file, | |||
317 | unsigned long pgoff, unsigned long flags) | 290 | unsigned long pgoff, unsigned long flags) |
318 | { | 291 | { |
319 | struct hstate *h = hstate_file(file); | 292 | struct hstate *h = hstate_file(file); |
320 | struct mm_struct *mm = current->mm; | 293 | struct vm_unmapped_area_info info; |
321 | struct vm_area_struct *vma; | 294 | unsigned long addr; |
322 | unsigned long base = mm->mmap_base; | ||
323 | unsigned long addr = addr0; | ||
324 | unsigned long largest_hole = mm->cached_hole_size; | ||
325 | unsigned long start_addr; | ||
326 | |||
327 | /* don't allow allocations above current base */ | ||
328 | if (mm->free_area_cache > base) | ||
329 | mm->free_area_cache = base; | ||
330 | |||
331 | if (len <= largest_hole) { | ||
332 | largest_hole = 0; | ||
333 | mm->free_area_cache = base; | ||
334 | } | ||
335 | try_again: | ||
336 | start_addr = mm->free_area_cache; | ||
337 | |||
338 | /* make sure it can fit in the remaining address space */ | ||
339 | if (mm->free_area_cache < len) | ||
340 | goto fail; | ||
341 | |||
342 | /* either no address requested or can't fit in requested address hole */ | ||
343 | addr = (mm->free_area_cache - len) & huge_page_mask(h); | ||
344 | do { | ||
345 | /* | ||
346 | * Lookup failure means no vma is above this address, | ||
347 | * i.e. return with success: | ||
348 | */ | ||
349 | vma = find_vma(mm, addr); | ||
350 | if (!vma) | ||
351 | return addr; | ||
352 | 295 | ||
353 | if (addr + len <= vma->vm_start) { | 296 | info.flags = VM_UNMAPPED_AREA_TOPDOWN; |
354 | /* remember the address as a hint for next time */ | 297 | info.length = len; |
355 | mm->cached_hole_size = largest_hole; | 298 | info.low_limit = PAGE_SIZE; |
356 | return (mm->free_area_cache = addr); | 299 | info.high_limit = current->mm->mmap_base; |
357 | } else if (mm->free_area_cache == vma->vm_end) { | 300 | info.align_mask = PAGE_MASK & ~huge_page_mask(h); |
358 | /* pull free_area_cache down to the first hole */ | 301 | info.align_offset = 0; |
359 | mm->free_area_cache = vma->vm_start; | 302 | addr = vm_unmapped_area(&info); |
360 | mm->cached_hole_size = largest_hole; | ||
361 | } | ||
362 | 303 | ||
363 | /* remember the largest hole we saw so far */ | ||
364 | if (addr + largest_hole < vma->vm_start) | ||
365 | largest_hole = vma->vm_start - addr; | ||
366 | |||
367 | /* try just below the current vma->vm_start */ | ||
368 | addr = (vma->vm_start - len) & huge_page_mask(h); | ||
369 | } while (len <= vma->vm_start); | ||
370 | |||
371 | fail: | ||
372 | /* | ||
373 | * if hint left us with no space for the requested | ||
374 | * mapping then try again: | ||
375 | */ | ||
376 | if (start_addr != base) { | ||
377 | mm->free_area_cache = base; | ||
378 | largest_hole = 0; | ||
379 | goto try_again; | ||
380 | } | ||
381 | /* | 304 | /* |
382 | * A failed mmap() very likely causes application failure, | 305 | * A failed mmap() very likely causes application failure, |
383 | * so fall back to the bottom-up function here. This scenario | 306 | * so fall back to the bottom-up function here. This scenario |
384 | * can happen with large stack limits and large mmap() | 307 | * can happen with large stack limits and large mmap() |
385 | * allocations. | 308 | * allocations. |
386 | */ | 309 | */ |
387 | mm->free_area_cache = TASK_UNMAPPED_BASE; | 310 | if (addr & ~PAGE_MASK) { |
388 | mm->cached_hole_size = ~0UL; | 311 | VM_BUG_ON(addr != -ENOMEM); |
389 | addr = hugetlb_get_unmapped_area_bottomup(file, addr0, | 312 | info.flags = 0; |
390 | len, pgoff, flags); | 313 | info.low_limit = TASK_UNMAPPED_BASE; |
391 | 314 | info.high_limit = TASK_SIZE; | |
392 | /* | 315 | addr = vm_unmapped_area(&info); |
393 | * Restore the topdown base: | 316 | } |
394 | */ | ||
395 | mm->free_area_cache = base; | ||
396 | mm->cached_hole_size = ~0UL; | ||
397 | 317 | ||
398 | return addr; | 318 | return addr; |
399 | } | 319 | } |
diff --git a/arch/x86/platform/ce4100/ce4100.c b/arch/x86/platform/ce4100/ce4100.c index 92525cb8e54c..f8ab4945892e 100644 --- a/arch/x86/platform/ce4100/ce4100.c +++ b/arch/x86/platform/ce4100/ce4100.c | |||
@@ -105,8 +105,11 @@ static void ce4100_serial_fixup(int port, struct uart_port *up, | |||
105 | up->membase = | 105 | up->membase = |
106 | (void __iomem *)__fix_to_virt(FIX_EARLYCON_MEM_BASE); | 106 | (void __iomem *)__fix_to_virt(FIX_EARLYCON_MEM_BASE); |
107 | up->membase += up->mapbase & ~PAGE_MASK; | 107 | up->membase += up->mapbase & ~PAGE_MASK; |
108 | up->mapbase += port * 0x100; | ||
109 | up->membase += port * 0x100; | ||
108 | up->iotype = UPIO_MEM32; | 110 | up->iotype = UPIO_MEM32; |
109 | up->regshift = 2; | 111 | up->regshift = 2; |
112 | up->irq = 4; | ||
110 | } | 113 | } |
111 | #endif | 114 | #endif |
112 | up->iobase = 0; | 115 | up->iobase = 0; |
diff --git a/arch/x86/vdso/vma.c b/arch/x86/vdso/vma.c index 00aaf047b39f..431e87544411 100644 --- a/arch/x86/vdso/vma.c +++ b/arch/x86/vdso/vma.c | |||
@@ -141,7 +141,7 @@ static unsigned long vdso_addr(unsigned long start, unsigned len) | |||
141 | * unaligned here as a result of stack start randomization. | 141 | * unaligned here as a result of stack start randomization. |
142 | */ | 142 | */ |
143 | addr = PAGE_ALIGN(addr); | 143 | addr = PAGE_ALIGN(addr); |
144 | addr = align_addr(addr, NULL, ALIGN_VDSO); | 144 | addr = align_vdso_addr(addr); |
145 | 145 | ||
146 | return addr; | 146 | return addr; |
147 | } | 147 | } |
diff --git a/arch/xtensa/include/uapi/asm/ioctls.h b/arch/xtensa/include/uapi/asm/ioctls.h index 2aa4cd9f0cec..b4cb1100c0fb 100644 --- a/arch/xtensa/include/uapi/asm/ioctls.h +++ b/arch/xtensa/include/uapi/asm/ioctls.h | |||
@@ -101,6 +101,9 @@ | |||
101 | #define TIOCGDEV _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */ | 101 | #define TIOCGDEV _IOR('T',0x32, unsigned int) /* Get primary device node of /dev/console */ |
102 | #define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */ | 102 | #define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */ |
103 | #define TIOCVHANGUP _IO('T', 0x37) | 103 | #define TIOCVHANGUP _IO('T', 0x37) |
104 | #define TIOCGPKT _IOR('T', 0x38, int) /* Get packet mode state */ | ||
105 | #define TIOCGPTLCK _IOR('T', 0x39, int) /* Get Pty lock state */ | ||
106 | #define TIOCGEXCL _IOR('T', 0x40, int) /* Get exclusive mode state */ | ||
104 | 107 | ||
105 | #define TIOCSERCONFIG _IO('T', 83) | 108 | #define TIOCSERCONFIG _IO('T', 83) |
106 | #define TIOCSERGWILD _IOR('T', 84, int) | 109 | #define TIOCSERGWILD _IOR('T', 84, int) |
diff --git a/arch/xtensa/include/uapi/asm/mman.h b/arch/xtensa/include/uapi/asm/mman.h index 25bc6c1309c3..00eed6786d7e 100644 --- a/arch/xtensa/include/uapi/asm/mman.h +++ b/arch/xtensa/include/uapi/asm/mman.h | |||
@@ -93,4 +93,15 @@ | |||
93 | /* compatibility flags */ | 93 | /* compatibility flags */ |
94 | #define MAP_FILE 0 | 94 | #define MAP_FILE 0 |
95 | 95 | ||
96 | /* | ||
97 | * When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size. | ||
98 | * This gives us 6 bits, which is enough until someone invents 128 bit address | ||
99 | * spaces. | ||
100 | * | ||
101 | * Assume these are all power of twos. | ||
102 | * When 0 use the default page size. | ||
103 | */ | ||
104 | #define MAP_HUGE_SHIFT 26 | ||
105 | #define MAP_HUGE_MASK 0x3f | ||
106 | |||
96 | #endif /* _XTENSA_MMAN_H */ | 107 | #endif /* _XTENSA_MMAN_H */ |
diff --git a/arch/xtensa/platforms/iss/console.c b/arch/xtensa/platforms/iss/console.c index 7e74895eee04..8207a119eee9 100644 --- a/arch/xtensa/platforms/iss/console.c +++ b/arch/xtensa/platforms/iss/console.c | |||
@@ -221,6 +221,7 @@ static __exit void rs_exit(void) | |||
221 | printk("ISS_SERIAL: failed to unregister serial driver (%d)\n", | 221 | printk("ISS_SERIAL: failed to unregister serial driver (%d)\n", |
222 | error); | 222 | error); |
223 | put_tty_driver(serial_driver); | 223 | put_tty_driver(serial_driver); |
224 | tty_port_destroy(&serial_port); | ||
224 | } | 225 | } |
225 | 226 | ||
226 | 227 | ||