diff options
author | Russell King <rmk@dyn-67.arm.linux.org.uk> | 2009-06-08 14:27:13 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2009-06-08 14:27:13 -0400 |
commit | 7698fdedcfa3cab3dd40c9b685590b23be02e267 (patch) | |
tree | 207ddae0f963174356b1a9de7fff8e48a9c1e9c1 /arch | |
parent | 2d8d24935d372175786ebefa8a2de8680831b67f (diff) | |
parent | ae5c8c83735f5fcb09b380944e4854a383006998 (diff) |
Merge branch 'for-rmk' of git://git.marvell.com/orion into devel
Diffstat (limited to 'arch')
101 files changed, 2034 insertions, 720 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 28248b5d6a70..646a5d5eb8c1 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -394,6 +394,7 @@ config ARCH_KIRKWOOD | |||
394 | select CPU_FEROCEON | 394 | select CPU_FEROCEON |
395 | select PCI | 395 | select PCI |
396 | select GENERIC_GPIO | 396 | select GENERIC_GPIO |
397 | select ARCH_REQUIRE_GPIOLIB | ||
397 | select GENERIC_TIME | 398 | select GENERIC_TIME |
398 | select GENERIC_CLOCKEVENTS | 399 | select GENERIC_CLOCKEVENTS |
399 | select PLAT_ORION | 400 | select PLAT_ORION |
@@ -415,6 +416,7 @@ config ARCH_MV78XX0 | |||
415 | select CPU_FEROCEON | 416 | select CPU_FEROCEON |
416 | select PCI | 417 | select PCI |
417 | select GENERIC_GPIO | 418 | select GENERIC_GPIO |
419 | select ARCH_REQUIRE_GPIOLIB | ||
418 | select GENERIC_TIME | 420 | select GENERIC_TIME |
419 | select GENERIC_CLOCKEVENTS | 421 | select GENERIC_CLOCKEVENTS |
420 | select PLAT_ORION | 422 | select PLAT_ORION |
@@ -428,6 +430,7 @@ config ARCH_ORION5X | |||
428 | select CPU_FEROCEON | 430 | select CPU_FEROCEON |
429 | select PCI | 431 | select PCI |
430 | select GENERIC_GPIO | 432 | select GENERIC_GPIO |
433 | select ARCH_REQUIRE_GPIOLIB | ||
431 | select GENERIC_TIME | 434 | select GENERIC_TIME |
432 | select GENERIC_CLOCKEVENTS | 435 | select GENERIC_CLOCKEVENTS |
433 | select PLAT_ORION | 436 | select PLAT_ORION |
diff --git a/arch/arm/configs/kirkwood_defconfig b/arch/arm/configs/kirkwood_defconfig index dcf8153a947d..0a1abb978d7e 100644 --- a/arch/arm/configs/kirkwood_defconfig +++ b/arch/arm/configs/kirkwood_defconfig | |||
@@ -182,6 +182,7 @@ CONFIG_ARCH_KIRKWOOD=y | |||
182 | CONFIG_MACH_DB88F6281_BP=y | 182 | CONFIG_MACH_DB88F6281_BP=y |
183 | CONFIG_MACH_RD88F6192_NAS=y | 183 | CONFIG_MACH_RD88F6192_NAS=y |
184 | CONFIG_MACH_RD88F6281=y | 184 | CONFIG_MACH_RD88F6281=y |
185 | CONFIG_MACH_MV88F6281GTW_GE=y | ||
185 | CONFIG_MACH_SHEEVAPLUG=y | 186 | CONFIG_MACH_SHEEVAPLUG=y |
186 | CONFIG_MACH_TS219=y | 187 | CONFIG_MACH_TS219=y |
187 | CONFIG_PLAT_ORION=y | 188 | CONFIG_PLAT_ORION=y |
@@ -270,7 +271,9 @@ CONFIG_CMDLINE="" | |||
270 | # | 271 | # |
271 | # CPU Power Management | 272 | # CPU Power Management |
272 | # | 273 | # |
273 | # CONFIG_CPU_IDLE is not set | 274 | CONFIG_CPU_IDLE=y |
275 | CONFIG_CPU_IDLE_GOV_LADDER=y | ||
276 | CONFIG_CPU_IDLE_GOV_MENU=y | ||
274 | 277 | ||
275 | # | 278 | # |
276 | # Floating point emulation | 279 | # Floating point emulation |
diff --git a/arch/arm/configs/orion5x_defconfig b/arch/arm/configs/orion5x_defconfig index 5b98f7645119..9e2385293ecb 100644 --- a/arch/arm/configs/orion5x_defconfig +++ b/arch/arm/configs/orion5x_defconfig | |||
@@ -903,7 +903,8 @@ CONFIG_UNIX98_PTYS=y | |||
903 | CONFIG_LEGACY_PTYS=y | 903 | CONFIG_LEGACY_PTYS=y |
904 | CONFIG_LEGACY_PTY_COUNT=16 | 904 | CONFIG_LEGACY_PTY_COUNT=16 |
905 | # CONFIG_IPMI_HANDLER is not set | 905 | # CONFIG_IPMI_HANDLER is not set |
906 | # CONFIG_HW_RANDOM is not set | 906 | CONFIG_HW_RANDOM=m |
907 | CONFIG_HW_RANDOM_TIMERIOMEM=m | ||
907 | # CONFIG_R3964 is not set | 908 | # CONFIG_R3964 is not set |
908 | # CONFIG_APPLICOM is not set | 909 | # CONFIG_APPLICOM is not set |
909 | # CONFIG_RAW_DRIVER is not set | 910 | # CONFIG_RAW_DRIVER is not set |
diff --git a/arch/arm/include/asm/assembler.h b/arch/arm/include/asm/assembler.h index 6116e4893c0a..15f8a092b700 100644 --- a/arch/arm/include/asm/assembler.h +++ b/arch/arm/include/asm/assembler.h | |||
@@ -114,3 +114,16 @@ | |||
114 | .align 3; \ | 114 | .align 3; \ |
115 | .long 9999b,9001f; \ | 115 | .long 9999b,9001f; \ |
116 | .previous | 116 | .previous |
117 | |||
118 | /* | ||
119 | * SMP data memory barrier | ||
120 | */ | ||
121 | .macro smp_dmb | ||
122 | #ifdef CONFIG_SMP | ||
123 | #if __LINUX_ARM_ARCH__ >= 7 | ||
124 | dmb | ||
125 | #elif __LINUX_ARM_ARCH__ == 6 | ||
126 | mcr p15, 0, r0, c7, c10, 5 @ dmb | ||
127 | #endif | ||
128 | #endif | ||
129 | .endm | ||
diff --git a/arch/arm/include/asm/atomic.h b/arch/arm/include/asm/atomic.h index ee99723b3a6c..16b52f397983 100644 --- a/arch/arm/include/asm/atomic.h +++ b/arch/arm/include/asm/atomic.h | |||
@@ -44,11 +44,29 @@ static inline void atomic_set(atomic_t *v, int i) | |||
44 | : "cc"); | 44 | : "cc"); |
45 | } | 45 | } |
46 | 46 | ||
47 | static inline void atomic_add(int i, atomic_t *v) | ||
48 | { | ||
49 | unsigned long tmp; | ||
50 | int result; | ||
51 | |||
52 | __asm__ __volatile__("@ atomic_add\n" | ||
53 | "1: ldrex %0, [%2]\n" | ||
54 | " add %0, %0, %3\n" | ||
55 | " strex %1, %0, [%2]\n" | ||
56 | " teq %1, #0\n" | ||
57 | " bne 1b" | ||
58 | : "=&r" (result), "=&r" (tmp) | ||
59 | : "r" (&v->counter), "Ir" (i) | ||
60 | : "cc"); | ||
61 | } | ||
62 | |||
47 | static inline int atomic_add_return(int i, atomic_t *v) | 63 | static inline int atomic_add_return(int i, atomic_t *v) |
48 | { | 64 | { |
49 | unsigned long tmp; | 65 | unsigned long tmp; |
50 | int result; | 66 | int result; |
51 | 67 | ||
68 | smp_mb(); | ||
69 | |||
52 | __asm__ __volatile__("@ atomic_add_return\n" | 70 | __asm__ __volatile__("@ atomic_add_return\n" |
53 | "1: ldrex %0, [%2]\n" | 71 | "1: ldrex %0, [%2]\n" |
54 | " add %0, %0, %3\n" | 72 | " add %0, %0, %3\n" |
@@ -59,14 +77,34 @@ static inline int atomic_add_return(int i, atomic_t *v) | |||
59 | : "r" (&v->counter), "Ir" (i) | 77 | : "r" (&v->counter), "Ir" (i) |
60 | : "cc"); | 78 | : "cc"); |
61 | 79 | ||
80 | smp_mb(); | ||
81 | |||
62 | return result; | 82 | return result; |
63 | } | 83 | } |
64 | 84 | ||
85 | static inline void atomic_sub(int i, atomic_t *v) | ||
86 | { | ||
87 | unsigned long tmp; | ||
88 | int result; | ||
89 | |||
90 | __asm__ __volatile__("@ atomic_sub\n" | ||
91 | "1: ldrex %0, [%2]\n" | ||
92 | " sub %0, %0, %3\n" | ||
93 | " strex %1, %0, [%2]\n" | ||
94 | " teq %1, #0\n" | ||
95 | " bne 1b" | ||
96 | : "=&r" (result), "=&r" (tmp) | ||
97 | : "r" (&v->counter), "Ir" (i) | ||
98 | : "cc"); | ||
99 | } | ||
100 | |||
65 | static inline int atomic_sub_return(int i, atomic_t *v) | 101 | static inline int atomic_sub_return(int i, atomic_t *v) |
66 | { | 102 | { |
67 | unsigned long tmp; | 103 | unsigned long tmp; |
68 | int result; | 104 | int result; |
69 | 105 | ||
106 | smp_mb(); | ||
107 | |||
70 | __asm__ __volatile__("@ atomic_sub_return\n" | 108 | __asm__ __volatile__("@ atomic_sub_return\n" |
71 | "1: ldrex %0, [%2]\n" | 109 | "1: ldrex %0, [%2]\n" |
72 | " sub %0, %0, %3\n" | 110 | " sub %0, %0, %3\n" |
@@ -77,6 +115,8 @@ static inline int atomic_sub_return(int i, atomic_t *v) | |||
77 | : "r" (&v->counter), "Ir" (i) | 115 | : "r" (&v->counter), "Ir" (i) |
78 | : "cc"); | 116 | : "cc"); |
79 | 117 | ||
118 | smp_mb(); | ||
119 | |||
80 | return result; | 120 | return result; |
81 | } | 121 | } |
82 | 122 | ||
@@ -84,6 +124,8 @@ static inline int atomic_cmpxchg(atomic_t *ptr, int old, int new) | |||
84 | { | 124 | { |
85 | unsigned long oldval, res; | 125 | unsigned long oldval, res; |
86 | 126 | ||
127 | smp_mb(); | ||
128 | |||
87 | do { | 129 | do { |
88 | __asm__ __volatile__("@ atomic_cmpxchg\n" | 130 | __asm__ __volatile__("@ atomic_cmpxchg\n" |
89 | "ldrex %1, [%2]\n" | 131 | "ldrex %1, [%2]\n" |
@@ -95,6 +137,8 @@ static inline int atomic_cmpxchg(atomic_t *ptr, int old, int new) | |||
95 | : "cc"); | 137 | : "cc"); |
96 | } while (res); | 138 | } while (res); |
97 | 139 | ||
140 | smp_mb(); | ||
141 | |||
98 | return oldval; | 142 | return oldval; |
99 | } | 143 | } |
100 | 144 | ||
@@ -135,6 +179,7 @@ static inline int atomic_add_return(int i, atomic_t *v) | |||
135 | 179 | ||
136 | return val; | 180 | return val; |
137 | } | 181 | } |
182 | #define atomic_add(i, v) (void) atomic_add_return(i, v) | ||
138 | 183 | ||
139 | static inline int atomic_sub_return(int i, atomic_t *v) | 184 | static inline int atomic_sub_return(int i, atomic_t *v) |
140 | { | 185 | { |
@@ -148,6 +193,7 @@ static inline int atomic_sub_return(int i, atomic_t *v) | |||
148 | 193 | ||
149 | return val; | 194 | return val; |
150 | } | 195 | } |
196 | #define atomic_sub(i, v) (void) atomic_sub_return(i, v) | ||
151 | 197 | ||
152 | static inline int atomic_cmpxchg(atomic_t *v, int old, int new) | 198 | static inline int atomic_cmpxchg(atomic_t *v, int old, int new) |
153 | { | 199 | { |
@@ -187,10 +233,8 @@ static inline int atomic_add_unless(atomic_t *v, int a, int u) | |||
187 | } | 233 | } |
188 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) | 234 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) |
189 | 235 | ||
190 | #define atomic_add(i, v) (void) atomic_add_return(i, v) | 236 | #define atomic_inc(v) atomic_add(1, v) |
191 | #define atomic_inc(v) (void) atomic_add_return(1, v) | 237 | #define atomic_dec(v) atomic_sub(1, v) |
192 | #define atomic_sub(i, v) (void) atomic_sub_return(i, v) | ||
193 | #define atomic_dec(v) (void) atomic_sub_return(1, v) | ||
194 | 238 | ||
195 | #define atomic_inc_and_test(v) (atomic_add_return(1, v) == 0) | 239 | #define atomic_inc_and_test(v) (atomic_add_return(1, v) == 0) |
196 | #define atomic_dec_and_test(v) (atomic_sub_return(1, v) == 0) | 240 | #define atomic_dec_and_test(v) (atomic_sub_return(1, v) == 0) |
@@ -200,11 +244,10 @@ static inline int atomic_add_unless(atomic_t *v, int a, int u) | |||
200 | 244 | ||
201 | #define atomic_add_negative(i,v) (atomic_add_return(i, v) < 0) | 245 | #define atomic_add_negative(i,v) (atomic_add_return(i, v) < 0) |
202 | 246 | ||
203 | /* Atomic operations are already serializing on ARM */ | 247 | #define smp_mb__before_atomic_dec() smp_mb() |
204 | #define smp_mb__before_atomic_dec() barrier() | 248 | #define smp_mb__after_atomic_dec() smp_mb() |
205 | #define smp_mb__after_atomic_dec() barrier() | 249 | #define smp_mb__before_atomic_inc() smp_mb() |
206 | #define smp_mb__before_atomic_inc() barrier() | 250 | #define smp_mb__after_atomic_inc() smp_mb() |
207 | #define smp_mb__after_atomic_inc() barrier() | ||
208 | 251 | ||
209 | #include <asm-generic/atomic.h> | 252 | #include <asm-generic/atomic.h> |
210 | #endif | 253 | #endif |
diff --git a/arch/arm/include/asm/flat.h b/arch/arm/include/asm/flat.h index 1d77e51907f6..59426a4595c9 100644 --- a/arch/arm/include/asm/flat.h +++ b/arch/arm/include/asm/flat.h | |||
@@ -5,9 +5,6 @@ | |||
5 | #ifndef __ARM_FLAT_H__ | 5 | #ifndef __ARM_FLAT_H__ |
6 | #define __ARM_FLAT_H__ | 6 | #define __ARM_FLAT_H__ |
7 | 7 | ||
8 | /* An odd number of words will be pushed after this alignment, so | ||
9 | deliberately misalign the value. */ | ||
10 | #define flat_stack_align(sp) sp = (void *)(((unsigned long)(sp) - 4) | 4) | ||
11 | #define flat_argvp_envp_on_stack() 1 | 8 | #define flat_argvp_envp_on_stack() 1 |
12 | #define flat_old_ram_flag(flags) (flags) | 9 | #define flat_old_ram_flag(flags) (flags) |
13 | #define flat_reloc_valid(reloc, size) ((reloc) <= (size)) | 10 | #define flat_reloc_valid(reloc, size) ((reloc) <= (size)) |
diff --git a/arch/arm/include/asm/sizes.h b/arch/arm/include/asm/sizes.h index ada93a8fc2ef..4fc1565e4f93 100644 --- a/arch/arm/include/asm/sizes.h +++ b/arch/arm/include/asm/sizes.h | |||
@@ -29,6 +29,7 @@ | |||
29 | #define SZ_512 0x00000200 | 29 | #define SZ_512 0x00000200 |
30 | 30 | ||
31 | #define SZ_1K 0x00000400 | 31 | #define SZ_1K 0x00000400 |
32 | #define SZ_2K 0x00000800 | ||
32 | #define SZ_4K 0x00001000 | 33 | #define SZ_4K 0x00001000 |
33 | #define SZ_8K 0x00002000 | 34 | #define SZ_8K 0x00002000 |
34 | #define SZ_16K 0x00004000 | 35 | #define SZ_16K 0x00004000 |
diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h index bd4dc8ed53d5..d65b2f5bf41f 100644 --- a/arch/arm/include/asm/system.h +++ b/arch/arm/include/asm/system.h | |||
@@ -248,6 +248,8 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size | |||
248 | unsigned int tmp; | 248 | unsigned int tmp; |
249 | #endif | 249 | #endif |
250 | 250 | ||
251 | smp_mb(); | ||
252 | |||
251 | switch (size) { | 253 | switch (size) { |
252 | #if __LINUX_ARM_ARCH__ >= 6 | 254 | #if __LINUX_ARM_ARCH__ >= 6 |
253 | case 1: | 255 | case 1: |
@@ -307,6 +309,7 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size | |||
307 | __bad_xchg(ptr, size), ret = 0; | 309 | __bad_xchg(ptr, size), ret = 0; |
308 | break; | 310 | break; |
309 | } | 311 | } |
312 | smp_mb(); | ||
310 | 313 | ||
311 | return ret; | 314 | return ret; |
312 | } | 315 | } |
@@ -316,6 +319,12 @@ extern void enable_hlt(void); | |||
316 | 319 | ||
317 | #include <asm-generic/cmpxchg-local.h> | 320 | #include <asm-generic/cmpxchg-local.h> |
318 | 321 | ||
322 | #if __LINUX_ARM_ARCH__ < 6 | ||
323 | |||
324 | #ifdef CONFIG_SMP | ||
325 | #error "SMP is not supported on this platform" | ||
326 | #endif | ||
327 | |||
319 | /* | 328 | /* |
320 | * cmpxchg_local and cmpxchg64_local are atomic wrt current CPU. Always make | 329 | * cmpxchg_local and cmpxchg64_local are atomic wrt current CPU. Always make |
321 | * them available. | 330 | * them available. |
@@ -329,6 +338,173 @@ extern void enable_hlt(void); | |||
329 | #include <asm-generic/cmpxchg.h> | 338 | #include <asm-generic/cmpxchg.h> |
330 | #endif | 339 | #endif |
331 | 340 | ||
341 | #else /* __LINUX_ARM_ARCH__ >= 6 */ | ||
342 | |||
343 | extern void __bad_cmpxchg(volatile void *ptr, int size); | ||
344 | |||
345 | /* | ||
346 | * cmpxchg only support 32-bits operands on ARMv6. | ||
347 | */ | ||
348 | |||
349 | static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old, | ||
350 | unsigned long new, int size) | ||
351 | { | ||
352 | unsigned long oldval, res; | ||
353 | |||
354 | switch (size) { | ||
355 | #ifdef CONFIG_CPU_32v6K | ||
356 | case 1: | ||
357 | do { | ||
358 | asm volatile("@ __cmpxchg1\n" | ||
359 | " ldrexb %1, [%2]\n" | ||
360 | " mov %0, #0\n" | ||
361 | " teq %1, %3\n" | ||
362 | " strexbeq %0, %4, [%2]\n" | ||
363 | : "=&r" (res), "=&r" (oldval) | ||
364 | : "r" (ptr), "Ir" (old), "r" (new) | ||
365 | : "memory", "cc"); | ||
366 | } while (res); | ||
367 | break; | ||
368 | case 2: | ||
369 | do { | ||
370 | asm volatile("@ __cmpxchg1\n" | ||
371 | " ldrexh %1, [%2]\n" | ||
372 | " mov %0, #0\n" | ||
373 | " teq %1, %3\n" | ||
374 | " strexheq %0, %4, [%2]\n" | ||
375 | : "=&r" (res), "=&r" (oldval) | ||
376 | : "r" (ptr), "Ir" (old), "r" (new) | ||
377 | : "memory", "cc"); | ||
378 | } while (res); | ||
379 | break; | ||
380 | #endif /* CONFIG_CPU_32v6K */ | ||
381 | case 4: | ||
382 | do { | ||
383 | asm volatile("@ __cmpxchg4\n" | ||
384 | " ldrex %1, [%2]\n" | ||
385 | " mov %0, #0\n" | ||
386 | " teq %1, %3\n" | ||
387 | " strexeq %0, %4, [%2]\n" | ||
388 | : "=&r" (res), "=&r" (oldval) | ||
389 | : "r" (ptr), "Ir" (old), "r" (new) | ||
390 | : "memory", "cc"); | ||
391 | } while (res); | ||
392 | break; | ||
393 | default: | ||
394 | __bad_cmpxchg(ptr, size); | ||
395 | oldval = 0; | ||
396 | } | ||
397 | |||
398 | return oldval; | ||
399 | } | ||
400 | |||
401 | static inline unsigned long __cmpxchg_mb(volatile void *ptr, unsigned long old, | ||
402 | unsigned long new, int size) | ||
403 | { | ||
404 | unsigned long ret; | ||
405 | |||
406 | smp_mb(); | ||
407 | ret = __cmpxchg(ptr, old, new, size); | ||
408 | smp_mb(); | ||
409 | |||
410 | return ret; | ||
411 | } | ||
412 | |||
413 | #define cmpxchg(ptr,o,n) \ | ||
414 | ((__typeof__(*(ptr)))__cmpxchg_mb((ptr), \ | ||
415 | (unsigned long)(o), \ | ||
416 | (unsigned long)(n), \ | ||
417 | sizeof(*(ptr)))) | ||
418 | |||
419 | static inline unsigned long __cmpxchg_local(volatile void *ptr, | ||
420 | unsigned long old, | ||
421 | unsigned long new, int size) | ||
422 | { | ||
423 | unsigned long ret; | ||
424 | |||
425 | switch (size) { | ||
426 | #ifndef CONFIG_CPU_32v6K | ||
427 | case 1: | ||
428 | case 2: | ||
429 | ret = __cmpxchg_local_generic(ptr, old, new, size); | ||
430 | break; | ||
431 | #endif /* !CONFIG_CPU_32v6K */ | ||
432 | default: | ||
433 | ret = __cmpxchg(ptr, old, new, size); | ||
434 | } | ||
435 | |||
436 | return ret; | ||
437 | } | ||
438 | |||
439 | #define cmpxchg_local(ptr,o,n) \ | ||
440 | ((__typeof__(*(ptr)))__cmpxchg_local((ptr), \ | ||
441 | (unsigned long)(o), \ | ||
442 | (unsigned long)(n), \ | ||
443 | sizeof(*(ptr)))) | ||
444 | |||
445 | #ifdef CONFIG_CPU_32v6K | ||
446 | |||
447 | /* | ||
448 | * Note : ARMv7-M (currently unsupported by Linux) does not support | ||
449 | * ldrexd/strexd. If ARMv7-M is ever supported by the Linux kernel, it should | ||
450 | * not be allowed to use __cmpxchg64. | ||
451 | */ | ||
452 | static inline unsigned long long __cmpxchg64(volatile void *ptr, | ||
453 | unsigned long long old, | ||
454 | unsigned long long new) | ||
455 | { | ||
456 | register unsigned long long oldval asm("r0"); | ||
457 | register unsigned long long __old asm("r2") = old; | ||
458 | register unsigned long long __new asm("r4") = new; | ||
459 | unsigned long res; | ||
460 | |||
461 | do { | ||
462 | asm volatile( | ||
463 | " @ __cmpxchg8\n" | ||
464 | " ldrexd %1, %H1, [%2]\n" | ||
465 | " mov %0, #0\n" | ||
466 | " teq %1, %3\n" | ||
467 | " teqeq %H1, %H3\n" | ||
468 | " strexdeq %0, %4, %H4, [%2]\n" | ||
469 | : "=&r" (res), "=&r" (oldval) | ||
470 | : "r" (ptr), "Ir" (__old), "r" (__new) | ||
471 | : "memory", "cc"); | ||
472 | } while (res); | ||
473 | |||
474 | return oldval; | ||
475 | } | ||
476 | |||
477 | static inline unsigned long long __cmpxchg64_mb(volatile void *ptr, | ||
478 | unsigned long long old, | ||
479 | unsigned long long new) | ||
480 | { | ||
481 | unsigned long long ret; | ||
482 | |||
483 | smp_mb(); | ||
484 | ret = __cmpxchg64(ptr, old, new); | ||
485 | smp_mb(); | ||
486 | |||
487 | return ret; | ||
488 | } | ||
489 | |||
490 | #define cmpxchg64(ptr,o,n) \ | ||
491 | ((__typeof__(*(ptr)))__cmpxchg64_mb((ptr), \ | ||
492 | (unsigned long long)(o), \ | ||
493 | (unsigned long long)(n))) | ||
494 | |||
495 | #define cmpxchg64_local(ptr,o,n) \ | ||
496 | ((__typeof__(*(ptr)))__cmpxchg64((ptr), \ | ||
497 | (unsigned long long)(o), \ | ||
498 | (unsigned long long)(n))) | ||
499 | |||
500 | #else /* !CONFIG_CPU_32v6K */ | ||
501 | |||
502 | #define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n)) | ||
503 | |||
504 | #endif /* CONFIG_CPU_32v6K */ | ||
505 | |||
506 | #endif /* __LINUX_ARM_ARCH__ >= 6 */ | ||
507 | |||
332 | #endif /* __ASSEMBLY__ */ | 508 | #endif /* __ASSEMBLY__ */ |
333 | 509 | ||
334 | #define arch_align_stack(x) (x) | 510 | #define arch_align_stack(x) (x) |
diff --git a/arch/arm/kernel/elf.c b/arch/arm/kernel/elf.c index d4a0da1e48f4..950391f194c4 100644 --- a/arch/arm/kernel/elf.c +++ b/arch/arm/kernel/elf.c | |||
@@ -78,6 +78,15 @@ int arm_elf_read_implies_exec(const struct elf32_hdr *x, int executable_stack) | |||
78 | return 1; | 78 | return 1; |
79 | if (cpu_architecture() < CPU_ARCH_ARMv6) | 79 | if (cpu_architecture() < CPU_ARCH_ARMv6) |
80 | return 1; | 80 | return 1; |
81 | #if !defined(CONFIG_AEABI) || defined(CONFIG_OABI_COMPAT) | ||
82 | /* | ||
83 | * If we have support for OABI programs, we can never allow NX | ||
84 | * support - our signal syscall restart mechanism relies upon | ||
85 | * being able to execute code placed on the user stack. | ||
86 | */ | ||
87 | return 1; | ||
88 | #else | ||
81 | return 0; | 89 | return 0; |
90 | #endif | ||
82 | } | 91 | } |
83 | EXPORT_SYMBOL(arm_elf_read_implies_exec); | 92 | EXPORT_SYMBOL(arm_elf_read_implies_exec); |
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index d662a2f1fd85..83b1da6b7baa 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
@@ -815,10 +815,7 @@ __kuser_helper_start: | |||
815 | */ | 815 | */ |
816 | 816 | ||
817 | __kuser_memory_barrier: @ 0xffff0fa0 | 817 | __kuser_memory_barrier: @ 0xffff0fa0 |
818 | 818 | smp_dmb | |
819 | #if __LINUX_ARM_ARCH__ >= 6 && defined(CONFIG_SMP) | ||
820 | mcr p15, 0, r0, c7, c10, 5 @ dmb | ||
821 | #endif | ||
822 | usr_ret lr | 819 | usr_ret lr |
823 | 820 | ||
824 | .align 5 | 821 | .align 5 |
diff --git a/arch/arm/lib/bitops.h b/arch/arm/lib/bitops.h index 2e787d40d599..c7f2627385e7 100644 --- a/arch/arm/lib/bitops.h +++ b/arch/arm/lib/bitops.h | |||
@@ -18,12 +18,14 @@ | |||
18 | mov r2, #1 | 18 | mov r2, #1 |
19 | add r1, r1, r0, lsr #3 @ Get byte offset | 19 | add r1, r1, r0, lsr #3 @ Get byte offset |
20 | mov r3, r2, lsl r3 @ create mask | 20 | mov r3, r2, lsl r3 @ create mask |
21 | smp_dmb | ||
21 | 1: ldrexb r2, [r1] | 22 | 1: ldrexb r2, [r1] |
22 | ands r0, r2, r3 @ save old value of bit | 23 | ands r0, r2, r3 @ save old value of bit |
23 | \instr r2, r2, r3 @ toggle bit | 24 | \instr r2, r2, r3 @ toggle bit |
24 | strexb ip, r2, [r1] | 25 | strexb ip, r2, [r1] |
25 | cmp ip, #0 | 26 | cmp ip, #0 |
26 | bne 1b | 27 | bne 1b |
28 | smp_dmb | ||
27 | cmp r0, #0 | 29 | cmp r0, #0 |
28 | movne r0, #1 | 30 | movne r0, #1 |
29 | 2: mov pc, lr | 31 | 2: mov pc, lr |
diff --git a/arch/arm/mach-gemini/include/mach/hardware.h b/arch/arm/mach-gemini/include/mach/hardware.h index de6752674c05..213a4fcfeb1c 100644 --- a/arch/arm/mach-gemini/include/mach/hardware.h +++ b/arch/arm/mach-gemini/include/mach/hardware.h | |||
@@ -15,10 +15,9 @@ | |||
15 | /* | 15 | /* |
16 | * Memory Map definitions | 16 | * Memory Map definitions |
17 | */ | 17 | */ |
18 | /* FIXME: Does it really swap SRAM like this? */ | ||
19 | #ifdef CONFIG_GEMINI_MEM_SWAP | 18 | #ifdef CONFIG_GEMINI_MEM_SWAP |
20 | # define GEMINI_DRAM_BASE 0x00000000 | 19 | # define GEMINI_DRAM_BASE 0x00000000 |
21 | # define GEMINI_SRAM_BASE 0x20000000 | 20 | # define GEMINI_SRAM_BASE 0x70000000 |
22 | #else | 21 | #else |
23 | # define GEMINI_SRAM_BASE 0x00000000 | 22 | # define GEMINI_SRAM_BASE 0x00000000 |
24 | # define GEMINI_DRAM_BASE 0x10000000 | 23 | # define GEMINI_DRAM_BASE 0x10000000 |
diff --git a/arch/arm/mach-kirkwood/Kconfig b/arch/arm/mach-kirkwood/Kconfig index b5421cccd7e1..25100f7acf4c 100644 --- a/arch/arm/mach-kirkwood/Kconfig +++ b/arch/arm/mach-kirkwood/Kconfig | |||
@@ -20,6 +20,12 @@ config MACH_RD88F6281 | |||
20 | Say 'Y' here if you want your kernel to support the | 20 | Say 'Y' here if you want your kernel to support the |
21 | Marvell RD-88F6281 Reference Board. | 21 | Marvell RD-88F6281 Reference Board. |
22 | 22 | ||
23 | config MACH_MV88F6281GTW_GE | ||
24 | bool "Marvell 88F6281 GTW GE Board" | ||
25 | help | ||
26 | Say 'Y' here if you want your kernel to support the | ||
27 | Marvell 88F6281 GTW GE Board. | ||
28 | |||
23 | config MACH_SHEEVAPLUG | 29 | config MACH_SHEEVAPLUG |
24 | bool "Marvell SheevaPlug Reference Board" | 30 | bool "Marvell SheevaPlug Reference Board" |
25 | help | 31 | help |
diff --git a/arch/arm/mach-kirkwood/Makefile b/arch/arm/mach-kirkwood/Makefile index 8f03c9b9bdd9..9dd680e964d6 100644 --- a/arch/arm/mach-kirkwood/Makefile +++ b/arch/arm/mach-kirkwood/Makefile | |||
@@ -3,5 +3,8 @@ obj-y += common.o addr-map.o irq.o pcie.o mpp.o | |||
3 | obj-$(CONFIG_MACH_DB88F6281_BP) += db88f6281-bp-setup.o | 3 | obj-$(CONFIG_MACH_DB88F6281_BP) += db88f6281-bp-setup.o |
4 | obj-$(CONFIG_MACH_RD88F6192_NAS) += rd88f6192-nas-setup.o | 4 | obj-$(CONFIG_MACH_RD88F6192_NAS) += rd88f6192-nas-setup.o |
5 | obj-$(CONFIG_MACH_RD88F6281) += rd88f6281-setup.o | 5 | obj-$(CONFIG_MACH_RD88F6281) += rd88f6281-setup.o |
6 | obj-$(CONFIG_MACH_MV88F6281GTW_GE) += mv88f6281gtw_ge-setup.o | ||
6 | obj-$(CONFIG_MACH_SHEEVAPLUG) += sheevaplug-setup.o | 7 | obj-$(CONFIG_MACH_SHEEVAPLUG) += sheevaplug-setup.o |
7 | obj-$(CONFIG_MACH_TS219) += ts219-setup.o | 8 | obj-$(CONFIG_MACH_TS219) += ts219-setup.o |
9 | |||
10 | obj-$(CONFIG_CPU_IDLE) += cpuidle.o | ||
diff --git a/arch/arm/mach-kirkwood/addr-map.c b/arch/arm/mach-kirkwood/addr-map.c index 5db4f0bbe5ee..1da5d1c18ecb 100644 --- a/arch/arm/mach-kirkwood/addr-map.c +++ b/arch/arm/mach-kirkwood/addr-map.c | |||
@@ -20,6 +20,7 @@ | |||
20 | */ | 20 | */ |
21 | #define TARGET_DDR 0 | 21 | #define TARGET_DDR 0 |
22 | #define TARGET_DEV_BUS 1 | 22 | #define TARGET_DEV_BUS 1 |
23 | #define TARGET_SRAM 3 | ||
23 | #define TARGET_PCIE 4 | 24 | #define TARGET_PCIE 4 |
24 | #define ATTR_DEV_SPI_ROM 0x1e | 25 | #define ATTR_DEV_SPI_ROM 0x1e |
25 | #define ATTR_DEV_BOOT 0x1d | 26 | #define ATTR_DEV_BOOT 0x1d |
@@ -30,6 +31,7 @@ | |||
30 | #define ATTR_DEV_CS0 0x3e | 31 | #define ATTR_DEV_CS0 0x3e |
31 | #define ATTR_PCIE_IO 0xe0 | 32 | #define ATTR_PCIE_IO 0xe0 |
32 | #define ATTR_PCIE_MEM 0xe8 | 33 | #define ATTR_PCIE_MEM 0xe8 |
34 | #define ATTR_SRAM 0x01 | ||
33 | 35 | ||
34 | /* | 36 | /* |
35 | * Helpers to get DDR bank info | 37 | * Helpers to get DDR bank info |
@@ -48,7 +50,6 @@ | |||
48 | 50 | ||
49 | 51 | ||
50 | struct mbus_dram_target_info kirkwood_mbus_dram_info; | 52 | struct mbus_dram_target_info kirkwood_mbus_dram_info; |
51 | static int __initdata win_alloc_count; | ||
52 | 53 | ||
53 | static int __init cpu_win_can_remap(int win) | 54 | static int __init cpu_win_can_remap(int win) |
54 | { | 55 | { |
@@ -112,7 +113,11 @@ void __init kirkwood_setup_cpu_mbus(void) | |||
112 | setup_cpu_win(2, KIRKWOOD_NAND_MEM_PHYS_BASE, KIRKWOOD_NAND_MEM_SIZE, | 113 | setup_cpu_win(2, KIRKWOOD_NAND_MEM_PHYS_BASE, KIRKWOOD_NAND_MEM_SIZE, |
113 | TARGET_DEV_BUS, ATTR_DEV_NAND, -1); | 114 | TARGET_DEV_BUS, ATTR_DEV_NAND, -1); |
114 | 115 | ||
115 | win_alloc_count = 3; | 116 | /* |
117 | * Setup window for SRAM. | ||
118 | */ | ||
119 | setup_cpu_win(3, KIRKWOOD_SRAM_PHYS_BASE, KIRKWOOD_SRAM_SIZE, | ||
120 | TARGET_SRAM, ATTR_SRAM, -1); | ||
116 | 121 | ||
117 | /* | 122 | /* |
118 | * Setup MBUS dram target info. | 123 | * Setup MBUS dram target info. |
@@ -140,8 +145,3 @@ void __init kirkwood_setup_cpu_mbus(void) | |||
140 | } | 145 | } |
141 | kirkwood_mbus_dram_info.num_cs = cs; | 146 | kirkwood_mbus_dram_info.num_cs = cs; |
142 | } | 147 | } |
143 | |||
144 | void __init kirkwood_setup_sram_win(u32 base, u32 size) | ||
145 | { | ||
146 | setup_cpu_win(win_alloc_count++, base, size, 0x03, 0x00, -1); | ||
147 | } | ||
diff --git a/arch/arm/mach-kirkwood/common.c b/arch/arm/mach-kirkwood/common.c index eeb00240d784..0f6919838011 100644 --- a/arch/arm/mach-kirkwood/common.c +++ b/arch/arm/mach-kirkwood/common.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/mv643xx_eth.h> | 16 | #include <linux/mv643xx_eth.h> |
17 | #include <linux/mv643xx_i2c.h> | 17 | #include <linux/mv643xx_i2c.h> |
18 | #include <linux/ata_platform.h> | 18 | #include <linux/ata_platform.h> |
19 | #include <linux/mtd/nand.h> | ||
19 | #include <linux/spi/orion_spi.h> | 20 | #include <linux/spi/orion_spi.h> |
20 | #include <net/dsa.h> | 21 | #include <net/dsa.h> |
21 | #include <asm/page.h> | 22 | #include <asm/page.h> |
@@ -29,6 +30,7 @@ | |||
29 | #include <plat/mvsdio.h> | 30 | #include <plat/mvsdio.h> |
30 | #include <plat/mv_xor.h> | 31 | #include <plat/mv_xor.h> |
31 | #include <plat/orion_nand.h> | 32 | #include <plat/orion_nand.h> |
33 | #include <plat/orion_wdt.h> | ||
32 | #include <plat/time.h> | 34 | #include <plat/time.h> |
33 | #include "common.h" | 35 | #include "common.h" |
34 | 36 | ||
@@ -54,6 +56,13 @@ void __init kirkwood_map_io(void) | |||
54 | iotable_init(kirkwood_io_desc, ARRAY_SIZE(kirkwood_io_desc)); | 56 | iotable_init(kirkwood_io_desc, ARRAY_SIZE(kirkwood_io_desc)); |
55 | } | 57 | } |
56 | 58 | ||
59 | /* | ||
60 | * Default clock control bits. Any bit _not_ set in this variable | ||
61 | * will be cleared from the hardware after platform devices have been | ||
62 | * registered. Some reserved bits must be set to 1. | ||
63 | */ | ||
64 | unsigned int kirkwood_clk_ctrl = CGC_DUNIT | CGC_RESERVED; | ||
65 | |||
57 | 66 | ||
58 | /***************************************************************************** | 67 | /***************************************************************************** |
59 | * EHCI | 68 | * EHCI |
@@ -95,6 +104,7 @@ static struct platform_device kirkwood_ehci = { | |||
95 | 104 | ||
96 | void __init kirkwood_ehci_init(void) | 105 | void __init kirkwood_ehci_init(void) |
97 | { | 106 | { |
107 | kirkwood_clk_ctrl |= CGC_USB0; | ||
98 | platform_device_register(&kirkwood_ehci); | 108 | platform_device_register(&kirkwood_ehci); |
99 | } | 109 | } |
100 | 110 | ||
@@ -144,10 +154,14 @@ static struct platform_device kirkwood_ge00 = { | |||
144 | .id = 0, | 154 | .id = 0, |
145 | .num_resources = 1, | 155 | .num_resources = 1, |
146 | .resource = kirkwood_ge00_resources, | 156 | .resource = kirkwood_ge00_resources, |
157 | .dev = { | ||
158 | .coherent_dma_mask = 0xffffffff, | ||
159 | }, | ||
147 | }; | 160 | }; |
148 | 161 | ||
149 | void __init kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data) | 162 | void __init kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data) |
150 | { | 163 | { |
164 | kirkwood_clk_ctrl |= CGC_GE0; | ||
151 | eth_data->shared = &kirkwood_ge00_shared; | 165 | eth_data->shared = &kirkwood_ge00_shared; |
152 | kirkwood_ge00.dev.platform_data = eth_data; | 166 | kirkwood_ge00.dev.platform_data = eth_data; |
153 | 167 | ||
@@ -202,10 +216,14 @@ static struct platform_device kirkwood_ge01 = { | |||
202 | .id = 1, | 216 | .id = 1, |
203 | .num_resources = 1, | 217 | .num_resources = 1, |
204 | .resource = kirkwood_ge01_resources, | 218 | .resource = kirkwood_ge01_resources, |
219 | .dev = { | ||
220 | .coherent_dma_mask = 0xffffffff, | ||
221 | }, | ||
205 | }; | 222 | }; |
206 | 223 | ||
207 | void __init kirkwood_ge01_init(struct mv643xx_eth_platform_data *eth_data) | 224 | void __init kirkwood_ge01_init(struct mv643xx_eth_platform_data *eth_data) |
208 | { | 225 | { |
226 | kirkwood_clk_ctrl |= CGC_GE1; | ||
209 | eth_data->shared = &kirkwood_ge01_shared; | 227 | eth_data->shared = &kirkwood_ge01_shared; |
210 | kirkwood_ge01.dev.platform_data = eth_data; | 228 | kirkwood_ge01.dev.platform_data = eth_data; |
211 | 229 | ||
@@ -252,6 +270,43 @@ void __init kirkwood_ge00_switch_init(struct dsa_platform_data *d, int irq) | |||
252 | 270 | ||
253 | 271 | ||
254 | /***************************************************************************** | 272 | /***************************************************************************** |
273 | * NAND flash | ||
274 | ****************************************************************************/ | ||
275 | static struct resource kirkwood_nand_resource = { | ||
276 | .flags = IORESOURCE_MEM, | ||
277 | .start = KIRKWOOD_NAND_MEM_PHYS_BASE, | ||
278 | .end = KIRKWOOD_NAND_MEM_PHYS_BASE + | ||
279 | KIRKWOOD_NAND_MEM_SIZE - 1, | ||
280 | }; | ||
281 | |||
282 | static struct orion_nand_data kirkwood_nand_data = { | ||
283 | .cle = 0, | ||
284 | .ale = 1, | ||
285 | .width = 8, | ||
286 | }; | ||
287 | |||
288 | static struct platform_device kirkwood_nand_flash = { | ||
289 | .name = "orion_nand", | ||
290 | .id = -1, | ||
291 | .dev = { | ||
292 | .platform_data = &kirkwood_nand_data, | ||
293 | }, | ||
294 | .resource = &kirkwood_nand_resource, | ||
295 | .num_resources = 1, | ||
296 | }; | ||
297 | |||
298 | void __init kirkwood_nand_init(struct mtd_partition *parts, int nr_parts, | ||
299 | int chip_delay) | ||
300 | { | ||
301 | kirkwood_clk_ctrl |= CGC_RUNIT; | ||
302 | kirkwood_nand_data.parts = parts; | ||
303 | kirkwood_nand_data.nr_parts = nr_parts; | ||
304 | kirkwood_nand_data.chip_delay = chip_delay; | ||
305 | platform_device_register(&kirkwood_nand_flash); | ||
306 | } | ||
307 | |||
308 | |||
309 | /***************************************************************************** | ||
255 | * SoC RTC | 310 | * SoC RTC |
256 | ****************************************************************************/ | 311 | ****************************************************************************/ |
257 | static struct resource kirkwood_rtc_resource = { | 312 | static struct resource kirkwood_rtc_resource = { |
@@ -295,6 +350,9 @@ static struct platform_device kirkwood_sata = { | |||
295 | 350 | ||
296 | void __init kirkwood_sata_init(struct mv_sata_platform_data *sata_data) | 351 | void __init kirkwood_sata_init(struct mv_sata_platform_data *sata_data) |
297 | { | 352 | { |
353 | kirkwood_clk_ctrl |= CGC_SATA0; | ||
354 | if (sata_data->n_ports > 1) | ||
355 | kirkwood_clk_ctrl |= CGC_SATA1; | ||
298 | sata_data->dram = &kirkwood_mbus_dram_info; | 356 | sata_data->dram = &kirkwood_mbus_dram_info; |
299 | kirkwood_sata.dev.platform_data = sata_data; | 357 | kirkwood_sata.dev.platform_data = sata_data; |
300 | platform_device_register(&kirkwood_sata); | 358 | platform_device_register(&kirkwood_sata); |
@@ -340,6 +398,7 @@ void __init kirkwood_sdio_init(struct mvsdio_platform_data *mvsdio_data) | |||
340 | else | 398 | else |
341 | mvsdio_data->clock = 200000000; | 399 | mvsdio_data->clock = 200000000; |
342 | mvsdio_data->dram = &kirkwood_mbus_dram_info; | 400 | mvsdio_data->dram = &kirkwood_mbus_dram_info; |
401 | kirkwood_clk_ctrl |= CGC_SDIO; | ||
343 | kirkwood_sdio.dev.platform_data = mvsdio_data; | 402 | kirkwood_sdio.dev.platform_data = mvsdio_data; |
344 | platform_device_register(&kirkwood_sdio); | 403 | platform_device_register(&kirkwood_sdio); |
345 | } | 404 | } |
@@ -371,6 +430,7 @@ static struct platform_device kirkwood_spi = { | |||
371 | 430 | ||
372 | void __init kirkwood_spi_init() | 431 | void __init kirkwood_spi_init() |
373 | { | 432 | { |
433 | kirkwood_clk_ctrl |= CGC_RUNIT; | ||
374 | platform_device_register(&kirkwood_spi); | 434 | platform_device_register(&kirkwood_spi); |
375 | } | 435 | } |
376 | 436 | ||
@@ -386,12 +446,10 @@ static struct mv64xxx_i2c_pdata kirkwood_i2c_pdata = { | |||
386 | 446 | ||
387 | static struct resource kirkwood_i2c_resources[] = { | 447 | static struct resource kirkwood_i2c_resources[] = { |
388 | { | 448 | { |
389 | .name = "i2c", | ||
390 | .start = I2C_PHYS_BASE, | 449 | .start = I2C_PHYS_BASE, |
391 | .end = I2C_PHYS_BASE + 0x1f, | 450 | .end = I2C_PHYS_BASE + 0x1f, |
392 | .flags = IORESOURCE_MEM, | 451 | .flags = IORESOURCE_MEM, |
393 | }, { | 452 | }, { |
394 | .name = "i2c", | ||
395 | .start = IRQ_KIRKWOOD_TWSI, | 453 | .start = IRQ_KIRKWOOD_TWSI, |
396 | .end = IRQ_KIRKWOOD_TWSI, | 454 | .end = IRQ_KIRKWOOD_TWSI, |
397 | .flags = IORESOURCE_IRQ, | 455 | .flags = IORESOURCE_IRQ, |
@@ -503,6 +561,43 @@ void __init kirkwood_uart1_init(void) | |||
503 | 561 | ||
504 | 562 | ||
505 | /***************************************************************************** | 563 | /***************************************************************************** |
564 | * Cryptographic Engines and Security Accelerator (CESA) | ||
565 | ****************************************************************************/ | ||
566 | |||
567 | static struct resource kirkwood_crypto_res[] = { | ||
568 | { | ||
569 | .name = "regs", | ||
570 | .start = CRYPTO_PHYS_BASE, | ||
571 | .end = CRYPTO_PHYS_BASE + 0xffff, | ||
572 | .flags = IORESOURCE_MEM, | ||
573 | }, { | ||
574 | .name = "sram", | ||
575 | .start = KIRKWOOD_SRAM_PHYS_BASE, | ||
576 | .end = KIRKWOOD_SRAM_PHYS_BASE + KIRKWOOD_SRAM_SIZE - 1, | ||
577 | .flags = IORESOURCE_MEM, | ||
578 | }, { | ||
579 | .name = "crypto interrupt", | ||
580 | .start = IRQ_KIRKWOOD_CRYPTO, | ||
581 | .end = IRQ_KIRKWOOD_CRYPTO, | ||
582 | .flags = IORESOURCE_IRQ, | ||
583 | }, | ||
584 | }; | ||
585 | |||
586 | static struct platform_device kirkwood_crypto_device = { | ||
587 | .name = "mv_crypto", | ||
588 | .id = -1, | ||
589 | .num_resources = ARRAY_SIZE(kirkwood_crypto_res), | ||
590 | .resource = kirkwood_crypto_res, | ||
591 | }; | ||
592 | |||
593 | void __init kirkwood_crypto_init(void) | ||
594 | { | ||
595 | kirkwood_clk_ctrl |= CGC_CRYPTO; | ||
596 | platform_device_register(&kirkwood_crypto_device); | ||
597 | } | ||
598 | |||
599 | |||
600 | /***************************************************************************** | ||
506 | * XOR | 601 | * XOR |
507 | ****************************************************************************/ | 602 | ****************************************************************************/ |
508 | static struct mv_xor_platform_shared_data kirkwood_xor_shared_data = { | 603 | static struct mv_xor_platform_shared_data kirkwood_xor_shared_data = { |
@@ -593,6 +688,7 @@ static struct platform_device kirkwood_xor01_channel = { | |||
593 | 688 | ||
594 | static void __init kirkwood_xor0_init(void) | 689 | static void __init kirkwood_xor0_init(void) |
595 | { | 690 | { |
691 | kirkwood_clk_ctrl |= CGC_XOR0; | ||
596 | platform_device_register(&kirkwood_xor0_shared); | 692 | platform_device_register(&kirkwood_xor0_shared); |
597 | 693 | ||
598 | /* | 694 | /* |
@@ -691,6 +787,7 @@ static struct platform_device kirkwood_xor11_channel = { | |||
691 | 787 | ||
692 | static void __init kirkwood_xor1_init(void) | 788 | static void __init kirkwood_xor1_init(void) |
693 | { | 789 | { |
790 | kirkwood_clk_ctrl |= CGC_XOR1; | ||
694 | platform_device_register(&kirkwood_xor1_shared); | 791 | platform_device_register(&kirkwood_xor1_shared); |
695 | 792 | ||
696 | /* | 793 | /* |
@@ -709,6 +806,29 @@ static void __init kirkwood_xor1_init(void) | |||
709 | 806 | ||
710 | 807 | ||
711 | /***************************************************************************** | 808 | /***************************************************************************** |
809 | * Watchdog | ||
810 | ****************************************************************************/ | ||
811 | static struct orion_wdt_platform_data kirkwood_wdt_data = { | ||
812 | .tclk = 0, | ||
813 | }; | ||
814 | |||
815 | static struct platform_device kirkwood_wdt_device = { | ||
816 | .name = "orion_wdt", | ||
817 | .id = -1, | ||
818 | .dev = { | ||
819 | .platform_data = &kirkwood_wdt_data, | ||
820 | }, | ||
821 | .num_resources = 0, | ||
822 | }; | ||
823 | |||
824 | static void __init kirkwood_wdt_init(void) | ||
825 | { | ||
826 | kirkwood_wdt_data.tclk = kirkwood_tclk; | ||
827 | platform_device_register(&kirkwood_wdt_device); | ||
828 | } | ||
829 | |||
830 | |||
831 | /***************************************************************************** | ||
712 | * Time handling | 832 | * Time handling |
713 | ****************************************************************************/ | 833 | ****************************************************************************/ |
714 | int kirkwood_tclk; | 834 | int kirkwood_tclk; |
@@ -800,6 +920,49 @@ void __init kirkwood_init(void) | |||
800 | 920 | ||
801 | /* internal devices that every board has */ | 921 | /* internal devices that every board has */ |
802 | kirkwood_rtc_init(); | 922 | kirkwood_rtc_init(); |
923 | kirkwood_wdt_init(); | ||
803 | kirkwood_xor0_init(); | 924 | kirkwood_xor0_init(); |
804 | kirkwood_xor1_init(); | 925 | kirkwood_xor1_init(); |
926 | kirkwood_crypto_init(); | ||
927 | } | ||
928 | |||
929 | static int __init kirkwood_clock_gate(void) | ||
930 | { | ||
931 | unsigned int curr = readl(CLOCK_GATING_CTRL); | ||
932 | |||
933 | printk(KERN_DEBUG "Gating clock of unused units\n"); | ||
934 | printk(KERN_DEBUG "before: 0x%08x\n", curr); | ||
935 | |||
936 | /* Make sure those units are accessible */ | ||
937 | writel(curr | CGC_SATA0 | CGC_SATA1 | CGC_PEX0, CLOCK_GATING_CTRL); | ||
938 | |||
939 | /* For SATA: first shutdown the phy */ | ||
940 | if (!(kirkwood_clk_ctrl & CGC_SATA0)) { | ||
941 | /* Disable PLL and IVREF */ | ||
942 | writel(readl(SATA0_PHY_MODE_2) & ~0xf, SATA0_PHY_MODE_2); | ||
943 | /* Disable PHY */ | ||
944 | writel(readl(SATA0_IF_CTRL) | 0x200, SATA0_IF_CTRL); | ||
945 | } | ||
946 | if (!(kirkwood_clk_ctrl & CGC_SATA1)) { | ||
947 | /* Disable PLL and IVREF */ | ||
948 | writel(readl(SATA1_PHY_MODE_2) & ~0xf, SATA1_PHY_MODE_2); | ||
949 | /* Disable PHY */ | ||
950 | writel(readl(SATA1_IF_CTRL) | 0x200, SATA1_IF_CTRL); | ||
951 | } | ||
952 | |||
953 | /* For PCIe: first shutdown the phy */ | ||
954 | if (!(kirkwood_clk_ctrl & CGC_PEX0)) { | ||
955 | writel(readl(PCIE_LINK_CTRL) | 0x10, PCIE_LINK_CTRL); | ||
956 | while (1) | ||
957 | if (readl(PCIE_STATUS) & 0x1) | ||
958 | break; | ||
959 | writel(readl(PCIE_LINK_CTRL) & ~0x10, PCIE_LINK_CTRL); | ||
960 | } | ||
961 | |||
962 | /* Now gate clock the required units */ | ||
963 | writel(kirkwood_clk_ctrl, CLOCK_GATING_CTRL); | ||
964 | printk(KERN_DEBUG " after: 0x%08x\n", readl(CLOCK_GATING_CTRL)); | ||
965 | |||
966 | return 0; | ||
805 | } | 967 | } |
968 | late_initcall(kirkwood_clock_gate); | ||
diff --git a/arch/arm/mach-kirkwood/common.h b/arch/arm/mach-kirkwood/common.h index 6ee88406f381..d7de43464358 100644 --- a/arch/arm/mach-kirkwood/common.h +++ b/arch/arm/mach-kirkwood/common.h | |||
@@ -15,6 +15,7 @@ struct dsa_platform_data; | |||
15 | struct mv643xx_eth_platform_data; | 15 | struct mv643xx_eth_platform_data; |
16 | struct mv_sata_platform_data; | 16 | struct mv_sata_platform_data; |
17 | struct mvsdio_platform_data; | 17 | struct mvsdio_platform_data; |
18 | struct mtd_partition; | ||
18 | 19 | ||
19 | /* | 20 | /* |
20 | * Basic Kirkwood init functions used early by machine-setup. | 21 | * Basic Kirkwood init functions used early by machine-setup. |
@@ -25,7 +26,6 @@ void kirkwood_init_irq(void); | |||
25 | 26 | ||
26 | extern struct mbus_dram_target_info kirkwood_mbus_dram_info; | 27 | extern struct mbus_dram_target_info kirkwood_mbus_dram_info; |
27 | void kirkwood_setup_cpu_mbus(void); | 28 | void kirkwood_setup_cpu_mbus(void); |
28 | void kirkwood_setup_sram_win(u32 base, u32 size); | ||
29 | 29 | ||
30 | void kirkwood_pcie_id(u32 *dev, u32 *rev); | 30 | void kirkwood_pcie_id(u32 *dev, u32 *rev); |
31 | 31 | ||
@@ -40,9 +40,11 @@ void kirkwood_spi_init(void); | |||
40 | void kirkwood_i2c_init(void); | 40 | void kirkwood_i2c_init(void); |
41 | void kirkwood_uart0_init(void); | 41 | void kirkwood_uart0_init(void); |
42 | void kirkwood_uart1_init(void); | 42 | void kirkwood_uart1_init(void); |
43 | void kirkwood_nand_init(struct mtd_partition *parts, int nr_parts, int delay); | ||
43 | 44 | ||
44 | extern int kirkwood_tclk; | 45 | extern int kirkwood_tclk; |
45 | extern struct sys_timer kirkwood_timer; | 46 | extern struct sys_timer kirkwood_timer; |
46 | 47 | ||
48 | #define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x) | ||
47 | 49 | ||
48 | #endif | 50 | #endif |
diff --git a/arch/arm/mach-kirkwood/cpuidle.c b/arch/arm/mach-kirkwood/cpuidle.c new file mode 100644 index 000000000000..f68d33f1f396 --- /dev/null +++ b/arch/arm/mach-kirkwood/cpuidle.c | |||
@@ -0,0 +1,96 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-kirkwood/cpuidle.c | ||
3 | * | ||
4 | * CPU idle Marvell Kirkwood SoCs | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | * | ||
10 | * The cpu idle uses wait-for-interrupt and DDR self refresh in order | ||
11 | * to implement two idle states - | ||
12 | * #1 wait-for-interrupt | ||
13 | * #2 wait-for-interrupt and DDR self refresh | ||
14 | */ | ||
15 | |||
16 | #include <linux/kernel.h> | ||
17 | #include <linux/init.h> | ||
18 | #include <linux/platform_device.h> | ||
19 | #include <linux/cpuidle.h> | ||
20 | #include <linux/io.h> | ||
21 | #include <asm/proc-fns.h> | ||
22 | #include <mach/kirkwood.h> | ||
23 | |||
24 | #define KIRKWOOD_MAX_STATES 2 | ||
25 | |||
26 | static struct cpuidle_driver kirkwood_idle_driver = { | ||
27 | .name = "kirkwood_idle", | ||
28 | .owner = THIS_MODULE, | ||
29 | }; | ||
30 | |||
31 | static DEFINE_PER_CPU(struct cpuidle_device, kirkwood_cpuidle_device); | ||
32 | |||
33 | /* Actual code that puts the SoC in different idle states */ | ||
34 | static int kirkwood_enter_idle(struct cpuidle_device *dev, | ||
35 | struct cpuidle_state *state) | ||
36 | { | ||
37 | struct timeval before, after; | ||
38 | int idle_time; | ||
39 | |||
40 | local_irq_disable(); | ||
41 | do_gettimeofday(&before); | ||
42 | if (state == &dev->states[0]) | ||
43 | /* Wait for interrupt state */ | ||
44 | cpu_do_idle(); | ||
45 | else if (state == &dev->states[1]) { | ||
46 | /* | ||
47 | * Following write will put DDR in self refresh. | ||
48 | * Note that we have 256 cycles before DDR puts it | ||
49 | * self in self-refresh, so the wait-for-interrupt | ||
50 | * call afterwards won't get the DDR from self refresh | ||
51 | * mode. | ||
52 | */ | ||
53 | writel(0x7, DDR_OPERATION_BASE); | ||
54 | cpu_do_idle(); | ||
55 | } | ||
56 | do_gettimeofday(&after); | ||
57 | local_irq_enable(); | ||
58 | idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC + | ||
59 | (after.tv_usec - before.tv_usec); | ||
60 | return idle_time; | ||
61 | } | ||
62 | |||
63 | /* Initialize CPU idle by registering the idle states */ | ||
64 | static int kirkwood_init_cpuidle(void) | ||
65 | { | ||
66 | struct cpuidle_device *device; | ||
67 | |||
68 | cpuidle_register_driver(&kirkwood_idle_driver); | ||
69 | |||
70 | device = &per_cpu(kirkwood_cpuidle_device, smp_processor_id()); | ||
71 | device->state_count = KIRKWOOD_MAX_STATES; | ||
72 | |||
73 | /* Wait for interrupt state */ | ||
74 | device->states[0].enter = kirkwood_enter_idle; | ||
75 | device->states[0].exit_latency = 1; | ||
76 | device->states[0].target_residency = 10000; | ||
77 | device->states[0].flags = CPUIDLE_FLAG_TIME_VALID; | ||
78 | strcpy(device->states[0].name, "WFI"); | ||
79 | strcpy(device->states[0].desc, "Wait for interrupt"); | ||
80 | |||
81 | /* Wait for interrupt and DDR self refresh state */ | ||
82 | device->states[1].enter = kirkwood_enter_idle; | ||
83 | device->states[1].exit_latency = 10; | ||
84 | device->states[1].target_residency = 10000; | ||
85 | device->states[1].flags = CPUIDLE_FLAG_TIME_VALID; | ||
86 | strcpy(device->states[1].name, "DDR SR"); | ||
87 | strcpy(device->states[1].desc, "WFI and DDR Self Refresh"); | ||
88 | |||
89 | if (cpuidle_register_device(device)) { | ||
90 | printk(KERN_ERR "kirkwood_init_cpuidle: Failed registering\n"); | ||
91 | return -EIO; | ||
92 | } | ||
93 | return 0; | ||
94 | } | ||
95 | |||
96 | device_initcall(kirkwood_init_cpuidle); | ||
diff --git a/arch/arm/mach-kirkwood/db88f6281-bp-setup.c b/arch/arm/mach-kirkwood/db88f6281-bp-setup.c index 5505d5837752..39bdf4bcace9 100644 --- a/arch/arm/mach-kirkwood/db88f6281-bp-setup.c +++ b/arch/arm/mach-kirkwood/db88f6281-bp-setup.c | |||
@@ -11,14 +11,12 @@ | |||
11 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
13 | #include <linux/platform_device.h> | 13 | #include <linux/platform_device.h> |
14 | #include <linux/mtd/nand.h> | ||
15 | #include <linux/mtd/partitions.h> | 14 | #include <linux/mtd/partitions.h> |
16 | #include <linux/ata_platform.h> | 15 | #include <linux/ata_platform.h> |
17 | #include <linux/mv643xx_eth.h> | 16 | #include <linux/mv643xx_eth.h> |
18 | #include <asm/mach-types.h> | 17 | #include <asm/mach-types.h> |
19 | #include <asm/mach/arch.h> | 18 | #include <asm/mach/arch.h> |
20 | #include <mach/kirkwood.h> | 19 | #include <mach/kirkwood.h> |
21 | #include <plat/orion_nand.h> | ||
22 | #include <plat/mvsdio.h> | 20 | #include <plat/mvsdio.h> |
23 | #include "common.h" | 21 | #include "common.h" |
24 | #include "mpp.h" | 22 | #include "mpp.h" |
@@ -39,32 +37,6 @@ static struct mtd_partition db88f6281_nand_parts[] = { | |||
39 | }, | 37 | }, |
40 | }; | 38 | }; |
41 | 39 | ||
42 | static struct resource db88f6281_nand_resource = { | ||
43 | .flags = IORESOURCE_MEM, | ||
44 | .start = KIRKWOOD_NAND_MEM_PHYS_BASE, | ||
45 | .end = KIRKWOOD_NAND_MEM_PHYS_BASE + | ||
46 | KIRKWOOD_NAND_MEM_SIZE - 1, | ||
47 | }; | ||
48 | |||
49 | static struct orion_nand_data db88f6281_nand_data = { | ||
50 | .parts = db88f6281_nand_parts, | ||
51 | .nr_parts = ARRAY_SIZE(db88f6281_nand_parts), | ||
52 | .cle = 0, | ||
53 | .ale = 1, | ||
54 | .width = 8, | ||
55 | .chip_delay = 25, | ||
56 | }; | ||
57 | |||
58 | static struct platform_device db88f6281_nand_flash = { | ||
59 | .name = "orion_nand", | ||
60 | .id = -1, | ||
61 | .dev = { | ||
62 | .platform_data = &db88f6281_nand_data, | ||
63 | }, | ||
64 | .resource = &db88f6281_nand_resource, | ||
65 | .num_resources = 1, | ||
66 | }; | ||
67 | |||
68 | static struct mv643xx_eth_platform_data db88f6281_ge00_data = { | 40 | static struct mv643xx_eth_platform_data db88f6281_ge00_data = { |
69 | .phy_addr = MV643XX_ETH_PHY_ADDR(8), | 41 | .phy_addr = MV643XX_ETH_PHY_ADDR(8), |
70 | }; | 42 | }; |
@@ -92,13 +64,12 @@ static void __init db88f6281_init(void) | |||
92 | kirkwood_init(); | 64 | kirkwood_init(); |
93 | kirkwood_mpp_conf(db88f6281_mpp_config); | 65 | kirkwood_mpp_conf(db88f6281_mpp_config); |
94 | 66 | ||
67 | kirkwood_nand_init(ARRAY_AND_SIZE(db88f6281_nand_parts), 25); | ||
95 | kirkwood_ehci_init(); | 68 | kirkwood_ehci_init(); |
96 | kirkwood_ge00_init(&db88f6281_ge00_data); | 69 | kirkwood_ge00_init(&db88f6281_ge00_data); |
97 | kirkwood_sata_init(&db88f6281_sata_data); | 70 | kirkwood_sata_init(&db88f6281_sata_data); |
98 | kirkwood_uart0_init(); | 71 | kirkwood_uart0_init(); |
99 | kirkwood_sdio_init(&db88f6281_mvsdio_data); | 72 | kirkwood_sdio_init(&db88f6281_mvsdio_data); |
100 | |||
101 | platform_device_register(&db88f6281_nand_flash); | ||
102 | } | 73 | } |
103 | 74 | ||
104 | static int __init db88f6281_pci_init(void) | 75 | static int __init db88f6281_pci_init(void) |
diff --git a/arch/arm/mach-kirkwood/include/mach/bridge-regs.h b/arch/arm/mach-kirkwood/include/mach/bridge-regs.h index 4f7029f521cc..9e80d9232c83 100644 --- a/arch/arm/mach-kirkwood/include/mach/bridge-regs.h +++ b/arch/arm/mach-kirkwood/include/mach/bridge-regs.h | |||
@@ -17,12 +17,15 @@ | |||
17 | #define CPU_RESET 0x00000002 | 17 | #define CPU_RESET 0x00000002 |
18 | 18 | ||
19 | #define RSTOUTn_MASK (BRIDGE_VIRT_BASE | 0x0108) | 19 | #define RSTOUTn_MASK (BRIDGE_VIRT_BASE | 0x0108) |
20 | #define WDT_RESET_OUT_EN 0x00000002 | ||
20 | #define SOFT_RESET_OUT_EN 0x00000004 | 21 | #define SOFT_RESET_OUT_EN 0x00000004 |
21 | 22 | ||
22 | #define SYSTEM_SOFT_RESET (BRIDGE_VIRT_BASE | 0x010c) | 23 | #define SYSTEM_SOFT_RESET (BRIDGE_VIRT_BASE | 0x010c) |
23 | #define SOFT_RESET 0x00000001 | 24 | #define SOFT_RESET 0x00000001 |
24 | 25 | ||
25 | #define BRIDGE_CAUSE (BRIDGE_VIRT_BASE | 0x0110) | 26 | #define BRIDGE_CAUSE (BRIDGE_VIRT_BASE | 0x0110) |
27 | #define WDT_INT_REQ 0x0008 | ||
28 | |||
26 | #define BRIDGE_MASK (BRIDGE_VIRT_BASE | 0x0114) | 29 | #define BRIDGE_MASK (BRIDGE_VIRT_BASE | 0x0114) |
27 | #define BRIDGE_INT_TIMER0 0x0002 | 30 | #define BRIDGE_INT_TIMER0 0x0002 |
28 | #define BRIDGE_INT_TIMER1 0x0004 | 31 | #define BRIDGE_INT_TIMER1 0x0004 |
@@ -39,4 +42,22 @@ | |||
39 | #define L2_CONFIG_REG (BRIDGE_VIRT_BASE | 0x0128) | 42 | #define L2_CONFIG_REG (BRIDGE_VIRT_BASE | 0x0128) |
40 | #define L2_WRITETHROUGH 0x00000010 | 43 | #define L2_WRITETHROUGH 0x00000010 |
41 | 44 | ||
45 | #define CLOCK_GATING_CTRL (BRIDGE_VIRT_BASE | 0x11c) | ||
46 | #define CGC_GE0 (1 << 0) | ||
47 | #define CGC_PEX0 (1 << 2) | ||
48 | #define CGC_USB0 (1 << 3) | ||
49 | #define CGC_SDIO (1 << 4) | ||
50 | #define CGC_TSU (1 << 5) | ||
51 | #define CGC_DUNIT (1 << 6) | ||
52 | #define CGC_RUNIT (1 << 7) | ||
53 | #define CGC_XOR0 (1 << 8) | ||
54 | #define CGC_AUDIO (1 << 9) | ||
55 | #define CGC_SATA0 (1 << 14) | ||
56 | #define CGC_SATA1 (1 << 15) | ||
57 | #define CGC_XOR1 (1 << 16) | ||
58 | #define CGC_CRYPTO (1 << 17) | ||
59 | #define CGC_GE1 (1 << 19) | ||
60 | #define CGC_TDM (1 << 20) | ||
61 | #define CGC_RESERVED ((1 << 18) | (0x6 << 21)) | ||
62 | |||
42 | #endif | 63 | #endif |
diff --git a/arch/arm/mach-kirkwood/include/mach/io.h b/arch/arm/mach-kirkwood/include/mach/io.h index be07be0ef522..a643a846d5fb 100644 --- a/arch/arm/mach-kirkwood/include/mach/io.h +++ b/arch/arm/mach-kirkwood/include/mach/io.h | |||
@@ -19,6 +19,31 @@ static inline void __iomem *__io(unsigned long addr) | |||
19 | + KIRKWOOD_PCIE_IO_VIRT_BASE); | 19 | + KIRKWOOD_PCIE_IO_VIRT_BASE); |
20 | } | 20 | } |
21 | 21 | ||
22 | static inline void __iomem * | ||
23 | __arch_ioremap(unsigned long paddr, size_t size, unsigned int mtype) | ||
24 | { | ||
25 | void __iomem *retval; | ||
26 | unsigned long offs = paddr - KIRKWOOD_REGS_PHYS_BASE; | ||
27 | if (mtype == MT_DEVICE && size && offs < KIRKWOOD_REGS_SIZE && | ||
28 | size <= KIRKWOOD_REGS_SIZE && offs + size <= KIRKWOOD_REGS_SIZE) { | ||
29 | retval = (void __iomem *)KIRKWOOD_REGS_VIRT_BASE + offs; | ||
30 | } else { | ||
31 | retval = __arm_ioremap(paddr, size, mtype); | ||
32 | } | ||
33 | |||
34 | return retval; | ||
35 | } | ||
36 | |||
37 | static inline void | ||
38 | __arch_iounmap(void __iomem *addr) | ||
39 | { | ||
40 | if (addr < (void __iomem *)KIRKWOOD_REGS_VIRT_BASE || | ||
41 | addr >= (void __iomem *)(KIRKWOOD_REGS_VIRT_BASE + KIRKWOOD_REGS_SIZE)) | ||
42 | __iounmap(addr); | ||
43 | } | ||
44 | |||
45 | #define __arch_ioremap(p, s, m) __arch_ioremap(p, s, m) | ||
46 | #define __arch_iounmap(a) __arch_iounmap(a) | ||
22 | #define __io(a) __io(a) | 47 | #define __io(a) __io(a) |
23 | #define __mem_pci(a) (a) | 48 | #define __mem_pci(a) (a) |
24 | 49 | ||
diff --git a/arch/arm/mach-kirkwood/include/mach/kirkwood.h b/arch/arm/mach-kirkwood/include/mach/kirkwood.h index b3e13958821d..07af858814a0 100644 --- a/arch/arm/mach-kirkwood/include/mach/kirkwood.h +++ b/arch/arm/mach-kirkwood/include/mach/kirkwood.h | |||
@@ -20,16 +20,18 @@ | |||
20 | * f1000000 on-chip peripheral registers | 20 | * f1000000 on-chip peripheral registers |
21 | * f2000000 PCIe I/O space | 21 | * f2000000 PCIe I/O space |
22 | * f3000000 NAND controller address window | 22 | * f3000000 NAND controller address window |
23 | * f4000000 Security Accelerator SRAM | ||
23 | * | 24 | * |
24 | * virt phys size | 25 | * virt phys size |
25 | * fee00000 f1000000 1M on-chip peripheral registers | 26 | * fee00000 f1000000 1M on-chip peripheral registers |
26 | * fef00000 f2000000 1M PCIe I/O space | 27 | * fef00000 f2000000 1M PCIe I/O space |
27 | */ | 28 | */ |
28 | 29 | ||
30 | #define KIRKWOOD_SRAM_PHYS_BASE 0xf4000000 | ||
31 | #define KIRKWOOD_SRAM_SIZE SZ_2K | ||
32 | |||
29 | #define KIRKWOOD_NAND_MEM_PHYS_BASE 0xf3000000 | 33 | #define KIRKWOOD_NAND_MEM_PHYS_BASE 0xf3000000 |
30 | #define KIRKWOOD_NAND_MEM_SIZE SZ_64K /* 1K is sufficient, but 64K | 34 | #define KIRKWOOD_NAND_MEM_SIZE SZ_1K |
31 | * is the minimal window size | ||
32 | */ | ||
33 | 35 | ||
34 | #define KIRKWOOD_PCIE_IO_PHYS_BASE 0xf2000000 | 36 | #define KIRKWOOD_PCIE_IO_PHYS_BASE 0xf2000000 |
35 | #define KIRKWOOD_PCIE_IO_VIRT_BASE 0xfef00000 | 37 | #define KIRKWOOD_PCIE_IO_VIRT_BASE 0xfef00000 |
@@ -48,6 +50,7 @@ | |||
48 | */ | 50 | */ |
49 | #define DDR_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x00000) | 51 | #define DDR_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x00000) |
50 | #define DDR_WINDOW_CPU_BASE (DDR_VIRT_BASE | 0x1500) | 52 | #define DDR_WINDOW_CPU_BASE (DDR_VIRT_BASE | 0x1500) |
53 | #define DDR_OPERATION_BASE (DDR_VIRT_BASE | 0x1418) | ||
51 | 54 | ||
52 | #define DEV_BUS_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x10000) | 55 | #define DEV_BUS_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x10000) |
53 | #define DEV_BUS_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x10000) | 56 | #define DEV_BUS_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x10000) |
@@ -63,7 +66,11 @@ | |||
63 | 66 | ||
64 | #define BRIDGE_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x20000) | 67 | #define BRIDGE_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x20000) |
65 | 68 | ||
69 | #define CRYPTO_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x30000) | ||
70 | |||
66 | #define PCIE_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x40000) | 71 | #define PCIE_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x40000) |
72 | #define PCIE_LINK_CTRL (PCIE_VIRT_BASE | 0x70) | ||
73 | #define PCIE_STATUS (PCIE_VIRT_BASE | 0x1a04) | ||
67 | 74 | ||
68 | #define USB_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x50000) | 75 | #define USB_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x50000) |
69 | 76 | ||
@@ -80,6 +87,11 @@ | |||
80 | #define GE01_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x74000) | 87 | #define GE01_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x74000) |
81 | 88 | ||
82 | #define SATA_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x80000) | 89 | #define SATA_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x80000) |
90 | #define SATA_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x80000) | ||
91 | #define SATA0_IF_CTRL (SATA_VIRT_BASE | 0x2050) | ||
92 | #define SATA0_PHY_MODE_2 (SATA_VIRT_BASE | 0x2330) | ||
93 | #define SATA1_IF_CTRL (SATA_VIRT_BASE | 0x4050) | ||
94 | #define SATA1_PHY_MODE_2 (SATA_VIRT_BASE | 0x4330) | ||
83 | 95 | ||
84 | #define SDIO_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x90000) | 96 | #define SDIO_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x90000) |
85 | 97 | ||
diff --git a/arch/arm/mach-kirkwood/mpp.c b/arch/arm/mach-kirkwood/mpp.c index 63c44934391a..a5900f64e38c 100644 --- a/arch/arm/mach-kirkwood/mpp.c +++ b/arch/arm/mach-kirkwood/mpp.c | |||
@@ -48,6 +48,9 @@ void __init kirkwood_mpp_conf(unsigned int *mpp_list) | |||
48 | if (!variant_mask) | 48 | if (!variant_mask) |
49 | return; | 49 | return; |
50 | 50 | ||
51 | /* Initialize gpiolib. */ | ||
52 | orion_gpio_init(); | ||
53 | |||
51 | printk(KERN_DEBUG "initial MPP regs:"); | 54 | printk(KERN_DEBUG "initial MPP regs:"); |
52 | for (i = 0; i < MPP_NR_REGS; i++) { | 55 | for (i = 0; i < MPP_NR_REGS; i++) { |
53 | mpp_ctrl[i] = readl(MPP_CTRL(i)); | 56 | mpp_ctrl[i] = readl(MPP_CTRL(i)); |
diff --git a/arch/arm/mach-kirkwood/mv88f6281gtw_ge-setup.c b/arch/arm/mach-kirkwood/mv88f6281gtw_ge-setup.c new file mode 100644 index 000000000000..0358f45766cb --- /dev/null +++ b/arch/arm/mach-kirkwood/mv88f6281gtw_ge-setup.c | |||
@@ -0,0 +1,173 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-kirkwood/mv88f6281gtw_ge-setup.c | ||
3 | * | ||
4 | * Marvell 88F6281 GTW GE Board Setup | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/init.h> | ||
13 | #include <linux/platform_device.h> | ||
14 | #include <linux/pci.h> | ||
15 | #include <linux/irq.h> | ||
16 | #include <linux/mtd/physmap.h> | ||
17 | #include <linux/timer.h> | ||
18 | #include <linux/mv643xx_eth.h> | ||
19 | #include <linux/ethtool.h> | ||
20 | #include <linux/gpio.h> | ||
21 | #include <linux/leds.h> | ||
22 | #include <linux/input.h> | ||
23 | #include <linux/gpio_keys.h> | ||
24 | #include <linux/spi/flash.h> | ||
25 | #include <linux/spi/spi.h> | ||
26 | #include <linux/spi/orion_spi.h> | ||
27 | #include <net/dsa.h> | ||
28 | #include <asm/mach-types.h> | ||
29 | #include <asm/mach/arch.h> | ||
30 | #include <asm/mach/pci.h> | ||
31 | #include <mach/kirkwood.h> | ||
32 | #include "common.h" | ||
33 | #include "mpp.h" | ||
34 | |||
35 | static struct mv643xx_eth_platform_data mv88f6281gtw_ge_ge00_data = { | ||
36 | .phy_addr = MV643XX_ETH_PHY_NONE, | ||
37 | .speed = SPEED_1000, | ||
38 | .duplex = DUPLEX_FULL, | ||
39 | }; | ||
40 | |||
41 | static struct dsa_chip_data mv88f6281gtw_ge_switch_chip_data = { | ||
42 | .port_names[0] = "lan1", | ||
43 | .port_names[1] = "lan2", | ||
44 | .port_names[2] = "lan3", | ||
45 | .port_names[3] = "lan4", | ||
46 | .port_names[4] = "wan", | ||
47 | .port_names[5] = "cpu", | ||
48 | }; | ||
49 | |||
50 | static struct dsa_platform_data mv88f6281gtw_ge_switch_plat_data = { | ||
51 | .nr_chips = 1, | ||
52 | .chip = &mv88f6281gtw_ge_switch_chip_data, | ||
53 | }; | ||
54 | |||
55 | static const struct flash_platform_data mv88f6281gtw_ge_spi_slave_data = { | ||
56 | .type = "mx25l12805d", | ||
57 | }; | ||
58 | |||
59 | static struct spi_board_info __initdata mv88f6281gtw_ge_spi_slave_info[] = { | ||
60 | { | ||
61 | .modalias = "m25p80", | ||
62 | .platform_data = &mv88f6281gtw_ge_spi_slave_data, | ||
63 | .irq = -1, | ||
64 | .max_speed_hz = 50000000, | ||
65 | .bus_num = 0, | ||
66 | .chip_select = 0, | ||
67 | }, | ||
68 | }; | ||
69 | |||
70 | static struct gpio_keys_button mv88f6281gtw_ge_button_pins[] = { | ||
71 | { | ||
72 | .code = KEY_RESTART, | ||
73 | .gpio = 47, | ||
74 | .desc = "SWR Button", | ||
75 | .active_low = 1, | ||
76 | }, { | ||
77 | .code = KEY_F1, | ||
78 | .gpio = 46, | ||
79 | .desc = "WPS Button(F1)", | ||
80 | .active_low = 1, | ||
81 | }, | ||
82 | }; | ||
83 | |||
84 | static struct gpio_keys_platform_data mv88f6281gtw_ge_button_data = { | ||
85 | .buttons = mv88f6281gtw_ge_button_pins, | ||
86 | .nbuttons = ARRAY_SIZE(mv88f6281gtw_ge_button_pins), | ||
87 | }; | ||
88 | |||
89 | static struct platform_device mv88f6281gtw_ge_buttons = { | ||
90 | .name = "gpio-keys", | ||
91 | .id = -1, | ||
92 | .num_resources = 0, | ||
93 | .dev = { | ||
94 | .platform_data = &mv88f6281gtw_ge_button_data, | ||
95 | }, | ||
96 | }; | ||
97 | |||
98 | static struct gpio_led mv88f6281gtw_ge_led_pins[] = { | ||
99 | { | ||
100 | .name = "gtw:green:Status", | ||
101 | .gpio = 20, | ||
102 | .active_low = 0, | ||
103 | }, { | ||
104 | .name = "gtw:red:Status", | ||
105 | .gpio = 21, | ||
106 | .active_low = 0, | ||
107 | }, { | ||
108 | .name = "gtw:green:USB", | ||
109 | .gpio = 12, | ||
110 | .active_low = 0, | ||
111 | }, | ||
112 | }; | ||
113 | |||
114 | static struct gpio_led_platform_data mv88f6281gtw_ge_led_data = { | ||
115 | .leds = mv88f6281gtw_ge_led_pins, | ||
116 | .num_leds = ARRAY_SIZE(mv88f6281gtw_ge_led_pins), | ||
117 | }; | ||
118 | |||
119 | static struct platform_device mv88f6281gtw_ge_leds = { | ||
120 | .name = "leds-gpio", | ||
121 | .id = -1, | ||
122 | .dev = { | ||
123 | .platform_data = &mv88f6281gtw_ge_led_data, | ||
124 | }, | ||
125 | }; | ||
126 | |||
127 | static unsigned int mv88f6281gtw_ge_mpp_config[] __initdata = { | ||
128 | MPP12_GPO, /* Status#_USB pin */ | ||
129 | MPP20_GPIO, /* Status#_GLED pin */ | ||
130 | MPP21_GPIO, /* Status#_RLED pin */ | ||
131 | MPP46_GPIO, /* WPS_Switch pin */ | ||
132 | MPP47_GPIO, /* SW_Init pin */ | ||
133 | 0 | ||
134 | }; | ||
135 | |||
136 | static void __init mv88f6281gtw_ge_init(void) | ||
137 | { | ||
138 | /* | ||
139 | * Basic setup. Needs to be called early. | ||
140 | */ | ||
141 | kirkwood_init(); | ||
142 | kirkwood_mpp_conf(mv88f6281gtw_ge_mpp_config); | ||
143 | |||
144 | kirkwood_ehci_init(); | ||
145 | kirkwood_ge00_init(&mv88f6281gtw_ge_ge00_data); | ||
146 | kirkwood_ge00_switch_init(&mv88f6281gtw_ge_switch_plat_data, NO_IRQ); | ||
147 | spi_register_board_info(mv88f6281gtw_ge_spi_slave_info, | ||
148 | ARRAY_SIZE(mv88f6281gtw_ge_spi_slave_info)); | ||
149 | kirkwood_spi_init(); | ||
150 | kirkwood_uart0_init(); | ||
151 | platform_device_register(&mv88f6281gtw_ge_leds); | ||
152 | platform_device_register(&mv88f6281gtw_ge_buttons); | ||
153 | } | ||
154 | |||
155 | static int __init mv88f6281gtw_ge_pci_init(void) | ||
156 | { | ||
157 | if (machine_is_mv88f6281gtw_ge()) | ||
158 | kirkwood_pcie_init(); | ||
159 | |||
160 | return 0; | ||
161 | } | ||
162 | subsys_initcall(mv88f6281gtw_ge_pci_init); | ||
163 | |||
164 | MACHINE_START(MV88F6281GTW_GE, "Marvell 88F6281 GTW GE Board") | ||
165 | /* Maintainer: Lennert Buytenhek <buytenh@marvell.com> */ | ||
166 | .phys_io = KIRKWOOD_REGS_PHYS_BASE, | ||
167 | .io_pg_offst = ((KIRKWOOD_REGS_VIRT_BASE) >> 18) & 0xfffc, | ||
168 | .boot_params = 0x00000100, | ||
169 | .init_machine = mv88f6281gtw_ge_init, | ||
170 | .map_io = kirkwood_map_io, | ||
171 | .init_irq = kirkwood_init_irq, | ||
172 | .timer = &kirkwood_timer, | ||
173 | MACHINE_END | ||
diff --git a/arch/arm/mach-kirkwood/pcie.c b/arch/arm/mach-kirkwood/pcie.c index 73fccacd1a73..d90b9aae308d 100644 --- a/arch/arm/mach-kirkwood/pcie.c +++ b/arch/arm/mach-kirkwood/pcie.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <asm/irq.h> | 14 | #include <asm/irq.h> |
15 | #include <asm/mach/pci.h> | 15 | #include <asm/mach/pci.h> |
16 | #include <plat/pcie.h> | 16 | #include <plat/pcie.h> |
17 | #include <mach/bridge-regs.h> | ||
17 | #include "common.h" | 18 | #include "common.h" |
18 | 19 | ||
19 | 20 | ||
@@ -95,6 +96,7 @@ static struct pci_ops pcie_ops = { | |||
95 | static int kirkwood_pcie_setup(int nr, struct pci_sys_data *sys) | 96 | static int kirkwood_pcie_setup(int nr, struct pci_sys_data *sys) |
96 | { | 97 | { |
97 | struct resource *res; | 98 | struct resource *res; |
99 | extern unsigned int kirkwood_clk_ctrl; | ||
98 | 100 | ||
99 | /* | 101 | /* |
100 | * Generic PCIe unit setup. | 102 | * Generic PCIe unit setup. |
@@ -133,6 +135,8 @@ static int kirkwood_pcie_setup(int nr, struct pci_sys_data *sys) | |||
133 | sys->resource[2] = NULL; | 135 | sys->resource[2] = NULL; |
134 | sys->io_offset = 0; | 136 | sys->io_offset = 0; |
135 | 137 | ||
138 | kirkwood_clk_ctrl |= CGC_PEX0; | ||
139 | |||
136 | return 1; | 140 | return 1; |
137 | } | 141 | } |
138 | 142 | ||
diff --git a/arch/arm/mach-kirkwood/rd88f6192-nas-setup.c b/arch/arm/mach-kirkwood/rd88f6192-nas-setup.c index 2f0e4ef3db0f..8bf4153d0840 100644 --- a/arch/arm/mach-kirkwood/rd88f6192-nas-setup.c +++ b/arch/arm/mach-kirkwood/rd88f6192-nas-setup.c | |||
@@ -11,8 +11,6 @@ | |||
11 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
13 | #include <linux/platform_device.h> | 13 | #include <linux/platform_device.h> |
14 | #include <linux/mtd/nand.h> | ||
15 | #include <linux/mtd/partitions.h> | ||
16 | #include <linux/ata_platform.h> | 14 | #include <linux/ata_platform.h> |
17 | #include <linux/mv643xx_eth.h> | 15 | #include <linux/mv643xx_eth.h> |
18 | #include <linux/spi/flash.h> | 16 | #include <linux/spi/flash.h> |
diff --git a/arch/arm/mach-kirkwood/rd88f6281-setup.c b/arch/arm/mach-kirkwood/rd88f6281-setup.c index 31e996d65fc4..31708ddbc83e 100644 --- a/arch/arm/mach-kirkwood/rd88f6281-setup.c +++ b/arch/arm/mach-kirkwood/rd88f6281-setup.c | |||
@@ -12,7 +12,6 @@ | |||
12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
13 | #include <linux/platform_device.h> | 13 | #include <linux/platform_device.h> |
14 | #include <linux/irq.h> | 14 | #include <linux/irq.h> |
15 | #include <linux/mtd/nand.h> | ||
16 | #include <linux/mtd/partitions.h> | 15 | #include <linux/mtd/partitions.h> |
17 | #include <linux/ata_platform.h> | 16 | #include <linux/ata_platform.h> |
18 | #include <linux/mv643xx_eth.h> | 17 | #include <linux/mv643xx_eth.h> |
@@ -22,7 +21,6 @@ | |||
22 | #include <asm/mach/arch.h> | 21 | #include <asm/mach/arch.h> |
23 | #include <mach/kirkwood.h> | 22 | #include <mach/kirkwood.h> |
24 | #include <plat/mvsdio.h> | 23 | #include <plat/mvsdio.h> |
25 | #include <plat/orion_nand.h> | ||
26 | #include "common.h" | 24 | #include "common.h" |
27 | #include "mpp.h" | 25 | #include "mpp.h" |
28 | 26 | ||
@@ -42,32 +40,6 @@ static struct mtd_partition rd88f6281_nand_parts[] = { | |||
42 | }, | 40 | }, |
43 | }; | 41 | }; |
44 | 42 | ||
45 | static struct resource rd88f6281_nand_resource = { | ||
46 | .flags = IORESOURCE_MEM, | ||
47 | .start = KIRKWOOD_NAND_MEM_PHYS_BASE, | ||
48 | .end = KIRKWOOD_NAND_MEM_PHYS_BASE + | ||
49 | KIRKWOOD_NAND_MEM_SIZE - 1, | ||
50 | }; | ||
51 | |||
52 | static struct orion_nand_data rd88f6281_nand_data = { | ||
53 | .parts = rd88f6281_nand_parts, | ||
54 | .nr_parts = ARRAY_SIZE(rd88f6281_nand_parts), | ||
55 | .cle = 0, | ||
56 | .ale = 1, | ||
57 | .width = 8, | ||
58 | .chip_delay = 25, | ||
59 | }; | ||
60 | |||
61 | static struct platform_device rd88f6281_nand_flash = { | ||
62 | .name = "orion_nand", | ||
63 | .id = -1, | ||
64 | .dev = { | ||
65 | .platform_data = &rd88f6281_nand_data, | ||
66 | }, | ||
67 | .resource = &rd88f6281_nand_resource, | ||
68 | .num_resources = 1, | ||
69 | }; | ||
70 | |||
71 | static struct mv643xx_eth_platform_data rd88f6281_ge00_data = { | 43 | static struct mv643xx_eth_platform_data rd88f6281_ge00_data = { |
72 | .phy_addr = MV643XX_ETH_PHY_NONE, | 44 | .phy_addr = MV643XX_ETH_PHY_NONE, |
73 | .speed = SPEED_1000, | 45 | .speed = SPEED_1000, |
@@ -114,6 +86,7 @@ static void __init rd88f6281_init(void) | |||
114 | kirkwood_init(); | 86 | kirkwood_init(); |
115 | kirkwood_mpp_conf(rd88f6281_mpp_config); | 87 | kirkwood_mpp_conf(rd88f6281_mpp_config); |
116 | 88 | ||
89 | kirkwood_nand_init(ARRAY_AND_SIZE(rd88f6281_nand_parts), 25); | ||
117 | kirkwood_ehci_init(); | 90 | kirkwood_ehci_init(); |
118 | 91 | ||
119 | kirkwood_ge00_init(&rd88f6281_ge00_data); | 92 | kirkwood_ge00_init(&rd88f6281_ge00_data); |
@@ -129,8 +102,6 @@ static void __init rd88f6281_init(void) | |||
129 | kirkwood_sata_init(&rd88f6281_sata_data); | 102 | kirkwood_sata_init(&rd88f6281_sata_data); |
130 | kirkwood_sdio_init(&rd88f6281_mvsdio_data); | 103 | kirkwood_sdio_init(&rd88f6281_mvsdio_data); |
131 | kirkwood_uart0_init(); | 104 | kirkwood_uart0_init(); |
132 | |||
133 | platform_device_register(&rd88f6281_nand_flash); | ||
134 | } | 105 | } |
135 | 106 | ||
136 | static int __init rd88f6281_pci_init(void) | 107 | static int __init rd88f6281_pci_init(void) |
diff --git a/arch/arm/mach-kirkwood/sheevaplug-setup.c b/arch/arm/mach-kirkwood/sheevaplug-setup.c index 831e4a56cae1..c7319eeac8bb 100644 --- a/arch/arm/mach-kirkwood/sheevaplug-setup.c +++ b/arch/arm/mach-kirkwood/sheevaplug-setup.c | |||
@@ -11,7 +11,6 @@ | |||
11 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
13 | #include <linux/platform_device.h> | 13 | #include <linux/platform_device.h> |
14 | #include <linux/mtd/nand.h> | ||
15 | #include <linux/mtd/partitions.h> | 14 | #include <linux/mtd/partitions.h> |
16 | #include <linux/mv643xx_eth.h> | 15 | #include <linux/mv643xx_eth.h> |
17 | #include <linux/gpio.h> | 16 | #include <linux/gpio.h> |
@@ -20,7 +19,6 @@ | |||
20 | #include <asm/mach/arch.h> | 19 | #include <asm/mach/arch.h> |
21 | #include <mach/kirkwood.h> | 20 | #include <mach/kirkwood.h> |
22 | #include <plat/mvsdio.h> | 21 | #include <plat/mvsdio.h> |
23 | #include <plat/orion_nand.h> | ||
24 | #include "common.h" | 22 | #include "common.h" |
25 | #include "mpp.h" | 23 | #include "mpp.h" |
26 | 24 | ||
@@ -40,38 +38,12 @@ static struct mtd_partition sheevaplug_nand_parts[] = { | |||
40 | }, | 38 | }, |
41 | }; | 39 | }; |
42 | 40 | ||
43 | static struct resource sheevaplug_nand_resource = { | ||
44 | .flags = IORESOURCE_MEM, | ||
45 | .start = KIRKWOOD_NAND_MEM_PHYS_BASE, | ||
46 | .end = KIRKWOOD_NAND_MEM_PHYS_BASE + | ||
47 | KIRKWOOD_NAND_MEM_SIZE - 1, | ||
48 | }; | ||
49 | |||
50 | static struct orion_nand_data sheevaplug_nand_data = { | ||
51 | .parts = sheevaplug_nand_parts, | ||
52 | .nr_parts = ARRAY_SIZE(sheevaplug_nand_parts), | ||
53 | .cle = 0, | ||
54 | .ale = 1, | ||
55 | .width = 8, | ||
56 | .chip_delay = 25, | ||
57 | }; | ||
58 | |||
59 | static struct platform_device sheevaplug_nand_flash = { | ||
60 | .name = "orion_nand", | ||
61 | .id = -1, | ||
62 | .dev = { | ||
63 | .platform_data = &sheevaplug_nand_data, | ||
64 | }, | ||
65 | .resource = &sheevaplug_nand_resource, | ||
66 | .num_resources = 1, | ||
67 | }; | ||
68 | |||
69 | static struct mv643xx_eth_platform_data sheevaplug_ge00_data = { | 41 | static struct mv643xx_eth_platform_data sheevaplug_ge00_data = { |
70 | .phy_addr = MV643XX_ETH_PHY_ADDR(0), | 42 | .phy_addr = MV643XX_ETH_PHY_ADDR(0), |
71 | }; | 43 | }; |
72 | 44 | ||
73 | static struct mvsdio_platform_data sheevaplug_mvsdio_data = { | 45 | static struct mvsdio_platform_data sheevaplug_mvsdio_data = { |
74 | // unfortunately the CD signal has not been connected */ | 46 | /* unfortunately the CD signal has not been connected */ |
75 | }; | 47 | }; |
76 | 48 | ||
77 | static struct gpio_led sheevaplug_led_pins[] = { | 49 | static struct gpio_led sheevaplug_led_pins[] = { |
@@ -111,6 +83,7 @@ static void __init sheevaplug_init(void) | |||
111 | kirkwood_mpp_conf(sheevaplug_mpp_config); | 83 | kirkwood_mpp_conf(sheevaplug_mpp_config); |
112 | 84 | ||
113 | kirkwood_uart0_init(); | 85 | kirkwood_uart0_init(); |
86 | kirkwood_nand_init(ARRAY_AND_SIZE(sheevaplug_nand_parts), 25); | ||
114 | 87 | ||
115 | if (gpio_request(29, "USB Power Enable") != 0 || | 88 | if (gpio_request(29, "USB Power Enable") != 0 || |
116 | gpio_direction_output(29, 1) != 0) | 89 | gpio_direction_output(29, 1) != 0) |
@@ -120,7 +93,6 @@ static void __init sheevaplug_init(void) | |||
120 | kirkwood_ge00_init(&sheevaplug_ge00_data); | 93 | kirkwood_ge00_init(&sheevaplug_ge00_data); |
121 | kirkwood_sdio_init(&sheevaplug_mvsdio_data); | 94 | kirkwood_sdio_init(&sheevaplug_mvsdio_data); |
122 | 95 | ||
123 | platform_device_register(&sheevaplug_nand_flash); | ||
124 | platform_device_register(&sheevaplug_leds); | 96 | platform_device_register(&sheevaplug_leds); |
125 | } | 97 | } |
126 | 98 | ||
diff --git a/arch/arm/mach-kirkwood/ts219-setup.c b/arch/arm/mach-kirkwood/ts219-setup.c index dda5743cf3e0..01aa213c0a6f 100644 --- a/arch/arm/mach-kirkwood/ts219-setup.c +++ b/arch/arm/mach-kirkwood/ts219-setup.c | |||
@@ -142,6 +142,8 @@ static unsigned int qnap_ts219_mpp_config[] __initdata = { | |||
142 | MPP1_SPI_MOSI, | 142 | MPP1_SPI_MOSI, |
143 | MPP2_SPI_SCK, | 143 | MPP2_SPI_SCK, |
144 | MPP3_SPI_MISO, | 144 | MPP3_SPI_MISO, |
145 | MPP4_SATA1_ACTn, | ||
146 | MPP5_SATA0_ACTn, | ||
145 | MPP8_TW_SDA, | 147 | MPP8_TW_SDA, |
146 | MPP9_TW_SCK, | 148 | MPP9_TW_SCK, |
147 | MPP10_UART0_TXD, | 149 | MPP10_UART0_TXD, |
@@ -150,10 +152,6 @@ static unsigned int qnap_ts219_mpp_config[] __initdata = { | |||
150 | MPP14_UART1_RXD, /* PIC controller */ | 152 | MPP14_UART1_RXD, /* PIC controller */ |
151 | MPP15_GPIO, /* USB Copy button */ | 153 | MPP15_GPIO, /* USB Copy button */ |
152 | MPP16_GPIO, /* Reset button */ | 154 | MPP16_GPIO, /* Reset button */ |
153 | MPP20_SATA1_ACTn, | ||
154 | MPP21_SATA0_ACTn, | ||
155 | MPP22_SATA1_PRESENTn, | ||
156 | MPP23_SATA0_PRESENTn, | ||
157 | 0 | 155 | 0 |
158 | }; | 156 | }; |
159 | 157 | ||
diff --git a/arch/arm/mach-loki/common.c b/arch/arm/mach-loki/common.c index c0d2d9d12e74..818f19d7ab1f 100644 --- a/arch/arm/mach-loki/common.c +++ b/arch/arm/mach-loki/common.c | |||
@@ -82,6 +82,9 @@ static struct platform_device loki_ge0 = { | |||
82 | .id = 0, | 82 | .id = 0, |
83 | .num_resources = 1, | 83 | .num_resources = 1, |
84 | .resource = loki_ge0_resources, | 84 | .resource = loki_ge0_resources, |
85 | .dev = { | ||
86 | .coherent_dma_mask = 0xffffffff, | ||
87 | }, | ||
85 | }; | 88 | }; |
86 | 89 | ||
87 | void __init loki_ge0_init(struct mv643xx_eth_platform_data *eth_data) | 90 | void __init loki_ge0_init(struct mv643xx_eth_platform_data *eth_data) |
@@ -136,6 +139,9 @@ static struct platform_device loki_ge1 = { | |||
136 | .id = 1, | 139 | .id = 1, |
137 | .num_resources = 1, | 140 | .num_resources = 1, |
138 | .resource = loki_ge1_resources, | 141 | .resource = loki_ge1_resources, |
142 | .dev = { | ||
143 | .coherent_dma_mask = 0xffffffff, | ||
144 | }, | ||
139 | }; | 145 | }; |
140 | 146 | ||
141 | void __init loki_ge1_init(struct mv643xx_eth_platform_data *eth_data) | 147 | void __init loki_ge1_init(struct mv643xx_eth_platform_data *eth_data) |
diff --git a/arch/arm/mach-mmp/include/mach/mfp-pxa168.h b/arch/arm/mach-mmp/include/mach/mfp-pxa168.h index d0bdb6e3682b..2e914649b9e4 100644 --- a/arch/arm/mach-mmp/include/mach/mfp-pxa168.h +++ b/arch/arm/mach-mmp/include/mach/mfp-pxa168.h | |||
@@ -3,6 +3,11 @@ | |||
3 | 3 | ||
4 | #include <mach/mfp.h> | 4 | #include <mach/mfp.h> |
5 | 5 | ||
6 | #define MFP_DRIVE_VERY_SLOW (0x0 << 13) | ||
7 | #define MFP_DRIVE_SLOW (0x1 << 13) | ||
8 | #define MFP_DRIVE_MEDIUM (0x2 << 13) | ||
9 | #define MFP_DRIVE_FAST (0x3 << 13) | ||
10 | |||
6 | /* GPIO */ | 11 | /* GPIO */ |
7 | #define GPIO0_GPIO MFP_CFG(GPIO0, AF5) | 12 | #define GPIO0_GPIO MFP_CFG(GPIO0, AF5) |
8 | #define GPIO1_GPIO MFP_CFG(GPIO1, AF5) | 13 | #define GPIO1_GPIO MFP_CFG(GPIO1, AF5) |
diff --git a/arch/arm/mach-mmp/include/mach/mfp-pxa910.h b/arch/arm/mach-mmp/include/mach/mfp-pxa910.h index 48a1cbc7c56b..d97de36c50ad 100644 --- a/arch/arm/mach-mmp/include/mach/mfp-pxa910.h +++ b/arch/arm/mach-mmp/include/mach/mfp-pxa910.h | |||
@@ -3,6 +3,11 @@ | |||
3 | 3 | ||
4 | #include <mach/mfp.h> | 4 | #include <mach/mfp.h> |
5 | 5 | ||
6 | #define MFP_DRIVE_VERY_SLOW (0x0 << 13) | ||
7 | #define MFP_DRIVE_SLOW (0x2 << 13) | ||
8 | #define MFP_DRIVE_MEDIUM (0x4 << 13) | ||
9 | #define MFP_DRIVE_FAST (0x8 << 13) | ||
10 | |||
6 | /* UART2 */ | 11 | /* UART2 */ |
7 | #define GPIO47_UART2_RXD MFP_CFG(GPIO47, AF6) | 12 | #define GPIO47_UART2_RXD MFP_CFG(GPIO47, AF6) |
8 | #define GPIO48_UART2_TXD MFP_CFG(GPIO48, AF6) | 13 | #define GPIO48_UART2_TXD MFP_CFG(GPIO48, AF6) |
diff --git a/arch/arm/mach-mmp/include/mach/mfp.h b/arch/arm/mach-mmp/include/mach/mfp.h index 277ea4cd0f9f..62e510e80a58 100644 --- a/arch/arm/mach-mmp/include/mach/mfp.h +++ b/arch/arm/mach-mmp/include/mach/mfp.h | |||
@@ -12,16 +12,13 @@ | |||
12 | * possible, we make the following compromise: | 12 | * possible, we make the following compromise: |
13 | * | 13 | * |
14 | * 1. SLEEP_OE_N will always be programmed to '1' (by MFP_LPM_FLOAT) | 14 | * 1. SLEEP_OE_N will always be programmed to '1' (by MFP_LPM_FLOAT) |
15 | * 2. DRIVE strength definitions redefined to include the reserved bit10 | 15 | * 2. DRIVE strength definitions redefined to include the reserved bit |
16 | * - the reserved bit differs between pxa168 and pxa910, and the | ||
17 | * MFP_DRIVE_* macros are individually defined in mfp-pxa{168,910}.h | ||
16 | * 3. Override MFP_CFG() and MFP_CFG_DRV() | 18 | * 3. Override MFP_CFG() and MFP_CFG_DRV() |
17 | * 4. Drop the use of MFP_CFG_LPM() and MFP_CFG_X() | 19 | * 4. Drop the use of MFP_CFG_LPM() and MFP_CFG_X() |
18 | */ | 20 | */ |
19 | 21 | ||
20 | #define MFP_DRIVE_VERY_SLOW (0x0 << 13) | ||
21 | #define MFP_DRIVE_SLOW (0x2 << 13) | ||
22 | #define MFP_DRIVE_MEDIUM (0x4 << 13) | ||
23 | #define MFP_DRIVE_FAST (0x8 << 13) | ||
24 | |||
25 | #undef MFP_CFG | 22 | #undef MFP_CFG |
26 | #undef MFP_CFG_DRV | 23 | #undef MFP_CFG_DRV |
27 | #undef MFP_CFG_LPM | 24 | #undef MFP_CFG_LPM |
diff --git a/arch/arm/mach-mmp/time.c b/arch/arm/mach-mmp/time.c index b03a6eda7419..a8400bb891e7 100644 --- a/arch/arm/mach-mmp/time.c +++ b/arch/arm/mach-mmp/time.c | |||
@@ -136,7 +136,7 @@ static struct clock_event_device ckevt = { | |||
136 | .set_mode = timer_set_mode, | 136 | .set_mode = timer_set_mode, |
137 | }; | 137 | }; |
138 | 138 | ||
139 | static cycle_t clksrc_read(void) | 139 | static cycle_t clksrc_read(struct clocksource *cs) |
140 | { | 140 | { |
141 | return timer_read(); | 141 | return timer_read(); |
142 | } | 142 | } |
diff --git a/arch/arm/mach-mv78xx0/common.c b/arch/arm/mach-mv78xx0/common.c index 9ba595083dab..1b22e4af8791 100644 --- a/arch/arm/mach-mv78xx0/common.c +++ b/arch/arm/mach-mv78xx0/common.c | |||
@@ -321,6 +321,9 @@ static struct platform_device mv78xx0_ge00 = { | |||
321 | .id = 0, | 321 | .id = 0, |
322 | .num_resources = 1, | 322 | .num_resources = 1, |
323 | .resource = mv78xx0_ge00_resources, | 323 | .resource = mv78xx0_ge00_resources, |
324 | .dev = { | ||
325 | .coherent_dma_mask = 0xffffffff, | ||
326 | }, | ||
324 | }; | 327 | }; |
325 | 328 | ||
326 | void __init mv78xx0_ge00_init(struct mv643xx_eth_platform_data *eth_data) | 329 | void __init mv78xx0_ge00_init(struct mv643xx_eth_platform_data *eth_data) |
@@ -375,6 +378,9 @@ static struct platform_device mv78xx0_ge01 = { | |||
375 | .id = 1, | 378 | .id = 1, |
376 | .num_resources = 1, | 379 | .num_resources = 1, |
377 | .resource = mv78xx0_ge01_resources, | 380 | .resource = mv78xx0_ge01_resources, |
381 | .dev = { | ||
382 | .coherent_dma_mask = 0xffffffff, | ||
383 | }, | ||
378 | }; | 384 | }; |
379 | 385 | ||
380 | void __init mv78xx0_ge01_init(struct mv643xx_eth_platform_data *eth_data) | 386 | void __init mv78xx0_ge01_init(struct mv643xx_eth_platform_data *eth_data) |
@@ -429,6 +435,9 @@ static struct platform_device mv78xx0_ge10 = { | |||
429 | .id = 2, | 435 | .id = 2, |
430 | .num_resources = 1, | 436 | .num_resources = 1, |
431 | .resource = mv78xx0_ge10_resources, | 437 | .resource = mv78xx0_ge10_resources, |
438 | .dev = { | ||
439 | .coherent_dma_mask = 0xffffffff, | ||
440 | }, | ||
432 | }; | 441 | }; |
433 | 442 | ||
434 | void __init mv78xx0_ge10_init(struct mv643xx_eth_platform_data *eth_data) | 443 | void __init mv78xx0_ge10_init(struct mv643xx_eth_platform_data *eth_data) |
@@ -496,6 +505,9 @@ static struct platform_device mv78xx0_ge11 = { | |||
496 | .id = 3, | 505 | .id = 3, |
497 | .num_resources = 1, | 506 | .num_resources = 1, |
498 | .resource = mv78xx0_ge11_resources, | 507 | .resource = mv78xx0_ge11_resources, |
508 | .dev = { | ||
509 | .coherent_dma_mask = 0xffffffff, | ||
510 | }, | ||
499 | }; | 511 | }; |
500 | 512 | ||
501 | void __init mv78xx0_ge11_init(struct mv643xx_eth_platform_data *eth_data) | 513 | void __init mv78xx0_ge11_init(struct mv643xx_eth_platform_data *eth_data) |
@@ -532,12 +544,10 @@ static struct mv64xxx_i2c_pdata mv78xx0_i2c_0_pdata = { | |||
532 | 544 | ||
533 | static struct resource mv78xx0_i2c_0_resources[] = { | 545 | static struct resource mv78xx0_i2c_0_resources[] = { |
534 | { | 546 | { |
535 | .name = "i2c 0 base", | ||
536 | .start = I2C_0_PHYS_BASE, | 547 | .start = I2C_0_PHYS_BASE, |
537 | .end = I2C_0_PHYS_BASE + 0x1f, | 548 | .end = I2C_0_PHYS_BASE + 0x1f, |
538 | .flags = IORESOURCE_MEM, | 549 | .flags = IORESOURCE_MEM, |
539 | }, { | 550 | }, { |
540 | .name = "i2c 0 irq", | ||
541 | .start = IRQ_MV78XX0_I2C_0, | 551 | .start = IRQ_MV78XX0_I2C_0, |
542 | .end = IRQ_MV78XX0_I2C_0, | 552 | .end = IRQ_MV78XX0_I2C_0, |
543 | .flags = IORESOURCE_IRQ, | 553 | .flags = IORESOURCE_IRQ, |
@@ -567,12 +577,10 @@ static struct mv64xxx_i2c_pdata mv78xx0_i2c_1_pdata = { | |||
567 | 577 | ||
568 | static struct resource mv78xx0_i2c_1_resources[] = { | 578 | static struct resource mv78xx0_i2c_1_resources[] = { |
569 | { | 579 | { |
570 | .name = "i2c 1 base", | ||
571 | .start = I2C_1_PHYS_BASE, | 580 | .start = I2C_1_PHYS_BASE, |
572 | .end = I2C_1_PHYS_BASE + 0x1f, | 581 | .end = I2C_1_PHYS_BASE + 0x1f, |
573 | .flags = IORESOURCE_MEM, | 582 | .flags = IORESOURCE_MEM, |
574 | }, { | 583 | }, { |
575 | .name = "i2c 1 irq", | ||
576 | .start = IRQ_MV78XX0_I2C_1, | 584 | .start = IRQ_MV78XX0_I2C_1, |
577 | .end = IRQ_MV78XX0_I2C_1, | 585 | .end = IRQ_MV78XX0_I2C_1, |
578 | .flags = IORESOURCE_IRQ, | 586 | .flags = IORESOURCE_IRQ, |
diff --git a/arch/arm/mach-mv78xx0/irq.c b/arch/arm/mach-mv78xx0/irq.c index f289b0ea7dcf..22b4ff893b3c 100644 --- a/arch/arm/mach-mv78xx0/irq.c +++ b/arch/arm/mach-mv78xx0/irq.c | |||
@@ -28,6 +28,9 @@ void __init mv78xx0_init_irq(void) | |||
28 | { | 28 | { |
29 | int i; | 29 | int i; |
30 | 30 | ||
31 | /* Initialize gpiolib. */ | ||
32 | orion_gpio_init(); | ||
33 | |||
31 | orion_irq_init(0, (void __iomem *)(IRQ_VIRT_BASE + IRQ_MASK_LOW_OFF)); | 34 | orion_irq_init(0, (void __iomem *)(IRQ_VIRT_BASE + IRQ_MASK_LOW_OFF)); |
32 | orion_irq_init(32, (void __iomem *)(IRQ_VIRT_BASE + IRQ_MASK_HIGH_OFF)); | 35 | orion_irq_init(32, (void __iomem *)(IRQ_VIRT_BASE + IRQ_MASK_HIGH_OFF)); |
33 | orion_irq_init(64, (void __iomem *)(IRQ_VIRT_BASE + IRQ_MASK_ERR_OFF)); | 36 | orion_irq_init(64, (void __iomem *)(IRQ_VIRT_BASE + IRQ_MASK_ERR_OFF)); |
diff --git a/arch/arm/mach-orion5x/addr-map.c b/arch/arm/mach-orion5x/addr-map.c index c14d12137276..6f3f77d031d0 100644 --- a/arch/arm/mach-orion5x/addr-map.c +++ b/arch/arm/mach-orion5x/addr-map.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
15 | #include <linux/mbus.h> | 15 | #include <linux/mbus.h> |
16 | #include <linux/io.h> | 16 | #include <linux/io.h> |
17 | #include <linux/errno.h> | ||
17 | #include <mach/hardware.h> | 18 | #include <mach/hardware.h> |
18 | #include "common.h" | 19 | #include "common.h" |
19 | 20 | ||
@@ -44,6 +45,7 @@ | |||
44 | #define TARGET_DEV_BUS 1 | 45 | #define TARGET_DEV_BUS 1 |
45 | #define TARGET_PCI 3 | 46 | #define TARGET_PCI 3 |
46 | #define TARGET_PCIE 4 | 47 | #define TARGET_PCIE 4 |
48 | #define TARGET_SRAM 9 | ||
47 | #define ATTR_PCIE_MEM 0x59 | 49 | #define ATTR_PCIE_MEM 0x59 |
48 | #define ATTR_PCIE_IO 0x51 | 50 | #define ATTR_PCIE_IO 0x51 |
49 | #define ATTR_PCIE_WA 0x79 | 51 | #define ATTR_PCIE_WA 0x79 |
@@ -53,6 +55,7 @@ | |||
53 | #define ATTR_DEV_CS1 0x1d | 55 | #define ATTR_DEV_CS1 0x1d |
54 | #define ATTR_DEV_CS2 0x1b | 56 | #define ATTR_DEV_CS2 0x1b |
55 | #define ATTR_DEV_BOOT 0xf | 57 | #define ATTR_DEV_BOOT 0xf |
58 | #define ATTR_SRAM 0x0 | ||
56 | 59 | ||
57 | /* | 60 | /* |
58 | * Helpers to get DDR bank info | 61 | * Helpers to get DDR bank info |
@@ -87,13 +90,13 @@ static int __init orion5x_cpu_win_can_remap(int win) | |||
87 | return 0; | 90 | return 0; |
88 | } | 91 | } |
89 | 92 | ||
90 | static void __init setup_cpu_win(int win, u32 base, u32 size, | 93 | static int __init setup_cpu_win(int win, u32 base, u32 size, |
91 | u8 target, u8 attr, int remap) | 94 | u8 target, u8 attr, int remap) |
92 | { | 95 | { |
93 | if (win >= 8) { | 96 | if (win >= 8) { |
94 | printk(KERN_ERR "setup_cpu_win: trying to allocate " | 97 | printk(KERN_ERR "setup_cpu_win: trying to allocate " |
95 | "window %d\n", win); | 98 | "window %d\n", win); |
96 | return; | 99 | return -ENOSPC; |
97 | } | 100 | } |
98 | 101 | ||
99 | writel(base & 0xffff0000, CPU_WIN_BASE(win)); | 102 | writel(base & 0xffff0000, CPU_WIN_BASE(win)); |
@@ -107,6 +110,7 @@ static void __init setup_cpu_win(int win, u32 base, u32 size, | |||
107 | writel(remap & 0xffff0000, CPU_WIN_REMAP_LO(win)); | 110 | writel(remap & 0xffff0000, CPU_WIN_REMAP_LO(win)); |
108 | writel(0, CPU_WIN_REMAP_HI(win)); | 111 | writel(0, CPU_WIN_REMAP_HI(win)); |
109 | } | 112 | } |
113 | return 0; | ||
110 | } | 114 | } |
111 | 115 | ||
112 | void __init orion5x_setup_cpu_mbus_bridge(void) | 116 | void __init orion5x_setup_cpu_mbus_bridge(void) |
@@ -193,3 +197,9 @@ void __init orion5x_setup_pcie_wa_win(u32 base, u32 size) | |||
193 | setup_cpu_win(win_alloc_count++, base, size, | 197 | setup_cpu_win(win_alloc_count++, base, size, |
194 | TARGET_PCIE, ATTR_PCIE_WA, -1); | 198 | TARGET_PCIE, ATTR_PCIE_WA, -1); |
195 | } | 199 | } |
200 | |||
201 | int __init orion5x_setup_sram_win(void) | ||
202 | { | ||
203 | return setup_cpu_win(win_alloc_count, ORION5X_SRAM_PHYS_BASE, | ||
204 | ORION5X_SRAM_SIZE, TARGET_SRAM, ATTR_SRAM, -1); | ||
205 | } | ||
diff --git a/arch/arm/mach-orion5x/common.c b/arch/arm/mach-orion5x/common.c index 6af99ddabdfb..eafcc49009ea 100644 --- a/arch/arm/mach-orion5x/common.c +++ b/arch/arm/mach-orion5x/common.c | |||
@@ -31,7 +31,7 @@ | |||
31 | #include <plat/ehci-orion.h> | 31 | #include <plat/ehci-orion.h> |
32 | #include <plat/mv_xor.h> | 32 | #include <plat/mv_xor.h> |
33 | #include <plat/orion_nand.h> | 33 | #include <plat/orion_nand.h> |
34 | #include <plat/orion5x_wdt.h> | 34 | #include <plat/orion_wdt.h> |
35 | #include <plat/time.h> | 35 | #include <plat/time.h> |
36 | #include "common.h" | 36 | #include "common.h" |
37 | 37 | ||
@@ -188,6 +188,9 @@ static struct platform_device orion5x_eth = { | |||
188 | .id = 0, | 188 | .id = 0, |
189 | .num_resources = 1, | 189 | .num_resources = 1, |
190 | .resource = orion5x_eth_resources, | 190 | .resource = orion5x_eth_resources, |
191 | .dev = { | ||
192 | .coherent_dma_mask = 0xffffffff, | ||
193 | }, | ||
191 | }; | 194 | }; |
192 | 195 | ||
193 | void __init orion5x_eth_init(struct mv643xx_eth_platform_data *eth_data) | 196 | void __init orion5x_eth_init(struct mv643xx_eth_platform_data *eth_data) |
@@ -248,12 +251,10 @@ static struct mv64xxx_i2c_pdata orion5x_i2c_pdata = { | |||
248 | 251 | ||
249 | static struct resource orion5x_i2c_resources[] = { | 252 | static struct resource orion5x_i2c_resources[] = { |
250 | { | 253 | { |
251 | .name = "i2c base", | ||
252 | .start = I2C_PHYS_BASE, | 254 | .start = I2C_PHYS_BASE, |
253 | .end = I2C_PHYS_BASE + 0x1f, | 255 | .end = I2C_PHYS_BASE + 0x1f, |
254 | .flags = IORESOURCE_MEM, | 256 | .flags = IORESOURCE_MEM, |
255 | }, { | 257 | }, { |
256 | .name = "i2c irq", | ||
257 | .start = IRQ_ORION5X_I2C, | 258 | .start = IRQ_ORION5X_I2C, |
258 | .end = IRQ_ORION5X_I2C, | 259 | .end = IRQ_ORION5X_I2C, |
259 | .flags = IORESOURCE_IRQ, | 260 | .flags = IORESOURCE_IRQ, |
@@ -535,16 +536,52 @@ void __init orion5x_xor_init(void) | |||
535 | platform_device_register(&orion5x_xor1_channel); | 536 | platform_device_register(&orion5x_xor1_channel); |
536 | } | 537 | } |
537 | 538 | ||
539 | static struct resource orion5x_crypto_res[] = { | ||
540 | { | ||
541 | .name = "regs", | ||
542 | .start = ORION5X_CRYPTO_PHYS_BASE, | ||
543 | .end = ORION5X_CRYPTO_PHYS_BASE + 0xffff, | ||
544 | .flags = IORESOURCE_MEM, | ||
545 | }, { | ||
546 | .name = "sram", | ||
547 | .start = ORION5X_SRAM_PHYS_BASE, | ||
548 | .end = ORION5X_SRAM_PHYS_BASE + SZ_8K - 1, | ||
549 | .flags = IORESOURCE_MEM, | ||
550 | }, { | ||
551 | .name = "crypto interrupt", | ||
552 | .start = IRQ_ORION5X_CESA, | ||
553 | .end = IRQ_ORION5X_CESA, | ||
554 | .flags = IORESOURCE_IRQ, | ||
555 | }, | ||
556 | }; | ||
557 | |||
558 | static struct platform_device orion5x_crypto_device = { | ||
559 | .name = "mv_crypto", | ||
560 | .id = -1, | ||
561 | .num_resources = ARRAY_SIZE(orion5x_crypto_res), | ||
562 | .resource = orion5x_crypto_res, | ||
563 | }; | ||
564 | |||
565 | int __init orion5x_crypto_init(void) | ||
566 | { | ||
567 | int ret; | ||
568 | |||
569 | ret = orion5x_setup_sram_win(); | ||
570 | if (ret) | ||
571 | return ret; | ||
572 | |||
573 | return platform_device_register(&orion5x_crypto_device); | ||
574 | } | ||
538 | 575 | ||
539 | /***************************************************************************** | 576 | /***************************************************************************** |
540 | * Watchdog | 577 | * Watchdog |
541 | ****************************************************************************/ | 578 | ****************************************************************************/ |
542 | static struct orion5x_wdt_platform_data orion5x_wdt_data = { | 579 | static struct orion_wdt_platform_data orion5x_wdt_data = { |
543 | .tclk = 0, | 580 | .tclk = 0, |
544 | }; | 581 | }; |
545 | 582 | ||
546 | static struct platform_device orion5x_wdt_device = { | 583 | static struct platform_device orion5x_wdt_device = { |
547 | .name = "orion5x_wdt", | 584 | .name = "orion_wdt", |
548 | .id = -1, | 585 | .id = -1, |
549 | .dev = { | 586 | .dev = { |
550 | .platform_data = &orion5x_wdt_data, | 587 | .platform_data = &orion5x_wdt_data, |
diff --git a/arch/arm/mach-orion5x/common.h b/arch/arm/mach-orion5x/common.h index 798b9a5e3da9..de483e83edd7 100644 --- a/arch/arm/mach-orion5x/common.h +++ b/arch/arm/mach-orion5x/common.h | |||
@@ -26,6 +26,7 @@ void orion5x_setup_dev0_win(u32 base, u32 size); | |||
26 | void orion5x_setup_dev1_win(u32 base, u32 size); | 26 | void orion5x_setup_dev1_win(u32 base, u32 size); |
27 | void orion5x_setup_dev2_win(u32 base, u32 size); | 27 | void orion5x_setup_dev2_win(u32 base, u32 size); |
28 | void orion5x_setup_pcie_wa_win(u32 base, u32 size); | 28 | void orion5x_setup_pcie_wa_win(u32 base, u32 size); |
29 | int orion5x_setup_sram_win(void); | ||
29 | 30 | ||
30 | void orion5x_ehci0_init(void); | 31 | void orion5x_ehci0_init(void); |
31 | void orion5x_ehci1_init(void); | 32 | void orion5x_ehci1_init(void); |
@@ -37,6 +38,7 @@ void orion5x_spi_init(void); | |||
37 | void orion5x_uart0_init(void); | 38 | void orion5x_uart0_init(void); |
38 | void orion5x_uart1_init(void); | 39 | void orion5x_uart1_init(void); |
39 | void orion5x_xor_init(void); | 40 | void orion5x_xor_init(void); |
41 | int orion5x_crypto_init(void); | ||
40 | 42 | ||
41 | /* | 43 | /* |
42 | * PCIe/PCI functions. | 44 | * PCIe/PCI functions. |
diff --git a/arch/arm/mach-orion5x/include/mach/bridge-regs.h b/arch/arm/mach-orion5x/include/mach/bridge-regs.h index be896e59d3e7..5c9744cd8ef6 100644 --- a/arch/arm/mach-orion5x/include/mach/bridge-regs.h +++ b/arch/arm/mach-orion5x/include/mach/bridge-regs.h | |||
@@ -17,8 +17,8 @@ | |||
17 | 17 | ||
18 | #define CPU_CTRL (ORION5X_BRIDGE_VIRT_BASE | 0x104) | 18 | #define CPU_CTRL (ORION5X_BRIDGE_VIRT_BASE | 0x104) |
19 | 19 | ||
20 | #define CPU_RESET_MASK (ORION5X_BRIDGE_VIRT_BASE | 0x108) | 20 | #define RSTOUTn_MASK (ORION5X_BRIDGE_VIRT_BASE | 0x108) |
21 | #define WDT_RESET 0x0002 | 21 | #define WDT_RESET_OUT_EN 0x0002 |
22 | 22 | ||
23 | #define CPU_SOFT_RESET (ORION5X_BRIDGE_VIRT_BASE | 0x10c) | 23 | #define CPU_SOFT_RESET (ORION5X_BRIDGE_VIRT_BASE | 0x10c) |
24 | 24 | ||
diff --git a/arch/arm/mach-orion5x/include/mach/orion5x.h b/arch/arm/mach-orion5x/include/mach/orion5x.h index 377a773ae53f..2d8766570531 100644 --- a/arch/arm/mach-orion5x/include/mach/orion5x.h +++ b/arch/arm/mach-orion5x/include/mach/orion5x.h | |||
@@ -24,6 +24,7 @@ | |||
24 | * f1000000 on-chip peripheral registers | 24 | * f1000000 on-chip peripheral registers |
25 | * f2000000 PCIe I/O space | 25 | * f2000000 PCIe I/O space |
26 | * f2100000 PCI I/O space | 26 | * f2100000 PCI I/O space |
27 | * f2200000 SRAM dedicated for the crypto unit | ||
27 | * f4000000 device bus mappings (boot) | 28 | * f4000000 device bus mappings (boot) |
28 | * fa000000 device bus mappings (cs0) | 29 | * fa000000 device bus mappings (cs0) |
29 | * fa800000 device bus mappings (cs2) | 30 | * fa800000 device bus mappings (cs2) |
@@ -49,6 +50,9 @@ | |||
49 | #define ORION5X_PCI_IO_BUS_BASE 0x00100000 | 50 | #define ORION5X_PCI_IO_BUS_BASE 0x00100000 |
50 | #define ORION5X_PCI_IO_SIZE SZ_1M | 51 | #define ORION5X_PCI_IO_SIZE SZ_1M |
51 | 52 | ||
53 | #define ORION5X_SRAM_PHYS_BASE (0xf2200000) | ||
54 | #define ORION5X_SRAM_SIZE SZ_8K | ||
55 | |||
52 | /* Relevant only for Orion-1/Orion-NAS */ | 56 | /* Relevant only for Orion-1/Orion-NAS */ |
53 | #define ORION5X_PCIE_WA_PHYS_BASE 0xf0000000 | 57 | #define ORION5X_PCIE_WA_PHYS_BASE 0xf0000000 |
54 | #define ORION5X_PCIE_WA_VIRT_BASE 0xfe000000 | 58 | #define ORION5X_PCIE_WA_VIRT_BASE 0xfe000000 |
@@ -94,6 +98,8 @@ | |||
94 | #define ORION5X_SATA_PHYS_BASE (ORION5X_REGS_PHYS_BASE | 0x80000) | 98 | #define ORION5X_SATA_PHYS_BASE (ORION5X_REGS_PHYS_BASE | 0x80000) |
95 | #define ORION5X_SATA_VIRT_BASE (ORION5X_REGS_VIRT_BASE | 0x80000) | 99 | #define ORION5X_SATA_VIRT_BASE (ORION5X_REGS_VIRT_BASE | 0x80000) |
96 | 100 | ||
101 | #define ORION5X_CRYPTO_PHYS_BASE (ORION5X_REGS_PHYS_BASE | 0x90000) | ||
102 | |||
97 | #define ORION5X_USB1_PHYS_BASE (ORION5X_REGS_PHYS_BASE | 0xa0000) | 103 | #define ORION5X_USB1_PHYS_BASE (ORION5X_REGS_PHYS_BASE | 0xa0000) |
98 | #define ORION5X_USB1_VIRT_BASE (ORION5X_REGS_VIRT_BASE | 0xa0000) | 104 | #define ORION5X_USB1_VIRT_BASE (ORION5X_REGS_VIRT_BASE | 0xa0000) |
99 | 105 | ||
diff --git a/arch/arm/mach-orion5x/include/mach/system.h b/arch/arm/mach-orion5x/include/mach/system.h index e912490fff23..60e734c10458 100644 --- a/arch/arm/mach-orion5x/include/mach/system.h +++ b/arch/arm/mach-orion5x/include/mach/system.h | |||
@@ -23,7 +23,7 @@ static inline void arch_reset(char mode, const char *cmd) | |||
23 | /* | 23 | /* |
24 | * Enable and issue soft reset | 24 | * Enable and issue soft reset |
25 | */ | 25 | */ |
26 | orion5x_setbits(CPU_RESET_MASK, (1 << 2)); | 26 | orion5x_setbits(RSTOUTn_MASK, (1 << 2)); |
27 | orion5x_setbits(CPU_SOFT_RESET, 1); | 27 | orion5x_setbits(CPU_SOFT_RESET, 1); |
28 | } | 28 | } |
29 | 29 | ||
diff --git a/arch/arm/mach-orion5x/mpp.c b/arch/arm/mach-orion5x/mpp.c index e23a3f91d6c6..bc4c3b9aaf83 100644 --- a/arch/arm/mach-orion5x/mpp.c +++ b/arch/arm/mach-orion5x/mpp.c | |||
@@ -124,6 +124,9 @@ void __init orion5x_mpp_conf(struct orion5x_mpp_mode *mode) | |||
124 | u32 mpp_8_15_ctrl = readl(MPP_8_15_CTRL); | 124 | u32 mpp_8_15_ctrl = readl(MPP_8_15_CTRL); |
125 | u32 mpp_16_19_ctrl = readl(MPP_16_19_CTRL); | 125 | u32 mpp_16_19_ctrl = readl(MPP_16_19_CTRL); |
126 | 126 | ||
127 | /* Initialize gpiolib. */ | ||
128 | orion_gpio_init(); | ||
129 | |||
127 | while (mode->mpp >= 0) { | 130 | while (mode->mpp >= 0) { |
128 | u32 *reg; | 131 | u32 *reg; |
129 | int num_type; | 132 | int num_type; |
diff --git a/arch/arm/mach-orion5x/mss2-setup.c b/arch/arm/mach-orion5x/mss2-setup.c index 41e6d5033d54..61c086b66723 100644 --- a/arch/arm/mach-orion5x/mss2-setup.c +++ b/arch/arm/mach-orion5x/mss2-setup.c | |||
@@ -181,9 +181,9 @@ static void mss2_power_off(void) | |||
181 | /* | 181 | /* |
182 | * Enable and issue soft reset | 182 | * Enable and issue soft reset |
183 | */ | 183 | */ |
184 | reg = readl(CPU_RESET_MASK); | 184 | reg = readl(RSTOUTn_MASK); |
185 | reg |= 1 << 2; | 185 | reg |= 1 << 2; |
186 | writel(reg, CPU_RESET_MASK); | 186 | writel(reg, RSTOUTn_MASK); |
187 | 187 | ||
188 | reg = readl(CPU_SOFT_RESET); | 188 | reg = readl(CPU_SOFT_RESET); |
189 | reg |= 1; | 189 | reg |= 1; |
diff --git a/arch/arm/mach-orion5x/ts78xx-fpga.h b/arch/arm/mach-orion5x/ts78xx-fpga.h index 0f9cdf458952..37b3d4875291 100644 --- a/arch/arm/mach-orion5x/ts78xx-fpga.h +++ b/arch/arm/mach-orion5x/ts78xx-fpga.h | |||
@@ -25,6 +25,7 @@ struct fpga_devices { | |||
25 | /* Technologic Systems */ | 25 | /* Technologic Systems */ |
26 | struct fpga_device ts_rtc; | 26 | struct fpga_device ts_rtc; |
27 | struct fpga_device ts_nand; | 27 | struct fpga_device ts_nand; |
28 | struct fpga_device ts_rng; | ||
28 | }; | 29 | }; |
29 | 30 | ||
30 | struct ts78xx_fpga_data { | 31 | struct ts78xx_fpga_data { |
diff --git a/arch/arm/mach-orion5x/ts78xx-setup.c b/arch/arm/mach-orion5x/ts78xx-setup.c index 9a6b397f972d..5041d1bc26b1 100644 --- a/arch/arm/mach-orion5x/ts78xx-setup.c +++ b/arch/arm/mach-orion5x/ts78xx-setup.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include <linux/m48t86.h> | 17 | #include <linux/m48t86.h> |
18 | #include <linux/mtd/nand.h> | 18 | #include <linux/mtd/nand.h> |
19 | #include <linux/mtd/partitions.h> | 19 | #include <linux/mtd/partitions.h> |
20 | #include <linux/timeriomem-rng.h> | ||
20 | #include <asm/mach-types.h> | 21 | #include <asm/mach-types.h> |
21 | #include <asm/mach/arch.h> | 22 | #include <asm/mach/arch.h> |
22 | #include <asm/mach/map.h> | 23 | #include <asm/mach/map.h> |
@@ -270,12 +271,57 @@ static void ts78xx_ts_nand_unload(void) | |||
270 | } | 271 | } |
271 | 272 | ||
272 | /***************************************************************************** | 273 | /***************************************************************************** |
274 | * HW RNG | ||
275 | ****************************************************************************/ | ||
276 | #define TS_RNG_DATA (TS78XX_FPGA_REGS_PHYS_BASE | 0x044) | ||
277 | |||
278 | static struct resource ts78xx_ts_rng_resource = { | ||
279 | .flags = IORESOURCE_MEM, | ||
280 | .start = TS_RNG_DATA, | ||
281 | .end = TS_RNG_DATA + 4 - 1, | ||
282 | }; | ||
283 | |||
284 | static struct timeriomem_rng_data ts78xx_ts_rng_data = { | ||
285 | .period = 1000000, /* one second */ | ||
286 | }; | ||
287 | |||
288 | static struct platform_device ts78xx_ts_rng_device = { | ||
289 | .name = "timeriomem_rng", | ||
290 | .id = -1, | ||
291 | .dev = { | ||
292 | .platform_data = &ts78xx_ts_rng_data, | ||
293 | }, | ||
294 | .resource = &ts78xx_ts_rng_resource, | ||
295 | .num_resources = 1, | ||
296 | }; | ||
297 | |||
298 | static int ts78xx_ts_rng_load(void) | ||
299 | { | ||
300 | int rc; | ||
301 | |||
302 | if (ts78xx_fpga.supports.ts_rng.init == 0) { | ||
303 | rc = platform_device_register(&ts78xx_ts_rng_device); | ||
304 | if (!rc) | ||
305 | ts78xx_fpga.supports.ts_rng.init = 1; | ||
306 | } else | ||
307 | rc = platform_device_add(&ts78xx_ts_rng_device); | ||
308 | |||
309 | return rc; | ||
310 | }; | ||
311 | |||
312 | static void ts78xx_ts_rng_unload(void) | ||
313 | { | ||
314 | platform_device_del(&ts78xx_ts_rng_device); | ||
315 | } | ||
316 | |||
317 | /***************************************************************************** | ||
273 | * FPGA 'hotplug' support code | 318 | * FPGA 'hotplug' support code |
274 | ****************************************************************************/ | 319 | ****************************************************************************/ |
275 | static void ts78xx_fpga_devices_zero_init(void) | 320 | static void ts78xx_fpga_devices_zero_init(void) |
276 | { | 321 | { |
277 | ts78xx_fpga.supports.ts_rtc.init = 0; | 322 | ts78xx_fpga.supports.ts_rtc.init = 0; |
278 | ts78xx_fpga.supports.ts_nand.init = 0; | 323 | ts78xx_fpga.supports.ts_nand.init = 0; |
324 | ts78xx_fpga.supports.ts_rng.init = 0; | ||
279 | } | 325 | } |
280 | 326 | ||
281 | static void ts78xx_fpga_supports(void) | 327 | static void ts78xx_fpga_supports(void) |
@@ -289,10 +335,12 @@ static void ts78xx_fpga_supports(void) | |||
289 | case TS7800_REV_5: | 335 | case TS7800_REV_5: |
290 | ts78xx_fpga.supports.ts_rtc.present = 1; | 336 | ts78xx_fpga.supports.ts_rtc.present = 1; |
291 | ts78xx_fpga.supports.ts_nand.present = 1; | 337 | ts78xx_fpga.supports.ts_nand.present = 1; |
338 | ts78xx_fpga.supports.ts_rng.present = 1; | ||
292 | break; | 339 | break; |
293 | default: | 340 | default: |
294 | ts78xx_fpga.supports.ts_rtc.present = 0; | 341 | ts78xx_fpga.supports.ts_rtc.present = 0; |
295 | ts78xx_fpga.supports.ts_nand.present = 0; | 342 | ts78xx_fpga.supports.ts_nand.present = 0; |
343 | ts78xx_fpga.supports.ts_rng.present = 0; | ||
296 | } | 344 | } |
297 | } | 345 | } |
298 | 346 | ||
@@ -316,6 +364,14 @@ static int ts78xx_fpga_load_devices(void) | |||
316 | } | 364 | } |
317 | ret |= tmp; | 365 | ret |= tmp; |
318 | } | 366 | } |
367 | if (ts78xx_fpga.supports.ts_rng.present == 1) { | ||
368 | tmp = ts78xx_ts_rng_load(); | ||
369 | if (tmp) { | ||
370 | printk(KERN_INFO "TS-78xx: RNG not registered\n"); | ||
371 | ts78xx_fpga.supports.ts_rng.present = 0; | ||
372 | } | ||
373 | ret |= tmp; | ||
374 | } | ||
319 | 375 | ||
320 | return ret; | 376 | return ret; |
321 | } | 377 | } |
@@ -328,6 +384,8 @@ static int ts78xx_fpga_unload_devices(void) | |||
328 | ts78xx_ts_rtc_unload(); | 384 | ts78xx_ts_rtc_unload(); |
329 | if (ts78xx_fpga.supports.ts_nand.present == 1) | 385 | if (ts78xx_fpga.supports.ts_nand.present == 1) |
330 | ts78xx_ts_nand_unload(); | 386 | ts78xx_ts_nand_unload(); |
387 | if (ts78xx_fpga.supports.ts_rng.present == 1) | ||
388 | ts78xx_ts_rng_unload(); | ||
331 | 389 | ||
332 | return ret; | 390 | return ret; |
333 | } | 391 | } |
diff --git a/arch/arm/mach-orion5x/wnr854t-setup.c b/arch/arm/mach-orion5x/wnr854t-setup.c index 7ddc22c2bb54..69208217b220 100644 --- a/arch/arm/mach-orion5x/wnr854t-setup.c +++ b/arch/arm/mach-orion5x/wnr854t-setup.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/mtd/physmap.h> | 15 | #include <linux/mtd/physmap.h> |
16 | #include <linux/mv643xx_eth.h> | 16 | #include <linux/mv643xx_eth.h> |
17 | #include <linux/ethtool.h> | 17 | #include <linux/ethtool.h> |
18 | #include <net/dsa.h> | ||
18 | #include <asm/mach-types.h> | 19 | #include <asm/mach-types.h> |
19 | #include <asm/gpio.h> | 20 | #include <asm/gpio.h> |
20 | #include <asm/mach/arch.h> | 21 | #include <asm/mach/arch.h> |
@@ -97,6 +98,20 @@ static struct mv643xx_eth_platform_data wnr854t_eth_data = { | |||
97 | .duplex = DUPLEX_FULL, | 98 | .duplex = DUPLEX_FULL, |
98 | }; | 99 | }; |
99 | 100 | ||
101 | static struct dsa_chip_data wnr854t_switch_chip_data = { | ||
102 | .port_names[0] = "lan3", | ||
103 | .port_names[1] = "lan4", | ||
104 | .port_names[2] = "wan", | ||
105 | .port_names[3] = "cpu", | ||
106 | .port_names[5] = "lan1", | ||
107 | .port_names[7] = "lan2", | ||
108 | }; | ||
109 | |||
110 | static struct dsa_platform_data wnr854t_switch_plat_data = { | ||
111 | .nr_chips = 1, | ||
112 | .chip = &wnr854t_switch_chip_data, | ||
113 | }; | ||
114 | |||
100 | static void __init wnr854t_init(void) | 115 | static void __init wnr854t_init(void) |
101 | { | 116 | { |
102 | /* | 117 | /* |
@@ -110,6 +125,7 @@ static void __init wnr854t_init(void) | |||
110 | * Configure peripherals. | 125 | * Configure peripherals. |
111 | */ | 126 | */ |
112 | orion5x_eth_init(&wnr854t_eth_data); | 127 | orion5x_eth_init(&wnr854t_eth_data); |
128 | orion5x_eth_switch_init(&wnr854t_switch_plat_data, NO_IRQ); | ||
113 | orion5x_uart0_init(); | 129 | orion5x_uart0_init(); |
114 | 130 | ||
115 | orion5x_setup_dev_boot_win(WNR854T_NOR_BOOT_BASE, | 131 | orion5x_setup_dev_boot_win(WNR854T_NOR_BOOT_BASE, |
diff --git a/arch/arm/mach-pxa/ezx.c b/arch/arm/mach-pxa/ezx.c index 92ba16e1b6fc..7db966dc29ce 100644 --- a/arch/arm/mach-pxa/ezx.c +++ b/arch/arm/mach-pxa/ezx.c | |||
@@ -111,9 +111,9 @@ static unsigned long ezx_pin_config[] __initdata = { | |||
111 | GPIO25_SSP1_TXD, | 111 | GPIO25_SSP1_TXD, |
112 | GPIO26_SSP1_RXD, | 112 | GPIO26_SSP1_RXD, |
113 | GPIO24_GPIO, /* pcap chip select */ | 113 | GPIO24_GPIO, /* pcap chip select */ |
114 | GPIO1_GPIO, /* pcap interrupt */ | 114 | GPIO1_GPIO | WAKEUP_ON_EDGE_RISE, /* pcap interrupt */ |
115 | GPIO4_GPIO, /* WDI_AP */ | 115 | GPIO4_GPIO | MFP_LPM_DRIVE_HIGH, /* WDI_AP */ |
116 | GPIO55_GPIO, /* SYS_RESTART */ | 116 | GPIO55_GPIO | MFP_LPM_DRIVE_HIGH, /* SYS_RESTART */ |
117 | 117 | ||
118 | /* MMC */ | 118 | /* MMC */ |
119 | GPIO32_MMC_CLK, | 119 | GPIO32_MMC_CLK, |
@@ -144,20 +144,20 @@ static unsigned long ezx_pin_config[] __initdata = { | |||
144 | #if defined(CONFIG_MACH_EZX_A780) || defined(CONFIG_MACH_EZX_E680) | 144 | #if defined(CONFIG_MACH_EZX_A780) || defined(CONFIG_MACH_EZX_E680) |
145 | static unsigned long gen1_pin_config[] __initdata = { | 145 | static unsigned long gen1_pin_config[] __initdata = { |
146 | /* flip / lockswitch */ | 146 | /* flip / lockswitch */ |
147 | GPIO12_GPIO, | 147 | GPIO12_GPIO | WAKEUP_ON_EDGE_BOTH, |
148 | 148 | ||
149 | /* bluetooth (bcm2035) */ | 149 | /* bluetooth (bcm2035) */ |
150 | GPIO14_GPIO | WAKEUP_ON_LEVEL_HIGH, /* HOSTWAKE */ | 150 | GPIO14_GPIO | WAKEUP_ON_EDGE_RISE, /* HOSTWAKE */ |
151 | GPIO48_GPIO, /* RESET */ | 151 | GPIO48_GPIO, /* RESET */ |
152 | GPIO28_GPIO, /* WAKEUP */ | 152 | GPIO28_GPIO, /* WAKEUP */ |
153 | 153 | ||
154 | /* Neptune handshake */ | 154 | /* Neptune handshake */ |
155 | GPIO0_GPIO | WAKEUP_ON_LEVEL_HIGH, /* BP_RDY */ | 155 | GPIO0_GPIO | WAKEUP_ON_EDGE_FALL, /* BP_RDY */ |
156 | GPIO57_GPIO, /* AP_RDY */ | 156 | GPIO57_GPIO | MFP_LPM_DRIVE_HIGH, /* AP_RDY */ |
157 | GPIO13_GPIO | WAKEUP_ON_LEVEL_HIGH, /* WDI */ | 157 | GPIO13_GPIO | WAKEUP_ON_EDGE_BOTH, /* WDI */ |
158 | GPIO3_GPIO | WAKEUP_ON_LEVEL_HIGH, /* WDI2 */ | 158 | GPIO3_GPIO | WAKEUP_ON_EDGE_BOTH, /* WDI2 */ |
159 | GPIO82_GPIO, /* RESET */ | 159 | GPIO82_GPIO | MFP_LPM_DRIVE_HIGH, /* RESET */ |
160 | GPIO99_GPIO, /* TC_MM_EN */ | 160 | GPIO99_GPIO | MFP_LPM_DRIVE_HIGH, /* TC_MM_EN */ |
161 | 161 | ||
162 | /* sound */ | 162 | /* sound */ |
163 | GPIO52_SSP3_SCLK, | 163 | GPIO52_SSP3_SCLK, |
@@ -199,21 +199,21 @@ static unsigned long gen1_pin_config[] __initdata = { | |||
199 | defined(CONFIG_MACH_EZX_E2) || defined(CONFIG_MACH_EZX_E6) | 199 | defined(CONFIG_MACH_EZX_E2) || defined(CONFIG_MACH_EZX_E6) |
200 | static unsigned long gen2_pin_config[] __initdata = { | 200 | static unsigned long gen2_pin_config[] __initdata = { |
201 | /* flip / lockswitch */ | 201 | /* flip / lockswitch */ |
202 | GPIO15_GPIO, | 202 | GPIO15_GPIO | WAKEUP_ON_EDGE_BOTH, |
203 | 203 | ||
204 | /* EOC */ | 204 | /* EOC */ |
205 | GPIO10_GPIO, | 205 | GPIO10_GPIO | WAKEUP_ON_EDGE_RISE, |
206 | 206 | ||
207 | /* bluetooth (bcm2045) */ | 207 | /* bluetooth (bcm2045) */ |
208 | GPIO13_GPIO | WAKEUP_ON_LEVEL_HIGH, /* HOSTWAKE */ | 208 | GPIO13_GPIO | WAKEUP_ON_EDGE_RISE, /* HOSTWAKE */ |
209 | GPIO37_GPIO, /* RESET */ | 209 | GPIO37_GPIO, /* RESET */ |
210 | GPIO57_GPIO, /* WAKEUP */ | 210 | GPIO57_GPIO, /* WAKEUP */ |
211 | 211 | ||
212 | /* Neptune handshake */ | 212 | /* Neptune handshake */ |
213 | GPIO0_GPIO | WAKEUP_ON_LEVEL_HIGH, /* BP_RDY */ | 213 | GPIO0_GPIO | WAKEUP_ON_EDGE_FALL, /* BP_RDY */ |
214 | GPIO96_GPIO, /* AP_RDY */ | 214 | GPIO96_GPIO | MFP_LPM_DRIVE_HIGH, /* AP_RDY */ |
215 | GPIO3_GPIO | WAKEUP_ON_LEVEL_HIGH, /* WDI */ | 215 | GPIO3_GPIO | WAKEUP_ON_EDGE_FALL, /* WDI */ |
216 | GPIO116_GPIO, /* RESET */ | 216 | GPIO116_GPIO | MFP_LPM_DRIVE_HIGH, /* RESET */ |
217 | GPIO41_GPIO, /* BP_FLASH */ | 217 | GPIO41_GPIO, /* BP_FLASH */ |
218 | 218 | ||
219 | /* sound */ | 219 | /* sound */ |
diff --git a/arch/arm/mach-pxa/include/mach/reset.h b/arch/arm/mach-pxa/include/mach/reset.h index 31e6a7b6ad80..b6c10556fbc7 100644 --- a/arch/arm/mach-pxa/include/mach/reset.h +++ b/arch/arm/mach-pxa/include/mach/reset.h | |||
@@ -13,8 +13,9 @@ extern void clear_reset_status(unsigned int mask); | |||
13 | /** | 13 | /** |
14 | * init_gpio_reset() - register GPIO as reset generator | 14 | * init_gpio_reset() - register GPIO as reset generator |
15 | * @gpio: gpio nr | 15 | * @gpio: gpio nr |
16 | * @output: set gpio as out/low instead of input during normal work | 16 | * @output: set gpio as output instead of input during normal work |
17 | * @level: output level | ||
17 | */ | 18 | */ |
18 | extern int init_gpio_reset(int gpio, int output); | 19 | extern int init_gpio_reset(int gpio, int output, int level); |
19 | 20 | ||
20 | #endif /* __ASM_ARCH_RESET_H */ | 21 | #endif /* __ASM_ARCH_RESET_H */ |
diff --git a/arch/arm/mach-pxa/mfp-pxa2xx.c b/arch/arm/mach-pxa/mfp-pxa2xx.c index 7ffb91d64c39..cf6b720c055f 100644 --- a/arch/arm/mach-pxa/mfp-pxa2xx.c +++ b/arch/arm/mach-pxa/mfp-pxa2xx.c | |||
@@ -322,6 +322,7 @@ static inline void pxa27x_mfp_init(void) {} | |||
322 | #ifdef CONFIG_PM | 322 | #ifdef CONFIG_PM |
323 | static unsigned long saved_gafr[2][4]; | 323 | static unsigned long saved_gafr[2][4]; |
324 | static unsigned long saved_gpdr[4]; | 324 | static unsigned long saved_gpdr[4]; |
325 | static unsigned long saved_pgsr[4]; | ||
325 | 326 | ||
326 | static int pxa2xx_mfp_suspend(struct sys_device *d, pm_message_t state) | 327 | static int pxa2xx_mfp_suspend(struct sys_device *d, pm_message_t state) |
327 | { | 328 | { |
@@ -332,6 +333,7 @@ static int pxa2xx_mfp_suspend(struct sys_device *d, pm_message_t state) | |||
332 | saved_gafr[0][i] = GAFR_L(i); | 333 | saved_gafr[0][i] = GAFR_L(i); |
333 | saved_gafr[1][i] = GAFR_U(i); | 334 | saved_gafr[1][i] = GAFR_U(i); |
334 | saved_gpdr[i] = GPDR(i * 32); | 335 | saved_gpdr[i] = GPDR(i * 32); |
336 | saved_pgsr[i] = PGSR(i); | ||
335 | 337 | ||
336 | GPDR(i * 32) = gpdr_lpm[i]; | 338 | GPDR(i * 32) = gpdr_lpm[i]; |
337 | } | 339 | } |
@@ -346,6 +348,7 @@ static int pxa2xx_mfp_resume(struct sys_device *d) | |||
346 | GAFR_L(i) = saved_gafr[0][i]; | 348 | GAFR_L(i) = saved_gafr[0][i]; |
347 | GAFR_U(i) = saved_gafr[1][i]; | 349 | GAFR_U(i) = saved_gafr[1][i]; |
348 | GPDR(i * 32) = saved_gpdr[i]; | 350 | GPDR(i * 32) = saved_gpdr[i]; |
351 | PGSR(i) = saved_pgsr[i]; | ||
349 | } | 352 | } |
350 | PSSR = PSSR_RDH | PSSR_PH; | 353 | PSSR = PSSR_RDH | PSSR_PH; |
351 | return 0; | 354 | return 0; |
@@ -374,6 +377,9 @@ static int __init pxa2xx_mfp_init(void) | |||
374 | if (cpu_is_pxa27x()) | 377 | if (cpu_is_pxa27x()) |
375 | pxa27x_mfp_init(); | 378 | pxa27x_mfp_init(); |
376 | 379 | ||
380 | /* clear RDH bit to enable GPIO receivers after reset/sleep exit */ | ||
381 | PSSR = PSSR_RDH; | ||
382 | |||
377 | /* initialize gafr_run[], pgsr_lpm[] from existing values */ | 383 | /* initialize gafr_run[], pgsr_lpm[] from existing values */ |
378 | for (i = 0; i <= gpio_to_bank(pxa_last_gpio); i++) | 384 | for (i = 0; i <= gpio_to_bank(pxa_last_gpio); i++) |
379 | gpdr_lpm[i] = GPDR(i * 32); | 385 | gpdr_lpm[i] = GPDR(i * 32); |
diff --git a/arch/arm/mach-pxa/palmld.c b/arch/arm/mach-pxa/palmld.c index 24a967e1e148..2e65f05d366c 100644 --- a/arch/arm/mach-pxa/palmld.c +++ b/arch/arm/mach-pxa/palmld.c | |||
@@ -62,6 +62,8 @@ static unsigned long palmld_pin_config[] __initdata = { | |||
62 | GPIO29_AC97_SDATA_IN_0, | 62 | GPIO29_AC97_SDATA_IN_0, |
63 | GPIO30_AC97_SDATA_OUT, | 63 | GPIO30_AC97_SDATA_OUT, |
64 | GPIO31_AC97_SYNC, | 64 | GPIO31_AC97_SYNC, |
65 | GPIO89_AC97_SYSCLK, | ||
66 | GPIO95_AC97_nRESET, | ||
65 | 67 | ||
66 | /* IrDA */ | 68 | /* IrDA */ |
67 | GPIO108_GPIO, /* ir disable */ | 69 | GPIO108_GPIO, /* ir disable */ |
diff --git a/arch/arm/mach-pxa/palmt5.c b/arch/arm/mach-pxa/palmt5.c index 30662363907b..05bf979b78a6 100644 --- a/arch/arm/mach-pxa/palmt5.c +++ b/arch/arm/mach-pxa/palmt5.c | |||
@@ -64,6 +64,7 @@ static unsigned long palmt5_pin_config[] __initdata = { | |||
64 | GPIO29_AC97_SDATA_IN_0, | 64 | GPIO29_AC97_SDATA_IN_0, |
65 | GPIO30_AC97_SDATA_OUT, | 65 | GPIO30_AC97_SDATA_OUT, |
66 | GPIO31_AC97_SYNC, | 66 | GPIO31_AC97_SYNC, |
67 | GPIO89_AC97_SYSCLK, | ||
67 | GPIO95_AC97_nRESET, | 68 | GPIO95_AC97_nRESET, |
68 | 69 | ||
69 | /* IrDA */ | 70 | /* IrDA */ |
diff --git a/arch/arm/mach-pxa/palmtx.c b/arch/arm/mach-pxa/palmtx.c index e2d44b1a8a9b..e99a893c58a7 100644 --- a/arch/arm/mach-pxa/palmtx.c +++ b/arch/arm/mach-pxa/palmtx.c | |||
@@ -65,6 +65,7 @@ static unsigned long palmtx_pin_config[] __initdata = { | |||
65 | GPIO29_AC97_SDATA_IN_0, | 65 | GPIO29_AC97_SDATA_IN_0, |
66 | GPIO30_AC97_SDATA_OUT, | 66 | GPIO30_AC97_SDATA_OUT, |
67 | GPIO31_AC97_SYNC, | 67 | GPIO31_AC97_SYNC, |
68 | GPIO89_AC97_SYSCLK, | ||
68 | GPIO95_AC97_nRESET, | 69 | GPIO95_AC97_nRESET, |
69 | 70 | ||
70 | /* IrDA */ | 71 | /* IrDA */ |
diff --git a/arch/arm/mach-pxa/reset.c b/arch/arm/mach-pxa/reset.c index df29d45fb4e7..01e9d643394a 100644 --- a/arch/arm/mach-pxa/reset.c +++ b/arch/arm/mach-pxa/reset.c | |||
@@ -20,7 +20,7 @@ static void do_hw_reset(void); | |||
20 | 20 | ||
21 | static int reset_gpio = -1; | 21 | static int reset_gpio = -1; |
22 | 22 | ||
23 | int init_gpio_reset(int gpio, int output) | 23 | int init_gpio_reset(int gpio, int output, int level) |
24 | { | 24 | { |
25 | int rc; | 25 | int rc; |
26 | 26 | ||
@@ -31,7 +31,7 @@ int init_gpio_reset(int gpio, int output) | |||
31 | } | 31 | } |
32 | 32 | ||
33 | if (output) | 33 | if (output) |
34 | rc = gpio_direction_output(gpio, 0); | 34 | rc = gpio_direction_output(gpio, level); |
35 | else | 35 | else |
36 | rc = gpio_direction_input(gpio); | 36 | rc = gpio_direction_input(gpio); |
37 | if (rc) { | 37 | if (rc) { |
diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c index c18e34acafcb..5a45fe340a10 100644 --- a/arch/arm/mach-pxa/spitz.c +++ b/arch/arm/mach-pxa/spitz.c | |||
@@ -531,9 +531,15 @@ static int spitz_ohci_init(struct device *dev) | |||
531 | return gpio_direction_output(SPITZ_GPIO_USB_HOST, 1); | 531 | return gpio_direction_output(SPITZ_GPIO_USB_HOST, 1); |
532 | } | 532 | } |
533 | 533 | ||
534 | static void spitz_ohci_exit(struct device *dev) | ||
535 | { | ||
536 | gpio_free(SPITZ_GPIO_USB_HOST); | ||
537 | } | ||
538 | |||
534 | static struct pxaohci_platform_data spitz_ohci_platform_data = { | 539 | static struct pxaohci_platform_data spitz_ohci_platform_data = { |
535 | .port_mode = PMM_NPS_MODE, | 540 | .port_mode = PMM_NPS_MODE, |
536 | .init = spitz_ohci_init, | 541 | .init = spitz_ohci_init, |
542 | .exit = spitz_ohci_exit, | ||
537 | .flags = ENABLE_PORT_ALL | NO_OC_PROTECTION, | 543 | .flags = ENABLE_PORT_ALL | NO_OC_PROTECTION, |
538 | .power_budget = 150, | 544 | .power_budget = 150, |
539 | }; | 545 | }; |
@@ -731,7 +737,7 @@ static void spitz_restart(char mode, const char *cmd) | |||
731 | 737 | ||
732 | static void __init common_init(void) | 738 | static void __init common_init(void) |
733 | { | 739 | { |
734 | init_gpio_reset(SPITZ_GPIO_ON_RESET, 1); | 740 | init_gpio_reset(SPITZ_GPIO_ON_RESET, 1, 0); |
735 | pm_power_off = spitz_poweroff; | 741 | pm_power_off = spitz_poweroff; |
736 | arm_pm_restart = spitz_restart; | 742 | arm_pm_restart = spitz_restart; |
737 | 743 | ||
diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c index afac5b6d3d78..a0bd46ef5d30 100644 --- a/arch/arm/mach-pxa/tosa.c +++ b/arch/arm/mach-pxa/tosa.c | |||
@@ -897,7 +897,7 @@ static void __init tosa_init(void) | |||
897 | gpio_set_wake(MFP_PIN_GPIO1, 1); | 897 | gpio_set_wake(MFP_PIN_GPIO1, 1); |
898 | /* We can't pass to gpio-keys since it will drop the Reset altfunc */ | 898 | /* We can't pass to gpio-keys since it will drop the Reset altfunc */ |
899 | 899 | ||
900 | init_gpio_reset(TOSA_GPIO_ON_RESET, 0); | 900 | init_gpio_reset(TOSA_GPIO_ON_RESET, 0, 0); |
901 | 901 | ||
902 | pm_power_off = tosa_poweroff; | 902 | pm_power_off = tosa_poweroff; |
903 | arm_pm_restart = tosa_restart; | 903 | arm_pm_restart = tosa_restart; |
diff --git a/arch/arm/plat-orion/gpio.c b/arch/arm/plat-orion/gpio.c index 32eb9e33bebb..e814803d4741 100644 --- a/arch/arm/plat-orion/gpio.c +++ b/arch/arm/plat-orion/gpio.c | |||
@@ -15,10 +15,9 @@ | |||
15 | #include <linux/spinlock.h> | 15 | #include <linux/spinlock.h> |
16 | #include <linux/bitops.h> | 16 | #include <linux/bitops.h> |
17 | #include <linux/io.h> | 17 | #include <linux/io.h> |
18 | #include <asm/gpio.h> | 18 | #include <linux/gpio.h> |
19 | 19 | ||
20 | static DEFINE_SPINLOCK(gpio_lock); | 20 | static DEFINE_SPINLOCK(gpio_lock); |
21 | static const char *gpio_label[GPIO_MAX]; /* non null for allocated GPIOs */ | ||
22 | static unsigned long gpio_valid_input[BITS_TO_LONGS(GPIO_MAX)]; | 21 | static unsigned long gpio_valid_input[BITS_TO_LONGS(GPIO_MAX)]; |
23 | static unsigned long gpio_valid_output[BITS_TO_LONGS(GPIO_MAX)]; | 22 | static unsigned long gpio_valid_output[BITS_TO_LONGS(GPIO_MAX)]; |
24 | 23 | ||
@@ -46,82 +45,54 @@ static void __set_level(unsigned pin, int high) | |||
46 | writel(u, GPIO_OUT(pin)); | 45 | writel(u, GPIO_OUT(pin)); |
47 | } | 46 | } |
48 | 47 | ||
49 | 48 | static inline void __set_blinking(unsigned pin, int blink) | |
50 | /* | ||
51 | * GENERIC_GPIO primitives. | ||
52 | */ | ||
53 | int gpio_direction_input(unsigned pin) | ||
54 | { | 49 | { |
55 | unsigned long flags; | 50 | u32 u; |
56 | |||
57 | if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid_input)) { | ||
58 | pr_debug("%s: invalid GPIO %d\n", __func__, pin); | ||
59 | return -EINVAL; | ||
60 | } | ||
61 | |||
62 | spin_lock_irqsave(&gpio_lock, flags); | ||
63 | |||
64 | /* | ||
65 | * Some callers might not have used gpio_request(), | ||
66 | * so flag this pin as requested now. | ||
67 | */ | ||
68 | if (gpio_label[pin] == NULL) | ||
69 | gpio_label[pin] = "?"; | ||
70 | 51 | ||
71 | /* | 52 | u = readl(GPIO_BLINK_EN(pin)); |
72 | * Configure GPIO direction. | 53 | if (blink) |
73 | */ | 54 | u |= 1 << (pin & 31); |
74 | __set_direction(pin, 1); | 55 | else |
56 | u &= ~(1 << (pin & 31)); | ||
57 | writel(u, GPIO_BLINK_EN(pin)); | ||
58 | } | ||
75 | 59 | ||
76 | spin_unlock_irqrestore(&gpio_lock, flags); | 60 | static inline int orion_gpio_is_valid(unsigned pin, int mode) |
61 | { | ||
62 | if (pin < GPIO_MAX) { | ||
63 | if ((mode & GPIO_INPUT_OK) && !test_bit(pin, gpio_valid_input)) | ||
64 | goto err_out; | ||
65 | if ((mode & GPIO_OUTPUT_OK) && !test_bit(pin, gpio_valid_output)) | ||
66 | goto err_out; | ||
67 | return true; | ||
68 | } | ||
77 | 69 | ||
78 | return 0; | 70 | err_out: |
71 | pr_debug("%s: invalid GPIO %d\n", __func__, pin); | ||
72 | return false; | ||
79 | } | 73 | } |
80 | EXPORT_SYMBOL(gpio_direction_input); | ||
81 | 74 | ||
82 | int gpio_direction_output(unsigned pin, int value) | 75 | /* |
76 | * GENERIC_GPIO primitives. | ||
77 | */ | ||
78 | static int orion_gpio_direction_input(struct gpio_chip *chip, unsigned pin) | ||
83 | { | 79 | { |
84 | unsigned long flags; | 80 | unsigned long flags; |
85 | u32 u; | ||
86 | 81 | ||
87 | if (pin >= GPIO_MAX || !test_bit(pin, gpio_valid_output)) { | 82 | if (!orion_gpio_is_valid(pin, GPIO_INPUT_OK)) |
88 | pr_debug("%s: invalid GPIO %d\n", __func__, pin); | ||
89 | return -EINVAL; | 83 | return -EINVAL; |
90 | } | ||
91 | 84 | ||
92 | spin_lock_irqsave(&gpio_lock, flags); | 85 | spin_lock_irqsave(&gpio_lock, flags); |
93 | 86 | ||
94 | /* | 87 | /* Configure GPIO direction. */ |
95 | * Some callers might not have used gpio_request(), | 88 | __set_direction(pin, 1); |
96 | * so flag this pin as requested now. | ||
97 | */ | ||
98 | if (gpio_label[pin] == NULL) | ||
99 | gpio_label[pin] = "?"; | ||
100 | |||
101 | /* | ||
102 | * Disable blinking. | ||
103 | */ | ||
104 | u = readl(GPIO_BLINK_EN(pin)); | ||
105 | u &= ~(1 << (pin & 31)); | ||
106 | writel(u, GPIO_BLINK_EN(pin)); | ||
107 | |||
108 | /* | ||
109 | * Configure GPIO output value. | ||
110 | */ | ||
111 | __set_level(pin, value); | ||
112 | |||
113 | /* | ||
114 | * Configure GPIO direction. | ||
115 | */ | ||
116 | __set_direction(pin, 0); | ||
117 | 89 | ||
118 | spin_unlock_irqrestore(&gpio_lock, flags); | 90 | spin_unlock_irqrestore(&gpio_lock, flags); |
119 | 91 | ||
120 | return 0; | 92 | return 0; |
121 | } | 93 | } |
122 | EXPORT_SYMBOL(gpio_direction_output); | ||
123 | 94 | ||
124 | int gpio_get_value(unsigned pin) | 95 | static int orion_gpio_get_value(struct gpio_chip *chip, unsigned pin) |
125 | { | 96 | { |
126 | int val; | 97 | int val; |
127 | 98 | ||
@@ -132,83 +103,75 @@ int gpio_get_value(unsigned pin) | |||
132 | 103 | ||
133 | return (val >> (pin & 31)) & 1; | 104 | return (val >> (pin & 31)) & 1; |
134 | } | 105 | } |
135 | EXPORT_SYMBOL(gpio_get_value); | ||
136 | 106 | ||
137 | void gpio_set_value(unsigned pin, int value) | 107 | static int orion_gpio_direction_output(struct gpio_chip *chip, unsigned pin, |
108 | int value) | ||
138 | { | 109 | { |
139 | unsigned long flags; | 110 | unsigned long flags; |
140 | u32 u; | 111 | |
112 | if (!orion_gpio_is_valid(pin, GPIO_OUTPUT_OK)) | ||
113 | return -EINVAL; | ||
141 | 114 | ||
142 | spin_lock_irqsave(&gpio_lock, flags); | 115 | spin_lock_irqsave(&gpio_lock, flags); |
143 | 116 | ||
144 | /* | 117 | /* Disable blinking. */ |
145 | * Disable blinking. | 118 | __set_blinking(pin, 0); |
146 | */ | ||
147 | u = readl(GPIO_BLINK_EN(pin)); | ||
148 | u &= ~(1 << (pin & 31)); | ||
149 | writel(u, GPIO_BLINK_EN(pin)); | ||
150 | 119 | ||
151 | /* | 120 | /* Configure GPIO output value. */ |
152 | * Configure GPIO output value. | ||
153 | */ | ||
154 | __set_level(pin, value); | 121 | __set_level(pin, value); |
155 | 122 | ||
123 | /* Configure GPIO direction. */ | ||
124 | __set_direction(pin, 0); | ||
125 | |||
156 | spin_unlock_irqrestore(&gpio_lock, flags); | 126 | spin_unlock_irqrestore(&gpio_lock, flags); |
127 | |||
128 | return 0; | ||
157 | } | 129 | } |
158 | EXPORT_SYMBOL(gpio_set_value); | ||
159 | 130 | ||
160 | int gpio_request(unsigned pin, const char *label) | 131 | static void orion_gpio_set_value(struct gpio_chip *chip, unsigned pin, |
132 | int value) | ||
161 | { | 133 | { |
162 | unsigned long flags; | 134 | unsigned long flags; |
163 | int ret; | ||
164 | |||
165 | if (pin >= GPIO_MAX || | ||
166 | !(test_bit(pin, gpio_valid_input) || | ||
167 | test_bit(pin, gpio_valid_output))) { | ||
168 | pr_debug("%s: invalid GPIO %d\n", __func__, pin); | ||
169 | return -EINVAL; | ||
170 | } | ||
171 | 135 | ||
172 | spin_lock_irqsave(&gpio_lock, flags); | 136 | spin_lock_irqsave(&gpio_lock, flags); |
173 | if (gpio_label[pin] == NULL) { | ||
174 | gpio_label[pin] = label ? label : "?"; | ||
175 | ret = 0; | ||
176 | } else { | ||
177 | pr_debug("%s: GPIO %d already used as %s\n", | ||
178 | __func__, pin, gpio_label[pin]); | ||
179 | ret = -EBUSY; | ||
180 | } | ||
181 | spin_unlock_irqrestore(&gpio_lock, flags); | ||
182 | 137 | ||
183 | return ret; | 138 | /* Configure GPIO output value. */ |
139 | __set_level(pin, value); | ||
140 | |||
141 | spin_unlock_irqrestore(&gpio_lock, flags); | ||
184 | } | 142 | } |
185 | EXPORT_SYMBOL(gpio_request); | ||
186 | 143 | ||
187 | void gpio_free(unsigned pin) | 144 | static int orion_gpio_request(struct gpio_chip *chip, unsigned pin) |
188 | { | 145 | { |
189 | if (pin >= GPIO_MAX || | 146 | if (orion_gpio_is_valid(pin, GPIO_INPUT_OK) || |
190 | !(test_bit(pin, gpio_valid_input) || | 147 | orion_gpio_is_valid(pin, GPIO_OUTPUT_OK)) |
191 | test_bit(pin, gpio_valid_output))) { | 148 | return 0; |
192 | pr_debug("%s: invalid GPIO %d\n", __func__, pin); | 149 | return -EINVAL; |
193 | return; | ||
194 | } | ||
195 | |||
196 | if (gpio_label[pin] == NULL) | ||
197 | pr_warning("%s: GPIO %d already freed\n", __func__, pin); | ||
198 | else | ||
199 | gpio_label[pin] = NULL; | ||
200 | } | 150 | } |
201 | EXPORT_SYMBOL(gpio_free); | ||
202 | 151 | ||
152 | static struct gpio_chip orion_gpiochip = { | ||
153 | .label = "orion_gpio", | ||
154 | .direction_input = orion_gpio_direction_input, | ||
155 | .get = orion_gpio_get_value, | ||
156 | .direction_output = orion_gpio_direction_output, | ||
157 | .set = orion_gpio_set_value, | ||
158 | .request = orion_gpio_request, | ||
159 | .base = 0, | ||
160 | .ngpio = GPIO_MAX, | ||
161 | .can_sleep = 0, | ||
162 | }; | ||
163 | |||
164 | void __init orion_gpio_init(void) | ||
165 | { | ||
166 | gpiochip_add(&orion_gpiochip); | ||
167 | } | ||
203 | 168 | ||
204 | /* | 169 | /* |
205 | * Orion-specific GPIO API extensions. | 170 | * Orion-specific GPIO API extensions. |
206 | */ | 171 | */ |
207 | void __init orion_gpio_set_unused(unsigned pin) | 172 | void __init orion_gpio_set_unused(unsigned pin) |
208 | { | 173 | { |
209 | /* | 174 | /* Configure as output, drive low. */ |
210 | * Configure as output, drive low. | ||
211 | */ | ||
212 | __set_level(pin, 0); | 175 | __set_level(pin, 0); |
213 | __set_direction(pin, 0); | 176 | __set_direction(pin, 0); |
214 | } | 177 | } |
@@ -230,21 +193,14 @@ void __init orion_gpio_set_valid(unsigned pin, int mode) | |||
230 | void orion_gpio_set_blink(unsigned pin, int blink) | 193 | void orion_gpio_set_blink(unsigned pin, int blink) |
231 | { | 194 | { |
232 | unsigned long flags; | 195 | unsigned long flags; |
233 | u32 u; | ||
234 | 196 | ||
235 | spin_lock_irqsave(&gpio_lock, flags); | 197 | spin_lock_irqsave(&gpio_lock, flags); |
236 | 198 | ||
237 | /* | 199 | /* Set output value to zero. */ |
238 | * Set output value to zero. | ||
239 | */ | ||
240 | __set_level(pin, 0); | 200 | __set_level(pin, 0); |
241 | 201 | ||
242 | u = readl(GPIO_BLINK_EN(pin)); | 202 | /* Set blinking. */ |
243 | if (blink) | 203 | __set_blinking(pin, blink); |
244 | u |= 1 << (pin & 31); | ||
245 | else | ||
246 | u &= ~(1 << (pin & 31)); | ||
247 | writel(u, GPIO_BLINK_EN(pin)); | ||
248 | 204 | ||
249 | spin_unlock_irqrestore(&gpio_lock, flags); | 205 | spin_unlock_irqrestore(&gpio_lock, flags); |
250 | } | 206 | } |
@@ -368,7 +324,7 @@ static int gpio_irq_set_type(u32 irq, u32 type) | |||
368 | } | 324 | } |
369 | 325 | ||
370 | struct irq_chip orion_gpio_irq_chip = { | 326 | struct irq_chip orion_gpio_irq_chip = { |
371 | .name = "orion_gpio", | 327 | .name = "orion_gpio_irq", |
372 | .ack = gpio_irq_ack, | 328 | .ack = gpio_irq_ack, |
373 | .mask = gpio_irq_mask, | 329 | .mask = gpio_irq_mask, |
374 | .unmask = gpio_irq_unmask, | 330 | .unmask = gpio_irq_unmask, |
diff --git a/arch/arm/plat-orion/include/plat/gpio.h b/arch/arm/plat-orion/include/plat/gpio.h index 33f6c6aec185..9646a94ed3d0 100644 --- a/arch/arm/plat-orion/include/plat/gpio.h +++ b/arch/arm/plat-orion/include/plat/gpio.h | |||
@@ -14,12 +14,9 @@ | |||
14 | /* | 14 | /* |
15 | * GENERIC_GPIO primitives. | 15 | * GENERIC_GPIO primitives. |
16 | */ | 16 | */ |
17 | int gpio_request(unsigned pin, const char *label); | 17 | #define gpio_get_value __gpio_get_value |
18 | void gpio_free(unsigned pin); | 18 | #define gpio_set_value __gpio_set_value |
19 | int gpio_direction_input(unsigned pin); | 19 | #define gpio_cansleep __gpio_cansleep |
20 | int gpio_direction_output(unsigned pin, int value); | ||
21 | int gpio_get_value(unsigned pin); | ||
22 | void gpio_set_value(unsigned pin, int value); | ||
23 | 20 | ||
24 | /* | 21 | /* |
25 | * Orion-specific GPIO API extensions. | 22 | * Orion-specific GPIO API extensions. |
@@ -27,11 +24,13 @@ void gpio_set_value(unsigned pin, int value); | |||
27 | void orion_gpio_set_unused(unsigned pin); | 24 | void orion_gpio_set_unused(unsigned pin); |
28 | void orion_gpio_set_blink(unsigned pin, int blink); | 25 | void orion_gpio_set_blink(unsigned pin, int blink); |
29 | 26 | ||
30 | #define GPIO_BIDI_OK (1 << 0) | 27 | #define GPIO_INPUT_OK (1 << 0) |
31 | #define GPIO_INPUT_OK (1 << 1) | 28 | #define GPIO_OUTPUT_OK (1 << 1) |
32 | #define GPIO_OUTPUT_OK (1 << 2) | ||
33 | void orion_gpio_set_valid(unsigned pin, int mode); | 29 | void orion_gpio_set_valid(unsigned pin, int mode); |
34 | 30 | ||
31 | /* Initialize gpiolib. */ | ||
32 | void __init orion_gpio_init(void); | ||
33 | |||
35 | /* | 34 | /* |
36 | * GPIO interrupt handling. | 35 | * GPIO interrupt handling. |
37 | */ | 36 | */ |
diff --git a/arch/arm/plat-orion/include/plat/orion5x_wdt.h b/arch/arm/plat-orion/include/plat/orion_wdt.h index 3c9cf6a305ef..665c362a2fba 100644 --- a/arch/arm/plat-orion/include/plat/orion5x_wdt.h +++ b/arch/arm/plat-orion/include/plat/orion_wdt.h | |||
@@ -1,15 +1,15 @@ | |||
1 | /* | 1 | /* |
2 | * arch/arm/plat-orion/include/plat/orion5x_wdt.h | 2 | * arch/arm/plat-orion/include/plat/orion_wdt.h |
3 | * | 3 | * |
4 | * This file is licensed under the terms of the GNU General Public | 4 | * This file is licensed under the terms of the GNU General Public |
5 | * License version 2. This program is licensed "as is" without any | 5 | * License version 2. This program is licensed "as is" without any |
6 | * warranty of any kind, whether express or implied. | 6 | * warranty of any kind, whether express or implied. |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #ifndef __PLAT_ORION5X_WDT_H | 9 | #ifndef __PLAT_ORION_WDT_H |
10 | #define __PLAT_ORION5X_WDT_H | 10 | #define __PLAT_ORION_WDT_H |
11 | 11 | ||
12 | struct orion5x_wdt_platform_data { | 12 | struct orion_wdt_platform_data { |
13 | u32 tclk; /* no <linux/clk.h> support yet */ | 13 | u32 tclk; /* no <linux/clk.h> support yet */ |
14 | }; | 14 | }; |
15 | 15 | ||
diff --git a/arch/arm/plat-orion/time.c b/arch/arm/plat-orion/time.c index de8a001fc3a9..715a30177f28 100644 --- a/arch/arm/plat-orion/time.c +++ b/arch/arm/plat-orion/time.c | |||
@@ -12,11 +12,15 @@ | |||
12 | */ | 12 | */ |
13 | 13 | ||
14 | #include <linux/kernel.h> | 14 | #include <linux/kernel.h> |
15 | #include <linux/sched.h> | ||
16 | #include <linux/cnt32_to_63.h> | ||
17 | #include <linux/timer.h> | ||
15 | #include <linux/clockchips.h> | 18 | #include <linux/clockchips.h> |
16 | #include <linux/interrupt.h> | 19 | #include <linux/interrupt.h> |
17 | #include <linux/irq.h> | 20 | #include <linux/irq.h> |
18 | #include <asm/mach/time.h> | 21 | #include <asm/mach/time.h> |
19 | #include <mach/bridge-regs.h> | 22 | #include <mach/bridge-regs.h> |
23 | #include <mach/hardware.h> | ||
20 | 24 | ||
21 | /* | 25 | /* |
22 | * Number of timer ticks per jiffy. | 26 | * Number of timer ticks per jiffy. |
@@ -39,6 +43,56 @@ static u32 ticks_per_jiffy; | |||
39 | 43 | ||
40 | 44 | ||
41 | /* | 45 | /* |
46 | * Orion's sched_clock implementation. It has a resolution of | ||
47 | * at least 7.5ns (133MHz TCLK) and a maximum value of 834 days. | ||
48 | * | ||
49 | * Because the hardware timer period is quite short (21 secs if | ||
50 | * 200MHz TCLK) and because cnt32_to_63() needs to be called at | ||
51 | * least once per half period to work properly, a kernel timer is | ||
52 | * set up to ensure this requirement is always met. | ||
53 | */ | ||
54 | #define TCLK2NS_SCALE_FACTOR 8 | ||
55 | |||
56 | static unsigned long tclk2ns_scale; | ||
57 | |||
58 | unsigned long long sched_clock(void) | ||
59 | { | ||
60 | unsigned long long v = cnt32_to_63(0xffffffff - readl(TIMER0_VAL)); | ||
61 | return (v * tclk2ns_scale) >> TCLK2NS_SCALE_FACTOR; | ||
62 | } | ||
63 | |||
64 | static struct timer_list cnt32_to_63_keepwarm_timer; | ||
65 | |||
66 | static void cnt32_to_63_keepwarm(unsigned long data) | ||
67 | { | ||
68 | mod_timer(&cnt32_to_63_keepwarm_timer, round_jiffies(jiffies + data)); | ||
69 | (void) sched_clock(); | ||
70 | } | ||
71 | |||
72 | static void __init setup_sched_clock(unsigned long tclk) | ||
73 | { | ||
74 | unsigned long long v; | ||
75 | unsigned long data; | ||
76 | |||
77 | v = NSEC_PER_SEC; | ||
78 | v <<= TCLK2NS_SCALE_FACTOR; | ||
79 | v += tclk/2; | ||
80 | do_div(v, tclk); | ||
81 | /* | ||
82 | * We want an even value to automatically clear the top bit | ||
83 | * returned by cnt32_to_63() without an additional run time | ||
84 | * instruction. So if the LSB is 1 then round it up. | ||
85 | */ | ||
86 | if (v & 1) | ||
87 | v++; | ||
88 | tclk2ns_scale = v; | ||
89 | |||
90 | data = (0xffffffffUL / tclk / 2 - 2) * HZ; | ||
91 | setup_timer(&cnt32_to_63_keepwarm_timer, cnt32_to_63_keepwarm, data); | ||
92 | mod_timer(&cnt32_to_63_keepwarm_timer, round_jiffies(jiffies + data)); | ||
93 | } | ||
94 | |||
95 | /* | ||
42 | * Clocksource handling. | 96 | * Clocksource handling. |
43 | */ | 97 | */ |
44 | static cycle_t orion_clksrc_read(struct clocksource *cs) | 98 | static cycle_t orion_clksrc_read(struct clocksource *cs) |
@@ -176,6 +230,10 @@ void __init orion_time_init(unsigned int irq, unsigned int tclk) | |||
176 | 230 | ||
177 | ticks_per_jiffy = (tclk + HZ/2) / HZ; | 231 | ticks_per_jiffy = (tclk + HZ/2) / HZ; |
178 | 232 | ||
233 | /* | ||
234 | * Set scale and timer for sched_clock | ||
235 | */ | ||
236 | setup_sched_clock(tclk); | ||
179 | 237 | ||
180 | /* | 238 | /* |
181 | * Setup free-running clocksource timer (interrupts | 239 | * Setup free-running clocksource timer (interrupts |
@@ -190,7 +248,6 @@ void __init orion_time_init(unsigned int irq, unsigned int tclk) | |||
190 | orion_clksrc.mult = clocksource_hz2mult(tclk, orion_clksrc.shift); | 248 | orion_clksrc.mult = clocksource_hz2mult(tclk, orion_clksrc.shift); |
191 | clocksource_register(&orion_clksrc); | 249 | clocksource_register(&orion_clksrc); |
192 | 250 | ||
193 | |||
194 | /* | 251 | /* |
195 | * Setup clockevent timer (interrupt-driven.) | 252 | * Setup clockevent timer (interrupt-driven.) |
196 | */ | 253 | */ |
diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types index 945e0d237a1d..fec64678a63a 100644 --- a/arch/arm/tools/mach-types +++ b/arch/arm/tools/mach-types | |||
@@ -12,7 +12,7 @@ | |||
12 | # | 12 | # |
13 | # http://www.arm.linux.org.uk/developer/machines/?action=new | 13 | # http://www.arm.linux.org.uk/developer/machines/?action=new |
14 | # | 14 | # |
15 | # Last update: Mon Mar 23 20:09:01 2009 | 15 | # Last update: Fri May 29 10:14:20 2009 |
16 | # | 16 | # |
17 | # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number | 17 | # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number |
18 | # | 18 | # |
@@ -916,7 +916,7 @@ nxdb500 MACH_NXDB500 NXDB500 905 | |||
916 | apf9328 MACH_APF9328 APF9328 906 | 916 | apf9328 MACH_APF9328 APF9328 906 |
917 | omap_wipoq MACH_OMAP_WIPOQ OMAP_WIPOQ 907 | 917 | omap_wipoq MACH_OMAP_WIPOQ OMAP_WIPOQ 907 |
918 | omap_twip MACH_OMAP_TWIP OMAP_TWIP 908 | 918 | omap_twip MACH_OMAP_TWIP OMAP_TWIP 908 |
919 | palmt650 MACH_PALMT650 PALMT650 909 | 919 | treo650 MACH_TREO650 TREO650 909 |
920 | acumen MACH_ACUMEN ACUMEN 910 | 920 | acumen MACH_ACUMEN ACUMEN 910 |
921 | xp100 MACH_XP100 XP100 911 | 921 | xp100 MACH_XP100 XP100 911 |
922 | fs2410 MACH_FS2410 FS2410 912 | 922 | fs2410 MACH_FS2410 FS2410 912 |
@@ -1232,7 +1232,7 @@ ql202b MACH_QL202B QL202B 1226 | |||
1232 | vpac270 MACH_VPAC270 VPAC270 1227 | 1232 | vpac270 MACH_VPAC270 VPAC270 1227 |
1233 | rd129 MACH_RD129 RD129 1228 | 1233 | rd129 MACH_RD129 RD129 1228 |
1234 | htcwizard MACH_HTCWIZARD HTCWIZARD 1229 | 1234 | htcwizard MACH_HTCWIZARD HTCWIZARD 1229 |
1235 | xscale_treo680 MACH_XSCALE_TREO680 XSCALE_TREO680 1230 | 1235 | treo680 MACH_TREO680 TREO680 1230 |
1236 | tecon_tmezon MACH_TECON_TMEZON TECON_TMEZON 1231 | 1236 | tecon_tmezon MACH_TECON_TMEZON TECON_TMEZON 1231 |
1237 | zylonite MACH_ZYLONITE ZYLONITE 1233 | 1237 | zylonite MACH_ZYLONITE ZYLONITE 1233 |
1238 | gene1270 MACH_GENE1270 GENE1270 1234 | 1238 | gene1270 MACH_GENE1270 GENE1270 1234 |
@@ -1418,10 +1418,10 @@ looxc550 MACH_LOOXC550 LOOXC550 1417 | |||
1418 | cnty_titan MACH_CNTY_TITAN CNTY_TITAN 1418 | 1418 | cnty_titan MACH_CNTY_TITAN CNTY_TITAN 1418 |
1419 | app3xx MACH_APP3XX APP3XX 1419 | 1419 | app3xx MACH_APP3XX APP3XX 1419 |
1420 | sideoatsgrama MACH_SIDEOATSGRAMA SIDEOATSGRAMA 1420 | 1420 | sideoatsgrama MACH_SIDEOATSGRAMA SIDEOATSGRAMA 1420 |
1421 | palmtreo700p MACH_PALMTREO700P PALMTREO700P 1421 | 1421 | treo700p MACH_TREO700P TREO700P 1421 |
1422 | palmtreo700w MACH_PALMTREO700W PALMTREO700W 1422 | 1422 | treo700w MACH_TREO700W TREO700W 1422 |
1423 | palmtreo750 MACH_PALMTREO750 PALMTREO750 1423 | 1423 | treo750 MACH_TREO750 TREO750 1423 |
1424 | palmtreo755p MACH_PALMTREO755P PALMTREO755P 1424 | 1424 | treo755p MACH_TREO755P TREO755P 1424 |
1425 | ezreganut9200 MACH_EZREGANUT9200 EZREGANUT9200 1425 | 1425 | ezreganut9200 MACH_EZREGANUT9200 EZREGANUT9200 1425 |
1426 | sarge MACH_SARGE SARGE 1426 | 1426 | sarge MACH_SARGE SARGE 1426 |
1427 | a696 MACH_A696 A696 1427 | 1427 | a696 MACH_A696 A696 1427 |
@@ -1721,7 +1721,7 @@ sapphire MACH_SAPPHIRE SAPPHIRE 1729 | |||
1721 | csb637xo MACH_CSB637XO CSB637XO 1730 | 1721 | csb637xo MACH_CSB637XO CSB637XO 1730 |
1722 | evisiong MACH_EVISIONG EVISIONG 1731 | 1722 | evisiong MACH_EVISIONG EVISIONG 1731 |
1723 | stmp37xx MACH_STMP37XX STMP37XX 1732 | 1723 | stmp37xx MACH_STMP37XX STMP37XX 1732 |
1724 | stmp378x MACH_STMP38XX STMP38XX 1733 | 1724 | stmp378x MACH_STMP378X STMP378X 1733 |
1725 | tnt MACH_TNT TNT 1734 | 1725 | tnt MACH_TNT TNT 1734 |
1726 | tbxt MACH_TBXT TBXT 1735 | 1726 | tbxt MACH_TBXT TBXT 1735 |
1727 | playmate MACH_PLAYMATE PLAYMATE 1736 | 1727 | playmate MACH_PLAYMATE PLAYMATE 1736 |
@@ -1817,7 +1817,7 @@ smdkc100 MACH_SMDKC100 SMDKC100 1826 | |||
1817 | tavorevb MACH_TAVOREVB TAVOREVB 1827 | 1817 | tavorevb MACH_TAVOREVB TAVOREVB 1827 |
1818 | saar MACH_SAAR SAAR 1828 | 1818 | saar MACH_SAAR SAAR 1828 |
1819 | deister_eyecam MACH_DEISTER_EYECAM DEISTER_EYECAM 1829 | 1819 | deister_eyecam MACH_DEISTER_EYECAM DEISTER_EYECAM 1829 |
1820 | at91sam9m10ek MACH_AT91SAM9M10EK AT91SAM9M10EK 1830 | 1820 | at91sam9m10g45ek MACH_AT91SAM9M10G45EK AT91SAM9M10G45EK 1830 |
1821 | linkstation_produo MACH_LINKSTATION_PRODUO LINKSTATION_PRODUO 1831 | 1821 | linkstation_produo MACH_LINKSTATION_PRODUO LINKSTATION_PRODUO 1831 |
1822 | hit_b0 MACH_HIT_B0 HIT_B0 1832 | 1822 | hit_b0 MACH_HIT_B0 HIT_B0 1832 |
1823 | adx_rmu MACH_ADX_RMU ADX_RMU 1833 | 1823 | adx_rmu MACH_ADX_RMU ADX_RMU 1833 |
@@ -2132,3 +2132,116 @@ apollo MACH_APOLLO APOLLO 2141 | |||
2132 | at91cap9stk MACH_AT91CAP9STK AT91CAP9STK 2142 | 2132 | at91cap9stk MACH_AT91CAP9STK AT91CAP9STK 2142 |
2133 | spc300 MACH_SPC300 SPC300 2143 | 2133 | spc300 MACH_SPC300 SPC300 2143 |
2134 | eko MACH_EKO EKO 2144 | 2134 | eko MACH_EKO EKO 2144 |
2135 | ccw9m2443 MACH_CCW9M2443 CCW9M2443 2145 | ||
2136 | ccw9m2443js MACH_CCW9M2443JS CCW9M2443JS 2146 | ||
2137 | m2m_router_device MACH_M2M_ROUTER_DEVICE M2M_ROUTER_DEVICE 2147 | ||
2138 | str9104nas MACH_STAR9104NAS STAR9104NAS 2148 | ||
2139 | pca100 MACH_PCA100 PCA100 2149 | ||
2140 | z3_dm365_mod_01 MACH_Z3_DM365_MOD_01 Z3_DM365_MOD_01 2150 | ||
2141 | hipox MACH_HIPOX HIPOX 2151 | ||
2142 | omap3_piteds MACH_OMAP3_PITEDS OMAP3_PITEDS 2152 | ||
2143 | bm150r MACH_BM150R BM150R 2153 | ||
2144 | tbone MACH_TBONE TBONE 2154 | ||
2145 | merlin MACH_MERLIN MERLIN 2155 | ||
2146 | falcon MACH_FALCON FALCON 2156 | ||
2147 | davinci_da850_evm MACH_DAVINCI_DA850_EVM DAVINCI_DA850_EVM 2157 | ||
2148 | s5p6440 MACH_S5P6440 S5P6440 2158 | ||
2149 | at91sam9g10ek MACH_AT91SAM9G10EK AT91SAM9G10EK 2159 | ||
2150 | omap_4430sdp MACH_OMAP_4430SDP OMAP_4430SDP 2160 | ||
2151 | lpc313x MACH_LPC313X LPC313X 2161 | ||
2152 | magx_zn5 MACH_MAGX_ZN5 MAGX_ZN5 2162 | ||
2153 | magx_em30 MACH_MAGX_EM30 MAGX_EM30 2163 | ||
2154 | magx_ve66 MACH_MAGX_VE66 MAGX_VE66 2164 | ||
2155 | meesc MACH_MEESC MEESC 2165 | ||
2156 | otc570 MACH_OTC570 OTC570 2166 | ||
2157 | bcu2412 MACH_BCU2412 BCU2412 2167 | ||
2158 | beacon MACH_BEACON BEACON 2168 | ||
2159 | actia_tgw MACH_ACTIA_TGW ACTIA_TGW 2169 | ||
2160 | e4430 MACH_E4430 E4430 2170 | ||
2161 | ql300 MACH_QL300 QL300 2171 | ||
2162 | btmavb101 MACH_BTMAVB101 BTMAVB101 2172 | ||
2163 | btmawb101 MACH_BTMAWB101 BTMAWB101 2173 | ||
2164 | sq201 MACH_SQ201 SQ201 2174 | ||
2165 | quatro45xx MACH_QUATRO45XX QUATRO45XX 2175 | ||
2166 | openpad MACH_OPENPAD OPENPAD 2176 | ||
2167 | tx25 MACH_TX25 TX25 2177 | ||
2168 | omap3_torpedo MACH_OMAP3_TORPEDO OMAP3_TORPEDO 2178 | ||
2169 | htcraphael_k MACH_HTCRAPHAEL_K HTCRAPHAEL_K 2179 | ||
2170 | lal43 MACH_LAL43 LAL43 2181 | ||
2171 | htcraphael_cdma500 MACH_HTCRAPHAEL_CDMA500 HTCRAPHAEL_CDMA500 2182 | ||
2172 | anw6410 MACH_ANW6410 ANW6410 2183 | ||
2173 | htcprophet MACH_HTCPROPHET HTCPROPHET 2185 | ||
2174 | cfa_10022 MACH_CFA_10022 CFA_10022 2186 | ||
2175 | imx27_visstrim_m10 MACH_IMX27_VISSTRIM_M10 IMX27_VISSTRIM_M10 2187 | ||
2176 | px2imx27 MACH_PX2IMX27 PX2IMX27 2188 | ||
2177 | stm3210e_eval MACH_STM3210E_EVAL STM3210E_EVAL 2189 | ||
2178 | dvs10 MACH_DVS10 DVS10 2190 | ||
2179 | portuxg20 MACH_PORTUXG20 PORTUXG20 2191 | ||
2180 | arm_spv MACH_ARM_SPV ARM_SPV 2192 | ||
2181 | smdkc110 MACH_SMDKC110 SMDKC110 2193 | ||
2182 | cabespresso MACH_CABESPRESSO CABESPRESSO 2194 | ||
2183 | hmc800 MACH_HMC800 HMC800 2195 | ||
2184 | sholes MACH_SHOLES SHOLES 2196 | ||
2185 | btmxc31 MACH_BTMXC31 BTMXC31 2197 | ||
2186 | dt501 MACH_DT501 DT501 2198 | ||
2187 | ktx MACH_KTX KTX 2199 | ||
2188 | omap3517evm MACH_OMAP3517EVM OMAP3517EVM 2200 | ||
2189 | netspace_v2 MACH_NETSPACE_V2 NETSPACE_V2 2201 | ||
2190 | netspace_max_v2 MACH_NETSPACE_MAX_V2 NETSPACE_MAX_V2 2202 | ||
2191 | d2net_v2 MACH_D2NET_V2 D2NET_V2 2203 | ||
2192 | net2big_v2 MACH_NET2BIG_V2 NET2BIG_V2 2204 | ||
2193 | net4big_v2 MACH_NET4BIG_V2 NET4BIG_V2 2205 | ||
2194 | net5big_v2 MACH_NET5BIG_V2 NET5BIG_V2 2206 | ||
2195 | endb2443 MACH_ENDB2443 ENDB2443 2207 | ||
2196 | inetspace_v2 MACH_INETSPACE_V2 INETSPACE_V2 2208 | ||
2197 | tros MACH_TROS TROS 2209 | ||
2198 | pelco_homer MACH_PELCO_HOMER PELCO_HOMER 2210 | ||
2199 | ofsp8 MACH_OFSP8 OFSP8 2211 | ||
2200 | at91sam9g45ekes MACH_AT91SAM9G45EKES AT91SAM9G45EKES 2212 | ||
2201 | guf_cupid MACH_GUF_CUPID GUF_CUPID 2213 | ||
2202 | eab1r MACH_EAB1R EAB1R 2214 | ||
2203 | desirec MACH_DESIREC DESIREC 2215 | ||
2204 | cordoba MACH_CORDOBA CORDOBA 2216 | ||
2205 | irvine MACH_IRVINE IRVINE 2217 | ||
2206 | sff772 MACH_SFF772 SFF772 2218 | ||
2207 | pelco_milano MACH_PELCO_MILANO PELCO_MILANO 2219 | ||
2208 | pc7302 MACH_PC7302 PC7302 2220 | ||
2209 | bip6000 MACH_BIP6000 BIP6000 2221 | ||
2210 | silvermoon MACH_SILVERMOON SILVERMOON 2222 | ||
2211 | vc0830 MACH_VC0830 VC0830 2223 | ||
2212 | dt430 MACH_DT430 DT430 2224 | ||
2213 | ji42pf MACH_JI42PF JI42PF 2225 | ||
2214 | gnet_ksm MACH_GNET_KSM GNET_KSM 2226 | ||
2215 | gnet_sgm MACH_GNET_SGM GNET_SGM 2227 | ||
2216 | gnet_sgr MACH_GNET_SGR GNET_SGR 2228 | ||
2217 | omap3_icetekevm MACH_OMAP3_ICETEKEVM OMAP3_ICETEKEVM 2229 | ||
2218 | pnp MACH_PNP PNP 2230 | ||
2219 | ctera_2bay_k MACH_CTERA_2BAY_K CTERA_2BAY_K 2231 | ||
2220 | ctera_2bay_u MACH_CTERA_2BAY_U CTERA_2BAY_U 2232 | ||
2221 | sas_c MACH_SAS_C SAS_C 2233 | ||
2222 | vma2315 MACH_VMA2315 VMA2315 2234 | ||
2223 | vcs MACH_VCS VCS 2235 | ||
2224 | spear600 MACH_SPEAR600 SPEAR600 2236 | ||
2225 | spear300 MACH_SPEAR300 SPEAR300 2237 | ||
2226 | spear1300 MACH_SPEAR1300 SPEAR1300 2238 | ||
2227 | lilly1131 MACH_LILLY1131 LILLY1131 2239 | ||
2228 | arvoo_ax301 MACH_ARVOO_AX301 ARVOO_AX301 2240 | ||
2229 | mapphone MACH_MAPPHONE MAPPHONE 2241 | ||
2230 | legend MACH_LEGEND LEGEND 2242 | ||
2231 | salsa MACH_SALSA SALSA 2243 | ||
2232 | lounge MACH_LOUNGE LOUNGE 2244 | ||
2233 | vision MACH_VISION VISION 2245 | ||
2234 | vmb20 MACH_VMB20 VMB20 2246 | ||
2235 | hy2410 MACH_HY2410 HY2410 2247 | ||
2236 | hy9315 MACH_HY9315 HY9315 2248 | ||
2237 | bullwinkle MACH_BULLWINKLE BULLWINKLE 2249 | ||
2238 | arm_ultimator2 MACH_ARM_ULTIMATOR2 ARM_ULTIMATOR2 2250 | ||
2239 | vs_v210 MACH_VS_V210 VS_V210 2252 | ||
2240 | vs_v212 MACH_VS_V212 VS_V212 2253 | ||
2241 | hmt MACH_HMT HMT 2254 | ||
2242 | suen3 MACH_SUEN3 SUEN3 2255 | ||
2243 | vesper MACH_VESPER VESPER 2256 | ||
2244 | str9 MACH_STR9 STR9 2257 | ||
2245 | omap3_wl_ff MACH_OMAP3_WL_FF OMAP3_WL_FF 2258 | ||
2246 | simcom MACH_SIMCOM SIMCOM 2259 | ||
2247 | mcwebio MACH_MCWEBIO MCWEBIO 2260 | ||
diff --git a/arch/blackfin/include/asm/.gitignore b/arch/blackfin/include/asm/.gitignore deleted file mode 100644 index 7858564a4466..000000000000 --- a/arch/blackfin/include/asm/.gitignore +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | +mach | ||
diff --git a/arch/blackfin/include/asm/flat.h b/arch/blackfin/include/asm/flat.h index e70074e05f4e..733a178d782d 100644 --- a/arch/blackfin/include/asm/flat.h +++ b/arch/blackfin/include/asm/flat.h | |||
@@ -10,7 +10,6 @@ | |||
10 | 10 | ||
11 | #include <asm/unaligned.h> | 11 | #include <asm/unaligned.h> |
12 | 12 | ||
13 | #define flat_stack_align(sp) /* nothing needed */ | ||
14 | #define flat_argvp_envp_on_stack() 0 | 13 | #define flat_argvp_envp_on_stack() 0 |
15 | #define flat_old_ram_flag(flags) (flags) | 14 | #define flat_old_ram_flag(flags) (flags) |
16 | 15 | ||
diff --git a/arch/blackfin/include/asm/unistd.h b/arch/blackfin/include/asm/unistd.h index 1e57b636e0bc..cf5066d3efd2 100644 --- a/arch/blackfin/include/asm/unistd.h +++ b/arch/blackfin/include/asm/unistd.h | |||
@@ -378,8 +378,10 @@ | |||
378 | #define __NR_dup3 363 | 378 | #define __NR_dup3 363 |
379 | #define __NR_pipe2 364 | 379 | #define __NR_pipe2 364 |
380 | #define __NR_inotify_init1 365 | 380 | #define __NR_inotify_init1 365 |
381 | #define __NR_preadv 366 | ||
382 | #define __NR_pwritev 367 | ||
381 | 383 | ||
382 | #define __NR_syscall 366 | 384 | #define __NR_syscall 368 |
383 | #define NR_syscalls __NR_syscall | 385 | #define NR_syscalls __NR_syscall |
384 | 386 | ||
385 | /* Old optional stuff no one actually uses */ | 387 | /* Old optional stuff no one actually uses */ |
diff --git a/arch/blackfin/kernel/.gitignore b/arch/blackfin/kernel/.gitignore new file mode 100644 index 000000000000..c5f676c3c224 --- /dev/null +++ b/arch/blackfin/kernel/.gitignore | |||
@@ -0,0 +1 @@ | |||
vmlinux.lds | |||
diff --git a/arch/blackfin/lib/strncmp.c b/arch/blackfin/lib/strncmp.c index 2aaae78a68e0..46518b1d2983 100644 --- a/arch/blackfin/lib/strncmp.c +++ b/arch/blackfin/lib/strncmp.c | |||
@@ -8,9 +8,8 @@ | |||
8 | 8 | ||
9 | #define strncmp __inline_strncmp | 9 | #define strncmp __inline_strncmp |
10 | #include <asm/string.h> | 10 | #include <asm/string.h> |
11 | #undef strncmp | ||
12 | |||
13 | #include <linux/module.h> | 11 | #include <linux/module.h> |
12 | #undef strncmp | ||
14 | 13 | ||
15 | int strncmp(const char *cs, const char *ct, size_t count) | 14 | int strncmp(const char *cs, const char *ct, size_t count) |
16 | { | 15 | { |
diff --git a/arch/blackfin/mach-common/entry.S b/arch/blackfin/mach-common/entry.S index 21e65a339a22..a063a434f7e3 100644 --- a/arch/blackfin/mach-common/entry.S +++ b/arch/blackfin/mach-common/entry.S | |||
@@ -1581,6 +1581,8 @@ ENTRY(_sys_call_table) | |||
1581 | .long _sys_dup3 | 1581 | .long _sys_dup3 |
1582 | .long _sys_pipe2 | 1582 | .long _sys_pipe2 |
1583 | .long _sys_inotify_init1 /* 365 */ | 1583 | .long _sys_inotify_init1 /* 365 */ |
1584 | .long _sys_preadv | ||
1585 | .long _sys_pwritev | ||
1584 | 1586 | ||
1585 | .rept NR_syscalls-(.-_sys_call_table)/4 | 1587 | .rept NR_syscalls-(.-_sys_call_table)/4 |
1586 | .long _sys_ni_syscall | 1588 | .long _sys_ni_syscall |
diff --git a/arch/h8300/include/asm/flat.h b/arch/h8300/include/asm/flat.h index 2a873508a9a1..bd12b31b90e6 100644 --- a/arch/h8300/include/asm/flat.h +++ b/arch/h8300/include/asm/flat.h | |||
@@ -5,7 +5,6 @@ | |||
5 | #ifndef __H8300_FLAT_H__ | 5 | #ifndef __H8300_FLAT_H__ |
6 | #define __H8300_FLAT_H__ | 6 | #define __H8300_FLAT_H__ |
7 | 7 | ||
8 | #define flat_stack_align(sp) /* nothing needed */ | ||
9 | #define flat_argvp_envp_on_stack() 1 | 8 | #define flat_argvp_envp_on_stack() 1 |
10 | #define flat_old_ram_flag(flags) 1 | 9 | #define flat_old_ram_flag(flags) 1 |
11 | #define flat_reloc_valid(reloc, size) ((reloc) <= (size)) | 10 | #define flat_reloc_valid(reloc, size) ((reloc) <= (size)) |
diff --git a/arch/m32r/include/asm/flat.h b/arch/m32r/include/asm/flat.h index d851cf0c4aa5..5d711c4688fb 100644 --- a/arch/m32r/include/asm/flat.h +++ b/arch/m32r/include/asm/flat.h | |||
@@ -12,7 +12,6 @@ | |||
12 | #ifndef __ASM_M32R_FLAT_H | 12 | #ifndef __ASM_M32R_FLAT_H |
13 | #define __ASM_M32R_FLAT_H | 13 | #define __ASM_M32R_FLAT_H |
14 | 14 | ||
15 | #define flat_stack_align(sp) (*sp += (*sp & 3 ? (4 - (*sp & 3)): 0)) | ||
16 | #define flat_argvp_envp_on_stack() 0 | 15 | #define flat_argvp_envp_on_stack() 0 |
17 | #define flat_old_ram_flag(flags) (flags) | 16 | #define flat_old_ram_flag(flags) (flags) |
18 | #define flat_set_persistent(relval, p) 0 | 17 | #define flat_set_persistent(relval, p) 0 |
diff --git a/arch/m68k/include/asm/flat.h b/arch/m68k/include/asm/flat.h index 814b5174a8e0..a0e290793978 100644 --- a/arch/m68k/include/asm/flat.h +++ b/arch/m68k/include/asm/flat.h | |||
@@ -5,7 +5,6 @@ | |||
5 | #ifndef __M68KNOMMU_FLAT_H__ | 5 | #ifndef __M68KNOMMU_FLAT_H__ |
6 | #define __M68KNOMMU_FLAT_H__ | 6 | #define __M68KNOMMU_FLAT_H__ |
7 | 7 | ||
8 | #define flat_stack_align(sp) /* nothing needed */ | ||
9 | #define flat_argvp_envp_on_stack() 1 | 8 | #define flat_argvp_envp_on_stack() 1 |
10 | #define flat_old_ram_flag(flags) (flags) | 9 | #define flat_old_ram_flag(flags) (flags) |
11 | #define flat_reloc_valid(reloc, size) ((reloc) <= (size)) | 10 | #define flat_reloc_valid(reloc, size) ((reloc) <= (size)) |
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index a0d1146a0578..cdc9a6ff4be8 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
@@ -868,6 +868,18 @@ config TASK_SIZE | |||
868 | default "0x80000000" if PPC_PREP || PPC_8xx | 868 | default "0x80000000" if PPC_PREP || PPC_8xx |
869 | default "0xc0000000" | 869 | default "0xc0000000" |
870 | 870 | ||
871 | config CONSISTENT_SIZE_BOOL | ||
872 | bool "Set custom consistent memory pool size" | ||
873 | depends on ADVANCED_OPTIONS && NOT_COHERENT_CACHE | ||
874 | help | ||
875 | This option allows you to set the size of the | ||
876 | consistent memory pool. This pool of virtual memory | ||
877 | is used to make consistent memory allocations. | ||
878 | |||
879 | config CONSISTENT_SIZE | ||
880 | hex "Size of consistent memory pool" if CONSISTENT_SIZE_BOOL | ||
881 | default "0x00200000" if NOT_COHERENT_CACHE | ||
882 | |||
871 | config PIN_TLB | 883 | config PIN_TLB |
872 | bool "Pinned Kernel TLBs (860 ONLY)" | 884 | bool "Pinned Kernel TLBs (860 ONLY)" |
873 | depends on ADVANCED_OPTIONS && 8xx | 885 | depends on ADVANCED_OPTIONS && 8xx |
diff --git a/arch/powerpc/configs/pmac32_defconfig b/arch/powerpc/configs/pmac32_defconfig index 5339bb44cce9..ea8870a34482 100644 --- a/arch/powerpc/configs/pmac32_defconfig +++ b/arch/powerpc/configs/pmac32_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.28-rc3 | 3 | # Linux kernel version: 2.6.30-rc7 |
4 | # Tue Nov 11 19:36:51 2008 | 4 | # Mon May 25 14:53:25 2009 |
5 | # | 5 | # |
6 | # CONFIG_PPC64 is not set | 6 | # CONFIG_PPC64 is not set |
7 | 7 | ||
@@ -14,6 +14,7 @@ CONFIG_6xx=y | |||
14 | # CONFIG_40x is not set | 14 | # CONFIG_40x is not set |
15 | # CONFIG_44x is not set | 15 | # CONFIG_44x is not set |
16 | # CONFIG_E200 is not set | 16 | # CONFIG_E200 is not set |
17 | CONFIG_PPC_BOOK3S=y | ||
17 | CONFIG_PPC_FPU=y | 18 | CONFIG_PPC_FPU=y |
18 | CONFIG_ALTIVEC=y | 19 | CONFIG_ALTIVEC=y |
19 | CONFIG_PPC_STD_MMU=y | 20 | CONFIG_PPC_STD_MMU=y |
@@ -43,7 +44,7 @@ CONFIG_GENERIC_FIND_NEXT_BIT=y | |||
43 | CONFIG_PPC=y | 44 | CONFIG_PPC=y |
44 | CONFIG_EARLY_PRINTK=y | 45 | CONFIG_EARLY_PRINTK=y |
45 | CONFIG_GENERIC_NVRAM=y | 46 | CONFIG_GENERIC_NVRAM=y |
46 | CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y | 47 | CONFIG_SCHED_OMIT_FRAME_POINTER=y |
47 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y | 48 | CONFIG_ARCH_MAY_HAVE_PC_FDC=y |
48 | CONFIG_PPC_OF=y | 49 | CONFIG_PPC_OF=y |
49 | CONFIG_OF=y | 50 | CONFIG_OF=y |
@@ -52,12 +53,14 @@ CONFIG_OF=y | |||
52 | CONFIG_AUDIT_ARCH=y | 53 | CONFIG_AUDIT_ARCH=y |
53 | CONFIG_GENERIC_BUG=y | 54 | CONFIG_GENERIC_BUG=y |
54 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y | 55 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y |
56 | CONFIG_DTC=y | ||
55 | # CONFIG_DEFAULT_UIMAGE is not set | 57 | # CONFIG_DEFAULT_UIMAGE is not set |
56 | CONFIG_HIBERNATE_32=y | 58 | CONFIG_HIBERNATE_32=y |
57 | CONFIG_ARCH_HIBERNATION_POSSIBLE=y | 59 | CONFIG_ARCH_HIBERNATION_POSSIBLE=y |
58 | CONFIG_ARCH_SUSPEND_POSSIBLE=y | 60 | CONFIG_ARCH_SUSPEND_POSSIBLE=y |
59 | # CONFIG_PPC_DCR_NATIVE is not set | 61 | # CONFIG_PPC_DCR_NATIVE is not set |
60 | # CONFIG_PPC_DCR_MMIO is not set | 62 | # CONFIG_PPC_DCR_MMIO is not set |
63 | CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y | ||
61 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 64 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
62 | 65 | ||
63 | # | 66 | # |
@@ -72,14 +75,24 @@ CONFIG_SWAP=y | |||
72 | CONFIG_SYSVIPC=y | 75 | CONFIG_SYSVIPC=y |
73 | CONFIG_SYSVIPC_SYSCTL=y | 76 | CONFIG_SYSVIPC_SYSCTL=y |
74 | CONFIG_POSIX_MQUEUE=y | 77 | CONFIG_POSIX_MQUEUE=y |
78 | CONFIG_POSIX_MQUEUE_SYSCTL=y | ||
75 | # CONFIG_BSD_PROCESS_ACCT is not set | 79 | # CONFIG_BSD_PROCESS_ACCT is not set |
76 | # CONFIG_TASKSTATS is not set | 80 | # CONFIG_TASKSTATS is not set |
77 | # CONFIG_AUDIT is not set | 81 | # CONFIG_AUDIT is not set |
82 | |||
83 | # | ||
84 | # RCU Subsystem | ||
85 | # | ||
86 | CONFIG_CLASSIC_RCU=y | ||
87 | # CONFIG_TREE_RCU is not set | ||
88 | # CONFIG_PREEMPT_RCU is not set | ||
89 | # CONFIG_TREE_RCU_TRACE is not set | ||
90 | # CONFIG_PREEMPT_RCU_TRACE is not set | ||
78 | CONFIG_IKCONFIG=y | 91 | CONFIG_IKCONFIG=y |
79 | CONFIG_IKCONFIG_PROC=y | 92 | CONFIG_IKCONFIG_PROC=y |
80 | CONFIG_LOG_BUF_SHIFT=14 | 93 | CONFIG_LOG_BUF_SHIFT=14 |
81 | # CONFIG_CGROUPS is not set | ||
82 | # CONFIG_GROUP_SCHED is not set | 94 | # CONFIG_GROUP_SCHED is not set |
95 | # CONFIG_CGROUPS is not set | ||
83 | CONFIG_SYSFS_DEPRECATED=y | 96 | CONFIG_SYSFS_DEPRECATED=y |
84 | CONFIG_SYSFS_DEPRECATED_V2=y | 97 | CONFIG_SYSFS_DEPRECATED_V2=y |
85 | # CONFIG_RELAY is not set | 98 | # CONFIG_RELAY is not set |
@@ -88,23 +101,27 @@ CONFIG_NAMESPACES=y | |||
88 | # CONFIG_IPC_NS is not set | 101 | # CONFIG_IPC_NS is not set |
89 | # CONFIG_USER_NS is not set | 102 | # CONFIG_USER_NS is not set |
90 | # CONFIG_PID_NS is not set | 103 | # CONFIG_PID_NS is not set |
104 | # CONFIG_NET_NS is not set | ||
91 | CONFIG_BLK_DEV_INITRD=y | 105 | CONFIG_BLK_DEV_INITRD=y |
92 | CONFIG_INITRAMFS_SOURCE="" | 106 | CONFIG_INITRAMFS_SOURCE="" |
107 | CONFIG_RD_GZIP=y | ||
108 | CONFIG_RD_BZIP2=y | ||
109 | CONFIG_RD_LZMA=y | ||
93 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 110 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
94 | CONFIG_SYSCTL=y | 111 | CONFIG_SYSCTL=y |
112 | CONFIG_ANON_INODES=y | ||
95 | # CONFIG_EMBEDDED is not set | 113 | # CONFIG_EMBEDDED is not set |
96 | CONFIG_SYSCTL_SYSCALL=y | 114 | CONFIG_SYSCTL_SYSCALL=y |
97 | CONFIG_KALLSYMS=y | 115 | CONFIG_KALLSYMS=y |
98 | CONFIG_KALLSYMS_ALL=y | 116 | CONFIG_KALLSYMS_ALL=y |
99 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 117 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
118 | # CONFIG_STRIP_ASM_SYMS is not set | ||
100 | CONFIG_HOTPLUG=y | 119 | CONFIG_HOTPLUG=y |
101 | CONFIG_PRINTK=y | 120 | CONFIG_PRINTK=y |
102 | CONFIG_BUG=y | 121 | CONFIG_BUG=y |
103 | CONFIG_ELF_CORE=y | 122 | CONFIG_ELF_CORE=y |
104 | # CONFIG_COMPAT_BRK is not set | ||
105 | CONFIG_BASE_FULL=y | 123 | CONFIG_BASE_FULL=y |
106 | CONFIG_FUTEX=y | 124 | CONFIG_FUTEX=y |
107 | CONFIG_ANON_INODES=y | ||
108 | CONFIG_EPOLL=y | 125 | CONFIG_EPOLL=y |
109 | CONFIG_SIGNALFD=y | 126 | CONFIG_SIGNALFD=y |
110 | CONFIG_TIMERFD=y | 127 | CONFIG_TIMERFD=y |
@@ -114,10 +131,12 @@ CONFIG_AIO=y | |||
114 | CONFIG_VM_EVENT_COUNTERS=y | 131 | CONFIG_VM_EVENT_COUNTERS=y |
115 | CONFIG_PCI_QUIRKS=y | 132 | CONFIG_PCI_QUIRKS=y |
116 | CONFIG_SLUB_DEBUG=y | 133 | CONFIG_SLUB_DEBUG=y |
134 | # CONFIG_COMPAT_BRK is not set | ||
117 | # CONFIG_SLAB is not set | 135 | # CONFIG_SLAB is not set |
118 | CONFIG_SLUB=y | 136 | CONFIG_SLUB=y |
119 | # CONFIG_SLOB is not set | 137 | # CONFIG_SLOB is not set |
120 | CONFIG_PROFILING=y | 138 | CONFIG_PROFILING=y |
139 | CONFIG_TRACEPOINTS=y | ||
121 | # CONFIG_MARKERS is not set | 140 | # CONFIG_MARKERS is not set |
122 | CONFIG_OPROFILE=y | 141 | CONFIG_OPROFILE=y |
123 | CONFIG_HAVE_OPROFILE=y | 142 | CONFIG_HAVE_OPROFILE=y |
@@ -127,10 +146,10 @@ CONFIG_HAVE_IOREMAP_PROT=y | |||
127 | CONFIG_HAVE_KPROBES=y | 146 | CONFIG_HAVE_KPROBES=y |
128 | CONFIG_HAVE_KRETPROBES=y | 147 | CONFIG_HAVE_KRETPROBES=y |
129 | CONFIG_HAVE_ARCH_TRACEHOOK=y | 148 | CONFIG_HAVE_ARCH_TRACEHOOK=y |
149 | # CONFIG_SLOW_WORK is not set | ||
130 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set | 150 | # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set |
131 | CONFIG_SLABINFO=y | 151 | CONFIG_SLABINFO=y |
132 | CONFIG_RT_MUTEXES=y | 152 | CONFIG_RT_MUTEXES=y |
133 | # CONFIG_TINY_SHMEM is not set | ||
134 | CONFIG_BASE_SMALL=0 | 153 | CONFIG_BASE_SMALL=0 |
135 | CONFIG_MODULES=y | 154 | CONFIG_MODULES=y |
136 | # CONFIG_MODULE_FORCE_LOAD is not set | 155 | # CONFIG_MODULE_FORCE_LOAD is not set |
@@ -138,11 +157,8 @@ CONFIG_MODULE_UNLOAD=y | |||
138 | CONFIG_MODULE_FORCE_UNLOAD=y | 157 | CONFIG_MODULE_FORCE_UNLOAD=y |
139 | # CONFIG_MODVERSIONS is not set | 158 | # CONFIG_MODVERSIONS is not set |
140 | # CONFIG_MODULE_SRCVERSION_ALL is not set | 159 | # CONFIG_MODULE_SRCVERSION_ALL is not set |
141 | CONFIG_KMOD=y | ||
142 | CONFIG_BLOCK=y | 160 | CONFIG_BLOCK=y |
143 | CONFIG_LBD=y | 161 | CONFIG_LBD=y |
144 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
145 | CONFIG_LSF=y | ||
146 | CONFIG_BLK_DEV_BSG=y | 162 | CONFIG_BLK_DEV_BSG=y |
147 | # CONFIG_BLK_DEV_INTEGRITY is not set | 163 | # CONFIG_BLK_DEV_INTEGRITY is not set |
148 | 164 | ||
@@ -158,14 +174,11 @@ CONFIG_DEFAULT_AS=y | |||
158 | # CONFIG_DEFAULT_CFQ is not set | 174 | # CONFIG_DEFAULT_CFQ is not set |
159 | # CONFIG_DEFAULT_NOOP is not set | 175 | # CONFIG_DEFAULT_NOOP is not set |
160 | CONFIG_DEFAULT_IOSCHED="anticipatory" | 176 | CONFIG_DEFAULT_IOSCHED="anticipatory" |
161 | CONFIG_CLASSIC_RCU=y | ||
162 | CONFIG_FREEZER=y | 177 | CONFIG_FREEZER=y |
163 | 178 | ||
164 | # | 179 | # |
165 | # Platform support | 180 | # Platform support |
166 | # | 181 | # |
167 | CONFIG_PPC_MULTIPLATFORM=y | ||
168 | CONFIG_CLASSIC32=y | ||
169 | # CONFIG_PPC_CHRP is not set | 182 | # CONFIG_PPC_CHRP is not set |
170 | # CONFIG_MPC5121_ADS is not set | 183 | # CONFIG_MPC5121_ADS is not set |
171 | # CONFIG_MPC5121_GENERIC is not set | 184 | # CONFIG_MPC5121_GENERIC is not set |
@@ -178,7 +191,9 @@ CONFIG_PPC_PMAC=y | |||
178 | # CONFIG_PPC_83xx is not set | 191 | # CONFIG_PPC_83xx is not set |
179 | # CONFIG_PPC_86xx is not set | 192 | # CONFIG_PPC_86xx is not set |
180 | # CONFIG_EMBEDDED6xx is not set | 193 | # CONFIG_EMBEDDED6xx is not set |
194 | # CONFIG_AMIGAONE is not set | ||
181 | CONFIG_PPC_NATIVE=y | 195 | CONFIG_PPC_NATIVE=y |
196 | CONFIG_PPC_OF_BOOT_TRAMPOLINE=y | ||
182 | # CONFIG_IPIC is not set | 197 | # CONFIG_IPIC is not set |
183 | CONFIG_MPIC=y | 198 | CONFIG_MPIC=y |
184 | # CONFIG_MPIC_WEIRD is not set | 199 | # CONFIG_MPIC_WEIRD is not set |
@@ -212,11 +227,12 @@ CONFIG_CPU_FREQ_PMAC=y | |||
212 | CONFIG_PPC601_SYNC_FIX=y | 227 | CONFIG_PPC601_SYNC_FIX=y |
213 | # CONFIG_TAU is not set | 228 | # CONFIG_TAU is not set |
214 | # CONFIG_FSL_ULI1575 is not set | 229 | # CONFIG_FSL_ULI1575 is not set |
230 | # CONFIG_SIMPLE_GPIO is not set | ||
215 | 231 | ||
216 | # | 232 | # |
217 | # Kernel options | 233 | # Kernel options |
218 | # | 234 | # |
219 | # CONFIG_HIGHMEM is not set | 235 | CONFIG_HIGHMEM=y |
220 | CONFIG_TICK_ONESHOT=y | 236 | CONFIG_TICK_ONESHOT=y |
221 | CONFIG_NO_HZ=y | 237 | CONFIG_NO_HZ=y |
222 | CONFIG_HIGH_RES_TIMERS=y | 238 | CONFIG_HIGH_RES_TIMERS=y |
@@ -239,6 +255,7 @@ CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | |||
239 | CONFIG_ARCH_HAS_WALK_MEMORY=y | 255 | CONFIG_ARCH_HAS_WALK_MEMORY=y |
240 | CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y | 256 | CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y |
241 | # CONFIG_KEXEC is not set | 257 | # CONFIG_KEXEC is not set |
258 | # CONFIG_CRASH_DUMP is not set | ||
242 | CONFIG_ARCH_FLATMEM_ENABLE=y | 259 | CONFIG_ARCH_FLATMEM_ENABLE=y |
243 | CONFIG_ARCH_POPULATES_NODE_MAP=y | 260 | CONFIG_ARCH_POPULATES_NODE_MAP=y |
244 | CONFIG_SELECT_MEMORY_MODEL=y | 261 | CONFIG_SELECT_MEMORY_MODEL=y |
@@ -250,12 +267,17 @@ CONFIG_FLAT_NODE_MEM_MAP=y | |||
250 | CONFIG_PAGEFLAGS_EXTENDED=y | 267 | CONFIG_PAGEFLAGS_EXTENDED=y |
251 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 268 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
252 | # CONFIG_MIGRATION is not set | 269 | # CONFIG_MIGRATION is not set |
253 | # CONFIG_RESOURCES_64BIT is not set | ||
254 | # CONFIG_PHYS_ADDR_T_64BIT is not set | 270 | # CONFIG_PHYS_ADDR_T_64BIT is not set |
255 | CONFIG_ZONE_DMA_FLAG=1 | 271 | CONFIG_ZONE_DMA_FLAG=1 |
256 | CONFIG_BOUNCE=y | 272 | CONFIG_BOUNCE=y |
257 | CONFIG_VIRT_TO_BUS=y | 273 | CONFIG_VIRT_TO_BUS=y |
258 | CONFIG_UNEVICTABLE_LRU=y | 274 | CONFIG_UNEVICTABLE_LRU=y |
275 | CONFIG_HAVE_MLOCK=y | ||
276 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y | ||
277 | CONFIG_PPC_4K_PAGES=y | ||
278 | # CONFIG_PPC_16K_PAGES is not set | ||
279 | # CONFIG_PPC_64K_PAGES is not set | ||
280 | # CONFIG_PPC_256K_PAGES is not set | ||
259 | CONFIG_FORCE_MAX_ZONEORDER=11 | 281 | CONFIG_FORCE_MAX_ZONEORDER=11 |
260 | CONFIG_PROC_DEVICETREE=y | 282 | CONFIG_PROC_DEVICETREE=y |
261 | # CONFIG_CMDLINE_BOOL is not set | 283 | # CONFIG_CMDLINE_BOOL is not set |
@@ -288,6 +310,8 @@ CONFIG_ARCH_SUPPORTS_MSI=y | |||
288 | # CONFIG_PCI_MSI is not set | 310 | # CONFIG_PCI_MSI is not set |
289 | # CONFIG_PCI_LEGACY is not set | 311 | # CONFIG_PCI_LEGACY is not set |
290 | # CONFIG_PCI_DEBUG is not set | 312 | # CONFIG_PCI_DEBUG is not set |
313 | # CONFIG_PCI_STUB is not set | ||
314 | # CONFIG_PCI_IOV is not set | ||
291 | CONFIG_PCCARD=m | 315 | CONFIG_PCCARD=m |
292 | # CONFIG_PCMCIA_DEBUG is not set | 316 | # CONFIG_PCMCIA_DEBUG is not set |
293 | CONFIG_PCMCIA=m | 317 | CONFIG_PCMCIA=m |
@@ -397,6 +421,8 @@ CONFIG_NETFILTER_XTABLES=m | |||
397 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | 421 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m |
398 | # CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set | 422 | # CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set |
399 | # CONFIG_NETFILTER_XT_TARGET_DSCP is not set | 423 | # CONFIG_NETFILTER_XT_TARGET_DSCP is not set |
424 | CONFIG_NETFILTER_XT_TARGET_HL=m | ||
425 | # CONFIG_NETFILTER_XT_TARGET_LED is not set | ||
400 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 426 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
401 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 427 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
402 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | 428 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m |
@@ -405,6 +431,7 @@ CONFIG_NETFILTER_XT_TARGET_RATEEST=m | |||
405 | CONFIG_NETFILTER_XT_TARGET_TRACE=m | 431 | CONFIG_NETFILTER_XT_TARGET_TRACE=m |
406 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m | 432 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m |
407 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m | 433 | CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m |
434 | # CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set | ||
408 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | 435 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m |
409 | # CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set | 436 | # CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set |
410 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m | 437 | CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m |
@@ -415,6 +442,7 @@ CONFIG_NETFILTER_XT_MATCH_DSCP=m | |||
415 | CONFIG_NETFILTER_XT_MATCH_ESP=m | 442 | CONFIG_NETFILTER_XT_MATCH_ESP=m |
416 | # CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set | 443 | # CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set |
417 | CONFIG_NETFILTER_XT_MATCH_HELPER=m | 444 | CONFIG_NETFILTER_XT_MATCH_HELPER=m |
445 | CONFIG_NETFILTER_XT_MATCH_HL=m | ||
418 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m | 446 | CONFIG_NETFILTER_XT_MATCH_IPRANGE=m |
419 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | 447 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m |
420 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | 448 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m |
@@ -478,17 +506,15 @@ CONFIG_IP_NF_ARPFILTER=m | |||
478 | CONFIG_IP_NF_ARP_MANGLE=m | 506 | CONFIG_IP_NF_ARP_MANGLE=m |
479 | CONFIG_IP_DCCP=m | 507 | CONFIG_IP_DCCP=m |
480 | CONFIG_INET_DCCP_DIAG=m | 508 | CONFIG_INET_DCCP_DIAG=m |
481 | CONFIG_IP_DCCP_ACKVEC=y | ||
482 | 509 | ||
483 | # | 510 | # |
484 | # DCCP CCIDs Configuration (EXPERIMENTAL) | 511 | # DCCP CCIDs Configuration (EXPERIMENTAL) |
485 | # | 512 | # |
486 | CONFIG_IP_DCCP_CCID2=m | ||
487 | # CONFIG_IP_DCCP_CCID2_DEBUG is not set | 513 | # CONFIG_IP_DCCP_CCID2_DEBUG is not set |
488 | CONFIG_IP_DCCP_CCID3=m | 514 | CONFIG_IP_DCCP_CCID3=y |
489 | # CONFIG_IP_DCCP_CCID3_DEBUG is not set | 515 | # CONFIG_IP_DCCP_CCID3_DEBUG is not set |
490 | CONFIG_IP_DCCP_CCID3_RTO=100 | 516 | CONFIG_IP_DCCP_CCID3_RTO=100 |
491 | CONFIG_IP_DCCP_TFRC_LIB=m | 517 | CONFIG_IP_DCCP_TFRC_LIB=y |
492 | 518 | ||
493 | # | 519 | # |
494 | # DCCP Kernel Hacking | 520 | # DCCP Kernel Hacking |
@@ -508,13 +534,16 @@ CONFIG_IP_DCCP_TFRC_LIB=m | |||
508 | # CONFIG_LAPB is not set | 534 | # CONFIG_LAPB is not set |
509 | # CONFIG_ECONET is not set | 535 | # CONFIG_ECONET is not set |
510 | # CONFIG_WAN_ROUTER is not set | 536 | # CONFIG_WAN_ROUTER is not set |
537 | # CONFIG_PHONET is not set | ||
511 | # CONFIG_NET_SCHED is not set | 538 | # CONFIG_NET_SCHED is not set |
512 | CONFIG_NET_CLS_ROUTE=y | 539 | CONFIG_NET_CLS_ROUTE=y |
540 | # CONFIG_DCB is not set | ||
513 | 541 | ||
514 | # | 542 | # |
515 | # Network testing | 543 | # Network testing |
516 | # | 544 | # |
517 | # CONFIG_NET_PKTGEN is not set | 545 | # CONFIG_NET_PKTGEN is not set |
546 | # CONFIG_NET_DROP_MONITOR is not set | ||
518 | # CONFIG_HAMRADIO is not set | 547 | # CONFIG_HAMRADIO is not set |
519 | # CONFIG_CAN is not set | 548 | # CONFIG_CAN is not set |
520 | CONFIG_IRDA=m | 549 | CONFIG_IRDA=m |
@@ -577,8 +606,6 @@ CONFIG_BT_HIDP=m | |||
577 | # | 606 | # |
578 | # Bluetooth device drivers | 607 | # Bluetooth device drivers |
579 | # | 608 | # |
580 | CONFIG_BT_HCIUSB=m | ||
581 | # CONFIG_BT_HCIUSB_SCO is not set | ||
582 | # CONFIG_BT_HCIBTUSB is not set | 609 | # CONFIG_BT_HCIBTUSB is not set |
583 | # CONFIG_BT_HCIUART is not set | 610 | # CONFIG_BT_HCIUART is not set |
584 | CONFIG_BT_HCIBCM203X=m | 611 | CONFIG_BT_HCIBCM203X=m |
@@ -590,31 +617,27 @@ CONFIG_BT_HCIBFUSB=m | |||
590 | # CONFIG_BT_HCIBTUART is not set | 617 | # CONFIG_BT_HCIBTUART is not set |
591 | # CONFIG_BT_HCIVHCI is not set | 618 | # CONFIG_BT_HCIVHCI is not set |
592 | # CONFIG_AF_RXRPC is not set | 619 | # CONFIG_AF_RXRPC is not set |
593 | # CONFIG_PHONET is not set | ||
594 | CONFIG_WIRELESS=y | 620 | CONFIG_WIRELESS=y |
595 | CONFIG_CFG80211=m | 621 | CONFIG_CFG80211=m |
596 | CONFIG_NL80211=y | 622 | # CONFIG_CFG80211_REG_DEBUG is not set |
597 | CONFIG_WIRELESS_OLD_REGULATORY=y | 623 | CONFIG_WIRELESS_OLD_REGULATORY=y |
598 | CONFIG_WIRELESS_EXT=y | 624 | CONFIG_WIRELESS_EXT=y |
599 | CONFIG_WIRELESS_EXT_SYSFS=y | 625 | CONFIG_WIRELESS_EXT_SYSFS=y |
626 | # CONFIG_LIB80211 is not set | ||
600 | CONFIG_MAC80211=m | 627 | CONFIG_MAC80211=m |
601 | 628 | ||
602 | # | 629 | # |
603 | # Rate control algorithm selection | 630 | # Rate control algorithm selection |
604 | # | 631 | # |
605 | CONFIG_MAC80211_RC_PID=y | 632 | CONFIG_MAC80211_RC_MINSTREL=y |
606 | # CONFIG_MAC80211_RC_MINSTREL is not set | 633 | # CONFIG_MAC80211_RC_DEFAULT_PID is not set |
607 | CONFIG_MAC80211_RC_DEFAULT_PID=y | 634 | CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y |
608 | # CONFIG_MAC80211_RC_DEFAULT_MINSTREL is not set | 635 | CONFIG_MAC80211_RC_DEFAULT="minstrel" |
609 | CONFIG_MAC80211_RC_DEFAULT="pid" | ||
610 | # CONFIG_MAC80211_MESH is not set | 636 | # CONFIG_MAC80211_MESH is not set |
611 | CONFIG_MAC80211_LEDS=y | 637 | CONFIG_MAC80211_LEDS=y |
638 | # CONFIG_MAC80211_DEBUGFS is not set | ||
612 | # CONFIG_MAC80211_DEBUG_MENU is not set | 639 | # CONFIG_MAC80211_DEBUG_MENU is not set |
613 | CONFIG_IEEE80211=m | 640 | # CONFIG_WIMAX is not set |
614 | # CONFIG_IEEE80211_DEBUG is not set | ||
615 | CONFIG_IEEE80211_CRYPT_WEP=m | ||
616 | CONFIG_IEEE80211_CRYPT_CCMP=m | ||
617 | CONFIG_IEEE80211_CRYPT_TKIP=m | ||
618 | # CONFIG_RFKILL is not set | 641 | # CONFIG_RFKILL is not set |
619 | # CONFIG_NET_9P is not set | 642 | # CONFIG_NET_9P is not set |
620 | 643 | ||
@@ -662,17 +685,27 @@ CONFIG_BLK_DEV_RAM_SIZE=4096 | |||
662 | # CONFIG_BLK_DEV_HD is not set | 685 | # CONFIG_BLK_DEV_HD is not set |
663 | CONFIG_MISC_DEVICES=y | 686 | CONFIG_MISC_DEVICES=y |
664 | # CONFIG_PHANTOM is not set | 687 | # CONFIG_PHANTOM is not set |
665 | # CONFIG_EEPROM_93CX6 is not set | ||
666 | # CONFIG_SGI_IOC4 is not set | 688 | # CONFIG_SGI_IOC4 is not set |
667 | # CONFIG_TIFM_CORE is not set | 689 | # CONFIG_TIFM_CORE is not set |
690 | # CONFIG_ICS932S401 is not set | ||
668 | # CONFIG_ENCLOSURE_SERVICES is not set | 691 | # CONFIG_ENCLOSURE_SERVICES is not set |
669 | # CONFIG_HP_ILO is not set | 692 | # CONFIG_HP_ILO is not set |
693 | # CONFIG_ISL29003 is not set | ||
694 | # CONFIG_C2PORT is not set | ||
695 | |||
696 | # | ||
697 | # EEPROM support | ||
698 | # | ||
699 | # CONFIG_EEPROM_AT24 is not set | ||
700 | # CONFIG_EEPROM_LEGACY is not set | ||
701 | # CONFIG_EEPROM_93CX6 is not set | ||
670 | CONFIG_HAVE_IDE=y | 702 | CONFIG_HAVE_IDE=y |
671 | CONFIG_IDE=y | 703 | CONFIG_IDE=y |
672 | 704 | ||
673 | # | 705 | # |
674 | # Please see Documentation/ide/ide.txt for help/info on IDE drives | 706 | # Please see Documentation/ide/ide.txt for help/info on IDE drives |
675 | # | 707 | # |
708 | CONFIG_IDE_XFER_MODE=y | ||
676 | CONFIG_IDE_TIMINGS=y | 709 | CONFIG_IDE_TIMINGS=y |
677 | CONFIG_IDE_ATAPI=y | 710 | CONFIG_IDE_ATAPI=y |
678 | # CONFIG_BLK_DEV_IDE_SATA is not set | 711 | # CONFIG_BLK_DEV_IDE_SATA is not set |
@@ -684,7 +717,6 @@ CONFIG_BLK_DEV_IDECS=m | |||
684 | CONFIG_BLK_DEV_IDECD=y | 717 | CONFIG_BLK_DEV_IDECD=y |
685 | CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y | 718 | CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y |
686 | # CONFIG_BLK_DEV_IDETAPE is not set | 719 | # CONFIG_BLK_DEV_IDETAPE is not set |
687 | CONFIG_BLK_DEV_IDESCSI=y | ||
688 | # CONFIG_IDE_TASK_IOCTL is not set | 720 | # CONFIG_IDE_TASK_IOCTL is not set |
689 | CONFIG_IDE_PROC_FS=y | 721 | CONFIG_IDE_PROC_FS=y |
690 | 722 | ||
@@ -714,6 +746,7 @@ CONFIG_BLK_DEV_IDEDMA_PCI=y | |||
714 | # CONFIG_BLK_DEV_JMICRON is not set | 746 | # CONFIG_BLK_DEV_JMICRON is not set |
715 | # CONFIG_BLK_DEV_SC1200 is not set | 747 | # CONFIG_BLK_DEV_SC1200 is not set |
716 | # CONFIG_BLK_DEV_PIIX is not set | 748 | # CONFIG_BLK_DEV_PIIX is not set |
749 | # CONFIG_BLK_DEV_IT8172 is not set | ||
717 | # CONFIG_BLK_DEV_IT8213 is not set | 750 | # CONFIG_BLK_DEV_IT8213 is not set |
718 | # CONFIG_BLK_DEV_IT821X is not set | 751 | # CONFIG_BLK_DEV_IT821X is not set |
719 | # CONFIG_BLK_DEV_NS87415 is not set | 752 | # CONFIG_BLK_DEV_NS87415 is not set |
@@ -728,7 +761,6 @@ CONFIG_BLK_DEV_SL82C105=y | |||
728 | # CONFIG_BLK_DEV_TC86C001 is not set | 761 | # CONFIG_BLK_DEV_TC86C001 is not set |
729 | CONFIG_BLK_DEV_IDE_PMAC=y | 762 | CONFIG_BLK_DEV_IDE_PMAC=y |
730 | CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y | 763 | CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y |
731 | CONFIG_BLK_DEV_IDEDMA_PMAC=y | ||
732 | CONFIG_BLK_DEV_IDEDMA=y | 764 | CONFIG_BLK_DEV_IDEDMA=y |
733 | 765 | ||
734 | # | 766 | # |
@@ -772,6 +804,7 @@ CONFIG_SCSI_FC_ATTRS=y | |||
772 | # CONFIG_SCSI_SRP_ATTRS is not set | 804 | # CONFIG_SCSI_SRP_ATTRS is not set |
773 | CONFIG_SCSI_LOWLEVEL=y | 805 | CONFIG_SCSI_LOWLEVEL=y |
774 | # CONFIG_ISCSI_TCP is not set | 806 | # CONFIG_ISCSI_TCP is not set |
807 | # CONFIG_SCSI_CXGB3_ISCSI is not set | ||
775 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | 808 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set |
776 | # CONFIG_SCSI_3W_9XXX is not set | 809 | # CONFIG_SCSI_3W_9XXX is not set |
777 | # CONFIG_SCSI_ACARD is not set | 810 | # CONFIG_SCSI_ACARD is not set |
@@ -791,8 +824,12 @@ CONFIG_SCSI_AIC7XXX_OLD=m | |||
791 | # CONFIG_MEGARAID_NEWGEN is not set | 824 | # CONFIG_MEGARAID_NEWGEN is not set |
792 | # CONFIG_MEGARAID_LEGACY is not set | 825 | # CONFIG_MEGARAID_LEGACY is not set |
793 | # CONFIG_MEGARAID_SAS is not set | 826 | # CONFIG_MEGARAID_SAS is not set |
827 | # CONFIG_SCSI_MPT2SAS is not set | ||
794 | # CONFIG_SCSI_HPTIOP is not set | 828 | # CONFIG_SCSI_HPTIOP is not set |
795 | # CONFIG_SCSI_BUSLOGIC is not set | 829 | # CONFIG_SCSI_BUSLOGIC is not set |
830 | # CONFIG_LIBFC is not set | ||
831 | # CONFIG_LIBFCOE is not set | ||
832 | # CONFIG_FCOE is not set | ||
796 | # CONFIG_SCSI_DMX3191D is not set | 833 | # CONFIG_SCSI_DMX3191D is not set |
797 | # CONFIG_SCSI_EATA is not set | 834 | # CONFIG_SCSI_EATA is not set |
798 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | 835 | # CONFIG_SCSI_FUTURE_DOMAIN is not set |
@@ -822,6 +859,7 @@ CONFIG_SCSI_MAC53C94=y | |||
822 | # CONFIG_SCSI_SRP is not set | 859 | # CONFIG_SCSI_SRP is not set |
823 | # CONFIG_SCSI_LOWLEVEL_PCMCIA is not set | 860 | # CONFIG_SCSI_LOWLEVEL_PCMCIA is not set |
824 | # CONFIG_SCSI_DH is not set | 861 | # CONFIG_SCSI_DH is not set |
862 | # CONFIG_SCSI_OSD_INITIATOR is not set | ||
825 | # CONFIG_ATA is not set | 863 | # CONFIG_ATA is not set |
826 | CONFIG_MD=y | 864 | CONFIG_MD=y |
827 | CONFIG_BLK_DEV_MD=m | 865 | CONFIG_BLK_DEV_MD=m |
@@ -881,6 +919,7 @@ CONFIG_THERM_ADT746X=m | |||
881 | # CONFIG_ANSLCD is not set | 919 | # CONFIG_ANSLCD is not set |
882 | CONFIG_PMAC_RACKMETER=m | 920 | CONFIG_PMAC_RACKMETER=m |
883 | CONFIG_NETDEVICES=y | 921 | CONFIG_NETDEVICES=y |
922 | CONFIG_COMPAT_NET_DEV_OPS=y | ||
884 | CONFIG_DUMMY=m | 923 | CONFIG_DUMMY=m |
885 | # CONFIG_BONDING is not set | 924 | # CONFIG_BONDING is not set |
886 | # CONFIG_MACVLAN is not set | 925 | # CONFIG_MACVLAN is not set |
@@ -898,6 +937,8 @@ CONFIG_BMAC=y | |||
898 | CONFIG_SUNGEM=y | 937 | CONFIG_SUNGEM=y |
899 | # CONFIG_CASSINI is not set | 938 | # CONFIG_CASSINI is not set |
900 | # CONFIG_NET_VENDOR_3COM is not set | 939 | # CONFIG_NET_VENDOR_3COM is not set |
940 | # CONFIG_ETHOC is not set | ||
941 | # CONFIG_DNET is not set | ||
901 | # CONFIG_NET_TULIP is not set | 942 | # CONFIG_NET_TULIP is not set |
902 | # CONFIG_HP100 is not set | 943 | # CONFIG_HP100 is not set |
903 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | 944 | # CONFIG_IBM_NEW_EMAC_ZMII is not set |
@@ -913,7 +954,6 @@ CONFIG_PCNET32=y | |||
913 | # CONFIG_ADAPTEC_STARFIRE is not set | 954 | # CONFIG_ADAPTEC_STARFIRE is not set |
914 | # CONFIG_B44 is not set | 955 | # CONFIG_B44 is not set |
915 | # CONFIG_FORCEDETH is not set | 956 | # CONFIG_FORCEDETH is not set |
916 | # CONFIG_EEPRO100 is not set | ||
917 | # CONFIG_E100 is not set | 957 | # CONFIG_E100 is not set |
918 | # CONFIG_FEALNX is not set | 958 | # CONFIG_FEALNX is not set |
919 | # CONFIG_NATSEMI is not set | 959 | # CONFIG_NATSEMI is not set |
@@ -923,6 +963,7 @@ CONFIG_PCNET32=y | |||
923 | # CONFIG_R6040 is not set | 963 | # CONFIG_R6040 is not set |
924 | # CONFIG_SIS900 is not set | 964 | # CONFIG_SIS900 is not set |
925 | # CONFIG_EPIC100 is not set | 965 | # CONFIG_EPIC100 is not set |
966 | # CONFIG_SMSC9420 is not set | ||
926 | # CONFIG_SUNDANCE is not set | 967 | # CONFIG_SUNDANCE is not set |
927 | # CONFIG_TLAN is not set | 968 | # CONFIG_TLAN is not set |
928 | # CONFIG_VIA_RHINE is not set | 969 | # CONFIG_VIA_RHINE is not set |
@@ -935,6 +976,7 @@ CONFIG_NETDEV_1000=y | |||
935 | # CONFIG_E1000E is not set | 976 | # CONFIG_E1000E is not set |
936 | # CONFIG_IP1000 is not set | 977 | # CONFIG_IP1000 is not set |
937 | # CONFIG_IGB is not set | 978 | # CONFIG_IGB is not set |
979 | # CONFIG_IGBVF is not set | ||
938 | # CONFIG_NS83820 is not set | 980 | # CONFIG_NS83820 is not set |
939 | # CONFIG_HAMACHI is not set | 981 | # CONFIG_HAMACHI is not set |
940 | # CONFIG_YELLOWFIN is not set | 982 | # CONFIG_YELLOWFIN is not set |
@@ -945,18 +987,20 @@ CONFIG_NETDEV_1000=y | |||
945 | # CONFIG_VIA_VELOCITY is not set | 987 | # CONFIG_VIA_VELOCITY is not set |
946 | # CONFIG_TIGON3 is not set | 988 | # CONFIG_TIGON3 is not set |
947 | # CONFIG_BNX2 is not set | 989 | # CONFIG_BNX2 is not set |
948 | # CONFIG_MV643XX_ETH is not set | ||
949 | # CONFIG_QLA3XXX is not set | 990 | # CONFIG_QLA3XXX is not set |
950 | # CONFIG_ATL1 is not set | 991 | # CONFIG_ATL1 is not set |
951 | # CONFIG_ATL1E is not set | 992 | # CONFIG_ATL1E is not set |
993 | # CONFIG_ATL1C is not set | ||
952 | # CONFIG_JME is not set | 994 | # CONFIG_JME is not set |
953 | CONFIG_NETDEV_10000=y | 995 | CONFIG_NETDEV_10000=y |
954 | # CONFIG_CHELSIO_T1 is not set | 996 | # CONFIG_CHELSIO_T1 is not set |
997 | CONFIG_CHELSIO_T3_DEPENDS=y | ||
955 | # CONFIG_CHELSIO_T3 is not set | 998 | # CONFIG_CHELSIO_T3 is not set |
956 | # CONFIG_ENIC is not set | 999 | # CONFIG_ENIC is not set |
957 | # CONFIG_IXGBE is not set | 1000 | # CONFIG_IXGBE is not set |
958 | # CONFIG_IXGB is not set | 1001 | # CONFIG_IXGB is not set |
959 | # CONFIG_S2IO is not set | 1002 | # CONFIG_S2IO is not set |
1003 | # CONFIG_VXGE is not set | ||
960 | # CONFIG_MYRI10GE is not set | 1004 | # CONFIG_MYRI10GE is not set |
961 | # CONFIG_NETXEN_NIC is not set | 1005 | # CONFIG_NETXEN_NIC is not set |
962 | # CONFIG_NIU is not set | 1006 | # CONFIG_NIU is not set |
@@ -966,6 +1010,7 @@ CONFIG_NETDEV_10000=y | |||
966 | # CONFIG_BNX2X is not set | 1010 | # CONFIG_BNX2X is not set |
967 | # CONFIG_QLGE is not set | 1011 | # CONFIG_QLGE is not set |
968 | # CONFIG_SFC is not set | 1012 | # CONFIG_SFC is not set |
1013 | # CONFIG_BE2NET is not set | ||
969 | # CONFIG_TR is not set | 1014 | # CONFIG_TR is not set |
970 | 1015 | ||
971 | # | 1016 | # |
@@ -974,20 +1019,11 @@ CONFIG_NETDEV_10000=y | |||
974 | # CONFIG_WLAN_PRE80211 is not set | 1019 | # CONFIG_WLAN_PRE80211 is not set |
975 | CONFIG_WLAN_80211=y | 1020 | CONFIG_WLAN_80211=y |
976 | # CONFIG_PCMCIA_RAYCS is not set | 1021 | # CONFIG_PCMCIA_RAYCS is not set |
977 | # CONFIG_IPW2100 is not set | ||
978 | # CONFIG_IPW2200 is not set | ||
979 | # CONFIG_LIBERTAS is not set | 1022 | # CONFIG_LIBERTAS is not set |
980 | # CONFIG_LIBERTAS_THINFIRM is not set | 1023 | # CONFIG_LIBERTAS_THINFIRM is not set |
981 | # CONFIG_AIRO is not set | 1024 | # CONFIG_AIRO is not set |
982 | CONFIG_HERMES=m | ||
983 | CONFIG_APPLE_AIRPORT=m | ||
984 | # CONFIG_PLX_HERMES is not set | ||
985 | # CONFIG_TMD_HERMES is not set | ||
986 | # CONFIG_NORTEL_HERMES is not set | ||
987 | CONFIG_PCI_HERMES=m | ||
988 | CONFIG_PCMCIA_HERMES=m | ||
989 | # CONFIG_PCMCIA_SPECTRUM is not set | ||
990 | # CONFIG_ATMEL is not set | 1025 | # CONFIG_ATMEL is not set |
1026 | # CONFIG_AT76C50X_USB is not set | ||
991 | # CONFIG_AIRO_CS is not set | 1027 | # CONFIG_AIRO_CS is not set |
992 | # CONFIG_PCMCIA_WL3501 is not set | 1028 | # CONFIG_PCMCIA_WL3501 is not set |
993 | CONFIG_PRISM54=m | 1029 | CONFIG_PRISM54=m |
@@ -997,15 +1033,17 @@ CONFIG_PRISM54=m | |||
997 | # CONFIG_RTL8187 is not set | 1033 | # CONFIG_RTL8187 is not set |
998 | # CONFIG_ADM8211 is not set | 1034 | # CONFIG_ADM8211 is not set |
999 | # CONFIG_MAC80211_HWSIM is not set | 1035 | # CONFIG_MAC80211_HWSIM is not set |
1036 | # CONFIG_MWL8K is not set | ||
1000 | CONFIG_P54_COMMON=m | 1037 | CONFIG_P54_COMMON=m |
1001 | # CONFIG_P54_USB is not set | 1038 | # CONFIG_P54_USB is not set |
1002 | # CONFIG_P54_PCI is not set | 1039 | # CONFIG_P54_PCI is not set |
1040 | CONFIG_P54_LEDS=y | ||
1003 | # CONFIG_ATH5K is not set | 1041 | # CONFIG_ATH5K is not set |
1004 | # CONFIG_ATH9K is not set | 1042 | # CONFIG_ATH9K is not set |
1005 | # CONFIG_IWLCORE is not set | 1043 | # CONFIG_AR9170_USB is not set |
1006 | # CONFIG_IWLWIFI_LEDS is not set | 1044 | # CONFIG_IPW2100 is not set |
1007 | # CONFIG_IWLAGN is not set | 1045 | # CONFIG_IPW2200 is not set |
1008 | # CONFIG_IWL3945 is not set | 1046 | # CONFIG_IWLWIFI is not set |
1009 | # CONFIG_HOSTAP is not set | 1047 | # CONFIG_HOSTAP is not set |
1010 | CONFIG_B43=m | 1048 | CONFIG_B43=m |
1011 | CONFIG_B43_PCI_AUTOSELECT=y | 1049 | CONFIG_B43_PCI_AUTOSELECT=y |
@@ -1025,6 +1063,19 @@ CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y | |||
1025 | # CONFIG_B43LEGACY_PIO_MODE is not set | 1063 | # CONFIG_B43LEGACY_PIO_MODE is not set |
1026 | # CONFIG_ZD1211RW is not set | 1064 | # CONFIG_ZD1211RW is not set |
1027 | # CONFIG_RT2X00 is not set | 1065 | # CONFIG_RT2X00 is not set |
1066 | CONFIG_HERMES=m | ||
1067 | CONFIG_HERMES_CACHE_FW_ON_INIT=y | ||
1068 | CONFIG_APPLE_AIRPORT=m | ||
1069 | # CONFIG_PLX_HERMES is not set | ||
1070 | # CONFIG_TMD_HERMES is not set | ||
1071 | # CONFIG_NORTEL_HERMES is not set | ||
1072 | CONFIG_PCI_HERMES=m | ||
1073 | CONFIG_PCMCIA_HERMES=m | ||
1074 | # CONFIG_PCMCIA_SPECTRUM is not set | ||
1075 | |||
1076 | # | ||
1077 | # Enable WiMAX (Networking options) to see the WiMAX drivers | ||
1078 | # | ||
1028 | 1079 | ||
1029 | # | 1080 | # |
1030 | # USB Network Adapters | 1081 | # USB Network Adapters |
@@ -1036,6 +1087,7 @@ CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y | |||
1036 | CONFIG_USB_USBNET=m | 1087 | CONFIG_USB_USBNET=m |
1037 | CONFIG_USB_NET_AX8817X=m | 1088 | CONFIG_USB_NET_AX8817X=m |
1038 | CONFIG_USB_NET_CDCETHER=m | 1089 | CONFIG_USB_NET_CDCETHER=m |
1090 | # CONFIG_USB_NET_CDC_EEM is not set | ||
1039 | # CONFIG_USB_NET_DM9601 is not set | 1091 | # CONFIG_USB_NET_DM9601 is not set |
1040 | # CONFIG_USB_NET_SMSC95XX is not set | 1092 | # CONFIG_USB_NET_SMSC95XX is not set |
1041 | # CONFIG_USB_NET_GL620A is not set | 1093 | # CONFIG_USB_NET_GL620A is not set |
@@ -1099,7 +1151,7 @@ CONFIG_INPUT_KEYBOARD=y | |||
1099 | CONFIG_INPUT_MOUSE=y | 1151 | CONFIG_INPUT_MOUSE=y |
1100 | # CONFIG_MOUSE_PS2 is not set | 1152 | # CONFIG_MOUSE_PS2 is not set |
1101 | # CONFIG_MOUSE_SERIAL is not set | 1153 | # CONFIG_MOUSE_SERIAL is not set |
1102 | # CONFIG_MOUSE_APPLETOUCH is not set | 1154 | CONFIG_MOUSE_APPLETOUCH=y |
1103 | # CONFIG_MOUSE_BCM5974 is not set | 1155 | # CONFIG_MOUSE_BCM5974 is not set |
1104 | # CONFIG_MOUSE_VSXXXAA is not set | 1156 | # CONFIG_MOUSE_VSXXXAA is not set |
1105 | # CONFIG_INPUT_JOYSTICK is not set | 1157 | # CONFIG_INPUT_JOYSTICK is not set |
@@ -1150,10 +1202,13 @@ CONFIG_SERIAL_PMACZILOG_TTYS=y | |||
1150 | # CONFIG_SERIAL_JSM is not set | 1202 | # CONFIG_SERIAL_JSM is not set |
1151 | # CONFIG_SERIAL_OF_PLATFORM is not set | 1203 | # CONFIG_SERIAL_OF_PLATFORM is not set |
1152 | CONFIG_UNIX98_PTYS=y | 1204 | CONFIG_UNIX98_PTYS=y |
1205 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | ||
1153 | CONFIG_LEGACY_PTYS=y | 1206 | CONFIG_LEGACY_PTYS=y |
1154 | CONFIG_LEGACY_PTY_COUNT=256 | 1207 | CONFIG_LEGACY_PTY_COUNT=256 |
1208 | # CONFIG_HVC_UDBG is not set | ||
1155 | # CONFIG_IPMI_HANDLER is not set | 1209 | # CONFIG_IPMI_HANDLER is not set |
1156 | CONFIG_HW_RANDOM=m | 1210 | CONFIG_HW_RANDOM=m |
1211 | # CONFIG_HW_RANDOM_TIMERIOMEM is not set | ||
1157 | CONFIG_NVRAM=y | 1212 | CONFIG_NVRAM=y |
1158 | CONFIG_GEN_RTC=y | 1213 | CONFIG_GEN_RTC=y |
1159 | # CONFIG_GEN_RTC_X is not set | 1214 | # CONFIG_GEN_RTC_X is not set |
@@ -1232,12 +1287,9 @@ CONFIG_I2C_POWERMAC=y | |||
1232 | # Miscellaneous I2C Chip support | 1287 | # Miscellaneous I2C Chip support |
1233 | # | 1288 | # |
1234 | # CONFIG_DS1682 is not set | 1289 | # CONFIG_DS1682 is not set |
1235 | # CONFIG_EEPROM_AT24 is not set | ||
1236 | # CONFIG_EEPROM_LEGACY is not set | ||
1237 | # CONFIG_SENSORS_PCF8574 is not set | 1290 | # CONFIG_SENSORS_PCF8574 is not set |
1238 | # CONFIG_PCF8575 is not set | 1291 | # CONFIG_PCF8575 is not set |
1239 | # CONFIG_SENSORS_PCA9539 is not set | 1292 | # CONFIG_SENSORS_PCA9539 is not set |
1240 | # CONFIG_SENSORS_PCF8591 is not set | ||
1241 | # CONFIG_SENSORS_MAX6875 is not set | 1293 | # CONFIG_SENSORS_MAX6875 is not set |
1242 | # CONFIG_SENSORS_TSL2550 is not set | 1294 | # CONFIG_SENSORS_TSL2550 is not set |
1243 | # CONFIG_I2C_DEBUG_CORE is not set | 1295 | # CONFIG_I2C_DEBUG_CORE is not set |
@@ -1259,11 +1311,11 @@ CONFIG_BATTERY_PMU=y | |||
1259 | # CONFIG_THERMAL is not set | 1311 | # CONFIG_THERMAL is not set |
1260 | # CONFIG_THERMAL_HWMON is not set | 1312 | # CONFIG_THERMAL_HWMON is not set |
1261 | # CONFIG_WATCHDOG is not set | 1313 | # CONFIG_WATCHDOG is not set |
1314 | CONFIG_SSB_POSSIBLE=y | ||
1262 | 1315 | ||
1263 | # | 1316 | # |
1264 | # Sonics Silicon Backplane | 1317 | # Sonics Silicon Backplane |
1265 | # | 1318 | # |
1266 | CONFIG_SSB_POSSIBLE=y | ||
1267 | CONFIG_SSB=m | 1319 | CONFIG_SSB=m |
1268 | CONFIG_SSB_SPROM=y | 1320 | CONFIG_SSB_SPROM=y |
1269 | CONFIG_SSB_PCIHOST_POSSIBLE=y | 1321 | CONFIG_SSB_PCIHOST_POSSIBLE=y |
@@ -1281,18 +1333,13 @@ CONFIG_SSB_DRIVER_PCICORE=y | |||
1281 | # CONFIG_MFD_CORE is not set | 1333 | # CONFIG_MFD_CORE is not set |
1282 | # CONFIG_MFD_SM501 is not set | 1334 | # CONFIG_MFD_SM501 is not set |
1283 | # CONFIG_HTC_PASIC3 is not set | 1335 | # CONFIG_HTC_PASIC3 is not set |
1336 | # CONFIG_TWL4030_CORE is not set | ||
1284 | # CONFIG_MFD_TMIO is not set | 1337 | # CONFIG_MFD_TMIO is not set |
1285 | # CONFIG_PMIC_DA903X is not set | 1338 | # CONFIG_PMIC_DA903X is not set |
1286 | # CONFIG_MFD_WM8400 is not set | 1339 | # CONFIG_MFD_WM8400 is not set |
1287 | # CONFIG_MFD_WM8350_I2C is not set | 1340 | # CONFIG_MFD_WM8350_I2C is not set |
1288 | 1341 | # CONFIG_MFD_PCF50633 is not set | |
1289 | # | ||
1290 | # Voltage and Current regulators | ||
1291 | # | ||
1292 | # CONFIG_REGULATOR is not set | 1342 | # CONFIG_REGULATOR is not set |
1293 | # CONFIG_REGULATOR_FIXED_VOLTAGE is not set | ||
1294 | # CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set | ||
1295 | # CONFIG_REGULATOR_BQ24022 is not set | ||
1296 | 1343 | ||
1297 | # | 1344 | # |
1298 | # Multimedia devices | 1345 | # Multimedia devices |
@@ -1390,6 +1437,7 @@ CONFIG_FB_ATY_BACKLIGHT=y | |||
1390 | # CONFIG_FB_KYRO is not set | 1437 | # CONFIG_FB_KYRO is not set |
1391 | CONFIG_FB_3DFX=y | 1438 | CONFIG_FB_3DFX=y |
1392 | # CONFIG_FB_3DFX_ACCEL is not set | 1439 | # CONFIG_FB_3DFX_ACCEL is not set |
1440 | CONFIG_FB_3DFX_I2C=y | ||
1393 | # CONFIG_FB_VOODOO1 is not set | 1441 | # CONFIG_FB_VOODOO1 is not set |
1394 | # CONFIG_FB_VT8623 is not set | 1442 | # CONFIG_FB_VT8623 is not set |
1395 | # CONFIG_FB_TRIDENT is not set | 1443 | # CONFIG_FB_TRIDENT is not set |
@@ -1399,12 +1447,14 @@ CONFIG_FB_3DFX=y | |||
1399 | # CONFIG_FB_IBM_GXT4500 is not set | 1447 | # CONFIG_FB_IBM_GXT4500 is not set |
1400 | # CONFIG_FB_VIRTUAL is not set | 1448 | # CONFIG_FB_VIRTUAL is not set |
1401 | # CONFIG_FB_METRONOME is not set | 1449 | # CONFIG_FB_METRONOME is not set |
1450 | # CONFIG_FB_MB862XX is not set | ||
1451 | # CONFIG_FB_BROADSHEET is not set | ||
1402 | CONFIG_BACKLIGHT_LCD_SUPPORT=y | 1452 | CONFIG_BACKLIGHT_LCD_SUPPORT=y |
1403 | CONFIG_LCD_CLASS_DEVICE=m | 1453 | CONFIG_LCD_CLASS_DEVICE=m |
1404 | # CONFIG_LCD_ILI9320 is not set | 1454 | # CONFIG_LCD_ILI9320 is not set |
1405 | # CONFIG_LCD_PLATFORM is not set | 1455 | # CONFIG_LCD_PLATFORM is not set |
1406 | CONFIG_BACKLIGHT_CLASS_DEVICE=y | 1456 | CONFIG_BACKLIGHT_CLASS_DEVICE=y |
1407 | # CONFIG_BACKLIGHT_CORGI is not set | 1457 | CONFIG_BACKLIGHT_GENERIC=y |
1408 | 1458 | ||
1409 | # | 1459 | # |
1410 | # Display device support | 1460 | # Display device support |
@@ -1444,11 +1494,13 @@ CONFIG_SND_MIXER_OSS=m | |||
1444 | CONFIG_SND_PCM_OSS=m | 1494 | CONFIG_SND_PCM_OSS=m |
1445 | CONFIG_SND_PCM_OSS_PLUGINS=y | 1495 | CONFIG_SND_PCM_OSS_PLUGINS=y |
1446 | CONFIG_SND_SEQUENCER_OSS=y | 1496 | CONFIG_SND_SEQUENCER_OSS=y |
1497 | # CONFIG_SND_HRTIMER is not set | ||
1447 | # CONFIG_SND_DYNAMIC_MINORS is not set | 1498 | # CONFIG_SND_DYNAMIC_MINORS is not set |
1448 | CONFIG_SND_SUPPORT_OLD_API=y | 1499 | CONFIG_SND_SUPPORT_OLD_API=y |
1449 | CONFIG_SND_VERBOSE_PROCFS=y | 1500 | CONFIG_SND_VERBOSE_PROCFS=y |
1450 | # CONFIG_SND_VERBOSE_PRINTK is not set | 1501 | # CONFIG_SND_VERBOSE_PRINTK is not set |
1451 | # CONFIG_SND_DEBUG is not set | 1502 | # CONFIG_SND_DEBUG is not set |
1503 | CONFIG_SND_VMASTER=y | ||
1452 | CONFIG_SND_DRIVERS=y | 1504 | CONFIG_SND_DRIVERS=y |
1453 | CONFIG_SND_DUMMY=m | 1505 | CONFIG_SND_DUMMY=m |
1454 | # CONFIG_SND_VIRMIDI is not set | 1506 | # CONFIG_SND_VIRMIDI is not set |
@@ -1486,6 +1538,8 @@ CONFIG_SND_PCI=y | |||
1486 | # CONFIG_SND_INDIGO is not set | 1538 | # CONFIG_SND_INDIGO is not set |
1487 | # CONFIG_SND_INDIGOIO is not set | 1539 | # CONFIG_SND_INDIGOIO is not set |
1488 | # CONFIG_SND_INDIGODJ is not set | 1540 | # CONFIG_SND_INDIGODJ is not set |
1541 | # CONFIG_SND_INDIGOIOX is not set | ||
1542 | # CONFIG_SND_INDIGODJX is not set | ||
1489 | # CONFIG_SND_EMU10K1 is not set | 1543 | # CONFIG_SND_EMU10K1 is not set |
1490 | # CONFIG_SND_EMU10K1X is not set | 1544 | # CONFIG_SND_EMU10K1X is not set |
1491 | # CONFIG_SND_ENS1370 is not set | 1545 | # CONFIG_SND_ENS1370 is not set |
@@ -1551,28 +1605,31 @@ CONFIG_USB_HID=y | |||
1551 | # | 1605 | # |
1552 | # Special HID drivers | 1606 | # Special HID drivers |
1553 | # | 1607 | # |
1554 | CONFIG_HID_COMPAT=y | ||
1555 | CONFIG_HID_A4TECH=y | 1608 | CONFIG_HID_A4TECH=y |
1556 | CONFIG_HID_APPLE=y | 1609 | CONFIG_HID_APPLE=y |
1557 | CONFIG_HID_BELKIN=y | 1610 | CONFIG_HID_BELKIN=y |
1558 | CONFIG_HID_BRIGHT=y | ||
1559 | CONFIG_HID_CHERRY=y | 1611 | CONFIG_HID_CHERRY=y |
1560 | CONFIG_HID_CHICONY=y | 1612 | CONFIG_HID_CHICONY=y |
1561 | CONFIG_HID_CYPRESS=y | 1613 | CONFIG_HID_CYPRESS=y |
1562 | CONFIG_HID_DELL=y | 1614 | # CONFIG_DRAGONRISE_FF is not set |
1563 | CONFIG_HID_EZKEY=y | 1615 | CONFIG_HID_EZKEY=y |
1616 | CONFIG_HID_KYE=y | ||
1564 | CONFIG_HID_GYRATION=y | 1617 | CONFIG_HID_GYRATION=y |
1618 | CONFIG_HID_KENSINGTON=y | ||
1565 | CONFIG_HID_LOGITECH=y | 1619 | CONFIG_HID_LOGITECH=y |
1566 | # CONFIG_LOGITECH_FF is not set | 1620 | # CONFIG_LOGITECH_FF is not set |
1567 | # CONFIG_LOGIRUMBLEPAD2_FF is not set | 1621 | # CONFIG_LOGIRUMBLEPAD2_FF is not set |
1568 | CONFIG_HID_MICROSOFT=y | 1622 | CONFIG_HID_MICROSOFT=y |
1569 | CONFIG_HID_MONTEREY=y | 1623 | CONFIG_HID_MONTEREY=y |
1624 | CONFIG_HID_NTRIG=y | ||
1570 | CONFIG_HID_PANTHERLORD=y | 1625 | CONFIG_HID_PANTHERLORD=y |
1571 | # CONFIG_PANTHERLORD_FF is not set | 1626 | # CONFIG_PANTHERLORD_FF is not set |
1572 | CONFIG_HID_PETALYNX=y | 1627 | CONFIG_HID_PETALYNX=y |
1573 | CONFIG_HID_SAMSUNG=y | 1628 | CONFIG_HID_SAMSUNG=y |
1574 | CONFIG_HID_SONY=y | 1629 | CONFIG_HID_SONY=y |
1575 | CONFIG_HID_SUNPLUS=y | 1630 | CONFIG_HID_SUNPLUS=y |
1631 | # CONFIG_GREENASIA_FF is not set | ||
1632 | CONFIG_HID_TOPSEED=y | ||
1576 | # CONFIG_THRUSTMASTER_FF is not set | 1633 | # CONFIG_THRUSTMASTER_FF is not set |
1577 | # CONFIG_ZEROPLUS_FF is not set | 1634 | # CONFIG_ZEROPLUS_FF is not set |
1578 | CONFIG_USB_SUPPORT=y | 1635 | CONFIG_USB_SUPPORT=y |
@@ -1603,6 +1660,7 @@ CONFIG_USB_EHCI_HCD=m | |||
1603 | CONFIG_USB_EHCI_ROOT_HUB_TT=y | 1660 | CONFIG_USB_EHCI_ROOT_HUB_TT=y |
1604 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | 1661 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set |
1605 | # CONFIG_USB_EHCI_HCD_PPC_OF is not set | 1662 | # CONFIG_USB_EHCI_HCD_PPC_OF is not set |
1663 | # CONFIG_USB_OXU210HP_HCD is not set | ||
1606 | # CONFIG_USB_ISP116X_HCD is not set | 1664 | # CONFIG_USB_ISP116X_HCD is not set |
1607 | # CONFIG_USB_ISP1760_HCD is not set | 1665 | # CONFIG_USB_ISP1760_HCD is not set |
1608 | CONFIG_USB_OHCI_HCD=y | 1666 | CONFIG_USB_OHCI_HCD=y |
@@ -1625,24 +1683,23 @@ CONFIG_USB_PRINTER=m | |||
1625 | # CONFIG_USB_TMC is not set | 1683 | # CONFIG_USB_TMC is not set |
1626 | 1684 | ||
1627 | # | 1685 | # |
1628 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | 1686 | # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may |
1629 | # | 1687 | # |
1630 | 1688 | ||
1631 | # | 1689 | # |
1632 | # may also be needed; see USB_STORAGE Help for more information | 1690 | # also be needed; see USB_STORAGE Help for more info |
1633 | # | 1691 | # |
1634 | CONFIG_USB_STORAGE=m | 1692 | CONFIG_USB_STORAGE=m |
1635 | # CONFIG_USB_STORAGE_DEBUG is not set | 1693 | # CONFIG_USB_STORAGE_DEBUG is not set |
1636 | # CONFIG_USB_STORAGE_DATAFAB is not set | 1694 | # CONFIG_USB_STORAGE_DATAFAB is not set |
1637 | # CONFIG_USB_STORAGE_FREECOM is not set | 1695 | # CONFIG_USB_STORAGE_FREECOM is not set |
1638 | # CONFIG_USB_STORAGE_ISD200 is not set | 1696 | # CONFIG_USB_STORAGE_ISD200 is not set |
1639 | # CONFIG_USB_STORAGE_DPCM is not set | ||
1640 | # CONFIG_USB_STORAGE_USBAT is not set | 1697 | # CONFIG_USB_STORAGE_USBAT is not set |
1641 | # CONFIG_USB_STORAGE_SDDR09 is not set | 1698 | # CONFIG_USB_STORAGE_SDDR09 is not set |
1642 | # CONFIG_USB_STORAGE_SDDR55 is not set | 1699 | # CONFIG_USB_STORAGE_SDDR55 is not set |
1643 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | 1700 | # CONFIG_USB_STORAGE_JUMPSHOT is not set |
1644 | # CONFIG_USB_STORAGE_ALAUDA is not set | 1701 | # CONFIG_USB_STORAGE_ALAUDA is not set |
1645 | CONFIG_USB_STORAGE_ONETOUCH=y | 1702 | CONFIG_USB_STORAGE_ONETOUCH=m |
1646 | # CONFIG_USB_STORAGE_KARMA is not set | 1703 | # CONFIG_USB_STORAGE_KARMA is not set |
1647 | # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set | 1704 | # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set |
1648 | # CONFIG_USB_LIBUSUAL is not set | 1705 | # CONFIG_USB_LIBUSUAL is not set |
@@ -1665,7 +1722,7 @@ CONFIG_USB_EZUSB=y | |||
1665 | # CONFIG_USB_SERIAL_CH341 is not set | 1722 | # CONFIG_USB_SERIAL_CH341 is not set |
1666 | # CONFIG_USB_SERIAL_WHITEHEAT is not set | 1723 | # CONFIG_USB_SERIAL_WHITEHEAT is not set |
1667 | # CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set | 1724 | # CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set |
1668 | # CONFIG_USB_SERIAL_CP2101 is not set | 1725 | # CONFIG_USB_SERIAL_CP210X is not set |
1669 | # CONFIG_USB_SERIAL_CYPRESS_M8 is not set | 1726 | # CONFIG_USB_SERIAL_CYPRESS_M8 is not set |
1670 | # CONFIG_USB_SERIAL_EMPEG is not set | 1727 | # CONFIG_USB_SERIAL_EMPEG is not set |
1671 | # CONFIG_USB_SERIAL_FTDI_SIO is not set | 1728 | # CONFIG_USB_SERIAL_FTDI_SIO is not set |
@@ -1701,15 +1758,19 @@ CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y | |||
1701 | # CONFIG_USB_SERIAL_NAVMAN is not set | 1758 | # CONFIG_USB_SERIAL_NAVMAN is not set |
1702 | # CONFIG_USB_SERIAL_PL2303 is not set | 1759 | # CONFIG_USB_SERIAL_PL2303 is not set |
1703 | # CONFIG_USB_SERIAL_OTI6858 is not set | 1760 | # CONFIG_USB_SERIAL_OTI6858 is not set |
1761 | # CONFIG_USB_SERIAL_QUALCOMM is not set | ||
1704 | # CONFIG_USB_SERIAL_SPCP8X5 is not set | 1762 | # CONFIG_USB_SERIAL_SPCP8X5 is not set |
1705 | # CONFIG_USB_SERIAL_HP4X is not set | 1763 | # CONFIG_USB_SERIAL_HP4X is not set |
1706 | # CONFIG_USB_SERIAL_SAFE is not set | 1764 | # CONFIG_USB_SERIAL_SAFE is not set |
1765 | # CONFIG_USB_SERIAL_SIEMENS_MPI is not set | ||
1707 | # CONFIG_USB_SERIAL_SIERRAWIRELESS is not set | 1766 | # CONFIG_USB_SERIAL_SIERRAWIRELESS is not set |
1767 | # CONFIG_USB_SERIAL_SYMBOL is not set | ||
1708 | # CONFIG_USB_SERIAL_TI is not set | 1768 | # CONFIG_USB_SERIAL_TI is not set |
1709 | # CONFIG_USB_SERIAL_CYBERJACK is not set | 1769 | # CONFIG_USB_SERIAL_CYBERJACK is not set |
1710 | # CONFIG_USB_SERIAL_XIRCOM is not set | 1770 | # CONFIG_USB_SERIAL_XIRCOM is not set |
1711 | # CONFIG_USB_SERIAL_OPTION is not set | 1771 | # CONFIG_USB_SERIAL_OPTION is not set |
1712 | # CONFIG_USB_SERIAL_OMNINET is not set | 1772 | # CONFIG_USB_SERIAL_OMNINET is not set |
1773 | # CONFIG_USB_SERIAL_OPTICON is not set | ||
1713 | # CONFIG_USB_SERIAL_DEBUG is not set | 1774 | # CONFIG_USB_SERIAL_DEBUG is not set |
1714 | 1775 | ||
1715 | # | 1776 | # |
@@ -1726,7 +1787,6 @@ CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y | |||
1726 | # CONFIG_USB_LED is not set | 1787 | # CONFIG_USB_LED is not set |
1727 | # CONFIG_USB_CYPRESS_CY7C63 is not set | 1788 | # CONFIG_USB_CYPRESS_CY7C63 is not set |
1728 | # CONFIG_USB_CYTHERM is not set | 1789 | # CONFIG_USB_CYTHERM is not set |
1729 | # CONFIG_USB_PHIDGET is not set | ||
1730 | # CONFIG_USB_IDMOUSE is not set | 1790 | # CONFIG_USB_IDMOUSE is not set |
1731 | # CONFIG_USB_FTDI_ELAN is not set | 1791 | # CONFIG_USB_FTDI_ELAN is not set |
1732 | CONFIG_USB_APPLEDISPLAY=m | 1792 | CONFIG_USB_APPLEDISPLAY=m |
@@ -1738,6 +1798,11 @@ CONFIG_USB_APPLEDISPLAY=m | |||
1738 | # CONFIG_USB_ISIGHTFW is not set | 1798 | # CONFIG_USB_ISIGHTFW is not set |
1739 | # CONFIG_USB_VST is not set | 1799 | # CONFIG_USB_VST is not set |
1740 | # CONFIG_USB_GADGET is not set | 1800 | # CONFIG_USB_GADGET is not set |
1801 | |||
1802 | # | ||
1803 | # OTG and related infrastructure | ||
1804 | # | ||
1805 | # CONFIG_NOP_USB_XCEIV is not set | ||
1741 | # CONFIG_UWB is not set | 1806 | # CONFIG_UWB is not set |
1742 | # CONFIG_MMC is not set | 1807 | # CONFIG_MMC is not set |
1743 | # CONFIG_MEMSTICK is not set | 1808 | # CONFIG_MEMSTICK is not set |
@@ -1748,7 +1813,9 @@ CONFIG_LEDS_CLASS=y | |||
1748 | # LED drivers | 1813 | # LED drivers |
1749 | # | 1814 | # |
1750 | # CONFIG_LEDS_PCA9532 is not set | 1815 | # CONFIG_LEDS_PCA9532 is not set |
1816 | # CONFIG_LEDS_LP5521 is not set | ||
1751 | # CONFIG_LEDS_PCA955X is not set | 1817 | # CONFIG_LEDS_PCA955X is not set |
1818 | # CONFIG_LEDS_BD2802 is not set | ||
1752 | 1819 | ||
1753 | # | 1820 | # |
1754 | # LED Triggers | 1821 | # LED Triggers |
@@ -1759,11 +1826,16 @@ CONFIG_LEDS_TRIGGER_IDE_DISK=y | |||
1759 | # CONFIG_LEDS_TRIGGER_HEARTBEAT is not set | 1826 | # CONFIG_LEDS_TRIGGER_HEARTBEAT is not set |
1760 | # CONFIG_LEDS_TRIGGER_BACKLIGHT is not set | 1827 | # CONFIG_LEDS_TRIGGER_BACKLIGHT is not set |
1761 | CONFIG_LEDS_TRIGGER_DEFAULT_ON=y | 1828 | CONFIG_LEDS_TRIGGER_DEFAULT_ON=y |
1829 | |||
1830 | # | ||
1831 | # iptables trigger is under Netfilter config (LED target) | ||
1832 | # | ||
1762 | # CONFIG_ACCESSIBILITY is not set | 1833 | # CONFIG_ACCESSIBILITY is not set |
1763 | # CONFIG_INFINIBAND is not set | 1834 | # CONFIG_INFINIBAND is not set |
1764 | # CONFIG_EDAC is not set | 1835 | # CONFIG_EDAC is not set |
1765 | # CONFIG_RTC_CLASS is not set | 1836 | # CONFIG_RTC_CLASS is not set |
1766 | # CONFIG_DMADEVICES is not set | 1837 | # CONFIG_DMADEVICES is not set |
1838 | # CONFIG_AUXDISPLAY is not set | ||
1767 | # CONFIG_UIO is not set | 1839 | # CONFIG_UIO is not set |
1768 | # CONFIG_STAGING is not set | 1840 | # CONFIG_STAGING is not set |
1769 | 1841 | ||
@@ -1774,6 +1846,7 @@ CONFIG_EXT2_FS=y | |||
1774 | # CONFIG_EXT2_FS_XATTR is not set | 1846 | # CONFIG_EXT2_FS_XATTR is not set |
1775 | # CONFIG_EXT2_FS_XIP is not set | 1847 | # CONFIG_EXT2_FS_XIP is not set |
1776 | CONFIG_EXT3_FS=y | 1848 | CONFIG_EXT3_FS=y |
1849 | # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set | ||
1777 | CONFIG_EXT3_FS_XATTR=y | 1850 | CONFIG_EXT3_FS_XATTR=y |
1778 | CONFIG_EXT3_FS_POSIX_ACL=y | 1851 | CONFIG_EXT3_FS_POSIX_ACL=y |
1779 | # CONFIG_EXT3_FS_SECURITY is not set | 1852 | # CONFIG_EXT3_FS_SECURITY is not set |
@@ -1783,7 +1856,9 @@ CONFIG_EXT4_FS_XATTR=y | |||
1783 | # CONFIG_EXT4_FS_POSIX_ACL is not set | 1856 | # CONFIG_EXT4_FS_POSIX_ACL is not set |
1784 | # CONFIG_EXT4_FS_SECURITY is not set | 1857 | # CONFIG_EXT4_FS_SECURITY is not set |
1785 | CONFIG_JBD=y | 1858 | CONFIG_JBD=y |
1859 | # CONFIG_JBD_DEBUG is not set | ||
1786 | CONFIG_JBD2=y | 1860 | CONFIG_JBD2=y |
1861 | # CONFIG_JBD2_DEBUG is not set | ||
1787 | CONFIG_FS_MBCACHE=y | 1862 | CONFIG_FS_MBCACHE=y |
1788 | # CONFIG_REISERFS_FS is not set | 1863 | # CONFIG_REISERFS_FS is not set |
1789 | # CONFIG_JFS_FS is not set | 1864 | # CONFIG_JFS_FS is not set |
@@ -1792,6 +1867,7 @@ CONFIG_FILE_LOCKING=y | |||
1792 | # CONFIG_XFS_FS is not set | 1867 | # CONFIG_XFS_FS is not set |
1793 | # CONFIG_GFS2_FS is not set | 1868 | # CONFIG_GFS2_FS is not set |
1794 | # CONFIG_OCFS2_FS is not set | 1869 | # CONFIG_OCFS2_FS is not set |
1870 | # CONFIG_BTRFS_FS is not set | ||
1795 | CONFIG_DNOTIFY=y | 1871 | CONFIG_DNOTIFY=y |
1796 | CONFIG_INOTIFY=y | 1872 | CONFIG_INOTIFY=y |
1797 | CONFIG_INOTIFY_USER=y | 1873 | CONFIG_INOTIFY_USER=y |
@@ -1801,6 +1877,11 @@ CONFIG_AUTOFS4_FS=m | |||
1801 | CONFIG_FUSE_FS=m | 1877 | CONFIG_FUSE_FS=m |
1802 | 1878 | ||
1803 | # | 1879 | # |
1880 | # Caches | ||
1881 | # | ||
1882 | # CONFIG_FSCACHE is not set | ||
1883 | |||
1884 | # | ||
1804 | # CD-ROM/DVD Filesystems | 1885 | # CD-ROM/DVD Filesystems |
1805 | # | 1886 | # |
1806 | CONFIG_ISO9660_FS=y | 1887 | CONFIG_ISO9660_FS=y |
@@ -1831,10 +1912,7 @@ CONFIG_TMPFS=y | |||
1831 | # CONFIG_TMPFS_POSIX_ACL is not set | 1912 | # CONFIG_TMPFS_POSIX_ACL is not set |
1832 | # CONFIG_HUGETLB_PAGE is not set | 1913 | # CONFIG_HUGETLB_PAGE is not set |
1833 | # CONFIG_CONFIGFS_FS is not set | 1914 | # CONFIG_CONFIGFS_FS is not set |
1834 | 1915 | CONFIG_MISC_FILESYSTEMS=y | |
1835 | # | ||
1836 | # Miscellaneous filesystems | ||
1837 | # | ||
1838 | # CONFIG_ADFS_FS is not set | 1916 | # CONFIG_ADFS_FS is not set |
1839 | # CONFIG_AFFS_FS is not set | 1917 | # CONFIG_AFFS_FS is not set |
1840 | CONFIG_HFS_FS=m | 1918 | CONFIG_HFS_FS=m |
@@ -1843,6 +1921,7 @@ CONFIG_HFSPLUS_FS=m | |||
1843 | # CONFIG_BFS_FS is not set | 1921 | # CONFIG_BFS_FS is not set |
1844 | # CONFIG_EFS_FS is not set | 1922 | # CONFIG_EFS_FS is not set |
1845 | # CONFIG_CRAMFS is not set | 1923 | # CONFIG_CRAMFS is not set |
1924 | # CONFIG_SQUASHFS is not set | ||
1846 | # CONFIG_VXFS_FS is not set | 1925 | # CONFIG_VXFS_FS is not set |
1847 | # CONFIG_MINIX_FS is not set | 1926 | # CONFIG_MINIX_FS is not set |
1848 | # CONFIG_OMFS_FS is not set | 1927 | # CONFIG_OMFS_FS is not set |
@@ -1851,6 +1930,7 @@ CONFIG_HFSPLUS_FS=m | |||
1851 | # CONFIG_ROMFS_FS is not set | 1930 | # CONFIG_ROMFS_FS is not set |
1852 | # CONFIG_SYSV_FS is not set | 1931 | # CONFIG_SYSV_FS is not set |
1853 | # CONFIG_UFS_FS is not set | 1932 | # CONFIG_UFS_FS is not set |
1933 | # CONFIG_NILFS2_FS is not set | ||
1854 | CONFIG_NETWORK_FILESYSTEMS=y | 1934 | CONFIG_NETWORK_FILESYSTEMS=y |
1855 | CONFIG_NFS_FS=y | 1935 | CONFIG_NFS_FS=y |
1856 | CONFIG_NFS_V3=y | 1936 | CONFIG_NFS_V3=y |
@@ -1868,7 +1948,6 @@ CONFIG_NFS_ACL_SUPPORT=y | |||
1868 | CONFIG_NFS_COMMON=y | 1948 | CONFIG_NFS_COMMON=y |
1869 | CONFIG_SUNRPC=y | 1949 | CONFIG_SUNRPC=y |
1870 | CONFIG_SUNRPC_GSS=y | 1950 | CONFIG_SUNRPC_GSS=y |
1871 | # CONFIG_SUNRPC_REGISTER_V4 is not set | ||
1872 | CONFIG_RPCSEC_GSS_KRB5=y | 1951 | CONFIG_RPCSEC_GSS_KRB5=y |
1873 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 1952 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
1874 | CONFIG_SMB_FS=m | 1953 | CONFIG_SMB_FS=m |
@@ -1940,11 +2019,13 @@ CONFIG_NLS_ISO8859_1=m | |||
1940 | # CONFIG_NLS_KOI8_U is not set | 2019 | # CONFIG_NLS_KOI8_U is not set |
1941 | CONFIG_NLS_UTF8=m | 2020 | CONFIG_NLS_UTF8=m |
1942 | # CONFIG_DLM is not set | 2021 | # CONFIG_DLM is not set |
2022 | CONFIG_BINARY_PRINTF=y | ||
1943 | 2023 | ||
1944 | # | 2024 | # |
1945 | # Library routines | 2025 | # Library routines |
1946 | # | 2026 | # |
1947 | CONFIG_BITREVERSE=y | 2027 | CONFIG_BITREVERSE=y |
2028 | CONFIG_GENERIC_FIND_LAST_BIT=y | ||
1948 | CONFIG_CRC_CCITT=y | 2029 | CONFIG_CRC_CCITT=y |
1949 | CONFIG_CRC16=y | 2030 | CONFIG_CRC16=y |
1950 | CONFIG_CRC_T10DIF=y | 2031 | CONFIG_CRC_T10DIF=y |
@@ -1954,15 +2035,18 @@ CONFIG_CRC32=y | |||
1954 | CONFIG_LIBCRC32C=m | 2035 | CONFIG_LIBCRC32C=m |
1955 | CONFIG_ZLIB_INFLATE=y | 2036 | CONFIG_ZLIB_INFLATE=y |
1956 | CONFIG_ZLIB_DEFLATE=y | 2037 | CONFIG_ZLIB_DEFLATE=y |
2038 | CONFIG_DECOMPRESS_GZIP=y | ||
2039 | CONFIG_DECOMPRESS_BZIP2=y | ||
2040 | CONFIG_DECOMPRESS_LZMA=y | ||
1957 | CONFIG_TEXTSEARCH=y | 2041 | CONFIG_TEXTSEARCH=y |
1958 | CONFIG_TEXTSEARCH_KMP=m | 2042 | CONFIG_TEXTSEARCH_KMP=m |
1959 | CONFIG_TEXTSEARCH_BM=m | 2043 | CONFIG_TEXTSEARCH_BM=m |
1960 | CONFIG_TEXTSEARCH_FSM=m | 2044 | CONFIG_TEXTSEARCH_FSM=m |
1961 | CONFIG_PLIST=y | ||
1962 | CONFIG_HAS_IOMEM=y | 2045 | CONFIG_HAS_IOMEM=y |
1963 | CONFIG_HAS_IOPORT=y | 2046 | CONFIG_HAS_IOPORT=y |
1964 | CONFIG_HAS_DMA=y | 2047 | CONFIG_HAS_DMA=y |
1965 | CONFIG_HAVE_LMB=y | 2048 | CONFIG_HAVE_LMB=y |
2049 | CONFIG_NLATTR=y | ||
1966 | 2050 | ||
1967 | # | 2051 | # |
1968 | # Kernel hacking | 2052 | # Kernel hacking |
@@ -1973,13 +2057,16 @@ CONFIG_ENABLE_MUST_CHECK=y | |||
1973 | CONFIG_FRAME_WARN=1024 | 2057 | CONFIG_FRAME_WARN=1024 |
1974 | CONFIG_MAGIC_SYSRQ=y | 2058 | CONFIG_MAGIC_SYSRQ=y |
1975 | # CONFIG_UNUSED_SYMBOLS is not set | 2059 | # CONFIG_UNUSED_SYMBOLS is not set |
1976 | # CONFIG_DEBUG_FS is not set | 2060 | CONFIG_DEBUG_FS=y |
1977 | # CONFIG_HEADERS_CHECK is not set | 2061 | # CONFIG_HEADERS_CHECK is not set |
1978 | CONFIG_DEBUG_KERNEL=y | 2062 | CONFIG_DEBUG_KERNEL=y |
1979 | # CONFIG_DEBUG_SHIRQ is not set | 2063 | # CONFIG_DEBUG_SHIRQ is not set |
1980 | CONFIG_DETECT_SOFTLOCKUP=y | 2064 | CONFIG_DETECT_SOFTLOCKUP=y |
1981 | # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set | 2065 | # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set |
1982 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 | 2066 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 |
2067 | CONFIG_DETECT_HUNG_TASK=y | ||
2068 | # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set | ||
2069 | CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 | ||
1983 | CONFIG_SCHED_DEBUG=y | 2070 | CONFIG_SCHED_DEBUG=y |
1984 | CONFIG_SCHEDSTATS=y | 2071 | CONFIG_SCHEDSTATS=y |
1985 | # CONFIG_TIMER_STATS is not set | 2072 | # CONFIG_TIMER_STATS is not set |
@@ -1994,6 +2081,7 @@ CONFIG_SCHEDSTATS=y | |||
1994 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | 2081 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set |
1995 | CONFIG_STACKTRACE=y | 2082 | CONFIG_STACKTRACE=y |
1996 | # CONFIG_DEBUG_KOBJECT is not set | 2083 | # CONFIG_DEBUG_KOBJECT is not set |
2084 | # CONFIG_DEBUG_HIGHMEM is not set | ||
1997 | CONFIG_DEBUG_BUGVERBOSE=y | 2085 | CONFIG_DEBUG_BUGVERBOSE=y |
1998 | # CONFIG_DEBUG_INFO is not set | 2086 | # CONFIG_DEBUG_INFO is not set |
1999 | # CONFIG_DEBUG_VM is not set | 2087 | # CONFIG_DEBUG_VM is not set |
@@ -2001,6 +2089,7 @@ CONFIG_DEBUG_BUGVERBOSE=y | |||
2001 | CONFIG_DEBUG_MEMORY_INIT=y | 2089 | CONFIG_DEBUG_MEMORY_INIT=y |
2002 | # CONFIG_DEBUG_LIST is not set | 2090 | # CONFIG_DEBUG_LIST is not set |
2003 | # CONFIG_DEBUG_SG is not set | 2091 | # CONFIG_DEBUG_SG is not set |
2092 | # CONFIG_DEBUG_NOTIFIERS is not set | ||
2004 | # CONFIG_BOOT_PRINTK_DELAY is not set | 2093 | # CONFIG_BOOT_PRINTK_DELAY is not set |
2005 | # CONFIG_RCU_TORTURE_TEST is not set | 2094 | # CONFIG_RCU_TORTURE_TEST is not set |
2006 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | 2095 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set |
@@ -2009,7 +2098,14 @@ CONFIG_DEBUG_MEMORY_INIT=y | |||
2009 | # CONFIG_FAULT_INJECTION is not set | 2098 | # CONFIG_FAULT_INJECTION is not set |
2010 | CONFIG_LATENCYTOP=y | 2099 | CONFIG_LATENCYTOP=y |
2011 | CONFIG_SYSCTL_SYSCALL_CHECK=y | 2100 | CONFIG_SYSCTL_SYSCALL_CHECK=y |
2101 | CONFIG_NOP_TRACER=y | ||
2012 | CONFIG_HAVE_FUNCTION_TRACER=y | 2102 | CONFIG_HAVE_FUNCTION_TRACER=y |
2103 | CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y | ||
2104 | CONFIG_HAVE_DYNAMIC_FTRACE=y | ||
2105 | CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y | ||
2106 | CONFIG_RING_BUFFER=y | ||
2107 | CONFIG_TRACING=y | ||
2108 | CONFIG_TRACING_SUPPORT=y | ||
2013 | 2109 | ||
2014 | # | 2110 | # |
2015 | # Tracers | 2111 | # Tracers |
@@ -2017,12 +2113,19 @@ CONFIG_HAVE_FUNCTION_TRACER=y | |||
2017 | # CONFIG_FUNCTION_TRACER is not set | 2113 | # CONFIG_FUNCTION_TRACER is not set |
2018 | # CONFIG_SCHED_TRACER is not set | 2114 | # CONFIG_SCHED_TRACER is not set |
2019 | # CONFIG_CONTEXT_SWITCH_TRACER is not set | 2115 | # CONFIG_CONTEXT_SWITCH_TRACER is not set |
2116 | # CONFIG_EVENT_TRACER is not set | ||
2020 | # CONFIG_BOOT_TRACER is not set | 2117 | # CONFIG_BOOT_TRACER is not set |
2118 | # CONFIG_TRACE_BRANCH_PROFILING is not set | ||
2021 | # CONFIG_STACK_TRACER is not set | 2119 | # CONFIG_STACK_TRACER is not set |
2022 | # CONFIG_DYNAMIC_PRINTK_DEBUG is not set | 2120 | # CONFIG_KMEMTRACE is not set |
2121 | # CONFIG_WORKQUEUE_TRACER is not set | ||
2122 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
2123 | # CONFIG_FTRACE_STARTUP_TEST is not set | ||
2124 | # CONFIG_DYNAMIC_DEBUG is not set | ||
2023 | # CONFIG_SAMPLES is not set | 2125 | # CONFIG_SAMPLES is not set |
2024 | CONFIG_HAVE_ARCH_KGDB=y | 2126 | CONFIG_HAVE_ARCH_KGDB=y |
2025 | # CONFIG_KGDB is not set | 2127 | # CONFIG_KGDB is not set |
2128 | CONFIG_PRINT_STACK_DEPTH=64 | ||
2026 | # CONFIG_DEBUG_STACKOVERFLOW is not set | 2129 | # CONFIG_DEBUG_STACKOVERFLOW is not set |
2027 | # CONFIG_DEBUG_STACK_USAGE is not set | 2130 | # CONFIG_DEBUG_STACK_USAGE is not set |
2028 | # CONFIG_CODE_PATCHING_SELFTEST is not set | 2131 | # CONFIG_CODE_PATCHING_SELFTEST is not set |
@@ -2033,6 +2136,7 @@ CONFIG_XMON_DEFAULT=y | |||
2033 | CONFIG_XMON_DISASSEMBLY=y | 2136 | CONFIG_XMON_DISASSEMBLY=y |
2034 | CONFIG_DEBUGGER=y | 2137 | CONFIG_DEBUGGER=y |
2035 | CONFIG_IRQSTACKS=y | 2138 | CONFIG_IRQSTACKS=y |
2139 | # CONFIG_VIRQ_DEBUG is not set | ||
2036 | # CONFIG_BDI_SWITCH is not set | 2140 | # CONFIG_BDI_SWITCH is not set |
2037 | CONFIG_BOOTX_TEXT=y | 2141 | CONFIG_BOOTX_TEXT=y |
2038 | # CONFIG_PPC_EARLY_DEBUG is not set | 2142 | # CONFIG_PPC_EARLY_DEBUG is not set |
@@ -2051,13 +2155,20 @@ CONFIG_CRYPTO=y | |||
2051 | # | 2155 | # |
2052 | # CONFIG_CRYPTO_FIPS is not set | 2156 | # CONFIG_CRYPTO_FIPS is not set |
2053 | CONFIG_CRYPTO_ALGAPI=y | 2157 | CONFIG_CRYPTO_ALGAPI=y |
2158 | CONFIG_CRYPTO_ALGAPI2=y | ||
2054 | CONFIG_CRYPTO_AEAD=y | 2159 | CONFIG_CRYPTO_AEAD=y |
2160 | CONFIG_CRYPTO_AEAD2=y | ||
2055 | CONFIG_CRYPTO_BLKCIPHER=y | 2161 | CONFIG_CRYPTO_BLKCIPHER=y |
2162 | CONFIG_CRYPTO_BLKCIPHER2=y | ||
2056 | CONFIG_CRYPTO_HASH=y | 2163 | CONFIG_CRYPTO_HASH=y |
2057 | CONFIG_CRYPTO_RNG=y | 2164 | CONFIG_CRYPTO_HASH2=y |
2165 | CONFIG_CRYPTO_RNG2=y | ||
2166 | CONFIG_CRYPTO_PCOMP=y | ||
2058 | CONFIG_CRYPTO_MANAGER=y | 2167 | CONFIG_CRYPTO_MANAGER=y |
2168 | CONFIG_CRYPTO_MANAGER2=y | ||
2059 | # CONFIG_CRYPTO_GF128MUL is not set | 2169 | # CONFIG_CRYPTO_GF128MUL is not set |
2060 | CONFIG_CRYPTO_NULL=m | 2170 | CONFIG_CRYPTO_NULL=m |
2171 | CONFIG_CRYPTO_WORKQUEUE=y | ||
2061 | # CONFIG_CRYPTO_CRYPTD is not set | 2172 | # CONFIG_CRYPTO_CRYPTD is not set |
2062 | CONFIG_CRYPTO_AUTHENC=y | 2173 | CONFIG_CRYPTO_AUTHENC=y |
2063 | # CONFIG_CRYPTO_TEST is not set | 2174 | # CONFIG_CRYPTO_TEST is not set |
@@ -2127,6 +2238,7 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m | |||
2127 | # Compression | 2238 | # Compression |
2128 | # | 2239 | # |
2129 | CONFIG_CRYPTO_DEFLATE=m | 2240 | CONFIG_CRYPTO_DEFLATE=m |
2241 | # CONFIG_CRYPTO_ZLIB is not set | ||
2130 | # CONFIG_CRYPTO_LZO is not set | 2242 | # CONFIG_CRYPTO_LZO is not set |
2131 | 2243 | ||
2132 | # | 2244 | # |
diff --git a/arch/powerpc/include/asm/dma-mapping.h b/arch/powerpc/include/asm/dma-mapping.h index c69f2b5f0cc4..cb448d68452c 100644 --- a/arch/powerpc/include/asm/dma-mapping.h +++ b/arch/powerpc/include/asm/dma-mapping.h | |||
@@ -26,7 +26,9 @@ | |||
26 | * allocate the space "normally" and use the cache management functions | 26 | * allocate the space "normally" and use the cache management functions |
27 | * to ensure it is consistent. | 27 | * to ensure it is consistent. |
28 | */ | 28 | */ |
29 | extern void *__dma_alloc_coherent(size_t size, dma_addr_t *handle, gfp_t gfp); | 29 | struct device; |
30 | extern void *__dma_alloc_coherent(struct device *dev, size_t size, | ||
31 | dma_addr_t *handle, gfp_t gfp); | ||
30 | extern void __dma_free_coherent(size_t size, void *vaddr); | 32 | extern void __dma_free_coherent(size_t size, void *vaddr); |
31 | extern void __dma_sync(void *vaddr, size_t size, int direction); | 33 | extern void __dma_sync(void *vaddr, size_t size, int direction); |
32 | extern void __dma_sync_page(struct page *page, unsigned long offset, | 34 | extern void __dma_sync_page(struct page *page, unsigned long offset, |
@@ -37,7 +39,7 @@ extern void __dma_sync_page(struct page *page, unsigned long offset, | |||
37 | * Cache coherent cores. | 39 | * Cache coherent cores. |
38 | */ | 40 | */ |
39 | 41 | ||
40 | #define __dma_alloc_coherent(gfp, size, handle) NULL | 42 | #define __dma_alloc_coherent(dev, gfp, size, handle) NULL |
41 | #define __dma_free_coherent(size, addr) ((void)0) | 43 | #define __dma_free_coherent(size, addr) ((void)0) |
42 | #define __dma_sync(addr, size, rw) ((void)0) | 44 | #define __dma_sync(addr, size, rw) ((void)0) |
43 | #define __dma_sync_page(pg, off, sz, rw) ((void)0) | 45 | #define __dma_sync_page(pg, off, sz, rw) ((void)0) |
diff --git a/arch/powerpc/include/asm/fixmap.h b/arch/powerpc/include/asm/fixmap.h index d60fd18f428c..f1f4e23a84e9 100644 --- a/arch/powerpc/include/asm/fixmap.h +++ b/arch/powerpc/include/asm/fixmap.h | |||
@@ -14,8 +14,6 @@ | |||
14 | #ifndef _ASM_FIXMAP_H | 14 | #ifndef _ASM_FIXMAP_H |
15 | #define _ASM_FIXMAP_H | 15 | #define _ASM_FIXMAP_H |
16 | 16 | ||
17 | extern unsigned long FIXADDR_TOP; | ||
18 | |||
19 | #ifndef __ASSEMBLY__ | 17 | #ifndef __ASSEMBLY__ |
20 | #include <linux/kernel.h> | 18 | #include <linux/kernel.h> |
21 | #include <asm/page.h> | 19 | #include <asm/page.h> |
@@ -24,6 +22,8 @@ extern unsigned long FIXADDR_TOP; | |||
24 | #include <asm/kmap_types.h> | 22 | #include <asm/kmap_types.h> |
25 | #endif | 23 | #endif |
26 | 24 | ||
25 | #define FIXADDR_TOP ((unsigned long)(-PAGE_SIZE)) | ||
26 | |||
27 | /* | 27 | /* |
28 | * Here we define all the compile-time 'special' virtual | 28 | * Here we define all the compile-time 'special' virtual |
29 | * addresses. The point is to have a constant address at | 29 | * addresses. The point is to have a constant address at |
diff --git a/arch/powerpc/include/asm/pgtable-ppc32.h b/arch/powerpc/include/asm/pgtable-ppc32.h index ba45c997830f..c9ff9d75990e 100644 --- a/arch/powerpc/include/asm/pgtable-ppc32.h +++ b/arch/powerpc/include/asm/pgtable-ppc32.h | |||
@@ -10,7 +10,7 @@ | |||
10 | 10 | ||
11 | extern unsigned long va_to_phys(unsigned long address); | 11 | extern unsigned long va_to_phys(unsigned long address); |
12 | extern pte_t *va_to_pte(unsigned long address); | 12 | extern pte_t *va_to_pte(unsigned long address); |
13 | extern unsigned long ioremap_bot, ioremap_base; | 13 | extern unsigned long ioremap_bot; |
14 | 14 | ||
15 | #ifdef CONFIG_44x | 15 | #ifdef CONFIG_44x |
16 | extern int icache_44x_need_flush; | 16 | extern int icache_44x_need_flush; |
@@ -56,8 +56,30 @@ extern int icache_44x_need_flush; | |||
56 | printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e)) | 56 | printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e)) |
57 | 57 | ||
58 | /* | 58 | /* |
59 | * This is the bottom of the PKMAP area with HIGHMEM or an arbitrary | ||
60 | * value (for now) on others, from where we can start layout kernel | ||
61 | * virtual space that goes below PKMAP and FIXMAP | ||
62 | */ | ||
63 | #ifdef CONFIG_HIGHMEM | ||
64 | #define KVIRT_TOP PKMAP_BASE | ||
65 | #else | ||
66 | #define KVIRT_TOP (0xfe000000UL) /* for now, could be FIXMAP_BASE ? */ | ||
67 | #endif | ||
68 | |||
69 | /* | ||
70 | * ioremap_bot starts at that address. Early ioremaps move down from there, | ||
71 | * until mem_init() at which point this becomes the top of the vmalloc | ||
72 | * and ioremap space | ||
73 | */ | ||
74 | #ifdef CONFIG_NOT_COHERENT_CACHE | ||
75 | #define IOREMAP_TOP ((KVIRT_TOP - CONFIG_CONSISTENT_SIZE) & PAGE_MASK) | ||
76 | #else | ||
77 | #define IOREMAP_TOP KVIRT_TOP | ||
78 | #endif | ||
79 | |||
80 | /* | ||
59 | * Just any arbitrary offset to the start of the vmalloc VM area: the | 81 | * Just any arbitrary offset to the start of the vmalloc VM area: the |
60 | * current 64MB value just means that there will be a 64MB "hole" after the | 82 | * current 16MB value just means that there will be a 64MB "hole" after the |
61 | * physical memory until the kernel virtual memory starts. That means that | 83 | * physical memory until the kernel virtual memory starts. That means that |
62 | * any out-of-bounds memory accesses will hopefully be caught. | 84 | * any out-of-bounds memory accesses will hopefully be caught. |
63 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced | 85 | * The vmalloc() routines leaves a hole of 4kB between each vmalloced |
diff --git a/arch/powerpc/kernel/dma.c b/arch/powerpc/kernel/dma.c index 53c7788cba78..6b02793dc75b 100644 --- a/arch/powerpc/kernel/dma.c +++ b/arch/powerpc/kernel/dma.c | |||
@@ -32,7 +32,7 @@ void *dma_direct_alloc_coherent(struct device *dev, size_t size, | |||
32 | { | 32 | { |
33 | void *ret; | 33 | void *ret; |
34 | #ifdef CONFIG_NOT_COHERENT_CACHE | 34 | #ifdef CONFIG_NOT_COHERENT_CACHE |
35 | ret = __dma_alloc_coherent(size, dma_handle, flag); | 35 | ret = __dma_alloc_coherent(dev, size, dma_handle, flag); |
36 | if (ret == NULL) | 36 | if (ret == NULL) |
37 | return NULL; | 37 | return NULL; |
38 | *dma_handle += get_dma_direct_offset(dev); | 38 | *dma_handle += get_dma_direct_offset(dev); |
diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile index 8db35278a4b4..29b742b90f1f 100644 --- a/arch/powerpc/lib/Makefile +++ b/arch/powerpc/lib/Makefile | |||
@@ -18,7 +18,6 @@ obj-$(CONFIG_PPC64) += copypage_64.o copyuser_64.o \ | |||
18 | memcpy_64.o usercopy_64.o mem_64.o string.o | 18 | memcpy_64.o usercopy_64.o mem_64.o string.o |
19 | obj-$(CONFIG_XMON) += sstep.o | 19 | obj-$(CONFIG_XMON) += sstep.o |
20 | obj-$(CONFIG_KPROBES) += sstep.o | 20 | obj-$(CONFIG_KPROBES) += sstep.o |
21 | obj-$(CONFIG_NOT_COHERENT_CACHE) += dma-noncoherent.o | ||
22 | 21 | ||
23 | ifeq ($(CONFIG_PPC64),y) | 22 | ifeq ($(CONFIG_PPC64),y) |
24 | obj-$(CONFIG_SMP) += locks.o | 23 | obj-$(CONFIG_SMP) += locks.o |
diff --git a/arch/powerpc/lib/dma-noncoherent.c b/arch/powerpc/lib/dma-noncoherent.c deleted file mode 100644 index 005a28d380af..000000000000 --- a/arch/powerpc/lib/dma-noncoherent.c +++ /dev/null | |||
@@ -1,237 +0,0 @@ | |||
1 | /* | ||
2 | * PowerPC version derived from arch/arm/mm/consistent.c | ||
3 | * Copyright (C) 2001 Dan Malek (dmalek@jlc.net) | ||
4 | * | ||
5 | * Copyright (C) 2000 Russell King | ||
6 | * | ||
7 | * Consistent memory allocators. Used for DMA devices that want to | ||
8 | * share uncached memory with the processor core. The function return | ||
9 | * is the virtual address and 'dma_handle' is the physical address. | ||
10 | * Mostly stolen from the ARM port, with some changes for PowerPC. | ||
11 | * -- Dan | ||
12 | * | ||
13 | * Reorganized to get rid of the arch-specific consistent_* functions | ||
14 | * and provide non-coherent implementations for the DMA API. -Matt | ||
15 | * | ||
16 | * Added in_interrupt() safe dma_alloc_coherent()/dma_free_coherent() | ||
17 | * implementation. This is pulled straight from ARM and barely | ||
18 | * modified. -Matt | ||
19 | * | ||
20 | * This program is free software; you can redistribute it and/or modify | ||
21 | * it under the terms of the GNU General Public License version 2 as | ||
22 | * published by the Free Software Foundation. | ||
23 | */ | ||
24 | |||
25 | #include <linux/sched.h> | ||
26 | #include <linux/kernel.h> | ||
27 | #include <linux/errno.h> | ||
28 | #include <linux/string.h> | ||
29 | #include <linux/types.h> | ||
30 | #include <linux/highmem.h> | ||
31 | #include <linux/dma-mapping.h> | ||
32 | #include <linux/vmalloc.h> | ||
33 | |||
34 | #include <asm/tlbflush.h> | ||
35 | |||
36 | /* | ||
37 | * Allocate DMA-coherent memory space and return both the kernel remapped | ||
38 | * virtual and bus address for that space. | ||
39 | */ | ||
40 | void * | ||
41 | __dma_alloc_coherent(size_t size, dma_addr_t *handle, gfp_t gfp) | ||
42 | { | ||
43 | struct page *page; | ||
44 | unsigned long order; | ||
45 | int i; | ||
46 | unsigned int nr_pages = PAGE_ALIGN(size)>>PAGE_SHIFT; | ||
47 | unsigned int array_size = nr_pages * sizeof(struct page *); | ||
48 | struct page **pages; | ||
49 | struct page *end; | ||
50 | u64 mask = 0x00ffffff, limit; /* ISA default */ | ||
51 | struct vm_struct *area; | ||
52 | |||
53 | BUG_ON(!mem_init_done); | ||
54 | size = PAGE_ALIGN(size); | ||
55 | limit = (mask + 1) & ~mask; | ||
56 | if (limit && size >= limit) { | ||
57 | printk(KERN_WARNING "coherent allocation too big (requested " | ||
58 | "%#x mask %#Lx)\n", size, mask); | ||
59 | return NULL; | ||
60 | } | ||
61 | |||
62 | order = get_order(size); | ||
63 | |||
64 | if (mask != 0xffffffff) | ||
65 | gfp |= GFP_DMA; | ||
66 | |||
67 | page = alloc_pages(gfp, order); | ||
68 | if (!page) | ||
69 | goto no_page; | ||
70 | |||
71 | end = page + (1 << order); | ||
72 | |||
73 | /* | ||
74 | * Invalidate any data that might be lurking in the | ||
75 | * kernel direct-mapped region for device DMA. | ||
76 | */ | ||
77 | { | ||
78 | unsigned long kaddr = (unsigned long)page_address(page); | ||
79 | memset(page_address(page), 0, size); | ||
80 | flush_dcache_range(kaddr, kaddr + size); | ||
81 | } | ||
82 | |||
83 | split_page(page, order); | ||
84 | |||
85 | /* | ||
86 | * Set the "dma handle" | ||
87 | */ | ||
88 | *handle = page_to_phys(page); | ||
89 | |||
90 | area = get_vm_area_caller(size, VM_IOREMAP, | ||
91 | __builtin_return_address(1)); | ||
92 | if (!area) | ||
93 | goto out_free_pages; | ||
94 | |||
95 | if (array_size > PAGE_SIZE) { | ||
96 | pages = vmalloc(array_size); | ||
97 | area->flags |= VM_VPAGES; | ||
98 | } else { | ||
99 | pages = kmalloc(array_size, GFP_KERNEL); | ||
100 | } | ||
101 | if (!pages) | ||
102 | goto out_free_area; | ||
103 | |||
104 | area->pages = pages; | ||
105 | area->nr_pages = nr_pages; | ||
106 | |||
107 | for (i = 0; i < nr_pages; i++) | ||
108 | pages[i] = page + i; | ||
109 | |||
110 | if (map_vm_area(area, pgprot_noncached(PAGE_KERNEL), &pages)) | ||
111 | goto out_unmap; | ||
112 | |||
113 | /* | ||
114 | * Free the otherwise unused pages. | ||
115 | */ | ||
116 | page += nr_pages; | ||
117 | while (page < end) { | ||
118 | __free_page(page); | ||
119 | page++; | ||
120 | } | ||
121 | |||
122 | return area->addr; | ||
123 | out_unmap: | ||
124 | vunmap(area->addr); | ||
125 | if (array_size > PAGE_SIZE) | ||
126 | vfree(pages); | ||
127 | else | ||
128 | kfree(pages); | ||
129 | goto out_free_pages; | ||
130 | out_free_area: | ||
131 | free_vm_area(area); | ||
132 | out_free_pages: | ||
133 | if (page) | ||
134 | __free_pages(page, order); | ||
135 | no_page: | ||
136 | return NULL; | ||
137 | } | ||
138 | EXPORT_SYMBOL(__dma_alloc_coherent); | ||
139 | |||
140 | /* | ||
141 | * free a page as defined by the above mapping. | ||
142 | */ | ||
143 | void __dma_free_coherent(size_t size, void *vaddr) | ||
144 | { | ||
145 | vfree(vaddr); | ||
146 | |||
147 | } | ||
148 | EXPORT_SYMBOL(__dma_free_coherent); | ||
149 | |||
150 | /* | ||
151 | * make an area consistent. | ||
152 | */ | ||
153 | void __dma_sync(void *vaddr, size_t size, int direction) | ||
154 | { | ||
155 | unsigned long start = (unsigned long)vaddr; | ||
156 | unsigned long end = start + size; | ||
157 | |||
158 | switch (direction) { | ||
159 | case DMA_NONE: | ||
160 | BUG(); | ||
161 | case DMA_FROM_DEVICE: | ||
162 | /* | ||
163 | * invalidate only when cache-line aligned otherwise there is | ||
164 | * the potential for discarding uncommitted data from the cache | ||
165 | */ | ||
166 | if ((start & (L1_CACHE_BYTES - 1)) || (size & (L1_CACHE_BYTES - 1))) | ||
167 | flush_dcache_range(start, end); | ||
168 | else | ||
169 | invalidate_dcache_range(start, end); | ||
170 | break; | ||
171 | case DMA_TO_DEVICE: /* writeback only */ | ||
172 | clean_dcache_range(start, end); | ||
173 | break; | ||
174 | case DMA_BIDIRECTIONAL: /* writeback and invalidate */ | ||
175 | flush_dcache_range(start, end); | ||
176 | break; | ||
177 | } | ||
178 | } | ||
179 | EXPORT_SYMBOL(__dma_sync); | ||
180 | |||
181 | #ifdef CONFIG_HIGHMEM | ||
182 | /* | ||
183 | * __dma_sync_page() implementation for systems using highmem. | ||
184 | * In this case, each page of a buffer must be kmapped/kunmapped | ||
185 | * in order to have a virtual address for __dma_sync(). This must | ||
186 | * not sleep so kmap_atomic()/kunmap_atomic() are used. | ||
187 | * | ||
188 | * Note: yes, it is possible and correct to have a buffer extend | ||
189 | * beyond the first page. | ||
190 | */ | ||
191 | static inline void __dma_sync_page_highmem(struct page *page, | ||
192 | unsigned long offset, size_t size, int direction) | ||
193 | { | ||
194 | size_t seg_size = min((size_t)(PAGE_SIZE - offset), size); | ||
195 | size_t cur_size = seg_size; | ||
196 | unsigned long flags, start, seg_offset = offset; | ||
197 | int nr_segs = 1 + ((size - seg_size) + PAGE_SIZE - 1)/PAGE_SIZE; | ||
198 | int seg_nr = 0; | ||
199 | |||
200 | local_irq_save(flags); | ||
201 | |||
202 | do { | ||
203 | start = (unsigned long)kmap_atomic(page + seg_nr, | ||
204 | KM_PPC_SYNC_PAGE) + seg_offset; | ||
205 | |||
206 | /* Sync this buffer segment */ | ||
207 | __dma_sync((void *)start, seg_size, direction); | ||
208 | kunmap_atomic((void *)start, KM_PPC_SYNC_PAGE); | ||
209 | seg_nr++; | ||
210 | |||
211 | /* Calculate next buffer segment size */ | ||
212 | seg_size = min((size_t)PAGE_SIZE, size - cur_size); | ||
213 | |||
214 | /* Add the segment size to our running total */ | ||
215 | cur_size += seg_size; | ||
216 | seg_offset = 0; | ||
217 | } while (seg_nr < nr_segs); | ||
218 | |||
219 | local_irq_restore(flags); | ||
220 | } | ||
221 | #endif /* CONFIG_HIGHMEM */ | ||
222 | |||
223 | /* | ||
224 | * __dma_sync_page makes memory consistent. identical to __dma_sync, but | ||
225 | * takes a struct page instead of a virtual address | ||
226 | */ | ||
227 | void __dma_sync_page(struct page *page, unsigned long offset, | ||
228 | size_t size, int direction) | ||
229 | { | ||
230 | #ifdef CONFIG_HIGHMEM | ||
231 | __dma_sync_page_highmem(page, offset, size, direction); | ||
232 | #else | ||
233 | unsigned long start = (unsigned long)page_address(page) + offset; | ||
234 | __dma_sync((void *)start, size, direction); | ||
235 | #endif | ||
236 | } | ||
237 | EXPORT_SYMBOL(__dma_sync_page); | ||
diff --git a/arch/powerpc/mm/Makefile b/arch/powerpc/mm/Makefile index 17290bcedc5e..b746f4ca4209 100644 --- a/arch/powerpc/mm/Makefile +++ b/arch/powerpc/mm/Makefile | |||
@@ -26,3 +26,4 @@ obj-$(CONFIG_NEED_MULTIPLE_NODES) += numa.o | |||
26 | obj-$(CONFIG_PPC_MM_SLICES) += slice.o | 26 | obj-$(CONFIG_PPC_MM_SLICES) += slice.o |
27 | obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o | 27 | obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o |
28 | obj-$(CONFIG_PPC_SUBPAGE_PROT) += subpage-prot.o | 28 | obj-$(CONFIG_PPC_SUBPAGE_PROT) += subpage-prot.o |
29 | obj-$(CONFIG_NOT_COHERENT_CACHE) += dma-noncoherent.o | ||
diff --git a/arch/powerpc/mm/dma-noncoherent.c b/arch/powerpc/mm/dma-noncoherent.c new file mode 100644 index 000000000000..36692f5c9a76 --- /dev/null +++ b/arch/powerpc/mm/dma-noncoherent.c | |||
@@ -0,0 +1,400 @@ | |||
1 | /* | ||
2 | * PowerPC version derived from arch/arm/mm/consistent.c | ||
3 | * Copyright (C) 2001 Dan Malek (dmalek@jlc.net) | ||
4 | * | ||
5 | * Copyright (C) 2000 Russell King | ||
6 | * | ||
7 | * Consistent memory allocators. Used for DMA devices that want to | ||
8 | * share uncached memory with the processor core. The function return | ||
9 | * is the virtual address and 'dma_handle' is the physical address. | ||
10 | * Mostly stolen from the ARM port, with some changes for PowerPC. | ||
11 | * -- Dan | ||
12 | * | ||
13 | * Reorganized to get rid of the arch-specific consistent_* functions | ||
14 | * and provide non-coherent implementations for the DMA API. -Matt | ||
15 | * | ||
16 | * Added in_interrupt() safe dma_alloc_coherent()/dma_free_coherent() | ||
17 | * implementation. This is pulled straight from ARM and barely | ||
18 | * modified. -Matt | ||
19 | * | ||
20 | * This program is free software; you can redistribute it and/or modify | ||
21 | * it under the terms of the GNU General Public License version 2 as | ||
22 | * published by the Free Software Foundation. | ||
23 | */ | ||
24 | |||
25 | #include <linux/sched.h> | ||
26 | #include <linux/kernel.h> | ||
27 | #include <linux/errno.h> | ||
28 | #include <linux/string.h> | ||
29 | #include <linux/types.h> | ||
30 | #include <linux/highmem.h> | ||
31 | #include <linux/dma-mapping.h> | ||
32 | |||
33 | #include <asm/tlbflush.h> | ||
34 | |||
35 | #include "mmu_decl.h" | ||
36 | |||
37 | /* | ||
38 | * This address range defaults to a value that is safe for all | ||
39 | * platforms which currently set CONFIG_NOT_COHERENT_CACHE. It | ||
40 | * can be further configured for specific applications under | ||
41 | * the "Advanced Setup" menu. -Matt | ||
42 | */ | ||
43 | #define CONSISTENT_BASE (IOREMAP_TOP) | ||
44 | #define CONSISTENT_END (CONSISTENT_BASE + CONFIG_CONSISTENT_SIZE) | ||
45 | #define CONSISTENT_OFFSET(x) (((unsigned long)(x) - CONSISTENT_BASE) >> PAGE_SHIFT) | ||
46 | |||
47 | /* | ||
48 | * This is the page table (2MB) covering uncached, DMA consistent allocations | ||
49 | */ | ||
50 | static DEFINE_SPINLOCK(consistent_lock); | ||
51 | |||
52 | /* | ||
53 | * VM region handling support. | ||
54 | * | ||
55 | * This should become something generic, handling VM region allocations for | ||
56 | * vmalloc and similar (ioremap, module space, etc). | ||
57 | * | ||
58 | * I envisage vmalloc()'s supporting vm_struct becoming: | ||
59 | * | ||
60 | * struct vm_struct { | ||
61 | * struct vm_region region; | ||
62 | * unsigned long flags; | ||
63 | * struct page **pages; | ||
64 | * unsigned int nr_pages; | ||
65 | * unsigned long phys_addr; | ||
66 | * }; | ||
67 | * | ||
68 | * get_vm_area() would then call vm_region_alloc with an appropriate | ||
69 | * struct vm_region head (eg): | ||
70 | * | ||
71 | * struct vm_region vmalloc_head = { | ||
72 | * .vm_list = LIST_HEAD_INIT(vmalloc_head.vm_list), | ||
73 | * .vm_start = VMALLOC_START, | ||
74 | * .vm_end = VMALLOC_END, | ||
75 | * }; | ||
76 | * | ||
77 | * However, vmalloc_head.vm_start is variable (typically, it is dependent on | ||
78 | * the amount of RAM found at boot time.) I would imagine that get_vm_area() | ||
79 | * would have to initialise this each time prior to calling vm_region_alloc(). | ||
80 | */ | ||
81 | struct ppc_vm_region { | ||
82 | struct list_head vm_list; | ||
83 | unsigned long vm_start; | ||
84 | unsigned long vm_end; | ||
85 | }; | ||
86 | |||
87 | static struct ppc_vm_region consistent_head = { | ||
88 | .vm_list = LIST_HEAD_INIT(consistent_head.vm_list), | ||
89 | .vm_start = CONSISTENT_BASE, | ||
90 | .vm_end = CONSISTENT_END, | ||
91 | }; | ||
92 | |||
93 | static struct ppc_vm_region * | ||
94 | ppc_vm_region_alloc(struct ppc_vm_region *head, size_t size, gfp_t gfp) | ||
95 | { | ||
96 | unsigned long addr = head->vm_start, end = head->vm_end - size; | ||
97 | unsigned long flags; | ||
98 | struct ppc_vm_region *c, *new; | ||
99 | |||
100 | new = kmalloc(sizeof(struct ppc_vm_region), gfp); | ||
101 | if (!new) | ||
102 | goto out; | ||
103 | |||
104 | spin_lock_irqsave(&consistent_lock, flags); | ||
105 | |||
106 | list_for_each_entry(c, &head->vm_list, vm_list) { | ||
107 | if ((addr + size) < addr) | ||
108 | goto nospc; | ||
109 | if ((addr + size) <= c->vm_start) | ||
110 | goto found; | ||
111 | addr = c->vm_end; | ||
112 | if (addr > end) | ||
113 | goto nospc; | ||
114 | } | ||
115 | |||
116 | found: | ||
117 | /* | ||
118 | * Insert this entry _before_ the one we found. | ||
119 | */ | ||
120 | list_add_tail(&new->vm_list, &c->vm_list); | ||
121 | new->vm_start = addr; | ||
122 | new->vm_end = addr + size; | ||
123 | |||
124 | spin_unlock_irqrestore(&consistent_lock, flags); | ||
125 | return new; | ||
126 | |||
127 | nospc: | ||
128 | spin_unlock_irqrestore(&consistent_lock, flags); | ||
129 | kfree(new); | ||
130 | out: | ||
131 | return NULL; | ||
132 | } | ||
133 | |||
134 | static struct ppc_vm_region *ppc_vm_region_find(struct ppc_vm_region *head, unsigned long addr) | ||
135 | { | ||
136 | struct ppc_vm_region *c; | ||
137 | |||
138 | list_for_each_entry(c, &head->vm_list, vm_list) { | ||
139 | if (c->vm_start == addr) | ||
140 | goto out; | ||
141 | } | ||
142 | c = NULL; | ||
143 | out: | ||
144 | return c; | ||
145 | } | ||
146 | |||
147 | /* | ||
148 | * Allocate DMA-coherent memory space and return both the kernel remapped | ||
149 | * virtual and bus address for that space. | ||
150 | */ | ||
151 | void * | ||
152 | __dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp) | ||
153 | { | ||
154 | struct page *page; | ||
155 | struct ppc_vm_region *c; | ||
156 | unsigned long order; | ||
157 | u64 mask = ISA_DMA_THRESHOLD, limit; | ||
158 | |||
159 | if (dev) { | ||
160 | mask = dev->coherent_dma_mask; | ||
161 | |||
162 | /* | ||
163 | * Sanity check the DMA mask - it must be non-zero, and | ||
164 | * must be able to be satisfied by a DMA allocation. | ||
165 | */ | ||
166 | if (mask == 0) { | ||
167 | dev_warn(dev, "coherent DMA mask is unset\n"); | ||
168 | goto no_page; | ||
169 | } | ||
170 | |||
171 | if ((~mask) & ISA_DMA_THRESHOLD) { | ||
172 | dev_warn(dev, "coherent DMA mask %#llx is smaller " | ||
173 | "than system GFP_DMA mask %#llx\n", | ||
174 | mask, (unsigned long long)ISA_DMA_THRESHOLD); | ||
175 | goto no_page; | ||
176 | } | ||
177 | } | ||
178 | |||
179 | |||
180 | size = PAGE_ALIGN(size); | ||
181 | limit = (mask + 1) & ~mask; | ||
182 | if ((limit && size >= limit) || | ||
183 | size >= (CONSISTENT_END - CONSISTENT_BASE)) { | ||
184 | printk(KERN_WARNING "coherent allocation too big (requested %#x mask %#Lx)\n", | ||
185 | size, mask); | ||
186 | return NULL; | ||
187 | } | ||
188 | |||
189 | order = get_order(size); | ||
190 | |||
191 | /* Might be useful if we ever have a real legacy DMA zone... */ | ||
192 | if (mask != 0xffffffff) | ||
193 | gfp |= GFP_DMA; | ||
194 | |||
195 | page = alloc_pages(gfp, order); | ||
196 | if (!page) | ||
197 | goto no_page; | ||
198 | |||
199 | /* | ||
200 | * Invalidate any data that might be lurking in the | ||
201 | * kernel direct-mapped region for device DMA. | ||
202 | */ | ||
203 | { | ||
204 | unsigned long kaddr = (unsigned long)page_address(page); | ||
205 | memset(page_address(page), 0, size); | ||
206 | flush_dcache_range(kaddr, kaddr + size); | ||
207 | } | ||
208 | |||
209 | /* | ||
210 | * Allocate a virtual address in the consistent mapping region. | ||
211 | */ | ||
212 | c = ppc_vm_region_alloc(&consistent_head, size, | ||
213 | gfp & ~(__GFP_DMA | __GFP_HIGHMEM)); | ||
214 | if (c) { | ||
215 | unsigned long vaddr = c->vm_start; | ||
216 | struct page *end = page + (1 << order); | ||
217 | |||
218 | split_page(page, order); | ||
219 | |||
220 | /* | ||
221 | * Set the "dma handle" | ||
222 | */ | ||
223 | *handle = page_to_phys(page); | ||
224 | |||
225 | do { | ||
226 | SetPageReserved(page); | ||
227 | map_page(vaddr, page_to_phys(page), | ||
228 | pgprot_noncached(PAGE_KERNEL)); | ||
229 | page++; | ||
230 | vaddr += PAGE_SIZE; | ||
231 | } while (size -= PAGE_SIZE); | ||
232 | |||
233 | /* | ||
234 | * Free the otherwise unused pages. | ||
235 | */ | ||
236 | while (page < end) { | ||
237 | __free_page(page); | ||
238 | page++; | ||
239 | } | ||
240 | |||
241 | return (void *)c->vm_start; | ||
242 | } | ||
243 | |||
244 | if (page) | ||
245 | __free_pages(page, order); | ||
246 | no_page: | ||
247 | return NULL; | ||
248 | } | ||
249 | EXPORT_SYMBOL(__dma_alloc_coherent); | ||
250 | |||
251 | /* | ||
252 | * free a page as defined by the above mapping. | ||
253 | */ | ||
254 | void __dma_free_coherent(size_t size, void *vaddr) | ||
255 | { | ||
256 | struct ppc_vm_region *c; | ||
257 | unsigned long flags, addr; | ||
258 | |||
259 | size = PAGE_ALIGN(size); | ||
260 | |||
261 | spin_lock_irqsave(&consistent_lock, flags); | ||
262 | |||
263 | c = ppc_vm_region_find(&consistent_head, (unsigned long)vaddr); | ||
264 | if (!c) | ||
265 | goto no_area; | ||
266 | |||
267 | if ((c->vm_end - c->vm_start) != size) { | ||
268 | printk(KERN_ERR "%s: freeing wrong coherent size (%ld != %d)\n", | ||
269 | __func__, c->vm_end - c->vm_start, size); | ||
270 | dump_stack(); | ||
271 | size = c->vm_end - c->vm_start; | ||
272 | } | ||
273 | |||
274 | addr = c->vm_start; | ||
275 | do { | ||
276 | pte_t *ptep; | ||
277 | unsigned long pfn; | ||
278 | |||
279 | ptep = pte_offset_kernel(pmd_offset(pud_offset(pgd_offset_k(addr), | ||
280 | addr), | ||
281 | addr), | ||
282 | addr); | ||
283 | if (!pte_none(*ptep) && pte_present(*ptep)) { | ||
284 | pfn = pte_pfn(*ptep); | ||
285 | pte_clear(&init_mm, addr, ptep); | ||
286 | if (pfn_valid(pfn)) { | ||
287 | struct page *page = pfn_to_page(pfn); | ||
288 | |||
289 | ClearPageReserved(page); | ||
290 | __free_page(page); | ||
291 | } | ||
292 | } | ||
293 | addr += PAGE_SIZE; | ||
294 | } while (size -= PAGE_SIZE); | ||
295 | |||
296 | flush_tlb_kernel_range(c->vm_start, c->vm_end); | ||
297 | |||
298 | list_del(&c->vm_list); | ||
299 | |||
300 | spin_unlock_irqrestore(&consistent_lock, flags); | ||
301 | |||
302 | kfree(c); | ||
303 | return; | ||
304 | |||
305 | no_area: | ||
306 | spin_unlock_irqrestore(&consistent_lock, flags); | ||
307 | printk(KERN_ERR "%s: trying to free invalid coherent area: %p\n", | ||
308 | __func__, vaddr); | ||
309 | dump_stack(); | ||
310 | } | ||
311 | EXPORT_SYMBOL(__dma_free_coherent); | ||
312 | |||
313 | /* | ||
314 | * make an area consistent. | ||
315 | */ | ||
316 | void __dma_sync(void *vaddr, size_t size, int direction) | ||
317 | { | ||
318 | unsigned long start = (unsigned long)vaddr; | ||
319 | unsigned long end = start + size; | ||
320 | |||
321 | switch (direction) { | ||
322 | case DMA_NONE: | ||
323 | BUG(); | ||
324 | case DMA_FROM_DEVICE: | ||
325 | /* | ||
326 | * invalidate only when cache-line aligned otherwise there is | ||
327 | * the potential for discarding uncommitted data from the cache | ||
328 | */ | ||
329 | if ((start & (L1_CACHE_BYTES - 1)) || (size & (L1_CACHE_BYTES - 1))) | ||
330 | flush_dcache_range(start, end); | ||
331 | else | ||
332 | invalidate_dcache_range(start, end); | ||
333 | break; | ||
334 | case DMA_TO_DEVICE: /* writeback only */ | ||
335 | clean_dcache_range(start, end); | ||
336 | break; | ||
337 | case DMA_BIDIRECTIONAL: /* writeback and invalidate */ | ||
338 | flush_dcache_range(start, end); | ||
339 | break; | ||
340 | } | ||
341 | } | ||
342 | EXPORT_SYMBOL(__dma_sync); | ||
343 | |||
344 | #ifdef CONFIG_HIGHMEM | ||
345 | /* | ||
346 | * __dma_sync_page() implementation for systems using highmem. | ||
347 | * In this case, each page of a buffer must be kmapped/kunmapped | ||
348 | * in order to have a virtual address for __dma_sync(). This must | ||
349 | * not sleep so kmap_atomic()/kunmap_atomic() are used. | ||
350 | * | ||
351 | * Note: yes, it is possible and correct to have a buffer extend | ||
352 | * beyond the first page. | ||
353 | */ | ||
354 | static inline void __dma_sync_page_highmem(struct page *page, | ||
355 | unsigned long offset, size_t size, int direction) | ||
356 | { | ||
357 | size_t seg_size = min((size_t)(PAGE_SIZE - offset), size); | ||
358 | size_t cur_size = seg_size; | ||
359 | unsigned long flags, start, seg_offset = offset; | ||
360 | int nr_segs = 1 + ((size - seg_size) + PAGE_SIZE - 1)/PAGE_SIZE; | ||
361 | int seg_nr = 0; | ||
362 | |||
363 | local_irq_save(flags); | ||
364 | |||
365 | do { | ||
366 | start = (unsigned long)kmap_atomic(page + seg_nr, | ||
367 | KM_PPC_SYNC_PAGE) + seg_offset; | ||
368 | |||
369 | /* Sync this buffer segment */ | ||
370 | __dma_sync((void *)start, seg_size, direction); | ||
371 | kunmap_atomic((void *)start, KM_PPC_SYNC_PAGE); | ||
372 | seg_nr++; | ||
373 | |||
374 | /* Calculate next buffer segment size */ | ||
375 | seg_size = min((size_t)PAGE_SIZE, size - cur_size); | ||
376 | |||
377 | /* Add the segment size to our running total */ | ||
378 | cur_size += seg_size; | ||
379 | seg_offset = 0; | ||
380 | } while (seg_nr < nr_segs); | ||
381 | |||
382 | local_irq_restore(flags); | ||
383 | } | ||
384 | #endif /* CONFIG_HIGHMEM */ | ||
385 | |||
386 | /* | ||
387 | * __dma_sync_page makes memory consistent. identical to __dma_sync, but | ||
388 | * takes a struct page instead of a virtual address | ||
389 | */ | ||
390 | void __dma_sync_page(struct page *page, unsigned long offset, | ||
391 | size_t size, int direction) | ||
392 | { | ||
393 | #ifdef CONFIG_HIGHMEM | ||
394 | __dma_sync_page_highmem(page, offset, size, direction); | ||
395 | #else | ||
396 | unsigned long start = (unsigned long)page_address(page) + offset; | ||
397 | __dma_sync((void *)start, size, direction); | ||
398 | #endif | ||
399 | } | ||
400 | EXPORT_SYMBOL(__dma_sync_page); | ||
diff --git a/arch/powerpc/mm/init_32.c b/arch/powerpc/mm/init_32.c index 666a5e8a5be1..3de6a0d93824 100644 --- a/arch/powerpc/mm/init_32.c +++ b/arch/powerpc/mm/init_32.c | |||
@@ -168,12 +168,8 @@ void __init MMU_init(void) | |||
168 | ppc_md.progress("MMU:mapin", 0x301); | 168 | ppc_md.progress("MMU:mapin", 0x301); |
169 | mapin_ram(); | 169 | mapin_ram(); |
170 | 170 | ||
171 | #ifdef CONFIG_HIGHMEM | 171 | /* Initialize early top-down ioremap allocator */ |
172 | ioremap_base = PKMAP_BASE; | 172 | ioremap_bot = IOREMAP_TOP; |
173 | #else | ||
174 | ioremap_base = 0xfe000000UL; /* for now, could be 0xfffff000 */ | ||
175 | #endif /* CONFIG_HIGHMEM */ | ||
176 | ioremap_bot = ioremap_base; | ||
177 | 173 | ||
178 | /* Map in I/O resources */ | 174 | /* Map in I/O resources */ |
179 | if (ppc_md.progress) | 175 | if (ppc_md.progress) |
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c index d0602a76bf7f..579382c163a9 100644 --- a/arch/powerpc/mm/mem.c +++ b/arch/powerpc/mm/mem.c | |||
@@ -380,6 +380,23 @@ void __init mem_init(void) | |||
380 | bsssize >> 10, | 380 | bsssize >> 10, |
381 | initsize >> 10); | 381 | initsize >> 10); |
382 | 382 | ||
383 | #ifdef CONFIG_PPC32 | ||
384 | pr_info("Kernel virtual memory layout:\n"); | ||
385 | pr_info(" * 0x%08lx..0x%08lx : fixmap\n", FIXADDR_START, FIXADDR_TOP); | ||
386 | #ifdef CONFIG_HIGHMEM | ||
387 | pr_info(" * 0x%08lx..0x%08lx : highmem PTEs\n", | ||
388 | PKMAP_BASE, PKMAP_ADDR(LAST_PKMAP)); | ||
389 | #endif /* CONFIG_HIGHMEM */ | ||
390 | #ifdef CONFIG_NOT_COHERENT_CACHE | ||
391 | pr_info(" * 0x%08lx..0x%08lx : consistent mem\n", | ||
392 | IOREMAP_TOP, IOREMAP_TOP + CONFIG_CONSISTENT_SIZE); | ||
393 | #endif /* CONFIG_NOT_COHERENT_CACHE */ | ||
394 | pr_info(" * 0x%08lx..0x%08lx : early ioremap\n", | ||
395 | ioremap_bot, IOREMAP_TOP); | ||
396 | pr_info(" * 0x%08lx..0x%08lx : vmalloc & ioremap\n", | ||
397 | VMALLOC_START, VMALLOC_END); | ||
398 | #endif /* CONFIG_PPC32 */ | ||
399 | |||
383 | mem_init_done = 1; | 400 | mem_init_done = 1; |
384 | } | 401 | } |
385 | 402 | ||
diff --git a/arch/powerpc/mm/mmu_context_nohash.c b/arch/powerpc/mm/mmu_context_nohash.c index a70e311bd457..030d0005b4d2 100644 --- a/arch/powerpc/mm/mmu_context_nohash.c +++ b/arch/powerpc/mm/mmu_context_nohash.c | |||
@@ -127,12 +127,12 @@ static unsigned int steal_context_up(unsigned int id) | |||
127 | 127 | ||
128 | pr_debug("[%d] steal context %d from mm @%p\n", cpu, id, mm); | 128 | pr_debug("[%d] steal context %d from mm @%p\n", cpu, id, mm); |
129 | 129 | ||
130 | /* Mark this mm has having no context anymore */ | ||
131 | mm->context.id = MMU_NO_CONTEXT; | ||
132 | |||
133 | /* Flush the TLB for that context */ | 130 | /* Flush the TLB for that context */ |
134 | local_flush_tlb_mm(mm); | 131 | local_flush_tlb_mm(mm); |
135 | 132 | ||
133 | /* Mark this mm has having no context anymore */ | ||
134 | mm->context.id = MMU_NO_CONTEXT; | ||
135 | |||
136 | /* XXX This clear should ultimately be part of local_flush_tlb_mm */ | 136 | /* XXX This clear should ultimately be part of local_flush_tlb_mm */ |
137 | __clear_bit(id, stale_map[cpu]); | 137 | __clear_bit(id, stale_map[cpu]); |
138 | 138 | ||
diff --git a/arch/powerpc/mm/pgtable_32.c b/arch/powerpc/mm/pgtable_32.c index 430d0908fa50..5422169626ba 100644 --- a/arch/powerpc/mm/pgtable_32.c +++ b/arch/powerpc/mm/pgtable_32.c | |||
@@ -399,8 +399,6 @@ void kernel_map_pages(struct page *page, int numpages, int enable) | |||
399 | #endif /* CONFIG_DEBUG_PAGEALLOC */ | 399 | #endif /* CONFIG_DEBUG_PAGEALLOC */ |
400 | 400 | ||
401 | static int fixmaps; | 401 | static int fixmaps; |
402 | unsigned long FIXADDR_TOP = (-PAGE_SIZE); | ||
403 | EXPORT_SYMBOL(FIXADDR_TOP); | ||
404 | 402 | ||
405 | void __set_fixmap (enum fixed_addresses idx, phys_addr_t phys, pgprot_t flags) | 403 | void __set_fixmap (enum fixed_addresses idx, phys_addr_t phys, pgprot_t flags) |
406 | { | 404 | { |
diff --git a/arch/sh/include/asm/flat.h b/arch/sh/include/asm/flat.h index d3b2b4f109e3..5d84df5e27f6 100644 --- a/arch/sh/include/asm/flat.h +++ b/arch/sh/include/asm/flat.h | |||
@@ -12,7 +12,6 @@ | |||
12 | #ifndef __ASM_SH_FLAT_H | 12 | #ifndef __ASM_SH_FLAT_H |
13 | #define __ASM_SH_FLAT_H | 13 | #define __ASM_SH_FLAT_H |
14 | 14 | ||
15 | #define flat_stack_align(sp) /* nothing needed */ | ||
16 | #define flat_argvp_envp_on_stack() 0 | 15 | #define flat_argvp_envp_on_stack() 0 |
17 | #define flat_old_ram_flag(flags) (flags) | 16 | #define flat_old_ram_flag(flags) (flags) |
18 | #define flat_reloc_valid(reloc, size) ((reloc) <= (size)) | 17 | #define flat_reloc_valid(reloc, size) ((reloc) <= (size)) |
diff --git a/arch/sparc/include/asm/elf_64.h b/arch/sparc/include/asm/elf_64.h index 425c2f9be6d5..d42e393078c4 100644 --- a/arch/sparc/include/asm/elf_64.h +++ b/arch/sparc/include/asm/elf_64.h | |||
@@ -208,8 +208,9 @@ do { unsigned long new_flags = current_thread_info()->flags; \ | |||
208 | else \ | 208 | else \ |
209 | clear_thread_flag(TIF_ABI_PENDING); \ | 209 | clear_thread_flag(TIF_ABI_PENDING); \ |
210 | /* flush_thread will update pgd cache */ \ | 210 | /* flush_thread will update pgd cache */ \ |
211 | if (current->personality != PER_LINUX32) \ | 211 | if (personality(current->personality) != PER_LINUX32) \ |
212 | set_personality(PER_LINUX); \ | 212 | set_personality(PER_LINUX | \ |
213 | (current->personality & (~PER_MASK))); \ | ||
213 | } while (0) | 214 | } while (0) |
214 | 215 | ||
215 | #endif /* !(__ASM_SPARC64_ELF_H) */ | 216 | #endif /* !(__ASM_SPARC64_ELF_H) */ |
diff --git a/arch/sparc/lib/csum_copy_from_user.S b/arch/sparc/lib/csum_copy_from_user.S index a22eddbe5dba..e0304e6a2242 100644 --- a/arch/sparc/lib/csum_copy_from_user.S +++ b/arch/sparc/lib/csum_copy_from_user.S | |||
@@ -5,7 +5,7 @@ | |||
5 | 5 | ||
6 | #define EX_LD(x) \ | 6 | #define EX_LD(x) \ |
7 | 98: x; \ | 7 | 98: x; \ |
8 | .section .fixup; \ | 8 | .section .fixup, "ax"; \ |
9 | .align 4; \ | 9 | .align 4; \ |
10 | 99: retl; \ | 10 | 99: retl; \ |
11 | mov -1, %o0; \ | 11 | mov -1, %o0; \ |
diff --git a/arch/sparc/lib/csum_copy_to_user.S b/arch/sparc/lib/csum_copy_to_user.S index d5b12f441f02..afd01acc587c 100644 --- a/arch/sparc/lib/csum_copy_to_user.S +++ b/arch/sparc/lib/csum_copy_to_user.S | |||
@@ -5,7 +5,7 @@ | |||
5 | 5 | ||
6 | #define EX_ST(x) \ | 6 | #define EX_ST(x) \ |
7 | 98: x; \ | 7 | 98: x; \ |
8 | .section .fixup; \ | 8 | .section .fixup,"ax"; \ |
9 | .align 4; \ | 9 | .align 4; \ |
10 | 99: retl; \ | 10 | 99: retl; \ |
11 | mov -1, %o0; \ | 11 | mov -1, %o0; \ |
diff --git a/arch/x86/boot/compressed/relocs.c b/arch/x86/boot/compressed/relocs.c index 857e492c571e..bbeb0c3fbd90 100644 --- a/arch/x86/boot/compressed/relocs.c +++ b/arch/x86/boot/compressed/relocs.c | |||
@@ -504,8 +504,11 @@ static void walk_relocs(void (*visit)(Elf32_Rel *rel, Elf32_Sym *sym)) | |||
504 | if (sym->st_shndx == SHN_ABS) { | 504 | if (sym->st_shndx == SHN_ABS) { |
505 | continue; | 505 | continue; |
506 | } | 506 | } |
507 | if (r_type == R_386_PC32) { | 507 | if (r_type == R_386_NONE || r_type == R_386_PC32) { |
508 | /* PC relative relocations don't need to be adjusted */ | 508 | /* |
509 | * NONE can be ignored and and PC relative | ||
510 | * relocations don't need to be adjusted. | ||
511 | */ | ||
509 | } | 512 | } |
510 | else if (r_type == R_386_32) { | 513 | else if (r_type == R_386_32) { |
511 | /* Visit relocations that need to be adjusted */ | 514 | /* Visit relocations that need to be adjusted */ |
diff --git a/arch/x86/boot/memory.c b/arch/x86/boot/memory.c index 5054c2ddd1a0..74b3d2ba84e9 100644 --- a/arch/x86/boot/memory.c +++ b/arch/x86/boot/memory.c | |||
@@ -17,11 +17,6 @@ | |||
17 | 17 | ||
18 | #define SMAP 0x534d4150 /* ASCII "SMAP" */ | 18 | #define SMAP 0x534d4150 /* ASCII "SMAP" */ |
19 | 19 | ||
20 | struct e820_ext_entry { | ||
21 | struct e820entry std; | ||
22 | u32 ext_flags; | ||
23 | } __attribute__((packed)); | ||
24 | |||
25 | static int detect_memory_e820(void) | 20 | static int detect_memory_e820(void) |
26 | { | 21 | { |
27 | int count = 0; | 22 | int count = 0; |
@@ -29,13 +24,21 @@ static int detect_memory_e820(void) | |||
29 | u32 size, id, edi; | 24 | u32 size, id, edi; |
30 | u8 err; | 25 | u8 err; |
31 | struct e820entry *desc = boot_params.e820_map; | 26 | struct e820entry *desc = boot_params.e820_map; |
32 | static struct e820_ext_entry buf; /* static so it is zeroed */ | 27 | static struct e820entry buf; /* static so it is zeroed */ |
33 | 28 | ||
34 | /* | 29 | /* |
35 | * Set this here so that if the BIOS doesn't change this field | 30 | * Note: at least one BIOS is known which assumes that the |
36 | * but still doesn't change %ecx, we're still okay... | 31 | * buffer pointed to by one e820 call is the same one as |
32 | * the previous call, and only changes modified fields. Therefore, | ||
33 | * we use a temporary buffer and copy the results entry by entry. | ||
34 | * | ||
35 | * This routine deliberately does not try to account for | ||
36 | * ACPI 3+ extended attributes. This is because there are | ||
37 | * BIOSes in the field which report zero for the valid bit for | ||
38 | * all ranges, and we don't currently make any use of the | ||
39 | * other attribute bits. Revisit this if we see the extended | ||
40 | * attribute bits deployed in a meaningful way in the future. | ||
37 | */ | 41 | */ |
38 | buf.ext_flags = 1; | ||
39 | 42 | ||
40 | do { | 43 | do { |
41 | size = sizeof buf; | 44 | size = sizeof buf; |
@@ -66,13 +69,7 @@ static int detect_memory_e820(void) | |||
66 | break; | 69 | break; |
67 | } | 70 | } |
68 | 71 | ||
69 | /* ACPI 3.0 added the extended flags support. If bit 0 | 72 | *desc++ = buf; |
70 | in the extended flags is zero, we're supposed to simply | ||
71 | ignore the entry -- a backwards incompatible change! */ | ||
72 | if (size > 20 && !(buf.ext_flags & 1)) | ||
73 | continue; | ||
74 | |||
75 | *desc++ = buf.std; | ||
76 | count++; | 73 | count++; |
77 | } while (next && count < ARRAY_SIZE(boot_params.e820_map)); | 74 | } while (next && count < ARRAY_SIZE(boot_params.e820_map)); |
78 | 75 | ||
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index c1caefc82e62..77848d9fca68 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c | |||
@@ -114,6 +114,13 @@ DEFINE_PER_CPU_PAGE_ALIGNED(struct gdt_page, gdt_page) = { .gdt = { | |||
114 | } }; | 114 | } }; |
115 | EXPORT_PER_CPU_SYMBOL_GPL(gdt_page); | 115 | EXPORT_PER_CPU_SYMBOL_GPL(gdt_page); |
116 | 116 | ||
117 | static int __init x86_xsave_setup(char *s) | ||
118 | { | ||
119 | setup_clear_cpu_cap(X86_FEATURE_XSAVE); | ||
120 | return 1; | ||
121 | } | ||
122 | __setup("noxsave", x86_xsave_setup); | ||
123 | |||
117 | #ifdef CONFIG_X86_32 | 124 | #ifdef CONFIG_X86_32 |
118 | static int cachesize_override __cpuinitdata = -1; | 125 | static int cachesize_override __cpuinitdata = -1; |
119 | static int disable_x86_serial_nr __cpuinitdata = 1; | 126 | static int disable_x86_serial_nr __cpuinitdata = 1; |
diff --git a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c index 208ecf6643df..54b6de2cd947 100644 --- a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c +++ b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c | |||
@@ -693,8 +693,8 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy) | |||
693 | if (perf->control_register.space_id == ACPI_ADR_SPACE_FIXED_HARDWARE && | 693 | if (perf->control_register.space_id == ACPI_ADR_SPACE_FIXED_HARDWARE && |
694 | policy->cpuinfo.transition_latency > 20 * 1000) { | 694 | policy->cpuinfo.transition_latency > 20 * 1000) { |
695 | policy->cpuinfo.transition_latency = 20 * 1000; | 695 | policy->cpuinfo.transition_latency = 20 * 1000; |
696 | printk_once(KERN_INFO "Capping off P-state tranision" | 696 | printk_once(KERN_INFO |
697 | " latency at 20 uS\n"); | 697 | "P-state transition latency capped at 20 uS\n"); |
698 | } | 698 | } |
699 | 699 | ||
700 | /* table init */ | 700 | /* table init */ |
diff --git a/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c b/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c index 6ac55bd341ae..869615193720 100644 --- a/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c +++ b/arch/x86/kernel/cpu/cpufreq/p4-clockmod.c | |||
@@ -168,6 +168,7 @@ static unsigned int cpufreq_p4_get_frequency(struct cpuinfo_x86 *c) | |||
168 | case 0x0E: /* Core */ | 168 | case 0x0E: /* Core */ |
169 | case 0x0F: /* Core Duo */ | 169 | case 0x0F: /* Core Duo */ |
170 | case 0x16: /* Celeron Core */ | 170 | case 0x16: /* Celeron Core */ |
171 | case 0x1C: /* Atom */ | ||
171 | p4clockmod_driver.flags |= CPUFREQ_CONST_LOOPS; | 172 | p4clockmod_driver.flags |= CPUFREQ_CONST_LOOPS; |
172 | return speedstep_get_frequency(SPEEDSTEP_CPU_PCORE); | 173 | return speedstep_get_frequency(SPEEDSTEP_CPU_PCORE); |
173 | case 0x0D: /* Pentium M (Dothan) */ | 174 | case 0x0D: /* Pentium M (Dothan) */ |
diff --git a/arch/x86/kernel/cpu/cpufreq/powernow-k7.c b/arch/x86/kernel/cpu/cpufreq/powernow-k7.c index 3c28ccd49742..a8363e5be4ef 100644 --- a/arch/x86/kernel/cpu/cpufreq/powernow-k7.c +++ b/arch/x86/kernel/cpu/cpufreq/powernow-k7.c | |||
@@ -168,10 +168,12 @@ static int check_powernow(void) | |||
168 | return 1; | 168 | return 1; |
169 | } | 169 | } |
170 | 170 | ||
171 | #ifdef CONFIG_X86_POWERNOW_K7_ACPI | ||
171 | static void invalidate_entry(unsigned int entry) | 172 | static void invalidate_entry(unsigned int entry) |
172 | { | 173 | { |
173 | powernow_table[entry].frequency = CPUFREQ_ENTRY_INVALID; | 174 | powernow_table[entry].frequency = CPUFREQ_ENTRY_INVALID; |
174 | } | 175 | } |
176 | #endif | ||
175 | 177 | ||
176 | static int get_ranges(unsigned char *pst) | 178 | static int get_ranges(unsigned char *pst) |
177 | { | 179 | { |
diff --git a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c index 4709ead2db52..f6b32d112357 100644 --- a/arch/x86/kernel/cpu/cpufreq/powernow-k8.c +++ b/arch/x86/kernel/cpu/cpufreq/powernow-k8.c | |||
@@ -649,6 +649,20 @@ static void print_basics(struct powernow_k8_data *data) | |||
649 | data->batps); | 649 | data->batps); |
650 | } | 650 | } |
651 | 651 | ||
652 | static u32 freq_from_fid_did(u32 fid, u32 did) | ||
653 | { | ||
654 | u32 mhz = 0; | ||
655 | |||
656 | if (boot_cpu_data.x86 == 0x10) | ||
657 | mhz = (100 * (fid + 0x10)) >> did; | ||
658 | else if (boot_cpu_data.x86 == 0x11) | ||
659 | mhz = (100 * (fid + 8)) >> did; | ||
660 | else | ||
661 | BUG(); | ||
662 | |||
663 | return mhz * 1000; | ||
664 | } | ||
665 | |||
652 | static int fill_powernow_table(struct powernow_k8_data *data, | 666 | static int fill_powernow_table(struct powernow_k8_data *data, |
653 | struct pst_s *pst, u8 maxvid) | 667 | struct pst_s *pst, u8 maxvid) |
654 | { | 668 | { |
@@ -923,8 +937,13 @@ static int fill_powernow_table_pstate(struct powernow_k8_data *data, | |||
923 | 937 | ||
924 | powernow_table[i].index = index; | 938 | powernow_table[i].index = index; |
925 | 939 | ||
926 | powernow_table[i].frequency = | 940 | /* Frequency may be rounded for these */ |
927 | data->acpi_data.states[i].core_frequency * 1000; | 941 | if (boot_cpu_data.x86 == 0x10 || boot_cpu_data.x86 == 0x11) { |
942 | powernow_table[i].frequency = | ||
943 | freq_from_fid_did(lo & 0x3f, (lo >> 6) & 7); | ||
944 | } else | ||
945 | powernow_table[i].frequency = | ||
946 | data->acpi_data.states[i].core_frequency * 1000; | ||
928 | } | 947 | } |
929 | return 0; | 948 | return 0; |
930 | } | 949 | } |
@@ -1215,13 +1234,16 @@ static int powernowk8_verify(struct cpufreq_policy *pol) | |||
1215 | return cpufreq_frequency_table_verify(pol, data->powernow_table); | 1234 | return cpufreq_frequency_table_verify(pol, data->powernow_table); |
1216 | } | 1235 | } |
1217 | 1236 | ||
1237 | static const char ACPI_PSS_BIOS_BUG_MSG[] = | ||
1238 | KERN_ERR FW_BUG PFX "No compatible ACPI _PSS objects found.\n" | ||
1239 | KERN_ERR FW_BUG PFX "Try again with latest BIOS.\n"; | ||
1240 | |||
1218 | /* per CPU init entry point to the driver */ | 1241 | /* per CPU init entry point to the driver */ |
1219 | static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol) | 1242 | static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol) |
1220 | { | 1243 | { |
1221 | struct powernow_k8_data *data; | 1244 | struct powernow_k8_data *data; |
1222 | cpumask_t oldmask; | 1245 | cpumask_t oldmask; |
1223 | int rc; | 1246 | int rc; |
1224 | static int print_once; | ||
1225 | 1247 | ||
1226 | if (!cpu_online(pol->cpu)) | 1248 | if (!cpu_online(pol->cpu)) |
1227 | return -ENODEV; | 1249 | return -ENODEV; |
@@ -1244,19 +1266,7 @@ static int __cpuinit powernowk8_cpu_init(struct cpufreq_policy *pol) | |||
1244 | * an UP version, and is deprecated by AMD. | 1266 | * an UP version, and is deprecated by AMD. |
1245 | */ | 1267 | */ |
1246 | if (num_online_cpus() != 1) { | 1268 | if (num_online_cpus() != 1) { |
1247 | /* | 1269 | printk_once(ACPI_PSS_BIOS_BUG_MSG); |
1248 | * Replace this one with print_once as soon as such a | ||
1249 | * thing gets introduced | ||
1250 | */ | ||
1251 | if (!print_once) { | ||
1252 | WARN_ONCE(1, KERN_ERR FW_BUG PFX "Your BIOS " | ||
1253 | "does not provide ACPI _PSS objects " | ||
1254 | "in a way that Linux understands. " | ||
1255 | "Please report this to the Linux ACPI" | ||
1256 | " maintainers and complain to your " | ||
1257 | "BIOS vendor.\n"); | ||
1258 | print_once++; | ||
1259 | } | ||
1260 | goto err_out; | 1270 | goto err_out; |
1261 | } | 1271 | } |
1262 | if (pol->cpu != 0) { | 1272 | if (pol->cpu != 0) { |
diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c index 1340dad417f4..667188e0b5a0 100644 --- a/arch/x86/kernel/reboot.c +++ b/arch/x86/kernel/reboot.c | |||
@@ -232,6 +232,14 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = { | |||
232 | DMI_MATCH(DMI_PRODUCT_NAME, "Dell DXP061"), | 232 | DMI_MATCH(DMI_PRODUCT_NAME, "Dell DXP061"), |
233 | }, | 233 | }, |
234 | }, | 234 | }, |
235 | { /* Handle problems with rebooting on Sony VGN-Z540N */ | ||
236 | .callback = set_bios_reboot, | ||
237 | .ident = "Sony VGN-Z540N", | ||
238 | .matches = { | ||
239 | DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), | ||
240 | DMI_MATCH(DMI_PRODUCT_NAME, "VGN-Z540N"), | ||
241 | }, | ||
242 | }, | ||
235 | { } | 243 | { } |
236 | }; | 244 | }; |
237 | 245 | ||
diff --git a/arch/x86/kernel/setup_percpu.c b/arch/x86/kernel/setup_percpu.c index 3a97a4cf1872..8f0e13be36b3 100644 --- a/arch/x86/kernel/setup_percpu.c +++ b/arch/x86/kernel/setup_percpu.c | |||
@@ -160,8 +160,10 @@ static ssize_t __init setup_pcpu_remap(size_t static_size) | |||
160 | /* | 160 | /* |
161 | * If large page isn't supported, there's no benefit in doing | 161 | * If large page isn't supported, there's no benefit in doing |
162 | * this. Also, on non-NUMA, embedding is better. | 162 | * this. Also, on non-NUMA, embedding is better. |
163 | * | ||
164 | * NOTE: disabled for now. | ||
163 | */ | 165 | */ |
164 | if (!cpu_has_pse || !pcpu_need_numa()) | 166 | if (true || !cpu_has_pse || !pcpu_need_numa()) |
165 | return -EINVAL; | 167 | return -EINVAL; |
166 | 168 | ||
167 | /* | 169 | /* |
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index b6caf1329b1b..32cf11e5728a 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
@@ -2897,8 +2897,7 @@ static int kvm_pv_mmu_write(struct kvm_vcpu *vcpu, | |||
2897 | 2897 | ||
2898 | static int kvm_pv_mmu_flush_tlb(struct kvm_vcpu *vcpu) | 2898 | static int kvm_pv_mmu_flush_tlb(struct kvm_vcpu *vcpu) |
2899 | { | 2899 | { |
2900 | kvm_x86_ops->tlb_flush(vcpu); | 2900 | kvm_set_cr3(vcpu, vcpu->arch.cr3); |
2901 | set_bit(KVM_REQ_MMU_SYNC, &vcpu->requests); | ||
2902 | return 1; | 2901 | return 1; |
2903 | } | 2902 | } |
2904 | 2903 | ||
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 49079a46687b..3944e917e794 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
@@ -338,6 +338,9 @@ EXPORT_SYMBOL_GPL(kvm_lmsw); | |||
338 | 338 | ||
339 | void kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4) | 339 | void kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4) |
340 | { | 340 | { |
341 | unsigned long old_cr4 = vcpu->arch.cr4; | ||
342 | unsigned long pdptr_bits = X86_CR4_PGE | X86_CR4_PSE | X86_CR4_PAE; | ||
343 | |||
341 | if (cr4 & CR4_RESERVED_BITS) { | 344 | if (cr4 & CR4_RESERVED_BITS) { |
342 | printk(KERN_DEBUG "set_cr4: #GP, reserved bits\n"); | 345 | printk(KERN_DEBUG "set_cr4: #GP, reserved bits\n"); |
343 | kvm_inject_gp(vcpu, 0); | 346 | kvm_inject_gp(vcpu, 0); |
@@ -351,7 +354,8 @@ void kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4) | |||
351 | kvm_inject_gp(vcpu, 0); | 354 | kvm_inject_gp(vcpu, 0); |
352 | return; | 355 | return; |
353 | } | 356 | } |
354 | } else if (is_paging(vcpu) && !is_pae(vcpu) && (cr4 & X86_CR4_PAE) | 357 | } else if (is_paging(vcpu) && (cr4 & X86_CR4_PAE) |
358 | && ((cr4 ^ old_cr4) & pdptr_bits) | ||
355 | && !load_pdptrs(vcpu, vcpu->arch.cr3)) { | 359 | && !load_pdptrs(vcpu, vcpu->arch.cr3)) { |
356 | printk(KERN_DEBUG "set_cr4: #GP, pdptrs reserved bits\n"); | 360 | printk(KERN_DEBUG "set_cr4: #GP, pdptrs reserved bits\n"); |
357 | kvm_inject_gp(vcpu, 0); | 361 | kvm_inject_gp(vcpu, 0); |
diff --git a/arch/x86/mm/hugetlbpage.c b/arch/x86/mm/hugetlbpage.c index 8f307d914c2e..f46c340727b8 100644 --- a/arch/x86/mm/hugetlbpage.c +++ b/arch/x86/mm/hugetlbpage.c | |||
@@ -26,12 +26,16 @@ static unsigned long page_table_shareable(struct vm_area_struct *svma, | |||
26 | unsigned long sbase = saddr & PUD_MASK; | 26 | unsigned long sbase = saddr & PUD_MASK; |
27 | unsigned long s_end = sbase + PUD_SIZE; | 27 | unsigned long s_end = sbase + PUD_SIZE; |
28 | 28 | ||
29 | /* Allow segments to share if only one is marked locked */ | ||
30 | unsigned long vm_flags = vma->vm_flags & ~VM_LOCKED; | ||
31 | unsigned long svm_flags = svma->vm_flags & ~VM_LOCKED; | ||
32 | |||
29 | /* | 33 | /* |
30 | * match the virtual addresses, permission and the alignment of the | 34 | * match the virtual addresses, permission and the alignment of the |
31 | * page table page. | 35 | * page table page. |
32 | */ | 36 | */ |
33 | if (pmd_index(addr) != pmd_index(saddr) || | 37 | if (pmd_index(addr) != pmd_index(saddr) || |
34 | vma->vm_flags != svma->vm_flags || | 38 | vm_flags != svm_flags || |
35 | sbase < svma->vm_start || svma->vm_end < s_end) | 39 | sbase < svma->vm_start || svma->vm_end < s_end) |
36 | return 0; | 40 | return 0; |
37 | 41 | ||
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c index 797f9f107cb6..e17efed088c5 100644 --- a/arch/x86/mm/pageattr.c +++ b/arch/x86/mm/pageattr.c | |||
@@ -153,7 +153,7 @@ static void __cpa_flush_all(void *arg) | |||
153 | */ | 153 | */ |
154 | __flush_tlb_all(); | 154 | __flush_tlb_all(); |
155 | 155 | ||
156 | if (cache && boot_cpu_data.x86_model >= 4) | 156 | if (cache && boot_cpu_data.x86 >= 4) |
157 | wbinvd(); | 157 | wbinvd(); |
158 | } | 158 | } |
159 | 159 | ||
@@ -208,20 +208,15 @@ static void cpa_flush_array(unsigned long *start, int numpages, int cache, | |||
208 | int in_flags, struct page **pages) | 208 | int in_flags, struct page **pages) |
209 | { | 209 | { |
210 | unsigned int i, level; | 210 | unsigned int i, level; |
211 | unsigned long do_wbinvd = cache && numpages >= 1024; /* 4M threshold */ | ||
211 | 212 | ||
212 | BUG_ON(irqs_disabled()); | 213 | BUG_ON(irqs_disabled()); |
213 | 214 | ||
214 | on_each_cpu(__cpa_flush_range, NULL, 1); | 215 | on_each_cpu(__cpa_flush_all, (void *) do_wbinvd, 1); |
215 | 216 | ||
216 | if (!cache) | 217 | if (!cache || do_wbinvd) |
217 | return; | 218 | return; |
218 | 219 | ||
219 | /* 4M threshold */ | ||
220 | if (numpages >= 1024) { | ||
221 | if (boot_cpu_data.x86_model >= 4) | ||
222 | wbinvd(); | ||
223 | return; | ||
224 | } | ||
225 | /* | 220 | /* |
226 | * We only need to flush on one CPU, | 221 | * We only need to flush on one CPU, |
227 | * clflush is a MESI-coherent instruction that | 222 | * clflush is a MESI-coherent instruction that |