diff options
309 files changed, 25498 insertions, 5869 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index e07c432c731f..f1e970acad4c 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -1208,6 +1208,11 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1208 | mtdparts= [MTD] | 1208 | mtdparts= [MTD] |
1209 | See drivers/mtd/cmdlinepart.c. | 1209 | See drivers/mtd/cmdlinepart.c. |
1210 | 1210 | ||
1211 | mtdset= [ARM] | ||
1212 | ARM/S3C2412 JIVE boot control | ||
1213 | |||
1214 | See arch/arm/mach-s3c2412/mach-jive.c | ||
1215 | |||
1211 | mtouchusb.raw_coordinates= | 1216 | mtouchusb.raw_coordinates= |
1212 | [HW] Make the MicroTouch USB driver use raw coordinates | 1217 | [HW] Make the MicroTouch USB driver use raw coordinates |
1213 | ('y', default) or cooked coordinates ('n') | 1218 | ('y', default) or cooked coordinates ('n') |
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index b786e68914d4..b92925c70172 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -84,6 +84,11 @@ config STACKTRACE_SUPPORT | |||
84 | bool | 84 | bool |
85 | default y | 85 | default y |
86 | 86 | ||
87 | config HAVE_LATENCYTOP_SUPPORT | ||
88 | bool | ||
89 | depends on !SMP | ||
90 | default y | ||
91 | |||
87 | config LOCKDEP_SUPPORT | 92 | config LOCKDEP_SUPPORT |
88 | bool | 93 | bool |
89 | default y | 94 | default y |
@@ -147,6 +152,10 @@ config FIQ | |||
147 | config ARCH_MTD_XIP | 152 | config ARCH_MTD_XIP |
148 | bool | 153 | bool |
149 | 154 | ||
155 | config GENERIC_HARDIRQS_NO__DO_IRQ | ||
156 | bool | ||
157 | def_bool y | ||
158 | |||
150 | if OPROFILE | 159 | if OPROFILE |
151 | 160 | ||
152 | config OPROFILE_ARMV6 | 161 | config OPROFILE_ARMV6 |
@@ -232,13 +241,6 @@ config ARCH_CLPS711X | |||
232 | help | 241 | help |
233 | Support for Cirrus Logic 711x/721x based boards. | 242 | Support for Cirrus Logic 711x/721x based boards. |
234 | 243 | ||
235 | config ARCH_CO285 | ||
236 | bool "Co-EBSA285" | ||
237 | select FOOTBRIDGE | ||
238 | select FOOTBRIDGE_ADDIN | ||
239 | help | ||
240 | Support for Intel's EBSA285 companion chip. | ||
241 | |||
242 | config ARCH_EBSA110 | 244 | config ARCH_EBSA110 |
243 | bool "EBSA-110" | 245 | bool "EBSA-110" |
244 | select ISA | 246 | select ISA |
@@ -299,6 +301,8 @@ config ARCH_IOP32X | |||
299 | depends on MMU | 301 | depends on MMU |
300 | select PLAT_IOP | 302 | select PLAT_IOP |
301 | select PCI | 303 | select PCI |
304 | select GENERIC_GPIO | ||
305 | select HAVE_GPIO_LIB | ||
302 | help | 306 | help |
303 | Support for Intel's 80219 and IOP32X (XScale) family of | 307 | Support for Intel's 80219 and IOP32X (XScale) family of |
304 | processors. | 308 | processors. |
@@ -308,6 +312,8 @@ config ARCH_IOP33X | |||
308 | depends on MMU | 312 | depends on MMU |
309 | select PLAT_IOP | 313 | select PLAT_IOP |
310 | select PCI | 314 | select PCI |
315 | select GENERIC_GPIO | ||
316 | select HAVE_GPIO_LIB | ||
311 | help | 317 | help |
312 | Support for Intel's IOP33X (XScale) family of processors. | 318 | Support for Intel's IOP33X (XScale) family of processors. |
313 | 319 | ||
@@ -347,6 +353,16 @@ config ARCH_L7200 | |||
347 | If you have any questions or comments about the Linux kernel port | 353 | If you have any questions or comments about the Linux kernel port |
348 | to this board, send e-mail to <sjhill@cotw.com>. | 354 | to this board, send e-mail to <sjhill@cotw.com>. |
349 | 355 | ||
356 | config ARCH_KIRKWOOD | ||
357 | bool "Marvell Kirkwood" | ||
358 | select PCI | ||
359 | select GENERIC_TIME | ||
360 | select GENERIC_CLOCKEVENTS | ||
361 | select PLAT_ORION | ||
362 | help | ||
363 | Support for the following Marvell Kirkwood series SoCs: | ||
364 | 88F6180, 88F6192 and 88F6281. | ||
365 | |||
350 | config ARCH_KS8695 | 366 | config ARCH_KS8695 |
351 | bool "Micrel/Kendin KS8695" | 367 | bool "Micrel/Kendin KS8695" |
352 | select GENERIC_GPIO | 368 | select GENERIC_GPIO |
@@ -365,6 +381,24 @@ config ARCH_NS9XXX | |||
365 | 381 | ||
366 | <http://www.digi.com/products/microprocessors/index.jsp> | 382 | <http://www.digi.com/products/microprocessors/index.jsp> |
367 | 383 | ||
384 | config ARCH_LOKI | ||
385 | bool "Marvell Loki (88RC8480)" | ||
386 | select GENERIC_TIME | ||
387 | select GENERIC_CLOCKEVENTS | ||
388 | select PLAT_ORION | ||
389 | help | ||
390 | Support for the Marvell Loki (88RC8480) SoC. | ||
391 | |||
392 | config ARCH_MV78XX0 | ||
393 | bool "Marvell MV78xx0" | ||
394 | select PCI | ||
395 | select GENERIC_TIME | ||
396 | select GENERIC_CLOCKEVENTS | ||
397 | select PLAT_ORION | ||
398 | help | ||
399 | Support for the following Marvell MV78xx0 series SoCs: | ||
400 | MV781x0, MV782x0. | ||
401 | |||
368 | config ARCH_MXC | 402 | config ARCH_MXC |
369 | bool "Freescale MXC/iMX-based" | 403 | bool "Freescale MXC/iMX-based" |
370 | select ARCH_MTD_XIP | 404 | select ARCH_MTD_XIP |
@@ -381,7 +415,8 @@ config ARCH_ORION5X | |||
381 | select PLAT_ORION | 415 | select PLAT_ORION |
382 | help | 416 | help |
383 | Support for the following Marvell Orion 5x series SoCs: | 417 | Support for the following Marvell Orion 5x series SoCs: |
384 | Orion-1 (5181), Orion-NAS (5182), Orion-2 (5281.) | 418 | Orion-1 (5181), Orion-VoIP (5181L), Orion-NAS (5182), |
419 | Orion-2 (5281). | ||
385 | 420 | ||
386 | config ARCH_PNX4008 | 421 | config ARCH_PNX4008 |
387 | bool "Philips Nexperia PNX4008 Mobile" | 422 | bool "Philips Nexperia PNX4008 Mobile" |
@@ -406,6 +441,7 @@ config ARCH_RPC | |||
406 | select FIQ | 441 | select FIQ |
407 | select TIMER_ACORN | 442 | select TIMER_ACORN |
408 | select ARCH_MAY_HAVE_PC_FDC | 443 | select ARCH_MAY_HAVE_PC_FDC |
444 | select HAVE_PATA_PLATFORM | ||
409 | select ISA_DMA_API | 445 | select ISA_DMA_API |
410 | select NO_IOPORT | 446 | select NO_IOPORT |
411 | help | 447 | help |
@@ -502,6 +538,10 @@ source "arch/arm/mach-ixp2000/Kconfig" | |||
502 | 538 | ||
503 | source "arch/arm/mach-ixp23xx/Kconfig" | 539 | source "arch/arm/mach-ixp23xx/Kconfig" |
504 | 540 | ||
541 | source "arch/arm/mach-loki/Kconfig" | ||
542 | |||
543 | source "arch/arm/mach-mv78xx0/Kconfig" | ||
544 | |||
505 | source "arch/arm/mach-pxa/Kconfig" | 545 | source "arch/arm/mach-pxa/Kconfig" |
506 | 546 | ||
507 | source "arch/arm/mach-sa1100/Kconfig" | 547 | source "arch/arm/mach-sa1100/Kconfig" |
@@ -514,6 +554,8 @@ source "arch/arm/mach-omap2/Kconfig" | |||
514 | 554 | ||
515 | source "arch/arm/mach-orion5x/Kconfig" | 555 | source "arch/arm/mach-orion5x/Kconfig" |
516 | 556 | ||
557 | source "arch/arm/mach-kirkwood/Kconfig" | ||
558 | |||
517 | source "arch/arm/plat-s3c24xx/Kconfig" | 559 | source "arch/arm/plat-s3c24xx/Kconfig" |
518 | source "arch/arm/plat-s3c/Kconfig" | 560 | source "arch/arm/plat-s3c/Kconfig" |
519 | 561 | ||
@@ -703,27 +745,6 @@ config PREEMPT | |||
703 | Say Y here if you are building a kernel for a desktop, embedded | 745 | Say Y here if you are building a kernel for a desktop, embedded |
704 | or real-time system. Say N if you are unsure. | 746 | or real-time system. Say N if you are unsure. |
705 | 747 | ||
706 | config NO_IDLE_HZ | ||
707 | bool "Dynamic tick timer" | ||
708 | depends on !GENERIC_CLOCKEVENTS | ||
709 | help | ||
710 | Select this option if you want to disable continuous timer ticks | ||
711 | and have them programmed to occur as required. This option saves | ||
712 | power as the system can remain in idle state for longer. | ||
713 | |||
714 | By default dynamic tick is disabled during the boot, and can be | ||
715 | manually enabled with: | ||
716 | |||
717 | echo 1 > /sys/devices/system/timer/timer0/dyn_tick | ||
718 | |||
719 | Alternatively, if you want dynamic tick automatically enabled | ||
720 | during boot, pass "dyntick=enable" via the kernel command string. | ||
721 | |||
722 | Please note that dynamic tick may affect the accuracy of | ||
723 | timekeeping on some platforms depending on the implementation. | ||
724 | Currently at least OMAP, PXA2xx and SA11x0 platforms are known | ||
725 | to have accurate timekeeping with dynamic tick. | ||
726 | |||
727 | config HZ | 748 | config HZ |
728 | int | 749 | int |
729 | default 128 if ARCH_L7200 | 750 | default 128 if ARCH_L7200 |
@@ -789,7 +810,7 @@ source "mm/Kconfig" | |||
789 | 810 | ||
790 | config LEDS | 811 | config LEDS |
791 | bool "Timer and CPU usage LEDs" | 812 | bool "Timer and CPU usage LEDs" |
792 | depends on ARCH_CDB89712 || ARCH_CO285 || ARCH_EBSA110 || \ | 813 | depends on ARCH_CDB89712 || ARCH_EBSA110 || \ |
793 | ARCH_EBSA285 || ARCH_IMX || ARCH_INTEGRATOR || \ | 814 | ARCH_EBSA285 || ARCH_IMX || ARCH_INTEGRATOR || \ |
794 | ARCH_LUBBOCK || MACH_MAINSTONE || ARCH_NETWINDER || \ | 815 | ARCH_LUBBOCK || MACH_MAINSTONE || ARCH_NETWINDER || \ |
795 | ARCH_OMAP || ARCH_P720T || ARCH_PXA_IDP || \ | 816 | ARCH_OMAP || ARCH_P720T || ARCH_PXA_IDP || \ |
diff --git a/arch/arm/Makefile b/arch/arm/Makefile index e72db27e0ba0..91fac81833e8 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile | |||
@@ -100,8 +100,6 @@ textofs-y := 0x00008000 | |||
100 | incdir-$(CONFIG_ARCH_CLPS7500) := cl7500 | 100 | incdir-$(CONFIG_ARCH_CLPS7500) := cl7500 |
101 | machine-$(CONFIG_FOOTBRIDGE) := footbridge | 101 | machine-$(CONFIG_FOOTBRIDGE) := footbridge |
102 | incdir-$(CONFIG_FOOTBRIDGE) := ebsa285 | 102 | incdir-$(CONFIG_FOOTBRIDGE) := ebsa285 |
103 | machine-$(CONFIG_ARCH_CO285) := footbridge | ||
104 | incdir-$(CONFIG_ARCH_CO285) := ebsa285 | ||
105 | machine-$(CONFIG_ARCH_SHARK) := shark | 103 | machine-$(CONFIG_ARCH_SHARK) := shark |
106 | machine-$(CONFIG_ARCH_SA1100) := sa1100 | 104 | machine-$(CONFIG_ARCH_SA1100) := sa1100 |
107 | ifeq ($(CONFIG_ARCH_SA1100),y) | 105 | ifeq ($(CONFIG_ARCH_SA1100),y) |
@@ -135,11 +133,14 @@ endif | |||
135 | machine-$(CONFIG_ARCH_NETX) := netx | 133 | machine-$(CONFIG_ARCH_NETX) := netx |
136 | machine-$(CONFIG_ARCH_NS9XXX) := ns9xxx | 134 | machine-$(CONFIG_ARCH_NS9XXX) := ns9xxx |
137 | machine-$(CONFIG_ARCH_DAVINCI) := davinci | 135 | machine-$(CONFIG_ARCH_DAVINCI) := davinci |
136 | machine-$(CONFIG_ARCH_KIRKWOOD) := kirkwood | ||
138 | machine-$(CONFIG_ARCH_KS8695) := ks8695 | 137 | machine-$(CONFIG_ARCH_KS8695) := ks8695 |
139 | incdir-$(CONFIG_ARCH_MXC) := mxc | 138 | incdir-$(CONFIG_ARCH_MXC) := mxc |
140 | machine-$(CONFIG_ARCH_MX3) := mx3 | 139 | machine-$(CONFIG_ARCH_MX3) := mx3 |
141 | machine-$(CONFIG_ARCH_ORION5X) := orion5x | 140 | machine-$(CONFIG_ARCH_ORION5X) := orion5x |
142 | machine-$(CONFIG_ARCH_MSM7X00A) := msm | 141 | machine-$(CONFIG_ARCH_MSM7X00A) := msm |
142 | machine-$(CONFIG_ARCH_LOKI) := loki | ||
143 | machine-$(CONFIG_ARCH_MV78XX0) := mv78xx0 | ||
143 | 144 | ||
144 | ifeq ($(CONFIG_ARCH_EBSA110),y) | 145 | ifeq ($(CONFIG_ARCH_EBSA110),y) |
145 | # This is what happens if you forget the IOCS16 line. | 146 | # This is what happens if you forget the IOCS16 line. |
@@ -190,8 +191,6 @@ core-$(CONFIG_PLAT_S3C24XX) += arch/arm/plat-s3c24xx/ | |||
190 | core-$(CONFIG_ARCH_MXC) += arch/arm/plat-mxc/ | 191 | core-$(CONFIG_ARCH_MXC) += arch/arm/plat-mxc/ |
191 | 192 | ||
192 | drivers-$(CONFIG_OPROFILE) += arch/arm/oprofile/ | 193 | drivers-$(CONFIG_OPROFILE) += arch/arm/oprofile/ |
193 | drivers-$(CONFIG_ARCH_CLPS7500) += drivers/acorn/char/ | ||
194 | drivers-$(CONFIG_ARCH_L7200) += drivers/acorn/char/ | ||
195 | 194 | ||
196 | libs-y := arch/arm/lib/ $(libs-y) | 195 | libs-y := arch/arm/lib/ $(libs-y) |
197 | 196 | ||
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index 3c2c8f2a1dc4..de41daeab5e9 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S | |||
@@ -623,8 +623,8 @@ proc_types: | |||
623 | b __armv4_mmu_cache_off | 623 | b __armv4_mmu_cache_off |
624 | b __armv4_mmu_cache_flush | 624 | b __armv4_mmu_cache_flush |
625 | 625 | ||
626 | .word 0x56055310 @ Feroceon | 626 | .word 0x56050000 @ Feroceon |
627 | .word 0xfffffff0 | 627 | .word 0xff0f0000 |
628 | b __armv4_mmu_cache_on | 628 | b __armv4_mmu_cache_on |
629 | b __armv4_mmu_cache_off | 629 | b __armv4_mmu_cache_off |
630 | b __armv5tej_mmu_cache_flush | 630 | b __armv5tej_mmu_cache_flush |
diff --git a/arch/arm/common/Makefile b/arch/arm/common/Makefile index 3d0b9fa42f84..325e4b6a6afb 100644 --- a/arch/arm/common/Makefile +++ b/arch/arm/common/Makefile | |||
@@ -2,7 +2,6 @@ | |||
2 | # Makefile for the linux kernel. | 2 | # Makefile for the linux kernel. |
3 | # | 3 | # |
4 | 4 | ||
5 | obj-y += rtctime.o | ||
6 | obj-$(CONFIG_ARM_GIC) += gic.o | 5 | obj-$(CONFIG_ARM_GIC) += gic.o |
7 | obj-$(CONFIG_ARM_VIC) += vic.o | 6 | obj-$(CONFIG_ARM_VIC) += vic.o |
8 | obj-$(CONFIG_ICST525) += icst525.o | 7 | obj-$(CONFIG_ICST525) += icst525.o |
diff --git a/arch/arm/common/rtctime.c b/arch/arm/common/rtctime.c deleted file mode 100644 index aa8f7739c822..000000000000 --- a/arch/arm/common/rtctime.c +++ /dev/null | |||
@@ -1,434 +0,0 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/common/rtctime.c | ||
3 | * | ||
4 | * Copyright (C) 2003 Deep Blue Solutions Ltd. | ||
5 | * Based on sa1100-rtc.c, Nils Faerber, CIH, Nicolas Pitre. | ||
6 | * Based on rtc.c by Paul Gortmaker | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | #include <linux/module.h> | ||
13 | #include <linux/kernel.h> | ||
14 | #include <linux/time.h> | ||
15 | #include <linux/rtc.h> | ||
16 | #include <linux/poll.h> | ||
17 | #include <linux/proc_fs.h> | ||
18 | #include <linux/miscdevice.h> | ||
19 | #include <linux/spinlock.h> | ||
20 | #include <linux/capability.h> | ||
21 | #include <linux/device.h> | ||
22 | #include <linux/mutex.h> | ||
23 | |||
24 | #include <asm/rtc.h> | ||
25 | |||
26 | static DECLARE_WAIT_QUEUE_HEAD(rtc_wait); | ||
27 | static struct fasync_struct *rtc_async_queue; | ||
28 | |||
29 | /* | ||
30 | * rtc_lock protects rtc_irq_data | ||
31 | */ | ||
32 | static DEFINE_SPINLOCK(rtc_lock); | ||
33 | static unsigned long rtc_irq_data; | ||
34 | |||
35 | /* | ||
36 | * rtc_sem protects rtc_inuse and rtc_ops | ||
37 | */ | ||
38 | static DEFINE_MUTEX(rtc_mutex); | ||
39 | static unsigned long rtc_inuse; | ||
40 | static struct rtc_ops *rtc_ops; | ||
41 | |||
42 | #define rtc_epoch 1900UL | ||
43 | |||
44 | /* | ||
45 | * Calculate the next alarm time given the requested alarm time mask | ||
46 | * and the current time. | ||
47 | */ | ||
48 | void rtc_next_alarm_time(struct rtc_time *next, struct rtc_time *now, struct rtc_time *alrm) | ||
49 | { | ||
50 | unsigned long next_time; | ||
51 | unsigned long now_time; | ||
52 | |||
53 | next->tm_year = now->tm_year; | ||
54 | next->tm_mon = now->tm_mon; | ||
55 | next->tm_mday = now->tm_mday; | ||
56 | next->tm_hour = alrm->tm_hour; | ||
57 | next->tm_min = alrm->tm_min; | ||
58 | next->tm_sec = alrm->tm_sec; | ||
59 | |||
60 | rtc_tm_to_time(now, &now_time); | ||
61 | rtc_tm_to_time(next, &next_time); | ||
62 | |||
63 | if (next_time < now_time) { | ||
64 | /* Advance one day */ | ||
65 | next_time += 60 * 60 * 24; | ||
66 | rtc_time_to_tm(next_time, next); | ||
67 | } | ||
68 | } | ||
69 | EXPORT_SYMBOL(rtc_next_alarm_time); | ||
70 | |||
71 | static inline int rtc_arm_read_time(struct rtc_ops *ops, struct rtc_time *tm) | ||
72 | { | ||
73 | memset(tm, 0, sizeof(struct rtc_time)); | ||
74 | return ops->read_time(tm); | ||
75 | } | ||
76 | |||
77 | static inline int rtc_arm_set_time(struct rtc_ops *ops, struct rtc_time *tm) | ||
78 | { | ||
79 | int ret; | ||
80 | |||
81 | ret = rtc_valid_tm(tm); | ||
82 | if (ret == 0) | ||
83 | ret = ops->set_time(tm); | ||
84 | |||
85 | return ret; | ||
86 | } | ||
87 | |||
88 | static inline int rtc_arm_read_alarm(struct rtc_ops *ops, struct rtc_wkalrm *alrm) | ||
89 | { | ||
90 | int ret = -EINVAL; | ||
91 | if (ops->read_alarm) { | ||
92 | memset(alrm, 0, sizeof(struct rtc_wkalrm)); | ||
93 | ret = ops->read_alarm(alrm); | ||
94 | } | ||
95 | return ret; | ||
96 | } | ||
97 | |||
98 | static inline int rtc_arm_set_alarm(struct rtc_ops *ops, struct rtc_wkalrm *alrm) | ||
99 | { | ||
100 | int ret = -EINVAL; | ||
101 | if (ops->set_alarm) | ||
102 | ret = ops->set_alarm(alrm); | ||
103 | return ret; | ||
104 | } | ||
105 | |||
106 | void rtc_update(unsigned long num, unsigned long events) | ||
107 | { | ||
108 | spin_lock(&rtc_lock); | ||
109 | rtc_irq_data = (rtc_irq_data + (num << 8)) | events; | ||
110 | spin_unlock(&rtc_lock); | ||
111 | |||
112 | wake_up_interruptible(&rtc_wait); | ||
113 | kill_fasync(&rtc_async_queue, SIGIO, POLL_IN); | ||
114 | } | ||
115 | EXPORT_SYMBOL(rtc_update); | ||
116 | |||
117 | |||
118 | static ssize_t | ||
119 | rtc_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) | ||
120 | { | ||
121 | DECLARE_WAITQUEUE(wait, current); | ||
122 | unsigned long data; | ||
123 | ssize_t ret; | ||
124 | |||
125 | if (count < sizeof(unsigned long)) | ||
126 | return -EINVAL; | ||
127 | |||
128 | add_wait_queue(&rtc_wait, &wait); | ||
129 | do { | ||
130 | __set_current_state(TASK_INTERRUPTIBLE); | ||
131 | |||
132 | spin_lock_irq(&rtc_lock); | ||
133 | data = rtc_irq_data; | ||
134 | rtc_irq_data = 0; | ||
135 | spin_unlock_irq(&rtc_lock); | ||
136 | |||
137 | if (data != 0) { | ||
138 | ret = 0; | ||
139 | break; | ||
140 | } | ||
141 | if (file->f_flags & O_NONBLOCK) { | ||
142 | ret = -EAGAIN; | ||
143 | break; | ||
144 | } | ||
145 | if (signal_pending(current)) { | ||
146 | ret = -ERESTARTSYS; | ||
147 | break; | ||
148 | } | ||
149 | schedule(); | ||
150 | } while (1); | ||
151 | set_current_state(TASK_RUNNING); | ||
152 | remove_wait_queue(&rtc_wait, &wait); | ||
153 | |||
154 | if (ret == 0) { | ||
155 | ret = put_user(data, (unsigned long __user *)buf); | ||
156 | if (ret == 0) | ||
157 | ret = sizeof(unsigned long); | ||
158 | } | ||
159 | return ret; | ||
160 | } | ||
161 | |||
162 | static unsigned int rtc_poll(struct file *file, poll_table *wait) | ||
163 | { | ||
164 | unsigned long data; | ||
165 | |||
166 | poll_wait(file, &rtc_wait, wait); | ||
167 | |||
168 | spin_lock_irq(&rtc_lock); | ||
169 | data = rtc_irq_data; | ||
170 | spin_unlock_irq(&rtc_lock); | ||
171 | |||
172 | return data != 0 ? POLLIN | POLLRDNORM : 0; | ||
173 | } | ||
174 | |||
175 | static int rtc_ioctl(struct inode *inode, struct file *file, unsigned int cmd, | ||
176 | unsigned long arg) | ||
177 | { | ||
178 | struct rtc_ops *ops = file->private_data; | ||
179 | struct rtc_time tm; | ||
180 | struct rtc_wkalrm alrm; | ||
181 | void __user *uarg = (void __user *)arg; | ||
182 | int ret = -EINVAL; | ||
183 | |||
184 | switch (cmd) { | ||
185 | case RTC_ALM_READ: | ||
186 | ret = rtc_arm_read_alarm(ops, &alrm); | ||
187 | if (ret) | ||
188 | break; | ||
189 | ret = copy_to_user(uarg, &alrm.time, sizeof(tm)); | ||
190 | if (ret) | ||
191 | ret = -EFAULT; | ||
192 | break; | ||
193 | |||
194 | case RTC_ALM_SET: | ||
195 | ret = copy_from_user(&alrm.time, uarg, sizeof(tm)); | ||
196 | if (ret) { | ||
197 | ret = -EFAULT; | ||
198 | break; | ||
199 | } | ||
200 | alrm.enabled = 0; | ||
201 | alrm.pending = 0; | ||
202 | alrm.time.tm_mday = -1; | ||
203 | alrm.time.tm_mon = -1; | ||
204 | alrm.time.tm_year = -1; | ||
205 | alrm.time.tm_wday = -1; | ||
206 | alrm.time.tm_yday = -1; | ||
207 | alrm.time.tm_isdst = -1; | ||
208 | ret = rtc_arm_set_alarm(ops, &alrm); | ||
209 | break; | ||
210 | |||
211 | case RTC_RD_TIME: | ||
212 | ret = rtc_arm_read_time(ops, &tm); | ||
213 | if (ret) | ||
214 | break; | ||
215 | ret = copy_to_user(uarg, &tm, sizeof(tm)); | ||
216 | if (ret) | ||
217 | ret = -EFAULT; | ||
218 | break; | ||
219 | |||
220 | case RTC_SET_TIME: | ||
221 | if (!capable(CAP_SYS_TIME)) { | ||
222 | ret = -EACCES; | ||
223 | break; | ||
224 | } | ||
225 | ret = copy_from_user(&tm, uarg, sizeof(tm)); | ||
226 | if (ret) { | ||
227 | ret = -EFAULT; | ||
228 | break; | ||
229 | } | ||
230 | ret = rtc_arm_set_time(ops, &tm); | ||
231 | break; | ||
232 | |||
233 | case RTC_EPOCH_SET: | ||
234 | #ifndef rtc_epoch | ||
235 | /* | ||
236 | * There were no RTC clocks before 1900. | ||
237 | */ | ||
238 | if (arg < 1900) { | ||
239 | ret = -EINVAL; | ||
240 | break; | ||
241 | } | ||
242 | if (!capable(CAP_SYS_TIME)) { | ||
243 | ret = -EACCES; | ||
244 | break; | ||
245 | } | ||
246 | rtc_epoch = arg; | ||
247 | ret = 0; | ||
248 | #endif | ||
249 | break; | ||
250 | |||
251 | case RTC_EPOCH_READ: | ||
252 | ret = put_user(rtc_epoch, (unsigned long __user *)uarg); | ||
253 | break; | ||
254 | |||
255 | case RTC_WKALM_SET: | ||
256 | ret = copy_from_user(&alrm, uarg, sizeof(alrm)); | ||
257 | if (ret) { | ||
258 | ret = -EFAULT; | ||
259 | break; | ||
260 | } | ||
261 | ret = rtc_arm_set_alarm(ops, &alrm); | ||
262 | break; | ||
263 | |||
264 | case RTC_WKALM_RD: | ||
265 | ret = rtc_arm_read_alarm(ops, &alrm); | ||
266 | if (ret) | ||
267 | break; | ||
268 | ret = copy_to_user(uarg, &alrm, sizeof(alrm)); | ||
269 | if (ret) | ||
270 | ret = -EFAULT; | ||
271 | break; | ||
272 | |||
273 | default: | ||
274 | if (ops->ioctl) | ||
275 | ret = ops->ioctl(cmd, arg); | ||
276 | break; | ||
277 | } | ||
278 | return ret; | ||
279 | } | ||
280 | |||
281 | static int rtc_open(struct inode *inode, struct file *file) | ||
282 | { | ||
283 | int ret; | ||
284 | |||
285 | mutex_lock(&rtc_mutex); | ||
286 | |||
287 | if (rtc_inuse) { | ||
288 | ret = -EBUSY; | ||
289 | } else if (!rtc_ops || !try_module_get(rtc_ops->owner)) { | ||
290 | ret = -ENODEV; | ||
291 | } else { | ||
292 | file->private_data = rtc_ops; | ||
293 | |||
294 | ret = rtc_ops->open ? rtc_ops->open() : 0; | ||
295 | if (ret == 0) { | ||
296 | spin_lock_irq(&rtc_lock); | ||
297 | rtc_irq_data = 0; | ||
298 | spin_unlock_irq(&rtc_lock); | ||
299 | |||
300 | rtc_inuse = 1; | ||
301 | } | ||
302 | } | ||
303 | mutex_unlock(&rtc_mutex); | ||
304 | |||
305 | return ret; | ||
306 | } | ||
307 | |||
308 | static int rtc_release(struct inode *inode, struct file *file) | ||
309 | { | ||
310 | struct rtc_ops *ops = file->private_data; | ||
311 | |||
312 | if (ops->release) | ||
313 | ops->release(); | ||
314 | |||
315 | spin_lock_irq(&rtc_lock); | ||
316 | rtc_irq_data = 0; | ||
317 | spin_unlock_irq(&rtc_lock); | ||
318 | |||
319 | module_put(rtc_ops->owner); | ||
320 | rtc_inuse = 0; | ||
321 | |||
322 | return 0; | ||
323 | } | ||
324 | |||
325 | static int rtc_fasync(int fd, struct file *file, int on) | ||
326 | { | ||
327 | return fasync_helper(fd, file, on, &rtc_async_queue); | ||
328 | } | ||
329 | |||
330 | static const struct file_operations rtc_fops = { | ||
331 | .owner = THIS_MODULE, | ||
332 | .llseek = no_llseek, | ||
333 | .read = rtc_read, | ||
334 | .poll = rtc_poll, | ||
335 | .ioctl = rtc_ioctl, | ||
336 | .open = rtc_open, | ||
337 | .release = rtc_release, | ||
338 | .fasync = rtc_fasync, | ||
339 | }; | ||
340 | |||
341 | static struct miscdevice rtc_miscdev = { | ||
342 | .minor = RTC_MINOR, | ||
343 | .name = "rtc", | ||
344 | .fops = &rtc_fops, | ||
345 | }; | ||
346 | |||
347 | |||
348 | static int rtc_read_proc(char *page, char **start, off_t off, int count, int *eof, void *data) | ||
349 | { | ||
350 | struct rtc_ops *ops = data; | ||
351 | struct rtc_wkalrm alrm; | ||
352 | struct rtc_time tm; | ||
353 | char *p = page; | ||
354 | |||
355 | if (rtc_arm_read_time(ops, &tm) == 0) { | ||
356 | p += sprintf(p, | ||
357 | "rtc_time\t: %02d:%02d:%02d\n" | ||
358 | "rtc_date\t: %04d-%02d-%02d\n" | ||
359 | "rtc_epoch\t: %04lu\n", | ||
360 | tm.tm_hour, tm.tm_min, tm.tm_sec, | ||
361 | tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, | ||
362 | rtc_epoch); | ||
363 | } | ||
364 | |||
365 | if (rtc_arm_read_alarm(ops, &alrm) == 0) { | ||
366 | p += sprintf(p, "alrm_time\t: "); | ||
367 | if ((unsigned int)alrm.time.tm_hour <= 24) | ||
368 | p += sprintf(p, "%02d:", alrm.time.tm_hour); | ||
369 | else | ||
370 | p += sprintf(p, "**:"); | ||
371 | if ((unsigned int)alrm.time.tm_min <= 59) | ||
372 | p += sprintf(p, "%02d:", alrm.time.tm_min); | ||
373 | else | ||
374 | p += sprintf(p, "**:"); | ||
375 | if ((unsigned int)alrm.time.tm_sec <= 59) | ||
376 | p += sprintf(p, "%02d\n", alrm.time.tm_sec); | ||
377 | else | ||
378 | p += sprintf(p, "**\n"); | ||
379 | |||
380 | p += sprintf(p, "alrm_date\t: "); | ||
381 | if ((unsigned int)alrm.time.tm_year <= 200) | ||
382 | p += sprintf(p, "%04d-", alrm.time.tm_year + 1900); | ||
383 | else | ||
384 | p += sprintf(p, "****-"); | ||
385 | if ((unsigned int)alrm.time.tm_mon <= 11) | ||
386 | p += sprintf(p, "%02d-", alrm.time.tm_mon + 1); | ||
387 | else | ||
388 | p += sprintf(p, "**-"); | ||
389 | if ((unsigned int)alrm.time.tm_mday <= 31) | ||
390 | p += sprintf(p, "%02d\n", alrm.time.tm_mday); | ||
391 | else | ||
392 | p += sprintf(p, "**\n"); | ||
393 | p += sprintf(p, "alrm_wakeup\t: %s\n", | ||
394 | alrm.enabled ? "yes" : "no"); | ||
395 | p += sprintf(p, "alrm_pending\t: %s\n", | ||
396 | alrm.pending ? "yes" : "no"); | ||
397 | } | ||
398 | |||
399 | if (ops->proc) | ||
400 | p += ops->proc(p); | ||
401 | |||
402 | return p - page; | ||
403 | } | ||
404 | |||
405 | int register_rtc(struct rtc_ops *ops) | ||
406 | { | ||
407 | int ret = -EBUSY; | ||
408 | |||
409 | mutex_lock(&rtc_mutex); | ||
410 | if (rtc_ops == NULL) { | ||
411 | rtc_ops = ops; | ||
412 | |||
413 | ret = misc_register(&rtc_miscdev); | ||
414 | if (ret == 0) | ||
415 | create_proc_read_entry("driver/rtc", 0, NULL, | ||
416 | rtc_read_proc, ops); | ||
417 | } | ||
418 | mutex_unlock(&rtc_mutex); | ||
419 | |||
420 | return ret; | ||
421 | } | ||
422 | EXPORT_SYMBOL(register_rtc); | ||
423 | |||
424 | void unregister_rtc(struct rtc_ops *rtc) | ||
425 | { | ||
426 | mutex_lock(&rtc_mutex); | ||
427 | if (rtc == rtc_ops) { | ||
428 | remove_proc_entry("driver/rtc", NULL); | ||
429 | misc_deregister(&rtc_miscdev); | ||
430 | rtc_ops = NULL; | ||
431 | } | ||
432 | mutex_unlock(&rtc_mutex); | ||
433 | } | ||
434 | EXPORT_SYMBOL(unregister_rtc); | ||
diff --git a/arch/arm/configs/at91cap9adk_defconfig b/arch/arm/configs/at91cap9adk_defconfig index e32e73648129..be2b2f38fd94 100644 --- a/arch/arm/configs/at91cap9adk_defconfig +++ b/arch/arm/configs/at91cap9adk_defconfig | |||
@@ -213,7 +213,6 @@ CONFIG_CPU_CP15_MMU=y | |||
213 | # | 213 | # |
214 | # CONFIG_TICK_ONESHOT is not set | 214 | # CONFIG_TICK_ONESHOT is not set |
215 | # CONFIG_PREEMPT is not set | 215 | # CONFIG_PREEMPT is not set |
216 | # CONFIG_NO_IDLE_HZ is not set | ||
217 | CONFIG_HZ=100 | 216 | CONFIG_HZ=100 |
218 | CONFIG_AEABI=y | 217 | CONFIG_AEABI=y |
219 | CONFIG_OABI_COMPAT=y | 218 | CONFIG_OABI_COMPAT=y |
@@ -907,7 +906,32 @@ CONFIG_USB_MON=y | |||
907 | # | 906 | # |
908 | # USB Gadget Support | 907 | # USB Gadget Support |
909 | # | 908 | # |
910 | # CONFIG_USB_GADGET is not set | 909 | CONFIG_USB_GADGET=y |
910 | # CONFIG_USB_GADGET_DEBUG is not set | ||
911 | # CONFIG_USB_GADGET_DEBUG_FILES is not set | ||
912 | CONFIG_USB_GADGET_SELECTED=y | ||
913 | # CONFIG_USB_GADGET_AMD5536UDC is not set | ||
914 | CONFIG_USB_GADGET_ATMEL_USBA=y | ||
915 | CONFIG_USB_ATMEL_USBA=y | ||
916 | # CONFIG_USB_GADGET_FSL_USB2 is not set | ||
917 | # CONFIG_USB_GADGET_NET2280 is not set | ||
918 | # CONFIG_USB_GADGET_PXA2XX is not set | ||
919 | # CONFIG_USB_GADGET_M66592 is not set | ||
920 | # CONFIG_USB_GADGET_GOKU is not set | ||
921 | # CONFIG_USB_GADGET_LH7A40X is not set | ||
922 | # CONFIG_USB_GADGET_OMAP is not set | ||
923 | # CONFIG_USB_GADGET_S3C2410 is not set | ||
924 | # CONFIG_USB_GADGET_AT91 is not set | ||
925 | # CONFIG_USB_GADGET_DUMMY_HCD is not set | ||
926 | CONFIG_USB_GADGET_DUALSPEED=y | ||
927 | # CONFIG_USB_ZERO is not set | ||
928 | CONFIG_USB_ETH=m | ||
929 | CONFIG_USB_ETH_RNDIS=y | ||
930 | # CONFIG_USB_GADGETFS is not set | ||
931 | CONFIG_USB_FILE_STORAGE=m | ||
932 | # CONFIG_USB_FILE_STORAGE_TEST is not set | ||
933 | # CONFIG_USB_G_SERIAL is not set | ||
934 | # CONFIG_USB_MIDI_GADGET is not set | ||
911 | CONFIG_MMC=y | 935 | CONFIG_MMC=y |
912 | # CONFIG_MMC_DEBUG is not set | 936 | # CONFIG_MMC_DEBUG is not set |
913 | # CONFIG_MMC_UNSAFE_RESUME is not set | 937 | # CONFIG_MMC_UNSAFE_RESUME is not set |
@@ -926,7 +950,59 @@ CONFIG_MMC_AT91=y | |||
926 | # CONFIG_MMC_SPI is not set | 950 | # CONFIG_MMC_SPI is not set |
927 | # CONFIG_NEW_LEDS is not set | 951 | # CONFIG_NEW_LEDS is not set |
928 | CONFIG_RTC_LIB=y | 952 | CONFIG_RTC_LIB=y |
929 | # CONFIG_RTC_CLASS is not set | 953 | CONFIG_RTC_CLASS=y |
954 | CONFIG_RTC_HCTOSYS=y | ||
955 | CONFIG_RTC_HCTOSYS_DEVICE="rtc0" | ||
956 | # CONFIG_RTC_DEBUG is not set | ||
957 | |||
958 | # | ||
959 | # RTC interfaces | ||
960 | # | ||
961 | CONFIG_RTC_INTF_SYSFS=y | ||
962 | CONFIG_RTC_INTF_PROC=y | ||
963 | CONFIG_RTC_INTF_DEV=y | ||
964 | # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set | ||
965 | # CONFIG_RTC_DRV_TEST is not set | ||
966 | |||
967 | # | ||
968 | # I2C RTC drivers | ||
969 | # | ||
970 | # CONFIG_RTC_DRV_DS1307 is not set | ||
971 | # CONFIG_RTC_DRV_DS1374 is not set | ||
972 | # CONFIG_RTC_DRV_DS1672 is not set | ||
973 | # CONFIG_RTC_DRV_MAX6900 is not set | ||
974 | # CONFIG_RTC_DRV_RS5C372 is not set | ||
975 | # CONFIG_RTC_DRV_ISL1208 is not set | ||
976 | # CONFIG_RTC_DRV_X1205 is not set | ||
977 | # CONFIG_RTC_DRV_PCF8563 is not set | ||
978 | # CONFIG_RTC_DRV_PCF8583 is not set | ||
979 | # CONFIG_RTC_DRV_M41T80 is not set | ||
980 | |||
981 | # | ||
982 | # SPI RTC drivers | ||
983 | # | ||
984 | # CONFIG_RTC_DRV_MAX6902 is not set | ||
985 | # CONFIG_RTC_DRV_R9701 is not set | ||
986 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
987 | |||
988 | # | ||
989 | # Platform RTC drivers | ||
990 | # | ||
991 | # CONFIG_RTC_DRV_CMOS is not set | ||
992 | # CONFIG_RTC_DRV_DS1511 is not set | ||
993 | # CONFIG_RTC_DRV_DS1553 is not set | ||
994 | # CONFIG_RTC_DRV_DS1742 is not set | ||
995 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
996 | # CONFIG_RTC_DRV_M48T86 is not set | ||
997 | # CONFIG_RTC_DRV_M48T59 is not set | ||
998 | # CONFIG_RTC_DRV_V3020 is not set | ||
999 | |||
1000 | # | ||
1001 | # on-CPU RTC drivers | ||
1002 | # | ||
1003 | CONFIG_RTC_DRV_AT91SAM9=y | ||
1004 | CONFIG_RTC_DRV_AT91SAM9_RTT=0 | ||
1005 | CONFIG_RTC_DRV_AT91SAM9_GPBR=0 | ||
930 | 1006 | ||
931 | # | 1007 | # |
932 | # File systems | 1008 | # File systems |
diff --git a/arch/arm/configs/at91rm9200dk_defconfig b/arch/arm/configs/at91rm9200dk_defconfig index 2dbbbc3d4ac3..868fb7b9530b 100644 --- a/arch/arm/configs/at91rm9200dk_defconfig +++ b/arch/arm/configs/at91rm9200dk_defconfig | |||
@@ -169,7 +169,6 @@ CONFIG_AT91_CF=y | |||
169 | # Kernel Features | 169 | # Kernel Features |
170 | # | 170 | # |
171 | # CONFIG_PREEMPT is not set | 171 | # CONFIG_PREEMPT is not set |
172 | # CONFIG_NO_IDLE_HZ is not set | ||
173 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 172 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
174 | CONFIG_SELECT_MEMORY_MODEL=y | 173 | CONFIG_SELECT_MEMORY_MODEL=y |
175 | CONFIG_FLATMEM_MANUAL=y | 174 | CONFIG_FLATMEM_MANUAL=y |
diff --git a/arch/arm/configs/at91rm9200ek_defconfig b/arch/arm/configs/at91rm9200ek_defconfig index 6e994f7820c6..de43fc675616 100644 --- a/arch/arm/configs/at91rm9200ek_defconfig +++ b/arch/arm/configs/at91rm9200ek_defconfig | |||
@@ -160,7 +160,6 @@ CONFIG_ISA_DMA_API=y | |||
160 | # Kernel Features | 160 | # Kernel Features |
161 | # | 161 | # |
162 | # CONFIG_PREEMPT is not set | 162 | # CONFIG_PREEMPT is not set |
163 | # CONFIG_NO_IDLE_HZ is not set | ||
164 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 163 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
165 | CONFIG_SELECT_MEMORY_MODEL=y | 164 | CONFIG_SELECT_MEMORY_MODEL=y |
166 | CONFIG_FLATMEM_MANUAL=y | 165 | CONFIG_FLATMEM_MANUAL=y |
diff --git a/arch/arm/configs/at91sam9260ek_defconfig b/arch/arm/configs/at91sam9260ek_defconfig index f659c938473f..2011adfa6758 100644 --- a/arch/arm/configs/at91sam9260ek_defconfig +++ b/arch/arm/configs/at91sam9260ek_defconfig | |||
@@ -220,7 +220,6 @@ CONFIG_CPU_CP15_MMU=y | |||
220 | # | 220 | # |
221 | # CONFIG_TICK_ONESHOT is not set | 221 | # CONFIG_TICK_ONESHOT is not set |
222 | # CONFIG_PREEMPT is not set | 222 | # CONFIG_PREEMPT is not set |
223 | # CONFIG_NO_IDLE_HZ is not set | ||
224 | CONFIG_HZ=100 | 223 | CONFIG_HZ=100 |
225 | # CONFIG_AEABI is not set | 224 | # CONFIG_AEABI is not set |
226 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 225 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/configs/at91sam9261ek_defconfig b/arch/arm/configs/at91sam9261ek_defconfig index 3802e85f7483..4049768962d2 100644 --- a/arch/arm/configs/at91sam9261ek_defconfig +++ b/arch/arm/configs/at91sam9261ek_defconfig | |||
@@ -213,7 +213,6 @@ CONFIG_CPU_CP15_MMU=y | |||
213 | # | 213 | # |
214 | # CONFIG_TICK_ONESHOT is not set | 214 | # CONFIG_TICK_ONESHOT is not set |
215 | # CONFIG_PREEMPT is not set | 215 | # CONFIG_PREEMPT is not set |
216 | # CONFIG_NO_IDLE_HZ is not set | ||
217 | CONFIG_HZ=100 | 216 | CONFIG_HZ=100 |
218 | # CONFIG_AEABI is not set | 217 | # CONFIG_AEABI is not set |
219 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 218 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/configs/at91sam9263ek_defconfig b/arch/arm/configs/at91sam9263ek_defconfig index 32a0d74e0c89..fa1c5aecb5a8 100644 --- a/arch/arm/configs/at91sam9263ek_defconfig +++ b/arch/arm/configs/at91sam9263ek_defconfig | |||
@@ -213,7 +213,6 @@ CONFIG_CPU_CP15_MMU=y | |||
213 | # | 213 | # |
214 | # CONFIG_TICK_ONESHOT is not set | 214 | # CONFIG_TICK_ONESHOT is not set |
215 | # CONFIG_PREEMPT is not set | 215 | # CONFIG_PREEMPT is not set |
216 | # CONFIG_NO_IDLE_HZ is not set | ||
217 | CONFIG_HZ=100 | 216 | CONFIG_HZ=100 |
218 | # CONFIG_AEABI is not set | 217 | # CONFIG_AEABI is not set |
219 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 218 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/configs/at91sam9g20ek_defconfig b/arch/arm/configs/at91sam9g20ek_defconfig new file mode 100644 index 000000000000..c06863847364 --- /dev/null +++ b/arch/arm/configs/at91sam9g20ek_defconfig | |||
@@ -0,0 +1,1168 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.24 | ||
4 | # Tue Jun 10 15:51:52 2008 | ||
5 | # | ||
6 | CONFIG_ARM=y | ||
7 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y | ||
8 | CONFIG_GENERIC_GPIO=y | ||
9 | CONFIG_GENERIC_TIME=y | ||
10 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
11 | CONFIG_MMU=y | ||
12 | # CONFIG_NO_IOPORT is not set | ||
13 | CONFIG_GENERIC_HARDIRQS=y | ||
14 | CONFIG_STACKTRACE_SUPPORT=y | ||
15 | CONFIG_LOCKDEP_SUPPORT=y | ||
16 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
17 | CONFIG_HARDIRQS_SW_RESEND=y | ||
18 | CONFIG_GENERIC_IRQ_PROBE=y | ||
19 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
20 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | ||
21 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | ||
22 | CONFIG_GENERIC_HWEIGHT=y | ||
23 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
24 | CONFIG_ZONE_DMA=y | ||
25 | CONFIG_VECTORS_BASE=0xffff0000 | ||
26 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
27 | |||
28 | # | ||
29 | # General setup | ||
30 | # | ||
31 | CONFIG_EXPERIMENTAL=y | ||
32 | CONFIG_BROKEN_ON_SMP=y | ||
33 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
34 | CONFIG_LOCALVERSION="" | ||
35 | # CONFIG_LOCALVERSION_AUTO is not set | ||
36 | # CONFIG_SWAP is not set | ||
37 | CONFIG_SYSVIPC=y | ||
38 | CONFIG_SYSVIPC_SYSCTL=y | ||
39 | # CONFIG_POSIX_MQUEUE is not set | ||
40 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
41 | # CONFIG_TASKSTATS is not set | ||
42 | # CONFIG_USER_NS is not set | ||
43 | # CONFIG_PID_NS is not set | ||
44 | # CONFIG_AUDIT is not set | ||
45 | # CONFIG_IKCONFIG is not set | ||
46 | CONFIG_LOG_BUF_SHIFT=14 | ||
47 | # CONFIG_CGROUPS is not set | ||
48 | # CONFIG_FAIR_GROUP_SCHED is not set | ||
49 | CONFIG_SYSFS_DEPRECATED=y | ||
50 | # CONFIG_RELAY is not set | ||
51 | CONFIG_BLK_DEV_INITRD=y | ||
52 | CONFIG_INITRAMFS_SOURCE="" | ||
53 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
54 | CONFIG_SYSCTL=y | ||
55 | # CONFIG_EMBEDDED is not set | ||
56 | CONFIG_UID16=y | ||
57 | CONFIG_SYSCTL_SYSCALL=y | ||
58 | CONFIG_KALLSYMS=y | ||
59 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
60 | CONFIG_HOTPLUG=y | ||
61 | CONFIG_PRINTK=y | ||
62 | CONFIG_BUG=y | ||
63 | CONFIG_ELF_CORE=y | ||
64 | CONFIG_BASE_FULL=y | ||
65 | CONFIG_FUTEX=y | ||
66 | CONFIG_ANON_INODES=y | ||
67 | CONFIG_EPOLL=y | ||
68 | CONFIG_SIGNALFD=y | ||
69 | CONFIG_EVENTFD=y | ||
70 | CONFIG_SHMEM=y | ||
71 | CONFIG_VM_EVENT_COUNTERS=y | ||
72 | CONFIG_SLAB=y | ||
73 | # CONFIG_SLUB is not set | ||
74 | # CONFIG_SLOB is not set | ||
75 | CONFIG_SLABINFO=y | ||
76 | CONFIG_RT_MUTEXES=y | ||
77 | # CONFIG_TINY_SHMEM is not set | ||
78 | CONFIG_BASE_SMALL=0 | ||
79 | CONFIG_MODULES=y | ||
80 | CONFIG_MODULE_UNLOAD=y | ||
81 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
82 | # CONFIG_MODVERSIONS is not set | ||
83 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
84 | CONFIG_KMOD=y | ||
85 | CONFIG_BLOCK=y | ||
86 | # CONFIG_LBD is not set | ||
87 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
88 | # CONFIG_LSF is not set | ||
89 | # CONFIG_BLK_DEV_BSG is not set | ||
90 | |||
91 | # | ||
92 | # IO Schedulers | ||
93 | # | ||
94 | CONFIG_IOSCHED_NOOP=y | ||
95 | CONFIG_IOSCHED_AS=y | ||
96 | # CONFIG_IOSCHED_DEADLINE is not set | ||
97 | # CONFIG_IOSCHED_CFQ is not set | ||
98 | CONFIG_DEFAULT_AS=y | ||
99 | # CONFIG_DEFAULT_DEADLINE is not set | ||
100 | # CONFIG_DEFAULT_CFQ is not set | ||
101 | # CONFIG_DEFAULT_NOOP is not set | ||
102 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
103 | |||
104 | # | ||
105 | # System Type | ||
106 | # | ||
107 | # CONFIG_ARCH_AAEC2000 is not set | ||
108 | # CONFIG_ARCH_INTEGRATOR is not set | ||
109 | # CONFIG_ARCH_REALVIEW is not set | ||
110 | # CONFIG_ARCH_VERSATILE is not set | ||
111 | CONFIG_ARCH_AT91=y | ||
112 | # CONFIG_ARCH_CLPS7500 is not set | ||
113 | # CONFIG_ARCH_CLPS711X is not set | ||
114 | # CONFIG_ARCH_CO285 is not set | ||
115 | # CONFIG_ARCH_EBSA110 is not set | ||
116 | # CONFIG_ARCH_EP93XX is not set | ||
117 | # CONFIG_ARCH_FOOTBRIDGE is not set | ||
118 | # CONFIG_ARCH_NETX is not set | ||
119 | # CONFIG_ARCH_H720X is not set | ||
120 | # CONFIG_ARCH_IMX is not set | ||
121 | # CONFIG_ARCH_IOP13XX is not set | ||
122 | # CONFIG_ARCH_IOP32X is not set | ||
123 | # CONFIG_ARCH_IOP33X is not set | ||
124 | # CONFIG_ARCH_IXP23XX is not set | ||
125 | # CONFIG_ARCH_IXP2000 is not set | ||
126 | # CONFIG_ARCH_IXP4XX is not set | ||
127 | # CONFIG_ARCH_L7200 is not set | ||
128 | # CONFIG_ARCH_KS8695 is not set | ||
129 | # CONFIG_ARCH_NS9XXX is not set | ||
130 | # CONFIG_ARCH_MXC is not set | ||
131 | # CONFIG_ARCH_PNX4008 is not set | ||
132 | # CONFIG_ARCH_PXA is not set | ||
133 | # CONFIG_ARCH_RPC is not set | ||
134 | # CONFIG_ARCH_SA1100 is not set | ||
135 | # CONFIG_ARCH_S3C2410 is not set | ||
136 | # CONFIG_ARCH_SHARK is not set | ||
137 | # CONFIG_ARCH_LH7A40X is not set | ||
138 | # CONFIG_ARCH_DAVINCI is not set | ||
139 | # CONFIG_ARCH_OMAP is not set | ||
140 | |||
141 | # | ||
142 | # Boot options | ||
143 | # | ||
144 | |||
145 | # | ||
146 | # Power management | ||
147 | # | ||
148 | |||
149 | # | ||
150 | # Atmel AT91 System-on-Chip | ||
151 | # | ||
152 | # CONFIG_ARCH_AT91RM9200 is not set | ||
153 | # CONFIG_ARCH_AT91SAM9260 is not set | ||
154 | # CONFIG_ARCH_AT91SAM9261 is not set | ||
155 | # CONFIG_ARCH_AT91SAM9263 is not set | ||
156 | # CONFIG_ARCH_AT91SAM9RL is not set | ||
157 | CONFIG_ARCH_AT91SAM9G20=y | ||
158 | # CONFIG_ARCH_AT91CAP9 is not set | ||
159 | # CONFIG_ARCH_AT91X40 is not set | ||
160 | CONFIG_AT91_PMC_UNIT=y | ||
161 | |||
162 | # | ||
163 | # AT91SAM9G20 Board Type | ||
164 | # | ||
165 | CONFIG_MACH_AT91SAM9G20EK=y | ||
166 | |||
167 | # | ||
168 | # AT91 Board Options | ||
169 | # | ||
170 | # CONFIG_MTD_AT91_DATAFLASH_CARD is not set | ||
171 | # CONFIG_MTD_NAND_AT91_BUSWIDTH_16 is not set | ||
172 | |||
173 | # | ||
174 | # AT91 Feature Selections | ||
175 | # | ||
176 | CONFIG_AT91_PROGRAMMABLE_CLOCKS=y | ||
177 | # CONFIG_AT91_SLOW_CLOCK is not set | ||
178 | CONFIG_AT91_TIMER_HZ=100 | ||
179 | CONFIG_AT91_EARLY_DBGU=y | ||
180 | # CONFIG_AT91_EARLY_USART0 is not set | ||
181 | # CONFIG_AT91_EARLY_USART1 is not set | ||
182 | # CONFIG_AT91_EARLY_USART2 is not set | ||
183 | # CONFIG_AT91_EARLY_USART3 is not set | ||
184 | # CONFIG_AT91_EARLY_USART4 is not set | ||
185 | # CONFIG_AT91_EARLY_USART5 is not set | ||
186 | |||
187 | # | ||
188 | # Processor Type | ||
189 | # | ||
190 | CONFIG_CPU_32=y | ||
191 | CONFIG_CPU_ARM926T=y | ||
192 | CONFIG_CPU_32v5=y | ||
193 | CONFIG_CPU_ABRT_EV5TJ=y | ||
194 | CONFIG_CPU_CACHE_VIVT=y | ||
195 | CONFIG_CPU_COPY_V4WB=y | ||
196 | CONFIG_CPU_TLB_V4WBI=y | ||
197 | CONFIG_CPU_CP15=y | ||
198 | CONFIG_CPU_CP15_MMU=y | ||
199 | |||
200 | # | ||
201 | # Processor Features | ||
202 | # | ||
203 | # CONFIG_ARM_THUMB is not set | ||
204 | # CONFIG_CPU_ICACHE_DISABLE is not set | ||
205 | # CONFIG_CPU_DCACHE_DISABLE is not set | ||
206 | # CONFIG_CPU_DCACHE_WRITETHROUGH is not set | ||
207 | # CONFIG_CPU_CACHE_ROUND_ROBIN is not set | ||
208 | # CONFIG_OUTER_CACHE is not set | ||
209 | |||
210 | # | ||
211 | # Bus support | ||
212 | # | ||
213 | # CONFIG_PCI_SYSCALL is not set | ||
214 | # CONFIG_ARCH_SUPPORTS_MSI is not set | ||
215 | # CONFIG_PCCARD is not set | ||
216 | |||
217 | # | ||
218 | # Kernel Features | ||
219 | # | ||
220 | # CONFIG_TICK_ONESHOT is not set | ||
221 | # CONFIG_NO_HZ is not set | ||
222 | # CONFIG_HIGH_RES_TIMERS is not set | ||
223 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
224 | # CONFIG_PREEMPT is not set | ||
225 | CONFIG_HZ=100 | ||
226 | CONFIG_AEABI=y | ||
227 | CONFIG_OABI_COMPAT=y | ||
228 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | ||
229 | CONFIG_SELECT_MEMORY_MODEL=y | ||
230 | CONFIG_FLATMEM_MANUAL=y | ||
231 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
232 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
233 | CONFIG_FLATMEM=y | ||
234 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
235 | # CONFIG_SPARSEMEM_STATIC is not set | ||
236 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
237 | CONFIG_SPLIT_PTLOCK_CPUS=4096 | ||
238 | # CONFIG_RESOURCES_64BIT is not set | ||
239 | CONFIG_ZONE_DMA_FLAG=1 | ||
240 | CONFIG_BOUNCE=y | ||
241 | CONFIG_VIRT_TO_BUS=y | ||
242 | CONFIG_LEDS=y | ||
243 | CONFIG_LEDS_CPU=y | ||
244 | CONFIG_ALIGNMENT_TRAP=y | ||
245 | |||
246 | # | ||
247 | # Boot options | ||
248 | # | ||
249 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
250 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
251 | CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw" | ||
252 | # CONFIG_XIP_KERNEL is not set | ||
253 | # CONFIG_KEXEC is not set | ||
254 | |||
255 | # | ||
256 | # Floating point emulation | ||
257 | # | ||
258 | |||
259 | # | ||
260 | # At least one emulation must be selected | ||
261 | # | ||
262 | CONFIG_FPE_NWFPE=y | ||
263 | # CONFIG_FPE_NWFPE_XP is not set | ||
264 | # CONFIG_FPE_FASTFPE is not set | ||
265 | # CONFIG_VFP is not set | ||
266 | |||
267 | # | ||
268 | # Userspace binary formats | ||
269 | # | ||
270 | CONFIG_BINFMT_ELF=y | ||
271 | # CONFIG_BINFMT_AOUT is not set | ||
272 | # CONFIG_BINFMT_MISC is not set | ||
273 | |||
274 | # | ||
275 | # Power management options | ||
276 | # | ||
277 | CONFIG_PM=y | ||
278 | # CONFIG_PM_LEGACY is not set | ||
279 | # CONFIG_PM_DEBUG is not set | ||
280 | CONFIG_PM_SLEEP=y | ||
281 | CONFIG_SUSPEND_UP_POSSIBLE=y | ||
282 | CONFIG_SUSPEND=y | ||
283 | # CONFIG_APM_EMULATION is not set | ||
284 | |||
285 | # | ||
286 | # Networking | ||
287 | # | ||
288 | CONFIG_NET=y | ||
289 | |||
290 | # | ||
291 | # Networking options | ||
292 | # | ||
293 | CONFIG_PACKET=y | ||
294 | # CONFIG_PACKET_MMAP is not set | ||
295 | CONFIG_UNIX=y | ||
296 | # CONFIG_NET_KEY is not set | ||
297 | CONFIG_INET=y | ||
298 | # CONFIG_IP_MULTICAST is not set | ||
299 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
300 | CONFIG_IP_FIB_HASH=y | ||
301 | CONFIG_IP_PNP=y | ||
302 | # CONFIG_IP_PNP_DHCP is not set | ||
303 | CONFIG_IP_PNP_BOOTP=y | ||
304 | # CONFIG_IP_PNP_RARP is not set | ||
305 | # CONFIG_NET_IPIP is not set | ||
306 | # CONFIG_NET_IPGRE is not set | ||
307 | # CONFIG_ARPD is not set | ||
308 | # CONFIG_SYN_COOKIES is not set | ||
309 | # CONFIG_INET_AH is not set | ||
310 | # CONFIG_INET_ESP is not set | ||
311 | # CONFIG_INET_IPCOMP is not set | ||
312 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
313 | # CONFIG_INET_TUNNEL is not set | ||
314 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||
315 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||
316 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
317 | # CONFIG_INET_LRO is not set | ||
318 | CONFIG_INET_DIAG=y | ||
319 | CONFIG_INET_TCP_DIAG=y | ||
320 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
321 | CONFIG_TCP_CONG_CUBIC=y | ||
322 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
323 | # CONFIG_TCP_MD5SIG is not set | ||
324 | # CONFIG_IPV6 is not set | ||
325 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
326 | # CONFIG_INET6_TUNNEL is not set | ||
327 | # CONFIG_NETWORK_SECMARK is not set | ||
328 | # CONFIG_NETFILTER is not set | ||
329 | # CONFIG_IP_DCCP is not set | ||
330 | # CONFIG_IP_SCTP is not set | ||
331 | # CONFIG_TIPC is not set | ||
332 | # CONFIG_ATM is not set | ||
333 | # CONFIG_BRIDGE is not set | ||
334 | # CONFIG_VLAN_8021Q is not set | ||
335 | # CONFIG_DECNET is not set | ||
336 | # CONFIG_LLC2 is not set | ||
337 | # CONFIG_IPX is not set | ||
338 | # CONFIG_ATALK is not set | ||
339 | # CONFIG_X25 is not set | ||
340 | # CONFIG_LAPB is not set | ||
341 | # CONFIG_ECONET is not set | ||
342 | # CONFIG_WAN_ROUTER is not set | ||
343 | # CONFIG_NET_SCHED is not set | ||
344 | |||
345 | # | ||
346 | # Network testing | ||
347 | # | ||
348 | # CONFIG_NET_PKTGEN is not set | ||
349 | # CONFIG_HAMRADIO is not set | ||
350 | # CONFIG_IRDA is not set | ||
351 | # CONFIG_BT is not set | ||
352 | # CONFIG_AF_RXRPC is not set | ||
353 | |||
354 | # | ||
355 | # Wireless | ||
356 | # | ||
357 | # CONFIG_CFG80211 is not set | ||
358 | # CONFIG_WIRELESS_EXT is not set | ||
359 | # CONFIG_MAC80211 is not set | ||
360 | # CONFIG_IEEE80211 is not set | ||
361 | # CONFIG_RFKILL is not set | ||
362 | # CONFIG_NET_9P is not set | ||
363 | |||
364 | # | ||
365 | # Device Drivers | ||
366 | # | ||
367 | |||
368 | # | ||
369 | # Generic Driver Options | ||
370 | # | ||
371 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
372 | CONFIG_STANDALONE=y | ||
373 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
374 | # CONFIG_FW_LOADER is not set | ||
375 | # CONFIG_SYS_HYPERVISOR is not set | ||
376 | # CONFIG_CONNECTOR is not set | ||
377 | CONFIG_MTD=y | ||
378 | # CONFIG_MTD_DEBUG is not set | ||
379 | CONFIG_MTD_CONCAT=y | ||
380 | CONFIG_MTD_PARTITIONS=y | ||
381 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
382 | CONFIG_MTD_CMDLINE_PARTS=y | ||
383 | # CONFIG_MTD_AFS_PARTS is not set | ||
384 | |||
385 | # | ||
386 | # User Modules And Translation Layers | ||
387 | # | ||
388 | CONFIG_MTD_CHAR=y | ||
389 | CONFIG_MTD_BLKDEVS=y | ||
390 | CONFIG_MTD_BLOCK=y | ||
391 | # CONFIG_FTL is not set | ||
392 | # CONFIG_NFTL is not set | ||
393 | # CONFIG_INFTL is not set | ||
394 | # CONFIG_RFD_FTL is not set | ||
395 | # CONFIG_SSFDC is not set | ||
396 | # CONFIG_MTD_OOPS is not set | ||
397 | |||
398 | # | ||
399 | # RAM/ROM/Flash chip drivers | ||
400 | # | ||
401 | # CONFIG_MTD_CFI is not set | ||
402 | # CONFIG_MTD_JEDECPROBE is not set | ||
403 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
404 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
405 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
406 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
407 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
408 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
409 | CONFIG_MTD_CFI_I1=y | ||
410 | CONFIG_MTD_CFI_I2=y | ||
411 | # CONFIG_MTD_CFI_I4 is not set | ||
412 | # CONFIG_MTD_CFI_I8 is not set | ||
413 | # CONFIG_MTD_RAM is not set | ||
414 | # CONFIG_MTD_ROM is not set | ||
415 | # CONFIG_MTD_ABSENT is not set | ||
416 | |||
417 | # | ||
418 | # Mapping drivers for chip access | ||
419 | # | ||
420 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
421 | # CONFIG_MTD_PLATRAM is not set | ||
422 | |||
423 | # | ||
424 | # Self-contained MTD device drivers | ||
425 | # | ||
426 | CONFIG_MTD_DATAFLASH=y | ||
427 | # CONFIG_MTD_M25P80 is not set | ||
428 | # CONFIG_MTD_SLRAM is not set | ||
429 | # CONFIG_MTD_PHRAM is not set | ||
430 | # CONFIG_MTD_MTDRAM is not set | ||
431 | # CONFIG_MTD_BLOCK2MTD is not set | ||
432 | |||
433 | # | ||
434 | # Disk-On-Chip Device Drivers | ||
435 | # | ||
436 | # CONFIG_MTD_DOC2000 is not set | ||
437 | # CONFIG_MTD_DOC2001 is not set | ||
438 | # CONFIG_MTD_DOC2001PLUS is not set | ||
439 | CONFIG_MTD_NAND=y | ||
440 | # CONFIG_MTD_NAND_VERIFY_WRITE is not set | ||
441 | # CONFIG_MTD_NAND_ECC_SMC is not set | ||
442 | # CONFIG_MTD_NAND_MUSEUM_IDS is not set | ||
443 | CONFIG_MTD_NAND_IDS=y | ||
444 | # CONFIG_MTD_NAND_DISKONCHIP is not set | ||
445 | CONFIG_MTD_NAND_AT91=y | ||
446 | CONFIG_MTD_NAND_AT91_ECC_SOFT=y | ||
447 | # CONFIG_MTD_NAND_AT91_ECC_HW is not set | ||
448 | # CONFIG_MTD_NAND_AT91_ECC_NONE is not set | ||
449 | # CONFIG_MTD_NAND_NANDSIM is not set | ||
450 | # CONFIG_MTD_NAND_PLATFORM is not set | ||
451 | # CONFIG_MTD_ALAUDA is not set | ||
452 | # CONFIG_MTD_ONENAND is not set | ||
453 | |||
454 | # | ||
455 | # UBI - Unsorted block images | ||
456 | # | ||
457 | # CONFIG_MTD_UBI is not set | ||
458 | # CONFIG_PARPORT is not set | ||
459 | CONFIG_BLK_DEV=y | ||
460 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
461 | CONFIG_BLK_DEV_LOOP=y | ||
462 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
463 | # CONFIG_BLK_DEV_NBD is not set | ||
464 | # CONFIG_BLK_DEV_UB is not set | ||
465 | CONFIG_BLK_DEV_RAM=y | ||
466 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
467 | CONFIG_BLK_DEV_RAM_SIZE=8192 | ||
468 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | ||
469 | # CONFIG_CDROM_PKTCDVD is not set | ||
470 | # CONFIG_ATA_OVER_ETH is not set | ||
471 | CONFIG_MISC_DEVICES=y | ||
472 | CONFIG_ATMEL_PWM=y | ||
473 | # CONFIG_EEPROM_93CX6 is not set | ||
474 | CONFIG_ATMEL_SSC=y | ||
475 | |||
476 | # | ||
477 | # SCSI device support | ||
478 | # | ||
479 | # CONFIG_RAID_ATTRS is not set | ||
480 | CONFIG_SCSI=y | ||
481 | CONFIG_SCSI_DMA=y | ||
482 | # CONFIG_SCSI_TGT is not set | ||
483 | # CONFIG_SCSI_NETLINK is not set | ||
484 | CONFIG_SCSI_PROC_FS=y | ||
485 | |||
486 | # | ||
487 | # SCSI support type (disk, tape, CD-ROM) | ||
488 | # | ||
489 | CONFIG_BLK_DEV_SD=y | ||
490 | # CONFIG_CHR_DEV_ST is not set | ||
491 | # CONFIG_CHR_DEV_OSST is not set | ||
492 | # CONFIG_BLK_DEV_SR is not set | ||
493 | # CONFIG_CHR_DEV_SG is not set | ||
494 | # CONFIG_CHR_DEV_SCH is not set | ||
495 | |||
496 | # | ||
497 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||
498 | # | ||
499 | CONFIG_SCSI_MULTI_LUN=y | ||
500 | # CONFIG_SCSI_CONSTANTS is not set | ||
501 | # CONFIG_SCSI_LOGGING is not set | ||
502 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
503 | CONFIG_SCSI_WAIT_SCAN=m | ||
504 | |||
505 | # | ||
506 | # SCSI Transports | ||
507 | # | ||
508 | # CONFIG_SCSI_SPI_ATTRS is not set | ||
509 | # CONFIG_SCSI_FC_ATTRS is not set | ||
510 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
511 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
512 | # CONFIG_SCSI_SRP_ATTRS is not set | ||
513 | # CONFIG_SCSI_LOWLEVEL is not set | ||
514 | # CONFIG_ATA is not set | ||
515 | # CONFIG_MD is not set | ||
516 | CONFIG_NETDEVICES=y | ||
517 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
518 | # CONFIG_DUMMY is not set | ||
519 | # CONFIG_BONDING is not set | ||
520 | # CONFIG_MACVLAN is not set | ||
521 | # CONFIG_EQUALIZER is not set | ||
522 | # CONFIG_TUN is not set | ||
523 | # CONFIG_VETH is not set | ||
524 | CONFIG_PHYLIB=y | ||
525 | |||
526 | # | ||
527 | # MII PHY device drivers | ||
528 | # | ||
529 | # CONFIG_MARVELL_PHY is not set | ||
530 | # CONFIG_DAVICOM_PHY is not set | ||
531 | # CONFIG_QSEMI_PHY is not set | ||
532 | # CONFIG_LXT_PHY is not set | ||
533 | # CONFIG_CICADA_PHY is not set | ||
534 | # CONFIG_VITESSE_PHY is not set | ||
535 | # CONFIG_SMSC_PHY is not set | ||
536 | # CONFIG_BROADCOM_PHY is not set | ||
537 | # CONFIG_ICPLUS_PHY is not set | ||
538 | # CONFIG_FIXED_PHY is not set | ||
539 | # CONFIG_MDIO_BITBANG is not set | ||
540 | CONFIG_NET_ETHERNET=y | ||
541 | CONFIG_MII=y | ||
542 | CONFIG_MACB=y | ||
543 | # CONFIG_AX88796 is not set | ||
544 | # CONFIG_SMC91X is not set | ||
545 | # CONFIG_DM9000 is not set | ||
546 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
547 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
548 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
549 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
550 | # CONFIG_B44 is not set | ||
551 | # CONFIG_NETDEV_1000 is not set | ||
552 | # CONFIG_NETDEV_10000 is not set | ||
553 | |||
554 | # | ||
555 | # Wireless LAN | ||
556 | # | ||
557 | # CONFIG_WLAN_PRE80211 is not set | ||
558 | # CONFIG_WLAN_80211 is not set | ||
559 | |||
560 | # | ||
561 | # USB Network Adapters | ||
562 | # | ||
563 | # CONFIG_USB_CATC is not set | ||
564 | # CONFIG_USB_KAWETH is not set | ||
565 | # CONFIG_USB_PEGASUS is not set | ||
566 | # CONFIG_USB_RTL8150 is not set | ||
567 | # CONFIG_USB_USBNET is not set | ||
568 | # CONFIG_WAN is not set | ||
569 | # CONFIG_PPP is not set | ||
570 | # CONFIG_SLIP is not set | ||
571 | # CONFIG_SHAPER is not set | ||
572 | # CONFIG_NETCONSOLE is not set | ||
573 | # CONFIG_NETPOLL is not set | ||
574 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
575 | # CONFIG_ISDN is not set | ||
576 | |||
577 | # | ||
578 | # Input device support | ||
579 | # | ||
580 | CONFIG_INPUT=y | ||
581 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
582 | # CONFIG_INPUT_POLLDEV is not set | ||
583 | |||
584 | # | ||
585 | # Userland interfaces | ||
586 | # | ||
587 | CONFIG_INPUT_MOUSEDEV=y | ||
588 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
589 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=320 | ||
590 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240 | ||
591 | # CONFIG_INPUT_JOYDEV is not set | ||
592 | CONFIG_INPUT_EVDEV=y | ||
593 | # CONFIG_INPUT_EVBUG is not set | ||
594 | |||
595 | # | ||
596 | # Input Device Drivers | ||
597 | # | ||
598 | CONFIG_INPUT_KEYBOARD=y | ||
599 | # CONFIG_KEYBOARD_ATKBD is not set | ||
600 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
601 | # CONFIG_KEYBOARD_LKKBD is not set | ||
602 | # CONFIG_KEYBOARD_XTKBD is not set | ||
603 | # CONFIG_KEYBOARD_NEWTON is not set | ||
604 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
605 | CONFIG_KEYBOARD_GPIO=y | ||
606 | # CONFIG_INPUT_MOUSE is not set | ||
607 | # CONFIG_INPUT_JOYSTICK is not set | ||
608 | # CONFIG_INPUT_TABLET is not set | ||
609 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
610 | # CONFIG_INPUT_MISC is not set | ||
611 | |||
612 | # | ||
613 | # Hardware I/O ports | ||
614 | # | ||
615 | CONFIG_SERIO=y | ||
616 | CONFIG_SERIO_SERPORT=y | ||
617 | # CONFIG_SERIO_RAW is not set | ||
618 | # CONFIG_GAMEPORT is not set | ||
619 | |||
620 | # | ||
621 | # Character devices | ||
622 | # | ||
623 | CONFIG_VT=y | ||
624 | CONFIG_VT_CONSOLE=y | ||
625 | CONFIG_HW_CONSOLE=y | ||
626 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
627 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
628 | |||
629 | # | ||
630 | # Serial drivers | ||
631 | # | ||
632 | # CONFIG_SERIAL_8250 is not set | ||
633 | |||
634 | # | ||
635 | # Non-8250 serial port support | ||
636 | # | ||
637 | CONFIG_SERIAL_ATMEL=y | ||
638 | CONFIG_SERIAL_ATMEL_CONSOLE=y | ||
639 | # CONFIG_SERIAL_ATMEL_TTYAT is not set | ||
640 | CONFIG_SERIAL_CORE=y | ||
641 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
642 | CONFIG_UNIX98_PTYS=y | ||
643 | CONFIG_LEGACY_PTYS=y | ||
644 | CONFIG_LEGACY_PTY_COUNT=16 | ||
645 | # CONFIG_IPMI_HANDLER is not set | ||
646 | CONFIG_HW_RANDOM=y | ||
647 | # CONFIG_NVRAM is not set | ||
648 | # CONFIG_R3964 is not set | ||
649 | # CONFIG_RAW_DRIVER is not set | ||
650 | # CONFIG_TCG_TPM is not set | ||
651 | # CONFIG_I2C is not set | ||
652 | |||
653 | # | ||
654 | # SPI support | ||
655 | # | ||
656 | CONFIG_SPI=y | ||
657 | CONFIG_SPI_MASTER=y | ||
658 | |||
659 | # | ||
660 | # SPI Master Controller Drivers | ||
661 | # | ||
662 | CONFIG_SPI_ATMEL=y | ||
663 | # CONFIG_SPI_BITBANG is not set | ||
664 | |||
665 | # | ||
666 | # SPI Protocol Masters | ||
667 | # | ||
668 | # CONFIG_SPI_AT25 is not set | ||
669 | CONFIG_SPI_SPIDEV=y | ||
670 | # CONFIG_SPI_TLE62X0 is not set | ||
671 | # CONFIG_W1 is not set | ||
672 | # CONFIG_POWER_SUPPLY is not set | ||
673 | # CONFIG_HWMON is not set | ||
674 | # CONFIG_WATCHDOG is not set | ||
675 | |||
676 | # | ||
677 | # Sonics Silicon Backplane | ||
678 | # | ||
679 | CONFIG_SSB_POSSIBLE=y | ||
680 | # CONFIG_SSB is not set | ||
681 | |||
682 | # | ||
683 | # Multifunction device drivers | ||
684 | # | ||
685 | # CONFIG_MFD_SM501 is not set | ||
686 | |||
687 | # | ||
688 | # Multimedia devices | ||
689 | # | ||
690 | # CONFIG_VIDEO_DEV is not set | ||
691 | # CONFIG_DVB_CORE is not set | ||
692 | # CONFIG_DAB is not set | ||
693 | |||
694 | # | ||
695 | # Graphics support | ||
696 | # | ||
697 | # CONFIG_VGASTATE is not set | ||
698 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
699 | # CONFIG_FB is not set | ||
700 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
701 | |||
702 | # | ||
703 | # Display device support | ||
704 | # | ||
705 | # CONFIG_DISPLAY_SUPPORT is not set | ||
706 | |||
707 | # | ||
708 | # Console display driver support | ||
709 | # | ||
710 | # CONFIG_VGA_CONSOLE is not set | ||
711 | CONFIG_DUMMY_CONSOLE=y | ||
712 | |||
713 | # | ||
714 | # Sound | ||
715 | # | ||
716 | CONFIG_SOUND=y | ||
717 | |||
718 | # | ||
719 | # Advanced Linux Sound Architecture | ||
720 | # | ||
721 | CONFIG_SND=y | ||
722 | CONFIG_SND_TIMER=y | ||
723 | CONFIG_SND_PCM=y | ||
724 | CONFIG_SND_SEQUENCER=y | ||
725 | # CONFIG_SND_SEQ_DUMMY is not set | ||
726 | CONFIG_SND_OSSEMUL=y | ||
727 | CONFIG_SND_MIXER_OSS=y | ||
728 | CONFIG_SND_PCM_OSS=y | ||
729 | CONFIG_SND_PCM_OSS_PLUGINS=y | ||
730 | CONFIG_SND_SEQUENCER_OSS=y | ||
731 | # CONFIG_SND_DYNAMIC_MINORS is not set | ||
732 | CONFIG_SND_SUPPORT_OLD_API=y | ||
733 | # CONFIG_SND_VERBOSE_PROCFS is not set | ||
734 | # CONFIG_SND_VERBOSE_PRINTK is not set | ||
735 | # CONFIG_SND_DEBUG is not set | ||
736 | |||
737 | # | ||
738 | # Generic devices | ||
739 | # | ||
740 | # CONFIG_SND_DUMMY is not set | ||
741 | # CONFIG_SND_VIRMIDI is not set | ||
742 | # CONFIG_SND_MTPAV is not set | ||
743 | # CONFIG_SND_SERIAL_U16550 is not set | ||
744 | # CONFIG_SND_MPU401 is not set | ||
745 | |||
746 | # | ||
747 | # ALSA ARM devices | ||
748 | # | ||
749 | # CONFIG_SND_AT91_AC97 is not set | ||
750 | |||
751 | # | ||
752 | # SPI devices | ||
753 | # | ||
754 | CONFIG_SND_AT73C213=y | ||
755 | CONFIG_SND_AT73C213_TARGET_BITRATE=48000 | ||
756 | |||
757 | # | ||
758 | # USB devices | ||
759 | # | ||
760 | # CONFIG_SND_USB_AUDIO is not set | ||
761 | # CONFIG_SND_USB_CAIAQ is not set | ||
762 | |||
763 | # | ||
764 | # System on Chip audio support | ||
765 | # | ||
766 | # CONFIG_SND_SOC is not set | ||
767 | |||
768 | # | ||
769 | # SoC Audio support for SuperH | ||
770 | # | ||
771 | |||
772 | # | ||
773 | # Open Sound System | ||
774 | # | ||
775 | # CONFIG_SOUND_PRIME is not set | ||
776 | CONFIG_HID_SUPPORT=y | ||
777 | CONFIG_HID=y | ||
778 | # CONFIG_HID_DEBUG is not set | ||
779 | # CONFIG_HIDRAW is not set | ||
780 | |||
781 | # | ||
782 | # USB Input Devices | ||
783 | # | ||
784 | CONFIG_USB_HID=y | ||
785 | # CONFIG_USB_HIDINPUT_POWERBOOK is not set | ||
786 | # CONFIG_HID_FF is not set | ||
787 | # CONFIG_USB_HIDDEV is not set | ||
788 | CONFIG_USB_SUPPORT=y | ||
789 | CONFIG_USB_ARCH_HAS_HCD=y | ||
790 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
791 | # CONFIG_USB_ARCH_HAS_EHCI is not set | ||
792 | CONFIG_USB=y | ||
793 | # CONFIG_USB_DEBUG is not set | ||
794 | |||
795 | # | ||
796 | # Miscellaneous USB options | ||
797 | # | ||
798 | CONFIG_USB_DEVICEFS=y | ||
799 | # CONFIG_USB_DEVICE_CLASS is not set | ||
800 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
801 | # CONFIG_USB_SUSPEND is not set | ||
802 | # CONFIG_USB_PERSIST is not set | ||
803 | # CONFIG_USB_OTG is not set | ||
804 | |||
805 | # | ||
806 | # USB Host Controller Drivers | ||
807 | # | ||
808 | # CONFIG_USB_ISP116X_HCD is not set | ||
809 | CONFIG_USB_OHCI_HCD=y | ||
810 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set | ||
811 | # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set | ||
812 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | ||
813 | # CONFIG_USB_SL811_HCD is not set | ||
814 | # CONFIG_USB_R8A66597_HCD is not set | ||
815 | |||
816 | # | ||
817 | # USB Device Class drivers | ||
818 | # | ||
819 | # CONFIG_USB_ACM is not set | ||
820 | # CONFIG_USB_PRINTER is not set | ||
821 | |||
822 | # | ||
823 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
824 | # | ||
825 | |||
826 | # | ||
827 | # may also be needed; see USB_STORAGE Help for more information | ||
828 | # | ||
829 | CONFIG_USB_STORAGE=y | ||
830 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
831 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
832 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
833 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
834 | # CONFIG_USB_STORAGE_DPCM is not set | ||
835 | # CONFIG_USB_STORAGE_USBAT is not set | ||
836 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
837 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
838 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
839 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
840 | # CONFIG_USB_STORAGE_KARMA is not set | ||
841 | # CONFIG_USB_LIBUSUAL is not set | ||
842 | |||
843 | # | ||
844 | # USB Imaging devices | ||
845 | # | ||
846 | # CONFIG_USB_MDC800 is not set | ||
847 | # CONFIG_USB_MICROTEK is not set | ||
848 | CONFIG_USB_MON=y | ||
849 | |||
850 | # | ||
851 | # USB port drivers | ||
852 | # | ||
853 | |||
854 | # | ||
855 | # USB Serial Converter support | ||
856 | # | ||
857 | # CONFIG_USB_SERIAL is not set | ||
858 | |||
859 | # | ||
860 | # USB Miscellaneous drivers | ||
861 | # | ||
862 | # CONFIG_USB_EMI62 is not set | ||
863 | # CONFIG_USB_EMI26 is not set | ||
864 | # CONFIG_USB_ADUTUX is not set | ||
865 | # CONFIG_USB_AUERSWALD is not set | ||
866 | # CONFIG_USB_RIO500 is not set | ||
867 | # CONFIG_USB_LEGOTOWER is not set | ||
868 | # CONFIG_USB_LCD is not set | ||
869 | # CONFIG_USB_BERRY_CHARGE is not set | ||
870 | # CONFIG_USB_LED is not set | ||
871 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
872 | # CONFIG_USB_CYTHERM is not set | ||
873 | # CONFIG_USB_PHIDGET is not set | ||
874 | # CONFIG_USB_IDMOUSE is not set | ||
875 | # CONFIG_USB_FTDI_ELAN is not set | ||
876 | # CONFIG_USB_APPLEDISPLAY is not set | ||
877 | # CONFIG_USB_LD is not set | ||
878 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
879 | # CONFIG_USB_IOWARRIOR is not set | ||
880 | # CONFIG_USB_TEST is not set | ||
881 | |||
882 | # | ||
883 | # USB DSL modem support | ||
884 | # | ||
885 | |||
886 | # | ||
887 | # USB Gadget Support | ||
888 | # | ||
889 | CONFIG_USB_GADGET=y | ||
890 | # CONFIG_USB_GADGET_DEBUG_FILES is not set | ||
891 | CONFIG_USB_GADGET_SELECTED=y | ||
892 | # CONFIG_USB_GADGET_AMD5536UDC is not set | ||
893 | # CONFIG_USB_GADGET_ATMEL_USBA is not set | ||
894 | # CONFIG_USB_GADGET_FSL_USB2 is not set | ||
895 | # CONFIG_USB_GADGET_NET2280 is not set | ||
896 | # CONFIG_USB_GADGET_PXA2XX is not set | ||
897 | # CONFIG_USB_GADGET_M66592 is not set | ||
898 | # CONFIG_USB_GADGET_GOKU is not set | ||
899 | # CONFIG_USB_GADGET_LH7A40X is not set | ||
900 | # CONFIG_USB_GADGET_OMAP is not set | ||
901 | # CONFIG_USB_GADGET_S3C2410 is not set | ||
902 | CONFIG_USB_GADGET_AT91=y | ||
903 | CONFIG_USB_AT91=y | ||
904 | # CONFIG_USB_GADGET_DUMMY_HCD is not set | ||
905 | # CONFIG_USB_GADGET_DUALSPEED is not set | ||
906 | CONFIG_USB_ZERO=m | ||
907 | # CONFIG_USB_ETH is not set | ||
908 | CONFIG_USB_GADGETFS=m | ||
909 | CONFIG_USB_FILE_STORAGE=m | ||
910 | # CONFIG_USB_FILE_STORAGE_TEST is not set | ||
911 | CONFIG_USB_G_SERIAL=m | ||
912 | # CONFIG_USB_MIDI_GADGET is not set | ||
913 | CONFIG_MMC=y | ||
914 | # CONFIG_MMC_DEBUG is not set | ||
915 | # CONFIG_MMC_UNSAFE_RESUME is not set | ||
916 | |||
917 | # | ||
918 | # MMC/SD Card Drivers | ||
919 | # | ||
920 | CONFIG_MMC_BLOCK=y | ||
921 | CONFIG_MMC_BLOCK_BOUNCE=y | ||
922 | # CONFIG_SDIO_UART is not set | ||
923 | |||
924 | # | ||
925 | # MMC/SD Host Controller Drivers | ||
926 | # | ||
927 | CONFIG_MMC_AT91=y | ||
928 | # CONFIG_MMC_SPI is not set | ||
929 | CONFIG_NEW_LEDS=y | ||
930 | CONFIG_LEDS_CLASS=y | ||
931 | |||
932 | # | ||
933 | # LED drivers | ||
934 | # | ||
935 | CONFIG_LEDS_ATMEL_PWM=y | ||
936 | CONFIG_LEDS_GPIO=y | ||
937 | |||
938 | # | ||
939 | # LED Triggers | ||
940 | # | ||
941 | CONFIG_LEDS_TRIGGERS=y | ||
942 | CONFIG_LEDS_TRIGGER_TIMER=y | ||
943 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | ||
944 | CONFIG_RTC_LIB=y | ||
945 | CONFIG_RTC_CLASS=y | ||
946 | CONFIG_RTC_HCTOSYS=y | ||
947 | CONFIG_RTC_HCTOSYS_DEVICE="rtc0" | ||
948 | # CONFIG_RTC_DEBUG is not set | ||
949 | |||
950 | # | ||
951 | # RTC interfaces | ||
952 | # | ||
953 | CONFIG_RTC_INTF_SYSFS=y | ||
954 | CONFIG_RTC_INTF_PROC=y | ||
955 | CONFIG_RTC_INTF_DEV=y | ||
956 | # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set | ||
957 | # CONFIG_RTC_DRV_TEST is not set | ||
958 | |||
959 | # | ||
960 | # SPI RTC drivers | ||
961 | # | ||
962 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
963 | # CONFIG_RTC_DRV_MAX6902 is not set | ||
964 | |||
965 | # | ||
966 | # Platform RTC drivers | ||
967 | # | ||
968 | # CONFIG_RTC_DRV_CMOS is not set | ||
969 | # CONFIG_RTC_DRV_DS1553 is not set | ||
970 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
971 | # CONFIG_RTC_DRV_DS1742 is not set | ||
972 | # CONFIG_RTC_DRV_M48T86 is not set | ||
973 | # CONFIG_RTC_DRV_M48T59 is not set | ||
974 | # CONFIG_RTC_DRV_V3020 is not set | ||
975 | |||
976 | # | ||
977 | # on-CPU RTC drivers | ||
978 | # | ||
979 | CONFIG_RTC_DRV_AT91SAM9=y | ||
980 | CONFIG_RTC_DRV_AT91SAM9_RTT=0 | ||
981 | CONFIG_RTC_DRV_AT91SAM9_GPBR=0 | ||
982 | |||
983 | # | ||
984 | # File systems | ||
985 | # | ||
986 | CONFIG_EXT2_FS=y | ||
987 | # CONFIG_EXT2_FS_XATTR is not set | ||
988 | # CONFIG_EXT2_FS_XIP is not set | ||
989 | # CONFIG_EXT3_FS is not set | ||
990 | # CONFIG_EXT4DEV_FS is not set | ||
991 | # CONFIG_REISERFS_FS is not set | ||
992 | # CONFIG_JFS_FS is not set | ||
993 | # CONFIG_FS_POSIX_ACL is not set | ||
994 | # CONFIG_XFS_FS is not set | ||
995 | # CONFIG_GFS2_FS is not set | ||
996 | # CONFIG_OCFS2_FS is not set | ||
997 | # CONFIG_MINIX_FS is not set | ||
998 | # CONFIG_ROMFS_FS is not set | ||
999 | CONFIG_INOTIFY=y | ||
1000 | CONFIG_INOTIFY_USER=y | ||
1001 | # CONFIG_QUOTA is not set | ||
1002 | CONFIG_DNOTIFY=y | ||
1003 | # CONFIG_AUTOFS_FS is not set | ||
1004 | # CONFIG_AUTOFS4_FS is not set | ||
1005 | # CONFIG_FUSE_FS is not set | ||
1006 | |||
1007 | # | ||
1008 | # CD-ROM/DVD Filesystems | ||
1009 | # | ||
1010 | # CONFIG_ISO9660_FS is not set | ||
1011 | # CONFIG_UDF_FS is not set | ||
1012 | |||
1013 | # | ||
1014 | # DOS/FAT/NT Filesystems | ||
1015 | # | ||
1016 | CONFIG_FAT_FS=y | ||
1017 | CONFIG_MSDOS_FS=y | ||
1018 | CONFIG_VFAT_FS=y | ||
1019 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
1020 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
1021 | # CONFIG_NTFS_FS is not set | ||
1022 | |||
1023 | # | ||
1024 | # Pseudo filesystems | ||
1025 | # | ||
1026 | CONFIG_PROC_FS=y | ||
1027 | CONFIG_PROC_SYSCTL=y | ||
1028 | CONFIG_SYSFS=y | ||
1029 | CONFIG_TMPFS=y | ||
1030 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
1031 | # CONFIG_HUGETLB_PAGE is not set | ||
1032 | # CONFIG_CONFIGFS_FS is not set | ||
1033 | |||
1034 | # | ||
1035 | # Miscellaneous filesystems | ||
1036 | # | ||
1037 | # CONFIG_ADFS_FS is not set | ||
1038 | # CONFIG_AFFS_FS is not set | ||
1039 | # CONFIG_HFS_FS is not set | ||
1040 | # CONFIG_HFSPLUS_FS is not set | ||
1041 | # CONFIG_BEFS_FS is not set | ||
1042 | # CONFIG_BFS_FS is not set | ||
1043 | # CONFIG_EFS_FS is not set | ||
1044 | CONFIG_JFFS2_FS=y | ||
1045 | CONFIG_JFFS2_FS_DEBUG=0 | ||
1046 | CONFIG_JFFS2_FS_WRITEBUFFER=y | ||
1047 | # CONFIG_JFFS2_FS_WBUF_VERIFY is not set | ||
1048 | CONFIG_JFFS2_SUMMARY=y | ||
1049 | # CONFIG_JFFS2_FS_XATTR is not set | ||
1050 | # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set | ||
1051 | CONFIG_JFFS2_ZLIB=y | ||
1052 | # CONFIG_JFFS2_LZO is not set | ||
1053 | CONFIG_JFFS2_RTIME=y | ||
1054 | # CONFIG_JFFS2_RUBIN is not set | ||
1055 | CONFIG_CRAMFS=y | ||
1056 | # CONFIG_VXFS_FS is not set | ||
1057 | # CONFIG_HPFS_FS is not set | ||
1058 | # CONFIG_QNX4FS_FS is not set | ||
1059 | # CONFIG_SYSV_FS is not set | ||
1060 | # CONFIG_UFS_FS is not set | ||
1061 | CONFIG_NETWORK_FILESYSTEMS=y | ||
1062 | CONFIG_NFS_FS=y | ||
1063 | CONFIG_NFS_V3=y | ||
1064 | # CONFIG_NFS_V3_ACL is not set | ||
1065 | # CONFIG_NFS_V4 is not set | ||
1066 | # CONFIG_NFS_DIRECTIO is not set | ||
1067 | # CONFIG_NFSD is not set | ||
1068 | CONFIG_ROOT_NFS=y | ||
1069 | CONFIG_LOCKD=y | ||
1070 | CONFIG_LOCKD_V4=y | ||
1071 | CONFIG_NFS_COMMON=y | ||
1072 | CONFIG_SUNRPC=y | ||
1073 | # CONFIG_SUNRPC_BIND34 is not set | ||
1074 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
1075 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
1076 | # CONFIG_SMB_FS is not set | ||
1077 | # CONFIG_CIFS is not set | ||
1078 | # CONFIG_NCP_FS is not set | ||
1079 | # CONFIG_CODA_FS is not set | ||
1080 | # CONFIG_AFS_FS is not set | ||
1081 | |||
1082 | # | ||
1083 | # Partition Types | ||
1084 | # | ||
1085 | # CONFIG_PARTITION_ADVANCED is not set | ||
1086 | CONFIG_MSDOS_PARTITION=y | ||
1087 | CONFIG_NLS=y | ||
1088 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
1089 | CONFIG_NLS_CODEPAGE_437=y | ||
1090 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
1091 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
1092 | CONFIG_NLS_CODEPAGE_850=y | ||
1093 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
1094 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
1095 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
1096 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
1097 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
1098 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
1099 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
1100 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
1101 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
1102 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
1103 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
1104 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
1105 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
1106 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
1107 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
1108 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
1109 | # CONFIG_NLS_ISO8859_8 is not set | ||
1110 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
1111 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
1112 | # CONFIG_NLS_ASCII is not set | ||
1113 | CONFIG_NLS_ISO8859_1=y | ||
1114 | # CONFIG_NLS_ISO8859_2 is not set | ||
1115 | # CONFIG_NLS_ISO8859_3 is not set | ||
1116 | # CONFIG_NLS_ISO8859_4 is not set | ||
1117 | # CONFIG_NLS_ISO8859_5 is not set | ||
1118 | # CONFIG_NLS_ISO8859_6 is not set | ||
1119 | # CONFIG_NLS_ISO8859_7 is not set | ||
1120 | # CONFIG_NLS_ISO8859_9 is not set | ||
1121 | # CONFIG_NLS_ISO8859_13 is not set | ||
1122 | # CONFIG_NLS_ISO8859_14 is not set | ||
1123 | CONFIG_NLS_ISO8859_15=y | ||
1124 | # CONFIG_NLS_KOI8_R is not set | ||
1125 | # CONFIG_NLS_KOI8_U is not set | ||
1126 | CONFIG_NLS_UTF8=y | ||
1127 | # CONFIG_DLM is not set | ||
1128 | # CONFIG_INSTRUMENTATION is not set | ||
1129 | |||
1130 | # | ||
1131 | # Kernel hacking | ||
1132 | # | ||
1133 | # CONFIG_PRINTK_TIME is not set | ||
1134 | # CONFIG_ENABLE_WARN_DEPRECATED is not set | ||
1135 | CONFIG_ENABLE_MUST_CHECK=y | ||
1136 | # CONFIG_MAGIC_SYSRQ is not set | ||
1137 | # CONFIG_UNUSED_SYMBOLS is not set | ||
1138 | # CONFIG_DEBUG_FS is not set | ||
1139 | # CONFIG_HEADERS_CHECK is not set | ||
1140 | # CONFIG_DEBUG_KERNEL is not set | ||
1141 | CONFIG_DEBUG_BUGVERBOSE=y | ||
1142 | CONFIG_FRAME_POINTER=y | ||
1143 | # CONFIG_SAMPLES is not set | ||
1144 | # CONFIG_DEBUG_USER is not set | ||
1145 | |||
1146 | # | ||
1147 | # Security options | ||
1148 | # | ||
1149 | # CONFIG_KEYS is not set | ||
1150 | # CONFIG_SECURITY is not set | ||
1151 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | ||
1152 | # CONFIG_CRYPTO is not set | ||
1153 | |||
1154 | # | ||
1155 | # Library routines | ||
1156 | # | ||
1157 | CONFIG_BITREVERSE=y | ||
1158 | # CONFIG_CRC_CCITT is not set | ||
1159 | # CONFIG_CRC16 is not set | ||
1160 | # CONFIG_CRC_ITU_T is not set | ||
1161 | CONFIG_CRC32=y | ||
1162 | # CONFIG_CRC7 is not set | ||
1163 | # CONFIG_LIBCRC32C is not set | ||
1164 | CONFIG_ZLIB_INFLATE=y | ||
1165 | CONFIG_ZLIB_DEFLATE=y | ||
1166 | CONFIG_PLIST=y | ||
1167 | CONFIG_HAS_IOMEM=y | ||
1168 | CONFIG_HAS_IOPORT=y | ||
diff --git a/arch/arm/configs/at91sam9rlek_defconfig b/arch/arm/configs/at91sam9rlek_defconfig index 98e6746d02be..d8ec5f9ca6ec 100644 --- a/arch/arm/configs/at91sam9rlek_defconfig +++ b/arch/arm/configs/at91sam9rlek_defconfig | |||
@@ -211,7 +211,6 @@ CONFIG_CPU_CP15_MMU=y | |||
211 | # | 211 | # |
212 | # CONFIG_TICK_ONESHOT is not set | 212 | # CONFIG_TICK_ONESHOT is not set |
213 | # CONFIG_PREEMPT is not set | 213 | # CONFIG_PREEMPT is not set |
214 | # CONFIG_NO_IDLE_HZ is not set | ||
215 | CONFIG_HZ=100 | 214 | CONFIG_HZ=100 |
216 | # CONFIG_AEABI is not set | 215 | # CONFIG_AEABI is not set |
217 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 216 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/configs/ateb9200_defconfig b/arch/arm/configs/ateb9200_defconfig index d846a492e5ce..85c80f723d8e 100644 --- a/arch/arm/configs/ateb9200_defconfig +++ b/arch/arm/configs/ateb9200_defconfig | |||
@@ -171,7 +171,6 @@ CONFIG_AT91_CF=m | |||
171 | # Kernel Features | 171 | # Kernel Features |
172 | # | 172 | # |
173 | CONFIG_PREEMPT=y | 173 | CONFIG_PREEMPT=y |
174 | CONFIG_NO_IDLE_HZ=y | ||
175 | CONFIG_HZ=100 | 174 | CONFIG_HZ=100 |
176 | # CONFIG_AEABI is not set | 175 | # CONFIG_AEABI is not set |
177 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 176 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/configs/cm_x270_defconfig b/arch/arm/configs/cm_x270_defconfig index 5cab08397ae7..33b201c3b309 100644 --- a/arch/arm/configs/cm_x270_defconfig +++ b/arch/arm/configs/cm_x270_defconfig | |||
@@ -194,7 +194,6 @@ CONFIG_PCI_HOST_ITE8152=y | |||
194 | # | 194 | # |
195 | # CONFIG_TICK_ONESHOT is not set | 195 | # CONFIG_TICK_ONESHOT is not set |
196 | # CONFIG_PREEMPT is not set | 196 | # CONFIG_PREEMPT is not set |
197 | # CONFIG_NO_IDLE_HZ is not set | ||
198 | CONFIG_HZ=100 | 197 | CONFIG_HZ=100 |
199 | # CONFIG_AEABI is not set | 198 | # CONFIG_AEABI is not set |
200 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 199 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/configs/collie_defconfig b/arch/arm/configs/collie_defconfig index 4264e273202d..f7622e658163 100644 --- a/arch/arm/configs/collie_defconfig +++ b/arch/arm/configs/collie_defconfig | |||
@@ -166,7 +166,6 @@ CONFIG_PCMCIA_SA1100=y | |||
166 | # Kernel Features | 166 | # Kernel Features |
167 | # | 167 | # |
168 | # CONFIG_PREEMPT is not set | 168 | # CONFIG_PREEMPT is not set |
169 | # CONFIG_NO_IDLE_HZ is not set | ||
170 | CONFIG_HZ=100 | 169 | CONFIG_HZ=100 |
171 | # CONFIG_AEABI is not set | 170 | # CONFIG_AEABI is not set |
172 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | 171 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y |
diff --git a/arch/arm/configs/corgi_defconfig b/arch/arm/configs/corgi_defconfig index e8980a9bb893..9b8748a8d9dd 100644 --- a/arch/arm/configs/corgi_defconfig +++ b/arch/arm/configs/corgi_defconfig | |||
@@ -165,7 +165,6 @@ CONFIG_PCMCIA_PXA2XX=y | |||
165 | # Kernel Features | 165 | # Kernel Features |
166 | # | 166 | # |
167 | CONFIG_PREEMPT=y | 167 | CONFIG_PREEMPT=y |
168 | # CONFIG_NO_IDLE_HZ is not set | ||
169 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 168 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
170 | CONFIG_SELECT_MEMORY_MODEL=y | 169 | CONFIG_SELECT_MEMORY_MODEL=y |
171 | CONFIG_FLATMEM_MANUAL=y | 170 | CONFIG_FLATMEM_MANUAL=y |
diff --git a/arch/arm/configs/ecbat91_defconfig b/arch/arm/configs/ecbat91_defconfig index 90ed214e3673..cfeb817ad21a 100644 --- a/arch/arm/configs/ecbat91_defconfig +++ b/arch/arm/configs/ecbat91_defconfig | |||
@@ -230,7 +230,6 @@ CONFIG_AT91_CF=y | |||
230 | # | 230 | # |
231 | # CONFIG_TICK_ONESHOT is not set | 231 | # CONFIG_TICK_ONESHOT is not set |
232 | CONFIG_PREEMPT=y | 232 | CONFIG_PREEMPT=y |
233 | # CONFIG_NO_IDLE_HZ is not set | ||
234 | CONFIG_HZ=100 | 233 | CONFIG_HZ=100 |
235 | # CONFIG_AEABI is not set | 234 | # CONFIG_AEABI is not set |
236 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 235 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/configs/em_x270_defconfig b/arch/arm/configs/em_x270_defconfig index 6bea0901bdf0..d3114c23603b 100644 --- a/arch/arm/configs/em_x270_defconfig +++ b/arch/arm/configs/em_x270_defconfig | |||
@@ -197,7 +197,6 @@ CONFIG_XSCALE_PMU=y | |||
197 | # | 197 | # |
198 | # CONFIG_TICK_ONESHOT is not set | 198 | # CONFIG_TICK_ONESHOT is not set |
199 | # CONFIG_PREEMPT is not set | 199 | # CONFIG_PREEMPT is not set |
200 | # CONFIG_NO_IDLE_HZ is not set | ||
201 | CONFIG_HZ=100 | 200 | CONFIG_HZ=100 |
202 | CONFIG_AEABI=y | 201 | CONFIG_AEABI=y |
203 | CONFIG_OABI_COMPAT=y | 202 | CONFIG_OABI_COMPAT=y |
diff --git a/arch/arm/configs/ep93xx_defconfig b/arch/arm/configs/ep93xx_defconfig index 24a701ab33e5..21aa013793c6 100644 --- a/arch/arm/configs/ep93xx_defconfig +++ b/arch/arm/configs/ep93xx_defconfig | |||
@@ -184,7 +184,6 @@ CONFIG_ARM_AMBA=y | |||
184 | # Kernel Features | 184 | # Kernel Features |
185 | # | 185 | # |
186 | # CONFIG_PREEMPT is not set | 186 | # CONFIG_PREEMPT is not set |
187 | # CONFIG_NO_IDLE_HZ is not set | ||
188 | CONFIG_HZ=100 | 187 | CONFIG_HZ=100 |
189 | # CONFIG_AEABI is not set | 188 | # CONFIG_AEABI is not set |
190 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 189 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/configs/eseries_pxa_defconfig b/arch/arm/configs/eseries_pxa_defconfig index ed487b90dbed..493ecee24f94 100644 --- a/arch/arm/configs/eseries_pxa_defconfig +++ b/arch/arm/configs/eseries_pxa_defconfig | |||
@@ -251,7 +251,6 @@ CONFIG_PCMCIA_PXA2XX=m | |||
251 | # Kernel Features | 251 | # Kernel Features |
252 | # | 252 | # |
253 | # CONFIG_PREEMPT is not set | 253 | # CONFIG_PREEMPT is not set |
254 | # CONFIG_NO_IDLE_HZ is not set | ||
255 | CONFIG_HZ=100 | 254 | CONFIG_HZ=100 |
256 | CONFIG_AEABI=y | 255 | CONFIG_AEABI=y |
257 | CONFIG_OABI_COMPAT=y | 256 | CONFIG_OABI_COMPAT=y |
diff --git a/arch/arm/configs/iop13xx_defconfig b/arch/arm/configs/iop13xx_defconfig index 988b4d13e76f..482e57061053 100644 --- a/arch/arm/configs/iop13xx_defconfig +++ b/arch/arm/configs/iop13xx_defconfig | |||
@@ -197,7 +197,6 @@ CONFIG_PCI_LEGACY=y | |||
197 | # | 197 | # |
198 | # CONFIG_TICK_ONESHOT is not set | 198 | # CONFIG_TICK_ONESHOT is not set |
199 | # CONFIG_PREEMPT is not set | 199 | # CONFIG_PREEMPT is not set |
200 | # CONFIG_NO_IDLE_HZ is not set | ||
201 | CONFIG_HZ=100 | 200 | CONFIG_HZ=100 |
202 | # CONFIG_AEABI is not set | 201 | # CONFIG_AEABI is not set |
203 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 202 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/configs/iop32x_defconfig b/arch/arm/configs/iop32x_defconfig index 83f40d4041a6..8612f58e1056 100644 --- a/arch/arm/configs/iop32x_defconfig +++ b/arch/arm/configs/iop32x_defconfig | |||
@@ -201,7 +201,6 @@ CONFIG_PCI_LEGACY=y | |||
201 | # | 201 | # |
202 | # CONFIG_TICK_ONESHOT is not set | 202 | # CONFIG_TICK_ONESHOT is not set |
203 | # CONFIG_PREEMPT is not set | 203 | # CONFIG_PREEMPT is not set |
204 | # CONFIG_NO_IDLE_HZ is not set | ||
205 | CONFIG_HZ=100 | 204 | CONFIG_HZ=100 |
206 | # CONFIG_AEABI is not set | 205 | # CONFIG_AEABI is not set |
207 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 206 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/configs/iop33x_defconfig b/arch/arm/configs/iop33x_defconfig index 917afb5ccfac..8b0098d19d08 100644 --- a/arch/arm/configs/iop33x_defconfig +++ b/arch/arm/configs/iop33x_defconfig | |||
@@ -197,7 +197,6 @@ CONFIG_PCI_LEGACY=y | |||
197 | # | 197 | # |
198 | # CONFIG_TICK_ONESHOT is not set | 198 | # CONFIG_TICK_ONESHOT is not set |
199 | # CONFIG_PREEMPT is not set | 199 | # CONFIG_PREEMPT is not set |
200 | # CONFIG_NO_IDLE_HZ is not set | ||
201 | CONFIG_HZ=100 | 200 | CONFIG_HZ=100 |
202 | # CONFIG_AEABI is not set | 201 | # CONFIG_AEABI is not set |
203 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 202 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/configs/ixp2000_defconfig b/arch/arm/configs/ixp2000_defconfig index f8f9793b526f..84680db6c615 100644 --- a/arch/arm/configs/ixp2000_defconfig +++ b/arch/arm/configs/ixp2000_defconfig | |||
@@ -184,7 +184,6 @@ CONFIG_PCI=y | |||
184 | # Kernel Features | 184 | # Kernel Features |
185 | # | 185 | # |
186 | # CONFIG_PREEMPT is not set | 186 | # CONFIG_PREEMPT is not set |
187 | # CONFIG_NO_IDLE_HZ is not set | ||
188 | CONFIG_HZ=100 | 187 | CONFIG_HZ=100 |
189 | # CONFIG_AEABI is not set | 188 | # CONFIG_AEABI is not set |
190 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 189 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/configs/ixp23xx_defconfig b/arch/arm/configs/ixp23xx_defconfig index 27cf022dd807..4a2f7b2372db 100644 --- a/arch/arm/configs/ixp23xx_defconfig +++ b/arch/arm/configs/ixp23xx_defconfig | |||
@@ -180,7 +180,6 @@ CONFIG_PCI=y | |||
180 | # Kernel Features | 180 | # Kernel Features |
181 | # | 181 | # |
182 | # CONFIG_PREEMPT is not set | 182 | # CONFIG_PREEMPT is not set |
183 | # CONFIG_NO_IDLE_HZ is not set | ||
184 | CONFIG_HZ=100 | 183 | CONFIG_HZ=100 |
185 | # CONFIG_AEABI is not set | 184 | # CONFIG_AEABI is not set |
186 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 185 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/configs/ixp4xx_defconfig b/arch/arm/configs/ixp4xx_defconfig index efa0485d2f7e..fc14932e3abd 100644 --- a/arch/arm/configs/ixp4xx_defconfig +++ b/arch/arm/configs/ixp4xx_defconfig | |||
@@ -165,6 +165,7 @@ CONFIG_ARCH_PRPMC1100=y | |||
165 | CONFIG_MACH_NAS100D=y | 165 | CONFIG_MACH_NAS100D=y |
166 | CONFIG_MACH_DSMG600=y | 166 | CONFIG_MACH_DSMG600=y |
167 | CONFIG_ARCH_IXDP4XX=y | 167 | CONFIG_ARCH_IXDP4XX=y |
168 | CONFIG_MACH_FSG=y | ||
168 | CONFIG_CPU_IXP46X=y | 169 | CONFIG_CPU_IXP46X=y |
169 | CONFIG_CPU_IXP43X=y | 170 | CONFIG_CPU_IXP43X=y |
170 | CONFIG_MACH_GTWX5715=y | 171 | CONFIG_MACH_GTWX5715=y |
@@ -770,7 +771,7 @@ CONFIG_ATA=y | |||
770 | # CONFIG_SATA_SIL24 is not set | 771 | # CONFIG_SATA_SIL24 is not set |
771 | # CONFIG_SATA_SIS is not set | 772 | # CONFIG_SATA_SIS is not set |
772 | # CONFIG_SATA_ULI is not set | 773 | # CONFIG_SATA_ULI is not set |
773 | # CONFIG_SATA_VIA is not set | 774 | CONFIG_SATA_VIA=y |
774 | # CONFIG_SATA_VITESSE is not set | 775 | # CONFIG_SATA_VITESSE is not set |
775 | # CONFIG_SATA_INIC162X is not set | 776 | # CONFIG_SATA_INIC162X is not set |
776 | # CONFIG_PATA_ALI is not set | 777 | # CONFIG_PATA_ALI is not set |
@@ -1143,7 +1144,7 @@ CONFIG_HWMON=y | |||
1143 | # CONFIG_SENSORS_VIA686A is not set | 1144 | # CONFIG_SENSORS_VIA686A is not set |
1144 | # CONFIG_SENSORS_VT1211 is not set | 1145 | # CONFIG_SENSORS_VT1211 is not set |
1145 | # CONFIG_SENSORS_VT8231 is not set | 1146 | # CONFIG_SENSORS_VT8231 is not set |
1146 | # CONFIG_SENSORS_W83781D is not set | 1147 | CONFIG_SENSORS_W83781D=y |
1147 | # CONFIG_SENSORS_W83791D is not set | 1148 | # CONFIG_SENSORS_W83791D is not set |
1148 | # CONFIG_SENSORS_W83792D is not set | 1149 | # CONFIG_SENSORS_W83792D is not set |
1149 | # CONFIG_SENSORS_W83793 is not set | 1150 | # CONFIG_SENSORS_W83793 is not set |
@@ -1334,8 +1335,8 @@ CONFIG_LEDS_CLASS=y | |||
1334 | # | 1335 | # |
1335 | # LED drivers | 1336 | # LED drivers |
1336 | # | 1337 | # |
1337 | # CONFIG_LEDS_IXP4XX is not set | ||
1338 | CONFIG_LEDS_GPIO=y | 1338 | CONFIG_LEDS_GPIO=y |
1339 | CONFIG_LEDS_FSG=y | ||
1339 | 1340 | ||
1340 | # | 1341 | # |
1341 | # LED Triggers | 1342 | # LED Triggers |
@@ -1367,7 +1368,7 @@ CONFIG_RTC_INTF_DEV=y | |||
1367 | # CONFIG_RTC_DRV_DS1672 is not set | 1368 | # CONFIG_RTC_DRV_DS1672 is not set |
1368 | # CONFIG_RTC_DRV_MAX6900 is not set | 1369 | # CONFIG_RTC_DRV_MAX6900 is not set |
1369 | # CONFIG_RTC_DRV_RS5C372 is not set | 1370 | # CONFIG_RTC_DRV_RS5C372 is not set |
1370 | # CONFIG_RTC_DRV_ISL1208 is not set | 1371 | CONFIG_RTC_DRV_ISL1208=y |
1371 | CONFIG_RTC_DRV_X1205=y | 1372 | CONFIG_RTC_DRV_X1205=y |
1372 | CONFIG_RTC_DRV_PCF8563=y | 1373 | CONFIG_RTC_DRV_PCF8563=y |
1373 | # CONFIG_RTC_DRV_PCF8583 is not set | 1374 | # CONFIG_RTC_DRV_PCF8583 is not set |
diff --git a/arch/arm/configs/kafa_defconfig b/arch/arm/configs/kafa_defconfig index ae51a40db6f9..6dd95a2c8d5d 100644 --- a/arch/arm/configs/kafa_defconfig +++ b/arch/arm/configs/kafa_defconfig | |||
@@ -162,7 +162,6 @@ CONFIG_CPU_TLB_V4WBI=y | |||
162 | # Kernel Features | 162 | # Kernel Features |
163 | # | 163 | # |
164 | CONFIG_PREEMPT=y | 164 | CONFIG_PREEMPT=y |
165 | # CONFIG_NO_IDLE_HZ is not set | ||
166 | CONFIG_HZ=100 | 165 | CONFIG_HZ=100 |
167 | # CONFIG_AEABI is not set | 166 | # CONFIG_AEABI is not set |
168 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 167 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/configs/kb9202_defconfig b/arch/arm/configs/kb9202_defconfig index c16537d9d67a..8e74c66f239d 100644 --- a/arch/arm/configs/kb9202_defconfig +++ b/arch/arm/configs/kb9202_defconfig | |||
@@ -126,7 +126,6 @@ CONFIG_ISA_DMA_API=y | |||
126 | # | 126 | # |
127 | # Kernel Features | 127 | # Kernel Features |
128 | # | 128 | # |
129 | # CONFIG_NO_IDLE_HZ is not set | ||
130 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 129 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
131 | CONFIG_FLATMEM=y | 130 | CONFIG_FLATMEM=y |
132 | CONFIG_FLAT_NODE_MEM_MAP=y | 131 | CONFIG_FLAT_NODE_MEM_MAP=y |
diff --git a/arch/arm/configs/kirkwood_defconfig b/arch/arm/configs/kirkwood_defconfig new file mode 100644 index 000000000000..e3357ba10f1f --- /dev/null +++ b/arch/arm/configs/kirkwood_defconfig | |||
@@ -0,0 +1,1426 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.26-rc5 | ||
4 | # Sun Jun 22 15:51:25 2008 | ||
5 | # | ||
6 | CONFIG_ARM=y | ||
7 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y | ||
8 | CONFIG_GENERIC_GPIO=y | ||
9 | CONFIG_GENERIC_TIME=y | ||
10 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
11 | CONFIG_MMU=y | ||
12 | # CONFIG_NO_IOPORT is not set | ||
13 | CONFIG_GENERIC_HARDIRQS=y | ||
14 | CONFIG_STACKTRACE_SUPPORT=y | ||
15 | CONFIG_HAVE_LATENCYTOP_SUPPORT=y | ||
16 | CONFIG_LOCKDEP_SUPPORT=y | ||
17 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
18 | CONFIG_HARDIRQS_SW_RESEND=y | ||
19 | CONFIG_GENERIC_IRQ_PROBE=y | ||
20 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
21 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | ||
22 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | ||
23 | CONFIG_GENERIC_HWEIGHT=y | ||
24 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
25 | CONFIG_ARCH_SUPPORTS_AOUT=y | ||
26 | CONFIG_ZONE_DMA=y | ||
27 | CONFIG_VECTORS_BASE=0xffff0000 | ||
28 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
29 | |||
30 | # | ||
31 | # General setup | ||
32 | # | ||
33 | CONFIG_EXPERIMENTAL=y | ||
34 | CONFIG_BROKEN_ON_SMP=y | ||
35 | CONFIG_LOCK_KERNEL=y | ||
36 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
37 | CONFIG_LOCALVERSION="" | ||
38 | CONFIG_LOCALVERSION_AUTO=y | ||
39 | CONFIG_SWAP=y | ||
40 | CONFIG_SYSVIPC=y | ||
41 | CONFIG_SYSVIPC_SYSCTL=y | ||
42 | # CONFIG_POSIX_MQUEUE is not set | ||
43 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
44 | # CONFIG_TASKSTATS is not set | ||
45 | # CONFIG_AUDIT is not set | ||
46 | # CONFIG_IKCONFIG is not set | ||
47 | CONFIG_LOG_BUF_SHIFT=14 | ||
48 | # CONFIG_CGROUPS is not set | ||
49 | # CONFIG_GROUP_SCHED is not set | ||
50 | # CONFIG_SYSFS_DEPRECATED_V2 is not set | ||
51 | # CONFIG_RELAY is not set | ||
52 | # CONFIG_NAMESPACES is not set | ||
53 | # CONFIG_BLK_DEV_INITRD is not set | ||
54 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
55 | CONFIG_SYSCTL=y | ||
56 | CONFIG_EMBEDDED=y | ||
57 | CONFIG_UID16=y | ||
58 | CONFIG_SYSCTL_SYSCALL=y | ||
59 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
60 | CONFIG_KALLSYMS=y | ||
61 | # CONFIG_KALLSYMS_ALL is not set | ||
62 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
63 | CONFIG_HOTPLUG=y | ||
64 | CONFIG_PRINTK=y | ||
65 | CONFIG_BUG=y | ||
66 | CONFIG_ELF_CORE=y | ||
67 | CONFIG_COMPAT_BRK=y | ||
68 | CONFIG_BASE_FULL=y | ||
69 | CONFIG_FUTEX=y | ||
70 | CONFIG_ANON_INODES=y | ||
71 | CONFIG_EPOLL=y | ||
72 | CONFIG_SIGNALFD=y | ||
73 | CONFIG_TIMERFD=y | ||
74 | CONFIG_EVENTFD=y | ||
75 | CONFIG_SHMEM=y | ||
76 | CONFIG_VM_EVENT_COUNTERS=y | ||
77 | CONFIG_SLAB=y | ||
78 | # CONFIG_SLUB is not set | ||
79 | # CONFIG_SLOB is not set | ||
80 | CONFIG_PROFILING=y | ||
81 | # CONFIG_MARKERS is not set | ||
82 | CONFIG_OPROFILE=y | ||
83 | CONFIG_HAVE_OPROFILE=y | ||
84 | CONFIG_KPROBES=y | ||
85 | CONFIG_KRETPROBES=y | ||
86 | CONFIG_HAVE_KPROBES=y | ||
87 | CONFIG_HAVE_KRETPROBES=y | ||
88 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
89 | CONFIG_PROC_PAGE_MONITOR=y | ||
90 | CONFIG_SLABINFO=y | ||
91 | CONFIG_RT_MUTEXES=y | ||
92 | # CONFIG_TINY_SHMEM is not set | ||
93 | CONFIG_BASE_SMALL=0 | ||
94 | CONFIG_MODULES=y | ||
95 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
96 | CONFIG_MODULE_UNLOAD=y | ||
97 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
98 | # CONFIG_MODVERSIONS is not set | ||
99 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
100 | # CONFIG_KMOD is not set | ||
101 | CONFIG_BLOCK=y | ||
102 | # CONFIG_LBD is not set | ||
103 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
104 | # CONFIG_LSF is not set | ||
105 | # CONFIG_BLK_DEV_BSG is not set | ||
106 | |||
107 | # | ||
108 | # IO Schedulers | ||
109 | # | ||
110 | CONFIG_IOSCHED_NOOP=y | ||
111 | CONFIG_IOSCHED_AS=y | ||
112 | CONFIG_IOSCHED_DEADLINE=y | ||
113 | CONFIG_IOSCHED_CFQ=y | ||
114 | # CONFIG_DEFAULT_AS is not set | ||
115 | # CONFIG_DEFAULT_DEADLINE is not set | ||
116 | CONFIG_DEFAULT_CFQ=y | ||
117 | # CONFIG_DEFAULT_NOOP is not set | ||
118 | CONFIG_DEFAULT_IOSCHED="cfq" | ||
119 | CONFIG_CLASSIC_RCU=y | ||
120 | |||
121 | # | ||
122 | # System Type | ||
123 | # | ||
124 | # CONFIG_ARCH_AAEC2000 is not set | ||
125 | # CONFIG_ARCH_INTEGRATOR is not set | ||
126 | # CONFIG_ARCH_REALVIEW is not set | ||
127 | # CONFIG_ARCH_VERSATILE is not set | ||
128 | # CONFIG_ARCH_AT91 is not set | ||
129 | # CONFIG_ARCH_CLPS7500 is not set | ||
130 | # CONFIG_ARCH_CLPS711X is not set | ||
131 | # CONFIG_ARCH_CO285 is not set | ||
132 | # CONFIG_ARCH_EBSA110 is not set | ||
133 | # CONFIG_ARCH_EP93XX is not set | ||
134 | # CONFIG_ARCH_FOOTBRIDGE is not set | ||
135 | # CONFIG_ARCH_NETX is not set | ||
136 | # CONFIG_ARCH_H720X is not set | ||
137 | # CONFIG_ARCH_IMX is not set | ||
138 | # CONFIG_ARCH_IOP13XX is not set | ||
139 | # CONFIG_ARCH_IOP32X is not set | ||
140 | # CONFIG_ARCH_IOP33X is not set | ||
141 | # CONFIG_ARCH_IXP23XX is not set | ||
142 | # CONFIG_ARCH_IXP2000 is not set | ||
143 | # CONFIG_ARCH_IXP4XX is not set | ||
144 | # CONFIG_ARCH_L7200 is not set | ||
145 | CONFIG_ARCH_KIRKWOOD=y | ||
146 | # CONFIG_ARCH_KS8695 is not set | ||
147 | # CONFIG_ARCH_NS9XXX is not set | ||
148 | # CONFIG_ARCH_LOKI is not set | ||
149 | # CONFIG_ARCH_MV78XX0 is not set | ||
150 | # CONFIG_ARCH_MXC is not set | ||
151 | # CONFIG_ARCH_ORION5X is not set | ||
152 | # CONFIG_ARCH_PNX4008 is not set | ||
153 | # CONFIG_ARCH_PXA is not set | ||
154 | # CONFIG_ARCH_RPC is not set | ||
155 | # CONFIG_ARCH_SA1100 is not set | ||
156 | # CONFIG_ARCH_S3C2410 is not set | ||
157 | # CONFIG_ARCH_SHARK is not set | ||
158 | # CONFIG_ARCH_LH7A40X is not set | ||
159 | # CONFIG_ARCH_DAVINCI is not set | ||
160 | # CONFIG_ARCH_OMAP is not set | ||
161 | # CONFIG_ARCH_MSM7X00A is not set | ||
162 | |||
163 | # | ||
164 | # Marvell Kirkwood Implementations | ||
165 | # | ||
166 | CONFIG_MACH_DB88F6281_BP=y | ||
167 | CONFIG_MACH_RD88F6192_NAS=y | ||
168 | CONFIG_MACH_RD88F6281=y | ||
169 | |||
170 | # | ||
171 | # Boot options | ||
172 | # | ||
173 | |||
174 | # | ||
175 | # Power management | ||
176 | # | ||
177 | CONFIG_PLAT_ORION=y | ||
178 | |||
179 | # | ||
180 | # Processor Type | ||
181 | # | ||
182 | CONFIG_CPU_32=y | ||
183 | CONFIG_CPU_FEROCEON=y | ||
184 | # CONFIG_CPU_FEROCEON_OLD_ID is not set | ||
185 | CONFIG_CPU_32v5=y | ||
186 | CONFIG_CPU_ABRT_EV5T=y | ||
187 | CONFIG_CPU_PABRT_NOIFAR=y | ||
188 | CONFIG_CPU_CACHE_VIVT=y | ||
189 | CONFIG_CPU_COPY_FEROCEON=y | ||
190 | CONFIG_CPU_TLB_FEROCEON=y | ||
191 | CONFIG_CPU_CP15=y | ||
192 | CONFIG_CPU_CP15_MMU=y | ||
193 | |||
194 | # | ||
195 | # Processor Features | ||
196 | # | ||
197 | CONFIG_ARM_THUMB=y | ||
198 | # CONFIG_CPU_ICACHE_DISABLE is not set | ||
199 | # CONFIG_CPU_DCACHE_DISABLE is not set | ||
200 | CONFIG_OUTER_CACHE=y | ||
201 | CONFIG_CACHE_FEROCEON_L2=y | ||
202 | |||
203 | # | ||
204 | # Bus support | ||
205 | # | ||
206 | CONFIG_PCI=y | ||
207 | CONFIG_PCI_SYSCALL=y | ||
208 | # CONFIG_ARCH_SUPPORTS_MSI is not set | ||
209 | CONFIG_PCI_LEGACY=y | ||
210 | # CONFIG_PCI_DEBUG is not set | ||
211 | # CONFIG_PCCARD is not set | ||
212 | |||
213 | # | ||
214 | # Kernel Features | ||
215 | # | ||
216 | CONFIG_TICK_ONESHOT=y | ||
217 | CONFIG_NO_HZ=y | ||
218 | CONFIG_HIGH_RES_TIMERS=y | ||
219 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
220 | CONFIG_PREEMPT=y | ||
221 | CONFIG_HZ=100 | ||
222 | CONFIG_AEABI=y | ||
223 | # CONFIG_OABI_COMPAT is not set | ||
224 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | ||
225 | CONFIG_SELECT_MEMORY_MODEL=y | ||
226 | CONFIG_FLATMEM_MANUAL=y | ||
227 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
228 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
229 | CONFIG_FLATMEM=y | ||
230 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
231 | # CONFIG_SPARSEMEM_STATIC is not set | ||
232 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
233 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
234 | CONFIG_SPLIT_PTLOCK_CPUS=4096 | ||
235 | # CONFIG_RESOURCES_64BIT is not set | ||
236 | CONFIG_ZONE_DMA_FLAG=1 | ||
237 | CONFIG_BOUNCE=y | ||
238 | CONFIG_VIRT_TO_BUS=y | ||
239 | CONFIG_ALIGNMENT_TRAP=y | ||
240 | |||
241 | # | ||
242 | # Boot options | ||
243 | # | ||
244 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
245 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
246 | CONFIG_CMDLINE="" | ||
247 | # CONFIG_XIP_KERNEL is not set | ||
248 | # CONFIG_KEXEC is not set | ||
249 | |||
250 | # | ||
251 | # Floating point emulation | ||
252 | # | ||
253 | |||
254 | # | ||
255 | # At least one emulation must be selected | ||
256 | # | ||
257 | # CONFIG_VFP is not set | ||
258 | |||
259 | # | ||
260 | # Userspace binary formats | ||
261 | # | ||
262 | CONFIG_BINFMT_ELF=y | ||
263 | # CONFIG_BINFMT_AOUT is not set | ||
264 | # CONFIG_BINFMT_MISC is not set | ||
265 | |||
266 | # | ||
267 | # Power management options | ||
268 | # | ||
269 | # CONFIG_PM is not set | ||
270 | CONFIG_ARCH_SUSPEND_POSSIBLE=y | ||
271 | |||
272 | # | ||
273 | # Networking | ||
274 | # | ||
275 | CONFIG_NET=y | ||
276 | |||
277 | # | ||
278 | # Networking options | ||
279 | # | ||
280 | CONFIG_PACKET=y | ||
281 | CONFIG_PACKET_MMAP=y | ||
282 | CONFIG_UNIX=y | ||
283 | CONFIG_XFRM=y | ||
284 | # CONFIG_XFRM_USER is not set | ||
285 | # CONFIG_XFRM_SUB_POLICY is not set | ||
286 | # CONFIG_XFRM_MIGRATE is not set | ||
287 | # CONFIG_XFRM_STATISTICS is not set | ||
288 | # CONFIG_NET_KEY is not set | ||
289 | CONFIG_INET=y | ||
290 | CONFIG_IP_MULTICAST=y | ||
291 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
292 | CONFIG_IP_FIB_HASH=y | ||
293 | CONFIG_IP_PNP=y | ||
294 | CONFIG_IP_PNP_DHCP=y | ||
295 | CONFIG_IP_PNP_BOOTP=y | ||
296 | # CONFIG_IP_PNP_RARP is not set | ||
297 | # CONFIG_NET_IPIP is not set | ||
298 | # CONFIG_NET_IPGRE is not set | ||
299 | # CONFIG_IP_MROUTE is not set | ||
300 | # CONFIG_ARPD is not set | ||
301 | # CONFIG_SYN_COOKIES is not set | ||
302 | # CONFIG_INET_AH is not set | ||
303 | # CONFIG_INET_ESP is not set | ||
304 | # CONFIG_INET_IPCOMP is not set | ||
305 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
306 | # CONFIG_INET_TUNNEL is not set | ||
307 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | ||
308 | CONFIG_INET_XFRM_MODE_TUNNEL=y | ||
309 | CONFIG_INET_XFRM_MODE_BEET=y | ||
310 | # CONFIG_INET_LRO is not set | ||
311 | CONFIG_INET_DIAG=y | ||
312 | CONFIG_INET_TCP_DIAG=y | ||
313 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
314 | CONFIG_TCP_CONG_CUBIC=y | ||
315 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
316 | # CONFIG_TCP_MD5SIG is not set | ||
317 | # CONFIG_IPV6 is not set | ||
318 | # CONFIG_NETWORK_SECMARK is not set | ||
319 | # CONFIG_NETFILTER is not set | ||
320 | # CONFIG_IP_DCCP is not set | ||
321 | # CONFIG_IP_SCTP is not set | ||
322 | # CONFIG_TIPC is not set | ||
323 | # CONFIG_ATM is not set | ||
324 | # CONFIG_BRIDGE is not set | ||
325 | # CONFIG_VLAN_8021Q is not set | ||
326 | # CONFIG_DECNET is not set | ||
327 | # CONFIG_LLC2 is not set | ||
328 | # CONFIG_IPX is not set | ||
329 | # CONFIG_ATALK is not set | ||
330 | # CONFIG_X25 is not set | ||
331 | # CONFIG_LAPB is not set | ||
332 | # CONFIG_ECONET is not set | ||
333 | # CONFIG_WAN_ROUTER is not set | ||
334 | # CONFIG_NET_SCHED is not set | ||
335 | |||
336 | # | ||
337 | # Network testing | ||
338 | # | ||
339 | CONFIG_NET_PKTGEN=m | ||
340 | # CONFIG_NET_TCPPROBE is not set | ||
341 | # CONFIG_HAMRADIO is not set | ||
342 | # CONFIG_CAN is not set | ||
343 | # CONFIG_IRDA is not set | ||
344 | # CONFIG_BT is not set | ||
345 | # CONFIG_AF_RXRPC is not set | ||
346 | |||
347 | # | ||
348 | # Wireless | ||
349 | # | ||
350 | # CONFIG_CFG80211 is not set | ||
351 | CONFIG_WIRELESS_EXT=y | ||
352 | # CONFIG_MAC80211 is not set | ||
353 | # CONFIG_IEEE80211 is not set | ||
354 | # CONFIG_RFKILL is not set | ||
355 | # CONFIG_NET_9P is not set | ||
356 | |||
357 | # | ||
358 | # Device Drivers | ||
359 | # | ||
360 | |||
361 | # | ||
362 | # Generic Driver Options | ||
363 | # | ||
364 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
365 | CONFIG_STANDALONE=y | ||
366 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
367 | CONFIG_FW_LOADER=y | ||
368 | # CONFIG_DEBUG_DRIVER is not set | ||
369 | # CONFIG_DEBUG_DEVRES is not set | ||
370 | # CONFIG_SYS_HYPERVISOR is not set | ||
371 | # CONFIG_CONNECTOR is not set | ||
372 | CONFIG_MTD=y | ||
373 | # CONFIG_MTD_DEBUG is not set | ||
374 | # CONFIG_MTD_CONCAT is not set | ||
375 | CONFIG_MTD_PARTITIONS=y | ||
376 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
377 | CONFIG_MTD_CMDLINE_PARTS=y | ||
378 | # CONFIG_MTD_AFS_PARTS is not set | ||
379 | # CONFIG_MTD_AR7_PARTS is not set | ||
380 | |||
381 | # | ||
382 | # User Modules And Translation Layers | ||
383 | # | ||
384 | CONFIG_MTD_CHAR=y | ||
385 | CONFIG_MTD_BLKDEVS=y | ||
386 | CONFIG_MTD_BLOCK=y | ||
387 | # CONFIG_FTL is not set | ||
388 | # CONFIG_NFTL is not set | ||
389 | # CONFIG_INFTL is not set | ||
390 | # CONFIG_RFD_FTL is not set | ||
391 | # CONFIG_SSFDC is not set | ||
392 | # CONFIG_MTD_OOPS is not set | ||
393 | |||
394 | # | ||
395 | # RAM/ROM/Flash chip drivers | ||
396 | # | ||
397 | CONFIG_MTD_CFI=y | ||
398 | CONFIG_MTD_JEDECPROBE=y | ||
399 | CONFIG_MTD_GEN_PROBE=y | ||
400 | CONFIG_MTD_CFI_ADV_OPTIONS=y | ||
401 | CONFIG_MTD_CFI_NOSWAP=y | ||
402 | # CONFIG_MTD_CFI_BE_BYTE_SWAP is not set | ||
403 | # CONFIG_MTD_CFI_LE_BYTE_SWAP is not set | ||
404 | CONFIG_MTD_CFI_GEOMETRY=y | ||
405 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
406 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
407 | # CONFIG_MTD_MAP_BANK_WIDTH_4 is not set | ||
408 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
409 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
410 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
411 | CONFIG_MTD_CFI_I1=y | ||
412 | CONFIG_MTD_CFI_I2=y | ||
413 | # CONFIG_MTD_CFI_I4 is not set | ||
414 | # CONFIG_MTD_CFI_I8 is not set | ||
415 | # CONFIG_MTD_OTP is not set | ||
416 | CONFIG_MTD_CFI_INTELEXT=y | ||
417 | # CONFIG_MTD_CFI_AMDSTD is not set | ||
418 | CONFIG_MTD_CFI_STAA=y | ||
419 | CONFIG_MTD_CFI_UTIL=y | ||
420 | # CONFIG_MTD_RAM is not set | ||
421 | # CONFIG_MTD_ROM is not set | ||
422 | # CONFIG_MTD_ABSENT is not set | ||
423 | |||
424 | # | ||
425 | # Mapping drivers for chip access | ||
426 | # | ||
427 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
428 | CONFIG_MTD_PHYSMAP=y | ||
429 | CONFIG_MTD_PHYSMAP_START=0x0 | ||
430 | CONFIG_MTD_PHYSMAP_LEN=0x0 | ||
431 | CONFIG_MTD_PHYSMAP_BANKWIDTH=0 | ||
432 | # CONFIG_MTD_ARM_INTEGRATOR is not set | ||
433 | # CONFIG_MTD_IMPA7 is not set | ||
434 | # CONFIG_MTD_INTEL_VR_NOR is not set | ||
435 | # CONFIG_MTD_PLATRAM is not set | ||
436 | |||
437 | # | ||
438 | # Self-contained MTD device drivers | ||
439 | # | ||
440 | # CONFIG_MTD_PMC551 is not set | ||
441 | # CONFIG_MTD_DATAFLASH is not set | ||
442 | CONFIG_MTD_M25P80=y | ||
443 | CONFIG_M25PXX_USE_FAST_READ=y | ||
444 | # CONFIG_MTD_SLRAM is not set | ||
445 | # CONFIG_MTD_PHRAM is not set | ||
446 | # CONFIG_MTD_MTDRAM is not set | ||
447 | # CONFIG_MTD_BLOCK2MTD is not set | ||
448 | |||
449 | # | ||
450 | # Disk-On-Chip Device Drivers | ||
451 | # | ||
452 | # CONFIG_MTD_DOC2000 is not set | ||
453 | # CONFIG_MTD_DOC2001 is not set | ||
454 | # CONFIG_MTD_DOC2001PLUS is not set | ||
455 | CONFIG_MTD_NAND=y | ||
456 | CONFIG_MTD_NAND_VERIFY_WRITE=y | ||
457 | # CONFIG_MTD_NAND_ECC_SMC is not set | ||
458 | # CONFIG_MTD_NAND_MUSEUM_IDS is not set | ||
459 | CONFIG_MTD_NAND_IDS=y | ||
460 | # CONFIG_MTD_NAND_DISKONCHIP is not set | ||
461 | # CONFIG_MTD_NAND_CAFE is not set | ||
462 | # CONFIG_MTD_NAND_NANDSIM is not set | ||
463 | # CONFIG_MTD_NAND_PLATFORM is not set | ||
464 | # CONFIG_MTD_ALAUDA is not set | ||
465 | CONFIG_MTD_NAND_ORION=y | ||
466 | # CONFIG_MTD_ONENAND is not set | ||
467 | |||
468 | # | ||
469 | # UBI - Unsorted block images | ||
470 | # | ||
471 | # CONFIG_MTD_UBI is not set | ||
472 | # CONFIG_PARPORT is not set | ||
473 | CONFIG_BLK_DEV=y | ||
474 | # CONFIG_BLK_CPQ_DA is not set | ||
475 | # CONFIG_BLK_CPQ_CISS_DA is not set | ||
476 | # CONFIG_BLK_DEV_DAC960 is not set | ||
477 | # CONFIG_BLK_DEV_UMEM is not set | ||
478 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
479 | CONFIG_BLK_DEV_LOOP=y | ||
480 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
481 | # CONFIG_BLK_DEV_NBD is not set | ||
482 | # CONFIG_BLK_DEV_SX8 is not set | ||
483 | # CONFIG_BLK_DEV_UB is not set | ||
484 | # CONFIG_BLK_DEV_RAM is not set | ||
485 | # CONFIG_CDROM_PKTCDVD is not set | ||
486 | # CONFIG_ATA_OVER_ETH is not set | ||
487 | # CONFIG_MISC_DEVICES is not set | ||
488 | CONFIG_HAVE_IDE=y | ||
489 | # CONFIG_IDE is not set | ||
490 | |||
491 | # | ||
492 | # SCSI device support | ||
493 | # | ||
494 | # CONFIG_RAID_ATTRS is not set | ||
495 | CONFIG_SCSI=y | ||
496 | CONFIG_SCSI_DMA=y | ||
497 | # CONFIG_SCSI_TGT is not set | ||
498 | # CONFIG_SCSI_NETLINK is not set | ||
499 | # CONFIG_SCSI_PROC_FS is not set | ||
500 | |||
501 | # | ||
502 | # SCSI support type (disk, tape, CD-ROM) | ||
503 | # | ||
504 | CONFIG_BLK_DEV_SD=y | ||
505 | # CONFIG_CHR_DEV_ST is not set | ||
506 | # CONFIG_CHR_DEV_OSST is not set | ||
507 | CONFIG_BLK_DEV_SR=m | ||
508 | # CONFIG_BLK_DEV_SR_VENDOR is not set | ||
509 | CONFIG_CHR_DEV_SG=m | ||
510 | # CONFIG_CHR_DEV_SCH is not set | ||
511 | |||
512 | # | ||
513 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||
514 | # | ||
515 | # CONFIG_SCSI_MULTI_LUN is not set | ||
516 | # CONFIG_SCSI_CONSTANTS is not set | ||
517 | # CONFIG_SCSI_LOGGING is not set | ||
518 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
519 | CONFIG_SCSI_WAIT_SCAN=m | ||
520 | |||
521 | # | ||
522 | # SCSI Transports | ||
523 | # | ||
524 | # CONFIG_SCSI_SPI_ATTRS is not set | ||
525 | # CONFIG_SCSI_FC_ATTRS is not set | ||
526 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
527 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
528 | # CONFIG_SCSI_SRP_ATTRS is not set | ||
529 | CONFIG_SCSI_LOWLEVEL=y | ||
530 | # CONFIG_ISCSI_TCP is not set | ||
531 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | ||
532 | # CONFIG_SCSI_3W_9XXX is not set | ||
533 | # CONFIG_SCSI_ACARD is not set | ||
534 | # CONFIG_SCSI_AACRAID is not set | ||
535 | # CONFIG_SCSI_AIC7XXX is not set | ||
536 | # CONFIG_SCSI_AIC7XXX_OLD is not set | ||
537 | # CONFIG_SCSI_AIC79XX is not set | ||
538 | # CONFIG_SCSI_AIC94XX is not set | ||
539 | # CONFIG_SCSI_DPT_I2O is not set | ||
540 | # CONFIG_SCSI_ADVANSYS is not set | ||
541 | # CONFIG_SCSI_ARCMSR is not set | ||
542 | # CONFIG_MEGARAID_NEWGEN is not set | ||
543 | # CONFIG_MEGARAID_LEGACY is not set | ||
544 | # CONFIG_MEGARAID_SAS is not set | ||
545 | # CONFIG_SCSI_HPTIOP is not set | ||
546 | # CONFIG_SCSI_DMX3191D is not set | ||
547 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||
548 | # CONFIG_SCSI_IPS is not set | ||
549 | # CONFIG_SCSI_INITIO is not set | ||
550 | # CONFIG_SCSI_INIA100 is not set | ||
551 | # CONFIG_SCSI_MVSAS is not set | ||
552 | # CONFIG_SCSI_STEX is not set | ||
553 | # CONFIG_SCSI_SYM53C8XX_2 is not set | ||
554 | # CONFIG_SCSI_IPR is not set | ||
555 | # CONFIG_SCSI_QLOGIC_1280 is not set | ||
556 | # CONFIG_SCSI_QLA_FC is not set | ||
557 | # CONFIG_SCSI_QLA_ISCSI is not set | ||
558 | # CONFIG_SCSI_LPFC is not set | ||
559 | # CONFIG_SCSI_DC395x is not set | ||
560 | # CONFIG_SCSI_DC390T is not set | ||
561 | # CONFIG_SCSI_NSP32 is not set | ||
562 | # CONFIG_SCSI_DEBUG is not set | ||
563 | # CONFIG_SCSI_SRP is not set | ||
564 | CONFIG_ATA=y | ||
565 | # CONFIG_ATA_NONSTANDARD is not set | ||
566 | CONFIG_SATA_PMP=y | ||
567 | # CONFIG_SATA_AHCI is not set | ||
568 | # CONFIG_SATA_SIL24 is not set | ||
569 | CONFIG_ATA_SFF=y | ||
570 | # CONFIG_SATA_SVW is not set | ||
571 | # CONFIG_ATA_PIIX is not set | ||
572 | CONFIG_SATA_MV=y | ||
573 | # CONFIG_SATA_NV is not set | ||
574 | # CONFIG_PDC_ADMA is not set | ||
575 | # CONFIG_SATA_QSTOR is not set | ||
576 | # CONFIG_SATA_PROMISE is not set | ||
577 | # CONFIG_SATA_SX4 is not set | ||
578 | # CONFIG_SATA_SIL is not set | ||
579 | # CONFIG_SATA_SIS is not set | ||
580 | # CONFIG_SATA_ULI is not set | ||
581 | # CONFIG_SATA_VIA is not set | ||
582 | # CONFIG_SATA_VITESSE is not set | ||
583 | # CONFIG_SATA_INIC162X is not set | ||
584 | # CONFIG_PATA_ALI is not set | ||
585 | # CONFIG_PATA_AMD is not set | ||
586 | # CONFIG_PATA_ARTOP is not set | ||
587 | # CONFIG_PATA_ATIIXP is not set | ||
588 | # CONFIG_PATA_CMD640_PCI is not set | ||
589 | # CONFIG_PATA_CMD64X is not set | ||
590 | # CONFIG_PATA_CS5520 is not set | ||
591 | # CONFIG_PATA_CS5530 is not set | ||
592 | # CONFIG_PATA_CYPRESS is not set | ||
593 | # CONFIG_PATA_EFAR is not set | ||
594 | # CONFIG_ATA_GENERIC is not set | ||
595 | # CONFIG_PATA_HPT366 is not set | ||
596 | # CONFIG_PATA_HPT37X is not set | ||
597 | # CONFIG_PATA_HPT3X2N is not set | ||
598 | # CONFIG_PATA_HPT3X3 is not set | ||
599 | # CONFIG_PATA_IT821X is not set | ||
600 | # CONFIG_PATA_IT8213 is not set | ||
601 | # CONFIG_PATA_JMICRON is not set | ||
602 | # CONFIG_PATA_TRIFLEX is not set | ||
603 | # CONFIG_PATA_MARVELL is not set | ||
604 | # CONFIG_PATA_MPIIX is not set | ||
605 | # CONFIG_PATA_OLDPIIX is not set | ||
606 | # CONFIG_PATA_NETCELL is not set | ||
607 | # CONFIG_PATA_NINJA32 is not set | ||
608 | # CONFIG_PATA_NS87410 is not set | ||
609 | # CONFIG_PATA_NS87415 is not set | ||
610 | # CONFIG_PATA_OPTI is not set | ||
611 | # CONFIG_PATA_OPTIDMA is not set | ||
612 | # CONFIG_PATA_PDC_OLD is not set | ||
613 | # CONFIG_PATA_RADISYS is not set | ||
614 | # CONFIG_PATA_RZ1000 is not set | ||
615 | # CONFIG_PATA_SC1200 is not set | ||
616 | # CONFIG_PATA_SERVERWORKS is not set | ||
617 | # CONFIG_PATA_PDC2027X is not set | ||
618 | # CONFIG_PATA_SIL680 is not set | ||
619 | # CONFIG_PATA_SIS is not set | ||
620 | # CONFIG_PATA_VIA is not set | ||
621 | # CONFIG_PATA_WINBOND is not set | ||
622 | # CONFIG_PATA_PLATFORM is not set | ||
623 | # CONFIG_PATA_SCH is not set | ||
624 | # CONFIG_MD is not set | ||
625 | # CONFIG_FUSION is not set | ||
626 | |||
627 | # | ||
628 | # IEEE 1394 (FireWire) support | ||
629 | # | ||
630 | # CONFIG_FIREWIRE is not set | ||
631 | # CONFIG_IEEE1394 is not set | ||
632 | # CONFIG_I2O is not set | ||
633 | CONFIG_NETDEVICES=y | ||
634 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
635 | # CONFIG_DUMMY is not set | ||
636 | # CONFIG_BONDING is not set | ||
637 | # CONFIG_MACVLAN is not set | ||
638 | # CONFIG_EQUALIZER is not set | ||
639 | # CONFIG_TUN is not set | ||
640 | # CONFIG_VETH is not set | ||
641 | # CONFIG_ARCNET is not set | ||
642 | # CONFIG_PHYLIB is not set | ||
643 | CONFIG_NET_ETHERNET=y | ||
644 | CONFIG_MII=y | ||
645 | # CONFIG_AX88796 is not set | ||
646 | # CONFIG_HAPPYMEAL is not set | ||
647 | # CONFIG_SUNGEM is not set | ||
648 | # CONFIG_CASSINI is not set | ||
649 | # CONFIG_NET_VENDOR_3COM is not set | ||
650 | # CONFIG_SMC91X is not set | ||
651 | # CONFIG_DM9000 is not set | ||
652 | # CONFIG_ENC28J60 is not set | ||
653 | # CONFIG_NET_TULIP is not set | ||
654 | # CONFIG_HP100 is not set | ||
655 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
656 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
657 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
658 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
659 | CONFIG_NET_PCI=y | ||
660 | # CONFIG_PCNET32 is not set | ||
661 | # CONFIG_AMD8111_ETH is not set | ||
662 | # CONFIG_ADAPTEC_STARFIRE is not set | ||
663 | # CONFIG_B44 is not set | ||
664 | # CONFIG_FORCEDETH is not set | ||
665 | # CONFIG_EEPRO100 is not set | ||
666 | # CONFIG_E100 is not set | ||
667 | # CONFIG_FEALNX is not set | ||
668 | # CONFIG_NATSEMI is not set | ||
669 | # CONFIG_NE2K_PCI is not set | ||
670 | # CONFIG_8139CP is not set | ||
671 | # CONFIG_8139TOO is not set | ||
672 | # CONFIG_R6040 is not set | ||
673 | # CONFIG_SIS900 is not set | ||
674 | # CONFIG_EPIC100 is not set | ||
675 | # CONFIG_SUNDANCE is not set | ||
676 | # CONFIG_TLAN is not set | ||
677 | # CONFIG_VIA_RHINE is not set | ||
678 | # CONFIG_SC92031 is not set | ||
679 | CONFIG_NETDEV_1000=y | ||
680 | # CONFIG_ACENIC is not set | ||
681 | # CONFIG_DL2K is not set | ||
682 | CONFIG_E1000=y | ||
683 | CONFIG_E1000_NAPI=y | ||
684 | # CONFIG_E1000_DISABLE_PACKET_SPLIT is not set | ||
685 | # CONFIG_E1000E is not set | ||
686 | # CONFIG_E1000E_ENABLED is not set | ||
687 | # CONFIG_IP1000 is not set | ||
688 | # CONFIG_IGB is not set | ||
689 | # CONFIG_NS83820 is not set | ||
690 | # CONFIG_HAMACHI is not set | ||
691 | # CONFIG_YELLOWFIN is not set | ||
692 | # CONFIG_R8169 is not set | ||
693 | # CONFIG_SIS190 is not set | ||
694 | # CONFIG_SKGE is not set | ||
695 | # CONFIG_SKY2 is not set | ||
696 | # CONFIG_VIA_VELOCITY is not set | ||
697 | # CONFIG_TIGON3 is not set | ||
698 | # CONFIG_BNX2 is not set | ||
699 | CONFIG_MV643XX_ETH=y | ||
700 | # CONFIG_QLA3XXX is not set | ||
701 | # CONFIG_ATL1 is not set | ||
702 | # CONFIG_NETDEV_10000 is not set | ||
703 | # CONFIG_TR is not set | ||
704 | |||
705 | # | ||
706 | # Wireless LAN | ||
707 | # | ||
708 | # CONFIG_WLAN_PRE80211 is not set | ||
709 | # CONFIG_WLAN_80211 is not set | ||
710 | # CONFIG_IWLWIFI_LEDS is not set | ||
711 | |||
712 | # | ||
713 | # USB Network Adapters | ||
714 | # | ||
715 | # CONFIG_USB_CATC is not set | ||
716 | # CONFIG_USB_KAWETH is not set | ||
717 | # CONFIG_USB_PEGASUS is not set | ||
718 | # CONFIG_USB_RTL8150 is not set | ||
719 | # CONFIG_USB_USBNET is not set | ||
720 | # CONFIG_WAN is not set | ||
721 | # CONFIG_FDDI is not set | ||
722 | # CONFIG_HIPPI is not set | ||
723 | # CONFIG_PPP is not set | ||
724 | # CONFIG_SLIP is not set | ||
725 | # CONFIG_NET_FC is not set | ||
726 | # CONFIG_NETCONSOLE is not set | ||
727 | # CONFIG_NETPOLL is not set | ||
728 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
729 | # CONFIG_ISDN is not set | ||
730 | |||
731 | # | ||
732 | # Input device support | ||
733 | # | ||
734 | CONFIG_INPUT=y | ||
735 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
736 | # CONFIG_INPUT_POLLDEV is not set | ||
737 | |||
738 | # | ||
739 | # Userland interfaces | ||
740 | # | ||
741 | CONFIG_INPUT_MOUSEDEV=y | ||
742 | CONFIG_INPUT_MOUSEDEV_PSAUX=y | ||
743 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
744 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
745 | # CONFIG_INPUT_JOYDEV is not set | ||
746 | # CONFIG_INPUT_EVDEV is not set | ||
747 | # CONFIG_INPUT_EVBUG is not set | ||
748 | |||
749 | # | ||
750 | # Input Device Drivers | ||
751 | # | ||
752 | # CONFIG_INPUT_KEYBOARD is not set | ||
753 | # CONFIG_INPUT_MOUSE is not set | ||
754 | # CONFIG_INPUT_JOYSTICK is not set | ||
755 | # CONFIG_INPUT_TABLET is not set | ||
756 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
757 | # CONFIG_INPUT_MISC is not set | ||
758 | |||
759 | # | ||
760 | # Hardware I/O ports | ||
761 | # | ||
762 | # CONFIG_SERIO is not set | ||
763 | # CONFIG_GAMEPORT is not set | ||
764 | |||
765 | # | ||
766 | # Character devices | ||
767 | # | ||
768 | # CONFIG_VT is not set | ||
769 | # CONFIG_DEVKMEM is not set | ||
770 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
771 | # CONFIG_NOZOMI is not set | ||
772 | |||
773 | # | ||
774 | # Serial drivers | ||
775 | # | ||
776 | CONFIG_SERIAL_8250=y | ||
777 | CONFIG_SERIAL_8250_CONSOLE=y | ||
778 | # CONFIG_SERIAL_8250_PCI is not set | ||
779 | CONFIG_SERIAL_8250_NR_UARTS=4 | ||
780 | CONFIG_SERIAL_8250_RUNTIME_UARTS=2 | ||
781 | # CONFIG_SERIAL_8250_EXTENDED is not set | ||
782 | |||
783 | # | ||
784 | # Non-8250 serial port support | ||
785 | # | ||
786 | CONFIG_SERIAL_CORE=y | ||
787 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
788 | # CONFIG_SERIAL_JSM is not set | ||
789 | CONFIG_UNIX98_PTYS=y | ||
790 | CONFIG_LEGACY_PTYS=y | ||
791 | CONFIG_LEGACY_PTY_COUNT=16 | ||
792 | # CONFIG_IPMI_HANDLER is not set | ||
793 | # CONFIG_HW_RANDOM is not set | ||
794 | # CONFIG_NVRAM is not set | ||
795 | # CONFIG_R3964 is not set | ||
796 | # CONFIG_APPLICOM is not set | ||
797 | # CONFIG_RAW_DRIVER is not set | ||
798 | # CONFIG_TCG_TPM is not set | ||
799 | CONFIG_DEVPORT=y | ||
800 | CONFIG_I2C=y | ||
801 | CONFIG_I2C_BOARDINFO=y | ||
802 | CONFIG_I2C_CHARDEV=y | ||
803 | |||
804 | # | ||
805 | # I2C Hardware Bus support | ||
806 | # | ||
807 | # CONFIG_I2C_ALI1535 is not set | ||
808 | # CONFIG_I2C_ALI1563 is not set | ||
809 | # CONFIG_I2C_ALI15X3 is not set | ||
810 | # CONFIG_I2C_AMD756 is not set | ||
811 | # CONFIG_I2C_AMD8111 is not set | ||
812 | # CONFIG_I2C_GPIO is not set | ||
813 | # CONFIG_I2C_I801 is not set | ||
814 | # CONFIG_I2C_I810 is not set | ||
815 | # CONFIG_I2C_PIIX4 is not set | ||
816 | # CONFIG_I2C_NFORCE2 is not set | ||
817 | # CONFIG_I2C_OCORES is not set | ||
818 | # CONFIG_I2C_PARPORT_LIGHT is not set | ||
819 | # CONFIG_I2C_PROSAVAGE is not set | ||
820 | # CONFIG_I2C_SAVAGE4 is not set | ||
821 | # CONFIG_I2C_SIMTEC is not set | ||
822 | # CONFIG_I2C_SIS5595 is not set | ||
823 | # CONFIG_I2C_SIS630 is not set | ||
824 | # CONFIG_I2C_SIS96X is not set | ||
825 | # CONFIG_I2C_TAOS_EVM is not set | ||
826 | # CONFIG_I2C_STUB is not set | ||
827 | # CONFIG_I2C_TINY_USB is not set | ||
828 | # CONFIG_I2C_VIA is not set | ||
829 | # CONFIG_I2C_VIAPRO is not set | ||
830 | # CONFIG_I2C_VOODOO3 is not set | ||
831 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
832 | CONFIG_I2C_MV64XXX=y | ||
833 | |||
834 | # | ||
835 | # Miscellaneous I2C Chip support | ||
836 | # | ||
837 | # CONFIG_DS1682 is not set | ||
838 | # CONFIG_SENSORS_EEPROM is not set | ||
839 | # CONFIG_SENSORS_PCF8574 is not set | ||
840 | # CONFIG_PCF8575 is not set | ||
841 | # CONFIG_SENSORS_PCF8591 is not set | ||
842 | # CONFIG_SENSORS_MAX6875 is not set | ||
843 | # CONFIG_SENSORS_TSL2550 is not set | ||
844 | # CONFIG_I2C_DEBUG_CORE is not set | ||
845 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
846 | # CONFIG_I2C_DEBUG_BUS is not set | ||
847 | # CONFIG_I2C_DEBUG_CHIP is not set | ||
848 | CONFIG_SPI=y | ||
849 | # CONFIG_SPI_DEBUG is not set | ||
850 | CONFIG_SPI_MASTER=y | ||
851 | |||
852 | # | ||
853 | # SPI Master Controller Drivers | ||
854 | # | ||
855 | # CONFIG_SPI_BITBANG is not set | ||
856 | CONFIG_SPI_ORION=y | ||
857 | |||
858 | # | ||
859 | # SPI Protocol Masters | ||
860 | # | ||
861 | # CONFIG_SPI_AT25 is not set | ||
862 | # CONFIG_SPI_SPIDEV is not set | ||
863 | # CONFIG_SPI_TLE62X0 is not set | ||
864 | # CONFIG_W1 is not set | ||
865 | # CONFIG_POWER_SUPPLY is not set | ||
866 | # CONFIG_HWMON is not set | ||
867 | # CONFIG_WATCHDOG is not set | ||
868 | |||
869 | # | ||
870 | # Sonics Silicon Backplane | ||
871 | # | ||
872 | CONFIG_SSB_POSSIBLE=y | ||
873 | # CONFIG_SSB is not set | ||
874 | |||
875 | # | ||
876 | # Multifunction device drivers | ||
877 | # | ||
878 | # CONFIG_MFD_SM501 is not set | ||
879 | # CONFIG_MFD_ASIC3 is not set | ||
880 | # CONFIG_HTC_PASIC3 is not set | ||
881 | |||
882 | # | ||
883 | # Multimedia devices | ||
884 | # | ||
885 | |||
886 | # | ||
887 | # Multimedia core support | ||
888 | # | ||
889 | # CONFIG_VIDEO_DEV is not set | ||
890 | # CONFIG_DVB_CORE is not set | ||
891 | # CONFIG_VIDEO_MEDIA is not set | ||
892 | |||
893 | # | ||
894 | # Multimedia drivers | ||
895 | # | ||
896 | # CONFIG_DAB is not set | ||
897 | |||
898 | # | ||
899 | # Graphics support | ||
900 | # | ||
901 | # CONFIG_DRM is not set | ||
902 | # CONFIG_VGASTATE is not set | ||
903 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
904 | # CONFIG_FB is not set | ||
905 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
906 | |||
907 | # | ||
908 | # Display device support | ||
909 | # | ||
910 | # CONFIG_DISPLAY_SUPPORT is not set | ||
911 | |||
912 | # | ||
913 | # Sound | ||
914 | # | ||
915 | # CONFIG_SOUND is not set | ||
916 | CONFIG_HID_SUPPORT=y | ||
917 | CONFIG_HID=y | ||
918 | # CONFIG_HID_DEBUG is not set | ||
919 | # CONFIG_HIDRAW is not set | ||
920 | |||
921 | # | ||
922 | # USB Input Devices | ||
923 | # | ||
924 | CONFIG_USB_HID=y | ||
925 | # CONFIG_USB_HIDINPUT_POWERBOOK is not set | ||
926 | # CONFIG_HID_FF is not set | ||
927 | # CONFIG_USB_HIDDEV is not set | ||
928 | CONFIG_USB_SUPPORT=y | ||
929 | CONFIG_USB_ARCH_HAS_HCD=y | ||
930 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
931 | CONFIG_USB_ARCH_HAS_EHCI=y | ||
932 | CONFIG_USB=y | ||
933 | # CONFIG_USB_DEBUG is not set | ||
934 | # CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set | ||
935 | |||
936 | # | ||
937 | # Miscellaneous USB options | ||
938 | # | ||
939 | CONFIG_USB_DEVICEFS=y | ||
940 | CONFIG_USB_DEVICE_CLASS=y | ||
941 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
942 | # CONFIG_USB_OTG is not set | ||
943 | # CONFIG_USB_OTG_WHITELIST is not set | ||
944 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | ||
945 | |||
946 | # | ||
947 | # USB Host Controller Drivers | ||
948 | # | ||
949 | # CONFIG_USB_C67X00_HCD is not set | ||
950 | CONFIG_USB_EHCI_HCD=y | ||
951 | CONFIG_USB_EHCI_ROOT_HUB_TT=y | ||
952 | CONFIG_USB_EHCI_TT_NEWSCHED=y | ||
953 | # CONFIG_USB_ISP116X_HCD is not set | ||
954 | # CONFIG_USB_ISP1760_HCD is not set | ||
955 | # CONFIG_USB_OHCI_HCD is not set | ||
956 | # CONFIG_USB_UHCI_HCD is not set | ||
957 | # CONFIG_USB_SL811_HCD is not set | ||
958 | # CONFIG_USB_R8A66597_HCD is not set | ||
959 | |||
960 | # | ||
961 | # USB Device Class drivers | ||
962 | # | ||
963 | # CONFIG_USB_ACM is not set | ||
964 | CONFIG_USB_PRINTER=y | ||
965 | # CONFIG_USB_WDM is not set | ||
966 | |||
967 | # | ||
968 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
969 | # | ||
970 | |||
971 | # | ||
972 | # may also be needed; see USB_STORAGE Help for more information | ||
973 | # | ||
974 | CONFIG_USB_STORAGE=y | ||
975 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
976 | CONFIG_USB_STORAGE_DATAFAB=y | ||
977 | CONFIG_USB_STORAGE_FREECOM=y | ||
978 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
979 | CONFIG_USB_STORAGE_DPCM=y | ||
980 | # CONFIG_USB_STORAGE_USBAT is not set | ||
981 | CONFIG_USB_STORAGE_SDDR09=y | ||
982 | CONFIG_USB_STORAGE_SDDR55=y | ||
983 | CONFIG_USB_STORAGE_JUMPSHOT=y | ||
984 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
985 | # CONFIG_USB_STORAGE_ONETOUCH is not set | ||
986 | # CONFIG_USB_STORAGE_KARMA is not set | ||
987 | # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set | ||
988 | # CONFIG_USB_LIBUSUAL is not set | ||
989 | |||
990 | # | ||
991 | # USB Imaging devices | ||
992 | # | ||
993 | # CONFIG_USB_MDC800 is not set | ||
994 | # CONFIG_USB_MICROTEK is not set | ||
995 | # CONFIG_USB_MON is not set | ||
996 | |||
997 | # | ||
998 | # USB port drivers | ||
999 | # | ||
1000 | # CONFIG_USB_SERIAL is not set | ||
1001 | |||
1002 | # | ||
1003 | # USB Miscellaneous drivers | ||
1004 | # | ||
1005 | # CONFIG_USB_EMI62 is not set | ||
1006 | # CONFIG_USB_EMI26 is not set | ||
1007 | # CONFIG_USB_ADUTUX is not set | ||
1008 | # CONFIG_USB_AUERSWALD is not set | ||
1009 | # CONFIG_USB_RIO500 is not set | ||
1010 | # CONFIG_USB_LEGOTOWER is not set | ||
1011 | # CONFIG_USB_LCD is not set | ||
1012 | # CONFIG_USB_BERRY_CHARGE is not set | ||
1013 | # CONFIG_USB_LED is not set | ||
1014 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
1015 | # CONFIG_USB_CYTHERM is not set | ||
1016 | # CONFIG_USB_PHIDGET is not set | ||
1017 | # CONFIG_USB_IDMOUSE is not set | ||
1018 | # CONFIG_USB_FTDI_ELAN is not set | ||
1019 | # CONFIG_USB_APPLEDISPLAY is not set | ||
1020 | # CONFIG_USB_SISUSBVGA is not set | ||
1021 | # CONFIG_USB_LD is not set | ||
1022 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
1023 | # CONFIG_USB_IOWARRIOR is not set | ||
1024 | # CONFIG_USB_TEST is not set | ||
1025 | # CONFIG_USB_ISIGHTFW is not set | ||
1026 | # CONFIG_USB_GADGET is not set | ||
1027 | # CONFIG_MMC is not set | ||
1028 | CONFIG_NEW_LEDS=y | ||
1029 | # CONFIG_LEDS_CLASS is not set | ||
1030 | |||
1031 | # | ||
1032 | # LED drivers | ||
1033 | # | ||
1034 | |||
1035 | # | ||
1036 | # LED Triggers | ||
1037 | # | ||
1038 | # CONFIG_LEDS_TRIGGERS is not set | ||
1039 | CONFIG_RTC_LIB=y | ||
1040 | CONFIG_RTC_CLASS=y | ||
1041 | # CONFIG_RTC_DEBUG is not set | ||
1042 | |||
1043 | # | ||
1044 | # RTC interfaces | ||
1045 | # | ||
1046 | CONFIG_RTC_INTF_SYSFS=y | ||
1047 | CONFIG_RTC_INTF_PROC=y | ||
1048 | CONFIG_RTC_INTF_DEV=y | ||
1049 | # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set | ||
1050 | # CONFIG_RTC_DRV_TEST is not set | ||
1051 | |||
1052 | # | ||
1053 | # I2C RTC drivers | ||
1054 | # | ||
1055 | # CONFIG_RTC_DRV_DS1307 is not set | ||
1056 | # CONFIG_RTC_DRV_DS1374 is not set | ||
1057 | # CONFIG_RTC_DRV_DS1672 is not set | ||
1058 | # CONFIG_RTC_DRV_MAX6900 is not set | ||
1059 | CONFIG_RTC_DRV_MV=y | ||
1060 | # CONFIG_RTC_DRV_RS5C372 is not set | ||
1061 | # CONFIG_RTC_DRV_ISL1208 is not set | ||
1062 | # CONFIG_RTC_DRV_X1205 is not set | ||
1063 | # CONFIG_RTC_DRV_PCF8563 is not set | ||
1064 | # CONFIG_RTC_DRV_PCF8583 is not set | ||
1065 | # CONFIG_RTC_DRV_M41T80 is not set | ||
1066 | # CONFIG_RTC_DRV_S35390A is not set | ||
1067 | |||
1068 | # | ||
1069 | # SPI RTC drivers | ||
1070 | # | ||
1071 | # CONFIG_RTC_DRV_MAX6902 is not set | ||
1072 | # CONFIG_RTC_DRV_R9701 is not set | ||
1073 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
1074 | |||
1075 | # | ||
1076 | # Platform RTC drivers | ||
1077 | # | ||
1078 | # CONFIG_RTC_DRV_CMOS is not set | ||
1079 | # CONFIG_RTC_DRV_DS1511 is not set | ||
1080 | # CONFIG_RTC_DRV_DS1553 is not set | ||
1081 | # CONFIG_RTC_DRV_DS1742 is not set | ||
1082 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
1083 | # CONFIG_RTC_DRV_M48T86 is not set | ||
1084 | # CONFIG_RTC_DRV_M48T59 is not set | ||
1085 | # CONFIG_RTC_DRV_V3020 is not set | ||
1086 | |||
1087 | # | ||
1088 | # on-CPU RTC drivers | ||
1089 | # | ||
1090 | CONFIG_DMADEVICES=y | ||
1091 | |||
1092 | # | ||
1093 | # DMA Devices | ||
1094 | # | ||
1095 | CONFIG_MV_XOR=y | ||
1096 | CONFIG_DMA_ENGINE=y | ||
1097 | |||
1098 | # | ||
1099 | # DMA Clients | ||
1100 | # | ||
1101 | # CONFIG_NET_DMA is not set | ||
1102 | # CONFIG_UIO is not set | ||
1103 | |||
1104 | # | ||
1105 | # File systems | ||
1106 | # | ||
1107 | CONFIG_EXT2_FS=y | ||
1108 | # CONFIG_EXT2_FS_XATTR is not set | ||
1109 | # CONFIG_EXT2_FS_XIP is not set | ||
1110 | CONFIG_EXT3_FS=y | ||
1111 | # CONFIG_EXT3_FS_XATTR is not set | ||
1112 | # CONFIG_EXT4DEV_FS is not set | ||
1113 | CONFIG_JBD=y | ||
1114 | # CONFIG_REISERFS_FS is not set | ||
1115 | # CONFIG_JFS_FS is not set | ||
1116 | # CONFIG_FS_POSIX_ACL is not set | ||
1117 | CONFIG_XFS_FS=y | ||
1118 | # CONFIG_XFS_QUOTA is not set | ||
1119 | # CONFIG_XFS_POSIX_ACL is not set | ||
1120 | # CONFIG_XFS_RT is not set | ||
1121 | # CONFIG_XFS_DEBUG is not set | ||
1122 | # CONFIG_OCFS2_FS is not set | ||
1123 | CONFIG_DNOTIFY=y | ||
1124 | CONFIG_INOTIFY=y | ||
1125 | CONFIG_INOTIFY_USER=y | ||
1126 | # CONFIG_QUOTA is not set | ||
1127 | # CONFIG_AUTOFS_FS is not set | ||
1128 | # CONFIG_AUTOFS4_FS is not set | ||
1129 | # CONFIG_FUSE_FS is not set | ||
1130 | |||
1131 | # | ||
1132 | # CD-ROM/DVD Filesystems | ||
1133 | # | ||
1134 | CONFIG_ISO9660_FS=y | ||
1135 | CONFIG_JOLIET=y | ||
1136 | # CONFIG_ZISOFS is not set | ||
1137 | CONFIG_UDF_FS=m | ||
1138 | CONFIG_UDF_NLS=y | ||
1139 | |||
1140 | # | ||
1141 | # DOS/FAT/NT Filesystems | ||
1142 | # | ||
1143 | CONFIG_FAT_FS=y | ||
1144 | CONFIG_MSDOS_FS=y | ||
1145 | CONFIG_VFAT_FS=y | ||
1146 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
1147 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
1148 | # CONFIG_NTFS_FS is not set | ||
1149 | |||
1150 | # | ||
1151 | # Pseudo filesystems | ||
1152 | # | ||
1153 | CONFIG_PROC_FS=y | ||
1154 | CONFIG_PROC_SYSCTL=y | ||
1155 | CONFIG_SYSFS=y | ||
1156 | CONFIG_TMPFS=y | ||
1157 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
1158 | # CONFIG_HUGETLB_PAGE is not set | ||
1159 | # CONFIG_CONFIGFS_FS is not set | ||
1160 | |||
1161 | # | ||
1162 | # Miscellaneous filesystems | ||
1163 | # | ||
1164 | # CONFIG_ADFS_FS is not set | ||
1165 | # CONFIG_AFFS_FS is not set | ||
1166 | # CONFIG_HFS_FS is not set | ||
1167 | # CONFIG_HFSPLUS_FS is not set | ||
1168 | # CONFIG_BEFS_FS is not set | ||
1169 | # CONFIG_BFS_FS is not set | ||
1170 | # CONFIG_EFS_FS is not set | ||
1171 | CONFIG_JFFS2_FS=y | ||
1172 | CONFIG_JFFS2_FS_DEBUG=0 | ||
1173 | CONFIG_JFFS2_FS_WRITEBUFFER=y | ||
1174 | # CONFIG_JFFS2_FS_WBUF_VERIFY is not set | ||
1175 | # CONFIG_JFFS2_SUMMARY is not set | ||
1176 | # CONFIG_JFFS2_FS_XATTR is not set | ||
1177 | # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set | ||
1178 | CONFIG_JFFS2_ZLIB=y | ||
1179 | # CONFIG_JFFS2_LZO is not set | ||
1180 | CONFIG_JFFS2_RTIME=y | ||
1181 | # CONFIG_JFFS2_RUBIN is not set | ||
1182 | CONFIG_CRAMFS=y | ||
1183 | # CONFIG_VXFS_FS is not set | ||
1184 | # CONFIG_MINIX_FS is not set | ||
1185 | # CONFIG_HPFS_FS is not set | ||
1186 | # CONFIG_QNX4FS_FS is not set | ||
1187 | # CONFIG_ROMFS_FS is not set | ||
1188 | # CONFIG_SYSV_FS is not set | ||
1189 | # CONFIG_UFS_FS is not set | ||
1190 | CONFIG_NETWORK_FILESYSTEMS=y | ||
1191 | CONFIG_NFS_FS=y | ||
1192 | CONFIG_NFS_V3=y | ||
1193 | # CONFIG_NFS_V3_ACL is not set | ||
1194 | # CONFIG_NFS_V4 is not set | ||
1195 | # CONFIG_NFSD is not set | ||
1196 | CONFIG_ROOT_NFS=y | ||
1197 | CONFIG_LOCKD=y | ||
1198 | CONFIG_LOCKD_V4=y | ||
1199 | CONFIG_NFS_COMMON=y | ||
1200 | CONFIG_SUNRPC=y | ||
1201 | # CONFIG_SUNRPC_BIND34 is not set | ||
1202 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
1203 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
1204 | # CONFIG_SMB_FS is not set | ||
1205 | # CONFIG_CIFS is not set | ||
1206 | # CONFIG_NCP_FS is not set | ||
1207 | # CONFIG_CODA_FS is not set | ||
1208 | # CONFIG_AFS_FS is not set | ||
1209 | |||
1210 | # | ||
1211 | # Partition Types | ||
1212 | # | ||
1213 | CONFIG_PARTITION_ADVANCED=y | ||
1214 | # CONFIG_ACORN_PARTITION is not set | ||
1215 | # CONFIG_OSF_PARTITION is not set | ||
1216 | # CONFIG_AMIGA_PARTITION is not set | ||
1217 | # CONFIG_ATARI_PARTITION is not set | ||
1218 | # CONFIG_MAC_PARTITION is not set | ||
1219 | CONFIG_MSDOS_PARTITION=y | ||
1220 | # CONFIG_BSD_DISKLABEL is not set | ||
1221 | # CONFIG_MINIX_SUBPARTITION is not set | ||
1222 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
1223 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
1224 | # CONFIG_LDM_PARTITION is not set | ||
1225 | # CONFIG_SGI_PARTITION is not set | ||
1226 | # CONFIG_ULTRIX_PARTITION is not set | ||
1227 | # CONFIG_SUN_PARTITION is not set | ||
1228 | # CONFIG_KARMA_PARTITION is not set | ||
1229 | # CONFIG_EFI_PARTITION is not set | ||
1230 | # CONFIG_SYSV68_PARTITION is not set | ||
1231 | CONFIG_NLS=y | ||
1232 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
1233 | CONFIG_NLS_CODEPAGE_437=y | ||
1234 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
1235 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
1236 | CONFIG_NLS_CODEPAGE_850=y | ||
1237 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
1238 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
1239 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
1240 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
1241 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
1242 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
1243 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
1244 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
1245 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
1246 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
1247 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
1248 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
1249 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
1250 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
1251 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
1252 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
1253 | # CONFIG_NLS_ISO8859_8 is not set | ||
1254 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
1255 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
1256 | # CONFIG_NLS_ASCII is not set | ||
1257 | CONFIG_NLS_ISO8859_1=y | ||
1258 | CONFIG_NLS_ISO8859_2=y | ||
1259 | # CONFIG_NLS_ISO8859_3 is not set | ||
1260 | # CONFIG_NLS_ISO8859_4 is not set | ||
1261 | # CONFIG_NLS_ISO8859_5 is not set | ||
1262 | # CONFIG_NLS_ISO8859_6 is not set | ||
1263 | # CONFIG_NLS_ISO8859_7 is not set | ||
1264 | # CONFIG_NLS_ISO8859_9 is not set | ||
1265 | # CONFIG_NLS_ISO8859_13 is not set | ||
1266 | # CONFIG_NLS_ISO8859_14 is not set | ||
1267 | # CONFIG_NLS_ISO8859_15 is not set | ||
1268 | # CONFIG_NLS_KOI8_R is not set | ||
1269 | # CONFIG_NLS_KOI8_U is not set | ||
1270 | CONFIG_NLS_UTF8=y | ||
1271 | # CONFIG_DLM is not set | ||
1272 | |||
1273 | # | ||
1274 | # Kernel hacking | ||
1275 | # | ||
1276 | # CONFIG_PRINTK_TIME is not set | ||
1277 | CONFIG_ENABLE_WARN_DEPRECATED=y | ||
1278 | CONFIG_ENABLE_MUST_CHECK=y | ||
1279 | CONFIG_FRAME_WARN=1024 | ||
1280 | CONFIG_MAGIC_SYSRQ=y | ||
1281 | # CONFIG_UNUSED_SYMBOLS is not set | ||
1282 | # CONFIG_DEBUG_FS is not set | ||
1283 | # CONFIG_HEADERS_CHECK is not set | ||
1284 | CONFIG_DEBUG_KERNEL=y | ||
1285 | # CONFIG_DEBUG_SHIRQ is not set | ||
1286 | CONFIG_DETECT_SOFTLOCKUP=y | ||
1287 | # CONFIG_SCHED_DEBUG is not set | ||
1288 | # CONFIG_SCHEDSTATS is not set | ||
1289 | # CONFIG_TIMER_STATS is not set | ||
1290 | # CONFIG_DEBUG_OBJECTS is not set | ||
1291 | # CONFIG_DEBUG_SLAB is not set | ||
1292 | # CONFIG_DEBUG_PREEMPT is not set | ||
1293 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
1294 | # CONFIG_RT_MUTEX_TESTER is not set | ||
1295 | # CONFIG_DEBUG_SPINLOCK is not set | ||
1296 | # CONFIG_DEBUG_MUTEXES is not set | ||
1297 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
1298 | # CONFIG_PROVE_LOCKING is not set | ||
1299 | # CONFIG_LOCK_STAT is not set | ||
1300 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
1301 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
1302 | # CONFIG_DEBUG_KOBJECT is not set | ||
1303 | # CONFIG_DEBUG_BUGVERBOSE is not set | ||
1304 | CONFIG_DEBUG_INFO=y | ||
1305 | # CONFIG_DEBUG_VM is not set | ||
1306 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
1307 | # CONFIG_DEBUG_LIST is not set | ||
1308 | # CONFIG_DEBUG_SG is not set | ||
1309 | CONFIG_FRAME_POINTER=y | ||
1310 | # CONFIG_BOOT_PRINTK_DELAY is not set | ||
1311 | # CONFIG_RCU_TORTURE_TEST is not set | ||
1312 | # CONFIG_KPROBES_SANITY_TEST is not set | ||
1313 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
1314 | # CONFIG_LKDTM is not set | ||
1315 | # CONFIG_FAULT_INJECTION is not set | ||
1316 | # CONFIG_LATENCYTOP is not set | ||
1317 | # CONFIG_SAMPLES is not set | ||
1318 | CONFIG_DEBUG_USER=y | ||
1319 | CONFIG_DEBUG_ERRORS=y | ||
1320 | # CONFIG_DEBUG_STACK_USAGE is not set | ||
1321 | CONFIG_DEBUG_LL=y | ||
1322 | # CONFIG_DEBUG_ICEDCC is not set | ||
1323 | |||
1324 | # | ||
1325 | # Security options | ||
1326 | # | ||
1327 | # CONFIG_KEYS is not set | ||
1328 | # CONFIG_SECURITY is not set | ||
1329 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | ||
1330 | CONFIG_ASYNC_CORE=y | ||
1331 | CONFIG_CRYPTO=y | ||
1332 | |||
1333 | # | ||
1334 | # Crypto core or helper | ||
1335 | # | ||
1336 | CONFIG_CRYPTO_ALGAPI=m | ||
1337 | CONFIG_CRYPTO_BLKCIPHER=m | ||
1338 | CONFIG_CRYPTO_MANAGER=m | ||
1339 | # CONFIG_CRYPTO_GF128MUL is not set | ||
1340 | # CONFIG_CRYPTO_NULL is not set | ||
1341 | # CONFIG_CRYPTO_CRYPTD is not set | ||
1342 | # CONFIG_CRYPTO_AUTHENC is not set | ||
1343 | # CONFIG_CRYPTO_TEST is not set | ||
1344 | |||
1345 | # | ||
1346 | # Authenticated Encryption with Associated Data | ||
1347 | # | ||
1348 | # CONFIG_CRYPTO_CCM is not set | ||
1349 | # CONFIG_CRYPTO_GCM is not set | ||
1350 | # CONFIG_CRYPTO_SEQIV is not set | ||
1351 | |||
1352 | # | ||
1353 | # Block modes | ||
1354 | # | ||
1355 | CONFIG_CRYPTO_CBC=m | ||
1356 | # CONFIG_CRYPTO_CTR is not set | ||
1357 | # CONFIG_CRYPTO_CTS is not set | ||
1358 | CONFIG_CRYPTO_ECB=m | ||
1359 | # CONFIG_CRYPTO_LRW is not set | ||
1360 | CONFIG_CRYPTO_PCBC=m | ||
1361 | # CONFIG_CRYPTO_XTS is not set | ||
1362 | |||
1363 | # | ||
1364 | # Hash modes | ||
1365 | # | ||
1366 | # CONFIG_CRYPTO_HMAC is not set | ||
1367 | # CONFIG_CRYPTO_XCBC is not set | ||
1368 | |||
1369 | # | ||
1370 | # Digest | ||
1371 | # | ||
1372 | # CONFIG_CRYPTO_CRC32C is not set | ||
1373 | # CONFIG_CRYPTO_MD4 is not set | ||
1374 | # CONFIG_CRYPTO_MD5 is not set | ||
1375 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
1376 | # CONFIG_CRYPTO_SHA1 is not set | ||
1377 | # CONFIG_CRYPTO_SHA256 is not set | ||
1378 | # CONFIG_CRYPTO_SHA512 is not set | ||
1379 | # CONFIG_CRYPTO_TGR192 is not set | ||
1380 | # CONFIG_CRYPTO_WP512 is not set | ||
1381 | |||
1382 | # | ||
1383 | # Ciphers | ||
1384 | # | ||
1385 | # CONFIG_CRYPTO_AES is not set | ||
1386 | # CONFIG_CRYPTO_ANUBIS is not set | ||
1387 | # CONFIG_CRYPTO_ARC4 is not set | ||
1388 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
1389 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
1390 | # CONFIG_CRYPTO_CAST5 is not set | ||
1391 | # CONFIG_CRYPTO_CAST6 is not set | ||
1392 | # CONFIG_CRYPTO_DES is not set | ||
1393 | # CONFIG_CRYPTO_FCRYPT is not set | ||
1394 | # CONFIG_CRYPTO_KHAZAD is not set | ||
1395 | # CONFIG_CRYPTO_SALSA20 is not set | ||
1396 | # CONFIG_CRYPTO_SEED is not set | ||
1397 | # CONFIG_CRYPTO_SERPENT is not set | ||
1398 | # CONFIG_CRYPTO_TEA is not set | ||
1399 | # CONFIG_CRYPTO_TWOFISH is not set | ||
1400 | |||
1401 | # | ||
1402 | # Compression | ||
1403 | # | ||
1404 | # CONFIG_CRYPTO_DEFLATE is not set | ||
1405 | # CONFIG_CRYPTO_LZO is not set | ||
1406 | CONFIG_CRYPTO_HW=y | ||
1407 | # CONFIG_CRYPTO_DEV_HIFN_795X is not set | ||
1408 | |||
1409 | # | ||
1410 | # Library routines | ||
1411 | # | ||
1412 | CONFIG_BITREVERSE=y | ||
1413 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
1414 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
1415 | CONFIG_CRC_CCITT=y | ||
1416 | CONFIG_CRC16=y | ||
1417 | CONFIG_CRC_ITU_T=m | ||
1418 | CONFIG_CRC32=y | ||
1419 | # CONFIG_CRC7 is not set | ||
1420 | CONFIG_LIBCRC32C=y | ||
1421 | CONFIG_ZLIB_INFLATE=y | ||
1422 | CONFIG_ZLIB_DEFLATE=y | ||
1423 | CONFIG_PLIST=y | ||
1424 | CONFIG_HAS_IOMEM=y | ||
1425 | CONFIG_HAS_IOPORT=y | ||
1426 | CONFIG_HAS_DMA=y | ||
diff --git a/arch/arm/configs/ks8695_defconfig b/arch/arm/configs/ks8695_defconfig index 8ab21a0719e9..6077f2cb88e4 100644 --- a/arch/arm/configs/ks8695_defconfig +++ b/arch/arm/configs/ks8695_defconfig | |||
@@ -174,7 +174,6 @@ CONFIG_PCCARD_NONSTATIC=y | |||
174 | # Kernel Features | 174 | # Kernel Features |
175 | # | 175 | # |
176 | # CONFIG_PREEMPT is not set | 176 | # CONFIG_PREEMPT is not set |
177 | # CONFIG_NO_IDLE_HZ is not set | ||
178 | CONFIG_HZ=100 | 177 | CONFIG_HZ=100 |
179 | # CONFIG_AEABI is not set | 178 | # CONFIG_AEABI is not set |
180 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 179 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/configs/loki_defconfig b/arch/arm/configs/loki_defconfig new file mode 100644 index 000000000000..17da7c3b3d53 --- /dev/null +++ b/arch/arm/configs/loki_defconfig | |||
@@ -0,0 +1,1147 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.26-rc5 | ||
4 | # Fri Jun 13 03:07:49 2008 | ||
5 | # | ||
6 | CONFIG_ARM=y | ||
7 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y | ||
8 | # CONFIG_GENERIC_GPIO is not set | ||
9 | CONFIG_GENERIC_TIME=y | ||
10 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
11 | CONFIG_MMU=y | ||
12 | # CONFIG_NO_IOPORT is not set | ||
13 | CONFIG_GENERIC_HARDIRQS=y | ||
14 | CONFIG_STACKTRACE_SUPPORT=y | ||
15 | CONFIG_HAVE_LATENCYTOP_SUPPORT=y | ||
16 | CONFIG_LOCKDEP_SUPPORT=y | ||
17 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
18 | CONFIG_HARDIRQS_SW_RESEND=y | ||
19 | CONFIG_GENERIC_IRQ_PROBE=y | ||
20 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
21 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | ||
22 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | ||
23 | CONFIG_GENERIC_HWEIGHT=y | ||
24 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
25 | CONFIG_ARCH_SUPPORTS_AOUT=y | ||
26 | CONFIG_ZONE_DMA=y | ||
27 | CONFIG_VECTORS_BASE=0xffff0000 | ||
28 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
29 | |||
30 | # | ||
31 | # General setup | ||
32 | # | ||
33 | CONFIG_EXPERIMENTAL=y | ||
34 | CONFIG_BROKEN_ON_SMP=y | ||
35 | CONFIG_LOCK_KERNEL=y | ||
36 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
37 | CONFIG_LOCALVERSION="" | ||
38 | CONFIG_LOCALVERSION_AUTO=y | ||
39 | CONFIG_SWAP=y | ||
40 | CONFIG_SYSVIPC=y | ||
41 | CONFIG_SYSVIPC_SYSCTL=y | ||
42 | # CONFIG_POSIX_MQUEUE is not set | ||
43 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
44 | # CONFIG_TASKSTATS is not set | ||
45 | # CONFIG_AUDIT is not set | ||
46 | # CONFIG_IKCONFIG is not set | ||
47 | CONFIG_LOG_BUF_SHIFT=14 | ||
48 | # CONFIG_CGROUPS is not set | ||
49 | # CONFIG_GROUP_SCHED is not set | ||
50 | # CONFIG_SYSFS_DEPRECATED_V2 is not set | ||
51 | # CONFIG_RELAY is not set | ||
52 | # CONFIG_NAMESPACES is not set | ||
53 | # CONFIG_BLK_DEV_INITRD is not set | ||
54 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
55 | CONFIG_SYSCTL=y | ||
56 | CONFIG_EMBEDDED=y | ||
57 | CONFIG_UID16=y | ||
58 | CONFIG_SYSCTL_SYSCALL=y | ||
59 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
60 | CONFIG_KALLSYMS=y | ||
61 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
62 | CONFIG_HOTPLUG=y | ||
63 | CONFIG_PRINTK=y | ||
64 | CONFIG_BUG=y | ||
65 | CONFIG_ELF_CORE=y | ||
66 | CONFIG_COMPAT_BRK=y | ||
67 | CONFIG_BASE_FULL=y | ||
68 | CONFIG_FUTEX=y | ||
69 | CONFIG_ANON_INODES=y | ||
70 | CONFIG_EPOLL=y | ||
71 | CONFIG_SIGNALFD=y | ||
72 | CONFIG_TIMERFD=y | ||
73 | CONFIG_EVENTFD=y | ||
74 | CONFIG_SHMEM=y | ||
75 | CONFIG_VM_EVENT_COUNTERS=y | ||
76 | CONFIG_SLAB=y | ||
77 | # CONFIG_SLUB is not set | ||
78 | # CONFIG_SLOB is not set | ||
79 | # CONFIG_PROFILING is not set | ||
80 | # CONFIG_MARKERS is not set | ||
81 | CONFIG_HAVE_OPROFILE=y | ||
82 | # CONFIG_KPROBES is not set | ||
83 | CONFIG_HAVE_KPROBES=y | ||
84 | CONFIG_HAVE_KRETPROBES=y | ||
85 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
86 | CONFIG_PROC_PAGE_MONITOR=y | ||
87 | CONFIG_SLABINFO=y | ||
88 | CONFIG_RT_MUTEXES=y | ||
89 | # CONFIG_TINY_SHMEM is not set | ||
90 | CONFIG_BASE_SMALL=0 | ||
91 | CONFIG_MODULES=y | ||
92 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
93 | CONFIG_MODULE_UNLOAD=y | ||
94 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
95 | # CONFIG_MODVERSIONS is not set | ||
96 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
97 | # CONFIG_KMOD is not set | ||
98 | CONFIG_BLOCK=y | ||
99 | # CONFIG_LBD is not set | ||
100 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
101 | # CONFIG_LSF is not set | ||
102 | # CONFIG_BLK_DEV_BSG is not set | ||
103 | |||
104 | # | ||
105 | # IO Schedulers | ||
106 | # | ||
107 | CONFIG_IOSCHED_NOOP=y | ||
108 | CONFIG_IOSCHED_AS=y | ||
109 | CONFIG_IOSCHED_DEADLINE=y | ||
110 | CONFIG_IOSCHED_CFQ=y | ||
111 | # CONFIG_DEFAULT_AS is not set | ||
112 | # CONFIG_DEFAULT_DEADLINE is not set | ||
113 | CONFIG_DEFAULT_CFQ=y | ||
114 | # CONFIG_DEFAULT_NOOP is not set | ||
115 | CONFIG_DEFAULT_IOSCHED="cfq" | ||
116 | CONFIG_CLASSIC_RCU=y | ||
117 | |||
118 | # | ||
119 | # System Type | ||
120 | # | ||
121 | # CONFIG_ARCH_AAEC2000 is not set | ||
122 | # CONFIG_ARCH_INTEGRATOR is not set | ||
123 | # CONFIG_ARCH_REALVIEW is not set | ||
124 | # CONFIG_ARCH_VERSATILE is not set | ||
125 | # CONFIG_ARCH_AT91 is not set | ||
126 | # CONFIG_ARCH_CLPS7500 is not set | ||
127 | # CONFIG_ARCH_CLPS711X is not set | ||
128 | # CONFIG_ARCH_CO285 is not set | ||
129 | # CONFIG_ARCH_EBSA110 is not set | ||
130 | # CONFIG_ARCH_EP93XX is not set | ||
131 | # CONFIG_ARCH_FOOTBRIDGE is not set | ||
132 | # CONFIG_ARCH_NETX is not set | ||
133 | # CONFIG_ARCH_H720X is not set | ||
134 | # CONFIG_ARCH_IMX is not set | ||
135 | # CONFIG_ARCH_IOP13XX is not set | ||
136 | # CONFIG_ARCH_IOP32X is not set | ||
137 | # CONFIG_ARCH_IOP33X is not set | ||
138 | # CONFIG_ARCH_IXP23XX is not set | ||
139 | # CONFIG_ARCH_IXP2000 is not set | ||
140 | # CONFIG_ARCH_IXP4XX is not set | ||
141 | # CONFIG_ARCH_L7200 is not set | ||
142 | # CONFIG_ARCH_KIRKWOOD is not set | ||
143 | # CONFIG_ARCH_KS8695 is not set | ||
144 | # CONFIG_ARCH_NS9XXX is not set | ||
145 | CONFIG_ARCH_LOKI=y | ||
146 | # CONFIG_ARCH_MV78XX0 is not set | ||
147 | # CONFIG_ARCH_MXC is not set | ||
148 | # CONFIG_ARCH_ORION5X is not set | ||
149 | # CONFIG_ARCH_PNX4008 is not set | ||
150 | # CONFIG_ARCH_PXA is not set | ||
151 | # CONFIG_ARCH_RPC is not set | ||
152 | # CONFIG_ARCH_SA1100 is not set | ||
153 | # CONFIG_ARCH_S3C2410 is not set | ||
154 | # CONFIG_ARCH_SHARK is not set | ||
155 | # CONFIG_ARCH_LH7A40X is not set | ||
156 | # CONFIG_ARCH_DAVINCI is not set | ||
157 | # CONFIG_ARCH_OMAP is not set | ||
158 | # CONFIG_ARCH_MSM7X00A is not set | ||
159 | |||
160 | # | ||
161 | # Marvell Loki (88RC8480) Implementations | ||
162 | # | ||
163 | CONFIG_MACH_LB88RC8480=y | ||
164 | |||
165 | # | ||
166 | # Boot options | ||
167 | # | ||
168 | |||
169 | # | ||
170 | # Power management | ||
171 | # | ||
172 | CONFIG_PLAT_ORION=y | ||
173 | |||
174 | # | ||
175 | # Processor Type | ||
176 | # | ||
177 | CONFIG_CPU_32=y | ||
178 | CONFIG_CPU_FEROCEON=y | ||
179 | # CONFIG_CPU_FEROCEON_OLD_ID is not set | ||
180 | CONFIG_CPU_32v5=y | ||
181 | CONFIG_CPU_ABRT_EV5T=y | ||
182 | CONFIG_CPU_PABRT_NOIFAR=y | ||
183 | CONFIG_CPU_CACHE_VIVT=y | ||
184 | CONFIG_CPU_COPY_FEROCEON=y | ||
185 | CONFIG_CPU_TLB_FEROCEON=y | ||
186 | CONFIG_CPU_CP15=y | ||
187 | CONFIG_CPU_CP15_MMU=y | ||
188 | |||
189 | # | ||
190 | # Processor Features | ||
191 | # | ||
192 | CONFIG_ARM_THUMB=y | ||
193 | # CONFIG_CPU_ICACHE_DISABLE is not set | ||
194 | # CONFIG_CPU_DCACHE_DISABLE is not set | ||
195 | # CONFIG_OUTER_CACHE is not set | ||
196 | |||
197 | # | ||
198 | # Bus support | ||
199 | # | ||
200 | # CONFIG_PCI_SYSCALL is not set | ||
201 | # CONFIG_ARCH_SUPPORTS_MSI is not set | ||
202 | # CONFIG_PCCARD is not set | ||
203 | |||
204 | # | ||
205 | # Kernel Features | ||
206 | # | ||
207 | CONFIG_TICK_ONESHOT=y | ||
208 | CONFIG_NO_HZ=y | ||
209 | CONFIG_HIGH_RES_TIMERS=y | ||
210 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
211 | CONFIG_PREEMPT=y | ||
212 | CONFIG_HZ=100 | ||
213 | CONFIG_AEABI=y | ||
214 | CONFIG_OABI_COMPAT=y | ||
215 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | ||
216 | CONFIG_SELECT_MEMORY_MODEL=y | ||
217 | CONFIG_FLATMEM_MANUAL=y | ||
218 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
219 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
220 | CONFIG_FLATMEM=y | ||
221 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
222 | # CONFIG_SPARSEMEM_STATIC is not set | ||
223 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
224 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
225 | CONFIG_SPLIT_PTLOCK_CPUS=4096 | ||
226 | # CONFIG_RESOURCES_64BIT is not set | ||
227 | CONFIG_ZONE_DMA_FLAG=1 | ||
228 | CONFIG_BOUNCE=y | ||
229 | CONFIG_VIRT_TO_BUS=y | ||
230 | CONFIG_ALIGNMENT_TRAP=y | ||
231 | |||
232 | # | ||
233 | # Boot options | ||
234 | # | ||
235 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
236 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
237 | CONFIG_CMDLINE="" | ||
238 | # CONFIG_XIP_KERNEL is not set | ||
239 | # CONFIG_KEXEC is not set | ||
240 | |||
241 | # | ||
242 | # Floating point emulation | ||
243 | # | ||
244 | |||
245 | # | ||
246 | # At least one emulation must be selected | ||
247 | # | ||
248 | # CONFIG_FPE_NWFPE is not set | ||
249 | # CONFIG_FPE_FASTFPE is not set | ||
250 | # CONFIG_VFP is not set | ||
251 | |||
252 | # | ||
253 | # Userspace binary formats | ||
254 | # | ||
255 | CONFIG_BINFMT_ELF=y | ||
256 | # CONFIG_BINFMT_AOUT is not set | ||
257 | # CONFIG_BINFMT_MISC is not set | ||
258 | |||
259 | # | ||
260 | # Power management options | ||
261 | # | ||
262 | # CONFIG_PM is not set | ||
263 | CONFIG_ARCH_SUSPEND_POSSIBLE=y | ||
264 | |||
265 | # | ||
266 | # Networking | ||
267 | # | ||
268 | CONFIG_NET=y | ||
269 | |||
270 | # | ||
271 | # Networking options | ||
272 | # | ||
273 | CONFIG_PACKET=y | ||
274 | CONFIG_PACKET_MMAP=y | ||
275 | CONFIG_UNIX=y | ||
276 | CONFIG_XFRM=y | ||
277 | # CONFIG_XFRM_USER is not set | ||
278 | # CONFIG_XFRM_SUB_POLICY is not set | ||
279 | # CONFIG_XFRM_MIGRATE is not set | ||
280 | # CONFIG_XFRM_STATISTICS is not set | ||
281 | # CONFIG_NET_KEY is not set | ||
282 | CONFIG_INET=y | ||
283 | CONFIG_IP_MULTICAST=y | ||
284 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
285 | CONFIG_IP_FIB_HASH=y | ||
286 | CONFIG_IP_PNP=y | ||
287 | CONFIG_IP_PNP_DHCP=y | ||
288 | CONFIG_IP_PNP_BOOTP=y | ||
289 | # CONFIG_IP_PNP_RARP is not set | ||
290 | # CONFIG_NET_IPIP is not set | ||
291 | # CONFIG_NET_IPGRE is not set | ||
292 | # CONFIG_IP_MROUTE is not set | ||
293 | # CONFIG_ARPD is not set | ||
294 | # CONFIG_SYN_COOKIES is not set | ||
295 | # CONFIG_INET_AH is not set | ||
296 | # CONFIG_INET_ESP is not set | ||
297 | # CONFIG_INET_IPCOMP is not set | ||
298 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
299 | # CONFIG_INET_TUNNEL is not set | ||
300 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | ||
301 | CONFIG_INET_XFRM_MODE_TUNNEL=y | ||
302 | CONFIG_INET_XFRM_MODE_BEET=y | ||
303 | # CONFIG_INET_LRO is not set | ||
304 | CONFIG_INET_DIAG=y | ||
305 | CONFIG_INET_TCP_DIAG=y | ||
306 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
307 | CONFIG_TCP_CONG_CUBIC=y | ||
308 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
309 | # CONFIG_TCP_MD5SIG is not set | ||
310 | # CONFIG_IPV6 is not set | ||
311 | # CONFIG_NETWORK_SECMARK is not set | ||
312 | # CONFIG_NETFILTER is not set | ||
313 | # CONFIG_IP_DCCP is not set | ||
314 | # CONFIG_IP_SCTP is not set | ||
315 | # CONFIG_TIPC is not set | ||
316 | # CONFIG_ATM is not set | ||
317 | # CONFIG_BRIDGE is not set | ||
318 | # CONFIG_VLAN_8021Q is not set | ||
319 | # CONFIG_DECNET is not set | ||
320 | # CONFIG_LLC2 is not set | ||
321 | # CONFIG_IPX is not set | ||
322 | # CONFIG_ATALK is not set | ||
323 | # CONFIG_X25 is not set | ||
324 | # CONFIG_LAPB is not set | ||
325 | # CONFIG_ECONET is not set | ||
326 | # CONFIG_WAN_ROUTER is not set | ||
327 | # CONFIG_NET_SCHED is not set | ||
328 | |||
329 | # | ||
330 | # Network testing | ||
331 | # | ||
332 | CONFIG_NET_PKTGEN=m | ||
333 | # CONFIG_HAMRADIO is not set | ||
334 | # CONFIG_CAN is not set | ||
335 | # CONFIG_IRDA is not set | ||
336 | # CONFIG_BT is not set | ||
337 | # CONFIG_AF_RXRPC is not set | ||
338 | |||
339 | # | ||
340 | # Wireless | ||
341 | # | ||
342 | # CONFIG_CFG80211 is not set | ||
343 | CONFIG_WIRELESS_EXT=y | ||
344 | # CONFIG_MAC80211 is not set | ||
345 | # CONFIG_IEEE80211 is not set | ||
346 | # CONFIG_RFKILL is not set | ||
347 | # CONFIG_NET_9P is not set | ||
348 | |||
349 | # | ||
350 | # Device Drivers | ||
351 | # | ||
352 | |||
353 | # | ||
354 | # Generic Driver Options | ||
355 | # | ||
356 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
357 | CONFIG_STANDALONE=y | ||
358 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
359 | CONFIG_FW_LOADER=y | ||
360 | # CONFIG_SYS_HYPERVISOR is not set | ||
361 | # CONFIG_CONNECTOR is not set | ||
362 | CONFIG_MTD=y | ||
363 | # CONFIG_MTD_DEBUG is not set | ||
364 | # CONFIG_MTD_CONCAT is not set | ||
365 | CONFIG_MTD_PARTITIONS=y | ||
366 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
367 | CONFIG_MTD_CMDLINE_PARTS=y | ||
368 | # CONFIG_MTD_AFS_PARTS is not set | ||
369 | # CONFIG_MTD_AR7_PARTS is not set | ||
370 | |||
371 | # | ||
372 | # User Modules And Translation Layers | ||
373 | # | ||
374 | CONFIG_MTD_CHAR=y | ||
375 | CONFIG_MTD_BLKDEVS=y | ||
376 | CONFIG_MTD_BLOCK=y | ||
377 | CONFIG_FTL=y | ||
378 | CONFIG_NFTL=y | ||
379 | # CONFIG_NFTL_RW is not set | ||
380 | # CONFIG_INFTL is not set | ||
381 | # CONFIG_RFD_FTL is not set | ||
382 | # CONFIG_SSFDC is not set | ||
383 | # CONFIG_MTD_OOPS is not set | ||
384 | |||
385 | # | ||
386 | # RAM/ROM/Flash chip drivers | ||
387 | # | ||
388 | CONFIG_MTD_CFI=y | ||
389 | CONFIG_MTD_JEDECPROBE=y | ||
390 | CONFIG_MTD_GEN_PROBE=y | ||
391 | CONFIG_MTD_CFI_ADV_OPTIONS=y | ||
392 | CONFIG_MTD_CFI_NOSWAP=y | ||
393 | # CONFIG_MTD_CFI_BE_BYTE_SWAP is not set | ||
394 | # CONFIG_MTD_CFI_LE_BYTE_SWAP is not set | ||
395 | CONFIG_MTD_CFI_GEOMETRY=y | ||
396 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
397 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
398 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
399 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
400 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
401 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
402 | CONFIG_MTD_CFI_I1=y | ||
403 | CONFIG_MTD_CFI_I2=y | ||
404 | CONFIG_MTD_CFI_I4=y | ||
405 | # CONFIG_MTD_CFI_I8 is not set | ||
406 | # CONFIG_MTD_OTP is not set | ||
407 | CONFIG_MTD_CFI_INTELEXT=y | ||
408 | CONFIG_MTD_CFI_AMDSTD=y | ||
409 | CONFIG_MTD_CFI_STAA=y | ||
410 | CONFIG_MTD_CFI_UTIL=y | ||
411 | # CONFIG_MTD_RAM is not set | ||
412 | # CONFIG_MTD_ROM is not set | ||
413 | # CONFIG_MTD_ABSENT is not set | ||
414 | |||
415 | # | ||
416 | # Mapping drivers for chip access | ||
417 | # | ||
418 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
419 | CONFIG_MTD_PHYSMAP=y | ||
420 | CONFIG_MTD_PHYSMAP_START=0x0 | ||
421 | CONFIG_MTD_PHYSMAP_LEN=0x0 | ||
422 | CONFIG_MTD_PHYSMAP_BANKWIDTH=0 | ||
423 | # CONFIG_MTD_ARM_INTEGRATOR is not set | ||
424 | # CONFIG_MTD_IMPA7 is not set | ||
425 | # CONFIG_MTD_PLATRAM is not set | ||
426 | |||
427 | # | ||
428 | # Self-contained MTD device drivers | ||
429 | # | ||
430 | # CONFIG_MTD_DATAFLASH is not set | ||
431 | CONFIG_MTD_M25P80=y | ||
432 | CONFIG_M25PXX_USE_FAST_READ=y | ||
433 | # CONFIG_MTD_SLRAM is not set | ||
434 | # CONFIG_MTD_PHRAM is not set | ||
435 | # CONFIG_MTD_MTDRAM is not set | ||
436 | # CONFIG_MTD_BLOCK2MTD is not set | ||
437 | |||
438 | # | ||
439 | # Disk-On-Chip Device Drivers | ||
440 | # | ||
441 | # CONFIG_MTD_DOC2000 is not set | ||
442 | # CONFIG_MTD_DOC2001 is not set | ||
443 | # CONFIG_MTD_DOC2001PLUS is not set | ||
444 | CONFIG_MTD_NAND=y | ||
445 | CONFIG_MTD_NAND_VERIFY_WRITE=y | ||
446 | # CONFIG_MTD_NAND_ECC_SMC is not set | ||
447 | # CONFIG_MTD_NAND_MUSEUM_IDS is not set | ||
448 | CONFIG_MTD_NAND_IDS=y | ||
449 | # CONFIG_MTD_NAND_DISKONCHIP is not set | ||
450 | # CONFIG_MTD_NAND_NANDSIM is not set | ||
451 | # CONFIG_MTD_NAND_PLATFORM is not set | ||
452 | # CONFIG_MTD_ALAUDA is not set | ||
453 | CONFIG_MTD_NAND_ORION=y | ||
454 | # CONFIG_MTD_ONENAND is not set | ||
455 | |||
456 | # | ||
457 | # UBI - Unsorted block images | ||
458 | # | ||
459 | # CONFIG_MTD_UBI is not set | ||
460 | # CONFIG_PARPORT is not set | ||
461 | CONFIG_BLK_DEV=y | ||
462 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
463 | CONFIG_BLK_DEV_LOOP=y | ||
464 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
465 | # CONFIG_BLK_DEV_NBD is not set | ||
466 | # CONFIG_BLK_DEV_UB is not set | ||
467 | # CONFIG_BLK_DEV_RAM is not set | ||
468 | # CONFIG_CDROM_PKTCDVD is not set | ||
469 | # CONFIG_ATA_OVER_ETH is not set | ||
470 | # CONFIG_MISC_DEVICES is not set | ||
471 | CONFIG_HAVE_IDE=y | ||
472 | # CONFIG_IDE is not set | ||
473 | |||
474 | # | ||
475 | # SCSI device support | ||
476 | # | ||
477 | # CONFIG_RAID_ATTRS is not set | ||
478 | CONFIG_SCSI=y | ||
479 | CONFIG_SCSI_DMA=y | ||
480 | # CONFIG_SCSI_TGT is not set | ||
481 | # CONFIG_SCSI_NETLINK is not set | ||
482 | # CONFIG_SCSI_PROC_FS is not set | ||
483 | |||
484 | # | ||
485 | # SCSI support type (disk, tape, CD-ROM) | ||
486 | # | ||
487 | CONFIG_BLK_DEV_SD=y | ||
488 | # CONFIG_CHR_DEV_ST is not set | ||
489 | # CONFIG_CHR_DEV_OSST is not set | ||
490 | CONFIG_BLK_DEV_SR=m | ||
491 | # CONFIG_BLK_DEV_SR_VENDOR is not set | ||
492 | CONFIG_CHR_DEV_SG=m | ||
493 | # CONFIG_CHR_DEV_SCH is not set | ||
494 | |||
495 | # | ||
496 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||
497 | # | ||
498 | # CONFIG_SCSI_MULTI_LUN is not set | ||
499 | # CONFIG_SCSI_CONSTANTS is not set | ||
500 | # CONFIG_SCSI_LOGGING is not set | ||
501 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
502 | CONFIG_SCSI_WAIT_SCAN=m | ||
503 | |||
504 | # | ||
505 | # SCSI Transports | ||
506 | # | ||
507 | # CONFIG_SCSI_SPI_ATTRS is not set | ||
508 | # CONFIG_SCSI_FC_ATTRS is not set | ||
509 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
510 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
511 | # CONFIG_SCSI_SRP_ATTRS is not set | ||
512 | CONFIG_SCSI_LOWLEVEL=y | ||
513 | # CONFIG_ISCSI_TCP is not set | ||
514 | # CONFIG_SCSI_DEBUG is not set | ||
515 | CONFIG_ATA=y | ||
516 | # CONFIG_ATA_NONSTANDARD is not set | ||
517 | CONFIG_SATA_PMP=y | ||
518 | CONFIG_ATA_SFF=y | ||
519 | CONFIG_SATA_MV=y | ||
520 | # CONFIG_PATA_PLATFORM is not set | ||
521 | # CONFIG_MD is not set | ||
522 | CONFIG_NETDEVICES=y | ||
523 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
524 | # CONFIG_DUMMY is not set | ||
525 | # CONFIG_BONDING is not set | ||
526 | # CONFIG_MACVLAN is not set | ||
527 | # CONFIG_EQUALIZER is not set | ||
528 | # CONFIG_TUN is not set | ||
529 | # CONFIG_VETH is not set | ||
530 | # CONFIG_PHYLIB is not set | ||
531 | CONFIG_NET_ETHERNET=y | ||
532 | CONFIG_MII=y | ||
533 | # CONFIG_AX88796 is not set | ||
534 | # CONFIG_SMC91X is not set | ||
535 | # CONFIG_DM9000 is not set | ||
536 | # CONFIG_ENC28J60 is not set | ||
537 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
538 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
539 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
540 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
541 | # CONFIG_B44 is not set | ||
542 | CONFIG_NETDEV_1000=y | ||
543 | # CONFIG_E1000E_ENABLED is not set | ||
544 | CONFIG_MV643XX_ETH=y | ||
545 | # CONFIG_NETDEV_10000 is not set | ||
546 | |||
547 | # | ||
548 | # Wireless LAN | ||
549 | # | ||
550 | # CONFIG_WLAN_PRE80211 is not set | ||
551 | # CONFIG_WLAN_80211 is not set | ||
552 | # CONFIG_IWLWIFI_LEDS is not set | ||
553 | |||
554 | # | ||
555 | # USB Network Adapters | ||
556 | # | ||
557 | # CONFIG_USB_CATC is not set | ||
558 | # CONFIG_USB_KAWETH is not set | ||
559 | # CONFIG_USB_PEGASUS is not set | ||
560 | # CONFIG_USB_RTL8150 is not set | ||
561 | # CONFIG_USB_USBNET is not set | ||
562 | # CONFIG_WAN is not set | ||
563 | # CONFIG_PPP is not set | ||
564 | # CONFIG_SLIP is not set | ||
565 | # CONFIG_NETCONSOLE is not set | ||
566 | # CONFIG_NETPOLL is not set | ||
567 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
568 | # CONFIG_ISDN is not set | ||
569 | |||
570 | # | ||
571 | # Input device support | ||
572 | # | ||
573 | CONFIG_INPUT=y | ||
574 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
575 | # CONFIG_INPUT_POLLDEV is not set | ||
576 | |||
577 | # | ||
578 | # Userland interfaces | ||
579 | # | ||
580 | CONFIG_INPUT_MOUSEDEV=y | ||
581 | CONFIG_INPUT_MOUSEDEV_PSAUX=y | ||
582 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
583 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
584 | # CONFIG_INPUT_JOYDEV is not set | ||
585 | # CONFIG_INPUT_EVDEV is not set | ||
586 | # CONFIG_INPUT_EVBUG is not set | ||
587 | |||
588 | # | ||
589 | # Input Device Drivers | ||
590 | # | ||
591 | # CONFIG_INPUT_KEYBOARD is not set | ||
592 | # CONFIG_INPUT_MOUSE is not set | ||
593 | # CONFIG_INPUT_JOYSTICK is not set | ||
594 | # CONFIG_INPUT_TABLET is not set | ||
595 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
596 | # CONFIG_INPUT_MISC is not set | ||
597 | |||
598 | # | ||
599 | # Hardware I/O ports | ||
600 | # | ||
601 | # CONFIG_SERIO is not set | ||
602 | # CONFIG_GAMEPORT is not set | ||
603 | |||
604 | # | ||
605 | # Character devices | ||
606 | # | ||
607 | CONFIG_VT=y | ||
608 | CONFIG_VT_CONSOLE=y | ||
609 | CONFIG_HW_CONSOLE=y | ||
610 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
611 | CONFIG_DEVKMEM=y | ||
612 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
613 | |||
614 | # | ||
615 | # Serial drivers | ||
616 | # | ||
617 | CONFIG_SERIAL_8250=y | ||
618 | CONFIG_SERIAL_8250_CONSOLE=y | ||
619 | CONFIG_SERIAL_8250_NR_UARTS=4 | ||
620 | CONFIG_SERIAL_8250_RUNTIME_UARTS=2 | ||
621 | # CONFIG_SERIAL_8250_EXTENDED is not set | ||
622 | |||
623 | # | ||
624 | # Non-8250 serial port support | ||
625 | # | ||
626 | CONFIG_SERIAL_CORE=y | ||
627 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
628 | CONFIG_UNIX98_PTYS=y | ||
629 | CONFIG_LEGACY_PTYS=y | ||
630 | CONFIG_LEGACY_PTY_COUNT=16 | ||
631 | # CONFIG_IPMI_HANDLER is not set | ||
632 | CONFIG_HW_RANDOM=m | ||
633 | # CONFIG_NVRAM is not set | ||
634 | # CONFIG_R3964 is not set | ||
635 | # CONFIG_RAW_DRIVER is not set | ||
636 | # CONFIG_TCG_TPM is not set | ||
637 | CONFIG_I2C=y | ||
638 | CONFIG_I2C_BOARDINFO=y | ||
639 | CONFIG_I2C_CHARDEV=y | ||
640 | |||
641 | # | ||
642 | # I2C Hardware Bus support | ||
643 | # | ||
644 | # CONFIG_I2C_OCORES is not set | ||
645 | # CONFIG_I2C_PARPORT_LIGHT is not set | ||
646 | # CONFIG_I2C_SIMTEC is not set | ||
647 | # CONFIG_I2C_TAOS_EVM is not set | ||
648 | # CONFIG_I2C_STUB is not set | ||
649 | # CONFIG_I2C_TINY_USB is not set | ||
650 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
651 | CONFIG_I2C_MV64XXX=y | ||
652 | |||
653 | # | ||
654 | # Miscellaneous I2C Chip support | ||
655 | # | ||
656 | # CONFIG_DS1682 is not set | ||
657 | # CONFIG_SENSORS_EEPROM is not set | ||
658 | # CONFIG_SENSORS_PCF8574 is not set | ||
659 | # CONFIG_PCF8575 is not set | ||
660 | # CONFIG_SENSORS_PCF8591 is not set | ||
661 | # CONFIG_SENSORS_MAX6875 is not set | ||
662 | # CONFIG_SENSORS_TSL2550 is not set | ||
663 | # CONFIG_I2C_DEBUG_CORE is not set | ||
664 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
665 | # CONFIG_I2C_DEBUG_BUS is not set | ||
666 | # CONFIG_I2C_DEBUG_CHIP is not set | ||
667 | CONFIG_SPI=y | ||
668 | CONFIG_SPI_MASTER=y | ||
669 | |||
670 | # | ||
671 | # SPI Master Controller Drivers | ||
672 | # | ||
673 | # CONFIG_SPI_BITBANG is not set | ||
674 | |||
675 | # | ||
676 | # SPI Protocol Masters | ||
677 | # | ||
678 | # CONFIG_SPI_AT25 is not set | ||
679 | # CONFIG_SPI_SPIDEV is not set | ||
680 | # CONFIG_SPI_TLE62X0 is not set | ||
681 | # CONFIG_W1 is not set | ||
682 | # CONFIG_POWER_SUPPLY is not set | ||
683 | # CONFIG_HWMON is not set | ||
684 | # CONFIG_WATCHDOG is not set | ||
685 | |||
686 | # | ||
687 | # Sonics Silicon Backplane | ||
688 | # | ||
689 | CONFIG_SSB_POSSIBLE=y | ||
690 | # CONFIG_SSB is not set | ||
691 | |||
692 | # | ||
693 | # Multifunction device drivers | ||
694 | # | ||
695 | # CONFIG_MFD_SM501 is not set | ||
696 | # CONFIG_MFD_ASIC3 is not set | ||
697 | # CONFIG_HTC_PASIC3 is not set | ||
698 | |||
699 | # | ||
700 | # Multimedia devices | ||
701 | # | ||
702 | |||
703 | # | ||
704 | # Multimedia core support | ||
705 | # | ||
706 | # CONFIG_VIDEO_DEV is not set | ||
707 | # CONFIG_DVB_CORE is not set | ||
708 | # CONFIG_VIDEO_MEDIA is not set | ||
709 | |||
710 | # | ||
711 | # Multimedia drivers | ||
712 | # | ||
713 | # CONFIG_DAB is not set | ||
714 | |||
715 | # | ||
716 | # Graphics support | ||
717 | # | ||
718 | # CONFIG_VGASTATE is not set | ||
719 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
720 | # CONFIG_FB is not set | ||
721 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
722 | |||
723 | # | ||
724 | # Display device support | ||
725 | # | ||
726 | # CONFIG_DISPLAY_SUPPORT is not set | ||
727 | |||
728 | # | ||
729 | # Console display driver support | ||
730 | # | ||
731 | # CONFIG_VGA_CONSOLE is not set | ||
732 | CONFIG_DUMMY_CONSOLE=y | ||
733 | |||
734 | # | ||
735 | # Sound | ||
736 | # | ||
737 | # CONFIG_SOUND is not set | ||
738 | CONFIG_HID_SUPPORT=y | ||
739 | CONFIG_HID=y | ||
740 | # CONFIG_HID_DEBUG is not set | ||
741 | # CONFIG_HIDRAW is not set | ||
742 | |||
743 | # | ||
744 | # USB Input Devices | ||
745 | # | ||
746 | CONFIG_USB_HID=y | ||
747 | # CONFIG_USB_HIDINPUT_POWERBOOK is not set | ||
748 | # CONFIG_HID_FF is not set | ||
749 | # CONFIG_USB_HIDDEV is not set | ||
750 | CONFIG_USB_SUPPORT=y | ||
751 | CONFIG_USB_ARCH_HAS_HCD=y | ||
752 | # CONFIG_USB_ARCH_HAS_OHCI is not set | ||
753 | # CONFIG_USB_ARCH_HAS_EHCI is not set | ||
754 | CONFIG_USB=y | ||
755 | # CONFIG_USB_DEBUG is not set | ||
756 | # CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set | ||
757 | |||
758 | # | ||
759 | # Miscellaneous USB options | ||
760 | # | ||
761 | CONFIG_USB_DEVICEFS=y | ||
762 | CONFIG_USB_DEVICE_CLASS=y | ||
763 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
764 | # CONFIG_USB_OTG is not set | ||
765 | # CONFIG_USB_OTG_WHITELIST is not set | ||
766 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | ||
767 | |||
768 | # | ||
769 | # USB Host Controller Drivers | ||
770 | # | ||
771 | # CONFIG_USB_C67X00_HCD is not set | ||
772 | # CONFIG_USB_ISP116X_HCD is not set | ||
773 | # CONFIG_USB_ISP1760_HCD is not set | ||
774 | # CONFIG_USB_SL811_HCD is not set | ||
775 | # CONFIG_USB_R8A66597_HCD is not set | ||
776 | |||
777 | # | ||
778 | # USB Device Class drivers | ||
779 | # | ||
780 | # CONFIG_USB_ACM is not set | ||
781 | CONFIG_USB_PRINTER=y | ||
782 | # CONFIG_USB_WDM is not set | ||
783 | |||
784 | # | ||
785 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
786 | # | ||
787 | |||
788 | # | ||
789 | # may also be needed; see USB_STORAGE Help for more information | ||
790 | # | ||
791 | CONFIG_USB_STORAGE=y | ||
792 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
793 | CONFIG_USB_STORAGE_DATAFAB=y | ||
794 | CONFIG_USB_STORAGE_FREECOM=y | ||
795 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
796 | CONFIG_USB_STORAGE_DPCM=y | ||
797 | # CONFIG_USB_STORAGE_USBAT is not set | ||
798 | CONFIG_USB_STORAGE_SDDR09=y | ||
799 | CONFIG_USB_STORAGE_SDDR55=y | ||
800 | CONFIG_USB_STORAGE_JUMPSHOT=y | ||
801 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
802 | # CONFIG_USB_STORAGE_ONETOUCH is not set | ||
803 | # CONFIG_USB_STORAGE_KARMA is not set | ||
804 | # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set | ||
805 | # CONFIG_USB_LIBUSUAL is not set | ||
806 | |||
807 | # | ||
808 | # USB Imaging devices | ||
809 | # | ||
810 | # CONFIG_USB_MDC800 is not set | ||
811 | # CONFIG_USB_MICROTEK is not set | ||
812 | # CONFIG_USB_MON is not set | ||
813 | |||
814 | # | ||
815 | # USB port drivers | ||
816 | # | ||
817 | # CONFIG_USB_SERIAL is not set | ||
818 | |||
819 | # | ||
820 | # USB Miscellaneous drivers | ||
821 | # | ||
822 | # CONFIG_USB_EMI62 is not set | ||
823 | # CONFIG_USB_EMI26 is not set | ||
824 | # CONFIG_USB_ADUTUX is not set | ||
825 | # CONFIG_USB_AUERSWALD is not set | ||
826 | # CONFIG_USB_RIO500 is not set | ||
827 | # CONFIG_USB_LEGOTOWER is not set | ||
828 | # CONFIG_USB_LCD is not set | ||
829 | # CONFIG_USB_BERRY_CHARGE is not set | ||
830 | # CONFIG_USB_LED is not set | ||
831 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
832 | # CONFIG_USB_CYTHERM is not set | ||
833 | # CONFIG_USB_PHIDGET is not set | ||
834 | # CONFIG_USB_IDMOUSE is not set | ||
835 | # CONFIG_USB_FTDI_ELAN is not set | ||
836 | # CONFIG_USB_APPLEDISPLAY is not set | ||
837 | # CONFIG_USB_LD is not set | ||
838 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
839 | # CONFIG_USB_IOWARRIOR is not set | ||
840 | # CONFIG_USB_TEST is not set | ||
841 | # CONFIG_USB_ISIGHTFW is not set | ||
842 | # CONFIG_USB_GADGET is not set | ||
843 | # CONFIG_MMC is not set | ||
844 | CONFIG_NEW_LEDS=y | ||
845 | # CONFIG_LEDS_CLASS is not set | ||
846 | |||
847 | # | ||
848 | # LED drivers | ||
849 | # | ||
850 | |||
851 | # | ||
852 | # LED Triggers | ||
853 | # | ||
854 | # CONFIG_LEDS_TRIGGERS is not set | ||
855 | CONFIG_RTC_LIB=y | ||
856 | # CONFIG_RTC_CLASS is not set | ||
857 | # CONFIG_UIO is not set | ||
858 | |||
859 | # | ||
860 | # File systems | ||
861 | # | ||
862 | CONFIG_EXT2_FS=y | ||
863 | # CONFIG_EXT2_FS_XATTR is not set | ||
864 | # CONFIG_EXT2_FS_XIP is not set | ||
865 | CONFIG_EXT3_FS=y | ||
866 | # CONFIG_EXT3_FS_XATTR is not set | ||
867 | # CONFIG_EXT4DEV_FS is not set | ||
868 | CONFIG_JBD=y | ||
869 | # CONFIG_REISERFS_FS is not set | ||
870 | # CONFIG_JFS_FS is not set | ||
871 | # CONFIG_FS_POSIX_ACL is not set | ||
872 | CONFIG_XFS_FS=y | ||
873 | # CONFIG_XFS_QUOTA is not set | ||
874 | # CONFIG_XFS_POSIX_ACL is not set | ||
875 | # CONFIG_XFS_RT is not set | ||
876 | # CONFIG_XFS_DEBUG is not set | ||
877 | # CONFIG_OCFS2_FS is not set | ||
878 | CONFIG_DNOTIFY=y | ||
879 | CONFIG_INOTIFY=y | ||
880 | CONFIG_INOTIFY_USER=y | ||
881 | # CONFIG_QUOTA is not set | ||
882 | # CONFIG_AUTOFS_FS is not set | ||
883 | # CONFIG_AUTOFS4_FS is not set | ||
884 | # CONFIG_FUSE_FS is not set | ||
885 | |||
886 | # | ||
887 | # CD-ROM/DVD Filesystems | ||
888 | # | ||
889 | CONFIG_ISO9660_FS=y | ||
890 | # CONFIG_JOLIET is not set | ||
891 | # CONFIG_ZISOFS is not set | ||
892 | CONFIG_UDF_FS=m | ||
893 | CONFIG_UDF_NLS=y | ||
894 | |||
895 | # | ||
896 | # DOS/FAT/NT Filesystems | ||
897 | # | ||
898 | CONFIG_FAT_FS=y | ||
899 | CONFIG_MSDOS_FS=y | ||
900 | CONFIG_VFAT_FS=y | ||
901 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
902 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
903 | # CONFIG_NTFS_FS is not set | ||
904 | |||
905 | # | ||
906 | # Pseudo filesystems | ||
907 | # | ||
908 | CONFIG_PROC_FS=y | ||
909 | CONFIG_PROC_SYSCTL=y | ||
910 | CONFIG_SYSFS=y | ||
911 | CONFIG_TMPFS=y | ||
912 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
913 | # CONFIG_HUGETLB_PAGE is not set | ||
914 | # CONFIG_CONFIGFS_FS is not set | ||
915 | |||
916 | # | ||
917 | # Miscellaneous filesystems | ||
918 | # | ||
919 | # CONFIG_ADFS_FS is not set | ||
920 | # CONFIG_AFFS_FS is not set | ||
921 | # CONFIG_HFS_FS is not set | ||
922 | # CONFIG_HFSPLUS_FS is not set | ||
923 | # CONFIG_BEFS_FS is not set | ||
924 | # CONFIG_BFS_FS is not set | ||
925 | # CONFIG_EFS_FS is not set | ||
926 | CONFIG_JFFS2_FS=y | ||
927 | CONFIG_JFFS2_FS_DEBUG=0 | ||
928 | CONFIG_JFFS2_FS_WRITEBUFFER=y | ||
929 | # CONFIG_JFFS2_FS_WBUF_VERIFY is not set | ||
930 | # CONFIG_JFFS2_SUMMARY is not set | ||
931 | # CONFIG_JFFS2_FS_XATTR is not set | ||
932 | # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set | ||
933 | CONFIG_JFFS2_ZLIB=y | ||
934 | # CONFIG_JFFS2_LZO is not set | ||
935 | CONFIG_JFFS2_RTIME=y | ||
936 | # CONFIG_JFFS2_RUBIN is not set | ||
937 | CONFIG_CRAMFS=y | ||
938 | # CONFIG_VXFS_FS is not set | ||
939 | # CONFIG_MINIX_FS is not set | ||
940 | # CONFIG_HPFS_FS is not set | ||
941 | # CONFIG_QNX4FS_FS is not set | ||
942 | # CONFIG_ROMFS_FS is not set | ||
943 | # CONFIG_SYSV_FS is not set | ||
944 | # CONFIG_UFS_FS is not set | ||
945 | CONFIG_NETWORK_FILESYSTEMS=y | ||
946 | CONFIG_NFS_FS=y | ||
947 | CONFIG_NFS_V3=y | ||
948 | # CONFIG_NFS_V3_ACL is not set | ||
949 | # CONFIG_NFS_V4 is not set | ||
950 | # CONFIG_NFSD is not set | ||
951 | CONFIG_ROOT_NFS=y | ||
952 | CONFIG_LOCKD=y | ||
953 | CONFIG_LOCKD_V4=y | ||
954 | CONFIG_NFS_COMMON=y | ||
955 | CONFIG_SUNRPC=y | ||
956 | # CONFIG_SUNRPC_BIND34 is not set | ||
957 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
958 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
959 | # CONFIG_SMB_FS is not set | ||
960 | # CONFIG_CIFS is not set | ||
961 | # CONFIG_NCP_FS is not set | ||
962 | # CONFIG_CODA_FS is not set | ||
963 | # CONFIG_AFS_FS is not set | ||
964 | |||
965 | # | ||
966 | # Partition Types | ||
967 | # | ||
968 | CONFIG_PARTITION_ADVANCED=y | ||
969 | # CONFIG_ACORN_PARTITION is not set | ||
970 | # CONFIG_OSF_PARTITION is not set | ||
971 | # CONFIG_AMIGA_PARTITION is not set | ||
972 | # CONFIG_ATARI_PARTITION is not set | ||
973 | # CONFIG_MAC_PARTITION is not set | ||
974 | CONFIG_MSDOS_PARTITION=y | ||
975 | CONFIG_BSD_DISKLABEL=y | ||
976 | CONFIG_MINIX_SUBPARTITION=y | ||
977 | CONFIG_SOLARIS_X86_PARTITION=y | ||
978 | CONFIG_UNIXWARE_DISKLABEL=y | ||
979 | CONFIG_LDM_PARTITION=y | ||
980 | CONFIG_LDM_DEBUG=y | ||
981 | # CONFIG_SGI_PARTITION is not set | ||
982 | # CONFIG_ULTRIX_PARTITION is not set | ||
983 | CONFIG_SUN_PARTITION=y | ||
984 | # CONFIG_KARMA_PARTITION is not set | ||
985 | # CONFIG_EFI_PARTITION is not set | ||
986 | # CONFIG_SYSV68_PARTITION is not set | ||
987 | CONFIG_NLS=y | ||
988 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
989 | CONFIG_NLS_CODEPAGE_437=y | ||
990 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
991 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
992 | CONFIG_NLS_CODEPAGE_850=y | ||
993 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
994 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
995 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
996 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
997 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
998 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
999 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
1000 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
1001 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
1002 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
1003 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
1004 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
1005 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
1006 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
1007 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
1008 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
1009 | # CONFIG_NLS_ISO8859_8 is not set | ||
1010 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
1011 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
1012 | # CONFIG_NLS_ASCII is not set | ||
1013 | CONFIG_NLS_ISO8859_1=y | ||
1014 | CONFIG_NLS_ISO8859_2=y | ||
1015 | # CONFIG_NLS_ISO8859_3 is not set | ||
1016 | # CONFIG_NLS_ISO8859_4 is not set | ||
1017 | # CONFIG_NLS_ISO8859_5 is not set | ||
1018 | # CONFIG_NLS_ISO8859_6 is not set | ||
1019 | # CONFIG_NLS_ISO8859_7 is not set | ||
1020 | # CONFIG_NLS_ISO8859_9 is not set | ||
1021 | # CONFIG_NLS_ISO8859_13 is not set | ||
1022 | # CONFIG_NLS_ISO8859_14 is not set | ||
1023 | # CONFIG_NLS_ISO8859_15 is not set | ||
1024 | # CONFIG_NLS_KOI8_R is not set | ||
1025 | # CONFIG_NLS_KOI8_U is not set | ||
1026 | # CONFIG_NLS_UTF8 is not set | ||
1027 | # CONFIG_DLM is not set | ||
1028 | |||
1029 | # | ||
1030 | # Kernel hacking | ||
1031 | # | ||
1032 | # CONFIG_PRINTK_TIME is not set | ||
1033 | CONFIG_ENABLE_WARN_DEPRECATED=y | ||
1034 | CONFIG_ENABLE_MUST_CHECK=y | ||
1035 | CONFIG_FRAME_WARN=1024 | ||
1036 | CONFIG_MAGIC_SYSRQ=y | ||
1037 | # CONFIG_UNUSED_SYMBOLS is not set | ||
1038 | # CONFIG_DEBUG_FS is not set | ||
1039 | # CONFIG_HEADERS_CHECK is not set | ||
1040 | # CONFIG_DEBUG_KERNEL is not set | ||
1041 | # CONFIG_DEBUG_BUGVERBOSE is not set | ||
1042 | CONFIG_FRAME_POINTER=y | ||
1043 | # CONFIG_LATENCYTOP is not set | ||
1044 | # CONFIG_SAMPLES is not set | ||
1045 | CONFIG_DEBUG_USER=y | ||
1046 | |||
1047 | # | ||
1048 | # Security options | ||
1049 | # | ||
1050 | # CONFIG_KEYS is not set | ||
1051 | # CONFIG_SECURITY is not set | ||
1052 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | ||
1053 | CONFIG_CRYPTO=y | ||
1054 | |||
1055 | # | ||
1056 | # Crypto core or helper | ||
1057 | # | ||
1058 | CONFIG_CRYPTO_ALGAPI=m | ||
1059 | CONFIG_CRYPTO_BLKCIPHER=m | ||
1060 | CONFIG_CRYPTO_MANAGER=m | ||
1061 | # CONFIG_CRYPTO_GF128MUL is not set | ||
1062 | # CONFIG_CRYPTO_NULL is not set | ||
1063 | # CONFIG_CRYPTO_CRYPTD is not set | ||
1064 | # CONFIG_CRYPTO_AUTHENC is not set | ||
1065 | # CONFIG_CRYPTO_TEST is not set | ||
1066 | |||
1067 | # | ||
1068 | # Authenticated Encryption with Associated Data | ||
1069 | # | ||
1070 | # CONFIG_CRYPTO_CCM is not set | ||
1071 | # CONFIG_CRYPTO_GCM is not set | ||
1072 | # CONFIG_CRYPTO_SEQIV is not set | ||
1073 | |||
1074 | # | ||
1075 | # Block modes | ||
1076 | # | ||
1077 | CONFIG_CRYPTO_CBC=m | ||
1078 | # CONFIG_CRYPTO_CTR is not set | ||
1079 | # CONFIG_CRYPTO_CTS is not set | ||
1080 | CONFIG_CRYPTO_ECB=m | ||
1081 | # CONFIG_CRYPTO_LRW is not set | ||
1082 | CONFIG_CRYPTO_PCBC=m | ||
1083 | # CONFIG_CRYPTO_XTS is not set | ||
1084 | |||
1085 | # | ||
1086 | # Hash modes | ||
1087 | # | ||
1088 | # CONFIG_CRYPTO_HMAC is not set | ||
1089 | # CONFIG_CRYPTO_XCBC is not set | ||
1090 | |||
1091 | # | ||
1092 | # Digest | ||
1093 | # | ||
1094 | # CONFIG_CRYPTO_CRC32C is not set | ||
1095 | # CONFIG_CRYPTO_MD4 is not set | ||
1096 | # CONFIG_CRYPTO_MD5 is not set | ||
1097 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
1098 | # CONFIG_CRYPTO_SHA1 is not set | ||
1099 | # CONFIG_CRYPTO_SHA256 is not set | ||
1100 | # CONFIG_CRYPTO_SHA512 is not set | ||
1101 | # CONFIG_CRYPTO_TGR192 is not set | ||
1102 | # CONFIG_CRYPTO_WP512 is not set | ||
1103 | |||
1104 | # | ||
1105 | # Ciphers | ||
1106 | # | ||
1107 | # CONFIG_CRYPTO_AES is not set | ||
1108 | # CONFIG_CRYPTO_ANUBIS is not set | ||
1109 | # CONFIG_CRYPTO_ARC4 is not set | ||
1110 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
1111 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
1112 | # CONFIG_CRYPTO_CAST5 is not set | ||
1113 | # CONFIG_CRYPTO_CAST6 is not set | ||
1114 | # CONFIG_CRYPTO_DES is not set | ||
1115 | # CONFIG_CRYPTO_FCRYPT is not set | ||
1116 | # CONFIG_CRYPTO_KHAZAD is not set | ||
1117 | # CONFIG_CRYPTO_SALSA20 is not set | ||
1118 | # CONFIG_CRYPTO_SEED is not set | ||
1119 | # CONFIG_CRYPTO_SERPENT is not set | ||
1120 | # CONFIG_CRYPTO_TEA is not set | ||
1121 | # CONFIG_CRYPTO_TWOFISH is not set | ||
1122 | |||
1123 | # | ||
1124 | # Compression | ||
1125 | # | ||
1126 | # CONFIG_CRYPTO_DEFLATE is not set | ||
1127 | # CONFIG_CRYPTO_LZO is not set | ||
1128 | CONFIG_CRYPTO_HW=y | ||
1129 | |||
1130 | # | ||
1131 | # Library routines | ||
1132 | # | ||
1133 | CONFIG_BITREVERSE=y | ||
1134 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
1135 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
1136 | CONFIG_CRC_CCITT=y | ||
1137 | CONFIG_CRC16=y | ||
1138 | CONFIG_CRC_ITU_T=m | ||
1139 | CONFIG_CRC32=y | ||
1140 | # CONFIG_CRC7 is not set | ||
1141 | CONFIG_LIBCRC32C=y | ||
1142 | CONFIG_ZLIB_INFLATE=y | ||
1143 | CONFIG_ZLIB_DEFLATE=y | ||
1144 | CONFIG_PLIST=y | ||
1145 | CONFIG_HAS_IOMEM=y | ||
1146 | CONFIG_HAS_IOPORT=y | ||
1147 | CONFIG_HAS_DMA=y | ||
diff --git a/arch/arm/configs/lpd270_defconfig b/arch/arm/configs/lpd270_defconfig index a3bf5833b87a..1a38d8e3fe66 100644 --- a/arch/arm/configs/lpd270_defconfig +++ b/arch/arm/configs/lpd270_defconfig | |||
@@ -173,7 +173,6 @@ CONFIG_XSCALE_PMU=y | |||
173 | # Kernel Features | 173 | # Kernel Features |
174 | # | 174 | # |
175 | # CONFIG_PREEMPT is not set | 175 | # CONFIG_PREEMPT is not set |
176 | # CONFIG_NO_IDLE_HZ is not set | ||
177 | CONFIG_HZ=100 | 176 | CONFIG_HZ=100 |
178 | # CONFIG_AEABI is not set | 177 | # CONFIG_AEABI is not set |
179 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 178 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/configs/lpd7a404_defconfig b/arch/arm/configs/lpd7a404_defconfig index 46a0f7fe1fa5..7a2e932da1c6 100644 --- a/arch/arm/configs/lpd7a404_defconfig +++ b/arch/arm/configs/lpd7a404_defconfig | |||
@@ -148,7 +148,6 @@ CONFIG_ARM_AMBA=y | |||
148 | # Kernel Features | 148 | # Kernel Features |
149 | # | 149 | # |
150 | CONFIG_PREEMPT=y | 150 | CONFIG_PREEMPT=y |
151 | # CONFIG_NO_IDLE_HZ is not set | ||
152 | # CONFIG_AEABI is not set | 151 | # CONFIG_AEABI is not set |
153 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y | 152 | CONFIG_ARCH_DISCONTIGMEM_ENABLE=y |
154 | CONFIG_SELECT_MEMORY_MODEL=y | 153 | CONFIG_SELECT_MEMORY_MODEL=y |
diff --git a/arch/arm/configs/mv78xx0_defconfig b/arch/arm/configs/mv78xx0_defconfig new file mode 100644 index 000000000000..d38ebf8721a4 --- /dev/null +++ b/arch/arm/configs/mv78xx0_defconfig | |||
@@ -0,0 +1,1445 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.26-rc5 | ||
4 | # Fri Jun 13 02:57:32 2008 | ||
5 | # | ||
6 | CONFIG_ARM=y | ||
7 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y | ||
8 | # CONFIG_GENERIC_GPIO is not set | ||
9 | CONFIG_GENERIC_TIME=y | ||
10 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
11 | CONFIG_MMU=y | ||
12 | # CONFIG_NO_IOPORT is not set | ||
13 | CONFIG_GENERIC_HARDIRQS=y | ||
14 | CONFIG_STACKTRACE_SUPPORT=y | ||
15 | CONFIG_HAVE_LATENCYTOP_SUPPORT=y | ||
16 | CONFIG_LOCKDEP_SUPPORT=y | ||
17 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
18 | CONFIG_HARDIRQS_SW_RESEND=y | ||
19 | CONFIG_GENERIC_IRQ_PROBE=y | ||
20 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
21 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | ||
22 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | ||
23 | CONFIG_GENERIC_HWEIGHT=y | ||
24 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
25 | CONFIG_ARCH_SUPPORTS_AOUT=y | ||
26 | CONFIG_ZONE_DMA=y | ||
27 | CONFIG_VECTORS_BASE=0xffff0000 | ||
28 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
29 | |||
30 | # | ||
31 | # General setup | ||
32 | # | ||
33 | CONFIG_EXPERIMENTAL=y | ||
34 | CONFIG_BROKEN_ON_SMP=y | ||
35 | CONFIG_LOCK_KERNEL=y | ||
36 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
37 | CONFIG_LOCALVERSION="" | ||
38 | CONFIG_LOCALVERSION_AUTO=y | ||
39 | CONFIG_SWAP=y | ||
40 | CONFIG_SYSVIPC=y | ||
41 | CONFIG_SYSVIPC_SYSCTL=y | ||
42 | # CONFIG_POSIX_MQUEUE is not set | ||
43 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
44 | # CONFIG_TASKSTATS is not set | ||
45 | # CONFIG_AUDIT is not set | ||
46 | # CONFIG_IKCONFIG is not set | ||
47 | CONFIG_LOG_BUF_SHIFT=14 | ||
48 | # CONFIG_CGROUPS is not set | ||
49 | # CONFIG_GROUP_SCHED is not set | ||
50 | CONFIG_SYSFS_DEPRECATED=y | ||
51 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
52 | # CONFIG_RELAY is not set | ||
53 | # CONFIG_NAMESPACES is not set | ||
54 | # CONFIG_BLK_DEV_INITRD is not set | ||
55 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
56 | CONFIG_SYSCTL=y | ||
57 | CONFIG_EMBEDDED=y | ||
58 | CONFIG_UID16=y | ||
59 | CONFIG_SYSCTL_SYSCALL=y | ||
60 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
61 | CONFIG_KALLSYMS=y | ||
62 | CONFIG_KALLSYMS_ALL=y | ||
63 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
64 | CONFIG_HOTPLUG=y | ||
65 | CONFIG_PRINTK=y | ||
66 | CONFIG_BUG=y | ||
67 | CONFIG_ELF_CORE=y | ||
68 | CONFIG_COMPAT_BRK=y | ||
69 | CONFIG_BASE_FULL=y | ||
70 | CONFIG_FUTEX=y | ||
71 | CONFIG_ANON_INODES=y | ||
72 | CONFIG_EPOLL=y | ||
73 | CONFIG_SIGNALFD=y | ||
74 | CONFIG_TIMERFD=y | ||
75 | CONFIG_EVENTFD=y | ||
76 | CONFIG_SHMEM=y | ||
77 | CONFIG_VM_EVENT_COUNTERS=y | ||
78 | # CONFIG_SLUB_DEBUG is not set | ||
79 | # CONFIG_SLAB is not set | ||
80 | CONFIG_SLUB=y | ||
81 | # CONFIG_SLOB is not set | ||
82 | CONFIG_PROFILING=y | ||
83 | # CONFIG_MARKERS is not set | ||
84 | CONFIG_OPROFILE=y | ||
85 | CONFIG_HAVE_OPROFILE=y | ||
86 | CONFIG_KPROBES=y | ||
87 | CONFIG_KRETPROBES=y | ||
88 | CONFIG_HAVE_KPROBES=y | ||
89 | CONFIG_HAVE_KRETPROBES=y | ||
90 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
91 | CONFIG_PROC_PAGE_MONITOR=y | ||
92 | CONFIG_RT_MUTEXES=y | ||
93 | # CONFIG_TINY_SHMEM is not set | ||
94 | CONFIG_BASE_SMALL=0 | ||
95 | CONFIG_MODULES=y | ||
96 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
97 | CONFIG_MODULE_UNLOAD=y | ||
98 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
99 | # CONFIG_MODVERSIONS is not set | ||
100 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
101 | # CONFIG_KMOD is not set | ||
102 | CONFIG_BLOCK=y | ||
103 | # CONFIG_LBD is not set | ||
104 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
105 | # CONFIG_LSF is not set | ||
106 | # CONFIG_BLK_DEV_BSG is not set | ||
107 | |||
108 | # | ||
109 | # IO Schedulers | ||
110 | # | ||
111 | CONFIG_IOSCHED_NOOP=y | ||
112 | CONFIG_IOSCHED_AS=y | ||
113 | CONFIG_IOSCHED_DEADLINE=y | ||
114 | CONFIG_IOSCHED_CFQ=y | ||
115 | # CONFIG_DEFAULT_AS is not set | ||
116 | # CONFIG_DEFAULT_DEADLINE is not set | ||
117 | CONFIG_DEFAULT_CFQ=y | ||
118 | # CONFIG_DEFAULT_NOOP is not set | ||
119 | CONFIG_DEFAULT_IOSCHED="cfq" | ||
120 | CONFIG_CLASSIC_RCU=y | ||
121 | |||
122 | # | ||
123 | # System Type | ||
124 | # | ||
125 | # CONFIG_ARCH_AAEC2000 is not set | ||
126 | # CONFIG_ARCH_INTEGRATOR is not set | ||
127 | # CONFIG_ARCH_REALVIEW is not set | ||
128 | # CONFIG_ARCH_VERSATILE is not set | ||
129 | # CONFIG_ARCH_AT91 is not set | ||
130 | # CONFIG_ARCH_CLPS7500 is not set | ||
131 | # CONFIG_ARCH_CLPS711X is not set | ||
132 | # CONFIG_ARCH_CO285 is not set | ||
133 | # CONFIG_ARCH_EBSA110 is not set | ||
134 | # CONFIG_ARCH_EP93XX is not set | ||
135 | # CONFIG_ARCH_FOOTBRIDGE is not set | ||
136 | # CONFIG_ARCH_NETX is not set | ||
137 | # CONFIG_ARCH_H720X is not set | ||
138 | # CONFIG_ARCH_IMX is not set | ||
139 | # CONFIG_ARCH_IOP13XX is not set | ||
140 | # CONFIG_ARCH_IOP32X is not set | ||
141 | # CONFIG_ARCH_IOP33X is not set | ||
142 | # CONFIG_ARCH_IXP23XX is not set | ||
143 | # CONFIG_ARCH_IXP2000 is not set | ||
144 | # CONFIG_ARCH_IXP4XX is not set | ||
145 | # CONFIG_ARCH_L7200 is not set | ||
146 | # CONFIG_ARCH_KIRKWOOD is not set | ||
147 | # CONFIG_ARCH_KS8695 is not set | ||
148 | # CONFIG_ARCH_NS9XXX is not set | ||
149 | # CONFIG_ARCH_LOKI is not set | ||
150 | CONFIG_ARCH_MV78XX0=y | ||
151 | # CONFIG_ARCH_MXC is not set | ||
152 | # CONFIG_ARCH_ORION5X is not set | ||
153 | # CONFIG_ARCH_PNX4008 is not set | ||
154 | # CONFIG_ARCH_PXA is not set | ||
155 | # CONFIG_ARCH_RPC is not set | ||
156 | # CONFIG_ARCH_SA1100 is not set | ||
157 | # CONFIG_ARCH_S3C2410 is not set | ||
158 | # CONFIG_ARCH_SHARK is not set | ||
159 | # CONFIG_ARCH_LH7A40X is not set | ||
160 | # CONFIG_ARCH_DAVINCI is not set | ||
161 | # CONFIG_ARCH_OMAP is not set | ||
162 | # CONFIG_ARCH_MSM7X00A is not set | ||
163 | |||
164 | # | ||
165 | # Marvell MV78xx0 Implementations | ||
166 | # | ||
167 | CONFIG_MACH_DB78X00_BP=y | ||
168 | |||
169 | # | ||
170 | # Boot options | ||
171 | # | ||
172 | |||
173 | # | ||
174 | # Power management | ||
175 | # | ||
176 | CONFIG_PLAT_ORION=y | ||
177 | |||
178 | # | ||
179 | # Processor Type | ||
180 | # | ||
181 | CONFIG_CPU_32=y | ||
182 | CONFIG_CPU_FEROCEON=y | ||
183 | CONFIG_CPU_FEROCEON_OLD_ID=y | ||
184 | CONFIG_CPU_32v5=y | ||
185 | CONFIG_CPU_ABRT_EV5T=y | ||
186 | CONFIG_CPU_PABRT_NOIFAR=y | ||
187 | CONFIG_CPU_CACHE_VIVT=y | ||
188 | CONFIG_CPU_COPY_FEROCEON=y | ||
189 | CONFIG_CPU_TLB_FEROCEON=y | ||
190 | CONFIG_CPU_CP15=y | ||
191 | CONFIG_CPU_CP15_MMU=y | ||
192 | |||
193 | # | ||
194 | # Processor Features | ||
195 | # | ||
196 | CONFIG_ARM_THUMB=y | ||
197 | # CONFIG_CPU_ICACHE_DISABLE is not set | ||
198 | # CONFIG_CPU_DCACHE_DISABLE is not set | ||
199 | CONFIG_OUTER_CACHE=y | ||
200 | CONFIG_CACHE_FEROCEON_L2=y | ||
201 | |||
202 | # | ||
203 | # Bus support | ||
204 | # | ||
205 | CONFIG_PCI=y | ||
206 | CONFIG_PCI_SYSCALL=y | ||
207 | # CONFIG_ARCH_SUPPORTS_MSI is not set | ||
208 | CONFIG_PCI_LEGACY=y | ||
209 | # CONFIG_PCI_DEBUG is not set | ||
210 | # CONFIG_PCCARD is not set | ||
211 | |||
212 | # | ||
213 | # Kernel Features | ||
214 | # | ||
215 | CONFIG_TICK_ONESHOT=y | ||
216 | CONFIG_NO_HZ=y | ||
217 | CONFIG_HIGH_RES_TIMERS=y | ||
218 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
219 | CONFIG_PREEMPT=y | ||
220 | CONFIG_HZ=100 | ||
221 | CONFIG_AEABI=y | ||
222 | CONFIG_OABI_COMPAT=y | ||
223 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | ||
224 | CONFIG_SELECT_MEMORY_MODEL=y | ||
225 | CONFIG_FLATMEM_MANUAL=y | ||
226 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
227 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
228 | CONFIG_FLATMEM=y | ||
229 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
230 | # CONFIG_SPARSEMEM_STATIC is not set | ||
231 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
232 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
233 | CONFIG_SPLIT_PTLOCK_CPUS=4096 | ||
234 | # CONFIG_RESOURCES_64BIT is not set | ||
235 | CONFIG_ZONE_DMA_FLAG=1 | ||
236 | CONFIG_BOUNCE=y | ||
237 | CONFIG_VIRT_TO_BUS=y | ||
238 | CONFIG_ALIGNMENT_TRAP=y | ||
239 | |||
240 | # | ||
241 | # Boot options | ||
242 | # | ||
243 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
244 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
245 | CONFIG_CMDLINE="" | ||
246 | # CONFIG_XIP_KERNEL is not set | ||
247 | # CONFIG_KEXEC is not set | ||
248 | |||
249 | # | ||
250 | # Floating point emulation | ||
251 | # | ||
252 | |||
253 | # | ||
254 | # At least one emulation must be selected | ||
255 | # | ||
256 | CONFIG_FPE_NWFPE=y | ||
257 | # CONFIG_FPE_NWFPE_XP is not set | ||
258 | # CONFIG_FPE_FASTFPE is not set | ||
259 | CONFIG_VFP=y | ||
260 | |||
261 | # | ||
262 | # Userspace binary formats | ||
263 | # | ||
264 | CONFIG_BINFMT_ELF=y | ||
265 | # CONFIG_BINFMT_AOUT is not set | ||
266 | # CONFIG_BINFMT_MISC is not set | ||
267 | |||
268 | # | ||
269 | # Power management options | ||
270 | # | ||
271 | # CONFIG_PM is not set | ||
272 | CONFIG_ARCH_SUSPEND_POSSIBLE=y | ||
273 | |||
274 | # | ||
275 | # Networking | ||
276 | # | ||
277 | CONFIG_NET=y | ||
278 | |||
279 | # | ||
280 | # Networking options | ||
281 | # | ||
282 | CONFIG_PACKET=y | ||
283 | CONFIG_PACKET_MMAP=y | ||
284 | CONFIG_UNIX=y | ||
285 | CONFIG_XFRM=y | ||
286 | # CONFIG_XFRM_USER is not set | ||
287 | # CONFIG_XFRM_SUB_POLICY is not set | ||
288 | # CONFIG_XFRM_MIGRATE is not set | ||
289 | # CONFIG_XFRM_STATISTICS is not set | ||
290 | # CONFIG_NET_KEY is not set | ||
291 | CONFIG_INET=y | ||
292 | CONFIG_IP_MULTICAST=y | ||
293 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
294 | CONFIG_IP_FIB_HASH=y | ||
295 | CONFIG_IP_PNP=y | ||
296 | CONFIG_IP_PNP_DHCP=y | ||
297 | CONFIG_IP_PNP_BOOTP=y | ||
298 | # CONFIG_IP_PNP_RARP is not set | ||
299 | # CONFIG_NET_IPIP is not set | ||
300 | # CONFIG_NET_IPGRE is not set | ||
301 | # CONFIG_IP_MROUTE is not set | ||
302 | # CONFIG_ARPD is not set | ||
303 | # CONFIG_SYN_COOKIES is not set | ||
304 | # CONFIG_INET_AH is not set | ||
305 | # CONFIG_INET_ESP is not set | ||
306 | # CONFIG_INET_IPCOMP is not set | ||
307 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
308 | # CONFIG_INET_TUNNEL is not set | ||
309 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | ||
310 | CONFIG_INET_XFRM_MODE_TUNNEL=y | ||
311 | CONFIG_INET_XFRM_MODE_BEET=y | ||
312 | # CONFIG_INET_LRO is not set | ||
313 | CONFIG_INET_DIAG=y | ||
314 | CONFIG_INET_TCP_DIAG=y | ||
315 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
316 | CONFIG_TCP_CONG_CUBIC=y | ||
317 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
318 | # CONFIG_TCP_MD5SIG is not set | ||
319 | # CONFIG_IPV6 is not set | ||
320 | # CONFIG_NETWORK_SECMARK is not set | ||
321 | # CONFIG_NETFILTER is not set | ||
322 | # CONFIG_IP_DCCP is not set | ||
323 | # CONFIG_IP_SCTP is not set | ||
324 | # CONFIG_TIPC is not set | ||
325 | # CONFIG_ATM is not set | ||
326 | # CONFIG_BRIDGE is not set | ||
327 | # CONFIG_VLAN_8021Q is not set | ||
328 | # CONFIG_DECNET is not set | ||
329 | # CONFIG_LLC2 is not set | ||
330 | # CONFIG_IPX is not set | ||
331 | # CONFIG_ATALK is not set | ||
332 | # CONFIG_X25 is not set | ||
333 | # CONFIG_LAPB is not set | ||
334 | # CONFIG_ECONET is not set | ||
335 | # CONFIG_WAN_ROUTER is not set | ||
336 | # CONFIG_NET_SCHED is not set | ||
337 | |||
338 | # | ||
339 | # Network testing | ||
340 | # | ||
341 | CONFIG_NET_PKTGEN=m | ||
342 | # CONFIG_NET_TCPPROBE is not set | ||
343 | # CONFIG_HAMRADIO is not set | ||
344 | # CONFIG_CAN is not set | ||
345 | # CONFIG_IRDA is not set | ||
346 | # CONFIG_BT is not set | ||
347 | # CONFIG_AF_RXRPC is not set | ||
348 | |||
349 | # | ||
350 | # Wireless | ||
351 | # | ||
352 | # CONFIG_CFG80211 is not set | ||
353 | CONFIG_WIRELESS_EXT=y | ||
354 | # CONFIG_MAC80211 is not set | ||
355 | # CONFIG_IEEE80211 is not set | ||
356 | # CONFIG_RFKILL is not set | ||
357 | # CONFIG_NET_9P is not set | ||
358 | |||
359 | # | ||
360 | # Device Drivers | ||
361 | # | ||
362 | |||
363 | # | ||
364 | # Generic Driver Options | ||
365 | # | ||
366 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
367 | CONFIG_STANDALONE=y | ||
368 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
369 | CONFIG_FW_LOADER=y | ||
370 | # CONFIG_DEBUG_DRIVER is not set | ||
371 | # CONFIG_DEBUG_DEVRES is not set | ||
372 | # CONFIG_SYS_HYPERVISOR is not set | ||
373 | # CONFIG_CONNECTOR is not set | ||
374 | CONFIG_MTD=y | ||
375 | # CONFIG_MTD_DEBUG is not set | ||
376 | # CONFIG_MTD_CONCAT is not set | ||
377 | CONFIG_MTD_PARTITIONS=y | ||
378 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
379 | CONFIG_MTD_CMDLINE_PARTS=y | ||
380 | # CONFIG_MTD_AFS_PARTS is not set | ||
381 | # CONFIG_MTD_AR7_PARTS is not set | ||
382 | |||
383 | # | ||
384 | # User Modules And Translation Layers | ||
385 | # | ||
386 | CONFIG_MTD_CHAR=y | ||
387 | CONFIG_MTD_BLKDEVS=y | ||
388 | CONFIG_MTD_BLOCK=y | ||
389 | # CONFIG_FTL is not set | ||
390 | # CONFIG_NFTL is not set | ||
391 | # CONFIG_INFTL is not set | ||
392 | # CONFIG_RFD_FTL is not set | ||
393 | # CONFIG_SSFDC is not set | ||
394 | # CONFIG_MTD_OOPS is not set | ||
395 | |||
396 | # | ||
397 | # RAM/ROM/Flash chip drivers | ||
398 | # | ||
399 | CONFIG_MTD_CFI=y | ||
400 | CONFIG_MTD_JEDECPROBE=y | ||
401 | CONFIG_MTD_GEN_PROBE=y | ||
402 | CONFIG_MTD_CFI_ADV_OPTIONS=y | ||
403 | CONFIG_MTD_CFI_NOSWAP=y | ||
404 | # CONFIG_MTD_CFI_BE_BYTE_SWAP is not set | ||
405 | # CONFIG_MTD_CFI_LE_BYTE_SWAP is not set | ||
406 | CONFIG_MTD_CFI_GEOMETRY=y | ||
407 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
408 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
409 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
410 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
411 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
412 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
413 | CONFIG_MTD_CFI_I1=y | ||
414 | CONFIG_MTD_CFI_I2=y | ||
415 | # CONFIG_MTD_CFI_I4 is not set | ||
416 | # CONFIG_MTD_CFI_I8 is not set | ||
417 | # CONFIG_MTD_OTP is not set | ||
418 | CONFIG_MTD_CFI_INTELEXT=y | ||
419 | CONFIG_MTD_CFI_AMDSTD=y | ||
420 | # CONFIG_MTD_CFI_STAA is not set | ||
421 | CONFIG_MTD_CFI_UTIL=y | ||
422 | # CONFIG_MTD_RAM is not set | ||
423 | # CONFIG_MTD_ROM is not set | ||
424 | # CONFIG_MTD_ABSENT is not set | ||
425 | |||
426 | # | ||
427 | # Mapping drivers for chip access | ||
428 | # | ||
429 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
430 | CONFIG_MTD_PHYSMAP=y | ||
431 | CONFIG_MTD_PHYSMAP_START=0x0 | ||
432 | CONFIG_MTD_PHYSMAP_LEN=0x0 | ||
433 | CONFIG_MTD_PHYSMAP_BANKWIDTH=0 | ||
434 | # CONFIG_MTD_ARM_INTEGRATOR is not set | ||
435 | # CONFIG_MTD_IMPA7 is not set | ||
436 | # CONFIG_MTD_INTEL_VR_NOR is not set | ||
437 | # CONFIG_MTD_PLATRAM is not set | ||
438 | |||
439 | # | ||
440 | # Self-contained MTD device drivers | ||
441 | # | ||
442 | # CONFIG_MTD_PMC551 is not set | ||
443 | # CONFIG_MTD_SLRAM is not set | ||
444 | # CONFIG_MTD_PHRAM is not set | ||
445 | # CONFIG_MTD_MTDRAM is not set | ||
446 | # CONFIG_MTD_BLOCK2MTD is not set | ||
447 | |||
448 | # | ||
449 | # Disk-On-Chip Device Drivers | ||
450 | # | ||
451 | # CONFIG_MTD_DOC2000 is not set | ||
452 | # CONFIG_MTD_DOC2001 is not set | ||
453 | # CONFIG_MTD_DOC2001PLUS is not set | ||
454 | CONFIG_MTD_NAND=y | ||
455 | CONFIG_MTD_NAND_VERIFY_WRITE=y | ||
456 | # CONFIG_MTD_NAND_ECC_SMC is not set | ||
457 | # CONFIG_MTD_NAND_MUSEUM_IDS is not set | ||
458 | CONFIG_MTD_NAND_IDS=y | ||
459 | # CONFIG_MTD_NAND_DISKONCHIP is not set | ||
460 | # CONFIG_MTD_NAND_CAFE is not set | ||
461 | # CONFIG_MTD_NAND_NANDSIM is not set | ||
462 | # CONFIG_MTD_NAND_PLATFORM is not set | ||
463 | # CONFIG_MTD_ALAUDA is not set | ||
464 | CONFIG_MTD_NAND_ORION=y | ||
465 | # CONFIG_MTD_ONENAND is not set | ||
466 | |||
467 | # | ||
468 | # UBI - Unsorted block images | ||
469 | # | ||
470 | # CONFIG_MTD_UBI is not set | ||
471 | # CONFIG_PARPORT is not set | ||
472 | CONFIG_BLK_DEV=y | ||
473 | # CONFIG_BLK_CPQ_DA is not set | ||
474 | # CONFIG_BLK_CPQ_CISS_DA is not set | ||
475 | # CONFIG_BLK_DEV_DAC960 is not set | ||
476 | # CONFIG_BLK_DEV_UMEM is not set | ||
477 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
478 | CONFIG_BLK_DEV_LOOP=y | ||
479 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
480 | # CONFIG_BLK_DEV_NBD is not set | ||
481 | # CONFIG_BLK_DEV_SX8 is not set | ||
482 | # CONFIG_BLK_DEV_UB is not set | ||
483 | # CONFIG_BLK_DEV_RAM is not set | ||
484 | # CONFIG_CDROM_PKTCDVD is not set | ||
485 | # CONFIG_ATA_OVER_ETH is not set | ||
486 | CONFIG_MISC_DEVICES=y | ||
487 | # CONFIG_PHANTOM is not set | ||
488 | # CONFIG_EEPROM_93CX6 is not set | ||
489 | # CONFIG_SGI_IOC4 is not set | ||
490 | # CONFIG_TIFM_CORE is not set | ||
491 | # CONFIG_ENCLOSURE_SERVICES is not set | ||
492 | CONFIG_HAVE_IDE=y | ||
493 | # CONFIG_IDE is not set | ||
494 | |||
495 | # | ||
496 | # SCSI device support | ||
497 | # | ||
498 | # CONFIG_RAID_ATTRS is not set | ||
499 | CONFIG_SCSI=y | ||
500 | CONFIG_SCSI_DMA=y | ||
501 | # CONFIG_SCSI_TGT is not set | ||
502 | # CONFIG_SCSI_NETLINK is not set | ||
503 | # CONFIG_SCSI_PROC_FS is not set | ||
504 | |||
505 | # | ||
506 | # SCSI support type (disk, tape, CD-ROM) | ||
507 | # | ||
508 | CONFIG_BLK_DEV_SD=y | ||
509 | # CONFIG_CHR_DEV_ST is not set | ||
510 | # CONFIG_CHR_DEV_OSST is not set | ||
511 | CONFIG_BLK_DEV_SR=m | ||
512 | # CONFIG_BLK_DEV_SR_VENDOR is not set | ||
513 | CONFIG_CHR_DEV_SG=m | ||
514 | # CONFIG_CHR_DEV_SCH is not set | ||
515 | |||
516 | # | ||
517 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||
518 | # | ||
519 | # CONFIG_SCSI_MULTI_LUN is not set | ||
520 | # CONFIG_SCSI_CONSTANTS is not set | ||
521 | # CONFIG_SCSI_LOGGING is not set | ||
522 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
523 | CONFIG_SCSI_WAIT_SCAN=m | ||
524 | |||
525 | # | ||
526 | # SCSI Transports | ||
527 | # | ||
528 | # CONFIG_SCSI_SPI_ATTRS is not set | ||
529 | # CONFIG_SCSI_FC_ATTRS is not set | ||
530 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
531 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
532 | # CONFIG_SCSI_SRP_ATTRS is not set | ||
533 | CONFIG_SCSI_LOWLEVEL=y | ||
534 | # CONFIG_ISCSI_TCP is not set | ||
535 | # CONFIG_BLK_DEV_3W_XXXX_RAID is not set | ||
536 | # CONFIG_SCSI_3W_9XXX is not set | ||
537 | # CONFIG_SCSI_ACARD is not set | ||
538 | # CONFIG_SCSI_AACRAID is not set | ||
539 | # CONFIG_SCSI_AIC7XXX is not set | ||
540 | # CONFIG_SCSI_AIC7XXX_OLD is not set | ||
541 | # CONFIG_SCSI_AIC79XX is not set | ||
542 | # CONFIG_SCSI_AIC94XX is not set | ||
543 | # CONFIG_SCSI_DPT_I2O is not set | ||
544 | # CONFIG_SCSI_ADVANSYS is not set | ||
545 | # CONFIG_SCSI_ARCMSR is not set | ||
546 | # CONFIG_MEGARAID_NEWGEN is not set | ||
547 | # CONFIG_MEGARAID_LEGACY is not set | ||
548 | # CONFIG_MEGARAID_SAS is not set | ||
549 | # CONFIG_SCSI_HPTIOP is not set | ||
550 | # CONFIG_SCSI_DMX3191D is not set | ||
551 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||
552 | # CONFIG_SCSI_IPS is not set | ||
553 | # CONFIG_SCSI_INITIO is not set | ||
554 | # CONFIG_SCSI_INIA100 is not set | ||
555 | # CONFIG_SCSI_MVSAS is not set | ||
556 | # CONFIG_SCSI_STEX is not set | ||
557 | # CONFIG_SCSI_SYM53C8XX_2 is not set | ||
558 | # CONFIG_SCSI_IPR is not set | ||
559 | # CONFIG_SCSI_QLOGIC_1280 is not set | ||
560 | # CONFIG_SCSI_QLA_FC is not set | ||
561 | # CONFIG_SCSI_QLA_ISCSI is not set | ||
562 | # CONFIG_SCSI_LPFC is not set | ||
563 | # CONFIG_SCSI_DC395x is not set | ||
564 | # CONFIG_SCSI_DC390T is not set | ||
565 | # CONFIG_SCSI_NSP32 is not set | ||
566 | # CONFIG_SCSI_DEBUG is not set | ||
567 | # CONFIG_SCSI_SRP is not set | ||
568 | CONFIG_ATA=y | ||
569 | # CONFIG_ATA_NONSTANDARD is not set | ||
570 | CONFIG_SATA_PMP=y | ||
571 | # CONFIG_SATA_AHCI is not set | ||
572 | # CONFIG_SATA_SIL24 is not set | ||
573 | CONFIG_ATA_SFF=y | ||
574 | # CONFIG_SATA_SVW is not set | ||
575 | # CONFIG_ATA_PIIX is not set | ||
576 | CONFIG_SATA_MV=y | ||
577 | # CONFIG_SATA_NV is not set | ||
578 | # CONFIG_PDC_ADMA is not set | ||
579 | # CONFIG_SATA_QSTOR is not set | ||
580 | # CONFIG_SATA_PROMISE is not set | ||
581 | # CONFIG_SATA_SX4 is not set | ||
582 | # CONFIG_SATA_SIL is not set | ||
583 | # CONFIG_SATA_SIS is not set | ||
584 | # CONFIG_SATA_ULI is not set | ||
585 | # CONFIG_SATA_VIA is not set | ||
586 | # CONFIG_SATA_VITESSE is not set | ||
587 | # CONFIG_SATA_INIC162X is not set | ||
588 | # CONFIG_PATA_ALI is not set | ||
589 | # CONFIG_PATA_AMD is not set | ||
590 | # CONFIG_PATA_ARTOP is not set | ||
591 | # CONFIG_PATA_ATIIXP is not set | ||
592 | # CONFIG_PATA_CMD640_PCI is not set | ||
593 | # CONFIG_PATA_CMD64X is not set | ||
594 | # CONFIG_PATA_CS5520 is not set | ||
595 | # CONFIG_PATA_CS5530 is not set | ||
596 | # CONFIG_PATA_CYPRESS is not set | ||
597 | # CONFIG_PATA_EFAR is not set | ||
598 | # CONFIG_ATA_GENERIC is not set | ||
599 | # CONFIG_PATA_HPT366 is not set | ||
600 | # CONFIG_PATA_HPT37X is not set | ||
601 | # CONFIG_PATA_HPT3X2N is not set | ||
602 | # CONFIG_PATA_HPT3X3 is not set | ||
603 | # CONFIG_PATA_IT821X is not set | ||
604 | # CONFIG_PATA_IT8213 is not set | ||
605 | # CONFIG_PATA_JMICRON is not set | ||
606 | # CONFIG_PATA_TRIFLEX is not set | ||
607 | # CONFIG_PATA_MARVELL is not set | ||
608 | # CONFIG_PATA_MPIIX is not set | ||
609 | # CONFIG_PATA_OLDPIIX is not set | ||
610 | # CONFIG_PATA_NETCELL is not set | ||
611 | # CONFIG_PATA_NINJA32 is not set | ||
612 | # CONFIG_PATA_NS87410 is not set | ||
613 | # CONFIG_PATA_NS87415 is not set | ||
614 | # CONFIG_PATA_OPTI is not set | ||
615 | # CONFIG_PATA_OPTIDMA is not set | ||
616 | # CONFIG_PATA_PDC_OLD is not set | ||
617 | # CONFIG_PATA_RADISYS is not set | ||
618 | # CONFIG_PATA_RZ1000 is not set | ||
619 | # CONFIG_PATA_SC1200 is not set | ||
620 | # CONFIG_PATA_SERVERWORKS is not set | ||
621 | # CONFIG_PATA_PDC2027X is not set | ||
622 | # CONFIG_PATA_SIL680 is not set | ||
623 | # CONFIG_PATA_SIS is not set | ||
624 | # CONFIG_PATA_VIA is not set | ||
625 | # CONFIG_PATA_WINBOND is not set | ||
626 | # CONFIG_PATA_PLATFORM is not set | ||
627 | # CONFIG_PATA_SCH is not set | ||
628 | # CONFIG_MD is not set | ||
629 | # CONFIG_FUSION is not set | ||
630 | |||
631 | # | ||
632 | # IEEE 1394 (FireWire) support | ||
633 | # | ||
634 | # CONFIG_FIREWIRE is not set | ||
635 | # CONFIG_IEEE1394 is not set | ||
636 | # CONFIG_I2O is not set | ||
637 | CONFIG_NETDEVICES=y | ||
638 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
639 | # CONFIG_DUMMY is not set | ||
640 | # CONFIG_BONDING is not set | ||
641 | # CONFIG_MACVLAN is not set | ||
642 | # CONFIG_EQUALIZER is not set | ||
643 | # CONFIG_TUN is not set | ||
644 | # CONFIG_VETH is not set | ||
645 | # CONFIG_ARCNET is not set | ||
646 | # CONFIG_PHYLIB is not set | ||
647 | CONFIG_NET_ETHERNET=y | ||
648 | CONFIG_MII=y | ||
649 | # CONFIG_AX88796 is not set | ||
650 | # CONFIG_HAPPYMEAL is not set | ||
651 | # CONFIG_SUNGEM is not set | ||
652 | # CONFIG_CASSINI is not set | ||
653 | # CONFIG_NET_VENDOR_3COM is not set | ||
654 | # CONFIG_SMC91X is not set | ||
655 | # CONFIG_DM9000 is not set | ||
656 | # CONFIG_NET_TULIP is not set | ||
657 | # CONFIG_HP100 is not set | ||
658 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
659 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
660 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
661 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
662 | CONFIG_NET_PCI=y | ||
663 | # CONFIG_PCNET32 is not set | ||
664 | # CONFIG_AMD8111_ETH is not set | ||
665 | # CONFIG_ADAPTEC_STARFIRE is not set | ||
666 | # CONFIG_B44 is not set | ||
667 | # CONFIG_FORCEDETH is not set | ||
668 | # CONFIG_EEPRO100 is not set | ||
669 | # CONFIG_E100 is not set | ||
670 | # CONFIG_FEALNX is not set | ||
671 | # CONFIG_NATSEMI is not set | ||
672 | # CONFIG_NE2K_PCI is not set | ||
673 | # CONFIG_8139CP is not set | ||
674 | # CONFIG_8139TOO is not set | ||
675 | # CONFIG_R6040 is not set | ||
676 | # CONFIG_SIS900 is not set | ||
677 | # CONFIG_EPIC100 is not set | ||
678 | # CONFIG_SUNDANCE is not set | ||
679 | # CONFIG_TLAN is not set | ||
680 | # CONFIG_VIA_RHINE is not set | ||
681 | # CONFIG_SC92031 is not set | ||
682 | CONFIG_NETDEV_1000=y | ||
683 | # CONFIG_ACENIC is not set | ||
684 | # CONFIG_DL2K is not set | ||
685 | # CONFIG_E1000 is not set | ||
686 | # CONFIG_E1000E is not set | ||
687 | # CONFIG_E1000E_ENABLED is not set | ||
688 | # CONFIG_IP1000 is not set | ||
689 | # CONFIG_IGB is not set | ||
690 | # CONFIG_NS83820 is not set | ||
691 | # CONFIG_HAMACHI is not set | ||
692 | # CONFIG_YELLOWFIN is not set | ||
693 | # CONFIG_R8169 is not set | ||
694 | # CONFIG_SIS190 is not set | ||
695 | # CONFIG_SKGE is not set | ||
696 | # CONFIG_SKY2 is not set | ||
697 | # CONFIG_VIA_VELOCITY is not set | ||
698 | # CONFIG_TIGON3 is not set | ||
699 | # CONFIG_BNX2 is not set | ||
700 | CONFIG_MV643XX_ETH=y | ||
701 | # CONFIG_QLA3XXX is not set | ||
702 | # CONFIG_ATL1 is not set | ||
703 | # CONFIG_NETDEV_10000 is not set | ||
704 | # CONFIG_TR is not set | ||
705 | |||
706 | # | ||
707 | # Wireless LAN | ||
708 | # | ||
709 | # CONFIG_WLAN_PRE80211 is not set | ||
710 | # CONFIG_WLAN_80211 is not set | ||
711 | # CONFIG_IWLWIFI_LEDS is not set | ||
712 | |||
713 | # | ||
714 | # USB Network Adapters | ||
715 | # | ||
716 | # CONFIG_USB_CATC is not set | ||
717 | # CONFIG_USB_KAWETH is not set | ||
718 | # CONFIG_USB_PEGASUS is not set | ||
719 | # CONFIG_USB_RTL8150 is not set | ||
720 | # CONFIG_USB_USBNET is not set | ||
721 | # CONFIG_WAN is not set | ||
722 | # CONFIG_FDDI is not set | ||
723 | # CONFIG_HIPPI is not set | ||
724 | # CONFIG_PPP is not set | ||
725 | # CONFIG_SLIP is not set | ||
726 | # CONFIG_NET_FC is not set | ||
727 | # CONFIG_NETCONSOLE is not set | ||
728 | # CONFIG_NETPOLL is not set | ||
729 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
730 | # CONFIG_ISDN is not set | ||
731 | |||
732 | # | ||
733 | # Input device support | ||
734 | # | ||
735 | CONFIG_INPUT=y | ||
736 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
737 | # CONFIG_INPUT_POLLDEV is not set | ||
738 | |||
739 | # | ||
740 | # Userland interfaces | ||
741 | # | ||
742 | # CONFIG_INPUT_MOUSEDEV is not set | ||
743 | # CONFIG_INPUT_JOYDEV is not set | ||
744 | CONFIG_INPUT_EVDEV=y | ||
745 | # CONFIG_INPUT_EVBUG is not set | ||
746 | |||
747 | # | ||
748 | # Input Device Drivers | ||
749 | # | ||
750 | # CONFIG_INPUT_KEYBOARD is not set | ||
751 | # CONFIG_INPUT_MOUSE is not set | ||
752 | # CONFIG_INPUT_JOYSTICK is not set | ||
753 | # CONFIG_INPUT_TABLET is not set | ||
754 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
755 | # CONFIG_INPUT_MISC is not set | ||
756 | |||
757 | # | ||
758 | # Hardware I/O ports | ||
759 | # | ||
760 | # CONFIG_SERIO is not set | ||
761 | # CONFIG_GAMEPORT is not set | ||
762 | |||
763 | # | ||
764 | # Character devices | ||
765 | # | ||
766 | # CONFIG_VT is not set | ||
767 | CONFIG_DEVKMEM=y | ||
768 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
769 | # CONFIG_NOZOMI is not set | ||
770 | |||
771 | # | ||
772 | # Serial drivers | ||
773 | # | ||
774 | CONFIG_SERIAL_8250=y | ||
775 | CONFIG_SERIAL_8250_CONSOLE=y | ||
776 | # CONFIG_SERIAL_8250_PCI is not set | ||
777 | CONFIG_SERIAL_8250_NR_UARTS=4 | ||
778 | CONFIG_SERIAL_8250_RUNTIME_UARTS=2 | ||
779 | # CONFIG_SERIAL_8250_EXTENDED is not set | ||
780 | |||
781 | # | ||
782 | # Non-8250 serial port support | ||
783 | # | ||
784 | CONFIG_SERIAL_CORE=y | ||
785 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
786 | # CONFIG_SERIAL_JSM is not set | ||
787 | CONFIG_UNIX98_PTYS=y | ||
788 | CONFIG_LEGACY_PTYS=y | ||
789 | CONFIG_LEGACY_PTY_COUNT=16 | ||
790 | # CONFIG_IPMI_HANDLER is not set | ||
791 | # CONFIG_HW_RANDOM is not set | ||
792 | # CONFIG_NVRAM is not set | ||
793 | # CONFIG_R3964 is not set | ||
794 | # CONFIG_APPLICOM is not set | ||
795 | # CONFIG_RAW_DRIVER is not set | ||
796 | # CONFIG_TCG_TPM is not set | ||
797 | CONFIG_DEVPORT=y | ||
798 | CONFIG_I2C=y | ||
799 | CONFIG_I2C_BOARDINFO=y | ||
800 | CONFIG_I2C_CHARDEV=y | ||
801 | |||
802 | # | ||
803 | # I2C Hardware Bus support | ||
804 | # | ||
805 | # CONFIG_I2C_ALI1535 is not set | ||
806 | # CONFIG_I2C_ALI1563 is not set | ||
807 | # CONFIG_I2C_ALI15X3 is not set | ||
808 | # CONFIG_I2C_AMD756 is not set | ||
809 | # CONFIG_I2C_AMD8111 is not set | ||
810 | # CONFIG_I2C_I801 is not set | ||
811 | # CONFIG_I2C_I810 is not set | ||
812 | # CONFIG_I2C_PIIX4 is not set | ||
813 | # CONFIG_I2C_NFORCE2 is not set | ||
814 | # CONFIG_I2C_OCORES is not set | ||
815 | # CONFIG_I2C_PARPORT_LIGHT is not set | ||
816 | # CONFIG_I2C_PROSAVAGE is not set | ||
817 | # CONFIG_I2C_SAVAGE4 is not set | ||
818 | # CONFIG_I2C_SIMTEC is not set | ||
819 | # CONFIG_I2C_SIS5595 is not set | ||
820 | # CONFIG_I2C_SIS630 is not set | ||
821 | # CONFIG_I2C_SIS96X is not set | ||
822 | # CONFIG_I2C_TAOS_EVM is not set | ||
823 | # CONFIG_I2C_STUB is not set | ||
824 | # CONFIG_I2C_TINY_USB is not set | ||
825 | # CONFIG_I2C_VIA is not set | ||
826 | # CONFIG_I2C_VIAPRO is not set | ||
827 | # CONFIG_I2C_VOODOO3 is not set | ||
828 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
829 | CONFIG_I2C_MV64XXX=y | ||
830 | |||
831 | # | ||
832 | # Miscellaneous I2C Chip support | ||
833 | # | ||
834 | # CONFIG_DS1682 is not set | ||
835 | # CONFIG_SENSORS_EEPROM is not set | ||
836 | # CONFIG_SENSORS_PCF8574 is not set | ||
837 | # CONFIG_PCF8575 is not set | ||
838 | # CONFIG_SENSORS_PCF8591 is not set | ||
839 | # CONFIG_SENSORS_MAX6875 is not set | ||
840 | # CONFIG_SENSORS_TSL2550 is not set | ||
841 | # CONFIG_I2C_DEBUG_CORE is not set | ||
842 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
843 | # CONFIG_I2C_DEBUG_BUS is not set | ||
844 | # CONFIG_I2C_DEBUG_CHIP is not set | ||
845 | # CONFIG_SPI is not set | ||
846 | # CONFIG_W1 is not set | ||
847 | # CONFIG_POWER_SUPPLY is not set | ||
848 | CONFIG_HWMON=y | ||
849 | # CONFIG_HWMON_VID is not set | ||
850 | # CONFIG_SENSORS_AD7418 is not set | ||
851 | # CONFIG_SENSORS_ADM1021 is not set | ||
852 | # CONFIG_SENSORS_ADM1025 is not set | ||
853 | # CONFIG_SENSORS_ADM1026 is not set | ||
854 | # CONFIG_SENSORS_ADM1029 is not set | ||
855 | # CONFIG_SENSORS_ADM1031 is not set | ||
856 | # CONFIG_SENSORS_ADM9240 is not set | ||
857 | # CONFIG_SENSORS_ADT7470 is not set | ||
858 | # CONFIG_SENSORS_ADT7473 is not set | ||
859 | # CONFIG_SENSORS_ATXP1 is not set | ||
860 | # CONFIG_SENSORS_DS1621 is not set | ||
861 | # CONFIG_SENSORS_I5K_AMB is not set | ||
862 | # CONFIG_SENSORS_F71805F is not set | ||
863 | # CONFIG_SENSORS_F71882FG is not set | ||
864 | # CONFIG_SENSORS_F75375S is not set | ||
865 | # CONFIG_SENSORS_GL518SM is not set | ||
866 | # CONFIG_SENSORS_GL520SM is not set | ||
867 | # CONFIG_SENSORS_IT87 is not set | ||
868 | # CONFIG_SENSORS_LM63 is not set | ||
869 | # CONFIG_SENSORS_LM75 is not set | ||
870 | # CONFIG_SENSORS_LM77 is not set | ||
871 | # CONFIG_SENSORS_LM78 is not set | ||
872 | # CONFIG_SENSORS_LM80 is not set | ||
873 | # CONFIG_SENSORS_LM83 is not set | ||
874 | # CONFIG_SENSORS_LM85 is not set | ||
875 | # CONFIG_SENSORS_LM87 is not set | ||
876 | # CONFIG_SENSORS_LM90 is not set | ||
877 | # CONFIG_SENSORS_LM92 is not set | ||
878 | # CONFIG_SENSORS_LM93 is not set | ||
879 | # CONFIG_SENSORS_MAX1619 is not set | ||
880 | # CONFIG_SENSORS_MAX6650 is not set | ||
881 | # CONFIG_SENSORS_PC87360 is not set | ||
882 | # CONFIG_SENSORS_PC87427 is not set | ||
883 | # CONFIG_SENSORS_SIS5595 is not set | ||
884 | # CONFIG_SENSORS_DME1737 is not set | ||
885 | # CONFIG_SENSORS_SMSC47M1 is not set | ||
886 | # CONFIG_SENSORS_SMSC47M192 is not set | ||
887 | # CONFIG_SENSORS_SMSC47B397 is not set | ||
888 | # CONFIG_SENSORS_ADS7828 is not set | ||
889 | # CONFIG_SENSORS_THMC50 is not set | ||
890 | # CONFIG_SENSORS_VIA686A is not set | ||
891 | # CONFIG_SENSORS_VT1211 is not set | ||
892 | # CONFIG_SENSORS_VT8231 is not set | ||
893 | # CONFIG_SENSORS_W83781D is not set | ||
894 | # CONFIG_SENSORS_W83791D is not set | ||
895 | # CONFIG_SENSORS_W83792D is not set | ||
896 | # CONFIG_SENSORS_W83793 is not set | ||
897 | # CONFIG_SENSORS_W83L785TS is not set | ||
898 | # CONFIG_SENSORS_W83L786NG is not set | ||
899 | # CONFIG_SENSORS_W83627HF is not set | ||
900 | # CONFIG_SENSORS_W83627EHF is not set | ||
901 | # CONFIG_HWMON_DEBUG_CHIP is not set | ||
902 | # CONFIG_WATCHDOG is not set | ||
903 | |||
904 | # | ||
905 | # Sonics Silicon Backplane | ||
906 | # | ||
907 | CONFIG_SSB_POSSIBLE=y | ||
908 | # CONFIG_SSB is not set | ||
909 | |||
910 | # | ||
911 | # Multifunction device drivers | ||
912 | # | ||
913 | # CONFIG_MFD_SM501 is not set | ||
914 | # CONFIG_MFD_ASIC3 is not set | ||
915 | # CONFIG_HTC_PASIC3 is not set | ||
916 | |||
917 | # | ||
918 | # Multimedia devices | ||
919 | # | ||
920 | |||
921 | # | ||
922 | # Multimedia core support | ||
923 | # | ||
924 | # CONFIG_VIDEO_DEV is not set | ||
925 | # CONFIG_DVB_CORE is not set | ||
926 | # CONFIG_VIDEO_MEDIA is not set | ||
927 | |||
928 | # | ||
929 | # Multimedia drivers | ||
930 | # | ||
931 | # CONFIG_DAB is not set | ||
932 | |||
933 | # | ||
934 | # Graphics support | ||
935 | # | ||
936 | # CONFIG_DRM is not set | ||
937 | # CONFIG_VGASTATE is not set | ||
938 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
939 | # CONFIG_FB is not set | ||
940 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
941 | |||
942 | # | ||
943 | # Display device support | ||
944 | # | ||
945 | # CONFIG_DISPLAY_SUPPORT is not set | ||
946 | |||
947 | # | ||
948 | # Sound | ||
949 | # | ||
950 | # CONFIG_SOUND is not set | ||
951 | CONFIG_HID_SUPPORT=y | ||
952 | CONFIG_HID=y | ||
953 | # CONFIG_HID_DEBUG is not set | ||
954 | # CONFIG_HIDRAW is not set | ||
955 | |||
956 | # | ||
957 | # USB Input Devices | ||
958 | # | ||
959 | CONFIG_USB_HID=y | ||
960 | # CONFIG_USB_HIDINPUT_POWERBOOK is not set | ||
961 | # CONFIG_HID_FF is not set | ||
962 | # CONFIG_USB_HIDDEV is not set | ||
963 | CONFIG_USB_SUPPORT=y | ||
964 | CONFIG_USB_ARCH_HAS_HCD=y | ||
965 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
966 | CONFIG_USB_ARCH_HAS_EHCI=y | ||
967 | CONFIG_USB=y | ||
968 | # CONFIG_USB_DEBUG is not set | ||
969 | # CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set | ||
970 | |||
971 | # | ||
972 | # Miscellaneous USB options | ||
973 | # | ||
974 | CONFIG_USB_DEVICEFS=y | ||
975 | CONFIG_USB_DEVICE_CLASS=y | ||
976 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
977 | # CONFIG_USB_OTG is not set | ||
978 | # CONFIG_USB_OTG_WHITELIST is not set | ||
979 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | ||
980 | |||
981 | # | ||
982 | # USB Host Controller Drivers | ||
983 | # | ||
984 | # CONFIG_USB_C67X00_HCD is not set | ||
985 | CONFIG_USB_EHCI_HCD=y | ||
986 | CONFIG_USB_EHCI_ROOT_HUB_TT=y | ||
987 | CONFIG_USB_EHCI_TT_NEWSCHED=y | ||
988 | # CONFIG_USB_ISP116X_HCD is not set | ||
989 | # CONFIG_USB_ISP1760_HCD is not set | ||
990 | # CONFIG_USB_OHCI_HCD is not set | ||
991 | # CONFIG_USB_UHCI_HCD is not set | ||
992 | # CONFIG_USB_SL811_HCD is not set | ||
993 | # CONFIG_USB_R8A66597_HCD is not set | ||
994 | |||
995 | # | ||
996 | # USB Device Class drivers | ||
997 | # | ||
998 | # CONFIG_USB_ACM is not set | ||
999 | CONFIG_USB_PRINTER=y | ||
1000 | # CONFIG_USB_WDM is not set | ||
1001 | |||
1002 | # | ||
1003 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
1004 | # | ||
1005 | |||
1006 | # | ||
1007 | # may also be needed; see USB_STORAGE Help for more information | ||
1008 | # | ||
1009 | CONFIG_USB_STORAGE=y | ||
1010 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
1011 | CONFIG_USB_STORAGE_DATAFAB=y | ||
1012 | CONFIG_USB_STORAGE_FREECOM=y | ||
1013 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
1014 | CONFIG_USB_STORAGE_DPCM=y | ||
1015 | # CONFIG_USB_STORAGE_USBAT is not set | ||
1016 | CONFIG_USB_STORAGE_SDDR09=y | ||
1017 | CONFIG_USB_STORAGE_SDDR55=y | ||
1018 | CONFIG_USB_STORAGE_JUMPSHOT=y | ||
1019 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
1020 | # CONFIG_USB_STORAGE_ONETOUCH is not set | ||
1021 | # CONFIG_USB_STORAGE_KARMA is not set | ||
1022 | # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set | ||
1023 | # CONFIG_USB_LIBUSUAL is not set | ||
1024 | |||
1025 | # | ||
1026 | # USB Imaging devices | ||
1027 | # | ||
1028 | # CONFIG_USB_MDC800 is not set | ||
1029 | # CONFIG_USB_MICROTEK is not set | ||
1030 | # CONFIG_USB_MON is not set | ||
1031 | |||
1032 | # | ||
1033 | # USB port drivers | ||
1034 | # | ||
1035 | # CONFIG_USB_SERIAL is not set | ||
1036 | |||
1037 | # | ||
1038 | # USB Miscellaneous drivers | ||
1039 | # | ||
1040 | # CONFIG_USB_EMI62 is not set | ||
1041 | # CONFIG_USB_EMI26 is not set | ||
1042 | # CONFIG_USB_ADUTUX is not set | ||
1043 | # CONFIG_USB_AUERSWALD is not set | ||
1044 | # CONFIG_USB_RIO500 is not set | ||
1045 | # CONFIG_USB_LEGOTOWER is not set | ||
1046 | # CONFIG_USB_LCD is not set | ||
1047 | # CONFIG_USB_BERRY_CHARGE is not set | ||
1048 | # CONFIG_USB_LED is not set | ||
1049 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
1050 | # CONFIG_USB_CYTHERM is not set | ||
1051 | # CONFIG_USB_PHIDGET is not set | ||
1052 | # CONFIG_USB_IDMOUSE is not set | ||
1053 | # CONFIG_USB_FTDI_ELAN is not set | ||
1054 | # CONFIG_USB_APPLEDISPLAY is not set | ||
1055 | # CONFIG_USB_SISUSBVGA is not set | ||
1056 | # CONFIG_USB_LD is not set | ||
1057 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
1058 | # CONFIG_USB_IOWARRIOR is not set | ||
1059 | # CONFIG_USB_TEST is not set | ||
1060 | # CONFIG_USB_ISIGHTFW is not set | ||
1061 | # CONFIG_USB_GADGET is not set | ||
1062 | # CONFIG_MMC is not set | ||
1063 | CONFIG_NEW_LEDS=y | ||
1064 | CONFIG_LEDS_CLASS=y | ||
1065 | |||
1066 | # | ||
1067 | # LED drivers | ||
1068 | # | ||
1069 | |||
1070 | # | ||
1071 | # LED Triggers | ||
1072 | # | ||
1073 | CONFIG_LEDS_TRIGGERS=y | ||
1074 | CONFIG_LEDS_TRIGGER_TIMER=y | ||
1075 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | ||
1076 | # CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set | ||
1077 | CONFIG_RTC_LIB=y | ||
1078 | CONFIG_RTC_CLASS=y | ||
1079 | CONFIG_RTC_HCTOSYS=y | ||
1080 | CONFIG_RTC_HCTOSYS_DEVICE="rtc0" | ||
1081 | # CONFIG_RTC_DEBUG is not set | ||
1082 | |||
1083 | # | ||
1084 | # RTC interfaces | ||
1085 | # | ||
1086 | CONFIG_RTC_INTF_SYSFS=y | ||
1087 | CONFIG_RTC_INTF_PROC=y | ||
1088 | CONFIG_RTC_INTF_DEV=y | ||
1089 | # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set | ||
1090 | # CONFIG_RTC_DRV_TEST is not set | ||
1091 | |||
1092 | # | ||
1093 | # I2C RTC drivers | ||
1094 | # | ||
1095 | CONFIG_RTC_DRV_DS1307=y | ||
1096 | # CONFIG_RTC_DRV_DS1374 is not set | ||
1097 | # CONFIG_RTC_DRV_DS1672 is not set | ||
1098 | # CONFIG_RTC_DRV_MAX6900 is not set | ||
1099 | CONFIG_RTC_DRV_RS5C372=y | ||
1100 | # CONFIG_RTC_DRV_ISL1208 is not set | ||
1101 | # CONFIG_RTC_DRV_X1205 is not set | ||
1102 | # CONFIG_RTC_DRV_PCF8563 is not set | ||
1103 | # CONFIG_RTC_DRV_PCF8583 is not set | ||
1104 | CONFIG_RTC_DRV_M41T80=y | ||
1105 | # CONFIG_RTC_DRV_M41T80_WDT is not set | ||
1106 | # CONFIG_RTC_DRV_S35390A is not set | ||
1107 | |||
1108 | # | ||
1109 | # SPI RTC drivers | ||
1110 | # | ||
1111 | |||
1112 | # | ||
1113 | # Platform RTC drivers | ||
1114 | # | ||
1115 | # CONFIG_RTC_DRV_CMOS is not set | ||
1116 | # CONFIG_RTC_DRV_DS1511 is not set | ||
1117 | # CONFIG_RTC_DRV_DS1553 is not set | ||
1118 | # CONFIG_RTC_DRV_DS1742 is not set | ||
1119 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
1120 | # CONFIG_RTC_DRV_M48T86 is not set | ||
1121 | # CONFIG_RTC_DRV_M48T59 is not set | ||
1122 | # CONFIG_RTC_DRV_V3020 is not set | ||
1123 | |||
1124 | # | ||
1125 | # on-CPU RTC drivers | ||
1126 | # | ||
1127 | # CONFIG_UIO is not set | ||
1128 | |||
1129 | # | ||
1130 | # File systems | ||
1131 | # | ||
1132 | CONFIG_EXT2_FS=y | ||
1133 | # CONFIG_EXT2_FS_XATTR is not set | ||
1134 | # CONFIG_EXT2_FS_XIP is not set | ||
1135 | CONFIG_EXT3_FS=y | ||
1136 | # CONFIG_EXT3_FS_XATTR is not set | ||
1137 | # CONFIG_EXT4DEV_FS is not set | ||
1138 | CONFIG_JBD=y | ||
1139 | # CONFIG_REISERFS_FS is not set | ||
1140 | # CONFIG_JFS_FS is not set | ||
1141 | # CONFIG_FS_POSIX_ACL is not set | ||
1142 | # CONFIG_XFS_FS is not set | ||
1143 | # CONFIG_OCFS2_FS is not set | ||
1144 | CONFIG_DNOTIFY=y | ||
1145 | CONFIG_INOTIFY=y | ||
1146 | CONFIG_INOTIFY_USER=y | ||
1147 | # CONFIG_QUOTA is not set | ||
1148 | # CONFIG_AUTOFS_FS is not set | ||
1149 | # CONFIG_AUTOFS4_FS is not set | ||
1150 | # CONFIG_FUSE_FS is not set | ||
1151 | |||
1152 | # | ||
1153 | # CD-ROM/DVD Filesystems | ||
1154 | # | ||
1155 | CONFIG_ISO9660_FS=m | ||
1156 | CONFIG_JOLIET=y | ||
1157 | # CONFIG_ZISOFS is not set | ||
1158 | CONFIG_UDF_FS=m | ||
1159 | CONFIG_UDF_NLS=y | ||
1160 | |||
1161 | # | ||
1162 | # DOS/FAT/NT Filesystems | ||
1163 | # | ||
1164 | CONFIG_FAT_FS=y | ||
1165 | CONFIG_MSDOS_FS=y | ||
1166 | CONFIG_VFAT_FS=y | ||
1167 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
1168 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
1169 | # CONFIG_NTFS_FS is not set | ||
1170 | |||
1171 | # | ||
1172 | # Pseudo filesystems | ||
1173 | # | ||
1174 | CONFIG_PROC_FS=y | ||
1175 | CONFIG_PROC_SYSCTL=y | ||
1176 | CONFIG_SYSFS=y | ||
1177 | CONFIG_TMPFS=y | ||
1178 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
1179 | # CONFIG_HUGETLB_PAGE is not set | ||
1180 | # CONFIG_CONFIGFS_FS is not set | ||
1181 | |||
1182 | # | ||
1183 | # Miscellaneous filesystems | ||
1184 | # | ||
1185 | # CONFIG_ADFS_FS is not set | ||
1186 | # CONFIG_AFFS_FS is not set | ||
1187 | # CONFIG_HFS_FS is not set | ||
1188 | # CONFIG_HFSPLUS_FS is not set | ||
1189 | # CONFIG_BEFS_FS is not set | ||
1190 | # CONFIG_BFS_FS is not set | ||
1191 | # CONFIG_EFS_FS is not set | ||
1192 | CONFIG_JFFS2_FS=y | ||
1193 | CONFIG_JFFS2_FS_DEBUG=0 | ||
1194 | CONFIG_JFFS2_FS_WRITEBUFFER=y | ||
1195 | # CONFIG_JFFS2_FS_WBUF_VERIFY is not set | ||
1196 | # CONFIG_JFFS2_SUMMARY is not set | ||
1197 | # CONFIG_JFFS2_FS_XATTR is not set | ||
1198 | # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set | ||
1199 | CONFIG_JFFS2_ZLIB=y | ||
1200 | # CONFIG_JFFS2_LZO is not set | ||
1201 | CONFIG_JFFS2_RTIME=y | ||
1202 | # CONFIG_JFFS2_RUBIN is not set | ||
1203 | CONFIG_CRAMFS=y | ||
1204 | # CONFIG_VXFS_FS is not set | ||
1205 | # CONFIG_MINIX_FS is not set | ||
1206 | # CONFIG_HPFS_FS is not set | ||
1207 | # CONFIG_QNX4FS_FS is not set | ||
1208 | # CONFIG_ROMFS_FS is not set | ||
1209 | # CONFIG_SYSV_FS is not set | ||
1210 | # CONFIG_UFS_FS is not set | ||
1211 | CONFIG_NETWORK_FILESYSTEMS=y | ||
1212 | CONFIG_NFS_FS=y | ||
1213 | CONFIG_NFS_V3=y | ||
1214 | # CONFIG_NFS_V3_ACL is not set | ||
1215 | # CONFIG_NFS_V4 is not set | ||
1216 | # CONFIG_NFSD is not set | ||
1217 | CONFIG_ROOT_NFS=y | ||
1218 | CONFIG_LOCKD=y | ||
1219 | CONFIG_LOCKD_V4=y | ||
1220 | CONFIG_NFS_COMMON=y | ||
1221 | CONFIG_SUNRPC=y | ||
1222 | # CONFIG_SUNRPC_BIND34 is not set | ||
1223 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
1224 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
1225 | # CONFIG_SMB_FS is not set | ||
1226 | # CONFIG_CIFS is not set | ||
1227 | # CONFIG_NCP_FS is not set | ||
1228 | # CONFIG_CODA_FS is not set | ||
1229 | # CONFIG_AFS_FS is not set | ||
1230 | |||
1231 | # | ||
1232 | # Partition Types | ||
1233 | # | ||
1234 | CONFIG_PARTITION_ADVANCED=y | ||
1235 | # CONFIG_ACORN_PARTITION is not set | ||
1236 | # CONFIG_OSF_PARTITION is not set | ||
1237 | # CONFIG_AMIGA_PARTITION is not set | ||
1238 | # CONFIG_ATARI_PARTITION is not set | ||
1239 | # CONFIG_MAC_PARTITION is not set | ||
1240 | CONFIG_MSDOS_PARTITION=y | ||
1241 | CONFIG_BSD_DISKLABEL=y | ||
1242 | # CONFIG_MINIX_SUBPARTITION is not set | ||
1243 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
1244 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
1245 | # CONFIG_LDM_PARTITION is not set | ||
1246 | # CONFIG_SGI_PARTITION is not set | ||
1247 | # CONFIG_ULTRIX_PARTITION is not set | ||
1248 | # CONFIG_SUN_PARTITION is not set | ||
1249 | # CONFIG_KARMA_PARTITION is not set | ||
1250 | # CONFIG_EFI_PARTITION is not set | ||
1251 | # CONFIG_SYSV68_PARTITION is not set | ||
1252 | CONFIG_NLS=y | ||
1253 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
1254 | CONFIG_NLS_CODEPAGE_437=y | ||
1255 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
1256 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
1257 | CONFIG_NLS_CODEPAGE_850=y | ||
1258 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
1259 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
1260 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
1261 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
1262 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
1263 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
1264 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
1265 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
1266 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
1267 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
1268 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
1269 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
1270 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
1271 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
1272 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
1273 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
1274 | # CONFIG_NLS_ISO8859_8 is not set | ||
1275 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
1276 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
1277 | # CONFIG_NLS_ASCII is not set | ||
1278 | CONFIG_NLS_ISO8859_1=y | ||
1279 | CONFIG_NLS_ISO8859_2=y | ||
1280 | # CONFIG_NLS_ISO8859_3 is not set | ||
1281 | # CONFIG_NLS_ISO8859_4 is not set | ||
1282 | # CONFIG_NLS_ISO8859_5 is not set | ||
1283 | # CONFIG_NLS_ISO8859_6 is not set | ||
1284 | # CONFIG_NLS_ISO8859_7 is not set | ||
1285 | # CONFIG_NLS_ISO8859_9 is not set | ||
1286 | # CONFIG_NLS_ISO8859_13 is not set | ||
1287 | # CONFIG_NLS_ISO8859_14 is not set | ||
1288 | # CONFIG_NLS_ISO8859_15 is not set | ||
1289 | # CONFIG_NLS_KOI8_R is not set | ||
1290 | # CONFIG_NLS_KOI8_U is not set | ||
1291 | # CONFIG_NLS_UTF8 is not set | ||
1292 | # CONFIG_DLM is not set | ||
1293 | |||
1294 | # | ||
1295 | # Kernel hacking | ||
1296 | # | ||
1297 | # CONFIG_PRINTK_TIME is not set | ||
1298 | CONFIG_ENABLE_WARN_DEPRECATED=y | ||
1299 | CONFIG_ENABLE_MUST_CHECK=y | ||
1300 | CONFIG_FRAME_WARN=1024 | ||
1301 | CONFIG_MAGIC_SYSRQ=y | ||
1302 | # CONFIG_UNUSED_SYMBOLS is not set | ||
1303 | # CONFIG_DEBUG_FS is not set | ||
1304 | # CONFIG_HEADERS_CHECK is not set | ||
1305 | CONFIG_DEBUG_KERNEL=y | ||
1306 | # CONFIG_DEBUG_SHIRQ is not set | ||
1307 | CONFIG_DETECT_SOFTLOCKUP=y | ||
1308 | CONFIG_SCHED_DEBUG=y | ||
1309 | CONFIG_SCHEDSTATS=y | ||
1310 | # CONFIG_TIMER_STATS is not set | ||
1311 | # CONFIG_DEBUG_OBJECTS is not set | ||
1312 | CONFIG_DEBUG_PREEMPT=y | ||
1313 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
1314 | # CONFIG_RT_MUTEX_TESTER is not set | ||
1315 | # CONFIG_DEBUG_SPINLOCK is not set | ||
1316 | # CONFIG_DEBUG_MUTEXES is not set | ||
1317 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
1318 | # CONFIG_PROVE_LOCKING is not set | ||
1319 | # CONFIG_LOCK_STAT is not set | ||
1320 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
1321 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
1322 | # CONFIG_DEBUG_KOBJECT is not set | ||
1323 | # CONFIG_DEBUG_BUGVERBOSE is not set | ||
1324 | CONFIG_DEBUG_INFO=y | ||
1325 | # CONFIG_DEBUG_VM is not set | ||
1326 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
1327 | # CONFIG_DEBUG_LIST is not set | ||
1328 | # CONFIG_DEBUG_SG is not set | ||
1329 | CONFIG_FRAME_POINTER=y | ||
1330 | # CONFIG_BOOT_PRINTK_DELAY is not set | ||
1331 | # CONFIG_RCU_TORTURE_TEST is not set | ||
1332 | # CONFIG_KPROBES_SANITY_TEST is not set | ||
1333 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
1334 | # CONFIG_LKDTM is not set | ||
1335 | # CONFIG_FAULT_INJECTION is not set | ||
1336 | # CONFIG_LATENCYTOP is not set | ||
1337 | # CONFIG_SAMPLES is not set | ||
1338 | CONFIG_DEBUG_USER=y | ||
1339 | CONFIG_DEBUG_ERRORS=y | ||
1340 | # CONFIG_DEBUG_STACK_USAGE is not set | ||
1341 | CONFIG_DEBUG_LL=y | ||
1342 | # CONFIG_DEBUG_ICEDCC is not set | ||
1343 | |||
1344 | # | ||
1345 | # Security options | ||
1346 | # | ||
1347 | # CONFIG_KEYS is not set | ||
1348 | # CONFIG_SECURITY is not set | ||
1349 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | ||
1350 | CONFIG_CRYPTO=y | ||
1351 | |||
1352 | # | ||
1353 | # Crypto core or helper | ||
1354 | # | ||
1355 | CONFIG_CRYPTO_ALGAPI=m | ||
1356 | CONFIG_CRYPTO_BLKCIPHER=m | ||
1357 | CONFIG_CRYPTO_MANAGER=m | ||
1358 | # CONFIG_CRYPTO_GF128MUL is not set | ||
1359 | # CONFIG_CRYPTO_NULL is not set | ||
1360 | # CONFIG_CRYPTO_CRYPTD is not set | ||
1361 | # CONFIG_CRYPTO_AUTHENC is not set | ||
1362 | # CONFIG_CRYPTO_TEST is not set | ||
1363 | |||
1364 | # | ||
1365 | # Authenticated Encryption with Associated Data | ||
1366 | # | ||
1367 | # CONFIG_CRYPTO_CCM is not set | ||
1368 | # CONFIG_CRYPTO_GCM is not set | ||
1369 | # CONFIG_CRYPTO_SEQIV is not set | ||
1370 | |||
1371 | # | ||
1372 | # Block modes | ||
1373 | # | ||
1374 | CONFIG_CRYPTO_CBC=m | ||
1375 | # CONFIG_CRYPTO_CTR is not set | ||
1376 | # CONFIG_CRYPTO_CTS is not set | ||
1377 | CONFIG_CRYPTO_ECB=m | ||
1378 | # CONFIG_CRYPTO_LRW is not set | ||
1379 | CONFIG_CRYPTO_PCBC=m | ||
1380 | # CONFIG_CRYPTO_XTS is not set | ||
1381 | |||
1382 | # | ||
1383 | # Hash modes | ||
1384 | # | ||
1385 | # CONFIG_CRYPTO_HMAC is not set | ||
1386 | # CONFIG_CRYPTO_XCBC is not set | ||
1387 | |||
1388 | # | ||
1389 | # Digest | ||
1390 | # | ||
1391 | # CONFIG_CRYPTO_CRC32C is not set | ||
1392 | # CONFIG_CRYPTO_MD4 is not set | ||
1393 | # CONFIG_CRYPTO_MD5 is not set | ||
1394 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
1395 | # CONFIG_CRYPTO_SHA1 is not set | ||
1396 | # CONFIG_CRYPTO_SHA256 is not set | ||
1397 | # CONFIG_CRYPTO_SHA512 is not set | ||
1398 | # CONFIG_CRYPTO_TGR192 is not set | ||
1399 | # CONFIG_CRYPTO_WP512 is not set | ||
1400 | |||
1401 | # | ||
1402 | # Ciphers | ||
1403 | # | ||
1404 | # CONFIG_CRYPTO_AES is not set | ||
1405 | # CONFIG_CRYPTO_ANUBIS is not set | ||
1406 | # CONFIG_CRYPTO_ARC4 is not set | ||
1407 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
1408 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
1409 | # CONFIG_CRYPTO_CAST5 is not set | ||
1410 | # CONFIG_CRYPTO_CAST6 is not set | ||
1411 | # CONFIG_CRYPTO_DES is not set | ||
1412 | # CONFIG_CRYPTO_FCRYPT is not set | ||
1413 | # CONFIG_CRYPTO_KHAZAD is not set | ||
1414 | # CONFIG_CRYPTO_SALSA20 is not set | ||
1415 | # CONFIG_CRYPTO_SEED is not set | ||
1416 | # CONFIG_CRYPTO_SERPENT is not set | ||
1417 | # CONFIG_CRYPTO_TEA is not set | ||
1418 | # CONFIG_CRYPTO_TWOFISH is not set | ||
1419 | |||
1420 | # | ||
1421 | # Compression | ||
1422 | # | ||
1423 | # CONFIG_CRYPTO_DEFLATE is not set | ||
1424 | # CONFIG_CRYPTO_LZO is not set | ||
1425 | CONFIG_CRYPTO_HW=y | ||
1426 | # CONFIG_CRYPTO_DEV_HIFN_795X is not set | ||
1427 | |||
1428 | # | ||
1429 | # Library routines | ||
1430 | # | ||
1431 | CONFIG_BITREVERSE=y | ||
1432 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
1433 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
1434 | # CONFIG_CRC_CCITT is not set | ||
1435 | # CONFIG_CRC16 is not set | ||
1436 | CONFIG_CRC_ITU_T=m | ||
1437 | CONFIG_CRC32=y | ||
1438 | # CONFIG_CRC7 is not set | ||
1439 | # CONFIG_LIBCRC32C is not set | ||
1440 | CONFIG_ZLIB_INFLATE=y | ||
1441 | CONFIG_ZLIB_DEFLATE=y | ||
1442 | CONFIG_PLIST=y | ||
1443 | CONFIG_HAS_IOMEM=y | ||
1444 | CONFIG_HAS_IOPORT=y | ||
1445 | CONFIG_HAS_DMA=y | ||
diff --git a/arch/arm/configs/netx_defconfig b/arch/arm/configs/netx_defconfig index 57f32f39d0ff..0884f2370c3a 100644 --- a/arch/arm/configs/netx_defconfig +++ b/arch/arm/configs/netx_defconfig | |||
@@ -154,7 +154,6 @@ CONFIG_ARM_AMBA=y | |||
154 | # Kernel Features | 154 | # Kernel Features |
155 | # | 155 | # |
156 | CONFIG_PREEMPT=y | 156 | CONFIG_PREEMPT=y |
157 | # CONFIG_NO_IDLE_HZ is not set | ||
158 | CONFIG_HZ=100 | 157 | CONFIG_HZ=100 |
159 | # CONFIG_AEABI is not set | 158 | # CONFIG_AEABI is not set |
160 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 159 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/configs/onearm_defconfig b/arch/arm/configs/onearm_defconfig index 650a248613e5..418ca2febbe3 100644 --- a/arch/arm/configs/onearm_defconfig +++ b/arch/arm/configs/onearm_defconfig | |||
@@ -202,7 +202,6 @@ CONFIG_AT91_CF=y | |||
202 | # Kernel Features | 202 | # Kernel Features |
203 | # | 203 | # |
204 | # CONFIG_PREEMPT is not set | 204 | # CONFIG_PREEMPT is not set |
205 | # CONFIG_NO_IDLE_HZ is not set | ||
206 | CONFIG_HZ=100 | 205 | CONFIG_HZ=100 |
207 | # CONFIG_AEABI is not set | 206 | # CONFIG_AEABI is not set |
208 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 207 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/configs/orion5x_defconfig b/arch/arm/configs/orion5x_defconfig index 52cd99bd52fb..9578b5d9f9c7 100644 --- a/arch/arm/configs/orion5x_defconfig +++ b/arch/arm/configs/orion5x_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.24 | 3 | # Linux kernel version: 2.6.26-rc4 |
4 | # Thu Feb 7 14:10:30 2008 | 4 | # Mon Jun 2 23:54:48 2008 |
5 | # | 5 | # |
6 | CONFIG_ARM=y | 6 | CONFIG_ARM=y |
7 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y | 7 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y |
@@ -21,6 +21,7 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y | |||
21 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | 21 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set |
22 | CONFIG_GENERIC_HWEIGHT=y | 22 | CONFIG_GENERIC_HWEIGHT=y |
23 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 23 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
24 | CONFIG_ARCH_SUPPORTS_AOUT=y | ||
24 | CONFIG_ZONE_DMA=y | 25 | CONFIG_ZONE_DMA=y |
25 | CONFIG_VECTORS_BASE=0xffff0000 | 26 | CONFIG_VECTORS_BASE=0xffff0000 |
26 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 27 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
@@ -40,24 +41,24 @@ CONFIG_SYSVIPC_SYSCTL=y | |||
40 | # CONFIG_POSIX_MQUEUE is not set | 41 | # CONFIG_POSIX_MQUEUE is not set |
41 | # CONFIG_BSD_PROCESS_ACCT is not set | 42 | # CONFIG_BSD_PROCESS_ACCT is not set |
42 | # CONFIG_TASKSTATS is not set | 43 | # CONFIG_TASKSTATS is not set |
43 | # CONFIG_USER_NS is not set | ||
44 | # CONFIG_PID_NS is not set | ||
45 | # CONFIG_AUDIT is not set | 44 | # CONFIG_AUDIT is not set |
46 | # CONFIG_IKCONFIG is not set | 45 | # CONFIG_IKCONFIG is not set |
47 | CONFIG_LOG_BUF_SHIFT=14 | 46 | CONFIG_LOG_BUF_SHIFT=14 |
48 | # CONFIG_CGROUPS is not set | 47 | # CONFIG_CGROUPS is not set |
49 | CONFIG_FAIR_GROUP_SCHED=y | 48 | # CONFIG_GROUP_SCHED is not set |
50 | CONFIG_FAIR_USER_SCHED=y | ||
51 | # CONFIG_FAIR_CGROUP_SCHED is not set | ||
52 | CONFIG_SYSFS_DEPRECATED=y | 49 | CONFIG_SYSFS_DEPRECATED=y |
50 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
53 | # CONFIG_RELAY is not set | 51 | # CONFIG_RELAY is not set |
52 | # CONFIG_NAMESPACES is not set | ||
54 | # CONFIG_BLK_DEV_INITRD is not set | 53 | # CONFIG_BLK_DEV_INITRD is not set |
55 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 54 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
56 | CONFIG_SYSCTL=y | 55 | CONFIG_SYSCTL=y |
57 | CONFIG_EMBEDDED=y | 56 | CONFIG_EMBEDDED=y |
58 | CONFIG_UID16=y | 57 | CONFIG_UID16=y |
59 | CONFIG_SYSCTL_SYSCALL=y | 58 | CONFIG_SYSCTL_SYSCALL=y |
59 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
60 | CONFIG_KALLSYMS=y | 60 | CONFIG_KALLSYMS=y |
61 | CONFIG_KALLSYMS_ALL=y | ||
61 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 62 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
62 | CONFIG_HOTPLUG=y | 63 | CONFIG_HOTPLUG=y |
63 | CONFIG_PRINTK=y | 64 | CONFIG_PRINTK=y |
@@ -73,20 +74,25 @@ CONFIG_TIMERFD=y | |||
73 | CONFIG_EVENTFD=y | 74 | CONFIG_EVENTFD=y |
74 | CONFIG_SHMEM=y | 75 | CONFIG_SHMEM=y |
75 | CONFIG_VM_EVENT_COUNTERS=y | 76 | CONFIG_VM_EVENT_COUNTERS=y |
76 | CONFIG_SLAB=y | 77 | # CONFIG_SLUB_DEBUG is not set |
77 | # CONFIG_SLUB is not set | 78 | # CONFIG_SLAB is not set |
79 | CONFIG_SLUB=y | ||
78 | # CONFIG_SLOB is not set | 80 | # CONFIG_SLOB is not set |
79 | # CONFIG_PROFILING is not set | 81 | CONFIG_PROFILING=y |
80 | # CONFIG_MARKERS is not set | 82 | # CONFIG_MARKERS is not set |
83 | CONFIG_OPROFILE=y | ||
81 | CONFIG_HAVE_OPROFILE=y | 84 | CONFIG_HAVE_OPROFILE=y |
82 | # CONFIG_KPROBES is not set | 85 | CONFIG_KPROBES=y |
86 | CONFIG_KRETPROBES=y | ||
83 | CONFIG_HAVE_KPROBES=y | 87 | CONFIG_HAVE_KPROBES=y |
88 | CONFIG_HAVE_KRETPROBES=y | ||
89 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
84 | CONFIG_PROC_PAGE_MONITOR=y | 90 | CONFIG_PROC_PAGE_MONITOR=y |
85 | CONFIG_SLABINFO=y | ||
86 | CONFIG_RT_MUTEXES=y | 91 | CONFIG_RT_MUTEXES=y |
87 | # CONFIG_TINY_SHMEM is not set | 92 | # CONFIG_TINY_SHMEM is not set |
88 | CONFIG_BASE_SMALL=0 | 93 | CONFIG_BASE_SMALL=0 |
89 | CONFIG_MODULES=y | 94 | CONFIG_MODULES=y |
95 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
90 | CONFIG_MODULE_UNLOAD=y | 96 | CONFIG_MODULE_UNLOAD=y |
91 | # CONFIG_MODULE_FORCE_UNLOAD is not set | 97 | # CONFIG_MODULE_FORCE_UNLOAD is not set |
92 | # CONFIG_MODVERSIONS is not set | 98 | # CONFIG_MODVERSIONS is not set |
@@ -111,7 +117,6 @@ CONFIG_DEFAULT_CFQ=y | |||
111 | # CONFIG_DEFAULT_NOOP is not set | 117 | # CONFIG_DEFAULT_NOOP is not set |
112 | CONFIG_DEFAULT_IOSCHED="cfq" | 118 | CONFIG_DEFAULT_IOSCHED="cfq" |
113 | CONFIG_CLASSIC_RCU=y | 119 | CONFIG_CLASSIC_RCU=y |
114 | # CONFIG_PREEMPT_RCU is not set | ||
115 | 120 | ||
116 | # | 121 | # |
117 | # System Type | 122 | # System Type |
@@ -160,6 +165,15 @@ CONFIG_MACH_RD88F5182=y | |||
160 | CONFIG_MACH_KUROBOX_PRO=y | 165 | CONFIG_MACH_KUROBOX_PRO=y |
161 | CONFIG_MACH_DNS323=y | 166 | CONFIG_MACH_DNS323=y |
162 | CONFIG_MACH_TS209=y | 167 | CONFIG_MACH_TS209=y |
168 | CONFIG_MACH_LINKSTATION_PRO=y | ||
169 | CONFIG_MACH_TS409=y | ||
170 | CONFIG_MACH_WRT350N_V2=y | ||
171 | CONFIG_MACH_TS78XX=y | ||
172 | CONFIG_MACH_MV2120=y | ||
173 | CONFIG_MACH_MSS2=y | ||
174 | CONFIG_MACH_WNR854T=y | ||
175 | CONFIG_MACH_RD88F5181L_GE=y | ||
176 | CONFIG_MACH_RD88F5181L_FXO=y | ||
163 | 177 | ||
164 | # | 178 | # |
165 | # Boot options | 179 | # Boot options |
@@ -168,6 +182,7 @@ CONFIG_MACH_TS209=y | |||
168 | # | 182 | # |
169 | # Power management | 183 | # Power management |
170 | # | 184 | # |
185 | CONFIG_PLAT_ORION=y | ||
171 | 186 | ||
172 | # | 187 | # |
173 | # Processor Type | 188 | # Processor Type |
@@ -177,8 +192,9 @@ CONFIG_CPU_FEROCEON=y | |||
177 | CONFIG_CPU_FEROCEON_OLD_ID=y | 192 | CONFIG_CPU_FEROCEON_OLD_ID=y |
178 | CONFIG_CPU_32v5=y | 193 | CONFIG_CPU_32v5=y |
179 | CONFIG_CPU_ABRT_EV5T=y | 194 | CONFIG_CPU_ABRT_EV5T=y |
195 | CONFIG_CPU_PABRT_NOIFAR=y | ||
180 | CONFIG_CPU_CACHE_VIVT=y | 196 | CONFIG_CPU_CACHE_VIVT=y |
181 | CONFIG_CPU_COPY_V4WB=y | 197 | CONFIG_CPU_COPY_FEROCEON=y |
182 | CONFIG_CPU_TLB_V4WBI=y | 198 | CONFIG_CPU_TLB_V4WBI=y |
183 | CONFIG_CPU_CP15=y | 199 | CONFIG_CPU_CP15=y |
184 | CONFIG_CPU_CP15_MMU=y | 200 | CONFIG_CPU_CP15_MMU=y |
@@ -189,7 +205,6 @@ CONFIG_CPU_CP15_MMU=y | |||
189 | CONFIG_ARM_THUMB=y | 205 | CONFIG_ARM_THUMB=y |
190 | # CONFIG_CPU_ICACHE_DISABLE is not set | 206 | # CONFIG_CPU_ICACHE_DISABLE is not set |
191 | # CONFIG_CPU_DCACHE_DISABLE is not set | 207 | # CONFIG_CPU_DCACHE_DISABLE is not set |
192 | # CONFIG_CPU_DCACHE_WRITETHROUGH is not set | ||
193 | # CONFIG_OUTER_CACHE is not set | 208 | # CONFIG_OUTER_CACHE is not set |
194 | 209 | ||
195 | # | 210 | # |
@@ -199,6 +214,7 @@ CONFIG_PCI=y | |||
199 | CONFIG_PCI_SYSCALL=y | 214 | CONFIG_PCI_SYSCALL=y |
200 | # CONFIG_ARCH_SUPPORTS_MSI is not set | 215 | # CONFIG_ARCH_SUPPORTS_MSI is not set |
201 | CONFIG_PCI_LEGACY=y | 216 | CONFIG_PCI_LEGACY=y |
217 | # CONFIG_PCI_DEBUG is not set | ||
202 | # CONFIG_PCCARD is not set | 218 | # CONFIG_PCCARD is not set |
203 | 219 | ||
204 | # | 220 | # |
@@ -221,6 +237,7 @@ CONFIG_FLATMEM=y | |||
221 | CONFIG_FLAT_NODE_MEM_MAP=y | 237 | CONFIG_FLAT_NODE_MEM_MAP=y |
222 | # CONFIG_SPARSEMEM_STATIC is not set | 238 | # CONFIG_SPARSEMEM_STATIC is not set |
223 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | 239 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set |
240 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
224 | CONFIG_SPLIT_PTLOCK_CPUS=4096 | 241 | CONFIG_SPLIT_PTLOCK_CPUS=4096 |
225 | # CONFIG_RESOURCES_64BIT is not set | 242 | # CONFIG_RESOURCES_64BIT is not set |
226 | CONFIG_ZONE_DMA_FLAG=1 | 243 | CONFIG_ZONE_DMA_FLAG=1 |
@@ -238,7 +255,6 @@ CONFIG_ZBOOT_ROM_BSS=0x0 | |||
238 | CONFIG_CMDLINE="" | 255 | CONFIG_CMDLINE="" |
239 | # CONFIG_XIP_KERNEL is not set | 256 | # CONFIG_XIP_KERNEL is not set |
240 | # CONFIG_KEXEC is not set | 257 | # CONFIG_KEXEC is not set |
241 | # CONFIG_ATAGS_PROC is not set | ||
242 | 258 | ||
243 | # | 259 | # |
244 | # Floating point emulation | 260 | # Floating point emulation |
@@ -311,8 +327,6 @@ CONFIG_TCP_CONG_CUBIC=y | |||
311 | CONFIG_DEFAULT_TCP_CONG="cubic" | 327 | CONFIG_DEFAULT_TCP_CONG="cubic" |
312 | # CONFIG_TCP_MD5SIG is not set | 328 | # CONFIG_TCP_MD5SIG is not set |
313 | # CONFIG_IPV6 is not set | 329 | # CONFIG_IPV6 is not set |
314 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
315 | # CONFIG_INET6_TUNNEL is not set | ||
316 | # CONFIG_NETWORK_SECMARK is not set | 330 | # CONFIG_NETWORK_SECMARK is not set |
317 | # CONFIG_NETFILTER is not set | 331 | # CONFIG_NETFILTER is not set |
318 | # CONFIG_IP_DCCP is not set | 332 | # CONFIG_IP_DCCP is not set |
@@ -335,6 +349,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
335 | # Network testing | 349 | # Network testing |
336 | # | 350 | # |
337 | CONFIG_NET_PKTGEN=m | 351 | CONFIG_NET_PKTGEN=m |
352 | # CONFIG_NET_TCPPROBE is not set | ||
338 | # CONFIG_HAMRADIO is not set | 353 | # CONFIG_HAMRADIO is not set |
339 | # CONFIG_CAN is not set | 354 | # CONFIG_CAN is not set |
340 | # CONFIG_IRDA is not set | 355 | # CONFIG_IRDA is not set |
@@ -362,6 +377,8 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | |||
362 | CONFIG_STANDALONE=y | 377 | CONFIG_STANDALONE=y |
363 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 378 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
364 | CONFIG_FW_LOADER=y | 379 | CONFIG_FW_LOADER=y |
380 | # CONFIG_DEBUG_DRIVER is not set | ||
381 | # CONFIG_DEBUG_DEVRES is not set | ||
365 | # CONFIG_SYS_HYPERVISOR is not set | 382 | # CONFIG_SYS_HYPERVISOR is not set |
366 | # CONFIG_CONNECTOR is not set | 383 | # CONFIG_CONNECTOR is not set |
367 | CONFIG_MTD=y | 384 | CONFIG_MTD=y |
@@ -371,6 +388,7 @@ CONFIG_MTD_PARTITIONS=y | |||
371 | # CONFIG_MTD_REDBOOT_PARTS is not set | 388 | # CONFIG_MTD_REDBOOT_PARTS is not set |
372 | CONFIG_MTD_CMDLINE_PARTS=y | 389 | CONFIG_MTD_CMDLINE_PARTS=y |
373 | # CONFIG_MTD_AFS_PARTS is not set | 390 | # CONFIG_MTD_AFS_PARTS is not set |
391 | # CONFIG_MTD_AR7_PARTS is not set | ||
374 | 392 | ||
375 | # | 393 | # |
376 | # User Modules And Translation Layers | 394 | # User Modules And Translation Layers |
@@ -378,9 +396,8 @@ CONFIG_MTD_CMDLINE_PARTS=y | |||
378 | CONFIG_MTD_CHAR=y | 396 | CONFIG_MTD_CHAR=y |
379 | CONFIG_MTD_BLKDEVS=y | 397 | CONFIG_MTD_BLKDEVS=y |
380 | CONFIG_MTD_BLOCK=y | 398 | CONFIG_MTD_BLOCK=y |
381 | CONFIG_FTL=y | 399 | # CONFIG_FTL is not set |
382 | CONFIG_NFTL=y | 400 | # CONFIG_NFTL is not set |
383 | # CONFIG_NFTL_RW is not set | ||
384 | # CONFIG_INFTL is not set | 401 | # CONFIG_INFTL is not set |
385 | # CONFIG_RFD_FTL is not set | 402 | # CONFIG_RFD_FTL is not set |
386 | # CONFIG_SSFDC is not set | 403 | # CONFIG_SSFDC is not set |
@@ -405,12 +422,12 @@ CONFIG_MTD_MAP_BANK_WIDTH_4=y | |||
405 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | 422 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set |
406 | CONFIG_MTD_CFI_I1=y | 423 | CONFIG_MTD_CFI_I1=y |
407 | CONFIG_MTD_CFI_I2=y | 424 | CONFIG_MTD_CFI_I2=y |
408 | CONFIG_MTD_CFI_I4=y | 425 | # CONFIG_MTD_CFI_I4 is not set |
409 | # CONFIG_MTD_CFI_I8 is not set | 426 | # CONFIG_MTD_CFI_I8 is not set |
410 | # CONFIG_MTD_OTP is not set | 427 | # CONFIG_MTD_OTP is not set |
411 | CONFIG_MTD_CFI_INTELEXT=y | 428 | CONFIG_MTD_CFI_INTELEXT=y |
412 | CONFIG_MTD_CFI_AMDSTD=y | 429 | CONFIG_MTD_CFI_AMDSTD=y |
413 | CONFIG_MTD_CFI_STAA=y | 430 | # CONFIG_MTD_CFI_STAA is not set |
414 | CONFIG_MTD_CFI_UTIL=y | 431 | CONFIG_MTD_CFI_UTIL=y |
415 | # CONFIG_MTD_RAM is not set | 432 | # CONFIG_MTD_RAM is not set |
416 | # CONFIG_MTD_ROM is not set | 433 | # CONFIG_MTD_ROM is not set |
@@ -481,6 +498,9 @@ CONFIG_MISC_DEVICES=y | |||
481 | # CONFIG_EEPROM_93CX6 is not set | 498 | # CONFIG_EEPROM_93CX6 is not set |
482 | # CONFIG_SGI_IOC4 is not set | 499 | # CONFIG_SGI_IOC4 is not set |
483 | # CONFIG_TIFM_CORE is not set | 500 | # CONFIG_TIFM_CORE is not set |
501 | # CONFIG_ENCLOSURE_SERVICES is not set | ||
502 | CONFIG_HAVE_IDE=y | ||
503 | # CONFIG_IDE is not set | ||
484 | 504 | ||
485 | # | 505 | # |
486 | # SCSI device support | 506 | # SCSI device support |
@@ -542,6 +562,7 @@ CONFIG_SCSI_LOWLEVEL=y | |||
542 | # CONFIG_SCSI_IPS is not set | 562 | # CONFIG_SCSI_IPS is not set |
543 | # CONFIG_SCSI_INITIO is not set | 563 | # CONFIG_SCSI_INITIO is not set |
544 | # CONFIG_SCSI_INIA100 is not set | 564 | # CONFIG_SCSI_INIA100 is not set |
565 | # CONFIG_SCSI_MVSAS is not set | ||
545 | # CONFIG_SCSI_STEX is not set | 566 | # CONFIG_SCSI_STEX is not set |
546 | # CONFIG_SCSI_SYM53C8XX_2 is not set | 567 | # CONFIG_SCSI_SYM53C8XX_2 is not set |
547 | # CONFIG_SCSI_IPR is not set | 568 | # CONFIG_SCSI_IPR is not set |
@@ -556,7 +577,10 @@ CONFIG_SCSI_LOWLEVEL=y | |||
556 | # CONFIG_SCSI_SRP is not set | 577 | # CONFIG_SCSI_SRP is not set |
557 | CONFIG_ATA=y | 578 | CONFIG_ATA=y |
558 | # CONFIG_ATA_NONSTANDARD is not set | 579 | # CONFIG_ATA_NONSTANDARD is not set |
580 | CONFIG_SATA_PMP=y | ||
559 | # CONFIG_SATA_AHCI is not set | 581 | # CONFIG_SATA_AHCI is not set |
582 | # CONFIG_SATA_SIL24 is not set | ||
583 | CONFIG_ATA_SFF=y | ||
560 | # CONFIG_SATA_SVW is not set | 584 | # CONFIG_SATA_SVW is not set |
561 | # CONFIG_ATA_PIIX is not set | 585 | # CONFIG_ATA_PIIX is not set |
562 | CONFIG_SATA_MV=y | 586 | CONFIG_SATA_MV=y |
@@ -566,7 +590,6 @@ CONFIG_SATA_MV=y | |||
566 | # CONFIG_SATA_PROMISE is not set | 590 | # CONFIG_SATA_PROMISE is not set |
567 | # CONFIG_SATA_SX4 is not set | 591 | # CONFIG_SATA_SX4 is not set |
568 | # CONFIG_SATA_SIL is not set | 592 | # CONFIG_SATA_SIL is not set |
569 | # CONFIG_SATA_SIL24 is not set | ||
570 | # CONFIG_SATA_SIS is not set | 593 | # CONFIG_SATA_SIS is not set |
571 | # CONFIG_SATA_ULI is not set | 594 | # CONFIG_SATA_ULI is not set |
572 | # CONFIG_SATA_VIA is not set | 595 | # CONFIG_SATA_VIA is not set |
@@ -611,6 +634,7 @@ CONFIG_SATA_MV=y | |||
611 | # CONFIG_PATA_VIA is not set | 634 | # CONFIG_PATA_VIA is not set |
612 | # CONFIG_PATA_WINBOND is not set | 635 | # CONFIG_PATA_WINBOND is not set |
613 | # CONFIG_PATA_PLATFORM is not set | 636 | # CONFIG_PATA_PLATFORM is not set |
637 | # CONFIG_PATA_SCH is not set | ||
614 | # CONFIG_MD is not set | 638 | # CONFIG_MD is not set |
615 | # CONFIG_FUSION is not set | 639 | # CONFIG_FUSION is not set |
616 | 640 | ||
@@ -652,7 +676,7 @@ CONFIG_NET_PCI=y | |||
652 | # CONFIG_B44 is not set | 676 | # CONFIG_B44 is not set |
653 | # CONFIG_FORCEDETH is not set | 677 | # CONFIG_FORCEDETH is not set |
654 | # CONFIG_EEPRO100 is not set | 678 | # CONFIG_EEPRO100 is not set |
655 | CONFIG_E100=y | 679 | # CONFIG_E100 is not set |
656 | # CONFIG_FEALNX is not set | 680 | # CONFIG_FEALNX is not set |
657 | # CONFIG_NATSEMI is not set | 681 | # CONFIG_NATSEMI is not set |
658 | # CONFIG_NE2K_PCI is not set | 682 | # CONFIG_NE2K_PCI is not set |
@@ -668,9 +692,7 @@ CONFIG_E100=y | |||
668 | CONFIG_NETDEV_1000=y | 692 | CONFIG_NETDEV_1000=y |
669 | # CONFIG_ACENIC is not set | 693 | # CONFIG_ACENIC is not set |
670 | # CONFIG_DL2K is not set | 694 | # CONFIG_DL2K is not set |
671 | CONFIG_E1000=y | 695 | # CONFIG_E1000 is not set |
672 | CONFIG_E1000_NAPI=y | ||
673 | # CONFIG_E1000_DISABLE_PACKET_SPLIT is not set | ||
674 | # CONFIG_E1000E is not set | 696 | # CONFIG_E1000E is not set |
675 | # CONFIG_E1000E_ENABLED is not set | 697 | # CONFIG_E1000E_ENABLED is not set |
676 | # CONFIG_IP1000 is not set | 698 | # CONFIG_IP1000 is not set |
@@ -680,27 +702,15 @@ CONFIG_E1000_NAPI=y | |||
680 | # CONFIG_YELLOWFIN is not set | 702 | # CONFIG_YELLOWFIN is not set |
681 | # CONFIG_R8169 is not set | 703 | # CONFIG_R8169 is not set |
682 | # CONFIG_SIS190 is not set | 704 | # CONFIG_SIS190 is not set |
683 | CONFIG_SKGE=y | 705 | # CONFIG_SKGE is not set |
684 | CONFIG_SKY2=y | 706 | # CONFIG_SKY2 is not set |
685 | # CONFIG_SK98LIN is not set | ||
686 | # CONFIG_VIA_VELOCITY is not set | 707 | # CONFIG_VIA_VELOCITY is not set |
687 | CONFIG_TIGON3=y | 708 | # CONFIG_TIGON3 is not set |
688 | # CONFIG_BNX2 is not set | 709 | # CONFIG_BNX2 is not set |
689 | CONFIG_MV643XX_ETH=y | 710 | CONFIG_MV643XX_ETH=y |
690 | # CONFIG_QLA3XXX is not set | 711 | # CONFIG_QLA3XXX is not set |
691 | # CONFIG_ATL1 is not set | 712 | # CONFIG_ATL1 is not set |
692 | CONFIG_NETDEV_10000=y | 713 | # CONFIG_NETDEV_10000 is not set |
693 | # CONFIG_CHELSIO_T1 is not set | ||
694 | # CONFIG_CHELSIO_T3 is not set | ||
695 | # CONFIG_IXGBE is not set | ||
696 | # CONFIG_IXGB is not set | ||
697 | # CONFIG_S2IO is not set | ||
698 | # CONFIG_MYRI10GE is not set | ||
699 | # CONFIG_NETXEN_NIC is not set | ||
700 | # CONFIG_NIU is not set | ||
701 | # CONFIG_MLX4_CORE is not set | ||
702 | # CONFIG_TEHUTI is not set | ||
703 | # CONFIG_BNX2X is not set | ||
704 | # CONFIG_TR is not set | 714 | # CONFIG_TR is not set |
705 | 715 | ||
706 | # | 716 | # |
@@ -708,6 +718,7 @@ CONFIG_NETDEV_10000=y | |||
708 | # | 718 | # |
709 | # CONFIG_WLAN_PRE80211 is not set | 719 | # CONFIG_WLAN_PRE80211 is not set |
710 | # CONFIG_WLAN_80211 is not set | 720 | # CONFIG_WLAN_80211 is not set |
721 | # CONFIG_IWLWIFI_LEDS is not set | ||
711 | 722 | ||
712 | # | 723 | # |
713 | # USB Network Adapters | 724 | # USB Network Adapters |
@@ -738,12 +749,9 @@ CONFIG_INPUT=y | |||
738 | # | 749 | # |
739 | # Userland interfaces | 750 | # Userland interfaces |
740 | # | 751 | # |
741 | CONFIG_INPUT_MOUSEDEV=y | 752 | # CONFIG_INPUT_MOUSEDEV is not set |
742 | CONFIG_INPUT_MOUSEDEV_PSAUX=y | ||
743 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
744 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
745 | # CONFIG_INPUT_JOYDEV is not set | 753 | # CONFIG_INPUT_JOYDEV is not set |
746 | # CONFIG_INPUT_EVDEV is not set | 754 | CONFIG_INPUT_EVDEV=y |
747 | # CONFIG_INPUT_EVBUG is not set | 755 | # CONFIG_INPUT_EVBUG is not set |
748 | 756 | ||
749 | # | 757 | # |
@@ -765,10 +773,8 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | |||
765 | # | 773 | # |
766 | # Character devices | 774 | # Character devices |
767 | # | 775 | # |
768 | CONFIG_VT=y | 776 | # CONFIG_VT is not set |
769 | CONFIG_VT_CONSOLE=y | 777 | CONFIG_DEVKMEM=y |
770 | CONFIG_HW_CONSOLE=y | ||
771 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
772 | # CONFIG_SERIAL_NONSTANDARD is not set | 778 | # CONFIG_SERIAL_NONSTANDARD is not set |
773 | # CONFIG_NOZOMI is not set | 779 | # CONFIG_NOZOMI is not set |
774 | 780 | ||
@@ -777,7 +783,7 @@ CONFIG_HW_CONSOLE=y | |||
777 | # | 783 | # |
778 | CONFIG_SERIAL_8250=y | 784 | CONFIG_SERIAL_8250=y |
779 | CONFIG_SERIAL_8250_CONSOLE=y | 785 | CONFIG_SERIAL_8250_CONSOLE=y |
780 | CONFIG_SERIAL_8250_PCI=y | 786 | # CONFIG_SERIAL_8250_PCI is not set |
781 | CONFIG_SERIAL_8250_NR_UARTS=4 | 787 | CONFIG_SERIAL_8250_NR_UARTS=4 |
782 | CONFIG_SERIAL_8250_RUNTIME_UARTS=2 | 788 | CONFIG_SERIAL_8250_RUNTIME_UARTS=2 |
783 | # CONFIG_SERIAL_8250_EXTENDED is not set | 789 | # CONFIG_SERIAL_8250_EXTENDED is not set |
@@ -792,7 +798,7 @@ CONFIG_UNIX98_PTYS=y | |||
792 | CONFIG_LEGACY_PTYS=y | 798 | CONFIG_LEGACY_PTYS=y |
793 | CONFIG_LEGACY_PTY_COUNT=16 | 799 | CONFIG_LEGACY_PTY_COUNT=16 |
794 | # CONFIG_IPMI_HANDLER is not set | 800 | # CONFIG_IPMI_HANDLER is not set |
795 | CONFIG_HW_RANDOM=m | 801 | # CONFIG_HW_RANDOM is not set |
796 | # CONFIG_NVRAM is not set | 802 | # CONFIG_NVRAM is not set |
797 | # CONFIG_R3964 is not set | 803 | # CONFIG_R3964 is not set |
798 | # CONFIG_APPLICOM is not set | 804 | # CONFIG_APPLICOM is not set |
@@ -804,13 +810,6 @@ CONFIG_I2C_BOARDINFO=y | |||
804 | CONFIG_I2C_CHARDEV=y | 810 | CONFIG_I2C_CHARDEV=y |
805 | 811 | ||
806 | # | 812 | # |
807 | # I2C Algorithms | ||
808 | # | ||
809 | # CONFIG_I2C_ALGOBIT is not set | ||
810 | # CONFIG_I2C_ALGOPCF is not set | ||
811 | # CONFIG_I2C_ALGOPCA is not set | ||
812 | |||
813 | # | ||
814 | # I2C Hardware Bus support | 813 | # I2C Hardware Bus support |
815 | # | 814 | # |
816 | # CONFIG_I2C_ALI1535 is not set | 815 | # CONFIG_I2C_ALI1535 is not set |
@@ -837,6 +836,7 @@ CONFIG_I2C_CHARDEV=y | |||
837 | # CONFIG_I2C_VIA is not set | 836 | # CONFIG_I2C_VIA is not set |
838 | # CONFIG_I2C_VIAPRO is not set | 837 | # CONFIG_I2C_VIAPRO is not set |
839 | # CONFIG_I2C_VOODOO3 is not set | 838 | # CONFIG_I2C_VOODOO3 is not set |
839 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
840 | CONFIG_I2C_MV64XXX=y | 840 | CONFIG_I2C_MV64XXX=y |
841 | 841 | ||
842 | # | 842 | # |
@@ -847,19 +847,13 @@ CONFIG_I2C_MV64XXX=y | |||
847 | # CONFIG_SENSORS_PCF8574 is not set | 847 | # CONFIG_SENSORS_PCF8574 is not set |
848 | # CONFIG_PCF8575 is not set | 848 | # CONFIG_PCF8575 is not set |
849 | # CONFIG_SENSORS_PCF8591 is not set | 849 | # CONFIG_SENSORS_PCF8591 is not set |
850 | # CONFIG_TPS65010 is not set | ||
851 | # CONFIG_SENSORS_MAX6875 is not set | 850 | # CONFIG_SENSORS_MAX6875 is not set |
852 | # CONFIG_SENSORS_TSL2550 is not set | 851 | # CONFIG_SENSORS_TSL2550 is not set |
853 | # CONFIG_I2C_DEBUG_CORE is not set | 852 | # CONFIG_I2C_DEBUG_CORE is not set |
854 | # CONFIG_I2C_DEBUG_ALGO is not set | 853 | # CONFIG_I2C_DEBUG_ALGO is not set |
855 | # CONFIG_I2C_DEBUG_BUS is not set | 854 | # CONFIG_I2C_DEBUG_BUS is not set |
856 | # CONFIG_I2C_DEBUG_CHIP is not set | 855 | # CONFIG_I2C_DEBUG_CHIP is not set |
857 | |||
858 | # | ||
859 | # SPI support | ||
860 | # | ||
861 | # CONFIG_SPI is not set | 856 | # CONFIG_SPI is not set |
862 | # CONFIG_SPI_MASTER is not set | ||
863 | # CONFIG_W1 is not set | 857 | # CONFIG_W1 is not set |
864 | # CONFIG_POWER_SUPPLY is not set | 858 | # CONFIG_POWER_SUPPLY is not set |
865 | CONFIG_HWMON=y | 859 | CONFIG_HWMON=y |
@@ -872,6 +866,7 @@ CONFIG_HWMON=y | |||
872 | # CONFIG_SENSORS_ADM1031 is not set | 866 | # CONFIG_SENSORS_ADM1031 is not set |
873 | # CONFIG_SENSORS_ADM9240 is not set | 867 | # CONFIG_SENSORS_ADM9240 is not set |
874 | # CONFIG_SENSORS_ADT7470 is not set | 868 | # CONFIG_SENSORS_ADT7470 is not set |
869 | # CONFIG_SENSORS_ADT7473 is not set | ||
875 | # CONFIG_SENSORS_ATXP1 is not set | 870 | # CONFIG_SENSORS_ATXP1 is not set |
876 | # CONFIG_SENSORS_DS1621 is not set | 871 | # CONFIG_SENSORS_DS1621 is not set |
877 | # CONFIG_SENSORS_I5K_AMB is not set | 872 | # CONFIG_SENSORS_I5K_AMB is not set |
@@ -901,6 +896,7 @@ CONFIG_HWMON=y | |||
901 | # CONFIG_SENSORS_SMSC47M1 is not set | 896 | # CONFIG_SENSORS_SMSC47M1 is not set |
902 | # CONFIG_SENSORS_SMSC47M192 is not set | 897 | # CONFIG_SENSORS_SMSC47M192 is not set |
903 | # CONFIG_SENSORS_SMSC47B397 is not set | 898 | # CONFIG_SENSORS_SMSC47B397 is not set |
899 | # CONFIG_SENSORS_ADS7828 is not set | ||
904 | # CONFIG_SENSORS_THMC50 is not set | 900 | # CONFIG_SENSORS_THMC50 is not set |
905 | # CONFIG_SENSORS_VIA686A is not set | 901 | # CONFIG_SENSORS_VIA686A is not set |
906 | # CONFIG_SENSORS_VT1211 is not set | 902 | # CONFIG_SENSORS_VT1211 is not set |
@@ -910,6 +906,7 @@ CONFIG_HWMON=y | |||
910 | # CONFIG_SENSORS_W83792D is not set | 906 | # CONFIG_SENSORS_W83792D is not set |
911 | # CONFIG_SENSORS_W83793 is not set | 907 | # CONFIG_SENSORS_W83793 is not set |
912 | # CONFIG_SENSORS_W83L785TS is not set | 908 | # CONFIG_SENSORS_W83L785TS is not set |
909 | # CONFIG_SENSORS_W83L786NG is not set | ||
913 | # CONFIG_SENSORS_W83627HF is not set | 910 | # CONFIG_SENSORS_W83627HF is not set |
914 | # CONFIG_SENSORS_W83627EHF is not set | 911 | # CONFIG_SENSORS_W83627EHF is not set |
915 | # CONFIG_HWMON_DEBUG_CHIP is not set | 912 | # CONFIG_HWMON_DEBUG_CHIP is not set |
@@ -925,14 +922,24 @@ CONFIG_SSB_POSSIBLE=y | |||
925 | # Multifunction device drivers | 922 | # Multifunction device drivers |
926 | # | 923 | # |
927 | # CONFIG_MFD_SM501 is not set | 924 | # CONFIG_MFD_SM501 is not set |
925 | # CONFIG_MFD_ASIC3 is not set | ||
926 | # CONFIG_HTC_PASIC3 is not set | ||
928 | 927 | ||
929 | # | 928 | # |
930 | # Multimedia devices | 929 | # Multimedia devices |
931 | # | 930 | # |
931 | |||
932 | # | ||
933 | # Multimedia core support | ||
934 | # | ||
932 | # CONFIG_VIDEO_DEV is not set | 935 | # CONFIG_VIDEO_DEV is not set |
933 | # CONFIG_DVB_CORE is not set | 936 | # CONFIG_DVB_CORE is not set |
934 | CONFIG_DAB=y | 937 | # CONFIG_VIDEO_MEDIA is not set |
935 | # CONFIG_USB_DABUSB is not set | 938 | |
939 | # | ||
940 | # Multimedia drivers | ||
941 | # | ||
942 | # CONFIG_DAB is not set | ||
936 | 943 | ||
937 | # | 944 | # |
938 | # Graphics support | 945 | # Graphics support |
@@ -949,12 +956,6 @@ CONFIG_DAB=y | |||
949 | # CONFIG_DISPLAY_SUPPORT is not set | 956 | # CONFIG_DISPLAY_SUPPORT is not set |
950 | 957 | ||
951 | # | 958 | # |
952 | # Console display driver support | ||
953 | # | ||
954 | # CONFIG_VGA_CONSOLE is not set | ||
955 | CONFIG_DUMMY_CONSOLE=y | ||
956 | |||
957 | # | ||
958 | # Sound | 959 | # Sound |
959 | # | 960 | # |
960 | # CONFIG_SOUND is not set | 961 | # CONFIG_SOUND is not set |
@@ -985,14 +986,18 @@ CONFIG_USB_DEVICEFS=y | |||
985 | CONFIG_USB_DEVICE_CLASS=y | 986 | CONFIG_USB_DEVICE_CLASS=y |
986 | # CONFIG_USB_DYNAMIC_MINORS is not set | 987 | # CONFIG_USB_DYNAMIC_MINORS is not set |
987 | # CONFIG_USB_OTG is not set | 988 | # CONFIG_USB_OTG is not set |
989 | # CONFIG_USB_OTG_WHITELIST is not set | ||
990 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | ||
988 | 991 | ||
989 | # | 992 | # |
990 | # USB Host Controller Drivers | 993 | # USB Host Controller Drivers |
991 | # | 994 | # |
995 | # CONFIG_USB_C67X00_HCD is not set | ||
992 | CONFIG_USB_EHCI_HCD=y | 996 | CONFIG_USB_EHCI_HCD=y |
993 | CONFIG_USB_EHCI_ROOT_HUB_TT=y | 997 | CONFIG_USB_EHCI_ROOT_HUB_TT=y |
994 | CONFIG_USB_EHCI_TT_NEWSCHED=y | 998 | CONFIG_USB_EHCI_TT_NEWSCHED=y |
995 | # CONFIG_USB_ISP116X_HCD is not set | 999 | # CONFIG_USB_ISP116X_HCD is not set |
1000 | # CONFIG_USB_ISP1760_HCD is not set | ||
996 | # CONFIG_USB_OHCI_HCD is not set | 1001 | # CONFIG_USB_OHCI_HCD is not set |
997 | # CONFIG_USB_UHCI_HCD is not set | 1002 | # CONFIG_USB_UHCI_HCD is not set |
998 | # CONFIG_USB_SL811_HCD is not set | 1003 | # CONFIG_USB_SL811_HCD is not set |
@@ -1003,6 +1008,7 @@ CONFIG_USB_EHCI_TT_NEWSCHED=y | |||
1003 | # | 1008 | # |
1004 | # CONFIG_USB_ACM is not set | 1009 | # CONFIG_USB_ACM is not set |
1005 | CONFIG_USB_PRINTER=y | 1010 | CONFIG_USB_PRINTER=y |
1011 | # CONFIG_USB_WDM is not set | ||
1006 | 1012 | ||
1007 | # | 1013 | # |
1008 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | 1014 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' |
@@ -1022,7 +1028,9 @@ CONFIG_USB_STORAGE_SDDR09=y | |||
1022 | CONFIG_USB_STORAGE_SDDR55=y | 1028 | CONFIG_USB_STORAGE_SDDR55=y |
1023 | CONFIG_USB_STORAGE_JUMPSHOT=y | 1029 | CONFIG_USB_STORAGE_JUMPSHOT=y |
1024 | # CONFIG_USB_STORAGE_ALAUDA is not set | 1030 | # CONFIG_USB_STORAGE_ALAUDA is not set |
1031 | # CONFIG_USB_STORAGE_ONETOUCH is not set | ||
1025 | # CONFIG_USB_STORAGE_KARMA is not set | 1032 | # CONFIG_USB_STORAGE_KARMA is not set |
1033 | # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set | ||
1026 | # CONFIG_USB_LIBUSUAL is not set | 1034 | # CONFIG_USB_LIBUSUAL is not set |
1027 | 1035 | ||
1028 | # | 1036 | # |
@@ -1060,6 +1068,7 @@ CONFIG_USB_STORAGE_JUMPSHOT=y | |||
1060 | # CONFIG_USB_TRANCEVIBRATOR is not set | 1068 | # CONFIG_USB_TRANCEVIBRATOR is not set |
1061 | # CONFIG_USB_IOWARRIOR is not set | 1069 | # CONFIG_USB_IOWARRIOR is not set |
1062 | # CONFIG_USB_TEST is not set | 1070 | # CONFIG_USB_TEST is not set |
1071 | # CONFIG_USB_ISIGHTFW is not set | ||
1063 | # CONFIG_USB_GADGET is not set | 1072 | # CONFIG_USB_GADGET is not set |
1064 | # CONFIG_MMC is not set | 1073 | # CONFIG_MMC is not set |
1065 | CONFIG_NEW_LEDS=y | 1074 | CONFIG_NEW_LEDS=y |
@@ -1068,7 +1077,7 @@ CONFIG_LEDS_CLASS=y | |||
1068 | # | 1077 | # |
1069 | # LED drivers | 1078 | # LED drivers |
1070 | # | 1079 | # |
1071 | # CONFIG_LEDS_GPIO is not set | 1080 | CONFIG_LEDS_GPIO=y |
1072 | 1081 | ||
1073 | # | 1082 | # |
1074 | # LED Triggers | 1083 | # LED Triggers |
@@ -1076,6 +1085,7 @@ CONFIG_LEDS_CLASS=y | |||
1076 | CONFIG_LEDS_TRIGGERS=y | 1085 | CONFIG_LEDS_TRIGGERS=y |
1077 | CONFIG_LEDS_TRIGGER_TIMER=y | 1086 | CONFIG_LEDS_TRIGGER_TIMER=y |
1078 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | 1087 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y |
1088 | CONFIG_LEDS_TRIGGER_DEFAULT_ON=y | ||
1079 | CONFIG_RTC_LIB=y | 1089 | CONFIG_RTC_LIB=y |
1080 | CONFIG_RTC_CLASS=y | 1090 | CONFIG_RTC_CLASS=y |
1081 | CONFIG_RTC_HCTOSYS=y | 1091 | CONFIG_RTC_HCTOSYS=y |
@@ -1105,6 +1115,7 @@ CONFIG_RTC_DRV_RS5C372=y | |||
1105 | # CONFIG_RTC_DRV_PCF8583 is not set | 1115 | # CONFIG_RTC_DRV_PCF8583 is not set |
1106 | CONFIG_RTC_DRV_M41T80=y | 1116 | CONFIG_RTC_DRV_M41T80=y |
1107 | # CONFIG_RTC_DRV_M41T80_WDT is not set | 1117 | # CONFIG_RTC_DRV_M41T80_WDT is not set |
1118 | # CONFIG_RTC_DRV_S35390A is not set | ||
1108 | 1119 | ||
1109 | # | 1120 | # |
1110 | # SPI RTC drivers | 1121 | # SPI RTC drivers |
@@ -1125,6 +1136,7 @@ CONFIG_RTC_DRV_M41T80=y | |||
1125 | # | 1136 | # |
1126 | # on-CPU RTC drivers | 1137 | # on-CPU RTC drivers |
1127 | # | 1138 | # |
1139 | # CONFIG_UIO is not set | ||
1128 | 1140 | ||
1129 | # | 1141 | # |
1130 | # File systems | 1142 | # File systems |
@@ -1140,14 +1152,11 @@ CONFIG_JBD=y | |||
1140 | # CONFIG_JFS_FS is not set | 1152 | # CONFIG_JFS_FS is not set |
1141 | # CONFIG_FS_POSIX_ACL is not set | 1153 | # CONFIG_FS_POSIX_ACL is not set |
1142 | # CONFIG_XFS_FS is not set | 1154 | # CONFIG_XFS_FS is not set |
1143 | # CONFIG_GFS2_FS is not set | ||
1144 | # CONFIG_OCFS2_FS is not set | 1155 | # CONFIG_OCFS2_FS is not set |
1145 | # CONFIG_MINIX_FS is not set | 1156 | CONFIG_DNOTIFY=y |
1146 | # CONFIG_ROMFS_FS is not set | ||
1147 | CONFIG_INOTIFY=y | 1157 | CONFIG_INOTIFY=y |
1148 | CONFIG_INOTIFY_USER=y | 1158 | CONFIG_INOTIFY_USER=y |
1149 | # CONFIG_QUOTA is not set | 1159 | # CONFIG_QUOTA is not set |
1150 | CONFIG_DNOTIFY=y | ||
1151 | # CONFIG_AUTOFS_FS is not set | 1160 | # CONFIG_AUTOFS_FS is not set |
1152 | # CONFIG_AUTOFS4_FS is not set | 1161 | # CONFIG_AUTOFS4_FS is not set |
1153 | # CONFIG_FUSE_FS is not set | 1162 | # CONFIG_FUSE_FS is not set |
@@ -1155,8 +1164,8 @@ CONFIG_DNOTIFY=y | |||
1155 | # | 1164 | # |
1156 | # CD-ROM/DVD Filesystems | 1165 | # CD-ROM/DVD Filesystems |
1157 | # | 1166 | # |
1158 | CONFIG_ISO9660_FS=y | 1167 | CONFIG_ISO9660_FS=m |
1159 | # CONFIG_JOLIET is not set | 1168 | CONFIG_JOLIET=y |
1160 | # CONFIG_ZISOFS is not set | 1169 | # CONFIG_ZISOFS is not set |
1161 | CONFIG_UDF_FS=m | 1170 | CONFIG_UDF_FS=m |
1162 | CONFIG_UDF_NLS=y | 1171 | CONFIG_UDF_NLS=y |
@@ -1205,8 +1214,10 @@ CONFIG_JFFS2_RTIME=y | |||
1205 | # CONFIG_JFFS2_RUBIN is not set | 1214 | # CONFIG_JFFS2_RUBIN is not set |
1206 | CONFIG_CRAMFS=y | 1215 | CONFIG_CRAMFS=y |
1207 | # CONFIG_VXFS_FS is not set | 1216 | # CONFIG_VXFS_FS is not set |
1217 | # CONFIG_MINIX_FS is not set | ||
1208 | # CONFIG_HPFS_FS is not set | 1218 | # CONFIG_HPFS_FS is not set |
1209 | # CONFIG_QNX4FS_FS is not set | 1219 | # CONFIG_QNX4FS_FS is not set |
1220 | # CONFIG_ROMFS_FS is not set | ||
1210 | # CONFIG_SYSV_FS is not set | 1221 | # CONFIG_SYSV_FS is not set |
1211 | # CONFIG_UFS_FS is not set | 1222 | # CONFIG_UFS_FS is not set |
1212 | CONFIG_NETWORK_FILESYSTEMS=y | 1223 | CONFIG_NETWORK_FILESYSTEMS=y |
@@ -1214,7 +1225,6 @@ CONFIG_NFS_FS=y | |||
1214 | CONFIG_NFS_V3=y | 1225 | CONFIG_NFS_V3=y |
1215 | # CONFIG_NFS_V3_ACL is not set | 1226 | # CONFIG_NFS_V3_ACL is not set |
1216 | # CONFIG_NFS_V4 is not set | 1227 | # CONFIG_NFS_V4 is not set |
1217 | # CONFIG_NFS_DIRECTIO is not set | ||
1218 | # CONFIG_NFSD is not set | 1228 | # CONFIG_NFSD is not set |
1219 | CONFIG_ROOT_NFS=y | 1229 | CONFIG_ROOT_NFS=y |
1220 | CONFIG_LOCKD=y | 1230 | CONFIG_LOCKD=y |
@@ -1241,14 +1251,13 @@ CONFIG_PARTITION_ADVANCED=y | |||
1241 | # CONFIG_MAC_PARTITION is not set | 1251 | # CONFIG_MAC_PARTITION is not set |
1242 | CONFIG_MSDOS_PARTITION=y | 1252 | CONFIG_MSDOS_PARTITION=y |
1243 | CONFIG_BSD_DISKLABEL=y | 1253 | CONFIG_BSD_DISKLABEL=y |
1244 | CONFIG_MINIX_SUBPARTITION=y | 1254 | # CONFIG_MINIX_SUBPARTITION is not set |
1245 | CONFIG_SOLARIS_X86_PARTITION=y | 1255 | # CONFIG_SOLARIS_X86_PARTITION is not set |
1246 | CONFIG_UNIXWARE_DISKLABEL=y | 1256 | # CONFIG_UNIXWARE_DISKLABEL is not set |
1247 | CONFIG_LDM_PARTITION=y | 1257 | # CONFIG_LDM_PARTITION is not set |
1248 | CONFIG_LDM_DEBUG=y | ||
1249 | # CONFIG_SGI_PARTITION is not set | 1258 | # CONFIG_SGI_PARTITION is not set |
1250 | # CONFIG_ULTRIX_PARTITION is not set | 1259 | # CONFIG_ULTRIX_PARTITION is not set |
1251 | CONFIG_SUN_PARTITION=y | 1260 | # CONFIG_SUN_PARTITION is not set |
1252 | # CONFIG_KARMA_PARTITION is not set | 1261 | # CONFIG_KARMA_PARTITION is not set |
1253 | # CONFIG_EFI_PARTITION is not set | 1262 | # CONFIG_EFI_PARTITION is not set |
1254 | # CONFIG_SYSV68_PARTITION is not set | 1263 | # CONFIG_SYSV68_PARTITION is not set |
@@ -1300,15 +1309,48 @@ CONFIG_NLS_ISO8859_2=y | |||
1300 | # CONFIG_PRINTK_TIME is not set | 1309 | # CONFIG_PRINTK_TIME is not set |
1301 | CONFIG_ENABLE_WARN_DEPRECATED=y | 1310 | CONFIG_ENABLE_WARN_DEPRECATED=y |
1302 | CONFIG_ENABLE_MUST_CHECK=y | 1311 | CONFIG_ENABLE_MUST_CHECK=y |
1303 | # CONFIG_MAGIC_SYSRQ is not set | 1312 | CONFIG_FRAME_WARN=1024 |
1313 | CONFIG_MAGIC_SYSRQ=y | ||
1304 | # CONFIG_UNUSED_SYMBOLS is not set | 1314 | # CONFIG_UNUSED_SYMBOLS is not set |
1305 | # CONFIG_DEBUG_FS is not set | 1315 | # CONFIG_DEBUG_FS is not set |
1306 | # CONFIG_HEADERS_CHECK is not set | 1316 | # CONFIG_HEADERS_CHECK is not set |
1307 | # CONFIG_DEBUG_KERNEL is not set | 1317 | CONFIG_DEBUG_KERNEL=y |
1318 | # CONFIG_DEBUG_SHIRQ is not set | ||
1319 | CONFIG_DETECT_SOFTLOCKUP=y | ||
1320 | CONFIG_SCHED_DEBUG=y | ||
1321 | CONFIG_SCHEDSTATS=y | ||
1322 | # CONFIG_TIMER_STATS is not set | ||
1323 | # CONFIG_DEBUG_OBJECTS is not set | ||
1324 | CONFIG_DEBUG_PREEMPT=y | ||
1325 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
1326 | # CONFIG_RT_MUTEX_TESTER is not set | ||
1327 | # CONFIG_DEBUG_SPINLOCK is not set | ||
1328 | # CONFIG_DEBUG_MUTEXES is not set | ||
1329 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
1330 | # CONFIG_PROVE_LOCKING is not set | ||
1331 | # CONFIG_LOCK_STAT is not set | ||
1332 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
1333 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
1334 | # CONFIG_DEBUG_KOBJECT is not set | ||
1308 | # CONFIG_DEBUG_BUGVERBOSE is not set | 1335 | # CONFIG_DEBUG_BUGVERBOSE is not set |
1336 | CONFIG_DEBUG_INFO=y | ||
1337 | # CONFIG_DEBUG_VM is not set | ||
1338 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
1339 | # CONFIG_DEBUG_LIST is not set | ||
1340 | # CONFIG_DEBUG_SG is not set | ||
1309 | CONFIG_FRAME_POINTER=y | 1341 | CONFIG_FRAME_POINTER=y |
1342 | # CONFIG_BOOT_PRINTK_DELAY is not set | ||
1343 | # CONFIG_RCU_TORTURE_TEST is not set | ||
1344 | # CONFIG_KPROBES_SANITY_TEST is not set | ||
1345 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
1346 | # CONFIG_LKDTM is not set | ||
1347 | # CONFIG_FAULT_INJECTION is not set | ||
1310 | # CONFIG_SAMPLES is not set | 1348 | # CONFIG_SAMPLES is not set |
1311 | CONFIG_DEBUG_USER=y | 1349 | CONFIG_DEBUG_USER=y |
1350 | CONFIG_DEBUG_ERRORS=y | ||
1351 | # CONFIG_DEBUG_STACK_USAGE is not set | ||
1352 | CONFIG_DEBUG_LL=y | ||
1353 | # CONFIG_DEBUG_ICEDCC is not set | ||
1312 | 1354 | ||
1313 | # | 1355 | # |
1314 | # Security options | 1356 | # Security options |
@@ -1317,50 +1359,79 @@ CONFIG_DEBUG_USER=y | |||
1317 | # CONFIG_SECURITY is not set | 1359 | # CONFIG_SECURITY is not set |
1318 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | 1360 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set |
1319 | CONFIG_CRYPTO=y | 1361 | CONFIG_CRYPTO=y |
1362 | |||
1363 | # | ||
1364 | # Crypto core or helper | ||
1365 | # | ||
1320 | CONFIG_CRYPTO_ALGAPI=m | 1366 | CONFIG_CRYPTO_ALGAPI=m |
1321 | CONFIG_CRYPTO_BLKCIPHER=m | 1367 | CONFIG_CRYPTO_BLKCIPHER=m |
1322 | # CONFIG_CRYPTO_SEQIV is not set | ||
1323 | CONFIG_CRYPTO_MANAGER=m | 1368 | CONFIG_CRYPTO_MANAGER=m |
1369 | # CONFIG_CRYPTO_GF128MUL is not set | ||
1370 | # CONFIG_CRYPTO_NULL is not set | ||
1371 | # CONFIG_CRYPTO_CRYPTD is not set | ||
1372 | # CONFIG_CRYPTO_AUTHENC is not set | ||
1373 | # CONFIG_CRYPTO_TEST is not set | ||
1374 | |||
1375 | # | ||
1376 | # Authenticated Encryption with Associated Data | ||
1377 | # | ||
1378 | # CONFIG_CRYPTO_CCM is not set | ||
1379 | # CONFIG_CRYPTO_GCM is not set | ||
1380 | # CONFIG_CRYPTO_SEQIV is not set | ||
1381 | |||
1382 | # | ||
1383 | # Block modes | ||
1384 | # | ||
1385 | CONFIG_CRYPTO_CBC=m | ||
1386 | # CONFIG_CRYPTO_CTR is not set | ||
1387 | # CONFIG_CRYPTO_CTS is not set | ||
1388 | CONFIG_CRYPTO_ECB=m | ||
1389 | # CONFIG_CRYPTO_LRW is not set | ||
1390 | CONFIG_CRYPTO_PCBC=m | ||
1391 | # CONFIG_CRYPTO_XTS is not set | ||
1392 | |||
1393 | # | ||
1394 | # Hash modes | ||
1395 | # | ||
1324 | # CONFIG_CRYPTO_HMAC is not set | 1396 | # CONFIG_CRYPTO_HMAC is not set |
1325 | # CONFIG_CRYPTO_XCBC is not set | 1397 | # CONFIG_CRYPTO_XCBC is not set |
1326 | # CONFIG_CRYPTO_NULL is not set | 1398 | |
1399 | # | ||
1400 | # Digest | ||
1401 | # | ||
1402 | # CONFIG_CRYPTO_CRC32C is not set | ||
1327 | # CONFIG_CRYPTO_MD4 is not set | 1403 | # CONFIG_CRYPTO_MD4 is not set |
1328 | # CONFIG_CRYPTO_MD5 is not set | 1404 | # CONFIG_CRYPTO_MD5 is not set |
1405 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
1329 | # CONFIG_CRYPTO_SHA1 is not set | 1406 | # CONFIG_CRYPTO_SHA1 is not set |
1330 | # CONFIG_CRYPTO_SHA256 is not set | 1407 | # CONFIG_CRYPTO_SHA256 is not set |
1331 | # CONFIG_CRYPTO_SHA512 is not set | 1408 | # CONFIG_CRYPTO_SHA512 is not set |
1332 | # CONFIG_CRYPTO_WP512 is not set | ||
1333 | # CONFIG_CRYPTO_TGR192 is not set | 1409 | # CONFIG_CRYPTO_TGR192 is not set |
1334 | # CONFIG_CRYPTO_GF128MUL is not set | 1410 | # CONFIG_CRYPTO_WP512 is not set |
1335 | CONFIG_CRYPTO_ECB=m | 1411 | |
1336 | CONFIG_CRYPTO_CBC=m | 1412 | # |
1337 | CONFIG_CRYPTO_PCBC=m | 1413 | # Ciphers |
1338 | # CONFIG_CRYPTO_LRW is not set | 1414 | # |
1339 | # CONFIG_CRYPTO_XTS is not set | ||
1340 | # CONFIG_CRYPTO_CTR is not set | ||
1341 | # CONFIG_CRYPTO_GCM is not set | ||
1342 | # CONFIG_CRYPTO_CCM is not set | ||
1343 | # CONFIG_CRYPTO_CRYPTD is not set | ||
1344 | # CONFIG_CRYPTO_DES is not set | ||
1345 | # CONFIG_CRYPTO_FCRYPT is not set | ||
1346 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
1347 | # CONFIG_CRYPTO_TWOFISH is not set | ||
1348 | # CONFIG_CRYPTO_SERPENT is not set | ||
1349 | # CONFIG_CRYPTO_AES is not set | 1415 | # CONFIG_CRYPTO_AES is not set |
1416 | # CONFIG_CRYPTO_ANUBIS is not set | ||
1417 | # CONFIG_CRYPTO_ARC4 is not set | ||
1418 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
1419 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
1350 | # CONFIG_CRYPTO_CAST5 is not set | 1420 | # CONFIG_CRYPTO_CAST5 is not set |
1351 | # CONFIG_CRYPTO_CAST6 is not set | 1421 | # CONFIG_CRYPTO_CAST6 is not set |
1352 | # CONFIG_CRYPTO_TEA is not set | 1422 | # CONFIG_CRYPTO_DES is not set |
1353 | # CONFIG_CRYPTO_ARC4 is not set | 1423 | # CONFIG_CRYPTO_FCRYPT is not set |
1354 | # CONFIG_CRYPTO_KHAZAD is not set | 1424 | # CONFIG_CRYPTO_KHAZAD is not set |
1355 | # CONFIG_CRYPTO_ANUBIS is not set | ||
1356 | # CONFIG_CRYPTO_SEED is not set | ||
1357 | # CONFIG_CRYPTO_SALSA20 is not set | 1425 | # CONFIG_CRYPTO_SALSA20 is not set |
1426 | # CONFIG_CRYPTO_SEED is not set | ||
1427 | # CONFIG_CRYPTO_SERPENT is not set | ||
1428 | # CONFIG_CRYPTO_TEA is not set | ||
1429 | # CONFIG_CRYPTO_TWOFISH is not set | ||
1430 | |||
1431 | # | ||
1432 | # Compression | ||
1433 | # | ||
1358 | # CONFIG_CRYPTO_DEFLATE is not set | 1434 | # CONFIG_CRYPTO_DEFLATE is not set |
1359 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
1360 | # CONFIG_CRYPTO_CRC32C is not set | ||
1361 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
1362 | # CONFIG_CRYPTO_TEST is not set | ||
1363 | # CONFIG_CRYPTO_AUTHENC is not set | ||
1364 | # CONFIG_CRYPTO_LZO is not set | 1435 | # CONFIG_CRYPTO_LZO is not set |
1365 | CONFIG_CRYPTO_HW=y | 1436 | CONFIG_CRYPTO_HW=y |
1366 | # CONFIG_CRYPTO_DEV_HIFN_795X is not set | 1437 | # CONFIG_CRYPTO_DEV_HIFN_795X is not set |
@@ -1369,12 +1440,14 @@ CONFIG_CRYPTO_HW=y | |||
1369 | # Library routines | 1440 | # Library routines |
1370 | # | 1441 | # |
1371 | CONFIG_BITREVERSE=y | 1442 | CONFIG_BITREVERSE=y |
1372 | CONFIG_CRC_CCITT=y | 1443 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set |
1373 | CONFIG_CRC16=y | 1444 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set |
1374 | # CONFIG_CRC_ITU_T is not set | 1445 | # CONFIG_CRC_CCITT is not set |
1446 | # CONFIG_CRC16 is not set | ||
1447 | CONFIG_CRC_ITU_T=m | ||
1375 | CONFIG_CRC32=y | 1448 | CONFIG_CRC32=y |
1376 | # CONFIG_CRC7 is not set | 1449 | # CONFIG_CRC7 is not set |
1377 | CONFIG_LIBCRC32C=y | 1450 | # CONFIG_LIBCRC32C is not set |
1378 | CONFIG_ZLIB_INFLATE=y | 1451 | CONFIG_ZLIB_INFLATE=y |
1379 | CONFIG_ZLIB_DEFLATE=y | 1452 | CONFIG_ZLIB_DEFLATE=y |
1380 | CONFIG_PLIST=y | 1453 | CONFIG_PLIST=y |
diff --git a/arch/arm/configs/picotux200_defconfig b/arch/arm/configs/picotux200_defconfig index 95a22f512805..14826f0dabde 100644 --- a/arch/arm/configs/picotux200_defconfig +++ b/arch/arm/configs/picotux200_defconfig | |||
@@ -201,7 +201,6 @@ CONFIG_ARM_THUMB=y | |||
201 | # Kernel Features | 201 | # Kernel Features |
202 | # | 202 | # |
203 | # CONFIG_PREEMPT is not set | 203 | # CONFIG_PREEMPT is not set |
204 | CONFIG_NO_IDLE_HZ=y | ||
205 | CONFIG_HZ=100 | 204 | CONFIG_HZ=100 |
206 | CONFIG_AEABI=y | 205 | CONFIG_AEABI=y |
207 | CONFIG_OABI_COMPAT=y | 206 | CONFIG_OABI_COMPAT=y |
diff --git a/arch/arm/configs/pnx4008_defconfig b/arch/arm/configs/pnx4008_defconfig index b5e11aa2e290..811b8f60d19d 100644 --- a/arch/arm/configs/pnx4008_defconfig +++ b/arch/arm/configs/pnx4008_defconfig | |||
@@ -151,7 +151,6 @@ CONFIG_ARM_THUMB=y | |||
151 | # Kernel Features | 151 | # Kernel Features |
152 | # | 152 | # |
153 | CONFIG_PREEMPT=y | 153 | CONFIG_PREEMPT=y |
154 | # CONFIG_NO_IDLE_HZ is not set | ||
155 | CONFIG_HZ=100 | 154 | CONFIG_HZ=100 |
156 | # CONFIG_AEABI is not set | 155 | # CONFIG_AEABI is not set |
157 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 156 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/configs/qil-a9260_defconfig b/arch/arm/configs/qil-a9260_defconfig new file mode 100644 index 000000000000..ef903bed061e --- /dev/null +++ b/arch/arm/configs/qil-a9260_defconfig | |||
@@ -0,0 +1,1256 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.24 | ||
4 | # Tue Apr 15 12:28:38 2008 | ||
5 | # | ||
6 | CONFIG_ARM=y | ||
7 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y | ||
8 | CONFIG_GENERIC_GPIO=y | ||
9 | CONFIG_GENERIC_TIME=y | ||
10 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
11 | CONFIG_MMU=y | ||
12 | # CONFIG_NO_IOPORT is not set | ||
13 | CONFIG_GENERIC_HARDIRQS=y | ||
14 | CONFIG_STACKTRACE_SUPPORT=y | ||
15 | CONFIG_LOCKDEP_SUPPORT=y | ||
16 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
17 | CONFIG_HARDIRQS_SW_RESEND=y | ||
18 | CONFIG_GENERIC_IRQ_PROBE=y | ||
19 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
20 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | ||
21 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | ||
22 | CONFIG_GENERIC_HWEIGHT=y | ||
23 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
24 | CONFIG_ZONE_DMA=y | ||
25 | CONFIG_VECTORS_BASE=0xffff0000 | ||
26 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
27 | |||
28 | # | ||
29 | # General setup | ||
30 | # | ||
31 | CONFIG_EXPERIMENTAL=y | ||
32 | CONFIG_BROKEN_ON_SMP=y | ||
33 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
34 | CONFIG_LOCALVERSION="" | ||
35 | # CONFIG_LOCALVERSION_AUTO is not set | ||
36 | # CONFIG_SWAP is not set | ||
37 | CONFIG_SYSVIPC=y | ||
38 | CONFIG_SYSVIPC_SYSCTL=y | ||
39 | # CONFIG_POSIX_MQUEUE is not set | ||
40 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
41 | # CONFIG_TASKSTATS is not set | ||
42 | # CONFIG_USER_NS is not set | ||
43 | # CONFIG_PID_NS is not set | ||
44 | # CONFIG_AUDIT is not set | ||
45 | # CONFIG_IKCONFIG is not set | ||
46 | CONFIG_LOG_BUF_SHIFT=14 | ||
47 | # CONFIG_CGROUPS is not set | ||
48 | CONFIG_FAIR_GROUP_SCHED=y | ||
49 | CONFIG_FAIR_USER_SCHED=y | ||
50 | # CONFIG_FAIR_CGROUP_SCHED is not set | ||
51 | # CONFIG_SYSFS_DEPRECATED is not set | ||
52 | # CONFIG_RELAY is not set | ||
53 | # CONFIG_BLK_DEV_INITRD is not set | ||
54 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
55 | CONFIG_SYSCTL=y | ||
56 | # CONFIG_EMBEDDED is not set | ||
57 | CONFIG_UID16=y | ||
58 | CONFIG_SYSCTL_SYSCALL=y | ||
59 | CONFIG_KALLSYMS=y | ||
60 | # CONFIG_KALLSYMS_ALL is not set | ||
61 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
62 | CONFIG_HOTPLUG=y | ||
63 | CONFIG_PRINTK=y | ||
64 | CONFIG_BUG=y | ||
65 | CONFIG_ELF_CORE=y | ||
66 | CONFIG_BASE_FULL=y | ||
67 | CONFIG_FUTEX=y | ||
68 | CONFIG_ANON_INODES=y | ||
69 | CONFIG_EPOLL=y | ||
70 | CONFIG_SIGNALFD=y | ||
71 | CONFIG_EVENTFD=y | ||
72 | CONFIG_SHMEM=y | ||
73 | CONFIG_VM_EVENT_COUNTERS=y | ||
74 | CONFIG_SLAB=y | ||
75 | # CONFIG_SLUB is not set | ||
76 | # CONFIG_SLOB is not set | ||
77 | CONFIG_SLABINFO=y | ||
78 | CONFIG_RT_MUTEXES=y | ||
79 | # CONFIG_TINY_SHMEM is not set | ||
80 | CONFIG_BASE_SMALL=0 | ||
81 | CONFIG_MODULES=y | ||
82 | CONFIG_MODULE_UNLOAD=y | ||
83 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
84 | # CONFIG_MODVERSIONS is not set | ||
85 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
86 | CONFIG_KMOD=y | ||
87 | CONFIG_BLOCK=y | ||
88 | # CONFIG_LBD is not set | ||
89 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
90 | # CONFIG_LSF is not set | ||
91 | # CONFIG_BLK_DEV_BSG is not set | ||
92 | |||
93 | # | ||
94 | # IO Schedulers | ||
95 | # | ||
96 | CONFIG_IOSCHED_NOOP=y | ||
97 | CONFIG_IOSCHED_AS=y | ||
98 | # CONFIG_IOSCHED_DEADLINE is not set | ||
99 | # CONFIG_IOSCHED_CFQ is not set | ||
100 | CONFIG_DEFAULT_AS=y | ||
101 | # CONFIG_DEFAULT_DEADLINE is not set | ||
102 | # CONFIG_DEFAULT_CFQ is not set | ||
103 | # CONFIG_DEFAULT_NOOP is not set | ||
104 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
105 | |||
106 | # | ||
107 | # System Type | ||
108 | # | ||
109 | # CONFIG_ARCH_AAEC2000 is not set | ||
110 | # CONFIG_ARCH_INTEGRATOR is not set | ||
111 | # CONFIG_ARCH_REALVIEW is not set | ||
112 | # CONFIG_ARCH_VERSATILE is not set | ||
113 | CONFIG_ARCH_AT91=y | ||
114 | # CONFIG_ARCH_CLPS7500 is not set | ||
115 | # CONFIG_ARCH_CLPS711X is not set | ||
116 | # CONFIG_ARCH_CO285 is not set | ||
117 | # CONFIG_ARCH_EBSA110 is not set | ||
118 | # CONFIG_ARCH_EP93XX is not set | ||
119 | # CONFIG_ARCH_FOOTBRIDGE is not set | ||
120 | # CONFIG_ARCH_NETX is not set | ||
121 | # CONFIG_ARCH_H720X is not set | ||
122 | # CONFIG_ARCH_IMX is not set | ||
123 | # CONFIG_ARCH_IOP13XX is not set | ||
124 | # CONFIG_ARCH_IOP32X is not set | ||
125 | # CONFIG_ARCH_IOP33X is not set | ||
126 | # CONFIG_ARCH_IXP23XX is not set | ||
127 | # CONFIG_ARCH_IXP2000 is not set | ||
128 | # CONFIG_ARCH_IXP4XX is not set | ||
129 | # CONFIG_ARCH_L7200 is not set | ||
130 | # CONFIG_ARCH_KS8695 is not set | ||
131 | # CONFIG_ARCH_NS9XXX is not set | ||
132 | # CONFIG_ARCH_MXC is not set | ||
133 | # CONFIG_ARCH_PNX4008 is not set | ||
134 | # CONFIG_ARCH_PXA is not set | ||
135 | # CONFIG_ARCH_RPC is not set | ||
136 | # CONFIG_ARCH_SA1100 is not set | ||
137 | # CONFIG_ARCH_S3C2410 is not set | ||
138 | # CONFIG_ARCH_SHARK is not set | ||
139 | # CONFIG_ARCH_LH7A40X is not set | ||
140 | # CONFIG_ARCH_DAVINCI is not set | ||
141 | # CONFIG_ARCH_OMAP is not set | ||
142 | |||
143 | # | ||
144 | # Boot options | ||
145 | # | ||
146 | |||
147 | # | ||
148 | # Power management | ||
149 | # | ||
150 | |||
151 | # | ||
152 | # Atmel AT91 System-on-Chip | ||
153 | # | ||
154 | # CONFIG_ARCH_AT91RM9200 is not set | ||
155 | CONFIG_ARCH_AT91SAM9260=y | ||
156 | # CONFIG_ARCH_AT91SAM9261 is not set | ||
157 | # CONFIG_ARCH_AT91SAM9263 is not set | ||
158 | # CONFIG_ARCH_AT91SAM9RL is not set | ||
159 | # CONFIG_ARCH_AT91CAP9 is not set | ||
160 | # CONFIG_ARCH_AT91X40 is not set | ||
161 | CONFIG_AT91_PMC_UNIT=y | ||
162 | |||
163 | # | ||
164 | # AT91SAM9260 Variants | ||
165 | # | ||
166 | # CONFIG_ARCH_AT91SAM9260_SAM9XE is not set | ||
167 | |||
168 | # | ||
169 | # AT91SAM9260 / AT91SAM9XE Board Type | ||
170 | # | ||
171 | # CONFIG_MACH_AT91SAM9260EK is not set | ||
172 | # CONFIG_MACH_CAM60 is not set | ||
173 | # CONFIG_MACH_SAM9_L9260 is not set | ||
174 | # CONFIG_MACH_USB_A9260 is not set | ||
175 | CONFIG_MACH_QIL_A9260=y | ||
176 | |||
177 | # | ||
178 | # AT91 Board Options | ||
179 | # | ||
180 | |||
181 | # | ||
182 | # AT91 Feature Selections | ||
183 | # | ||
184 | # CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set | ||
185 | CONFIG_AT91_SLOW_CLOCK=y | ||
186 | CONFIG_AT91_TIMER_HZ=100 | ||
187 | # CONFIG_AT91_EARLY_DBGU is not set | ||
188 | CONFIG_AT91_EARLY_USART0=y | ||
189 | # CONFIG_AT91_EARLY_USART1 is not set | ||
190 | # CONFIG_AT91_EARLY_USART2 is not set | ||
191 | # CONFIG_AT91_EARLY_USART3 is not set | ||
192 | # CONFIG_AT91_EARLY_USART4 is not set | ||
193 | # CONFIG_AT91_EARLY_USART5 is not set | ||
194 | |||
195 | # | ||
196 | # Processor Type | ||
197 | # | ||
198 | CONFIG_CPU_32=y | ||
199 | CONFIG_CPU_ARM926T=y | ||
200 | CONFIG_CPU_32v5=y | ||
201 | CONFIG_CPU_ABRT_EV5TJ=y | ||
202 | CONFIG_CPU_CACHE_VIVT=y | ||
203 | CONFIG_CPU_COPY_V4WB=y | ||
204 | CONFIG_CPU_TLB_V4WBI=y | ||
205 | CONFIG_CPU_CP15=y | ||
206 | CONFIG_CPU_CP15_MMU=y | ||
207 | |||
208 | # | ||
209 | # Processor Features | ||
210 | # | ||
211 | # CONFIG_ARM_THUMB is not set | ||
212 | # CONFIG_CPU_ICACHE_DISABLE is not set | ||
213 | # CONFIG_CPU_DCACHE_DISABLE is not set | ||
214 | # CONFIG_CPU_DCACHE_WRITETHROUGH is not set | ||
215 | # CONFIG_CPU_CACHE_ROUND_ROBIN is not set | ||
216 | # CONFIG_OUTER_CACHE is not set | ||
217 | |||
218 | # | ||
219 | # Bus support | ||
220 | # | ||
221 | # CONFIG_PCI_SYSCALL is not set | ||
222 | # CONFIG_ARCH_SUPPORTS_MSI is not set | ||
223 | # CONFIG_PCCARD is not set | ||
224 | |||
225 | # | ||
226 | # Kernel Features | ||
227 | # | ||
228 | # CONFIG_TICK_ONESHOT is not set | ||
229 | # CONFIG_NO_HZ is not set | ||
230 | # CONFIG_HIGH_RES_TIMERS is not set | ||
231 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
232 | # CONFIG_PREEMPT is not set | ||
233 | CONFIG_HZ=100 | ||
234 | CONFIG_AEABI=y | ||
235 | CONFIG_OABI_COMPAT=y | ||
236 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | ||
237 | CONFIG_SELECT_MEMORY_MODEL=y | ||
238 | CONFIG_FLATMEM_MANUAL=y | ||
239 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
240 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
241 | CONFIG_FLATMEM=y | ||
242 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
243 | # CONFIG_SPARSEMEM_STATIC is not set | ||
244 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
245 | CONFIG_SPLIT_PTLOCK_CPUS=4096 | ||
246 | # CONFIG_RESOURCES_64BIT is not set | ||
247 | CONFIG_ZONE_DMA_FLAG=1 | ||
248 | CONFIG_BOUNCE=y | ||
249 | CONFIG_VIRT_TO_BUS=y | ||
250 | # CONFIG_LEDS is not set | ||
251 | CONFIG_ALIGNMENT_TRAP=y | ||
252 | |||
253 | # | ||
254 | # Boot options | ||
255 | # | ||
256 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
257 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
258 | CONFIG_CMDLINE="mem=64M console=ttyS1,115200" | ||
259 | # CONFIG_XIP_KERNEL is not set | ||
260 | # CONFIG_KEXEC is not set | ||
261 | |||
262 | # | ||
263 | # Floating point emulation | ||
264 | # | ||
265 | |||
266 | # | ||
267 | # At least one emulation must be selected | ||
268 | # | ||
269 | CONFIG_FPE_NWFPE=y | ||
270 | # CONFIG_FPE_NWFPE_XP is not set | ||
271 | # CONFIG_FPE_FASTFPE is not set | ||
272 | # CONFIG_VFP is not set | ||
273 | |||
274 | # | ||
275 | # Userspace binary formats | ||
276 | # | ||
277 | CONFIG_BINFMT_ELF=y | ||
278 | # CONFIG_BINFMT_AOUT is not set | ||
279 | # CONFIG_BINFMT_MISC is not set | ||
280 | |||
281 | # | ||
282 | # Power management options | ||
283 | # | ||
284 | CONFIG_PM=y | ||
285 | # CONFIG_PM_LEGACY is not set | ||
286 | # CONFIG_PM_DEBUG is not set | ||
287 | CONFIG_PM_SLEEP=y | ||
288 | CONFIG_SUSPEND_UP_POSSIBLE=y | ||
289 | CONFIG_SUSPEND=y | ||
290 | # CONFIG_APM_EMULATION is not set | ||
291 | |||
292 | # | ||
293 | # Networking | ||
294 | # | ||
295 | CONFIG_NET=y | ||
296 | |||
297 | # | ||
298 | # Networking options | ||
299 | # | ||
300 | CONFIG_PACKET=y | ||
301 | # CONFIG_PACKET_MMAP is not set | ||
302 | CONFIG_UNIX=y | ||
303 | # CONFIG_NET_KEY is not set | ||
304 | CONFIG_INET=y | ||
305 | CONFIG_IP_MULTICAST=y | ||
306 | CONFIG_IP_ADVANCED_ROUTER=y | ||
307 | CONFIG_ASK_IP_FIB_HASH=y | ||
308 | # CONFIG_IP_FIB_TRIE is not set | ||
309 | CONFIG_IP_FIB_HASH=y | ||
310 | # CONFIG_IP_MULTIPLE_TABLES is not set | ||
311 | # CONFIG_IP_ROUTE_MULTIPATH is not set | ||
312 | CONFIG_IP_ROUTE_VERBOSE=y | ||
313 | CONFIG_IP_PNP=y | ||
314 | # CONFIG_IP_PNP_DHCP is not set | ||
315 | CONFIG_IP_PNP_BOOTP=y | ||
316 | CONFIG_IP_PNP_RARP=y | ||
317 | # CONFIG_NET_IPIP is not set | ||
318 | # CONFIG_NET_IPGRE is not set | ||
319 | CONFIG_IP_MROUTE=y | ||
320 | CONFIG_IP_PIMSM_V1=y | ||
321 | CONFIG_IP_PIMSM_V2=y | ||
322 | # CONFIG_ARPD is not set | ||
323 | # CONFIG_SYN_COOKIES is not set | ||
324 | # CONFIG_INET_AH is not set | ||
325 | # CONFIG_INET_ESP is not set | ||
326 | # CONFIG_INET_IPCOMP is not set | ||
327 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
328 | # CONFIG_INET_TUNNEL is not set | ||
329 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||
330 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||
331 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
332 | # CONFIG_INET_LRO is not set | ||
333 | # CONFIG_INET_DIAG is not set | ||
334 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
335 | CONFIG_TCP_CONG_CUBIC=y | ||
336 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
337 | # CONFIG_TCP_MD5SIG is not set | ||
338 | # CONFIG_IPV6 is not set | ||
339 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
340 | # CONFIG_INET6_TUNNEL is not set | ||
341 | # CONFIG_NETWORK_SECMARK is not set | ||
342 | # CONFIG_NETFILTER is not set | ||
343 | # CONFIG_IP_DCCP is not set | ||
344 | # CONFIG_IP_SCTP is not set | ||
345 | # CONFIG_TIPC is not set | ||
346 | # CONFIG_ATM is not set | ||
347 | # CONFIG_BRIDGE is not set | ||
348 | # CONFIG_VLAN_8021Q is not set | ||
349 | # CONFIG_DECNET is not set | ||
350 | # CONFIG_LLC2 is not set | ||
351 | # CONFIG_IPX is not set | ||
352 | # CONFIG_ATALK is not set | ||
353 | # CONFIG_X25 is not set | ||
354 | # CONFIG_LAPB is not set | ||
355 | # CONFIG_ECONET is not set | ||
356 | # CONFIG_WAN_ROUTER is not set | ||
357 | # CONFIG_NET_SCHED is not set | ||
358 | |||
359 | # | ||
360 | # Network testing | ||
361 | # | ||
362 | # CONFIG_NET_PKTGEN is not set | ||
363 | # CONFIG_HAMRADIO is not set | ||
364 | # CONFIG_IRDA is not set | ||
365 | # CONFIG_BT is not set | ||
366 | # CONFIG_AF_RXRPC is not set | ||
367 | |||
368 | # | ||
369 | # Wireless | ||
370 | # | ||
371 | # CONFIG_CFG80211 is not set | ||
372 | # CONFIG_WIRELESS_EXT is not set | ||
373 | # CONFIG_MAC80211 is not set | ||
374 | # CONFIG_IEEE80211 is not set | ||
375 | # CONFIG_RFKILL is not set | ||
376 | # CONFIG_NET_9P is not set | ||
377 | |||
378 | # | ||
379 | # Device Drivers | ||
380 | # | ||
381 | |||
382 | # | ||
383 | # Generic Driver Options | ||
384 | # | ||
385 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
386 | CONFIG_STANDALONE=y | ||
387 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
388 | # CONFIG_FW_LOADER is not set | ||
389 | # CONFIG_DEBUG_DRIVER is not set | ||
390 | # CONFIG_DEBUG_DEVRES is not set | ||
391 | # CONFIG_SYS_HYPERVISOR is not set | ||
392 | # CONFIG_CONNECTOR is not set | ||
393 | CONFIG_MTD=y | ||
394 | # CONFIG_MTD_DEBUG is not set | ||
395 | # CONFIG_MTD_CONCAT is not set | ||
396 | CONFIG_MTD_PARTITIONS=y | ||
397 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
398 | CONFIG_MTD_CMDLINE_PARTS=y | ||
399 | # CONFIG_MTD_AFS_PARTS is not set | ||
400 | |||
401 | # | ||
402 | # User Modules And Translation Layers | ||
403 | # | ||
404 | CONFIG_MTD_CHAR=y | ||
405 | CONFIG_MTD_BLKDEVS=y | ||
406 | CONFIG_MTD_BLOCK=y | ||
407 | # CONFIG_FTL is not set | ||
408 | # CONFIG_NFTL is not set | ||
409 | # CONFIG_INFTL is not set | ||
410 | # CONFIG_RFD_FTL is not set | ||
411 | # CONFIG_SSFDC is not set | ||
412 | # CONFIG_MTD_OOPS is not set | ||
413 | |||
414 | # | ||
415 | # RAM/ROM/Flash chip drivers | ||
416 | # | ||
417 | # CONFIG_MTD_CFI is not set | ||
418 | # CONFIG_MTD_JEDECPROBE is not set | ||
419 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
420 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
421 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
422 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
423 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
424 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
425 | CONFIG_MTD_CFI_I1=y | ||
426 | CONFIG_MTD_CFI_I2=y | ||
427 | # CONFIG_MTD_CFI_I4 is not set | ||
428 | # CONFIG_MTD_CFI_I8 is not set | ||
429 | # CONFIG_MTD_RAM is not set | ||
430 | # CONFIG_MTD_ROM is not set | ||
431 | # CONFIG_MTD_ABSENT is not set | ||
432 | |||
433 | # | ||
434 | # Mapping drivers for chip access | ||
435 | # | ||
436 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
437 | # CONFIG_MTD_PLATRAM is not set | ||
438 | |||
439 | # | ||
440 | # Self-contained MTD device drivers | ||
441 | # | ||
442 | CONFIG_MTD_DATAFLASH=y | ||
443 | # CONFIG_MTD_M25P80 is not set | ||
444 | # CONFIG_MTD_SLRAM is not set | ||
445 | # CONFIG_MTD_PHRAM is not set | ||
446 | # CONFIG_MTD_MTDRAM is not set | ||
447 | # CONFIG_MTD_BLOCK2MTD is not set | ||
448 | |||
449 | # | ||
450 | # Disk-On-Chip Device Drivers | ||
451 | # | ||
452 | # CONFIG_MTD_DOC2000 is not set | ||
453 | # CONFIG_MTD_DOC2001 is not set | ||
454 | # CONFIG_MTD_DOC2001PLUS is not set | ||
455 | CONFIG_MTD_NAND=y | ||
456 | # CONFIG_MTD_NAND_VERIFY_WRITE is not set | ||
457 | # CONFIG_MTD_NAND_ECC_SMC is not set | ||
458 | # CONFIG_MTD_NAND_MUSEUM_IDS is not set | ||
459 | CONFIG_MTD_NAND_IDS=y | ||
460 | # CONFIG_MTD_NAND_DISKONCHIP is not set | ||
461 | CONFIG_MTD_NAND_AT91=y | ||
462 | CONFIG_MTD_NAND_AT91_ECC_SOFT=y | ||
463 | # CONFIG_MTD_NAND_AT91_ECC_HW is not set | ||
464 | # CONFIG_MTD_NAND_AT91_ECC_NONE is not set | ||
465 | # CONFIG_MTD_NAND_NANDSIM is not set | ||
466 | # CONFIG_MTD_NAND_PLATFORM is not set | ||
467 | # CONFIG_MTD_ALAUDA is not set | ||
468 | # CONFIG_MTD_ONENAND is not set | ||
469 | |||
470 | # | ||
471 | # UBI - Unsorted block images | ||
472 | # | ||
473 | # CONFIG_MTD_UBI is not set | ||
474 | # CONFIG_PARPORT is not set | ||
475 | CONFIG_BLK_DEV=y | ||
476 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
477 | CONFIG_BLK_DEV_LOOP=y | ||
478 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
479 | # CONFIG_BLK_DEV_NBD is not set | ||
480 | # CONFIG_BLK_DEV_UB is not set | ||
481 | # CONFIG_BLK_DEV_RAM is not set | ||
482 | # CONFIG_CDROM_PKTCDVD is not set | ||
483 | # CONFIG_ATA_OVER_ETH is not set | ||
484 | # CONFIG_MISC_DEVICES is not set | ||
485 | |||
486 | # | ||
487 | # SCSI device support | ||
488 | # | ||
489 | # CONFIG_RAID_ATTRS is not set | ||
490 | CONFIG_SCSI=y | ||
491 | CONFIG_SCSI_DMA=y | ||
492 | # CONFIG_SCSI_TGT is not set | ||
493 | # CONFIG_SCSI_NETLINK is not set | ||
494 | CONFIG_SCSI_PROC_FS=y | ||
495 | |||
496 | # | ||
497 | # SCSI support type (disk, tape, CD-ROM) | ||
498 | # | ||
499 | CONFIG_BLK_DEV_SD=y | ||
500 | # CONFIG_CHR_DEV_ST is not set | ||
501 | # CONFIG_CHR_DEV_OSST is not set | ||
502 | # CONFIG_BLK_DEV_SR is not set | ||
503 | # CONFIG_CHR_DEV_SG is not set | ||
504 | # CONFIG_CHR_DEV_SCH is not set | ||
505 | |||
506 | # | ||
507 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||
508 | # | ||
509 | CONFIG_SCSI_MULTI_LUN=y | ||
510 | # CONFIG_SCSI_CONSTANTS is not set | ||
511 | # CONFIG_SCSI_LOGGING is not set | ||
512 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
513 | CONFIG_SCSI_WAIT_SCAN=m | ||
514 | |||
515 | # | ||
516 | # SCSI Transports | ||
517 | # | ||
518 | # CONFIG_SCSI_SPI_ATTRS is not set | ||
519 | # CONFIG_SCSI_FC_ATTRS is not set | ||
520 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
521 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
522 | # CONFIG_SCSI_SRP_ATTRS is not set | ||
523 | CONFIG_SCSI_LOWLEVEL=y | ||
524 | # CONFIG_ISCSI_TCP is not set | ||
525 | # CONFIG_SCSI_DEBUG is not set | ||
526 | # CONFIG_ATA is not set | ||
527 | # CONFIG_MD is not set | ||
528 | CONFIG_NETDEVICES=y | ||
529 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
530 | # CONFIG_DUMMY is not set | ||
531 | # CONFIG_BONDING is not set | ||
532 | # CONFIG_MACVLAN is not set | ||
533 | # CONFIG_EQUALIZER is not set | ||
534 | # CONFIG_TUN is not set | ||
535 | # CONFIG_VETH is not set | ||
536 | CONFIG_PHYLIB=y | ||
537 | |||
538 | # | ||
539 | # MII PHY device drivers | ||
540 | # | ||
541 | # CONFIG_MARVELL_PHY is not set | ||
542 | # CONFIG_DAVICOM_PHY is not set | ||
543 | # CONFIG_QSEMI_PHY is not set | ||
544 | # CONFIG_LXT_PHY is not set | ||
545 | # CONFIG_CICADA_PHY is not set | ||
546 | # CONFIG_VITESSE_PHY is not set | ||
547 | # CONFIG_SMSC_PHY is not set | ||
548 | # CONFIG_BROADCOM_PHY is not set | ||
549 | # CONFIG_ICPLUS_PHY is not set | ||
550 | # CONFIG_FIXED_PHY is not set | ||
551 | # CONFIG_MDIO_BITBANG is not set | ||
552 | CONFIG_NET_ETHERNET=y | ||
553 | CONFIG_MII=y | ||
554 | CONFIG_MACB=y | ||
555 | # CONFIG_AX88796 is not set | ||
556 | # CONFIG_SMC91X is not set | ||
557 | # CONFIG_DM9000 is not set | ||
558 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
559 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
560 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
561 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
562 | # CONFIG_B44 is not set | ||
563 | CONFIG_NETDEV_1000=y | ||
564 | CONFIG_NETDEV_10000=y | ||
565 | |||
566 | # | ||
567 | # Wireless LAN | ||
568 | # | ||
569 | # CONFIG_WLAN_PRE80211 is not set | ||
570 | # CONFIG_WLAN_80211 is not set | ||
571 | |||
572 | # | ||
573 | # USB Network Adapters | ||
574 | # | ||
575 | # CONFIG_USB_CATC is not set | ||
576 | # CONFIG_USB_KAWETH is not set | ||
577 | # CONFIG_USB_PEGASUS is not set | ||
578 | # CONFIG_USB_RTL8150 is not set | ||
579 | # CONFIG_USB_USBNET is not set | ||
580 | # CONFIG_WAN is not set | ||
581 | # CONFIG_PPP is not set | ||
582 | # CONFIG_SLIP is not set | ||
583 | # CONFIG_SHAPER is not set | ||
584 | # CONFIG_NETCONSOLE is not set | ||
585 | # CONFIG_NETPOLL is not set | ||
586 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
587 | # CONFIG_ISDN is not set | ||
588 | |||
589 | # | ||
590 | # Input device support | ||
591 | # | ||
592 | CONFIG_INPUT=y | ||
593 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
594 | # CONFIG_INPUT_POLLDEV is not set | ||
595 | |||
596 | # | ||
597 | # Userland interfaces | ||
598 | # | ||
599 | CONFIG_INPUT_MOUSEDEV=y | ||
600 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
601 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
602 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
603 | # CONFIG_INPUT_JOYDEV is not set | ||
604 | CONFIG_INPUT_EVDEV=y | ||
605 | CONFIG_INPUT_EVBUG=y | ||
606 | |||
607 | # | ||
608 | # Input Device Drivers | ||
609 | # | ||
610 | CONFIG_INPUT_KEYBOARD=y | ||
611 | # CONFIG_KEYBOARD_ATKBD is not set | ||
612 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
613 | # CONFIG_KEYBOARD_LKKBD is not set | ||
614 | # CONFIG_KEYBOARD_XTKBD is not set | ||
615 | # CONFIG_KEYBOARD_NEWTON is not set | ||
616 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
617 | CONFIG_KEYBOARD_GPIO=y | ||
618 | # CONFIG_INPUT_MOUSE is not set | ||
619 | # CONFIG_INPUT_JOYSTICK is not set | ||
620 | # CONFIG_INPUT_TABLET is not set | ||
621 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
622 | # CONFIG_INPUT_MISC is not set | ||
623 | |||
624 | # | ||
625 | # Hardware I/O ports | ||
626 | # | ||
627 | # CONFIG_SERIO is not set | ||
628 | # CONFIG_GAMEPORT is not set | ||
629 | |||
630 | # | ||
631 | # Character devices | ||
632 | # | ||
633 | CONFIG_VT=y | ||
634 | CONFIG_VT_CONSOLE=y | ||
635 | CONFIG_HW_CONSOLE=y | ||
636 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
637 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
638 | |||
639 | # | ||
640 | # Serial drivers | ||
641 | # | ||
642 | # CONFIG_SERIAL_8250 is not set | ||
643 | |||
644 | # | ||
645 | # Non-8250 serial port support | ||
646 | # | ||
647 | CONFIG_SERIAL_ATMEL=y | ||
648 | CONFIG_SERIAL_ATMEL_CONSOLE=y | ||
649 | # CONFIG_SERIAL_ATMEL_TTYAT is not set | ||
650 | CONFIG_SERIAL_CORE=y | ||
651 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
652 | CONFIG_UNIX98_PTYS=y | ||
653 | CONFIG_LEGACY_PTYS=y | ||
654 | CONFIG_LEGACY_PTY_COUNT=256 | ||
655 | # CONFIG_IPMI_HANDLER is not set | ||
656 | CONFIG_HW_RANDOM=y | ||
657 | # CONFIG_NVRAM is not set | ||
658 | # CONFIG_R3964 is not set | ||
659 | # CONFIG_RAW_DRIVER is not set | ||
660 | # CONFIG_TCG_TPM is not set | ||
661 | CONFIG_I2C=y | ||
662 | CONFIG_I2C_BOARDINFO=y | ||
663 | CONFIG_I2C_CHARDEV=y | ||
664 | |||
665 | # | ||
666 | # I2C Algorithms | ||
667 | # | ||
668 | # CONFIG_I2C_ALGOBIT is not set | ||
669 | # CONFIG_I2C_ALGOPCF is not set | ||
670 | # CONFIG_I2C_ALGOPCA is not set | ||
671 | |||
672 | # | ||
673 | # I2C Hardware Bus support | ||
674 | # | ||
675 | # CONFIG_I2C_GPIO is not set | ||
676 | # CONFIG_I2C_OCORES is not set | ||
677 | # CONFIG_I2C_PARPORT_LIGHT is not set | ||
678 | # CONFIG_I2C_SIMTEC is not set | ||
679 | # CONFIG_I2C_TAOS_EVM is not set | ||
680 | # CONFIG_I2C_STUB is not set | ||
681 | # CONFIG_I2C_TINY_USB is not set | ||
682 | # CONFIG_I2C_PCA is not set | ||
683 | |||
684 | # | ||
685 | # Miscellaneous I2C Chip support | ||
686 | # | ||
687 | # CONFIG_SENSORS_DS1337 is not set | ||
688 | # CONFIG_SENSORS_DS1374 is not set | ||
689 | # CONFIG_DS1682 is not set | ||
690 | # CONFIG_SENSORS_EEPROM is not set | ||
691 | # CONFIG_SENSORS_PCF8574 is not set | ||
692 | # CONFIG_SENSORS_PCA9539 is not set | ||
693 | # CONFIG_SENSORS_PCF8591 is not set | ||
694 | # CONFIG_SENSORS_MAX6875 is not set | ||
695 | # CONFIG_SENSORS_TSL2550 is not set | ||
696 | # CONFIG_I2C_DEBUG_CORE is not set | ||
697 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
698 | # CONFIG_I2C_DEBUG_BUS is not set | ||
699 | # CONFIG_I2C_DEBUG_CHIP is not set | ||
700 | |||
701 | # | ||
702 | # SPI support | ||
703 | # | ||
704 | CONFIG_SPI=y | ||
705 | # CONFIG_SPI_DEBUG is not set | ||
706 | CONFIG_SPI_MASTER=y | ||
707 | |||
708 | # | ||
709 | # SPI Master Controller Drivers | ||
710 | # | ||
711 | CONFIG_SPI_ATMEL=y | ||
712 | # CONFIG_SPI_BITBANG is not set | ||
713 | |||
714 | # | ||
715 | # SPI Protocol Masters | ||
716 | # | ||
717 | # CONFIG_SPI_AT25 is not set | ||
718 | # CONFIG_SPI_SPIDEV is not set | ||
719 | # CONFIG_SPI_TLE62X0 is not set | ||
720 | # CONFIG_W1 is not set | ||
721 | # CONFIG_POWER_SUPPLY is not set | ||
722 | # CONFIG_HWMON is not set | ||
723 | CONFIG_WATCHDOG=y | ||
724 | CONFIG_WATCHDOG_NOWAYOUT=y | ||
725 | |||
726 | # | ||
727 | # Watchdog Device Drivers | ||
728 | # | ||
729 | # CONFIG_SOFT_WATCHDOG is not set | ||
730 | # CONFIG_AT91SAM9_WATCHDOG is not set | ||
731 | |||
732 | # | ||
733 | # USB-based Watchdog Cards | ||
734 | # | ||
735 | # CONFIG_USBPCWATCHDOG is not set | ||
736 | |||
737 | # | ||
738 | # Sonics Silicon Backplane | ||
739 | # | ||
740 | CONFIG_SSB_POSSIBLE=y | ||
741 | # CONFIG_SSB is not set | ||
742 | |||
743 | # | ||
744 | # Multifunction device drivers | ||
745 | # | ||
746 | # CONFIG_MFD_SM501 is not set | ||
747 | |||
748 | # | ||
749 | # Multimedia devices | ||
750 | # | ||
751 | # CONFIG_VIDEO_DEV is not set | ||
752 | # CONFIG_DVB_CORE is not set | ||
753 | # CONFIG_DAB is not set | ||
754 | |||
755 | # | ||
756 | # Graphics support | ||
757 | # | ||
758 | # CONFIG_VGASTATE is not set | ||
759 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
760 | # CONFIG_FB is not set | ||
761 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
762 | |||
763 | # | ||
764 | # Display device support | ||
765 | # | ||
766 | # CONFIG_DISPLAY_SUPPORT is not set | ||
767 | |||
768 | # | ||
769 | # Console display driver support | ||
770 | # | ||
771 | # CONFIG_VGA_CONSOLE is not set | ||
772 | CONFIG_DUMMY_CONSOLE=y | ||
773 | |||
774 | # | ||
775 | # Sound | ||
776 | # | ||
777 | # CONFIG_SOUND is not set | ||
778 | CONFIG_HID_SUPPORT=y | ||
779 | CONFIG_HID=y | ||
780 | # CONFIG_HID_DEBUG is not set | ||
781 | # CONFIG_HIDRAW is not set | ||
782 | |||
783 | # | ||
784 | # USB Input Devices | ||
785 | # | ||
786 | # CONFIG_USB_HID is not set | ||
787 | |||
788 | # | ||
789 | # USB HID Boot Protocol drivers | ||
790 | # | ||
791 | # CONFIG_USB_KBD is not set | ||
792 | # CONFIG_USB_MOUSE is not set | ||
793 | CONFIG_USB_SUPPORT=y | ||
794 | CONFIG_USB_ARCH_HAS_HCD=y | ||
795 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
796 | # CONFIG_USB_ARCH_HAS_EHCI is not set | ||
797 | CONFIG_USB=y | ||
798 | # CONFIG_USB_DEBUG is not set | ||
799 | |||
800 | # | ||
801 | # Miscellaneous USB options | ||
802 | # | ||
803 | CONFIG_USB_DEVICEFS=y | ||
804 | CONFIG_USB_DEVICE_CLASS=y | ||
805 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
806 | # CONFIG_USB_SUSPEND is not set | ||
807 | # CONFIG_USB_PERSIST is not set | ||
808 | # CONFIG_USB_OTG is not set | ||
809 | |||
810 | # | ||
811 | # USB Host Controller Drivers | ||
812 | # | ||
813 | # CONFIG_USB_ISP116X_HCD is not set | ||
814 | CONFIG_USB_OHCI_HCD=y | ||
815 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set | ||
816 | # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set | ||
817 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | ||
818 | # CONFIG_USB_SL811_HCD is not set | ||
819 | # CONFIG_USB_R8A66597_HCD is not set | ||
820 | |||
821 | # | ||
822 | # USB Device Class drivers | ||
823 | # | ||
824 | # CONFIG_USB_ACM is not set | ||
825 | # CONFIG_USB_PRINTER is not set | ||
826 | |||
827 | # | ||
828 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
829 | # | ||
830 | |||
831 | # | ||
832 | # may also be needed; see USB_STORAGE Help for more information | ||
833 | # | ||
834 | CONFIG_USB_STORAGE=y | ||
835 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
836 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
837 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
838 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
839 | # CONFIG_USB_STORAGE_DPCM is not set | ||
840 | # CONFIG_USB_STORAGE_USBAT is not set | ||
841 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
842 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
843 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
844 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
845 | # CONFIG_USB_STORAGE_KARMA is not set | ||
846 | # CONFIG_USB_LIBUSUAL is not set | ||
847 | |||
848 | # | ||
849 | # USB Imaging devices | ||
850 | # | ||
851 | # CONFIG_USB_MDC800 is not set | ||
852 | # CONFIG_USB_MICROTEK is not set | ||
853 | CONFIG_USB_MON=y | ||
854 | |||
855 | # | ||
856 | # USB port drivers | ||
857 | # | ||
858 | |||
859 | # | ||
860 | # USB Serial Converter support | ||
861 | # | ||
862 | # CONFIG_USB_SERIAL is not set | ||
863 | |||
864 | # | ||
865 | # USB Miscellaneous drivers | ||
866 | # | ||
867 | # CONFIG_USB_EMI62 is not set | ||
868 | # CONFIG_USB_EMI26 is not set | ||
869 | # CONFIG_USB_ADUTUX is not set | ||
870 | # CONFIG_USB_AUERSWALD is not set | ||
871 | # CONFIG_USB_RIO500 is not set | ||
872 | # CONFIG_USB_LEGOTOWER is not set | ||
873 | # CONFIG_USB_LCD is not set | ||
874 | # CONFIG_USB_BERRY_CHARGE is not set | ||
875 | # CONFIG_USB_LED is not set | ||
876 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
877 | # CONFIG_USB_CYTHERM is not set | ||
878 | # CONFIG_USB_PHIDGET is not set | ||
879 | # CONFIG_USB_IDMOUSE is not set | ||
880 | # CONFIG_USB_FTDI_ELAN is not set | ||
881 | # CONFIG_USB_APPLEDISPLAY is not set | ||
882 | # CONFIG_USB_LD is not set | ||
883 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
884 | # CONFIG_USB_IOWARRIOR is not set | ||
885 | # CONFIG_USB_TEST is not set | ||
886 | |||
887 | # | ||
888 | # USB DSL modem support | ||
889 | # | ||
890 | |||
891 | # | ||
892 | # USB Gadget Support | ||
893 | # | ||
894 | CONFIG_USB_GADGET=y | ||
895 | # CONFIG_USB_GADGET_DEBUG is not set | ||
896 | # CONFIG_USB_GADGET_DEBUG_FILES is not set | ||
897 | CONFIG_USB_GADGET_SELECTED=y | ||
898 | # CONFIG_USB_GADGET_AMD5536UDC is not set | ||
899 | # CONFIG_USB_GADGET_ATMEL_USBA is not set | ||
900 | # CONFIG_USB_GADGET_FSL_USB2 is not set | ||
901 | # CONFIG_USB_GADGET_NET2280 is not set | ||
902 | # CONFIG_USB_GADGET_PXA2XX is not set | ||
903 | # CONFIG_USB_GADGET_M66592 is not set | ||
904 | # CONFIG_USB_GADGET_GOKU is not set | ||
905 | # CONFIG_USB_GADGET_LH7A40X is not set | ||
906 | # CONFIG_USB_GADGET_OMAP is not set | ||
907 | # CONFIG_USB_GADGET_S3C2410 is not set | ||
908 | CONFIG_USB_GADGET_AT91=y | ||
909 | CONFIG_USB_AT91=y | ||
910 | # CONFIG_USB_GADGET_DUMMY_HCD is not set | ||
911 | # CONFIG_USB_GADGET_DUALSPEED is not set | ||
912 | # CONFIG_USB_ZERO is not set | ||
913 | CONFIG_USB_ETH=y | ||
914 | CONFIG_USB_ETH_RNDIS=y | ||
915 | # CONFIG_USB_GADGETFS is not set | ||
916 | # CONFIG_USB_FILE_STORAGE is not set | ||
917 | # CONFIG_USB_G_SERIAL is not set | ||
918 | # CONFIG_USB_MIDI_GADGET is not set | ||
919 | CONFIG_MMC=y | ||
920 | # CONFIG_MMC_DEBUG is not set | ||
921 | # CONFIG_MMC_UNSAFE_RESUME is not set | ||
922 | |||
923 | # | ||
924 | # MMC/SD Card Drivers | ||
925 | # | ||
926 | CONFIG_MMC_BLOCK=y | ||
927 | CONFIG_MMC_BLOCK_BOUNCE=y | ||
928 | # CONFIG_SDIO_UART is not set | ||
929 | |||
930 | # | ||
931 | # MMC/SD Host Controller Drivers | ||
932 | # | ||
933 | CONFIG_MMC_AT91=y | ||
934 | # CONFIG_MMC_SPI is not set | ||
935 | CONFIG_NEW_LEDS=y | ||
936 | CONFIG_LEDS_CLASS=y | ||
937 | |||
938 | # | ||
939 | # LED drivers | ||
940 | # | ||
941 | CONFIG_LEDS_GPIO=y | ||
942 | |||
943 | # | ||
944 | # LED Triggers | ||
945 | # | ||
946 | CONFIG_LEDS_TRIGGERS=y | ||
947 | # CONFIG_LEDS_TRIGGER_TIMER is not set | ||
948 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | ||
949 | CONFIG_RTC_LIB=y | ||
950 | CONFIG_RTC_CLASS=y | ||
951 | CONFIG_RTC_HCTOSYS=y | ||
952 | CONFIG_RTC_HCTOSYS_DEVICE="rtc0" | ||
953 | # CONFIG_RTC_DEBUG is not set | ||
954 | |||
955 | # | ||
956 | # RTC interfaces | ||
957 | # | ||
958 | CONFIG_RTC_INTF_SYSFS=y | ||
959 | CONFIG_RTC_INTF_PROC=y | ||
960 | CONFIG_RTC_INTF_DEV=y | ||
961 | # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set | ||
962 | # CONFIG_RTC_DRV_TEST is not set | ||
963 | |||
964 | # | ||
965 | # I2C RTC drivers | ||
966 | # | ||
967 | # CONFIG_RTC_DRV_DS1307 is not set | ||
968 | # CONFIG_RTC_DRV_DS1374 is not set | ||
969 | # CONFIG_RTC_DRV_DS1672 is not set | ||
970 | # CONFIG_RTC_DRV_MAX6900 is not set | ||
971 | # CONFIG_RTC_DRV_RS5C372 is not set | ||
972 | # CONFIG_RTC_DRV_ISL1208 is not set | ||
973 | # CONFIG_RTC_DRV_X1205 is not set | ||
974 | # CONFIG_RTC_DRV_PCF8563 is not set | ||
975 | # CONFIG_RTC_DRV_PCF8583 is not set | ||
976 | # CONFIG_RTC_DRV_M41T80 is not set | ||
977 | |||
978 | # | ||
979 | # SPI RTC drivers | ||
980 | # | ||
981 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
982 | # CONFIG_RTC_DRV_MAX6902 is not set | ||
983 | CONFIG_RTC_DRV_M41T94=y | ||
984 | |||
985 | # | ||
986 | # Platform RTC drivers | ||
987 | # | ||
988 | # CONFIG_RTC_DRV_CMOS is not set | ||
989 | # CONFIG_RTC_DRV_DS1553 is not set | ||
990 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
991 | # CONFIG_RTC_DRV_DS1742 is not set | ||
992 | # CONFIG_RTC_DRV_M48T86 is not set | ||
993 | # CONFIG_RTC_DRV_M48T59 is not set | ||
994 | # CONFIG_RTC_DRV_V3020 is not set | ||
995 | |||
996 | # | ||
997 | # on-CPU RTC drivers | ||
998 | # | ||
999 | # CONFIG_RTC_DRV_AT91SAM9 is not set | ||
1000 | |||
1001 | # | ||
1002 | # File systems | ||
1003 | # | ||
1004 | CONFIG_EXT2_FS=y | ||
1005 | # CONFIG_EXT2_FS_XATTR is not set | ||
1006 | # CONFIG_EXT2_FS_XIP is not set | ||
1007 | # CONFIG_EXT3_FS is not set | ||
1008 | # CONFIG_EXT4DEV_FS is not set | ||
1009 | # CONFIG_REISERFS_FS is not set | ||
1010 | # CONFIG_JFS_FS is not set | ||
1011 | CONFIG_FS_POSIX_ACL=y | ||
1012 | # CONFIG_XFS_FS is not set | ||
1013 | # CONFIG_GFS2_FS is not set | ||
1014 | # CONFIG_OCFS2_FS is not set | ||
1015 | # CONFIG_MINIX_FS is not set | ||
1016 | # CONFIG_ROMFS_FS is not set | ||
1017 | CONFIG_INOTIFY=y | ||
1018 | CONFIG_INOTIFY_USER=y | ||
1019 | # CONFIG_QUOTA is not set | ||
1020 | CONFIG_DNOTIFY=y | ||
1021 | # CONFIG_AUTOFS_FS is not set | ||
1022 | # CONFIG_AUTOFS4_FS is not set | ||
1023 | CONFIG_FUSE_FS=m | ||
1024 | |||
1025 | # | ||
1026 | # CD-ROM/DVD Filesystems | ||
1027 | # | ||
1028 | # CONFIG_ISO9660_FS is not set | ||
1029 | # CONFIG_UDF_FS is not set | ||
1030 | |||
1031 | # | ||
1032 | # DOS/FAT/NT Filesystems | ||
1033 | # | ||
1034 | CONFIG_FAT_FS=y | ||
1035 | # CONFIG_MSDOS_FS is not set | ||
1036 | CONFIG_VFAT_FS=y | ||
1037 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
1038 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
1039 | # CONFIG_NTFS_FS is not set | ||
1040 | |||
1041 | # | ||
1042 | # Pseudo filesystems | ||
1043 | # | ||
1044 | CONFIG_PROC_FS=y | ||
1045 | CONFIG_PROC_SYSCTL=y | ||
1046 | CONFIG_SYSFS=y | ||
1047 | CONFIG_TMPFS=y | ||
1048 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
1049 | # CONFIG_HUGETLB_PAGE is not set | ||
1050 | # CONFIG_CONFIGFS_FS is not set | ||
1051 | |||
1052 | # | ||
1053 | # Miscellaneous filesystems | ||
1054 | # | ||
1055 | # CONFIG_ADFS_FS is not set | ||
1056 | # CONFIG_AFFS_FS is not set | ||
1057 | # CONFIG_HFS_FS is not set | ||
1058 | # CONFIG_HFSPLUS_FS is not set | ||
1059 | # CONFIG_BEFS_FS is not set | ||
1060 | # CONFIG_BFS_FS is not set | ||
1061 | # CONFIG_EFS_FS is not set | ||
1062 | CONFIG_JFFS2_FS=y | ||
1063 | CONFIG_JFFS2_FS_DEBUG=0 | ||
1064 | CONFIG_JFFS2_FS_WRITEBUFFER=y | ||
1065 | # CONFIG_JFFS2_FS_WBUF_VERIFY is not set | ||
1066 | # CONFIG_JFFS2_SUMMARY is not set | ||
1067 | # CONFIG_JFFS2_FS_XATTR is not set | ||
1068 | # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set | ||
1069 | CONFIG_JFFS2_ZLIB=y | ||
1070 | # CONFIG_JFFS2_LZO is not set | ||
1071 | CONFIG_JFFS2_RTIME=y | ||
1072 | # CONFIG_JFFS2_RUBIN is not set | ||
1073 | # CONFIG_CRAMFS is not set | ||
1074 | # CONFIG_VXFS_FS is not set | ||
1075 | # CONFIG_HPFS_FS is not set | ||
1076 | # CONFIG_QNX4FS_FS is not set | ||
1077 | # CONFIG_SYSV_FS is not set | ||
1078 | # CONFIG_UFS_FS is not set | ||
1079 | CONFIG_NETWORK_FILESYSTEMS=y | ||
1080 | CONFIG_NFS_FS=y | ||
1081 | CONFIG_NFS_V3=y | ||
1082 | CONFIG_NFS_V3_ACL=y | ||
1083 | CONFIG_NFS_V4=y | ||
1084 | # CONFIG_NFS_DIRECTIO is not set | ||
1085 | # CONFIG_NFSD is not set | ||
1086 | CONFIG_ROOT_NFS=y | ||
1087 | CONFIG_LOCKD=y | ||
1088 | CONFIG_LOCKD_V4=y | ||
1089 | CONFIG_NFS_ACL_SUPPORT=y | ||
1090 | CONFIG_NFS_COMMON=y | ||
1091 | CONFIG_SUNRPC=y | ||
1092 | CONFIG_SUNRPC_GSS=y | ||
1093 | # CONFIG_SUNRPC_BIND34 is not set | ||
1094 | CONFIG_RPCSEC_GSS_KRB5=y | ||
1095 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
1096 | # CONFIG_SMB_FS is not set | ||
1097 | # CONFIG_CIFS is not set | ||
1098 | # CONFIG_NCP_FS is not set | ||
1099 | # CONFIG_CODA_FS is not set | ||
1100 | # CONFIG_AFS_FS is not set | ||
1101 | |||
1102 | # | ||
1103 | # Partition Types | ||
1104 | # | ||
1105 | # CONFIG_PARTITION_ADVANCED is not set | ||
1106 | CONFIG_MSDOS_PARTITION=y | ||
1107 | CONFIG_NLS=y | ||
1108 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
1109 | CONFIG_NLS_CODEPAGE_437=y | ||
1110 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
1111 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
1112 | CONFIG_NLS_CODEPAGE_850=y | ||
1113 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
1114 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
1115 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
1116 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
1117 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
1118 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
1119 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
1120 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
1121 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
1122 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
1123 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
1124 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
1125 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
1126 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
1127 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
1128 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
1129 | # CONFIG_NLS_ISO8859_8 is not set | ||
1130 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
1131 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
1132 | # CONFIG_NLS_ASCII is not set | ||
1133 | CONFIG_NLS_ISO8859_1=y | ||
1134 | # CONFIG_NLS_ISO8859_2 is not set | ||
1135 | # CONFIG_NLS_ISO8859_3 is not set | ||
1136 | # CONFIG_NLS_ISO8859_4 is not set | ||
1137 | # CONFIG_NLS_ISO8859_5 is not set | ||
1138 | # CONFIG_NLS_ISO8859_6 is not set | ||
1139 | # CONFIG_NLS_ISO8859_7 is not set | ||
1140 | # CONFIG_NLS_ISO8859_9 is not set | ||
1141 | # CONFIG_NLS_ISO8859_13 is not set | ||
1142 | # CONFIG_NLS_ISO8859_14 is not set | ||
1143 | # CONFIG_NLS_ISO8859_15 is not set | ||
1144 | # CONFIG_NLS_KOI8_R is not set | ||
1145 | # CONFIG_NLS_KOI8_U is not set | ||
1146 | # CONFIG_NLS_UTF8 is not set | ||
1147 | # CONFIG_DLM is not set | ||
1148 | # CONFIG_INSTRUMENTATION is not set | ||
1149 | |||
1150 | # | ||
1151 | # Kernel hacking | ||
1152 | # | ||
1153 | # CONFIG_PRINTK_TIME is not set | ||
1154 | CONFIG_ENABLE_WARN_DEPRECATED=y | ||
1155 | CONFIG_ENABLE_MUST_CHECK=y | ||
1156 | # CONFIG_MAGIC_SYSRQ is not set | ||
1157 | # CONFIG_UNUSED_SYMBOLS is not set | ||
1158 | # CONFIG_DEBUG_FS is not set | ||
1159 | # CONFIG_HEADERS_CHECK is not set | ||
1160 | CONFIG_DEBUG_KERNEL=y | ||
1161 | # CONFIG_DEBUG_SHIRQ is not set | ||
1162 | CONFIG_DETECT_SOFTLOCKUP=y | ||
1163 | CONFIG_SCHED_DEBUG=y | ||
1164 | # CONFIG_SCHEDSTATS is not set | ||
1165 | # CONFIG_TIMER_STATS is not set | ||
1166 | # CONFIG_DEBUG_SLAB is not set | ||
1167 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
1168 | # CONFIG_RT_MUTEX_TESTER is not set | ||
1169 | # CONFIG_DEBUG_SPINLOCK is not set | ||
1170 | # CONFIG_DEBUG_MUTEXES is not set | ||
1171 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
1172 | # CONFIG_PROVE_LOCKING is not set | ||
1173 | # CONFIG_LOCK_STAT is not set | ||
1174 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
1175 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
1176 | # CONFIG_DEBUG_KOBJECT is not set | ||
1177 | CONFIG_DEBUG_BUGVERBOSE=y | ||
1178 | # CONFIG_DEBUG_INFO is not set | ||
1179 | # CONFIG_DEBUG_VM is not set | ||
1180 | # CONFIG_DEBUG_LIST is not set | ||
1181 | # CONFIG_DEBUG_SG is not set | ||
1182 | CONFIG_FRAME_POINTER=y | ||
1183 | CONFIG_FORCED_INLINING=y | ||
1184 | # CONFIG_BOOT_PRINTK_DELAY is not set | ||
1185 | # CONFIG_RCU_TORTURE_TEST is not set | ||
1186 | # CONFIG_FAULT_INJECTION is not set | ||
1187 | # CONFIG_SAMPLES is not set | ||
1188 | CONFIG_DEBUG_USER=y | ||
1189 | # CONFIG_DEBUG_ERRORS is not set | ||
1190 | CONFIG_DEBUG_LL=y | ||
1191 | # CONFIG_DEBUG_ICEDCC is not set | ||
1192 | |||
1193 | # | ||
1194 | # Security options | ||
1195 | # | ||
1196 | # CONFIG_KEYS is not set | ||
1197 | # CONFIG_SECURITY is not set | ||
1198 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | ||
1199 | CONFIG_CRYPTO=y | ||
1200 | CONFIG_CRYPTO_ALGAPI=y | ||
1201 | CONFIG_CRYPTO_BLKCIPHER=y | ||
1202 | CONFIG_CRYPTO_MANAGER=y | ||
1203 | # CONFIG_CRYPTO_HMAC is not set | ||
1204 | # CONFIG_CRYPTO_XCBC is not set | ||
1205 | # CONFIG_CRYPTO_NULL is not set | ||
1206 | # CONFIG_CRYPTO_MD4 is not set | ||
1207 | CONFIG_CRYPTO_MD5=y | ||
1208 | # CONFIG_CRYPTO_SHA1 is not set | ||
1209 | # CONFIG_CRYPTO_SHA256 is not set | ||
1210 | # CONFIG_CRYPTO_SHA512 is not set | ||
1211 | # CONFIG_CRYPTO_WP512 is not set | ||
1212 | # CONFIG_CRYPTO_TGR192 is not set | ||
1213 | # CONFIG_CRYPTO_GF128MUL is not set | ||
1214 | # CONFIG_CRYPTO_ECB is not set | ||
1215 | CONFIG_CRYPTO_CBC=y | ||
1216 | # CONFIG_CRYPTO_PCBC is not set | ||
1217 | # CONFIG_CRYPTO_LRW is not set | ||
1218 | # CONFIG_CRYPTO_XTS is not set | ||
1219 | # CONFIG_CRYPTO_CRYPTD is not set | ||
1220 | CONFIG_CRYPTO_DES=y | ||
1221 | # CONFIG_CRYPTO_FCRYPT is not set | ||
1222 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
1223 | # CONFIG_CRYPTO_TWOFISH is not set | ||
1224 | # CONFIG_CRYPTO_SERPENT is not set | ||
1225 | # CONFIG_CRYPTO_AES is not set | ||
1226 | # CONFIG_CRYPTO_CAST5 is not set | ||
1227 | # CONFIG_CRYPTO_CAST6 is not set | ||
1228 | # CONFIG_CRYPTO_TEA is not set | ||
1229 | # CONFIG_CRYPTO_ARC4 is not set | ||
1230 | # CONFIG_CRYPTO_KHAZAD is not set | ||
1231 | # CONFIG_CRYPTO_ANUBIS is not set | ||
1232 | # CONFIG_CRYPTO_SEED is not set | ||
1233 | # CONFIG_CRYPTO_DEFLATE is not set | ||
1234 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
1235 | # CONFIG_CRYPTO_CRC32C is not set | ||
1236 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
1237 | # CONFIG_CRYPTO_TEST is not set | ||
1238 | # CONFIG_CRYPTO_AUTHENC is not set | ||
1239 | # CONFIG_CRYPTO_HW is not set | ||
1240 | |||
1241 | # | ||
1242 | # Library routines | ||
1243 | # | ||
1244 | CONFIG_BITREVERSE=y | ||
1245 | # CONFIG_CRC_CCITT is not set | ||
1246 | # CONFIG_CRC16 is not set | ||
1247 | # CONFIG_CRC_ITU_T is not set | ||
1248 | CONFIG_CRC32=y | ||
1249 | # CONFIG_CRC7 is not set | ||
1250 | # CONFIG_LIBCRC32C is not set | ||
1251 | CONFIG_ZLIB_INFLATE=y | ||
1252 | CONFIG_ZLIB_DEFLATE=y | ||
1253 | CONFIG_PLIST=y | ||
1254 | CONFIG_HAS_IOMEM=y | ||
1255 | CONFIG_HAS_IOPORT=y | ||
1256 | CONFIG_HAS_DMA=y | ||
diff --git a/arch/arm/configs/realview-smp_defconfig b/arch/arm/configs/realview-smp_defconfig index fc39ba1a89f3..0c09b23167ec 100644 --- a/arch/arm/configs/realview-smp_defconfig +++ b/arch/arm/configs/realview-smp_defconfig | |||
@@ -177,7 +177,6 @@ CONFIG_NR_CPUS=4 | |||
177 | CONFIG_HOTPLUG_CPU=y | 177 | CONFIG_HOTPLUG_CPU=y |
178 | CONFIG_LOCAL_TIMERS=y | 178 | CONFIG_LOCAL_TIMERS=y |
179 | # CONFIG_PREEMPT is not set | 179 | # CONFIG_PREEMPT is not set |
180 | # CONFIG_NO_IDLE_HZ is not set | ||
181 | CONFIG_HZ=100 | 180 | CONFIG_HZ=100 |
182 | # CONFIG_AEABI is not set | 181 | # CONFIG_AEABI is not set |
183 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 182 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/configs/realview_defconfig b/arch/arm/configs/realview_defconfig index accbf529ce5b..907e54344dad 100644 --- a/arch/arm/configs/realview_defconfig +++ b/arch/arm/configs/realview_defconfig | |||
@@ -126,7 +126,6 @@ CONFIG_ISA_DMA_API=y | |||
126 | # | 126 | # |
127 | # Kernel Features | 127 | # Kernel Features |
128 | # | 128 | # |
129 | # CONFIG_NO_IDLE_HZ is not set | ||
130 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 129 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
131 | CONFIG_FLATMEM=y | 130 | CONFIG_FLATMEM=y |
132 | CONFIG_FLAT_NODE_MEM_MAP=y | 131 | CONFIG_FLAT_NODE_MEM_MAP=y |
diff --git a/arch/arm/configs/rpc_defconfig b/arch/arm/configs/rpc_defconfig index 5ddecb9ddf01..f62d1817d2c6 100644 --- a/arch/arm/configs/rpc_defconfig +++ b/arch/arm/configs/rpc_defconfig | |||
@@ -190,7 +190,6 @@ CONFIG_ISA_DMA_API=y | |||
190 | # | 190 | # |
191 | # CONFIG_TICK_ONESHOT is not set | 191 | # CONFIG_TICK_ONESHOT is not set |
192 | # CONFIG_PREEMPT is not set | 192 | # CONFIG_PREEMPT is not set |
193 | # CONFIG_NO_IDLE_HZ is not set | ||
194 | CONFIG_HZ=100 | 193 | CONFIG_HZ=100 |
195 | # CONFIG_AEABI is not set | 194 | # CONFIG_AEABI is not set |
196 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 195 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/configs/s3c2410_defconfig b/arch/arm/configs/s3c2410_defconfig index f8a1645b3d4a..35faaea8623e 100644 --- a/arch/arm/configs/s3c2410_defconfig +++ b/arch/arm/configs/s3c2410_defconfig | |||
@@ -1,15 +1,18 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.21-rc6 | 3 | # Linux kernel version: 2.6.26-rc8 |
4 | # Mon Apr 9 10:12:58 2007 | 4 | # Mon Jul 7 16:59:23 2008 |
5 | # | 5 | # |
6 | CONFIG_ARM=y | 6 | CONFIG_ARM=y |
7 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y | 7 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y |
8 | CONFIG_GENERIC_GPIO=y | 8 | CONFIG_GENERIC_GPIO=y |
9 | # CONFIG_GENERIC_TIME is not set | 9 | # CONFIG_GENERIC_TIME is not set |
10 | # CONFIG_GENERIC_CLOCKEVENTS is not set | ||
10 | CONFIG_MMU=y | 11 | CONFIG_MMU=y |
11 | CONFIG_NO_IOPORT=y | 12 | CONFIG_NO_IOPORT=y |
12 | CONFIG_GENERIC_HARDIRQS=y | 13 | CONFIG_GENERIC_HARDIRQS=y |
14 | CONFIG_STACKTRACE_SUPPORT=y | ||
15 | CONFIG_LOCKDEP_SUPPORT=y | ||
13 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | 16 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y |
14 | CONFIG_HARDIRQS_SW_RESEND=y | 17 | CONFIG_HARDIRQS_SW_RESEND=y |
15 | CONFIG_GENERIC_IRQ_PROBE=y | 18 | CONFIG_GENERIC_IRQ_PROBE=y |
@@ -18,34 +21,39 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y | |||
18 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | 21 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set |
19 | CONFIG_GENERIC_HWEIGHT=y | 22 | CONFIG_GENERIC_HWEIGHT=y |
20 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 23 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
24 | CONFIG_ARCH_SUPPORTS_AOUT=y | ||
21 | CONFIG_ZONE_DMA=y | 25 | CONFIG_ZONE_DMA=y |
22 | CONFIG_VECTORS_BASE=0xffff0000 | 26 | CONFIG_VECTORS_BASE=0xffff0000 |
23 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 27 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
24 | 28 | ||
25 | # | 29 | # |
26 | # Code maturity level options | 30 | # General setup |
27 | # | 31 | # |
28 | CONFIG_EXPERIMENTAL=y | 32 | CONFIG_EXPERIMENTAL=y |
29 | CONFIG_BROKEN_ON_SMP=y | 33 | CONFIG_BROKEN_ON_SMP=y |
30 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 34 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
31 | |||
32 | # | ||
33 | # General setup | ||
34 | # | ||
35 | CONFIG_LOCALVERSION="" | 35 | CONFIG_LOCALVERSION="" |
36 | CONFIG_LOCALVERSION_AUTO=y | 36 | CONFIG_LOCALVERSION_AUTO=y |
37 | CONFIG_SWAP=y | 37 | CONFIG_SWAP=y |
38 | CONFIG_SYSVIPC=y | 38 | CONFIG_SYSVIPC=y |
39 | # CONFIG_IPC_NS is not set | ||
40 | CONFIG_SYSVIPC_SYSCTL=y | 39 | CONFIG_SYSVIPC_SYSCTL=y |
41 | # CONFIG_POSIX_MQUEUE is not set | 40 | # CONFIG_POSIX_MQUEUE is not set |
42 | # CONFIG_BSD_PROCESS_ACCT is not set | 41 | # CONFIG_BSD_PROCESS_ACCT is not set |
43 | # CONFIG_TASKSTATS is not set | 42 | # CONFIG_TASKSTATS is not set |
44 | # CONFIG_UTS_NS is not set | ||
45 | # CONFIG_AUDIT is not set | 43 | # CONFIG_AUDIT is not set |
46 | # CONFIG_IKCONFIG is not set | 44 | CONFIG_IKCONFIG=m |
45 | CONFIG_IKCONFIG_PROC=y | ||
46 | CONFIG_LOG_BUF_SHIFT=16 | ||
47 | # CONFIG_CGROUPS is not set | ||
48 | # CONFIG_GROUP_SCHED is not set | ||
47 | CONFIG_SYSFS_DEPRECATED=y | 49 | CONFIG_SYSFS_DEPRECATED=y |
50 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
48 | # CONFIG_RELAY is not set | 51 | # CONFIG_RELAY is not set |
52 | CONFIG_NAMESPACES=y | ||
53 | # CONFIG_UTS_NS is not set | ||
54 | # CONFIG_IPC_NS is not set | ||
55 | # CONFIG_USER_NS is not set | ||
56 | # CONFIG_PID_NS is not set | ||
49 | CONFIG_BLK_DEV_INITRD=y | 57 | CONFIG_BLK_DEV_INITRD=y |
50 | CONFIG_INITRAMFS_SOURCE="" | 58 | CONFIG_INITRAMFS_SOURCE="" |
51 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 59 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
@@ -53,6 +61,7 @@ CONFIG_SYSCTL=y | |||
53 | # CONFIG_EMBEDDED is not set | 61 | # CONFIG_EMBEDDED is not set |
54 | CONFIG_UID16=y | 62 | CONFIG_UID16=y |
55 | CONFIG_SYSCTL_SYSCALL=y | 63 | CONFIG_SYSCTL_SYSCALL=y |
64 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
56 | CONFIG_KALLSYMS=y | 65 | CONFIG_KALLSYMS=y |
57 | # CONFIG_KALLSYMS_ALL is not set | 66 | # CONFIG_KALLSYMS_ALL is not set |
58 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 67 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
@@ -60,34 +69,43 @@ CONFIG_HOTPLUG=y | |||
60 | CONFIG_PRINTK=y | 69 | CONFIG_PRINTK=y |
61 | CONFIG_BUG=y | 70 | CONFIG_BUG=y |
62 | CONFIG_ELF_CORE=y | 71 | CONFIG_ELF_CORE=y |
72 | CONFIG_COMPAT_BRK=y | ||
63 | CONFIG_BASE_FULL=y | 73 | CONFIG_BASE_FULL=y |
64 | CONFIG_FUTEX=y | 74 | CONFIG_FUTEX=y |
75 | CONFIG_ANON_INODES=y | ||
65 | CONFIG_EPOLL=y | 76 | CONFIG_EPOLL=y |
77 | CONFIG_SIGNALFD=y | ||
78 | CONFIG_TIMERFD=y | ||
79 | CONFIG_EVENTFD=y | ||
66 | CONFIG_SHMEM=y | 80 | CONFIG_SHMEM=y |
67 | CONFIG_SLAB=y | ||
68 | CONFIG_VM_EVENT_COUNTERS=y | 81 | CONFIG_VM_EVENT_COUNTERS=y |
82 | CONFIG_SLAB=y | ||
83 | # CONFIG_SLUB is not set | ||
84 | # CONFIG_SLOB is not set | ||
85 | # CONFIG_PROFILING is not set | ||
86 | # CONFIG_MARKERS is not set | ||
87 | CONFIG_HAVE_OPROFILE=y | ||
88 | # CONFIG_KPROBES is not set | ||
89 | CONFIG_HAVE_KPROBES=y | ||
90 | CONFIG_HAVE_KRETPROBES=y | ||
91 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
92 | CONFIG_PROC_PAGE_MONITOR=y | ||
93 | CONFIG_SLABINFO=y | ||
69 | CONFIG_RT_MUTEXES=y | 94 | CONFIG_RT_MUTEXES=y |
70 | # CONFIG_TINY_SHMEM is not set | 95 | # CONFIG_TINY_SHMEM is not set |
71 | CONFIG_BASE_SMALL=0 | 96 | CONFIG_BASE_SMALL=0 |
72 | # CONFIG_SLOB is not set | ||
73 | |||
74 | # | ||
75 | # Loadable module support | ||
76 | # | ||
77 | CONFIG_MODULES=y | 97 | CONFIG_MODULES=y |
98 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
78 | CONFIG_MODULE_UNLOAD=y | 99 | CONFIG_MODULE_UNLOAD=y |
79 | # CONFIG_MODULE_FORCE_UNLOAD is not set | 100 | # CONFIG_MODULE_FORCE_UNLOAD is not set |
80 | # CONFIG_MODVERSIONS is not set | 101 | # CONFIG_MODVERSIONS is not set |
81 | # CONFIG_MODULE_SRCVERSION_ALL is not set | 102 | # CONFIG_MODULE_SRCVERSION_ALL is not set |
82 | CONFIG_KMOD=y | 103 | CONFIG_KMOD=y |
83 | |||
84 | # | ||
85 | # Block layer | ||
86 | # | ||
87 | CONFIG_BLOCK=y | 104 | CONFIG_BLOCK=y |
88 | # CONFIG_LBD is not set | 105 | # CONFIG_LBD is not set |
89 | # CONFIG_BLK_DEV_IO_TRACE is not set | 106 | # CONFIG_BLK_DEV_IO_TRACE is not set |
90 | # CONFIG_LSF is not set | 107 | # CONFIG_LSF is not set |
108 | # CONFIG_BLK_DEV_BSG is not set | ||
91 | 109 | ||
92 | # | 110 | # |
93 | # IO Schedulers | 111 | # IO Schedulers |
@@ -101,6 +119,7 @@ CONFIG_DEFAULT_AS=y | |||
101 | # CONFIG_DEFAULT_CFQ is not set | 119 | # CONFIG_DEFAULT_CFQ is not set |
102 | # CONFIG_DEFAULT_NOOP is not set | 120 | # CONFIG_DEFAULT_NOOP is not set |
103 | CONFIG_DEFAULT_IOSCHED="anticipatory" | 121 | CONFIG_DEFAULT_IOSCHED="anticipatory" |
122 | CONFIG_CLASSIC_RCU=y | ||
104 | 123 | ||
105 | # | 124 | # |
106 | # System Type | 125 | # System Type |
@@ -119,14 +138,17 @@ CONFIG_DEFAULT_IOSCHED="anticipatory" | |||
119 | # CONFIG_ARCH_NETX is not set | 138 | # CONFIG_ARCH_NETX is not set |
120 | # CONFIG_ARCH_H720X is not set | 139 | # CONFIG_ARCH_H720X is not set |
121 | # CONFIG_ARCH_IMX is not set | 140 | # CONFIG_ARCH_IMX is not set |
141 | # CONFIG_ARCH_IOP13XX is not set | ||
122 | # CONFIG_ARCH_IOP32X is not set | 142 | # CONFIG_ARCH_IOP32X is not set |
123 | # CONFIG_ARCH_IOP33X is not set | 143 | # CONFIG_ARCH_IOP33X is not set |
124 | # CONFIG_ARCH_IOP13XX is not set | ||
125 | # CONFIG_ARCH_IXP4XX is not set | ||
126 | # CONFIG_ARCH_IXP2000 is not set | ||
127 | # CONFIG_ARCH_IXP23XX is not set | 144 | # CONFIG_ARCH_IXP23XX is not set |
145 | # CONFIG_ARCH_IXP2000 is not set | ||
146 | # CONFIG_ARCH_IXP4XX is not set | ||
128 | # CONFIG_ARCH_L7200 is not set | 147 | # CONFIG_ARCH_L7200 is not set |
148 | # CONFIG_ARCH_KS8695 is not set | ||
129 | # CONFIG_ARCH_NS9XXX is not set | 149 | # CONFIG_ARCH_NS9XXX is not set |
150 | # CONFIG_ARCH_MXC is not set | ||
151 | # CONFIG_ARCH_ORION5X is not set | ||
130 | # CONFIG_ARCH_PNX4008 is not set | 152 | # CONFIG_ARCH_PNX4008 is not set |
131 | # CONFIG_ARCH_PXA is not set | 153 | # CONFIG_ARCH_PXA is not set |
132 | # CONFIG_ARCH_RPC is not set | 154 | # CONFIG_ARCH_RPC is not set |
@@ -134,18 +156,32 @@ CONFIG_DEFAULT_IOSCHED="anticipatory" | |||
134 | CONFIG_ARCH_S3C2410=y | 156 | CONFIG_ARCH_S3C2410=y |
135 | # CONFIG_ARCH_SHARK is not set | 157 | # CONFIG_ARCH_SHARK is not set |
136 | # CONFIG_ARCH_LH7A40X is not set | 158 | # CONFIG_ARCH_LH7A40X is not set |
159 | # CONFIG_ARCH_DAVINCI is not set | ||
137 | # CONFIG_ARCH_OMAP is not set | 160 | # CONFIG_ARCH_OMAP is not set |
161 | # CONFIG_ARCH_MSM7X00A is not set | ||
138 | CONFIG_PLAT_S3C24XX=y | 162 | CONFIG_PLAT_S3C24XX=y |
139 | CONFIG_CPU_S3C244X=y | 163 | CONFIG_CPU_S3C244X=y |
164 | # CONFIG_S3C24XX_PWM is not set | ||
140 | CONFIG_PM_SIMTEC=y | 165 | CONFIG_PM_SIMTEC=y |
166 | CONFIG_S3C2410_DMA=y | ||
167 | # CONFIG_S3C2410_DMA_DEBUG is not set | ||
168 | CONFIG_MACH_SMDK=y | ||
169 | CONFIG_PLAT_S3C=y | ||
170 | CONFIG_CPU_LLSERIAL_S3C2410=y | ||
171 | CONFIG_CPU_LLSERIAL_S3C2440=y | ||
172 | |||
173 | # | ||
174 | # Boot options | ||
175 | # | ||
141 | # CONFIG_S3C_BOOT_WATCHDOG is not set | 176 | # CONFIG_S3C_BOOT_WATCHDOG is not set |
142 | # CONFIG_S3C_BOOT_ERROR_RESET is not set | 177 | # CONFIG_S3C_BOOT_ERROR_RESET is not set |
178 | |||
179 | # | ||
180 | # Power management | ||
181 | # | ||
143 | # CONFIG_S3C2410_PM_DEBUG is not set | 182 | # CONFIG_S3C2410_PM_DEBUG is not set |
144 | # CONFIG_S3C2410_PM_CHECK is not set | 183 | # CONFIG_S3C2410_PM_CHECK is not set |
145 | CONFIG_S3C_LOWLEVEL_UART_PORT=0 | 184 | CONFIG_S3C_LOWLEVEL_UART_PORT=0 |
146 | CONFIG_S3C2410_DMA=y | ||
147 | # CONFIG_S3C2410_DMA_DEBUG is not set | ||
148 | CONFIG_MACH_SMDK=y | ||
149 | 185 | ||
150 | # | 186 | # |
151 | # S3C2400 Machines | 187 | # S3C2400 Machines |
@@ -155,6 +191,8 @@ CONFIG_CPU_S3C2410_DMA=y | |||
155 | CONFIG_S3C2410_PM=y | 191 | CONFIG_S3C2410_PM=y |
156 | CONFIG_S3C2410_GPIO=y | 192 | CONFIG_S3C2410_GPIO=y |
157 | CONFIG_S3C2410_CLOCK=y | 193 | CONFIG_S3C2410_CLOCK=y |
194 | CONFIG_SIMTEC_NOR=y | ||
195 | CONFIG_MACH_BAST_IDE=y | ||
158 | 196 | ||
159 | # | 197 | # |
160 | # S3C2410 Machines | 198 | # S3C2410 Machines |
@@ -167,6 +205,7 @@ CONFIG_ARCH_BAST=y | |||
167 | CONFIG_MACH_OTOM=y | 205 | CONFIG_MACH_OTOM=y |
168 | CONFIG_MACH_AML_M5900=y | 206 | CONFIG_MACH_AML_M5900=y |
169 | CONFIG_BAST_PC104_IRQ=y | 207 | CONFIG_BAST_PC104_IRQ=y |
208 | # CONFIG_MACH_TCT_HAMMER is not set | ||
170 | CONFIG_MACH_VR1000=y | 209 | CONFIG_MACH_VR1000=y |
171 | CONFIG_MACH_QT2410=y | 210 | CONFIG_MACH_QT2410=y |
172 | CONFIG_CPU_S3C2412=y | 211 | CONFIG_CPU_S3C2412=y |
@@ -176,8 +215,10 @@ CONFIG_S3C2412_PM=y | |||
176 | # | 215 | # |
177 | # S3C2412 Machines | 216 | # S3C2412 Machines |
178 | # | 217 | # |
218 | # CONFIG_MACH_JIVE is not set | ||
179 | CONFIG_MACH_SMDK2413=y | 219 | CONFIG_MACH_SMDK2413=y |
180 | CONFIG_MACH_S3C2413=y | 220 | CONFIG_MACH_S3C2413=y |
221 | # CONFIG_MACH_SMDK2412 is not set | ||
181 | CONFIG_MACH_VSTMS=y | 222 | CONFIG_MACH_VSTMS=y |
182 | CONFIG_CPU_S3C2440=y | 223 | CONFIG_CPU_S3C2440=y |
183 | CONFIG_S3C2440_DMA=y | 224 | CONFIG_S3C2440_DMA=y |
@@ -191,6 +232,7 @@ CONFIG_MACH_RX3715=y | |||
191 | CONFIG_ARCH_S3C2440=y | 232 | CONFIG_ARCH_S3C2440=y |
192 | CONFIG_MACH_NEXCODER_2440=y | 233 | CONFIG_MACH_NEXCODER_2440=y |
193 | CONFIG_SMDK2440_CPU2440=y | 234 | CONFIG_SMDK2440_CPU2440=y |
235 | # CONFIG_MACH_AT2440EVB is not set | ||
194 | CONFIG_CPU_S3C2442=y | 236 | CONFIG_CPU_S3C2442=y |
195 | 237 | ||
196 | # | 238 | # |
@@ -215,6 +257,7 @@ CONFIG_CPU_32v4T=y | |||
215 | CONFIG_CPU_32v5=y | 257 | CONFIG_CPU_32v5=y |
216 | CONFIG_CPU_ABRT_EV4T=y | 258 | CONFIG_CPU_ABRT_EV4T=y |
217 | CONFIG_CPU_ABRT_EV5TJ=y | 259 | CONFIG_CPU_ABRT_EV5TJ=y |
260 | CONFIG_CPU_PABRT_NOIFAR=y | ||
218 | CONFIG_CPU_CACHE_V4WT=y | 261 | CONFIG_CPU_CACHE_V4WT=y |
219 | CONFIG_CPU_CACHE_VIVT=y | 262 | CONFIG_CPU_CACHE_VIVT=y |
220 | CONFIG_CPU_COPY_V4WB=y | 263 | CONFIG_CPU_COPY_V4WB=y |
@@ -236,17 +279,15 @@ CONFIG_CPU_CP15_MMU=y | |||
236 | # Bus support | 279 | # Bus support |
237 | # | 280 | # |
238 | CONFIG_ISA=y | 281 | CONFIG_ISA=y |
239 | 282 | # CONFIG_PCI_SYSCALL is not set | |
240 | # | 283 | # CONFIG_ARCH_SUPPORTS_MSI is not set |
241 | # PCCARD (PCMCIA/CardBus) support | ||
242 | # | ||
243 | # CONFIG_PCCARD is not set | 284 | # CONFIG_PCCARD is not set |
244 | 285 | ||
245 | # | 286 | # |
246 | # Kernel Features | 287 | # Kernel Features |
247 | # | 288 | # |
289 | # CONFIG_TICK_ONESHOT is not set | ||
248 | # CONFIG_PREEMPT is not set | 290 | # CONFIG_PREEMPT is not set |
249 | # CONFIG_NO_IDLE_HZ is not set | ||
250 | CONFIG_HZ=200 | 291 | CONFIG_HZ=200 |
251 | # CONFIG_AEABI is not set | 292 | # CONFIG_AEABI is not set |
252 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 293 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
@@ -257,9 +298,13 @@ CONFIG_FLATMEM_MANUAL=y | |||
257 | CONFIG_FLATMEM=y | 298 | CONFIG_FLATMEM=y |
258 | CONFIG_FLAT_NODE_MEM_MAP=y | 299 | CONFIG_FLAT_NODE_MEM_MAP=y |
259 | # CONFIG_SPARSEMEM_STATIC is not set | 300 | # CONFIG_SPARSEMEM_STATIC is not set |
301 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
302 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
260 | CONFIG_SPLIT_PTLOCK_CPUS=4096 | 303 | CONFIG_SPLIT_PTLOCK_CPUS=4096 |
261 | # CONFIG_RESOURCES_64BIT is not set | 304 | # CONFIG_RESOURCES_64BIT is not set |
262 | CONFIG_ZONE_DMA_FLAG=1 | 305 | CONFIG_ZONE_DMA_FLAG=1 |
306 | CONFIG_BOUNCE=y | ||
307 | CONFIG_VIRT_TO_BUS=y | ||
263 | CONFIG_ALIGNMENT_TRAP=y | 308 | CONFIG_ALIGNMENT_TRAP=y |
264 | 309 | ||
265 | # | 310 | # |
@@ -279,7 +324,7 @@ CONFIG_CMDLINE="root=/dev/hda1 ro init=/bin/bash console=ttySAC0" | |||
279 | # At least one emulation must be selected | 324 | # At least one emulation must be selected |
280 | # | 325 | # |
281 | CONFIG_FPE_NWFPE=y | 326 | CONFIG_FPE_NWFPE=y |
282 | # CONFIG_FPE_NWFPE_XP is not set | 327 | CONFIG_FPE_NWFPE_XP=y |
283 | # CONFIG_FPE_FASTFPE is not set | 328 | # CONFIG_FPE_FASTFPE is not set |
284 | # CONFIG_VFP is not set | 329 | # CONFIG_VFP is not set |
285 | 330 | ||
@@ -295,10 +340,12 @@ CONFIG_BINFMT_AOUT=y | |||
295 | # Power management options | 340 | # Power management options |
296 | # | 341 | # |
297 | CONFIG_PM=y | 342 | CONFIG_PM=y |
298 | # CONFIG_PM_LEGACY is not set | ||
299 | # CONFIG_PM_DEBUG is not set | 343 | # CONFIG_PM_DEBUG is not set |
300 | # CONFIG_PM_SYSFS_DEPRECATED is not set | 344 | CONFIG_PM_SLEEP=y |
301 | # CONFIG_APM_EMULATION is not set | 345 | CONFIG_SUSPEND=y |
346 | CONFIG_SUSPEND_FREEZER=y | ||
347 | CONFIG_APM_EMULATION=m | ||
348 | CONFIG_ARCH_SUSPEND_POSSIBLE=y | ||
302 | 349 | ||
303 | # | 350 | # |
304 | # Networking | 351 | # Networking |
@@ -308,59 +355,67 @@ CONFIG_NET=y | |||
308 | # | 355 | # |
309 | # Networking options | 356 | # Networking options |
310 | # | 357 | # |
311 | # CONFIG_NETDEBUG is not set | 358 | CONFIG_PACKET=y |
312 | # CONFIG_PACKET is not set | 359 | # CONFIG_PACKET_MMAP is not set |
313 | CONFIG_UNIX=y | 360 | CONFIG_UNIX=y |
314 | CONFIG_XFRM=y | 361 | CONFIG_XFRM=y |
315 | # CONFIG_XFRM_USER is not set | 362 | # CONFIG_XFRM_USER is not set |
316 | # CONFIG_XFRM_SUB_POLICY is not set | 363 | # CONFIG_XFRM_SUB_POLICY is not set |
317 | # CONFIG_XFRM_MIGRATE is not set | 364 | # CONFIG_XFRM_MIGRATE is not set |
365 | # CONFIG_XFRM_STATISTICS is not set | ||
318 | # CONFIG_NET_KEY is not set | 366 | # CONFIG_NET_KEY is not set |
319 | CONFIG_INET=y | 367 | CONFIG_INET=y |
320 | # CONFIG_IP_MULTICAST is not set | 368 | CONFIG_IP_MULTICAST=y |
321 | # CONFIG_IP_ADVANCED_ROUTER is not set | 369 | # CONFIG_IP_ADVANCED_ROUTER is not set |
322 | CONFIG_IP_FIB_HASH=y | 370 | CONFIG_IP_FIB_HASH=y |
323 | CONFIG_IP_PNP=y | 371 | CONFIG_IP_PNP=y |
324 | # CONFIG_IP_PNP_DHCP is not set | 372 | CONFIG_IP_PNP_DHCP=y |
325 | CONFIG_IP_PNP_BOOTP=y | 373 | CONFIG_IP_PNP_BOOTP=y |
326 | # CONFIG_IP_PNP_RARP is not set | 374 | # CONFIG_IP_PNP_RARP is not set |
327 | # CONFIG_NET_IPIP is not set | 375 | # CONFIG_NET_IPIP is not set |
328 | # CONFIG_NET_IPGRE is not set | 376 | # CONFIG_NET_IPGRE is not set |
377 | # CONFIG_IP_MROUTE is not set | ||
329 | # CONFIG_ARPD is not set | 378 | # CONFIG_ARPD is not set |
330 | # CONFIG_SYN_COOKIES is not set | 379 | # CONFIG_SYN_COOKIES is not set |
331 | # CONFIG_INET_AH is not set | 380 | # CONFIG_INET_AH is not set |
332 | # CONFIG_INET_ESP is not set | 381 | # CONFIG_INET_ESP is not set |
333 | # CONFIG_INET_IPCOMP is not set | 382 | # CONFIG_INET_IPCOMP is not set |
334 | # CONFIG_INET_XFRM_TUNNEL is not set | 383 | # CONFIG_INET_XFRM_TUNNEL is not set |
335 | # CONFIG_INET_TUNNEL is not set | 384 | CONFIG_INET_TUNNEL=m |
336 | CONFIG_INET_XFRM_MODE_TRANSPORT=y | 385 | CONFIG_INET_XFRM_MODE_TRANSPORT=y |
337 | CONFIG_INET_XFRM_MODE_TUNNEL=y | 386 | CONFIG_INET_XFRM_MODE_TUNNEL=y |
338 | CONFIG_INET_XFRM_MODE_BEET=y | 387 | CONFIG_INET_XFRM_MODE_BEET=y |
388 | # CONFIG_INET_LRO is not set | ||
339 | CONFIG_INET_DIAG=y | 389 | CONFIG_INET_DIAG=y |
340 | CONFIG_INET_TCP_DIAG=y | 390 | CONFIG_INET_TCP_DIAG=y |
341 | # CONFIG_TCP_CONG_ADVANCED is not set | 391 | # CONFIG_TCP_CONG_ADVANCED is not set |
342 | CONFIG_TCP_CONG_CUBIC=y | 392 | CONFIG_TCP_CONG_CUBIC=y |
343 | CONFIG_DEFAULT_TCP_CONG="cubic" | 393 | CONFIG_DEFAULT_TCP_CONG="cubic" |
344 | # CONFIG_TCP_MD5SIG is not set | 394 | # CONFIG_TCP_MD5SIG is not set |
345 | # CONFIG_IPV6 is not set | 395 | CONFIG_IPV6=m |
346 | # CONFIG_INET6_XFRM_TUNNEL is not set | 396 | CONFIG_IPV6_PRIVACY=y |
347 | # CONFIG_INET6_TUNNEL is not set | 397 | CONFIG_IPV6_ROUTER_PREF=y |
398 | # CONFIG_IPV6_ROUTE_INFO is not set | ||
399 | # CONFIG_IPV6_OPTIMISTIC_DAD is not set | ||
400 | CONFIG_INET6_AH=m | ||
401 | CONFIG_INET6_ESP=m | ||
402 | CONFIG_INET6_IPCOMP=m | ||
403 | CONFIG_IPV6_MIP6=m | ||
404 | CONFIG_INET6_XFRM_TUNNEL=m | ||
405 | CONFIG_INET6_TUNNEL=m | ||
406 | CONFIG_INET6_XFRM_MODE_TRANSPORT=m | ||
407 | CONFIG_INET6_XFRM_MODE_TUNNEL=m | ||
408 | CONFIG_INET6_XFRM_MODE_BEET=m | ||
409 | CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m | ||
410 | CONFIG_IPV6_SIT=m | ||
411 | CONFIG_IPV6_NDISC_NODETYPE=y | ||
412 | CONFIG_IPV6_TUNNEL=m | ||
413 | # CONFIG_IPV6_MULTIPLE_TABLES is not set | ||
414 | # CONFIG_IPV6_MROUTE is not set | ||
348 | # CONFIG_NETWORK_SECMARK is not set | 415 | # CONFIG_NETWORK_SECMARK is not set |
349 | # CONFIG_NETFILTER is not set | 416 | # CONFIG_NETFILTER is not set |
350 | |||
351 | # | ||
352 | # DCCP Configuration (EXPERIMENTAL) | ||
353 | # | ||
354 | # CONFIG_IP_DCCP is not set | 417 | # CONFIG_IP_DCCP is not set |
355 | |||
356 | # | ||
357 | # SCTP Configuration (EXPERIMENTAL) | ||
358 | # | ||
359 | # CONFIG_IP_SCTP is not set | 418 | # CONFIG_IP_SCTP is not set |
360 | |||
361 | # | ||
362 | # TIPC Configuration (EXPERIMENTAL) | ||
363 | # | ||
364 | # CONFIG_TIPC is not set | 419 | # CONFIG_TIPC is not set |
365 | # CONFIG_ATM is not set | 420 | # CONFIG_ATM is not set |
366 | # CONFIG_BRIDGE is not set | 421 | # CONFIG_BRIDGE is not set |
@@ -373,20 +428,71 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
373 | # CONFIG_LAPB is not set | 428 | # CONFIG_LAPB is not set |
374 | # CONFIG_ECONET is not set | 429 | # CONFIG_ECONET is not set |
375 | # CONFIG_WAN_ROUTER is not set | 430 | # CONFIG_WAN_ROUTER is not set |
376 | |||
377 | # | ||
378 | # QoS and/or fair queueing | ||
379 | # | ||
380 | # CONFIG_NET_SCHED is not set | 431 | # CONFIG_NET_SCHED is not set |
432 | CONFIG_NET_SCH_FIFO=y | ||
381 | 433 | ||
382 | # | 434 | # |
383 | # Network testing | 435 | # Network testing |
384 | # | 436 | # |
385 | # CONFIG_NET_PKTGEN is not set | 437 | # CONFIG_NET_PKTGEN is not set |
386 | # CONFIG_HAMRADIO is not set | 438 | # CONFIG_HAMRADIO is not set |
439 | # CONFIG_CAN is not set | ||
387 | # CONFIG_IRDA is not set | 440 | # CONFIG_IRDA is not set |
388 | # CONFIG_BT is not set | 441 | CONFIG_BT=m |
442 | CONFIG_BT_L2CAP=m | ||
443 | CONFIG_BT_SCO=m | ||
444 | CONFIG_BT_RFCOMM=m | ||
445 | CONFIG_BT_RFCOMM_TTY=y | ||
446 | CONFIG_BT_BNEP=m | ||
447 | CONFIG_BT_BNEP_MC_FILTER=y | ||
448 | CONFIG_BT_BNEP_PROTO_FILTER=y | ||
449 | CONFIG_BT_HIDP=m | ||
450 | |||
451 | # | ||
452 | # Bluetooth device drivers | ||
453 | # | ||
454 | CONFIG_BT_HCIUSB=m | ||
455 | CONFIG_BT_HCIUSB_SCO=y | ||
456 | CONFIG_BT_HCIUART=m | ||
457 | CONFIG_BT_HCIUART_H4=y | ||
458 | CONFIG_BT_HCIUART_BCSP=y | ||
459 | CONFIG_BT_HCIUART_LL=y | ||
460 | CONFIG_BT_HCIBCM203X=m | ||
461 | CONFIG_BT_HCIBPA10X=m | ||
462 | CONFIG_BT_HCIBFUSB=m | ||
463 | CONFIG_BT_HCIVHCI=m | ||
464 | # CONFIG_AF_RXRPC is not set | ||
465 | |||
466 | # | ||
467 | # Wireless | ||
468 | # | ||
469 | CONFIG_CFG80211=m | ||
470 | CONFIG_NL80211=y | ||
471 | CONFIG_WIRELESS_EXT=y | ||
472 | CONFIG_MAC80211=m | ||
473 | |||
474 | # | ||
475 | # Rate control algorithm selection | ||
476 | # | ||
477 | CONFIG_MAC80211_RC_DEFAULT_PID=y | ||
478 | # CONFIG_MAC80211_RC_DEFAULT_NONE is not set | ||
479 | |||
480 | # | ||
481 | # Selecting 'y' for an algorithm will | ||
482 | # | ||
483 | |||
484 | # | ||
485 | # build the algorithm into mac80211. | ||
486 | # | ||
487 | CONFIG_MAC80211_RC_DEFAULT="pid" | ||
488 | CONFIG_MAC80211_RC_PID=y | ||
489 | CONFIG_MAC80211_MESH=y | ||
490 | CONFIG_MAC80211_LEDS=y | ||
491 | # CONFIG_MAC80211_DEBUG_PACKET_ALIGNMENT is not set | ||
492 | # CONFIG_MAC80211_DEBUG is not set | ||
389 | # CONFIG_IEEE80211 is not set | 493 | # CONFIG_IEEE80211 is not set |
494 | # CONFIG_RFKILL is not set | ||
495 | # CONFIG_NET_9P is not set | ||
390 | 496 | ||
391 | # | 497 | # |
392 | # Device Drivers | 498 | # Device Drivers |
@@ -395,21 +501,14 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
395 | # | 501 | # |
396 | # Generic Driver Options | 502 | # Generic Driver Options |
397 | # | 503 | # |
504 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
398 | CONFIG_STANDALONE=y | 505 | CONFIG_STANDALONE=y |
399 | CONFIG_PREVENT_FIRMWARE_BUILD=y | 506 | CONFIG_PREVENT_FIRMWARE_BUILD=y |
400 | # CONFIG_FW_LOADER is not set | 507 | CONFIG_FW_LOADER=m |
401 | # CONFIG_DEBUG_DRIVER is not set | 508 | # CONFIG_DEBUG_DRIVER is not set |
402 | # CONFIG_DEBUG_DEVRES is not set | 509 | # CONFIG_DEBUG_DEVRES is not set |
403 | # CONFIG_SYS_HYPERVISOR is not set | 510 | # CONFIG_SYS_HYPERVISOR is not set |
404 | |||
405 | # | ||
406 | # Connector - unified userspace <-> kernelspace linker | ||
407 | # | ||
408 | # CONFIG_CONNECTOR is not set | 511 | # CONFIG_CONNECTOR is not set |
409 | |||
410 | # | ||
411 | # Memory Technology Devices (MTD) | ||
412 | # | ||
413 | CONFIG_MTD=y | 512 | CONFIG_MTD=y |
414 | # CONFIG_MTD_DEBUG is not set | 513 | # CONFIG_MTD_DEBUG is not set |
415 | # CONFIG_MTD_CONCAT is not set | 514 | # CONFIG_MTD_CONCAT is not set |
@@ -420,6 +519,7 @@ CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y | |||
420 | # CONFIG_MTD_REDBOOT_PARTS_READONLY is not set | 519 | # CONFIG_MTD_REDBOOT_PARTS_READONLY is not set |
421 | CONFIG_MTD_CMDLINE_PARTS=y | 520 | CONFIG_MTD_CMDLINE_PARTS=y |
422 | # CONFIG_MTD_AFS_PARTS is not set | 521 | # CONFIG_MTD_AFS_PARTS is not set |
522 | # CONFIG_MTD_AR7_PARTS is not set | ||
423 | 523 | ||
424 | # | 524 | # |
425 | # User Modules And Translation Layers | 525 | # User Modules And Translation Layers |
@@ -432,6 +532,7 @@ CONFIG_MTD_BLOCK=y | |||
432 | # CONFIG_INFTL is not set | 532 | # CONFIG_INFTL is not set |
433 | # CONFIG_RFD_FTL is not set | 533 | # CONFIG_RFD_FTL is not set |
434 | # CONFIG_SSFDC is not set | 534 | # CONFIG_SSFDC is not set |
535 | # CONFIG_MTD_OOPS is not set | ||
435 | 536 | ||
436 | # | 537 | # |
437 | # RAM/ROM/Flash chip drivers | 538 | # RAM/ROM/Flash chip drivers |
@@ -457,7 +558,6 @@ CONFIG_MTD_CFI_UTIL=y | |||
457 | # CONFIG_MTD_RAM is not set | 558 | # CONFIG_MTD_RAM is not set |
458 | CONFIG_MTD_ROM=y | 559 | CONFIG_MTD_ROM=y |
459 | # CONFIG_MTD_ABSENT is not set | 560 | # CONFIG_MTD_ABSENT is not set |
460 | # CONFIG_MTD_OBSOLETE_CHIPS is not set | ||
461 | 561 | ||
462 | # | 562 | # |
463 | # Mapping drivers for chip access | 563 | # Mapping drivers for chip access |
@@ -486,13 +586,10 @@ CONFIG_MTD_BAST_MAXSIZE=4 | |||
486 | # CONFIG_MTD_DOC2000 is not set | 586 | # CONFIG_MTD_DOC2000 is not set |
487 | # CONFIG_MTD_DOC2001 is not set | 587 | # CONFIG_MTD_DOC2001 is not set |
488 | # CONFIG_MTD_DOC2001PLUS is not set | 588 | # CONFIG_MTD_DOC2001PLUS is not set |
489 | |||
490 | # | ||
491 | # NAND Flash Device Drivers | ||
492 | # | ||
493 | CONFIG_MTD_NAND=y | 589 | CONFIG_MTD_NAND=y |
494 | # CONFIG_MTD_NAND_VERIFY_WRITE is not set | 590 | # CONFIG_MTD_NAND_VERIFY_WRITE is not set |
495 | # CONFIG_MTD_NAND_ECC_SMC is not set | 591 | # CONFIG_MTD_NAND_ECC_SMC is not set |
592 | # CONFIG_MTD_NAND_MUSEUM_IDS is not set | ||
496 | CONFIG_MTD_NAND_IDS=y | 593 | CONFIG_MTD_NAND_IDS=y |
497 | CONFIG_MTD_NAND_S3C2410=y | 594 | CONFIG_MTD_NAND_S3C2410=y |
498 | # CONFIG_MTD_NAND_S3C2410_DEBUG is not set | 595 | # CONFIG_MTD_NAND_S3C2410_DEBUG is not set |
@@ -500,30 +597,25 @@ CONFIG_MTD_NAND_S3C2410=y | |||
500 | # CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set | 597 | # CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set |
501 | # CONFIG_MTD_NAND_DISKONCHIP is not set | 598 | # CONFIG_MTD_NAND_DISKONCHIP is not set |
502 | # CONFIG_MTD_NAND_NANDSIM is not set | 599 | # CONFIG_MTD_NAND_NANDSIM is not set |
503 | 600 | # CONFIG_MTD_NAND_PLATFORM is not set | |
504 | # | 601 | # CONFIG_MTD_ALAUDA is not set |
505 | # OneNAND Flash Device Drivers | ||
506 | # | ||
507 | # CONFIG_MTD_ONENAND is not set | 602 | # CONFIG_MTD_ONENAND is not set |
508 | 603 | ||
509 | # | 604 | # |
510 | # Parallel port support | 605 | # UBI - Unsorted block images |
511 | # | 606 | # |
607 | # CONFIG_MTD_UBI is not set | ||
512 | CONFIG_PARPORT=y | 608 | CONFIG_PARPORT=y |
513 | # CONFIG_PARPORT_PC is not set | 609 | CONFIG_PARPORT_PC=m |
610 | # CONFIG_PARPORT_PC_FIFO is not set | ||
611 | # CONFIG_PARPORT_PC_SUPERIO is not set | ||
514 | # CONFIG_PARPORT_GSC is not set | 612 | # CONFIG_PARPORT_GSC is not set |
515 | # CONFIG_PARPORT_AX88796 is not set | 613 | CONFIG_PARPORT_AX88796=m |
516 | CONFIG_PARPORT_1284=y | 614 | CONFIG_PARPORT_1284=y |
517 | 615 | CONFIG_PARPORT_NOT_PC=y | |
518 | # | ||
519 | # Plug and Play support | ||
520 | # | ||
521 | # CONFIG_PNP is not set | 616 | # CONFIG_PNP is not set |
522 | # CONFIG_PNPACPI is not set | 617 | CONFIG_BLK_DEV=y |
523 | 618 | # CONFIG_PARIDE is not set | |
524 | # | ||
525 | # Block devices | ||
526 | # | ||
527 | # CONFIG_BLK_DEV_COW_COMMON is not set | 619 | # CONFIG_BLK_DEV_COW_COMMON is not set |
528 | CONFIG_BLK_DEV_LOOP=y | 620 | CONFIG_BLK_DEV_LOOP=y |
529 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | 621 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set |
@@ -532,34 +624,34 @@ CONFIG_BLK_DEV_NBD=m | |||
532 | CONFIG_BLK_DEV_RAM=y | 624 | CONFIG_BLK_DEV_RAM=y |
533 | CONFIG_BLK_DEV_RAM_COUNT=16 | 625 | CONFIG_BLK_DEV_RAM_COUNT=16 |
534 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 626 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
535 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | 627 | # CONFIG_BLK_DEV_XIP is not set |
536 | # CONFIG_CDROM_PKTCDVD is not set | 628 | # CONFIG_CDROM_PKTCDVD is not set |
537 | CONFIG_ATA_OVER_ETH=m | 629 | CONFIG_ATA_OVER_ETH=m |
538 | 630 | CONFIG_MISC_DEVICES=y | |
539 | # | 631 | # CONFIG_EEPROM_93CX6 is not set |
540 | # ATA/ATAPI/MFM/RLL support | 632 | # CONFIG_ENCLOSURE_SERVICES is not set |
541 | # | 633 | CONFIG_HAVE_IDE=y |
542 | CONFIG_IDE=y | 634 | CONFIG_IDE=y |
543 | CONFIG_BLK_DEV_IDE=y | 635 | CONFIG_BLK_DEV_IDE=y |
544 | 636 | ||
545 | # | 637 | # |
546 | # Please see Documentation/ide.txt for help/info on IDE drives | 638 | # Please see Documentation/ide/ide.txt for help/info on IDE drives |
547 | # | 639 | # |
548 | # CONFIG_BLK_DEV_IDE_SATA is not set | 640 | # CONFIG_BLK_DEV_IDE_SATA is not set |
549 | CONFIG_BLK_DEV_IDEDISK=y | 641 | CONFIG_BLK_DEV_IDEDISK=y |
550 | # CONFIG_IDEDISK_MULTI_MODE is not set | 642 | # CONFIG_IDEDISK_MULTI_MODE is not set |
551 | CONFIG_BLK_DEV_IDECD=y | 643 | CONFIG_BLK_DEV_IDECD=y |
644 | CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y | ||
552 | CONFIG_BLK_DEV_IDETAPE=m | 645 | CONFIG_BLK_DEV_IDETAPE=m |
553 | CONFIG_BLK_DEV_IDEFLOPPY=m | 646 | CONFIG_BLK_DEV_IDEFLOPPY=m |
647 | # CONFIG_BLK_DEV_IDESCSI is not set | ||
554 | # CONFIG_IDE_TASK_IOCTL is not set | 648 | # CONFIG_IDE_TASK_IOCTL is not set |
649 | CONFIG_IDE_PROC_FS=y | ||
555 | 650 | ||
556 | # | 651 | # |
557 | # IDE chipset support/bugfixes | 652 | # IDE chipset support/bugfixes |
558 | # | 653 | # |
559 | CONFIG_IDE_GENERIC=y | 654 | # CONFIG_BLK_DEV_PLATFORM is not set |
560 | # CONFIG_IDE_ARM is not set | ||
561 | CONFIG_BLK_DEV_IDE_BAST=y | ||
562 | # CONFIG_IDE_CHIPSETS is not set | ||
563 | # CONFIG_BLK_DEV_IDEDMA is not set | 655 | # CONFIG_BLK_DEV_IDEDMA is not set |
564 | # CONFIG_BLK_DEV_HD is not set | 656 | # CONFIG_BLK_DEV_HD is not set |
565 | 657 | ||
@@ -567,101 +659,119 @@ CONFIG_BLK_DEV_IDE_BAST=y | |||
567 | # SCSI device support | 659 | # SCSI device support |
568 | # | 660 | # |
569 | # CONFIG_RAID_ATTRS is not set | 661 | # CONFIG_RAID_ATTRS is not set |
570 | # CONFIG_SCSI is not set | 662 | CONFIG_SCSI=y |
663 | CONFIG_SCSI_DMA=y | ||
664 | CONFIG_SCSI_TGT=m | ||
571 | # CONFIG_SCSI_NETLINK is not set | 665 | # CONFIG_SCSI_NETLINK is not set |
572 | 666 | CONFIG_SCSI_PROC_FS=y | |
573 | # | 667 | |
574 | # Serial ATA (prod) and Parallel ATA (experimental) drivers | 668 | # |
575 | # | 669 | # SCSI support type (disk, tape, CD-ROM) |
670 | # | ||
671 | CONFIG_BLK_DEV_SD=y | ||
672 | CONFIG_CHR_DEV_ST=m | ||
673 | # CONFIG_CHR_DEV_OSST is not set | ||
674 | CONFIG_BLK_DEV_SR=m | ||
675 | CONFIG_BLK_DEV_SR_VENDOR=y | ||
676 | CONFIG_CHR_DEV_SG=y | ||
677 | CONFIG_CHR_DEV_SCH=m | ||
678 | |||
679 | # | ||
680 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||
681 | # | ||
682 | CONFIG_SCSI_MULTI_LUN=y | ||
683 | CONFIG_SCSI_CONSTANTS=y | ||
684 | # CONFIG_SCSI_LOGGING is not set | ||
685 | CONFIG_SCSI_SCAN_ASYNC=y | ||
686 | CONFIG_SCSI_WAIT_SCAN=m | ||
687 | |||
688 | # | ||
689 | # SCSI Transports | ||
690 | # | ||
691 | # CONFIG_SCSI_SPI_ATTRS is not set | ||
692 | # CONFIG_SCSI_FC_ATTRS is not set | ||
693 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
694 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
695 | # CONFIG_SCSI_SRP_ATTRS is not set | ||
696 | CONFIG_SCSI_LOWLEVEL=y | ||
697 | # CONFIG_ISCSI_TCP is not set | ||
698 | # CONFIG_SCSI_AHA152X is not set | ||
699 | # CONFIG_SCSI_AIC7XXX_OLD is not set | ||
700 | # CONFIG_SCSI_ADVANSYS is not set | ||
701 | # CONFIG_SCSI_IN2000 is not set | ||
702 | # CONFIG_SCSI_DTC3280 is not set | ||
703 | # CONFIG_SCSI_FUTURE_DOMAIN is not set | ||
704 | # CONFIG_SCSI_GENERIC_NCR5380 is not set | ||
705 | # CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set | ||
706 | # CONFIG_SCSI_PPA is not set | ||
707 | # CONFIG_SCSI_IMM is not set | ||
708 | # CONFIG_SCSI_NCR53C406A is not set | ||
709 | # CONFIG_SCSI_PAS16 is not set | ||
710 | # CONFIG_SCSI_QLOGIC_FAS is not set | ||
711 | # CONFIG_SCSI_SYM53C416 is not set | ||
712 | # CONFIG_SCSI_T128 is not set | ||
713 | # CONFIG_SCSI_DEBUG is not set | ||
576 | # CONFIG_ATA is not set | 714 | # CONFIG_ATA is not set |
577 | 715 | CONFIG_HAVE_PATA_PLATFORM=y | |
578 | # | ||
579 | # Multi-device support (RAID and LVM) | ||
580 | # | ||
581 | # CONFIG_MD is not set | 716 | # CONFIG_MD is not set |
582 | |||
583 | # | ||
584 | # Fusion MPT device support | ||
585 | # | ||
586 | # CONFIG_FUSION is not set | ||
587 | |||
588 | # | ||
589 | # IEEE 1394 (FireWire) support | ||
590 | # | ||
591 | |||
592 | # | ||
593 | # I2O device support | ||
594 | # | ||
595 | |||
596 | # | ||
597 | # Network device support | ||
598 | # | ||
599 | CONFIG_NETDEVICES=y | 717 | CONFIG_NETDEVICES=y |
718 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
600 | # CONFIG_DUMMY is not set | 719 | # CONFIG_DUMMY is not set |
601 | # CONFIG_BONDING is not set | 720 | # CONFIG_BONDING is not set |
721 | # CONFIG_MACVLAN is not set | ||
602 | # CONFIG_EQUALIZER is not set | 722 | # CONFIG_EQUALIZER is not set |
603 | # CONFIG_TUN is not set | 723 | # CONFIG_TUN is not set |
604 | 724 | # CONFIG_VETH is not set | |
605 | # | ||
606 | # ARCnet devices | ||
607 | # | ||
608 | # CONFIG_ARCNET is not set | 725 | # CONFIG_ARCNET is not set |
609 | |||
610 | # | ||
611 | # PHY device support | ||
612 | # | ||
613 | # CONFIG_PHYLIB is not set | 726 | # CONFIG_PHYLIB is not set |
614 | |||
615 | # | ||
616 | # Ethernet (10 or 100Mbit) | ||
617 | # | ||
618 | CONFIG_NET_ETHERNET=y | 727 | CONFIG_NET_ETHERNET=y |
619 | CONFIG_MII=y | 728 | CONFIG_MII=y |
729 | # CONFIG_AX88796 is not set | ||
620 | # CONFIG_NET_VENDOR_3COM is not set | 730 | # CONFIG_NET_VENDOR_3COM is not set |
621 | # CONFIG_NET_VENDOR_SMC is not set | 731 | # CONFIG_NET_VENDOR_SMC is not set |
622 | # CONFIG_SMC91X is not set | 732 | # CONFIG_SMC91X is not set |
623 | CONFIG_DM9000=y | 733 | CONFIG_DM9000=y |
734 | # CONFIG_ENC28J60 is not set | ||
735 | CONFIG_DM9000_DEBUGLEVEL=4 | ||
624 | # CONFIG_NET_VENDOR_RACAL is not set | 736 | # CONFIG_NET_VENDOR_RACAL is not set |
625 | # CONFIG_AT1700 is not set | 737 | # CONFIG_AT1700 is not set |
626 | # CONFIG_DEPCA is not set | 738 | # CONFIG_DEPCA is not set |
627 | # CONFIG_HP100 is not set | 739 | # CONFIG_HP100 is not set |
628 | # CONFIG_NET_ISA is not set | 740 | # CONFIG_NET_ISA is not set |
741 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
742 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
743 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
744 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
629 | # CONFIG_NET_PCI is not set | 745 | # CONFIG_NET_PCI is not set |
746 | # CONFIG_B44 is not set | ||
630 | # CONFIG_NET_POCKET is not set | 747 | # CONFIG_NET_POCKET is not set |
631 | 748 | CONFIG_NETDEV_1000=y | |
632 | # | 749 | # CONFIG_E1000E_ENABLED is not set |
633 | # Ethernet (1000 Mbit) | 750 | CONFIG_NETDEV_10000=y |
634 | # | ||
635 | |||
636 | # | ||
637 | # Ethernet (10000 Mbit) | ||
638 | # | ||
639 | |||
640 | # | ||
641 | # Token Ring devices | ||
642 | # | ||
643 | # CONFIG_TR is not set | 751 | # CONFIG_TR is not set |
644 | 752 | ||
645 | # | 753 | # |
646 | # Wireless LAN (non-hamradio) | 754 | # Wireless LAN |
647 | # | 755 | # |
648 | # CONFIG_NET_RADIO is not set | 756 | # CONFIG_WLAN_PRE80211 is not set |
757 | # CONFIG_WLAN_80211 is not set | ||
758 | # CONFIG_IWLWIFI_LEDS is not set | ||
649 | 759 | ||
650 | # | 760 | # |
651 | # Wan interfaces | 761 | # USB Network Adapters |
652 | # | 762 | # |
763 | # CONFIG_USB_CATC is not set | ||
764 | # CONFIG_USB_KAWETH is not set | ||
765 | # CONFIG_USB_PEGASUS is not set | ||
766 | # CONFIG_USB_RTL8150 is not set | ||
767 | # CONFIG_USB_USBNET is not set | ||
653 | # CONFIG_WAN is not set | 768 | # CONFIG_WAN is not set |
654 | # CONFIG_PLIP is not set | 769 | # CONFIG_PLIP is not set |
655 | # CONFIG_PPP is not set | 770 | # CONFIG_PPP is not set |
656 | # CONFIG_SLIP is not set | 771 | # CONFIG_SLIP is not set |
657 | # CONFIG_SHAPER is not set | ||
658 | # CONFIG_NETCONSOLE is not set | 772 | # CONFIG_NETCONSOLE is not set |
659 | # CONFIG_NETPOLL is not set | 773 | # CONFIG_NETPOLL is not set |
660 | # CONFIG_NET_POLL_CONTROLLER is not set | 774 | # CONFIG_NET_POLL_CONTROLLER is not set |
661 | |||
662 | # | ||
663 | # ISDN subsystem | ||
664 | # | ||
665 | # CONFIG_ISDN is not set | 775 | # CONFIG_ISDN is not set |
666 | 776 | ||
667 | # | 777 | # |
@@ -669,6 +779,7 @@ CONFIG_DM9000=y | |||
669 | # | 779 | # |
670 | CONFIG_INPUT=y | 780 | CONFIG_INPUT=y |
671 | # CONFIG_INPUT_FF_MEMLESS is not set | 781 | # CONFIG_INPUT_FF_MEMLESS is not set |
782 | # CONFIG_INPUT_POLLDEV is not set | ||
672 | 783 | ||
673 | # | 784 | # |
674 | # Userland interfaces | 785 | # Userland interfaces |
@@ -678,7 +789,6 @@ CONFIG_INPUT_MOUSEDEV_PSAUX=y | |||
678 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | 789 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 |
679 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | 790 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 |
680 | # CONFIG_INPUT_JOYDEV is not set | 791 | # CONFIG_INPUT_JOYDEV is not set |
681 | # CONFIG_INPUT_TSDEV is not set | ||
682 | # CONFIG_INPUT_EVDEV is not set | 792 | # CONFIG_INPUT_EVDEV is not set |
683 | # CONFIG_INPUT_EVBUG is not set | 793 | # CONFIG_INPUT_EVBUG is not set |
684 | 794 | ||
@@ -695,12 +805,21 @@ CONFIG_KEYBOARD_ATKBD=y | |||
695 | # CONFIG_KEYBOARD_GPIO is not set | 805 | # CONFIG_KEYBOARD_GPIO is not set |
696 | CONFIG_INPUT_MOUSE=y | 806 | CONFIG_INPUT_MOUSE=y |
697 | CONFIG_MOUSE_PS2=y | 807 | CONFIG_MOUSE_PS2=y |
808 | CONFIG_MOUSE_PS2_ALPS=y | ||
809 | CONFIG_MOUSE_PS2_LOGIPS2PP=y | ||
810 | CONFIG_MOUSE_PS2_SYNAPTICS=y | ||
811 | CONFIG_MOUSE_PS2_LIFEBOOK=y | ||
812 | CONFIG_MOUSE_PS2_TRACKPOINT=y | ||
813 | # CONFIG_MOUSE_PS2_TOUCHKIT is not set | ||
698 | # CONFIG_MOUSE_SERIAL is not set | 814 | # CONFIG_MOUSE_SERIAL is not set |
815 | # CONFIG_MOUSE_APPLETOUCH is not set | ||
699 | # CONFIG_MOUSE_INPORT is not set | 816 | # CONFIG_MOUSE_INPORT is not set |
700 | # CONFIG_MOUSE_LOGIBM is not set | 817 | # CONFIG_MOUSE_LOGIBM is not set |
701 | # CONFIG_MOUSE_PC110PAD is not set | 818 | # CONFIG_MOUSE_PC110PAD is not set |
702 | # CONFIG_MOUSE_VSXXXAA is not set | 819 | # CONFIG_MOUSE_VSXXXAA is not set |
820 | # CONFIG_MOUSE_GPIO is not set | ||
703 | # CONFIG_INPUT_JOYSTICK is not set | 821 | # CONFIG_INPUT_JOYSTICK is not set |
822 | # CONFIG_INPUT_TABLET is not set | ||
704 | # CONFIG_INPUT_TOUCHSCREEN is not set | 823 | # CONFIG_INPUT_TOUCHSCREEN is not set |
705 | # CONFIG_INPUT_MISC is not set | 824 | # CONFIG_INPUT_MISC is not set |
706 | 825 | ||
@@ -721,6 +840,7 @@ CONFIG_VT=y | |||
721 | CONFIG_VT_CONSOLE=y | 840 | CONFIG_VT_CONSOLE=y |
722 | CONFIG_HW_CONSOLE=y | 841 | CONFIG_HW_CONSOLE=y |
723 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | 842 | # CONFIG_VT_HW_CONSOLE_BINDING is not set |
843 | CONFIG_DEVKMEM=y | ||
724 | CONFIG_SERIAL_NONSTANDARD=y | 844 | CONFIG_SERIAL_NONSTANDARD=y |
725 | # CONFIG_COMPUTONE is not set | 845 | # CONFIG_COMPUTONE is not set |
726 | # CONFIG_ROCKETPORT is not set | 846 | # CONFIG_ROCKETPORT is not set |
@@ -728,8 +848,6 @@ CONFIG_SERIAL_NONSTANDARD=y | |||
728 | # CONFIG_DIGIEPCA is not set | 848 | # CONFIG_DIGIEPCA is not set |
729 | # CONFIG_MOXA_INTELLIO is not set | 849 | # CONFIG_MOXA_INTELLIO is not set |
730 | # CONFIG_MOXA_SMARTIO is not set | 850 | # CONFIG_MOXA_SMARTIO is not set |
731 | # CONFIG_MOXA_SMARTIO_NEW is not set | ||
732 | # CONFIG_SYNCLINKMP is not set | ||
733 | # CONFIG_N_HDLC is not set | 851 | # CONFIG_N_HDLC is not set |
734 | # CONFIG_RISCOM8 is not set | 852 | # CONFIG_RISCOM8 is not set |
735 | # CONFIG_SPECIALIX is not set | 853 | # CONFIG_SPECIALIX is not set |
@@ -758,8 +876,12 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y | |||
758 | # | 876 | # |
759 | # Non-8250 serial port support | 877 | # Non-8250 serial port support |
760 | # | 878 | # |
879 | CONFIG_SERIAL_SAMSUNG=y | ||
880 | # CONFIG_SERIAL_SAMSUNG_DEBUG is not set | ||
881 | CONFIG_SERIAL_SAMSUNG_CONSOLE=y | ||
761 | CONFIG_SERIAL_S3C2410=y | 882 | CONFIG_SERIAL_S3C2410=y |
762 | CONFIG_SERIAL_S3C2410_CONSOLE=y | 883 | CONFIG_SERIAL_S3C2412=y |
884 | CONFIG_SERIAL_S3C2440=y | ||
763 | CONFIG_SERIAL_CORE=y | 885 | CONFIG_SERIAL_CORE=y |
764 | CONFIG_SERIAL_CORE_CONSOLE=y | 886 | CONFIG_SERIAL_CORE_CONSOLE=y |
765 | CONFIG_UNIX98_PTYS=y | 887 | CONFIG_UNIX98_PTYS=y |
@@ -768,89 +890,50 @@ CONFIG_LEGACY_PTY_COUNT=256 | |||
768 | CONFIG_PRINTER=y | 890 | CONFIG_PRINTER=y |
769 | # CONFIG_LP_CONSOLE is not set | 891 | # CONFIG_LP_CONSOLE is not set |
770 | CONFIG_PPDEV=y | 892 | CONFIG_PPDEV=y |
771 | # CONFIG_TIPAR is not set | ||
772 | |||
773 | # | ||
774 | # IPMI | ||
775 | # | ||
776 | # CONFIG_IPMI_HANDLER is not set | 893 | # CONFIG_IPMI_HANDLER is not set |
777 | |||
778 | # | ||
779 | # Watchdog Cards | ||
780 | # | ||
781 | CONFIG_WATCHDOG=y | ||
782 | # CONFIG_WATCHDOG_NOWAYOUT is not set | ||
783 | |||
784 | # | ||
785 | # Watchdog Device Drivers | ||
786 | # | ||
787 | # CONFIG_SOFT_WATCHDOG is not set | ||
788 | CONFIG_S3C2410_WATCHDOG=y | ||
789 | |||
790 | # | ||
791 | # ISA-based Watchdog Cards | ||
792 | # | ||
793 | # CONFIG_PCWATCHDOG is not set | ||
794 | # CONFIG_MIXCOMWD is not set | ||
795 | # CONFIG_WDT is not set | ||
796 | |||
797 | # | ||
798 | # USB-based Watchdog Cards | ||
799 | # | ||
800 | # CONFIG_USBPCWATCHDOG is not set | ||
801 | CONFIG_HW_RANDOM=y | 894 | CONFIG_HW_RANDOM=y |
802 | # CONFIG_NVRAM is not set | 895 | # CONFIG_NVRAM is not set |
803 | # CONFIG_DTLK is not set | 896 | # CONFIG_DTLK is not set |
804 | # CONFIG_R3964 is not set | 897 | # CONFIG_R3964 is not set |
805 | # CONFIG_RAW_DRIVER is not set | 898 | # CONFIG_RAW_DRIVER is not set |
806 | |||
807 | # | ||
808 | # TPM devices | ||
809 | # | ||
810 | # CONFIG_TCG_TPM is not set | 899 | # CONFIG_TCG_TPM is not set |
811 | 900 | CONFIG_DEVPORT=y | |
812 | # | ||
813 | # I2C support | ||
814 | # | ||
815 | CONFIG_I2C=y | 901 | CONFIG_I2C=y |
902 | CONFIG_I2C_BOARDINFO=y | ||
816 | CONFIG_I2C_CHARDEV=m | 903 | CONFIG_I2C_CHARDEV=m |
817 | 904 | CONFIG_I2C_ALGOBIT=y | |
818 | # | ||
819 | # I2C Algorithms | ||
820 | # | ||
821 | CONFIG_I2C_ALGOBIT=m | ||
822 | # CONFIG_I2C_ALGOPCF is not set | ||
823 | # CONFIG_I2C_ALGOPCA is not set | ||
824 | 905 | ||
825 | # | 906 | # |
826 | # I2C Hardware Bus support | 907 | # I2C Hardware Bus support |
827 | # | 908 | # |
828 | # CONFIG_I2C_ELEKTOR is not set | 909 | # CONFIG_I2C_ELEKTOR is not set |
910 | # CONFIG_I2C_GPIO is not set | ||
829 | # CONFIG_I2C_OCORES is not set | 911 | # CONFIG_I2C_OCORES is not set |
830 | # CONFIG_I2C_PARPORT is not set | 912 | # CONFIG_I2C_PARPORT is not set |
831 | # CONFIG_I2C_PARPORT_LIGHT is not set | 913 | # CONFIG_I2C_PARPORT_LIGHT is not set |
832 | CONFIG_I2C_S3C2410=y | 914 | CONFIG_I2C_S3C2410=y |
915 | CONFIG_I2C_SIMTEC=y | ||
916 | # CONFIG_I2C_TAOS_EVM is not set | ||
833 | # CONFIG_I2C_STUB is not set | 917 | # CONFIG_I2C_STUB is not set |
918 | # CONFIG_I2C_TINY_USB is not set | ||
834 | # CONFIG_I2C_PCA_ISA is not set | 919 | # CONFIG_I2C_PCA_ISA is not set |
920 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
835 | 921 | ||
836 | # | 922 | # |
837 | # Miscellaneous I2C Chip support | 923 | # Miscellaneous I2C Chip support |
838 | # | 924 | # |
839 | # CONFIG_SENSORS_DS1337 is not set | 925 | # CONFIG_DS1682 is not set |
840 | # CONFIG_SENSORS_DS1374 is not set | ||
841 | CONFIG_SENSORS_EEPROM=m | 926 | CONFIG_SENSORS_EEPROM=m |
842 | # CONFIG_SENSORS_PCF8574 is not set | 927 | # CONFIG_SENSORS_PCF8574 is not set |
843 | # CONFIG_SENSORS_PCA9539 is not set | 928 | # CONFIG_PCF8575 is not set |
844 | # CONFIG_SENSORS_PCF8591 is not set | 929 | # CONFIG_SENSORS_PCF8591 is not set |
930 | # CONFIG_TPS65010 is not set | ||
845 | # CONFIG_SENSORS_MAX6875 is not set | 931 | # CONFIG_SENSORS_MAX6875 is not set |
932 | # CONFIG_SENSORS_TSL2550 is not set | ||
846 | # CONFIG_I2C_DEBUG_CORE is not set | 933 | # CONFIG_I2C_DEBUG_CORE is not set |
847 | # CONFIG_I2C_DEBUG_ALGO is not set | 934 | # CONFIG_I2C_DEBUG_ALGO is not set |
848 | # CONFIG_I2C_DEBUG_BUS is not set | 935 | # CONFIG_I2C_DEBUG_BUS is not set |
849 | # CONFIG_I2C_DEBUG_CHIP is not set | 936 | # CONFIG_I2C_DEBUG_CHIP is not set |
850 | |||
851 | # | ||
852 | # SPI support | ||
853 | # | ||
854 | CONFIG_SPI=y | 937 | CONFIG_SPI=y |
855 | # CONFIG_SPI_DEBUG is not set | 938 | # CONFIG_SPI_DEBUG is not set |
856 | CONFIG_SPI_MASTER=y | 939 | CONFIG_SPI_MASTER=y |
@@ -860,6 +943,7 @@ CONFIG_SPI_MASTER=y | |||
860 | # | 943 | # |
861 | CONFIG_SPI_BITBANG=m | 944 | CONFIG_SPI_BITBANG=m |
862 | # CONFIG_SPI_BUTTERFLY is not set | 945 | # CONFIG_SPI_BUTTERFLY is not set |
946 | # CONFIG_SPI_LM70_LLP is not set | ||
863 | CONFIG_SPI_S3C24XX=m | 947 | CONFIG_SPI_S3C24XX=m |
864 | CONFIG_SPI_S3C24XX_GPIO=m | 948 | CONFIG_SPI_S3C24XX_GPIO=m |
865 | 949 | ||
@@ -867,30 +951,43 @@ CONFIG_SPI_S3C24XX_GPIO=m | |||
867 | # SPI Protocol Masters | 951 | # SPI Protocol Masters |
868 | # | 952 | # |
869 | # CONFIG_SPI_AT25 is not set | 953 | # CONFIG_SPI_AT25 is not set |
954 | # CONFIG_SPI_SPIDEV is not set | ||
955 | # CONFIG_SPI_TLE62X0 is not set | ||
956 | CONFIG_HAVE_GPIO_LIB=y | ||
870 | 957 | ||
871 | # | 958 | # |
872 | # Dallas's 1-wire bus | 959 | # GPIO Support |
873 | # | 960 | # |
874 | # CONFIG_W1 is not set | 961 | # CONFIG_DEBUG_GPIO is not set |
875 | 962 | ||
876 | # | 963 | # |
877 | # Hardware Monitoring support | 964 | # I2C GPIO expanders: |
965 | # | ||
966 | # CONFIG_GPIO_PCA953X is not set | ||
967 | # CONFIG_GPIO_PCF857X is not set | ||
968 | |||
878 | # | 969 | # |
970 | # SPI GPIO expanders: | ||
971 | # | ||
972 | # CONFIG_GPIO_MCP23S08 is not set | ||
973 | # CONFIG_W1 is not set | ||
974 | # CONFIG_POWER_SUPPLY is not set | ||
879 | CONFIG_HWMON=y | 975 | CONFIG_HWMON=y |
880 | CONFIG_HWMON_VID=m | 976 | CONFIG_HWMON_VID=m |
881 | # CONFIG_SENSORS_ABITUGURU is not set | 977 | # CONFIG_SENSORS_AD7418 is not set |
882 | # CONFIG_SENSORS_ADM1021 is not set | 978 | # CONFIG_SENSORS_ADM1021 is not set |
883 | # CONFIG_SENSORS_ADM1025 is not set | 979 | # CONFIG_SENSORS_ADM1025 is not set |
884 | # CONFIG_SENSORS_ADM1026 is not set | 980 | # CONFIG_SENSORS_ADM1026 is not set |
885 | # CONFIG_SENSORS_ADM1029 is not set | 981 | # CONFIG_SENSORS_ADM1029 is not set |
886 | # CONFIG_SENSORS_ADM1031 is not set | 982 | # CONFIG_SENSORS_ADM1031 is not set |
887 | # CONFIG_SENSORS_ADM9240 is not set | 983 | # CONFIG_SENSORS_ADM9240 is not set |
888 | # CONFIG_SENSORS_ASB100 is not set | 984 | # CONFIG_SENSORS_ADT7470 is not set |
985 | # CONFIG_SENSORS_ADT7473 is not set | ||
889 | # CONFIG_SENSORS_ATXP1 is not set | 986 | # CONFIG_SENSORS_ATXP1 is not set |
890 | # CONFIG_SENSORS_DS1621 is not set | 987 | # CONFIG_SENSORS_DS1621 is not set |
891 | # CONFIG_SENSORS_F71805F is not set | 988 | # CONFIG_SENSORS_F71805F is not set |
892 | # CONFIG_SENSORS_FSCHER is not set | 989 | # CONFIG_SENSORS_F71882FG is not set |
893 | # CONFIG_SENSORS_FSCPOS is not set | 990 | # CONFIG_SENSORS_F75375S is not set |
894 | # CONFIG_SENSORS_GL518SM is not set | 991 | # CONFIG_SENSORS_GL518SM is not set |
895 | # CONFIG_SENSORS_GL520SM is not set | 992 | # CONFIG_SENSORS_GL520SM is not set |
896 | # CONFIG_SENSORS_IT87 is not set | 993 | # CONFIG_SENSORS_IT87 is not set |
@@ -905,72 +1002,95 @@ CONFIG_SENSORS_LM85=m | |||
905 | # CONFIG_SENSORS_LM87 is not set | 1002 | # CONFIG_SENSORS_LM87 is not set |
906 | # CONFIG_SENSORS_LM90 is not set | 1003 | # CONFIG_SENSORS_LM90 is not set |
907 | # CONFIG_SENSORS_LM92 is not set | 1004 | # CONFIG_SENSORS_LM92 is not set |
1005 | # CONFIG_SENSORS_LM93 is not set | ||
908 | # CONFIG_SENSORS_MAX1619 is not set | 1006 | # CONFIG_SENSORS_MAX1619 is not set |
1007 | # CONFIG_SENSORS_MAX6650 is not set | ||
909 | # CONFIG_SENSORS_PC87360 is not set | 1008 | # CONFIG_SENSORS_PC87360 is not set |
910 | # CONFIG_SENSORS_PC87427 is not set | 1009 | # CONFIG_SENSORS_PC87427 is not set |
1010 | # CONFIG_SENSORS_DME1737 is not set | ||
911 | # CONFIG_SENSORS_SMSC47M1 is not set | 1011 | # CONFIG_SENSORS_SMSC47M1 is not set |
912 | # CONFIG_SENSORS_SMSC47M192 is not set | 1012 | # CONFIG_SENSORS_SMSC47M192 is not set |
913 | # CONFIG_SENSORS_SMSC47B397 is not set | 1013 | # CONFIG_SENSORS_SMSC47B397 is not set |
1014 | # CONFIG_SENSORS_ADS7828 is not set | ||
1015 | # CONFIG_SENSORS_THMC50 is not set | ||
914 | # CONFIG_SENSORS_VT1211 is not set | 1016 | # CONFIG_SENSORS_VT1211 is not set |
915 | # CONFIG_SENSORS_W83781D is not set | 1017 | # CONFIG_SENSORS_W83781D is not set |
916 | # CONFIG_SENSORS_W83791D is not set | 1018 | # CONFIG_SENSORS_W83791D is not set |
917 | # CONFIG_SENSORS_W83792D is not set | 1019 | # CONFIG_SENSORS_W83792D is not set |
918 | # CONFIG_SENSORS_W83793 is not set | 1020 | # CONFIG_SENSORS_W83793 is not set |
919 | # CONFIG_SENSORS_W83L785TS is not set | 1021 | # CONFIG_SENSORS_W83L785TS is not set |
1022 | # CONFIG_SENSORS_W83L786NG is not set | ||
920 | # CONFIG_SENSORS_W83627HF is not set | 1023 | # CONFIG_SENSORS_W83627HF is not set |
921 | # CONFIG_SENSORS_W83627EHF is not set | 1024 | # CONFIG_SENSORS_W83627EHF is not set |
922 | # CONFIG_HWMON_DEBUG_CHIP is not set | 1025 | # CONFIG_HWMON_DEBUG_CHIP is not set |
1026 | CONFIG_WATCHDOG=y | ||
1027 | # CONFIG_WATCHDOG_NOWAYOUT is not set | ||
923 | 1028 | ||
924 | # | 1029 | # |
925 | # Misc devices | 1030 | # Watchdog Device Drivers |
926 | # | 1031 | # |
1032 | # CONFIG_SOFT_WATCHDOG is not set | ||
1033 | CONFIG_S3C2410_WATCHDOG=y | ||
927 | 1034 | ||
928 | # | 1035 | # |
929 | # Multifunction device drivers | 1036 | # ISA-based Watchdog Cards |
930 | # | 1037 | # |
931 | # CONFIG_MFD_SM501 is not set | 1038 | # CONFIG_PCWATCHDOG is not set |
1039 | # CONFIG_MIXCOMWD is not set | ||
1040 | # CONFIG_WDT is not set | ||
932 | 1041 | ||
933 | # | 1042 | # |
934 | # LED devices | 1043 | # USB-based Watchdog Cards |
935 | # | 1044 | # |
936 | CONFIG_NEW_LEDS=y | 1045 | # CONFIG_USBPCWATCHDOG is not set |
937 | CONFIG_LEDS_CLASS=m | ||
938 | 1046 | ||
939 | # | 1047 | # |
940 | # LED drivers | 1048 | # Sonics Silicon Backplane |
941 | # | 1049 | # |
942 | CONFIG_LEDS_S3C24XX=m | 1050 | CONFIG_SSB_POSSIBLE=y |
943 | CONFIG_LEDS_H1940=m | 1051 | # CONFIG_SSB is not set |
944 | 1052 | ||
945 | # | 1053 | # |
946 | # LED Triggers | 1054 | # Multifunction device drivers |
947 | # | 1055 | # |
948 | CONFIG_LEDS_TRIGGERS=y | 1056 | CONFIG_MFD_SM501=y |
949 | CONFIG_LEDS_TRIGGER_TIMER=m | 1057 | # CONFIG_MFD_ASIC3 is not set |
950 | # CONFIG_LEDS_TRIGGER_IDE_DISK is not set | 1058 | # CONFIG_HTC_EGPIO is not set |
951 | CONFIG_LEDS_TRIGGER_HEARTBEAT=m | 1059 | # CONFIG_HTC_PASIC3 is not set |
952 | 1060 | ||
953 | # | 1061 | # |
954 | # Multimedia devices | 1062 | # Multimedia devices |
955 | # | 1063 | # |
1064 | |||
1065 | # | ||
1066 | # Multimedia core support | ||
1067 | # | ||
956 | # CONFIG_VIDEO_DEV is not set | 1068 | # CONFIG_VIDEO_DEV is not set |
1069 | # CONFIG_DVB_CORE is not set | ||
1070 | # CONFIG_VIDEO_MEDIA is not set | ||
957 | 1071 | ||
958 | # | 1072 | # |
959 | # Digital Video Broadcasting Devices | 1073 | # Multimedia drivers |
960 | # | 1074 | # |
961 | # CONFIG_DVB is not set | 1075 | # CONFIG_DAB is not set |
962 | # CONFIG_USB_DABUSB is not set | ||
963 | 1076 | ||
964 | # | 1077 | # |
965 | # Graphics support | 1078 | # Graphics support |
966 | # | 1079 | # |
967 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | 1080 | # CONFIG_VGASTATE is not set |
1081 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
968 | CONFIG_FB=y | 1082 | CONFIG_FB=y |
969 | CONFIG_FIRMWARE_EDID=y | 1083 | CONFIG_FIRMWARE_EDID=y |
970 | # CONFIG_FB_DDC is not set | 1084 | # CONFIG_FB_DDC is not set |
971 | CONFIG_FB_CFB_FILLRECT=y | 1085 | CONFIG_FB_CFB_FILLRECT=y |
972 | CONFIG_FB_CFB_COPYAREA=y | 1086 | CONFIG_FB_CFB_COPYAREA=y |
973 | CONFIG_FB_CFB_IMAGEBLIT=y | 1087 | CONFIG_FB_CFB_IMAGEBLIT=y |
1088 | # CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set | ||
1089 | # CONFIG_FB_SYS_FILLRECT is not set | ||
1090 | # CONFIG_FB_SYS_COPYAREA is not set | ||
1091 | # CONFIG_FB_SYS_IMAGEBLIT is not set | ||
1092 | # CONFIG_FB_FOREIGN_ENDIAN is not set | ||
1093 | # CONFIG_FB_SYS_FOPS is not set | ||
974 | # CONFIG_FB_SVGALIB is not set | 1094 | # CONFIG_FB_SVGALIB is not set |
975 | # CONFIG_FB_MACMODES is not set | 1095 | # CONFIG_FB_MACMODES is not set |
976 | # CONFIG_FB_BACKLIGHT is not set | 1096 | # CONFIG_FB_BACKLIGHT is not set |
@@ -978,12 +1098,19 @@ CONFIG_FB_MODE_HELPERS=y | |||
978 | # CONFIG_FB_TILEBLITTING is not set | 1098 | # CONFIG_FB_TILEBLITTING is not set |
979 | 1099 | ||
980 | # | 1100 | # |
981 | # Frambuffer hardware drivers | 1101 | # Frame buffer hardware drivers |
982 | # | 1102 | # |
983 | # CONFIG_FB_S1D13XXX is not set | 1103 | # CONFIG_FB_S1D13XXX is not set |
984 | CONFIG_FB_S3C2410=y | 1104 | CONFIG_FB_S3C2410=y |
985 | # CONFIG_FB_S3C2410_DEBUG is not set | 1105 | # CONFIG_FB_S3C2410_DEBUG is not set |
1106 | CONFIG_FB_SM501=y | ||
986 | # CONFIG_FB_VIRTUAL is not set | 1107 | # CONFIG_FB_VIRTUAL is not set |
1108 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
1109 | |||
1110 | # | ||
1111 | # Display device support | ||
1112 | # | ||
1113 | # CONFIG_DISPLAY_SUPPORT is not set | ||
987 | 1114 | ||
988 | # | 1115 | # |
989 | # Console display driver support | 1116 | # Console display driver support |
@@ -992,40 +1119,45 @@ CONFIG_FB_S3C2410=y | |||
992 | # CONFIG_MDA_CONSOLE is not set | 1119 | # CONFIG_MDA_CONSOLE is not set |
993 | CONFIG_DUMMY_CONSOLE=y | 1120 | CONFIG_DUMMY_CONSOLE=y |
994 | CONFIG_FRAMEBUFFER_CONSOLE=y | 1121 | CONFIG_FRAMEBUFFER_CONSOLE=y |
1122 | # CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set | ||
995 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set | 1123 | # CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set |
996 | # CONFIG_FONTS is not set | 1124 | # CONFIG_FONTS is not set |
997 | CONFIG_FONT_8x8=y | 1125 | CONFIG_FONT_8x8=y |
998 | CONFIG_FONT_8x16=y | 1126 | CONFIG_FONT_8x16=y |
999 | |||
1000 | # | ||
1001 | # Logo configuration | ||
1002 | # | ||
1003 | # CONFIG_LOGO is not set | 1127 | # CONFIG_LOGO is not set |
1004 | 1128 | ||
1005 | # | 1129 | # |
1006 | # Sound | 1130 | # Sound |
1007 | # | 1131 | # |
1008 | # CONFIG_SOUND is not set | 1132 | # CONFIG_SOUND is not set |
1133 | CONFIG_HID_SUPPORT=y | ||
1134 | CONFIG_HID=y | ||
1135 | # CONFIG_HID_DEBUG is not set | ||
1136 | # CONFIG_HIDRAW is not set | ||
1009 | 1137 | ||
1010 | # | 1138 | # |
1011 | # HID Devices | 1139 | # USB Input Devices |
1012 | # | 1140 | # |
1013 | CONFIG_HID=y | 1141 | # CONFIG_USB_HID is not set |
1014 | # CONFIG_HID_DEBUG is not set | ||
1015 | 1142 | ||
1016 | # | 1143 | # |
1017 | # USB support | 1144 | # USB HID Boot Protocol drivers |
1018 | # | 1145 | # |
1146 | # CONFIG_USB_KBD is not set | ||
1147 | # CONFIG_USB_MOUSE is not set | ||
1148 | CONFIG_USB_SUPPORT=y | ||
1019 | CONFIG_USB_ARCH_HAS_HCD=y | 1149 | CONFIG_USB_ARCH_HAS_HCD=y |
1020 | CONFIG_USB_ARCH_HAS_OHCI=y | 1150 | CONFIG_USB_ARCH_HAS_OHCI=y |
1021 | # CONFIG_USB_ARCH_HAS_EHCI is not set | 1151 | # CONFIG_USB_ARCH_HAS_EHCI is not set |
1022 | CONFIG_USB=y | 1152 | CONFIG_USB=y |
1023 | # CONFIG_USB_DEBUG is not set | 1153 | # CONFIG_USB_DEBUG is not set |
1154 | # CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set | ||
1024 | 1155 | ||
1025 | # | 1156 | # |
1026 | # Miscellaneous USB options | 1157 | # Miscellaneous USB options |
1027 | # | 1158 | # |
1028 | CONFIG_USB_DEVICEFS=y | 1159 | CONFIG_USB_DEVICEFS=y |
1160 | CONFIG_USB_DEVICE_CLASS=y | ||
1029 | # CONFIG_USB_DYNAMIC_MINORS is not set | 1161 | # CONFIG_USB_DYNAMIC_MINORS is not set |
1030 | # CONFIG_USB_SUSPEND is not set | 1162 | # CONFIG_USB_SUSPEND is not set |
1031 | # CONFIG_USB_OTG is not set | 1163 | # CONFIG_USB_OTG is not set |
@@ -1033,18 +1165,22 @@ CONFIG_USB_DEVICEFS=y | |||
1033 | # | 1165 | # |
1034 | # USB Host Controller Drivers | 1166 | # USB Host Controller Drivers |
1035 | # | 1167 | # |
1168 | # CONFIG_USB_C67X00_HCD is not set | ||
1036 | # CONFIG_USB_ISP116X_HCD is not set | 1169 | # CONFIG_USB_ISP116X_HCD is not set |
1170 | # CONFIG_USB_ISP1760_HCD is not set | ||
1037 | CONFIG_USB_OHCI_HCD=y | 1171 | CONFIG_USB_OHCI_HCD=y |
1038 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set | 1172 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set |
1039 | # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set | 1173 | # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set |
1040 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | 1174 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y |
1041 | # CONFIG_USB_SL811_HCD is not set | 1175 | # CONFIG_USB_SL811_HCD is not set |
1176 | # CONFIG_USB_R8A66597_HCD is not set | ||
1042 | 1177 | ||
1043 | # | 1178 | # |
1044 | # USB Device Class drivers | 1179 | # USB Device Class drivers |
1045 | # | 1180 | # |
1046 | # CONFIG_USB_ACM is not set | 1181 | CONFIG_USB_ACM=m |
1047 | # CONFIG_USB_PRINTER is not set | 1182 | CONFIG_USB_PRINTER=m |
1183 | CONFIG_USB_WDM=m | ||
1048 | 1184 | ||
1049 | # | 1185 | # |
1050 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | 1186 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' |
@@ -1053,57 +1189,78 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y | |||
1053 | # | 1189 | # |
1054 | # may also be needed; see USB_STORAGE Help for more information | 1190 | # may also be needed; see USB_STORAGE Help for more information |
1055 | # | 1191 | # |
1056 | # CONFIG_USB_LIBUSUAL is not set | 1192 | CONFIG_USB_STORAGE=m |
1057 | 1193 | # CONFIG_USB_STORAGE_DEBUG is not set | |
1058 | # | 1194 | # CONFIG_USB_STORAGE_DATAFAB is not set |
1059 | # USB Input Devices | 1195 | # CONFIG_USB_STORAGE_FREECOM is not set |
1060 | # | 1196 | # CONFIG_USB_STORAGE_ISD200 is not set |
1061 | # CONFIG_USB_HID is not set | 1197 | # CONFIG_USB_STORAGE_DPCM is not set |
1062 | 1198 | # CONFIG_USB_STORAGE_USBAT is not set | |
1063 | # | 1199 | # CONFIG_USB_STORAGE_SDDR09 is not set |
1064 | # USB HID Boot Protocol drivers | 1200 | # CONFIG_USB_STORAGE_SDDR55 is not set |
1065 | # | 1201 | # CONFIG_USB_STORAGE_JUMPSHOT is not set |
1066 | # CONFIG_USB_KBD is not set | 1202 | # CONFIG_USB_STORAGE_ALAUDA is not set |
1067 | # CONFIG_USB_MOUSE is not set | 1203 | # CONFIG_USB_STORAGE_ONETOUCH is not set |
1068 | # CONFIG_USB_AIPTEK is not set | 1204 | # CONFIG_USB_STORAGE_KARMA is not set |
1069 | # CONFIG_USB_WACOM is not set | 1205 | # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set |
1070 | # CONFIG_USB_ACECAD is not set | 1206 | CONFIG_USB_LIBUSUAL=y |
1071 | # CONFIG_USB_KBTAB is not set | ||
1072 | # CONFIG_USB_POWERMATE is not set | ||
1073 | # CONFIG_USB_TOUCHSCREEN is not set | ||
1074 | # CONFIG_USB_YEALINK is not set | ||
1075 | # CONFIG_USB_XPAD is not set | ||
1076 | # CONFIG_USB_ATI_REMOTE is not set | ||
1077 | # CONFIG_USB_ATI_REMOTE2 is not set | ||
1078 | # CONFIG_USB_KEYSPAN_REMOTE is not set | ||
1079 | # CONFIG_USB_APPLETOUCH is not set | ||
1080 | # CONFIG_USB_GTCO is not set | ||
1081 | 1207 | ||
1082 | # | 1208 | # |
1083 | # USB Imaging devices | 1209 | # USB Imaging devices |
1084 | # | 1210 | # |
1085 | # CONFIG_USB_MDC800 is not set | 1211 | # CONFIG_USB_MDC800 is not set |
1086 | 1212 | # CONFIG_USB_MICROTEK is not set | |
1087 | # | ||
1088 | # USB Network Adapters | ||
1089 | # | ||
1090 | # CONFIG_USB_CATC is not set | ||
1091 | # CONFIG_USB_KAWETH is not set | ||
1092 | # CONFIG_USB_PEGASUS is not set | ||
1093 | # CONFIG_USB_RTL8150 is not set | ||
1094 | # CONFIG_USB_USBNET_MII is not set | ||
1095 | # CONFIG_USB_USBNET is not set | ||
1096 | CONFIG_USB_MON=y | 1213 | CONFIG_USB_MON=y |
1097 | 1214 | ||
1098 | # | 1215 | # |
1099 | # USB port drivers | 1216 | # USB port drivers |
1100 | # | 1217 | # |
1101 | # CONFIG_USB_USS720 is not set | 1218 | # CONFIG_USB_USS720 is not set |
1102 | 1219 | CONFIG_USB_SERIAL=y | |
1103 | # | 1220 | # CONFIG_USB_SERIAL_CONSOLE is not set |
1104 | # USB Serial Converter support | 1221 | # CONFIG_USB_EZUSB is not set |
1105 | # | 1222 | CONFIG_USB_SERIAL_GENERIC=y |
1106 | # CONFIG_USB_SERIAL is not set | 1223 | # CONFIG_USB_SERIAL_AIRCABLE is not set |
1224 | # CONFIG_USB_SERIAL_AIRPRIME is not set | ||
1225 | # CONFIG_USB_SERIAL_ARK3116 is not set | ||
1226 | # CONFIG_USB_SERIAL_BELKIN is not set | ||
1227 | # CONFIG_USB_SERIAL_CH341 is not set | ||
1228 | # CONFIG_USB_SERIAL_WHITEHEAT is not set | ||
1229 | # CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set | ||
1230 | # CONFIG_USB_SERIAL_CP2101 is not set | ||
1231 | # CONFIG_USB_SERIAL_CYPRESS_M8 is not set | ||
1232 | # CONFIG_USB_SERIAL_EMPEG is not set | ||
1233 | CONFIG_USB_SERIAL_FTDI_SIO=y | ||
1234 | # CONFIG_USB_SERIAL_FUNSOFT is not set | ||
1235 | # CONFIG_USB_SERIAL_VISOR is not set | ||
1236 | # CONFIG_USB_SERIAL_IPAQ is not set | ||
1237 | # CONFIG_USB_SERIAL_IR is not set | ||
1238 | # CONFIG_USB_SERIAL_EDGEPORT is not set | ||
1239 | # CONFIG_USB_SERIAL_EDGEPORT_TI is not set | ||
1240 | # CONFIG_USB_SERIAL_GARMIN is not set | ||
1241 | # CONFIG_USB_SERIAL_IPW is not set | ||
1242 | # CONFIG_USB_SERIAL_IUU is not set | ||
1243 | # CONFIG_USB_SERIAL_KEYSPAN_PDA is not set | ||
1244 | # CONFIG_USB_SERIAL_KEYSPAN is not set | ||
1245 | # CONFIG_USB_SERIAL_KLSI is not set | ||
1246 | # CONFIG_USB_SERIAL_KOBIL_SCT is not set | ||
1247 | # CONFIG_USB_SERIAL_MCT_U232 is not set | ||
1248 | # CONFIG_USB_SERIAL_MOS7720 is not set | ||
1249 | # CONFIG_USB_SERIAL_MOS7840 is not set | ||
1250 | # CONFIG_USB_SERIAL_MOTOROLA is not set | ||
1251 | CONFIG_USB_SERIAL_NAVMAN=m | ||
1252 | CONFIG_USB_SERIAL_PL2303=y | ||
1253 | # CONFIG_USB_SERIAL_OTI6858 is not set | ||
1254 | # CONFIG_USB_SERIAL_SPCP8X5 is not set | ||
1255 | # CONFIG_USB_SERIAL_HP4X is not set | ||
1256 | # CONFIG_USB_SERIAL_SAFE is not set | ||
1257 | # CONFIG_USB_SERIAL_SIERRAWIRELESS is not set | ||
1258 | # CONFIG_USB_SERIAL_TI is not set | ||
1259 | # CONFIG_USB_SERIAL_CYBERJACK is not set | ||
1260 | # CONFIG_USB_SERIAL_XIRCOM is not set | ||
1261 | CONFIG_USB_SERIAL_OPTION=m | ||
1262 | # CONFIG_USB_SERIAL_OMNINET is not set | ||
1263 | # CONFIG_USB_SERIAL_DEBUG is not set | ||
1107 | 1264 | ||
1108 | # | 1265 | # |
1109 | # USB Miscellaneous drivers | 1266 | # USB Miscellaneous drivers |
@@ -1116,35 +1273,38 @@ CONFIG_USB_MON=y | |||
1116 | # CONFIG_USB_LEGOTOWER is not set | 1273 | # CONFIG_USB_LEGOTOWER is not set |
1117 | # CONFIG_USB_LCD is not set | 1274 | # CONFIG_USB_LCD is not set |
1118 | # CONFIG_USB_BERRY_CHARGE is not set | 1275 | # CONFIG_USB_BERRY_CHARGE is not set |
1119 | # CONFIG_USB_LED is not set | 1276 | CONFIG_USB_LED=m |
1120 | # CONFIG_USB_CYPRESS_CY7C63 is not set | 1277 | # CONFIG_USB_CYPRESS_CY7C63 is not set |
1121 | # CONFIG_USB_CYTHERM is not set | 1278 | # CONFIG_USB_CYTHERM is not set |
1122 | # CONFIG_USB_PHIDGET is not set | 1279 | # CONFIG_USB_PHIDGET is not set |
1123 | # CONFIG_USB_IDMOUSE is not set | 1280 | # CONFIG_USB_IDMOUSE is not set |
1124 | # CONFIG_USB_FTDI_ELAN is not set | 1281 | # CONFIG_USB_FTDI_ELAN is not set |
1125 | # CONFIG_USB_APPLEDISPLAY is not set | 1282 | # CONFIG_USB_APPLEDISPLAY is not set |
1126 | # CONFIG_USB_LD is not set | 1283 | CONFIG_USB_LD=m |
1127 | # CONFIG_USB_TRANCEVIBRATOR is not set | 1284 | # CONFIG_USB_TRANCEVIBRATOR is not set |
1128 | # CONFIG_USB_IOWARRIOR is not set | 1285 | # CONFIG_USB_IOWARRIOR is not set |
1129 | # CONFIG_USB_TEST is not set | 1286 | # CONFIG_USB_TEST is not set |
1130 | 1287 | # CONFIG_USB_ISIGHTFW is not set | |
1131 | # | ||
1132 | # USB DSL modem support | ||
1133 | # | ||
1134 | |||
1135 | # | ||
1136 | # USB Gadget Support | ||
1137 | # | ||
1138 | # CONFIG_USB_GADGET is not set | 1288 | # CONFIG_USB_GADGET is not set |
1289 | # CONFIG_MMC is not set | ||
1290 | CONFIG_NEW_LEDS=y | ||
1291 | CONFIG_LEDS_CLASS=m | ||
1139 | 1292 | ||
1140 | # | 1293 | # |
1141 | # MMC/SD Card support | 1294 | # LED drivers |
1142 | # | 1295 | # |
1143 | # CONFIG_MMC is not set | 1296 | CONFIG_LEDS_S3C24XX=m |
1297 | CONFIG_LEDS_H1940=m | ||
1298 | # CONFIG_LEDS_GPIO is not set | ||
1144 | 1299 | ||
1145 | # | 1300 | # |
1146 | # Real Time Clock | 1301 | # LED Triggers |
1147 | # | 1302 | # |
1303 | CONFIG_LEDS_TRIGGERS=y | ||
1304 | CONFIG_LEDS_TRIGGER_TIMER=m | ||
1305 | # CONFIG_LEDS_TRIGGER_IDE_DISK is not set | ||
1306 | CONFIG_LEDS_TRIGGER_HEARTBEAT=m | ||
1307 | # CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set | ||
1148 | CONFIG_RTC_LIB=y | 1308 | CONFIG_RTC_LIB=y |
1149 | CONFIG_RTC_CLASS=y | 1309 | CONFIG_RTC_CLASS=y |
1150 | CONFIG_RTC_HCTOSYS=y | 1310 | CONFIG_RTC_HCTOSYS=y |
@@ -1158,61 +1318,86 @@ CONFIG_RTC_INTF_SYSFS=y | |||
1158 | CONFIG_RTC_INTF_PROC=y | 1318 | CONFIG_RTC_INTF_PROC=y |
1159 | CONFIG_RTC_INTF_DEV=y | 1319 | CONFIG_RTC_INTF_DEV=y |
1160 | # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set | 1320 | # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set |
1321 | # CONFIG_RTC_DRV_TEST is not set | ||
1161 | 1322 | ||
1162 | # | 1323 | # |
1163 | # RTC drivers | 1324 | # I2C RTC drivers |
1164 | # | 1325 | # |
1165 | # CONFIG_RTC_DRV_CMOS is not set | ||
1166 | # CONFIG_RTC_DRV_X1205 is not set | ||
1167 | # CONFIG_RTC_DRV_DS1307 is not set | 1326 | # CONFIG_RTC_DRV_DS1307 is not set |
1168 | # CONFIG_RTC_DRV_DS1553 is not set | 1327 | # CONFIG_RTC_DRV_DS1374 is not set |
1169 | # CONFIG_RTC_DRV_ISL1208 is not set | ||
1170 | # CONFIG_RTC_DRV_DS1672 is not set | 1328 | # CONFIG_RTC_DRV_DS1672 is not set |
1171 | # CONFIG_RTC_DRV_DS1742 is not set | 1329 | # CONFIG_RTC_DRV_MAX6900 is not set |
1330 | # CONFIG_RTC_DRV_RS5C372 is not set | ||
1331 | # CONFIG_RTC_DRV_ISL1208 is not set | ||
1332 | # CONFIG_RTC_DRV_X1205 is not set | ||
1172 | # CONFIG_RTC_DRV_PCF8563 is not set | 1333 | # CONFIG_RTC_DRV_PCF8563 is not set |
1334 | # CONFIG_RTC_DRV_PCF8583 is not set | ||
1335 | # CONFIG_RTC_DRV_M41T80 is not set | ||
1336 | # CONFIG_RTC_DRV_S35390A is not set | ||
1337 | # CONFIG_RTC_DRV_FM3130 is not set | ||
1338 | |||
1339 | # | ||
1340 | # SPI RTC drivers | ||
1341 | # | ||
1342 | # CONFIG_RTC_DRV_MAX6902 is not set | ||
1343 | # CONFIG_RTC_DRV_R9701 is not set | ||
1173 | # CONFIG_RTC_DRV_RS5C348 is not set | 1344 | # CONFIG_RTC_DRV_RS5C348 is not set |
1174 | # CONFIG_RTC_DRV_RS5C372 is not set | 1345 | |
1175 | CONFIG_RTC_DRV_S3C=y | 1346 | # |
1347 | # Platform RTC drivers | ||
1348 | # | ||
1349 | # CONFIG_RTC_DRV_CMOS is not set | ||
1350 | # CONFIG_RTC_DRV_DS1511 is not set | ||
1351 | # CONFIG_RTC_DRV_DS1553 is not set | ||
1352 | # CONFIG_RTC_DRV_DS1742 is not set | ||
1353 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
1176 | # CONFIG_RTC_DRV_M48T86 is not set | 1354 | # CONFIG_RTC_DRV_M48T86 is not set |
1177 | # CONFIG_RTC_DRV_TEST is not set | 1355 | # CONFIG_RTC_DRV_M48T59 is not set |
1178 | # CONFIG_RTC_DRV_MAX6902 is not set | ||
1179 | # CONFIG_RTC_DRV_V3020 is not set | 1356 | # CONFIG_RTC_DRV_V3020 is not set |
1180 | 1357 | ||
1181 | # | 1358 | # |
1359 | # on-CPU RTC drivers | ||
1360 | # | ||
1361 | CONFIG_RTC_DRV_S3C=y | ||
1362 | # CONFIG_UIO is not set | ||
1363 | |||
1364 | # | ||
1182 | # File systems | 1365 | # File systems |
1183 | # | 1366 | # |
1184 | CONFIG_EXT2_FS=y | 1367 | CONFIG_EXT2_FS=y |
1185 | # CONFIG_EXT2_FS_XATTR is not set | 1368 | CONFIG_EXT2_FS_XATTR=y |
1369 | CONFIG_EXT2_FS_POSIX_ACL=y | ||
1370 | CONFIG_EXT2_FS_SECURITY=y | ||
1186 | # CONFIG_EXT2_FS_XIP is not set | 1371 | # CONFIG_EXT2_FS_XIP is not set |
1187 | CONFIG_EXT3_FS=y | 1372 | CONFIG_EXT3_FS=y |
1188 | CONFIG_EXT3_FS_XATTR=y | 1373 | CONFIG_EXT3_FS_XATTR=y |
1189 | # CONFIG_EXT3_FS_POSIX_ACL is not set | 1374 | CONFIG_EXT3_FS_POSIX_ACL=y |
1190 | # CONFIG_EXT3_FS_SECURITY is not set | 1375 | # CONFIG_EXT3_FS_SECURITY is not set |
1191 | # CONFIG_EXT4DEV_FS is not set | 1376 | # CONFIG_EXT4DEV_FS is not set |
1192 | CONFIG_JBD=y | 1377 | CONFIG_JBD=y |
1193 | # CONFIG_JBD_DEBUG is not set | ||
1194 | CONFIG_FS_MBCACHE=y | 1378 | CONFIG_FS_MBCACHE=y |
1195 | # CONFIG_REISERFS_FS is not set | 1379 | # CONFIG_REISERFS_FS is not set |
1196 | # CONFIG_JFS_FS is not set | 1380 | # CONFIG_JFS_FS is not set |
1197 | # CONFIG_FS_POSIX_ACL is not set | 1381 | CONFIG_FS_POSIX_ACL=y |
1198 | # CONFIG_XFS_FS is not set | 1382 | # CONFIG_XFS_FS is not set |
1199 | # CONFIG_GFS2_FS is not set | ||
1200 | # CONFIG_OCFS2_FS is not set | 1383 | # CONFIG_OCFS2_FS is not set |
1201 | # CONFIG_MINIX_FS is not set | 1384 | CONFIG_DNOTIFY=y |
1202 | CONFIG_ROMFS_FS=y | ||
1203 | CONFIG_INOTIFY=y | 1385 | CONFIG_INOTIFY=y |
1204 | CONFIG_INOTIFY_USER=y | 1386 | CONFIG_INOTIFY_USER=y |
1205 | # CONFIG_QUOTA is not set | 1387 | # CONFIG_QUOTA is not set |
1206 | CONFIG_DNOTIFY=y | ||
1207 | # CONFIG_AUTOFS_FS is not set | 1388 | # CONFIG_AUTOFS_FS is not set |
1208 | # CONFIG_AUTOFS4_FS is not set | 1389 | # CONFIG_AUTOFS4_FS is not set |
1209 | # CONFIG_FUSE_FS is not set | 1390 | # CONFIG_FUSE_FS is not set |
1391 | CONFIG_GENERIC_ACL=y | ||
1210 | 1392 | ||
1211 | # | 1393 | # |
1212 | # CD-ROM/DVD Filesystems | 1394 | # CD-ROM/DVD Filesystems |
1213 | # | 1395 | # |
1214 | # CONFIG_ISO9660_FS is not set | 1396 | CONFIG_ISO9660_FS=y |
1215 | # CONFIG_UDF_FS is not set | 1397 | CONFIG_JOLIET=y |
1398 | # CONFIG_ZISOFS is not set | ||
1399 | CONFIG_UDF_FS=m | ||
1400 | CONFIG_UDF_NLS=y | ||
1216 | 1401 | ||
1217 | # | 1402 | # |
1218 | # DOS/FAT/NT Filesystems | 1403 | # DOS/FAT/NT Filesystems |
@@ -1222,7 +1407,9 @@ CONFIG_MSDOS_FS=y | |||
1222 | CONFIG_VFAT_FS=y | 1407 | CONFIG_VFAT_FS=y |
1223 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | 1408 | CONFIG_FAT_DEFAULT_CODEPAGE=437 |
1224 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | 1409 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" |
1225 | # CONFIG_NTFS_FS is not set | 1410 | CONFIG_NTFS_FS=m |
1411 | # CONFIG_NTFS_DEBUG is not set | ||
1412 | # CONFIG_NTFS_RW is not set | ||
1226 | 1413 | ||
1227 | # | 1414 | # |
1228 | # Pseudo filesystems | 1415 | # Pseudo filesystems |
@@ -1230,10 +1417,10 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | |||
1230 | CONFIG_PROC_FS=y | 1417 | CONFIG_PROC_FS=y |
1231 | CONFIG_PROC_SYSCTL=y | 1418 | CONFIG_PROC_SYSCTL=y |
1232 | CONFIG_SYSFS=y | 1419 | CONFIG_SYSFS=y |
1233 | # CONFIG_TMPFS is not set | 1420 | CONFIG_TMPFS=y |
1421 | CONFIG_TMPFS_POSIX_ACL=y | ||
1234 | # CONFIG_HUGETLB_PAGE is not set | 1422 | # CONFIG_HUGETLB_PAGE is not set |
1235 | CONFIG_RAMFS=y | 1423 | CONFIG_CONFIGFS_FS=m |
1236 | # CONFIG_CONFIGFS_FS is not set | ||
1237 | 1424 | ||
1238 | # | 1425 | # |
1239 | # Miscellaneous filesystems | 1426 | # Miscellaneous filesystems |
@@ -1248,31 +1435,32 @@ CONFIG_RAMFS=y | |||
1248 | CONFIG_JFFS2_FS=y | 1435 | CONFIG_JFFS2_FS=y |
1249 | CONFIG_JFFS2_FS_DEBUG=0 | 1436 | CONFIG_JFFS2_FS_DEBUG=0 |
1250 | CONFIG_JFFS2_FS_WRITEBUFFER=y | 1437 | CONFIG_JFFS2_FS_WRITEBUFFER=y |
1251 | # CONFIG_JFFS2_SUMMARY is not set | 1438 | # CONFIG_JFFS2_FS_WBUF_VERIFY is not set |
1439 | CONFIG_JFFS2_SUMMARY=y | ||
1252 | # CONFIG_JFFS2_FS_XATTR is not set | 1440 | # CONFIG_JFFS2_FS_XATTR is not set |
1253 | # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set | 1441 | # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set |
1254 | CONFIG_JFFS2_ZLIB=y | 1442 | CONFIG_JFFS2_ZLIB=y |
1443 | # CONFIG_JFFS2_LZO is not set | ||
1255 | CONFIG_JFFS2_RTIME=y | 1444 | CONFIG_JFFS2_RTIME=y |
1256 | # CONFIG_JFFS2_RUBIN is not set | 1445 | # CONFIG_JFFS2_RUBIN is not set |
1257 | CONFIG_CRAMFS=y | 1446 | CONFIG_CRAMFS=y |
1258 | # CONFIG_VXFS_FS is not set | 1447 | # CONFIG_VXFS_FS is not set |
1448 | # CONFIG_MINIX_FS is not set | ||
1259 | # CONFIG_HPFS_FS is not set | 1449 | # CONFIG_HPFS_FS is not set |
1260 | # CONFIG_QNX4FS_FS is not set | 1450 | # CONFIG_QNX4FS_FS is not set |
1451 | CONFIG_ROMFS_FS=y | ||
1261 | # CONFIG_SYSV_FS is not set | 1452 | # CONFIG_SYSV_FS is not set |
1262 | # CONFIG_UFS_FS is not set | 1453 | # CONFIG_UFS_FS is not set |
1263 | 1454 | CONFIG_NETWORK_FILESYSTEMS=y | |
1264 | # | ||
1265 | # Network File Systems | ||
1266 | # | ||
1267 | CONFIG_NFS_FS=y | 1455 | CONFIG_NFS_FS=y |
1268 | # CONFIG_NFS_V3 is not set | 1456 | # CONFIG_NFS_V3 is not set |
1269 | # CONFIG_NFS_V4 is not set | 1457 | # CONFIG_NFS_V4 is not set |
1270 | # CONFIG_NFS_DIRECTIO is not set | ||
1271 | # CONFIG_NFSD is not set | 1458 | # CONFIG_NFSD is not set |
1272 | CONFIG_ROOT_NFS=y | 1459 | CONFIG_ROOT_NFS=y |
1273 | CONFIG_LOCKD=y | 1460 | CONFIG_LOCKD=y |
1274 | CONFIG_NFS_COMMON=y | 1461 | CONFIG_NFS_COMMON=y |
1275 | CONFIG_SUNRPC=y | 1462 | CONFIG_SUNRPC=y |
1463 | # CONFIG_SUNRPC_BIND34 is not set | ||
1276 | # CONFIG_RPCSEC_GSS_KRB5 is not set | 1464 | # CONFIG_RPCSEC_GSS_KRB5 is not set |
1277 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | 1465 | # CONFIG_RPCSEC_GSS_SPKM3 is not set |
1278 | # CONFIG_SMB_FS is not set | 1466 | # CONFIG_SMB_FS is not set |
@@ -1280,7 +1468,6 @@ CONFIG_SUNRPC=y | |||
1280 | # CONFIG_NCP_FS is not set | 1468 | # CONFIG_NCP_FS is not set |
1281 | # CONFIG_CODA_FS is not set | 1469 | # CONFIG_CODA_FS is not set |
1282 | # CONFIG_AFS_FS is not set | 1470 | # CONFIG_AFS_FS is not set |
1283 | # CONFIG_9P_FS is not set | ||
1284 | 1471 | ||
1285 | # | 1472 | # |
1286 | # Partition Types | 1473 | # Partition Types |
@@ -1302,94 +1489,93 @@ CONFIG_SOLARIS_X86_PARTITION=y | |||
1302 | # CONFIG_SUN_PARTITION is not set | 1489 | # CONFIG_SUN_PARTITION is not set |
1303 | # CONFIG_KARMA_PARTITION is not set | 1490 | # CONFIG_KARMA_PARTITION is not set |
1304 | # CONFIG_EFI_PARTITION is not set | 1491 | # CONFIG_EFI_PARTITION is not set |
1305 | 1492 | # CONFIG_SYSV68_PARTITION is not set | |
1306 | # | ||
1307 | # Native Language Support | ||
1308 | # | ||
1309 | CONFIG_NLS=y | 1493 | CONFIG_NLS=y |
1310 | CONFIG_NLS_DEFAULT="iso8859-1" | 1494 | CONFIG_NLS_DEFAULT="iso8859-1" |
1311 | # CONFIG_NLS_CODEPAGE_437 is not set | 1495 | CONFIG_NLS_CODEPAGE_437=y |
1312 | # CONFIG_NLS_CODEPAGE_737 is not set | 1496 | CONFIG_NLS_CODEPAGE_737=m |
1313 | # CONFIG_NLS_CODEPAGE_775 is not set | 1497 | CONFIG_NLS_CODEPAGE_775=m |
1314 | # CONFIG_NLS_CODEPAGE_850 is not set | 1498 | CONFIG_NLS_CODEPAGE_850=y |
1315 | # CONFIG_NLS_CODEPAGE_852 is not set | 1499 | CONFIG_NLS_CODEPAGE_852=m |
1316 | # CONFIG_NLS_CODEPAGE_855 is not set | 1500 | CONFIG_NLS_CODEPAGE_855=m |
1317 | # CONFIG_NLS_CODEPAGE_857 is not set | 1501 | CONFIG_NLS_CODEPAGE_857=m |
1318 | # CONFIG_NLS_CODEPAGE_860 is not set | 1502 | CONFIG_NLS_CODEPAGE_860=m |
1319 | # CONFIG_NLS_CODEPAGE_861 is not set | 1503 | CONFIG_NLS_CODEPAGE_861=m |
1320 | # CONFIG_NLS_CODEPAGE_862 is not set | 1504 | CONFIG_NLS_CODEPAGE_862=m |
1321 | # CONFIG_NLS_CODEPAGE_863 is not set | 1505 | CONFIG_NLS_CODEPAGE_863=m |
1322 | # CONFIG_NLS_CODEPAGE_864 is not set | 1506 | CONFIG_NLS_CODEPAGE_864=m |
1323 | # CONFIG_NLS_CODEPAGE_865 is not set | 1507 | CONFIG_NLS_CODEPAGE_865=m |
1324 | # CONFIG_NLS_CODEPAGE_866 is not set | 1508 | CONFIG_NLS_CODEPAGE_866=m |
1325 | # CONFIG_NLS_CODEPAGE_869 is not set | 1509 | CONFIG_NLS_CODEPAGE_869=m |
1326 | # CONFIG_NLS_CODEPAGE_936 is not set | 1510 | CONFIG_NLS_CODEPAGE_936=m |
1327 | # CONFIG_NLS_CODEPAGE_950 is not set | 1511 | CONFIG_NLS_CODEPAGE_950=m |
1328 | # CONFIG_NLS_CODEPAGE_932 is not set | 1512 | CONFIG_NLS_CODEPAGE_932=m |
1329 | # CONFIG_NLS_CODEPAGE_949 is not set | 1513 | CONFIG_NLS_CODEPAGE_949=m |
1330 | # CONFIG_NLS_CODEPAGE_874 is not set | 1514 | CONFIG_NLS_CODEPAGE_874=m |
1331 | # CONFIG_NLS_ISO8859_8 is not set | 1515 | CONFIG_NLS_ISO8859_8=m |
1332 | # CONFIG_NLS_CODEPAGE_1250 is not set | 1516 | CONFIG_NLS_CODEPAGE_1250=m |
1333 | # CONFIG_NLS_CODEPAGE_1251 is not set | 1517 | CONFIG_NLS_CODEPAGE_1251=m |
1334 | # CONFIG_NLS_ASCII is not set | 1518 | CONFIG_NLS_ASCII=y |
1335 | # CONFIG_NLS_ISO8859_1 is not set | 1519 | CONFIG_NLS_ISO8859_1=y |
1336 | # CONFIG_NLS_ISO8859_2 is not set | 1520 | CONFIG_NLS_ISO8859_2=m |
1337 | # CONFIG_NLS_ISO8859_3 is not set | 1521 | CONFIG_NLS_ISO8859_3=m |
1338 | # CONFIG_NLS_ISO8859_4 is not set | 1522 | CONFIG_NLS_ISO8859_4=m |
1339 | # CONFIG_NLS_ISO8859_5 is not set | 1523 | CONFIG_NLS_ISO8859_5=m |
1340 | # CONFIG_NLS_ISO8859_6 is not set | 1524 | CONFIG_NLS_ISO8859_6=m |
1341 | # CONFIG_NLS_ISO8859_7 is not set | 1525 | CONFIG_NLS_ISO8859_7=m |
1342 | # CONFIG_NLS_ISO8859_9 is not set | 1526 | CONFIG_NLS_ISO8859_9=m |
1343 | # CONFIG_NLS_ISO8859_13 is not set | 1527 | CONFIG_NLS_ISO8859_13=m |
1344 | # CONFIG_NLS_ISO8859_14 is not set | 1528 | CONFIG_NLS_ISO8859_14=m |
1345 | # CONFIG_NLS_ISO8859_15 is not set | 1529 | CONFIG_NLS_ISO8859_15=m |
1346 | # CONFIG_NLS_KOI8_R is not set | 1530 | CONFIG_NLS_KOI8_R=m |
1347 | # CONFIG_NLS_KOI8_U is not set | 1531 | CONFIG_NLS_KOI8_U=m |
1348 | # CONFIG_NLS_UTF8 is not set | 1532 | CONFIG_NLS_UTF8=m |
1349 | |||
1350 | # | ||
1351 | # Distributed Lock Manager | ||
1352 | # | ||
1353 | # CONFIG_DLM is not set | 1533 | # CONFIG_DLM is not set |
1354 | 1534 | ||
1355 | # | 1535 | # |
1356 | # Profiling support | ||
1357 | # | ||
1358 | # CONFIG_PROFILING is not set | ||
1359 | |||
1360 | # | ||
1361 | # Kernel hacking | 1536 | # Kernel hacking |
1362 | # | 1537 | # |
1363 | # CONFIG_PRINTK_TIME is not set | 1538 | # CONFIG_PRINTK_TIME is not set |
1539 | CONFIG_ENABLE_WARN_DEPRECATED=y | ||
1364 | CONFIG_ENABLE_MUST_CHECK=y | 1540 | CONFIG_ENABLE_MUST_CHECK=y |
1541 | CONFIG_FRAME_WARN=1024 | ||
1365 | CONFIG_MAGIC_SYSRQ=y | 1542 | CONFIG_MAGIC_SYSRQ=y |
1366 | # CONFIG_UNUSED_SYMBOLS is not set | 1543 | # CONFIG_UNUSED_SYMBOLS is not set |
1367 | # CONFIG_DEBUG_FS is not set | 1544 | # CONFIG_DEBUG_FS is not set |
1368 | # CONFIG_HEADERS_CHECK is not set | 1545 | # CONFIG_HEADERS_CHECK is not set |
1369 | CONFIG_DEBUG_KERNEL=y | 1546 | CONFIG_DEBUG_KERNEL=y |
1370 | # CONFIG_DEBUG_SHIRQ is not set | 1547 | # CONFIG_DEBUG_SHIRQ is not set |
1371 | CONFIG_LOG_BUF_SHIFT=16 | ||
1372 | CONFIG_DETECT_SOFTLOCKUP=y | 1548 | CONFIG_DETECT_SOFTLOCKUP=y |
1549 | CONFIG_SCHED_DEBUG=y | ||
1373 | # CONFIG_SCHEDSTATS is not set | 1550 | # CONFIG_SCHEDSTATS is not set |
1374 | # CONFIG_TIMER_STATS is not set | 1551 | # CONFIG_TIMER_STATS is not set |
1552 | # CONFIG_DEBUG_OBJECTS is not set | ||
1375 | # CONFIG_DEBUG_SLAB is not set | 1553 | # CONFIG_DEBUG_SLAB is not set |
1376 | # CONFIG_DEBUG_RT_MUTEXES is not set | 1554 | # CONFIG_DEBUG_RT_MUTEXES is not set |
1377 | # CONFIG_RT_MUTEX_TESTER is not set | 1555 | # CONFIG_RT_MUTEX_TESTER is not set |
1378 | # CONFIG_DEBUG_SPINLOCK is not set | 1556 | # CONFIG_DEBUG_SPINLOCK is not set |
1379 | CONFIG_DEBUG_MUTEXES=y | 1557 | CONFIG_DEBUG_MUTEXES=y |
1558 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
1559 | # CONFIG_PROVE_LOCKING is not set | ||
1560 | # CONFIG_LOCK_STAT is not set | ||
1380 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1561 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
1381 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | 1562 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set |
1382 | # CONFIG_DEBUG_KOBJECT is not set | 1563 | # CONFIG_DEBUG_KOBJECT is not set |
1383 | CONFIG_DEBUG_BUGVERBOSE=y | 1564 | CONFIG_DEBUG_BUGVERBOSE=y |
1384 | CONFIG_DEBUG_INFO=y | 1565 | CONFIG_DEBUG_INFO=y |
1385 | # CONFIG_DEBUG_VM is not set | 1566 | # CONFIG_DEBUG_VM is not set |
1567 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
1386 | # CONFIG_DEBUG_LIST is not set | 1568 | # CONFIG_DEBUG_LIST is not set |
1569 | # CONFIG_DEBUG_SG is not set | ||
1387 | CONFIG_FRAME_POINTER=y | 1570 | CONFIG_FRAME_POINTER=y |
1388 | CONFIG_FORCED_INLINING=y | 1571 | # CONFIG_BOOT_PRINTK_DELAY is not set |
1389 | # CONFIG_RCU_TORTURE_TEST is not set | 1572 | # CONFIG_RCU_TORTURE_TEST is not set |
1573 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
1390 | # CONFIG_FAULT_INJECTION is not set | 1574 | # CONFIG_FAULT_INJECTION is not set |
1575 | # CONFIG_SAMPLES is not set | ||
1391 | CONFIG_DEBUG_USER=y | 1576 | CONFIG_DEBUG_USER=y |
1392 | # CONFIG_DEBUG_ERRORS is not set | 1577 | CONFIG_DEBUG_ERRORS=y |
1578 | # CONFIG_DEBUG_STACK_USAGE is not set | ||
1393 | CONFIG_DEBUG_LL=y | 1579 | CONFIG_DEBUG_LL=y |
1394 | # CONFIG_DEBUG_ICEDCC is not set | 1580 | # CONFIG_DEBUG_ICEDCC is not set |
1395 | CONFIG_DEBUG_S3C_PORT=y | 1581 | CONFIG_DEBUG_S3C_PORT=y |
@@ -1400,21 +1586,100 @@ CONFIG_DEBUG_S3C_UART=0 | |||
1400 | # | 1586 | # |
1401 | # CONFIG_KEYS is not set | 1587 | # CONFIG_KEYS is not set |
1402 | # CONFIG_SECURITY is not set | 1588 | # CONFIG_SECURITY is not set |
1589 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | ||
1590 | CONFIG_CRYPTO=y | ||
1591 | |||
1592 | # | ||
1593 | # Crypto core or helper | ||
1594 | # | ||
1595 | CONFIG_CRYPTO_ALGAPI=m | ||
1596 | CONFIG_CRYPTO_AEAD=m | ||
1597 | CONFIG_CRYPTO_BLKCIPHER=m | ||
1598 | CONFIG_CRYPTO_HASH=m | ||
1599 | CONFIG_CRYPTO_MANAGER=m | ||
1600 | # CONFIG_CRYPTO_GF128MUL is not set | ||
1601 | # CONFIG_CRYPTO_NULL is not set | ||
1602 | # CONFIG_CRYPTO_CRYPTD is not set | ||
1603 | CONFIG_CRYPTO_AUTHENC=m | ||
1604 | # CONFIG_CRYPTO_TEST is not set | ||
1605 | |||
1606 | # | ||
1607 | # Authenticated Encryption with Associated Data | ||
1608 | # | ||
1609 | # CONFIG_CRYPTO_CCM is not set | ||
1610 | # CONFIG_CRYPTO_GCM is not set | ||
1611 | # CONFIG_CRYPTO_SEQIV is not set | ||
1612 | |||
1613 | # | ||
1614 | # Block modes | ||
1615 | # | ||
1616 | CONFIG_CRYPTO_CBC=m | ||
1617 | # CONFIG_CRYPTO_CTR is not set | ||
1618 | # CONFIG_CRYPTO_CTS is not set | ||
1619 | CONFIG_CRYPTO_ECB=m | ||
1620 | # CONFIG_CRYPTO_LRW is not set | ||
1621 | # CONFIG_CRYPTO_PCBC is not set | ||
1622 | # CONFIG_CRYPTO_XTS is not set | ||
1623 | |||
1624 | # | ||
1625 | # Hash modes | ||
1626 | # | ||
1627 | CONFIG_CRYPTO_HMAC=m | ||
1628 | # CONFIG_CRYPTO_XCBC is not set | ||
1629 | |||
1630 | # | ||
1631 | # Digest | ||
1632 | # | ||
1633 | # CONFIG_CRYPTO_CRC32C is not set | ||
1634 | # CONFIG_CRYPTO_MD4 is not set | ||
1635 | CONFIG_CRYPTO_MD5=m | ||
1636 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
1637 | CONFIG_CRYPTO_SHA1=m | ||
1638 | # CONFIG_CRYPTO_SHA256 is not set | ||
1639 | # CONFIG_CRYPTO_SHA512 is not set | ||
1640 | # CONFIG_CRYPTO_TGR192 is not set | ||
1641 | # CONFIG_CRYPTO_WP512 is not set | ||
1642 | |||
1643 | # | ||
1644 | # Ciphers | ||
1645 | # | ||
1646 | CONFIG_CRYPTO_AES=m | ||
1647 | # CONFIG_CRYPTO_ANUBIS is not set | ||
1648 | CONFIG_CRYPTO_ARC4=m | ||
1649 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
1650 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
1651 | # CONFIG_CRYPTO_CAST5 is not set | ||
1652 | # CONFIG_CRYPTO_CAST6 is not set | ||
1653 | CONFIG_CRYPTO_DES=m | ||
1654 | # CONFIG_CRYPTO_FCRYPT is not set | ||
1655 | # CONFIG_CRYPTO_KHAZAD is not set | ||
1656 | # CONFIG_CRYPTO_SALSA20 is not set | ||
1657 | # CONFIG_CRYPTO_SEED is not set | ||
1658 | # CONFIG_CRYPTO_SERPENT is not set | ||
1659 | # CONFIG_CRYPTO_TEA is not set | ||
1660 | # CONFIG_CRYPTO_TWOFISH is not set | ||
1403 | 1661 | ||
1404 | # | 1662 | # |
1405 | # Cryptographic options | 1663 | # Compression |
1406 | # | 1664 | # |
1407 | # CONFIG_CRYPTO is not set | 1665 | CONFIG_CRYPTO_DEFLATE=m |
1666 | # CONFIG_CRYPTO_LZO is not set | ||
1667 | CONFIG_CRYPTO_HW=y | ||
1408 | 1668 | ||
1409 | # | 1669 | # |
1410 | # Library routines | 1670 | # Library routines |
1411 | # | 1671 | # |
1412 | CONFIG_BITREVERSE=y | 1672 | CONFIG_BITREVERSE=y |
1673 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
1674 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
1413 | # CONFIG_CRC_CCITT is not set | 1675 | # CONFIG_CRC_CCITT is not set |
1414 | # CONFIG_CRC16 is not set | 1676 | # CONFIG_CRC16 is not set |
1677 | CONFIG_CRC_ITU_T=m | ||
1415 | CONFIG_CRC32=y | 1678 | CONFIG_CRC32=y |
1679 | # CONFIG_CRC7 is not set | ||
1416 | # CONFIG_LIBCRC32C is not set | 1680 | # CONFIG_LIBCRC32C is not set |
1417 | CONFIG_ZLIB_INFLATE=y | 1681 | CONFIG_ZLIB_INFLATE=y |
1418 | CONFIG_ZLIB_DEFLATE=y | 1682 | CONFIG_ZLIB_DEFLATE=y |
1419 | CONFIG_PLIST=y | 1683 | CONFIG_PLIST=y |
1420 | CONFIG_HAS_IOMEM=y | 1684 | CONFIG_HAS_IOMEM=y |
1685 | CONFIG_HAS_DMA=y | ||
diff --git a/arch/arm/configs/sam9_l9260_defconfig b/arch/arm/configs/sam9_l9260_defconfig index 484dc9739dfc..8688362bcf7b 100644 --- a/arch/arm/configs/sam9_l9260_defconfig +++ b/arch/arm/configs/sam9_l9260_defconfig | |||
@@ -211,7 +211,6 @@ CONFIG_ARM_THUMB=y | |||
211 | # | 211 | # |
212 | # CONFIG_TICK_ONESHOT is not set | 212 | # CONFIG_TICK_ONESHOT is not set |
213 | CONFIG_PREEMPT=y | 213 | CONFIG_PREEMPT=y |
214 | # CONFIG_NO_IDLE_HZ is not set | ||
215 | CONFIG_HZ=100 | 214 | CONFIG_HZ=100 |
216 | # CONFIG_AEABI is not set | 215 | # CONFIG_AEABI is not set |
217 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 216 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/configs/spitz_defconfig b/arch/arm/configs/spitz_defconfig index aa7a01179500..7d59fb1f1cea 100644 --- a/arch/arm/configs/spitz_defconfig +++ b/arch/arm/configs/spitz_defconfig | |||
@@ -164,7 +164,6 @@ CONFIG_PCMCIA_PXA2XX=y | |||
164 | # Kernel Features | 164 | # Kernel Features |
165 | # | 165 | # |
166 | CONFIG_PREEMPT=y | 166 | CONFIG_PREEMPT=y |
167 | # CONFIG_NO_IDLE_HZ is not set | ||
168 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 167 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
169 | CONFIG_SELECT_MEMORY_MODEL=y | 168 | CONFIG_SELECT_MEMORY_MODEL=y |
170 | CONFIG_FLATMEM_MANUAL=y | 169 | CONFIG_FLATMEM_MANUAL=y |
diff --git a/arch/arm/configs/tct_hammer_defconfig b/arch/arm/configs/tct_hammer_defconfig index 576b8339f0d6..07dfb98df4f0 100644 --- a/arch/arm/configs/tct_hammer_defconfig +++ b/arch/arm/configs/tct_hammer_defconfig | |||
@@ -247,7 +247,6 @@ CONFIG_ARM_THUMB=y | |||
247 | # | 247 | # |
248 | # CONFIG_TICK_ONESHOT is not set | 248 | # CONFIG_TICK_ONESHOT is not set |
249 | # CONFIG_PREEMPT is not set | 249 | # CONFIG_PREEMPT is not set |
250 | # CONFIG_NO_IDLE_HZ is not set | ||
251 | CONFIG_HZ=200 | 250 | CONFIG_HZ=200 |
252 | # CONFIG_AEABI is not set | 251 | # CONFIG_AEABI is not set |
253 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 252 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/configs/trizeps4_defconfig b/arch/arm/configs/trizeps4_defconfig index 6db6392806f9..8b7a431a8bfc 100644 --- a/arch/arm/configs/trizeps4_defconfig +++ b/arch/arm/configs/trizeps4_defconfig | |||
@@ -195,7 +195,6 @@ CONFIG_PCMCIA_PXA2XX=y | |||
195 | # Kernel Features | 195 | # Kernel Features |
196 | # | 196 | # |
197 | CONFIG_PREEMPT=y | 197 | CONFIG_PREEMPT=y |
198 | # CONFIG_NO_IDLE_HZ is not set | ||
199 | CONFIG_HZ=100 | 198 | CONFIG_HZ=100 |
200 | CONFIG_AEABI=y | 199 | CONFIG_AEABI=y |
201 | CONFIG_OABI_COMPAT=y | 200 | CONFIG_OABI_COMPAT=y |
diff --git a/arch/arm/configs/usb-a9260_defconfig b/arch/arm/configs/usb-a9260_defconfig new file mode 100644 index 000000000000..3680bd2df26d --- /dev/null +++ b/arch/arm/configs/usb-a9260_defconfig | |||
@@ -0,0 +1,1142 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.24 | ||
4 | # Tue Apr 15 11:39:35 2008 | ||
5 | # | ||
6 | CONFIG_ARM=y | ||
7 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y | ||
8 | CONFIG_GENERIC_GPIO=y | ||
9 | CONFIG_GENERIC_TIME=y | ||
10 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
11 | CONFIG_MMU=y | ||
12 | # CONFIG_NO_IOPORT is not set | ||
13 | CONFIG_GENERIC_HARDIRQS=y | ||
14 | CONFIG_STACKTRACE_SUPPORT=y | ||
15 | CONFIG_LOCKDEP_SUPPORT=y | ||
16 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
17 | CONFIG_HARDIRQS_SW_RESEND=y | ||
18 | CONFIG_GENERIC_IRQ_PROBE=y | ||
19 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
20 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | ||
21 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | ||
22 | CONFIG_GENERIC_HWEIGHT=y | ||
23 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
24 | CONFIG_ZONE_DMA=y | ||
25 | CONFIG_VECTORS_BASE=0xffff0000 | ||
26 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
27 | |||
28 | # | ||
29 | # General setup | ||
30 | # | ||
31 | CONFIG_EXPERIMENTAL=y | ||
32 | CONFIG_BROKEN_ON_SMP=y | ||
33 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
34 | CONFIG_LOCALVERSION="" | ||
35 | # CONFIG_LOCALVERSION_AUTO is not set | ||
36 | # CONFIG_SWAP is not set | ||
37 | CONFIG_SYSVIPC=y | ||
38 | CONFIG_SYSVIPC_SYSCTL=y | ||
39 | # CONFIG_POSIX_MQUEUE is not set | ||
40 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
41 | # CONFIG_TASKSTATS is not set | ||
42 | # CONFIG_USER_NS is not set | ||
43 | # CONFIG_PID_NS is not set | ||
44 | # CONFIG_AUDIT is not set | ||
45 | # CONFIG_IKCONFIG is not set | ||
46 | CONFIG_LOG_BUF_SHIFT=14 | ||
47 | # CONFIG_CGROUPS is not set | ||
48 | CONFIG_FAIR_GROUP_SCHED=y | ||
49 | CONFIG_FAIR_USER_SCHED=y | ||
50 | # CONFIG_FAIR_CGROUP_SCHED is not set | ||
51 | # CONFIG_SYSFS_DEPRECATED is not set | ||
52 | # CONFIG_RELAY is not set | ||
53 | # CONFIG_BLK_DEV_INITRD is not set | ||
54 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
55 | CONFIG_SYSCTL=y | ||
56 | # CONFIG_EMBEDDED is not set | ||
57 | CONFIG_UID16=y | ||
58 | CONFIG_SYSCTL_SYSCALL=y | ||
59 | CONFIG_KALLSYMS=y | ||
60 | # CONFIG_KALLSYMS_ALL is not set | ||
61 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
62 | CONFIG_HOTPLUG=y | ||
63 | CONFIG_PRINTK=y | ||
64 | CONFIG_BUG=y | ||
65 | CONFIG_ELF_CORE=y | ||
66 | CONFIG_BASE_FULL=y | ||
67 | CONFIG_FUTEX=y | ||
68 | CONFIG_ANON_INODES=y | ||
69 | CONFIG_EPOLL=y | ||
70 | CONFIG_SIGNALFD=y | ||
71 | CONFIG_EVENTFD=y | ||
72 | CONFIG_SHMEM=y | ||
73 | CONFIG_VM_EVENT_COUNTERS=y | ||
74 | CONFIG_SLAB=y | ||
75 | # CONFIG_SLUB is not set | ||
76 | # CONFIG_SLOB is not set | ||
77 | CONFIG_SLABINFO=y | ||
78 | CONFIG_RT_MUTEXES=y | ||
79 | # CONFIG_TINY_SHMEM is not set | ||
80 | CONFIG_BASE_SMALL=0 | ||
81 | CONFIG_MODULES=y | ||
82 | CONFIG_MODULE_UNLOAD=y | ||
83 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
84 | # CONFIG_MODVERSIONS is not set | ||
85 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
86 | CONFIG_KMOD=y | ||
87 | CONFIG_BLOCK=y | ||
88 | # CONFIG_LBD is not set | ||
89 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
90 | # CONFIG_LSF is not set | ||
91 | # CONFIG_BLK_DEV_BSG is not set | ||
92 | |||
93 | # | ||
94 | # IO Schedulers | ||
95 | # | ||
96 | CONFIG_IOSCHED_NOOP=y | ||
97 | CONFIG_IOSCHED_AS=y | ||
98 | # CONFIG_IOSCHED_DEADLINE is not set | ||
99 | # CONFIG_IOSCHED_CFQ is not set | ||
100 | CONFIG_DEFAULT_AS=y | ||
101 | # CONFIG_DEFAULT_DEADLINE is not set | ||
102 | # CONFIG_DEFAULT_CFQ is not set | ||
103 | # CONFIG_DEFAULT_NOOP is not set | ||
104 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
105 | |||
106 | # | ||
107 | # System Type | ||
108 | # | ||
109 | # CONFIG_ARCH_AAEC2000 is not set | ||
110 | # CONFIG_ARCH_INTEGRATOR is not set | ||
111 | # CONFIG_ARCH_REALVIEW is not set | ||
112 | # CONFIG_ARCH_VERSATILE is not set | ||
113 | CONFIG_ARCH_AT91=y | ||
114 | # CONFIG_ARCH_CLPS7500 is not set | ||
115 | # CONFIG_ARCH_CLPS711X is not set | ||
116 | # CONFIG_ARCH_CO285 is not set | ||
117 | # CONFIG_ARCH_EBSA110 is not set | ||
118 | # CONFIG_ARCH_EP93XX is not set | ||
119 | # CONFIG_ARCH_FOOTBRIDGE is not set | ||
120 | # CONFIG_ARCH_NETX is not set | ||
121 | # CONFIG_ARCH_H720X is not set | ||
122 | # CONFIG_ARCH_IMX is not set | ||
123 | # CONFIG_ARCH_IOP13XX is not set | ||
124 | # CONFIG_ARCH_IOP32X is not set | ||
125 | # CONFIG_ARCH_IOP33X is not set | ||
126 | # CONFIG_ARCH_IXP23XX is not set | ||
127 | # CONFIG_ARCH_IXP2000 is not set | ||
128 | # CONFIG_ARCH_IXP4XX is not set | ||
129 | # CONFIG_ARCH_L7200 is not set | ||
130 | # CONFIG_ARCH_KS8695 is not set | ||
131 | # CONFIG_ARCH_NS9XXX is not set | ||
132 | # CONFIG_ARCH_MXC is not set | ||
133 | # CONFIG_ARCH_PNX4008 is not set | ||
134 | # CONFIG_ARCH_PXA is not set | ||
135 | # CONFIG_ARCH_RPC is not set | ||
136 | # CONFIG_ARCH_SA1100 is not set | ||
137 | # CONFIG_ARCH_S3C2410 is not set | ||
138 | # CONFIG_ARCH_SHARK is not set | ||
139 | # CONFIG_ARCH_LH7A40X is not set | ||
140 | # CONFIG_ARCH_DAVINCI is not set | ||
141 | # CONFIG_ARCH_OMAP is not set | ||
142 | |||
143 | # | ||
144 | # Boot options | ||
145 | # | ||
146 | |||
147 | # | ||
148 | # Power management | ||
149 | # | ||
150 | |||
151 | # | ||
152 | # Atmel AT91 System-on-Chip | ||
153 | # | ||
154 | # CONFIG_ARCH_AT91RM9200 is not set | ||
155 | CONFIG_ARCH_AT91SAM9260=y | ||
156 | # CONFIG_ARCH_AT91SAM9261 is not set | ||
157 | # CONFIG_ARCH_AT91SAM9263 is not set | ||
158 | # CONFIG_ARCH_AT91SAM9RL is not set | ||
159 | # CONFIG_ARCH_AT91CAP9 is not set | ||
160 | # CONFIG_ARCH_AT91X40 is not set | ||
161 | CONFIG_AT91_PMC_UNIT=y | ||
162 | |||
163 | # | ||
164 | # AT91SAM9260 Variants | ||
165 | # | ||
166 | # CONFIG_ARCH_AT91SAM9260_SAM9XE is not set | ||
167 | |||
168 | # | ||
169 | # AT91SAM9260 / AT91SAM9XE Board Type | ||
170 | # | ||
171 | # CONFIG_MACH_AT91SAM9260EK is not set | ||
172 | # CONFIG_MACH_CAM60 is not set | ||
173 | # CONFIG_MACH_SAM9_L9260 is not set | ||
174 | CONFIG_MACH_USB_A9260=y | ||
175 | # CONFIG_MACH_QIL_A9260 is not set | ||
176 | |||
177 | # | ||
178 | # AT91 Board Options | ||
179 | # | ||
180 | |||
181 | # | ||
182 | # AT91 Feature Selections | ||
183 | # | ||
184 | # CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set | ||
185 | CONFIG_AT91_SLOW_CLOCK=y | ||
186 | CONFIG_AT91_TIMER_HZ=100 | ||
187 | CONFIG_AT91_EARLY_DBGU=y | ||
188 | # CONFIG_AT91_EARLY_USART0 is not set | ||
189 | # CONFIG_AT91_EARLY_USART1 is not set | ||
190 | # CONFIG_AT91_EARLY_USART2 is not set | ||
191 | # CONFIG_AT91_EARLY_USART3 is not set | ||
192 | # CONFIG_AT91_EARLY_USART4 is not set | ||
193 | # CONFIG_AT91_EARLY_USART5 is not set | ||
194 | |||
195 | # | ||
196 | # Processor Type | ||
197 | # | ||
198 | CONFIG_CPU_32=y | ||
199 | CONFIG_CPU_ARM926T=y | ||
200 | CONFIG_CPU_32v5=y | ||
201 | CONFIG_CPU_ABRT_EV5TJ=y | ||
202 | CONFIG_CPU_CACHE_VIVT=y | ||
203 | CONFIG_CPU_COPY_V4WB=y | ||
204 | CONFIG_CPU_TLB_V4WBI=y | ||
205 | CONFIG_CPU_CP15=y | ||
206 | CONFIG_CPU_CP15_MMU=y | ||
207 | |||
208 | # | ||
209 | # Processor Features | ||
210 | # | ||
211 | # CONFIG_ARM_THUMB is not set | ||
212 | # CONFIG_CPU_ICACHE_DISABLE is not set | ||
213 | # CONFIG_CPU_DCACHE_DISABLE is not set | ||
214 | # CONFIG_CPU_DCACHE_WRITETHROUGH is not set | ||
215 | # CONFIG_CPU_CACHE_ROUND_ROBIN is not set | ||
216 | # CONFIG_OUTER_CACHE is not set | ||
217 | |||
218 | # | ||
219 | # Bus support | ||
220 | # | ||
221 | # CONFIG_PCI_SYSCALL is not set | ||
222 | # CONFIG_ARCH_SUPPORTS_MSI is not set | ||
223 | # CONFIG_PCCARD is not set | ||
224 | |||
225 | # | ||
226 | # Kernel Features | ||
227 | # | ||
228 | # CONFIG_TICK_ONESHOT is not set | ||
229 | # CONFIG_NO_HZ is not set | ||
230 | # CONFIG_HIGH_RES_TIMERS is not set | ||
231 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
232 | # CONFIG_PREEMPT is not set | ||
233 | CONFIG_HZ=100 | ||
234 | CONFIG_AEABI=y | ||
235 | CONFIG_OABI_COMPAT=y | ||
236 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | ||
237 | CONFIG_SELECT_MEMORY_MODEL=y | ||
238 | CONFIG_FLATMEM_MANUAL=y | ||
239 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
240 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
241 | CONFIG_FLATMEM=y | ||
242 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
243 | # CONFIG_SPARSEMEM_STATIC is not set | ||
244 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
245 | CONFIG_SPLIT_PTLOCK_CPUS=4096 | ||
246 | # CONFIG_RESOURCES_64BIT is not set | ||
247 | CONFIG_ZONE_DMA_FLAG=1 | ||
248 | CONFIG_BOUNCE=y | ||
249 | CONFIG_VIRT_TO_BUS=y | ||
250 | # CONFIG_LEDS is not set | ||
251 | CONFIG_ALIGNMENT_TRAP=y | ||
252 | |||
253 | # | ||
254 | # Boot options | ||
255 | # | ||
256 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
257 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
258 | CONFIG_CMDLINE="mem=64M console=ttyS0,115200" | ||
259 | # CONFIG_XIP_KERNEL is not set | ||
260 | # CONFIG_KEXEC is not set | ||
261 | |||
262 | # | ||
263 | # Floating point emulation | ||
264 | # | ||
265 | |||
266 | # | ||
267 | # At least one emulation must be selected | ||
268 | # | ||
269 | CONFIG_FPE_NWFPE=y | ||
270 | # CONFIG_FPE_NWFPE_XP is not set | ||
271 | # CONFIG_FPE_FASTFPE is not set | ||
272 | # CONFIG_VFP is not set | ||
273 | |||
274 | # | ||
275 | # Userspace binary formats | ||
276 | # | ||
277 | CONFIG_BINFMT_ELF=y | ||
278 | # CONFIG_BINFMT_AOUT is not set | ||
279 | # CONFIG_BINFMT_MISC is not set | ||
280 | |||
281 | # | ||
282 | # Power management options | ||
283 | # | ||
284 | CONFIG_PM=y | ||
285 | # CONFIG_PM_LEGACY is not set | ||
286 | # CONFIG_PM_DEBUG is not set | ||
287 | CONFIG_PM_SLEEP=y | ||
288 | CONFIG_SUSPEND_UP_POSSIBLE=y | ||
289 | CONFIG_SUSPEND=y | ||
290 | # CONFIG_APM_EMULATION is not set | ||
291 | |||
292 | # | ||
293 | # Networking | ||
294 | # | ||
295 | CONFIG_NET=y | ||
296 | |||
297 | # | ||
298 | # Networking options | ||
299 | # | ||
300 | CONFIG_PACKET=y | ||
301 | # CONFIG_PACKET_MMAP is not set | ||
302 | CONFIG_UNIX=y | ||
303 | # CONFIG_NET_KEY is not set | ||
304 | CONFIG_INET=y | ||
305 | CONFIG_IP_MULTICAST=y | ||
306 | CONFIG_IP_ADVANCED_ROUTER=y | ||
307 | CONFIG_ASK_IP_FIB_HASH=y | ||
308 | # CONFIG_IP_FIB_TRIE is not set | ||
309 | CONFIG_IP_FIB_HASH=y | ||
310 | # CONFIG_IP_MULTIPLE_TABLES is not set | ||
311 | # CONFIG_IP_ROUTE_MULTIPATH is not set | ||
312 | CONFIG_IP_ROUTE_VERBOSE=y | ||
313 | CONFIG_IP_PNP=y | ||
314 | # CONFIG_IP_PNP_DHCP is not set | ||
315 | CONFIG_IP_PNP_BOOTP=y | ||
316 | CONFIG_IP_PNP_RARP=y | ||
317 | # CONFIG_NET_IPIP is not set | ||
318 | # CONFIG_NET_IPGRE is not set | ||
319 | CONFIG_IP_MROUTE=y | ||
320 | CONFIG_IP_PIMSM_V1=y | ||
321 | CONFIG_IP_PIMSM_V2=y | ||
322 | # CONFIG_ARPD is not set | ||
323 | # CONFIG_SYN_COOKIES is not set | ||
324 | # CONFIG_INET_AH is not set | ||
325 | # CONFIG_INET_ESP is not set | ||
326 | # CONFIG_INET_IPCOMP is not set | ||
327 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
328 | # CONFIG_INET_TUNNEL is not set | ||
329 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||
330 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||
331 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
332 | # CONFIG_INET_LRO is not set | ||
333 | # CONFIG_INET_DIAG is not set | ||
334 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
335 | CONFIG_TCP_CONG_CUBIC=y | ||
336 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
337 | # CONFIG_TCP_MD5SIG is not set | ||
338 | # CONFIG_IPV6 is not set | ||
339 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
340 | # CONFIG_INET6_TUNNEL is not set | ||
341 | # CONFIG_NETWORK_SECMARK is not set | ||
342 | # CONFIG_NETFILTER is not set | ||
343 | # CONFIG_IP_DCCP is not set | ||
344 | # CONFIG_IP_SCTP is not set | ||
345 | # CONFIG_TIPC is not set | ||
346 | # CONFIG_ATM is not set | ||
347 | # CONFIG_BRIDGE is not set | ||
348 | # CONFIG_VLAN_8021Q is not set | ||
349 | # CONFIG_DECNET is not set | ||
350 | # CONFIG_LLC2 is not set | ||
351 | # CONFIG_IPX is not set | ||
352 | # CONFIG_ATALK is not set | ||
353 | # CONFIG_X25 is not set | ||
354 | # CONFIG_LAPB is not set | ||
355 | # CONFIG_ECONET is not set | ||
356 | # CONFIG_WAN_ROUTER is not set | ||
357 | # CONFIG_NET_SCHED is not set | ||
358 | |||
359 | # | ||
360 | # Network testing | ||
361 | # | ||
362 | # CONFIG_NET_PKTGEN is not set | ||
363 | # CONFIG_HAMRADIO is not set | ||
364 | # CONFIG_IRDA is not set | ||
365 | # CONFIG_BT is not set | ||
366 | # CONFIG_AF_RXRPC is not set | ||
367 | |||
368 | # | ||
369 | # Wireless | ||
370 | # | ||
371 | # CONFIG_CFG80211 is not set | ||
372 | # CONFIG_WIRELESS_EXT is not set | ||
373 | # CONFIG_MAC80211 is not set | ||
374 | # CONFIG_IEEE80211 is not set | ||
375 | # CONFIG_RFKILL is not set | ||
376 | # CONFIG_NET_9P is not set | ||
377 | |||
378 | # | ||
379 | # Device Drivers | ||
380 | # | ||
381 | |||
382 | # | ||
383 | # Generic Driver Options | ||
384 | # | ||
385 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
386 | CONFIG_STANDALONE=y | ||
387 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
388 | # CONFIG_FW_LOADER is not set | ||
389 | # CONFIG_DEBUG_DRIVER is not set | ||
390 | # CONFIG_DEBUG_DEVRES is not set | ||
391 | # CONFIG_SYS_HYPERVISOR is not set | ||
392 | # CONFIG_CONNECTOR is not set | ||
393 | CONFIG_MTD=y | ||
394 | # CONFIG_MTD_DEBUG is not set | ||
395 | # CONFIG_MTD_CONCAT is not set | ||
396 | CONFIG_MTD_PARTITIONS=y | ||
397 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
398 | CONFIG_MTD_CMDLINE_PARTS=y | ||
399 | # CONFIG_MTD_AFS_PARTS is not set | ||
400 | |||
401 | # | ||
402 | # User Modules And Translation Layers | ||
403 | # | ||
404 | CONFIG_MTD_CHAR=y | ||
405 | CONFIG_MTD_BLKDEVS=y | ||
406 | CONFIG_MTD_BLOCK=y | ||
407 | # CONFIG_FTL is not set | ||
408 | # CONFIG_NFTL is not set | ||
409 | # CONFIG_INFTL is not set | ||
410 | # CONFIG_RFD_FTL is not set | ||
411 | # CONFIG_SSFDC is not set | ||
412 | # CONFIG_MTD_OOPS is not set | ||
413 | |||
414 | # | ||
415 | # RAM/ROM/Flash chip drivers | ||
416 | # | ||
417 | # CONFIG_MTD_CFI is not set | ||
418 | # CONFIG_MTD_JEDECPROBE is not set | ||
419 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
420 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
421 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
422 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
423 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
424 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
425 | CONFIG_MTD_CFI_I1=y | ||
426 | CONFIG_MTD_CFI_I2=y | ||
427 | # CONFIG_MTD_CFI_I4 is not set | ||
428 | # CONFIG_MTD_CFI_I8 is not set | ||
429 | # CONFIG_MTD_RAM is not set | ||
430 | # CONFIG_MTD_ROM is not set | ||
431 | # CONFIG_MTD_ABSENT is not set | ||
432 | |||
433 | # | ||
434 | # Mapping drivers for chip access | ||
435 | # | ||
436 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
437 | # CONFIG_MTD_PLATRAM is not set | ||
438 | |||
439 | # | ||
440 | # Self-contained MTD device drivers | ||
441 | # | ||
442 | CONFIG_MTD_DATAFLASH=y | ||
443 | # CONFIG_MTD_M25P80 is not set | ||
444 | # CONFIG_MTD_SLRAM is not set | ||
445 | # CONFIG_MTD_PHRAM is not set | ||
446 | # CONFIG_MTD_MTDRAM is not set | ||
447 | # CONFIG_MTD_BLOCK2MTD is not set | ||
448 | |||
449 | # | ||
450 | # Disk-On-Chip Device Drivers | ||
451 | # | ||
452 | # CONFIG_MTD_DOC2000 is not set | ||
453 | # CONFIG_MTD_DOC2001 is not set | ||
454 | # CONFIG_MTD_DOC2001PLUS is not set | ||
455 | CONFIG_MTD_NAND=y | ||
456 | # CONFIG_MTD_NAND_VERIFY_WRITE is not set | ||
457 | # CONFIG_MTD_NAND_ECC_SMC is not set | ||
458 | # CONFIG_MTD_NAND_MUSEUM_IDS is not set | ||
459 | CONFIG_MTD_NAND_IDS=y | ||
460 | # CONFIG_MTD_NAND_DISKONCHIP is not set | ||
461 | CONFIG_MTD_NAND_AT91=y | ||
462 | CONFIG_MTD_NAND_AT91_ECC_SOFT=y | ||
463 | # CONFIG_MTD_NAND_AT91_ECC_HW is not set | ||
464 | # CONFIG_MTD_NAND_AT91_ECC_NONE is not set | ||
465 | # CONFIG_MTD_NAND_NANDSIM is not set | ||
466 | # CONFIG_MTD_NAND_PLATFORM is not set | ||
467 | # CONFIG_MTD_ALAUDA is not set | ||
468 | # CONFIG_MTD_ONENAND is not set | ||
469 | |||
470 | # | ||
471 | # UBI - Unsorted block images | ||
472 | # | ||
473 | # CONFIG_MTD_UBI is not set | ||
474 | # CONFIG_PARPORT is not set | ||
475 | CONFIG_BLK_DEV=y | ||
476 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
477 | CONFIG_BLK_DEV_LOOP=y | ||
478 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
479 | # CONFIG_BLK_DEV_NBD is not set | ||
480 | # CONFIG_BLK_DEV_UB is not set | ||
481 | # CONFIG_BLK_DEV_RAM is not set | ||
482 | # CONFIG_CDROM_PKTCDVD is not set | ||
483 | # CONFIG_ATA_OVER_ETH is not set | ||
484 | # CONFIG_MISC_DEVICES is not set | ||
485 | |||
486 | # | ||
487 | # SCSI device support | ||
488 | # | ||
489 | # CONFIG_RAID_ATTRS is not set | ||
490 | CONFIG_SCSI=y | ||
491 | CONFIG_SCSI_DMA=y | ||
492 | # CONFIG_SCSI_TGT is not set | ||
493 | # CONFIG_SCSI_NETLINK is not set | ||
494 | CONFIG_SCSI_PROC_FS=y | ||
495 | |||
496 | # | ||
497 | # SCSI support type (disk, tape, CD-ROM) | ||
498 | # | ||
499 | CONFIG_BLK_DEV_SD=y | ||
500 | # CONFIG_CHR_DEV_ST is not set | ||
501 | # CONFIG_CHR_DEV_OSST is not set | ||
502 | # CONFIG_BLK_DEV_SR is not set | ||
503 | # CONFIG_CHR_DEV_SG is not set | ||
504 | # CONFIG_CHR_DEV_SCH is not set | ||
505 | |||
506 | # | ||
507 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||
508 | # | ||
509 | CONFIG_SCSI_MULTI_LUN=y | ||
510 | # CONFIG_SCSI_CONSTANTS is not set | ||
511 | # CONFIG_SCSI_LOGGING is not set | ||
512 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
513 | CONFIG_SCSI_WAIT_SCAN=m | ||
514 | |||
515 | # | ||
516 | # SCSI Transports | ||
517 | # | ||
518 | # CONFIG_SCSI_SPI_ATTRS is not set | ||
519 | # CONFIG_SCSI_FC_ATTRS is not set | ||
520 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
521 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
522 | # CONFIG_SCSI_SRP_ATTRS is not set | ||
523 | CONFIG_SCSI_LOWLEVEL=y | ||
524 | # CONFIG_ISCSI_TCP is not set | ||
525 | # CONFIG_SCSI_DEBUG is not set | ||
526 | # CONFIG_ATA is not set | ||
527 | # CONFIG_MD is not set | ||
528 | CONFIG_NETDEVICES=y | ||
529 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
530 | # CONFIG_DUMMY is not set | ||
531 | # CONFIG_BONDING is not set | ||
532 | # CONFIG_MACVLAN is not set | ||
533 | # CONFIG_EQUALIZER is not set | ||
534 | # CONFIG_TUN is not set | ||
535 | # CONFIG_VETH is not set | ||
536 | CONFIG_PHYLIB=y | ||
537 | |||
538 | # | ||
539 | # MII PHY device drivers | ||
540 | # | ||
541 | # CONFIG_MARVELL_PHY is not set | ||
542 | # CONFIG_DAVICOM_PHY is not set | ||
543 | # CONFIG_QSEMI_PHY is not set | ||
544 | # CONFIG_LXT_PHY is not set | ||
545 | # CONFIG_CICADA_PHY is not set | ||
546 | # CONFIG_VITESSE_PHY is not set | ||
547 | # CONFIG_SMSC_PHY is not set | ||
548 | # CONFIG_BROADCOM_PHY is not set | ||
549 | # CONFIG_ICPLUS_PHY is not set | ||
550 | # CONFIG_FIXED_PHY is not set | ||
551 | # CONFIG_MDIO_BITBANG is not set | ||
552 | CONFIG_NET_ETHERNET=y | ||
553 | CONFIG_MII=y | ||
554 | CONFIG_MACB=y | ||
555 | # CONFIG_AX88796 is not set | ||
556 | # CONFIG_SMC91X is not set | ||
557 | # CONFIG_DM9000 is not set | ||
558 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
559 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
560 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
561 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
562 | # CONFIG_B44 is not set | ||
563 | CONFIG_NETDEV_1000=y | ||
564 | CONFIG_NETDEV_10000=y | ||
565 | |||
566 | # | ||
567 | # Wireless LAN | ||
568 | # | ||
569 | # CONFIG_WLAN_PRE80211 is not set | ||
570 | # CONFIG_WLAN_80211 is not set | ||
571 | |||
572 | # | ||
573 | # USB Network Adapters | ||
574 | # | ||
575 | # CONFIG_USB_CATC is not set | ||
576 | # CONFIG_USB_KAWETH is not set | ||
577 | # CONFIG_USB_PEGASUS is not set | ||
578 | # CONFIG_USB_RTL8150 is not set | ||
579 | # CONFIG_USB_USBNET is not set | ||
580 | # CONFIG_WAN is not set | ||
581 | # CONFIG_PPP is not set | ||
582 | # CONFIG_SLIP is not set | ||
583 | # CONFIG_SHAPER is not set | ||
584 | # CONFIG_NETCONSOLE is not set | ||
585 | # CONFIG_NETPOLL is not set | ||
586 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
587 | # CONFIG_ISDN is not set | ||
588 | |||
589 | # | ||
590 | # Input device support | ||
591 | # | ||
592 | CONFIG_INPUT=y | ||
593 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
594 | # CONFIG_INPUT_POLLDEV is not set | ||
595 | |||
596 | # | ||
597 | # Userland interfaces | ||
598 | # | ||
599 | CONFIG_INPUT_MOUSEDEV=y | ||
600 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
601 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
602 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
603 | # CONFIG_INPUT_JOYDEV is not set | ||
604 | CONFIG_INPUT_EVDEV=y | ||
605 | CONFIG_INPUT_EVBUG=y | ||
606 | |||
607 | # | ||
608 | # Input Device Drivers | ||
609 | # | ||
610 | CONFIG_INPUT_KEYBOARD=y | ||
611 | # CONFIG_KEYBOARD_ATKBD is not set | ||
612 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
613 | # CONFIG_KEYBOARD_LKKBD is not set | ||
614 | # CONFIG_KEYBOARD_XTKBD is not set | ||
615 | # CONFIG_KEYBOARD_NEWTON is not set | ||
616 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
617 | CONFIG_KEYBOARD_GPIO=y | ||
618 | # CONFIG_INPUT_MOUSE is not set | ||
619 | # CONFIG_INPUT_JOYSTICK is not set | ||
620 | # CONFIG_INPUT_TABLET is not set | ||
621 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
622 | # CONFIG_INPUT_MISC is not set | ||
623 | |||
624 | # | ||
625 | # Hardware I/O ports | ||
626 | # | ||
627 | # CONFIG_SERIO is not set | ||
628 | # CONFIG_GAMEPORT is not set | ||
629 | |||
630 | # | ||
631 | # Character devices | ||
632 | # | ||
633 | CONFIG_VT=y | ||
634 | CONFIG_VT_CONSOLE=y | ||
635 | CONFIG_HW_CONSOLE=y | ||
636 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
637 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
638 | |||
639 | # | ||
640 | # Serial drivers | ||
641 | # | ||
642 | # CONFIG_SERIAL_8250 is not set | ||
643 | |||
644 | # | ||
645 | # Non-8250 serial port support | ||
646 | # | ||
647 | CONFIG_SERIAL_ATMEL=y | ||
648 | CONFIG_SERIAL_ATMEL_CONSOLE=y | ||
649 | # CONFIG_SERIAL_ATMEL_TTYAT is not set | ||
650 | CONFIG_SERIAL_CORE=y | ||
651 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
652 | CONFIG_UNIX98_PTYS=y | ||
653 | CONFIG_LEGACY_PTYS=y | ||
654 | CONFIG_LEGACY_PTY_COUNT=256 | ||
655 | # CONFIG_IPMI_HANDLER is not set | ||
656 | CONFIG_HW_RANDOM=y | ||
657 | # CONFIG_NVRAM is not set | ||
658 | # CONFIG_R3964 is not set | ||
659 | # CONFIG_RAW_DRIVER is not set | ||
660 | # CONFIG_TCG_TPM is not set | ||
661 | # CONFIG_I2C is not set | ||
662 | |||
663 | # | ||
664 | # SPI support | ||
665 | # | ||
666 | CONFIG_SPI=y | ||
667 | # CONFIG_SPI_DEBUG is not set | ||
668 | CONFIG_SPI_MASTER=y | ||
669 | |||
670 | # | ||
671 | # SPI Master Controller Drivers | ||
672 | # | ||
673 | CONFIG_SPI_ATMEL=y | ||
674 | # CONFIG_SPI_BITBANG is not set | ||
675 | |||
676 | # | ||
677 | # SPI Protocol Masters | ||
678 | # | ||
679 | # CONFIG_SPI_AT25 is not set | ||
680 | # CONFIG_SPI_SPIDEV is not set | ||
681 | # CONFIG_SPI_TLE62X0 is not set | ||
682 | # CONFIG_W1 is not set | ||
683 | # CONFIG_POWER_SUPPLY is not set | ||
684 | # CONFIG_HWMON is not set | ||
685 | # CONFIG_WATCHDOG is not set | ||
686 | |||
687 | # | ||
688 | # Sonics Silicon Backplane | ||
689 | # | ||
690 | CONFIG_SSB_POSSIBLE=y | ||
691 | # CONFIG_SSB is not set | ||
692 | |||
693 | # | ||
694 | # Multifunction device drivers | ||
695 | # | ||
696 | # CONFIG_MFD_SM501 is not set | ||
697 | |||
698 | # | ||
699 | # Multimedia devices | ||
700 | # | ||
701 | # CONFIG_VIDEO_DEV is not set | ||
702 | # CONFIG_DVB_CORE is not set | ||
703 | # CONFIG_DAB is not set | ||
704 | |||
705 | # | ||
706 | # Graphics support | ||
707 | # | ||
708 | # CONFIG_VGASTATE is not set | ||
709 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
710 | # CONFIG_FB is not set | ||
711 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
712 | |||
713 | # | ||
714 | # Display device support | ||
715 | # | ||
716 | # CONFIG_DISPLAY_SUPPORT is not set | ||
717 | |||
718 | # | ||
719 | # Console display driver support | ||
720 | # | ||
721 | # CONFIG_VGA_CONSOLE is not set | ||
722 | CONFIG_DUMMY_CONSOLE=y | ||
723 | |||
724 | # | ||
725 | # Sound | ||
726 | # | ||
727 | # CONFIG_SOUND is not set | ||
728 | CONFIG_HID_SUPPORT=y | ||
729 | CONFIG_HID=y | ||
730 | # CONFIG_HID_DEBUG is not set | ||
731 | # CONFIG_HIDRAW is not set | ||
732 | |||
733 | # | ||
734 | # USB Input Devices | ||
735 | # | ||
736 | # CONFIG_USB_HID is not set | ||
737 | |||
738 | # | ||
739 | # USB HID Boot Protocol drivers | ||
740 | # | ||
741 | # CONFIG_USB_KBD is not set | ||
742 | # CONFIG_USB_MOUSE is not set | ||
743 | CONFIG_USB_SUPPORT=y | ||
744 | CONFIG_USB_ARCH_HAS_HCD=y | ||
745 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
746 | # CONFIG_USB_ARCH_HAS_EHCI is not set | ||
747 | CONFIG_USB=y | ||
748 | # CONFIG_USB_DEBUG is not set | ||
749 | |||
750 | # | ||
751 | # Miscellaneous USB options | ||
752 | # | ||
753 | CONFIG_USB_DEVICEFS=y | ||
754 | CONFIG_USB_DEVICE_CLASS=y | ||
755 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
756 | # CONFIG_USB_SUSPEND is not set | ||
757 | # CONFIG_USB_PERSIST is not set | ||
758 | # CONFIG_USB_OTG is not set | ||
759 | |||
760 | # | ||
761 | # USB Host Controller Drivers | ||
762 | # | ||
763 | # CONFIG_USB_ISP116X_HCD is not set | ||
764 | CONFIG_USB_OHCI_HCD=y | ||
765 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set | ||
766 | # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set | ||
767 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | ||
768 | # CONFIG_USB_SL811_HCD is not set | ||
769 | # CONFIG_USB_R8A66597_HCD is not set | ||
770 | |||
771 | # | ||
772 | # USB Device Class drivers | ||
773 | # | ||
774 | # CONFIG_USB_ACM is not set | ||
775 | # CONFIG_USB_PRINTER is not set | ||
776 | |||
777 | # | ||
778 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
779 | # | ||
780 | |||
781 | # | ||
782 | # may also be needed; see USB_STORAGE Help for more information | ||
783 | # | ||
784 | CONFIG_USB_STORAGE=y | ||
785 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
786 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
787 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
788 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
789 | # CONFIG_USB_STORAGE_DPCM is not set | ||
790 | # CONFIG_USB_STORAGE_USBAT is not set | ||
791 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
792 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
793 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
794 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
795 | # CONFIG_USB_STORAGE_KARMA is not set | ||
796 | # CONFIG_USB_LIBUSUAL is not set | ||
797 | |||
798 | # | ||
799 | # USB Imaging devices | ||
800 | # | ||
801 | # CONFIG_USB_MDC800 is not set | ||
802 | # CONFIG_USB_MICROTEK is not set | ||
803 | CONFIG_USB_MON=y | ||
804 | |||
805 | # | ||
806 | # USB port drivers | ||
807 | # | ||
808 | |||
809 | # | ||
810 | # USB Serial Converter support | ||
811 | # | ||
812 | # CONFIG_USB_SERIAL is not set | ||
813 | |||
814 | # | ||
815 | # USB Miscellaneous drivers | ||
816 | # | ||
817 | # CONFIG_USB_EMI62 is not set | ||
818 | # CONFIG_USB_EMI26 is not set | ||
819 | # CONFIG_USB_ADUTUX is not set | ||
820 | # CONFIG_USB_AUERSWALD is not set | ||
821 | # CONFIG_USB_RIO500 is not set | ||
822 | # CONFIG_USB_LEGOTOWER is not set | ||
823 | # CONFIG_USB_LCD is not set | ||
824 | # CONFIG_USB_BERRY_CHARGE is not set | ||
825 | # CONFIG_USB_LED is not set | ||
826 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
827 | # CONFIG_USB_CYTHERM is not set | ||
828 | # CONFIG_USB_PHIDGET is not set | ||
829 | # CONFIG_USB_IDMOUSE is not set | ||
830 | # CONFIG_USB_FTDI_ELAN is not set | ||
831 | # CONFIG_USB_APPLEDISPLAY is not set | ||
832 | # CONFIG_USB_LD is not set | ||
833 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
834 | # CONFIG_USB_IOWARRIOR is not set | ||
835 | # CONFIG_USB_TEST is not set | ||
836 | |||
837 | # | ||
838 | # USB DSL modem support | ||
839 | # | ||
840 | |||
841 | # | ||
842 | # USB Gadget Support | ||
843 | # | ||
844 | CONFIG_USB_GADGET=y | ||
845 | # CONFIG_USB_GADGET_DEBUG is not set | ||
846 | # CONFIG_USB_GADGET_DEBUG_FILES is not set | ||
847 | CONFIG_USB_GADGET_SELECTED=y | ||
848 | # CONFIG_USB_GADGET_AMD5536UDC is not set | ||
849 | # CONFIG_USB_GADGET_ATMEL_USBA is not set | ||
850 | # CONFIG_USB_GADGET_FSL_USB2 is not set | ||
851 | # CONFIG_USB_GADGET_NET2280 is not set | ||
852 | # CONFIG_USB_GADGET_PXA2XX is not set | ||
853 | # CONFIG_USB_GADGET_M66592 is not set | ||
854 | # CONFIG_USB_GADGET_GOKU is not set | ||
855 | # CONFIG_USB_GADGET_LH7A40X is not set | ||
856 | # CONFIG_USB_GADGET_OMAP is not set | ||
857 | # CONFIG_USB_GADGET_S3C2410 is not set | ||
858 | CONFIG_USB_GADGET_AT91=y | ||
859 | CONFIG_USB_AT91=y | ||
860 | # CONFIG_USB_GADGET_DUMMY_HCD is not set | ||
861 | # CONFIG_USB_GADGET_DUALSPEED is not set | ||
862 | # CONFIG_USB_ZERO is not set | ||
863 | CONFIG_USB_ETH=y | ||
864 | CONFIG_USB_ETH_RNDIS=y | ||
865 | # CONFIG_USB_GADGETFS is not set | ||
866 | # CONFIG_USB_FILE_STORAGE is not set | ||
867 | # CONFIG_USB_G_SERIAL is not set | ||
868 | # CONFIG_USB_MIDI_GADGET is not set | ||
869 | # CONFIG_MMC is not set | ||
870 | CONFIG_NEW_LEDS=y | ||
871 | CONFIG_LEDS_CLASS=y | ||
872 | |||
873 | # | ||
874 | # LED drivers | ||
875 | # | ||
876 | CONFIG_LEDS_GPIO=y | ||
877 | |||
878 | # | ||
879 | # LED Triggers | ||
880 | # | ||
881 | CONFIG_LEDS_TRIGGERS=y | ||
882 | # CONFIG_LEDS_TRIGGER_TIMER is not set | ||
883 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | ||
884 | CONFIG_RTC_LIB=y | ||
885 | # CONFIG_RTC_CLASS is not set | ||
886 | |||
887 | # | ||
888 | # File systems | ||
889 | # | ||
890 | CONFIG_EXT2_FS=y | ||
891 | # CONFIG_EXT2_FS_XATTR is not set | ||
892 | # CONFIG_EXT2_FS_XIP is not set | ||
893 | # CONFIG_EXT3_FS is not set | ||
894 | # CONFIG_EXT4DEV_FS is not set | ||
895 | # CONFIG_REISERFS_FS is not set | ||
896 | # CONFIG_JFS_FS is not set | ||
897 | CONFIG_FS_POSIX_ACL=y | ||
898 | # CONFIG_XFS_FS is not set | ||
899 | # CONFIG_GFS2_FS is not set | ||
900 | # CONFIG_OCFS2_FS is not set | ||
901 | # CONFIG_MINIX_FS is not set | ||
902 | # CONFIG_ROMFS_FS is not set | ||
903 | CONFIG_INOTIFY=y | ||
904 | CONFIG_INOTIFY_USER=y | ||
905 | # CONFIG_QUOTA is not set | ||
906 | CONFIG_DNOTIFY=y | ||
907 | # CONFIG_AUTOFS_FS is not set | ||
908 | # CONFIG_AUTOFS4_FS is not set | ||
909 | CONFIG_FUSE_FS=m | ||
910 | |||
911 | # | ||
912 | # CD-ROM/DVD Filesystems | ||
913 | # | ||
914 | # CONFIG_ISO9660_FS is not set | ||
915 | # CONFIG_UDF_FS is not set | ||
916 | |||
917 | # | ||
918 | # DOS/FAT/NT Filesystems | ||
919 | # | ||
920 | CONFIG_FAT_FS=y | ||
921 | # CONFIG_MSDOS_FS is not set | ||
922 | CONFIG_VFAT_FS=y | ||
923 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
924 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
925 | # CONFIG_NTFS_FS is not set | ||
926 | |||
927 | # | ||
928 | # Pseudo filesystems | ||
929 | # | ||
930 | CONFIG_PROC_FS=y | ||
931 | CONFIG_PROC_SYSCTL=y | ||
932 | CONFIG_SYSFS=y | ||
933 | CONFIG_TMPFS=y | ||
934 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
935 | # CONFIG_HUGETLB_PAGE is not set | ||
936 | # CONFIG_CONFIGFS_FS is not set | ||
937 | |||
938 | # | ||
939 | # Miscellaneous filesystems | ||
940 | # | ||
941 | # CONFIG_ADFS_FS is not set | ||
942 | # CONFIG_AFFS_FS is not set | ||
943 | # CONFIG_HFS_FS is not set | ||
944 | # CONFIG_HFSPLUS_FS is not set | ||
945 | # CONFIG_BEFS_FS is not set | ||
946 | # CONFIG_BFS_FS is not set | ||
947 | # CONFIG_EFS_FS is not set | ||
948 | CONFIG_JFFS2_FS=y | ||
949 | CONFIG_JFFS2_FS_DEBUG=0 | ||
950 | CONFIG_JFFS2_FS_WRITEBUFFER=y | ||
951 | # CONFIG_JFFS2_FS_WBUF_VERIFY is not set | ||
952 | # CONFIG_JFFS2_SUMMARY is not set | ||
953 | # CONFIG_JFFS2_FS_XATTR is not set | ||
954 | # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set | ||
955 | CONFIG_JFFS2_ZLIB=y | ||
956 | # CONFIG_JFFS2_LZO is not set | ||
957 | CONFIG_JFFS2_RTIME=y | ||
958 | # CONFIG_JFFS2_RUBIN is not set | ||
959 | # CONFIG_CRAMFS is not set | ||
960 | # CONFIG_VXFS_FS is not set | ||
961 | # CONFIG_HPFS_FS is not set | ||
962 | # CONFIG_QNX4FS_FS is not set | ||
963 | # CONFIG_SYSV_FS is not set | ||
964 | # CONFIG_UFS_FS is not set | ||
965 | CONFIG_NETWORK_FILESYSTEMS=y | ||
966 | CONFIG_NFS_FS=y | ||
967 | CONFIG_NFS_V3=y | ||
968 | CONFIG_NFS_V3_ACL=y | ||
969 | CONFIG_NFS_V4=y | ||
970 | # CONFIG_NFS_DIRECTIO is not set | ||
971 | # CONFIG_NFSD is not set | ||
972 | CONFIG_ROOT_NFS=y | ||
973 | CONFIG_LOCKD=y | ||
974 | CONFIG_LOCKD_V4=y | ||
975 | CONFIG_NFS_ACL_SUPPORT=y | ||
976 | CONFIG_NFS_COMMON=y | ||
977 | CONFIG_SUNRPC=y | ||
978 | CONFIG_SUNRPC_GSS=y | ||
979 | # CONFIG_SUNRPC_BIND34 is not set | ||
980 | CONFIG_RPCSEC_GSS_KRB5=y | ||
981 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
982 | # CONFIG_SMB_FS is not set | ||
983 | # CONFIG_CIFS is not set | ||
984 | # CONFIG_NCP_FS is not set | ||
985 | # CONFIG_CODA_FS is not set | ||
986 | # CONFIG_AFS_FS is not set | ||
987 | |||
988 | # | ||
989 | # Partition Types | ||
990 | # | ||
991 | # CONFIG_PARTITION_ADVANCED is not set | ||
992 | CONFIG_MSDOS_PARTITION=y | ||
993 | CONFIG_NLS=y | ||
994 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
995 | CONFIG_NLS_CODEPAGE_437=y | ||
996 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
997 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
998 | CONFIG_NLS_CODEPAGE_850=y | ||
999 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
1000 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
1001 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
1002 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
1003 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
1004 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
1005 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
1006 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
1007 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
1008 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
1009 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
1010 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
1011 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
1012 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
1013 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
1014 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
1015 | # CONFIG_NLS_ISO8859_8 is not set | ||
1016 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
1017 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
1018 | # CONFIG_NLS_ASCII is not set | ||
1019 | CONFIG_NLS_ISO8859_1=y | ||
1020 | # CONFIG_NLS_ISO8859_2 is not set | ||
1021 | # CONFIG_NLS_ISO8859_3 is not set | ||
1022 | # CONFIG_NLS_ISO8859_4 is not set | ||
1023 | # CONFIG_NLS_ISO8859_5 is not set | ||
1024 | # CONFIG_NLS_ISO8859_6 is not set | ||
1025 | # CONFIG_NLS_ISO8859_7 is not set | ||
1026 | # CONFIG_NLS_ISO8859_9 is not set | ||
1027 | # CONFIG_NLS_ISO8859_13 is not set | ||
1028 | # CONFIG_NLS_ISO8859_14 is not set | ||
1029 | # CONFIG_NLS_ISO8859_15 is not set | ||
1030 | # CONFIG_NLS_KOI8_R is not set | ||
1031 | # CONFIG_NLS_KOI8_U is not set | ||
1032 | # CONFIG_NLS_UTF8 is not set | ||
1033 | # CONFIG_DLM is not set | ||
1034 | # CONFIG_INSTRUMENTATION is not set | ||
1035 | |||
1036 | # | ||
1037 | # Kernel hacking | ||
1038 | # | ||
1039 | # CONFIG_PRINTK_TIME is not set | ||
1040 | CONFIG_ENABLE_WARN_DEPRECATED=y | ||
1041 | CONFIG_ENABLE_MUST_CHECK=y | ||
1042 | # CONFIG_MAGIC_SYSRQ is not set | ||
1043 | # CONFIG_UNUSED_SYMBOLS is not set | ||
1044 | # CONFIG_DEBUG_FS is not set | ||
1045 | # CONFIG_HEADERS_CHECK is not set | ||
1046 | CONFIG_DEBUG_KERNEL=y | ||
1047 | # CONFIG_DEBUG_SHIRQ is not set | ||
1048 | CONFIG_DETECT_SOFTLOCKUP=y | ||
1049 | CONFIG_SCHED_DEBUG=y | ||
1050 | # CONFIG_SCHEDSTATS is not set | ||
1051 | # CONFIG_TIMER_STATS is not set | ||
1052 | # CONFIG_DEBUG_SLAB is not set | ||
1053 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
1054 | # CONFIG_RT_MUTEX_TESTER is not set | ||
1055 | # CONFIG_DEBUG_SPINLOCK is not set | ||
1056 | # CONFIG_DEBUG_MUTEXES is not set | ||
1057 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
1058 | # CONFIG_PROVE_LOCKING is not set | ||
1059 | # CONFIG_LOCK_STAT is not set | ||
1060 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
1061 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
1062 | # CONFIG_DEBUG_KOBJECT is not set | ||
1063 | CONFIG_DEBUG_BUGVERBOSE=y | ||
1064 | # CONFIG_DEBUG_INFO is not set | ||
1065 | # CONFIG_DEBUG_VM is not set | ||
1066 | # CONFIG_DEBUG_LIST is not set | ||
1067 | # CONFIG_DEBUG_SG is not set | ||
1068 | CONFIG_FRAME_POINTER=y | ||
1069 | CONFIG_FORCED_INLINING=y | ||
1070 | # CONFIG_BOOT_PRINTK_DELAY is not set | ||
1071 | # CONFIG_RCU_TORTURE_TEST is not set | ||
1072 | # CONFIG_FAULT_INJECTION is not set | ||
1073 | # CONFIG_SAMPLES is not set | ||
1074 | CONFIG_DEBUG_USER=y | ||
1075 | # CONFIG_DEBUG_ERRORS is not set | ||
1076 | CONFIG_DEBUG_LL=y | ||
1077 | # CONFIG_DEBUG_ICEDCC is not set | ||
1078 | |||
1079 | # | ||
1080 | # Security options | ||
1081 | # | ||
1082 | # CONFIG_KEYS is not set | ||
1083 | # CONFIG_SECURITY is not set | ||
1084 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | ||
1085 | CONFIG_CRYPTO=y | ||
1086 | CONFIG_CRYPTO_ALGAPI=y | ||
1087 | CONFIG_CRYPTO_BLKCIPHER=y | ||
1088 | CONFIG_CRYPTO_MANAGER=y | ||
1089 | # CONFIG_CRYPTO_HMAC is not set | ||
1090 | # CONFIG_CRYPTO_XCBC is not set | ||
1091 | # CONFIG_CRYPTO_NULL is not set | ||
1092 | # CONFIG_CRYPTO_MD4 is not set | ||
1093 | CONFIG_CRYPTO_MD5=y | ||
1094 | # CONFIG_CRYPTO_SHA1 is not set | ||
1095 | # CONFIG_CRYPTO_SHA256 is not set | ||
1096 | # CONFIG_CRYPTO_SHA512 is not set | ||
1097 | # CONFIG_CRYPTO_WP512 is not set | ||
1098 | # CONFIG_CRYPTO_TGR192 is not set | ||
1099 | # CONFIG_CRYPTO_GF128MUL is not set | ||
1100 | # CONFIG_CRYPTO_ECB is not set | ||
1101 | CONFIG_CRYPTO_CBC=y | ||
1102 | # CONFIG_CRYPTO_PCBC is not set | ||
1103 | # CONFIG_CRYPTO_LRW is not set | ||
1104 | # CONFIG_CRYPTO_XTS is not set | ||
1105 | # CONFIG_CRYPTO_CRYPTD is not set | ||
1106 | CONFIG_CRYPTO_DES=y | ||
1107 | # CONFIG_CRYPTO_FCRYPT is not set | ||
1108 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
1109 | # CONFIG_CRYPTO_TWOFISH is not set | ||
1110 | # CONFIG_CRYPTO_SERPENT is not set | ||
1111 | # CONFIG_CRYPTO_AES is not set | ||
1112 | # CONFIG_CRYPTO_CAST5 is not set | ||
1113 | # CONFIG_CRYPTO_CAST6 is not set | ||
1114 | # CONFIG_CRYPTO_TEA is not set | ||
1115 | # CONFIG_CRYPTO_ARC4 is not set | ||
1116 | # CONFIG_CRYPTO_KHAZAD is not set | ||
1117 | # CONFIG_CRYPTO_ANUBIS is not set | ||
1118 | # CONFIG_CRYPTO_SEED is not set | ||
1119 | # CONFIG_CRYPTO_DEFLATE is not set | ||
1120 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
1121 | # CONFIG_CRYPTO_CRC32C is not set | ||
1122 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
1123 | # CONFIG_CRYPTO_TEST is not set | ||
1124 | # CONFIG_CRYPTO_AUTHENC is not set | ||
1125 | # CONFIG_CRYPTO_HW is not set | ||
1126 | |||
1127 | # | ||
1128 | # Library routines | ||
1129 | # | ||
1130 | CONFIG_BITREVERSE=y | ||
1131 | # CONFIG_CRC_CCITT is not set | ||
1132 | # CONFIG_CRC16 is not set | ||
1133 | # CONFIG_CRC_ITU_T is not set | ||
1134 | CONFIG_CRC32=y | ||
1135 | # CONFIG_CRC7 is not set | ||
1136 | # CONFIG_LIBCRC32C is not set | ||
1137 | CONFIG_ZLIB_INFLATE=y | ||
1138 | CONFIG_ZLIB_DEFLATE=y | ||
1139 | CONFIG_PLIST=y | ||
1140 | CONFIG_HAS_IOMEM=y | ||
1141 | CONFIG_HAS_IOPORT=y | ||
1142 | CONFIG_HAS_DMA=y | ||
diff --git a/arch/arm/configs/usb-a9263_defconfig b/arch/arm/configs/usb-a9263_defconfig new file mode 100644 index 000000000000..48d455bc7363 --- /dev/null +++ b/arch/arm/configs/usb-a9263_defconfig | |||
@@ -0,0 +1,1134 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.24 | ||
4 | # Tue Apr 15 11:15:19 2008 | ||
5 | # | ||
6 | CONFIG_ARM=y | ||
7 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y | ||
8 | CONFIG_GENERIC_GPIO=y | ||
9 | CONFIG_GENERIC_TIME=y | ||
10 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
11 | CONFIG_MMU=y | ||
12 | # CONFIG_NO_IOPORT is not set | ||
13 | CONFIG_GENERIC_HARDIRQS=y | ||
14 | CONFIG_STACKTRACE_SUPPORT=y | ||
15 | CONFIG_LOCKDEP_SUPPORT=y | ||
16 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
17 | CONFIG_HARDIRQS_SW_RESEND=y | ||
18 | CONFIG_GENERIC_IRQ_PROBE=y | ||
19 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
20 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | ||
21 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | ||
22 | CONFIG_GENERIC_HWEIGHT=y | ||
23 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
24 | CONFIG_ZONE_DMA=y | ||
25 | CONFIG_VECTORS_BASE=0xffff0000 | ||
26 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
27 | |||
28 | # | ||
29 | # General setup | ||
30 | # | ||
31 | CONFIG_EXPERIMENTAL=y | ||
32 | CONFIG_BROKEN_ON_SMP=y | ||
33 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
34 | CONFIG_LOCALVERSION="" | ||
35 | # CONFIG_LOCALVERSION_AUTO is not set | ||
36 | # CONFIG_SWAP is not set | ||
37 | CONFIG_SYSVIPC=y | ||
38 | CONFIG_SYSVIPC_SYSCTL=y | ||
39 | # CONFIG_POSIX_MQUEUE is not set | ||
40 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
41 | # CONFIG_TASKSTATS is not set | ||
42 | # CONFIG_USER_NS is not set | ||
43 | # CONFIG_PID_NS is not set | ||
44 | # CONFIG_AUDIT is not set | ||
45 | # CONFIG_IKCONFIG is not set | ||
46 | CONFIG_LOG_BUF_SHIFT=14 | ||
47 | # CONFIG_CGROUPS is not set | ||
48 | CONFIG_FAIR_GROUP_SCHED=y | ||
49 | CONFIG_FAIR_USER_SCHED=y | ||
50 | # CONFIG_FAIR_CGROUP_SCHED is not set | ||
51 | # CONFIG_SYSFS_DEPRECATED is not set | ||
52 | # CONFIG_RELAY is not set | ||
53 | # CONFIG_BLK_DEV_INITRD is not set | ||
54 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | ||
55 | CONFIG_SYSCTL=y | ||
56 | # CONFIG_EMBEDDED is not set | ||
57 | CONFIG_UID16=y | ||
58 | CONFIG_SYSCTL_SYSCALL=y | ||
59 | CONFIG_KALLSYMS=y | ||
60 | # CONFIG_KALLSYMS_ALL is not set | ||
61 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
62 | CONFIG_HOTPLUG=y | ||
63 | CONFIG_PRINTK=y | ||
64 | CONFIG_BUG=y | ||
65 | CONFIG_ELF_CORE=y | ||
66 | CONFIG_BASE_FULL=y | ||
67 | CONFIG_FUTEX=y | ||
68 | CONFIG_ANON_INODES=y | ||
69 | CONFIG_EPOLL=y | ||
70 | CONFIG_SIGNALFD=y | ||
71 | CONFIG_EVENTFD=y | ||
72 | CONFIG_SHMEM=y | ||
73 | CONFIG_VM_EVENT_COUNTERS=y | ||
74 | CONFIG_SLAB=y | ||
75 | # CONFIG_SLUB is not set | ||
76 | # CONFIG_SLOB is not set | ||
77 | CONFIG_SLABINFO=y | ||
78 | CONFIG_RT_MUTEXES=y | ||
79 | # CONFIG_TINY_SHMEM is not set | ||
80 | CONFIG_BASE_SMALL=0 | ||
81 | CONFIG_MODULES=y | ||
82 | CONFIG_MODULE_UNLOAD=y | ||
83 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
84 | # CONFIG_MODVERSIONS is not set | ||
85 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
86 | CONFIG_KMOD=y | ||
87 | CONFIG_BLOCK=y | ||
88 | # CONFIG_LBD is not set | ||
89 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
90 | # CONFIG_LSF is not set | ||
91 | # CONFIG_BLK_DEV_BSG is not set | ||
92 | |||
93 | # | ||
94 | # IO Schedulers | ||
95 | # | ||
96 | CONFIG_IOSCHED_NOOP=y | ||
97 | CONFIG_IOSCHED_AS=y | ||
98 | # CONFIG_IOSCHED_DEADLINE is not set | ||
99 | # CONFIG_IOSCHED_CFQ is not set | ||
100 | CONFIG_DEFAULT_AS=y | ||
101 | # CONFIG_DEFAULT_DEADLINE is not set | ||
102 | # CONFIG_DEFAULT_CFQ is not set | ||
103 | # CONFIG_DEFAULT_NOOP is not set | ||
104 | CONFIG_DEFAULT_IOSCHED="anticipatory" | ||
105 | |||
106 | # | ||
107 | # System Type | ||
108 | # | ||
109 | # CONFIG_ARCH_AAEC2000 is not set | ||
110 | # CONFIG_ARCH_INTEGRATOR is not set | ||
111 | # CONFIG_ARCH_REALVIEW is not set | ||
112 | # CONFIG_ARCH_VERSATILE is not set | ||
113 | CONFIG_ARCH_AT91=y | ||
114 | # CONFIG_ARCH_CLPS7500 is not set | ||
115 | # CONFIG_ARCH_CLPS711X is not set | ||
116 | # CONFIG_ARCH_CO285 is not set | ||
117 | # CONFIG_ARCH_EBSA110 is not set | ||
118 | # CONFIG_ARCH_EP93XX is not set | ||
119 | # CONFIG_ARCH_FOOTBRIDGE is not set | ||
120 | # CONFIG_ARCH_NETX is not set | ||
121 | # CONFIG_ARCH_H720X is not set | ||
122 | # CONFIG_ARCH_IMX is not set | ||
123 | # CONFIG_ARCH_IOP13XX is not set | ||
124 | # CONFIG_ARCH_IOP32X is not set | ||
125 | # CONFIG_ARCH_IOP33X is not set | ||
126 | # CONFIG_ARCH_IXP23XX is not set | ||
127 | # CONFIG_ARCH_IXP2000 is not set | ||
128 | # CONFIG_ARCH_IXP4XX is not set | ||
129 | # CONFIG_ARCH_L7200 is not set | ||
130 | # CONFIG_ARCH_KS8695 is not set | ||
131 | # CONFIG_ARCH_NS9XXX is not set | ||
132 | # CONFIG_ARCH_MXC is not set | ||
133 | # CONFIG_ARCH_PNX4008 is not set | ||
134 | # CONFIG_ARCH_PXA is not set | ||
135 | # CONFIG_ARCH_RPC is not set | ||
136 | # CONFIG_ARCH_SA1100 is not set | ||
137 | # CONFIG_ARCH_S3C2410 is not set | ||
138 | # CONFIG_ARCH_SHARK is not set | ||
139 | # CONFIG_ARCH_LH7A40X is not set | ||
140 | # CONFIG_ARCH_DAVINCI is not set | ||
141 | # CONFIG_ARCH_OMAP is not set | ||
142 | |||
143 | # | ||
144 | # Boot options | ||
145 | # | ||
146 | |||
147 | # | ||
148 | # Power management | ||
149 | # | ||
150 | |||
151 | # | ||
152 | # Atmel AT91 System-on-Chip | ||
153 | # | ||
154 | # CONFIG_ARCH_AT91RM9200 is not set | ||
155 | # CONFIG_ARCH_AT91SAM9260 is not set | ||
156 | # CONFIG_ARCH_AT91SAM9261 is not set | ||
157 | CONFIG_ARCH_AT91SAM9263=y | ||
158 | # CONFIG_ARCH_AT91SAM9RL is not set | ||
159 | # CONFIG_ARCH_AT91CAP9 is not set | ||
160 | # CONFIG_ARCH_AT91X40 is not set | ||
161 | CONFIG_AT91_PMC_UNIT=y | ||
162 | |||
163 | # | ||
164 | # AT91SAM9263 Board Type | ||
165 | # | ||
166 | # CONFIG_MACH_AT91SAM9263EK is not set | ||
167 | CONFIG_MACH_USB_A9263=y | ||
168 | |||
169 | # | ||
170 | # AT91 Board Options | ||
171 | # | ||
172 | |||
173 | # | ||
174 | # AT91 Feature Selections | ||
175 | # | ||
176 | # CONFIG_AT91_PROGRAMMABLE_CLOCKS is not set | ||
177 | CONFIG_AT91_SLOW_CLOCK=y | ||
178 | CONFIG_AT91_TIMER_HZ=100 | ||
179 | CONFIG_AT91_EARLY_DBGU=y | ||
180 | # CONFIG_AT91_EARLY_USART0 is not set | ||
181 | # CONFIG_AT91_EARLY_USART1 is not set | ||
182 | # CONFIG_AT91_EARLY_USART2 is not set | ||
183 | # CONFIG_AT91_EARLY_USART3 is not set | ||
184 | # CONFIG_AT91_EARLY_USART4 is not set | ||
185 | # CONFIG_AT91_EARLY_USART5 is not set | ||
186 | |||
187 | # | ||
188 | # Processor Type | ||
189 | # | ||
190 | CONFIG_CPU_32=y | ||
191 | CONFIG_CPU_ARM926T=y | ||
192 | CONFIG_CPU_32v5=y | ||
193 | CONFIG_CPU_ABRT_EV5TJ=y | ||
194 | CONFIG_CPU_CACHE_VIVT=y | ||
195 | CONFIG_CPU_COPY_V4WB=y | ||
196 | CONFIG_CPU_TLB_V4WBI=y | ||
197 | CONFIG_CPU_CP15=y | ||
198 | CONFIG_CPU_CP15_MMU=y | ||
199 | |||
200 | # | ||
201 | # Processor Features | ||
202 | # | ||
203 | # CONFIG_ARM_THUMB is not set | ||
204 | # CONFIG_CPU_ICACHE_DISABLE is not set | ||
205 | # CONFIG_CPU_DCACHE_DISABLE is not set | ||
206 | # CONFIG_CPU_DCACHE_WRITETHROUGH is not set | ||
207 | # CONFIG_CPU_CACHE_ROUND_ROBIN is not set | ||
208 | # CONFIG_OUTER_CACHE is not set | ||
209 | |||
210 | # | ||
211 | # Bus support | ||
212 | # | ||
213 | # CONFIG_PCI_SYSCALL is not set | ||
214 | # CONFIG_ARCH_SUPPORTS_MSI is not set | ||
215 | # CONFIG_PCCARD is not set | ||
216 | |||
217 | # | ||
218 | # Kernel Features | ||
219 | # | ||
220 | # CONFIG_TICK_ONESHOT is not set | ||
221 | # CONFIG_NO_HZ is not set | ||
222 | # CONFIG_HIGH_RES_TIMERS is not set | ||
223 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
224 | # CONFIG_PREEMPT is not set | ||
225 | CONFIG_HZ=100 | ||
226 | CONFIG_AEABI=y | ||
227 | CONFIG_OABI_COMPAT=y | ||
228 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | ||
229 | CONFIG_SELECT_MEMORY_MODEL=y | ||
230 | CONFIG_FLATMEM_MANUAL=y | ||
231 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
232 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
233 | CONFIG_FLATMEM=y | ||
234 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
235 | # CONFIG_SPARSEMEM_STATIC is not set | ||
236 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
237 | CONFIG_SPLIT_PTLOCK_CPUS=4096 | ||
238 | # CONFIG_RESOURCES_64BIT is not set | ||
239 | CONFIG_ZONE_DMA_FLAG=1 | ||
240 | CONFIG_BOUNCE=y | ||
241 | CONFIG_VIRT_TO_BUS=y | ||
242 | # CONFIG_LEDS is not set | ||
243 | CONFIG_ALIGNMENT_TRAP=y | ||
244 | |||
245 | # | ||
246 | # Boot options | ||
247 | # | ||
248 | CONFIG_ZBOOT_ROM_TEXT=0x0 | ||
249 | CONFIG_ZBOOT_ROM_BSS=0x0 | ||
250 | CONFIG_CMDLINE="mem=64M console=ttyS0,115200" | ||
251 | # CONFIG_XIP_KERNEL is not set | ||
252 | # CONFIG_KEXEC is not set | ||
253 | |||
254 | # | ||
255 | # Floating point emulation | ||
256 | # | ||
257 | |||
258 | # | ||
259 | # At least one emulation must be selected | ||
260 | # | ||
261 | CONFIG_FPE_NWFPE=y | ||
262 | # CONFIG_FPE_NWFPE_XP is not set | ||
263 | # CONFIG_FPE_FASTFPE is not set | ||
264 | # CONFIG_VFP is not set | ||
265 | |||
266 | # | ||
267 | # Userspace binary formats | ||
268 | # | ||
269 | CONFIG_BINFMT_ELF=y | ||
270 | # CONFIG_BINFMT_AOUT is not set | ||
271 | # CONFIG_BINFMT_MISC is not set | ||
272 | |||
273 | # | ||
274 | # Power management options | ||
275 | # | ||
276 | CONFIG_PM=y | ||
277 | # CONFIG_PM_LEGACY is not set | ||
278 | # CONFIG_PM_DEBUG is not set | ||
279 | CONFIG_PM_SLEEP=y | ||
280 | CONFIG_SUSPEND_UP_POSSIBLE=y | ||
281 | CONFIG_SUSPEND=y | ||
282 | # CONFIG_APM_EMULATION is not set | ||
283 | |||
284 | # | ||
285 | # Networking | ||
286 | # | ||
287 | CONFIG_NET=y | ||
288 | |||
289 | # | ||
290 | # Networking options | ||
291 | # | ||
292 | CONFIG_PACKET=y | ||
293 | # CONFIG_PACKET_MMAP is not set | ||
294 | CONFIG_UNIX=y | ||
295 | # CONFIG_NET_KEY is not set | ||
296 | CONFIG_INET=y | ||
297 | CONFIG_IP_MULTICAST=y | ||
298 | CONFIG_IP_ADVANCED_ROUTER=y | ||
299 | CONFIG_ASK_IP_FIB_HASH=y | ||
300 | # CONFIG_IP_FIB_TRIE is not set | ||
301 | CONFIG_IP_FIB_HASH=y | ||
302 | # CONFIG_IP_MULTIPLE_TABLES is not set | ||
303 | # CONFIG_IP_ROUTE_MULTIPATH is not set | ||
304 | CONFIG_IP_ROUTE_VERBOSE=y | ||
305 | CONFIG_IP_PNP=y | ||
306 | # CONFIG_IP_PNP_DHCP is not set | ||
307 | CONFIG_IP_PNP_BOOTP=y | ||
308 | CONFIG_IP_PNP_RARP=y | ||
309 | # CONFIG_NET_IPIP is not set | ||
310 | # CONFIG_NET_IPGRE is not set | ||
311 | CONFIG_IP_MROUTE=y | ||
312 | CONFIG_IP_PIMSM_V1=y | ||
313 | CONFIG_IP_PIMSM_V2=y | ||
314 | # CONFIG_ARPD is not set | ||
315 | # CONFIG_SYN_COOKIES is not set | ||
316 | # CONFIG_INET_AH is not set | ||
317 | # CONFIG_INET_ESP is not set | ||
318 | # CONFIG_INET_IPCOMP is not set | ||
319 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
320 | # CONFIG_INET_TUNNEL is not set | ||
321 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||
322 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||
323 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
324 | # CONFIG_INET_LRO is not set | ||
325 | # CONFIG_INET_DIAG is not set | ||
326 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
327 | CONFIG_TCP_CONG_CUBIC=y | ||
328 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
329 | # CONFIG_TCP_MD5SIG is not set | ||
330 | # CONFIG_IPV6 is not set | ||
331 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
332 | # CONFIG_INET6_TUNNEL is not set | ||
333 | # CONFIG_NETWORK_SECMARK is not set | ||
334 | # CONFIG_NETFILTER is not set | ||
335 | # CONFIG_IP_DCCP is not set | ||
336 | # CONFIG_IP_SCTP is not set | ||
337 | # CONFIG_TIPC is not set | ||
338 | # CONFIG_ATM is not set | ||
339 | # CONFIG_BRIDGE is not set | ||
340 | # CONFIG_VLAN_8021Q is not set | ||
341 | # CONFIG_DECNET is not set | ||
342 | # CONFIG_LLC2 is not set | ||
343 | # CONFIG_IPX is not set | ||
344 | # CONFIG_ATALK is not set | ||
345 | # CONFIG_X25 is not set | ||
346 | # CONFIG_LAPB is not set | ||
347 | # CONFIG_ECONET is not set | ||
348 | # CONFIG_WAN_ROUTER is not set | ||
349 | # CONFIG_NET_SCHED is not set | ||
350 | |||
351 | # | ||
352 | # Network testing | ||
353 | # | ||
354 | # CONFIG_NET_PKTGEN is not set | ||
355 | # CONFIG_HAMRADIO is not set | ||
356 | # CONFIG_IRDA is not set | ||
357 | # CONFIG_BT is not set | ||
358 | # CONFIG_AF_RXRPC is not set | ||
359 | |||
360 | # | ||
361 | # Wireless | ||
362 | # | ||
363 | # CONFIG_CFG80211 is not set | ||
364 | # CONFIG_WIRELESS_EXT is not set | ||
365 | # CONFIG_MAC80211 is not set | ||
366 | # CONFIG_IEEE80211 is not set | ||
367 | # CONFIG_RFKILL is not set | ||
368 | # CONFIG_NET_9P is not set | ||
369 | |||
370 | # | ||
371 | # Device Drivers | ||
372 | # | ||
373 | |||
374 | # | ||
375 | # Generic Driver Options | ||
376 | # | ||
377 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
378 | CONFIG_STANDALONE=y | ||
379 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
380 | # CONFIG_FW_LOADER is not set | ||
381 | # CONFIG_DEBUG_DRIVER is not set | ||
382 | # CONFIG_DEBUG_DEVRES is not set | ||
383 | # CONFIG_SYS_HYPERVISOR is not set | ||
384 | # CONFIG_CONNECTOR is not set | ||
385 | CONFIG_MTD=y | ||
386 | # CONFIG_MTD_DEBUG is not set | ||
387 | # CONFIG_MTD_CONCAT is not set | ||
388 | CONFIG_MTD_PARTITIONS=y | ||
389 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
390 | CONFIG_MTD_CMDLINE_PARTS=y | ||
391 | # CONFIG_MTD_AFS_PARTS is not set | ||
392 | |||
393 | # | ||
394 | # User Modules And Translation Layers | ||
395 | # | ||
396 | CONFIG_MTD_CHAR=y | ||
397 | CONFIG_MTD_BLKDEVS=y | ||
398 | CONFIG_MTD_BLOCK=y | ||
399 | # CONFIG_FTL is not set | ||
400 | # CONFIG_NFTL is not set | ||
401 | # CONFIG_INFTL is not set | ||
402 | # CONFIG_RFD_FTL is not set | ||
403 | # CONFIG_SSFDC is not set | ||
404 | # CONFIG_MTD_OOPS is not set | ||
405 | |||
406 | # | ||
407 | # RAM/ROM/Flash chip drivers | ||
408 | # | ||
409 | # CONFIG_MTD_CFI is not set | ||
410 | # CONFIG_MTD_JEDECPROBE is not set | ||
411 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
412 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
413 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
414 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
415 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
416 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
417 | CONFIG_MTD_CFI_I1=y | ||
418 | CONFIG_MTD_CFI_I2=y | ||
419 | # CONFIG_MTD_CFI_I4 is not set | ||
420 | # CONFIG_MTD_CFI_I8 is not set | ||
421 | # CONFIG_MTD_RAM is not set | ||
422 | # CONFIG_MTD_ROM is not set | ||
423 | # CONFIG_MTD_ABSENT is not set | ||
424 | |||
425 | # | ||
426 | # Mapping drivers for chip access | ||
427 | # | ||
428 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
429 | # CONFIG_MTD_PLATRAM is not set | ||
430 | |||
431 | # | ||
432 | # Self-contained MTD device drivers | ||
433 | # | ||
434 | CONFIG_MTD_DATAFLASH=y | ||
435 | # CONFIG_MTD_M25P80 is not set | ||
436 | # CONFIG_MTD_SLRAM is not set | ||
437 | # CONFIG_MTD_PHRAM is not set | ||
438 | # CONFIG_MTD_MTDRAM is not set | ||
439 | # CONFIG_MTD_BLOCK2MTD is not set | ||
440 | |||
441 | # | ||
442 | # Disk-On-Chip Device Drivers | ||
443 | # | ||
444 | # CONFIG_MTD_DOC2000 is not set | ||
445 | # CONFIG_MTD_DOC2001 is not set | ||
446 | # CONFIG_MTD_DOC2001PLUS is not set | ||
447 | CONFIG_MTD_NAND=y | ||
448 | # CONFIG_MTD_NAND_VERIFY_WRITE is not set | ||
449 | # CONFIG_MTD_NAND_ECC_SMC is not set | ||
450 | # CONFIG_MTD_NAND_MUSEUM_IDS is not set | ||
451 | CONFIG_MTD_NAND_IDS=y | ||
452 | # CONFIG_MTD_NAND_DISKONCHIP is not set | ||
453 | CONFIG_MTD_NAND_AT91=y | ||
454 | CONFIG_MTD_NAND_AT91_ECC_SOFT=y | ||
455 | # CONFIG_MTD_NAND_AT91_ECC_HW is not set | ||
456 | # CONFIG_MTD_NAND_AT91_ECC_NONE is not set | ||
457 | # CONFIG_MTD_NAND_NANDSIM is not set | ||
458 | # CONFIG_MTD_NAND_PLATFORM is not set | ||
459 | # CONFIG_MTD_ALAUDA is not set | ||
460 | # CONFIG_MTD_ONENAND is not set | ||
461 | |||
462 | # | ||
463 | # UBI - Unsorted block images | ||
464 | # | ||
465 | # CONFIG_MTD_UBI is not set | ||
466 | # CONFIG_PARPORT is not set | ||
467 | CONFIG_BLK_DEV=y | ||
468 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
469 | CONFIG_BLK_DEV_LOOP=y | ||
470 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
471 | # CONFIG_BLK_DEV_NBD is not set | ||
472 | # CONFIG_BLK_DEV_UB is not set | ||
473 | # CONFIG_BLK_DEV_RAM is not set | ||
474 | # CONFIG_CDROM_PKTCDVD is not set | ||
475 | # CONFIG_ATA_OVER_ETH is not set | ||
476 | # CONFIG_MISC_DEVICES is not set | ||
477 | |||
478 | # | ||
479 | # SCSI device support | ||
480 | # | ||
481 | # CONFIG_RAID_ATTRS is not set | ||
482 | CONFIG_SCSI=y | ||
483 | CONFIG_SCSI_DMA=y | ||
484 | # CONFIG_SCSI_TGT is not set | ||
485 | # CONFIG_SCSI_NETLINK is not set | ||
486 | CONFIG_SCSI_PROC_FS=y | ||
487 | |||
488 | # | ||
489 | # SCSI support type (disk, tape, CD-ROM) | ||
490 | # | ||
491 | CONFIG_BLK_DEV_SD=y | ||
492 | # CONFIG_CHR_DEV_ST is not set | ||
493 | # CONFIG_CHR_DEV_OSST is not set | ||
494 | # CONFIG_BLK_DEV_SR is not set | ||
495 | # CONFIG_CHR_DEV_SG is not set | ||
496 | # CONFIG_CHR_DEV_SCH is not set | ||
497 | |||
498 | # | ||
499 | # Some SCSI devices (e.g. CD jukebox) support multiple LUNs | ||
500 | # | ||
501 | CONFIG_SCSI_MULTI_LUN=y | ||
502 | # CONFIG_SCSI_CONSTANTS is not set | ||
503 | # CONFIG_SCSI_LOGGING is not set | ||
504 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
505 | CONFIG_SCSI_WAIT_SCAN=m | ||
506 | |||
507 | # | ||
508 | # SCSI Transports | ||
509 | # | ||
510 | # CONFIG_SCSI_SPI_ATTRS is not set | ||
511 | # CONFIG_SCSI_FC_ATTRS is not set | ||
512 | # CONFIG_SCSI_ISCSI_ATTRS is not set | ||
513 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
514 | # CONFIG_SCSI_SRP_ATTRS is not set | ||
515 | CONFIG_SCSI_LOWLEVEL=y | ||
516 | # CONFIG_ISCSI_TCP is not set | ||
517 | # CONFIG_SCSI_DEBUG is not set | ||
518 | # CONFIG_ATA is not set | ||
519 | # CONFIG_MD is not set | ||
520 | CONFIG_NETDEVICES=y | ||
521 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
522 | # CONFIG_DUMMY is not set | ||
523 | # CONFIG_BONDING is not set | ||
524 | # CONFIG_MACVLAN is not set | ||
525 | # CONFIG_EQUALIZER is not set | ||
526 | # CONFIG_TUN is not set | ||
527 | # CONFIG_VETH is not set | ||
528 | CONFIG_PHYLIB=y | ||
529 | |||
530 | # | ||
531 | # MII PHY device drivers | ||
532 | # | ||
533 | # CONFIG_MARVELL_PHY is not set | ||
534 | # CONFIG_DAVICOM_PHY is not set | ||
535 | # CONFIG_QSEMI_PHY is not set | ||
536 | # CONFIG_LXT_PHY is not set | ||
537 | # CONFIG_CICADA_PHY is not set | ||
538 | # CONFIG_VITESSE_PHY is not set | ||
539 | # CONFIG_SMSC_PHY is not set | ||
540 | # CONFIG_BROADCOM_PHY is not set | ||
541 | # CONFIG_ICPLUS_PHY is not set | ||
542 | # CONFIG_FIXED_PHY is not set | ||
543 | # CONFIG_MDIO_BITBANG is not set | ||
544 | CONFIG_NET_ETHERNET=y | ||
545 | CONFIG_MII=y | ||
546 | CONFIG_MACB=y | ||
547 | # CONFIG_AX88796 is not set | ||
548 | # CONFIG_SMC91X is not set | ||
549 | # CONFIG_DM9000 is not set | ||
550 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
551 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
552 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
553 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
554 | # CONFIG_B44 is not set | ||
555 | CONFIG_NETDEV_1000=y | ||
556 | CONFIG_NETDEV_10000=y | ||
557 | |||
558 | # | ||
559 | # Wireless LAN | ||
560 | # | ||
561 | # CONFIG_WLAN_PRE80211 is not set | ||
562 | # CONFIG_WLAN_80211 is not set | ||
563 | |||
564 | # | ||
565 | # USB Network Adapters | ||
566 | # | ||
567 | # CONFIG_USB_CATC is not set | ||
568 | # CONFIG_USB_KAWETH is not set | ||
569 | # CONFIG_USB_PEGASUS is not set | ||
570 | # CONFIG_USB_RTL8150 is not set | ||
571 | # CONFIG_USB_USBNET is not set | ||
572 | # CONFIG_WAN is not set | ||
573 | # CONFIG_PPP is not set | ||
574 | # CONFIG_SLIP is not set | ||
575 | # CONFIG_SHAPER is not set | ||
576 | # CONFIG_NETCONSOLE is not set | ||
577 | # CONFIG_NETPOLL is not set | ||
578 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
579 | # CONFIG_ISDN is not set | ||
580 | |||
581 | # | ||
582 | # Input device support | ||
583 | # | ||
584 | CONFIG_INPUT=y | ||
585 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
586 | # CONFIG_INPUT_POLLDEV is not set | ||
587 | |||
588 | # | ||
589 | # Userland interfaces | ||
590 | # | ||
591 | CONFIG_INPUT_MOUSEDEV=y | ||
592 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
593 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
594 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
595 | # CONFIG_INPUT_JOYDEV is not set | ||
596 | CONFIG_INPUT_EVDEV=y | ||
597 | CONFIG_INPUT_EVBUG=y | ||
598 | |||
599 | # | ||
600 | # Input Device Drivers | ||
601 | # | ||
602 | CONFIG_INPUT_KEYBOARD=y | ||
603 | # CONFIG_KEYBOARD_ATKBD is not set | ||
604 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
605 | # CONFIG_KEYBOARD_LKKBD is not set | ||
606 | # CONFIG_KEYBOARD_XTKBD is not set | ||
607 | # CONFIG_KEYBOARD_NEWTON is not set | ||
608 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
609 | CONFIG_KEYBOARD_GPIO=y | ||
610 | # CONFIG_INPUT_MOUSE is not set | ||
611 | # CONFIG_INPUT_JOYSTICK is not set | ||
612 | # CONFIG_INPUT_TABLET is not set | ||
613 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
614 | # CONFIG_INPUT_MISC is not set | ||
615 | |||
616 | # | ||
617 | # Hardware I/O ports | ||
618 | # | ||
619 | # CONFIG_SERIO is not set | ||
620 | # CONFIG_GAMEPORT is not set | ||
621 | |||
622 | # | ||
623 | # Character devices | ||
624 | # | ||
625 | CONFIG_VT=y | ||
626 | CONFIG_VT_CONSOLE=y | ||
627 | CONFIG_HW_CONSOLE=y | ||
628 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
629 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
630 | |||
631 | # | ||
632 | # Serial drivers | ||
633 | # | ||
634 | # CONFIG_SERIAL_8250 is not set | ||
635 | |||
636 | # | ||
637 | # Non-8250 serial port support | ||
638 | # | ||
639 | CONFIG_SERIAL_ATMEL=y | ||
640 | CONFIG_SERIAL_ATMEL_CONSOLE=y | ||
641 | # CONFIG_SERIAL_ATMEL_TTYAT is not set | ||
642 | CONFIG_SERIAL_CORE=y | ||
643 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
644 | CONFIG_UNIX98_PTYS=y | ||
645 | CONFIG_LEGACY_PTYS=y | ||
646 | CONFIG_LEGACY_PTY_COUNT=256 | ||
647 | # CONFIG_IPMI_HANDLER is not set | ||
648 | CONFIG_HW_RANDOM=y | ||
649 | # CONFIG_NVRAM is not set | ||
650 | # CONFIG_R3964 is not set | ||
651 | # CONFIG_RAW_DRIVER is not set | ||
652 | # CONFIG_TCG_TPM is not set | ||
653 | # CONFIG_I2C is not set | ||
654 | |||
655 | # | ||
656 | # SPI support | ||
657 | # | ||
658 | CONFIG_SPI=y | ||
659 | # CONFIG_SPI_DEBUG is not set | ||
660 | CONFIG_SPI_MASTER=y | ||
661 | |||
662 | # | ||
663 | # SPI Master Controller Drivers | ||
664 | # | ||
665 | CONFIG_SPI_ATMEL=y | ||
666 | # CONFIG_SPI_BITBANG is not set | ||
667 | |||
668 | # | ||
669 | # SPI Protocol Masters | ||
670 | # | ||
671 | # CONFIG_SPI_AT25 is not set | ||
672 | # CONFIG_SPI_SPIDEV is not set | ||
673 | # CONFIG_SPI_TLE62X0 is not set | ||
674 | # CONFIG_W1 is not set | ||
675 | # CONFIG_POWER_SUPPLY is not set | ||
676 | # CONFIG_HWMON is not set | ||
677 | # CONFIG_WATCHDOG is not set | ||
678 | |||
679 | # | ||
680 | # Sonics Silicon Backplane | ||
681 | # | ||
682 | CONFIG_SSB_POSSIBLE=y | ||
683 | # CONFIG_SSB is not set | ||
684 | |||
685 | # | ||
686 | # Multifunction device drivers | ||
687 | # | ||
688 | # CONFIG_MFD_SM501 is not set | ||
689 | |||
690 | # | ||
691 | # Multimedia devices | ||
692 | # | ||
693 | # CONFIG_VIDEO_DEV is not set | ||
694 | # CONFIG_DVB_CORE is not set | ||
695 | # CONFIG_DAB is not set | ||
696 | |||
697 | # | ||
698 | # Graphics support | ||
699 | # | ||
700 | # CONFIG_VGASTATE is not set | ||
701 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
702 | # CONFIG_FB is not set | ||
703 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
704 | |||
705 | # | ||
706 | # Display device support | ||
707 | # | ||
708 | # CONFIG_DISPLAY_SUPPORT is not set | ||
709 | |||
710 | # | ||
711 | # Console display driver support | ||
712 | # | ||
713 | # CONFIG_VGA_CONSOLE is not set | ||
714 | CONFIG_DUMMY_CONSOLE=y | ||
715 | |||
716 | # | ||
717 | # Sound | ||
718 | # | ||
719 | # CONFIG_SOUND is not set | ||
720 | CONFIG_HID_SUPPORT=y | ||
721 | CONFIG_HID=y | ||
722 | # CONFIG_HID_DEBUG is not set | ||
723 | # CONFIG_HIDRAW is not set | ||
724 | |||
725 | # | ||
726 | # USB Input Devices | ||
727 | # | ||
728 | # CONFIG_USB_HID is not set | ||
729 | |||
730 | # | ||
731 | # USB HID Boot Protocol drivers | ||
732 | # | ||
733 | # CONFIG_USB_KBD is not set | ||
734 | # CONFIG_USB_MOUSE is not set | ||
735 | CONFIG_USB_SUPPORT=y | ||
736 | CONFIG_USB_ARCH_HAS_HCD=y | ||
737 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
738 | # CONFIG_USB_ARCH_HAS_EHCI is not set | ||
739 | CONFIG_USB=y | ||
740 | # CONFIG_USB_DEBUG is not set | ||
741 | |||
742 | # | ||
743 | # Miscellaneous USB options | ||
744 | # | ||
745 | CONFIG_USB_DEVICEFS=y | ||
746 | CONFIG_USB_DEVICE_CLASS=y | ||
747 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
748 | # CONFIG_USB_SUSPEND is not set | ||
749 | # CONFIG_USB_PERSIST is not set | ||
750 | # CONFIG_USB_OTG is not set | ||
751 | |||
752 | # | ||
753 | # USB Host Controller Drivers | ||
754 | # | ||
755 | # CONFIG_USB_ISP116X_HCD is not set | ||
756 | CONFIG_USB_OHCI_HCD=y | ||
757 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set | ||
758 | # CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set | ||
759 | CONFIG_USB_OHCI_LITTLE_ENDIAN=y | ||
760 | # CONFIG_USB_SL811_HCD is not set | ||
761 | # CONFIG_USB_R8A66597_HCD is not set | ||
762 | |||
763 | # | ||
764 | # USB Device Class drivers | ||
765 | # | ||
766 | # CONFIG_USB_ACM is not set | ||
767 | # CONFIG_USB_PRINTER is not set | ||
768 | |||
769 | # | ||
770 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
771 | # | ||
772 | |||
773 | # | ||
774 | # may also be needed; see USB_STORAGE Help for more information | ||
775 | # | ||
776 | CONFIG_USB_STORAGE=y | ||
777 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
778 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
779 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
780 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
781 | # CONFIG_USB_STORAGE_DPCM is not set | ||
782 | # CONFIG_USB_STORAGE_USBAT is not set | ||
783 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
784 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
785 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
786 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
787 | # CONFIG_USB_STORAGE_KARMA is not set | ||
788 | # CONFIG_USB_LIBUSUAL is not set | ||
789 | |||
790 | # | ||
791 | # USB Imaging devices | ||
792 | # | ||
793 | # CONFIG_USB_MDC800 is not set | ||
794 | # CONFIG_USB_MICROTEK is not set | ||
795 | CONFIG_USB_MON=y | ||
796 | |||
797 | # | ||
798 | # USB port drivers | ||
799 | # | ||
800 | |||
801 | # | ||
802 | # USB Serial Converter support | ||
803 | # | ||
804 | # CONFIG_USB_SERIAL is not set | ||
805 | |||
806 | # | ||
807 | # USB Miscellaneous drivers | ||
808 | # | ||
809 | # CONFIG_USB_EMI62 is not set | ||
810 | # CONFIG_USB_EMI26 is not set | ||
811 | # CONFIG_USB_ADUTUX is not set | ||
812 | # CONFIG_USB_AUERSWALD is not set | ||
813 | # CONFIG_USB_RIO500 is not set | ||
814 | # CONFIG_USB_LEGOTOWER is not set | ||
815 | # CONFIG_USB_LCD is not set | ||
816 | # CONFIG_USB_BERRY_CHARGE is not set | ||
817 | # CONFIG_USB_LED is not set | ||
818 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
819 | # CONFIG_USB_CYTHERM is not set | ||
820 | # CONFIG_USB_PHIDGET is not set | ||
821 | # CONFIG_USB_IDMOUSE is not set | ||
822 | # CONFIG_USB_FTDI_ELAN is not set | ||
823 | # CONFIG_USB_APPLEDISPLAY is not set | ||
824 | # CONFIG_USB_LD is not set | ||
825 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
826 | # CONFIG_USB_IOWARRIOR is not set | ||
827 | # CONFIG_USB_TEST is not set | ||
828 | |||
829 | # | ||
830 | # USB DSL modem support | ||
831 | # | ||
832 | |||
833 | # | ||
834 | # USB Gadget Support | ||
835 | # | ||
836 | CONFIG_USB_GADGET=y | ||
837 | # CONFIG_USB_GADGET_DEBUG is not set | ||
838 | # CONFIG_USB_GADGET_DEBUG_FILES is not set | ||
839 | CONFIG_USB_GADGET_SELECTED=y | ||
840 | # CONFIG_USB_GADGET_AMD5536UDC is not set | ||
841 | # CONFIG_USB_GADGET_ATMEL_USBA is not set | ||
842 | # CONFIG_USB_GADGET_FSL_USB2 is not set | ||
843 | # CONFIG_USB_GADGET_NET2280 is not set | ||
844 | # CONFIG_USB_GADGET_PXA2XX is not set | ||
845 | # CONFIG_USB_GADGET_M66592 is not set | ||
846 | # CONFIG_USB_GADGET_GOKU is not set | ||
847 | # CONFIG_USB_GADGET_LH7A40X is not set | ||
848 | # CONFIG_USB_GADGET_OMAP is not set | ||
849 | # CONFIG_USB_GADGET_S3C2410 is not set | ||
850 | CONFIG_USB_GADGET_AT91=y | ||
851 | CONFIG_USB_AT91=y | ||
852 | # CONFIG_USB_GADGET_DUMMY_HCD is not set | ||
853 | # CONFIG_USB_GADGET_DUALSPEED is not set | ||
854 | # CONFIG_USB_ZERO is not set | ||
855 | CONFIG_USB_ETH=y | ||
856 | CONFIG_USB_ETH_RNDIS=y | ||
857 | # CONFIG_USB_GADGETFS is not set | ||
858 | # CONFIG_USB_FILE_STORAGE is not set | ||
859 | # CONFIG_USB_G_SERIAL is not set | ||
860 | # CONFIG_USB_MIDI_GADGET is not set | ||
861 | # CONFIG_MMC is not set | ||
862 | CONFIG_NEW_LEDS=y | ||
863 | CONFIG_LEDS_CLASS=y | ||
864 | |||
865 | # | ||
866 | # LED drivers | ||
867 | # | ||
868 | CONFIG_LEDS_GPIO=y | ||
869 | |||
870 | # | ||
871 | # LED Triggers | ||
872 | # | ||
873 | CONFIG_LEDS_TRIGGERS=y | ||
874 | # CONFIG_LEDS_TRIGGER_TIMER is not set | ||
875 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | ||
876 | CONFIG_RTC_LIB=y | ||
877 | # CONFIG_RTC_CLASS is not set | ||
878 | |||
879 | # | ||
880 | # File systems | ||
881 | # | ||
882 | CONFIG_EXT2_FS=y | ||
883 | # CONFIG_EXT2_FS_XATTR is not set | ||
884 | # CONFIG_EXT2_FS_XIP is not set | ||
885 | # CONFIG_EXT3_FS is not set | ||
886 | # CONFIG_EXT4DEV_FS is not set | ||
887 | # CONFIG_REISERFS_FS is not set | ||
888 | # CONFIG_JFS_FS is not set | ||
889 | CONFIG_FS_POSIX_ACL=y | ||
890 | # CONFIG_XFS_FS is not set | ||
891 | # CONFIG_GFS2_FS is not set | ||
892 | # CONFIG_OCFS2_FS is not set | ||
893 | # CONFIG_MINIX_FS is not set | ||
894 | # CONFIG_ROMFS_FS is not set | ||
895 | CONFIG_INOTIFY=y | ||
896 | CONFIG_INOTIFY_USER=y | ||
897 | # CONFIG_QUOTA is not set | ||
898 | CONFIG_DNOTIFY=y | ||
899 | # CONFIG_AUTOFS_FS is not set | ||
900 | # CONFIG_AUTOFS4_FS is not set | ||
901 | CONFIG_FUSE_FS=m | ||
902 | |||
903 | # | ||
904 | # CD-ROM/DVD Filesystems | ||
905 | # | ||
906 | # CONFIG_ISO9660_FS is not set | ||
907 | # CONFIG_UDF_FS is not set | ||
908 | |||
909 | # | ||
910 | # DOS/FAT/NT Filesystems | ||
911 | # | ||
912 | CONFIG_FAT_FS=y | ||
913 | # CONFIG_MSDOS_FS is not set | ||
914 | CONFIG_VFAT_FS=y | ||
915 | CONFIG_FAT_DEFAULT_CODEPAGE=437 | ||
916 | CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" | ||
917 | # CONFIG_NTFS_FS is not set | ||
918 | |||
919 | # | ||
920 | # Pseudo filesystems | ||
921 | # | ||
922 | CONFIG_PROC_FS=y | ||
923 | CONFIG_PROC_SYSCTL=y | ||
924 | CONFIG_SYSFS=y | ||
925 | CONFIG_TMPFS=y | ||
926 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
927 | # CONFIG_HUGETLB_PAGE is not set | ||
928 | # CONFIG_CONFIGFS_FS is not set | ||
929 | |||
930 | # | ||
931 | # Miscellaneous filesystems | ||
932 | # | ||
933 | # CONFIG_ADFS_FS is not set | ||
934 | # CONFIG_AFFS_FS is not set | ||
935 | # CONFIG_HFS_FS is not set | ||
936 | # CONFIG_HFSPLUS_FS is not set | ||
937 | # CONFIG_BEFS_FS is not set | ||
938 | # CONFIG_BFS_FS is not set | ||
939 | # CONFIG_EFS_FS is not set | ||
940 | CONFIG_JFFS2_FS=y | ||
941 | CONFIG_JFFS2_FS_DEBUG=0 | ||
942 | CONFIG_JFFS2_FS_WRITEBUFFER=y | ||
943 | # CONFIG_JFFS2_FS_WBUF_VERIFY is not set | ||
944 | # CONFIG_JFFS2_SUMMARY is not set | ||
945 | # CONFIG_JFFS2_FS_XATTR is not set | ||
946 | # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set | ||
947 | CONFIG_JFFS2_ZLIB=y | ||
948 | # CONFIG_JFFS2_LZO is not set | ||
949 | CONFIG_JFFS2_RTIME=y | ||
950 | # CONFIG_JFFS2_RUBIN is not set | ||
951 | # CONFIG_CRAMFS is not set | ||
952 | # CONFIG_VXFS_FS is not set | ||
953 | # CONFIG_HPFS_FS is not set | ||
954 | # CONFIG_QNX4FS_FS is not set | ||
955 | # CONFIG_SYSV_FS is not set | ||
956 | # CONFIG_UFS_FS is not set | ||
957 | CONFIG_NETWORK_FILESYSTEMS=y | ||
958 | CONFIG_NFS_FS=y | ||
959 | CONFIG_NFS_V3=y | ||
960 | CONFIG_NFS_V3_ACL=y | ||
961 | CONFIG_NFS_V4=y | ||
962 | # CONFIG_NFS_DIRECTIO is not set | ||
963 | # CONFIG_NFSD is not set | ||
964 | CONFIG_ROOT_NFS=y | ||
965 | CONFIG_LOCKD=y | ||
966 | CONFIG_LOCKD_V4=y | ||
967 | CONFIG_NFS_ACL_SUPPORT=y | ||
968 | CONFIG_NFS_COMMON=y | ||
969 | CONFIG_SUNRPC=y | ||
970 | CONFIG_SUNRPC_GSS=y | ||
971 | # CONFIG_SUNRPC_BIND34 is not set | ||
972 | CONFIG_RPCSEC_GSS_KRB5=y | ||
973 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
974 | # CONFIG_SMB_FS is not set | ||
975 | # CONFIG_CIFS is not set | ||
976 | # CONFIG_NCP_FS is not set | ||
977 | # CONFIG_CODA_FS is not set | ||
978 | # CONFIG_AFS_FS is not set | ||
979 | |||
980 | # | ||
981 | # Partition Types | ||
982 | # | ||
983 | # CONFIG_PARTITION_ADVANCED is not set | ||
984 | CONFIG_MSDOS_PARTITION=y | ||
985 | CONFIG_NLS=y | ||
986 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
987 | CONFIG_NLS_CODEPAGE_437=y | ||
988 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
989 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
990 | CONFIG_NLS_CODEPAGE_850=y | ||
991 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
992 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
993 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
994 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
995 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
996 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
997 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
998 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
999 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
1000 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
1001 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
1002 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
1003 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
1004 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
1005 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
1006 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
1007 | # CONFIG_NLS_ISO8859_8 is not set | ||
1008 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
1009 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
1010 | # CONFIG_NLS_ASCII is not set | ||
1011 | CONFIG_NLS_ISO8859_1=y | ||
1012 | # CONFIG_NLS_ISO8859_2 is not set | ||
1013 | # CONFIG_NLS_ISO8859_3 is not set | ||
1014 | # CONFIG_NLS_ISO8859_4 is not set | ||
1015 | # CONFIG_NLS_ISO8859_5 is not set | ||
1016 | # CONFIG_NLS_ISO8859_6 is not set | ||
1017 | # CONFIG_NLS_ISO8859_7 is not set | ||
1018 | # CONFIG_NLS_ISO8859_9 is not set | ||
1019 | # CONFIG_NLS_ISO8859_13 is not set | ||
1020 | # CONFIG_NLS_ISO8859_14 is not set | ||
1021 | # CONFIG_NLS_ISO8859_15 is not set | ||
1022 | # CONFIG_NLS_KOI8_R is not set | ||
1023 | # CONFIG_NLS_KOI8_U is not set | ||
1024 | # CONFIG_NLS_UTF8 is not set | ||
1025 | # CONFIG_DLM is not set | ||
1026 | # CONFIG_INSTRUMENTATION is not set | ||
1027 | |||
1028 | # | ||
1029 | # Kernel hacking | ||
1030 | # | ||
1031 | # CONFIG_PRINTK_TIME is not set | ||
1032 | CONFIG_ENABLE_WARN_DEPRECATED=y | ||
1033 | CONFIG_ENABLE_MUST_CHECK=y | ||
1034 | # CONFIG_MAGIC_SYSRQ is not set | ||
1035 | # CONFIG_UNUSED_SYMBOLS is not set | ||
1036 | # CONFIG_DEBUG_FS is not set | ||
1037 | # CONFIG_HEADERS_CHECK is not set | ||
1038 | CONFIG_DEBUG_KERNEL=y | ||
1039 | # CONFIG_DEBUG_SHIRQ is not set | ||
1040 | CONFIG_DETECT_SOFTLOCKUP=y | ||
1041 | CONFIG_SCHED_DEBUG=y | ||
1042 | # CONFIG_SCHEDSTATS is not set | ||
1043 | # CONFIG_TIMER_STATS is not set | ||
1044 | # CONFIG_DEBUG_SLAB is not set | ||
1045 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
1046 | # CONFIG_RT_MUTEX_TESTER is not set | ||
1047 | # CONFIG_DEBUG_SPINLOCK is not set | ||
1048 | # CONFIG_DEBUG_MUTEXES is not set | ||
1049 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
1050 | # CONFIG_PROVE_LOCKING is not set | ||
1051 | # CONFIG_LOCK_STAT is not set | ||
1052 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
1053 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
1054 | # CONFIG_DEBUG_KOBJECT is not set | ||
1055 | CONFIG_DEBUG_BUGVERBOSE=y | ||
1056 | # CONFIG_DEBUG_INFO is not set | ||
1057 | # CONFIG_DEBUG_VM is not set | ||
1058 | # CONFIG_DEBUG_LIST is not set | ||
1059 | # CONFIG_DEBUG_SG is not set | ||
1060 | CONFIG_FRAME_POINTER=y | ||
1061 | CONFIG_FORCED_INLINING=y | ||
1062 | # CONFIG_BOOT_PRINTK_DELAY is not set | ||
1063 | # CONFIG_RCU_TORTURE_TEST is not set | ||
1064 | # CONFIG_FAULT_INJECTION is not set | ||
1065 | # CONFIG_SAMPLES is not set | ||
1066 | CONFIG_DEBUG_USER=y | ||
1067 | # CONFIG_DEBUG_ERRORS is not set | ||
1068 | CONFIG_DEBUG_LL=y | ||
1069 | # CONFIG_DEBUG_ICEDCC is not set | ||
1070 | |||
1071 | # | ||
1072 | # Security options | ||
1073 | # | ||
1074 | # CONFIG_KEYS is not set | ||
1075 | # CONFIG_SECURITY is not set | ||
1076 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | ||
1077 | CONFIG_CRYPTO=y | ||
1078 | CONFIG_CRYPTO_ALGAPI=y | ||
1079 | CONFIG_CRYPTO_BLKCIPHER=y | ||
1080 | CONFIG_CRYPTO_MANAGER=y | ||
1081 | # CONFIG_CRYPTO_HMAC is not set | ||
1082 | # CONFIG_CRYPTO_XCBC is not set | ||
1083 | # CONFIG_CRYPTO_NULL is not set | ||
1084 | # CONFIG_CRYPTO_MD4 is not set | ||
1085 | CONFIG_CRYPTO_MD5=y | ||
1086 | # CONFIG_CRYPTO_SHA1 is not set | ||
1087 | # CONFIG_CRYPTO_SHA256 is not set | ||
1088 | # CONFIG_CRYPTO_SHA512 is not set | ||
1089 | # CONFIG_CRYPTO_WP512 is not set | ||
1090 | # CONFIG_CRYPTO_TGR192 is not set | ||
1091 | # CONFIG_CRYPTO_GF128MUL is not set | ||
1092 | # CONFIG_CRYPTO_ECB is not set | ||
1093 | CONFIG_CRYPTO_CBC=y | ||
1094 | # CONFIG_CRYPTO_PCBC is not set | ||
1095 | # CONFIG_CRYPTO_LRW is not set | ||
1096 | # CONFIG_CRYPTO_XTS is not set | ||
1097 | # CONFIG_CRYPTO_CRYPTD is not set | ||
1098 | CONFIG_CRYPTO_DES=y | ||
1099 | # CONFIG_CRYPTO_FCRYPT is not set | ||
1100 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
1101 | # CONFIG_CRYPTO_TWOFISH is not set | ||
1102 | # CONFIG_CRYPTO_SERPENT is not set | ||
1103 | # CONFIG_CRYPTO_AES is not set | ||
1104 | # CONFIG_CRYPTO_CAST5 is not set | ||
1105 | # CONFIG_CRYPTO_CAST6 is not set | ||
1106 | # CONFIG_CRYPTO_TEA is not set | ||
1107 | # CONFIG_CRYPTO_ARC4 is not set | ||
1108 | # CONFIG_CRYPTO_KHAZAD is not set | ||
1109 | # CONFIG_CRYPTO_ANUBIS is not set | ||
1110 | # CONFIG_CRYPTO_SEED is not set | ||
1111 | # CONFIG_CRYPTO_DEFLATE is not set | ||
1112 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
1113 | # CONFIG_CRYPTO_CRC32C is not set | ||
1114 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
1115 | # CONFIG_CRYPTO_TEST is not set | ||
1116 | # CONFIG_CRYPTO_AUTHENC is not set | ||
1117 | # CONFIG_CRYPTO_HW is not set | ||
1118 | |||
1119 | # | ||
1120 | # Library routines | ||
1121 | # | ||
1122 | CONFIG_BITREVERSE=y | ||
1123 | # CONFIG_CRC_CCITT is not set | ||
1124 | # CONFIG_CRC16 is not set | ||
1125 | # CONFIG_CRC_ITU_T is not set | ||
1126 | CONFIG_CRC32=y | ||
1127 | # CONFIG_CRC7 is not set | ||
1128 | # CONFIG_LIBCRC32C is not set | ||
1129 | CONFIG_ZLIB_INFLATE=y | ||
1130 | CONFIG_ZLIB_DEFLATE=y | ||
1131 | CONFIG_PLIST=y | ||
1132 | CONFIG_HAS_IOMEM=y | ||
1133 | CONFIG_HAS_IOPORT=y | ||
1134 | CONFIG_HAS_DMA=y | ||
diff --git a/arch/arm/configs/versatile_defconfig b/arch/arm/configs/versatile_defconfig index 48dca69addae..8355f88f7292 100644 --- a/arch/arm/configs/versatile_defconfig +++ b/arch/arm/configs/versatile_defconfig | |||
@@ -151,7 +151,6 @@ CONFIG_ARM_AMBA=y | |||
151 | # Kernel Features | 151 | # Kernel Features |
152 | # | 152 | # |
153 | # CONFIG_PREEMPT is not set | 153 | # CONFIG_PREEMPT is not set |
154 | # CONFIG_NO_IDLE_HZ is not set | ||
155 | CONFIG_HZ=100 | 154 | CONFIG_HZ=100 |
156 | # CONFIG_AEABI is not set | 155 | # CONFIG_AEABI is not set |
157 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set | 156 | # CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set |
diff --git a/arch/arm/kernel/atags.c b/arch/arm/kernel/atags.c index 64c420805e6f..42a1a1415fa6 100644 --- a/arch/arm/kernel/atags.c +++ b/arch/arm/kernel/atags.c | |||
@@ -1,5 +1,4 @@ | |||
1 | #include <linux/slab.h> | 1 | #include <linux/slab.h> |
2 | #include <linux/kexec.h> | ||
3 | #include <linux/proc_fs.h> | 2 | #include <linux/proc_fs.h> |
4 | #include <asm/setup.h> | 3 | #include <asm/setup.h> |
5 | #include <asm/types.h> | 4 | #include <asm/types.h> |
@@ -7,9 +6,8 @@ | |||
7 | 6 | ||
8 | struct buffer { | 7 | struct buffer { |
9 | size_t size; | 8 | size_t size; |
10 | char *data; | 9 | char data[]; |
11 | }; | 10 | }; |
12 | static struct buffer tags_buffer; | ||
13 | 11 | ||
14 | static int | 12 | static int |
15 | read_buffer(char* page, char** start, off_t off, int count, | 13 | read_buffer(char* page, char** start, off_t off, int count, |
@@ -29,58 +27,57 @@ read_buffer(char* page, char** start, off_t off, int count, | |||
29 | return count; | 27 | return count; |
30 | } | 28 | } |
31 | 29 | ||
32 | 30 | #define BOOT_PARAMS_SIZE 1536 | |
33 | static int | 31 | static char __initdata atags_copy[BOOT_PARAMS_SIZE]; |
34 | create_proc_entries(void) | ||
35 | { | ||
36 | struct proc_dir_entry* tags_entry; | ||
37 | |||
38 | tags_entry = create_proc_read_entry("atags", 0400, NULL, read_buffer, &tags_buffer); | ||
39 | if (!tags_entry) | ||
40 | return -ENOMEM; | ||
41 | |||
42 | return 0; | ||
43 | } | ||
44 | |||
45 | |||
46 | static char __initdata atags_copy_buf[KEXEC_BOOT_PARAMS_SIZE]; | ||
47 | static char __initdata *atags_copy; | ||
48 | 32 | ||
49 | void __init save_atags(const struct tag *tags) | 33 | void __init save_atags(const struct tag *tags) |
50 | { | 34 | { |
51 | atags_copy = atags_copy_buf; | 35 | memcpy(atags_copy, tags, sizeof(atags_copy)); |
52 | memcpy(atags_copy, tags, KEXEC_BOOT_PARAMS_SIZE); | ||
53 | } | 36 | } |
54 | 37 | ||
55 | |||
56 | static int __init init_atags_procfs(void) | 38 | static int __init init_atags_procfs(void) |
57 | { | 39 | { |
58 | struct tag *tag; | 40 | /* |
59 | int error; | 41 | * This cannot go into save_atags() because kmalloc and proc don't work |
42 | * yet when it is called. | ||
43 | */ | ||
44 | struct proc_dir_entry *tags_entry; | ||
45 | struct tag *tag = (struct tag *)atags_copy; | ||
46 | struct buffer *b; | ||
47 | size_t size; | ||
60 | 48 | ||
61 | if (!atags_copy) { | 49 | if (tag->hdr.tag != ATAG_CORE) { |
62 | printk(KERN_WARNING "Exporting ATAGs: No saved tags found\n"); | 50 | printk(KERN_INFO "No ATAGs?"); |
63 | return -EIO; | 51 | return -EINVAL; |
64 | } | 52 | } |
65 | 53 | ||
66 | for (tag = (struct tag *) atags_copy; tag->hdr.size; tag = tag_next(tag)) | 54 | for (; tag->hdr.size; tag = tag_next(tag)) |
67 | ; | 55 | ; |
68 | 56 | ||
69 | tags_buffer.size = ((char *) tag - atags_copy) + sizeof(tag->hdr); | 57 | /* include the terminating ATAG_NONE */ |
70 | tags_buffer.data = kmalloc(tags_buffer.size, GFP_KERNEL); | 58 | size = (char *)tag - atags_copy + sizeof(struct tag_header); |
71 | if (tags_buffer.data == NULL) | ||
72 | return -ENOMEM; | ||
73 | memcpy(tags_buffer.data, atags_copy, tags_buffer.size); | ||
74 | |||
75 | error = create_proc_entries(); | ||
76 | if (error) { | ||
77 | printk(KERN_ERR "Exporting ATAGs: not enough memory\n"); | ||
78 | kfree(tags_buffer.data); | ||
79 | tags_buffer.size = 0; | ||
80 | tags_buffer.data = NULL; | ||
81 | } | ||
82 | 59 | ||
83 | return error; | 60 | WARN_ON(tag->hdr.tag != ATAG_NONE); |
84 | } | 61 | |
62 | b = kmalloc(sizeof(*b) + size, GFP_KERNEL); | ||
63 | if (!b) | ||
64 | goto nomem; | ||
85 | 65 | ||
66 | b->size = size; | ||
67 | memcpy(b->data, atags_copy, size); | ||
68 | |||
69 | tags_entry = create_proc_read_entry("atags", 0400, | ||
70 | NULL, read_buffer, b); | ||
71 | |||
72 | if (!tags_entry) | ||
73 | goto nomem; | ||
74 | |||
75 | return 0; | ||
76 | |||
77 | nomem: | ||
78 | kfree(b); | ||
79 | printk(KERN_ERR "Exporting ATAGs: not enough memory\n"); | ||
80 | |||
81 | return -ENOMEM; | ||
82 | } | ||
86 | arch_initcall(init_atags_procfs); | 83 | arch_initcall(init_atags_procfs); |
diff --git a/arch/arm/kernel/ecard.c b/arch/arm/kernel/ecard.c index a53c0aba5c14..8bfd299bfe77 100644 --- a/arch/arm/kernel/ecard.c +++ b/arch/arm/kernel/ecard.c | |||
@@ -680,7 +680,7 @@ static int __init ecard_probeirqhw(void) | |||
680 | #define IO_EC_MEMC8_BASE 0 | 680 | #define IO_EC_MEMC8_BASE 0 |
681 | #endif | 681 | #endif |
682 | 682 | ||
683 | unsigned int __ecard_address(ecard_t *ec, card_type_t type, card_speed_t speed) | 683 | static unsigned int __ecard_address(ecard_t *ec, card_type_t type, card_speed_t speed) |
684 | { | 684 | { |
685 | unsigned long address = 0; | 685 | unsigned long address = 0; |
686 | int slot = ec->slot_no; | 686 | int slot = ec->slot_no; |
@@ -1002,7 +1002,7 @@ ecard_probe(int slot, card_type_t type) | |||
1002 | } | 1002 | } |
1003 | 1003 | ||
1004 | rc = -ENODEV; | 1004 | rc = -ENODEV; |
1005 | if ((ec->podaddr = ecard_address(ec, type, ECARD_SYNC)) == 0) | 1005 | if ((ec->podaddr = __ecard_address(ec, type, ECARD_SYNC)) == 0) |
1006 | goto nodev; | 1006 | goto nodev; |
1007 | 1007 | ||
1008 | cid.r_zero = 1; | 1008 | cid.r_zero = 1; |
@@ -1141,10 +1141,10 @@ static int ecard_drv_probe(struct device *dev) | |||
1141 | 1141 | ||
1142 | id = ecard_match_device(drv->id_table, ec); | 1142 | id = ecard_match_device(drv->id_table, ec); |
1143 | 1143 | ||
1144 | ecard_claim(ec); | 1144 | ec->claimed = 1; |
1145 | ret = drv->probe(ec, id); | 1145 | ret = drv->probe(ec, id); |
1146 | if (ret) | 1146 | if (ret) |
1147 | ecard_release(ec); | 1147 | ec->claimed = 0; |
1148 | return ret; | 1148 | return ret; |
1149 | } | 1149 | } |
1150 | 1150 | ||
@@ -1154,7 +1154,7 @@ static int ecard_drv_remove(struct device *dev) | |||
1154 | struct ecard_driver *drv = ECARD_DRV(dev->driver); | 1154 | struct ecard_driver *drv = ECARD_DRV(dev->driver); |
1155 | 1155 | ||
1156 | drv->remove(ec); | 1156 | drv->remove(ec); |
1157 | ecard_release(ec); | 1157 | ec->claimed = 0; |
1158 | 1158 | ||
1159 | /* | 1159 | /* |
1160 | * Restore the default operations. We ensure that the | 1160 | * Restore the default operations. We ensure that the |
@@ -1182,7 +1182,7 @@ static void ecard_drv_shutdown(struct device *dev) | |||
1182 | if (dev->driver) { | 1182 | if (dev->driver) { |
1183 | if (drv->shutdown) | 1183 | if (drv->shutdown) |
1184 | drv->shutdown(ec); | 1184 | drv->shutdown(ec); |
1185 | ecard_release(ec); | 1185 | ec->claimed = 0; |
1186 | } | 1186 | } |
1187 | 1187 | ||
1188 | /* | 1188 | /* |
@@ -1239,7 +1239,6 @@ static int ecard_bus_init(void) | |||
1239 | postcore_initcall(ecard_bus_init); | 1239 | postcore_initcall(ecard_bus_init); |
1240 | 1240 | ||
1241 | EXPORT_SYMBOL(ecard_readchunk); | 1241 | EXPORT_SYMBOL(ecard_readchunk); |
1242 | EXPORT_SYMBOL(__ecard_address); | ||
1243 | EXPORT_SYMBOL(ecard_register_driver); | 1242 | EXPORT_SYMBOL(ecard_register_driver); |
1244 | EXPORT_SYMBOL(ecard_remove_driver); | 1243 | EXPORT_SYMBOL(ecard_remove_driver); |
1245 | EXPORT_SYMBOL(ecard_bus_type); | 1244 | EXPORT_SYMBOL(ecard_bus_type); |
diff --git a/arch/arm/kernel/ecard.h b/arch/arm/kernel/ecard.h index d7c2dacf935d..4642d436be2a 100644 --- a/arch/arm/kernel/ecard.h +++ b/arch/arm/kernel/ecard.h | |||
@@ -54,3 +54,16 @@ struct ex_chunk_dir { | |||
54 | #define c_len(x) ((x)->r_len[0]|((x)->r_len[1]<<8)|((x)->r_len[2]<<16)) | 54 | #define c_len(x) ((x)->r_len[0]|((x)->r_len[1]<<8)|((x)->r_len[2]<<16)) |
55 | #define c_start(x) ((x)->r_start) | 55 | #define c_start(x) ((x)->r_start) |
56 | }; | 56 | }; |
57 | |||
58 | typedef enum ecard_type { /* Cards address space */ | ||
59 | ECARD_IOC, | ||
60 | ECARD_MEMC, | ||
61 | ECARD_EASI | ||
62 | } card_type_t; | ||
63 | |||
64 | typedef enum { /* Speed for ECARD_IOC space */ | ||
65 | ECARD_SLOW = 0, | ||
66 | ECARD_MEDIUM = 1, | ||
67 | ECARD_FAST = 2, | ||
68 | ECARD_SYNC = 3 | ||
69 | } card_speed_t; | ||
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index 46bf2ede6128..199b3680118b 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c | |||
@@ -133,10 +133,8 @@ static void default_idle(void) | |||
133 | cpu_relax(); | 133 | cpu_relax(); |
134 | else { | 134 | else { |
135 | local_irq_disable(); | 135 | local_irq_disable(); |
136 | if (!need_resched()) { | 136 | if (!need_resched()) |
137 | timer_dyn_reprogram(); | ||
138 | arch_idle(); | 137 | arch_idle(); |
139 | } | ||
140 | local_irq_enable(); | 138 | local_irq_enable(); |
141 | } | 139 | } |
142 | } | 140 | } |
diff --git a/arch/arm/kernel/stacktrace.c b/arch/arm/kernel/stacktrace.c index ae31deb2d065..90e0c35ae60d 100644 --- a/arch/arm/kernel/stacktrace.c +++ b/arch/arm/kernel/stacktrace.c | |||
@@ -36,6 +36,7 @@ EXPORT_SYMBOL(walk_stackframe); | |||
36 | #ifdef CONFIG_STACKTRACE | 36 | #ifdef CONFIG_STACKTRACE |
37 | struct stack_trace_data { | 37 | struct stack_trace_data { |
38 | struct stack_trace *trace; | 38 | struct stack_trace *trace; |
39 | unsigned int no_sched_functions; | ||
39 | unsigned int skip; | 40 | unsigned int skip; |
40 | }; | 41 | }; |
41 | 42 | ||
@@ -43,27 +44,52 @@ static int save_trace(struct stackframe *frame, void *d) | |||
43 | { | 44 | { |
44 | struct stack_trace_data *data = d; | 45 | struct stack_trace_data *data = d; |
45 | struct stack_trace *trace = data->trace; | 46 | struct stack_trace *trace = data->trace; |
47 | unsigned long addr = frame->lr; | ||
46 | 48 | ||
49 | if (data->no_sched_functions && in_sched_functions(addr)) | ||
50 | return 0; | ||
47 | if (data->skip) { | 51 | if (data->skip) { |
48 | data->skip--; | 52 | data->skip--; |
49 | return 0; | 53 | return 0; |
50 | } | 54 | } |
51 | 55 | ||
52 | trace->entries[trace->nr_entries++] = frame->lr; | 56 | trace->entries[trace->nr_entries++] = addr; |
53 | 57 | ||
54 | return trace->nr_entries >= trace->max_entries; | 58 | return trace->nr_entries >= trace->max_entries; |
55 | } | 59 | } |
56 | 60 | ||
57 | void save_stack_trace(struct stack_trace *trace) | 61 | void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace) |
58 | { | 62 | { |
59 | struct stack_trace_data data; | 63 | struct stack_trace_data data; |
60 | unsigned long fp, base; | 64 | unsigned long fp, base; |
61 | 65 | ||
62 | data.trace = trace; | 66 | data.trace = trace; |
63 | data.skip = trace->skip; | 67 | data.skip = trace->skip; |
64 | base = (unsigned long)task_stack_page(current); | 68 | base = (unsigned long)task_stack_page(tsk); |
65 | asm("mov %0, fp" : "=r" (fp)); | 69 | |
70 | if (tsk != current) { | ||
71 | #ifdef CONFIG_SMP | ||
72 | /* | ||
73 | * What guarantees do we have here that 'tsk' | ||
74 | * is not running on another CPU? | ||
75 | */ | ||
76 | BUG(); | ||
77 | #else | ||
78 | data.no_sched_functions = 1; | ||
79 | fp = thread_saved_fp(tsk); | ||
80 | #endif | ||
81 | } else { | ||
82 | data.no_sched_functions = 0; | ||
83 | asm("mov %0, fp" : "=r" (fp)); | ||
84 | } | ||
66 | 85 | ||
67 | walk_stackframe(fp, base, base + THREAD_SIZE, save_trace, &data); | 86 | walk_stackframe(fp, base, base + THREAD_SIZE, save_trace, &data); |
87 | if (trace->nr_entries < trace->max_entries) | ||
88 | trace->entries[trace->nr_entries++] = ULONG_MAX; | ||
89 | } | ||
90 | |||
91 | void save_stack_trace(struct stack_trace *trace) | ||
92 | { | ||
93 | save_stack_trace_tsk(current, trace); | ||
68 | } | 94 | } |
69 | #endif | 95 | #endif |
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c index b5867eca1d0b..cc5145b28e7f 100644 --- a/arch/arm/kernel/time.c +++ b/arch/arm/kernel/time.c | |||
@@ -365,108 +365,6 @@ static struct sysdev_class timer_sysclass = { | |||
365 | .resume = timer_resume, | 365 | .resume = timer_resume, |
366 | }; | 366 | }; |
367 | 367 | ||
368 | #ifdef CONFIG_NO_IDLE_HZ | ||
369 | static int timer_dyn_tick_enable(void) | ||
370 | { | ||
371 | struct dyn_tick_timer *dyn_tick = system_timer->dyn_tick; | ||
372 | unsigned long flags; | ||
373 | int ret = -ENODEV; | ||
374 | |||
375 | if (dyn_tick) { | ||
376 | spin_lock_irqsave(&dyn_tick->lock, flags); | ||
377 | ret = 0; | ||
378 | if (!(dyn_tick->state & DYN_TICK_ENABLED)) { | ||
379 | ret = dyn_tick->enable(); | ||
380 | |||
381 | if (ret == 0) | ||
382 | dyn_tick->state |= DYN_TICK_ENABLED; | ||
383 | } | ||
384 | spin_unlock_irqrestore(&dyn_tick->lock, flags); | ||
385 | } | ||
386 | |||
387 | return ret; | ||
388 | } | ||
389 | |||
390 | static int timer_dyn_tick_disable(void) | ||
391 | { | ||
392 | struct dyn_tick_timer *dyn_tick = system_timer->dyn_tick; | ||
393 | unsigned long flags; | ||
394 | int ret = -ENODEV; | ||
395 | |||
396 | if (dyn_tick) { | ||
397 | spin_lock_irqsave(&dyn_tick->lock, flags); | ||
398 | ret = 0; | ||
399 | if (dyn_tick->state & DYN_TICK_ENABLED) { | ||
400 | ret = dyn_tick->disable(); | ||
401 | |||
402 | if (ret == 0) | ||
403 | dyn_tick->state &= ~DYN_TICK_ENABLED; | ||
404 | } | ||
405 | spin_unlock_irqrestore(&dyn_tick->lock, flags); | ||
406 | } | ||
407 | |||
408 | return ret; | ||
409 | } | ||
410 | |||
411 | /* | ||
412 | * Reprogram the system timer for at least the calculated time interval. | ||
413 | * This function should be called from the idle thread with IRQs disabled, | ||
414 | * immediately before sleeping. | ||
415 | */ | ||
416 | void timer_dyn_reprogram(void) | ||
417 | { | ||
418 | struct dyn_tick_timer *dyn_tick = system_timer->dyn_tick; | ||
419 | unsigned long next, seq, flags; | ||
420 | |||
421 | if (!dyn_tick) | ||
422 | return; | ||
423 | |||
424 | spin_lock_irqsave(&dyn_tick->lock, flags); | ||
425 | if (dyn_tick->state & DYN_TICK_ENABLED) { | ||
426 | next = next_timer_interrupt(); | ||
427 | do { | ||
428 | seq = read_seqbegin(&xtime_lock); | ||
429 | dyn_tick->reprogram(next - jiffies); | ||
430 | } while (read_seqretry(&xtime_lock, seq)); | ||
431 | } | ||
432 | spin_unlock_irqrestore(&dyn_tick->lock, flags); | ||
433 | } | ||
434 | |||
435 | static ssize_t timer_show_dyn_tick(struct sys_device *dev, char *buf) | ||
436 | { | ||
437 | return sprintf(buf, "%i\n", | ||
438 | (system_timer->dyn_tick->state & DYN_TICK_ENABLED) >> 1); | ||
439 | } | ||
440 | |||
441 | static ssize_t timer_set_dyn_tick(struct sys_device *dev, const char *buf, | ||
442 | size_t count) | ||
443 | { | ||
444 | unsigned int enable = simple_strtoul(buf, NULL, 2); | ||
445 | |||
446 | if (enable) | ||
447 | timer_dyn_tick_enable(); | ||
448 | else | ||
449 | timer_dyn_tick_disable(); | ||
450 | |||
451 | return count; | ||
452 | } | ||
453 | static SYSDEV_ATTR(dyn_tick, 0644, timer_show_dyn_tick, timer_set_dyn_tick); | ||
454 | |||
455 | /* | ||
456 | * dyntick=enable|disable | ||
457 | */ | ||
458 | static char dyntick_str[4] __initdata = ""; | ||
459 | |||
460 | static int __init dyntick_setup(char *str) | ||
461 | { | ||
462 | if (str) | ||
463 | strlcpy(dyntick_str, str, sizeof(dyntick_str)); | ||
464 | return 1; | ||
465 | } | ||
466 | |||
467 | __setup("dyntick=", dyntick_setup); | ||
468 | #endif | ||
469 | |||
470 | static int __init timer_init_sysfs(void) | 368 | static int __init timer_init_sysfs(void) |
471 | { | 369 | { |
472 | int ret = sysdev_class_register(&timer_sysclass); | 370 | int ret = sysdev_class_register(&timer_sysclass); |
@@ -475,19 +373,6 @@ static int __init timer_init_sysfs(void) | |||
475 | ret = sysdev_register(&system_timer->dev); | 373 | ret = sysdev_register(&system_timer->dev); |
476 | } | 374 | } |
477 | 375 | ||
478 | #ifdef CONFIG_NO_IDLE_HZ | ||
479 | if (ret == 0 && system_timer->dyn_tick) { | ||
480 | ret = sysdev_create_file(&system_timer->dev, &attr_dyn_tick); | ||
481 | |||
482 | /* | ||
483 | * Turn on dynamic tick after calibrate delay | ||
484 | * for correct bogomips | ||
485 | */ | ||
486 | if (ret == 0 && dyntick_str[0] == 'e') | ||
487 | ret = timer_dyn_tick_enable(); | ||
488 | } | ||
489 | #endif | ||
490 | |||
491 | return ret; | 376 | return ret; |
492 | } | 377 | } |
493 | 378 | ||
@@ -500,10 +385,5 @@ void __init time_init(void) | |||
500 | system_timer->offset = dummy_gettimeoffset; | 385 | system_timer->offset = dummy_gettimeoffset; |
501 | #endif | 386 | #endif |
502 | system_timer->init(); | 387 | system_timer->init(); |
503 | |||
504 | #ifdef CONFIG_NO_IDLE_HZ | ||
505 | if (system_timer->dyn_tick) | ||
506 | spin_lock_init(&system_timer->dyn_tick->lock); | ||
507 | #endif | ||
508 | } | 388 | } |
509 | 389 | ||
diff --git a/arch/arm/lib/copy_template.S b/arch/arm/lib/copy_template.S index cab355c0c1f7..139cce646055 100644 --- a/arch/arm/lib/copy_template.S +++ b/arch/arm/lib/copy_template.S | |||
@@ -13,14 +13,6 @@ | |||
13 | */ | 13 | */ |
14 | 14 | ||
15 | /* | 15 | /* |
16 | * This can be used to enable code to cacheline align the source pointer. | ||
17 | * Experiments on tested architectures (StrongARM and XScale) didn't show | ||
18 | * this a worthwhile thing to do. That might be different in the future. | ||
19 | */ | ||
20 | //#define CALGN(code...) code | ||
21 | #define CALGN(code...) | ||
22 | |||
23 | /* | ||
24 | * Theory of operation | 16 | * Theory of operation |
25 | * ------------------- | 17 | * ------------------- |
26 | * | 18 | * |
@@ -82,7 +74,7 @@ | |||
82 | stmfd sp!, {r5 - r8} | 74 | stmfd sp!, {r5 - r8} |
83 | blt 5f | 75 | blt 5f |
84 | 76 | ||
85 | CALGN( ands ip, r1, #31 ) | 77 | CALGN( ands ip, r0, #31 ) |
86 | CALGN( rsb r3, ip, #32 ) | 78 | CALGN( rsb r3, ip, #32 ) |
87 | CALGN( sbcnes r4, r3, r2 ) @ C is always set here | 79 | CALGN( sbcnes r4, r3, r2 ) @ C is always set here |
88 | CALGN( bcs 2f ) | 80 | CALGN( bcs 2f ) |
@@ -168,7 +160,7 @@ | |||
168 | subs r2, r2, #28 | 160 | subs r2, r2, #28 |
169 | blt 14f | 161 | blt 14f |
170 | 162 | ||
171 | CALGN( ands ip, r1, #31 ) | 163 | CALGN( ands ip, r0, #31 ) |
172 | CALGN( rsb ip, ip, #32 ) | 164 | CALGN( rsb ip, ip, #32 ) |
173 | CALGN( sbcnes r4, ip, r2 ) @ C is always set here | 165 | CALGN( sbcnes r4, ip, r2 ) @ C is always set here |
174 | CALGN( subcc r2, r2, ip ) | 166 | CALGN( subcc r2, r2, ip ) |
diff --git a/arch/arm/lib/memmove.S b/arch/arm/lib/memmove.S index ef7fddc14ac9..2e301b7bd8f1 100644 --- a/arch/arm/lib/memmove.S +++ b/arch/arm/lib/memmove.S | |||
@@ -13,14 +13,6 @@ | |||
13 | #include <linux/linkage.h> | 13 | #include <linux/linkage.h> |
14 | #include <asm/assembler.h> | 14 | #include <asm/assembler.h> |
15 | 15 | ||
16 | /* | ||
17 | * This can be used to enable code to cacheline align the source pointer. | ||
18 | * Experiments on tested architectures (StrongARM and XScale) didn't show | ||
19 | * this a worthwhile thing to do. That might be different in the future. | ||
20 | */ | ||
21 | //#define CALGN(code...) code | ||
22 | #define CALGN(code...) | ||
23 | |||
24 | .text | 16 | .text |
25 | 17 | ||
26 | /* | 18 | /* |
@@ -55,11 +47,12 @@ ENTRY(memmove) | |||
55 | stmfd sp!, {r5 - r8} | 47 | stmfd sp!, {r5 - r8} |
56 | blt 5f | 48 | blt 5f |
57 | 49 | ||
58 | CALGN( ands ip, r1, #31 ) | 50 | CALGN( ands ip, r0, #31 ) |
59 | CALGN( sbcnes r4, ip, r2 ) @ C is always set here | 51 | CALGN( sbcnes r4, ip, r2 ) @ C is always set here |
60 | CALGN( bcs 2f ) | 52 | CALGN( bcs 2f ) |
61 | CALGN( adr r4, 6f ) | 53 | CALGN( adr r4, 6f ) |
62 | CALGN( subs r2, r2, ip ) @ C is set here | 54 | CALGN( subs r2, r2, ip ) @ C is set here |
55 | CALGN( rsb ip, ip, #32 ) | ||
63 | CALGN( add pc, r4, ip ) | 56 | CALGN( add pc, r4, ip ) |
64 | 57 | ||
65 | PLD( pld [r1, #-4] ) | 58 | PLD( pld [r1, #-4] ) |
@@ -138,8 +131,7 @@ ENTRY(memmove) | |||
138 | subs r2, r2, #28 | 131 | subs r2, r2, #28 |
139 | blt 14f | 132 | blt 14f |
140 | 133 | ||
141 | CALGN( ands ip, r1, #31 ) | 134 | CALGN( ands ip, r0, #31 ) |
142 | CALGN( rsb ip, ip, #32 ) | ||
143 | CALGN( sbcnes r4, ip, r2 ) @ C is always set here | 135 | CALGN( sbcnes r4, ip, r2 ) @ C is always set here |
144 | CALGN( subcc r2, r2, ip ) | 136 | CALGN( subcc r2, r2, ip ) |
145 | CALGN( bcc 15f ) | 137 | CALGN( bcc 15f ) |
diff --git a/arch/arm/lib/memset.S b/arch/arm/lib/memset.S index 95b110b07a89..b477d4ac88ef 100644 --- a/arch/arm/lib/memset.S +++ b/arch/arm/lib/memset.S | |||
@@ -39,6 +39,9 @@ ENTRY(memset) | |||
39 | mov r3, r1 | 39 | mov r3, r1 |
40 | cmp r2, #16 | 40 | cmp r2, #16 |
41 | blt 4f | 41 | blt 4f |
42 | |||
43 | #if ! CALGN(1)+0 | ||
44 | |||
42 | /* | 45 | /* |
43 | * We need an extra register for this loop - save the return address and | 46 | * We need an extra register for this loop - save the return address and |
44 | * use the LR | 47 | * use the LR |
@@ -64,6 +67,49 @@ ENTRY(memset) | |||
64 | stmneia r0!, {r1, r3, ip, lr} | 67 | stmneia r0!, {r1, r3, ip, lr} |
65 | ldr lr, [sp], #4 | 68 | ldr lr, [sp], #4 |
66 | 69 | ||
70 | #else | ||
71 | |||
72 | /* | ||
73 | * This version aligns the destination pointer in order to write | ||
74 | * whole cache lines at once. | ||
75 | */ | ||
76 | |||
77 | stmfd sp!, {r4-r7, lr} | ||
78 | mov r4, r1 | ||
79 | mov r5, r1 | ||
80 | mov r6, r1 | ||
81 | mov r7, r1 | ||
82 | mov ip, r1 | ||
83 | mov lr, r1 | ||
84 | |||
85 | cmp r2, #96 | ||
86 | tstgt r0, #31 | ||
87 | ble 3f | ||
88 | |||
89 | and ip, r0, #31 | ||
90 | rsb ip, ip, #32 | ||
91 | sub r2, r2, ip | ||
92 | movs ip, ip, lsl #(32 - 4) | ||
93 | stmcsia r0!, {r4, r5, r6, r7} | ||
94 | stmmiia r0!, {r4, r5} | ||
95 | tst ip, #(1 << 30) | ||
96 | mov ip, r1 | ||
97 | strne r1, [r0], #4 | ||
98 | |||
99 | 3: subs r2, r2, #64 | ||
100 | stmgeia r0!, {r1, r3-r7, ip, lr} | ||
101 | stmgeia r0!, {r1, r3-r7, ip, lr} | ||
102 | bgt 3b | ||
103 | ldmeqfd sp!, {r4-r7, pc} | ||
104 | |||
105 | tst r2, #32 | ||
106 | stmneia r0!, {r1, r3-r7, ip, lr} | ||
107 | tst r2, #16 | ||
108 | stmneia r0!, {r4-r7} | ||
109 | ldmfd sp!, {r4-r7, lr} | ||
110 | |||
111 | #endif | ||
112 | |||
67 | 4: tst r2, #8 | 113 | 4: tst r2, #8 |
68 | stmneia r0!, {r1, r3} | 114 | stmneia r0!, {r1, r3} |
69 | tst r2, #4 | 115 | tst r2, #4 |
diff --git a/arch/arm/lib/memzero.S b/arch/arm/lib/memzero.S index abf2508e8221..b8f79d80ee9b 100644 --- a/arch/arm/lib/memzero.S +++ b/arch/arm/lib/memzero.S | |||
@@ -39,6 +39,9 @@ ENTRY(__memzero) | |||
39 | */ | 39 | */ |
40 | cmp r1, #16 @ 1 we can skip this chunk if we | 40 | cmp r1, #16 @ 1 we can skip this chunk if we |
41 | blt 4f @ 1 have < 16 bytes | 41 | blt 4f @ 1 have < 16 bytes |
42 | |||
43 | #if ! CALGN(1)+0 | ||
44 | |||
42 | /* | 45 | /* |
43 | * We need an extra register for this loop - save the return address and | 46 | * We need an extra register for this loop - save the return address and |
44 | * use the LR | 47 | * use the LR |
@@ -64,6 +67,47 @@ ENTRY(__memzero) | |||
64 | stmneia r0!, {r2, r3, ip, lr} @ 4 | 67 | stmneia r0!, {r2, r3, ip, lr} @ 4 |
65 | ldr lr, [sp], #4 @ 1 | 68 | ldr lr, [sp], #4 @ 1 |
66 | 69 | ||
70 | #else | ||
71 | |||
72 | /* | ||
73 | * This version aligns the destination pointer in order to write | ||
74 | * whole cache lines at once. | ||
75 | */ | ||
76 | |||
77 | stmfd sp!, {r4-r7, lr} | ||
78 | mov r4, r2 | ||
79 | mov r5, r2 | ||
80 | mov r6, r2 | ||
81 | mov r7, r2 | ||
82 | mov ip, r2 | ||
83 | mov lr, r2 | ||
84 | |||
85 | cmp r1, #96 | ||
86 | andgts ip, r0, #31 | ||
87 | ble 3f | ||
88 | |||
89 | rsb ip, ip, #32 | ||
90 | sub r1, r1, ip | ||
91 | movs ip, ip, lsl #(32 - 4) | ||
92 | stmcsia r0!, {r4, r5, r6, r7} | ||
93 | stmmiia r0!, {r4, r5} | ||
94 | movs ip, ip, lsl #2 | ||
95 | strcs r2, [r0], #4 | ||
96 | |||
97 | 3: subs r1, r1, #64 | ||
98 | stmgeia r0!, {r2-r7, ip, lr} | ||
99 | stmgeia r0!, {r2-r7, ip, lr} | ||
100 | bgt 3b | ||
101 | ldmeqfd sp!, {r4-r7, pc} | ||
102 | |||
103 | tst r1, #32 | ||
104 | stmneia r0!, {r2-r7, ip, lr} | ||
105 | tst r1, #16 | ||
106 | stmneia r0!, {r4-r7} | ||
107 | ldmfd sp!, {r4-r7, lr} | ||
108 | |||
109 | #endif | ||
110 | |||
67 | 4: tst r1, #8 @ 1 8 bytes or more? | 111 | 4: tst r1, #8 @ 1 8 bytes or more? |
68 | stmneia r0!, {r2, r3} @ 2 | 112 | stmneia r0!, {r2, r3} @ 2 |
69 | tst r1, #4 @ 1 4 bytes or more? | 113 | tst r1, #4 @ 1 4 bytes or more? |
diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig index 0fc07b6db749..5bad6b9b00d7 100644 --- a/arch/arm/mach-at91/Kconfig +++ b/arch/arm/mach-at91/Kconfig | |||
@@ -30,6 +30,11 @@ config ARCH_AT91SAM9RL | |||
30 | select GENERIC_TIME | 30 | select GENERIC_TIME |
31 | select GENERIC_CLOCKEVENTS | 31 | select GENERIC_CLOCKEVENTS |
32 | 32 | ||
33 | config ARCH_AT91SAM9G20 | ||
34 | bool "AT91SAM9G20" | ||
35 | select GENERIC_TIME | ||
36 | select GENERIC_CLOCKEVENTS | ||
37 | |||
33 | config ARCH_AT91CAP9 | 38 | config ARCH_AT91CAP9 |
34 | bool "AT91CAP9" | 39 | bool "AT91CAP9" |
35 | select GENERIC_TIME | 40 | select GENERIC_TIME |
@@ -126,6 +131,12 @@ config MACH_ECBAT91 | |||
126 | Select this if you are using emQbit's ECB_AT91 board. | 131 | Select this if you are using emQbit's ECB_AT91 board. |
127 | <http://wiki.emqbit.com/free-ecb-at91> | 132 | <http://wiki.emqbit.com/free-ecb-at91> |
128 | 133 | ||
134 | config MACH_YL9200 | ||
135 | bool "ucDragon YL-9200" | ||
136 | depends on ARCH_AT91RM9200 | ||
137 | help | ||
138 | Select this if you are using the ucDragon YL-9200 board. | ||
139 | |||
129 | endif | 140 | endif |
130 | 141 | ||
131 | # ---------------------------------------------------------- | 142 | # ---------------------------------------------------------- |
@@ -164,6 +175,20 @@ config MACH_SAM9_L9260 | |||
164 | Select this if you are using Olimex's SAM9-L9260 board based on the Atmel AT91SAM9260. | 175 | Select this if you are using Olimex's SAM9-L9260 board based on the Atmel AT91SAM9260. |
165 | <http://www.olimex.com/dev/sam9-L9260.html> | 176 | <http://www.olimex.com/dev/sam9-L9260.html> |
166 | 177 | ||
178 | config MACH_USB_A9260 | ||
179 | bool "CALAO USB-A9260" | ||
180 | depends on ARCH_AT91SAM9260 | ||
181 | help | ||
182 | Select this if you are using a Calao Systems USB-A9260. | ||
183 | <http://www.calao-systems.com> | ||
184 | |||
185 | config MACH_QIL_A9260 | ||
186 | bool "CALAO QIL-A9260 board" | ||
187 | depends on ARCH_AT91SAM9260 | ||
188 | help | ||
189 | Select this if you are using a Calao Systems QIL-A9260 Board. | ||
190 | <http://www.calao-systems.com> | ||
191 | |||
167 | endif | 192 | endif |
168 | 193 | ||
169 | # ---------------------------------------------------------- | 194 | # ---------------------------------------------------------- |
@@ -194,6 +219,13 @@ config MACH_AT91SAM9263EK | |||
194 | Select this if you are using Atmel's AT91SAM9263-EK Evaluation Kit. | 219 | Select this if you are using Atmel's AT91SAM9263-EK Evaluation Kit. |
195 | <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4057> | 220 | <http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4057> |
196 | 221 | ||
222 | config MACH_USB_A9263 | ||
223 | bool "CALAO USB-A9263" | ||
224 | depends on ARCH_AT91SAM9263 | ||
225 | help | ||
226 | Select this if you are using a Calao Systems USB-A9263. | ||
227 | <http://www.calao-systems.com> | ||
228 | |||
197 | endif | 229 | endif |
198 | 230 | ||
199 | # ---------------------------------------------------------- | 231 | # ---------------------------------------------------------- |
@@ -212,6 +244,20 @@ endif | |||
212 | 244 | ||
213 | # ---------------------------------------------------------- | 245 | # ---------------------------------------------------------- |
214 | 246 | ||
247 | if ARCH_AT91SAM9G20 | ||
248 | |||
249 | comment "AT91SAM9G20 Board Type" | ||
250 | |||
251 | config MACH_AT91SAM9G20EK | ||
252 | bool "Atmel AT91SAM9G20-EK Evaluation Kit" | ||
253 | depends on ARCH_AT91SAM9G20 | ||
254 | help | ||
255 | Select this if you are using Atmel's AT91SAM9G20-EK Evaluation Kit. | ||
256 | |||
257 | endif | ||
258 | |||
259 | # ---------------------------------------------------------- | ||
260 | |||
215 | if ARCH_AT91CAP9 | 261 | if ARCH_AT91CAP9 |
216 | 262 | ||
217 | comment "AT91CAP9 Board Type" | 263 | comment "AT91CAP9 Board Type" |
@@ -247,13 +293,13 @@ comment "AT91 Board Options" | |||
247 | 293 | ||
248 | config MTD_AT91_DATAFLASH_CARD | 294 | config MTD_AT91_DATAFLASH_CARD |
249 | bool "Enable DataFlash Card support" | 295 | bool "Enable DataFlash Card support" |
250 | depends on (ARCH_AT91RM9200DK || MACH_AT91RM9200EK || MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91CAP9ADK || MACH_SAM9_L9260 || MACH_ECBAT91) | 296 | depends on (ARCH_AT91RM9200DK || MACH_AT91RM9200EK || MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_ECBAT91 || MACH_SAM9_L9260 || MACH_AT91CAP9ADK) |
251 | help | 297 | help |
252 | Enable support for the DataFlash card. | 298 | Enable support for the DataFlash card. |
253 | 299 | ||
254 | config MTD_NAND_AT91_BUSWIDTH_16 | 300 | config MTD_NAND_AT91_BUSWIDTH_16 |
255 | bool "Enable 16-bit data bus interface to NAND flash" | 301 | bool "Enable 16-bit data bus interface to NAND flash" |
256 | depends on (MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91CAP9ADK) | 302 | depends on (MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_AT91CAP9ADK) |
257 | help | 303 | help |
258 | On AT91SAM926x boards both types of NAND flash can be present | 304 | On AT91SAM926x boards both types of NAND flash can be present |
259 | (8 and 16 bit data bus width). | 305 | (8 and 16 bit data bus width). |
@@ -302,15 +348,15 @@ config AT91_EARLY_USART2 | |||
302 | 348 | ||
303 | config AT91_EARLY_USART3 | 349 | config AT91_EARLY_USART3 |
304 | bool "USART3" | 350 | bool "USART3" |
305 | depends on (ARCH_AT91RM9200 || ARCH_AT91SAM9RL || ARCH_AT91SAM9260) | 351 | depends on (ARCH_AT91RM9200 || ARCH_AT91SAM9RL || ARCH_AT91SAM9260 || ARCH_AT91SAM9G20) |
306 | 352 | ||
307 | config AT91_EARLY_USART4 | 353 | config AT91_EARLY_USART4 |
308 | bool "USART4" | 354 | bool "USART4" |
309 | depends on ARCH_AT91SAM9260 | 355 | depends on ARCH_AT91SAM9260 || ARCH_AT91SAM9G20 |
310 | 356 | ||
311 | config AT91_EARLY_USART5 | 357 | config AT91_EARLY_USART5 |
312 | bool "USART5" | 358 | bool "USART5" |
313 | depends on ARCH_AT91SAM9260 | 359 | depends on ARCH_AT91SAM9260 || ARCH_AT91SAM9G20 |
314 | 360 | ||
315 | endchoice | 361 | endchoice |
316 | 362 | ||
diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile index 8d9bc0153b18..7d641f97516b 100644 --- a/arch/arm/mach-at91/Makefile +++ b/arch/arm/mach-at91/Makefile | |||
@@ -15,6 +15,7 @@ obj-$(CONFIG_ARCH_AT91SAM9260) += at91sam9260.o at91sam926x_time.o at91sam9260_d | |||
15 | obj-$(CONFIG_ARCH_AT91SAM9261) += at91sam9261.o at91sam926x_time.o at91sam9261_devices.o | 15 | obj-$(CONFIG_ARCH_AT91SAM9261) += at91sam9261.o at91sam926x_time.o at91sam9261_devices.o |
16 | obj-$(CONFIG_ARCH_AT91SAM9263) += at91sam9263.o at91sam926x_time.o at91sam9263_devices.o | 16 | obj-$(CONFIG_ARCH_AT91SAM9263) += at91sam9263.o at91sam926x_time.o at91sam9263_devices.o |
17 | obj-$(CONFIG_ARCH_AT91SAM9RL) += at91sam9rl.o at91sam926x_time.o at91sam9rl_devices.o | 17 | obj-$(CONFIG_ARCH_AT91SAM9RL) += at91sam9rl.o at91sam926x_time.o at91sam9rl_devices.o |
18 | obj-$(CONFIG_ARCH_AT91SAM9G20) += at91sam9260.o at91sam926x_time.o at91sam9260_devices.o | ||
18 | obj-$(CONFIG_ARCH_AT91CAP9) += at91cap9.o at91sam926x_time.o at91cap9_devices.o | 19 | obj-$(CONFIG_ARCH_AT91CAP9) += at91cap9.o at91sam926x_time.o at91cap9_devices.o |
19 | obj-$(CONFIG_ARCH_AT91X40) += at91x40.o at91x40_time.o | 20 | obj-$(CONFIG_ARCH_AT91X40) += at91x40.o at91x40_time.o |
20 | 21 | ||
@@ -30,21 +31,28 @@ obj-$(CONFIG_MACH_ATEB9200) += board-eb9200.o | |||
30 | obj-$(CONFIG_MACH_KAFA) += board-kafa.o | 31 | obj-$(CONFIG_MACH_KAFA) += board-kafa.o |
31 | obj-$(CONFIG_MACH_PICOTUX2XX) += board-picotux200.o | 32 | obj-$(CONFIG_MACH_PICOTUX2XX) += board-picotux200.o |
32 | obj-$(CONFIG_MACH_ECBAT91) += board-ecbat91.o | 33 | obj-$(CONFIG_MACH_ECBAT91) += board-ecbat91.o |
34 | obj-$(CONFIG_MACH_YL9200) += board-yl-9200.o | ||
33 | 35 | ||
34 | # AT91SAM9260 board-specific support | 36 | # AT91SAM9260 board-specific support |
35 | obj-$(CONFIG_MACH_AT91SAM9260EK) += board-sam9260ek.o | 37 | obj-$(CONFIG_MACH_AT91SAM9260EK) += board-sam9260ek.o |
36 | obj-$(CONFIG_MACH_CAM60) += board-cam60.o | 38 | obj-$(CONFIG_MACH_CAM60) += board-cam60.o |
37 | obj-$(CONFIG_MACH_SAM9_L9260) += board-sam9-l9260.o | 39 | obj-$(CONFIG_MACH_SAM9_L9260) += board-sam9-l9260.o |
40 | obj-$(CONFIG_MACH_USB_A9260) += board-usb-a9260.o | ||
41 | obj-$(CONFIG_MACH_QIL_A9260) += board-qil-a9260.o | ||
38 | 42 | ||
39 | # AT91SAM9261 board-specific support | 43 | # AT91SAM9261 board-specific support |
40 | obj-$(CONFIG_MACH_AT91SAM9261EK) += board-sam9261ek.o | 44 | obj-$(CONFIG_MACH_AT91SAM9261EK) += board-sam9261ek.o |
41 | 45 | ||
42 | # AT91SAM9263 board-specific support | 46 | # AT91SAM9263 board-specific support |
43 | obj-$(CONFIG_MACH_AT91SAM9263EK) += board-sam9263ek.o | 47 | obj-$(CONFIG_MACH_AT91SAM9263EK) += board-sam9263ek.o |
48 | obj-$(CONFIG_MACH_USB_A9263) += board-usb-a9263.o | ||
44 | 49 | ||
45 | # AT91SAM9RL board-specific support | 50 | # AT91SAM9RL board-specific support |
46 | obj-$(CONFIG_MACH_AT91SAM9RLEK) += board-sam9rlek.o | 51 | obj-$(CONFIG_MACH_AT91SAM9RLEK) += board-sam9rlek.o |
47 | 52 | ||
53 | # AT91SAM9G20 board-specific support | ||
54 | obj-$(CONFIG_MACH_AT91SAM9G20EK) += board-sam9g20ek.o | ||
55 | |||
48 | # AT91CAP9 board-specific support | 56 | # AT91CAP9 board-specific support |
49 | obj-$(CONFIG_MACH_AT91CAP9ADK) += board-cap9adk.o | 57 | obj-$(CONFIG_MACH_AT91CAP9ADK) += board-cap9adk.o |
50 | 58 | ||
diff --git a/arch/arm/mach-at91/at91cap9_devices.c b/arch/arm/mach-at91/at91cap9_devices.c index be526746e01e..747b9dedab88 100644 --- a/arch/arm/mach-at91/at91cap9_devices.c +++ b/arch/arm/mach-at91/at91cap9_devices.c | |||
@@ -84,6 +84,105 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data) {} | |||
84 | 84 | ||
85 | 85 | ||
86 | /* -------------------------------------------------------------------- | 86 | /* -------------------------------------------------------------------- |
87 | * USB HS Device (Gadget) | ||
88 | * -------------------------------------------------------------------- */ | ||
89 | |||
90 | #if defined(CONFIG_USB_GADGET_ATMEL_USBA) || defined(CONFIG_USB_GADGET_ATMEL_USBA_MODULE) | ||
91 | |||
92 | static struct resource usba_udc_resources[] = { | ||
93 | [0] = { | ||
94 | .start = AT91CAP9_UDPHS_FIFO, | ||
95 | .end = AT91CAP9_UDPHS_FIFO + SZ_512K - 1, | ||
96 | .flags = IORESOURCE_MEM, | ||
97 | }, | ||
98 | [1] = { | ||
99 | .start = AT91CAP9_BASE_UDPHS, | ||
100 | .end = AT91CAP9_BASE_UDPHS + SZ_1K - 1, | ||
101 | .flags = IORESOURCE_MEM, | ||
102 | }, | ||
103 | [2] = { | ||
104 | .start = AT91CAP9_ID_UDPHS, | ||
105 | .end = AT91CAP9_ID_UDPHS, | ||
106 | .flags = IORESOURCE_IRQ, | ||
107 | }, | ||
108 | }; | ||
109 | |||
110 | #define EP(nam, idx, maxpkt, maxbk, dma, isoc) \ | ||
111 | [idx] = { \ | ||
112 | .name = nam, \ | ||
113 | .index = idx, \ | ||
114 | .fifo_size = maxpkt, \ | ||
115 | .nr_banks = maxbk, \ | ||
116 | .can_dma = dma, \ | ||
117 | .can_isoc = isoc, \ | ||
118 | } | ||
119 | |||
120 | static struct usba_ep_data usba_udc_ep[] = { | ||
121 | EP("ep0", 0, 64, 1, 0, 0), | ||
122 | EP("ep1", 1, 1024, 3, 1, 1), | ||
123 | EP("ep2", 2, 1024, 3, 1, 1), | ||
124 | EP("ep3", 3, 1024, 2, 1, 1), | ||
125 | EP("ep4", 4, 1024, 2, 1, 1), | ||
126 | EP("ep5", 5, 1024, 2, 1, 0), | ||
127 | EP("ep6", 6, 1024, 2, 1, 0), | ||
128 | EP("ep7", 7, 1024, 2, 0, 0), | ||
129 | }; | ||
130 | |||
131 | #undef EP | ||
132 | |||
133 | /* | ||
134 | * pdata doesn't have room for any endpoints, so we need to | ||
135 | * append room for the ones we need right after it. | ||
136 | */ | ||
137 | static struct { | ||
138 | struct usba_platform_data pdata; | ||
139 | struct usba_ep_data ep[8]; | ||
140 | } usba_udc_data; | ||
141 | |||
142 | static struct platform_device at91_usba_udc_device = { | ||
143 | .name = "atmel_usba_udc", | ||
144 | .id = -1, | ||
145 | .dev = { | ||
146 | .platform_data = &usba_udc_data.pdata, | ||
147 | }, | ||
148 | .resource = usba_udc_resources, | ||
149 | .num_resources = ARRAY_SIZE(usba_udc_resources), | ||
150 | }; | ||
151 | |||
152 | void __init at91_add_device_usba(struct usba_platform_data *data) | ||
153 | { | ||
154 | at91_sys_write(AT91_MATRIX_UDPHS, AT91_MATRIX_SELECT_UDPHS | | ||
155 | AT91_MATRIX_UDPHS_BYPASS_LOCK); | ||
156 | |||
157 | /* | ||
158 | * Invalid pins are 0 on AT91, but the usba driver is shared | ||
159 | * with AVR32, which use negative values instead. Once/if | ||
160 | * gpio_is_valid() is ported to AT91, revisit this code. | ||
161 | */ | ||
162 | usba_udc_data.pdata.vbus_pin = -EINVAL; | ||
163 | usba_udc_data.pdata.num_ep = ARRAY_SIZE(usba_udc_ep); | ||
164 | memcpy(usba_udc_data.ep, usba_udc_ep, sizeof(usba_udc_ep));; | ||
165 | |||
166 | if (data && data->vbus_pin > 0) { | ||
167 | at91_set_gpio_input(data->vbus_pin, 0); | ||
168 | at91_set_deglitch(data->vbus_pin, 1); | ||
169 | usba_udc_data.pdata.vbus_pin = data->vbus_pin; | ||
170 | } | ||
171 | |||
172 | /* Pullup pin is handled internally by USB device peripheral */ | ||
173 | |||
174 | /* Clocks */ | ||
175 | at91_clock_associate("utmi_clk", &at91_usba_udc_device.dev, "hclk"); | ||
176 | at91_clock_associate("udphs_clk", &at91_usba_udc_device.dev, "pclk"); | ||
177 | |||
178 | platform_device_register(&at91_usba_udc_device); | ||
179 | } | ||
180 | #else | ||
181 | void __init at91_add_device_usba(struct usba_platform_data *data) {} | ||
182 | #endif | ||
183 | |||
184 | |||
185 | /* -------------------------------------------------------------------- | ||
87 | * Ethernet | 186 | * Ethernet |
88 | * -------------------------------------------------------------------- */ | 187 | * -------------------------------------------------------------------- */ |
89 | 188 | ||
diff --git a/arch/arm/mach-at91/at91sam9260.c b/arch/arm/mach-at91/at91sam9260.c index ee26550cdc21..380f12a12200 100644 --- a/arch/arm/mach-at91/at91sam9260.c +++ b/arch/arm/mach-at91/at91sam9260.c | |||
@@ -47,6 +47,20 @@ static struct map_desc at91sam9260_sram_desc[] __initdata = { | |||
47 | } | 47 | } |
48 | }; | 48 | }; |
49 | 49 | ||
50 | static struct map_desc at91sam9g20_sram_desc[] __initdata = { | ||
51 | { | ||
52 | .virtual = AT91_IO_VIRT_BASE - AT91SAM9G20_SRAM0_SIZE, | ||
53 | .pfn = __phys_to_pfn(AT91SAM9G20_SRAM0_BASE), | ||
54 | .length = AT91SAM9G20_SRAM0_SIZE, | ||
55 | .type = MT_DEVICE, | ||
56 | }, { | ||
57 | .virtual = AT91_IO_VIRT_BASE - AT91SAM9G20_SRAM0_SIZE - AT91SAM9G20_SRAM1_SIZE, | ||
58 | .pfn = __phys_to_pfn(AT91SAM9G20_SRAM1_BASE), | ||
59 | .length = AT91SAM9G20_SRAM1_SIZE, | ||
60 | .type = MT_DEVICE, | ||
61 | } | ||
62 | }; | ||
63 | |||
50 | static struct map_desc at91sam9xe_sram_desc[] __initdata = { | 64 | static struct map_desc at91sam9xe_sram_desc[] __initdata = { |
51 | { | 65 | { |
52 | .pfn = __phys_to_pfn(AT91SAM9XE_SRAM_BASE), | 66 | .pfn = __phys_to_pfn(AT91SAM9XE_SRAM_BASE), |
@@ -307,6 +321,8 @@ void __init at91sam9260_initialize(unsigned long main_clock) | |||
307 | 321 | ||
308 | if (cpu_is_at91sam9xe()) | 322 | if (cpu_is_at91sam9xe()) |
309 | at91sam9xe_initialize(); | 323 | at91sam9xe_initialize(); |
324 | else if (cpu_is_at91sam9g20()) | ||
325 | iotable_init(at91sam9g20_sram_desc, ARRAY_SIZE(at91sam9g20_sram_desc)); | ||
310 | else | 326 | else |
311 | iotable_init(at91sam9260_sram_desc, ARRAY_SIZE(at91sam9260_sram_desc)); | 327 | iotable_init(at91sam9260_sram_desc, ARRAY_SIZE(at91sam9260_sram_desc)); |
312 | 328 | ||
diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c index 393a32aefce5..86cba4ac29b1 100644 --- a/arch/arm/mach-at91/at91sam9260_devices.c +++ b/arch/arm/mach-at91/at91sam9260_devices.c | |||
@@ -18,6 +18,7 @@ | |||
18 | 18 | ||
19 | #include <asm/arch/board.h> | 19 | #include <asm/arch/board.h> |
20 | #include <asm/arch/gpio.h> | 20 | #include <asm/arch/gpio.h> |
21 | #include <asm/arch/cpu.h> | ||
21 | #include <asm/arch/at91sam9260.h> | 22 | #include <asm/arch/at91sam9260.h> |
22 | #include <asm/arch/at91sam9260_matrix.h> | 23 | #include <asm/arch/at91sam9260_matrix.h> |
23 | #include <asm/arch/at91sam9_smc.h> | 24 | #include <asm/arch/at91sam9_smc.h> |
@@ -320,20 +321,41 @@ void __init at91_add_device_nand(struct at91_nand_data *data) | |||
320 | csa = at91_sys_read(AT91_MATRIX_EBICSA); | 321 | csa = at91_sys_read(AT91_MATRIX_EBICSA); |
321 | at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_CS3A_SMC_SMARTMEDIA); | 322 | at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_CS3A_SMC_SMARTMEDIA); |
322 | 323 | ||
323 | /* set the bus interface characteristics */ | 324 | if (cpu_is_at91sam9260()) { |
324 | at91_sys_write(AT91_SMC_SETUP(3), AT91_SMC_NWESETUP_(0) | AT91_SMC_NCS_WRSETUP_(0) | 325 | /* Timing for sam9260 */ |
325 | | AT91_SMC_NRDSETUP_(0) | AT91_SMC_NCS_RDSETUP_(0)); | 326 | /* set the bus interface characteristics */ |
327 | at91_sys_write(AT91_SMC_SETUP(3), AT91_SMC_NWESETUP_(1) | AT91_SMC_NCS_WRSETUP_(0) | ||
328 | | AT91_SMC_NRDSETUP_(1) | AT91_SMC_NCS_RDSETUP_(0)); | ||
326 | 329 | ||
327 | at91_sys_write(AT91_SMC_PULSE(3), AT91_SMC_NWEPULSE_(3) | AT91_SMC_NCS_WRPULSE_(3) | 330 | at91_sys_write(AT91_SMC_PULSE(3), AT91_SMC_NWEPULSE_(3) | AT91_SMC_NCS_WRPULSE_(3) |
328 | | AT91_SMC_NRDPULSE_(3) | AT91_SMC_NCS_RDPULSE_(3)); | 331 | | AT91_SMC_NRDPULSE_(3) | AT91_SMC_NCS_RDPULSE_(3)); |
329 | 332 | ||
330 | at91_sys_write(AT91_SMC_CYCLE(3), AT91_SMC_NWECYCLE_(5) | AT91_SMC_NRDCYCLE_(5)); | 333 | at91_sys_write(AT91_SMC_CYCLE(3), AT91_SMC_NWECYCLE_(5) | AT91_SMC_NRDCYCLE_(5)); |
331 | 334 | ||
332 | if (data->bus_width_16) | 335 | if (data->bus_width_16) |
333 | mode = AT91_SMC_DBW_16; | 336 | mode = AT91_SMC_DBW_16; |
334 | else | 337 | else |
335 | mode = AT91_SMC_DBW_8; | 338 | mode = AT91_SMC_DBW_8; |
336 | at91_sys_write(AT91_SMC_MODE(3), mode | AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_TDF_(2)); | 339 | at91_sys_write(AT91_SMC_MODE(3), mode | AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_TDF_(2)); |
340 | } | ||
341 | |||
342 | if (cpu_is_at91sam9g20()) { | ||
343 | /* Timing for sam9g20 */ | ||
344 | /* set the bus interface characteristics */ | ||
345 | at91_sys_write(AT91_SMC_SETUP(3), AT91_SMC_NWESETUP_(2) | AT91_SMC_NCS_WRSETUP_(0) | ||
346 | | AT91_SMC_NRDSETUP_(2) | AT91_SMC_NCS_RDSETUP_(0)); | ||
347 | |||
348 | at91_sys_write(AT91_SMC_PULSE(3), AT91_SMC_NWEPULSE_(4) | AT91_SMC_NCS_WRPULSE_(4) | ||
349 | | AT91_SMC_NRDPULSE_(4) | AT91_SMC_NCS_RDPULSE_(4)); | ||
350 | |||
351 | at91_sys_write(AT91_SMC_CYCLE(3), AT91_SMC_NWECYCLE_(7) | AT91_SMC_NRDCYCLE_(7)); | ||
352 | |||
353 | if (data->bus_width_16) | ||
354 | mode = AT91_SMC_DBW_16; | ||
355 | else | ||
356 | mode = AT91_SMC_DBW_8; | ||
357 | at91_sys_write(AT91_SMC_MODE(3), mode | AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_TDF_(3)); | ||
358 | } | ||
337 | 359 | ||
338 | /* enable pin */ | 360 | /* enable pin */ |
339 | if (data->enable_pin) | 361 | if (data->enable_pin) |
diff --git a/arch/arm/mach-at91/at91sam9261_devices.c b/arch/arm/mach-at91/at91sam9261_devices.c index 0babb645b83c..ec1891375dfb 100644 --- a/arch/arm/mach-at91/at91sam9261_devices.c +++ b/arch/arm/mach-at91/at91sam9261_devices.c | |||
@@ -232,19 +232,19 @@ void __init at91_add_device_nand(struct at91_nand_data *data) | |||
232 | at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_CS3A_SMC_SMARTMEDIA); | 232 | at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_CS3A_SMC_SMARTMEDIA); |
233 | 233 | ||
234 | /* set the bus interface characteristics */ | 234 | /* set the bus interface characteristics */ |
235 | at91_sys_write(AT91_SMC_SETUP(3), AT91_SMC_NWESETUP_(0) | AT91_SMC_NCS_WRSETUP_(0) | 235 | at91_sys_write(AT91_SMC_SETUP(3), AT91_SMC_NWESETUP_(1) | AT91_SMC_NCS_WRSETUP_(0) |
236 | | AT91_SMC_NRDSETUP_(0) | AT91_SMC_NCS_RDSETUP_(0)); | 236 | | AT91_SMC_NRDSETUP_(1) | AT91_SMC_NCS_RDSETUP_(0)); |
237 | 237 | ||
238 | at91_sys_write(AT91_SMC_PULSE(3), AT91_SMC_NWEPULSE_(2) | AT91_SMC_NCS_WRPULSE_(5) | 238 | at91_sys_write(AT91_SMC_PULSE(3), AT91_SMC_NWEPULSE_(3) | AT91_SMC_NCS_WRPULSE_(3) |
239 | | AT91_SMC_NRDPULSE_(2) | AT91_SMC_NCS_RDPULSE_(5)); | 239 | | AT91_SMC_NRDPULSE_(3) | AT91_SMC_NCS_RDPULSE_(3)); |
240 | 240 | ||
241 | at91_sys_write(AT91_SMC_CYCLE(3), AT91_SMC_NWECYCLE_(7) | AT91_SMC_NRDCYCLE_(7)); | 241 | at91_sys_write(AT91_SMC_CYCLE(3), AT91_SMC_NWECYCLE_(5) | AT91_SMC_NRDCYCLE_(5)); |
242 | 242 | ||
243 | if (data->bus_width_16) | 243 | if (data->bus_width_16) |
244 | mode = AT91_SMC_DBW_16; | 244 | mode = AT91_SMC_DBW_16; |
245 | else | 245 | else |
246 | mode = AT91_SMC_DBW_8; | 246 | mode = AT91_SMC_DBW_8; |
247 | at91_sys_write(AT91_SMC_MODE(3), mode | AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_TDF_(1)); | 247 | at91_sys_write(AT91_SMC_MODE(3), mode | AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_TDF_(2)); |
248 | 248 | ||
249 | /* enable pin */ | 249 | /* enable pin */ |
250 | if (data->enable_pin) | 250 | if (data->enable_pin) |
diff --git a/arch/arm/mach-at91/at91sam9263_devices.c b/arch/arm/mach-at91/at91sam9263_devices.c index 719667e25c98..8a81f76f0200 100644 --- a/arch/arm/mach-at91/at91sam9263_devices.c +++ b/arch/arm/mach-at91/at91sam9263_devices.c | |||
@@ -391,8 +391,8 @@ void __init at91_add_device_nand(struct at91_nand_data *data) | |||
391 | at91_sys_write(AT91_MATRIX_EBI0CSA, csa | AT91_MATRIX_EBI0_CS3A_SMC_SMARTMEDIA); | 391 | at91_sys_write(AT91_MATRIX_EBI0CSA, csa | AT91_MATRIX_EBI0_CS3A_SMC_SMARTMEDIA); |
392 | 392 | ||
393 | /* set the bus interface characteristics */ | 393 | /* set the bus interface characteristics */ |
394 | at91_sys_write(AT91_SMC_SETUP(3), AT91_SMC_NWESETUP_(0) | AT91_SMC_NCS_WRSETUP_(0) | 394 | at91_sys_write(AT91_SMC_SETUP(3), AT91_SMC_NWESETUP_(1) | AT91_SMC_NCS_WRSETUP_(0) |
395 | | AT91_SMC_NRDSETUP_(0) | AT91_SMC_NCS_RDSETUP_(0)); | 395 | | AT91_SMC_NRDSETUP_(1) | AT91_SMC_NCS_RDSETUP_(0)); |
396 | 396 | ||
397 | at91_sys_write(AT91_SMC_PULSE(3), AT91_SMC_NWEPULSE_(3) | AT91_SMC_NCS_WRPULSE_(3) | 397 | at91_sys_write(AT91_SMC_PULSE(3), AT91_SMC_NWEPULSE_(3) | AT91_SMC_NCS_WRPULSE_(3) |
398 | | AT91_SMC_NRDPULSE_(3) | AT91_SMC_NCS_RDPULSE_(3)); | 398 | | AT91_SMC_NRDPULSE_(3) | AT91_SMC_NCS_RDPULSE_(3)); |
diff --git a/arch/arm/mach-at91/at91sam9rl_devices.c b/arch/arm/mach-at91/at91sam9rl_devices.c index 450db304936f..ae28101e7542 100644 --- a/arch/arm/mach-at91/at91sam9rl_devices.c +++ b/arch/arm/mach-at91/at91sam9rl_devices.c | |||
@@ -26,6 +26,101 @@ | |||
26 | 26 | ||
27 | 27 | ||
28 | /* -------------------------------------------------------------------- | 28 | /* -------------------------------------------------------------------- |
29 | * USB HS Device (Gadget) | ||
30 | * -------------------------------------------------------------------- */ | ||
31 | |||
32 | #if defined(CONFIG_USB_GADGET_ATMEL_USBA) || defined(CONFIG_USB_GADGET_ATMEL_USBA_MODULE) | ||
33 | |||
34 | static struct resource usba_udc_resources[] = { | ||
35 | [0] = { | ||
36 | .start = AT91SAM9RL_UDPHS_FIFO, | ||
37 | .end = AT91SAM9RL_UDPHS_FIFO + SZ_512K - 1, | ||
38 | .flags = IORESOURCE_MEM, | ||
39 | }, | ||
40 | [1] = { | ||
41 | .start = AT91SAM9RL_BASE_UDPHS, | ||
42 | .end = AT91SAM9RL_BASE_UDPHS + SZ_1K - 1, | ||
43 | .flags = IORESOURCE_MEM, | ||
44 | }, | ||
45 | [2] = { | ||
46 | .start = AT91SAM9RL_ID_UDPHS, | ||
47 | .end = AT91SAM9RL_ID_UDPHS, | ||
48 | .flags = IORESOURCE_IRQ, | ||
49 | }, | ||
50 | }; | ||
51 | |||
52 | #define EP(nam, idx, maxpkt, maxbk, dma, isoc) \ | ||
53 | [idx] = { \ | ||
54 | .name = nam, \ | ||
55 | .index = idx, \ | ||
56 | .fifo_size = maxpkt, \ | ||
57 | .nr_banks = maxbk, \ | ||
58 | .can_dma = dma, \ | ||
59 | .can_isoc = isoc, \ | ||
60 | } | ||
61 | |||
62 | static struct usba_ep_data usba_udc_ep[] __initdata = { | ||
63 | EP("ep0", 0, 64, 1, 0, 0), | ||
64 | EP("ep1", 1, 1024, 2, 1, 1), | ||
65 | EP("ep2", 2, 1024, 2, 1, 1), | ||
66 | EP("ep3", 3, 1024, 3, 1, 0), | ||
67 | EP("ep4", 4, 1024, 3, 1, 0), | ||
68 | EP("ep5", 5, 1024, 3, 1, 1), | ||
69 | EP("ep6", 6, 1024, 3, 1, 1), | ||
70 | }; | ||
71 | |||
72 | #undef EP | ||
73 | |||
74 | /* | ||
75 | * pdata doesn't have room for any endpoints, so we need to | ||
76 | * append room for the ones we need right after it. | ||
77 | */ | ||
78 | static struct { | ||
79 | struct usba_platform_data pdata; | ||
80 | struct usba_ep_data ep[7]; | ||
81 | } usba_udc_data; | ||
82 | |||
83 | static struct platform_device at91_usba_udc_device = { | ||
84 | .name = "atmel_usba_udc", | ||
85 | .id = -1, | ||
86 | .dev = { | ||
87 | .platform_data = &usba_udc_data.pdata, | ||
88 | }, | ||
89 | .resource = usba_udc_resources, | ||
90 | .num_resources = ARRAY_SIZE(usba_udc_resources), | ||
91 | }; | ||
92 | |||
93 | void __init at91_add_device_usba(struct usba_platform_data *data) | ||
94 | { | ||
95 | /* | ||
96 | * Invalid pins are 0 on AT91, but the usba driver is shared | ||
97 | * with AVR32, which use negative values instead. Once/if | ||
98 | * gpio_is_valid() is ported to AT91, revisit this code. | ||
99 | */ | ||
100 | usba_udc_data.pdata.vbus_pin = -EINVAL; | ||
101 | usba_udc_data.pdata.num_ep = ARRAY_SIZE(usba_udc_ep); | ||
102 | memcpy(usba_udc_data.ep, usba_udc_ep, sizeof(usba_udc_ep));; | ||
103 | |||
104 | if (data && data->vbus_pin > 0) { | ||
105 | at91_set_gpio_input(data->vbus_pin, 0); | ||
106 | at91_set_deglitch(data->vbus_pin, 1); | ||
107 | usba_udc_data.pdata.vbus_pin = data->vbus_pin; | ||
108 | } | ||
109 | |||
110 | /* Pullup pin is handled internally by USB device peripheral */ | ||
111 | |||
112 | /* Clocks */ | ||
113 | at91_clock_associate("utmi_clk", &at91_usba_udc_device.dev, "hclk"); | ||
114 | at91_clock_associate("udphs_clk", &at91_usba_udc_device.dev, "pclk"); | ||
115 | |||
116 | platform_device_register(&at91_usba_udc_device); | ||
117 | } | ||
118 | #else | ||
119 | void __init at91_add_device_usba(struct usba_platform_data *data) {} | ||
120 | #endif | ||
121 | |||
122 | |||
123 | /* -------------------------------------------------------------------- | ||
29 | * MMC / SD | 124 | * MMC / SD |
30 | * -------------------------------------------------------------------- */ | 125 | * -------------------------------------------------------------------- */ |
31 | 126 | ||
@@ -138,15 +233,15 @@ void __init at91_add_device_nand(struct at91_nand_data *data) | |||
138 | at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_CS3A_SMC_SMARTMEDIA); | 233 | at91_sys_write(AT91_MATRIX_EBICSA, csa | AT91_MATRIX_CS3A_SMC_SMARTMEDIA); |
139 | 234 | ||
140 | /* set the bus interface characteristics */ | 235 | /* set the bus interface characteristics */ |
141 | at91_sys_write(AT91_SMC_SETUP(3), AT91_SMC_NWESETUP_(0) | AT91_SMC_NCS_WRSETUP_(0) | 236 | at91_sys_write(AT91_SMC_SETUP(3), AT91_SMC_NWESETUP_(1) | AT91_SMC_NCS_WRSETUP_(0) |
142 | | AT91_SMC_NRDSETUP_(0) | AT91_SMC_NCS_RDSETUP_(0)); | 237 | | AT91_SMC_NRDSETUP_(1) | AT91_SMC_NCS_RDSETUP_(0)); |
143 | 238 | ||
144 | at91_sys_write(AT91_SMC_PULSE(3), AT91_SMC_NWEPULSE_(2) | AT91_SMC_NCS_WRPULSE_(5) | 239 | at91_sys_write(AT91_SMC_PULSE(3), AT91_SMC_NWEPULSE_(3) | AT91_SMC_NCS_WRPULSE_(3) |
145 | | AT91_SMC_NRDPULSE_(2) | AT91_SMC_NCS_RDPULSE_(5)); | 240 | | AT91_SMC_NRDPULSE_(3) | AT91_SMC_NCS_RDPULSE_(3)); |
146 | 241 | ||
147 | at91_sys_write(AT91_SMC_CYCLE(3), AT91_SMC_NWECYCLE_(7) | AT91_SMC_NRDCYCLE_(7)); | 242 | at91_sys_write(AT91_SMC_CYCLE(3), AT91_SMC_NWECYCLE_(5) | AT91_SMC_NRDCYCLE_(5)); |
148 | 243 | ||
149 | at91_sys_write(AT91_SMC_MODE(3), AT91_SMC_DBW_8 | AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_TDF_(1)); | 244 | at91_sys_write(AT91_SMC_MODE(3), AT91_SMC_DBW_8 | AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE | AT91_SMC_TDF_(2)); |
150 | 245 | ||
151 | /* enable pin */ | 246 | /* enable pin */ |
152 | if (data->enable_pin) | 247 | if (data->enable_pin) |
diff --git a/arch/arm/mach-at91/board-cap9adk.c b/arch/arm/mach-at91/board-cap9adk.c index e5512d1ff217..8a2a958639db 100644 --- a/arch/arm/mach-at91/board-cap9adk.c +++ b/arch/arm/mach-at91/board-cap9adk.c | |||
@@ -78,6 +78,12 @@ static struct at91_usbh_data __initdata cap9adk_usbh_data = { | |||
78 | .ports = 2, | 78 | .ports = 2, |
79 | }; | 79 | }; |
80 | 80 | ||
81 | /* | ||
82 | * USB HS Device port | ||
83 | */ | ||
84 | static struct usba_platform_data __initdata cap9adk_usba_udc_data = { | ||
85 | .vbus_pin = AT91_PIN_PB31, | ||
86 | }; | ||
81 | 87 | ||
82 | /* | 88 | /* |
83 | * ADS7846 Touchscreen | 89 | * ADS7846 Touchscreen |
@@ -326,6 +332,9 @@ static void __init cap9adk_board_init(void) | |||
326 | /* USB Host */ | 332 | /* USB Host */ |
327 | set_irq_type(AT91CAP9_ID_UHP, IRQT_HIGH); | 333 | set_irq_type(AT91CAP9_ID_UHP, IRQT_HIGH); |
328 | at91_add_device_usbh(&cap9adk_usbh_data); | 334 | at91_add_device_usbh(&cap9adk_usbh_data); |
335 | /* USB HS */ | ||
336 | set_irq_type(AT91CAP9_ID_UDPHS, IRQT_HIGH); | ||
337 | at91_add_device_usba(&cap9adk_usba_udc_data); | ||
329 | /* SPI */ | 338 | /* SPI */ |
330 | at91_add_device_spi(cap9adk_spi_devices, ARRAY_SIZE(cap9adk_spi_devices)); | 339 | at91_add_device_spi(cap9adk_spi_devices, ARRAY_SIZE(cap9adk_spi_devices)); |
331 | /* Touchscreen */ | 340 | /* Touchscreen */ |
diff --git a/arch/arm/mach-at91/board-carmeva.c b/arch/arm/mach-at91/board-carmeva.c index 0f0878294a67..9854fc3dd1f2 100644 --- a/arch/arm/mach-at91/board-carmeva.c +++ b/arch/arm/mach-at91/board-carmeva.c | |||
@@ -40,24 +40,21 @@ | |||
40 | #include "generic.h" | 40 | #include "generic.h" |
41 | 41 | ||
42 | 42 | ||
43 | /* | ||
44 | * Serial port configuration. | ||
45 | * 0 .. 3 = USART0 .. USART3 | ||
46 | * 4 = DBGU | ||
47 | */ | ||
48 | static struct at91_uart_config __initdata carmeva_uart_config = { | ||
49 | .console_tty = 0, /* ttyS0 */ | ||
50 | .nr_tty = 2, | ||
51 | .tty_map = { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */ | ||
52 | }; | ||
53 | |||
54 | static void __init carmeva_map_io(void) | 43 | static void __init carmeva_map_io(void) |
55 | { | 44 | { |
56 | /* Initialize processor: 20.000 MHz crystal */ | 45 | /* Initialize processor: 20.000 MHz crystal */ |
57 | at91rm9200_initialize(20000000, AT91RM9200_BGA); | 46 | at91rm9200_initialize(20000000, AT91RM9200_BGA); |
58 | 47 | ||
59 | /* Setup the serial ports and console */ | 48 | /* DBGU on ttyS0. (Rx & Tx only) */ |
60 | at91_init_serial(&carmeva_uart_config); | 49 | at91_register_uart(0, 0, 0); |
50 | |||
51 | /* USART1 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ | ||
52 | at91_register_uart(AT91RM9200_ID_US1, 1, ATMEL_UART_CTS | ATMEL_UART_RTS | ||
53 | | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD | ||
54 | | ATMEL_UART_RI); | ||
55 | |||
56 | /* set serial console to ttyS0 (ie, DBGU) */ | ||
57 | at91_set_serial_console(0); | ||
61 | } | 58 | } |
62 | 59 | ||
63 | static void __init carmeva_init_irq(void) | 60 | static void __init carmeva_init_irq(void) |
diff --git a/arch/arm/mach-at91/board-csb637.c b/arch/arm/mach-at91/board-csb637.c index 419fd19b620b..bb1a5474ddab 100644 --- a/arch/arm/mach-at91/board-csb637.c +++ b/arch/arm/mach-at91/board-csb637.c | |||
@@ -45,10 +45,10 @@ static void __init csb637_map_io(void) | |||
45 | /* Initialize processor: 3.6864 MHz crystal */ | 45 | /* Initialize processor: 3.6864 MHz crystal */ |
46 | at91rm9200_initialize(3686400, AT91RM9200_BGA); | 46 | at91rm9200_initialize(3686400, AT91RM9200_BGA); |
47 | 47 | ||
48 | /* DBGU on ttyS0 */ | 48 | /* DBGU on ttyS0. (Rx & Tx only) */ |
49 | at91_register_uart(0, 0, 0); | 49 | at91_register_uart(0, 0, 0); |
50 | 50 | ||
51 | /* make console=ttyS0 the default */ | 51 | /* make console=ttyS0 (ie, DBGU) the default */ |
52 | at91_set_serial_console(0); | 52 | at91_set_serial_console(0); |
53 | } | 53 | } |
54 | 54 | ||
diff --git a/arch/arm/mach-at91/board-dk.c b/arch/arm/mach-at91/board-dk.c index c1a813c7169b..dab958d25926 100644 --- a/arch/arm/mach-at91/board-dk.c +++ b/arch/arm/mach-at91/board-dk.c | |||
@@ -45,17 +45,6 @@ | |||
45 | #include "generic.h" | 45 | #include "generic.h" |
46 | 46 | ||
47 | 47 | ||
48 | /* | ||
49 | * Serial port configuration. | ||
50 | * 0 .. 3 = USART0 .. USART3 | ||
51 | * 4 = DBGU | ||
52 | */ | ||
53 | static struct at91_uart_config __initdata dk_uart_config = { | ||
54 | .console_tty = 0, /* ttyS0 */ | ||
55 | .nr_tty = 2, | ||
56 | .tty_map = { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */ | ||
57 | }; | ||
58 | |||
59 | static void __init dk_map_io(void) | 48 | static void __init dk_map_io(void) |
60 | { | 49 | { |
61 | /* Initialize processor: 18.432 MHz crystal */ | 50 | /* Initialize processor: 18.432 MHz crystal */ |
@@ -64,8 +53,16 @@ static void __init dk_map_io(void) | |||
64 | /* Setup the LEDs */ | 53 | /* Setup the LEDs */ |
65 | at91_init_leds(AT91_PIN_PB2, AT91_PIN_PB2); | 54 | at91_init_leds(AT91_PIN_PB2, AT91_PIN_PB2); |
66 | 55 | ||
67 | /* Setup the serial ports and console */ | 56 | /* DBGU on ttyS0. (Rx & Tx only) */ |
68 | at91_init_serial(&dk_uart_config); | 57 | at91_register_uart(0, 0, 0); |
58 | |||
59 | /* USART1 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ | ||
60 | at91_register_uart(AT91RM9200_ID_US1, 1, ATMEL_UART_CTS | ATMEL_UART_RTS | ||
61 | | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD | ||
62 | | ATMEL_UART_RI); | ||
63 | |||
64 | /* set serial console to ttyS0 (ie, DBGU) */ | ||
65 | at91_set_serial_console(0); | ||
69 | } | 66 | } |
70 | 67 | ||
71 | static void __init dk_init_irq(void) | 68 | static void __init dk_init_irq(void) |
@@ -163,7 +160,7 @@ static struct at91_nand_data __initdata dk_nand_data = { | |||
163 | #define DK_FLASH_SIZE 0x200000 | 160 | #define DK_FLASH_SIZE 0x200000 |
164 | 161 | ||
165 | static struct physmap_flash_data dk_flash_data = { | 162 | static struct physmap_flash_data dk_flash_data = { |
166 | .width = 2, | 163 | .width = 2, |
167 | }; | 164 | }; |
168 | 165 | ||
169 | static struct resource dk_flash_resource = { | 166 | static struct resource dk_flash_resource = { |
diff --git a/arch/arm/mach-at91/board-eb9200.c b/arch/arm/mach-at91/board-eb9200.c index af1a1d8ecc30..3fe054e0056b 100644 --- a/arch/arm/mach-at91/board-eb9200.c +++ b/arch/arm/mach-at91/board-eb9200.c | |||
@@ -40,24 +40,24 @@ | |||
40 | #include "generic.h" | 40 | #include "generic.h" |
41 | 41 | ||
42 | 42 | ||
43 | /* | ||
44 | * Serial port configuration. | ||
45 | * 0 .. 3 = USART0 .. USART3 | ||
46 | * 4 = DBGU | ||
47 | */ | ||
48 | static struct at91_uart_config __initdata eb9200_uart_config = { | ||
49 | .console_tty = 0, /* ttyS0 */ | ||
50 | .nr_tty = 2, | ||
51 | .tty_map = { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */ | ||
52 | }; | ||
53 | |||
54 | static void __init eb9200_map_io(void) | 43 | static void __init eb9200_map_io(void) |
55 | { | 44 | { |
56 | /* Initialize processor: 18.432 MHz crystal */ | 45 | /* Initialize processor: 18.432 MHz crystal */ |
57 | at91rm9200_initialize(18432000, AT91RM9200_BGA); | 46 | at91rm9200_initialize(18432000, AT91RM9200_BGA); |
58 | 47 | ||
59 | /* Setup the serial ports and console */ | 48 | /* DBGU on ttyS0. (Rx & Tx only) */ |
60 | at91_init_serial(&eb9200_uart_config); | 49 | at91_register_uart(0, 0, 0); |
50 | |||
51 | /* USART1 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ | ||
52 | at91_register_uart(AT91RM9200_ID_US1, 1, ATMEL_UART_CTS | ATMEL_UART_RTS | ||
53 | | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD | ||
54 | | ATMEL_UART_RI); | ||
55 | |||
56 | /* USART2 on ttyS2. (Rx, Tx) - IRDA */ | ||
57 | at91_register_uart(AT91RM9200_ID_US2, 2, 0); | ||
58 | |||
59 | /* set serial console to ttyS0 (ie, DBGU) */ | ||
60 | at91_set_serial_console(0); | ||
61 | } | 61 | } |
62 | 62 | ||
63 | static void __init eb9200_init_irq(void) | 63 | static void __init eb9200_init_irq(void) |
diff --git a/arch/arm/mach-at91/board-ek.c b/arch/arm/mach-at91/board-ek.c index 0574e50a30dd..74aa4325eab3 100644 --- a/arch/arm/mach-at91/board-ek.c +++ b/arch/arm/mach-at91/board-ek.c | |||
@@ -45,17 +45,6 @@ | |||
45 | #include "generic.h" | 45 | #include "generic.h" |
46 | 46 | ||
47 | 47 | ||
48 | /* | ||
49 | * Serial port configuration. | ||
50 | * 0 .. 3 = USART0 .. USART3 | ||
51 | * 4 = DBGU | ||
52 | */ | ||
53 | static struct at91_uart_config __initdata ek_uart_config = { | ||
54 | .console_tty = 0, /* ttyS0 */ | ||
55 | .nr_tty = 2, | ||
56 | .tty_map = { 4, 1, -1, -1, -1 } /* ttyS0, ..., ttyS4 */ | ||
57 | }; | ||
58 | |||
59 | static void __init ek_map_io(void) | 48 | static void __init ek_map_io(void) |
60 | { | 49 | { |
61 | /* Initialize processor: 18.432 MHz crystal */ | 50 | /* Initialize processor: 18.432 MHz crystal */ |
@@ -64,8 +53,16 @@ static void __init ek_map_io(void) | |||
64 | /* Setup the LEDs */ | 53 | /* Setup the LEDs */ |
65 | at91_init_leds(AT91_PIN_PB1, AT91_PIN_PB2); | 54 | at91_init_leds(AT91_PIN_PB1, AT91_PIN_PB2); |
66 | 55 | ||
67 | /* Setup the serial ports and console */ | 56 | /* DBGU on ttyS0. (Rx & Tx only) */ |
68 | at91_init_serial(&ek_uart_config); | 57 | at91_register_uart(0, 0, 0); |
58 | |||
59 | /* USART1 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ | ||
60 | at91_register_uart(AT91RM9200_ID_US1, 1, ATMEL_UART_CTS | ATMEL_UART_RTS | ||
61 | | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD | ||
62 | | ATMEL_UART_RI); | ||
63 | |||
64 | /* set serial console to ttyS0 (ie, DBGU) */ | ||
65 | at91_set_serial_console(0); | ||
69 | } | 66 | } |
70 | 67 | ||
71 | static void __init ek_init_irq(void) | 68 | static void __init ek_init_irq(void) |
@@ -122,7 +119,7 @@ static struct i2c_board_info __initdata ek_i2c_devices[] = { | |||
122 | #define EK_FLASH_SIZE 0x200000 | 119 | #define EK_FLASH_SIZE 0x200000 |
123 | 120 | ||
124 | static struct physmap_flash_data ek_flash_data = { | 121 | static struct physmap_flash_data ek_flash_data = { |
125 | .width = 2, | 122 | .width = 2, |
126 | }; | 123 | }; |
127 | 124 | ||
128 | static struct resource ek_flash_resource = { | 125 | static struct resource ek_flash_resource = { |
diff --git a/arch/arm/mach-at91/board-kb9202.c b/arch/arm/mach-at91/board-kb9202.c index 4b39b9cda75b..cb065febd95e 100644 --- a/arch/arm/mach-at91/board-kb9202.c +++ b/arch/arm/mach-at91/board-kb9202.c | |||
@@ -37,19 +37,10 @@ | |||
37 | #include <asm/arch/board.h> | 37 | #include <asm/arch/board.h> |
38 | #include <asm/arch/gpio.h> | 38 | #include <asm/arch/gpio.h> |
39 | 39 | ||
40 | #include "generic.h" | 40 | #include <asm/arch/at91rm9200_mc.h> |
41 | 41 | ||
42 | #include "generic.h" | ||
42 | 43 | ||
43 | /* | ||
44 | * Serial port configuration. | ||
45 | * 0 .. 3 = USART0 .. USART3 | ||
46 | * 4 = DBGU | ||
47 | */ | ||
48 | static struct at91_uart_config __initdata kb9202_uart_config = { | ||
49 | .console_tty = 0, /* ttyS0 */ | ||
50 | .nr_tty = 3, | ||
51 | .tty_map = { 4, 0, 1, -1, -1 } /* ttyS0, ..., ttyS4 */ | ||
52 | }; | ||
53 | 44 | ||
54 | static void __init kb9202_map_io(void) | 45 | static void __init kb9202_map_io(void) |
55 | { | 46 | { |
@@ -59,8 +50,20 @@ static void __init kb9202_map_io(void) | |||
59 | /* Set up the LEDs */ | 50 | /* Set up the LEDs */ |
60 | at91_init_leds(AT91_PIN_PC19, AT91_PIN_PC18); | 51 | at91_init_leds(AT91_PIN_PC19, AT91_PIN_PC18); |
61 | 52 | ||
62 | /* Setup the serial ports and console */ | 53 | /* DBGU on ttyS0. (Rx & Tx only) */ |
63 | at91_init_serial(&kb9202_uart_config); | 54 | at91_register_uart(0, 0, 0); |
55 | |||
56 | /* USART0 on ttyS1 (Rx & Tx only) */ | ||
57 | at91_register_uart(AT91RM9200_ID_US0, 1, 0); | ||
58 | |||
59 | /* USART1 on ttyS2 (Rx & Tx only) - IRDA (optional) */ | ||
60 | at91_register_uart(AT91RM9200_ID_US1, 2, 0); | ||
61 | |||
62 | /* USART3 on ttyS3 (Rx, Tx, CTS, RTS) - RS485 (optional) */ | ||
63 | at91_register_uart(AT91RM9200_ID_US3, 3, ATMEL_UART_CTS | ATMEL_UART_RTS); | ||
64 | |||
65 | /* set serial console to ttyS0 (ie, DBGU) */ | ||
66 | at91_set_serial_console(0); | ||
64 | } | 67 | } |
65 | 68 | ||
66 | static void __init kb9202_init_irq(void) | 69 | static void __init kb9202_init_irq(void) |
diff --git a/arch/arm/mach-at91/board-qil-a9260.c b/arch/arm/mach-at91/board-qil-a9260.c new file mode 100644 index 000000000000..99b4ec3818d6 --- /dev/null +++ b/arch/arm/mach-at91/board-qil-a9260.c | |||
@@ -0,0 +1,255 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-at91/board-qil-a9260.c | ||
3 | * | ||
4 | * Copyright (C) 2005 SAN People | ||
5 | * Copyright (C) 2006 Atmel | ||
6 | * Copyright (C) 2007 Calao-systems | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | */ | ||
22 | |||
23 | #include <linux/types.h> | ||
24 | #include <linux/init.h> | ||
25 | #include <linux/mm.h> | ||
26 | #include <linux/module.h> | ||
27 | #include <linux/platform_device.h> | ||
28 | #include <linux/spi/spi.h> | ||
29 | #include <linux/gpio_keys.h> | ||
30 | #include <linux/input.h> | ||
31 | #include <linux/clk.h> | ||
32 | |||
33 | #include <asm/hardware.h> | ||
34 | #include <asm/setup.h> | ||
35 | #include <asm/mach-types.h> | ||
36 | #include <asm/irq.h> | ||
37 | |||
38 | #include <asm/mach/arch.h> | ||
39 | #include <asm/mach/map.h> | ||
40 | #include <asm/mach/irq.h> | ||
41 | |||
42 | #include <asm/arch/board.h> | ||
43 | #include <asm/arch/gpio.h> | ||
44 | #include <asm/arch/at91_shdwc.h> | ||
45 | |||
46 | #include "generic.h" | ||
47 | |||
48 | |||
49 | static void __init ek_map_io(void) | ||
50 | { | ||
51 | /* Initialize processor: 12.000 MHz crystal */ | ||
52 | at91sam9260_initialize(12000000); | ||
53 | |||
54 | /* DGBU on ttyS0. (Rx & Tx only) */ | ||
55 | at91_register_uart(0, 0, 0); | ||
56 | |||
57 | /* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ | ||
58 | at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS | ||
59 | | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD | ||
60 | | ATMEL_UART_RI); | ||
61 | |||
62 | /* USART1 on ttyS2. (Rx, Tx, CTS, RTS) */ | ||
63 | at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS); | ||
64 | |||
65 | /* USART2 on ttyS3. (Rx, Tx, CTS, RTS) */ | ||
66 | at91_register_uart(AT91SAM9260_ID_US2, 3, ATMEL_UART_CTS | ATMEL_UART_RTS); | ||
67 | |||
68 | /* set serial console to ttyS1 (ie, USART0) */ | ||
69 | at91_set_serial_console(1); | ||
70 | |||
71 | } | ||
72 | |||
73 | static void __init ek_init_irq(void) | ||
74 | { | ||
75 | at91sam9260_init_interrupts(NULL); | ||
76 | } | ||
77 | |||
78 | |||
79 | /* | ||
80 | * USB Host port | ||
81 | */ | ||
82 | static struct at91_usbh_data __initdata ek_usbh_data = { | ||
83 | .ports = 2, | ||
84 | }; | ||
85 | |||
86 | /* | ||
87 | * USB Device port | ||
88 | */ | ||
89 | static struct at91_udc_data __initdata ek_udc_data = { | ||
90 | .vbus_pin = AT91_PIN_PC5, | ||
91 | .pullup_pin = 0, /* pull-up driven by UDC */ | ||
92 | }; | ||
93 | |||
94 | /* | ||
95 | * SPI devices. | ||
96 | */ | ||
97 | static struct spi_board_info ek_spi_devices[] = { | ||
98 | #if defined(CONFIG_RTC_DRV_M41T94) | ||
99 | { /* M41T94 RTC */ | ||
100 | .modalias = "m41t94", | ||
101 | .chip_select = 0, | ||
102 | .max_speed_hz = 1 * 1000 * 1000, | ||
103 | .bus_num = 0, | ||
104 | } | ||
105 | #endif | ||
106 | }; | ||
107 | |||
108 | /* | ||
109 | * MACB Ethernet device | ||
110 | */ | ||
111 | static struct at91_eth_data __initdata ek_macb_data = { | ||
112 | .phy_irq_pin = AT91_PIN_PA31, | ||
113 | .is_rmii = 1, | ||
114 | }; | ||
115 | |||
116 | /* | ||
117 | * NAND flash | ||
118 | */ | ||
119 | static struct mtd_partition __initdata ek_nand_partition[] = { | ||
120 | { | ||
121 | .name = "Uboot & Kernel", | ||
122 | .offset = 0x00000000, | ||
123 | .size = 16 * 1024 * 1024, | ||
124 | }, | ||
125 | { | ||
126 | .name = "Root FS", | ||
127 | .offset = 0x01000000, | ||
128 | .size = 120 * 1024 * 1024, | ||
129 | }, | ||
130 | { | ||
131 | .name = "FS", | ||
132 | .offset = 0x08800000, | ||
133 | .size = 120 * 1024 * 1024, | ||
134 | }, | ||
135 | }; | ||
136 | |||
137 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
138 | { | ||
139 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | ||
140 | return ek_nand_partition; | ||
141 | } | ||
142 | |||
143 | static struct at91_nand_data __initdata ek_nand_data = { | ||
144 | .ale = 21, | ||
145 | .cle = 22, | ||
146 | // .det_pin = ... not connected | ||
147 | .rdy_pin = AT91_PIN_PC13, | ||
148 | .enable_pin = AT91_PIN_PC14, | ||
149 | .partition_info = nand_partitions, | ||
150 | #if defined(CONFIG_MTD_NAND_AT91_BUSWIDTH_16) | ||
151 | .bus_width_16 = 1, | ||
152 | #else | ||
153 | .bus_width_16 = 0, | ||
154 | #endif | ||
155 | }; | ||
156 | |||
157 | /* | ||
158 | * MCI (SD/MMC) | ||
159 | */ | ||
160 | static struct at91_mmc_data __initdata ek_mmc_data = { | ||
161 | .slot_b = 0, | ||
162 | .wire4 = 1, | ||
163 | // .det_pin = ... not connected | ||
164 | // .wp_pin = ... not connected | ||
165 | // .vcc_pin = ... not connected | ||
166 | }; | ||
167 | |||
168 | /* | ||
169 | * GPIO Buttons | ||
170 | */ | ||
171 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) | ||
172 | static struct gpio_keys_button ek_buttons[] = { | ||
173 | { /* USER PUSH BUTTON */ | ||
174 | .code = KEY_ENTER, | ||
175 | .gpio = AT91_PIN_PB10, | ||
176 | .active_low = 1, | ||
177 | .desc = "user_pb", | ||
178 | .wakeup = 1, | ||
179 | } | ||
180 | }; | ||
181 | |||
182 | static struct gpio_keys_platform_data ek_button_data = { | ||
183 | .buttons = ek_buttons, | ||
184 | .nbuttons = ARRAY_SIZE(ek_buttons), | ||
185 | }; | ||
186 | |||
187 | static struct platform_device ek_button_device = { | ||
188 | .name = "gpio-keys", | ||
189 | .id = -1, | ||
190 | .num_resources = 0, | ||
191 | .dev = { | ||
192 | .platform_data = &ek_button_data, | ||
193 | } | ||
194 | }; | ||
195 | |||
196 | static void __init ek_add_device_buttons(void) | ||
197 | { | ||
198 | at91_set_GPIO_periph(AT91_PIN_PB10, 1); /* user push button, pull up enabled */ | ||
199 | at91_set_deglitch(AT91_PIN_PB10, 1); | ||
200 | |||
201 | platform_device_register(&ek_button_device); | ||
202 | } | ||
203 | #else | ||
204 | static void __init ek_add_device_buttons(void) {} | ||
205 | #endif | ||
206 | |||
207 | /* | ||
208 | * LEDs | ||
209 | */ | ||
210 | static struct gpio_led ek_leds[] = { | ||
211 | { /* user_led (green) */ | ||
212 | .name = "user_led", | ||
213 | .gpio = AT91_PIN_PB21, | ||
214 | .active_low = 0, | ||
215 | .default_trigger = "heartbeat", | ||
216 | } | ||
217 | }; | ||
218 | |||
219 | static void __init ek_board_init(void) | ||
220 | { | ||
221 | /* Serial */ | ||
222 | at91_add_device_serial(); | ||
223 | /* USB Host */ | ||
224 | at91_add_device_usbh(&ek_usbh_data); | ||
225 | /* USB Device */ | ||
226 | at91_add_device_udc(&ek_udc_data); | ||
227 | /* SPI */ | ||
228 | at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices)); | ||
229 | /* NAND */ | ||
230 | at91_add_device_nand(&ek_nand_data); | ||
231 | /* I2C */ | ||
232 | at91_add_device_i2c(NULL, 0); | ||
233 | /* Ethernet */ | ||
234 | at91_add_device_eth(&ek_macb_data); | ||
235 | /* MMC */ | ||
236 | at91_add_device_mmc(0, &ek_mmc_data); | ||
237 | /* Push Buttons */ | ||
238 | ek_add_device_buttons(); | ||
239 | /* LEDs */ | ||
240 | at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds)); | ||
241 | /* shutdown controller, wakeup button (5 msec low) */ | ||
242 | at91_sys_write(AT91_SHDW_MR, AT91_SHDW_CPTWK0_(10) | AT91_SHDW_WKMODE0_LOW | ||
243 | | AT91_SHDW_RTTWKEN); | ||
244 | } | ||
245 | |||
246 | MACHINE_START(QIL_A9260, "CALAO QIL_A9260") | ||
247 | /* Maintainer: calao-systems */ | ||
248 | .phys_io = AT91_BASE_SYS, | ||
249 | .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc, | ||
250 | .boot_params = AT91_SDRAM_BASE + 0x100, | ||
251 | .timer = &at91sam926x_timer, | ||
252 | .map_io = ek_map_io, | ||
253 | .init_irq = ek_init_irq, | ||
254 | .init_machine = ek_board_init, | ||
255 | MACHINE_END | ||
diff --git a/arch/arm/mach-at91/board-sam9g20ek.c b/arch/arm/mach-at91/board-sam9g20ek.c new file mode 100644 index 000000000000..45617c201240 --- /dev/null +++ b/arch/arm/mach-at91/board-sam9g20ek.c | |||
@@ -0,0 +1,218 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2005 SAN People | ||
3 | * Copyright (C) 2008 Atmel | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License as published by | ||
7 | * the Free Software Foundation; either version 2 of the License, or | ||
8 | * (at your option) any later version. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License | ||
16 | * along with this program; if not, write to the Free Software | ||
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
18 | */ | ||
19 | |||
20 | #include <linux/types.h> | ||
21 | #include <linux/init.h> | ||
22 | #include <linux/mm.h> | ||
23 | #include <linux/module.h> | ||
24 | #include <linux/platform_device.h> | ||
25 | #include <linux/spi/spi.h> | ||
26 | #include <linux/spi/at73c213.h> | ||
27 | #include <linux/clk.h> | ||
28 | |||
29 | #include <asm/hardware.h> | ||
30 | #include <asm/setup.h> | ||
31 | #include <asm/mach-types.h> | ||
32 | #include <asm/irq.h> | ||
33 | |||
34 | #include <asm/mach/arch.h> | ||
35 | #include <asm/mach/map.h> | ||
36 | #include <asm/mach/irq.h> | ||
37 | |||
38 | #include <asm/arch/board.h> | ||
39 | #include <asm/arch/gpio.h> | ||
40 | |||
41 | #include "generic.h" | ||
42 | |||
43 | |||
44 | static void __init ek_map_io(void) | ||
45 | { | ||
46 | /* Initialize processor: 18.432 MHz crystal */ | ||
47 | at91sam9260_initialize(18432000); | ||
48 | |||
49 | /* DGBU on ttyS0. (Rx & Tx only) */ | ||
50 | at91_register_uart(0, 0, 0); | ||
51 | |||
52 | /* USART0 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ | ||
53 | at91_register_uart(AT91SAM9260_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS | ||
54 | | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD | ||
55 | | ATMEL_UART_RI); | ||
56 | |||
57 | /* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */ | ||
58 | at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS); | ||
59 | |||
60 | /* set serial console to ttyS0 (ie, DBGU) */ | ||
61 | at91_set_serial_console(0); | ||
62 | } | ||
63 | |||
64 | static void __init ek_init_irq(void) | ||
65 | { | ||
66 | at91sam9260_init_interrupts(NULL); | ||
67 | } | ||
68 | |||
69 | |||
70 | /* | ||
71 | * USB Host port | ||
72 | */ | ||
73 | static struct at91_usbh_data __initdata ek_usbh_data = { | ||
74 | .ports = 2, | ||
75 | }; | ||
76 | |||
77 | /* | ||
78 | * USB Device port | ||
79 | */ | ||
80 | static struct at91_udc_data __initdata ek_udc_data = { | ||
81 | .vbus_pin = AT91_PIN_PC5, | ||
82 | .pullup_pin = 0, /* pull-up driven by UDC */ | ||
83 | }; | ||
84 | |||
85 | |||
86 | /* | ||
87 | * SPI devices. | ||
88 | */ | ||
89 | static struct spi_board_info ek_spi_devices[] = { | ||
90 | #if !defined(CONFIG_MMC_AT91) | ||
91 | { /* DataFlash chip */ | ||
92 | .modalias = "mtd_dataflash", | ||
93 | .chip_select = 1, | ||
94 | .max_speed_hz = 15 * 1000 * 1000, | ||
95 | .bus_num = 0, | ||
96 | }, | ||
97 | #if defined(CONFIG_MTD_AT91_DATAFLASH_CARD) | ||
98 | { /* DataFlash card */ | ||
99 | .modalias = "mtd_dataflash", | ||
100 | .chip_select = 0, | ||
101 | .max_speed_hz = 15 * 1000 * 1000, | ||
102 | .bus_num = 0, | ||
103 | }, | ||
104 | #endif | ||
105 | #endif | ||
106 | }; | ||
107 | |||
108 | |||
109 | /* | ||
110 | * MACB Ethernet device | ||
111 | */ | ||
112 | static struct at91_eth_data __initdata ek_macb_data = { | ||
113 | .phy_irq_pin = AT91_PIN_PA7, | ||
114 | .is_rmii = 1, | ||
115 | }; | ||
116 | |||
117 | |||
118 | /* | ||
119 | * NAND flash | ||
120 | */ | ||
121 | static struct mtd_partition __initdata ek_nand_partition[] = { | ||
122 | { | ||
123 | .name = "Bootstrap", | ||
124 | .offset = 0, | ||
125 | .size = 4 * 1024 * 1024, | ||
126 | }, | ||
127 | { | ||
128 | .name = "Partition 1", | ||
129 | .offset = 4 * 1024 * 1024, | ||
130 | .size = 60 * 1024 * 1024, | ||
131 | }, | ||
132 | { | ||
133 | .name = "Partition 2", | ||
134 | .offset = 64 * 1024 * 1024, | ||
135 | .size = MTDPART_SIZ_FULL, | ||
136 | }, | ||
137 | }; | ||
138 | |||
139 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
140 | { | ||
141 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | ||
142 | return ek_nand_partition; | ||
143 | } | ||
144 | |||
145 | /* det_pin is not connected */ | ||
146 | static struct at91_nand_data __initdata ek_nand_data = { | ||
147 | .ale = 21, | ||
148 | .cle = 22, | ||
149 | .rdy_pin = AT91_PIN_PC13, | ||
150 | .enable_pin = AT91_PIN_PC14, | ||
151 | .partition_info = nand_partitions, | ||
152 | #if defined(CONFIG_MTD_NAND_AT91_BUSWIDTH_16) | ||
153 | .bus_width_16 = 1, | ||
154 | #else | ||
155 | .bus_width_16 = 0, | ||
156 | #endif | ||
157 | }; | ||
158 | |||
159 | |||
160 | /* | ||
161 | * MCI (SD/MMC) | ||
162 | * det_pin, wp_pin and vcc_pin are not connected | ||
163 | */ | ||
164 | static struct at91_mmc_data __initdata ek_mmc_data = { | ||
165 | .slot_b = 1, | ||
166 | .wire4 = 1, | ||
167 | }; | ||
168 | |||
169 | |||
170 | /* | ||
171 | * LEDs | ||
172 | */ | ||
173 | static struct gpio_led ek_leds[] = { | ||
174 | { /* "bottom" led, green, userled1 to be defined */ | ||
175 | .name = "ds5", | ||
176 | .gpio = AT91_PIN_PA6, | ||
177 | .active_low = 1, | ||
178 | .default_trigger = "none", | ||
179 | }, | ||
180 | { /* "power" led, yellow */ | ||
181 | .name = "ds1", | ||
182 | .gpio = AT91_PIN_PA9, | ||
183 | .default_trigger = "heartbeat", | ||
184 | } | ||
185 | }; | ||
186 | |||
187 | static void __init ek_board_init(void) | ||
188 | { | ||
189 | /* Serial */ | ||
190 | at91_add_device_serial(); | ||
191 | /* USB Host */ | ||
192 | at91_add_device_usbh(&ek_usbh_data); | ||
193 | /* USB Device */ | ||
194 | at91_add_device_udc(&ek_udc_data); | ||
195 | /* SPI */ | ||
196 | at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices)); | ||
197 | /* NAND */ | ||
198 | at91_add_device_nand(&ek_nand_data); | ||
199 | /* Ethernet */ | ||
200 | at91_add_device_eth(&ek_macb_data); | ||
201 | /* MMC */ | ||
202 | at91_add_device_mmc(0, &ek_mmc_data); | ||
203 | /* I2C */ | ||
204 | at91_add_device_i2c(NULL, 0); | ||
205 | /* LEDs */ | ||
206 | at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds)); | ||
207 | } | ||
208 | |||
209 | MACHINE_START(AT91SAM9G20EK, "Atmel AT91SAM9G20-EK") | ||
210 | /* Maintainer: Atmel */ | ||
211 | .phys_io = AT91_BASE_SYS, | ||
212 | .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc, | ||
213 | .boot_params = AT91_SDRAM_BASE + 0x100, | ||
214 | .timer = &at91sam926x_timer, | ||
215 | .map_io = ek_map_io, | ||
216 | .init_irq = ek_init_irq, | ||
217 | .init_machine = ek_board_init, | ||
218 | MACHINE_END | ||
diff --git a/arch/arm/mach-at91/board-sam9rlek.c b/arch/arm/mach-at91/board-sam9rlek.c index ffc0597aee8d..b6a70fc735c3 100644 --- a/arch/arm/mach-at91/board-sam9rlek.c +++ b/arch/arm/mach-at91/board-sam9rlek.c | |||
@@ -56,6 +56,14 @@ static void __init ek_init_irq(void) | |||
56 | 56 | ||
57 | 57 | ||
58 | /* | 58 | /* |
59 | * USB HS Device port | ||
60 | */ | ||
61 | static struct usba_platform_data __initdata ek_usba_udc_data = { | ||
62 | .vbus_pin = AT91_PIN_PA8, | ||
63 | }; | ||
64 | |||
65 | |||
66 | /* | ||
59 | * MCI (SD/MMC) | 67 | * MCI (SD/MMC) |
60 | */ | 68 | */ |
61 | static struct at91_mmc_data __initdata ek_mmc_data = { | 69 | static struct at91_mmc_data __initdata ek_mmc_data = { |
@@ -175,6 +183,8 @@ static void __init ek_board_init(void) | |||
175 | { | 183 | { |
176 | /* Serial */ | 184 | /* Serial */ |
177 | at91_add_device_serial(); | 185 | at91_add_device_serial(); |
186 | /* USB HS */ | ||
187 | at91_add_device_usba(&ek_usba_udc_data); | ||
178 | /* I2C */ | 188 | /* I2C */ |
179 | at91_add_device_i2c(NULL, 0); | 189 | at91_add_device_i2c(NULL, 0); |
180 | /* NAND */ | 190 | /* NAND */ |
diff --git a/arch/arm/mach-at91/board-usb-a9260.c b/arch/arm/mach-at91/board-usb-a9260.c new file mode 100644 index 000000000000..837aedf8ffeb --- /dev/null +++ b/arch/arm/mach-at91/board-usb-a9260.c | |||
@@ -0,0 +1,215 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-at91/board-usb-a9260.c | ||
3 | * | ||
4 | * Copyright (C) 2005 SAN People | ||
5 | * Copyright (C) 2006 Atmel | ||
6 | * Copyright (C) 2007 Calao-systems | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | */ | ||
22 | |||
23 | #include <linux/types.h> | ||
24 | #include <linux/init.h> | ||
25 | #include <linux/mm.h> | ||
26 | #include <linux/module.h> | ||
27 | #include <linux/platform_device.h> | ||
28 | #include <linux/spi/spi.h> | ||
29 | #include <linux/gpio_keys.h> | ||
30 | #include <linux/input.h> | ||
31 | #include <linux/clk.h> | ||
32 | |||
33 | #include <asm/hardware.h> | ||
34 | #include <asm/setup.h> | ||
35 | #include <asm/mach-types.h> | ||
36 | #include <asm/irq.h> | ||
37 | |||
38 | #include <asm/mach/arch.h> | ||
39 | #include <asm/mach/map.h> | ||
40 | #include <asm/mach/irq.h> | ||
41 | |||
42 | #include <asm/arch/board.h> | ||
43 | #include <asm/arch/gpio.h> | ||
44 | #include <asm/arch/at91_shdwc.h> | ||
45 | |||
46 | #include "generic.h" | ||
47 | |||
48 | |||
49 | static void __init ek_map_io(void) | ||
50 | { | ||
51 | /* Initialize processor: 12.000 MHz crystal */ | ||
52 | at91sam9260_initialize(12000000); | ||
53 | |||
54 | /* DGBU on ttyS0. (Rx & Tx only) */ | ||
55 | at91_register_uart(0, 0, 0); | ||
56 | |||
57 | /* set serial console to ttyS0 (ie, DBGU) */ | ||
58 | at91_set_serial_console(0); | ||
59 | } | ||
60 | |||
61 | static void __init ek_init_irq(void) | ||
62 | { | ||
63 | at91sam9260_init_interrupts(NULL); | ||
64 | } | ||
65 | |||
66 | |||
67 | /* | ||
68 | * USB Host port | ||
69 | */ | ||
70 | static struct at91_usbh_data __initdata ek_usbh_data = { | ||
71 | .ports = 2, | ||
72 | }; | ||
73 | |||
74 | /* | ||
75 | * USB Device port | ||
76 | */ | ||
77 | static struct at91_udc_data __initdata ek_udc_data = { | ||
78 | .vbus_pin = AT91_PIN_PC5, | ||
79 | .pullup_pin = 0, /* pull-up driven by UDC */ | ||
80 | }; | ||
81 | |||
82 | /* | ||
83 | * MACB Ethernet device | ||
84 | */ | ||
85 | static struct at91_eth_data __initdata ek_macb_data = { | ||
86 | .phy_irq_pin = AT91_PIN_PA31, | ||
87 | .is_rmii = 1, | ||
88 | }; | ||
89 | |||
90 | /* | ||
91 | * NAND flash | ||
92 | */ | ||
93 | static struct mtd_partition __initdata ek_nand_partition[] = { | ||
94 | { | ||
95 | .name = "Uboot & Kernel", | ||
96 | .offset = 0x00000000, | ||
97 | .size = 16 * 1024 * 1024, | ||
98 | }, | ||
99 | { | ||
100 | .name = "Root FS", | ||
101 | .offset = 0x01000000, | ||
102 | .size = 120 * 1024 * 1024, | ||
103 | }, | ||
104 | { | ||
105 | .name = "FS", | ||
106 | .offset = 0x08800000, | ||
107 | .size = 120 * 1024 * 1024, | ||
108 | } | ||
109 | }; | ||
110 | |||
111 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
112 | { | ||
113 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | ||
114 | return ek_nand_partition; | ||
115 | } | ||
116 | |||
117 | static struct at91_nand_data __initdata ek_nand_data = { | ||
118 | .ale = 21, | ||
119 | .cle = 22, | ||
120 | // .det_pin = ... not connected | ||
121 | .rdy_pin = AT91_PIN_PC13, | ||
122 | .enable_pin = AT91_PIN_PC14, | ||
123 | .partition_info = nand_partitions, | ||
124 | #if defined(CONFIG_MTD_NAND_AT91_BUSWIDTH_16) | ||
125 | .bus_width_16 = 1, | ||
126 | #else | ||
127 | .bus_width_16 = 0, | ||
128 | #endif | ||
129 | }; | ||
130 | |||
131 | /* | ||
132 | * GPIO Buttons | ||
133 | */ | ||
134 | |||
135 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) | ||
136 | static struct gpio_keys_button ek_buttons[] = { | ||
137 | { /* USER PUSH BUTTON */ | ||
138 | .code = KEY_ENTER, | ||
139 | .gpio = AT91_PIN_PB10, | ||
140 | .active_low = 1, | ||
141 | .desc = "user_pb", | ||
142 | .wakeup = 1, | ||
143 | } | ||
144 | }; | ||
145 | |||
146 | static struct gpio_keys_platform_data ek_button_data = { | ||
147 | .buttons = ek_buttons, | ||
148 | .nbuttons = ARRAY_SIZE(ek_buttons), | ||
149 | }; | ||
150 | |||
151 | static struct platform_device ek_button_device = { | ||
152 | .name = "gpio-keys", | ||
153 | .id = -1, | ||
154 | .num_resources = 0, | ||
155 | .dev = { | ||
156 | .platform_data = &ek_button_data, | ||
157 | } | ||
158 | }; | ||
159 | |||
160 | static void __init ek_add_device_buttons(void) | ||
161 | { | ||
162 | at91_set_GPIO_periph(AT91_PIN_PB10, 1); /* user push button, pull up enabled */ | ||
163 | at91_set_deglitch(AT91_PIN_PB10, 1); | ||
164 | |||
165 | platform_device_register(&ek_button_device); | ||
166 | } | ||
167 | #else | ||
168 | static void __init ek_add_device_buttons(void) {} | ||
169 | #endif | ||
170 | |||
171 | /* | ||
172 | * LEDs | ||
173 | */ | ||
174 | static struct gpio_led ek_leds[] = { | ||
175 | { /* user_led (green) */ | ||
176 | .name = "user_led", | ||
177 | .gpio = AT91_PIN_PB21, | ||
178 | .active_low = 0, | ||
179 | .default_trigger = "heartbeat", | ||
180 | } | ||
181 | }; | ||
182 | |||
183 | static void __init ek_board_init(void) | ||
184 | { | ||
185 | /* Serial */ | ||
186 | at91_add_device_serial(); | ||
187 | /* USB Host */ | ||
188 | at91_add_device_usbh(&ek_usbh_data); | ||
189 | /* USB Device */ | ||
190 | at91_add_device_udc(&ek_udc_data); | ||
191 | /* NAND */ | ||
192 | at91_add_device_nand(&ek_nand_data); | ||
193 | /* I2C */ | ||
194 | at91_add_device_i2c(NULL, 0); | ||
195 | /* Ethernet */ | ||
196 | at91_add_device_eth(&ek_macb_data); | ||
197 | /* Push Buttons */ | ||
198 | ek_add_device_buttons(); | ||
199 | /* LEDs */ | ||
200 | at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds)); | ||
201 | /* shutdown controller, wakeup button (5 msec low) */ | ||
202 | at91_sys_write(AT91_SHDW_MR, AT91_SHDW_CPTWK0_(10) | AT91_SHDW_WKMODE0_LOW | ||
203 | | AT91_SHDW_RTTWKEN); | ||
204 | } | ||
205 | |||
206 | MACHINE_START(USB_A9260, "CALAO USB_A9260") | ||
207 | /* Maintainer: calao-systems */ | ||
208 | .phys_io = AT91_BASE_SYS, | ||
209 | .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc, | ||
210 | .boot_params = AT91_SDRAM_BASE + 0x100, | ||
211 | .timer = &at91sam926x_timer, | ||
212 | .map_io = ek_map_io, | ||
213 | .init_irq = ek_init_irq, | ||
214 | .init_machine = ek_board_init, | ||
215 | MACHINE_END | ||
diff --git a/arch/arm/mach-at91/board-usb-a9263.c b/arch/arm/mach-at91/board-usb-a9263.c new file mode 100644 index 000000000000..95800d32bd49 --- /dev/null +++ b/arch/arm/mach-at91/board-usb-a9263.c | |||
@@ -0,0 +1,230 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-at91/board-usb-a9263.c | ||
3 | * | ||
4 | * Copyright (C) 2005 SAN People | ||
5 | * Copyright (C) 2007 Atmel Corporation. | ||
6 | * Copyright (C) 2007 Calao-systems | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | */ | ||
22 | |||
23 | #include <linux/types.h> | ||
24 | #include <linux/init.h> | ||
25 | #include <linux/mm.h> | ||
26 | #include <linux/module.h> | ||
27 | #include <linux/platform_device.h> | ||
28 | #include <linux/spi/spi.h> | ||
29 | #include <linux/gpio_keys.h> | ||
30 | #include <linux/input.h> | ||
31 | |||
32 | #include <asm/hardware.h> | ||
33 | #include <asm/setup.h> | ||
34 | #include <asm/mach-types.h> | ||
35 | #include <asm/irq.h> | ||
36 | |||
37 | #include <asm/mach/arch.h> | ||
38 | #include <asm/mach/map.h> | ||
39 | #include <asm/mach/irq.h> | ||
40 | |||
41 | #include <asm/arch/board.h> | ||
42 | #include <asm/arch/gpio.h> | ||
43 | #include <asm/arch/at91_shdwc.h> | ||
44 | |||
45 | #include "generic.h" | ||
46 | |||
47 | |||
48 | static void __init ek_map_io(void) | ||
49 | { | ||
50 | /* Initialize processor: 12.00 MHz crystal */ | ||
51 | at91sam9263_initialize(12000000); | ||
52 | |||
53 | /* DGBU on ttyS0. (Rx & Tx only) */ | ||
54 | at91_register_uart(0, 0, 0); | ||
55 | |||
56 | /* set serial console to ttyS0 (ie, DBGU) */ | ||
57 | at91_set_serial_console(0); | ||
58 | } | ||
59 | |||
60 | static void __init ek_init_irq(void) | ||
61 | { | ||
62 | at91sam9263_init_interrupts(NULL); | ||
63 | } | ||
64 | |||
65 | |||
66 | /* | ||
67 | * USB Host port | ||
68 | */ | ||
69 | static struct at91_usbh_data __initdata ek_usbh_data = { | ||
70 | .ports = 2, | ||
71 | }; | ||
72 | |||
73 | /* | ||
74 | * USB Device port | ||
75 | */ | ||
76 | static struct at91_udc_data __initdata ek_udc_data = { | ||
77 | .vbus_pin = AT91_PIN_PB11, | ||
78 | .pullup_pin = 0, /* pull-up driven by UDC */ | ||
79 | }; | ||
80 | |||
81 | /* | ||
82 | * SPI devices. | ||
83 | */ | ||
84 | static struct spi_board_info ek_spi_devices[] = { | ||
85 | #if !defined(CONFIG_MMC_AT91) | ||
86 | { /* DataFlash chip */ | ||
87 | .modalias = "mtd_dataflash", | ||
88 | .chip_select = 0, | ||
89 | .max_speed_hz = 15 * 1000 * 1000, | ||
90 | .bus_num = 0, | ||
91 | } | ||
92 | #endif | ||
93 | }; | ||
94 | |||
95 | /* | ||
96 | * MACB Ethernet device | ||
97 | */ | ||
98 | static struct at91_eth_data __initdata ek_macb_data = { | ||
99 | .phy_irq_pin = AT91_PIN_PE31, | ||
100 | .is_rmii = 1, | ||
101 | }; | ||
102 | |||
103 | /* | ||
104 | * NAND flash | ||
105 | */ | ||
106 | static struct mtd_partition __initdata ek_nand_partition[] = { | ||
107 | { | ||
108 | .name = "Linux Kernel", | ||
109 | .offset = 0x00000000, | ||
110 | .size = 16 * 1024 * 1024, | ||
111 | }, | ||
112 | { | ||
113 | .name = "Root FS", | ||
114 | .offset = 0x01000000, | ||
115 | .size = 120 * 1024 * 1024, | ||
116 | }, | ||
117 | { | ||
118 | .name = "FS", | ||
119 | .offset = 0x08800000, | ||
120 | .size = 120 * 1024 * 1024, | ||
121 | } | ||
122 | }; | ||
123 | |||
124 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | ||
125 | { | ||
126 | *num_partitions = ARRAY_SIZE(ek_nand_partition); | ||
127 | return ek_nand_partition; | ||
128 | } | ||
129 | |||
130 | static struct at91_nand_data __initdata ek_nand_data = { | ||
131 | .ale = 21, | ||
132 | .cle = 22, | ||
133 | // .det_pin = ... not connected | ||
134 | .rdy_pin = AT91_PIN_PA22, | ||
135 | .enable_pin = AT91_PIN_PD15, | ||
136 | .partition_info = nand_partitions, | ||
137 | #if defined(CONFIG_MTD_NAND_AT91_BUSWIDTH_16) | ||
138 | .bus_width_16 = 1, | ||
139 | #else | ||
140 | .bus_width_16 = 0, | ||
141 | #endif | ||
142 | }; | ||
143 | |||
144 | /* | ||
145 | * GPIO Buttons | ||
146 | */ | ||
147 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) | ||
148 | static struct gpio_keys_button ek_buttons[] = { | ||
149 | { /* USER PUSH BUTTON */ | ||
150 | .code = KEY_ENTER, | ||
151 | .gpio = AT91_PIN_PB10, | ||
152 | .active_low = 1, | ||
153 | .desc = "user_pb", | ||
154 | .wakeup = 1, | ||
155 | } | ||
156 | }; | ||
157 | |||
158 | static struct gpio_keys_platform_data ek_button_data = { | ||
159 | .buttons = ek_buttons, | ||
160 | .nbuttons = ARRAY_SIZE(ek_buttons), | ||
161 | }; | ||
162 | |||
163 | static struct platform_device ek_button_device = { | ||
164 | .name = "gpio-keys", | ||
165 | .id = -1, | ||
166 | .num_resources = 0, | ||
167 | .dev = { | ||
168 | .platform_data = &ek_button_data, | ||
169 | } | ||
170 | }; | ||
171 | |||
172 | static void __init ek_add_device_buttons(void) | ||
173 | { | ||
174 | at91_set_GPIO_periph(AT91_PIN_PB10, 1); /* user push button, pull up enabled */ | ||
175 | at91_set_deglitch(AT91_PIN_PB10, 1); | ||
176 | |||
177 | platform_device_register(&ek_button_device); | ||
178 | } | ||
179 | #else | ||
180 | static void __init ek_add_device_buttons(void) {} | ||
181 | #endif | ||
182 | |||
183 | /* | ||
184 | * LEDs | ||
185 | */ | ||
186 | static struct gpio_led ek_leds[] = { | ||
187 | { /* user_led (green) */ | ||
188 | .name = "user_led", | ||
189 | .gpio = AT91_PIN_PB21, | ||
190 | .active_low = 1, | ||
191 | .default_trigger = "heartbeat", | ||
192 | } | ||
193 | }; | ||
194 | |||
195 | |||
196 | static void __init ek_board_init(void) | ||
197 | { | ||
198 | /* Serial */ | ||
199 | at91_add_device_serial(); | ||
200 | /* USB Host */ | ||
201 | at91_add_device_usbh(&ek_usbh_data); | ||
202 | /* USB Device */ | ||
203 | at91_add_device_udc(&ek_udc_data); | ||
204 | /* SPI */ | ||
205 | at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices)); | ||
206 | /* Ethernet */ | ||
207 | at91_add_device_eth(&ek_macb_data); | ||
208 | /* NAND */ | ||
209 | at91_add_device_nand(&ek_nand_data); | ||
210 | /* I2C */ | ||
211 | at91_add_device_i2c(NULL, 0); | ||
212 | /* Push Buttons */ | ||
213 | ek_add_device_buttons(); | ||
214 | /* LEDs */ | ||
215 | at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds)); | ||
216 | /* shutdown controller, wakeup button (5 msec low) */ | ||
217 | at91_sys_write(AT91_SHDW_MR, AT91_SHDW_CPTWK0_(10) | AT91_SHDW_WKMODE0_LOW | ||
218 | | AT91_SHDW_RTTWKEN); | ||
219 | } | ||
220 | |||
221 | MACHINE_START(USB_A9263, "CALAO USB_A9263") | ||
222 | /* Maintainer: calao-systems */ | ||
223 | .phys_io = AT91_BASE_SYS, | ||
224 | .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc, | ||
225 | .boot_params = AT91_SDRAM_BASE + 0x100, | ||
226 | .timer = &at91sam926x_timer, | ||
227 | .map_io = ek_map_io, | ||
228 | .init_irq = ek_init_irq, | ||
229 | .init_machine = ek_board_init, | ||
230 | MACHINE_END | ||
diff --git a/arch/arm/mach-at91/board-yl-9200.c b/arch/arm/mach-at91/board-yl-9200.c index b5717108991d..7079050ab88d 100755 --- a/arch/arm/mach-at91/board-yl-9200.c +++ b/arch/arm/mach-at91/board-yl-9200.c | |||
@@ -1,11 +1,10 @@ | |||
1 | /* | 1 | /* |
2 | * linux/arch/arm/mach-at91/board-yl-9200.c | 2 | * linux/arch/arm/mach-at91/board-yl-9200.c |
3 | * | 3 | * |
4 | * Adapted from: | 4 | * Adapted from various board files in arch/arm/mach-at91 |
5 | *various board files in | 5 | * |
6 | * /arch/arm/mach-at91 | 6 | * Modifications for YL-9200 platform: |
7 | * modifications to convert to YL-9200 platform | 7 | * Copyright (C) 2007 S. Birtles |
8 | * Copyright (C) 2007 S.Birtles | ||
9 | * | 8 | * |
10 | * This program is free software; you can redistribute it and/or modify | 9 | * This program is free software; you can redistribute it and/or modify |
11 | * it under the terms of the GNU General Public License as published by | 10 | * it under the terms of the GNU General Public License as published by |
@@ -26,13 +25,14 @@ | |||
26 | #include <linux/init.h> | 25 | #include <linux/init.h> |
27 | #include <linux/mm.h> | 26 | #include <linux/mm.h> |
28 | #include <linux/module.h> | 27 | #include <linux/module.h> |
28 | #include <linux/dma-mapping.h> | ||
29 | #include <linux/platform_device.h> | 29 | #include <linux/platform_device.h> |
30 | #include <linux/spi/spi.h> | 30 | #include <linux/spi/spi.h> |
31 | /*#include <linux/can_bus/candata.h>*/ | ||
32 | #include <linux/spi/ads7846.h> | 31 | #include <linux/spi/ads7846.h> |
33 | #include <linux/mtd/physmap.h> | 32 | #include <linux/mtd/physmap.h> |
33 | #include <linux/gpio_keys.h> | ||
34 | #include <linux/input.h> | ||
34 | 35 | ||
35 | /*#include <sound/gpio_sounder.h>*/ | ||
36 | #include <asm/hardware.h> | 36 | #include <asm/hardware.h> |
37 | #include <asm/setup.h> | 37 | #include <asm/setup.h> |
38 | #include <asm/mach-types.h> | 38 | #include <asm/mach-types.h> |
@@ -45,179 +45,108 @@ | |||
45 | #include <asm/arch/board.h> | 45 | #include <asm/arch/board.h> |
46 | #include <asm/arch/gpio.h> | 46 | #include <asm/arch/gpio.h> |
47 | #include <asm/arch/at91rm9200_mc.h> | 47 | #include <asm/arch/at91rm9200_mc.h> |
48 | #include <linux/gpio_keys.h> | ||
49 | #include <linux/input.h> | ||
50 | 48 | ||
51 | #include "generic.h" | 49 | #include "generic.h" |
52 | #include <asm/arch/at91_pio.h> | ||
53 | 50 | ||
54 | #define YL_9200_FLASH_BASE AT91_CHIPSELECT_0 | ||
55 | #define YL_9200_FLASH_SIZE 0x800000 | ||
56 | 51 | ||
57 | /* | 52 | static void __init yl9200_map_io(void) |
58 | * Serial port configuration. | 53 | { |
59 | * 0 .. 3 = USART0 .. USART3 | 54 | /* Initialize processor: 18.432 MHz crystal */ |
60 | * 4 = DBGU | 55 | at91rm9200_initialize(18432000, AT91RM9200_PQFP); |
61 | *atmel_usart.0: ttyS0 at MMIO 0xfefff200 (irq = 1) is a ATMEL_SERIAL | ||
62 | *atmel_usart.1: ttyS1 at MMIO 0xfffc0000 (irq = 6) is a ATMEL_SERIAL | ||
63 | *atmel_usart.2: ttyS2 at MMIO 0xfffc4000 (irq = 7) is a ATMEL_SERIAL | ||
64 | *atmel_usart.3: ttyS3 at MMIO 0xfffc8000 (irq = 8) is a ATMEL_SERIAL | ||
65 | *atmel_usart.4: ttyS4 at MMIO 0xfffcc000 (irq = 9) is a ATMEL_SERIAL | ||
66 | * on the YL-9200 we are sitting at the following | ||
67 | *ttyS0 at MMIO 0xfefff200 (irq = 1) is a AT91_SERIAL | ||
68 | *ttyS1 at MMIO 0xfefc4000 (irq = 7) is a AT91_SERIAL | ||
69 | */ | ||
70 | 56 | ||
71 | /* extern void __init yl_9200_add_device_sounder(struct gpio_sounder *sounders, int nr);*/ | 57 | /* Setup the LEDs D2=PB17 (timer), D3=PB16 (cpu) */ |
58 | at91_init_leds(AT91_PIN_PB16, AT91_PIN_PB17); | ||
72 | 59 | ||
73 | static struct at91_uart_config __initdata yl_9200_uart_config = { | 60 | /* DBGU on ttyS0. (Rx & Tx only) */ |
74 | .console_tty = 0, /* ttyS0 */ | 61 | at91_register_uart(0, 0, 0); |
75 | .nr_tty = 3, | ||
76 | .tty_map = { 4, 1, 0, -1, -1 } /* ttyS0, ..., ttyS4 */ | ||
77 | }; | ||
78 | 62 | ||
79 | static void __init yl_9200_map_io(void) | 63 | /* USART1 on ttyS1. (Rx, Tx, CTS, RTS, DTR, DSR, DCD, RI) */ |
80 | { | 64 | at91_register_uart(AT91RM9200_ID_US1, 1, ATMEL_UART_CTS | ATMEL_UART_RTS |
81 | /* Initialize processor: 18.432 MHz crystal */ | 65 | | ATMEL_UART_DTR | ATMEL_UART_DSR | ATMEL_UART_DCD |
82 | /*Also initialises register clocks & gpio*/ | 66 | | ATMEL_UART_RI); |
83 | at91rm9200_initialize(18432000, AT91RM9200_PQFP); /*we have a 3 bank system*/ | ||
84 | 67 | ||
85 | /* Setup the serial ports and console */ | 68 | /* USART0 on ttyS2. (Rx & Tx only to JP3) */ |
86 | at91_init_serial(&yl_9200_uart_config); | 69 | at91_register_uart(AT91RM9200_ID_US0, 2, 0); |
87 | 70 | ||
88 | /* Setup the LEDs D2=PB17,D3=PB16 */ | 71 | /* USART3 on ttyS3. (Rx, Tx, RTS - RS485 interface) */ |
89 | at91_init_leds(AT91_PIN_PB16,AT91_PIN_PB17); /*cpu-led,timer-led*/ | 72 | at91_register_uart(AT91RM9200_ID_US3, 3, ATMEL_UART_RTS); |
73 | |||
74 | /* set serial console to ttyS0 (ie, DBGU) */ | ||
75 | at91_set_serial_console(0); | ||
90 | } | 76 | } |
91 | 77 | ||
92 | static void __init yl_9200_init_irq(void) | 78 | static void __init yl9200_init_irq(void) |
93 | { | 79 | { |
94 | at91rm9200_init_interrupts(NULL); | 80 | at91rm9200_init_interrupts(NULL); |
95 | } | 81 | } |
96 | 82 | ||
97 | static struct at91_eth_data __initdata yl_9200_eth_data = { | ||
98 | .phy_irq_pin = AT91_PIN_PB28, | ||
99 | .is_rmii = 1, | ||
100 | }; | ||
101 | 83 | ||
102 | static struct at91_usbh_data __initdata yl_9200_usbh_data = { | 84 | /* |
103 | .ports = 1, /* this should be 1 not 2 for the Yl9200*/ | 85 | * LEDs |
86 | */ | ||
87 | static struct gpio_led yl9200_leds[] = { | ||
88 | { /* D2 */ | ||
89 | .name = "led2", | ||
90 | .gpio = AT91_PIN_PB17, | ||
91 | .active_low = 1, | ||
92 | .default_trigger = "timer", | ||
93 | }, | ||
94 | { /* D3 */ | ||
95 | .name = "led3", | ||
96 | .gpio = AT91_PIN_PB16, | ||
97 | .active_low = 1, | ||
98 | .default_trigger = "heartbeat", | ||
99 | }, | ||
100 | { /* D4 */ | ||
101 | .name = "led4", | ||
102 | .gpio = AT91_PIN_PB15, | ||
103 | .active_low = 1, | ||
104 | }, | ||
105 | { /* D5 */ | ||
106 | .name = "led5", | ||
107 | .gpio = AT91_PIN_PB8, | ||
108 | .active_low = 1, | ||
109 | } | ||
104 | }; | 110 | }; |
105 | 111 | ||
106 | static struct at91_udc_data __initdata yl_9200_udc_data = { | ||
107 | /*on sheet 7 Schemitic rev 1.0*/ | ||
108 | .pullup_pin = AT91_PIN_PC4, | ||
109 | .vbus_pin= AT91_PIN_PC5, | ||
110 | .pullup_active_low = 1, /*ACTIVE LOW!! due to PNP transistor on page 7*/ | ||
111 | |||
112 | }; | ||
113 | /* | 112 | /* |
114 | static struct at91_cf_data __initdata yl_9200_cf_data = { | 113 | * Ethernet |
115 | TODO S.BIRTLES | 114 | */ |
116 | .det_pin = AT91_PIN_xxx, | 115 | static struct at91_eth_data __initdata yl9200_eth_data = { |
117 | .rst_pin = AT91_PIN_xxx, | 116 | .phy_irq_pin = AT91_PIN_PB28, |
118 | .irq_pin = ... not connected | 117 | .is_rmii = 1, |
119 | .vcc_pin = ... always powered | ||
120 | |||
121 | }; | 118 | }; |
122 | */ | ||
123 | static struct at91_mmc_data __initdata yl_9200_mmc_data = { | ||
124 | .det_pin = AT91_PIN_PB9, /*THIS LOOKS CORRECT SHEET7*/ | ||
125 | /* .wp_pin = ... not connected SHEET7*/ | ||
126 | .slot_b = 0, | ||
127 | .wire4 = 1, | ||
128 | 119 | ||
120 | /* | ||
121 | * USB Host | ||
122 | */ | ||
123 | static struct at91_usbh_data __initdata yl9200_usbh_data = { | ||
124 | .ports = 1, /* PQFP version of AT91RM9200 */ | ||
129 | }; | 125 | }; |
130 | 126 | ||
131 | /* -------------------------------------------------------------------- | 127 | /* |
132 | * Touch screen | 128 | * USB Device |
133 | * -------------------------------------------------------------------- */ | 129 | */ |
134 | #if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) | 130 | static struct at91_udc_data __initdata yl9200_udc_data = { |
135 | static int ads7843_pendown_state(void) | 131 | .pullup_pin = AT91_PIN_PC4, |
136 | { | 132 | .vbus_pin = AT91_PIN_PC5, |
137 | return !at91_get_gpio_value(AT91_PIN_PB11); /* Touchscreen PENIRQ */ | 133 | .pullup_active_low = 1, /* Active Low due to PNP transistor (pg 7) */ |
138 | } | ||
139 | |||
140 | static void __init at91_init_device_ts(void) | ||
141 | { | ||
142 | /*IMPORTANT NOTE THE SPI INTERFACE IS ALREADY CONFIGURED BY XXX_DEVICES.C | ||
143 | THAT IS TO SAY THAT MISO,MOSI,SPCK AND CS are already configured | ||
144 | we only need to enable the other datapins which are: | ||
145 | PB10/RK1 BUSY | ||
146 | */ | ||
147 | /* Touchscreen BUSY signal , pin,use pullup ( TODO not currently used in the ADS7843/6.c driver)*/ | ||
148 | at91_set_gpio_input(AT91_PIN_PB10, 1); | ||
149 | } | ||
150 | |||
151 | #else | ||
152 | static void __init at91_init_device_ts(void) {} | ||
153 | #endif | ||
154 | |||
155 | static struct ads7846_platform_data ads_info = { | ||
156 | .model = 7843, | ||
157 | .x_min = 150, | ||
158 | .x_max = 3830, | ||
159 | .y_min = 190, | ||
160 | .y_max = 3830, | ||
161 | .vref_delay_usecs = 100, | ||
162 | /* for a 8" touch screen*/ | ||
163 | //.x_plate_ohms = 603, //= 450, S.Birtles TODO | ||
164 | //.y_plate_ohms = 332, //= 250, S.Birtles TODO | ||
165 | /*for a 10.4" touch screen*/ | ||
166 | //.x_plate_ohms =611, | ||
167 | //.y_plate_ohms =325, | ||
168 | |||
169 | .x_plate_ohms = 576, | ||
170 | .y_plate_ohms = 366, | ||
171 | // | ||
172 | .pressure_max = 15000, /*generally nonsense on the 7843*/ | ||
173 | /*number of times to send query to chip in a given run 0 equals one time (do not set to 0!! ,there is a bug in ADS 7846 code)*/ | ||
174 | .debounce_max = 1, | ||
175 | .debounce_rep = 0, | ||
176 | .debounce_tol = (~0), | ||
177 | .get_pendown_state = ads7843_pendown_state, | ||
178 | }; | ||
179 | 134 | ||
180 | /*static struct canbus_platform_data can_info = { | ||
181 | .model = 2510, | ||
182 | }; | 135 | }; |
183 | */ | ||
184 | |||
185 | static struct spi_board_info yl_9200_spi_devices[] = { | ||
186 | /*this sticks it at: | ||
187 | /sys/devices/platform/atmel_spi.0/spi0.0 | ||
188 | /sys/bus/platform/devices/ | ||
189 | Documentation/spi IIRC*/ | ||
190 | 136 | ||
191 | #if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) | 137 | /* |
192 | /*(this IS correct 04-NOV-2007)*/ | 138 | * MMC |
193 | { | 139 | */ |
194 | .modalias = "ads7846", /* because the driver is called ads7846*/ | 140 | static struct at91_mmc_data __initdata yl9200_mmc_data = { |
195 | .chip_select = 0, /*THIS MUST BE AN INDEX INTO AN ARRAY OF pins */ | 141 | .det_pin = AT91_PIN_PB9, |
196 | /*this is ONLY TO BE USED if chipselect above is not used, it passes a pin directly for the chip select*/ | 142 | // .wp_pin = ... not connected |
197 | /*.controller_data =AT91_PIN_PA3 ,*/ | 143 | .wire4 = 1, |
198 | .max_speed_hz = 5000*26, /*(4700 * 26)-125000 * 26, (max sample rate @ 3V) * (cmd + data + overhead) */ | ||
199 | .bus_num = 0, | ||
200 | .platform_data = &ads_info, | ||
201 | .irq = AT91_PIN_PB11, | ||
202 | }, | ||
203 | #endif | ||
204 | /*we need to put our CAN driver data here!!*/ | ||
205 | /*THIS IS ALL DUMMY DATA*/ | ||
206 | /* { | ||
207 | .modalias = "mcp2510", //DUMMY for MCP2510 chip | ||
208 | .chip_select = 1,*/ /*THIS MUST BE AN INDEX INTO AN ARRAY OF pins */ | ||
209 | /*this is ONLY TO BE USED if chipselect above is not used, it passes a pin directly for the chip select */ | ||
210 | /* .controller_data =AT91_PIN_PA4 , | ||
211 | .max_speed_hz = 25000 * 26, | ||
212 | .bus_num = 0, | ||
213 | .platform_data = &can_info, | ||
214 | .irq = AT91_PIN_PC0, | ||
215 | }, | ||
216 | */ | ||
217 | //max SPI chip needs to go here | ||
218 | }; | 144 | }; |
219 | 145 | ||
220 | static struct mtd_partition __initdata yl_9200_nand_partition[] = { | 146 | /* |
147 | * NAND Flash | ||
148 | */ | ||
149 | static struct mtd_partition __initdata yl9200_nand_partition[] = { | ||
221 | { | 150 | { |
222 | .name = "AT91 NAND partition 1, boot", | 151 | .name = "AT91 NAND partition 1, boot", |
223 | .offset = 0, | 152 | .offset = 0, |
@@ -242,442 +171,434 @@ static struct mtd_partition __initdata yl_9200_nand_partition[] = { | |||
242 | .name = "AT91 NAND partition 5, ext-fs", | 171 | .name = "AT91 NAND partition 5, ext-fs", |
243 | .offset = 32 * SZ_1M, | 172 | .offset = 32 * SZ_1M, |
244 | .size = 32 * SZ_1M | 173 | .size = 32 * SZ_1M |
245 | }, | 174 | } |
246 | }; | 175 | }; |
247 | 176 | ||
248 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) | 177 | static struct mtd_partition * __init nand_partitions(int size, int *num_partitions) |
249 | { | 178 | { |
250 | *num_partitions = ARRAY_SIZE(yl_9200_nand_partition); | 179 | *num_partitions = ARRAY_SIZE(yl9200_nand_partition); |
251 | return yl_9200_nand_partition; | 180 | return yl9200_nand_partition; |
252 | } | 181 | } |
253 | 182 | ||
254 | static struct at91_nand_data __initdata yl_9200_nand_data = { | 183 | static struct at91_nand_data __initdata yl9200_nand_data = { |
255 | .ale= 6, | 184 | .ale = 6, |
256 | .cle= 7, | 185 | .cle = 7, |
257 | /*.det_pin = AT91_PIN_PCxx,*/ /*we don't have a det pin because NandFlash is fixed to board*/ | 186 | // .det_pin = ... not connected |
258 | .rdy_pin = AT91_PIN_PC14, /*R/!B Sheet10*/ | 187 | .rdy_pin = AT91_PIN_PC14, /* R/!B (Sheet10) */ |
259 | .enable_pin = AT91_PIN_PC15, /*!CE Sheet10 */ | 188 | .enable_pin = AT91_PIN_PC15, /* !CE (Sheet10) */ |
260 | .partition_info = nand_partitions, | 189 | .partition_info = nand_partitions, |
261 | }; | 190 | }; |
262 | 191 | ||
263 | |||
264 | |||
265 | /* | 192 | /* |
266 | TODO S.Birtles | 193 | * NOR Flash |
267 | potentially a problem with the size above | 194 | */ |
268 | physmap platform flash device: 00800000 at 10000000 | 195 | #define YL9200_FLASH_BASE AT91_CHIPSELECT_0 |
269 | physmap-flash.0: Found 1 x16 devices at 0x0 in 16-bit bank | 196 | #define YL9200_FLASH_SIZE 0x1000000 |
270 | NOR chip too large to fit in mapping. Attempting to cope... | ||
271 | Intel/Sharp Extended Query Table at 0x0031 | ||
272 | Using buffer write method | ||
273 | cfi_cmdset_0001: Erase suspend on write enabled | ||
274 | Reducing visibility of 16384KiB chip to 8192KiB | ||
275 | */ | ||
276 | 197 | ||
277 | static struct mtd_partition yl_9200_flash_partitions[] = { | 198 | static struct mtd_partition yl9200_flash_partitions[] = { |
199 | { | ||
200 | .name = "Bootloader", | ||
201 | .size = 0x00040000, | ||
202 | .offset = 0, | ||
203 | .mask_flags = MTD_WRITEABLE, /* force read-only */ | ||
204 | }, | ||
278 | { | 205 | { |
279 | .name = "Bootloader", | 206 | .name = "Kernel", |
280 | .size = 0x00040000, | 207 | .size = 0x001C0000, |
281 | .offset = 0, | 208 | .offset = 0x00040000, |
282 | .mask_flags = MTD_WRITEABLE /* force read-only */ | 209 | }, |
283 | },{ | 210 | { |
284 | .name = "Kernel", | 211 | .name = "Filesystem", |
285 | .size = 0x001C0000, | 212 | .size = MTDPART_SIZ_FULL, |
286 | .offset = 0x00040000, | 213 | .offset = 0x00200000 |
287 | },{ | ||
288 | .name = "Filesystem", | ||
289 | .size = MTDPART_SIZ_FULL, | ||
290 | .offset = 0x00200000 | ||
291 | } | 214 | } |
292 | |||
293 | }; | 215 | }; |
294 | 216 | ||
295 | static struct physmap_flash_data yl_9200_flash_data = { | 217 | static struct physmap_flash_data yl9200_flash_data = { |
296 | .width = 2, | 218 | .width = 2, |
297 | .parts = yl_9200_flash_partitions, | 219 | .parts = yl9200_flash_partitions, |
298 | .nr_parts = ARRAY_SIZE(yl_9200_flash_partitions), | 220 | .nr_parts = ARRAY_SIZE(yl9200_flash_partitions), |
299 | }; | 221 | }; |
300 | 222 | ||
301 | static struct resource yl_9200_flash_resources[] = { | 223 | static struct resource yl9200_flash_resources[] = { |
302 | { | 224 | { |
303 | .start = YL_9200_FLASH_BASE, | 225 | .start = YL9200_FLASH_BASE, |
304 | .end = YL_9200_FLASH_BASE + YL_9200_FLASH_SIZE - 1, | 226 | .end = YL9200_FLASH_BASE + YL9200_FLASH_SIZE - 1, |
305 | .flags = IORESOURCE_MEM, | 227 | .flags = IORESOURCE_MEM, |
306 | } | 228 | } |
307 | }; | 229 | }; |
308 | 230 | ||
309 | static struct platform_device yl_9200_flash = { | 231 | static struct platform_device yl9200_flash = { |
310 | .name = "physmap-flash", | 232 | .name = "physmap-flash", |
311 | .id = 0, | 233 | .id = 0, |
312 | .dev = { | 234 | .dev = { |
313 | .platform_data = &yl_9200_flash_data, | 235 | .platform_data = &yl9200_flash_data, |
314 | }, | 236 | }, |
315 | .resource = yl_9200_flash_resources, | 237 | .resource = yl9200_flash_resources, |
316 | .num_resources = ARRAY_SIZE(yl_9200_flash_resources), | 238 | .num_resources = ARRAY_SIZE(yl9200_flash_resources), |
317 | }; | 239 | }; |
318 | 240 | ||
319 | 241 | /* | |
320 | static struct gpio_led yl_9200_leds[] = { | 242 | * I2C (TWI) |
321 | /*D2 &D3 are passed directly in via at91_init_leds*/ | 243 | */ |
322 | { | 244 | static struct i2c_board_info __initdata yl9200_i2c_devices[] = { |
323 | .name = "led4", /*D4*/ | 245 | { /* EEPROM */ |
324 | .gpio = AT91_PIN_PB15, | 246 | I2C_BOARD_INFO("24c128", 0x50), |
325 | .active_low = 1, | ||
326 | .default_trigger = "heartbeat", | ||
327 | /*.default_trigger = "timer",*/ | ||
328 | }, | ||
329 | { | ||
330 | .name = "led5", /*D5*/ | ||
331 | .gpio = AT91_PIN_PB8, | ||
332 | .active_low = 1, | ||
333 | .default_trigger = "heartbeat", | ||
334 | } | ||
335 | }; | ||
336 | |||
337 | //static struct gpio_sounder yl_9200_sounder[] = {*/ | ||
338 | /*This is a simple speaker attached to a gpo line*/ | ||
339 | |||
340 | // { | ||
341 | // .name = "Speaker", /*LS1*/ | ||
342 | // .gpio = AT91_PIN_PA22, | ||
343 | // .active_low = 0, | ||
344 | // .default_trigger = "heartbeat", | ||
345 | /*.default_trigger = "timer",*/ | ||
346 | // }, | ||
347 | //}; | ||
348 | |||
349 | |||
350 | |||
351 | static struct i2c_board_info __initdata yl_9200_i2c_devices[] = { | ||
352 | { | ||
353 | /*TODO*/ | ||
354 | I2C_BOARD_INFO("CS4334", 0x00), | ||
355 | } | 247 | } |
356 | }; | 248 | }; |
357 | 249 | ||
358 | 250 | /* | |
359 | /* | ||
360 | * GPIO Buttons | 251 | * GPIO Buttons |
361 | */ | 252 | */ |
362 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) | 253 | #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE) |
363 | static struct gpio_keys_button yl_9200_buttons[] = { | 254 | static struct gpio_keys_button yl9200_buttons[] = { |
364 | { | 255 | { |
365 | .gpio = AT91_PIN_PA24, | 256 | .gpio = AT91_PIN_PA24, |
366 | .code = BTN_2, | 257 | .code = BTN_2, |
367 | .desc = "SW2", | 258 | .desc = "SW2", |
368 | .active_low = 1, | 259 | .active_low = 1, |
369 | .wakeup = 1, | 260 | .wakeup = 1, |
370 | }, | 261 | }, |
371 | { | 262 | { |
372 | .gpio = AT91_PIN_PB1, | 263 | .gpio = AT91_PIN_PB1, |
373 | .code = BTN_3, | 264 | .code = BTN_3, |
374 | .desc = "SW3", | 265 | .desc = "SW3", |
375 | .active_low = 1, | 266 | .active_low = 1, |
376 | .wakeup = 1, | 267 | .wakeup = 1, |
377 | }, | 268 | }, |
378 | { | 269 | { |
379 | .gpio = AT91_PIN_PB2, | 270 | .gpio = AT91_PIN_PB2, |
380 | .code = BTN_4, | 271 | .code = BTN_4, |
381 | .desc = "SW4", | 272 | .desc = "SW4", |
382 | .active_low = 1, | 273 | .active_low = 1, |
383 | .wakeup = 1, | 274 | .wakeup = 1, |
384 | }, | 275 | }, |
385 | { | 276 | { |
386 | .gpio = AT91_PIN_PB6, | 277 | .gpio = AT91_PIN_PB6, |
387 | .code = BTN_5, | 278 | .code = BTN_5, |
388 | .desc = "SW5", | 279 | .desc = "SW5", |
389 | .active_low = 1, | 280 | .active_low = 1, |
390 | .wakeup = 1, | 281 | .wakeup = 1, |
391 | }, | 282 | } |
392 | |||
393 | }; | 283 | }; |
394 | 284 | ||
395 | static struct gpio_keys_platform_data yl_9200_button_data = { | 285 | static struct gpio_keys_platform_data yl9200_button_data = { |
396 | .buttons = yl_9200_buttons, | 286 | .buttons = yl9200_buttons, |
397 | .nbuttons = ARRAY_SIZE(yl_9200_buttons), | 287 | .nbuttons = ARRAY_SIZE(yl9200_buttons), |
398 | }; | 288 | }; |
399 | 289 | ||
400 | static struct platform_device yl_9200_button_device = { | 290 | static struct platform_device yl9200_button_device = { |
401 | .name = "gpio-keys", | 291 | .name = "gpio-keys", |
402 | .id = -1, | 292 | .id = -1, |
403 | .num_resources = 0, | 293 | .num_resources = 0, |
404 | .dev = { | 294 | .dev = { |
405 | .platform_data = &yl_9200_button_data, | 295 | .platform_data = &yl9200_button_data, |
406 | } | 296 | } |
407 | }; | 297 | }; |
408 | 298 | ||
409 | static void __init yl_9200_add_device_buttons(void) | 299 | static void __init yl9200_add_device_buttons(void) |
410 | { | 300 | { |
411 | //SW2 | 301 | at91_set_gpio_input(AT91_PIN_PA24, 1); /* SW2 */ |
412 | at91_set_gpio_input(AT91_PIN_PA24, 0); | ||
413 | at91_set_deglitch(AT91_PIN_PA24, 1); | 302 | at91_set_deglitch(AT91_PIN_PA24, 1); |
414 | 303 | at91_set_gpio_input(AT91_PIN_PB1, 1); /* SW3 */ | |
415 | //SW3 | ||
416 | at91_set_gpio_input(AT91_PIN_PB1, 0); | ||
417 | at91_set_deglitch(AT91_PIN_PB1, 1); | 304 | at91_set_deglitch(AT91_PIN_PB1, 1); |
418 | //SW4 | 305 | at91_set_gpio_input(AT91_PIN_PB2, 1); /* SW4 */ |
419 | at91_set_gpio_input(AT91_PIN_PB2, 0); | ||
420 | at91_set_deglitch(AT91_PIN_PB2, 1); | 306 | at91_set_deglitch(AT91_PIN_PB2, 1); |
421 | 307 | at91_set_gpio_input(AT91_PIN_PB6, 1); /* SW5 */ | |
422 | //SW5 | ||
423 | at91_set_gpio_input(AT91_PIN_PB6, 0); | ||
424 | at91_set_deglitch(AT91_PIN_PB6, 1); | 308 | at91_set_deglitch(AT91_PIN_PB6, 1); |
425 | 309 | ||
310 | /* Enable buttons (Sheet 5) */ | ||
311 | at91_set_gpio_output(AT91_PIN_PB7, 1); | ||
312 | |||
313 | platform_device_register(&yl9200_button_device); | ||
314 | } | ||
315 | #else | ||
316 | static void __init yl9200_add_device_buttons(void) {} | ||
317 | #endif | ||
318 | |||
319 | /* | ||
320 | * Touchscreen | ||
321 | */ | ||
322 | #if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) | ||
323 | static int ads7843_pendown_state(void) | ||
324 | { | ||
325 | return !at91_get_gpio_value(AT91_PIN_PB11); /* Touchscreen PENIRQ */ | ||
326 | } | ||
327 | |||
328 | static struct ads7846_platform_data ads_info = { | ||
329 | .model = 7843, | ||
330 | .x_min = 150, | ||
331 | .x_max = 3830, | ||
332 | .y_min = 190, | ||
333 | .y_max = 3830, | ||
334 | .vref_delay_usecs = 100, | ||
335 | |||
336 | /* For a 8" touch-screen */ | ||
337 | // .x_plate_ohms = 603, | ||
338 | // .y_plate_ohms = 332, | ||
339 | |||
340 | /* For a 10.4" touch-screen */ | ||
341 | // .x_plate_ohms = 611, | ||
342 | // .y_plate_ohms = 325, | ||
343 | |||
344 | .x_plate_ohms = 576, | ||
345 | .y_plate_ohms = 366, | ||
346 | |||
347 | .pressure_max = 15000, /* generally nonsense on the 7843 */ | ||
348 | .debounce_max = 1, | ||
349 | .debounce_rep = 0, | ||
350 | .debounce_tol = (~0), | ||
351 | .get_pendown_state = ads7843_pendown_state, | ||
352 | }; | ||
426 | 353 | ||
427 | at91_set_gpio_output(AT91_PIN_PB7, 1); /* #TURN BUTTONS ON, SHEET 5 of schematics */ | 354 | static void __init yl9200_add_device_ts(void) |
428 | platform_device_register(&yl_9200_button_device); | 355 | { |
356 | at91_set_gpio_input(AT91_PIN_PB11, 1); /* Touchscreen interrupt pin */ | ||
357 | at91_set_gpio_input(AT91_PIN_PB10, 1); /* Touchscreen BUSY signal - not used! */ | ||
429 | } | 358 | } |
430 | #else | 359 | #else |
431 | static void __init yl_9200_add_device_buttons(void) {} | 360 | static void __init yl9200_add_device_ts(void) {} |
361 | #endif | ||
362 | |||
363 | /* | ||
364 | * SPI devices | ||
365 | */ | ||
366 | static struct spi_board_info yl9200_spi_devices[] = { | ||
367 | #if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) | ||
368 | { /* Touchscreen */ | ||
369 | .modalias = "ads7846", | ||
370 | .chip_select = 0, | ||
371 | .max_speed_hz = 5000 * 26, | ||
372 | .platform_data = &ads_info, | ||
373 | .irq = AT91_PIN_PB11, | ||
374 | }, | ||
432 | #endif | 375 | #endif |
376 | { /* CAN */ | ||
377 | .modalias = "mcp2510", | ||
378 | .chip_select = 1, | ||
379 | .max_speed_hz = 25000 * 26, | ||
380 | .irq = AT91_PIN_PC0, | ||
381 | } | ||
382 | }; | ||
433 | 383 | ||
384 | /* | ||
385 | * LCD / VGA | ||
386 | * | ||
387 | * EPSON S1D13806 FB (discontinued chip) | ||
388 | * EPSON S1D13506 FB | ||
389 | */ | ||
434 | #if defined(CONFIG_FB_S1D135XX) || defined(CONFIG_FB_S1D13XXX_MODULE) | 390 | #if defined(CONFIG_FB_S1D135XX) || defined(CONFIG_FB_S1D13XXX_MODULE) |
435 | #include <video/s1d13xxxfb.h> | 391 | #include <video/s1d13xxxfb.h> |
436 | 392 | ||
437 | /* EPSON S1D13806 FB (discontinued chip)*/ | ||
438 | /* EPSON S1D13506 FB */ | ||
439 | |||
440 | #define AT91_FB_REG_BASE 0x80000000L | 393 | #define AT91_FB_REG_BASE 0x80000000L |
441 | #define AT91_FB_REG_SIZE 0x200 | 394 | #define AT91_FB_REG_SIZE 0x200 |
442 | #define AT91_FB_VMEM_BASE 0x80200000L | 395 | #define AT91_FB_VMEM_BASE 0x80200000L |
443 | #define AT91_FB_VMEM_SIZE 0x200000L | 396 | #define AT91_FB_VMEM_SIZE 0x200000L |
444 | 397 | ||
445 | /*#define S1D_DISPLAY_WIDTH 640*/ | 398 | static void __init yl9200_init_video(void) |
446 | /*#define S1D_DISPLAY_HEIGHT 480*/ | ||
447 | |||
448 | |||
449 | static void __init yl_9200_init_video(void) | ||
450 | { | 399 | { |
451 | at91_sys_write(AT91_PIOC + PIO_ASR,AT91_PIN_PC6); | 400 | /* NWAIT Signal */ |
452 | at91_sys_write(AT91_PIOC + PIO_BSR,0); | 401 | at91_set_A_periph(AT91_PIN_PC6, 0); |
453 | at91_sys_write(AT91_PIOC + PIO_ASR,AT91_PIN_PC6); | ||
454 | |||
455 | at91_sys_write( AT91_SMC_CSR(2), | ||
456 | AT91_SMC_NWS_(0x4) | | ||
457 | AT91_SMC_WSEN | | ||
458 | AT91_SMC_TDF_(0x100) | | ||
459 | AT91_SMC_DBW | ||
460 | ); | ||
461 | |||
462 | |||
463 | 402 | ||
403 | /* Initialization of the Static Memory Controller for Chip Select 2 */ | ||
404 | at91_sys_write(AT91_SMC_CSR(2), AT91_SMC_DBW_16 /* 16 bit */ | ||
405 | | AT91_SMC_WSEN | AT91_SMC_NWS_(0x4) /* wait states */ | ||
406 | | AT91_SMC_TDF_(0x100) /* float time */ | ||
407 | ); | ||
464 | } | 408 | } |
465 | 409 | ||
466 | 410 | static struct s1d13xxxfb_regval yl9200_s1dfb_initregs[] = | |
467 | static struct s1d13xxxfb_regval yl_9200_s1dfb_initregs[] = | ||
468 | { | 411 | { |
469 | {S1DREG_MISC, 0x00}, /* Miscellaneous Register*/ | 412 | {S1DREG_MISC, 0x00}, /* Miscellaneous Register*/ |
470 | {S1DREG_COM_DISP_MODE, 0x01}, /* Display Mode Register, LCD only*/ | 413 | {S1DREG_COM_DISP_MODE, 0x01}, /* Display Mode Register, LCD only*/ |
471 | {S1DREG_GPIO_CNF0, 0x00}, /* General IO Pins Configuration Register*/ | 414 | {S1DREG_GPIO_CNF0, 0x00}, /* General IO Pins Configuration Register*/ |
472 | {S1DREG_GPIO_CTL0, 0x00}, /* General IO Pins Control Register*/ | 415 | {S1DREG_GPIO_CTL0, 0x00}, /* General IO Pins Control Register*/ |
473 | {S1DREG_CLK_CNF, 0x11}, /* Memory Clock Configuration Register*/ | 416 | {S1DREG_CLK_CNF, 0x11}, /* Memory Clock Configuration Register*/ |
474 | {S1DREG_LCD_CLK_CNF, 0x10}, /* LCD Pixel Clock Configuration Register*/ | 417 | {S1DREG_LCD_CLK_CNF, 0x10}, /* LCD Pixel Clock Configuration Register*/ |
475 | {S1DREG_CRT_CLK_CNF, 0x12}, /* CRT/TV Pixel Clock Configuration Register*/ | 418 | {S1DREG_CRT_CLK_CNF, 0x12}, /* CRT/TV Pixel Clock Configuration Register*/ |
476 | {S1DREG_MPLUG_CLK_CNF, 0x01}, /* MediaPlug Clock Configuration Register*/ | 419 | {S1DREG_MPLUG_CLK_CNF, 0x01}, /* MediaPlug Clock Configuration Register*/ |
477 | {S1DREG_CPU2MEM_WST_SEL, 0x02}, /* CPU To Memory Wait State Select Register*/ | 420 | {S1DREG_CPU2MEM_WST_SEL, 0x02}, /* CPU To Memory Wait State Select Register*/ |
478 | {S1DREG_MEM_CNF, 0x00}, /* Memory Configuration Register*/ | 421 | {S1DREG_MEM_CNF, 0x00}, /* Memory Configuration Register*/ |
479 | {S1DREG_SDRAM_REF_RATE, 0x04}, /* DRAM Refresh Rate Register, MCLK source*/ | 422 | {S1DREG_SDRAM_REF_RATE, 0x04}, /* DRAM Refresh Rate Register, MCLK source*/ |
480 | {S1DREG_SDRAM_TC0, 0x12}, /* DRAM Timings Control Register 0*/ | 423 | {S1DREG_SDRAM_TC0, 0x12}, /* DRAM Timings Control Register 0*/ |
481 | {S1DREG_SDRAM_TC1, 0x02}, /* DRAM Timings Control Register 1*/ | 424 | {S1DREG_SDRAM_TC1, 0x02}, /* DRAM Timings Control Register 1*/ |
482 | {S1DREG_PANEL_TYPE, 0x25}, /* Panel Type Register*/ | 425 | {S1DREG_PANEL_TYPE, 0x25}, /* Panel Type Register*/ |
483 | {S1DREG_MOD_RATE, 0x00}, /* MOD Rate Register*/ | 426 | {S1DREG_MOD_RATE, 0x00}, /* MOD Rate Register*/ |
484 | {S1DREG_LCD_DISP_HWIDTH, 0x4F}, /* LCD Horizontal Display Width Register*/ | 427 | {S1DREG_LCD_DISP_HWIDTH, 0x4F}, /* LCD Horizontal Display Width Register*/ |
485 | {S1DREG_LCD_NDISP_HPER, 0x13}, /* LCD Horizontal Non-Display Period Register*/ | 428 | {S1DREG_LCD_NDISP_HPER, 0x13}, /* LCD Horizontal Non-Display Period Register*/ |
486 | {S1DREG_TFT_FPLINE_START, 0x01}, /* TFT FPLINE Start Position Register*/ | 429 | {S1DREG_TFT_FPLINE_START, 0x01}, /* TFT FPLINE Start Position Register*/ |
487 | {S1DREG_TFT_FPLINE_PWIDTH, 0x0c}, /* TFT FPLINE Pulse Width Register*/ | 430 | {S1DREG_TFT_FPLINE_PWIDTH, 0x0c}, /* TFT FPLINE Pulse Width Register*/ |
488 | {S1DREG_LCD_DISP_VHEIGHT0, 0xDF}, /* LCD Vertical Display Height Register 0*/ | 431 | {S1DREG_LCD_DISP_VHEIGHT0, 0xDF}, /* LCD Vertical Display Height Register 0*/ |
489 | {S1DREG_LCD_DISP_VHEIGHT1, 0x01}, /* LCD Vertical Display Height Register 1*/ | 432 | {S1DREG_LCD_DISP_VHEIGHT1, 0x01}, /* LCD Vertical Display Height Register 1*/ |
490 | {S1DREG_LCD_NDISP_VPER, 0x2c}, /* LCD Vertical Non-Display Period Register*/ | 433 | {S1DREG_LCD_NDISP_VPER, 0x2c}, /* LCD Vertical Non-Display Period Register*/ |
491 | {S1DREG_TFT_FPFRAME_START, 0x0a}, /* TFT FPFRAME Start Position Register*/ | 434 | {S1DREG_TFT_FPFRAME_START, 0x0a}, /* TFT FPFRAME Start Position Register*/ |
492 | {S1DREG_TFT_FPFRAME_PWIDTH, 0x02}, /* TFT FPFRAME Pulse Width Register*/ | 435 | {S1DREG_TFT_FPFRAME_PWIDTH, 0x02}, /* TFT FPFRAME Pulse Width Register*/ |
493 | {S1DREG_LCD_DISP_MODE, 0x05}, /* LCD Display Mode Register*/ | 436 | {S1DREG_LCD_DISP_MODE, 0x05}, /* LCD Display Mode Register*/ |
494 | {S1DREG_LCD_MISC, 0x01}, /* LCD Miscellaneous Register*/ | 437 | {S1DREG_LCD_MISC, 0x01}, /* LCD Miscellaneous Register*/ |
495 | {S1DREG_LCD_DISP_START0, 0x00}, /* LCD Display Start Address Register 0*/ | 438 | {S1DREG_LCD_DISP_START0, 0x00}, /* LCD Display Start Address Register 0*/ |
496 | {S1DREG_LCD_DISP_START1, 0x00}, /* LCD Display Start Address Register 1*/ | 439 | {S1DREG_LCD_DISP_START1, 0x00}, /* LCD Display Start Address Register 1*/ |
497 | {S1DREG_LCD_DISP_START2, 0x00}, /* LCD Display Start Address Register 2*/ | 440 | {S1DREG_LCD_DISP_START2, 0x00}, /* LCD Display Start Address Register 2*/ |
498 | {S1DREG_LCD_MEM_OFF0, 0x80}, /* LCD Memory Address Offset Register 0*/ | 441 | {S1DREG_LCD_MEM_OFF0, 0x80}, /* LCD Memory Address Offset Register 0*/ |
499 | {S1DREG_LCD_MEM_OFF1, 0x02}, /* LCD Memory Address Offset Register 1*/ | 442 | {S1DREG_LCD_MEM_OFF1, 0x02}, /* LCD Memory Address Offset Register 1*/ |
500 | {S1DREG_LCD_PIX_PAN, 0x03}, /* LCD Pixel Panning Register*/ | 443 | {S1DREG_LCD_PIX_PAN, 0x03}, /* LCD Pixel Panning Register*/ |
501 | {S1DREG_LCD_DISP_FIFO_HTC, 0x00}, /* LCD Display FIFO High Threshold Control Register*/ | 444 | {S1DREG_LCD_DISP_FIFO_HTC, 0x00}, /* LCD Display FIFO High Threshold Control Register*/ |
502 | {S1DREG_LCD_DISP_FIFO_LTC, 0x00}, /* LCD Display FIFO Low Threshold Control Register*/ | 445 | {S1DREG_LCD_DISP_FIFO_LTC, 0x00}, /* LCD Display FIFO Low Threshold Control Register*/ |
503 | {S1DREG_CRT_DISP_HWIDTH, 0x4F}, /* CRT/TV Horizontal Display Width Register*/ | 446 | {S1DREG_CRT_DISP_HWIDTH, 0x4F}, /* CRT/TV Horizontal Display Width Register*/ |
504 | {S1DREG_CRT_NDISP_HPER, 0x13}, /* CRT/TV Horizontal Non-Display Period Register*/ | 447 | {S1DREG_CRT_NDISP_HPER, 0x13}, /* CRT/TV Horizontal Non-Display Period Register*/ |
505 | {S1DREG_CRT_HRTC_START, 0x01}, /* CRT/TV HRTC Start Position Register*/ | 448 | {S1DREG_CRT_HRTC_START, 0x01}, /* CRT/TV HRTC Start Position Register*/ |
506 | {S1DREG_CRT_HRTC_PWIDTH, 0x0B}, /* CRT/TV HRTC Pulse Width Register*/ | 449 | {S1DREG_CRT_HRTC_PWIDTH, 0x0B}, /* CRT/TV HRTC Pulse Width Register*/ |
507 | {S1DREG_CRT_DISP_VHEIGHT0, 0xDF}, /* CRT/TV Vertical Display Height Register 0*/ | 450 | {S1DREG_CRT_DISP_VHEIGHT0, 0xDF}, /* CRT/TV Vertical Display Height Register 0*/ |
508 | {S1DREG_CRT_DISP_VHEIGHT1, 0x01}, /* CRT/TV Vertical Display Height Register 1*/ | 451 | {S1DREG_CRT_DISP_VHEIGHT1, 0x01}, /* CRT/TV Vertical Display Height Register 1*/ |
509 | {S1DREG_CRT_NDISP_VPER, 0x2B}, /* CRT/TV Vertical Non-Display Period Register*/ | 452 | {S1DREG_CRT_NDISP_VPER, 0x2B}, /* CRT/TV Vertical Non-Display Period Register*/ |
510 | {S1DREG_CRT_VRTC_START, 0x09}, /* CRT/TV VRTC Start Position Register*/ | 453 | {S1DREG_CRT_VRTC_START, 0x09}, /* CRT/TV VRTC Start Position Register*/ |
511 | {S1DREG_CRT_VRTC_PWIDTH, 0x01}, /* CRT/TV VRTC Pulse Width Register*/ | 454 | {S1DREG_CRT_VRTC_PWIDTH, 0x01}, /* CRT/TV VRTC Pulse Width Register*/ |
512 | {S1DREG_TV_OUT_CTL, 0x18}, /* TV Output Control Register */ | 455 | {S1DREG_TV_OUT_CTL, 0x18}, /* TV Output Control Register */ |
513 | {S1DREG_CRT_DISP_MODE, 0x05}, /* CRT/TV Display Mode Register, 16BPP*/ | 456 | {S1DREG_CRT_DISP_MODE, 0x05}, /* CRT/TV Display Mode Register, 16BPP*/ |
514 | {S1DREG_CRT_DISP_START0, 0x00}, /* CRT/TV Display Start Address Register 0*/ | 457 | {S1DREG_CRT_DISP_START0, 0x00}, /* CRT/TV Display Start Address Register 0*/ |
515 | {S1DREG_CRT_DISP_START1, 0x00}, /* CRT/TV Display Start Address Register 1*/ | 458 | {S1DREG_CRT_DISP_START1, 0x00}, /* CRT/TV Display Start Address Register 1*/ |
516 | {S1DREG_CRT_DISP_START2, 0x00}, /* CRT/TV Display Start Address Register 2*/ | 459 | {S1DREG_CRT_DISP_START2, 0x00}, /* CRT/TV Display Start Address Register 2*/ |
517 | {S1DREG_CRT_MEM_OFF0, 0x80}, /* CRT/TV Memory Address Offset Register 0*/ | 460 | {S1DREG_CRT_MEM_OFF0, 0x80}, /* CRT/TV Memory Address Offset Register 0*/ |
518 | {S1DREG_CRT_MEM_OFF1, 0x02}, /* CRT/TV Memory Address Offset Register 1*/ | 461 | {S1DREG_CRT_MEM_OFF1, 0x02}, /* CRT/TV Memory Address Offset Register 1*/ |
519 | {S1DREG_CRT_PIX_PAN, 0x00}, /* CRT/TV Pixel Panning Register*/ | 462 | {S1DREG_CRT_PIX_PAN, 0x00}, /* CRT/TV Pixel Panning Register*/ |
520 | {S1DREG_CRT_DISP_FIFO_HTC, 0x00}, /* CRT/TV Display FIFO High Threshold Control Register*/ | 463 | {S1DREG_CRT_DISP_FIFO_HTC, 0x00}, /* CRT/TV Display FIFO High Threshold Control Register*/ |
521 | {S1DREG_CRT_DISP_FIFO_LTC, 0x00}, /* CRT/TV Display FIFO Low Threshold Control Register*/ | 464 | {S1DREG_CRT_DISP_FIFO_LTC, 0x00}, /* CRT/TV Display FIFO Low Threshold Control Register*/ |
522 | {S1DREG_LCD_CUR_CTL, 0x00}, /* LCD Ink/Cursor Control Register*/ | 465 | {S1DREG_LCD_CUR_CTL, 0x00}, /* LCD Ink/Cursor Control Register*/ |
523 | {S1DREG_LCD_CUR_START, 0x01}, /* LCD Ink/Cursor Start Address Register*/ | 466 | {S1DREG_LCD_CUR_START, 0x01}, /* LCD Ink/Cursor Start Address Register*/ |
524 | {S1DREG_LCD_CUR_XPOS0, 0x00}, /* LCD Cursor X Position Register 0*/ | 467 | {S1DREG_LCD_CUR_XPOS0, 0x00}, /* LCD Cursor X Position Register 0*/ |
525 | {S1DREG_LCD_CUR_XPOS1, 0x00}, /* LCD Cursor X Position Register 1*/ | 468 | {S1DREG_LCD_CUR_XPOS1, 0x00}, /* LCD Cursor X Position Register 1*/ |
526 | {S1DREG_LCD_CUR_YPOS0, 0x00}, /* LCD Cursor Y Position Register 0*/ | 469 | {S1DREG_LCD_CUR_YPOS0, 0x00}, /* LCD Cursor Y Position Register 0*/ |
527 | {S1DREG_LCD_CUR_YPOS1, 0x00}, /* LCD Cursor Y Position Register 1*/ | 470 | {S1DREG_LCD_CUR_YPOS1, 0x00}, /* LCD Cursor Y Position Register 1*/ |
528 | {S1DREG_LCD_CUR_BCTL0, 0x00}, /* LCD Ink/Cursor Blue Color 0 Register*/ | 471 | {S1DREG_LCD_CUR_BCTL0, 0x00}, /* LCD Ink/Cursor Blue Color 0 Register*/ |
529 | {S1DREG_LCD_CUR_GCTL0, 0x00}, /* LCD Ink/Cursor Green Color 0 Register*/ | 472 | {S1DREG_LCD_CUR_GCTL0, 0x00}, /* LCD Ink/Cursor Green Color 0 Register*/ |
530 | {S1DREG_LCD_CUR_RCTL0, 0x00}, /* LCD Ink/Cursor Red Color 0 Register*/ | 473 | {S1DREG_LCD_CUR_RCTL0, 0x00}, /* LCD Ink/Cursor Red Color 0 Register*/ |
531 | {S1DREG_LCD_CUR_BCTL1, 0x1F}, /* LCD Ink/Cursor Blue Color 1 Register*/ | 474 | {S1DREG_LCD_CUR_BCTL1, 0x1F}, /* LCD Ink/Cursor Blue Color 1 Register*/ |
532 | {S1DREG_LCD_CUR_GCTL1, 0x3F}, /* LCD Ink/Cursor Green Color 1 Register*/ | 475 | {S1DREG_LCD_CUR_GCTL1, 0x3F}, /* LCD Ink/Cursor Green Color 1 Register*/ |
533 | {S1DREG_LCD_CUR_RCTL1, 0x1F}, /* LCD Ink/Cursor Red Color 1 Register*/ | 476 | {S1DREG_LCD_CUR_RCTL1, 0x1F}, /* LCD Ink/Cursor Red Color 1 Register*/ |
534 | {S1DREG_LCD_CUR_FIFO_HTC, 0x00}, /* LCD Ink/Cursor FIFO Threshold Register*/ | 477 | {S1DREG_LCD_CUR_FIFO_HTC, 0x00}, /* LCD Ink/Cursor FIFO Threshold Register*/ |
535 | {S1DREG_CRT_CUR_CTL, 0x00}, /* CRT/TV Ink/Cursor Control Register*/ | 478 | {S1DREG_CRT_CUR_CTL, 0x00}, /* CRT/TV Ink/Cursor Control Register*/ |
536 | {S1DREG_CRT_CUR_START, 0x01}, /* CRT/TV Ink/Cursor Start Address Register*/ | 479 | {S1DREG_CRT_CUR_START, 0x01}, /* CRT/TV Ink/Cursor Start Address Register*/ |
537 | {S1DREG_CRT_CUR_XPOS0, 0x00}, /* CRT/TV Cursor X Position Register 0*/ | 480 | {S1DREG_CRT_CUR_XPOS0, 0x00}, /* CRT/TV Cursor X Position Register 0*/ |
538 | {S1DREG_CRT_CUR_XPOS1, 0x00}, /* CRT/TV Cursor X Position Register 1*/ | 481 | {S1DREG_CRT_CUR_XPOS1, 0x00}, /* CRT/TV Cursor X Position Register 1*/ |
539 | {S1DREG_CRT_CUR_YPOS0, 0x00}, /* CRT/TV Cursor Y Position Register 0*/ | 482 | {S1DREG_CRT_CUR_YPOS0, 0x00}, /* CRT/TV Cursor Y Position Register 0*/ |
540 | {S1DREG_CRT_CUR_YPOS1, 0x00}, /* CRT/TV Cursor Y Position Register 1*/ | 483 | {S1DREG_CRT_CUR_YPOS1, 0x00}, /* CRT/TV Cursor Y Position Register 1*/ |
541 | {S1DREG_CRT_CUR_BCTL0, 0x00}, /* CRT/TV Ink/Cursor Blue Color 0 Register*/ | 484 | {S1DREG_CRT_CUR_BCTL0, 0x00}, /* CRT/TV Ink/Cursor Blue Color 0 Register*/ |
542 | {S1DREG_CRT_CUR_GCTL0, 0x00}, /* CRT/TV Ink/Cursor Green Color 0 Register*/ | 485 | {S1DREG_CRT_CUR_GCTL0, 0x00}, /* CRT/TV Ink/Cursor Green Color 0 Register*/ |
543 | {S1DREG_CRT_CUR_RCTL0, 0x00}, /* CRT/TV Ink/Cursor Red Color 0 Register*/ | 486 | {S1DREG_CRT_CUR_RCTL0, 0x00}, /* CRT/TV Ink/Cursor Red Color 0 Register*/ |
544 | {S1DREG_CRT_CUR_BCTL1, 0x1F}, /* CRT/TV Ink/Cursor Blue Color 1 Register*/ | 487 | {S1DREG_CRT_CUR_BCTL1, 0x1F}, /* CRT/TV Ink/Cursor Blue Color 1 Register*/ |
545 | {S1DREG_CRT_CUR_GCTL1, 0x3F}, /* CRT/TV Ink/Cursor Green Color 1 Register*/ | 488 | {S1DREG_CRT_CUR_GCTL1, 0x3F}, /* CRT/TV Ink/Cursor Green Color 1 Register*/ |
546 | {S1DREG_CRT_CUR_RCTL1, 0x1F}, /* CRT/TV Ink/Cursor Red Color 1 Register*/ | 489 | {S1DREG_CRT_CUR_RCTL1, 0x1F}, /* CRT/TV Ink/Cursor Red Color 1 Register*/ |
547 | {S1DREG_CRT_CUR_FIFO_HTC, 0x00}, /* CRT/TV Ink/Cursor FIFO Threshold Register*/ | 490 | {S1DREG_CRT_CUR_FIFO_HTC, 0x00}, /* CRT/TV Ink/Cursor FIFO Threshold Register*/ |
548 | {S1DREG_BBLT_CTL0, 0x00}, /* BitBlt Control Register 0*/ | 491 | {S1DREG_BBLT_CTL0, 0x00}, /* BitBlt Control Register 0*/ |
549 | {S1DREG_BBLT_CTL1, 0x01}, /* BitBlt Control Register 1*/ | 492 | {S1DREG_BBLT_CTL1, 0x01}, /* BitBlt Control Register 1*/ |
550 | {S1DREG_BBLT_CC_EXP, 0x00}, /* BitBlt ROP Code/Color Expansion Register*/ | 493 | {S1DREG_BBLT_CC_EXP, 0x00}, /* BitBlt ROP Code/Color Expansion Register*/ |
551 | {S1DREG_BBLT_OP, 0x00}, /* BitBlt Operation Register*/ | 494 | {S1DREG_BBLT_OP, 0x00}, /* BitBlt Operation Register*/ |
552 | {S1DREG_BBLT_SRC_START0, 0x00}, /* BitBlt Source Start Address Register 0*/ | 495 | {S1DREG_BBLT_SRC_START0, 0x00}, /* BitBlt Source Start Address Register 0*/ |
553 | {S1DREG_BBLT_SRC_START1, 0x00}, /* BitBlt Source Start Address Register 1*/ | 496 | {S1DREG_BBLT_SRC_START1, 0x00}, /* BitBlt Source Start Address Register 1*/ |
554 | {S1DREG_BBLT_SRC_START2, 0x00}, /* BitBlt Source Start Address Register 2*/ | 497 | {S1DREG_BBLT_SRC_START2, 0x00}, /* BitBlt Source Start Address Register 2*/ |
555 | {S1DREG_BBLT_DST_START0, 0x00}, /* BitBlt Destination Start Address Register 0*/ | 498 | {S1DREG_BBLT_DST_START0, 0x00}, /* BitBlt Destination Start Address Register 0*/ |
556 | {S1DREG_BBLT_DST_START1, 0x00}, /* BitBlt Destination Start Address Register 1*/ | 499 | {S1DREG_BBLT_DST_START1, 0x00}, /* BitBlt Destination Start Address Register 1*/ |
557 | {S1DREG_BBLT_DST_START2, 0x00}, /* BitBlt Destination Start Address Register 2*/ | 500 | {S1DREG_BBLT_DST_START2, 0x00}, /* BitBlt Destination Start Address Register 2*/ |
558 | {S1DREG_BBLT_MEM_OFF0, 0x00}, /* BitBlt Memory Address Offset Register 0*/ | 501 | {S1DREG_BBLT_MEM_OFF0, 0x00}, /* BitBlt Memory Address Offset Register 0*/ |
559 | {S1DREG_BBLT_MEM_OFF1, 0x00}, /* BitBlt Memory Address Offset Register 1*/ | 502 | {S1DREG_BBLT_MEM_OFF1, 0x00}, /* BitBlt Memory Address Offset Register 1*/ |
560 | {S1DREG_BBLT_WIDTH0, 0x00}, /* BitBlt Width Register 0*/ | 503 | {S1DREG_BBLT_WIDTH0, 0x00}, /* BitBlt Width Register 0*/ |
561 | {S1DREG_BBLT_WIDTH1, 0x00}, /* BitBlt Width Register 1*/ | 504 | {S1DREG_BBLT_WIDTH1, 0x00}, /* BitBlt Width Register 1*/ |
562 | {S1DREG_BBLT_HEIGHT0, 0x00}, /* BitBlt Height Register 0*/ | 505 | {S1DREG_BBLT_HEIGHT0, 0x00}, /* BitBlt Height Register 0*/ |
563 | {S1DREG_BBLT_HEIGHT1, 0x00}, /* BitBlt Height Register 1*/ | 506 | {S1DREG_BBLT_HEIGHT1, 0x00}, /* BitBlt Height Register 1*/ |
564 | {S1DREG_BBLT_BGC0, 0x00}, /* BitBlt Background Color Register 0*/ | 507 | {S1DREG_BBLT_BGC0, 0x00}, /* BitBlt Background Color Register 0*/ |
565 | {S1DREG_BBLT_BGC1, 0x00}, /* BitBlt Background Color Register 1*/ | 508 | {S1DREG_BBLT_BGC1, 0x00}, /* BitBlt Background Color Register 1*/ |
566 | {S1DREG_BBLT_FGC0, 0x00}, /* BitBlt Foreground Color Register 0*/ | 509 | {S1DREG_BBLT_FGC0, 0x00}, /* BitBlt Foreground Color Register 0*/ |
567 | {S1DREG_BBLT_FGC1, 0x00}, /* BitBlt Foreground Color Register 1*/ | 510 | {S1DREG_BBLT_FGC1, 0x00}, /* BitBlt Foreground Color Register 1*/ |
568 | {S1DREG_LKUP_MODE, 0x00}, /* Look-Up Table Mode Register*/ | 511 | {S1DREG_LKUP_MODE, 0x00}, /* Look-Up Table Mode Register*/ |
569 | {S1DREG_LKUP_ADDR, 0x00}, /* Look-Up Table Address Register*/ | 512 | {S1DREG_LKUP_ADDR, 0x00}, /* Look-Up Table Address Register*/ |
570 | {S1DREG_PS_CNF, 0x00}, /* Power Save Configuration Register*/ | 513 | {S1DREG_PS_CNF, 0x00}, /* Power Save Configuration Register*/ |
571 | {S1DREG_PS_STATUS, 0x00}, /* Power Save Status Register*/ | 514 | {S1DREG_PS_STATUS, 0x00}, /* Power Save Status Register*/ |
572 | {S1DREG_CPU2MEM_WDOGT, 0x00}, /* CPU-to-Memory Access Watchdog Timer Register*/ | 515 | {S1DREG_CPU2MEM_WDOGT, 0x00}, /* CPU-to-Memory Access Watchdog Timer Register*/ |
573 | {S1DREG_COM_DISP_MODE, 0x01}, /* Display Mode Register, LCD only*/ | 516 | {S1DREG_COM_DISP_MODE, 0x01}, /* Display Mode Register, LCD only*/ |
574 | }; | 517 | }; |
575 | 518 | ||
576 | static u64 s1dfb_dmamask = 0xffffffffUL; | 519 | static u64 s1dfb_dmamask = DMA_BIT_MASK(32); |
577 | 520 | ||
578 | static struct s1d13xxxfb_pdata yl_9200_s1dfb_pdata = { | 521 | static struct s1d13xxxfb_pdata yl9200_s1dfb_pdata = { |
579 | .initregs = yl_9200_s1dfb_initregs, | 522 | .initregs = yl9200_s1dfb_initregs, |
580 | .initregssize = ARRAY_SIZE(yl_9200_s1dfb_initregs), | 523 | .initregssize = ARRAY_SIZE(yl9200_s1dfb_initregs), |
581 | .platform_init_video = yl_9200_init_video, | 524 | .platform_init_video = yl9200_init_video, |
582 | }; | 525 | }; |
583 | 526 | ||
584 | static struct resource yl_9200_s1dfb_resource[] = { | 527 | static struct resource yl9200_s1dfb_resource[] = { |
585 | [0] = { /* video mem */ | 528 | [0] = { /* video mem */ |
586 | .name = "s1d13xxxfb memory", | 529 | .name = "s1d13xxxfb memory", |
587 | /* .name = "s1d13806 memory",*/ | 530 | .start = AT91_FB_VMEM_BASE, |
588 | .start = AT91_FB_VMEM_BASE, | 531 | .end = AT91_FB_VMEM_BASE + AT91_FB_VMEM_SIZE -1, |
589 | .end = AT91_FB_VMEM_BASE + AT91_FB_VMEM_SIZE -1, | 532 | .flags = IORESOURCE_MEM, |
590 | .flags = IORESOURCE_MEM, | ||
591 | }, | 533 | }, |
592 | [1] = { /* video registers */ | 534 | [1] = { /* video registers */ |
593 | .name = "s1d13xxxfb registers", | 535 | .name = "s1d13xxxfb registers", |
594 | /* .name = "s1d13806 registers",*/ | 536 | .start = AT91_FB_REG_BASE, |
595 | .start = AT91_FB_REG_BASE, | 537 | .end = AT91_FB_REG_BASE + AT91_FB_REG_SIZE -1, |
596 | .end = AT91_FB_REG_BASE + AT91_FB_REG_SIZE -1, | 538 | .flags = IORESOURCE_MEM, |
597 | .flags = IORESOURCE_MEM, | ||
598 | }, | 539 | }, |
599 | }; | 540 | }; |
600 | 541 | ||
601 | static struct platform_device yl_9200_s1dfb_device = { | 542 | static struct platform_device yl9200_s1dfb_device = { |
602 | /*TODO S.Birtles , really we need the chip revision in here as well*/ | 543 | .name = "s1d13806fb", |
603 | .name = "s1d13806fb", | 544 | .id = -1, |
604 | /* .name = "s1d13506fb",*/ | 545 | .dev = { |
605 | .id = -1, | ||
606 | .dev = { | ||
607 | /*TODO theres a waring here!!*/ | ||
608 | /*WARNING: vmlinux.o(.data+0x2dbc): Section mismatch: reference to .init.text: (between 'yl_9200_s1dfb_pdata' and 's1dfb_dmamask')*/ | ||
609 | .dma_mask = &s1dfb_dmamask, | 546 | .dma_mask = &s1dfb_dmamask, |
610 | .coherent_dma_mask = 0xffffffff, | 547 | .coherent_dma_mask = DMA_BIT_MASK(32), |
611 | .platform_data = &yl_9200_s1dfb_pdata, | 548 | .platform_data = &yl9200_s1dfb_pdata, |
612 | }, | 549 | }, |
613 | .resource = yl_9200_s1dfb_resource, | 550 | .resource = yl9200_s1dfb_resource, |
614 | .num_resources = ARRAY_SIZE(yl_9200_s1dfb_resource), | 551 | .num_resources = ARRAY_SIZE(yl9200_s1dfb_resource), |
615 | }; | 552 | }; |
616 | 553 | ||
617 | void __init yl_9200_add_device_video(void) | 554 | void __init yl9200_add_device_video(void) |
618 | { | 555 | { |
619 | platform_device_register(&yl_9200_s1dfb_device); | 556 | platform_device_register(&yl9200_s1dfb_device); |
620 | } | 557 | } |
621 | #else | 558 | #else |
622 | void __init yl_9200_add_device_video(void) {} | 559 | void __init yl9200_add_device_video(void) {} |
623 | #endif | 560 | #endif |
624 | 561 | ||
625 | /*this is not called first , yl_9200_map_io is called first*/ | 562 | |
626 | static void __init yl_9200_board_init(void) | 563 | static void __init yl9200_board_init(void) |
627 | { | 564 | { |
628 | /* Serial */ | 565 | /* Serial */ |
629 | at91_add_device_serial(); | 566 | at91_add_device_serial(); |
630 | /* Ethernet */ | 567 | /* Ethernet */ |
631 | at91_add_device_eth(&yl_9200_eth_data); | 568 | at91_add_device_eth(&yl9200_eth_data); |
632 | /* USB Host */ | 569 | /* USB Host */ |
633 | at91_add_device_usbh(&yl_9200_usbh_data); | 570 | at91_add_device_usbh(&yl9200_usbh_data); |
634 | /* USB Device */ | 571 | /* USB Device */ |
635 | at91_add_device_udc(&yl_9200_udc_data); | 572 | at91_add_device_udc(&yl9200_udc_data); |
636 | /* pullup_pin it is actually active low, but this is not needed, driver sets it up */ | ||
637 | /*at91_set_multi_drive(yl_9200_udc_data.pullup_pin, 0);*/ | ||
638 | |||
639 | /* Compact Flash */ | ||
640 | /*at91_add_device_cf(&yl_9200_cf_data);*/ | ||
641 | |||
642 | /* I2C */ | 573 | /* I2C */ |
643 | at91_add_device_i2c(yl_9200_i2c_devices, ARRAY_SIZE(yl_9200_i2c_devices)); | 574 | at91_add_device_i2c(yl9200_i2c_devices, ARRAY_SIZE(yl9200_i2c_devices)); |
644 | /* SPI */ | 575 | /* MMC */ |
645 | /*TODO YL9200 we have 2 spi interfaces touch screen & CAN*/ | 576 | at91_add_device_mmc(0, &yl9200_mmc_data); |
646 | /* AT91_PIN_PA5, AT91_PIN_PA6 , are used on the max 485 NOT SPI*/ | ||
647 | |||
648 | /*touch screen and CAN*/ | ||
649 | at91_add_device_spi(yl_9200_spi_devices, ARRAY_SIZE(yl_9200_spi_devices)); | ||
650 | |||
651 | /*Basically the TS uses PB11 & PB10 , PB11 is configured by the SPI system BP10 IS NOT USED!!*/ | ||
652 | /* we need this incase the board is running without a touch screen*/ | ||
653 | #if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) | ||
654 | at91_init_device_ts(); /*init the touch screen device*/ | ||
655 | #endif | ||
656 | /* DataFlash card */ | ||
657 | at91_add_device_mmc(0, &yl_9200_mmc_data); | ||
658 | /* NAND */ | 577 | /* NAND */ |
659 | at91_add_device_nand(&yl_9200_nand_data); | 578 | at91_add_device_nand(&yl9200_nand_data); |
660 | /* NOR Flash */ | 579 | /* NOR Flash */ |
661 | platform_device_register(&yl_9200_flash); | 580 | platform_device_register(&yl9200_flash); |
662 | /* LEDs. Note!! this does not include the led's we passed for the processor status */ | 581 | #if defined(CONFIG_SPI_ATMEL) || defined(CONFIG_SPI_ATMEL_MODULE) |
663 | at91_gpio_leds(yl_9200_leds, ARRAY_SIZE(yl_9200_leds)); | 582 | /* SPI */ |
664 | /* VGA */ | 583 | at91_add_device_spi(yl9200_spi_devices, ARRAY_SIZE(yl9200_spi_devices)); |
665 | /*this is self registered by including the s1d13xxx chip in the kernel build*/ | 584 | /* Touchscreen */ |
666 | yl_9200_add_device_video(); | 585 | yl9200_add_device_ts(); |
586 | #endif | ||
587 | /* LEDs. */ | ||
588 | at91_gpio_leds(yl9200_leds, ARRAY_SIZE(yl9200_leds)); | ||
667 | /* Push Buttons */ | 589 | /* Push Buttons */ |
668 | yl_9200_add_device_buttons(); | 590 | yl9200_add_device_buttons(); |
669 | /*TODO fixup the Sounder */ | 591 | /* VGA */ |
670 | // yl_9200_add_device_sounder(yl_9200_sounder,ARRAY_SIZE(yl_9200_sounder)); | 592 | yl9200_add_device_video(); |
671 | |||
672 | } | 593 | } |
673 | 594 | ||
674 | MACHINE_START(YL9200, "uCdragon YL-9200") | 595 | MACHINE_START(YL9200, "uCdragon YL-9200") |
675 | /* Maintainer: S.Birtles*/ | 596 | /* Maintainer: S.Birtles */ |
676 | .phys_io = AT91_BASE_SYS, | 597 | .phys_io = AT91_BASE_SYS, |
677 | .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc, | 598 | .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc, |
678 | .boot_params = AT91_SDRAM_BASE + 0x100, | 599 | .boot_params = AT91_SDRAM_BASE + 0x100, |
679 | .timer = &at91rm9200_timer, | 600 | .timer = &at91rm9200_timer, |
680 | .map_io = yl_9200_map_io, | 601 | .map_io = yl9200_map_io, |
681 | .init_irq = yl_9200_init_irq, | 602 | .init_irq = yl9200_init_irq, |
682 | .init_machine = yl_9200_board_init, | 603 | .init_machine = yl9200_board_init, |
683 | MACHINE_END | 604 | MACHINE_END |
diff --git a/arch/arm/mach-at91/clock.c b/arch/arm/mach-at91/clock.c index a33dfe450726..464bdbbf74df 100644 --- a/arch/arm/mach-at91/clock.c +++ b/arch/arm/mach-at91/clock.c | |||
@@ -112,12 +112,34 @@ static void pmc_sys_mode(struct clk *clk, int is_on) | |||
112 | at91_sys_write(AT91_PMC_SCDR, clk->pmc_mask); | 112 | at91_sys_write(AT91_PMC_SCDR, clk->pmc_mask); |
113 | } | 113 | } |
114 | 114 | ||
115 | static void pmc_uckr_mode(struct clk *clk, int is_on) | ||
116 | { | ||
117 | unsigned int uckr = at91_sys_read(AT91_CKGR_UCKR); | ||
118 | |||
119 | if (is_on) { | ||
120 | is_on = AT91_PMC_LOCKU; | ||
121 | at91_sys_write(AT91_CKGR_UCKR, uckr | clk->pmc_mask); | ||
122 | } else | ||
123 | at91_sys_write(AT91_CKGR_UCKR, uckr & ~(clk->pmc_mask)); | ||
124 | |||
125 | do { | ||
126 | cpu_relax(); | ||
127 | } while ((at91_sys_read(AT91_PMC_SR) & AT91_PMC_LOCKU) != is_on); | ||
128 | } | ||
129 | |||
115 | /* USB function clocks (PLLB must be 48 MHz) */ | 130 | /* USB function clocks (PLLB must be 48 MHz) */ |
116 | static struct clk udpck = { | 131 | static struct clk udpck = { |
117 | .name = "udpck", | 132 | .name = "udpck", |
118 | .parent = &pllb, | 133 | .parent = &pllb, |
119 | .mode = pmc_sys_mode, | 134 | .mode = pmc_sys_mode, |
120 | }; | 135 | }; |
136 | static struct clk utmi_clk = { | ||
137 | .name = "utmi_clk", | ||
138 | .parent = &main_clk, | ||
139 | .pmc_mask = AT91_PMC_UPLLEN, /* in CKGR_UCKR */ | ||
140 | .mode = pmc_uckr_mode, | ||
141 | .type = CLK_TYPE_PLL, | ||
142 | }; | ||
121 | static struct clk uhpck = { | 143 | static struct clk uhpck = { |
122 | .name = "uhpck", | 144 | .name = "uhpck", |
123 | .parent = &pllb, | 145 | .parent = &pllb, |
@@ -361,7 +383,7 @@ static void __init init_programmable_clock(struct clk *clk) | |||
361 | 383 | ||
362 | static int at91_clk_show(struct seq_file *s, void *unused) | 384 | static int at91_clk_show(struct seq_file *s, void *unused) |
363 | { | 385 | { |
364 | u32 scsr, pcsr, sr; | 386 | u32 scsr, pcsr, uckr = 0, sr; |
365 | struct clk *clk; | 387 | struct clk *clk; |
366 | 388 | ||
367 | seq_printf(s, "SCSR = %8x\n", scsr = at91_sys_read(AT91_PMC_SCSR)); | 389 | seq_printf(s, "SCSR = %8x\n", scsr = at91_sys_read(AT91_PMC_SCSR)); |
@@ -369,7 +391,10 @@ static int at91_clk_show(struct seq_file *s, void *unused) | |||
369 | seq_printf(s, "MOR = %8x\n", at91_sys_read(AT91_CKGR_MOR)); | 391 | seq_printf(s, "MOR = %8x\n", at91_sys_read(AT91_CKGR_MOR)); |
370 | seq_printf(s, "MCFR = %8x\n", at91_sys_read(AT91_CKGR_MCFR)); | 392 | seq_printf(s, "MCFR = %8x\n", at91_sys_read(AT91_CKGR_MCFR)); |
371 | seq_printf(s, "PLLA = %8x\n", at91_sys_read(AT91_CKGR_PLLAR)); | 393 | seq_printf(s, "PLLA = %8x\n", at91_sys_read(AT91_CKGR_PLLAR)); |
372 | seq_printf(s, "PLLB = %8x\n", at91_sys_read(AT91_CKGR_PLLBR)); | 394 | if (!cpu_is_at91sam9rl()) |
395 | seq_printf(s, "PLLB = %8x\n", at91_sys_read(AT91_CKGR_PLLBR)); | ||
396 | if (cpu_is_at91cap9() || cpu_is_at91sam9rl()) | ||
397 | seq_printf(s, "UCKR = %8x\n", uckr = at91_sys_read(AT91_CKGR_UCKR)); | ||
373 | seq_printf(s, "MCKR = %8x\n", at91_sys_read(AT91_PMC_MCKR)); | 398 | seq_printf(s, "MCKR = %8x\n", at91_sys_read(AT91_PMC_MCKR)); |
374 | seq_printf(s, "SR = %8x\n", sr = at91_sys_read(AT91_PMC_SR)); | 399 | seq_printf(s, "SR = %8x\n", sr = at91_sys_read(AT91_PMC_SR)); |
375 | 400 | ||
@@ -382,6 +407,8 @@ static int at91_clk_show(struct seq_file *s, void *unused) | |||
382 | state = (scsr & clk->pmc_mask) ? "on" : "off"; | 407 | state = (scsr & clk->pmc_mask) ? "on" : "off"; |
383 | else if (clk->mode == pmc_periph_mode) | 408 | else if (clk->mode == pmc_periph_mode) |
384 | state = (pcsr & clk->pmc_mask) ? "on" : "off"; | 409 | state = (pcsr & clk->pmc_mask) ? "on" : "off"; |
410 | else if (clk->mode == pmc_uckr_mode) | ||
411 | state = (uckr & clk->pmc_mask) ? "on" : "off"; | ||
385 | else if (clk->pmc_mask) | 412 | else if (clk->pmc_mask) |
386 | state = (sr & clk->pmc_mask) ? "on" : "off"; | 413 | state = (sr & clk->pmc_mask) ? "on" : "off"; |
387 | else if (clk == &clk32k || clk == &main_clk) | 414 | else if (clk == &clk32k || clk == &main_clk) |
@@ -488,14 +515,19 @@ static unsigned __init at91_pll_calc(unsigned main_freq, unsigned out_freq) | |||
488 | /* | 515 | /* |
489 | * PLL input between 1MHz and 32MHz per spec, but lower | 516 | * PLL input between 1MHz and 32MHz per spec, but lower |
490 | * frequences seem necessary in some cases so allow 100K. | 517 | * frequences seem necessary in some cases so allow 100K. |
518 | * Warning: some newer products need 2MHz min. | ||
491 | */ | 519 | */ |
492 | input = main_freq / i; | 520 | input = main_freq / i; |
521 | if (cpu_is_at91sam9g20() && input < 2000000) | ||
522 | continue; | ||
493 | if (input < 100000) | 523 | if (input < 100000) |
494 | continue; | 524 | continue; |
495 | if (input > 32000000) | 525 | if (input > 32000000) |
496 | continue; | 526 | continue; |
497 | 527 | ||
498 | mul1 = out_freq / input; | 528 | mul1 = out_freq / input; |
529 | if (cpu_is_at91sam9g20() && mul > 63) | ||
530 | continue; | ||
499 | if (mul1 > 2048) | 531 | if (mul1 > 2048) |
500 | continue; | 532 | continue; |
501 | if (mul1 < 2) | 533 | if (mul1 < 2) |
@@ -555,7 +587,8 @@ int __init at91_clock_init(unsigned long main_clock) | |||
555 | 587 | ||
556 | /* report if PLLA is more than mildly overclocked */ | 588 | /* report if PLLA is more than mildly overclocked */ |
557 | plla.rate_hz = at91_pll_rate(&plla, main_clock, at91_sys_read(AT91_CKGR_PLLAR)); | 589 | plla.rate_hz = at91_pll_rate(&plla, main_clock, at91_sys_read(AT91_CKGR_PLLAR)); |
558 | if (plla.rate_hz > 209000000) | 590 | if ((!cpu_is_at91sam9g20() && plla.rate_hz > 209000000) |
591 | || (cpu_is_at91sam9g20() && plla.rate_hz > 800000000)) | ||
559 | pr_info("Clocks: PLLA overclocked, %ld MHz\n", plla.rate_hz / 1000000); | 592 | pr_info("Clocks: PLLA overclocked, %ld MHz\n", plla.rate_hz / 1000000); |
560 | 593 | ||
561 | /* | 594 | /* |
@@ -570,7 +603,7 @@ int __init at91_clock_init(unsigned long main_clock) | |||
570 | uhpck.pmc_mask = AT91RM9200_PMC_UHP; | 603 | uhpck.pmc_mask = AT91RM9200_PMC_UHP; |
571 | udpck.pmc_mask = AT91RM9200_PMC_UDP; | 604 | udpck.pmc_mask = AT91RM9200_PMC_UDP; |
572 | at91_sys_write(AT91_PMC_SCER, AT91RM9200_PMC_MCKUDP); | 605 | at91_sys_write(AT91_PMC_SCER, AT91RM9200_PMC_MCKUDP); |
573 | } else if (cpu_is_at91sam9260() || cpu_is_at91sam9261() || cpu_is_at91sam9263()) { | 606 | } else if (cpu_is_at91sam9260() || cpu_is_at91sam9261() || cpu_is_at91sam9263() || cpu_is_at91sam9g20()) { |
574 | uhpck.pmc_mask = AT91SAM926x_PMC_UHP; | 607 | uhpck.pmc_mask = AT91SAM926x_PMC_UHP; |
575 | udpck.pmc_mask = AT91SAM926x_PMC_UDP; | 608 | udpck.pmc_mask = AT91SAM926x_PMC_UDP; |
576 | } else if (cpu_is_at91cap9()) { | 609 | } else if (cpu_is_at91cap9()) { |
@@ -582,6 +615,17 @@ int __init at91_clock_init(unsigned long main_clock) | |||
582 | uhpck.rate_hz = at91_usb_rate(&pllb, pllb.rate_hz, at91_pllb_usb_init); | 615 | uhpck.rate_hz = at91_usb_rate(&pllb, pllb.rate_hz, at91_pllb_usb_init); |
583 | 616 | ||
584 | /* | 617 | /* |
618 | * USB HS clock init | ||
619 | */ | ||
620 | if (cpu_is_at91cap9() || cpu_is_at91sam9rl()) { | ||
621 | /* | ||
622 | * multiplier is hard-wired to 40 | ||
623 | * (obtain the USB High Speed 480 MHz when input is 12 MHz) | ||
624 | */ | ||
625 | utmi_clk.rate_hz = 40 * utmi_clk.parent->rate_hz; | ||
626 | } | ||
627 | |||
628 | /* | ||
585 | * MCK and CPU derive from one of those primary clocks. | 629 | * MCK and CPU derive from one of those primary clocks. |
586 | * For now, assume this parentage won't change. | 630 | * For now, assume this parentage won't change. |
587 | */ | 631 | */ |
@@ -591,13 +635,21 @@ int __init at91_clock_init(unsigned long main_clock) | |||
591 | freq /= (1 << ((mckr & AT91_PMC_PRES) >> 2)); /* prescale */ | 635 | freq /= (1 << ((mckr & AT91_PMC_PRES) >> 2)); /* prescale */ |
592 | if (cpu_is_at91rm9200()) | 636 | if (cpu_is_at91rm9200()) |
593 | mck.rate_hz = freq / (1 + ((mckr & AT91_PMC_MDIV) >> 8)); /* mdiv */ | 637 | mck.rate_hz = freq / (1 + ((mckr & AT91_PMC_MDIV) >> 8)); /* mdiv */ |
594 | else | 638 | else if (cpu_is_at91sam9g20()) { |
595 | mck.rate_hz = freq / (1 << ((mckr & AT91_PMC_MDIV) >> 8)); /* mdiv */ | 639 | mck.rate_hz = (mckr & AT91_PMC_MDIV) ? |
640 | freq / ((mckr & AT91_PMC_MDIV) >> 7) : freq; /* mdiv ; (x >> 7) = ((x >> 8) * 2) */ | ||
641 | if (mckr & AT91_PMC_PDIV) | ||
642 | freq /= 2; /* processor clock division */ | ||
643 | } else | ||
644 | mck.rate_hz = freq / (1 << ((mckr & AT91_PMC_MDIV) >> 8)); /* mdiv */ | ||
596 | 645 | ||
597 | /* Register the PMC's standard clocks */ | 646 | /* Register the PMC's standard clocks */ |
598 | for (i = 0; i < ARRAY_SIZE(standard_pmc_clocks); i++) | 647 | for (i = 0; i < ARRAY_SIZE(standard_pmc_clocks); i++) |
599 | list_add_tail(&standard_pmc_clocks[i]->node, &clocks); | 648 | list_add_tail(&standard_pmc_clocks[i]->node, &clocks); |
600 | 649 | ||
650 | if (cpu_is_at91cap9() || cpu_is_at91sam9rl()) | ||
651 | list_add_tail(&utmi_clk.node, &clocks); | ||
652 | |||
601 | /* MCK and CPU clock are "always on" */ | 653 | /* MCK and CPU clock are "always on" */ |
602 | clk_enable(&mck); | 654 | clk_enable(&mck); |
603 | 655 | ||
diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c index aa863c157708..8ab4feb1ec5b 100644 --- a/arch/arm/mach-at91/pm.c +++ b/arch/arm/mach-at91/pm.c | |||
@@ -202,7 +202,7 @@ static int at91_pm_verify_clocks(void) | |||
202 | pr_debug("AT91: PM - Suspend-to-RAM with USB still active\n"); | 202 | pr_debug("AT91: PM - Suspend-to-RAM with USB still active\n"); |
203 | return 0; | 203 | return 0; |
204 | } | 204 | } |
205 | } else if (cpu_is_at91sam9260() || cpu_is_at91sam9261() || cpu_is_at91sam9263()) { | 205 | } else if (cpu_is_at91sam9260() || cpu_is_at91sam9261() || cpu_is_at91sam9263() || cpu_is_at91sam9g20()) { |
206 | if ((scsr & (AT91SAM926x_PMC_UHP | AT91SAM926x_PMC_UDP)) != 0) { | 206 | if ((scsr & (AT91SAM926x_PMC_UHP | AT91SAM926x_PMC_UDP)) != 0) { |
207 | pr_debug("AT91: PM - Suspend-to-RAM with USB still active\n"); | 207 | pr_debug("AT91: PM - Suspend-to-RAM with USB still active\n"); |
208 | return 0; | 208 | return 0; |
diff --git a/arch/arm/mach-ep93xx/clock.c b/arch/arm/mach-ep93xx/clock.c index 9d7515c36bff..f62c35500bb7 100644 --- a/arch/arm/mach-ep93xx/clock.c +++ b/arch/arm/mach-ep93xx/clock.c | |||
@@ -74,6 +74,7 @@ struct clk *clk_get(struct device *dev, const char *id) | |||
74 | 74 | ||
75 | return ERR_PTR(-ENOENT); | 75 | return ERR_PTR(-ENOENT); |
76 | } | 76 | } |
77 | EXPORT_SYMBOL(clk_get); | ||
77 | 78 | ||
78 | int clk_enable(struct clk *clk) | 79 | int clk_enable(struct clk *clk) |
79 | { | 80 | { |
@@ -86,6 +87,7 @@ int clk_enable(struct clk *clk) | |||
86 | 87 | ||
87 | return 0; | 88 | return 0; |
88 | } | 89 | } |
90 | EXPORT_SYMBOL(clk_enable); | ||
89 | 91 | ||
90 | void clk_disable(struct clk *clk) | 92 | void clk_disable(struct clk *clk) |
91 | { | 93 | { |
@@ -96,15 +98,18 @@ void clk_disable(struct clk *clk) | |||
96 | __raw_writel(value & ~clk->enable_mask, clk->enable_reg); | 98 | __raw_writel(value & ~clk->enable_mask, clk->enable_reg); |
97 | } | 99 | } |
98 | } | 100 | } |
101 | EXPORT_SYMBOL(clk_disable); | ||
99 | 102 | ||
100 | unsigned long clk_get_rate(struct clk *clk) | 103 | unsigned long clk_get_rate(struct clk *clk) |
101 | { | 104 | { |
102 | return clk->rate; | 105 | return clk->rate; |
103 | } | 106 | } |
107 | EXPORT_SYMBOL(clk_get_rate); | ||
104 | 108 | ||
105 | void clk_put(struct clk *clk) | 109 | void clk_put(struct clk *clk) |
106 | { | 110 | { |
107 | } | 111 | } |
112 | EXPORT_SYMBOL(clk_put); | ||
108 | 113 | ||
109 | 114 | ||
110 | 115 | ||
diff --git a/arch/arm/mach-footbridge/Makefile b/arch/arm/mach-footbridge/Makefile index 0694ad6b6476..32f8609e4f85 100644 --- a/arch/arm/mach-footbridge/Makefile +++ b/arch/arm/mach-footbridge/Makefile | |||
@@ -14,12 +14,10 @@ pci-$(CONFIG_ARCH_EBSA285_HOST) += ebsa285-pci.o | |||
14 | pci-$(CONFIG_ARCH_NETWINDER) += netwinder-pci.o | 14 | pci-$(CONFIG_ARCH_NETWINDER) += netwinder-pci.o |
15 | pci-$(CONFIG_ARCH_PERSONAL_SERVER) += personal-pci.o | 15 | pci-$(CONFIG_ARCH_PERSONAL_SERVER) += personal-pci.o |
16 | 16 | ||
17 | leds-$(CONFIG_ARCH_CO285) += ebsa285-leds.o | ||
18 | leds-$(CONFIG_ARCH_EBSA285) += ebsa285-leds.o | 17 | leds-$(CONFIG_ARCH_EBSA285) += ebsa285-leds.o |
19 | leds-$(CONFIG_ARCH_NETWINDER) += netwinder-leds.o | 18 | leds-$(CONFIG_ARCH_NETWINDER) += netwinder-leds.o |
20 | 19 | ||
21 | obj-$(CONFIG_ARCH_CATS) += cats-hw.o isa-timer.o | 20 | obj-$(CONFIG_ARCH_CATS) += cats-hw.o isa-timer.o |
22 | obj-$(CONFIG_ARCH_CO285) += co285.o dc21285-timer.o | ||
23 | obj-$(CONFIG_ARCH_EBSA285) += ebsa285.o dc21285-timer.o | 21 | obj-$(CONFIG_ARCH_EBSA285) += ebsa285.o dc21285-timer.o |
24 | obj-$(CONFIG_ARCH_NETWINDER) += netwinder-hw.o isa-timer.o | 22 | obj-$(CONFIG_ARCH_NETWINDER) += netwinder-hw.o isa-timer.o |
25 | obj-$(CONFIG_ARCH_PERSONAL_SERVER) += personal.o dc21285-timer.o | 23 | obj-$(CONFIG_ARCH_PERSONAL_SERVER) += personal.o dc21285-timer.o |
diff --git a/arch/arm/mach-footbridge/co285.c b/arch/arm/mach-footbridge/co285.c deleted file mode 100644 index 4545576ad8d9..000000000000 --- a/arch/arm/mach-footbridge/co285.c +++ /dev/null | |||
@@ -1,39 +0,0 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-footbridge/co285.c | ||
3 | * | ||
4 | * CO285 machine fixup | ||
5 | */ | ||
6 | #include <linux/init.h> | ||
7 | |||
8 | #include <asm/hardware/dec21285.h> | ||
9 | #include <asm/mach-types.h> | ||
10 | |||
11 | #include <asm/mach/arch.h> | ||
12 | |||
13 | #include "common.h" | ||
14 | |||
15 | static void __init | ||
16 | fixup_coebsa285(struct machine_desc *desc, struct tag *tags, | ||
17 | char **cmdline, struct meminfo *mi) | ||
18 | { | ||
19 | extern unsigned long boot_memory_end; | ||
20 | extern char boot_command_line[]; | ||
21 | |||
22 | mi->nr_banks = 1; | ||
23 | mi->bank[0].start = PHYS_OFFSET; | ||
24 | mi->bank[0].size = boot_memory_end; | ||
25 | mi->bank[0].node = 0; | ||
26 | |||
27 | *cmdline = boot_command_line; | ||
28 | } | ||
29 | |||
30 | MACHINE_START(CO285, "co-EBSA285") | ||
31 | /* Maintainer: Mark van Doesburg */ | ||
32 | .phys_io = DC21285_ARMCSR_BASE, | ||
33 | .io_pg_offst = ((0x7cf00000) >> 18) & 0xfffc, | ||
34 | .fixup = fixup_coebsa285, | ||
35 | .map_io = footbridge_map_io, | ||
36 | .init_irq = footbridge_init_irq, | ||
37 | .timer = &footbridge_timer, | ||
38 | MACHINE_END | ||
39 | |||
diff --git a/arch/arm/mach-footbridge/common.c b/arch/arm/mach-footbridge/common.c index ef29fc34ce65..b08ab507c052 100644 --- a/arch/arm/mach-footbridge/common.c +++ b/arch/arm/mach-footbridge/common.c | |||
@@ -177,25 +177,6 @@ static struct map_desc ebsa285_host_io_desc[] __initdata = { | |||
177 | #endif | 177 | #endif |
178 | }; | 178 | }; |
179 | 179 | ||
180 | /* | ||
181 | * The CO-ebsa285 mapping. | ||
182 | */ | ||
183 | static struct map_desc co285_io_desc[] __initdata = { | ||
184 | #ifdef CONFIG_ARCH_CO285 | ||
185 | { | ||
186 | .virtual = PCIO_BASE, | ||
187 | .pfn = __phys_to_pfn(DC21285_PCI_IO), | ||
188 | .length = PCIO_SIZE, | ||
189 | .type = MT_DEVICE, | ||
190 | }, { | ||
191 | .virtual = PCIMEM_BASE, | ||
192 | .pfn = __phys_to_pfn(DC21285_PCI_MEM), | ||
193 | .length = PCIMEM_SIZE, | ||
194 | .type = MT_DEVICE, | ||
195 | }, | ||
196 | #endif | ||
197 | }; | ||
198 | |||
199 | void __init footbridge_map_io(void) | 180 | void __init footbridge_map_io(void) |
200 | { | 181 | { |
201 | /* | 182 | /* |
@@ -208,8 +189,6 @@ void __init footbridge_map_io(void) | |||
208 | * Now, work out what we've got to map in addition on this | 189 | * Now, work out what we've got to map in addition on this |
209 | * platform. | 190 | * platform. |
210 | */ | 191 | */ |
211 | if (machine_is_co285()) | ||
212 | iotable_init(co285_io_desc, ARRAY_SIZE(co285_io_desc)); | ||
213 | if (footbridge_cfn_mode()) | 192 | if (footbridge_cfn_mode()) |
214 | iotable_init(ebsa285_host_io_desc, ARRAY_SIZE(ebsa285_host_io_desc)); | 193 | iotable_init(ebsa285_host_io_desc, ARRAY_SIZE(ebsa285_host_io_desc)); |
215 | } | 194 | } |
diff --git a/arch/arm/mach-footbridge/ebsa285-leds.c b/arch/arm/mach-footbridge/ebsa285-leds.c index a64e22226515..09c1fbc51876 100644 --- a/arch/arm/mach-footbridge/ebsa285-leds.c +++ b/arch/arm/mach-footbridge/ebsa285-leds.c | |||
@@ -128,7 +128,7 @@ static void ebsa285_leds_event(led_event_t evt) | |||
128 | 128 | ||
129 | static int __init leds_init(void) | 129 | static int __init leds_init(void) |
130 | { | 130 | { |
131 | if (machine_is_ebsa285() || machine_is_co285()) | 131 | if (machine_is_ebsa285()) |
132 | leds_event = ebsa285_leds_event; | 132 | leds_event = ebsa285_leds_event; |
133 | 133 | ||
134 | leds_event(led_start); | 134 | leds_event(led_start); |
diff --git a/arch/arm/mach-footbridge/time.c b/arch/arm/mach-footbridge/time.c index 5d02e95dede3..d5cfcda385d6 100644 --- a/arch/arm/mach-footbridge/time.c +++ b/arch/arm/mach-footbridge/time.c | |||
@@ -115,8 +115,7 @@ static int set_isa_cmos_time(void) | |||
115 | 115 | ||
116 | void __init isa_rtc_init(void) | 116 | void __init isa_rtc_init(void) |
117 | { | 117 | { |
118 | if (machine_is_co285() || | 118 | if (machine_is_personal_server()) |
119 | machine_is_personal_server()) | ||
120 | /* | 119 | /* |
121 | * Add-in 21285s shouldn't access the RTC | 120 | * Add-in 21285s shouldn't access the RTC |
122 | */ | 121 | */ |
diff --git a/arch/arm/mach-imx/dma.c b/arch/arm/mach-imx/dma.c index a59ff2987cb7..ee1c6f06ff64 100644 --- a/arch/arm/mach-imx/dma.c +++ b/arch/arm/mach-imx/dma.c | |||
@@ -410,7 +410,6 @@ void imx_dma_free(imx_dmach_t dma_ch) | |||
410 | 410 | ||
411 | /** | 411 | /** |
412 | * imx_dma_request_by_prio - find and request some of free channels best suiting requested priority | 412 | * imx_dma_request_by_prio - find and request some of free channels best suiting requested priority |
413 | * @dma_ch: i.MX DMA channel number | ||
414 | * @name: the driver/caller own non-%NULL identification | 413 | * @name: the driver/caller own non-%NULL identification |
415 | * @prio: one of the hardware distinguished priority level: | 414 | * @prio: one of the hardware distinguished priority level: |
416 | * %DMA_PRIO_HIGH, %DMA_PRIO_MEDIUM, %DMA_PRIO_LOW | 415 | * %DMA_PRIO_HIGH, %DMA_PRIO_MEDIUM, %DMA_PRIO_LOW |
@@ -420,11 +419,9 @@ void imx_dma_free(imx_dmach_t dma_ch) | |||
420 | * in the higher and then even lower priority groups. | 419 | * in the higher and then even lower priority groups. |
421 | * | 420 | * |
422 | * Return value: If there is no free channel to allocate, -%ENODEV is returned. | 421 | * Return value: If there is no free channel to allocate, -%ENODEV is returned. |
423 | * Zero value indicates successful channel allocation. | 422 | * On successful allocation channel is returned. |
424 | */ | 423 | */ |
425 | int | 424 | imx_dmach_t imx_dma_request_by_prio(const char *name, imx_dma_prio prio) |
426 | imx_dma_request_by_prio(imx_dmach_t * pdma_ch, const char *name, | ||
427 | imx_dma_prio prio) | ||
428 | { | 425 | { |
429 | int i; | 426 | int i; |
430 | int best; | 427 | int best; |
@@ -444,15 +441,13 @@ imx_dma_request_by_prio(imx_dmach_t * pdma_ch, const char *name, | |||
444 | 441 | ||
445 | for (i = best; i < IMX_DMA_CHANNELS; i++) { | 442 | for (i = best; i < IMX_DMA_CHANNELS; i++) { |
446 | if (!imx_dma_request(i, name)) { | 443 | if (!imx_dma_request(i, name)) { |
447 | *pdma_ch = i; | 444 | return i; |
448 | return 0; | ||
449 | } | 445 | } |
450 | } | 446 | } |
451 | 447 | ||
452 | for (i = best - 1; i >= 0; i--) { | 448 | for (i = best - 1; i >= 0; i--) { |
453 | if (!imx_dma_request(i, name)) { | 449 | if (!imx_dma_request(i, name)) { |
454 | *pdma_ch = i; | 450 | return i; |
455 | return 0; | ||
456 | } | 451 | } |
457 | } | 452 | } |
458 | 453 | ||
diff --git a/arch/arm/mach-integrator/Makefile b/arch/arm/mach-integrator/Makefile index 158daaf9e3b0..6a5ef8d30b10 100644 --- a/arch/arm/mach-integrator/Makefile +++ b/arch/arm/mach-integrator/Makefile | |||
@@ -4,7 +4,7 @@ | |||
4 | 4 | ||
5 | # Object file lists. | 5 | # Object file lists. |
6 | 6 | ||
7 | obj-y := clock.o core.o lm.o time.o | 7 | obj-y := clock.o core.o lm.o |
8 | obj-$(CONFIG_ARCH_INTEGRATOR_AP) += integrator_ap.o | 8 | obj-$(CONFIG_ARCH_INTEGRATOR_AP) += integrator_ap.o |
9 | obj-$(CONFIG_ARCH_INTEGRATOR_CP) += integrator_cp.o | 9 | obj-$(CONFIG_ARCH_INTEGRATOR_CP) += integrator_cp.o |
10 | 10 | ||
diff --git a/arch/arm/mach-integrator/time.c b/arch/arm/mach-integrator/time.c deleted file mode 100644 index 8508a0db3eaf..000000000000 --- a/arch/arm/mach-integrator/time.c +++ /dev/null | |||
@@ -1,223 +0,0 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mach-integrator/time.c | ||
3 | * | ||
4 | * Copyright (C) 2000-2001 Deep Blue Solutions Ltd. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #include <linux/module.h> | ||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/time.h> | ||
13 | #include <linux/mc146818rtc.h> | ||
14 | #include <linux/interrupt.h> | ||
15 | #include <linux/init.h> | ||
16 | #include <linux/device.h> | ||
17 | #include <linux/amba/bus.h> | ||
18 | |||
19 | #include <asm/hardware.h> | ||
20 | #include <asm/io.h> | ||
21 | #include <asm/uaccess.h> | ||
22 | #include <asm/rtc.h> | ||
23 | |||
24 | #include <asm/mach/time.h> | ||
25 | |||
26 | #define RTC_DR (0) | ||
27 | #define RTC_MR (4) | ||
28 | #define RTC_STAT (8) | ||
29 | #define RTC_EOI (8) | ||
30 | #define RTC_LR (12) | ||
31 | #define RTC_CR (16) | ||
32 | #define RTC_CR_MIE (1 << 0) | ||
33 | |||
34 | extern int (*set_rtc)(void); | ||
35 | static void __iomem *rtc_base; | ||
36 | |||
37 | static int integrator_set_rtc(void) | ||
38 | { | ||
39 | __raw_writel(xtime.tv_sec, rtc_base + RTC_LR); | ||
40 | return 1; | ||
41 | } | ||
42 | |||
43 | static int integrator_rtc_read_alarm(struct rtc_wkalrm *alrm) | ||
44 | { | ||
45 | rtc_time_to_tm(readl(rtc_base + RTC_MR), &alrm->time); | ||
46 | return 0; | ||
47 | } | ||
48 | |||
49 | static inline int integrator_rtc_set_alarm(struct rtc_wkalrm *alrm) | ||
50 | { | ||
51 | unsigned long time; | ||
52 | int ret; | ||
53 | |||
54 | /* | ||
55 | * At the moment, we can only deal with non-wildcarded alarm times. | ||
56 | */ | ||
57 | ret = rtc_valid_tm(&alrm->time); | ||
58 | if (ret == 0) | ||
59 | ret = rtc_tm_to_time(&alrm->time, &time); | ||
60 | if (ret == 0) | ||
61 | writel(time, rtc_base + RTC_MR); | ||
62 | return ret; | ||
63 | } | ||
64 | |||
65 | static int integrator_rtc_read_time(struct rtc_time *tm) | ||
66 | { | ||
67 | rtc_time_to_tm(readl(rtc_base + RTC_DR), tm); | ||
68 | return 0; | ||
69 | } | ||
70 | |||
71 | /* | ||
72 | * Set the RTC time. Unfortunately, we can't accurately set | ||
73 | * the point at which the counter updates. | ||
74 | * | ||
75 | * Also, since RTC_LR is transferred to RTC_CR on next rising | ||
76 | * edge of the 1Hz clock, we must write the time one second | ||
77 | * in advance. | ||
78 | */ | ||
79 | static inline int integrator_rtc_set_time(struct rtc_time *tm) | ||
80 | { | ||
81 | unsigned long time; | ||
82 | int ret; | ||
83 | |||
84 | ret = rtc_tm_to_time(tm, &time); | ||
85 | if (ret == 0) | ||
86 | writel(time + 1, rtc_base + RTC_LR); | ||
87 | |||
88 | return ret; | ||
89 | } | ||
90 | |||
91 | static struct rtc_ops rtc_ops = { | ||
92 | .owner = THIS_MODULE, | ||
93 | .read_time = integrator_rtc_read_time, | ||
94 | .set_time = integrator_rtc_set_time, | ||
95 | .read_alarm = integrator_rtc_read_alarm, | ||
96 | .set_alarm = integrator_rtc_set_alarm, | ||
97 | }; | ||
98 | |||
99 | static irqreturn_t arm_rtc_interrupt(int irq, void *dev_id) | ||
100 | { | ||
101 | writel(0, rtc_base + RTC_EOI); | ||
102 | return IRQ_HANDLED; | ||
103 | } | ||
104 | |||
105 | static int rtc_probe(struct amba_device *dev, void *id) | ||
106 | { | ||
107 | int ret; | ||
108 | |||
109 | if (rtc_base) | ||
110 | return -EBUSY; | ||
111 | |||
112 | ret = amba_request_regions(dev, NULL); | ||
113 | if (ret) | ||
114 | goto out; | ||
115 | |||
116 | rtc_base = ioremap(dev->res.start, SZ_4K); | ||
117 | if (!rtc_base) { | ||
118 | ret = -ENOMEM; | ||
119 | goto res_out; | ||
120 | } | ||
121 | |||
122 | __raw_writel(0, rtc_base + RTC_CR); | ||
123 | __raw_writel(0, rtc_base + RTC_EOI); | ||
124 | |||
125 | xtime.tv_sec = __raw_readl(rtc_base + RTC_DR); | ||
126 | |||
127 | /* note that 'dev' is merely used for irq disambiguation; | ||
128 | * it is not actually referenced in the irq handler | ||
129 | */ | ||
130 | ret = request_irq(dev->irq[0], arm_rtc_interrupt, IRQF_DISABLED, | ||
131 | "rtc-pl030", dev); | ||
132 | if (ret) | ||
133 | goto map_out; | ||
134 | |||
135 | ret = register_rtc(&rtc_ops); | ||
136 | if (ret) | ||
137 | goto irq_out; | ||
138 | |||
139 | set_rtc = integrator_set_rtc; | ||
140 | return 0; | ||
141 | |||
142 | irq_out: | ||
143 | free_irq(dev->irq[0], dev); | ||
144 | map_out: | ||
145 | iounmap(rtc_base); | ||
146 | rtc_base = NULL; | ||
147 | res_out: | ||
148 | amba_release_regions(dev); | ||
149 | out: | ||
150 | return ret; | ||
151 | } | ||
152 | |||
153 | static int rtc_remove(struct amba_device *dev) | ||
154 | { | ||
155 | set_rtc = NULL; | ||
156 | |||
157 | writel(0, rtc_base + RTC_CR); | ||
158 | |||
159 | free_irq(dev->irq[0], dev); | ||
160 | unregister_rtc(&rtc_ops); | ||
161 | |||
162 | iounmap(rtc_base); | ||
163 | rtc_base = NULL; | ||
164 | amba_release_regions(dev); | ||
165 | |||
166 | return 0; | ||
167 | } | ||
168 | |||
169 | static struct timespec rtc_delta; | ||
170 | |||
171 | static int rtc_suspend(struct amba_device *dev, pm_message_t state) | ||
172 | { | ||
173 | struct timespec rtc; | ||
174 | |||
175 | rtc.tv_sec = readl(rtc_base + RTC_DR); | ||
176 | rtc.tv_nsec = 0; | ||
177 | save_time_delta(&rtc_delta, &rtc); | ||
178 | |||
179 | return 0; | ||
180 | } | ||
181 | |||
182 | static int rtc_resume(struct amba_device *dev) | ||
183 | { | ||
184 | struct timespec rtc; | ||
185 | |||
186 | rtc.tv_sec = readl(rtc_base + RTC_DR); | ||
187 | rtc.tv_nsec = 0; | ||
188 | restore_time_delta(&rtc_delta, &rtc); | ||
189 | |||
190 | return 0; | ||
191 | } | ||
192 | |||
193 | static struct amba_id rtc_ids[] = { | ||
194 | { | ||
195 | .id = 0x00041030, | ||
196 | .mask = 0x000fffff, | ||
197 | }, | ||
198 | { 0, 0 }, | ||
199 | }; | ||
200 | |||
201 | static struct amba_driver rtc_driver = { | ||
202 | .drv = { | ||
203 | .name = "rtc-pl030", | ||
204 | }, | ||
205 | .probe = rtc_probe, | ||
206 | .remove = rtc_remove, | ||
207 | .suspend = rtc_suspend, | ||
208 | .resume = rtc_resume, | ||
209 | .id_table = rtc_ids, | ||
210 | }; | ||
211 | |||
212 | static int __init integrator_rtc_init(void) | ||
213 | { | ||
214 | return amba_driver_register(&rtc_driver); | ||
215 | } | ||
216 | |||
217 | static void __exit integrator_rtc_exit(void) | ||
218 | { | ||
219 | amba_driver_unregister(&rtc_driver); | ||
220 | } | ||
221 | |||
222 | module_init(integrator_rtc_init); | ||
223 | module_exit(integrator_rtc_exit); | ||
diff --git a/arch/arm/mach-ixp4xx/Kconfig b/arch/arm/mach-ixp4xx/Kconfig index e774447c0592..db8b5fe06c0d 100644 --- a/arch/arm/mach-ixp4xx/Kconfig +++ b/arch/arm/mach-ixp4xx/Kconfig | |||
@@ -125,6 +125,15 @@ config ARCH_IXDP4XX | |||
125 | depends on ARCH_IXDP425 || MACH_IXDP465 || MACH_KIXRP435 | 125 | depends on ARCH_IXDP425 || MACH_IXDP465 || MACH_KIXRP435 |
126 | default y | 126 | default y |
127 | 127 | ||
128 | config MACH_FSG | ||
129 | bool | ||
130 | prompt "Freecom FSG-3" | ||
131 | select PCI | ||
132 | help | ||
133 | Say 'Y' here if you want your kernel to support Freecom's | ||
134 | FSG-3 device. For more information on this platform, | ||
135 | see http://www.nslu2-linux.org/wiki/FSG3/HomePage | ||
136 | |||
128 | # | 137 | # |
129 | # Certain registers and IRQs are only enabled if supporting IXP465 CPUs | 138 | # Certain registers and IRQs are only enabled if supporting IXP465 CPUs |
130 | # | 139 | # |
diff --git a/arch/arm/mach-ixp4xx/Makefile b/arch/arm/mach-ixp4xx/Makefile index c1956882c48b..2e6bbf927a74 100644 --- a/arch/arm/mach-ixp4xx/Makefile +++ b/arch/arm/mach-ixp4xx/Makefile | |||
@@ -15,6 +15,7 @@ obj-pci-$(CONFIG_MACH_NAS100D) += nas100d-pci.o | |||
15 | obj-pci-$(CONFIG_MACH_DSMG600) += dsmg600-pci.o | 15 | obj-pci-$(CONFIG_MACH_DSMG600) += dsmg600-pci.o |
16 | obj-pci-$(CONFIG_MACH_GATEWAY7001) += gateway7001-pci.o | 16 | obj-pci-$(CONFIG_MACH_GATEWAY7001) += gateway7001-pci.o |
17 | obj-pci-$(CONFIG_MACH_WG302V2) += wg302v2-pci.o | 17 | obj-pci-$(CONFIG_MACH_WG302V2) += wg302v2-pci.o |
18 | obj-pci-$(CONFIG_MACH_FSG) += fsg-pci.o | ||
18 | 19 | ||
19 | obj-y += common.o | 20 | obj-y += common.o |
20 | 21 | ||
@@ -28,6 +29,7 @@ obj-$(CONFIG_MACH_NAS100D) += nas100d-setup.o | |||
28 | obj-$(CONFIG_MACH_DSMG600) += dsmg600-setup.o | 29 | obj-$(CONFIG_MACH_DSMG600) += dsmg600-setup.o |
29 | obj-$(CONFIG_MACH_GATEWAY7001) += gateway7001-setup.o | 30 | obj-$(CONFIG_MACH_GATEWAY7001) += gateway7001-setup.o |
30 | obj-$(CONFIG_MACH_WG302V2) += wg302v2-setup.o | 31 | obj-$(CONFIG_MACH_WG302V2) += wg302v2-setup.o |
32 | obj-$(CONFIG_MACH_FSG) += fsg-setup.o | ||
31 | 33 | ||
32 | obj-$(CONFIG_PCI) += $(obj-pci-$(CONFIG_PCI)) common-pci.o | 34 | obj-$(CONFIG_PCI) += $(obj-pci-$(CONFIG_PCI)) common-pci.o |
33 | obj-$(CONFIG_IXP4XX_QMGR) += ixp4xx_qmgr.o | 35 | obj-$(CONFIG_IXP4XX_QMGR) += ixp4xx_qmgr.o |
diff --git a/arch/arm/mach-ixp4xx/fsg-pci.c b/arch/arm/mach-ixp4xx/fsg-pci.c new file mode 100644 index 000000000000..f19f3f6feda1 --- /dev/null +++ b/arch/arm/mach-ixp4xx/fsg-pci.c | |||
@@ -0,0 +1,71 @@ | |||
1 | /* | ||
2 | * arch/arch/mach-ixp4xx/fsg-pci.c | ||
3 | * | ||
4 | * FSG board-level PCI initialization | ||
5 | * | ||
6 | * Author: Rod Whitby <rod@whitby.id.au> | ||
7 | * Maintainer: http://www.nslu2-linux.org/ | ||
8 | * | ||
9 | * based on ixdp425-pci.c: | ||
10 | * Copyright (C) 2002 Intel Corporation. | ||
11 | * Copyright (C) 2003-2004 MontaVista Software, Inc. | ||
12 | * | ||
13 | * This program is free software; you can redistribute it and/or modify | ||
14 | * it under the terms of the GNU General Public License version 2 as | ||
15 | * published by the Free Software Foundation. | ||
16 | * | ||
17 | */ | ||
18 | |||
19 | #include <linux/pci.h> | ||
20 | #include <linux/init.h> | ||
21 | #include <linux/irq.h> | ||
22 | |||
23 | #include <asm/mach/pci.h> | ||
24 | #include <asm/mach-types.h> | ||
25 | |||
26 | void __init fsg_pci_preinit(void) | ||
27 | { | ||
28 | set_irq_type(IRQ_FSG_PCI_INTA, IRQT_LOW); | ||
29 | set_irq_type(IRQ_FSG_PCI_INTB, IRQT_LOW); | ||
30 | set_irq_type(IRQ_FSG_PCI_INTC, IRQT_LOW); | ||
31 | |||
32 | ixp4xx_pci_preinit(); | ||
33 | } | ||
34 | |||
35 | static int __init fsg_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | ||
36 | { | ||
37 | static int pci_irq_table[FSG_PCI_IRQ_LINES] = { | ||
38 | IRQ_FSG_PCI_INTC, | ||
39 | IRQ_FSG_PCI_INTB, | ||
40 | IRQ_FSG_PCI_INTA, | ||
41 | }; | ||
42 | |||
43 | int irq = -1; | ||
44 | slot = slot - 11; | ||
45 | |||
46 | if (slot >= 1 && slot <= FSG_PCI_MAX_DEV && | ||
47 | pin >= 1 && pin <= FSG_PCI_IRQ_LINES) | ||
48 | irq = pci_irq_table[(slot - 1)]; | ||
49 | printk(KERN_INFO "%s: Mapped slot %d pin %d to IRQ %d\n", | ||
50 | __func__, slot, pin, irq); | ||
51 | |||
52 | return irq; | ||
53 | } | ||
54 | |||
55 | struct hw_pci fsg_pci __initdata = { | ||
56 | .nr_controllers = 1, | ||
57 | .preinit = fsg_pci_preinit, | ||
58 | .swizzle = pci_std_swizzle, | ||
59 | .setup = ixp4xx_setup, | ||
60 | .scan = ixp4xx_scan_bus, | ||
61 | .map_irq = fsg_map_irq, | ||
62 | }; | ||
63 | |||
64 | int __init fsg_pci_init(void) | ||
65 | { | ||
66 | if (machine_is_fsg()) | ||
67 | pci_common_init(&fsg_pci); | ||
68 | return 0; | ||
69 | } | ||
70 | |||
71 | subsys_initcall(fsg_pci_init); | ||
diff --git a/arch/arm/mach-ixp4xx/fsg-setup.c b/arch/arm/mach-ixp4xx/fsg-setup.c new file mode 100644 index 000000000000..0db3a909ae61 --- /dev/null +++ b/arch/arm/mach-ixp4xx/fsg-setup.c | |||
@@ -0,0 +1,276 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-ixp4xx/fsg-setup.c | ||
3 | * | ||
4 | * FSG board-setup | ||
5 | * | ||
6 | * Copyright (C) 2008 Rod Whitby <rod@whitby.id.au> | ||
7 | * | ||
8 | * based on ixdp425-setup.c: | ||
9 | * Copyright (C) 2003-2004 MontaVista Software, Inc. | ||
10 | * based on nslu2-power.c | ||
11 | * Copyright (C) 2005 Tower Technologies | ||
12 | * | ||
13 | * Author: Rod Whitby <rod@whitby.id.au> | ||
14 | * Maintainers: http://www.nslu2-linux.org/ | ||
15 | * | ||
16 | */ | ||
17 | |||
18 | #include <linux/if_ether.h> | ||
19 | #include <linux/irq.h> | ||
20 | #include <linux/serial.h> | ||
21 | #include <linux/serial_8250.h> | ||
22 | #include <linux/leds.h> | ||
23 | #include <linux/reboot.h> | ||
24 | #include <linux/i2c.h> | ||
25 | #include <linux/i2c-gpio.h> | ||
26 | |||
27 | #include <asm/mach-types.h> | ||
28 | #include <asm/mach/arch.h> | ||
29 | #include <asm/mach/flash.h> | ||
30 | #include <asm/io.h> | ||
31 | #include <asm/gpio.h> | ||
32 | |||
33 | static struct flash_platform_data fsg_flash_data = { | ||
34 | .map_name = "cfi_probe", | ||
35 | .width = 2, | ||
36 | }; | ||
37 | |||
38 | static struct resource fsg_flash_resource = { | ||
39 | .flags = IORESOURCE_MEM, | ||
40 | }; | ||
41 | |||
42 | static struct platform_device fsg_flash = { | ||
43 | .name = "IXP4XX-Flash", | ||
44 | .id = 0, | ||
45 | .dev = { | ||
46 | .platform_data = &fsg_flash_data, | ||
47 | }, | ||
48 | .num_resources = 1, | ||
49 | .resource = &fsg_flash_resource, | ||
50 | }; | ||
51 | |||
52 | static struct i2c_gpio_platform_data fsg_i2c_gpio_data = { | ||
53 | .sda_pin = FSG_SDA_PIN, | ||
54 | .scl_pin = FSG_SCL_PIN, | ||
55 | }; | ||
56 | |||
57 | static struct platform_device fsg_i2c_gpio = { | ||
58 | .name = "i2c-gpio", | ||
59 | .id = 0, | ||
60 | .dev = { | ||
61 | .platform_data = &fsg_i2c_gpio_data, | ||
62 | }, | ||
63 | }; | ||
64 | |||
65 | static struct i2c_board_info __initdata fsg_i2c_board_info [] = { | ||
66 | { | ||
67 | I2C_BOARD_INFO("rtc-isl1208", 0x6f), | ||
68 | }, | ||
69 | }; | ||
70 | |||
71 | static struct resource fsg_uart_resources[] = { | ||
72 | { | ||
73 | .start = IXP4XX_UART1_BASE_PHYS, | ||
74 | .end = IXP4XX_UART1_BASE_PHYS + 0x0fff, | ||
75 | .flags = IORESOURCE_MEM, | ||
76 | }, | ||
77 | { | ||
78 | .start = IXP4XX_UART2_BASE_PHYS, | ||
79 | .end = IXP4XX_UART2_BASE_PHYS + 0x0fff, | ||
80 | .flags = IORESOURCE_MEM, | ||
81 | } | ||
82 | }; | ||
83 | |||
84 | static struct plat_serial8250_port fsg_uart_data[] = { | ||
85 | { | ||
86 | .mapbase = IXP4XX_UART1_BASE_PHYS, | ||
87 | .membase = (char *)IXP4XX_UART1_BASE_VIRT + REG_OFFSET, | ||
88 | .irq = IRQ_IXP4XX_UART1, | ||
89 | .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, | ||
90 | .iotype = UPIO_MEM, | ||
91 | .regshift = 2, | ||
92 | .uartclk = IXP4XX_UART_XTAL, | ||
93 | }, | ||
94 | { | ||
95 | .mapbase = IXP4XX_UART2_BASE_PHYS, | ||
96 | .membase = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET, | ||
97 | .irq = IRQ_IXP4XX_UART2, | ||
98 | .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, | ||
99 | .iotype = UPIO_MEM, | ||
100 | .regshift = 2, | ||
101 | .uartclk = IXP4XX_UART_XTAL, | ||
102 | }, | ||
103 | { } | ||
104 | }; | ||
105 | |||
106 | static struct platform_device fsg_uart = { | ||
107 | .name = "serial8250", | ||
108 | .id = PLAT8250_DEV_PLATFORM, | ||
109 | .dev = { | ||
110 | .platform_data = fsg_uart_data, | ||
111 | }, | ||
112 | .num_resources = ARRAY_SIZE(fsg_uart_resources), | ||
113 | .resource = fsg_uart_resources, | ||
114 | }; | ||
115 | |||
116 | static struct platform_device fsg_leds = { | ||
117 | .name = "fsg-led", | ||
118 | .id = -1, | ||
119 | }; | ||
120 | |||
121 | /* Built-in 10/100 Ethernet MAC interfaces */ | ||
122 | static struct eth_plat_info fsg_plat_eth[] = { | ||
123 | { | ||
124 | .phy = 5, | ||
125 | .rxq = 3, | ||
126 | .txreadyq = 20, | ||
127 | }, { | ||
128 | .phy = 4, | ||
129 | .rxq = 4, | ||
130 | .txreadyq = 21, | ||
131 | } | ||
132 | }; | ||
133 | |||
134 | static struct platform_device fsg_eth[] = { | ||
135 | { | ||
136 | .name = "ixp4xx_eth", | ||
137 | .id = IXP4XX_ETH_NPEB, | ||
138 | .dev = { | ||
139 | .platform_data = fsg_plat_eth, | ||
140 | }, | ||
141 | }, { | ||
142 | .name = "ixp4xx_eth", | ||
143 | .id = IXP4XX_ETH_NPEC, | ||
144 | .dev = { | ||
145 | .platform_data = fsg_plat_eth + 1, | ||
146 | }, | ||
147 | } | ||
148 | }; | ||
149 | |||
150 | static struct platform_device *fsg_devices[] __initdata = { | ||
151 | &fsg_i2c_gpio, | ||
152 | &fsg_flash, | ||
153 | &fsg_leds, | ||
154 | &fsg_eth[0], | ||
155 | &fsg_eth[1], | ||
156 | }; | ||
157 | |||
158 | static irqreturn_t fsg_power_handler(int irq, void *dev_id) | ||
159 | { | ||
160 | /* Signal init to do the ctrlaltdel action, this will bypass init if | ||
161 | * it hasn't started and do a kernel_restart. | ||
162 | */ | ||
163 | ctrl_alt_del(); | ||
164 | |||
165 | return IRQ_HANDLED; | ||
166 | } | ||
167 | |||
168 | static irqreturn_t fsg_reset_handler(int irq, void *dev_id) | ||
169 | { | ||
170 | /* This is the paper-clip reset which does an emergency reboot. */ | ||
171 | printk(KERN_INFO "Restarting system.\n"); | ||
172 | machine_restart(NULL); | ||
173 | |||
174 | /* This should never be reached. */ | ||
175 | return IRQ_HANDLED; | ||
176 | } | ||
177 | |||
178 | static void __init fsg_init(void) | ||
179 | { | ||
180 | DECLARE_MAC_BUF(mac_buf); | ||
181 | uint8_t __iomem *f; | ||
182 | int i; | ||
183 | |||
184 | ixp4xx_sys_init(); | ||
185 | |||
186 | fsg_flash_resource.start = IXP4XX_EXP_BUS_BASE(0); | ||
187 | fsg_flash_resource.end = | ||
188 | IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1; | ||
189 | |||
190 | *IXP4XX_EXP_CS0 |= IXP4XX_FLASH_WRITABLE; | ||
191 | *IXP4XX_EXP_CS1 = *IXP4XX_EXP_CS0; | ||
192 | |||
193 | /* Configure CS2 for operation, 8bit and writable */ | ||
194 | *IXP4XX_EXP_CS2 = 0xbfff0002; | ||
195 | |||
196 | i2c_register_board_info(0, fsg_i2c_board_info, | ||
197 | ARRAY_SIZE(fsg_i2c_board_info)); | ||
198 | |||
199 | /* This is only useful on a modified machine, but it is valuable | ||
200 | * to have it first in order to see debug messages, and so that | ||
201 | * it does *not* get removed if platform_add_devices fails! | ||
202 | */ | ||
203 | (void)platform_device_register(&fsg_uart); | ||
204 | |||
205 | platform_add_devices(fsg_devices, ARRAY_SIZE(fsg_devices)); | ||
206 | |||
207 | if (request_irq(gpio_to_irq(FSG_RB_GPIO), &fsg_reset_handler, | ||
208 | IRQF_DISABLED | IRQF_TRIGGER_LOW, | ||
209 | "FSG reset button", NULL) < 0) { | ||
210 | |||
211 | printk(KERN_DEBUG "Reset Button IRQ %d not available\n", | ||
212 | gpio_to_irq(FSG_RB_GPIO)); | ||
213 | } | ||
214 | |||
215 | if (request_irq(gpio_to_irq(FSG_SB_GPIO), &fsg_power_handler, | ||
216 | IRQF_DISABLED | IRQF_TRIGGER_LOW, | ||
217 | "FSG power button", NULL) < 0) { | ||
218 | |||
219 | printk(KERN_DEBUG "Power Button IRQ %d not available\n", | ||
220 | gpio_to_irq(FSG_SB_GPIO)); | ||
221 | } | ||
222 | |||
223 | /* | ||
224 | * Map in a portion of the flash and read the MAC addresses. | ||
225 | * Since it is stored in BE in the flash itself, we need to | ||
226 | * byteswap it if we're in LE mode. | ||
227 | */ | ||
228 | f = ioremap(IXP4XX_EXP_BUS_BASE(0), 0x400000); | ||
229 | if (f) { | ||
230 | #ifdef __ARMEB__ | ||
231 | for (i = 0; i < 6; i++) { | ||
232 | fsg_plat_eth[0].hwaddr[i] = readb(f + 0x3C0422 + i); | ||
233 | fsg_plat_eth[1].hwaddr[i] = readb(f + 0x3C043B + i); | ||
234 | } | ||
235 | #else | ||
236 | |||
237 | /* | ||
238 | Endian-swapped reads from unaligned addresses are | ||
239 | required to extract the two MACs from the big-endian | ||
240 | Redboot config area in flash. | ||
241 | */ | ||
242 | |||
243 | fsg_plat_eth[0].hwaddr[0] = readb(f + 0x3C0421); | ||
244 | fsg_plat_eth[0].hwaddr[1] = readb(f + 0x3C0420); | ||
245 | fsg_plat_eth[0].hwaddr[2] = readb(f + 0x3C0427); | ||
246 | fsg_plat_eth[0].hwaddr[3] = readb(f + 0x3C0426); | ||
247 | fsg_plat_eth[0].hwaddr[4] = readb(f + 0x3C0425); | ||
248 | fsg_plat_eth[0].hwaddr[5] = readb(f + 0x3C0424); | ||
249 | |||
250 | fsg_plat_eth[1].hwaddr[0] = readb(f + 0x3C0439); | ||
251 | fsg_plat_eth[1].hwaddr[1] = readb(f + 0x3C043F); | ||
252 | fsg_plat_eth[1].hwaddr[2] = readb(f + 0x3C043E); | ||
253 | fsg_plat_eth[1].hwaddr[3] = readb(f + 0x3C043D); | ||
254 | fsg_plat_eth[1].hwaddr[4] = readb(f + 0x3C043C); | ||
255 | fsg_plat_eth[1].hwaddr[5] = readb(f + 0x3C0443); | ||
256 | #endif | ||
257 | iounmap(f); | ||
258 | } | ||
259 | printk(KERN_INFO "FSG: Using MAC address %s for port 0\n", | ||
260 | print_mac(mac_buf, fsg_plat_eth[0].hwaddr)); | ||
261 | printk(KERN_INFO "FSG: Using MAC address %s for port 1\n", | ||
262 | print_mac(mac_buf, fsg_plat_eth[1].hwaddr)); | ||
263 | |||
264 | } | ||
265 | |||
266 | MACHINE_START(FSG, "Freecom FSG-3") | ||
267 | /* Maintainer: www.nslu2-linux.org */ | ||
268 | .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS, | ||
269 | .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc, | ||
270 | .map_io = ixp4xx_map_io, | ||
271 | .init_irq = ixp4xx_init_irq, | ||
272 | .timer = &ixp4xx_timer, | ||
273 | .boot_params = 0x0100, | ||
274 | .init_machine = fsg_init, | ||
275 | MACHINE_END | ||
276 | |||
diff --git a/arch/arm/mach-kirkwood/Kconfig b/arch/arm/mach-kirkwood/Kconfig new file mode 100644 index 000000000000..3600cd9f0519 --- /dev/null +++ b/arch/arm/mach-kirkwood/Kconfig | |||
@@ -0,0 +1,25 @@ | |||
1 | if ARCH_KIRKWOOD | ||
2 | |||
3 | menu "Marvell Kirkwood Implementations" | ||
4 | |||
5 | config MACH_DB88F6281_BP | ||
6 | bool "Marvell DB-88F6281-BP Development Board" | ||
7 | help | ||
8 | Say 'Y' here if you want your kernel to support the | ||
9 | Marvell DB-88F6281-BP Development Board. | ||
10 | |||
11 | config MACH_RD88F6192_NAS | ||
12 | bool "Marvell RD-88F6192-NAS Reference Board" | ||
13 | help | ||
14 | Say 'Y' here if you want your kernel to support the | ||
15 | Marvell RD-88F6192-NAS Reference Board. | ||
16 | |||
17 | config MACH_RD88F6281 | ||
18 | bool "Marvell RD-88F6281 Reference Board" | ||
19 | help | ||
20 | Say 'Y' here if you want your kernel to support the | ||
21 | Marvell RD-88F6281 Reference Board. | ||
22 | |||
23 | endmenu | ||
24 | |||
25 | endif | ||
diff --git a/arch/arm/mach-kirkwood/Makefile b/arch/arm/mach-kirkwood/Makefile new file mode 100644 index 000000000000..e14bf40bfb07 --- /dev/null +++ b/arch/arm/mach-kirkwood/Makefile | |||
@@ -0,0 +1,5 @@ | |||
1 | obj-y += common.o addr-map.o irq.o pcie.o | ||
2 | |||
3 | obj-$(CONFIG_MACH_DB88F6281_BP) += db88f6281-bp-setup.o | ||
4 | obj-$(CONFIG_MACH_RD88F6192_NAS) += rd88f6192-nas-setup.o | ||
5 | obj-$(CONFIG_MACH_RD88F6192_NAS) += rd88f6281-setup.o | ||
diff --git a/arch/arm/mach-kirkwood/Makefile.boot b/arch/arm/mach-kirkwood/Makefile.boot new file mode 100644 index 000000000000..67039c3e0c48 --- /dev/null +++ b/arch/arm/mach-kirkwood/Makefile.boot | |||
@@ -0,0 +1,3 @@ | |||
1 | zreladdr-y := 0x00008000 | ||
2 | params_phys-y := 0x00000100 | ||
3 | initrd_phys-y := 0x00800000 | ||
diff --git a/arch/arm/mach-kirkwood/addr-map.c b/arch/arm/mach-kirkwood/addr-map.c new file mode 100644 index 000000000000..a39f0f3c4730 --- /dev/null +++ b/arch/arm/mach-kirkwood/addr-map.c | |||
@@ -0,0 +1,139 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-kirkwood/addr-map.c | ||
3 | * | ||
4 | * Address map functions for Marvell Kirkwood SoCs | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/init.h> | ||
13 | #include <linux/mbus.h> | ||
14 | #include <linux/io.h> | ||
15 | #include <asm/hardware.h> | ||
16 | #include "common.h" | ||
17 | |||
18 | /* | ||
19 | * Generic Address Decode Windows bit settings | ||
20 | */ | ||
21 | #define TARGET_DDR 0 | ||
22 | #define TARGET_DEV_BUS 1 | ||
23 | #define TARGET_PCIE 4 | ||
24 | #define ATTR_DEV_SPI_ROM 0x1e | ||
25 | #define ATTR_DEV_BOOT 0x1d | ||
26 | #define ATTR_DEV_NAND 0x2f | ||
27 | #define ATTR_DEV_CS3 0x37 | ||
28 | #define ATTR_DEV_CS2 0x3b | ||
29 | #define ATTR_DEV_CS1 0x3d | ||
30 | #define ATTR_DEV_CS0 0x3e | ||
31 | #define ATTR_PCIE_IO 0xe0 | ||
32 | #define ATTR_PCIE_MEM 0xe8 | ||
33 | |||
34 | /* | ||
35 | * Helpers to get DDR bank info | ||
36 | */ | ||
37 | #define DDR_BASE_CS_OFF(n) (0x0000 + ((n) << 3)) | ||
38 | #define DDR_SIZE_CS_OFF(n) (0x0004 + ((n) << 3)) | ||
39 | |||
40 | /* | ||
41 | * CPU Address Decode Windows registers | ||
42 | */ | ||
43 | #define WIN_OFF(n) (BRIDGE_VIRT_BASE + 0x0000 + ((n) << 4)) | ||
44 | #define WIN_CTRL_OFF 0x0000 | ||
45 | #define WIN_BASE_OFF 0x0004 | ||
46 | #define WIN_REMAP_LO_OFF 0x0008 | ||
47 | #define WIN_REMAP_HI_OFF 0x000c | ||
48 | |||
49 | |||
50 | struct mbus_dram_target_info kirkwood_mbus_dram_info; | ||
51 | |||
52 | static int __init cpu_win_can_remap(int win) | ||
53 | { | ||
54 | if (win < 4) | ||
55 | return 1; | ||
56 | |||
57 | return 0; | ||
58 | } | ||
59 | |||
60 | static void __init setup_cpu_win(int win, u32 base, u32 size, | ||
61 | u8 target, u8 attr, int remap) | ||
62 | { | ||
63 | void __iomem *addr = (void __iomem *)WIN_OFF(win); | ||
64 | u32 ctrl; | ||
65 | |||
66 | base &= 0xffff0000; | ||
67 | ctrl = ((size - 1) & 0xffff0000) | (attr << 8) | (target << 4) | 1; | ||
68 | |||
69 | writel(base, addr + WIN_BASE_OFF); | ||
70 | writel(ctrl, addr + WIN_CTRL_OFF); | ||
71 | if (cpu_win_can_remap(win)) { | ||
72 | if (remap < 0) | ||
73 | remap = base; | ||
74 | |||
75 | writel(remap & 0xffff0000, addr + WIN_REMAP_LO_OFF); | ||
76 | writel(0, addr + WIN_REMAP_HI_OFF); | ||
77 | } | ||
78 | } | ||
79 | |||
80 | void __init kirkwood_setup_cpu_mbus(void) | ||
81 | { | ||
82 | void __iomem *addr; | ||
83 | int i; | ||
84 | int cs; | ||
85 | |||
86 | /* | ||
87 | * First, disable and clear windows. | ||
88 | */ | ||
89 | for (i = 0; i < 8; i++) { | ||
90 | addr = (void __iomem *)WIN_OFF(i); | ||
91 | |||
92 | writel(0, addr + WIN_BASE_OFF); | ||
93 | writel(0, addr + WIN_CTRL_OFF); | ||
94 | if (cpu_win_can_remap(i)) { | ||
95 | writel(0, addr + WIN_REMAP_LO_OFF); | ||
96 | writel(0, addr + WIN_REMAP_HI_OFF); | ||
97 | } | ||
98 | } | ||
99 | |||
100 | /* | ||
101 | * Setup windows for PCIe IO+MEM space. | ||
102 | */ | ||
103 | setup_cpu_win(0, KIRKWOOD_PCIE_IO_PHYS_BASE, KIRKWOOD_PCIE_IO_SIZE, | ||
104 | TARGET_PCIE, ATTR_PCIE_IO, KIRKWOOD_PCIE_IO_BUS_BASE); | ||
105 | setup_cpu_win(1, KIRKWOOD_PCIE_MEM_PHYS_BASE, KIRKWOOD_PCIE_MEM_SIZE, | ||
106 | TARGET_PCIE, ATTR_PCIE_MEM, -1); | ||
107 | |||
108 | /* | ||
109 | * Setup window for NAND controller. | ||
110 | */ | ||
111 | setup_cpu_win(2, KIRKWOOD_NAND_MEM_PHYS_BASE, KIRKWOOD_NAND_MEM_SIZE, | ||
112 | TARGET_DEV_BUS, ATTR_DEV_NAND, -1); | ||
113 | |||
114 | /* | ||
115 | * Setup MBUS dram target info. | ||
116 | */ | ||
117 | kirkwood_mbus_dram_info.mbus_dram_target_id = TARGET_DDR; | ||
118 | |||
119 | addr = (void __iomem *)DDR_WINDOW_CPU_BASE; | ||
120 | |||
121 | for (i = 0, cs = 0; i < 4; i++) { | ||
122 | u32 base = readl(addr + DDR_BASE_CS_OFF(i)); | ||
123 | u32 size = readl(addr + DDR_SIZE_CS_OFF(i)); | ||
124 | |||
125 | /* | ||
126 | * Chip select enabled? | ||
127 | */ | ||
128 | if (size & 1) { | ||
129 | struct mbus_dram_window *w; | ||
130 | |||
131 | w = &kirkwood_mbus_dram_info.cs[cs++]; | ||
132 | w->cs_index = i; | ||
133 | w->mbus_attr = 0xf & ~(1 << i); | ||
134 | w->base = base & 0xffff0000; | ||
135 | w->size = (size | 0x0000ffff) + 1; | ||
136 | } | ||
137 | } | ||
138 | kirkwood_mbus_dram_info.num_cs = cs; | ||
139 | } | ||
diff --git a/arch/arm/mach-kirkwood/common.c b/arch/arm/mach-kirkwood/common.c new file mode 100644 index 000000000000..5938a3b33cdc --- /dev/null +++ b/arch/arm/mach-kirkwood/common.c | |||
@@ -0,0 +1,331 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-kirkwood/common.c | ||
3 | * | ||
4 | * Core functions for Marvell Kirkwood SoCs | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/init.h> | ||
13 | #include <linux/platform_device.h> | ||
14 | #include <linux/serial_8250.h> | ||
15 | #include <linux/mbus.h> | ||
16 | #include <linux/mv643xx_eth.h> | ||
17 | #include <linux/ata_platform.h> | ||
18 | #include <asm/page.h> | ||
19 | #include <asm/timex.h> | ||
20 | #include <asm/mach/map.h> | ||
21 | #include <asm/mach/time.h> | ||
22 | #include <asm/arch/kirkwood.h> | ||
23 | #include <asm/plat-orion/cache-feroceon-l2.h> | ||
24 | #include <asm/plat-orion/ehci-orion.h> | ||
25 | #include <asm/plat-orion/orion_nand.h> | ||
26 | #include <asm/plat-orion/time.h> | ||
27 | #include "common.h" | ||
28 | |||
29 | /***************************************************************************** | ||
30 | * I/O Address Mapping | ||
31 | ****************************************************************************/ | ||
32 | static struct map_desc kirkwood_io_desc[] __initdata = { | ||
33 | { | ||
34 | .virtual = KIRKWOOD_PCIE_IO_VIRT_BASE, | ||
35 | .pfn = __phys_to_pfn(KIRKWOOD_PCIE_IO_PHYS_BASE), | ||
36 | .length = KIRKWOOD_PCIE_IO_SIZE, | ||
37 | .type = MT_DEVICE, | ||
38 | }, { | ||
39 | .virtual = KIRKWOOD_REGS_VIRT_BASE, | ||
40 | .pfn = __phys_to_pfn(KIRKWOOD_REGS_PHYS_BASE), | ||
41 | .length = KIRKWOOD_REGS_SIZE, | ||
42 | .type = MT_DEVICE, | ||
43 | }, | ||
44 | }; | ||
45 | |||
46 | void __init kirkwood_map_io(void) | ||
47 | { | ||
48 | iotable_init(kirkwood_io_desc, ARRAY_SIZE(kirkwood_io_desc)); | ||
49 | } | ||
50 | |||
51 | |||
52 | /***************************************************************************** | ||
53 | * EHCI | ||
54 | ****************************************************************************/ | ||
55 | static struct orion_ehci_data kirkwood_ehci_data = { | ||
56 | .dram = &kirkwood_mbus_dram_info, | ||
57 | }; | ||
58 | |||
59 | static u64 ehci_dmamask = 0xffffffffUL; | ||
60 | |||
61 | |||
62 | /***************************************************************************** | ||
63 | * EHCI0 | ||
64 | ****************************************************************************/ | ||
65 | static struct resource kirkwood_ehci_resources[] = { | ||
66 | { | ||
67 | .start = USB_PHYS_BASE, | ||
68 | .end = USB_PHYS_BASE + 0x0fff, | ||
69 | .flags = IORESOURCE_MEM, | ||
70 | }, { | ||
71 | .start = IRQ_KIRKWOOD_USB, | ||
72 | .end = IRQ_KIRKWOOD_USB, | ||
73 | .flags = IORESOURCE_IRQ, | ||
74 | }, | ||
75 | }; | ||
76 | |||
77 | static struct platform_device kirkwood_ehci = { | ||
78 | .name = "orion-ehci", | ||
79 | .id = 0, | ||
80 | .dev = { | ||
81 | .dma_mask = &ehci_dmamask, | ||
82 | .coherent_dma_mask = 0xffffffff, | ||
83 | .platform_data = &kirkwood_ehci_data, | ||
84 | }, | ||
85 | .resource = kirkwood_ehci_resources, | ||
86 | .num_resources = ARRAY_SIZE(kirkwood_ehci_resources), | ||
87 | }; | ||
88 | |||
89 | void __init kirkwood_ehci_init(void) | ||
90 | { | ||
91 | platform_device_register(&kirkwood_ehci); | ||
92 | } | ||
93 | |||
94 | |||
95 | /***************************************************************************** | ||
96 | * GE00 | ||
97 | ****************************************************************************/ | ||
98 | struct mv643xx_eth_shared_platform_data kirkwood_ge00_shared_data = { | ||
99 | .t_clk = KIRKWOOD_TCLK, | ||
100 | .dram = &kirkwood_mbus_dram_info, | ||
101 | }; | ||
102 | |||
103 | static struct resource kirkwood_ge00_shared_resources[] = { | ||
104 | { | ||
105 | .name = "ge00 base", | ||
106 | .start = GE00_PHYS_BASE + 0x2000, | ||
107 | .end = GE00_PHYS_BASE + 0x3fff, | ||
108 | .flags = IORESOURCE_MEM, | ||
109 | }, | ||
110 | }; | ||
111 | |||
112 | static struct platform_device kirkwood_ge00_shared = { | ||
113 | .name = MV643XX_ETH_SHARED_NAME, | ||
114 | .id = 0, | ||
115 | .dev = { | ||
116 | .platform_data = &kirkwood_ge00_shared_data, | ||
117 | }, | ||
118 | .num_resources = 1, | ||
119 | .resource = kirkwood_ge00_shared_resources, | ||
120 | }; | ||
121 | |||
122 | static struct resource kirkwood_ge00_resources[] = { | ||
123 | { | ||
124 | .name = "ge00 irq", | ||
125 | .start = IRQ_KIRKWOOD_GE00_SUM, | ||
126 | .end = IRQ_KIRKWOOD_GE00_SUM, | ||
127 | .flags = IORESOURCE_IRQ, | ||
128 | }, | ||
129 | }; | ||
130 | |||
131 | static struct platform_device kirkwood_ge00 = { | ||
132 | .name = MV643XX_ETH_NAME, | ||
133 | .id = 0, | ||
134 | .num_resources = 1, | ||
135 | .resource = kirkwood_ge00_resources, | ||
136 | }; | ||
137 | |||
138 | void __init kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data) | ||
139 | { | ||
140 | eth_data->shared = &kirkwood_ge00_shared; | ||
141 | kirkwood_ge00.dev.platform_data = eth_data; | ||
142 | |||
143 | platform_device_register(&kirkwood_ge00_shared); | ||
144 | platform_device_register(&kirkwood_ge00); | ||
145 | } | ||
146 | |||
147 | |||
148 | /***************************************************************************** | ||
149 | * SoC RTC | ||
150 | ****************************************************************************/ | ||
151 | static struct resource kirkwood_rtc_resource = { | ||
152 | .start = RTC_PHYS_BASE, | ||
153 | .end = RTC_PHYS_BASE + SZ_16 - 1, | ||
154 | .flags = IORESOURCE_MEM, | ||
155 | }; | ||
156 | |||
157 | void __init kirkwood_rtc_init(void) | ||
158 | { | ||
159 | platform_device_register_simple("rtc-mv", -1, &kirkwood_rtc_resource, 1); | ||
160 | } | ||
161 | |||
162 | |||
163 | /***************************************************************************** | ||
164 | * SATA | ||
165 | ****************************************************************************/ | ||
166 | static struct resource kirkwood_sata_resources[] = { | ||
167 | { | ||
168 | .name = "sata base", | ||
169 | .start = SATA_PHYS_BASE, | ||
170 | .end = SATA_PHYS_BASE + 0x5000 - 1, | ||
171 | .flags = IORESOURCE_MEM, | ||
172 | }, { | ||
173 | .name = "sata irq", | ||
174 | .start = IRQ_KIRKWOOD_SATA, | ||
175 | .end = IRQ_KIRKWOOD_SATA, | ||
176 | .flags = IORESOURCE_IRQ, | ||
177 | }, | ||
178 | }; | ||
179 | |||
180 | static struct platform_device kirkwood_sata = { | ||
181 | .name = "sata_mv", | ||
182 | .id = 0, | ||
183 | .dev = { | ||
184 | .coherent_dma_mask = 0xffffffff, | ||
185 | }, | ||
186 | .num_resources = ARRAY_SIZE(kirkwood_sata_resources), | ||
187 | .resource = kirkwood_sata_resources, | ||
188 | }; | ||
189 | |||
190 | void __init kirkwood_sata_init(struct mv_sata_platform_data *sata_data) | ||
191 | { | ||
192 | sata_data->dram = &kirkwood_mbus_dram_info; | ||
193 | kirkwood_sata.dev.platform_data = sata_data; | ||
194 | platform_device_register(&kirkwood_sata); | ||
195 | } | ||
196 | |||
197 | |||
198 | /***************************************************************************** | ||
199 | * UART0 | ||
200 | ****************************************************************************/ | ||
201 | static struct plat_serial8250_port kirkwood_uart0_data[] = { | ||
202 | { | ||
203 | .mapbase = UART0_PHYS_BASE, | ||
204 | .membase = (char *)UART0_VIRT_BASE, | ||
205 | .irq = IRQ_KIRKWOOD_UART_0, | ||
206 | .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, | ||
207 | .iotype = UPIO_MEM, | ||
208 | .regshift = 2, | ||
209 | .uartclk = KIRKWOOD_TCLK, | ||
210 | }, { | ||
211 | }, | ||
212 | }; | ||
213 | |||
214 | static struct resource kirkwood_uart0_resources[] = { | ||
215 | { | ||
216 | .start = UART0_PHYS_BASE, | ||
217 | .end = UART0_PHYS_BASE + 0xff, | ||
218 | .flags = IORESOURCE_MEM, | ||
219 | }, { | ||
220 | .start = IRQ_KIRKWOOD_UART_0, | ||
221 | .end = IRQ_KIRKWOOD_UART_0, | ||
222 | .flags = IORESOURCE_IRQ, | ||
223 | }, | ||
224 | }; | ||
225 | |||
226 | static struct platform_device kirkwood_uart0 = { | ||
227 | .name = "serial8250", | ||
228 | .id = 0, | ||
229 | .dev = { | ||
230 | .platform_data = kirkwood_uart0_data, | ||
231 | }, | ||
232 | .resource = kirkwood_uart0_resources, | ||
233 | .num_resources = ARRAY_SIZE(kirkwood_uart0_resources), | ||
234 | }; | ||
235 | |||
236 | void __init kirkwood_uart0_init(void) | ||
237 | { | ||
238 | platform_device_register(&kirkwood_uart0); | ||
239 | } | ||
240 | |||
241 | |||
242 | /***************************************************************************** | ||
243 | * UART1 | ||
244 | ****************************************************************************/ | ||
245 | static struct plat_serial8250_port kirkwood_uart1_data[] = { | ||
246 | { | ||
247 | .mapbase = UART1_PHYS_BASE, | ||
248 | .membase = (char *)UART1_VIRT_BASE, | ||
249 | .irq = IRQ_KIRKWOOD_UART_1, | ||
250 | .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, | ||
251 | .iotype = UPIO_MEM, | ||
252 | .regshift = 2, | ||
253 | .uartclk = KIRKWOOD_TCLK, | ||
254 | }, { | ||
255 | }, | ||
256 | }; | ||
257 | |||
258 | static struct resource kirkwood_uart1_resources[] = { | ||
259 | { | ||
260 | .start = UART1_PHYS_BASE, | ||
261 | .end = UART1_PHYS_BASE + 0xff, | ||
262 | .flags = IORESOURCE_MEM, | ||
263 | }, { | ||
264 | .start = IRQ_KIRKWOOD_UART_1, | ||
265 | .end = IRQ_KIRKWOOD_UART_1, | ||
266 | .flags = IORESOURCE_IRQ, | ||
267 | }, | ||
268 | }; | ||
269 | |||
270 | static struct platform_device kirkwood_uart1 = { | ||
271 | .name = "serial8250", | ||
272 | .id = 1, | ||
273 | .dev = { | ||
274 | .platform_data = kirkwood_uart1_data, | ||
275 | }, | ||
276 | .resource = kirkwood_uart1_resources, | ||
277 | .num_resources = ARRAY_SIZE(kirkwood_uart1_resources), | ||
278 | }; | ||
279 | |||
280 | void __init kirkwood_uart1_init(void) | ||
281 | { | ||
282 | platform_device_register(&kirkwood_uart1); | ||
283 | } | ||
284 | |||
285 | |||
286 | /***************************************************************************** | ||
287 | * Time handling | ||
288 | ****************************************************************************/ | ||
289 | static void kirkwood_timer_init(void) | ||
290 | { | ||
291 | orion_time_init(IRQ_KIRKWOOD_BRIDGE, KIRKWOOD_TCLK); | ||
292 | } | ||
293 | |||
294 | struct sys_timer kirkwood_timer = { | ||
295 | .init = kirkwood_timer_init, | ||
296 | }; | ||
297 | |||
298 | |||
299 | /***************************************************************************** | ||
300 | * General | ||
301 | ****************************************************************************/ | ||
302 | static char * __init kirkwood_id(void) | ||
303 | { | ||
304 | switch (readl(DEVICE_ID) & 0x3) { | ||
305 | case 0: | ||
306 | return "88F6180"; | ||
307 | case 1: | ||
308 | return "88F6192"; | ||
309 | case 2: | ||
310 | return "88F6281"; | ||
311 | } | ||
312 | |||
313 | return "unknown 88F6000 variant"; | ||
314 | } | ||
315 | |||
316 | static int __init is_l2_writethrough(void) | ||
317 | { | ||
318 | return !!(readl(L2_CONFIG_REG) & L2_WRITETHROUGH); | ||
319 | } | ||
320 | |||
321 | void __init kirkwood_init(void) | ||
322 | { | ||
323 | printk(KERN_INFO "Kirkwood: %s, TCLK=%d.\n", | ||
324 | kirkwood_id(), KIRKWOOD_TCLK); | ||
325 | |||
326 | kirkwood_setup_cpu_mbus(); | ||
327 | |||
328 | #ifdef CONFIG_CACHE_FEROCEON_L2 | ||
329 | feroceon_l2_init(is_l2_writethrough()); | ||
330 | #endif | ||
331 | } | ||
diff --git a/arch/arm/mach-kirkwood/common.h b/arch/arm/mach-kirkwood/common.h new file mode 100644 index 000000000000..5dee2f6b40a5 --- /dev/null +++ b/arch/arm/mach-kirkwood/common.h | |||
@@ -0,0 +1,42 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-kirkwood/common.h | ||
3 | * | ||
4 | * Core functions for Marvell Kirkwood SoCs | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #ifndef __ARCH_KIRKWOOD_COMMON_H | ||
12 | #define __ARCH_KIRKWOOD_COMMON_H | ||
13 | |||
14 | struct mv643xx_eth_platform_data; | ||
15 | struct mv_sata_platform_data; | ||
16 | |||
17 | /* | ||
18 | * Basic Kirkwood init functions used early by machine-setup. | ||
19 | */ | ||
20 | void kirkwood_map_io(void); | ||
21 | void kirkwood_init(void); | ||
22 | void kirkwood_init_irq(void); | ||
23 | |||
24 | extern struct mbus_dram_target_info kirkwood_mbus_dram_info; | ||
25 | void kirkwood_setup_cpu_mbus(void); | ||
26 | void kirkwood_setup_pcie_io_win(int window, u32 base, u32 size, | ||
27 | int maj, int min); | ||
28 | void kirkwood_setup_pcie_mem_win(int window, u32 base, u32 size, | ||
29 | int maj, int min); | ||
30 | |||
31 | void kirkwood_ehci_init(void); | ||
32 | void kirkwood_ge00_init(struct mv643xx_eth_platform_data *eth_data); | ||
33 | void kirkwood_pcie_init(void); | ||
34 | void kirkwood_rtc_init(void); | ||
35 | void kirkwood_sata_init(struct mv_sata_platform_data *sata_data); | ||
36 | void kirkwood_uart0_init(void); | ||
37 | void kirkwood_uart1_init(void); | ||
38 | |||
39 | extern struct sys_timer kirkwood_timer; | ||
40 | |||
41 | |||
42 | #endif | ||
diff --git a/arch/arm/mach-kirkwood/db88f6281-bp-setup.c b/arch/arm/mach-kirkwood/db88f6281-bp-setup.c new file mode 100644 index 000000000000..d5c482c628e3 --- /dev/null +++ b/arch/arm/mach-kirkwood/db88f6281-bp-setup.c | |||
@@ -0,0 +1,68 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-kirkwood/db88f6281-bp-setup.c | ||
3 | * | ||
4 | * Marvell DB-88F6281-BP Development 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/mtd/nand.h> | ||
18 | #include <linux/timer.h> | ||
19 | #include <linux/ata_platform.h> | ||
20 | #include <linux/mv643xx_eth.h> | ||
21 | #include <asm/mach-types.h> | ||
22 | #include <asm/mach/arch.h> | ||
23 | #include <asm/mach/pci.h> | ||
24 | #include <asm/arch/kirkwood.h> | ||
25 | #include "common.h" | ||
26 | |||
27 | static struct mv643xx_eth_platform_data db88f6281_ge00_data = { | ||
28 | .phy_addr = 8, | ||
29 | }; | ||
30 | |||
31 | static struct mv_sata_platform_data db88f6281_sata_data = { | ||
32 | .n_ports = 2, | ||
33 | }; | ||
34 | |||
35 | static void __init db88f6281_init(void) | ||
36 | { | ||
37 | /* | ||
38 | * Basic setup. Needs to be called early. | ||
39 | */ | ||
40 | kirkwood_init(); | ||
41 | |||
42 | kirkwood_ehci_init(); | ||
43 | kirkwood_ge00_init(&db88f6281_ge00_data); | ||
44 | kirkwood_rtc_init(); | ||
45 | kirkwood_sata_init(&db88f6281_sata_data); | ||
46 | kirkwood_uart0_init(); | ||
47 | kirkwood_uart1_init(); | ||
48 | } | ||
49 | |||
50 | static int __init db88f6281_pci_init(void) | ||
51 | { | ||
52 | if (machine_is_db88f6281_bp()) | ||
53 | kirkwood_pcie_init(); | ||
54 | |||
55 | return 0; | ||
56 | } | ||
57 | subsys_initcall(db88f6281_pci_init); | ||
58 | |||
59 | MACHINE_START(DB88F6281_BP, "Marvell DB-88F6281-BP Development Board") | ||
60 | /* Maintainer: Saeed Bishara <saeed@marvell.com> */ | ||
61 | .phys_io = KIRKWOOD_REGS_PHYS_BASE, | ||
62 | .io_pg_offst = ((KIRKWOOD_REGS_VIRT_BASE) >> 18) & 0xfffc, | ||
63 | .boot_params = 0x00000100, | ||
64 | .init_machine = db88f6281_init, | ||
65 | .map_io = kirkwood_map_io, | ||
66 | .init_irq = kirkwood_init_irq, | ||
67 | .timer = &kirkwood_timer, | ||
68 | MACHINE_END | ||
diff --git a/arch/arm/mach-kirkwood/irq.c b/arch/arm/mach-kirkwood/irq.c new file mode 100644 index 000000000000..302bb2cf6669 --- /dev/null +++ b/arch/arm/mach-kirkwood/irq.c | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-kirkwood/irq.c | ||
3 | * | ||
4 | * Kirkwood IRQ handling. | ||
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/irq.h> | ||
14 | #include <linux/io.h> | ||
15 | #include <asm/plat-orion/irq.h> | ||
16 | #include "common.h" | ||
17 | |||
18 | void __init kirkwood_init_irq(void) | ||
19 | { | ||
20 | orion_irq_init(0, (void __iomem *)(IRQ_VIRT_BASE + IRQ_MASK_LOW_OFF)); | ||
21 | orion_irq_init(32, (void __iomem *)(IRQ_VIRT_BASE + IRQ_MASK_HIGH_OFF)); | ||
22 | } | ||
diff --git a/arch/arm/mach-kirkwood/pcie.c b/arch/arm/mach-kirkwood/pcie.c new file mode 100644 index 000000000000..8282d0ff84bf --- /dev/null +++ b/arch/arm/mach-kirkwood/pcie.c | |||
@@ -0,0 +1,180 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-kirkwood/pcie.c | ||
3 | * | ||
4 | * PCIe functions for Marvell Kirkwood SoCs | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/pci.h> | ||
13 | #include <linux/mbus.h> | ||
14 | #include <asm/mach/pci.h> | ||
15 | #include <asm/plat-orion/pcie.h> | ||
16 | #include "common.h" | ||
17 | |||
18 | |||
19 | #define PCIE_BASE ((void __iomem *)PCIE_VIRT_BASE) | ||
20 | |||
21 | static int pcie_valid_config(int bus, int dev) | ||
22 | { | ||
23 | /* | ||
24 | * Don't go out when trying to access -- | ||
25 | * 1. nonexisting device on local bus | ||
26 | * 2. where there's no device connected (no link) | ||
27 | */ | ||
28 | if (bus == 0 && dev == 0) | ||
29 | return 1; | ||
30 | |||
31 | if (!orion_pcie_link_up(PCIE_BASE)) | ||
32 | return 0; | ||
33 | |||
34 | if (bus == 0 && dev != 1) | ||
35 | return 0; | ||
36 | |||
37 | return 1; | ||
38 | } | ||
39 | |||
40 | |||
41 | /* | ||
42 | * PCIe config cycles are done by programming the PCIE_CONF_ADDR register | ||
43 | * and then reading the PCIE_CONF_DATA register. Need to make sure these | ||
44 | * transactions are atomic. | ||
45 | */ | ||
46 | static DEFINE_SPINLOCK(kirkwood_pcie_lock); | ||
47 | |||
48 | static int pcie_rd_conf(struct pci_bus *bus, u32 devfn, int where, | ||
49 | int size, u32 *val) | ||
50 | { | ||
51 | unsigned long flags; | ||
52 | int ret; | ||
53 | |||
54 | if (pcie_valid_config(bus->number, PCI_SLOT(devfn)) == 0) { | ||
55 | *val = 0xffffffff; | ||
56 | return PCIBIOS_DEVICE_NOT_FOUND; | ||
57 | } | ||
58 | |||
59 | spin_lock_irqsave(&kirkwood_pcie_lock, flags); | ||
60 | ret = orion_pcie_rd_conf(PCIE_BASE, bus, devfn, where, size, val); | ||
61 | spin_unlock_irqrestore(&kirkwood_pcie_lock, flags); | ||
62 | |||
63 | return ret; | ||
64 | } | ||
65 | |||
66 | static int pcie_wr_conf(struct pci_bus *bus, u32 devfn, | ||
67 | int where, int size, u32 val) | ||
68 | { | ||
69 | unsigned long flags; | ||
70 | int ret; | ||
71 | |||
72 | if (pcie_valid_config(bus->number, PCI_SLOT(devfn)) == 0) | ||
73 | return PCIBIOS_DEVICE_NOT_FOUND; | ||
74 | |||
75 | spin_lock_irqsave(&kirkwood_pcie_lock, flags); | ||
76 | ret = orion_pcie_wr_conf(PCIE_BASE, bus, devfn, where, size, val); | ||
77 | spin_unlock_irqrestore(&kirkwood_pcie_lock, flags); | ||
78 | |||
79 | return ret; | ||
80 | } | ||
81 | |||
82 | static struct pci_ops pcie_ops = { | ||
83 | .read = pcie_rd_conf, | ||
84 | .write = pcie_wr_conf, | ||
85 | }; | ||
86 | |||
87 | |||
88 | static int kirkwood_pcie_setup(int nr, struct pci_sys_data *sys) | ||
89 | { | ||
90 | struct resource *res; | ||
91 | |||
92 | /* | ||
93 | * Generic PCIe unit setup. | ||
94 | */ | ||
95 | orion_pcie_setup(PCIE_BASE, &kirkwood_mbus_dram_info); | ||
96 | |||
97 | /* | ||
98 | * Request resources. | ||
99 | */ | ||
100 | res = kzalloc(sizeof(struct resource) * 2, GFP_KERNEL); | ||
101 | if (!res) | ||
102 | panic("pcie_setup unable to alloc resources"); | ||
103 | |||
104 | /* | ||
105 | * IORESOURCE_IO | ||
106 | */ | ||
107 | res[0].name = "PCIe I/O Space"; | ||
108 | res[0].flags = IORESOURCE_IO; | ||
109 | res[0].start = KIRKWOOD_PCIE_IO_PHYS_BASE; | ||
110 | res[0].end = res[0].start + KIRKWOOD_PCIE_IO_SIZE - 1; | ||
111 | if (request_resource(&ioport_resource, &res[0])) | ||
112 | panic("Request PCIe IO resource failed\n"); | ||
113 | sys->resource[0] = &res[0]; | ||
114 | |||
115 | /* | ||
116 | * IORESOURCE_MEM | ||
117 | */ | ||
118 | res[1].name = "PCIe Memory Space"; | ||
119 | res[1].flags = IORESOURCE_MEM; | ||
120 | res[1].start = KIRKWOOD_PCIE_MEM_PHYS_BASE; | ||
121 | res[1].end = res[1].start + KIRKWOOD_PCIE_MEM_SIZE - 1; | ||
122 | if (request_resource(&iomem_resource, &res[1])) | ||
123 | panic("Request PCIe Memory resource failed\n"); | ||
124 | sys->resource[1] = &res[1]; | ||
125 | |||
126 | sys->resource[2] = NULL; | ||
127 | sys->io_offset = 0; | ||
128 | |||
129 | return 1; | ||
130 | } | ||
131 | |||
132 | static void __devinit rc_pci_fixup(struct pci_dev *dev) | ||
133 | { | ||
134 | /* | ||
135 | * Prevent enumeration of root complex. | ||
136 | */ | ||
137 | if (dev->bus->parent == NULL && dev->devfn == 0) { | ||
138 | int i; | ||
139 | |||
140 | for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) { | ||
141 | dev->resource[i].start = 0; | ||
142 | dev->resource[i].end = 0; | ||
143 | dev->resource[i].flags = 0; | ||
144 | } | ||
145 | } | ||
146 | } | ||
147 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL, PCI_ANY_ID, rc_pci_fixup); | ||
148 | |||
149 | static struct pci_bus __init * | ||
150 | kirkwood_pcie_scan_bus(int nr, struct pci_sys_data *sys) | ||
151 | { | ||
152 | struct pci_bus *bus; | ||
153 | |||
154 | if (nr == 0) { | ||
155 | bus = pci_scan_bus(sys->busnr, &pcie_ops, sys); | ||
156 | } else { | ||
157 | bus = NULL; | ||
158 | BUG(); | ||
159 | } | ||
160 | |||
161 | return bus; | ||
162 | } | ||
163 | |||
164 | static int __init kirkwood_pcie_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | ||
165 | { | ||
166 | return IRQ_KIRKWOOD_PCIE; | ||
167 | } | ||
168 | |||
169 | static struct hw_pci kirkwood_pci __initdata = { | ||
170 | .nr_controllers = 1, | ||
171 | .swizzle = pci_std_swizzle, | ||
172 | .setup = kirkwood_pcie_setup, | ||
173 | .scan = kirkwood_pcie_scan_bus, | ||
174 | .map_irq = kirkwood_pcie_map_irq, | ||
175 | }; | ||
176 | |||
177 | void __init kirkwood_pcie_init(void) | ||
178 | { | ||
179 | pci_common_init(&kirkwood_pci); | ||
180 | } | ||
diff --git a/arch/arm/mach-kirkwood/rd88f6192-nas-setup.c b/arch/arm/mach-kirkwood/rd88f6192-nas-setup.c new file mode 100644 index 000000000000..6cf642c504d3 --- /dev/null +++ b/arch/arm/mach-kirkwood/rd88f6192-nas-setup.c | |||
@@ -0,0 +1,69 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-kirkwood/rd88f6192-nas-setup.c | ||
3 | * | ||
4 | * Marvell RD-88F6192-NAS Reference 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/mtd/nand.h> | ||
18 | #include <linux/timer.h> | ||
19 | #include <linux/ata_platform.h> | ||
20 | #include <linux/mv643xx_eth.h> | ||
21 | #include <asm/mach-types.h> | ||
22 | #include <asm/mach/arch.h> | ||
23 | #include <asm/mach/pci.h> | ||
24 | #include <asm/arch/kirkwood.h> | ||
25 | #include "common.h" | ||
26 | |||
27 | #define RD88F6192_GPIO_USB_VBUS 10 | ||
28 | |||
29 | static struct mv643xx_eth_platform_data rd88f6192_ge00_data = { | ||
30 | .phy_addr = 8, | ||
31 | }; | ||
32 | |||
33 | static struct mv_sata_platform_data rd88f6192_sata_data = { | ||
34 | .n_ports = 2, | ||
35 | }; | ||
36 | |||
37 | static void __init rd88f6192_init(void) | ||
38 | { | ||
39 | /* | ||
40 | * Basic setup. Needs to be called early. | ||
41 | */ | ||
42 | kirkwood_init(); | ||
43 | |||
44 | kirkwood_ehci_init(); | ||
45 | kirkwood_ge00_init(&rd88f6192_ge00_data); | ||
46 | kirkwood_rtc_init(); | ||
47 | kirkwood_sata_init(&rd88f6192_sata_data); | ||
48 | kirkwood_uart0_init(); | ||
49 | } | ||
50 | |||
51 | static int __init rd88f6192_pci_init(void) | ||
52 | { | ||
53 | if (machine_is_rd88f6192_nas()) | ||
54 | kirkwood_pcie_init(); | ||
55 | |||
56 | return 0; | ||
57 | } | ||
58 | subsys_initcall(rd88f6192_pci_init); | ||
59 | |||
60 | MACHINE_START(RD88F6192_NAS, "Marvell RD-88F6192-NAS Development Board") | ||
61 | /* Maintainer: Saeed Bishara <saeed@marvell.com> */ | ||
62 | .phys_io = KIRKWOOD_REGS_PHYS_BASE, | ||
63 | .io_pg_offst = ((KIRKWOOD_REGS_VIRT_BASE) >> 18) & 0xfffc, | ||
64 | .boot_params = 0x00000100, | ||
65 | .init_machine = rd88f6192_init, | ||
66 | .map_io = kirkwood_map_io, | ||
67 | .init_irq = kirkwood_init_irq, | ||
68 | .timer = &kirkwood_timer, | ||
69 | MACHINE_END | ||
diff --git a/arch/arm/mach-kirkwood/rd88f6281-setup.c b/arch/arm/mach-kirkwood/rd88f6281-setup.c new file mode 100644 index 000000000000..e1f8de2c74a2 --- /dev/null +++ b/arch/arm/mach-kirkwood/rd88f6281-setup.c | |||
@@ -0,0 +1,113 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-kirkwood/rd88f6281-setup.c | ||
3 | * | ||
4 | * Marvell RD-88F6281 Reference 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/mtd/nand.h> | ||
18 | #include <linux/timer.h> | ||
19 | #include <linux/ata_platform.h> | ||
20 | #include <linux/mv643xx_eth.h> | ||
21 | #include <asm/mach-types.h> | ||
22 | #include <asm/mach/arch.h> | ||
23 | #include <asm/mach/pci.h> | ||
24 | #include <asm/arch/kirkwood.h> | ||
25 | #include <asm/plat-orion/orion_nand.h> | ||
26 | #include "common.h" | ||
27 | |||
28 | static struct mtd_partition rd88f6281_nand_parts[] = { | ||
29 | { | ||
30 | .name = "u-boot", | ||
31 | .offset = 0, | ||
32 | .size = SZ_1M | ||
33 | }, { | ||
34 | .name = "uImage", | ||
35 | .offset = MTDPART_OFS_NXTBLK, | ||
36 | .size = SZ_2M | ||
37 | }, { | ||
38 | .name = "root", | ||
39 | .offset = MTDPART_OFS_NXTBLK, | ||
40 | .size = MTDPART_SIZ_FULL | ||
41 | }, | ||
42 | }; | ||
43 | |||
44 | static struct resource rd88f6281_nand_resource = { | ||
45 | .flags = IORESOURCE_MEM, | ||
46 | .start = KIRKWOOD_NAND_MEM_PHYS_BASE, | ||
47 | .end = KIRKWOOD_NAND_MEM_PHYS_BASE + | ||
48 | KIRKWOOD_NAND_MEM_SIZE - 1, | ||
49 | }; | ||
50 | |||
51 | static struct orion_nand_data rd88f6281_nand_data = { | ||
52 | .parts = rd88f6281_nand_parts, | ||
53 | .nr_parts = ARRAY_SIZE(rd88f6281_nand_parts), | ||
54 | .cle = 0, | ||
55 | .ale = 1, | ||
56 | .width = 8, | ||
57 | .chip_delay = 25, | ||
58 | }; | ||
59 | |||
60 | static struct platform_device rd88f6281_nand_flash = { | ||
61 | .name = "orion_nand", | ||
62 | .id = -1, | ||
63 | .dev = { | ||
64 | .platform_data = &rd88f6281_nand_data, | ||
65 | }, | ||
66 | .resource = &rd88f6281_nand_resource, | ||
67 | .num_resources = 1, | ||
68 | }; | ||
69 | |||
70 | static struct mv643xx_eth_platform_data rd88f6281_ge00_data = { | ||
71 | .phy_addr = -1, | ||
72 | }; | ||
73 | |||
74 | static struct mv_sata_platform_data rd88f6281_sata_data = { | ||
75 | .n_ports = 2, | ||
76 | }; | ||
77 | |||
78 | static void __init rd88f6281_init(void) | ||
79 | { | ||
80 | /* | ||
81 | * Basic setup. Needs to be called early. | ||
82 | */ | ||
83 | kirkwood_init(); | ||
84 | |||
85 | kirkwood_ehci_init(); | ||
86 | kirkwood_ge00_init(&rd88f6281_ge00_data); | ||
87 | kirkwood_rtc_init(); | ||
88 | kirkwood_sata_init(&rd88f6281_sata_data); | ||
89 | kirkwood_uart0_init(); | ||
90 | kirkwood_uart1_init(); | ||
91 | |||
92 | platform_device_register(&rd88f6281_nand_flash); | ||
93 | } | ||
94 | |||
95 | static int __init rd88f6281_pci_init(void) | ||
96 | { | ||
97 | if (machine_is_rd88f6281()) | ||
98 | kirkwood_pcie_init(); | ||
99 | |||
100 | return 0; | ||
101 | } | ||
102 | subsys_initcall(rd88f6281_pci_init); | ||
103 | |||
104 | MACHINE_START(RD88F6281, "Marvell RD-88F6281 Reference Board") | ||
105 | /* Maintainer: Saeed Bishara <saeed@marvell.com> */ | ||
106 | .phys_io = KIRKWOOD_REGS_PHYS_BASE, | ||
107 | .io_pg_offst = ((KIRKWOOD_REGS_VIRT_BASE) >> 18) & 0xfffc, | ||
108 | .boot_params = 0x00000100, | ||
109 | .init_machine = rd88f6281_init, | ||
110 | .map_io = kirkwood_map_io, | ||
111 | .init_irq = kirkwood_init_irq, | ||
112 | .timer = &kirkwood_timer, | ||
113 | MACHINE_END | ||
diff --git a/arch/arm/mach-loki/Kconfig b/arch/arm/mach-loki/Kconfig new file mode 100644 index 000000000000..0045bdd761ca --- /dev/null +++ b/arch/arm/mach-loki/Kconfig | |||
@@ -0,0 +1,13 @@ | |||
1 | if ARCH_LOKI | ||
2 | |||
3 | menu "Marvell Loki (88RC8480) Implementations" | ||
4 | |||
5 | config MACH_LB88RC8480 | ||
6 | bool "Marvell LB88RC8480 Development Board" | ||
7 | help | ||
8 | Say 'Y' here if you want your kernel to support the | ||
9 | Marvell LB88RC8480 Development Board. | ||
10 | |||
11 | endmenu | ||
12 | |||
13 | endif | ||
diff --git a/arch/arm/mach-loki/Makefile b/arch/arm/mach-loki/Makefile new file mode 100644 index 000000000000..d43233ee590f --- /dev/null +++ b/arch/arm/mach-loki/Makefile | |||
@@ -0,0 +1,3 @@ | |||
1 | obj-y += common.o addr-map.o irq.o | ||
2 | |||
3 | obj-$(CONFIG_MACH_LB88RC8480) += lb88rc8480-setup.o | ||
diff --git a/arch/arm/mach-loki/Makefile.boot b/arch/arm/mach-loki/Makefile.boot new file mode 100644 index 000000000000..67039c3e0c48 --- /dev/null +++ b/arch/arm/mach-loki/Makefile.boot | |||
@@ -0,0 +1,3 @@ | |||
1 | zreladdr-y := 0x00008000 | ||
2 | params_phys-y := 0x00000100 | ||
3 | initrd_phys-y := 0x00800000 | ||
diff --git a/arch/arm/mach-loki/addr-map.c b/arch/arm/mach-loki/addr-map.c new file mode 100644 index 000000000000..ba25e56ade58 --- /dev/null +++ b/arch/arm/mach-loki/addr-map.c | |||
@@ -0,0 +1,121 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-loki/addr-map.c | ||
3 | * | ||
4 | * Address map functions for Marvell Loki (88RC8480) SoCs | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/init.h> | ||
13 | #include <linux/mbus.h> | ||
14 | #include <asm/hardware.h> | ||
15 | #include <asm/io.h> | ||
16 | #include "common.h" | ||
17 | |||
18 | /* | ||
19 | * Generic Address Decode Windows bit settings | ||
20 | */ | ||
21 | #define TARGET_DDR 0 | ||
22 | #define TARGET_DEV_BUS 1 | ||
23 | #define TARGET_PCIE0 3 | ||
24 | #define TARGET_PCIE1 4 | ||
25 | #define ATTR_DEV_BOOT 0x0f | ||
26 | #define ATTR_DEV_CS2 0x1b | ||
27 | #define ATTR_DEV_CS1 0x1d | ||
28 | #define ATTR_DEV_CS0 0x1e | ||
29 | #define ATTR_PCIE_IO 0x51 | ||
30 | #define ATTR_PCIE_MEM 0x59 | ||
31 | |||
32 | /* | ||
33 | * Helpers to get DDR bank info | ||
34 | */ | ||
35 | #define DDR_SIZE_CS(n) DDR_REG(0x1500 + ((n) << 3)) | ||
36 | #define DDR_BASE_CS(n) DDR_REG(0x1504 + ((n) << 3)) | ||
37 | |||
38 | /* | ||
39 | * CPU Address Decode Windows registers | ||
40 | */ | ||
41 | #define CPU_WIN_CTRL(n) BRIDGE_REG(0x000 | ((n) << 4)) | ||
42 | #define CPU_WIN_BASE(n) BRIDGE_REG(0x004 | ((n) << 4)) | ||
43 | #define CPU_WIN_REMAP_LO(n) BRIDGE_REG(0x008 | ((n) << 4)) | ||
44 | #define CPU_WIN_REMAP_HI(n) BRIDGE_REG(0x00c | ((n) << 4)) | ||
45 | |||
46 | |||
47 | struct mbus_dram_target_info loki_mbus_dram_info; | ||
48 | |||
49 | static void __init setup_cpu_win(int win, u32 base, u32 size, | ||
50 | u8 target, u8 attr, int remap) | ||
51 | { | ||
52 | u32 ctrl; | ||
53 | |||
54 | base &= 0xffff0000; | ||
55 | ctrl = ((size - 1) & 0xffff0000) | (attr << 8) | (1 << 5) | target; | ||
56 | |||
57 | writel(base, CPU_WIN_BASE(win)); | ||
58 | writel(ctrl, CPU_WIN_CTRL(win)); | ||
59 | if (win < 2) { | ||
60 | if (remap < 0) | ||
61 | remap = base; | ||
62 | |||
63 | writel(remap & 0xffff0000, CPU_WIN_REMAP_LO(win)); | ||
64 | writel(0, CPU_WIN_REMAP_HI(win)); | ||
65 | } | ||
66 | } | ||
67 | |||
68 | void __init loki_setup_cpu_mbus(void) | ||
69 | { | ||
70 | int i; | ||
71 | int cs; | ||
72 | |||
73 | /* | ||
74 | * First, disable and clear windows. | ||
75 | */ | ||
76 | for (i = 0; i < 8; i++) { | ||
77 | writel(0, CPU_WIN_BASE(i)); | ||
78 | writel(0, CPU_WIN_CTRL(i)); | ||
79 | if (i < 2) { | ||
80 | writel(0, CPU_WIN_REMAP_LO(i)); | ||
81 | writel(0, CPU_WIN_REMAP_HI(i)); | ||
82 | } | ||
83 | } | ||
84 | |||
85 | /* | ||
86 | * Setup windows for PCIe IO+MEM space. | ||
87 | */ | ||
88 | setup_cpu_win(2, LOKI_PCIE0_MEM_PHYS_BASE, LOKI_PCIE0_MEM_SIZE, | ||
89 | TARGET_PCIE0, ATTR_PCIE_MEM, -1); | ||
90 | setup_cpu_win(3, LOKI_PCIE1_MEM_PHYS_BASE, LOKI_PCIE1_MEM_SIZE, | ||
91 | TARGET_PCIE1, ATTR_PCIE_MEM, -1); | ||
92 | |||
93 | /* | ||
94 | * Setup MBUS dram target info. | ||
95 | */ | ||
96 | loki_mbus_dram_info.mbus_dram_target_id = TARGET_DDR; | ||
97 | |||
98 | for (i = 0, cs = 0; i < 4; i++) { | ||
99 | u32 base = readl(DDR_BASE_CS(i)); | ||
100 | u32 size = readl(DDR_SIZE_CS(i)); | ||
101 | |||
102 | /* | ||
103 | * Chip select enabled? | ||
104 | */ | ||
105 | if (size & 1) { | ||
106 | struct mbus_dram_window *w; | ||
107 | |||
108 | w = &loki_mbus_dram_info.cs[cs++]; | ||
109 | w->cs_index = i; | ||
110 | w->mbus_attr = 0xf & ~(1 << i); | ||
111 | w->base = base & 0xffff0000; | ||
112 | w->size = (size | 0x0000ffff) + 1; | ||
113 | } | ||
114 | } | ||
115 | loki_mbus_dram_info.num_cs = cs; | ||
116 | } | ||
117 | |||
118 | void __init loki_setup_dev_boot_win(u32 base, u32 size) | ||
119 | { | ||
120 | setup_cpu_win(4, base, size, TARGET_DEV_BUS, ATTR_DEV_BOOT, -1); | ||
121 | } | ||
diff --git a/arch/arm/mach-loki/common.c b/arch/arm/mach-loki/common.c new file mode 100644 index 000000000000..410f50399dd3 --- /dev/null +++ b/arch/arm/mach-loki/common.c | |||
@@ -0,0 +1,305 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-loki/common.c | ||
3 | * | ||
4 | * Core functions for Marvell Loki (88RC8480) SoCs | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/init.h> | ||
13 | #include <linux/platform_device.h> | ||
14 | #include <linux/serial_8250.h> | ||
15 | #include <linux/mbus.h> | ||
16 | #include <linux/mv643xx_eth.h> | ||
17 | #include <asm/page.h> | ||
18 | #include <asm/timex.h> | ||
19 | #include <asm/mach/map.h> | ||
20 | #include <asm/mach/time.h> | ||
21 | #include <asm/arch/loki.h> | ||
22 | #include <asm/plat-orion/orion_nand.h> | ||
23 | #include <asm/plat-orion/time.h> | ||
24 | #include "common.h" | ||
25 | |||
26 | /***************************************************************************** | ||
27 | * I/O Address Mapping | ||
28 | ****************************************************************************/ | ||
29 | static struct map_desc loki_io_desc[] __initdata = { | ||
30 | { | ||
31 | .virtual = LOKI_REGS_VIRT_BASE, | ||
32 | .pfn = __phys_to_pfn(LOKI_REGS_PHYS_BASE), | ||
33 | .length = LOKI_REGS_SIZE, | ||
34 | .type = MT_DEVICE, | ||
35 | }, | ||
36 | }; | ||
37 | |||
38 | void __init loki_map_io(void) | ||
39 | { | ||
40 | iotable_init(loki_io_desc, ARRAY_SIZE(loki_io_desc)); | ||
41 | } | ||
42 | |||
43 | |||
44 | /***************************************************************************** | ||
45 | * GE0 | ||
46 | ****************************************************************************/ | ||
47 | struct mv643xx_eth_shared_platform_data loki_ge0_shared_data = { | ||
48 | .t_clk = LOKI_TCLK, | ||
49 | .dram = &loki_mbus_dram_info, | ||
50 | }; | ||
51 | |||
52 | static struct resource loki_ge0_shared_resources[] = { | ||
53 | { | ||
54 | .name = "ge0 base", | ||
55 | .start = GE0_PHYS_BASE + 0x2000, | ||
56 | .end = GE0_PHYS_BASE + 0x3fff, | ||
57 | .flags = IORESOURCE_MEM, | ||
58 | }, | ||
59 | }; | ||
60 | |||
61 | static struct platform_device loki_ge0_shared = { | ||
62 | .name = MV643XX_ETH_SHARED_NAME, | ||
63 | .id = 0, | ||
64 | .dev = { | ||
65 | .platform_data = &loki_ge0_shared_data, | ||
66 | }, | ||
67 | .num_resources = 1, | ||
68 | .resource = loki_ge0_shared_resources, | ||
69 | }; | ||
70 | |||
71 | static struct resource loki_ge0_resources[] = { | ||
72 | { | ||
73 | .name = "ge0 irq", | ||
74 | .start = IRQ_LOKI_GBE_A_INT, | ||
75 | .end = IRQ_LOKI_GBE_A_INT, | ||
76 | .flags = IORESOURCE_IRQ, | ||
77 | }, | ||
78 | }; | ||
79 | |||
80 | static struct platform_device loki_ge0 = { | ||
81 | .name = MV643XX_ETH_NAME, | ||
82 | .id = 0, | ||
83 | .num_resources = 1, | ||
84 | .resource = loki_ge0_resources, | ||
85 | }; | ||
86 | |||
87 | void __init loki_ge0_init(struct mv643xx_eth_platform_data *eth_data) | ||
88 | { | ||
89 | eth_data->shared = &loki_ge0_shared; | ||
90 | loki_ge0.dev.platform_data = eth_data; | ||
91 | |||
92 | writel(0x00079220, GE0_VIRT_BASE + 0x20b0); | ||
93 | platform_device_register(&loki_ge0_shared); | ||
94 | platform_device_register(&loki_ge0); | ||
95 | } | ||
96 | |||
97 | |||
98 | /***************************************************************************** | ||
99 | * GE1 | ||
100 | ****************************************************************************/ | ||
101 | struct mv643xx_eth_shared_platform_data loki_ge1_shared_data = { | ||
102 | .t_clk = LOKI_TCLK, | ||
103 | .dram = &loki_mbus_dram_info, | ||
104 | }; | ||
105 | |||
106 | static struct resource loki_ge1_shared_resources[] = { | ||
107 | { | ||
108 | .name = "ge1 base", | ||
109 | .start = GE1_PHYS_BASE + 0x2000, | ||
110 | .end = GE1_PHYS_BASE + 0x3fff, | ||
111 | .flags = IORESOURCE_MEM, | ||
112 | }, | ||
113 | }; | ||
114 | |||
115 | static struct platform_device loki_ge1_shared = { | ||
116 | .name = MV643XX_ETH_SHARED_NAME, | ||
117 | .id = 1, | ||
118 | .dev = { | ||
119 | .platform_data = &loki_ge1_shared_data, | ||
120 | }, | ||
121 | .num_resources = 1, | ||
122 | .resource = loki_ge1_shared_resources, | ||
123 | }; | ||
124 | |||
125 | static struct resource loki_ge1_resources[] = { | ||
126 | { | ||
127 | .name = "ge1 irq", | ||
128 | .start = IRQ_LOKI_GBE_B_INT, | ||
129 | .end = IRQ_LOKI_GBE_B_INT, | ||
130 | .flags = IORESOURCE_IRQ, | ||
131 | }, | ||
132 | }; | ||
133 | |||
134 | static struct platform_device loki_ge1 = { | ||
135 | .name = MV643XX_ETH_NAME, | ||
136 | .id = 1, | ||
137 | .num_resources = 1, | ||
138 | .resource = loki_ge1_resources, | ||
139 | }; | ||
140 | |||
141 | void __init loki_ge1_init(struct mv643xx_eth_platform_data *eth_data) | ||
142 | { | ||
143 | eth_data->shared = &loki_ge1_shared; | ||
144 | loki_ge1.dev.platform_data = eth_data; | ||
145 | |||
146 | writel(0x00079220, GE1_VIRT_BASE + 0x20b0); | ||
147 | platform_device_register(&loki_ge1_shared); | ||
148 | platform_device_register(&loki_ge1); | ||
149 | } | ||
150 | |||
151 | |||
152 | /***************************************************************************** | ||
153 | * SAS/SATA | ||
154 | ****************************************************************************/ | ||
155 | static struct resource loki_sas_resources[] = { | ||
156 | { | ||
157 | .name = "mvsas0 mem", | ||
158 | .start = SAS0_PHYS_BASE, | ||
159 | .end = SAS0_PHYS_BASE + 0x01ff, | ||
160 | .flags = IORESOURCE_MEM, | ||
161 | }, { | ||
162 | .name = "mvsas0 irq", | ||
163 | .start = IRQ_LOKI_SAS_A, | ||
164 | .end = IRQ_LOKI_SAS_A, | ||
165 | .flags = IORESOURCE_IRQ, | ||
166 | }, { | ||
167 | .name = "mvsas1 mem", | ||
168 | .start = SAS1_PHYS_BASE, | ||
169 | .end = SAS1_PHYS_BASE + 0x01ff, | ||
170 | .flags = IORESOURCE_MEM, | ||
171 | }, { | ||
172 | .name = "mvsas1 irq", | ||
173 | .start = IRQ_LOKI_SAS_B, | ||
174 | .end = IRQ_LOKI_SAS_B, | ||
175 | .flags = IORESOURCE_IRQ, | ||
176 | }, | ||
177 | }; | ||
178 | |||
179 | static struct platform_device loki_sas = { | ||
180 | .name = "mvsas", | ||
181 | .id = 0, | ||
182 | .dev = { | ||
183 | .coherent_dma_mask = 0xffffffff, | ||
184 | }, | ||
185 | .num_resources = ARRAY_SIZE(loki_sas_resources), | ||
186 | .resource = loki_sas_resources, | ||
187 | }; | ||
188 | |||
189 | void __init loki_sas_init(void) | ||
190 | { | ||
191 | writel(0x8300f707, DDR_REG(0x1424)); | ||
192 | platform_device_register(&loki_sas); | ||
193 | } | ||
194 | |||
195 | |||
196 | /***************************************************************************** | ||
197 | * UART0 | ||
198 | ****************************************************************************/ | ||
199 | static struct plat_serial8250_port loki_uart0_data[] = { | ||
200 | { | ||
201 | .mapbase = UART0_PHYS_BASE, | ||
202 | .membase = (char *)UART0_VIRT_BASE, | ||
203 | .irq = IRQ_LOKI_UART0, | ||
204 | .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, | ||
205 | .iotype = UPIO_MEM, | ||
206 | .regshift = 2, | ||
207 | .uartclk = LOKI_TCLK, | ||
208 | }, { | ||
209 | }, | ||
210 | }; | ||
211 | |||
212 | static struct resource loki_uart0_resources[] = { | ||
213 | { | ||
214 | .start = UART0_PHYS_BASE, | ||
215 | .end = UART0_PHYS_BASE + 0xff, | ||
216 | .flags = IORESOURCE_MEM, | ||
217 | }, { | ||
218 | .start = IRQ_LOKI_UART0, | ||
219 | .end = IRQ_LOKI_UART0, | ||
220 | .flags = IORESOURCE_IRQ, | ||
221 | }, | ||
222 | }; | ||
223 | |||
224 | static struct platform_device loki_uart0 = { | ||
225 | .name = "serial8250", | ||
226 | .id = 0, | ||
227 | .dev = { | ||
228 | .platform_data = loki_uart0_data, | ||
229 | }, | ||
230 | .resource = loki_uart0_resources, | ||
231 | .num_resources = ARRAY_SIZE(loki_uart0_resources), | ||
232 | }; | ||
233 | |||
234 | void __init loki_uart0_init(void) | ||
235 | { | ||
236 | platform_device_register(&loki_uart0); | ||
237 | } | ||
238 | |||
239 | |||
240 | /***************************************************************************** | ||
241 | * UART1 | ||
242 | ****************************************************************************/ | ||
243 | static struct plat_serial8250_port loki_uart1_data[] = { | ||
244 | { | ||
245 | .mapbase = UART1_PHYS_BASE, | ||
246 | .membase = (char *)UART1_VIRT_BASE, | ||
247 | .irq = IRQ_LOKI_UART1, | ||
248 | .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, | ||
249 | .iotype = UPIO_MEM, | ||
250 | .regshift = 2, | ||
251 | .uartclk = LOKI_TCLK, | ||
252 | }, { | ||
253 | }, | ||
254 | }; | ||
255 | |||
256 | static struct resource loki_uart1_resources[] = { | ||
257 | { | ||
258 | .start = UART1_PHYS_BASE, | ||
259 | .end = UART1_PHYS_BASE + 0xff, | ||
260 | .flags = IORESOURCE_MEM, | ||
261 | }, { | ||
262 | .start = IRQ_LOKI_UART1, | ||
263 | .end = IRQ_LOKI_UART1, | ||
264 | .flags = IORESOURCE_IRQ, | ||
265 | }, | ||
266 | }; | ||
267 | |||
268 | static struct platform_device loki_uart1 = { | ||
269 | .name = "serial8250", | ||
270 | .id = 1, | ||
271 | .dev = { | ||
272 | .platform_data = loki_uart1_data, | ||
273 | }, | ||
274 | .resource = loki_uart1_resources, | ||
275 | .num_resources = ARRAY_SIZE(loki_uart1_resources), | ||
276 | }; | ||
277 | |||
278 | void __init loki_uart1_init(void) | ||
279 | { | ||
280 | platform_device_register(&loki_uart1); | ||
281 | } | ||
282 | |||
283 | |||
284 | /***************************************************************************** | ||
285 | * Time handling | ||
286 | ****************************************************************************/ | ||
287 | static void loki_timer_init(void) | ||
288 | { | ||
289 | orion_time_init(IRQ_LOKI_BRIDGE, LOKI_TCLK); | ||
290 | } | ||
291 | |||
292 | struct sys_timer loki_timer = { | ||
293 | .init = loki_timer_init, | ||
294 | }; | ||
295 | |||
296 | |||
297 | /***************************************************************************** | ||
298 | * General | ||
299 | ****************************************************************************/ | ||
300 | void __init loki_init(void) | ||
301 | { | ||
302 | printk(KERN_INFO "Loki ID: 88RC8480. TCLK=%d.\n", LOKI_TCLK); | ||
303 | |||
304 | loki_setup_cpu_mbus(); | ||
305 | } | ||
diff --git a/arch/arm/mach-loki/common.h b/arch/arm/mach-loki/common.h new file mode 100644 index 000000000000..26054fd0f05e --- /dev/null +++ b/arch/arm/mach-loki/common.h | |||
@@ -0,0 +1,36 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-loki/common.h | ||
3 | * | ||
4 | * Core functions for Marvell Loki (88RC8480) SoCs | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #ifndef __ARCH_LOKI_COMMON_H | ||
12 | #define __ARCH_LOKI_COMMON_H | ||
13 | |||
14 | struct mv643xx_eth_platform_data; | ||
15 | |||
16 | /* | ||
17 | * Basic Loki init functions used early by machine-setup. | ||
18 | */ | ||
19 | void loki_map_io(void); | ||
20 | void loki_init(void); | ||
21 | void loki_init_irq(void); | ||
22 | |||
23 | extern struct mbus_dram_target_info loki_mbus_dram_info; | ||
24 | void loki_setup_cpu_mbus(void); | ||
25 | void loki_setup_dev_boot_win(u32 base, u32 size); | ||
26 | |||
27 | void loki_ge0_init(struct mv643xx_eth_platform_data *eth_data); | ||
28 | void loki_ge1_init(struct mv643xx_eth_platform_data *eth_data); | ||
29 | void loki_sas_init(void); | ||
30 | void loki_uart0_init(void); | ||
31 | void loki_uart1_init(void); | ||
32 | |||
33 | extern struct sys_timer loki_timer; | ||
34 | |||
35 | |||
36 | #endif | ||
diff --git a/arch/arm/mach-loki/irq.c b/arch/arm/mach-loki/irq.c new file mode 100644 index 000000000000..d839af91fe03 --- /dev/null +++ b/arch/arm/mach-loki/irq.c | |||
@@ -0,0 +1,21 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-loki/irq.c | ||
3 | * | ||
4 | * Marvell Loki (88RC8480) IRQ handling. | ||
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/irq.h> | ||
14 | #include <asm/io.h> | ||
15 | #include <asm/plat-orion/irq.h> | ||
16 | #include "common.h" | ||
17 | |||
18 | void __init loki_init_irq(void) | ||
19 | { | ||
20 | orion_irq_init(0, (void __iomem *)(IRQ_VIRT_BASE + IRQ_MASK_OFF)); | ||
21 | } | ||
diff --git a/arch/arm/mach-loki/lb88rc8480-setup.c b/arch/arm/mach-loki/lb88rc8480-setup.c new file mode 100644 index 000000000000..d1b9e6e6253a --- /dev/null +++ b/arch/arm/mach-loki/lb88rc8480-setup.c | |||
@@ -0,0 +1,100 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-loki/lb88rc8480-setup.c | ||
3 | * | ||
4 | * Marvell LB88RC8480 Development 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/irq.h> | ||
15 | #include <linux/mtd/physmap.h> | ||
16 | #include <linux/mtd/nand.h> | ||
17 | #include <linux/timer.h> | ||
18 | #include <linux/ata_platform.h> | ||
19 | #include <linux/mv643xx_eth.h> | ||
20 | #include <asm/mach-types.h> | ||
21 | #include <asm/mach/arch.h> | ||
22 | #include <asm/arch/loki.h> | ||
23 | #include "common.h" | ||
24 | |||
25 | #define LB88RC8480_FLASH_BOOT_CS_BASE 0xf8000000 | ||
26 | #define LB88RC8480_FLASH_BOOT_CS_SIZE SZ_128M | ||
27 | |||
28 | #define LB88RC8480_NOR_BOOT_BASE 0xff000000 | ||
29 | #define LB88RC8480_NOR_BOOT_SIZE SZ_16M | ||
30 | |||
31 | static struct mtd_partition lb88rc8480_boot_flash_parts[] = { | ||
32 | { | ||
33 | .name = "kernel", | ||
34 | .offset = 0, | ||
35 | .size = SZ_2M, | ||
36 | }, { | ||
37 | .name = "root-fs", | ||
38 | .offset = SZ_2M, | ||
39 | .size = (SZ_8M + SZ_4M + SZ_1M), | ||
40 | }, { | ||
41 | .name = "u-boot", | ||
42 | .offset = (SZ_8M + SZ_4M + SZ_2M + SZ_1M), | ||
43 | .size = SZ_1M, | ||
44 | }, | ||
45 | }; | ||
46 | |||
47 | static struct physmap_flash_data lb88rc8480_boot_flash_data = { | ||
48 | .parts = lb88rc8480_boot_flash_parts, | ||
49 | .nr_parts = ARRAY_SIZE(lb88rc8480_boot_flash_parts), | ||
50 | .width = 1, /* 8 bit bus width */ | ||
51 | }; | ||
52 | |||
53 | static struct resource lb88rc8480_boot_flash_resource = { | ||
54 | .flags = IORESOURCE_MEM, | ||
55 | .start = LB88RC8480_NOR_BOOT_BASE, | ||
56 | .end = LB88RC8480_NOR_BOOT_BASE + LB88RC8480_NOR_BOOT_SIZE - 1, | ||
57 | }; | ||
58 | |||
59 | static struct platform_device lb88rc8480_boot_flash = { | ||
60 | .name = "physmap-flash", | ||
61 | .id = 0, | ||
62 | .dev = { | ||
63 | .platform_data = &lb88rc8480_boot_flash_data, | ||
64 | }, | ||
65 | .num_resources = 1, | ||
66 | .resource = &lb88rc8480_boot_flash_resource, | ||
67 | }; | ||
68 | |||
69 | static struct mv643xx_eth_platform_data lb88rc8480_ge0_data = { | ||
70 | .phy_addr = 1, | ||
71 | .mac_addr = { 0x00, 0x50, 0x43, 0x11, 0x22, 0x33 }, | ||
72 | }; | ||
73 | |||
74 | static void __init lb88rc8480_init(void) | ||
75 | { | ||
76 | /* | ||
77 | * Basic setup. Needs to be called early. | ||
78 | */ | ||
79 | loki_init(); | ||
80 | |||
81 | loki_ge0_init(&lb88rc8480_ge0_data); | ||
82 | loki_sas_init(); | ||
83 | loki_uart0_init(); | ||
84 | loki_uart1_init(); | ||
85 | |||
86 | loki_setup_dev_boot_win(LB88RC8480_FLASH_BOOT_CS_BASE, | ||
87 | LB88RC8480_FLASH_BOOT_CS_SIZE); | ||
88 | platform_device_register(&lb88rc8480_boot_flash); | ||
89 | } | ||
90 | |||
91 | MACHINE_START(LB88RC8480, "Marvell LB88RC8480 Development Board") | ||
92 | /* Maintainer: Ke Wei <kewei@marvell.com> */ | ||
93 | .phys_io = LOKI_REGS_PHYS_BASE, | ||
94 | .io_pg_offst = ((LOKI_REGS_VIRT_BASE) >> 18) & 0xfffc, | ||
95 | .boot_params = 0x00000100, | ||
96 | .init_machine = lb88rc8480_init, | ||
97 | .map_io = loki_map_io, | ||
98 | .init_irq = loki_init_irq, | ||
99 | .timer = &loki_timer, | ||
100 | MACHINE_END | ||
diff --git a/arch/arm/mach-mv78xx0/Kconfig b/arch/arm/mach-mv78xx0/Kconfig new file mode 100644 index 000000000000..d83cb86837db --- /dev/null +++ b/arch/arm/mach-mv78xx0/Kconfig | |||
@@ -0,0 +1,13 @@ | |||
1 | if ARCH_MV78XX0 | ||
2 | |||
3 | menu "Marvell MV78xx0 Implementations" | ||
4 | |||
5 | config MACH_DB78X00_BP | ||
6 | bool "Marvell DB-78x00-BP Development Board" | ||
7 | help | ||
8 | Say 'Y' here if you want your kernel to support the | ||
9 | Marvell DB-78x00-BP Development Board. | ||
10 | |||
11 | endmenu | ||
12 | |||
13 | endif | ||
diff --git a/arch/arm/mach-mv78xx0/Makefile b/arch/arm/mach-mv78xx0/Makefile new file mode 100644 index 000000000000..ec16c05c3b1b --- /dev/null +++ b/arch/arm/mach-mv78xx0/Makefile | |||
@@ -0,0 +1,2 @@ | |||
1 | obj-y += common.o addr-map.o irq.o pcie.o | ||
2 | obj-$(CONFIG_MACH_DB78X00_BP) += db78x00-bp-setup.o | ||
diff --git a/arch/arm/mach-mv78xx0/Makefile.boot b/arch/arm/mach-mv78xx0/Makefile.boot new file mode 100644 index 000000000000..67039c3e0c48 --- /dev/null +++ b/arch/arm/mach-mv78xx0/Makefile.boot | |||
@@ -0,0 +1,3 @@ | |||
1 | zreladdr-y := 0x00008000 | ||
2 | params_phys-y := 0x00000100 | ||
3 | initrd_phys-y := 0x00800000 | ||
diff --git a/arch/arm/mach-mv78xx0/addr-map.c b/arch/arm/mach-mv78xx0/addr-map.c new file mode 100644 index 000000000000..4004b672a2eb --- /dev/null +++ b/arch/arm/mach-mv78xx0/addr-map.c | |||
@@ -0,0 +1,156 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-mv78xx0/addr-map.c | ||
3 | * | ||
4 | * Address map functions for Marvell MV78xx0 SoCs | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/init.h> | ||
13 | #include <linux/mbus.h> | ||
14 | #include <asm/io.h> | ||
15 | #include "common.h" | ||
16 | |||
17 | /* | ||
18 | * Generic Address Decode Windows bit settings | ||
19 | */ | ||
20 | #define TARGET_DDR 0 | ||
21 | #define TARGET_DEV_BUS 1 | ||
22 | #define TARGET_PCIE0 4 | ||
23 | #define TARGET_PCIE1 8 | ||
24 | #define TARGET_PCIE(i) ((i) ? TARGET_PCIE1 : TARGET_PCIE0) | ||
25 | #define ATTR_DEV_SPI_ROM 0x1f | ||
26 | #define ATTR_DEV_BOOT 0x2f | ||
27 | #define ATTR_DEV_CS3 0x37 | ||
28 | #define ATTR_DEV_CS2 0x3b | ||
29 | #define ATTR_DEV_CS1 0x3d | ||
30 | #define ATTR_DEV_CS0 0x3e | ||
31 | #define ATTR_PCIE_IO(l) (0xf0 & ~(0x10 << (l))) | ||
32 | #define ATTR_PCIE_MEM(l) (0xf8 & ~(0x10 << (l))) | ||
33 | |||
34 | /* | ||
35 | * Helpers to get DDR bank info | ||
36 | */ | ||
37 | #define DDR_BASE_CS_OFF(n) (0x0000 + ((n) << 3)) | ||
38 | #define DDR_SIZE_CS_OFF(n) (0x0004 + ((n) << 3)) | ||
39 | |||
40 | /* | ||
41 | * CPU Address Decode Windows registers | ||
42 | */ | ||
43 | #define WIN0_OFF(n) (BRIDGE_VIRT_BASE + 0x0000 + ((n) << 4)) | ||
44 | #define WIN8_OFF(n) (BRIDGE_VIRT_BASE + 0x0900 + (((n) - 8) << 4)) | ||
45 | #define WIN_CTRL_OFF 0x0000 | ||
46 | #define WIN_BASE_OFF 0x0004 | ||
47 | #define WIN_REMAP_LO_OFF 0x0008 | ||
48 | #define WIN_REMAP_HI_OFF 0x000c | ||
49 | |||
50 | |||
51 | struct mbus_dram_target_info mv78xx0_mbus_dram_info; | ||
52 | |||
53 | static void __init __iomem *win_cfg_base(int win) | ||
54 | { | ||
55 | /* | ||
56 | * Find the control register base address for this window. | ||
57 | * | ||
58 | * BRIDGE_VIRT_BASE points to the right (CPU0's or CPU1's) | ||
59 | * MBUS bridge depending on which CPU core we're running on, | ||
60 | * so we don't need to take that into account here. | ||
61 | */ | ||
62 | |||
63 | return (void __iomem *)((win < 8) ? WIN0_OFF(win) : WIN8_OFF(win)); | ||
64 | } | ||
65 | |||
66 | static int __init cpu_win_can_remap(int win) | ||
67 | { | ||
68 | if (win < 8) | ||
69 | return 1; | ||
70 | |||
71 | return 0; | ||
72 | } | ||
73 | |||
74 | static void __init setup_cpu_win(int win, u32 base, u32 size, | ||
75 | u8 target, u8 attr, int remap) | ||
76 | { | ||
77 | void __iomem *addr = win_cfg_base(win); | ||
78 | u32 ctrl; | ||
79 | |||
80 | base &= 0xffff0000; | ||
81 | ctrl = ((size - 1) & 0xffff0000) | (attr << 8) | (target << 4) | 1; | ||
82 | |||
83 | writel(base, addr + WIN_BASE_OFF); | ||
84 | writel(ctrl, addr + WIN_CTRL_OFF); | ||
85 | if (cpu_win_can_remap(win)) { | ||
86 | if (remap < 0) | ||
87 | remap = base; | ||
88 | |||
89 | writel(remap & 0xffff0000, addr + WIN_REMAP_LO_OFF); | ||
90 | writel(0, addr + WIN_REMAP_HI_OFF); | ||
91 | } | ||
92 | } | ||
93 | |||
94 | void __init mv78xx0_setup_cpu_mbus(void) | ||
95 | { | ||
96 | void __iomem *addr; | ||
97 | int i; | ||
98 | int cs; | ||
99 | |||
100 | /* | ||
101 | * First, disable and clear windows. | ||
102 | */ | ||
103 | for (i = 0; i < 14; i++) { | ||
104 | addr = win_cfg_base(i); | ||
105 | |||
106 | writel(0, addr + WIN_BASE_OFF); | ||
107 | writel(0, addr + WIN_CTRL_OFF); | ||
108 | if (cpu_win_can_remap(i)) { | ||
109 | writel(0, addr + WIN_REMAP_LO_OFF); | ||
110 | writel(0, addr + WIN_REMAP_HI_OFF); | ||
111 | } | ||
112 | } | ||
113 | |||
114 | /* | ||
115 | * Setup MBUS dram target info. | ||
116 | */ | ||
117 | mv78xx0_mbus_dram_info.mbus_dram_target_id = TARGET_DDR; | ||
118 | |||
119 | if (mv78xx0_core_index() == 0) | ||
120 | addr = (void __iomem *)DDR_WINDOW_CPU0_BASE; | ||
121 | else | ||
122 | addr = (void __iomem *)DDR_WINDOW_CPU1_BASE; | ||
123 | |||
124 | for (i = 0, cs = 0; i < 4; i++) { | ||
125 | u32 base = readl(addr + DDR_BASE_CS_OFF(i)); | ||
126 | u32 size = readl(addr + DDR_SIZE_CS_OFF(i)); | ||
127 | |||
128 | /* | ||
129 | * Chip select enabled? | ||
130 | */ | ||
131 | if (size & 1) { | ||
132 | struct mbus_dram_window *w; | ||
133 | |||
134 | w = &mv78xx0_mbus_dram_info.cs[cs++]; | ||
135 | w->cs_index = i; | ||
136 | w->mbus_attr = 0xf & ~(1 << i); | ||
137 | w->base = base & 0xffff0000; | ||
138 | w->size = (size | 0x0000ffff) + 1; | ||
139 | } | ||
140 | } | ||
141 | mv78xx0_mbus_dram_info.num_cs = cs; | ||
142 | } | ||
143 | |||
144 | void __init mv78xx0_setup_pcie_io_win(int window, u32 base, u32 size, | ||
145 | int maj, int min) | ||
146 | { | ||
147 | setup_cpu_win(window, base, size, TARGET_PCIE(maj), | ||
148 | ATTR_PCIE_IO(min), -1); | ||
149 | } | ||
150 | |||
151 | void __init mv78xx0_setup_pcie_mem_win(int window, u32 base, u32 size, | ||
152 | int maj, int min) | ||
153 | { | ||
154 | setup_cpu_win(window, base, size, TARGET_PCIE(maj), | ||
155 | ATTR_PCIE_MEM(min), -1); | ||
156 | } | ||
diff --git a/arch/arm/mach-mv78xx0/common.c b/arch/arm/mach-mv78xx0/common.c new file mode 100644 index 000000000000..d27b83b7bf62 --- /dev/null +++ b/arch/arm/mach-mv78xx0/common.c | |||
@@ -0,0 +1,754 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-mv78xx0/common.c | ||
3 | * | ||
4 | * Core functions for Marvell MV78xx0 SoCs | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/init.h> | ||
13 | #include <linux/platform_device.h> | ||
14 | #include <linux/serial_8250.h> | ||
15 | #include <linux/mbus.h> | ||
16 | #include <linux/mv643xx_eth.h> | ||
17 | #include <linux/ata_platform.h> | ||
18 | #include <asm/mach/map.h> | ||
19 | #include <asm/mach/time.h> | ||
20 | #include <asm/arch/mv78xx0.h> | ||
21 | #include <asm/plat-orion/cache-feroceon-l2.h> | ||
22 | #include <asm/plat-orion/ehci-orion.h> | ||
23 | #include <asm/plat-orion/orion_nand.h> | ||
24 | #include <asm/plat-orion/time.h> | ||
25 | #include "common.h" | ||
26 | |||
27 | |||
28 | /***************************************************************************** | ||
29 | * Common bits | ||
30 | ****************************************************************************/ | ||
31 | int mv78xx0_core_index(void) | ||
32 | { | ||
33 | u32 extra; | ||
34 | |||
35 | /* | ||
36 | * Read Extra Features register. | ||
37 | */ | ||
38 | __asm__("mrc p15, 1, %0, c15, c1, 0" : "=r" (extra)); | ||
39 | |||
40 | return !!(extra & 0x00004000); | ||
41 | } | ||
42 | |||
43 | static int get_hclk(void) | ||
44 | { | ||
45 | int hclk; | ||
46 | |||
47 | /* | ||
48 | * HCLK tick rate is configured by DEV_D[7:5] pins. | ||
49 | */ | ||
50 | switch ((readl(SAMPLE_AT_RESET_LOW) >> 5) & 7) { | ||
51 | case 0: | ||
52 | hclk = 166666667; | ||
53 | break; | ||
54 | case 1: | ||
55 | hclk = 200000000; | ||
56 | break; | ||
57 | case 2: | ||
58 | hclk = 266666667; | ||
59 | break; | ||
60 | case 3: | ||
61 | hclk = 333333333; | ||
62 | break; | ||
63 | case 4: | ||
64 | hclk = 400000000; | ||
65 | break; | ||
66 | default: | ||
67 | panic("unknown HCLK PLL setting: %.8x\n", | ||
68 | readl(SAMPLE_AT_RESET_LOW)); | ||
69 | } | ||
70 | |||
71 | return hclk; | ||
72 | } | ||
73 | |||
74 | static void get_pclk_l2clk(int hclk, int core_index, int *pclk, int *l2clk) | ||
75 | { | ||
76 | u32 cfg; | ||
77 | |||
78 | /* | ||
79 | * Core #0 PCLK/L2CLK is configured by bits [13:8], core #1 | ||
80 | * PCLK/L2CLK by bits [19:14]. | ||
81 | */ | ||
82 | if (core_index == 0) { | ||
83 | cfg = (readl(SAMPLE_AT_RESET_LOW) >> 8) & 0x3f; | ||
84 | } else { | ||
85 | cfg = (readl(SAMPLE_AT_RESET_LOW) >> 14) & 0x3f; | ||
86 | } | ||
87 | |||
88 | /* | ||
89 | * Bits [11:8] ([17:14] for core #1) configure the PCLK:HCLK | ||
90 | * ratio (1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6). | ||
91 | */ | ||
92 | *pclk = ((u64)hclk * (2 + (cfg & 0xf))) >> 1; | ||
93 | |||
94 | /* | ||
95 | * Bits [13:12] ([19:18] for core #1) configure the PCLK:L2CLK | ||
96 | * ratio (1, 2, 3). | ||
97 | */ | ||
98 | *l2clk = *pclk / (((cfg >> 4) & 3) + 1); | ||
99 | } | ||
100 | |||
101 | static int get_tclk(void) | ||
102 | { | ||
103 | int tclk; | ||
104 | |||
105 | /* | ||
106 | * TCLK tick rate is configured by DEV_A[2:0] strap pins. | ||
107 | */ | ||
108 | switch ((readl(SAMPLE_AT_RESET_HIGH) >> 6) & 7) { | ||
109 | case 1: | ||
110 | tclk = 166666667; | ||
111 | break; | ||
112 | case 3: | ||
113 | tclk = 200000000; | ||
114 | break; | ||
115 | default: | ||
116 | panic("unknown TCLK PLL setting: %.8x\n", | ||
117 | readl(SAMPLE_AT_RESET_HIGH)); | ||
118 | } | ||
119 | |||
120 | return tclk; | ||
121 | } | ||
122 | |||
123 | |||
124 | /***************************************************************************** | ||
125 | * I/O Address Mapping | ||
126 | ****************************************************************************/ | ||
127 | static struct map_desc mv78xx0_io_desc[] __initdata = { | ||
128 | { | ||
129 | .virtual = MV78XX0_CORE_REGS_VIRT_BASE, | ||
130 | .pfn = 0, | ||
131 | .length = MV78XX0_CORE_REGS_SIZE, | ||
132 | .type = MT_DEVICE, | ||
133 | }, { | ||
134 | .virtual = MV78XX0_PCIE_IO_VIRT_BASE(0), | ||
135 | .pfn = __phys_to_pfn(MV78XX0_PCIE_IO_PHYS_BASE(0)), | ||
136 | .length = MV78XX0_PCIE_IO_SIZE * 8, | ||
137 | .type = MT_DEVICE, | ||
138 | }, { | ||
139 | .virtual = MV78XX0_REGS_VIRT_BASE, | ||
140 | .pfn = __phys_to_pfn(MV78XX0_REGS_PHYS_BASE), | ||
141 | .length = MV78XX0_REGS_SIZE, | ||
142 | .type = MT_DEVICE, | ||
143 | }, | ||
144 | }; | ||
145 | |||
146 | void __init mv78xx0_map_io(void) | ||
147 | { | ||
148 | unsigned long phys; | ||
149 | |||
150 | /* | ||
151 | * Map the right set of per-core registers depending on | ||
152 | * which core we are running on. | ||
153 | */ | ||
154 | if (mv78xx0_core_index() == 0) { | ||
155 | phys = MV78XX0_CORE0_REGS_PHYS_BASE; | ||
156 | } else { | ||
157 | phys = MV78XX0_CORE1_REGS_PHYS_BASE; | ||
158 | } | ||
159 | mv78xx0_io_desc[0].pfn = __phys_to_pfn(phys); | ||
160 | |||
161 | iotable_init(mv78xx0_io_desc, ARRAY_SIZE(mv78xx0_io_desc)); | ||
162 | } | ||
163 | |||
164 | |||
165 | /***************************************************************************** | ||
166 | * EHCI | ||
167 | ****************************************************************************/ | ||
168 | static struct orion_ehci_data mv78xx0_ehci_data = { | ||
169 | .dram = &mv78xx0_mbus_dram_info, | ||
170 | }; | ||
171 | |||
172 | static u64 ehci_dmamask = 0xffffffffUL; | ||
173 | |||
174 | |||
175 | /***************************************************************************** | ||
176 | * EHCI0 | ||
177 | ****************************************************************************/ | ||
178 | static struct resource mv78xx0_ehci0_resources[] = { | ||
179 | { | ||
180 | .start = USB0_PHYS_BASE, | ||
181 | .end = USB0_PHYS_BASE + 0x0fff, | ||
182 | .flags = IORESOURCE_MEM, | ||
183 | }, { | ||
184 | .start = IRQ_MV78XX0_USB_0, | ||
185 | .end = IRQ_MV78XX0_USB_0, | ||
186 | .flags = IORESOURCE_IRQ, | ||
187 | }, | ||
188 | }; | ||
189 | |||
190 | static struct platform_device mv78xx0_ehci0 = { | ||
191 | .name = "orion-ehci", | ||
192 | .id = 0, | ||
193 | .dev = { | ||
194 | .dma_mask = &ehci_dmamask, | ||
195 | .coherent_dma_mask = 0xffffffff, | ||
196 | .platform_data = &mv78xx0_ehci_data, | ||
197 | }, | ||
198 | .resource = mv78xx0_ehci0_resources, | ||
199 | .num_resources = ARRAY_SIZE(mv78xx0_ehci0_resources), | ||
200 | }; | ||
201 | |||
202 | void __init mv78xx0_ehci0_init(void) | ||
203 | { | ||
204 | platform_device_register(&mv78xx0_ehci0); | ||
205 | } | ||
206 | |||
207 | |||
208 | /***************************************************************************** | ||
209 | * EHCI1 | ||
210 | ****************************************************************************/ | ||
211 | static struct resource mv78xx0_ehci1_resources[] = { | ||
212 | { | ||
213 | .start = USB1_PHYS_BASE, | ||
214 | .end = USB1_PHYS_BASE + 0x0fff, | ||
215 | .flags = IORESOURCE_MEM, | ||
216 | }, { | ||
217 | .start = IRQ_MV78XX0_USB_1, | ||
218 | .end = IRQ_MV78XX0_USB_1, | ||
219 | .flags = IORESOURCE_IRQ, | ||
220 | }, | ||
221 | }; | ||
222 | |||
223 | static struct platform_device mv78xx0_ehci1 = { | ||
224 | .name = "orion-ehci", | ||
225 | .id = 1, | ||
226 | .dev = { | ||
227 | .dma_mask = &ehci_dmamask, | ||
228 | .coherent_dma_mask = 0xffffffff, | ||
229 | .platform_data = &mv78xx0_ehci_data, | ||
230 | }, | ||
231 | .resource = mv78xx0_ehci1_resources, | ||
232 | .num_resources = ARRAY_SIZE(mv78xx0_ehci1_resources), | ||
233 | }; | ||
234 | |||
235 | void __init mv78xx0_ehci1_init(void) | ||
236 | { | ||
237 | platform_device_register(&mv78xx0_ehci1); | ||
238 | } | ||
239 | |||
240 | |||
241 | /***************************************************************************** | ||
242 | * EHCI2 | ||
243 | ****************************************************************************/ | ||
244 | static struct resource mv78xx0_ehci2_resources[] = { | ||
245 | { | ||
246 | .start = USB2_PHYS_BASE, | ||
247 | .end = USB2_PHYS_BASE + 0x0fff, | ||
248 | .flags = IORESOURCE_MEM, | ||
249 | }, { | ||
250 | .start = IRQ_MV78XX0_USB_2, | ||
251 | .end = IRQ_MV78XX0_USB_2, | ||
252 | .flags = IORESOURCE_IRQ, | ||
253 | }, | ||
254 | }; | ||
255 | |||
256 | static struct platform_device mv78xx0_ehci2 = { | ||
257 | .name = "orion-ehci", | ||
258 | .id = 2, | ||
259 | .dev = { | ||
260 | .dma_mask = &ehci_dmamask, | ||
261 | .coherent_dma_mask = 0xffffffff, | ||
262 | .platform_data = &mv78xx0_ehci_data, | ||
263 | }, | ||
264 | .resource = mv78xx0_ehci2_resources, | ||
265 | .num_resources = ARRAY_SIZE(mv78xx0_ehci2_resources), | ||
266 | }; | ||
267 | |||
268 | void __init mv78xx0_ehci2_init(void) | ||
269 | { | ||
270 | platform_device_register(&mv78xx0_ehci2); | ||
271 | } | ||
272 | |||
273 | |||
274 | /***************************************************************************** | ||
275 | * GE00 | ||
276 | ****************************************************************************/ | ||
277 | struct mv643xx_eth_shared_platform_data mv78xx0_ge00_shared_data = { | ||
278 | .t_clk = 0, | ||
279 | .dram = &mv78xx0_mbus_dram_info, | ||
280 | }; | ||
281 | |||
282 | static struct resource mv78xx0_ge00_shared_resources[] = { | ||
283 | { | ||
284 | .name = "ge00 base", | ||
285 | .start = GE00_PHYS_BASE + 0x2000, | ||
286 | .end = GE00_PHYS_BASE + 0x3fff, | ||
287 | .flags = IORESOURCE_MEM, | ||
288 | }, | ||
289 | }; | ||
290 | |||
291 | static struct platform_device mv78xx0_ge00_shared = { | ||
292 | .name = MV643XX_ETH_SHARED_NAME, | ||
293 | .id = 0, | ||
294 | .dev = { | ||
295 | .platform_data = &mv78xx0_ge00_shared_data, | ||
296 | }, | ||
297 | .num_resources = 1, | ||
298 | .resource = mv78xx0_ge00_shared_resources, | ||
299 | }; | ||
300 | |||
301 | static struct resource mv78xx0_ge00_resources[] = { | ||
302 | { | ||
303 | .name = "ge00 irq", | ||
304 | .start = IRQ_MV78XX0_GE00_SUM, | ||
305 | .end = IRQ_MV78XX0_GE00_SUM, | ||
306 | .flags = IORESOURCE_IRQ, | ||
307 | }, | ||
308 | }; | ||
309 | |||
310 | static struct platform_device mv78xx0_ge00 = { | ||
311 | .name = MV643XX_ETH_NAME, | ||
312 | .id = 0, | ||
313 | .num_resources = 1, | ||
314 | .resource = mv78xx0_ge00_resources, | ||
315 | }; | ||
316 | |||
317 | void __init mv78xx0_ge00_init(struct mv643xx_eth_platform_data *eth_data) | ||
318 | { | ||
319 | eth_data->shared = &mv78xx0_ge00_shared; | ||
320 | mv78xx0_ge00.dev.platform_data = eth_data; | ||
321 | |||
322 | platform_device_register(&mv78xx0_ge00_shared); | ||
323 | platform_device_register(&mv78xx0_ge00); | ||
324 | } | ||
325 | |||
326 | |||
327 | /***************************************************************************** | ||
328 | * GE01 | ||
329 | ****************************************************************************/ | ||
330 | struct mv643xx_eth_shared_platform_data mv78xx0_ge01_shared_data = { | ||
331 | .t_clk = 0, | ||
332 | .dram = &mv78xx0_mbus_dram_info, | ||
333 | }; | ||
334 | |||
335 | static struct resource mv78xx0_ge01_shared_resources[] = { | ||
336 | { | ||
337 | .name = "ge01 base", | ||
338 | .start = GE01_PHYS_BASE + 0x2000, | ||
339 | .end = GE01_PHYS_BASE + 0x3fff, | ||
340 | .flags = IORESOURCE_MEM, | ||
341 | }, | ||
342 | }; | ||
343 | |||
344 | static struct platform_device mv78xx0_ge01_shared = { | ||
345 | .name = MV643XX_ETH_SHARED_NAME, | ||
346 | .id = 1, | ||
347 | .dev = { | ||
348 | .platform_data = &mv78xx0_ge01_shared_data, | ||
349 | }, | ||
350 | .num_resources = 1, | ||
351 | .resource = mv78xx0_ge01_shared_resources, | ||
352 | }; | ||
353 | |||
354 | static struct resource mv78xx0_ge01_resources[] = { | ||
355 | { | ||
356 | .name = "ge01 irq", | ||
357 | .start = IRQ_MV78XX0_GE01_SUM, | ||
358 | .end = IRQ_MV78XX0_GE01_SUM, | ||
359 | .flags = IORESOURCE_IRQ, | ||
360 | }, | ||
361 | }; | ||
362 | |||
363 | static struct platform_device mv78xx0_ge01 = { | ||
364 | .name = MV643XX_ETH_NAME, | ||
365 | .id = 1, | ||
366 | .num_resources = 1, | ||
367 | .resource = mv78xx0_ge01_resources, | ||
368 | }; | ||
369 | |||
370 | void __init mv78xx0_ge01_init(struct mv643xx_eth_platform_data *eth_data) | ||
371 | { | ||
372 | eth_data->shared = &mv78xx0_ge01_shared; | ||
373 | eth_data->shared_smi = &mv78xx0_ge00_shared; | ||
374 | mv78xx0_ge01.dev.platform_data = eth_data; | ||
375 | |||
376 | platform_device_register(&mv78xx0_ge01_shared); | ||
377 | platform_device_register(&mv78xx0_ge01); | ||
378 | } | ||
379 | |||
380 | |||
381 | /***************************************************************************** | ||
382 | * GE10 | ||
383 | ****************************************************************************/ | ||
384 | struct mv643xx_eth_shared_platform_data mv78xx0_ge10_shared_data = { | ||
385 | .t_clk = 0, | ||
386 | .dram = &mv78xx0_mbus_dram_info, | ||
387 | }; | ||
388 | |||
389 | static struct resource mv78xx0_ge10_shared_resources[] = { | ||
390 | { | ||
391 | .name = "ge10 base", | ||
392 | .start = GE10_PHYS_BASE + 0x2000, | ||
393 | .end = GE10_PHYS_BASE + 0x3fff, | ||
394 | .flags = IORESOURCE_MEM, | ||
395 | }, | ||
396 | }; | ||
397 | |||
398 | static struct platform_device mv78xx0_ge10_shared = { | ||
399 | .name = MV643XX_ETH_SHARED_NAME, | ||
400 | .id = 2, | ||
401 | .dev = { | ||
402 | .platform_data = &mv78xx0_ge10_shared_data, | ||
403 | }, | ||
404 | .num_resources = 1, | ||
405 | .resource = mv78xx0_ge10_shared_resources, | ||
406 | }; | ||
407 | |||
408 | static struct resource mv78xx0_ge10_resources[] = { | ||
409 | { | ||
410 | .name = "ge10 irq", | ||
411 | .start = IRQ_MV78XX0_GE10_SUM, | ||
412 | .end = IRQ_MV78XX0_GE10_SUM, | ||
413 | .flags = IORESOURCE_IRQ, | ||
414 | }, | ||
415 | }; | ||
416 | |||
417 | static struct platform_device mv78xx0_ge10 = { | ||
418 | .name = MV643XX_ETH_NAME, | ||
419 | .id = 2, | ||
420 | .num_resources = 1, | ||
421 | .resource = mv78xx0_ge10_resources, | ||
422 | }; | ||
423 | |||
424 | void __init mv78xx0_ge10_init(struct mv643xx_eth_platform_data *eth_data) | ||
425 | { | ||
426 | eth_data->shared = &mv78xx0_ge10_shared; | ||
427 | eth_data->shared_smi = &mv78xx0_ge00_shared; | ||
428 | mv78xx0_ge10.dev.platform_data = eth_data; | ||
429 | |||
430 | platform_device_register(&mv78xx0_ge10_shared); | ||
431 | platform_device_register(&mv78xx0_ge10); | ||
432 | } | ||
433 | |||
434 | |||
435 | /***************************************************************************** | ||
436 | * GE11 | ||
437 | ****************************************************************************/ | ||
438 | struct mv643xx_eth_shared_platform_data mv78xx0_ge11_shared_data = { | ||
439 | .t_clk = 0, | ||
440 | .dram = &mv78xx0_mbus_dram_info, | ||
441 | }; | ||
442 | |||
443 | static struct resource mv78xx0_ge11_shared_resources[] = { | ||
444 | { | ||
445 | .name = "ge11 base", | ||
446 | .start = GE11_PHYS_BASE + 0x2000, | ||
447 | .end = GE11_PHYS_BASE + 0x3fff, | ||
448 | .flags = IORESOURCE_MEM, | ||
449 | }, | ||
450 | }; | ||
451 | |||
452 | static struct platform_device mv78xx0_ge11_shared = { | ||
453 | .name = MV643XX_ETH_SHARED_NAME, | ||
454 | .id = 3, | ||
455 | .dev = { | ||
456 | .platform_data = &mv78xx0_ge11_shared_data, | ||
457 | }, | ||
458 | .num_resources = 1, | ||
459 | .resource = mv78xx0_ge11_shared_resources, | ||
460 | }; | ||
461 | |||
462 | static struct resource mv78xx0_ge11_resources[] = { | ||
463 | { | ||
464 | .name = "ge11 irq", | ||
465 | .start = IRQ_MV78XX0_GE11_SUM, | ||
466 | .end = IRQ_MV78XX0_GE11_SUM, | ||
467 | .flags = IORESOURCE_IRQ, | ||
468 | }, | ||
469 | }; | ||
470 | |||
471 | static struct platform_device mv78xx0_ge11 = { | ||
472 | .name = MV643XX_ETH_NAME, | ||
473 | .id = 3, | ||
474 | .num_resources = 1, | ||
475 | .resource = mv78xx0_ge11_resources, | ||
476 | }; | ||
477 | |||
478 | void __init mv78xx0_ge11_init(struct mv643xx_eth_platform_data *eth_data) | ||
479 | { | ||
480 | eth_data->shared = &mv78xx0_ge11_shared; | ||
481 | eth_data->shared_smi = &mv78xx0_ge00_shared; | ||
482 | mv78xx0_ge11.dev.platform_data = eth_data; | ||
483 | |||
484 | platform_device_register(&mv78xx0_ge11_shared); | ||
485 | platform_device_register(&mv78xx0_ge11); | ||
486 | } | ||
487 | |||
488 | |||
489 | /***************************************************************************** | ||
490 | * SATA | ||
491 | ****************************************************************************/ | ||
492 | static struct resource mv78xx0_sata_resources[] = { | ||
493 | { | ||
494 | .name = "sata base", | ||
495 | .start = SATA_PHYS_BASE, | ||
496 | .end = SATA_PHYS_BASE + 0x5000 - 1, | ||
497 | .flags = IORESOURCE_MEM, | ||
498 | }, { | ||
499 | .name = "sata irq", | ||
500 | .start = IRQ_MV78XX0_SATA, | ||
501 | .end = IRQ_MV78XX0_SATA, | ||
502 | .flags = IORESOURCE_IRQ, | ||
503 | }, | ||
504 | }; | ||
505 | |||
506 | static struct platform_device mv78xx0_sata = { | ||
507 | .name = "sata_mv", | ||
508 | .id = 0, | ||
509 | .dev = { | ||
510 | .coherent_dma_mask = 0xffffffff, | ||
511 | }, | ||
512 | .num_resources = ARRAY_SIZE(mv78xx0_sata_resources), | ||
513 | .resource = mv78xx0_sata_resources, | ||
514 | }; | ||
515 | |||
516 | void __init mv78xx0_sata_init(struct mv_sata_platform_data *sata_data) | ||
517 | { | ||
518 | sata_data->dram = &mv78xx0_mbus_dram_info; | ||
519 | mv78xx0_sata.dev.platform_data = sata_data; | ||
520 | platform_device_register(&mv78xx0_sata); | ||
521 | } | ||
522 | |||
523 | |||
524 | /***************************************************************************** | ||
525 | * UART0 | ||
526 | ****************************************************************************/ | ||
527 | static struct plat_serial8250_port mv78xx0_uart0_data[] = { | ||
528 | { | ||
529 | .mapbase = UART0_PHYS_BASE, | ||
530 | .membase = (char *)UART0_VIRT_BASE, | ||
531 | .irq = IRQ_MV78XX0_UART_0, | ||
532 | .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, | ||
533 | .iotype = UPIO_MEM, | ||
534 | .regshift = 2, | ||
535 | .uartclk = 0, | ||
536 | }, { | ||
537 | }, | ||
538 | }; | ||
539 | |||
540 | static struct resource mv78xx0_uart0_resources[] = { | ||
541 | { | ||
542 | .start = UART0_PHYS_BASE, | ||
543 | .end = UART0_PHYS_BASE + 0xff, | ||
544 | .flags = IORESOURCE_MEM, | ||
545 | }, { | ||
546 | .start = IRQ_MV78XX0_UART_0, | ||
547 | .end = IRQ_MV78XX0_UART_0, | ||
548 | .flags = IORESOURCE_IRQ, | ||
549 | }, | ||
550 | }; | ||
551 | |||
552 | static struct platform_device mv78xx0_uart0 = { | ||
553 | .name = "serial8250", | ||
554 | .id = 0, | ||
555 | .dev = { | ||
556 | .platform_data = mv78xx0_uart0_data, | ||
557 | }, | ||
558 | .resource = mv78xx0_uart0_resources, | ||
559 | .num_resources = ARRAY_SIZE(mv78xx0_uart0_resources), | ||
560 | }; | ||
561 | |||
562 | void __init mv78xx0_uart0_init(void) | ||
563 | { | ||
564 | platform_device_register(&mv78xx0_uart0); | ||
565 | } | ||
566 | |||
567 | |||
568 | /***************************************************************************** | ||
569 | * UART1 | ||
570 | ****************************************************************************/ | ||
571 | static struct plat_serial8250_port mv78xx0_uart1_data[] = { | ||
572 | { | ||
573 | .mapbase = UART1_PHYS_BASE, | ||
574 | .membase = (char *)UART1_VIRT_BASE, | ||
575 | .irq = IRQ_MV78XX0_UART_1, | ||
576 | .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, | ||
577 | .iotype = UPIO_MEM, | ||
578 | .regshift = 2, | ||
579 | .uartclk = 0, | ||
580 | }, { | ||
581 | }, | ||
582 | }; | ||
583 | |||
584 | static struct resource mv78xx0_uart1_resources[] = { | ||
585 | { | ||
586 | .start = UART1_PHYS_BASE, | ||
587 | .end = UART1_PHYS_BASE + 0xff, | ||
588 | .flags = IORESOURCE_MEM, | ||
589 | }, { | ||
590 | .start = IRQ_MV78XX0_UART_1, | ||
591 | .end = IRQ_MV78XX0_UART_1, | ||
592 | .flags = IORESOURCE_IRQ, | ||
593 | }, | ||
594 | }; | ||
595 | |||
596 | static struct platform_device mv78xx0_uart1 = { | ||
597 | .name = "serial8250", | ||
598 | .id = 1, | ||
599 | .dev = { | ||
600 | .platform_data = mv78xx0_uart1_data, | ||
601 | }, | ||
602 | .resource = mv78xx0_uart1_resources, | ||
603 | .num_resources = ARRAY_SIZE(mv78xx0_uart1_resources), | ||
604 | }; | ||
605 | |||
606 | void __init mv78xx0_uart1_init(void) | ||
607 | { | ||
608 | platform_device_register(&mv78xx0_uart1); | ||
609 | } | ||
610 | |||
611 | |||
612 | /***************************************************************************** | ||
613 | * UART2 | ||
614 | ****************************************************************************/ | ||
615 | static struct plat_serial8250_port mv78xx0_uart2_data[] = { | ||
616 | { | ||
617 | .mapbase = UART2_PHYS_BASE, | ||
618 | .membase = (char *)UART2_VIRT_BASE, | ||
619 | .irq = IRQ_MV78XX0_UART_2, | ||
620 | .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, | ||
621 | .iotype = UPIO_MEM, | ||
622 | .regshift = 2, | ||
623 | .uartclk = 0, | ||
624 | }, { | ||
625 | }, | ||
626 | }; | ||
627 | |||
628 | static struct resource mv78xx0_uart2_resources[] = { | ||
629 | { | ||
630 | .start = UART2_PHYS_BASE, | ||
631 | .end = UART2_PHYS_BASE + 0xff, | ||
632 | .flags = IORESOURCE_MEM, | ||
633 | }, { | ||
634 | .start = IRQ_MV78XX0_UART_2, | ||
635 | .end = IRQ_MV78XX0_UART_2, | ||
636 | .flags = IORESOURCE_IRQ, | ||
637 | }, | ||
638 | }; | ||
639 | |||
640 | static struct platform_device mv78xx0_uart2 = { | ||
641 | .name = "serial8250", | ||
642 | .id = 2, | ||
643 | .dev = { | ||
644 | .platform_data = mv78xx0_uart2_data, | ||
645 | }, | ||
646 | .resource = mv78xx0_uart2_resources, | ||
647 | .num_resources = ARRAY_SIZE(mv78xx0_uart2_resources), | ||
648 | }; | ||
649 | |||
650 | void __init mv78xx0_uart2_init(void) | ||
651 | { | ||
652 | platform_device_register(&mv78xx0_uart2); | ||
653 | } | ||
654 | |||
655 | |||
656 | /***************************************************************************** | ||
657 | * UART3 | ||
658 | ****************************************************************************/ | ||
659 | static struct plat_serial8250_port mv78xx0_uart3_data[] = { | ||
660 | { | ||
661 | .mapbase = UART3_PHYS_BASE, | ||
662 | .membase = (char *)UART3_VIRT_BASE, | ||
663 | .irq = IRQ_MV78XX0_UART_3, | ||
664 | .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, | ||
665 | .iotype = UPIO_MEM, | ||
666 | .regshift = 2, | ||
667 | .uartclk = 0, | ||
668 | }, { | ||
669 | }, | ||
670 | }; | ||
671 | |||
672 | static struct resource mv78xx0_uart3_resources[] = { | ||
673 | { | ||
674 | .start = UART3_PHYS_BASE, | ||
675 | .end = UART3_PHYS_BASE + 0xff, | ||
676 | .flags = IORESOURCE_MEM, | ||
677 | }, { | ||
678 | .start = IRQ_MV78XX0_UART_3, | ||
679 | .end = IRQ_MV78XX0_UART_3, | ||
680 | .flags = IORESOURCE_IRQ, | ||
681 | }, | ||
682 | }; | ||
683 | |||
684 | static struct platform_device mv78xx0_uart3 = { | ||
685 | .name = "serial8250", | ||
686 | .id = 3, | ||
687 | .dev = { | ||
688 | .platform_data = mv78xx0_uart3_data, | ||
689 | }, | ||
690 | .resource = mv78xx0_uart3_resources, | ||
691 | .num_resources = ARRAY_SIZE(mv78xx0_uart3_resources), | ||
692 | }; | ||
693 | |||
694 | void __init mv78xx0_uart3_init(void) | ||
695 | { | ||
696 | platform_device_register(&mv78xx0_uart3); | ||
697 | } | ||
698 | |||
699 | |||
700 | /***************************************************************************** | ||
701 | * Time handling | ||
702 | ****************************************************************************/ | ||
703 | static void mv78xx0_timer_init(void) | ||
704 | { | ||
705 | orion_time_init(IRQ_MV78XX0_TIMER_1, get_tclk()); | ||
706 | } | ||
707 | |||
708 | struct sys_timer mv78xx0_timer = { | ||
709 | .init = mv78xx0_timer_init, | ||
710 | }; | ||
711 | |||
712 | |||
713 | /***************************************************************************** | ||
714 | * General | ||
715 | ****************************************************************************/ | ||
716 | static int __init is_l2_writethrough(void) | ||
717 | { | ||
718 | return !!(readl(CPU_CONTROL) & L2_WRITETHROUGH); | ||
719 | } | ||
720 | |||
721 | void __init mv78xx0_init(void) | ||
722 | { | ||
723 | int core_index; | ||
724 | int hclk; | ||
725 | int pclk; | ||
726 | int l2clk; | ||
727 | int tclk; | ||
728 | |||
729 | core_index = mv78xx0_core_index(); | ||
730 | hclk = get_hclk(); | ||
731 | get_pclk_l2clk(hclk, core_index, &pclk, &l2clk); | ||
732 | tclk = get_tclk(); | ||
733 | |||
734 | printk(KERN_INFO "MV78xx0 core #%d, ", core_index); | ||
735 | printk("PCLK = %dMHz, ", (pclk + 499999) / 1000000); | ||
736 | printk("L2 = %dMHz, ", (l2clk + 499999) / 1000000); | ||
737 | printk("HCLK = %dMHz, ", (hclk + 499999) / 1000000); | ||
738 | printk("TCLK = %dMHz\n", (tclk + 499999) / 1000000); | ||
739 | |||
740 | mv78xx0_setup_cpu_mbus(); | ||
741 | |||
742 | #ifdef CONFIG_CACHE_FEROCEON_L2 | ||
743 | feroceon_l2_init(is_l2_writethrough()); | ||
744 | #endif | ||
745 | |||
746 | mv78xx0_ge00_shared_data.t_clk = tclk; | ||
747 | mv78xx0_ge01_shared_data.t_clk = tclk; | ||
748 | mv78xx0_ge10_shared_data.t_clk = tclk; | ||
749 | mv78xx0_ge11_shared_data.t_clk = tclk; | ||
750 | mv78xx0_uart0_data[0].uartclk = tclk; | ||
751 | mv78xx0_uart1_data[0].uartclk = tclk; | ||
752 | mv78xx0_uart2_data[0].uartclk = tclk; | ||
753 | mv78xx0_uart3_data[0].uartclk = tclk; | ||
754 | } | ||
diff --git a/arch/arm/mach-mv78xx0/common.h b/arch/arm/mach-mv78xx0/common.h new file mode 100644 index 000000000000..78af5de319dd --- /dev/null +++ b/arch/arm/mach-mv78xx0/common.h | |||
@@ -0,0 +1,49 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-mv78xx0/common.h | ||
3 | * | ||
4 | * Core functions for Marvell MV78xx0 SoCs | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #ifndef __ARCH_MV78XX0_COMMON_H | ||
12 | #define __ARCH_MV78XX0_COMMON_H | ||
13 | |||
14 | struct mv643xx_eth_platform_data; | ||
15 | struct mv_sata_platform_data; | ||
16 | |||
17 | /* | ||
18 | * Basic MV78xx0 init functions used early by machine-setup. | ||
19 | */ | ||
20 | int mv78xx0_core_index(void); | ||
21 | void mv78xx0_map_io(void); | ||
22 | void mv78xx0_init(void); | ||
23 | void mv78xx0_init_irq(void); | ||
24 | |||
25 | extern struct mbus_dram_target_info mv78xx0_mbus_dram_info; | ||
26 | void mv78xx0_setup_cpu_mbus(void); | ||
27 | void mv78xx0_setup_pcie_io_win(int window, u32 base, u32 size, | ||
28 | int maj, int min); | ||
29 | void mv78xx0_setup_pcie_mem_win(int window, u32 base, u32 size, | ||
30 | int maj, int min); | ||
31 | |||
32 | void mv78xx0_ehci0_init(void); | ||
33 | void mv78xx0_ehci1_init(void); | ||
34 | void mv78xx0_ehci2_init(void); | ||
35 | void mv78xx0_ge00_init(struct mv643xx_eth_platform_data *eth_data); | ||
36 | void mv78xx0_ge01_init(struct mv643xx_eth_platform_data *eth_data); | ||
37 | void mv78xx0_ge10_init(struct mv643xx_eth_platform_data *eth_data); | ||
38 | void mv78xx0_ge11_init(struct mv643xx_eth_platform_data *eth_data); | ||
39 | void mv78xx0_pcie_init(int init_port0, int init_port1); | ||
40 | void mv78xx0_sata_init(struct mv_sata_platform_data *sata_data); | ||
41 | void mv78xx0_uart0_init(void); | ||
42 | void mv78xx0_uart1_init(void); | ||
43 | void mv78xx0_uart2_init(void); | ||
44 | void mv78xx0_uart3_init(void); | ||
45 | |||
46 | extern struct sys_timer mv78xx0_timer; | ||
47 | |||
48 | |||
49 | #endif | ||
diff --git a/arch/arm/mach-mv78xx0/db78x00-bp-setup.c b/arch/arm/mach-mv78xx0/db78x00-bp-setup.c new file mode 100644 index 000000000000..0c93d19193df --- /dev/null +++ b/arch/arm/mach-mv78xx0/db78x00-bp-setup.c | |||
@@ -0,0 +1,94 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-mv78xx0/db78x00-bp-setup.c | ||
3 | * | ||
4 | * Marvell DB-78x00-BP Development 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/ata_platform.h> | ||
15 | #include <linux/mv643xx_eth.h> | ||
16 | #include <asm/arch/mv78xx0.h> | ||
17 | #include <asm/mach-types.h> | ||
18 | #include <asm/mach/arch.h> | ||
19 | #include "common.h" | ||
20 | |||
21 | static struct mv643xx_eth_platform_data db78x00_ge00_data = { | ||
22 | .phy_addr = 8, | ||
23 | }; | ||
24 | |||
25 | static struct mv643xx_eth_platform_data db78x00_ge01_data = { | ||
26 | .phy_addr = 9, | ||
27 | }; | ||
28 | |||
29 | static struct mv643xx_eth_platform_data db78x00_ge10_data = { | ||
30 | .phy_addr = -1, | ||
31 | }; | ||
32 | |||
33 | static struct mv643xx_eth_platform_data db78x00_ge11_data = { | ||
34 | .phy_addr = -1, | ||
35 | }; | ||
36 | |||
37 | static struct mv_sata_platform_data db78x00_sata_data = { | ||
38 | .n_ports = 2, | ||
39 | }; | ||
40 | |||
41 | static void __init db78x00_init(void) | ||
42 | { | ||
43 | /* | ||
44 | * Basic MV78xx0 setup. Needs to be called early. | ||
45 | */ | ||
46 | mv78xx0_init(); | ||
47 | |||
48 | /* | ||
49 | * Partition on-chip peripherals between the two CPU cores. | ||
50 | */ | ||
51 | if (mv78xx0_core_index() == 0) { | ||
52 | mv78xx0_ehci0_init(); | ||
53 | mv78xx0_ehci1_init(); | ||
54 | mv78xx0_ehci2_init(); | ||
55 | mv78xx0_ge00_init(&db78x00_ge00_data); | ||
56 | mv78xx0_ge01_init(&db78x00_ge01_data); | ||
57 | mv78xx0_ge10_init(&db78x00_ge10_data); | ||
58 | mv78xx0_ge11_init(&db78x00_ge11_data); | ||
59 | mv78xx0_sata_init(&db78x00_sata_data); | ||
60 | mv78xx0_uart0_init(); | ||
61 | mv78xx0_uart2_init(); | ||
62 | } else { | ||
63 | mv78xx0_uart1_init(); | ||
64 | mv78xx0_uart3_init(); | ||
65 | } | ||
66 | } | ||
67 | |||
68 | static int __init db78x00_pci_init(void) | ||
69 | { | ||
70 | if (machine_is_db78x00_bp()) { | ||
71 | /* | ||
72 | * Assign the x16 PCIe slot on the board to CPU core | ||
73 | * #0, and let CPU core #1 have the four x1 slots. | ||
74 | */ | ||
75 | if (mv78xx0_core_index() == 0) | ||
76 | mv78xx0_pcie_init(0, 1); | ||
77 | else | ||
78 | mv78xx0_pcie_init(1, 0); | ||
79 | } | ||
80 | |||
81 | return 0; | ||
82 | } | ||
83 | subsys_initcall(db78x00_pci_init); | ||
84 | |||
85 | MACHINE_START(DB78X00_BP, "Marvell DB-78x00-BP Development Board") | ||
86 | /* Maintainer: Lennert Buytenhek <buytenh@marvell.com> */ | ||
87 | .phys_io = MV78XX0_REGS_PHYS_BASE, | ||
88 | .io_pg_offst = ((MV78XX0_REGS_VIRT_BASE) >> 18) & 0xfffc, | ||
89 | .boot_params = 0x00000100, | ||
90 | .init_machine = db78x00_init, | ||
91 | .map_io = mv78xx0_map_io, | ||
92 | .init_irq = mv78xx0_init_irq, | ||
93 | .timer = &mv78xx0_timer, | ||
94 | MACHINE_END | ||
diff --git a/arch/arm/mach-mv78xx0/irq.c b/arch/arm/mach-mv78xx0/irq.c new file mode 100644 index 000000000000..60f4ee4d4532 --- /dev/null +++ b/arch/arm/mach-mv78xx0/irq.c | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-mv78xx0/irq.c | ||
3 | * | ||
4 | * MV78xx0 IRQ handling. | ||
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/pci.h> | ||
14 | #include <asm/arch/mv78xx0.h> | ||
15 | #include <asm/plat-orion/irq.h> | ||
16 | #include "common.h" | ||
17 | |||
18 | void __init mv78xx0_init_irq(void) | ||
19 | { | ||
20 | orion_irq_init(0, (void __iomem *)(IRQ_VIRT_BASE + IRQ_MASK_LOW_OFF)); | ||
21 | orion_irq_init(32, (void __iomem *)(IRQ_VIRT_BASE + IRQ_MASK_HIGH_OFF)); | ||
22 | } | ||
diff --git a/arch/arm/mach-mv78xx0/pcie.c b/arch/arm/mach-mv78xx0/pcie.c new file mode 100644 index 000000000000..b78e1443159f --- /dev/null +++ b/arch/arm/mach-mv78xx0/pcie.c | |||
@@ -0,0 +1,312 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-mv78xx0/pcie.c | ||
3 | * | ||
4 | * PCIe functions for Marvell MV78xx0 SoCs | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/pci.h> | ||
13 | #include <linux/mbus.h> | ||
14 | #include <asm/mach/pci.h> | ||
15 | #include <asm/plat-orion/pcie.h> | ||
16 | #include "common.h" | ||
17 | |||
18 | struct pcie_port { | ||
19 | u8 maj; | ||
20 | u8 min; | ||
21 | u8 root_bus_nr; | ||
22 | void __iomem *base; | ||
23 | spinlock_t conf_lock; | ||
24 | char io_space_name[16]; | ||
25 | char mem_space_name[16]; | ||
26 | struct resource res[2]; | ||
27 | }; | ||
28 | |||
29 | static struct pcie_port pcie_port[8]; | ||
30 | static int num_pcie_ports; | ||
31 | static struct resource pcie_io_space; | ||
32 | static struct resource pcie_mem_space; | ||
33 | |||
34 | |||
35 | static void __init mv78xx0_pcie_preinit(void) | ||
36 | { | ||
37 | int i; | ||
38 | u32 size_each; | ||
39 | u32 start; | ||
40 | int win; | ||
41 | |||
42 | pcie_io_space.name = "PCIe I/O Space"; | ||
43 | pcie_io_space.start = MV78XX0_PCIE_IO_PHYS_BASE(0); | ||
44 | pcie_io_space.end = | ||
45 | MV78XX0_PCIE_IO_PHYS_BASE(0) + MV78XX0_PCIE_IO_SIZE * 8 - 1; | ||
46 | pcie_io_space.flags = IORESOURCE_IO; | ||
47 | if (request_resource(&iomem_resource, &pcie_io_space)) | ||
48 | panic("can't allocate PCIe I/O space"); | ||
49 | |||
50 | pcie_mem_space.name = "PCIe MEM Space"; | ||
51 | pcie_mem_space.start = MV78XX0_PCIE_MEM_PHYS_BASE; | ||
52 | pcie_mem_space.end = | ||
53 | MV78XX0_PCIE_MEM_PHYS_BASE + MV78XX0_PCIE_MEM_SIZE - 1; | ||
54 | pcie_mem_space.flags = IORESOURCE_MEM; | ||
55 | if (request_resource(&iomem_resource, &pcie_mem_space)) | ||
56 | panic("can't allocate PCIe MEM space"); | ||
57 | |||
58 | for (i = 0; i < num_pcie_ports; i++) { | ||
59 | struct pcie_port *pp = pcie_port + i; | ||
60 | |||
61 | snprintf(pp->io_space_name, sizeof(pp->io_space_name), | ||
62 | "PCIe %d.%d I/O", pp->maj, pp->min); | ||
63 | pp->io_space_name[sizeof(pp->io_space_name) - 1] = 0; | ||
64 | pp->res[0].name = pp->io_space_name; | ||
65 | pp->res[0].start = MV78XX0_PCIE_IO_PHYS_BASE(i); | ||
66 | pp->res[0].end = pp->res[0].start + MV78XX0_PCIE_IO_SIZE - 1; | ||
67 | pp->res[0].flags = IORESOURCE_IO; | ||
68 | |||
69 | snprintf(pp->mem_space_name, sizeof(pp->mem_space_name), | ||
70 | "PCIe %d.%d MEM", pp->maj, pp->min); | ||
71 | pp->mem_space_name[sizeof(pp->mem_space_name) - 1] = 0; | ||
72 | pp->res[1].name = pp->mem_space_name; | ||
73 | pp->res[1].flags = IORESOURCE_MEM; | ||
74 | } | ||
75 | |||
76 | switch (num_pcie_ports) { | ||
77 | case 0: | ||
78 | size_each = 0; | ||
79 | break; | ||
80 | |||
81 | case 1: | ||
82 | size_each = 0x30000000; | ||
83 | break; | ||
84 | |||
85 | case 2 ... 3: | ||
86 | size_each = 0x10000000; | ||
87 | break; | ||
88 | |||
89 | case 4 ... 6: | ||
90 | size_each = 0x08000000; | ||
91 | break; | ||
92 | |||
93 | case 7: | ||
94 | size_each = 0x04000000; | ||
95 | break; | ||
96 | |||
97 | default: | ||
98 | panic("invalid number of PCIe ports"); | ||
99 | } | ||
100 | |||
101 | start = MV78XX0_PCIE_MEM_PHYS_BASE; | ||
102 | for (i = 0; i < num_pcie_ports; i++) { | ||
103 | struct pcie_port *pp = pcie_port + i; | ||
104 | |||
105 | pp->res[1].start = start; | ||
106 | pp->res[1].end = start + size_each - 1; | ||
107 | start += size_each; | ||
108 | } | ||
109 | |||
110 | for (i = 0; i < num_pcie_ports; i++) { | ||
111 | struct pcie_port *pp = pcie_port + i; | ||
112 | |||
113 | if (request_resource(&pcie_io_space, &pp->res[0])) | ||
114 | panic("can't allocate PCIe I/O sub-space"); | ||
115 | |||
116 | if (request_resource(&pcie_mem_space, &pp->res[1])) | ||
117 | panic("can't allocate PCIe MEM sub-space"); | ||
118 | } | ||
119 | |||
120 | win = 0; | ||
121 | for (i = 0; i < num_pcie_ports; i++) { | ||
122 | struct pcie_port *pp = pcie_port + i; | ||
123 | |||
124 | mv78xx0_setup_pcie_io_win(win++, pp->res[0].start, | ||
125 | pp->res[0].end - pp->res[0].start + 1, | ||
126 | pp->maj, pp->min); | ||
127 | |||
128 | mv78xx0_setup_pcie_mem_win(win++, pp->res[1].start, | ||
129 | pp->res[1].end - pp->res[1].start + 1, | ||
130 | pp->maj, pp->min); | ||
131 | } | ||
132 | } | ||
133 | |||
134 | static int __init mv78xx0_pcie_setup(int nr, struct pci_sys_data *sys) | ||
135 | { | ||
136 | struct pcie_port *pp; | ||
137 | |||
138 | if (nr >= num_pcie_ports) | ||
139 | return 0; | ||
140 | |||
141 | pp = &pcie_port[nr]; | ||
142 | pp->root_bus_nr = sys->busnr; | ||
143 | |||
144 | /* | ||
145 | * Generic PCIe unit setup. | ||
146 | */ | ||
147 | orion_pcie_set_local_bus_nr(pp->base, sys->busnr); | ||
148 | orion_pcie_setup(pp->base, &mv78xx0_mbus_dram_info); | ||
149 | |||
150 | sys->resource[0] = &pp->res[0]; | ||
151 | sys->resource[1] = &pp->res[1]; | ||
152 | sys->resource[2] = NULL; | ||
153 | |||
154 | return 1; | ||
155 | } | ||
156 | |||
157 | static struct pcie_port *bus_to_port(int bus) | ||
158 | { | ||
159 | int i; | ||
160 | |||
161 | for (i = num_pcie_ports - 1; i >= 0; i--) { | ||
162 | int rbus = pcie_port[i].root_bus_nr; | ||
163 | if (rbus != -1 && rbus <= bus) | ||
164 | break; | ||
165 | } | ||
166 | |||
167 | return i >= 0 ? pcie_port + i : NULL; | ||
168 | } | ||
169 | |||
170 | static int pcie_valid_config(struct pcie_port *pp, int bus, int dev) | ||
171 | { | ||
172 | /* | ||
173 | * Don't go out when trying to access nonexisting devices | ||
174 | * on the local bus. | ||
175 | */ | ||
176 | if (bus == pp->root_bus_nr && dev > 1) | ||
177 | return 0; | ||
178 | |||
179 | return 1; | ||
180 | } | ||
181 | |||
182 | static int pcie_rd_conf(struct pci_bus *bus, u32 devfn, int where, | ||
183 | int size, u32 *val) | ||
184 | { | ||
185 | struct pcie_port *pp = bus_to_port(bus->number); | ||
186 | unsigned long flags; | ||
187 | int ret; | ||
188 | |||
189 | if (pcie_valid_config(pp, bus->number, PCI_SLOT(devfn)) == 0) { | ||
190 | *val = 0xffffffff; | ||
191 | return PCIBIOS_DEVICE_NOT_FOUND; | ||
192 | } | ||
193 | |||
194 | spin_lock_irqsave(&pp->conf_lock, flags); | ||
195 | ret = orion_pcie_rd_conf(pp->base, bus, devfn, where, size, val); | ||
196 | spin_unlock_irqrestore(&pp->conf_lock, flags); | ||
197 | |||
198 | return ret; | ||
199 | } | ||
200 | |||
201 | static int pcie_wr_conf(struct pci_bus *bus, u32 devfn, | ||
202 | int where, int size, u32 val) | ||
203 | { | ||
204 | struct pcie_port *pp = bus_to_port(bus->number); | ||
205 | unsigned long flags; | ||
206 | int ret; | ||
207 | |||
208 | if (pcie_valid_config(pp, bus->number, PCI_SLOT(devfn)) == 0) | ||
209 | return PCIBIOS_DEVICE_NOT_FOUND; | ||
210 | |||
211 | spin_lock_irqsave(&pp->conf_lock, flags); | ||
212 | ret = orion_pcie_wr_conf(pp->base, bus, devfn, where, size, val); | ||
213 | spin_unlock_irqrestore(&pp->conf_lock, flags); | ||
214 | |||
215 | return ret; | ||
216 | } | ||
217 | |||
218 | static struct pci_ops pcie_ops = { | ||
219 | .read = pcie_rd_conf, | ||
220 | .write = pcie_wr_conf, | ||
221 | }; | ||
222 | |||
223 | static void __devinit rc_pci_fixup(struct pci_dev *dev) | ||
224 | { | ||
225 | /* | ||
226 | * Prevent enumeration of root complex. | ||
227 | */ | ||
228 | if (dev->bus->parent == NULL && dev->devfn == 0) { | ||
229 | int i; | ||
230 | |||
231 | for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) { | ||
232 | dev->resource[i].start = 0; | ||
233 | dev->resource[i].end = 0; | ||
234 | dev->resource[i].flags = 0; | ||
235 | } | ||
236 | } | ||
237 | } | ||
238 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL, PCI_ANY_ID, rc_pci_fixup); | ||
239 | |||
240 | static struct pci_bus __init * | ||
241 | mv78xx0_pcie_scan_bus(int nr, struct pci_sys_data *sys) | ||
242 | { | ||
243 | struct pci_bus *bus; | ||
244 | |||
245 | if (nr < num_pcie_ports) { | ||
246 | bus = pci_scan_bus(sys->busnr, &pcie_ops, sys); | ||
247 | } else { | ||
248 | bus = NULL; | ||
249 | BUG(); | ||
250 | } | ||
251 | |||
252 | return bus; | ||
253 | } | ||
254 | |||
255 | static int __init mv78xx0_pcie_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | ||
256 | { | ||
257 | struct pcie_port *pp = bus_to_port(dev->bus->number); | ||
258 | |||
259 | return IRQ_MV78XX0_PCIE_00 + (pp->maj << 2) + pp->min; | ||
260 | } | ||
261 | |||
262 | static struct hw_pci mv78xx0_pci __initdata = { | ||
263 | .nr_controllers = 8, | ||
264 | .preinit = mv78xx0_pcie_preinit, | ||
265 | .swizzle = pci_std_swizzle, | ||
266 | .setup = mv78xx0_pcie_setup, | ||
267 | .scan = mv78xx0_pcie_scan_bus, | ||
268 | .map_irq = mv78xx0_pcie_map_irq, | ||
269 | }; | ||
270 | |||
271 | static void __init add_pcie_port(int maj, int min, unsigned long base) | ||
272 | { | ||
273 | printk(KERN_INFO "MV78xx0 PCIe port %d.%d: ", maj, min); | ||
274 | |||
275 | if (orion_pcie_link_up((void __iomem *)base)) { | ||
276 | struct pcie_port *pp = &pcie_port[num_pcie_ports++]; | ||
277 | |||
278 | printk("link up\n"); | ||
279 | |||
280 | pp->maj = maj; | ||
281 | pp->min = min; | ||
282 | pp->root_bus_nr = -1; | ||
283 | pp->base = (void __iomem *)base; | ||
284 | spin_lock_init(&pp->conf_lock); | ||
285 | memset(pp->res, 0, sizeof(pp->res)); | ||
286 | } else { | ||
287 | printk("link down, ignoring\n"); | ||
288 | } | ||
289 | } | ||
290 | |||
291 | void __init mv78xx0_pcie_init(int init_port0, int init_port1) | ||
292 | { | ||
293 | if (init_port0) { | ||
294 | add_pcie_port(0, 0, PCIE00_VIRT_BASE); | ||
295 | if (!orion_pcie_x4_mode((void __iomem *)PCIE00_VIRT_BASE)) { | ||
296 | add_pcie_port(0, 1, PCIE01_VIRT_BASE); | ||
297 | add_pcie_port(0, 2, PCIE02_VIRT_BASE); | ||
298 | add_pcie_port(0, 3, PCIE03_VIRT_BASE); | ||
299 | } | ||
300 | } | ||
301 | |||
302 | if (init_port1) { | ||
303 | add_pcie_port(1, 0, PCIE10_VIRT_BASE); | ||
304 | if (!orion_pcie_x4_mode((void __iomem *)PCIE10_VIRT_BASE)) { | ||
305 | add_pcie_port(1, 1, PCIE11_VIRT_BASE); | ||
306 | add_pcie_port(1, 2, PCIE12_VIRT_BASE); | ||
307 | add_pcie_port(1, 3, PCIE13_VIRT_BASE); | ||
308 | } | ||
309 | } | ||
310 | |||
311 | pci_common_init(&mv78xx0_pci); | ||
312 | } | ||
diff --git a/arch/arm/mach-omap1/board-nokia770.c b/arch/arm/mach-omap1/board-nokia770.c index bcb984f2300f..3f39e0e79c9f 100644 --- a/arch/arm/mach-omap1/board-nokia770.c +++ b/arch/arm/mach-omap1/board-nokia770.c | |||
@@ -10,6 +10,7 @@ | |||
10 | 10 | ||
11 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
13 | #include <linux/mutex.h> | ||
13 | #include <linux/platform_device.h> | 14 | #include <linux/platform_device.h> |
14 | #include <linux/input.h> | 15 | #include <linux/input.h> |
15 | #include <linux/clk.h> | 16 | #include <linux/clk.h> |
@@ -202,7 +203,7 @@ static struct omap_board_config_kernel nokia770_config[] __initdata = { | |||
202 | #define AMPLIFIER_CTRL_GPIO 58 | 203 | #define AMPLIFIER_CTRL_GPIO 58 |
203 | 204 | ||
204 | static struct clk *dspxor_ck; | 205 | static struct clk *dspxor_ck; |
205 | static DECLARE_MUTEX(audio_pwr_sem); | 206 | static DEFINE_MUTEX(audio_pwr_lock); |
206 | /* | 207 | /* |
207 | * audio_pwr_state | 208 | * audio_pwr_state |
208 | * +--+-------------------------+---------------------------------------+ | 209 | * +--+-------------------------+---------------------------------------+ |
@@ -218,7 +219,7 @@ static DECLARE_MUTEX(audio_pwr_sem); | |||
218 | static int audio_pwr_state = -1; | 219 | static int audio_pwr_state = -1; |
219 | 220 | ||
220 | /* | 221 | /* |
221 | * audio_pwr_up / down should be called under audio_pwr_sem | 222 | * audio_pwr_up / down should be called under audio_pwr_lock |
222 | */ | 223 | */ |
223 | static void nokia770_audio_pwr_up(void) | 224 | static void nokia770_audio_pwr_up(void) |
224 | { | 225 | { |
@@ -237,11 +238,11 @@ static void nokia770_audio_pwr_up(void) | |||
237 | 238 | ||
238 | static void codec_delayed_power_down(struct work_struct *work) | 239 | static void codec_delayed_power_down(struct work_struct *work) |
239 | { | 240 | { |
240 | down(&audio_pwr_sem); | 241 | mutex_lock(&audio_pwr_lock); |
241 | if (audio_pwr_state == -1) | 242 | if (audio_pwr_state == -1) |
242 | aic23_power_down(); | 243 | aic23_power_down(); |
243 | clk_disable(dspxor_ck); | 244 | clk_disable(dspxor_ck); |
244 | up(&audio_pwr_sem); | 245 | mutex_unlock(&audio_pwr_lock); |
245 | } | 246 | } |
246 | 247 | ||
247 | static DECLARE_DELAYED_WORK(codec_power_down_work, codec_delayed_power_down); | 248 | static DECLARE_DELAYED_WORK(codec_power_down_work, codec_delayed_power_down); |
@@ -258,19 +259,19 @@ static void nokia770_audio_pwr_down(void) | |||
258 | static int | 259 | static int |
259 | nokia770_audio_pwr_up_request(struct dsp_kfunc_device *kdev, int stage) | 260 | nokia770_audio_pwr_up_request(struct dsp_kfunc_device *kdev, int stage) |
260 | { | 261 | { |
261 | down(&audio_pwr_sem); | 262 | mutex_lock(&audio_pwr_lock); |
262 | if (audio_pwr_state == -1) | 263 | if (audio_pwr_state == -1) |
263 | nokia770_audio_pwr_up(); | 264 | nokia770_audio_pwr_up(); |
264 | /* force audio_pwr_state = 0, even if it was 1. */ | 265 | /* force audio_pwr_state = 0, even if it was 1. */ |
265 | audio_pwr_state = 0; | 266 | audio_pwr_state = 0; |
266 | up(&audio_pwr_sem); | 267 | mutex_unlock(&audio_pwr_lock); |
267 | return 0; | 268 | return 0; |
268 | } | 269 | } |
269 | 270 | ||
270 | static int | 271 | static int |
271 | nokia770_audio_pwr_down_request(struct dsp_kfunc_device *kdev, int stage) | 272 | nokia770_audio_pwr_down_request(struct dsp_kfunc_device *kdev, int stage) |
272 | { | 273 | { |
273 | down(&audio_pwr_sem); | 274 | mutex_lock(&audio_pwr_lock); |
274 | switch (stage) { | 275 | switch (stage) { |
275 | case 1: | 276 | case 1: |
276 | if (audio_pwr_state == 0) | 277 | if (audio_pwr_state == 0) |
@@ -283,7 +284,7 @@ nokia770_audio_pwr_down_request(struct dsp_kfunc_device *kdev, int stage) | |||
283 | } | 284 | } |
284 | break; | 285 | break; |
285 | } | 286 | } |
286 | up(&audio_pwr_sem); | 287 | mutex_unlock(&audio_pwr_lock); |
287 | return 0; | 288 | return 0; |
288 | } | 289 | } |
289 | 290 | ||
diff --git a/arch/arm/mach-omap1/pm.c b/arch/arm/mach-omap1/pm.c index e6c64e10b7ec..742f79e73bd7 100644 --- a/arch/arm/mach-omap1/pm.c +++ b/arch/arm/mach-omap1/pm.c | |||
@@ -116,13 +116,6 @@ void omap_pm_idle(void) | |||
116 | return; | 116 | return; |
117 | } | 117 | } |
118 | 118 | ||
119 | /* | ||
120 | * Since an interrupt may set up a timer, we don't want to | ||
121 | * reprogram the hardware timer with interrupts enabled. | ||
122 | * Re-enable interrupts only after returning from idle. | ||
123 | */ | ||
124 | timer_dyn_reprogram(); | ||
125 | |||
126 | #ifdef CONFIG_OMAP_MPU_TIMER | 119 | #ifdef CONFIG_OMAP_MPU_TIMER |
127 | #warning Enable 32kHz OS timer in order to allow sleep states in idle | 120 | #warning Enable 32kHz OS timer in order to allow sleep states in idle |
128 | use_idlect1 = use_idlect1 & ~(1 << 9); | 121 | use_idlect1 = use_idlect1 & ~(1 << 9); |
diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c index aad781dcf1b1..d6c9de82ca0c 100644 --- a/arch/arm/mach-omap2/pm.c +++ b/arch/arm/mach-omap2/pm.c | |||
@@ -57,13 +57,6 @@ void omap2_pm_idle(void) | |||
57 | return; | 57 | return; |
58 | } | 58 | } |
59 | 59 | ||
60 | /* | ||
61 | * Since an interrupt may set up a timer, we don't want to | ||
62 | * reprogram the hardware timer with interrupts enabled. | ||
63 | * Re-enable interrupts only after returning from idle. | ||
64 | */ | ||
65 | timer_dyn_reprogram(); | ||
66 | |||
67 | omap2_sram_idle(); | 60 | omap2_sram_idle(); |
68 | local_fiq_enable(); | 61 | local_fiq_enable(); |
69 | local_irq_enable(); | 62 | local_irq_enable(); |
diff --git a/arch/arm/mach-orion5x/Kconfig b/arch/arm/mach-orion5x/Kconfig index 93debf336155..ddcd41b15d17 100644 --- a/arch/arm/mach-orion5x/Kconfig +++ b/arch/arm/mach-orion5x/Kconfig | |||
@@ -44,6 +44,54 @@ config MACH_LINKSTATION_PRO | |||
44 | Buffalo Linkstation Pro/Live platform. Both v1 and | 44 | Buffalo Linkstation Pro/Live platform. Both v1 and |
45 | v2 devices are supported. | 45 | v2 devices are supported. |
46 | 46 | ||
47 | config MACH_TS409 | ||
48 | bool "QNAP TS-409" | ||
49 | help | ||
50 | Say 'Y' here if you want your kernel to support the | ||
51 | QNAP TS-409 platform. | ||
52 | |||
53 | config MACH_WRT350N_V2 | ||
54 | bool "Linksys WRT350N v2" | ||
55 | help | ||
56 | Say 'Y' here if you want your kernel to support the | ||
57 | Linksys WRT350N v2 platform. | ||
58 | |||
59 | config MACH_TS78XX | ||
60 | bool "Technologic Systems TS-78xx" | ||
61 | help | ||
62 | Say 'Y' here if you want your kernel to support the | ||
63 | Technologic Systems TS-78xx platform. | ||
64 | |||
65 | config MACH_MV2120 | ||
66 | bool "HP Media Vault mv2120" | ||
67 | help | ||
68 | Say 'Y' here if you want your kernel to support the | ||
69 | HP Media Vault mv2120 or mv5100. | ||
70 | |||
71 | config MACH_MSS2 | ||
72 | bool "Maxtor Shared Storage II" | ||
73 | help | ||
74 | Say 'Y' here if you want your kernel to support the | ||
75 | Maxtor Shared Storage II platform. | ||
76 | |||
77 | config MACH_WNR854T | ||
78 | bool "Netgear WNR854T" | ||
79 | help | ||
80 | Say 'Y' here if you want your kernel to support the | ||
81 | Netgear WNR854T platform. | ||
82 | |||
83 | config MACH_RD88F5181L_GE | ||
84 | bool "Marvell Orion-VoIP GE Reference Design" | ||
85 | help | ||
86 | Say 'Y' here if you want your kernel to support the | ||
87 | Marvell Orion-VoIP GE (88F5181L) RD. | ||
88 | |||
89 | config MACH_RD88F5181L_FXO | ||
90 | bool "Marvell Orion-VoIP FXO Reference Design" | ||
91 | help | ||
92 | Say 'Y' here if you want your kernel to support the | ||
93 | Marvell Orion-VoIP FXO (88F5181L) RD. | ||
94 | |||
47 | endmenu | 95 | endmenu |
48 | 96 | ||
49 | endif | 97 | endif |
diff --git a/arch/arm/mach-orion5x/Makefile b/arch/arm/mach-orion5x/Makefile index 9301bf55910b..fcc48a8864f3 100644 --- a/arch/arm/mach-orion5x/Makefile +++ b/arch/arm/mach-orion5x/Makefile | |||
@@ -1,7 +1,15 @@ | |||
1 | obj-y += common.o addr-map.o pci.o gpio.o irq.o | 1 | obj-y += common.o addr-map.o pci.o gpio.o irq.o mpp.o |
2 | obj-$(CONFIG_MACH_DB88F5281) += db88f5281-setup.o | 2 | obj-$(CONFIG_MACH_DB88F5281) += db88f5281-setup.o |
3 | obj-$(CONFIG_MACH_RD88F5182) += rd88f5182-setup.o | 3 | obj-$(CONFIG_MACH_RD88F5182) += rd88f5182-setup.o |
4 | obj-$(CONFIG_MACH_KUROBOX_PRO) += kurobox_pro-setup.o | 4 | obj-$(CONFIG_MACH_KUROBOX_PRO) += kurobox_pro-setup.o |
5 | obj-$(CONFIG_MACH_LINKSTATION_PRO) += kurobox_pro-setup.o | 5 | obj-$(CONFIG_MACH_LINKSTATION_PRO) += kurobox_pro-setup.o |
6 | obj-$(CONFIG_MACH_DNS323) += dns323-setup.o | 6 | obj-$(CONFIG_MACH_DNS323) += dns323-setup.o |
7 | obj-$(CONFIG_MACH_TS209) += ts209-setup.o | 7 | obj-$(CONFIG_MACH_TS209) += ts209-setup.o tsx09-common.o |
8 | obj-$(CONFIG_MACH_TS409) += ts409-setup.o tsx09-common.o | ||
9 | obj-$(CONFIG_MACH_WRT350N_V2) += wrt350n-v2-setup.o | ||
10 | obj-$(CONFIG_MACH_TS78XX) += ts78xx-setup.o | ||
11 | obj-$(CONFIG_MACH_MV2120) += mv2120-setup.o | ||
12 | obj-$(CONFIG_MACH_MSS2) += mss2-setup.o | ||
13 | obj-$(CONFIG_MACH_WNR854T) += wnr854t-setup.o | ||
14 | obj-$(CONFIG_MACH_RD88F5181L_GE) += rd88f5181l-ge-setup.o | ||
15 | obj-$(CONFIG_MACH_RD88F5181L_FXO) += rd88f5181l-fxo-setup.o | ||
diff --git a/arch/arm/mach-orion5x/addr-map.c b/arch/arm/mach-orion5x/addr-map.c index e63fb05dc893..6f0dbda6c44c 100644 --- a/arch/arm/mach-orion5x/addr-map.c +++ b/arch/arm/mach-orion5x/addr-map.c | |||
@@ -70,6 +70,7 @@ | |||
70 | 70 | ||
71 | 71 | ||
72 | struct mbus_dram_target_info orion5x_mbus_dram_info; | 72 | struct mbus_dram_target_info orion5x_mbus_dram_info; |
73 | static int __initdata win_alloc_count; | ||
73 | 74 | ||
74 | static int __init orion5x_cpu_win_can_remap(int win) | 75 | static int __init orion5x_cpu_win_can_remap(int win) |
75 | { | 76 | { |
@@ -87,16 +88,22 @@ static int __init orion5x_cpu_win_can_remap(int win) | |||
87 | static void __init setup_cpu_win(int win, u32 base, u32 size, | 88 | static void __init setup_cpu_win(int win, u32 base, u32 size, |
88 | u8 target, u8 attr, int remap) | 89 | u8 target, u8 attr, int remap) |
89 | { | 90 | { |
90 | orion5x_write(CPU_WIN_BASE(win), base & 0xffff0000); | 91 | if (win >= 8) { |
91 | orion5x_write(CPU_WIN_CTRL(win), | 92 | printk(KERN_ERR "setup_cpu_win: trying to allocate " |
92 | ((size - 1) & 0xffff0000) | (attr << 8) | (target << 4) | 1); | 93 | "window %d\n", win); |
94 | return; | ||
95 | } | ||
96 | |||
97 | writel(base & 0xffff0000, CPU_WIN_BASE(win)); | ||
98 | writel(((size - 1) & 0xffff0000) | (attr << 8) | (target << 4) | 1, | ||
99 | CPU_WIN_CTRL(win)); | ||
93 | 100 | ||
94 | if (orion5x_cpu_win_can_remap(win)) { | 101 | if (orion5x_cpu_win_can_remap(win)) { |
95 | if (remap < 0) | 102 | if (remap < 0) |
96 | remap = base; | 103 | remap = base; |
97 | 104 | ||
98 | orion5x_write(CPU_WIN_REMAP_LO(win), remap & 0xffff0000); | 105 | writel(remap & 0xffff0000, CPU_WIN_REMAP_LO(win)); |
99 | orion5x_write(CPU_WIN_REMAP_HI(win), 0); | 106 | writel(0, CPU_WIN_REMAP_HI(win)); |
100 | } | 107 | } |
101 | } | 108 | } |
102 | 109 | ||
@@ -109,11 +116,11 @@ void __init orion5x_setup_cpu_mbus_bridge(void) | |||
109 | * First, disable and clear windows. | 116 | * First, disable and clear windows. |
110 | */ | 117 | */ |
111 | for (i = 0; i < 8; i++) { | 118 | for (i = 0; i < 8; i++) { |
112 | orion5x_write(CPU_WIN_BASE(i), 0); | 119 | writel(0, CPU_WIN_BASE(i)); |
113 | orion5x_write(CPU_WIN_CTRL(i), 0); | 120 | writel(0, CPU_WIN_CTRL(i)); |
114 | if (orion5x_cpu_win_can_remap(i)) { | 121 | if (orion5x_cpu_win_can_remap(i)) { |
115 | orion5x_write(CPU_WIN_REMAP_LO(i), 0); | 122 | writel(0, CPU_WIN_REMAP_LO(i)); |
116 | orion5x_write(CPU_WIN_REMAP_HI(i), 0); | 123 | writel(0, CPU_WIN_REMAP_HI(i)); |
117 | } | 124 | } |
118 | } | 125 | } |
119 | 126 | ||
@@ -128,6 +135,7 @@ void __init orion5x_setup_cpu_mbus_bridge(void) | |||
128 | TARGET_PCIE, ATTR_PCIE_MEM, -1); | 135 | TARGET_PCIE, ATTR_PCIE_MEM, -1); |
129 | setup_cpu_win(3, ORION5X_PCI_MEM_PHYS_BASE, ORION5X_PCI_MEM_SIZE, | 136 | setup_cpu_win(3, ORION5X_PCI_MEM_PHYS_BASE, ORION5X_PCI_MEM_SIZE, |
130 | TARGET_PCI, ATTR_PCI_MEM, -1); | 137 | TARGET_PCI, ATTR_PCI_MEM, -1); |
138 | win_alloc_count = 4; | ||
131 | 139 | ||
132 | /* | 140 | /* |
133 | * Setup MBUS dram target info. | 141 | * Setup MBUS dram target info. |
@@ -147,8 +155,8 @@ void __init orion5x_setup_cpu_mbus_bridge(void) | |||
147 | w = &orion5x_mbus_dram_info.cs[cs++]; | 155 | w = &orion5x_mbus_dram_info.cs[cs++]; |
148 | w->cs_index = i; | 156 | w->cs_index = i; |
149 | w->mbus_attr = 0xf & ~(1 << i); | 157 | w->mbus_attr = 0xf & ~(1 << i); |
150 | w->base = base & 0xff000000; | 158 | w->base = base & 0xffff0000; |
151 | w->size = (size | 0x00ffffff) + 1; | 159 | w->size = (size | 0x0000ffff) + 1; |
152 | } | 160 | } |
153 | } | 161 | } |
154 | orion5x_mbus_dram_info.num_cs = cs; | 162 | orion5x_mbus_dram_info.num_cs = cs; |
@@ -156,25 +164,30 @@ void __init orion5x_setup_cpu_mbus_bridge(void) | |||
156 | 164 | ||
157 | void __init orion5x_setup_dev_boot_win(u32 base, u32 size) | 165 | void __init orion5x_setup_dev_boot_win(u32 base, u32 size) |
158 | { | 166 | { |
159 | setup_cpu_win(4, base, size, TARGET_DEV_BUS, ATTR_DEV_BOOT, -1); | 167 | setup_cpu_win(win_alloc_count++, base, size, |
168 | TARGET_DEV_BUS, ATTR_DEV_BOOT, -1); | ||
160 | } | 169 | } |
161 | 170 | ||
162 | void __init orion5x_setup_dev0_win(u32 base, u32 size) | 171 | void __init orion5x_setup_dev0_win(u32 base, u32 size) |
163 | { | 172 | { |
164 | setup_cpu_win(5, base, size, TARGET_DEV_BUS, ATTR_DEV_CS0, -1); | 173 | setup_cpu_win(win_alloc_count++, base, size, |
174 | TARGET_DEV_BUS, ATTR_DEV_CS0, -1); | ||
165 | } | 175 | } |
166 | 176 | ||
167 | void __init orion5x_setup_dev1_win(u32 base, u32 size) | 177 | void __init orion5x_setup_dev1_win(u32 base, u32 size) |
168 | { | 178 | { |
169 | setup_cpu_win(6, base, size, TARGET_DEV_BUS, ATTR_DEV_CS1, -1); | 179 | setup_cpu_win(win_alloc_count++, base, size, |
180 | TARGET_DEV_BUS, ATTR_DEV_CS1, -1); | ||
170 | } | 181 | } |
171 | 182 | ||
172 | void __init orion5x_setup_dev2_win(u32 base, u32 size) | 183 | void __init orion5x_setup_dev2_win(u32 base, u32 size) |
173 | { | 184 | { |
174 | setup_cpu_win(7, base, size, TARGET_DEV_BUS, ATTR_DEV_CS2, -1); | 185 | setup_cpu_win(win_alloc_count++, base, size, |
186 | TARGET_DEV_BUS, ATTR_DEV_CS2, -1); | ||
175 | } | 187 | } |
176 | 188 | ||
177 | void __init orion5x_setup_pcie_wa_win(u32 base, u32 size) | 189 | void __init orion5x_setup_pcie_wa_win(u32 base, u32 size) |
178 | { | 190 | { |
179 | setup_cpu_win(7, base, size, TARGET_PCIE, ATTR_PCIE_WA, -1); | 191 | setup_cpu_win(win_alloc_count++, base, size, |
192 | TARGET_PCIE, ATTR_PCIE_WA, -1); | ||
180 | } | 193 | } |
diff --git a/arch/arm/mach-orion5x/common.c b/arch/arm/mach-orion5x/common.c index 4f13fd037f04..faf4e3211918 100644 --- a/arch/arm/mach-orion5x/common.c +++ b/arch/arm/mach-orion5x/common.c | |||
@@ -39,25 +39,22 @@ static struct map_desc orion5x_io_desc[] __initdata = { | |||
39 | .virtual = ORION5X_REGS_VIRT_BASE, | 39 | .virtual = ORION5X_REGS_VIRT_BASE, |
40 | .pfn = __phys_to_pfn(ORION5X_REGS_PHYS_BASE), | 40 | .pfn = __phys_to_pfn(ORION5X_REGS_PHYS_BASE), |
41 | .length = ORION5X_REGS_SIZE, | 41 | .length = ORION5X_REGS_SIZE, |
42 | .type = MT_DEVICE | 42 | .type = MT_DEVICE, |
43 | }, | 43 | }, { |
44 | { | ||
45 | .virtual = ORION5X_PCIE_IO_VIRT_BASE, | 44 | .virtual = ORION5X_PCIE_IO_VIRT_BASE, |
46 | .pfn = __phys_to_pfn(ORION5X_PCIE_IO_PHYS_BASE), | 45 | .pfn = __phys_to_pfn(ORION5X_PCIE_IO_PHYS_BASE), |
47 | .length = ORION5X_PCIE_IO_SIZE, | 46 | .length = ORION5X_PCIE_IO_SIZE, |
48 | .type = MT_DEVICE | 47 | .type = MT_DEVICE, |
49 | }, | 48 | }, { |
50 | { | ||
51 | .virtual = ORION5X_PCI_IO_VIRT_BASE, | 49 | .virtual = ORION5X_PCI_IO_VIRT_BASE, |
52 | .pfn = __phys_to_pfn(ORION5X_PCI_IO_PHYS_BASE), | 50 | .pfn = __phys_to_pfn(ORION5X_PCI_IO_PHYS_BASE), |
53 | .length = ORION5X_PCI_IO_SIZE, | 51 | .length = ORION5X_PCI_IO_SIZE, |
54 | .type = MT_DEVICE | 52 | .type = MT_DEVICE, |
55 | }, | 53 | }, { |
56 | { | ||
57 | .virtual = ORION5X_PCIE_WA_VIRT_BASE, | 54 | .virtual = ORION5X_PCIE_WA_VIRT_BASE, |
58 | .pfn = __phys_to_pfn(ORION5X_PCIE_WA_PHYS_BASE), | 55 | .pfn = __phys_to_pfn(ORION5X_PCIE_WA_PHYS_BASE), |
59 | .length = ORION5X_PCIE_WA_SIZE, | 56 | .length = ORION5X_PCIE_WA_SIZE, |
60 | .type = MT_DEVICE | 57 | .type = MT_DEVICE, |
61 | }, | 58 | }, |
62 | }; | 59 | }; |
63 | 60 | ||
@@ -66,101 +63,32 @@ void __init orion5x_map_io(void) | |||
66 | iotable_init(orion5x_io_desc, ARRAY_SIZE(orion5x_io_desc)); | 63 | iotable_init(orion5x_io_desc, ARRAY_SIZE(orion5x_io_desc)); |
67 | } | 64 | } |
68 | 65 | ||
66 | |||
69 | /***************************************************************************** | 67 | /***************************************************************************** |
70 | * UART | 68 | * EHCI |
71 | ****************************************************************************/ | 69 | ****************************************************************************/ |
72 | 70 | static struct orion_ehci_data orion5x_ehci_data = { | |
73 | static struct resource orion5x_uart_resources[] = { | 71 | .dram = &orion5x_mbus_dram_info, |
74 | { | ||
75 | .start = UART0_PHYS_BASE, | ||
76 | .end = UART0_PHYS_BASE + 0xff, | ||
77 | .flags = IORESOURCE_MEM, | ||
78 | }, | ||
79 | { | ||
80 | .start = IRQ_ORION5X_UART0, | ||
81 | .end = IRQ_ORION5X_UART0, | ||
82 | .flags = IORESOURCE_IRQ, | ||
83 | }, | ||
84 | { | ||
85 | .start = UART1_PHYS_BASE, | ||
86 | .end = UART1_PHYS_BASE + 0xff, | ||
87 | .flags = IORESOURCE_MEM, | ||
88 | }, | ||
89 | { | ||
90 | .start = IRQ_ORION5X_UART1, | ||
91 | .end = IRQ_ORION5X_UART1, | ||
92 | .flags = IORESOURCE_IRQ, | ||
93 | }, | ||
94 | }; | ||
95 | |||
96 | static struct plat_serial8250_port orion5x_uart_data[] = { | ||
97 | { | ||
98 | .mapbase = UART0_PHYS_BASE, | ||
99 | .membase = (char *)UART0_VIRT_BASE, | ||
100 | .irq = IRQ_ORION5X_UART0, | ||
101 | .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, | ||
102 | .iotype = UPIO_MEM, | ||
103 | .regshift = 2, | ||
104 | .uartclk = ORION5X_TCLK, | ||
105 | }, | ||
106 | { | ||
107 | .mapbase = UART1_PHYS_BASE, | ||
108 | .membase = (char *)UART1_VIRT_BASE, | ||
109 | .irq = IRQ_ORION5X_UART1, | ||
110 | .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, | ||
111 | .iotype = UPIO_MEM, | ||
112 | .regshift = 2, | ||
113 | .uartclk = ORION5X_TCLK, | ||
114 | }, | ||
115 | { }, | ||
116 | }; | 72 | }; |
117 | 73 | ||
118 | static struct platform_device orion5x_uart = { | 74 | static u64 ehci_dmamask = 0xffffffffUL; |
119 | .name = "serial8250", | ||
120 | .id = PLAT8250_DEV_PLATFORM, | ||
121 | .dev = { | ||
122 | .platform_data = orion5x_uart_data, | ||
123 | }, | ||
124 | .resource = orion5x_uart_resources, | ||
125 | .num_resources = ARRAY_SIZE(orion5x_uart_resources), | ||
126 | }; | ||
127 | 75 | ||
128 | /******************************************************************************* | ||
129 | * USB Controller - 2 interfaces | ||
130 | ******************************************************************************/ | ||
131 | 76 | ||
77 | /***************************************************************************** | ||
78 | * EHCI0 | ||
79 | ****************************************************************************/ | ||
132 | static struct resource orion5x_ehci0_resources[] = { | 80 | static struct resource orion5x_ehci0_resources[] = { |
133 | { | 81 | { |
134 | .start = ORION5X_USB0_PHYS_BASE, | 82 | .start = ORION5X_USB0_PHYS_BASE, |
135 | .end = ORION5X_USB0_PHYS_BASE + SZ_4K - 1, | 83 | .end = ORION5X_USB0_PHYS_BASE + SZ_4K - 1, |
136 | .flags = IORESOURCE_MEM, | 84 | .flags = IORESOURCE_MEM, |
137 | }, | 85 | }, { |
138 | { | ||
139 | .start = IRQ_ORION5X_USB0_CTRL, | 86 | .start = IRQ_ORION5X_USB0_CTRL, |
140 | .end = IRQ_ORION5X_USB0_CTRL, | 87 | .end = IRQ_ORION5X_USB0_CTRL, |
141 | .flags = IORESOURCE_IRQ, | 88 | .flags = IORESOURCE_IRQ, |
142 | }, | 89 | }, |
143 | }; | 90 | }; |
144 | 91 | ||
145 | static struct resource orion5x_ehci1_resources[] = { | ||
146 | { | ||
147 | .start = ORION5X_USB1_PHYS_BASE, | ||
148 | .end = ORION5X_USB1_PHYS_BASE + SZ_4K - 1, | ||
149 | .flags = IORESOURCE_MEM, | ||
150 | }, | ||
151 | { | ||
152 | .start = IRQ_ORION5X_USB1_CTRL, | ||
153 | .end = IRQ_ORION5X_USB1_CTRL, | ||
154 | .flags = IORESOURCE_IRQ, | ||
155 | }, | ||
156 | }; | ||
157 | |||
158 | static struct orion_ehci_data orion5x_ehci_data = { | ||
159 | .dram = &orion5x_mbus_dram_info, | ||
160 | }; | ||
161 | |||
162 | static u64 ehci_dmamask = 0xffffffffUL; | ||
163 | |||
164 | static struct platform_device orion5x_ehci0 = { | 92 | static struct platform_device orion5x_ehci0 = { |
165 | .name = "orion-ehci", | 93 | .name = "orion-ehci", |
166 | .id = 0, | 94 | .id = 0, |
@@ -173,6 +101,27 @@ static struct platform_device orion5x_ehci0 = { | |||
173 | .num_resources = ARRAY_SIZE(orion5x_ehci0_resources), | 101 | .num_resources = ARRAY_SIZE(orion5x_ehci0_resources), |
174 | }; | 102 | }; |
175 | 103 | ||
104 | void __init orion5x_ehci0_init(void) | ||
105 | { | ||
106 | platform_device_register(&orion5x_ehci0); | ||
107 | } | ||
108 | |||
109 | |||
110 | /***************************************************************************** | ||
111 | * EHCI1 | ||
112 | ****************************************************************************/ | ||
113 | static struct resource orion5x_ehci1_resources[] = { | ||
114 | { | ||
115 | .start = ORION5X_USB1_PHYS_BASE, | ||
116 | .end = ORION5X_USB1_PHYS_BASE + SZ_4K - 1, | ||
117 | .flags = IORESOURCE_MEM, | ||
118 | }, { | ||
119 | .start = IRQ_ORION5X_USB1_CTRL, | ||
120 | .end = IRQ_ORION5X_USB1_CTRL, | ||
121 | .flags = IORESOURCE_IRQ, | ||
122 | }, | ||
123 | }; | ||
124 | |||
176 | static struct platform_device orion5x_ehci1 = { | 125 | static struct platform_device orion5x_ehci1 = { |
177 | .name = "orion-ehci", | 126 | .name = "orion-ehci", |
178 | .id = 1, | 127 | .id = 1, |
@@ -185,11 +134,15 @@ static struct platform_device orion5x_ehci1 = { | |||
185 | .num_resources = ARRAY_SIZE(orion5x_ehci1_resources), | 134 | .num_resources = ARRAY_SIZE(orion5x_ehci1_resources), |
186 | }; | 135 | }; |
187 | 136 | ||
137 | void __init orion5x_ehci1_init(void) | ||
138 | { | ||
139 | platform_device_register(&orion5x_ehci1); | ||
140 | } | ||
141 | |||
142 | |||
188 | /***************************************************************************** | 143 | /***************************************************************************** |
189 | * Gigabit Ethernet port | 144 | * GigE |
190 | * (The Orion and Discovery (MV643xx) families use the same Ethernet driver) | ||
191 | ****************************************************************************/ | 145 | ****************************************************************************/ |
192 | |||
193 | struct mv643xx_eth_shared_platform_data orion5x_eth_shared_data = { | 146 | struct mv643xx_eth_shared_platform_data orion5x_eth_shared_data = { |
194 | .dram = &orion5x_mbus_dram_info, | 147 | .dram = &orion5x_mbus_dram_info, |
195 | .t_clk = ORION5X_TCLK, | 148 | .t_clk = ORION5X_TCLK, |
@@ -219,7 +172,7 @@ static struct resource orion5x_eth_resources[] = { | |||
219 | .start = IRQ_ORION5X_ETH_SUM, | 172 | .start = IRQ_ORION5X_ETH_SUM, |
220 | .end = IRQ_ORION5X_ETH_SUM, | 173 | .end = IRQ_ORION5X_ETH_SUM, |
221 | .flags = IORESOURCE_IRQ, | 174 | .flags = IORESOURCE_IRQ, |
222 | } | 175 | }, |
223 | }; | 176 | }; |
224 | 177 | ||
225 | static struct platform_device orion5x_eth = { | 178 | static struct platform_device orion5x_eth = { |
@@ -238,11 +191,10 @@ void __init orion5x_eth_init(struct mv643xx_eth_platform_data *eth_data) | |||
238 | platform_device_register(&orion5x_eth); | 191 | platform_device_register(&orion5x_eth); |
239 | } | 192 | } |
240 | 193 | ||
194 | |||
241 | /***************************************************************************** | 195 | /***************************************************************************** |
242 | * I2C controller | 196 | * I2C |
243 | * (The Orion and Discovery (MV643xx) families share the same I2C controller) | ||
244 | ****************************************************************************/ | 197 | ****************************************************************************/ |
245 | |||
246 | static struct mv64xxx_i2c_pdata orion5x_i2c_pdata = { | 198 | static struct mv64xxx_i2c_pdata orion5x_i2c_pdata = { |
247 | .freq_m = 8, /* assumes 166 MHz TCLK */ | 199 | .freq_m = 8, /* assumes 166 MHz TCLK */ |
248 | .freq_n = 3, | 200 | .freq_n = 3, |
@@ -251,16 +203,15 @@ static struct mv64xxx_i2c_pdata orion5x_i2c_pdata = { | |||
251 | 203 | ||
252 | static struct resource orion5x_i2c_resources[] = { | 204 | static struct resource orion5x_i2c_resources[] = { |
253 | { | 205 | { |
254 | .name = "i2c base", | 206 | .name = "i2c base", |
255 | .start = I2C_PHYS_BASE, | 207 | .start = I2C_PHYS_BASE, |
256 | .end = I2C_PHYS_BASE + 0x20 -1, | 208 | .end = I2C_PHYS_BASE + 0x1f, |
257 | .flags = IORESOURCE_MEM, | 209 | .flags = IORESOURCE_MEM, |
258 | }, | 210 | }, { |
259 | { | 211 | .name = "i2c irq", |
260 | .name = "i2c irq", | 212 | .start = IRQ_ORION5X_I2C, |
261 | .start = IRQ_ORION5X_I2C, | 213 | .end = IRQ_ORION5X_I2C, |
262 | .end = IRQ_ORION5X_I2C, | 214 | .flags = IORESOURCE_IRQ, |
263 | .flags = IORESOURCE_IRQ, | ||
264 | }, | 215 | }, |
265 | }; | 216 | }; |
266 | 217 | ||
@@ -270,36 +221,41 @@ static struct platform_device orion5x_i2c = { | |||
270 | .num_resources = ARRAY_SIZE(orion5x_i2c_resources), | 221 | .num_resources = ARRAY_SIZE(orion5x_i2c_resources), |
271 | .resource = orion5x_i2c_resources, | 222 | .resource = orion5x_i2c_resources, |
272 | .dev = { | 223 | .dev = { |
273 | .platform_data = &orion5x_i2c_pdata, | 224 | .platform_data = &orion5x_i2c_pdata, |
274 | }, | 225 | }, |
275 | }; | 226 | }; |
276 | 227 | ||
228 | void __init orion5x_i2c_init(void) | ||
229 | { | ||
230 | platform_device_register(&orion5x_i2c); | ||
231 | } | ||
232 | |||
233 | |||
277 | /***************************************************************************** | 234 | /***************************************************************************** |
278 | * Sata port | 235 | * SATA |
279 | ****************************************************************************/ | 236 | ****************************************************************************/ |
280 | static struct resource orion5x_sata_resources[] = { | 237 | static struct resource orion5x_sata_resources[] = { |
281 | { | ||
282 | .name = "sata base", | ||
283 | .start = ORION5X_SATA_PHYS_BASE, | ||
284 | .end = ORION5X_SATA_PHYS_BASE + 0x5000 - 1, | ||
285 | .flags = IORESOURCE_MEM, | ||
286 | }, | ||
287 | { | 238 | { |
288 | .name = "sata irq", | 239 | .name = "sata base", |
289 | .start = IRQ_ORION5X_SATA, | 240 | .start = ORION5X_SATA_PHYS_BASE, |
290 | .end = IRQ_ORION5X_SATA, | 241 | .end = ORION5X_SATA_PHYS_BASE + 0x5000 - 1, |
291 | .flags = IORESOURCE_IRQ, | 242 | .flags = IORESOURCE_MEM, |
292 | }, | 243 | }, { |
244 | .name = "sata irq", | ||
245 | .start = IRQ_ORION5X_SATA, | ||
246 | .end = IRQ_ORION5X_SATA, | ||
247 | .flags = IORESOURCE_IRQ, | ||
248 | }, | ||
293 | }; | 249 | }; |
294 | 250 | ||
295 | static struct platform_device orion5x_sata = { | 251 | static struct platform_device orion5x_sata = { |
296 | .name = "sata_mv", | 252 | .name = "sata_mv", |
297 | .id = 0, | 253 | .id = 0, |
298 | .dev = { | 254 | .dev = { |
299 | .coherent_dma_mask = 0xffffffff, | 255 | .coherent_dma_mask = 0xffffffff, |
300 | }, | 256 | }, |
301 | .num_resources = ARRAY_SIZE(orion5x_sata_resources), | 257 | .num_resources = ARRAY_SIZE(orion5x_sata_resources), |
302 | .resource = orion5x_sata_resources, | 258 | .resource = orion5x_sata_resources, |
303 | }; | 259 | }; |
304 | 260 | ||
305 | void __init orion5x_sata_init(struct mv_sata_platform_data *sata_data) | 261 | void __init orion5x_sata_init(struct mv_sata_platform_data *sata_data) |
@@ -309,23 +265,111 @@ void __init orion5x_sata_init(struct mv_sata_platform_data *sata_data) | |||
309 | platform_device_register(&orion5x_sata); | 265 | platform_device_register(&orion5x_sata); |
310 | } | 266 | } |
311 | 267 | ||
268 | |||
312 | /***************************************************************************** | 269 | /***************************************************************************** |
313 | * Time handling | 270 | * UART0 |
271 | ****************************************************************************/ | ||
272 | static struct plat_serial8250_port orion5x_uart0_data[] = { | ||
273 | { | ||
274 | .mapbase = UART0_PHYS_BASE, | ||
275 | .membase = (char *)UART0_VIRT_BASE, | ||
276 | .irq = IRQ_ORION5X_UART0, | ||
277 | .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, | ||
278 | .iotype = UPIO_MEM, | ||
279 | .regshift = 2, | ||
280 | .uartclk = ORION5X_TCLK, | ||
281 | }, { | ||
282 | }, | ||
283 | }; | ||
284 | |||
285 | static struct resource orion5x_uart0_resources[] = { | ||
286 | { | ||
287 | .start = UART0_PHYS_BASE, | ||
288 | .end = UART0_PHYS_BASE + 0xff, | ||
289 | .flags = IORESOURCE_MEM, | ||
290 | }, { | ||
291 | .start = IRQ_ORION5X_UART0, | ||
292 | .end = IRQ_ORION5X_UART0, | ||
293 | .flags = IORESOURCE_IRQ, | ||
294 | }, | ||
295 | }; | ||
296 | |||
297 | static struct platform_device orion5x_uart0 = { | ||
298 | .name = "serial8250", | ||
299 | .id = PLAT8250_DEV_PLATFORM, | ||
300 | .dev = { | ||
301 | .platform_data = orion5x_uart0_data, | ||
302 | }, | ||
303 | .resource = orion5x_uart0_resources, | ||
304 | .num_resources = ARRAY_SIZE(orion5x_uart0_resources), | ||
305 | }; | ||
306 | |||
307 | void __init orion5x_uart0_init(void) | ||
308 | { | ||
309 | platform_device_register(&orion5x_uart0); | ||
310 | } | ||
311 | |||
312 | |||
313 | /***************************************************************************** | ||
314 | * UART1 | ||
314 | ****************************************************************************/ | 315 | ****************************************************************************/ |
316 | static struct plat_serial8250_port orion5x_uart1_data[] = { | ||
317 | { | ||
318 | .mapbase = UART1_PHYS_BASE, | ||
319 | .membase = (char *)UART1_VIRT_BASE, | ||
320 | .irq = IRQ_ORION5X_UART1, | ||
321 | .flags = UPF_SKIP_TEST | UPF_BOOT_AUTOCONF, | ||
322 | .iotype = UPIO_MEM, | ||
323 | .regshift = 2, | ||
324 | .uartclk = ORION5X_TCLK, | ||
325 | }, { | ||
326 | }, | ||
327 | }; | ||
328 | |||
329 | static struct resource orion5x_uart1_resources[] = { | ||
330 | { | ||
331 | .start = UART1_PHYS_BASE, | ||
332 | .end = UART1_PHYS_BASE + 0xff, | ||
333 | .flags = IORESOURCE_MEM, | ||
334 | }, { | ||
335 | .start = IRQ_ORION5X_UART1, | ||
336 | .end = IRQ_ORION5X_UART1, | ||
337 | .flags = IORESOURCE_IRQ, | ||
338 | }, | ||
339 | }; | ||
340 | |||
341 | static struct platform_device orion5x_uart1 = { | ||
342 | .name = "serial8250", | ||
343 | .id = PLAT8250_DEV_PLATFORM1, | ||
344 | .dev = { | ||
345 | .platform_data = orion5x_uart1_data, | ||
346 | }, | ||
347 | .resource = orion5x_uart1_resources, | ||
348 | .num_resources = ARRAY_SIZE(orion5x_uart1_resources), | ||
349 | }; | ||
350 | |||
351 | void __init orion5x_uart1_init(void) | ||
352 | { | ||
353 | platform_device_register(&orion5x_uart1); | ||
354 | } | ||
355 | |||
315 | 356 | ||
357 | /***************************************************************************** | ||
358 | * Time handling | ||
359 | ****************************************************************************/ | ||
316 | static void orion5x_timer_init(void) | 360 | static void orion5x_timer_init(void) |
317 | { | 361 | { |
318 | orion_time_init(IRQ_ORION5X_BRIDGE, ORION5X_TCLK); | 362 | orion_time_init(IRQ_ORION5X_BRIDGE, ORION5X_TCLK); |
319 | } | 363 | } |
320 | 364 | ||
321 | struct sys_timer orion5x_timer = { | 365 | struct sys_timer orion5x_timer = { |
322 | .init = orion5x_timer_init, | 366 | .init = orion5x_timer_init, |
323 | }; | 367 | }; |
324 | 368 | ||
369 | |||
325 | /***************************************************************************** | 370 | /***************************************************************************** |
326 | * General | 371 | * General |
327 | ****************************************************************************/ | 372 | ****************************************************************************/ |
328 | |||
329 | /* | 373 | /* |
330 | * Identify device ID and rev from PCIe configuration header space '0'. | 374 | * Identify device ID and rev from PCIe configuration header space '0'. |
331 | */ | 375 | */ |
@@ -350,8 +394,10 @@ static void __init orion5x_id(u32 *dev, u32 *rev, char **dev_name) | |||
350 | } else if (*dev == MV88F5181_DEV_ID) { | 394 | } else if (*dev == MV88F5181_DEV_ID) { |
351 | if (*rev == MV88F5181_REV_B1) { | 395 | if (*rev == MV88F5181_REV_B1) { |
352 | *dev_name = "MV88F5181-Rev-B1"; | 396 | *dev_name = "MV88F5181-Rev-B1"; |
397 | } else if (*rev == MV88F5181L_REV_A1) { | ||
398 | *dev_name = "MV88F5181L-Rev-A1"; | ||
353 | } else { | 399 | } else { |
354 | *dev_name = "MV88F5181-Rev-Unsupported"; | 400 | *dev_name = "MV88F5181(L)-Rev-Unsupported"; |
355 | } | 401 | } |
356 | } else { | 402 | } else { |
357 | *dev_name = "Device-Unknown"; | 403 | *dev_name = "Device-Unknown"; |
@@ -370,15 +416,6 @@ void __init orion5x_init(void) | |||
370 | * Setup Orion address map | 416 | * Setup Orion address map |
371 | */ | 417 | */ |
372 | orion5x_setup_cpu_mbus_bridge(); | 418 | orion5x_setup_cpu_mbus_bridge(); |
373 | |||
374 | /* | ||
375 | * Register devices. | ||
376 | */ | ||
377 | platform_device_register(&orion5x_uart); | ||
378 | platform_device_register(&orion5x_ehci0); | ||
379 | if (dev == MV88F5182_DEV_ID) | ||
380 | platform_device_register(&orion5x_ehci1); | ||
381 | platform_device_register(&orion5x_i2c); | ||
382 | } | 419 | } |
383 | 420 | ||
384 | /* | 421 | /* |
diff --git a/arch/arm/mach-orion5x/common.h b/arch/arm/mach-orion5x/common.h index bd0f05de6e18..f72cf0e77544 100644 --- a/arch/arm/mach-orion5x/common.h +++ b/arch/arm/mach-orion5x/common.h | |||
@@ -1,10 +1,12 @@ | |||
1 | #ifndef __ARCH_ORION5X_COMMON_H | 1 | #ifndef __ARCH_ORION5X_COMMON_H |
2 | #define __ARCH_ORION5X_COMMON_H | 2 | #define __ARCH_ORION5X_COMMON_H |
3 | 3 | ||
4 | struct mv643xx_eth_platform_data; | ||
5 | struct mv_sata_platform_data; | ||
6 | |||
4 | /* | 7 | /* |
5 | * Basic Orion init functions used early by machine-setup. | 8 | * Basic Orion init functions used early by machine-setup. |
6 | */ | 9 | */ |
7 | |||
8 | void orion5x_map_io(void); | 10 | void orion5x_map_io(void); |
9 | void orion5x_init_irq(void); | 11 | void orion5x_init_irq(void); |
10 | void orion5x_init(void); | 12 | void orion5x_init(void); |
@@ -23,15 +25,22 @@ void orion5x_setup_dev1_win(u32 base, u32 size); | |||
23 | void orion5x_setup_dev2_win(u32 base, u32 size); | 25 | void orion5x_setup_dev2_win(u32 base, u32 size); |
24 | void orion5x_setup_pcie_wa_win(u32 base, u32 size); | 26 | void orion5x_setup_pcie_wa_win(u32 base, u32 size); |
25 | 27 | ||
28 | void orion5x_ehci0_init(void); | ||
29 | void orion5x_ehci1_init(void); | ||
30 | void orion5x_eth_init(struct mv643xx_eth_platform_data *eth_data); | ||
31 | void orion5x_i2c_init(void); | ||
32 | void orion5x_sata_init(struct mv_sata_platform_data *sata_data); | ||
33 | void orion5x_uart0_init(void); | ||
34 | void orion5x_uart1_init(void); | ||
35 | |||
26 | /* | 36 | /* |
27 | * Shared code used internally by other Orion core functions. | 37 | * PCIe/PCI functions. |
28 | * (/mach-orion/pci.c) | ||
29 | */ | 38 | */ |
30 | |||
31 | struct pci_sys_data; | ||
32 | struct pci_bus; | 39 | struct pci_bus; |
40 | struct pci_sys_data; | ||
33 | 41 | ||
34 | void orion5x_pcie_id(u32 *dev, u32 *rev); | 42 | void orion5x_pcie_id(u32 *dev, u32 *rev); |
43 | void orion5x_pci_set_cardbus_mode(void); | ||
35 | int orion5x_pci_sys_setup(int nr, struct pci_sys_data *sys); | 44 | int orion5x_pci_sys_setup(int nr, struct pci_sys_data *sys); |
36 | struct pci_bus *orion5x_pci_sys_scan_bus(int nr, struct pci_sys_data *sys); | 45 | struct pci_bus *orion5x_pci_sys_scan_bus(int nr, struct pci_sys_data *sys); |
37 | int orion5x_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin); | 46 | int orion5x_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin); |
@@ -40,26 +49,9 @@ int orion5x_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin); | |||
40 | * Valid GPIO pins according to MPP setup, used by machine-setup. | 49 | * Valid GPIO pins according to MPP setup, used by machine-setup. |
41 | * (/mach-orion/gpio.c). | 50 | * (/mach-orion/gpio.c). |
42 | */ | 51 | */ |
43 | 52 | void orion5x_gpio_set_valid(unsigned pin, int valid); | |
44 | void orion5x_gpio_set_valid_pins(u32 pins); | ||
45 | void gpio_display(void); /* debug */ | 53 | void gpio_display(void); /* debug */ |
46 | 54 | ||
47 | /* | ||
48 | * Pull in Orion Ethernet platform_data, used by machine-setup | ||
49 | */ | ||
50 | |||
51 | struct mv643xx_eth_platform_data; | ||
52 | |||
53 | void orion5x_eth_init(struct mv643xx_eth_platform_data *eth_data); | ||
54 | |||
55 | /* | ||
56 | * Orion Sata platform_data, used by machine-setup | ||
57 | */ | ||
58 | |||
59 | struct mv_sata_platform_data; | ||
60 | |||
61 | void orion5x_sata_init(struct mv_sata_platform_data *sata_data); | ||
62 | |||
63 | struct machine_desc; | 55 | struct machine_desc; |
64 | struct meminfo; | 56 | struct meminfo; |
65 | struct tag; | 57 | struct tag; |
diff --git a/arch/arm/mach-orion5x/db88f5281-setup.c b/arch/arm/mach-orion5x/db88f5281-setup.c index 44c64342dacb..88405e74e5e3 100644 --- a/arch/arm/mach-orion5x/db88f5281-setup.c +++ b/arch/arm/mach-orion5x/db88f5281-setup.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <asm/arch/orion5x.h> | 27 | #include <asm/arch/orion5x.h> |
28 | #include <asm/plat-orion/orion_nand.h> | 28 | #include <asm/plat-orion/orion_nand.h> |
29 | #include "common.h" | 29 | #include "common.h" |
30 | #include "mpp.h" | ||
30 | 31 | ||
31 | /***************************************************************************** | 32 | /***************************************************************************** |
32 | * DB-88F5281 on board devices | 33 | * DB-88F5281 on board devices |
@@ -86,7 +87,7 @@ static struct platform_device db88f5281_boot_flash = { | |||
86 | .name = "physmap-flash", | 87 | .name = "physmap-flash", |
87 | .id = 0, | 88 | .id = 0, |
88 | .dev = { | 89 | .dev = { |
89 | .platform_data = &db88f5281_boot_flash_data, | 90 | .platform_data = &db88f5281_boot_flash_data, |
90 | }, | 91 | }, |
91 | .num_resources = 1, | 92 | .num_resources = 1, |
92 | .resource = &db88f5281_boot_flash_resource, | 93 | .resource = &db88f5281_boot_flash_resource, |
@@ -110,7 +111,7 @@ static struct platform_device db88f5281_nor_flash = { | |||
110 | .name = "physmap-flash", | 111 | .name = "physmap-flash", |
111 | .id = 1, | 112 | .id = 1, |
112 | .dev = { | 113 | .dev = { |
113 | .platform_data = &db88f5281_nor_flash_data, | 114 | .platform_data = &db88f5281_nor_flash_data, |
114 | }, | 115 | }, |
115 | .num_resources = 1, | 116 | .num_resources = 1, |
116 | .resource = &db88f5281_nor_flash_resource, | 117 | .resource = &db88f5281_nor_flash_resource, |
@@ -125,18 +126,15 @@ static struct mtd_partition db88f5281_nand_parts[] = { | |||
125 | .name = "kernel", | 126 | .name = "kernel", |
126 | .offset = 0, | 127 | .offset = 0, |
127 | .size = SZ_2M, | 128 | .size = SZ_2M, |
128 | }, | 129 | }, { |
129 | { | ||
130 | .name = "root", | 130 | .name = "root", |
131 | .offset = SZ_2M, | 131 | .offset = SZ_2M, |
132 | .size = (SZ_16M - SZ_2M), | 132 | .size = (SZ_16M - SZ_2M), |
133 | }, | 133 | }, { |
134 | { | ||
135 | .name = "user", | 134 | .name = "user", |
136 | .offset = SZ_16M, | 135 | .offset = SZ_16M, |
137 | .size = SZ_8M, | 136 | .size = SZ_8M, |
138 | }, | 137 | }, { |
139 | { | ||
140 | .name = "recovery", | 138 | .name = "recovery", |
141 | .offset = (SZ_16M + SZ_8M), | 139 | .offset = (SZ_16M + SZ_8M), |
142 | .size = SZ_8M, | 140 | .size = SZ_8M, |
@@ -288,7 +286,6 @@ subsys_initcall(db88f5281_pci_init); | |||
288 | ****************************************************************************/ | 286 | ****************************************************************************/ |
289 | static struct mv643xx_eth_platform_data db88f5281_eth_data = { | 287 | static struct mv643xx_eth_platform_data db88f5281_eth_data = { |
290 | .phy_addr = 8, | 288 | .phy_addr = 8, |
291 | .force_phy_addr = 1, | ||
292 | }; | 289 | }; |
293 | 290 | ||
294 | /***************************************************************************** | 291 | /***************************************************************************** |
@@ -301,11 +298,28 @@ static struct i2c_board_info __initdata db88f5281_i2c_rtc = { | |||
301 | /***************************************************************************** | 298 | /***************************************************************************** |
302 | * General Setup | 299 | * General Setup |
303 | ****************************************************************************/ | 300 | ****************************************************************************/ |
304 | 301 | static struct orion5x_mpp_mode db88f5281_mpp_modes[] __initdata = { | |
305 | static struct platform_device *db88f5281_devs[] __initdata = { | 302 | { 0, MPP_GPIO }, /* USB Over Current */ |
306 | &db88f5281_boot_flash, | 303 | { 1, MPP_GPIO }, /* USB Vbat input */ |
307 | &db88f5281_nor_flash, | 304 | { 2, MPP_PCI_ARB }, /* PCI_REQn[2] */ |
308 | &db88f5281_nand_flash, | 305 | { 3, MPP_PCI_ARB }, /* PCI_GNTn[2] */ |
306 | { 4, MPP_PCI_ARB }, /* PCI_REQn[3] */ | ||
307 | { 5, MPP_PCI_ARB }, /* PCI_GNTn[3] */ | ||
308 | { 6, MPP_GPIO }, /* JP0, CON17.2 */ | ||
309 | { 7, MPP_GPIO }, /* JP1, CON17.1 */ | ||
310 | { 8, MPP_GPIO }, /* JP2, CON11.2 */ | ||
311 | { 9, MPP_GPIO }, /* JP3, CON11.3 */ | ||
312 | { 10, MPP_GPIO }, /* RTC int */ | ||
313 | { 11, MPP_GPIO }, /* Baud Rate Generator */ | ||
314 | { 12, MPP_GPIO }, /* PCI int 1 */ | ||
315 | { 13, MPP_GPIO }, /* PCI int 2 */ | ||
316 | { 14, MPP_NAND }, /* NAND_REn[2] */ | ||
317 | { 15, MPP_NAND }, /* NAND_WEn[2] */ | ||
318 | { 16, MPP_UART }, /* UART1_RX */ | ||
319 | { 17, MPP_UART }, /* UART1_TX */ | ||
320 | { 18, MPP_UART }, /* UART1_CTSn */ | ||
321 | { 19, MPP_UART }, /* UART1_RTSn */ | ||
322 | { -1 }, | ||
309 | }; | 323 | }; |
310 | 324 | ||
311 | static void __init db88f5281_init(void) | 325 | static void __init db88f5281_init(void) |
@@ -315,39 +329,31 @@ static void __init db88f5281_init(void) | |||
315 | */ | 329 | */ |
316 | orion5x_init(); | 330 | orion5x_init(); |
317 | 331 | ||
332 | orion5x_mpp_conf(db88f5281_mpp_modes); | ||
333 | writel(0, MPP_DEV_CTRL); /* DEV_D[31:16] */ | ||
334 | |||
318 | /* | 335 | /* |
319 | * Setup the CPU address decode windows for our on-board devices | 336 | * Configure peripherals. |
320 | */ | 337 | */ |
338 | orion5x_ehci0_init(); | ||
339 | orion5x_eth_init(&db88f5281_eth_data); | ||
340 | orion5x_i2c_init(); | ||
341 | orion5x_uart0_init(); | ||
342 | orion5x_uart1_init(); | ||
343 | |||
321 | orion5x_setup_dev_boot_win(DB88F5281_NOR_BOOT_BASE, | 344 | orion5x_setup_dev_boot_win(DB88F5281_NOR_BOOT_BASE, |
322 | DB88F5281_NOR_BOOT_SIZE); | 345 | DB88F5281_NOR_BOOT_SIZE); |
346 | platform_device_register(&db88f5281_boot_flash); | ||
347 | |||
323 | orion5x_setup_dev0_win(DB88F5281_7SEG_BASE, DB88F5281_7SEG_SIZE); | 348 | orion5x_setup_dev0_win(DB88F5281_7SEG_BASE, DB88F5281_7SEG_SIZE); |
324 | orion5x_setup_dev1_win(DB88F5281_NOR_BASE, DB88F5281_NOR_SIZE); | ||
325 | orion5x_setup_dev2_win(DB88F5281_NAND_BASE, DB88F5281_NAND_SIZE); | ||
326 | 349 | ||
327 | /* | 350 | orion5x_setup_dev1_win(DB88F5281_NOR_BASE, DB88F5281_NOR_SIZE); |
328 | * Setup Multiplexing Pins: | 351 | platform_device_register(&db88f5281_nor_flash); |
329 | * MPP0: GPIO (USB Over Current) MPP1: GPIO (USB Vbat input) | ||
330 | * MPP2: PCI_REQn[2] MPP3: PCI_GNTn[2] | ||
331 | * MPP4: PCI_REQn[3] MPP5: PCI_GNTn[3] | ||
332 | * MPP6: GPIO (JP0, CON17.2) MPP7: GPIO (JP1, CON17.1) | ||
333 | * MPP8: GPIO (JP2, CON11.2) MPP9: GPIO (JP3, CON11.3) | ||
334 | * MPP10: GPIO (RTC int) MPP11: GPIO (Baud Rate Generator) | ||
335 | * MPP12: GPIO (PCI int 1) MPP13: GPIO (PCI int 2) | ||
336 | * MPP14: NAND_REn[2] MPP15: NAND_WEn[2] | ||
337 | * MPP16: UART1_RX MPP17: UART1_TX | ||
338 | * MPP18: UART1_CTS MPP19: UART1_RTS | ||
339 | * MPP-DEV: DEV_D[16:31] | ||
340 | */ | ||
341 | orion5x_write(MPP_0_7_CTRL, 0x00222203); | ||
342 | orion5x_write(MPP_8_15_CTRL, 0x44000000); | ||
343 | orion5x_write(MPP_16_19_CTRL, 0); | ||
344 | orion5x_write(MPP_DEV_CTRL, 0); | ||
345 | 352 | ||
346 | orion5x_gpio_set_valid_pins(0x00003fc3); | 353 | orion5x_setup_dev2_win(DB88F5281_NAND_BASE, DB88F5281_NAND_SIZE); |
354 | platform_device_register(&db88f5281_nand_flash); | ||
347 | 355 | ||
348 | platform_add_devices(db88f5281_devs, ARRAY_SIZE(db88f5281_devs)); | ||
349 | i2c_register_board_info(0, &db88f5281_i2c_rtc, 1); | 356 | i2c_register_board_info(0, &db88f5281_i2c_rtc, 1); |
350 | orion5x_eth_init(&db88f5281_eth_data); | ||
351 | } | 357 | } |
352 | 358 | ||
353 | MACHINE_START(DB88F5281, "Marvell Orion-2 Development Board") | 359 | MACHINE_START(DB88F5281, "Marvell Orion-2 Development Board") |
diff --git a/arch/arm/mach-orion5x/dns323-setup.c b/arch/arm/mach-orion5x/dns323-setup.c index 27ce967ab9e5..3791ca6f001a 100644 --- a/arch/arm/mach-orion5x/dns323-setup.c +++ b/arch/arm/mach-orion5x/dns323-setup.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <asm/mach/pci.h> | 27 | #include <asm/mach/pci.h> |
28 | #include <asm/arch/orion5x.h> | 28 | #include <asm/arch/orion5x.h> |
29 | #include "common.h" | 29 | #include "common.h" |
30 | #include "mpp.h" | ||
30 | 31 | ||
31 | #define DNS323_GPIO_LED_RIGHT_AMBER 1 | 32 | #define DNS323_GPIO_LED_RIGHT_AMBER 1 |
32 | #define DNS323_GPIO_LED_LEFT_AMBER 2 | 33 | #define DNS323_GPIO_LED_LEFT_AMBER 2 |
@@ -52,8 +53,6 @@ static int __init dns323_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | |||
52 | if (irq != -1) | 53 | if (irq != -1) |
53 | return irq; | 54 | return irq; |
54 | 55 | ||
55 | pr_err("%s: requested mapping for unknown device\n", __func__); | ||
56 | |||
57 | return -1; | 56 | return -1; |
58 | } | 57 | } |
59 | 58 | ||
@@ -81,7 +80,6 @@ subsys_initcall(dns323_pci_init); | |||
81 | 80 | ||
82 | static struct mv643xx_eth_platform_data dns323_eth_data = { | 81 | static struct mv643xx_eth_platform_data dns323_eth_data = { |
83 | .phy_addr = 8, | 82 | .phy_addr = 8, |
84 | .force_phy_addr = 1, | ||
85 | }; | 83 | }; |
86 | 84 | ||
87 | /**************************************************************************** | 85 | /**************************************************************************** |
@@ -119,7 +117,7 @@ static struct mtd_partition dns323_partitions[] = { | |||
119 | .name = "u-boot", | 117 | .name = "u-boot", |
120 | .size = 0x00030000, | 118 | .size = 0x00030000, |
121 | .offset = 0x007d0000, | 119 | .offset = 0x007d0000, |
122 | } | 120 | }, |
123 | }; | 121 | }; |
124 | 122 | ||
125 | static struct physmap_flash_data dns323_nor_flash_data = { | 123 | static struct physmap_flash_data dns323_nor_flash_data = { |
@@ -137,7 +135,9 @@ static struct resource dns323_nor_flash_resource = { | |||
137 | static struct platform_device dns323_nor_flash = { | 135 | static struct platform_device dns323_nor_flash = { |
138 | .name = "physmap-flash", | 136 | .name = "physmap-flash", |
139 | .id = 0, | 137 | .id = 0, |
140 | .dev = { .platform_data = &dns323_nor_flash_data, }, | 138 | .dev = { |
139 | .platform_data = &dns323_nor_flash_data, | ||
140 | }, | ||
141 | .resource = &dns323_nor_flash_resource, | 141 | .resource = &dns323_nor_flash_resource, |
142 | .num_resources = 1, | 142 | .num_resources = 1, |
143 | }; | 143 | }; |
@@ -170,7 +170,9 @@ static struct gpio_led_platform_data dns323_led_data = { | |||
170 | static struct platform_device dns323_gpio_leds = { | 170 | static struct platform_device dns323_gpio_leds = { |
171 | .name = "leds-gpio", | 171 | .name = "leds-gpio", |
172 | .id = -1, | 172 | .id = -1, |
173 | .dev = { .platform_data = &dns323_led_data, }, | 173 | .dev = { |
174 | .platform_data = &dns323_led_data, | ||
175 | }, | ||
174 | }; | 176 | }; |
175 | 177 | ||
176 | /**************************************************************************** | 178 | /**************************************************************************** |
@@ -183,35 +185,53 @@ static struct gpio_keys_button dns323_buttons[] = { | |||
183 | .gpio = DNS323_GPIO_KEY_RESET, | 185 | .gpio = DNS323_GPIO_KEY_RESET, |
184 | .desc = "Reset Button", | 186 | .desc = "Reset Button", |
185 | .active_low = 1, | 187 | .active_low = 1, |
186 | }, | 188 | }, { |
187 | { | ||
188 | .code = KEY_POWER, | 189 | .code = KEY_POWER, |
189 | .gpio = DNS323_GPIO_KEY_POWER, | 190 | .gpio = DNS323_GPIO_KEY_POWER, |
190 | .desc = "Power Button", | 191 | .desc = "Power Button", |
191 | .active_low = 1, | 192 | .active_low = 1, |
192 | } | 193 | }, |
193 | }; | 194 | }; |
194 | 195 | ||
195 | static struct gpio_keys_platform_data dns323_button_data = { | 196 | static struct gpio_keys_platform_data dns323_button_data = { |
196 | .buttons = dns323_buttons, | 197 | .buttons = dns323_buttons, |
197 | .nbuttons = ARRAY_SIZE(dns323_buttons), | 198 | .nbuttons = ARRAY_SIZE(dns323_buttons), |
198 | }; | 199 | }; |
199 | 200 | ||
200 | static struct platform_device dns323_button_device = { | 201 | static struct platform_device dns323_button_device = { |
201 | .name = "gpio-keys", | 202 | .name = "gpio-keys", |
202 | .id = -1, | 203 | .id = -1, |
203 | .num_resources = 0, | 204 | .num_resources = 0, |
204 | .dev = { .platform_data = &dns323_button_data, }, | 205 | .dev = { |
206 | .platform_data = &dns323_button_data, | ||
207 | }, | ||
205 | }; | 208 | }; |
206 | 209 | ||
207 | /**************************************************************************** | 210 | /**************************************************************************** |
208 | * General Setup | 211 | * General Setup |
209 | */ | 212 | */ |
210 | 213 | static struct orion5x_mpp_mode dns323_mpp_modes[] __initdata = { | |
211 | static struct platform_device *dns323_plat_devices[] __initdata = { | 214 | { 0, MPP_PCIE_RST_OUTn }, |
212 | &dns323_nor_flash, | 215 | { 1, MPP_GPIO }, /* right amber LED (sata ch0) */ |
213 | &dns323_gpio_leds, | 216 | { 2, MPP_GPIO }, /* left amber LED (sata ch1) */ |
214 | &dns323_button_device, | 217 | { 3, MPP_UNUSED }, |
218 | { 4, MPP_GPIO }, /* power button LED */ | ||
219 | { 5, MPP_GPIO }, /* power button LED */ | ||
220 | { 6, MPP_GPIO }, /* GMT G751-2f overtemp */ | ||
221 | { 7, MPP_GPIO }, /* M41T80 nIRQ/OUT/SQW */ | ||
222 | { 8, MPP_GPIO }, /* triggers power off */ | ||
223 | { 9, MPP_GPIO }, /* power button switch */ | ||
224 | { 10, MPP_GPIO }, /* reset button switch */ | ||
225 | { 11, MPP_UNUSED }, | ||
226 | { 12, MPP_UNUSED }, | ||
227 | { 13, MPP_UNUSED }, | ||
228 | { 14, MPP_UNUSED }, | ||
229 | { 15, MPP_UNUSED }, | ||
230 | { 16, MPP_UNUSED }, | ||
231 | { 17, MPP_UNUSED }, | ||
232 | { 18, MPP_UNUSED }, | ||
233 | { 19, MPP_UNUSED }, | ||
234 | { -1 }, | ||
215 | }; | 235 | }; |
216 | 236 | ||
217 | /* | 237 | /* |
@@ -225,17 +245,15 @@ static struct platform_device *dns323_plat_devices[] __initdata = { | |||
225 | static struct i2c_board_info __initdata dns323_i2c_devices[] = { | 245 | static struct i2c_board_info __initdata dns323_i2c_devices[] = { |
226 | { | 246 | { |
227 | I2C_BOARD_INFO("g760a", 0x3e), | 247 | I2C_BOARD_INFO("g760a", 0x3e), |
228 | }, | ||
229 | #if 0 | 248 | #if 0 |
230 | /* this entry requires the new-style driver model lm75 driver, | 249 | /* this entry requires the new-style driver model lm75 driver, |
231 | * for the meantime "insmod lm75.ko force_lm75=0,0x48" is needed */ | 250 | * for the meantime "insmod lm75.ko force_lm75=0,0x48" is needed */ |
232 | { | 251 | }, { |
233 | I2C_BOARD_INFO("g751", 0x48), | 252 | I2C_BOARD_INFO("g751", 0x48), |
234 | }, | ||
235 | #endif | 253 | #endif |
236 | { | 254 | }, { |
237 | I2C_BOARD_INFO("m41t80", 0x68), | 255 | I2C_BOARD_INFO("m41t80", 0x68), |
238 | } | 256 | }, |
239 | }; | 257 | }; |
240 | 258 | ||
241 | /* DNS-323 specific power off method */ | 259 | /* DNS-323 specific power off method */ |
@@ -250,62 +268,35 @@ static void __init dns323_init(void) | |||
250 | /* Setup basic Orion functions. Need to be called early. */ | 268 | /* Setup basic Orion functions. Need to be called early. */ |
251 | orion5x_init(); | 269 | orion5x_init(); |
252 | 270 | ||
271 | orion5x_mpp_conf(dns323_mpp_modes); | ||
272 | writel(0, MPP_DEV_CTRL); /* DEV_D[31:16] */ | ||
273 | |||
274 | /* | ||
275 | * Configure peripherals. | ||
276 | */ | ||
277 | orion5x_ehci0_init(); | ||
278 | orion5x_eth_init(&dns323_eth_data); | ||
279 | orion5x_i2c_init(); | ||
280 | orion5x_uart0_init(); | ||
281 | |||
253 | /* setup flash mapping | 282 | /* setup flash mapping |
254 | * CS3 holds a 8 MB Spansion S29GL064M90TFIR4 | 283 | * CS3 holds a 8 MB Spansion S29GL064M90TFIR4 |
255 | */ | 284 | */ |
256 | orion5x_setup_dev_boot_win(DNS323_NOR_BOOT_BASE, DNS323_NOR_BOOT_SIZE); | 285 | orion5x_setup_dev_boot_win(DNS323_NOR_BOOT_BASE, DNS323_NOR_BOOT_SIZE); |
286 | platform_device_register(&dns323_nor_flash); | ||
257 | 287 | ||
258 | /* DNS-323 has a Marvell 88X7042 SATA controller attached via PCIe | 288 | platform_device_register(&dns323_gpio_leds); |
259 | * | ||
260 | * Open a special address decode windows for the PCIe WA. | ||
261 | */ | ||
262 | orion5x_setup_pcie_wa_win(ORION5X_PCIE_WA_PHYS_BASE, | ||
263 | ORION5X_PCIE_WA_SIZE); | ||
264 | |||
265 | /* set MPP to 0 as D-Link's 2.6.12.6 kernel did */ | ||
266 | orion5x_write(MPP_0_7_CTRL, 0); | ||
267 | orion5x_write(MPP_8_15_CTRL, 0); | ||
268 | orion5x_write(MPP_16_19_CTRL, 0); | ||
269 | orion5x_write(MPP_DEV_CTRL, 0); | ||
270 | |||
271 | /* Define used GPIO pins | ||
272 | |||
273 | GPIO Map: | ||
274 | |||
275 | | 0 | | PEX_RST_OUT (not controlled by GPIO) | ||
276 | | 1 | Out | right amber LED (= sata ch0 LED) (low-active) | ||
277 | | 2 | Out | left amber LED (= sata ch1 LED) (low-active) | ||
278 | | 3 | Out | //unknown// | ||
279 | | 4 | Out | power button LED (low-active, together with pin #5) | ||
280 | | 5 | Out | power button LED (low-active, together with pin #4) | ||
281 | | 6 | In | GMT G751-2f overtemp. shutdown signal (low-active) | ||
282 | | 7 | In | M41T80 nIRQ/OUT/SQW signal | ||
283 | | 8 | Out | triggers power off (high-active) | ||
284 | | 9 | In | power button switch (low-active) | ||
285 | | 10 | In | reset button switch (low-active) | ||
286 | | 11 | Out | //unknown// | ||
287 | | 12 | Out | //unknown// | ||
288 | | 13 | Out | //unknown// | ||
289 | | 14 | Out | //unknown// | ||
290 | | 15 | Out | //unknown// | ||
291 | */ | ||
292 | orion5x_gpio_set_valid_pins(0x07f6); | ||
293 | |||
294 | /* register dns323 specific power-off method */ | ||
295 | if ((gpio_request(DNS323_GPIO_POWER_OFF, "POWEROFF") != 0) | ||
296 | || (gpio_direction_output(DNS323_GPIO_POWER_OFF, 0) != 0)) | ||
297 | pr_err("DNS323: failed to setup power-off GPIO\n"); | ||
298 | |||
299 | pm_power_off = dns323_power_off; | ||
300 | 289 | ||
301 | /* register flash and other platform devices */ | 290 | platform_device_register(&dns323_button_device); |
302 | platform_add_devices(dns323_plat_devices, | ||
303 | ARRAY_SIZE(dns323_plat_devices)); | ||
304 | 291 | ||
305 | i2c_register_board_info(0, dns323_i2c_devices, | 292 | i2c_register_board_info(0, dns323_i2c_devices, |
306 | ARRAY_SIZE(dns323_i2c_devices)); | 293 | ARRAY_SIZE(dns323_i2c_devices)); |
307 | 294 | ||
308 | orion5x_eth_init(&dns323_eth_data); | 295 | /* register dns323 specific power-off method */ |
296 | if (gpio_request(DNS323_GPIO_POWER_OFF, "POWEROFF") != 0 || | ||
297 | gpio_direction_output(DNS323_GPIO_POWER_OFF, 0) != 0) | ||
298 | pr_err("DNS323: failed to setup power-off GPIO\n"); | ||
299 | pm_power_off = dns323_power_off; | ||
309 | } | 300 | } |
310 | 301 | ||
311 | /* Warning: D-Link uses a wrong mach-type (=526) in their bootloader */ | 302 | /* Warning: D-Link uses a wrong mach-type (=526) in their bootloader */ |
diff --git a/arch/arm/mach-orion5x/gpio.c b/arch/arm/mach-orion5x/gpio.c index 8108c316c426..d09797990f41 100644 --- a/arch/arm/mach-orion5x/gpio.c +++ b/arch/arm/mach-orion5x/gpio.c | |||
@@ -24,9 +24,12 @@ static DEFINE_SPINLOCK(gpio_lock); | |||
24 | static unsigned long gpio_valid[BITS_TO_LONGS(GPIO_MAX)]; | 24 | static unsigned long gpio_valid[BITS_TO_LONGS(GPIO_MAX)]; |
25 | static const char *gpio_label[GPIO_MAX]; /* non null for allocated GPIOs */ | 25 | static const char *gpio_label[GPIO_MAX]; /* non null for allocated GPIOs */ |
26 | 26 | ||
27 | void __init orion5x_gpio_set_valid_pins(u32 pins) | 27 | void __init orion5x_gpio_set_valid(unsigned pin, int valid) |
28 | { | 28 | { |
29 | gpio_valid[0] = pins; | 29 | if (valid) |
30 | __set_bit(pin, gpio_valid); | ||
31 | else | ||
32 | __clear_bit(pin, gpio_valid); | ||
30 | } | 33 | } |
31 | 34 | ||
32 | /* | 35 | /* |
@@ -93,10 +96,10 @@ int gpio_get_value(unsigned pin) | |||
93 | { | 96 | { |
94 | int val, mask = 1 << pin; | 97 | int val, mask = 1 << pin; |
95 | 98 | ||
96 | if (orion5x_read(GPIO_IO_CONF) & mask) | 99 | if (readl(GPIO_IO_CONF) & mask) |
97 | val = orion5x_read(GPIO_DATA_IN) ^ orion5x_read(GPIO_IN_POL); | 100 | val = readl(GPIO_DATA_IN) ^ readl(GPIO_IN_POL); |
98 | else | 101 | else |
99 | val = orion5x_read(GPIO_OUT); | 102 | val = readl(GPIO_OUT); |
100 | 103 | ||
101 | return val & mask; | 104 | return val & mask; |
102 | } | 105 | } |
@@ -188,39 +191,39 @@ void gpio_display(void) | |||
188 | printk("GPIO, free\n"); | 191 | printk("GPIO, free\n"); |
189 | } else { | 192 | } else { |
190 | printk("GPIO, used by %s, ", gpio_label[i]); | 193 | printk("GPIO, used by %s, ", gpio_label[i]); |
191 | if (orion5x_read(GPIO_IO_CONF) & (1 << i)) { | 194 | if (readl(GPIO_IO_CONF) & (1 << i)) { |
192 | printk("input, active %s, level %s, edge %s\n", | 195 | printk("input, active %s, level %s, edge %s\n", |
193 | ((orion5x_read(GPIO_IN_POL) >> i) & 1) ? "low" : "high", | 196 | ((readl(GPIO_IN_POL) >> i) & 1) ? "low" : "high", |
194 | ((orion5x_read(GPIO_LEVEL_MASK) >> i) & 1) ? "enabled" : "masked", | 197 | ((readl(GPIO_LEVEL_MASK) >> i) & 1) ? "enabled" : "masked", |
195 | ((orion5x_read(GPIO_EDGE_MASK) >> i) & 1) ? "enabled" : "masked"); | 198 | ((readl(GPIO_EDGE_MASK) >> i) & 1) ? "enabled" : "masked"); |
196 | } else { | 199 | } else { |
197 | printk("output, val=%d\n", (orion5x_read(GPIO_OUT) >> i) & 1); | 200 | printk("output, val=%d\n", (readl(GPIO_OUT) >> i) & 1); |
198 | } | 201 | } |
199 | } | 202 | } |
200 | } | 203 | } |
201 | 204 | ||
202 | printk(KERN_DEBUG "MPP_0_7_CTRL (0x%08x) = 0x%08x\n", | 205 | printk(KERN_DEBUG "MPP_0_7_CTRL (0x%08x) = 0x%08x\n", |
203 | MPP_0_7_CTRL, orion5x_read(MPP_0_7_CTRL)); | 206 | MPP_0_7_CTRL, readl(MPP_0_7_CTRL)); |
204 | printk(KERN_DEBUG "MPP_8_15_CTRL (0x%08x) = 0x%08x\n", | 207 | printk(KERN_DEBUG "MPP_8_15_CTRL (0x%08x) = 0x%08x\n", |
205 | MPP_8_15_CTRL, orion5x_read(MPP_8_15_CTRL)); | 208 | MPP_8_15_CTRL, readl(MPP_8_15_CTRL)); |
206 | printk(KERN_DEBUG "MPP_16_19_CTRL (0x%08x) = 0x%08x\n", | 209 | printk(KERN_DEBUG "MPP_16_19_CTRL (0x%08x) = 0x%08x\n", |
207 | MPP_16_19_CTRL, orion5x_read(MPP_16_19_CTRL)); | 210 | MPP_16_19_CTRL, readl(MPP_16_19_CTRL)); |
208 | printk(KERN_DEBUG "MPP_DEV_CTRL (0x%08x) = 0x%08x\n", | 211 | printk(KERN_DEBUG "MPP_DEV_CTRL (0x%08x) = 0x%08x\n", |
209 | MPP_DEV_CTRL, orion5x_read(MPP_DEV_CTRL)); | 212 | MPP_DEV_CTRL, readl(MPP_DEV_CTRL)); |
210 | printk(KERN_DEBUG "GPIO_OUT (0x%08x) = 0x%08x\n", | 213 | printk(KERN_DEBUG "GPIO_OUT (0x%08x) = 0x%08x\n", |
211 | GPIO_OUT, orion5x_read(GPIO_OUT)); | 214 | GPIO_OUT, readl(GPIO_OUT)); |
212 | printk(KERN_DEBUG "GPIO_IO_CONF (0x%08x) = 0x%08x\n", | 215 | printk(KERN_DEBUG "GPIO_IO_CONF (0x%08x) = 0x%08x\n", |
213 | GPIO_IO_CONF, orion5x_read(GPIO_IO_CONF)); | 216 | GPIO_IO_CONF, readl(GPIO_IO_CONF)); |
214 | printk(KERN_DEBUG "GPIO_BLINK_EN (0x%08x) = 0x%08x\n", | 217 | printk(KERN_DEBUG "GPIO_BLINK_EN (0x%08x) = 0x%08x\n", |
215 | GPIO_BLINK_EN, orion5x_read(GPIO_BLINK_EN)); | 218 | GPIO_BLINK_EN, readl(GPIO_BLINK_EN)); |
216 | printk(KERN_DEBUG "GPIO_IN_POL (0x%08x) = 0x%08x\n", | 219 | printk(KERN_DEBUG "GPIO_IN_POL (0x%08x) = 0x%08x\n", |
217 | GPIO_IN_POL, orion5x_read(GPIO_IN_POL)); | 220 | GPIO_IN_POL, readl(GPIO_IN_POL)); |
218 | printk(KERN_DEBUG "GPIO_DATA_IN (0x%08x) = 0x%08x\n", | 221 | printk(KERN_DEBUG "GPIO_DATA_IN (0x%08x) = 0x%08x\n", |
219 | GPIO_DATA_IN, orion5x_read(GPIO_DATA_IN)); | 222 | GPIO_DATA_IN, readl(GPIO_DATA_IN)); |
220 | printk(KERN_DEBUG "GPIO_LEVEL_MASK (0x%08x) = 0x%08x\n", | 223 | printk(KERN_DEBUG "GPIO_LEVEL_MASK (0x%08x) = 0x%08x\n", |
221 | GPIO_LEVEL_MASK, orion5x_read(GPIO_LEVEL_MASK)); | 224 | GPIO_LEVEL_MASK, readl(GPIO_LEVEL_MASK)); |
222 | printk(KERN_DEBUG "GPIO_EDGE_CAUSE (0x%08x) = 0x%08x\n", | 225 | printk(KERN_DEBUG "GPIO_EDGE_CAUSE (0x%08x) = 0x%08x\n", |
223 | GPIO_EDGE_CAUSE, orion5x_read(GPIO_EDGE_CAUSE)); | 226 | GPIO_EDGE_CAUSE, readl(GPIO_EDGE_CAUSE)); |
224 | printk(KERN_DEBUG "GPIO_EDGE_MASK (0x%08x) = 0x%08x\n", | 227 | printk(KERN_DEBUG "GPIO_EDGE_MASK (0x%08x) = 0x%08x\n", |
225 | GPIO_EDGE_MASK, orion5x_read(GPIO_EDGE_MASK)); | 228 | GPIO_EDGE_MASK, readl(GPIO_EDGE_MASK)); |
226 | } | 229 | } |
diff --git a/arch/arm/mach-orion5x/irq.c b/arch/arm/mach-orion5x/irq.c index dd21f38c5d37..e2a0084ab4a3 100644 --- a/arch/arm/mach-orion5x/irq.c +++ b/arch/arm/mach-orion5x/irq.c | |||
@@ -82,7 +82,7 @@ static int orion5x_gpio_set_irq_type(u32 irq, u32 type) | |||
82 | int pin = irq_to_gpio(irq); | 82 | int pin = irq_to_gpio(irq); |
83 | struct irq_desc *desc; | 83 | struct irq_desc *desc; |
84 | 84 | ||
85 | if ((orion5x_read(GPIO_IO_CONF) & (1 << pin)) == 0) { | 85 | if ((readl(GPIO_IO_CONF) & (1 << pin)) == 0) { |
86 | printk(KERN_ERR "orion5x_gpio_set_irq_type failed " | 86 | printk(KERN_ERR "orion5x_gpio_set_irq_type failed " |
87 | "(irq %d, pin %d).\n", irq, pin); | 87 | "(irq %d, pin %d).\n", irq, pin); |
88 | return -EINVAL; | 88 | return -EINVAL; |
@@ -117,7 +117,7 @@ static int orion5x_gpio_set_irq_type(u32 irq, u32 type) | |||
117 | /* | 117 | /* |
118 | * set initial polarity based on current input level | 118 | * set initial polarity based on current input level |
119 | */ | 119 | */ |
120 | if ((orion5x_read(GPIO_IN_POL) ^ orion5x_read(GPIO_DATA_IN)) | 120 | if ((readl(GPIO_IN_POL) ^ readl(GPIO_DATA_IN)) |
121 | & (1 << pin)) | 121 | & (1 << pin)) |
122 | orion5x_setbits(GPIO_IN_POL, (1 << pin)); /* falling */ | 122 | orion5x_setbits(GPIO_IN_POL, (1 << pin)); /* falling */ |
123 | else | 123 | else |
@@ -149,8 +149,8 @@ static void orion5x_gpio_irq_handler(unsigned int irq, struct irq_desc *desc) | |||
149 | 149 | ||
150 | BUG_ON(irq < IRQ_ORION5X_GPIO_0_7 || irq > IRQ_ORION5X_GPIO_24_31); | 150 | BUG_ON(irq < IRQ_ORION5X_GPIO_0_7 || irq > IRQ_ORION5X_GPIO_24_31); |
151 | offs = (irq - IRQ_ORION5X_GPIO_0_7) * 8; | 151 | offs = (irq - IRQ_ORION5X_GPIO_0_7) * 8; |
152 | cause = (orion5x_read(GPIO_DATA_IN) & orion5x_read(GPIO_LEVEL_MASK)) | | 152 | cause = (readl(GPIO_DATA_IN) & readl(GPIO_LEVEL_MASK)) | |
153 | (orion5x_read(GPIO_EDGE_CAUSE) & orion5x_read(GPIO_EDGE_MASK)); | 153 | (readl(GPIO_EDGE_CAUSE) & readl(GPIO_EDGE_MASK)); |
154 | 154 | ||
155 | for (pin = offs; pin < offs + 8; pin++) { | 155 | for (pin = offs; pin < offs + 8; pin++) { |
156 | if (cause & (1 << pin)) { | 156 | if (cause & (1 << pin)) { |
@@ -158,9 +158,9 @@ static void orion5x_gpio_irq_handler(unsigned int irq, struct irq_desc *desc) | |||
158 | desc = irq_desc + irq; | 158 | desc = irq_desc + irq; |
159 | if ((desc->status & IRQ_TYPE_SENSE_MASK) == IRQT_BOTHEDGE) { | 159 | if ((desc->status & IRQ_TYPE_SENSE_MASK) == IRQT_BOTHEDGE) { |
160 | /* Swap polarity (race with GPIO line) */ | 160 | /* Swap polarity (race with GPIO line) */ |
161 | u32 polarity = orion5x_read(GPIO_IN_POL); | 161 | u32 polarity = readl(GPIO_IN_POL); |
162 | polarity ^= 1 << pin; | 162 | polarity ^= 1 << pin; |
163 | orion5x_write(GPIO_IN_POL, polarity); | 163 | writel(polarity, GPIO_IN_POL); |
164 | } | 164 | } |
165 | desc_handle_irq(irq, desc); | 165 | desc_handle_irq(irq, desc); |
166 | } | 166 | } |
@@ -175,9 +175,9 @@ static void __init orion5x_init_gpio_irq(void) | |||
175 | /* | 175 | /* |
176 | * Mask and clear GPIO IRQ interrupts | 176 | * Mask and clear GPIO IRQ interrupts |
177 | */ | 177 | */ |
178 | orion5x_write(GPIO_LEVEL_MASK, 0x0); | 178 | writel(0x0, GPIO_LEVEL_MASK); |
179 | orion5x_write(GPIO_EDGE_MASK, 0x0); | 179 | writel(0x0, GPIO_EDGE_MASK); |
180 | orion5x_write(GPIO_EDGE_CAUSE, 0x0); | 180 | writel(0x0, GPIO_EDGE_CAUSE); |
181 | 181 | ||
182 | /* | 182 | /* |
183 | * Register chained level handlers for GPIO IRQs by default. | 183 | * Register chained level handlers for GPIO IRQs by default. |
diff --git a/arch/arm/mach-orion5x/kurobox_pro-setup.c b/arch/arm/mach-orion5x/kurobox_pro-setup.c index f5074b877b7f..84feac4a1fe2 100644 --- a/arch/arm/mach-orion5x/kurobox_pro-setup.c +++ b/arch/arm/mach-orion5x/kurobox_pro-setup.c | |||
@@ -13,10 +13,12 @@ | |||
13 | #include <linux/platform_device.h> | 13 | #include <linux/platform_device.h> |
14 | #include <linux/pci.h> | 14 | #include <linux/pci.h> |
15 | #include <linux/irq.h> | 15 | #include <linux/irq.h> |
16 | #include <linux/delay.h> | ||
16 | #include <linux/mtd/physmap.h> | 17 | #include <linux/mtd/physmap.h> |
17 | #include <linux/mtd/nand.h> | 18 | #include <linux/mtd/nand.h> |
18 | #include <linux/mv643xx_eth.h> | 19 | #include <linux/mv643xx_eth.h> |
19 | #include <linux/i2c.h> | 20 | #include <linux/i2c.h> |
21 | #include <linux/serial_reg.h> | ||
20 | #include <linux/ata_platform.h> | 22 | #include <linux/ata_platform.h> |
21 | #include <asm/mach-types.h> | 23 | #include <asm/mach-types.h> |
22 | #include <asm/gpio.h> | 24 | #include <asm/gpio.h> |
@@ -25,6 +27,7 @@ | |||
25 | #include <asm/arch/orion5x.h> | 27 | #include <asm/arch/orion5x.h> |
26 | #include <asm/plat-orion/orion_nand.h> | 28 | #include <asm/plat-orion/orion_nand.h> |
27 | #include "common.h" | 29 | #include "common.h" |
30 | #include "mpp.h" | ||
28 | 31 | ||
29 | /***************************************************************************** | 32 | /***************************************************************************** |
30 | * KUROBOX-PRO Info | 33 | * KUROBOX-PRO Info |
@@ -53,13 +56,11 @@ static struct mtd_partition kurobox_pro_nand_parts[] = { | |||
53 | .name = "uImage", | 56 | .name = "uImage", |
54 | .offset = 0, | 57 | .offset = 0, |
55 | .size = SZ_4M, | 58 | .size = SZ_4M, |
56 | }, | 59 | }, { |
57 | { | ||
58 | .name = "rootfs", | 60 | .name = "rootfs", |
59 | .offset = SZ_4M, | 61 | .offset = SZ_4M, |
60 | .size = SZ_64M, | 62 | .size = SZ_64M, |
61 | }, | 63 | }, { |
62 | { | ||
63 | .name = "extra", | 64 | .name = "extra", |
64 | .offset = SZ_4M + SZ_64M, | 65 | .offset = SZ_4M + SZ_64M, |
65 | .size = SZ_256M - (SZ_4M + SZ_64M), | 66 | .size = SZ_256M - (SZ_4M + SZ_64M), |
@@ -132,8 +133,6 @@ static int __init kurobox_pro_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | |||
132 | /* | 133 | /* |
133 | * PCI isn't used on the Kuro | 134 | * PCI isn't used on the Kuro |
134 | */ | 135 | */ |
135 | printk(KERN_ERR "kurobox_pro_pci_map_irq failed, unknown bus\n"); | ||
136 | |||
137 | return -1; | 136 | return -1; |
138 | } | 137 | } |
139 | 138 | ||
@@ -161,7 +160,6 @@ subsys_initcall(kurobox_pro_pci_init); | |||
161 | 160 | ||
162 | static struct mv643xx_eth_platform_data kurobox_pro_eth_data = { | 161 | static struct mv643xx_eth_platform_data kurobox_pro_eth_data = { |
163 | .phy_addr = 8, | 162 | .phy_addr = 8, |
164 | .force_phy_addr = 1, | ||
165 | }; | 163 | }; |
166 | 164 | ||
167 | /***************************************************************************** | 165 | /***************************************************************************** |
@@ -175,12 +173,169 @@ static struct i2c_board_info __initdata kurobox_pro_i2c_rtc = { | |||
175 | * SATA | 173 | * SATA |
176 | ****************************************************************************/ | 174 | ****************************************************************************/ |
177 | static struct mv_sata_platform_data kurobox_pro_sata_data = { | 175 | static struct mv_sata_platform_data kurobox_pro_sata_data = { |
178 | .n_ports = 2, | 176 | .n_ports = 2, |
179 | }; | 177 | }; |
180 | 178 | ||
181 | /***************************************************************************** | 179 | /***************************************************************************** |
180 | * Kurobox Pro specific power off method via UART1-attached microcontroller | ||
181 | ****************************************************************************/ | ||
182 | |||
183 | #define UART1_REG(x) (UART1_VIRT_BASE + ((UART_##x) << 2)) | ||
184 | |||
185 | static int kurobox_pro_miconread(unsigned char *buf, int count) | ||
186 | { | ||
187 | int i; | ||
188 | int timeout; | ||
189 | |||
190 | for (i = 0; i < count; i++) { | ||
191 | timeout = 10; | ||
192 | |||
193 | while (!(readl(UART1_REG(LSR)) & UART_LSR_DR)) { | ||
194 | if (--timeout == 0) | ||
195 | break; | ||
196 | udelay(1000); | ||
197 | } | ||
198 | |||
199 | if (timeout == 0) | ||
200 | break; | ||
201 | buf[i] = readl(UART1_REG(RX)); | ||
202 | } | ||
203 | |||
204 | /* return read bytes */ | ||
205 | return i; | ||
206 | } | ||
207 | |||
208 | static int kurobox_pro_miconwrite(const unsigned char *buf, int count) | ||
209 | { | ||
210 | int i = 0; | ||
211 | |||
212 | while (count--) { | ||
213 | while (!(readl(UART1_REG(LSR)) & UART_LSR_THRE)) | ||
214 | barrier(); | ||
215 | writel(buf[i++], UART1_REG(TX)); | ||
216 | } | ||
217 | |||
218 | return 0; | ||
219 | } | ||
220 | |||
221 | static int kurobox_pro_miconsend(const unsigned char *data, int count) | ||
222 | { | ||
223 | int i; | ||
224 | unsigned char checksum = 0; | ||
225 | unsigned char recv_buf[40]; | ||
226 | unsigned char send_buf[40]; | ||
227 | unsigned char correct_ack[3]; | ||
228 | int retry = 2; | ||
229 | |||
230 | /* Generate checksum */ | ||
231 | for (i = 0; i < count; i++) | ||
232 | checksum -= data[i]; | ||
233 | |||
234 | do { | ||
235 | /* Send data */ | ||
236 | kurobox_pro_miconwrite(data, count); | ||
237 | |||
238 | /* send checksum */ | ||
239 | kurobox_pro_miconwrite(&checksum, 1); | ||
240 | |||
241 | if (kurobox_pro_miconread(recv_buf, sizeof(recv_buf)) <= 3) { | ||
242 | printk(KERN_ERR ">%s: receive failed.\n", __func__); | ||
243 | |||
244 | /* send preamble to clear the receive buffer */ | ||
245 | memset(&send_buf, 0xff, sizeof(send_buf)); | ||
246 | kurobox_pro_miconwrite(send_buf, sizeof(send_buf)); | ||
247 | |||
248 | /* make dummy reads */ | ||
249 | mdelay(100); | ||
250 | kurobox_pro_miconread(recv_buf, sizeof(recv_buf)); | ||
251 | } else { | ||
252 | /* Generate expected ack */ | ||
253 | correct_ack[0] = 0x01; | ||
254 | correct_ack[1] = data[1]; | ||
255 | correct_ack[2] = 0x00; | ||
256 | |||
257 | /* checksum Check */ | ||
258 | if ((recv_buf[0] + recv_buf[1] + recv_buf[2] + | ||
259 | recv_buf[3]) & 0xFF) { | ||
260 | printk(KERN_ERR ">%s: Checksum Error : " | ||
261 | "Received data[%02x, %02x, %02x, %02x]" | ||
262 | "\n", __func__, recv_buf[0], | ||
263 | recv_buf[1], recv_buf[2], recv_buf[3]); | ||
264 | } else { | ||
265 | /* Check Received Data */ | ||
266 | if (correct_ack[0] == recv_buf[0] && | ||
267 | correct_ack[1] == recv_buf[1] && | ||
268 | correct_ack[2] == recv_buf[2]) { | ||
269 | /* Interval for next command */ | ||
270 | mdelay(10); | ||
271 | |||
272 | /* Receive ACK */ | ||
273 | return 0; | ||
274 | } | ||
275 | } | ||
276 | /* Received NAK or illegal Data */ | ||
277 | printk(KERN_ERR ">%s: Error : NAK or Illegal Data " | ||
278 | "Received\n", __func__); | ||
279 | } | ||
280 | } while (retry--); | ||
281 | |||
282 | /* Interval for next command */ | ||
283 | mdelay(10); | ||
284 | |||
285 | return -1; | ||
286 | } | ||
287 | |||
288 | static void kurobox_pro_power_off(void) | ||
289 | { | ||
290 | const unsigned char watchdogkill[] = {0x01, 0x35, 0x00}; | ||
291 | const unsigned char shutdownwait[] = {0x00, 0x0c}; | ||
292 | const unsigned char poweroff[] = {0x00, 0x06}; | ||
293 | /* 38400 baud divisor */ | ||
294 | const unsigned divisor = ((ORION5X_TCLK + (8 * 38400)) / (16 * 38400)); | ||
295 | |||
296 | pr_info("%s: triggering power-off...\n", __func__); | ||
297 | |||
298 | /* hijack uart1 and reset into sane state (38400,8n1,even parity) */ | ||
299 | writel(0x83, UART1_REG(LCR)); | ||
300 | writel(divisor & 0xff, UART1_REG(DLL)); | ||
301 | writel((divisor >> 8) & 0xff, UART1_REG(DLM)); | ||
302 | writel(0x1b, UART1_REG(LCR)); | ||
303 | writel(0x00, UART1_REG(IER)); | ||
304 | writel(0x07, UART1_REG(FCR)); | ||
305 | writel(0x00, UART1_REG(MCR)); | ||
306 | |||
307 | /* Send the commands to shutdown the Kurobox Pro */ | ||
308 | kurobox_pro_miconsend(watchdogkill, sizeof(watchdogkill)) ; | ||
309 | kurobox_pro_miconsend(shutdownwait, sizeof(shutdownwait)) ; | ||
310 | kurobox_pro_miconsend(poweroff, sizeof(poweroff)); | ||
311 | } | ||
312 | |||
313 | /***************************************************************************** | ||
182 | * General Setup | 314 | * General Setup |
183 | ****************************************************************************/ | 315 | ****************************************************************************/ |
316 | static struct orion5x_mpp_mode kurobox_pro_mpp_modes[] __initdata = { | ||
317 | { 0, MPP_UNUSED }, | ||
318 | { 1, MPP_UNUSED }, | ||
319 | { 2, MPP_GPIO }, /* GPIO Micon */ | ||
320 | { 3, MPP_GPIO }, /* GPIO Rtc */ | ||
321 | { 4, MPP_UNUSED }, | ||
322 | { 5, MPP_UNUSED }, | ||
323 | { 6, MPP_NAND }, /* NAND Flash REn */ | ||
324 | { 7, MPP_NAND }, /* NAND Flash WEn */ | ||
325 | { 8, MPP_UNUSED }, | ||
326 | { 9, MPP_UNUSED }, | ||
327 | { 10, MPP_UNUSED }, | ||
328 | { 11, MPP_UNUSED }, | ||
329 | { 12, MPP_SATA_LED }, /* SATA 0 presence */ | ||
330 | { 13, MPP_SATA_LED }, /* SATA 1 presence */ | ||
331 | { 14, MPP_SATA_LED }, /* SATA 0 active */ | ||
332 | { 15, MPP_SATA_LED }, /* SATA 1 active */ | ||
333 | { 16, MPP_UART }, /* UART1 RXD */ | ||
334 | { 17, MPP_UART }, /* UART1 TXD */ | ||
335 | { 18, MPP_UART }, /* UART1 CTSn */ | ||
336 | { 19, MPP_UART }, /* UART1 RTSn */ | ||
337 | { -1 }, | ||
338 | }; | ||
184 | 339 | ||
185 | static void __init kurobox_pro_init(void) | 340 | static void __init kurobox_pro_init(void) |
186 | { | 341 | { |
@@ -189,46 +344,33 @@ static void __init kurobox_pro_init(void) | |||
189 | */ | 344 | */ |
190 | orion5x_init(); | 345 | orion5x_init(); |
191 | 346 | ||
192 | /* | 347 | orion5x_mpp_conf(kurobox_pro_mpp_modes); |
193 | * Setup the CPU address decode windows for our devices | ||
194 | */ | ||
195 | orion5x_setup_dev_boot_win(KUROBOX_PRO_NOR_BOOT_BASE, | ||
196 | KUROBOX_PRO_NOR_BOOT_SIZE); | ||
197 | orion5x_setup_dev0_win(KUROBOX_PRO_NAND_BASE, KUROBOX_PRO_NAND_SIZE); | ||
198 | 348 | ||
199 | /* | 349 | /* |
200 | * Open a special address decode windows for the PCIe WA. | 350 | * Configure peripherals. |
201 | */ | 351 | */ |
202 | orion5x_setup_pcie_wa_win(ORION5X_PCIE_WA_PHYS_BASE, | 352 | orion5x_ehci0_init(); |
203 | ORION5X_PCIE_WA_SIZE); | 353 | orion5x_ehci1_init(); |
204 | 354 | orion5x_eth_init(&kurobox_pro_eth_data); | |
205 | /* | 355 | orion5x_i2c_init(); |
206 | * Setup Multiplexing Pins -- | 356 | orion5x_sata_init(&kurobox_pro_sata_data); |
207 | * MPP[0-1] Not used | 357 | orion5x_uart0_init(); |
208 | * MPP[2] GPIO Micon | 358 | orion5x_uart1_init(); |
209 | * MPP[3] GPIO RTC | ||
210 | * MPP[4-5] Not used | ||
211 | * MPP[6] Nand Flash REn | ||
212 | * MPP[7] Nand Flash WEn | ||
213 | * MPP[8-11] Not used | ||
214 | * MPP[12] SATA 0 presence Indication | ||
215 | * MPP[13] SATA 1 presence Indication | ||
216 | * MPP[14] SATA 0 active Indication | ||
217 | * MPP[15] SATA 1 active indication | ||
218 | * MPP[16-19] Not used | ||
219 | */ | ||
220 | orion5x_write(MPP_0_7_CTRL, 0x44220003); | ||
221 | orion5x_write(MPP_8_15_CTRL, 0x55550000); | ||
222 | orion5x_write(MPP_16_19_CTRL, 0x0); | ||
223 | |||
224 | orion5x_gpio_set_valid_pins(0x0000000c); | ||
225 | 359 | ||
360 | orion5x_setup_dev_boot_win(KUROBOX_PRO_NOR_BOOT_BASE, | ||
361 | KUROBOX_PRO_NOR_BOOT_SIZE); | ||
226 | platform_device_register(&kurobox_pro_nor_flash); | 362 | platform_device_register(&kurobox_pro_nor_flash); |
227 | if (machine_is_kurobox_pro()) | 363 | |
364 | if (machine_is_kurobox_pro()) { | ||
365 | orion5x_setup_dev0_win(KUROBOX_PRO_NAND_BASE, | ||
366 | KUROBOX_PRO_NAND_SIZE); | ||
228 | platform_device_register(&kurobox_pro_nand_flash); | 367 | platform_device_register(&kurobox_pro_nand_flash); |
368 | } | ||
369 | |||
229 | i2c_register_board_info(0, &kurobox_pro_i2c_rtc, 1); | 370 | i2c_register_board_info(0, &kurobox_pro_i2c_rtc, 1); |
230 | orion5x_eth_init(&kurobox_pro_eth_data); | 371 | |
231 | orion5x_sata_init(&kurobox_pro_sata_data); | 372 | /* register Kurobox Pro specific power-off method */ |
373 | pm_power_off = kurobox_pro_power_off; | ||
232 | } | 374 | } |
233 | 375 | ||
234 | #ifdef CONFIG_MACH_KUROBOX_PRO | 376 | #ifdef CONFIG_MACH_KUROBOX_PRO |
diff --git a/arch/arm/mach-orion5x/mpp.c b/arch/arm/mach-orion5x/mpp.c new file mode 100644 index 000000000000..a48cadb01590 --- /dev/null +++ b/arch/arm/mach-orion5x/mpp.c | |||
@@ -0,0 +1,163 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-orion5x/mpp.c | ||
3 | * | ||
4 | * MPP functions for Marvell Orion 5x SoCs | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/init.h> | ||
13 | #include <linux/mbus.h> | ||
14 | #include <asm/hardware.h> | ||
15 | #include <asm/io.h> | ||
16 | #include "common.h" | ||
17 | #include "mpp.h" | ||
18 | |||
19 | static int is_5181l(void) | ||
20 | { | ||
21 | u32 dev; | ||
22 | u32 rev; | ||
23 | |||
24 | orion5x_pcie_id(&dev, &rev); | ||
25 | |||
26 | return !!(dev == MV88F5181_DEV_ID && rev >= MV88F5181L_REV_A0); | ||
27 | } | ||
28 | |||
29 | static int is_5182(void) | ||
30 | { | ||
31 | u32 dev; | ||
32 | u32 rev; | ||
33 | |||
34 | orion5x_pcie_id(&dev, &rev); | ||
35 | |||
36 | return !!(dev == MV88F5182_DEV_ID); | ||
37 | } | ||
38 | |||
39 | static int is_5281(void) | ||
40 | { | ||
41 | u32 dev; | ||
42 | u32 rev; | ||
43 | |||
44 | orion5x_pcie_id(&dev, &rev); | ||
45 | |||
46 | return !!(dev == MV88F5281_DEV_ID); | ||
47 | } | ||
48 | |||
49 | static int __init determine_type_encoding(int mpp, enum orion5x_mpp_type type) | ||
50 | { | ||
51 | switch (type) { | ||
52 | case MPP_UNUSED: | ||
53 | case MPP_GPIO: | ||
54 | if (mpp == 0) | ||
55 | return 3; | ||
56 | if (mpp >= 1 && mpp <= 15) | ||
57 | return 0; | ||
58 | if (mpp >= 16 && mpp <= 19) { | ||
59 | if (is_5182()) | ||
60 | return 5; | ||
61 | if (type == MPP_UNUSED) | ||
62 | return 0; | ||
63 | } | ||
64 | return -1; | ||
65 | |||
66 | case MPP_PCIE_RST_OUTn: | ||
67 | if (mpp == 0) | ||
68 | return 0; | ||
69 | return -1; | ||
70 | |||
71 | case MPP_PCI_ARB: | ||
72 | if (mpp >= 0 && mpp <= 7) | ||
73 | return 2; | ||
74 | return -1; | ||
75 | |||
76 | case MPP_PCI_PMEn: | ||
77 | if (mpp == 2) | ||
78 | return 3; | ||
79 | return -1; | ||
80 | |||
81 | case MPP_GIGE: | ||
82 | if (mpp >= 8 && mpp <= 19) | ||
83 | return 1; | ||
84 | return -1; | ||
85 | |||
86 | case MPP_NAND: | ||
87 | if (is_5182() || is_5281()) { | ||
88 | if (mpp >= 4 && mpp <= 7) | ||
89 | return 4; | ||
90 | if (mpp >= 12 && mpp <= 17) | ||
91 | return 4; | ||
92 | } | ||
93 | return -1; | ||
94 | |||
95 | case MPP_PCI_CLK: | ||
96 | if (is_5181l() && mpp >= 6 && mpp <= 7) | ||
97 | return 5; | ||
98 | return -1; | ||
99 | |||
100 | case MPP_SATA_LED: | ||
101 | if (is_5182()) { | ||
102 | if (mpp >= 4 && mpp <= 7) | ||
103 | return 5; | ||
104 | if (mpp >= 12 && mpp <= 15) | ||
105 | return 5; | ||
106 | } | ||
107 | return -1; | ||
108 | |||
109 | case MPP_UART: | ||
110 | if (mpp >= 16 && mpp <= 19) | ||
111 | return 0; | ||
112 | return -1; | ||
113 | } | ||
114 | |||
115 | printk(KERN_INFO "unknown MPP type %d\n", type); | ||
116 | |||
117 | return -1; | ||
118 | } | ||
119 | |||
120 | void __init orion5x_mpp_conf(struct orion5x_mpp_mode *mode) | ||
121 | { | ||
122 | u32 mpp_0_7_ctrl = readl(MPP_0_7_CTRL); | ||
123 | u32 mpp_8_15_ctrl = readl(MPP_8_15_CTRL); | ||
124 | u32 mpp_16_19_ctrl = readl(MPP_16_19_CTRL); | ||
125 | |||
126 | while (mode->mpp >= 0) { | ||
127 | u32 *reg; | ||
128 | int num_type; | ||
129 | int shift; | ||
130 | |||
131 | if (mode->mpp >= 0 && mode->mpp <= 7) | ||
132 | reg = &mpp_0_7_ctrl; | ||
133 | else if (mode->mpp >= 8 && mode->mpp <= 15) | ||
134 | reg = &mpp_8_15_ctrl; | ||
135 | else if (mode->mpp >= 16 && mode->mpp <= 19) | ||
136 | reg = &mpp_16_19_ctrl; | ||
137 | else { | ||
138 | printk(KERN_ERR "orion5x_mpp_conf: invalid MPP " | ||
139 | "(%d)\n", mode->mpp); | ||
140 | continue; | ||
141 | } | ||
142 | |||
143 | num_type = determine_type_encoding(mode->mpp, mode->type); | ||
144 | if (num_type < 0) { | ||
145 | printk(KERN_ERR "orion5x_mpp_conf: invalid MPP " | ||
146 | "combination (%d, %d)\n", mode->mpp, | ||
147 | mode->type); | ||
148 | continue; | ||
149 | } | ||
150 | |||
151 | shift = (mode->mpp & 7) << 2; | ||
152 | *reg &= ~(0xf << shift); | ||
153 | *reg |= (num_type & 0xf) << shift; | ||
154 | |||
155 | orion5x_gpio_set_valid(mode->mpp, !!(mode->type == MPP_GPIO)); | ||
156 | |||
157 | mode++; | ||
158 | } | ||
159 | |||
160 | writel(mpp_0_7_ctrl, MPP_0_7_CTRL); | ||
161 | writel(mpp_8_15_ctrl, MPP_8_15_CTRL); | ||
162 | writel(mpp_16_19_ctrl, MPP_16_19_CTRL); | ||
163 | } | ||
diff --git a/arch/arm/mach-orion5x/mpp.h b/arch/arm/mach-orion5x/mpp.h new file mode 100644 index 000000000000..290e610dc012 --- /dev/null +++ b/arch/arm/mach-orion5x/mpp.h | |||
@@ -0,0 +1,74 @@ | |||
1 | #ifndef __ARCH_ORION5X_MPP_H | ||
2 | #define __ARCH_ORION5X_MPP_H | ||
3 | |||
4 | enum orion5x_mpp_type { | ||
5 | /* | ||
6 | * This MPP is unused. | ||
7 | */ | ||
8 | MPP_UNUSED, | ||
9 | |||
10 | /* | ||
11 | * This MPP pin is used as a generic GPIO pin. Valid for | ||
12 | * MPPs 0-15 and device bus data pins 16-31. On 5182, also | ||
13 | * valid for MPPs 16-19. | ||
14 | */ | ||
15 | MPP_GPIO, | ||
16 | |||
17 | /* | ||
18 | * This MPP is used as PCIe_RST_OUTn pin. Valid for | ||
19 | * MPP 0 only. | ||
20 | */ | ||
21 | MPP_PCIE_RST_OUTn, | ||
22 | |||
23 | /* | ||
24 | * This MPP is used as PCI arbiter pin (REQn/GNTn). | ||
25 | * Valid for MPPs 0-7 only. | ||
26 | */ | ||
27 | MPP_PCI_ARB, | ||
28 | |||
29 | /* | ||
30 | * This MPP is used as PCI_PMEn pin. Valid for MPP 2 only. | ||
31 | */ | ||
32 | MPP_PCI_PMEn, | ||
33 | |||
34 | /* | ||
35 | * This MPP is used as GigE half-duplex (COL, CRS) or GMII | ||
36 | * (RXERR, CRS, TXERR, TXD[7:4], RXD[7:4]) pin. Valid for | ||
37 | * MPPs 8-19 only. | ||
38 | */ | ||
39 | MPP_GIGE, | ||
40 | |||
41 | /* | ||
42 | * This MPP is used as NAND REn/WEn pin. Valid for MPPs | ||
43 | * 4-7 and 12-17 only, and only on the 5181l/5182/5281. | ||
44 | */ | ||
45 | MPP_NAND, | ||
46 | |||
47 | /* | ||
48 | * This MPP is used as a PCI clock output pin. Valid for | ||
49 | * MPPs 6-7 only, and only on the 5181l. | ||
50 | */ | ||
51 | MPP_PCI_CLK, | ||
52 | |||
53 | /* | ||
54 | * This MPP is used as a SATA presence/activity LED. | ||
55 | * Valid for MPPs 4-7 and 12-15 only, and only on the 5182. | ||
56 | */ | ||
57 | MPP_SATA_LED, | ||
58 | |||
59 | /* | ||
60 | * This MPP is used as UART1 RXD/TXD/CTSn/RTSn pin. | ||
61 | * Valid for MPPs 16-19 only. | ||
62 | */ | ||
63 | MPP_UART, | ||
64 | }; | ||
65 | |||
66 | struct orion5x_mpp_mode { | ||
67 | int mpp; | ||
68 | enum orion5x_mpp_type type; | ||
69 | }; | ||
70 | |||
71 | void orion5x_mpp_conf(struct orion5x_mpp_mode *mode); | ||
72 | |||
73 | |||
74 | #endif | ||
diff --git a/arch/arm/mach-orion5x/mss2-setup.c b/arch/arm/mach-orion5x/mss2-setup.c new file mode 100644 index 000000000000..7ce9e407d9d1 --- /dev/null +++ b/arch/arm/mach-orion5x/mss2-setup.c | |||
@@ -0,0 +1,270 @@ | |||
1 | /* | ||
2 | * Maxtor Shared Storage II Board Setup | ||
3 | * | ||
4 | * Maintainer: Sylver Bruneau <sylver.bruneau@googlemail.com> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or | ||
7 | * modify it under the terms of the GNU General Public License | ||
8 | * as published by the Free Software Foundation; either version | ||
9 | * 2 of the License, or (at your option) any later version. | ||
10 | */ | ||
11 | |||
12 | #include <linux/kernel.h> | ||
13 | #include <linux/init.h> | ||
14 | #include <linux/platform_device.h> | ||
15 | #include <linux/pci.h> | ||
16 | #include <linux/irq.h> | ||
17 | #include <linux/mtd/physmap.h> | ||
18 | #include <linux/mv643xx_eth.h> | ||
19 | #include <linux/leds.h> | ||
20 | #include <linux/gpio_keys.h> | ||
21 | #include <linux/input.h> | ||
22 | #include <linux/i2c.h> | ||
23 | #include <linux/ata_platform.h> | ||
24 | #include <linux/gpio.h> | ||
25 | #include <asm/mach-types.h> | ||
26 | #include <asm/mach/arch.h> | ||
27 | #include <asm/mach/pci.h> | ||
28 | #include <asm/arch/orion5x.h> | ||
29 | #include "common.h" | ||
30 | #include "mpp.h" | ||
31 | |||
32 | #define MSS2_NOR_BOOT_BASE 0xff800000 | ||
33 | #define MSS2_NOR_BOOT_SIZE SZ_256K | ||
34 | |||
35 | /***************************************************************************** | ||
36 | * Maxtor Shared Storage II Info | ||
37 | ****************************************************************************/ | ||
38 | |||
39 | /* | ||
40 | * Maxtor Shared Storage II hardware : | ||
41 | * - Marvell 88F5182-A2 C500 | ||
42 | * - Marvell 88E1111 Gigabit Ethernet PHY | ||
43 | * - RTC M41T81 (@0x68) on I2C bus | ||
44 | * - 256KB NOR flash | ||
45 | * - 64MB of RAM | ||
46 | */ | ||
47 | |||
48 | /***************************************************************************** | ||
49 | * 256KB NOR Flash on BOOT Device | ||
50 | ****************************************************************************/ | ||
51 | |||
52 | static struct physmap_flash_data mss2_nor_flash_data = { | ||
53 | .width = 1, | ||
54 | }; | ||
55 | |||
56 | static struct resource mss2_nor_flash_resource = { | ||
57 | .flags = IORESOURCE_MEM, | ||
58 | .start = MSS2_NOR_BOOT_BASE, | ||
59 | .end = MSS2_NOR_BOOT_BASE + MSS2_NOR_BOOT_SIZE - 1, | ||
60 | }; | ||
61 | |||
62 | static struct platform_device mss2_nor_flash = { | ||
63 | .name = "physmap-flash", | ||
64 | .id = 0, | ||
65 | .dev = { | ||
66 | .platform_data = &mss2_nor_flash_data, | ||
67 | }, | ||
68 | .resource = &mss2_nor_flash_resource, | ||
69 | .num_resources = 1, | ||
70 | }; | ||
71 | |||
72 | /**************************************************************************** | ||
73 | * PCI setup | ||
74 | ****************************************************************************/ | ||
75 | static int __init mss2_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | ||
76 | { | ||
77 | int irq; | ||
78 | |||
79 | /* | ||
80 | * Check for devices with hard-wired IRQs. | ||
81 | */ | ||
82 | irq = orion5x_pci_map_irq(dev, slot, pin); | ||
83 | if (irq != -1) | ||
84 | return irq; | ||
85 | |||
86 | return -1; | ||
87 | } | ||
88 | |||
89 | static struct hw_pci mss2_pci __initdata = { | ||
90 | .nr_controllers = 2, | ||
91 | .swizzle = pci_std_swizzle, | ||
92 | .setup = orion5x_pci_sys_setup, | ||
93 | .scan = orion5x_pci_sys_scan_bus, | ||
94 | .map_irq = mss2_pci_map_irq, | ||
95 | }; | ||
96 | |||
97 | static int __init mss2_pci_init(void) | ||
98 | { | ||
99 | if (machine_is_mss2()) | ||
100 | pci_common_init(&mss2_pci); | ||
101 | |||
102 | return 0; | ||
103 | } | ||
104 | subsys_initcall(mss2_pci_init); | ||
105 | |||
106 | |||
107 | /***************************************************************************** | ||
108 | * Ethernet | ||
109 | ****************************************************************************/ | ||
110 | |||
111 | static struct mv643xx_eth_platform_data mss2_eth_data = { | ||
112 | .phy_addr = 8, | ||
113 | }; | ||
114 | |||
115 | /***************************************************************************** | ||
116 | * SATA | ||
117 | ****************************************************************************/ | ||
118 | |||
119 | static struct mv_sata_platform_data mss2_sata_data = { | ||
120 | .n_ports = 2, | ||
121 | }; | ||
122 | |||
123 | /***************************************************************************** | ||
124 | * GPIO buttons | ||
125 | ****************************************************************************/ | ||
126 | |||
127 | #define MSS2_GPIO_KEY_RESET 12 | ||
128 | #define MSS2_GPIO_KEY_POWER 11 | ||
129 | |||
130 | static struct gpio_keys_button mss2_buttons[] = { | ||
131 | { | ||
132 | .code = KEY_POWER, | ||
133 | .gpio = MSS2_GPIO_KEY_POWER, | ||
134 | .desc = "Power", | ||
135 | .active_low = 1, | ||
136 | }, { | ||
137 | .code = KEY_RESTART, | ||
138 | .gpio = MSS2_GPIO_KEY_RESET, | ||
139 | .desc = "Reset", | ||
140 | .active_low = 1, | ||
141 | }, | ||
142 | }; | ||
143 | |||
144 | static struct gpio_keys_platform_data mss2_button_data = { | ||
145 | .buttons = mss2_buttons, | ||
146 | .nbuttons = ARRAY_SIZE(mss2_buttons), | ||
147 | }; | ||
148 | |||
149 | static struct platform_device mss2_button_device = { | ||
150 | .name = "gpio-keys", | ||
151 | .id = -1, | ||
152 | .dev = { | ||
153 | .platform_data = &mss2_button_data, | ||
154 | }, | ||
155 | }; | ||
156 | |||
157 | /***************************************************************************** | ||
158 | * RTC m41t81 on I2C bus | ||
159 | ****************************************************************************/ | ||
160 | |||
161 | #define MSS2_GPIO_RTC_IRQ 3 | ||
162 | |||
163 | static struct i2c_board_info __initdata mss2_i2c_rtc = { | ||
164 | I2C_BOARD_INFO("m41t81", 0x68), | ||
165 | }; | ||
166 | |||
167 | /***************************************************************************** | ||
168 | * MSS2 power off method | ||
169 | ****************************************************************************/ | ||
170 | /* | ||
171 | * On the Maxtor Shared Storage II, the shutdown process is the following : | ||
172 | * - Userland modifies U-boot env to tell U-boot to go idle at next boot | ||
173 | * - The board reboots | ||
174 | * - U-boot starts and go into an idle mode until the user press "power" | ||
175 | */ | ||
176 | static void mss2_power_off(void) | ||
177 | { | ||
178 | u32 reg; | ||
179 | |||
180 | /* | ||
181 | * Enable and issue soft reset | ||
182 | */ | ||
183 | reg = readl(CPU_RESET_MASK); | ||
184 | reg |= 1 << 2; | ||
185 | writel(reg, CPU_RESET_MASK); | ||
186 | |||
187 | reg = readl(CPU_SOFT_RESET); | ||
188 | reg |= 1; | ||
189 | writel(reg, CPU_SOFT_RESET); | ||
190 | } | ||
191 | |||
192 | /**************************************************************************** | ||
193 | * General Setup | ||
194 | ****************************************************************************/ | ||
195 | static struct orion5x_mpp_mode mss2_mpp_modes[] __initdata = { | ||
196 | { 0, MPP_GPIO }, /* Power LED */ | ||
197 | { 1, MPP_GPIO }, /* Error LED */ | ||
198 | { 2, MPP_UNUSED }, | ||
199 | { 3, MPP_GPIO }, /* RTC interrupt */ | ||
200 | { 4, MPP_GPIO }, /* HDD ind. (Single/Dual)*/ | ||
201 | { 5, MPP_GPIO }, /* HD0 5V control */ | ||
202 | { 6, MPP_GPIO }, /* HD0 12V control */ | ||
203 | { 7, MPP_GPIO }, /* HD1 5V control */ | ||
204 | { 8, MPP_GPIO }, /* HD1 12V control */ | ||
205 | { 9, MPP_UNUSED }, | ||
206 | { 10, MPP_GPIO }, /* Fan control */ | ||
207 | { 11, MPP_GPIO }, /* Power button */ | ||
208 | { 12, MPP_GPIO }, /* Reset button */ | ||
209 | { 13, MPP_UNUSED }, | ||
210 | { 14, MPP_SATA_LED }, /* SATA 0 active */ | ||
211 | { 15, MPP_SATA_LED }, /* SATA 1 active */ | ||
212 | { 16, MPP_UNUSED }, | ||
213 | { 17, MPP_UNUSED }, | ||
214 | { 18, MPP_UNUSED }, | ||
215 | { 19, MPP_UNUSED }, | ||
216 | { -1 }, | ||
217 | }; | ||
218 | |||
219 | static void __init mss2_init(void) | ||
220 | { | ||
221 | /* Setup basic Orion functions. Need to be called early. */ | ||
222 | orion5x_init(); | ||
223 | |||
224 | orion5x_mpp_conf(mss2_mpp_modes); | ||
225 | |||
226 | /* | ||
227 | * MPP[20] Unused | ||
228 | * MPP[21] PCI clock | ||
229 | * MPP[22] USB 0 over current | ||
230 | * MPP[23] USB 1 over current | ||
231 | */ | ||
232 | |||
233 | /* | ||
234 | * Configure peripherals. | ||
235 | */ | ||
236 | orion5x_ehci0_init(); | ||
237 | orion5x_ehci1_init(); | ||
238 | orion5x_eth_init(&mss2_eth_data); | ||
239 | orion5x_i2c_init(); | ||
240 | orion5x_sata_init(&mss2_sata_data); | ||
241 | orion5x_uart0_init(); | ||
242 | |||
243 | orion5x_setup_dev_boot_win(MSS2_NOR_BOOT_BASE, MSS2_NOR_BOOT_SIZE); | ||
244 | platform_device_register(&mss2_nor_flash); | ||
245 | |||
246 | platform_device_register(&mss2_button_device); | ||
247 | |||
248 | if (gpio_request(MSS2_GPIO_RTC_IRQ, "rtc") == 0) { | ||
249 | if (gpio_direction_input(MSS2_GPIO_RTC_IRQ) == 0) | ||
250 | mss2_i2c_rtc.irq = gpio_to_irq(MSS2_GPIO_RTC_IRQ); | ||
251 | else | ||
252 | gpio_free(MSS2_GPIO_RTC_IRQ); | ||
253 | } | ||
254 | i2c_register_board_info(0, &mss2_i2c_rtc, 1); | ||
255 | |||
256 | /* register mss2 specific power-off method */ | ||
257 | pm_power_off = mss2_power_off; | ||
258 | } | ||
259 | |||
260 | MACHINE_START(MSS2, "Maxtor Shared Storage II") | ||
261 | /* Maintainer: Sylver Bruneau <sylver.bruneau@googlemail.com> */ | ||
262 | .phys_io = ORION5X_REGS_PHYS_BASE, | ||
263 | .io_pg_offst = ((ORION5X_REGS_VIRT_BASE) >> 18) & 0xFFFC, | ||
264 | .boot_params = 0x00000100, | ||
265 | .init_machine = mss2_init, | ||
266 | .map_io = orion5x_map_io, | ||
267 | .init_irq = orion5x_init_irq, | ||
268 | .timer = &orion5x_timer, | ||
269 | .fixup = tag_fixup_mem32 | ||
270 | MACHINE_END | ||
diff --git a/arch/arm/mach-orion5x/mv2120-setup.c b/arch/arm/mach-orion5x/mv2120-setup.c new file mode 100644 index 000000000000..55f3b0fdef8b --- /dev/null +++ b/arch/arm/mach-orion5x/mv2120-setup.c | |||
@@ -0,0 +1,239 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2007 Herbert Valerio Riedel <hvr@gnu.org> | ||
3 | * Copyright (C) 2008 Martin Michlmayr <tbm@cyrius.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU Lesser General Public License as | ||
7 | * published by the Free Software Foundation; either version 2 of the | ||
8 | * License, or (at your option) any later version. | ||
9 | */ | ||
10 | |||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/init.h> | ||
13 | #include <linux/platform_device.h> | ||
14 | #include <linux/irq.h> | ||
15 | #include <linux/mtd/physmap.h> | ||
16 | #include <linux/mv643xx_eth.h> | ||
17 | #include <linux/leds.h> | ||
18 | #include <linux/gpio_keys.h> | ||
19 | #include <linux/input.h> | ||
20 | #include <linux/i2c.h> | ||
21 | #include <linux/ata_platform.h> | ||
22 | #include <asm/mach-types.h> | ||
23 | #include <asm/gpio.h> | ||
24 | #include <asm/mach/arch.h> | ||
25 | #include <asm/arch/orion5x.h> | ||
26 | #include "common.h" | ||
27 | #include "mpp.h" | ||
28 | |||
29 | #define MV2120_NOR_BOOT_BASE 0xf4000000 | ||
30 | #define MV2120_NOR_BOOT_SIZE SZ_512K | ||
31 | |||
32 | #define MV2120_GPIO_RTC_IRQ 3 | ||
33 | #define MV2120_GPIO_KEY_RESET 17 | ||
34 | #define MV2120_GPIO_KEY_POWER 18 | ||
35 | #define MV2120_GPIO_POWER_OFF 19 | ||
36 | |||
37 | |||
38 | /***************************************************************************** | ||
39 | * Ethernet | ||
40 | ****************************************************************************/ | ||
41 | static struct mv643xx_eth_platform_data mv2120_eth_data = { | ||
42 | .phy_addr = 8, | ||
43 | }; | ||
44 | |||
45 | static struct mv_sata_platform_data mv2120_sata_data = { | ||
46 | .n_ports = 2, | ||
47 | }; | ||
48 | |||
49 | static struct mtd_partition mv2120_partitions[] = { | ||
50 | { | ||
51 | .name = "firmware", | ||
52 | .size = 0x00080000, | ||
53 | .offset = 0, | ||
54 | }, | ||
55 | }; | ||
56 | |||
57 | static struct physmap_flash_data mv2120_nor_flash_data = { | ||
58 | .width = 1, | ||
59 | .parts = mv2120_partitions, | ||
60 | .nr_parts = ARRAY_SIZE(mv2120_partitions) | ||
61 | }; | ||
62 | |||
63 | static struct resource mv2120_nor_flash_resource = { | ||
64 | .flags = IORESOURCE_MEM, | ||
65 | .start = MV2120_NOR_BOOT_BASE, | ||
66 | .end = MV2120_NOR_BOOT_BASE + MV2120_NOR_BOOT_SIZE - 1, | ||
67 | }; | ||
68 | |||
69 | static struct platform_device mv2120_nor_flash = { | ||
70 | .name = "physmap-flash", | ||
71 | .id = 0, | ||
72 | .dev = { | ||
73 | .platform_data = &mv2120_nor_flash_data, | ||
74 | }, | ||
75 | .resource = &mv2120_nor_flash_resource, | ||
76 | .num_resources = 1, | ||
77 | }; | ||
78 | |||
79 | static struct gpio_keys_button mv2120_buttons[] = { | ||
80 | { | ||
81 | .code = KEY_RESTART, | ||
82 | .gpio = MV2120_GPIO_KEY_RESET, | ||
83 | .desc = "reset", | ||
84 | .active_low = 1, | ||
85 | }, { | ||
86 | .code = KEY_POWER, | ||
87 | .gpio = MV2120_GPIO_KEY_POWER, | ||
88 | .desc = "power", | ||
89 | .active_low = 1, | ||
90 | }, | ||
91 | }; | ||
92 | |||
93 | static struct gpio_keys_platform_data mv2120_button_data = { | ||
94 | .buttons = mv2120_buttons, | ||
95 | .nbuttons = ARRAY_SIZE(mv2120_buttons), | ||
96 | }; | ||
97 | |||
98 | static struct platform_device mv2120_button_device = { | ||
99 | .name = "gpio-keys", | ||
100 | .id = -1, | ||
101 | .num_resources = 0, | ||
102 | .dev = { | ||
103 | .platform_data = &mv2120_button_data, | ||
104 | }, | ||
105 | }; | ||
106 | |||
107 | |||
108 | /**************************************************************************** | ||
109 | * General Setup | ||
110 | ****************************************************************************/ | ||
111 | static struct orion5x_mpp_mode mv2120_mpp_modes[] __initdata = { | ||
112 | { 0, MPP_GPIO }, /* Sys status LED */ | ||
113 | { 1, MPP_GPIO }, /* Sys error LED */ | ||
114 | { 2, MPP_GPIO }, /* OverTemp interrupt */ | ||
115 | { 3, MPP_GPIO }, /* RTC interrupt */ | ||
116 | { 4, MPP_GPIO }, /* V_LED 5V */ | ||
117 | { 5, MPP_GPIO }, /* V_LED 3.3V */ | ||
118 | { 6, MPP_UNUSED }, | ||
119 | { 7, MPP_UNUSED }, | ||
120 | { 8, MPP_GPIO }, /* SATA 0 fail LED */ | ||
121 | { 9, MPP_GPIO }, /* SATA 1 fail LED */ | ||
122 | { 10, MPP_UNUSED }, | ||
123 | { 11, MPP_UNUSED }, | ||
124 | { 12, MPP_SATA_LED }, /* SATA 0 presence */ | ||
125 | { 13, MPP_SATA_LED }, /* SATA 1 presence */ | ||
126 | { 14, MPP_SATA_LED }, /* SATA 0 active */ | ||
127 | { 15, MPP_SATA_LED }, /* SATA 1 active */ | ||
128 | { 16, MPP_UNUSED }, | ||
129 | { 17, MPP_GPIO }, /* Reset button */ | ||
130 | { 18, MPP_GPIO }, /* Power button */ | ||
131 | { 19, MPP_GPIO }, /* Power off */ | ||
132 | { -1 }, | ||
133 | }; | ||
134 | |||
135 | static struct i2c_board_info __initdata mv2120_i2c_rtc = { | ||
136 | I2C_BOARD_INFO("pcf8563", 0x51), | ||
137 | .irq = 0, | ||
138 | }; | ||
139 | |||
140 | static struct gpio_led mv2120_led_pins[] = { | ||
141 | { | ||
142 | .name = "mv2120:blue:health", | ||
143 | .gpio = 0, | ||
144 | }, | ||
145 | { | ||
146 | .name = "mv2120:red:health", | ||
147 | .gpio = 1, | ||
148 | }, | ||
149 | { | ||
150 | .name = "mv2120:led:bright", | ||
151 | .gpio = 4, | ||
152 | .default_trigger = "default-on", | ||
153 | }, | ||
154 | { | ||
155 | .name = "mv2120:led:dimmed", | ||
156 | .gpio = 5, | ||
157 | }, | ||
158 | { | ||
159 | .name = "mv2120:red:sata0", | ||
160 | .gpio = 8, | ||
161 | .active_low = 1, | ||
162 | }, | ||
163 | { | ||
164 | .name = "mv2120:red:sata1", | ||
165 | .gpio = 9, | ||
166 | .active_low = 1, | ||
167 | }, | ||
168 | |||
169 | }; | ||
170 | |||
171 | static struct gpio_led_platform_data mv2120_led_data = { | ||
172 | .leds = mv2120_led_pins, | ||
173 | .num_leds = ARRAY_SIZE(mv2120_led_pins), | ||
174 | }; | ||
175 | |||
176 | static struct platform_device mv2120_leds = { | ||
177 | .name = "leds-gpio", | ||
178 | .id = -1, | ||
179 | .dev = { | ||
180 | .platform_data = &mv2120_led_data, | ||
181 | } | ||
182 | }; | ||
183 | |||
184 | static void mv2120_power_off(void) | ||
185 | { | ||
186 | pr_info("%s: triggering power-off...\n", __func__); | ||
187 | gpio_set_value(MV2120_GPIO_POWER_OFF, 0); | ||
188 | } | ||
189 | |||
190 | static void __init mv2120_init(void) | ||
191 | { | ||
192 | /* Setup basic Orion functions. Need to be called early. */ | ||
193 | orion5x_init(); | ||
194 | |||
195 | orion5x_mpp_conf(mv2120_mpp_modes); | ||
196 | |||
197 | /* | ||
198 | * Configure peripherals. | ||
199 | */ | ||
200 | orion5x_ehci0_init(); | ||
201 | orion5x_ehci1_init(); | ||
202 | orion5x_eth_init(&mv2120_eth_data); | ||
203 | orion5x_i2c_init(); | ||
204 | orion5x_sata_init(&mv2120_sata_data); | ||
205 | orion5x_uart0_init(); | ||
206 | |||
207 | orion5x_setup_dev_boot_win(MV2120_NOR_BOOT_BASE, MV2120_NOR_BOOT_SIZE); | ||
208 | platform_device_register(&mv2120_nor_flash); | ||
209 | |||
210 | platform_device_register(&mv2120_button_device); | ||
211 | |||
212 | if (gpio_request(MV2120_GPIO_RTC_IRQ, "rtc") == 0) { | ||
213 | if (gpio_direction_input(MV2120_GPIO_RTC_IRQ) == 0) | ||
214 | mv2120_i2c_rtc.irq = gpio_to_irq(MV2120_GPIO_RTC_IRQ); | ||
215 | else | ||
216 | gpio_free(MV2120_GPIO_RTC_IRQ); | ||
217 | } | ||
218 | i2c_register_board_info(0, &mv2120_i2c_rtc, 1); | ||
219 | platform_device_register(&mv2120_leds); | ||
220 | |||
221 | /* register mv2120 specific power-off method */ | ||
222 | if (gpio_request(MV2120_GPIO_POWER_OFF, "POWEROFF") != 0 || | ||
223 | gpio_direction_output(MV2120_GPIO_POWER_OFF, 1) != 0) | ||
224 | pr_err("mv2120: failed to setup power-off GPIO\n"); | ||
225 | pm_power_off = mv2120_power_off; | ||
226 | } | ||
227 | |||
228 | /* Warning: HP uses a wrong mach-type (=526) in their bootloader */ | ||
229 | MACHINE_START(MV2120, "HP Media Vault mv2120") | ||
230 | /* Maintainer: Martin Michlmayr <tbm@cyrius.com> */ | ||
231 | .phys_io = ORION5X_REGS_PHYS_BASE, | ||
232 | .io_pg_offst = ((ORION5X_REGS_VIRT_BASE) >> 18) & 0xFFFC, | ||
233 | .boot_params = 0x00000100, | ||
234 | .init_machine = mv2120_init, | ||
235 | .map_io = orion5x_map_io, | ||
236 | .init_irq = orion5x_init_irq, | ||
237 | .timer = &orion5x_timer, | ||
238 | .fixup = tag_fixup_mem32 | ||
239 | MACHINE_END | ||
diff --git a/arch/arm/mach-orion5x/pci.c b/arch/arm/mach-orion5x/pci.c index 9d5d39fa19c3..256a4f680935 100644 --- a/arch/arm/mach-orion5x/pci.c +++ b/arch/arm/mach-orion5x/pci.c | |||
@@ -152,6 +152,8 @@ static int __init pcie_setup(struct pci_sys_data *sys) | |||
152 | if (dev == MV88F5181_DEV_ID || dev == MV88F5182_DEV_ID) { | 152 | if (dev == MV88F5181_DEV_ID || dev == MV88F5182_DEV_ID) { |
153 | printk(KERN_NOTICE "Applying Orion-1/Orion-NAS PCIe config " | 153 | printk(KERN_NOTICE "Applying Orion-1/Orion-NAS PCIe config " |
154 | "read transaction workaround\n"); | 154 | "read transaction workaround\n"); |
155 | orion5x_setup_pcie_wa_win(ORION5X_PCIE_WA_PHYS_BASE, | ||
156 | ORION5X_PCIE_WA_SIZE); | ||
155 | pcie_ops.read = pcie_rd_conf_wa; | 157 | pcie_ops.read = pcie_rd_conf_wa; |
156 | } | 158 | } |
157 | 159 | ||
@@ -240,13 +242,13 @@ static int __init pcie_setup(struct pci_sys_data *sys) | |||
240 | * PCI Address Decode Windows registers | 242 | * PCI Address Decode Windows registers |
241 | */ | 243 | */ |
242 | #define PCI_BAR_SIZE_DDR_CS(n) (((n) == 0) ? ORION5X_PCI_REG(0xc08) : \ | 244 | #define PCI_BAR_SIZE_DDR_CS(n) (((n) == 0) ? ORION5X_PCI_REG(0xc08) : \ |
243 | ((n) == 1) ? ORION5X_PCI_REG(0xd08) : \ | 245 | ((n) == 1) ? ORION5X_PCI_REG(0xd08) : \ |
244 | ((n) == 2) ? ORION5X_PCI_REG(0xc0c) : \ | 246 | ((n) == 2) ? ORION5X_PCI_REG(0xc0c) : \ |
245 | ((n) == 3) ? ORION5X_PCI_REG(0xd0c) : 0) | 247 | ((n) == 3) ? ORION5X_PCI_REG(0xd0c) : 0) |
246 | #define PCI_BAR_REMAP_DDR_CS(n) (((n) ==0) ? ORION5X_PCI_REG(0xc48) : \ | 248 | #define PCI_BAR_REMAP_DDR_CS(n) (((n) == 0) ? ORION5X_PCI_REG(0xc48) : \ |
247 | ((n) == 1) ? ORION5X_PCI_REG(0xd48) : \ | 249 | ((n) == 1) ? ORION5X_PCI_REG(0xd48) : \ |
248 | ((n) == 2) ? ORION5X_PCI_REG(0xc4c) : \ | 250 | ((n) == 2) ? ORION5X_PCI_REG(0xc4c) : \ |
249 | ((n) == 3) ? ORION5X_PCI_REG(0xd4c) : 0) | 251 | ((n) == 3) ? ORION5X_PCI_REG(0xd4c) : 0) |
250 | #define PCI_BAR_ENABLE ORION5X_PCI_REG(0xc3c) | 252 | #define PCI_BAR_ENABLE ORION5X_PCI_REG(0xc3c) |
251 | #define PCI_ADDR_DECODE_CTRL ORION5X_PCI_REG(0xd3c) | 253 | #define PCI_ADDR_DECODE_CTRL ORION5X_PCI_REG(0xd3c) |
252 | 254 | ||
@@ -264,9 +266,11 @@ static int __init pcie_setup(struct pci_sys_data *sys) | |||
264 | */ | 266 | */ |
265 | static DEFINE_SPINLOCK(orion5x_pci_lock); | 267 | static DEFINE_SPINLOCK(orion5x_pci_lock); |
266 | 268 | ||
269 | static int orion5x_pci_cardbus_mode; | ||
270 | |||
267 | static int orion5x_pci_local_bus_nr(void) | 271 | static int orion5x_pci_local_bus_nr(void) |
268 | { | 272 | { |
269 | u32 conf = orion5x_read(PCI_P2P_CONF); | 273 | u32 conf = readl(PCI_P2P_CONF); |
270 | return((conf & PCI_P2P_BUS_MASK) >> PCI_P2P_BUS_OFFS); | 274 | return((conf & PCI_P2P_BUS_MASK) >> PCI_P2P_BUS_OFFS); |
271 | } | 275 | } |
272 | 276 | ||
@@ -276,11 +280,11 @@ static int orion5x_pci_hw_rd_conf(int bus, int dev, u32 func, | |||
276 | unsigned long flags; | 280 | unsigned long flags; |
277 | spin_lock_irqsave(&orion5x_pci_lock, flags); | 281 | spin_lock_irqsave(&orion5x_pci_lock, flags); |
278 | 282 | ||
279 | orion5x_write(PCI_CONF_ADDR, PCI_CONF_BUS(bus) | | 283 | writel(PCI_CONF_BUS(bus) | |
280 | PCI_CONF_DEV(dev) | PCI_CONF_REG(where) | | 284 | PCI_CONF_DEV(dev) | PCI_CONF_REG(where) | |
281 | PCI_CONF_FUNC(func) | PCI_CONF_ADDR_EN); | 285 | PCI_CONF_FUNC(func) | PCI_CONF_ADDR_EN, PCI_CONF_ADDR); |
282 | 286 | ||
283 | *val = orion5x_read(PCI_CONF_DATA); | 287 | *val = readl(PCI_CONF_DATA); |
284 | 288 | ||
285 | if (size == 1) | 289 | if (size == 1) |
286 | *val = (*val >> (8*(where & 0x3))) & 0xff; | 290 | *val = (*val >> (8*(where & 0x3))) & 0xff; |
@@ -300,9 +304,9 @@ static int orion5x_pci_hw_wr_conf(int bus, int dev, u32 func, | |||
300 | 304 | ||
301 | spin_lock_irqsave(&orion5x_pci_lock, flags); | 305 | spin_lock_irqsave(&orion5x_pci_lock, flags); |
302 | 306 | ||
303 | orion5x_write(PCI_CONF_ADDR, PCI_CONF_BUS(bus) | | 307 | writel(PCI_CONF_BUS(bus) | |
304 | PCI_CONF_DEV(dev) | PCI_CONF_REG(where) | | 308 | PCI_CONF_DEV(dev) | PCI_CONF_REG(where) | |
305 | PCI_CONF_FUNC(func) | PCI_CONF_ADDR_EN); | 309 | PCI_CONF_FUNC(func) | PCI_CONF_ADDR_EN, PCI_CONF_ADDR); |
306 | 310 | ||
307 | if (size == 4) { | 311 | if (size == 4) { |
308 | __raw_writel(val, PCI_CONF_DATA); | 312 | __raw_writel(val, PCI_CONF_DATA); |
@@ -319,14 +323,30 @@ static int orion5x_pci_hw_wr_conf(int bus, int dev, u32 func, | |||
319 | return ret; | 323 | return ret; |
320 | } | 324 | } |
321 | 325 | ||
326 | static int orion5x_pci_valid_config(int bus, u32 devfn) | ||
327 | { | ||
328 | if (bus == orion5x_pci_local_bus_nr()) { | ||
329 | /* | ||
330 | * Don't go out for local device | ||
331 | */ | ||
332 | if (PCI_SLOT(devfn) == 0 && PCI_FUNC(devfn) != 0) | ||
333 | return 0; | ||
334 | |||
335 | /* | ||
336 | * When the PCI signals are directly connected to a | ||
337 | * Cardbus slot, ignore all but device IDs 0 and 1. | ||
338 | */ | ||
339 | if (orion5x_pci_cardbus_mode && PCI_SLOT(devfn) > 1) | ||
340 | return 0; | ||
341 | } | ||
342 | |||
343 | return 1; | ||
344 | } | ||
345 | |||
322 | static int orion5x_pci_rd_conf(struct pci_bus *bus, u32 devfn, | 346 | static int orion5x_pci_rd_conf(struct pci_bus *bus, u32 devfn, |
323 | int where, int size, u32 *val) | 347 | int where, int size, u32 *val) |
324 | { | 348 | { |
325 | /* | 349 | if (!orion5x_pci_valid_config(bus->number, devfn)) { |
326 | * Don't go out for local device | ||
327 | */ | ||
328 | if (bus->number == orion5x_pci_local_bus_nr() && | ||
329 | PCI_SLOT(devfn) == 0 && PCI_FUNC(devfn) != 0) { | ||
330 | *val = 0xffffffff; | 350 | *val = 0xffffffff; |
331 | return PCIBIOS_DEVICE_NOT_FOUND; | 351 | return PCIBIOS_DEVICE_NOT_FOUND; |
332 | } | 352 | } |
@@ -338,8 +358,7 @@ static int orion5x_pci_rd_conf(struct pci_bus *bus, u32 devfn, | |||
338 | static int orion5x_pci_wr_conf(struct pci_bus *bus, u32 devfn, | 358 | static int orion5x_pci_wr_conf(struct pci_bus *bus, u32 devfn, |
339 | int where, int size, u32 val) | 359 | int where, int size, u32 val) |
340 | { | 360 | { |
341 | if (bus->number == orion5x_pci_local_bus_nr() && | 361 | if (!orion5x_pci_valid_config(bus->number, devfn)) |
342 | PCI_SLOT(devfn) == 0 && PCI_FUNC(devfn) != 0) | ||
343 | return PCIBIOS_DEVICE_NOT_FOUND; | 362 | return PCIBIOS_DEVICE_NOT_FOUND; |
344 | 363 | ||
345 | return orion5x_pci_hw_wr_conf(bus->number, PCI_SLOT(devfn), | 364 | return orion5x_pci_hw_wr_conf(bus->number, PCI_SLOT(devfn), |
@@ -353,9 +372,9 @@ static struct pci_ops pci_ops = { | |||
353 | 372 | ||
354 | static void __init orion5x_pci_set_bus_nr(int nr) | 373 | static void __init orion5x_pci_set_bus_nr(int nr) |
355 | { | 374 | { |
356 | u32 p2p = orion5x_read(PCI_P2P_CONF); | 375 | u32 p2p = readl(PCI_P2P_CONF); |
357 | 376 | ||
358 | if (orion5x_read(PCI_MODE) & PCI_MODE_PCIX) { | 377 | if (readl(PCI_MODE) & PCI_MODE_PCIX) { |
359 | /* | 378 | /* |
360 | * PCI-X mode | 379 | * PCI-X mode |
361 | */ | 380 | */ |
@@ -372,7 +391,7 @@ static void __init orion5x_pci_set_bus_nr(int nr) | |||
372 | */ | 391 | */ |
373 | p2p &= ~PCI_P2P_BUS_MASK; | 392 | p2p &= ~PCI_P2P_BUS_MASK; |
374 | p2p |= (nr << PCI_P2P_BUS_OFFS); | 393 | p2p |= (nr << PCI_P2P_BUS_OFFS); |
375 | orion5x_write(PCI_P2P_CONF, p2p); | 394 | writel(p2p, PCI_P2P_CONF); |
376 | } | 395 | } |
377 | } | 396 | } |
378 | 397 | ||
@@ -399,7 +418,7 @@ static void __init orion5x_setup_pci_wins(struct mbus_dram_target_info *dram) | |||
399 | * First, disable windows. | 418 | * First, disable windows. |
400 | */ | 419 | */ |
401 | win_enable = 0xffffffff; | 420 | win_enable = 0xffffffff; |
402 | orion5x_write(PCI_BAR_ENABLE, win_enable); | 421 | writel(win_enable, PCI_BAR_ENABLE); |
403 | 422 | ||
404 | /* | 423 | /* |
405 | * Setup windows for DDR banks. | 424 | * Setup windows for DDR banks. |
@@ -425,10 +444,10 @@ static void __init orion5x_setup_pci_wins(struct mbus_dram_target_info *dram) | |||
425 | */ | 444 | */ |
426 | reg = PCI_CONF_REG_BAR_HI_CS(cs->cs_index); | 445 | reg = PCI_CONF_REG_BAR_HI_CS(cs->cs_index); |
427 | orion5x_pci_hw_wr_conf(bus, 0, func, reg, 4, 0); | 446 | orion5x_pci_hw_wr_conf(bus, 0, func, reg, 4, 0); |
428 | orion5x_write(PCI_BAR_SIZE_DDR_CS(cs->cs_index), | 447 | writel((cs->size - 1) & 0xfffff000, |
429 | (cs->size - 1) & 0xfffff000); | 448 | PCI_BAR_SIZE_DDR_CS(cs->cs_index)); |
430 | orion5x_write(PCI_BAR_REMAP_DDR_CS(cs->cs_index), | 449 | writel(cs->base & 0xfffff000, |
431 | cs->base & 0xfffff000); | 450 | PCI_BAR_REMAP_DDR_CS(cs->cs_index)); |
432 | 451 | ||
433 | /* | 452 | /* |
434 | * Enable decode window for this chip select. | 453 | * Enable decode window for this chip select. |
@@ -439,7 +458,7 @@ static void __init orion5x_setup_pci_wins(struct mbus_dram_target_info *dram) | |||
439 | /* | 458 | /* |
440 | * Re-enable decode windows. | 459 | * Re-enable decode windows. |
441 | */ | 460 | */ |
442 | orion5x_write(PCI_BAR_ENABLE, win_enable); | 461 | writel(win_enable, PCI_BAR_ENABLE); |
443 | 462 | ||
444 | /* | 463 | /* |
445 | * Disable automatic update of address remaping when writing to BARs. | 464 | * Disable automatic update of address remaping when writing to BARs. |
@@ -522,6 +541,11 @@ static void __devinit rc_pci_fixup(struct pci_dev *dev) | |||
522 | } | 541 | } |
523 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL, PCI_ANY_ID, rc_pci_fixup); | 542 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL, PCI_ANY_ID, rc_pci_fixup); |
524 | 543 | ||
544 | void __init orion5x_pci_set_cardbus_mode(void) | ||
545 | { | ||
546 | orion5x_pci_cardbus_mode = 1; | ||
547 | } | ||
548 | |||
525 | int __init orion5x_pci_sys_setup(int nr, struct pci_sys_data *sys) | 549 | int __init orion5x_pci_sys_setup(int nr, struct pci_sys_data *sys) |
526 | { | 550 | { |
527 | int ret = 0; | 551 | int ret = 0; |
diff --git a/arch/arm/mach-orion5x/rd88f5181l-fxo-setup.c b/arch/arm/mach-orion5x/rd88f5181l-fxo-setup.c new file mode 100644 index 000000000000..d50e3650a09e --- /dev/null +++ b/arch/arm/mach-orion5x/rd88f5181l-fxo-setup.c | |||
@@ -0,0 +1,161 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-orion5x/rd88f5181l-fxo-setup.c | ||
3 | * | ||
4 | * Marvell Orion-VoIP FXO Reference Design 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/mv643xx_eth.h> | ||
18 | #include <asm/mach-types.h> | ||
19 | #include <asm/gpio.h> | ||
20 | #include <asm/leds.h> | ||
21 | #include <asm/mach/arch.h> | ||
22 | #include <asm/mach/pci.h> | ||
23 | #include <asm/arch/orion5x.h> | ||
24 | #include "common.h" | ||
25 | #include "mpp.h" | ||
26 | |||
27 | /***************************************************************************** | ||
28 | * RD-88F5181L FXO Info | ||
29 | ****************************************************************************/ | ||
30 | /* | ||
31 | * 8M NOR flash Device bus boot chip select | ||
32 | */ | ||
33 | #define RD88F5181L_FXO_NOR_BOOT_BASE 0xff800000 | ||
34 | #define RD88F5181L_FXO_NOR_BOOT_SIZE SZ_8M | ||
35 | |||
36 | |||
37 | /***************************************************************************** | ||
38 | * 8M NOR Flash on Device bus Boot chip select | ||
39 | ****************************************************************************/ | ||
40 | static struct physmap_flash_data rd88f5181l_fxo_nor_boot_flash_data = { | ||
41 | .width = 1, | ||
42 | }; | ||
43 | |||
44 | static struct resource rd88f5181l_fxo_nor_boot_flash_resource = { | ||
45 | .flags = IORESOURCE_MEM, | ||
46 | .start = RD88F5181L_FXO_NOR_BOOT_BASE, | ||
47 | .end = RD88F5181L_FXO_NOR_BOOT_BASE + | ||
48 | RD88F5181L_FXO_NOR_BOOT_SIZE - 1, | ||
49 | }; | ||
50 | |||
51 | static struct platform_device rd88f5181l_fxo_nor_boot_flash = { | ||
52 | .name = "physmap-flash", | ||
53 | .id = 0, | ||
54 | .dev = { | ||
55 | .platform_data = &rd88f5181l_fxo_nor_boot_flash_data, | ||
56 | }, | ||
57 | .num_resources = 1, | ||
58 | .resource = &rd88f5181l_fxo_nor_boot_flash_resource, | ||
59 | }; | ||
60 | |||
61 | |||
62 | /***************************************************************************** | ||
63 | * General Setup | ||
64 | ****************************************************************************/ | ||
65 | static struct orion5x_mpp_mode rd88f5181l_fxo_mpp_modes[] __initdata = { | ||
66 | { 0, MPP_GPIO }, /* LED1 CardBus LED (front panel) */ | ||
67 | { 1, MPP_GPIO }, /* PCI_intA */ | ||
68 | { 2, MPP_GPIO }, /* Hard Reset / Factory Init*/ | ||
69 | { 3, MPP_GPIO }, /* FXS or DAA select */ | ||
70 | { 4, MPP_GPIO }, /* LED6 - phone LED (front panel) */ | ||
71 | { 5, MPP_GPIO }, /* LED5 - phone LED (front panel) */ | ||
72 | { 6, MPP_PCI_CLK }, /* CPU PCI refclk */ | ||
73 | { 7, MPP_PCI_CLK }, /* PCI/PCIe refclk */ | ||
74 | { 8, MPP_GPIO }, /* CardBus reset */ | ||
75 | { 9, MPP_GPIO }, /* GE_RXERR */ | ||
76 | { 10, MPP_GPIO }, /* LED2 MiniPCI LED (front panel) */ | ||
77 | { 11, MPP_GPIO }, /* Lifeline control */ | ||
78 | { 12, MPP_GIGE }, /* GE_TXD[4] */ | ||
79 | { 13, MPP_GIGE }, /* GE_TXD[5] */ | ||
80 | { 14, MPP_GIGE }, /* GE_TXD[6] */ | ||
81 | { 15, MPP_GIGE }, /* GE_TXD[7] */ | ||
82 | { 16, MPP_GIGE }, /* GE_RXD[4] */ | ||
83 | { 17, MPP_GIGE }, /* GE_RXD[5] */ | ||
84 | { 18, MPP_GIGE }, /* GE_RXD[6] */ | ||
85 | { 19, MPP_GIGE }, /* GE_RXD[7] */ | ||
86 | { -1 }, | ||
87 | }; | ||
88 | |||
89 | static struct mv643xx_eth_platform_data rd88f5181l_fxo_eth_data = { | ||
90 | .phy_addr = -1, | ||
91 | }; | ||
92 | |||
93 | static void __init rd88f5181l_fxo_init(void) | ||
94 | { | ||
95 | /* | ||
96 | * Setup basic Orion functions. Need to be called early. | ||
97 | */ | ||
98 | orion5x_init(); | ||
99 | |||
100 | orion5x_mpp_conf(rd88f5181l_fxo_mpp_modes); | ||
101 | |||
102 | /* | ||
103 | * Configure peripherals. | ||
104 | */ | ||
105 | orion5x_ehci0_init(); | ||
106 | orion5x_eth_init(&rd88f5181l_fxo_eth_data); | ||
107 | orion5x_uart0_init(); | ||
108 | |||
109 | orion5x_setup_dev_boot_win(RD88F5181L_FXO_NOR_BOOT_BASE, | ||
110 | RD88F5181L_FXO_NOR_BOOT_SIZE); | ||
111 | platform_device_register(&rd88f5181l_fxo_nor_boot_flash); | ||
112 | } | ||
113 | |||
114 | static int __init | ||
115 | rd88f5181l_fxo_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | ||
116 | { | ||
117 | int irq; | ||
118 | |||
119 | /* | ||
120 | * Check for devices with hard-wired IRQs. | ||
121 | */ | ||
122 | irq = orion5x_pci_map_irq(dev, slot, pin); | ||
123 | if (irq != -1) | ||
124 | return irq; | ||
125 | |||
126 | /* | ||
127 | * Mini-PCI / Cardbus slot. | ||
128 | */ | ||
129 | return gpio_to_irq(1); | ||
130 | } | ||
131 | |||
132 | static struct hw_pci rd88f5181l_fxo_pci __initdata = { | ||
133 | .nr_controllers = 2, | ||
134 | .swizzle = pci_std_swizzle, | ||
135 | .setup = orion5x_pci_sys_setup, | ||
136 | .scan = orion5x_pci_sys_scan_bus, | ||
137 | .map_irq = rd88f5181l_fxo_pci_map_irq, | ||
138 | }; | ||
139 | |||
140 | static int __init rd88f5181l_fxo_pci_init(void) | ||
141 | { | ||
142 | if (machine_is_rd88f5181l_fxo()) { | ||
143 | orion5x_pci_set_cardbus_mode(); | ||
144 | pci_common_init(&rd88f5181l_fxo_pci); | ||
145 | } | ||
146 | |||
147 | return 0; | ||
148 | } | ||
149 | subsys_initcall(rd88f5181l_fxo_pci_init); | ||
150 | |||
151 | MACHINE_START(RD88F5181L_FXO, "Marvell Orion-VoIP FXO Reference Design") | ||
152 | /* Maintainer: Nicolas Pitre <nico@marvell.com> */ | ||
153 | .phys_io = ORION5X_REGS_PHYS_BASE, | ||
154 | .io_pg_offst = ((ORION5X_REGS_VIRT_BASE) >> 18) & 0xFFFC, | ||
155 | .boot_params = 0x00000100, | ||
156 | .init_machine = rd88f5181l_fxo_init, | ||
157 | .map_io = orion5x_map_io, | ||
158 | .init_irq = orion5x_init_irq, | ||
159 | .timer = &orion5x_timer, | ||
160 | .fixup = tag_fixup_mem32, | ||
161 | MACHINE_END | ||
diff --git a/arch/arm/mach-orion5x/rd88f5181l-ge-setup.c b/arch/arm/mach-orion5x/rd88f5181l-ge-setup.c new file mode 100644 index 000000000000..b56447d32e17 --- /dev/null +++ b/arch/arm/mach-orion5x/rd88f5181l-ge-setup.c | |||
@@ -0,0 +1,172 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-orion5x/rd88f5181l-ge-setup.c | ||
3 | * | ||
4 | * Marvell Orion-VoIP GE Reference Design 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/mv643xx_eth.h> | ||
18 | #include <linux/i2c.h> | ||
19 | #include <asm/mach-types.h> | ||
20 | #include <asm/gpio.h> | ||
21 | #include <asm/leds.h> | ||
22 | #include <asm/mach/arch.h> | ||
23 | #include <asm/mach/pci.h> | ||
24 | #include <asm/arch/orion5x.h> | ||
25 | #include "common.h" | ||
26 | #include "mpp.h" | ||
27 | |||
28 | /***************************************************************************** | ||
29 | * RD-88F5181L GE Info | ||
30 | ****************************************************************************/ | ||
31 | /* | ||
32 | * 16M NOR flash Device bus boot chip select | ||
33 | */ | ||
34 | #define RD88F5181L_GE_NOR_BOOT_BASE 0xff000000 | ||
35 | #define RD88F5181L_GE_NOR_BOOT_SIZE SZ_16M | ||
36 | |||
37 | |||
38 | /***************************************************************************** | ||
39 | * 16M NOR Flash on Device bus Boot chip select | ||
40 | ****************************************************************************/ | ||
41 | static struct physmap_flash_data rd88f5181l_ge_nor_boot_flash_data = { | ||
42 | .width = 1, | ||
43 | }; | ||
44 | |||
45 | static struct resource rd88f5181l_ge_nor_boot_flash_resource = { | ||
46 | .flags = IORESOURCE_MEM, | ||
47 | .start = RD88F5181L_GE_NOR_BOOT_BASE, | ||
48 | .end = RD88F5181L_GE_NOR_BOOT_BASE + | ||
49 | RD88F5181L_GE_NOR_BOOT_SIZE - 1, | ||
50 | }; | ||
51 | |||
52 | static struct platform_device rd88f5181l_ge_nor_boot_flash = { | ||
53 | .name = "physmap-flash", | ||
54 | .id = 0, | ||
55 | .dev = { | ||
56 | .platform_data = &rd88f5181l_ge_nor_boot_flash_data, | ||
57 | }, | ||
58 | .num_resources = 1, | ||
59 | .resource = &rd88f5181l_ge_nor_boot_flash_resource, | ||
60 | }; | ||
61 | |||
62 | |||
63 | /***************************************************************************** | ||
64 | * General Setup | ||
65 | ****************************************************************************/ | ||
66 | static struct orion5x_mpp_mode rd88f5181l_ge_mpp_modes[] __initdata = { | ||
67 | { 0, MPP_GPIO }, /* LED1 */ | ||
68 | { 1, MPP_GPIO }, /* LED5 */ | ||
69 | { 2, MPP_GPIO }, /* LED4 */ | ||
70 | { 3, MPP_GPIO }, /* LED3 */ | ||
71 | { 4, MPP_GPIO }, /* PCI_intA */ | ||
72 | { 5, MPP_GPIO }, /* RTC interrupt */ | ||
73 | { 6, MPP_PCI_CLK }, /* CPU PCI refclk */ | ||
74 | { 7, MPP_PCI_CLK }, /* PCI/PCIe refclk */ | ||
75 | { 8, MPP_GPIO }, /* 88e6131 interrupt */ | ||
76 | { 9, MPP_GPIO }, /* GE_RXERR */ | ||
77 | { 10, MPP_GPIO }, /* PCI_intB */ | ||
78 | { 11, MPP_GPIO }, /* LED2 */ | ||
79 | { 12, MPP_GIGE }, /* GE_TXD[4] */ | ||
80 | { 13, MPP_GIGE }, /* GE_TXD[5] */ | ||
81 | { 14, MPP_GIGE }, /* GE_TXD[6] */ | ||
82 | { 15, MPP_GIGE }, /* GE_TXD[7] */ | ||
83 | { 16, MPP_GIGE }, /* GE_RXD[4] */ | ||
84 | { 17, MPP_GIGE }, /* GE_RXD[5] */ | ||
85 | { 18, MPP_GIGE }, /* GE_RXD[6] */ | ||
86 | { 19, MPP_GIGE }, /* GE_RXD[7] */ | ||
87 | { -1 }, | ||
88 | }; | ||
89 | |||
90 | static struct mv643xx_eth_platform_data rd88f5181l_ge_eth_data = { | ||
91 | .phy_addr = -1, | ||
92 | }; | ||
93 | |||
94 | static struct i2c_board_info __initdata rd88f5181l_ge_i2c_rtc = { | ||
95 | I2C_BOARD_INFO("ds1338", 0x68), | ||
96 | }; | ||
97 | |||
98 | static void __init rd88f5181l_ge_init(void) | ||
99 | { | ||
100 | /* | ||
101 | * Setup basic Orion functions. Need to be called early. | ||
102 | */ | ||
103 | orion5x_init(); | ||
104 | |||
105 | orion5x_mpp_conf(rd88f5181l_ge_mpp_modes); | ||
106 | |||
107 | /* | ||
108 | * Configure peripherals. | ||
109 | */ | ||
110 | orion5x_ehci0_init(); | ||
111 | orion5x_eth_init(&rd88f5181l_ge_eth_data); | ||
112 | orion5x_i2c_init(); | ||
113 | orion5x_uart0_init(); | ||
114 | |||
115 | orion5x_setup_dev_boot_win(RD88F5181L_GE_NOR_BOOT_BASE, | ||
116 | RD88F5181L_GE_NOR_BOOT_SIZE); | ||
117 | platform_device_register(&rd88f5181l_ge_nor_boot_flash); | ||
118 | |||
119 | i2c_register_board_info(0, &rd88f5181l_ge_i2c_rtc, 1); | ||
120 | } | ||
121 | |||
122 | static int __init | ||
123 | rd88f5181l_ge_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | ||
124 | { | ||
125 | int irq; | ||
126 | |||
127 | /* | ||
128 | * Check for devices with hard-wired IRQs. | ||
129 | */ | ||
130 | irq = orion5x_pci_map_irq(dev, slot, pin); | ||
131 | if (irq != -1) | ||
132 | return irq; | ||
133 | |||
134 | /* | ||
135 | * Cardbus slot. | ||
136 | */ | ||
137 | if (pin == 1) | ||
138 | return gpio_to_irq(4); | ||
139 | else | ||
140 | return gpio_to_irq(10); | ||
141 | } | ||
142 | |||
143 | static struct hw_pci rd88f5181l_ge_pci __initdata = { | ||
144 | .nr_controllers = 2, | ||
145 | .swizzle = pci_std_swizzle, | ||
146 | .setup = orion5x_pci_sys_setup, | ||
147 | .scan = orion5x_pci_sys_scan_bus, | ||
148 | .map_irq = rd88f5181l_ge_pci_map_irq, | ||
149 | }; | ||
150 | |||
151 | static int __init rd88f5181l_ge_pci_init(void) | ||
152 | { | ||
153 | if (machine_is_rd88f5181l_ge()) { | ||
154 | orion5x_pci_set_cardbus_mode(); | ||
155 | pci_common_init(&rd88f5181l_ge_pci); | ||
156 | } | ||
157 | |||
158 | return 0; | ||
159 | } | ||
160 | subsys_initcall(rd88f5181l_ge_pci_init); | ||
161 | |||
162 | MACHINE_START(RD88F5181L_GE, "Marvell Orion-VoIP GE Reference Design") | ||
163 | /* Maintainer: Lennert Buytenhek <buytenh@marvell.com> */ | ||
164 | .phys_io = ORION5X_REGS_PHYS_BASE, | ||
165 | .io_pg_offst = ((ORION5X_REGS_VIRT_BASE) >> 18) & 0xFFFC, | ||
166 | .boot_params = 0x00000100, | ||
167 | .init_machine = rd88f5181l_ge_init, | ||
168 | .map_io = orion5x_map_io, | ||
169 | .init_irq = orion5x_init_irq, | ||
170 | .timer = &orion5x_timer, | ||
171 | .fixup = tag_fixup_mem32, | ||
172 | MACHINE_END | ||
diff --git a/arch/arm/mach-orion5x/rd88f5182-setup.c b/arch/arm/mach-orion5x/rd88f5182-setup.c index 81abc1003aae..10ae62864269 100644 --- a/arch/arm/mach-orion5x/rd88f5182-setup.c +++ b/arch/arm/mach-orion5x/rd88f5182-setup.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include <asm/mach/pci.h> | 26 | #include <asm/mach/pci.h> |
27 | #include <asm/arch/orion5x.h> | 27 | #include <asm/arch/orion5x.h> |
28 | #include "common.h" | 28 | #include "common.h" |
29 | #include "mpp.h" | ||
29 | 30 | ||
30 | /***************************************************************************** | 31 | /***************************************************************************** |
31 | * RD-88F5182 Info | 32 | * RD-88F5182 Info |
@@ -125,6 +126,7 @@ static int __init rd88f5182_dbgled_init(void) | |||
125 | 126 | ||
126 | leds_event = rd88f5182_dbgled_event; | 127 | leds_event = rd88f5182_dbgled_event; |
127 | } | 128 | } |
129 | |||
128 | return 0; | 130 | return 0; |
129 | } | 131 | } |
130 | 132 | ||
@@ -220,7 +222,6 @@ subsys_initcall(rd88f5182_pci_init); | |||
220 | 222 | ||
221 | static struct mv643xx_eth_platform_data rd88f5182_eth_data = { | 223 | static struct mv643xx_eth_platform_data rd88f5182_eth_data = { |
222 | .phy_addr = 8, | 224 | .phy_addr = 8, |
223 | .force_phy_addr = 1, | ||
224 | }; | 225 | }; |
225 | 226 | ||
226 | /***************************************************************************** | 227 | /***************************************************************************** |
@@ -234,15 +235,34 @@ static struct i2c_board_info __initdata rd88f5182_i2c_rtc = { | |||
234 | * Sata | 235 | * Sata |
235 | ****************************************************************************/ | 236 | ****************************************************************************/ |
236 | static struct mv_sata_platform_data rd88f5182_sata_data = { | 237 | static struct mv_sata_platform_data rd88f5182_sata_data = { |
237 | .n_ports = 2, | 238 | .n_ports = 2, |
238 | }; | 239 | }; |
239 | 240 | ||
240 | /***************************************************************************** | 241 | /***************************************************************************** |
241 | * General Setup | 242 | * General Setup |
242 | ****************************************************************************/ | 243 | ****************************************************************************/ |
243 | 244 | static struct orion5x_mpp_mode rd88f5182_mpp_modes[] __initdata = { | |
244 | static struct platform_device *rd88f5182_devices[] __initdata = { | 245 | { 0, MPP_GPIO }, /* Debug Led */ |
245 | &rd88f5182_nor_flash, | 246 | { 1, MPP_GPIO }, /* Reset Switch */ |
247 | { 2, MPP_UNUSED }, | ||
248 | { 3, MPP_GPIO }, /* RTC Int */ | ||
249 | { 4, MPP_GPIO }, | ||
250 | { 5, MPP_GPIO }, | ||
251 | { 6, MPP_GPIO }, /* PCI_intA */ | ||
252 | { 7, MPP_GPIO }, /* PCI_intB */ | ||
253 | { 8, MPP_UNUSED }, | ||
254 | { 9, MPP_UNUSED }, | ||
255 | { 10, MPP_UNUSED }, | ||
256 | { 11, MPP_UNUSED }, | ||
257 | { 12, MPP_SATA_LED }, /* SATA 0 presence */ | ||
258 | { 13, MPP_SATA_LED }, /* SATA 1 presence */ | ||
259 | { 14, MPP_SATA_LED }, /* SATA 0 active */ | ||
260 | { 15, MPP_SATA_LED }, /* SATA 1 active */ | ||
261 | { 16, MPP_UNUSED }, | ||
262 | { 17, MPP_UNUSED }, | ||
263 | { 18, MPP_UNUSED }, | ||
264 | { 19, MPP_UNUSED }, | ||
265 | { -1 }, | ||
246 | }; | 266 | }; |
247 | 267 | ||
248 | static void __init rd88f5182_init(void) | 268 | static void __init rd88f5182_init(void) |
@@ -252,35 +272,9 @@ static void __init rd88f5182_init(void) | |||
252 | */ | 272 | */ |
253 | orion5x_init(); | 273 | orion5x_init(); |
254 | 274 | ||
255 | /* | 275 | orion5x_mpp_conf(rd88f5182_mpp_modes); |
256 | * Setup the CPU address decode windows for our devices | ||
257 | */ | ||
258 | orion5x_setup_dev_boot_win(RD88F5182_NOR_BOOT_BASE, | ||
259 | RD88F5182_NOR_BOOT_SIZE); | ||
260 | orion5x_setup_dev1_win(RD88F5182_NOR_BASE, RD88F5182_NOR_SIZE); | ||
261 | |||
262 | /* | ||
263 | * Open a special address decode windows for the PCIe WA. | ||
264 | */ | ||
265 | orion5x_setup_pcie_wa_win(ORION5X_PCIE_WA_PHYS_BASE, | ||
266 | ORION5X_PCIE_WA_SIZE); | ||
267 | 276 | ||
268 | /* | 277 | /* |
269 | * Setup Multiplexing Pins -- | ||
270 | * MPP[0] Debug Led (GPIO - Out) | ||
271 | * MPP[1] Debug Led (GPIO - Out) | ||
272 | * MPP[2] N/A | ||
273 | * MPP[3] RTC_Int (GPIO - In) | ||
274 | * MPP[4] GPIO | ||
275 | * MPP[5] GPIO | ||
276 | * MPP[6] PCI_intA (GPIO - In) | ||
277 | * MPP[7] PCI_intB (GPIO - In) | ||
278 | * MPP[8-11] N/A | ||
279 | * MPP[12] SATA 0 presence Indication | ||
280 | * MPP[13] SATA 1 presence Indication | ||
281 | * MPP[14] SATA 0 active Indication | ||
282 | * MPP[15] SATA 1 active indication | ||
283 | * MPP[16-19] Not used | ||
284 | * MPP[20] PCI Clock to MV88F5182 | 278 | * MPP[20] PCI Clock to MV88F5182 |
285 | * MPP[21] PCI Clock to mini PCI CON11 | 279 | * MPP[21] PCI Clock to mini PCI CON11 |
286 | * MPP[22] USB 0 over current indication | 280 | * MPP[22] USB 0 over current indication |
@@ -289,16 +283,23 @@ static void __init rd88f5182_init(void) | |||
289 | * MPP[25] USB 0 over current enable | 283 | * MPP[25] USB 0 over current enable |
290 | */ | 284 | */ |
291 | 285 | ||
292 | orion5x_write(MPP_0_7_CTRL, 0x00000003); | 286 | /* |
293 | orion5x_write(MPP_8_15_CTRL, 0x55550000); | 287 | * Configure peripherals. |
294 | orion5x_write(MPP_16_19_CTRL, 0x5555); | 288 | */ |
289 | orion5x_ehci0_init(); | ||
290 | orion5x_ehci1_init(); | ||
291 | orion5x_eth_init(&rd88f5182_eth_data); | ||
292 | orion5x_i2c_init(); | ||
293 | orion5x_sata_init(&rd88f5182_sata_data); | ||
294 | orion5x_uart0_init(); | ||
295 | 295 | ||
296 | orion5x_gpio_set_valid_pins(0x000000fb); | 296 | orion5x_setup_dev_boot_win(RD88F5182_NOR_BOOT_BASE, |
297 | RD88F5182_NOR_BOOT_SIZE); | ||
298 | |||
299 | orion5x_setup_dev1_win(RD88F5182_NOR_BASE, RD88F5182_NOR_SIZE); | ||
300 | platform_device_register(&rd88f5182_nor_flash); | ||
297 | 301 | ||
298 | platform_add_devices(rd88f5182_devices, ARRAY_SIZE(rd88f5182_devices)); | ||
299 | i2c_register_board_info(0, &rd88f5182_i2c_rtc, 1); | 302 | i2c_register_board_info(0, &rd88f5182_i2c_rtc, 1); |
300 | orion5x_eth_init(&rd88f5182_eth_data); | ||
301 | orion5x_sata_init(&rd88f5182_sata_data); | ||
302 | } | 303 | } |
303 | 304 | ||
304 | MACHINE_START(RD88F5182, "Marvell Orion-NAS Reference Design") | 305 | MACHINE_START(RD88F5182, "Marvell Orion-NAS Reference Design") |
diff --git a/arch/arm/mach-orion5x/ts209-setup.c b/arch/arm/mach-orion5x/ts209-setup.c index 9afb41ee6e07..a9cef9703d5b 100644 --- a/arch/arm/mach-orion5x/ts209-setup.c +++ b/arch/arm/mach-orion5x/ts209-setup.c | |||
@@ -28,6 +28,8 @@ | |||
28 | #include <asm/mach/pci.h> | 28 | #include <asm/mach/pci.h> |
29 | #include <asm/arch/orion5x.h> | 29 | #include <asm/arch/orion5x.h> |
30 | #include "common.h" | 30 | #include "common.h" |
31 | #include "mpp.h" | ||
32 | #include "tsx09-common.h" | ||
31 | 33 | ||
32 | #define QNAP_TS209_NOR_BOOT_BASE 0xf4000000 | 34 | #define QNAP_TS209_NOR_BOOT_BASE 0xf4000000 |
33 | #define QNAP_TS209_NOR_BOOT_SIZE SZ_8M | 35 | #define QNAP_TS209_NOR_BOOT_SIZE SZ_8M |
@@ -47,52 +49,54 @@ | |||
47 | ***************************************************************************/ | 49 | ***************************************************************************/ |
48 | static struct mtd_partition qnap_ts209_partitions[] = { | 50 | static struct mtd_partition qnap_ts209_partitions[] = { |
49 | { | 51 | { |
50 | .name = "U-Boot", | 52 | .name = "U-Boot", |
51 | .size = 0x00080000, | 53 | .size = 0x00080000, |
52 | .offset = 0x00780000, | 54 | .offset = 0x00780000, |
53 | .mask_flags = MTD_WRITEABLE, | 55 | .mask_flags = MTD_WRITEABLE, |
54 | }, { | 56 | }, { |
55 | .name = "Kernel", | 57 | .name = "Kernel", |
56 | .size = 0x00200000, | 58 | .size = 0x00200000, |
57 | .offset = 0, | 59 | .offset = 0, |
58 | }, { | 60 | }, { |
59 | .name = "RootFS1", | 61 | .name = "RootFS1", |
60 | .size = 0x00400000, | 62 | .size = 0x00400000, |
61 | .offset = 0x00200000, | 63 | .offset = 0x00200000, |
62 | }, { | 64 | }, { |
63 | .name = "RootFS2", | 65 | .name = "RootFS2", |
64 | .size = 0x00100000, | 66 | .size = 0x00100000, |
65 | .offset = 0x00600000, | 67 | .offset = 0x00600000, |
66 | }, { | 68 | }, { |
67 | .name = "U-Boot Config", | 69 | .name = "U-Boot Config", |
68 | .size = 0x00020000, | 70 | .size = 0x00020000, |
69 | .offset = 0x00760000, | 71 | .offset = 0x00760000, |
70 | }, { | 72 | }, { |
71 | .name = "NAS Config", | 73 | .name = "NAS Config", |
72 | .size = 0x00060000, | 74 | .size = 0x00060000, |
73 | .offset = 0x00700000, | 75 | .offset = 0x00700000, |
74 | .mask_flags = MTD_WRITEABLE, | 76 | .mask_flags = MTD_WRITEABLE, |
75 | } | 77 | }, |
76 | }; | 78 | }; |
77 | 79 | ||
78 | static struct physmap_flash_data qnap_ts209_nor_flash_data = { | 80 | static struct physmap_flash_data qnap_ts209_nor_flash_data = { |
79 | .width = 1, | 81 | .width = 1, |
80 | .parts = qnap_ts209_partitions, | 82 | .parts = qnap_ts209_partitions, |
81 | .nr_parts = ARRAY_SIZE(qnap_ts209_partitions) | 83 | .nr_parts = ARRAY_SIZE(qnap_ts209_partitions) |
82 | }; | 84 | }; |
83 | 85 | ||
84 | static struct resource qnap_ts209_nor_flash_resource = { | 86 | static struct resource qnap_ts209_nor_flash_resource = { |
85 | .flags = IORESOURCE_MEM, | 87 | .flags = IORESOURCE_MEM, |
86 | .start = QNAP_TS209_NOR_BOOT_BASE, | 88 | .start = QNAP_TS209_NOR_BOOT_BASE, |
87 | .end = QNAP_TS209_NOR_BOOT_BASE + QNAP_TS209_NOR_BOOT_SIZE - 1, | 89 | .end = QNAP_TS209_NOR_BOOT_BASE + QNAP_TS209_NOR_BOOT_SIZE - 1, |
88 | }; | 90 | }; |
89 | 91 | ||
90 | static struct platform_device qnap_ts209_nor_flash = { | 92 | static struct platform_device qnap_ts209_nor_flash = { |
91 | .name = "physmap-flash", | 93 | .name = "physmap-flash", |
92 | .id = 0, | 94 | .id = 0, |
93 | .dev = { .platform_data = &qnap_ts209_nor_flash_data, }, | 95 | .dev = { |
94 | .resource = &qnap_ts209_nor_flash_resource, | 96 | .platform_data = &qnap_ts209_nor_flash_data, |
95 | .num_resources = 1, | 97 | }, |
98 | .resource = &qnap_ts209_nor_flash_resource, | ||
99 | .num_resources = 1, | ||
96 | }; | 100 | }; |
97 | 101 | ||
98 | /***************************************************************************** | 102 | /***************************************************************************** |
@@ -164,12 +168,12 @@ static int __init qnap_ts209_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | |||
164 | } | 168 | } |
165 | 169 | ||
166 | static struct hw_pci qnap_ts209_pci __initdata = { | 170 | static struct hw_pci qnap_ts209_pci __initdata = { |
167 | .nr_controllers = 2, | 171 | .nr_controllers = 2, |
168 | .preinit = qnap_ts209_pci_preinit, | 172 | .preinit = qnap_ts209_pci_preinit, |
169 | .swizzle = pci_std_swizzle, | 173 | .swizzle = pci_std_swizzle, |
170 | .setup = orion5x_pci_sys_setup, | 174 | .setup = orion5x_pci_sys_setup, |
171 | .scan = orion5x_pci_sys_scan_bus, | 175 | .scan = orion5x_pci_sys_scan_bus, |
172 | .map_irq = qnap_ts209_pci_map_irq, | 176 | .map_irq = qnap_ts209_pci_map_irq, |
173 | }; | 177 | }; |
174 | 178 | ||
175 | static int __init qnap_ts209_pci_init(void) | 179 | static int __init qnap_ts209_pci_init(void) |
@@ -183,96 +187,6 @@ static int __init qnap_ts209_pci_init(void) | |||
183 | subsys_initcall(qnap_ts209_pci_init); | 187 | subsys_initcall(qnap_ts209_pci_init); |
184 | 188 | ||
185 | /***************************************************************************** | 189 | /***************************************************************************** |
186 | * Ethernet | ||
187 | ****************************************************************************/ | ||
188 | |||
189 | static struct mv643xx_eth_platform_data qnap_ts209_eth_data = { | ||
190 | .phy_addr = 8, | ||
191 | .force_phy_addr = 1, | ||
192 | }; | ||
193 | |||
194 | static int __init parse_hex_nibble(char n) | ||
195 | { | ||
196 | if (n >= '0' && n <= '9') | ||
197 | return n - '0'; | ||
198 | |||
199 | if (n >= 'A' && n <= 'F') | ||
200 | return n - 'A' + 10; | ||
201 | |||
202 | if (n >= 'a' && n <= 'f') | ||
203 | return n - 'a' + 10; | ||
204 | |||
205 | return -1; | ||
206 | } | ||
207 | |||
208 | static int __init parse_hex_byte(const char *b) | ||
209 | { | ||
210 | int hi; | ||
211 | int lo; | ||
212 | |||
213 | hi = parse_hex_nibble(b[0]); | ||
214 | lo = parse_hex_nibble(b[1]); | ||
215 | |||
216 | if (hi < 0 || lo < 0) | ||
217 | return -1; | ||
218 | |||
219 | return (hi << 4) | lo; | ||
220 | } | ||
221 | |||
222 | static int __init check_mac_addr(const char *addr_str) | ||
223 | { | ||
224 | u_int8_t addr[6]; | ||
225 | int i; | ||
226 | |||
227 | for (i = 0; i < 6; i++) { | ||
228 | int byte; | ||
229 | |||
230 | /* | ||
231 | * Enforce "xx:xx:xx:xx:xx:xx\n" format. | ||
232 | */ | ||
233 | if (addr_str[(i * 3) + 2] != ((i < 5) ? ':' : '\n')) | ||
234 | return -1; | ||
235 | |||
236 | byte = parse_hex_byte(addr_str + (i * 3)); | ||
237 | if (byte < 0) | ||
238 | return -1; | ||
239 | addr[i] = byte; | ||
240 | } | ||
241 | |||
242 | printk(KERN_INFO "ts209: found ethernet mac address "); | ||
243 | for (i = 0; i < 6; i++) | ||
244 | printk("%.2x%s", addr[i], (i < 5) ? ":" : ".\n"); | ||
245 | |||
246 | memcpy(qnap_ts209_eth_data.mac_addr, addr, 6); | ||
247 | |||
248 | return 0; | ||
249 | } | ||
250 | |||
251 | /* | ||
252 | * The 'NAS Config' flash partition has an ext2 filesystem which | ||
253 | * contains a file that has the ethernet MAC address in plain text | ||
254 | * (format "xx:xx:xx:xx:xx:xx\n".) | ||
255 | */ | ||
256 | static void __init ts209_find_mac_addr(void) | ||
257 | { | ||
258 | unsigned long addr; | ||
259 | |||
260 | for (addr = 0x00700000; addr < 0x00760000; addr += 1024) { | ||
261 | char *nor_page; | ||
262 | int ret = 0; | ||
263 | |||
264 | nor_page = ioremap(QNAP_TS209_NOR_BOOT_BASE + addr, 1024); | ||
265 | if (nor_page != NULL) { | ||
266 | ret = check_mac_addr(nor_page); | ||
267 | iounmap(nor_page); | ||
268 | } | ||
269 | |||
270 | if (ret == 0) | ||
271 | break; | ||
272 | } | ||
273 | } | ||
274 | |||
275 | /***************************************************************************** | ||
276 | * RTC S35390A on I2C bus | 190 | * RTC S35390A on I2C bus |
277 | ****************************************************************************/ | 191 | ****************************************************************************/ |
278 | 192 | ||
@@ -280,7 +194,7 @@ static void __init ts209_find_mac_addr(void) | |||
280 | 194 | ||
281 | static struct i2c_board_info __initdata qnap_ts209_i2c_rtc = { | 195 | static struct i2c_board_info __initdata qnap_ts209_i2c_rtc = { |
282 | I2C_BOARD_INFO("s35390a", 0x30), | 196 | I2C_BOARD_INFO("s35390a", 0x30), |
283 | .irq = 0, | 197 | .irq = 0, |
284 | }; | 198 | }; |
285 | 199 | ||
286 | /**************************************************************************** | 200 | /**************************************************************************** |
@@ -297,70 +211,63 @@ static struct gpio_keys_button qnap_ts209_buttons[] = { | |||
297 | .gpio = QNAP_TS209_GPIO_KEY_MEDIA, | 211 | .gpio = QNAP_TS209_GPIO_KEY_MEDIA, |
298 | .desc = "USB Copy Button", | 212 | .desc = "USB Copy Button", |
299 | .active_low = 1, | 213 | .active_low = 1, |
300 | }, | 214 | }, { |
301 | { | ||
302 | .code = KEY_POWER, | 215 | .code = KEY_POWER, |
303 | .gpio = QNAP_TS209_GPIO_KEY_RESET, | 216 | .gpio = QNAP_TS209_GPIO_KEY_RESET, |
304 | .desc = "Reset Button", | 217 | .desc = "Reset Button", |
305 | .active_low = 1, | 218 | .active_low = 1, |
306 | } | 219 | }, |
307 | }; | 220 | }; |
308 | 221 | ||
309 | static struct gpio_keys_platform_data qnap_ts209_button_data = { | 222 | static struct gpio_keys_platform_data qnap_ts209_button_data = { |
310 | .buttons = qnap_ts209_buttons, | 223 | .buttons = qnap_ts209_buttons, |
311 | .nbuttons = ARRAY_SIZE(qnap_ts209_buttons), | 224 | .nbuttons = ARRAY_SIZE(qnap_ts209_buttons), |
312 | }; | 225 | }; |
313 | 226 | ||
314 | static struct platform_device qnap_ts209_button_device = { | 227 | static struct platform_device qnap_ts209_button_device = { |
315 | .name = "gpio-keys", | 228 | .name = "gpio-keys", |
316 | .id = -1, | 229 | .id = -1, |
317 | .num_resources = 0, | 230 | .num_resources = 0, |
318 | .dev = { .platform_data = &qnap_ts209_button_data, }, | 231 | .dev = { |
232 | .platform_data = &qnap_ts209_button_data, | ||
233 | }, | ||
319 | }; | 234 | }; |
320 | 235 | ||
321 | /***************************************************************************** | 236 | /***************************************************************************** |
322 | * SATA | 237 | * SATA |
323 | ****************************************************************************/ | 238 | ****************************************************************************/ |
324 | static struct mv_sata_platform_data qnap_ts209_sata_data = { | 239 | static struct mv_sata_platform_data qnap_ts209_sata_data = { |
325 | .n_ports = 2, | 240 | .n_ports = 2, |
326 | }; | 241 | }; |
327 | 242 | ||
328 | /***************************************************************************** | 243 | /***************************************************************************** |
329 | 244 | ||
330 | * General Setup | 245 | * General Setup |
331 | ****************************************************************************/ | 246 | ****************************************************************************/ |
332 | 247 | static struct orion5x_mpp_mode ts209_mpp_modes[] __initdata = { | |
333 | static struct platform_device *qnap_ts209_devices[] __initdata = { | 248 | { 0, MPP_UNUSED }, |
334 | &qnap_ts209_nor_flash, | 249 | { 1, MPP_GPIO }, /* USB copy button */ |
335 | &qnap_ts209_button_device, | 250 | { 2, MPP_GPIO }, /* Load defaults button */ |
251 | { 3, MPP_GPIO }, /* GPIO RTC */ | ||
252 | { 4, MPP_UNUSED }, | ||
253 | { 5, MPP_UNUSED }, | ||
254 | { 6, MPP_GPIO }, /* PCI Int A */ | ||
255 | { 7, MPP_GPIO }, /* PCI Int B */ | ||
256 | { 8, MPP_UNUSED }, | ||
257 | { 9, MPP_UNUSED }, | ||
258 | { 10, MPP_UNUSED }, | ||
259 | { 11, MPP_UNUSED }, | ||
260 | { 12, MPP_SATA_LED }, /* SATA 0 presence */ | ||
261 | { 13, MPP_SATA_LED }, /* SATA 1 presence */ | ||
262 | { 14, MPP_SATA_LED }, /* SATA 0 active */ | ||
263 | { 15, MPP_SATA_LED }, /* SATA 1 active */ | ||
264 | { 16, MPP_UART }, /* UART1 RXD */ | ||
265 | { 17, MPP_UART }, /* UART1 TXD */ | ||
266 | { 18, MPP_GPIO }, /* SW_RST */ | ||
267 | { 19, MPP_UNUSED }, | ||
268 | { -1 }, | ||
336 | }; | 269 | }; |
337 | 270 | ||
338 | /* | ||
339 | * QNAP TS-[12]09 specific power off method via UART1-attached PIC | ||
340 | */ | ||
341 | |||
342 | #define UART1_REG(x) (UART1_VIRT_BASE + ((UART_##x) << 2)) | ||
343 | |||
344 | static void qnap_ts209_power_off(void) | ||
345 | { | ||
346 | /* 19200 baud divisor */ | ||
347 | const unsigned divisor = ((ORION5X_TCLK + (8 * 19200)) / (16 * 19200)); | ||
348 | |||
349 | pr_info("%s: triggering power-off...\n", __func__); | ||
350 | |||
351 | /* hijack uart1 and reset into sane state (19200,8n1) */ | ||
352 | orion5x_write(UART1_REG(LCR), 0x83); | ||
353 | orion5x_write(UART1_REG(DLL), divisor & 0xff); | ||
354 | orion5x_write(UART1_REG(DLM), (divisor >> 8) & 0xff); | ||
355 | orion5x_write(UART1_REG(LCR), 0x03); | ||
356 | orion5x_write(UART1_REG(IER), 0x00); | ||
357 | orion5x_write(UART1_REG(FCR), 0x00); | ||
358 | orion5x_write(UART1_REG(MCR), 0x00); | ||
359 | |||
360 | /* send the power-off command 'A' to PIC */ | ||
361 | orion5x_write(UART1_REG(TX), 'A'); | ||
362 | } | ||
363 | |||
364 | static void __init qnap_ts209_init(void) | 271 | static void __init qnap_ts209_init(void) |
365 | { | 272 | { |
366 | /* | 273 | /* |
@@ -368,51 +275,33 @@ static void __init qnap_ts209_init(void) | |||
368 | */ | 275 | */ |
369 | orion5x_init(); | 276 | orion5x_init(); |
370 | 277 | ||
371 | /* | 278 | orion5x_mpp_conf(ts209_mpp_modes); |
372 | * Setup flash mapping | ||
373 | */ | ||
374 | orion5x_setup_dev_boot_win(QNAP_TS209_NOR_BOOT_BASE, | ||
375 | QNAP_TS209_NOR_BOOT_SIZE); | ||
376 | |||
377 | /* | ||
378 | * Open a special address decode windows for the PCIe WA. | ||
379 | */ | ||
380 | orion5x_setup_pcie_wa_win(ORION5X_PCIE_WA_PHYS_BASE, | ||
381 | ORION5X_PCIE_WA_SIZE); | ||
382 | 279 | ||
383 | /* | 280 | /* |
384 | * Setup Multiplexing Pins -- | ||
385 | * MPP[0] Reserved | ||
386 | * MPP[1] USB copy button (0 active) | ||
387 | * MPP[2] Load defaults button (0 active) | ||
388 | * MPP[3] GPIO RTC | ||
389 | * MPP[4-5] Reserved | ||
390 | * MPP[6] PCI Int A | ||
391 | * MPP[7] PCI Int B | ||
392 | * MPP[8-11] Reserved | ||
393 | * MPP[12] SATA 0 presence | ||
394 | * MPP[13] SATA 1 presence | ||
395 | * MPP[14] SATA 0 active | ||
396 | * MPP[15] SATA 1 active | ||
397 | * MPP[16] UART1 RXD | ||
398 | * MPP[17] UART1 TXD | ||
399 | * MPP[18] SW_RST (0 active) | ||
400 | * MPP[19] Reserved | ||
401 | * MPP[20] PCI clock 0 | 281 | * MPP[20] PCI clock 0 |
402 | * MPP[21] PCI clock 1 | 282 | * MPP[21] PCI clock 1 |
403 | * MPP[22] USB 0 over current | 283 | * MPP[22] USB 0 over current |
404 | * MPP[23-25] Reserved | 284 | * MPP[23-25] Reserved |
405 | */ | 285 | */ |
406 | orion5x_write(MPP_0_7_CTRL, 0x3); | ||
407 | orion5x_write(MPP_8_15_CTRL, 0x55550000); | ||
408 | orion5x_write(MPP_16_19_CTRL, 0x5500); | ||
409 | orion5x_gpio_set_valid_pins(0x3cc0fff); | ||
410 | 286 | ||
411 | /* register ts209 specific power-off method */ | 287 | /* |
412 | pm_power_off = qnap_ts209_power_off; | 288 | * Configure peripherals. |
289 | */ | ||
290 | orion5x_ehci0_init(); | ||
291 | orion5x_ehci1_init(); | ||
292 | qnap_tsx09_find_mac_addr(QNAP_TS209_NOR_BOOT_BASE + | ||
293 | qnap_ts209_partitions[5].offset, | ||
294 | qnap_ts209_partitions[5].size); | ||
295 | orion5x_eth_init(&qnap_tsx09_eth_data); | ||
296 | orion5x_i2c_init(); | ||
297 | orion5x_sata_init(&qnap_ts209_sata_data); | ||
298 | orion5x_uart0_init(); | ||
299 | |||
300 | orion5x_setup_dev_boot_win(QNAP_TS209_NOR_BOOT_BASE, | ||
301 | QNAP_TS209_NOR_BOOT_SIZE); | ||
302 | platform_device_register(&qnap_ts209_nor_flash); | ||
413 | 303 | ||
414 | platform_add_devices(qnap_ts209_devices, | 304 | platform_device_register(&qnap_ts209_button_device); |
415 | ARRAY_SIZE(qnap_ts209_devices)); | ||
416 | 305 | ||
417 | /* Get RTC IRQ and register the chip */ | 306 | /* Get RTC IRQ and register the chip */ |
418 | if (gpio_request(TS209_RTC_GPIO, "rtc") == 0) { | 307 | if (gpio_request(TS209_RTC_GPIO, "rtc") == 0) { |
@@ -425,14 +314,12 @@ static void __init qnap_ts209_init(void) | |||
425 | pr_warning("qnap_ts209_init: failed to get RTC IRQ\n"); | 314 | pr_warning("qnap_ts209_init: failed to get RTC IRQ\n"); |
426 | i2c_register_board_info(0, &qnap_ts209_i2c_rtc, 1); | 315 | i2c_register_board_info(0, &qnap_ts209_i2c_rtc, 1); |
427 | 316 | ||
428 | ts209_find_mac_addr(); | 317 | /* register tsx09 specific power-off method */ |
429 | orion5x_eth_init(&qnap_ts209_eth_data); | 318 | pm_power_off = qnap_tsx09_power_off; |
430 | |||
431 | orion5x_sata_init(&qnap_ts209_sata_data); | ||
432 | } | 319 | } |
433 | 320 | ||
434 | MACHINE_START(TS209, "QNAP TS-109/TS-209") | 321 | MACHINE_START(TS209, "QNAP TS-109/TS-209") |
435 | /* Maintainer: Byron Bradley <byron.bbradley@gmail.com> */ | 322 | /* Maintainer: Byron Bradley <byron.bbradley@gmail.com> */ |
436 | .phys_io = ORION5X_REGS_PHYS_BASE, | 323 | .phys_io = ORION5X_REGS_PHYS_BASE, |
437 | .io_pg_offst = ((ORION5X_REGS_VIRT_BASE) >> 18) & 0xFFFC, | 324 | .io_pg_offst = ((ORION5X_REGS_VIRT_BASE) >> 18) & 0xFFFC, |
438 | .boot_params = 0x00000100, | 325 | .boot_params = 0x00000100, |
diff --git a/arch/arm/mach-orion5x/ts409-setup.c b/arch/arm/mach-orion5x/ts409-setup.c new file mode 100644 index 000000000000..32f0ff073b7e --- /dev/null +++ b/arch/arm/mach-orion5x/ts409-setup.c | |||
@@ -0,0 +1,273 @@ | |||
1 | /* | ||
2 | * QNAP TS-409 Board Setup | ||
3 | * | ||
4 | * Maintainer: Sylver Bruneau <sylver.bruneau@gmail.com> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or | ||
7 | * modify it under the terms of the GNU General Public License | ||
8 | * as published by the Free Software Foundation; either version | ||
9 | * 2 of the License, or (at your option) any later version. | ||
10 | */ | ||
11 | |||
12 | #include <linux/kernel.h> | ||
13 | #include <linux/init.h> | ||
14 | #include <linux/platform_device.h> | ||
15 | #include <linux/pci.h> | ||
16 | #include <linux/irq.h> | ||
17 | #include <linux/mtd/physmap.h> | ||
18 | #include <linux/mv643xx_eth.h> | ||
19 | #include <linux/gpio_keys.h> | ||
20 | #include <linux/input.h> | ||
21 | #include <linux/i2c.h> | ||
22 | #include <linux/serial_reg.h> | ||
23 | #include <asm/mach-types.h> | ||
24 | #include <asm/gpio.h> | ||
25 | #include <asm/mach/arch.h> | ||
26 | #include <asm/mach/pci.h> | ||
27 | #include <asm/arch/orion5x.h> | ||
28 | #include "common.h" | ||
29 | #include "mpp.h" | ||
30 | #include "tsx09-common.h" | ||
31 | |||
32 | /***************************************************************************** | ||
33 | * QNAP TS-409 Info | ||
34 | ****************************************************************************/ | ||
35 | |||
36 | /* | ||
37 | * QNAP TS-409 hardware : | ||
38 | * - Marvell 88F5281-D0 | ||
39 | * - Marvell 88SX7042 SATA controller (PCIe) | ||
40 | * - Marvell 88E1118 Gigabit Ethernet PHY | ||
41 | * - RTC S35390A (@0x30) on I2C bus | ||
42 | * - 8MB NOR flash | ||
43 | * - 256MB of DDR-2 RAM | ||
44 | */ | ||
45 | |||
46 | /* | ||
47 | * 8MB NOR flash Device bus boot chip select | ||
48 | */ | ||
49 | |||
50 | #define QNAP_TS409_NOR_BOOT_BASE 0xff800000 | ||
51 | #define QNAP_TS409_NOR_BOOT_SIZE SZ_8M | ||
52 | |||
53 | /**************************************************************************** | ||
54 | * 8MiB NOR flash. The struct mtd_partition is not in the same order as the | ||
55 | * partitions on the device because we want to keep compatability with | ||
56 | * existing QNAP firmware. | ||
57 | * | ||
58 | * Layout as used by QNAP: | ||
59 | * [2] 0x00000000-0x00200000 : "Kernel" | ||
60 | * [3] 0x00200000-0x00600000 : "RootFS1" | ||
61 | * [4] 0x00600000-0x00700000 : "RootFS2" | ||
62 | * [6] 0x00700000-0x00760000 : "NAS Config" (read-only) | ||
63 | * [5] 0x00760000-0x00780000 : "U-Boot Config" | ||
64 | * [1] 0x00780000-0x00800000 : "U-Boot" (read-only) | ||
65 | ***************************************************************************/ | ||
66 | static struct mtd_partition qnap_ts409_partitions[] = { | ||
67 | { | ||
68 | .name = "U-Boot", | ||
69 | .size = 0x00080000, | ||
70 | .offset = 0x00780000, | ||
71 | .mask_flags = MTD_WRITEABLE, | ||
72 | }, { | ||
73 | .name = "Kernel", | ||
74 | .size = 0x00200000, | ||
75 | .offset = 0, | ||
76 | }, { | ||
77 | .name = "RootFS1", | ||
78 | .size = 0x00400000, | ||
79 | .offset = 0x00200000, | ||
80 | }, { | ||
81 | .name = "RootFS2", | ||
82 | .size = 0x00100000, | ||
83 | .offset = 0x00600000, | ||
84 | }, { | ||
85 | .name = "U-Boot Config", | ||
86 | .size = 0x00020000, | ||
87 | .offset = 0x00760000, | ||
88 | }, { | ||
89 | .name = "NAS Config", | ||
90 | .size = 0x00060000, | ||
91 | .offset = 0x00700000, | ||
92 | .mask_flags = MTD_WRITEABLE, | ||
93 | }, | ||
94 | }; | ||
95 | |||
96 | static struct physmap_flash_data qnap_ts409_nor_flash_data = { | ||
97 | .width = 1, | ||
98 | .parts = qnap_ts409_partitions, | ||
99 | .nr_parts = ARRAY_SIZE(qnap_ts409_partitions) | ||
100 | }; | ||
101 | |||
102 | static struct resource qnap_ts409_nor_flash_resource = { | ||
103 | .flags = IORESOURCE_MEM, | ||
104 | .start = QNAP_TS409_NOR_BOOT_BASE, | ||
105 | .end = QNAP_TS409_NOR_BOOT_BASE + QNAP_TS409_NOR_BOOT_SIZE - 1, | ||
106 | }; | ||
107 | |||
108 | static struct platform_device qnap_ts409_nor_flash = { | ||
109 | .name = "physmap-flash", | ||
110 | .id = 0, | ||
111 | .dev = { .platform_data = &qnap_ts409_nor_flash_data, }, | ||
112 | .num_resources = 1, | ||
113 | .resource = &qnap_ts409_nor_flash_resource, | ||
114 | }; | ||
115 | |||
116 | /***************************************************************************** | ||
117 | * PCI | ||
118 | ****************************************************************************/ | ||
119 | |||
120 | static int __init qnap_ts409_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | ||
121 | { | ||
122 | int irq; | ||
123 | |||
124 | /* | ||
125 | * Check for devices with hard-wired IRQs. | ||
126 | */ | ||
127 | irq = orion5x_pci_map_irq(dev, slot, pin); | ||
128 | if (irq != -1) | ||
129 | return irq; | ||
130 | |||
131 | /* | ||
132 | * PCI isn't used on the TS-409 | ||
133 | */ | ||
134 | return -1; | ||
135 | } | ||
136 | |||
137 | static struct hw_pci qnap_ts409_pci __initdata = { | ||
138 | .nr_controllers = 2, | ||
139 | .swizzle = pci_std_swizzle, | ||
140 | .setup = orion5x_pci_sys_setup, | ||
141 | .scan = orion5x_pci_sys_scan_bus, | ||
142 | .map_irq = qnap_ts409_pci_map_irq, | ||
143 | }; | ||
144 | |||
145 | static int __init qnap_ts409_pci_init(void) | ||
146 | { | ||
147 | if (machine_is_ts409()) | ||
148 | pci_common_init(&qnap_ts409_pci); | ||
149 | |||
150 | return 0; | ||
151 | } | ||
152 | |||
153 | subsys_initcall(qnap_ts409_pci_init); | ||
154 | |||
155 | /***************************************************************************** | ||
156 | * RTC S35390A on I2C bus | ||
157 | ****************************************************************************/ | ||
158 | |||
159 | #define TS409_RTC_GPIO 10 | ||
160 | |||
161 | static struct i2c_board_info __initdata qnap_ts409_i2c_rtc = { | ||
162 | I2C_BOARD_INFO("s35390a", 0x30), | ||
163 | }; | ||
164 | |||
165 | /**************************************************************************** | ||
166 | * GPIO Attached Keys | ||
167 | * Power button is attached to the PIC microcontroller | ||
168 | ****************************************************************************/ | ||
169 | |||
170 | #define QNAP_TS409_GPIO_KEY_MEDIA 15 | ||
171 | |||
172 | static struct gpio_keys_button qnap_ts409_buttons[] = { | ||
173 | { | ||
174 | .code = KEY_RESTART, | ||
175 | .gpio = QNAP_TS409_GPIO_KEY_MEDIA, | ||
176 | .desc = "USB Copy Button", | ||
177 | .active_low = 1, | ||
178 | }, | ||
179 | }; | ||
180 | |||
181 | static struct gpio_keys_platform_data qnap_ts409_button_data = { | ||
182 | .buttons = qnap_ts409_buttons, | ||
183 | .nbuttons = ARRAY_SIZE(qnap_ts409_buttons), | ||
184 | }; | ||
185 | |||
186 | static struct platform_device qnap_ts409_button_device = { | ||
187 | .name = "gpio-keys", | ||
188 | .id = -1, | ||
189 | .num_resources = 0, | ||
190 | .dev = { | ||
191 | .platform_data = &qnap_ts409_button_data, | ||
192 | }, | ||
193 | }; | ||
194 | |||
195 | /***************************************************************************** | ||
196 | * General Setup | ||
197 | ****************************************************************************/ | ||
198 | static struct orion5x_mpp_mode ts409_mpp_modes[] __initdata = { | ||
199 | { 0, MPP_UNUSED }, | ||
200 | { 1, MPP_UNUSED }, | ||
201 | { 2, MPP_UNUSED }, | ||
202 | { 3, MPP_UNUSED }, | ||
203 | { 4, MPP_GPIO }, /* HDD 1 status */ | ||
204 | { 5, MPP_GPIO }, /* HDD 2 status */ | ||
205 | { 6, MPP_GPIO }, /* HDD 3 status */ | ||
206 | { 7, MPP_GPIO }, /* HDD 4 status */ | ||
207 | { 8, MPP_UNUSED }, | ||
208 | { 9, MPP_UNUSED }, | ||
209 | { 10, MPP_GPIO }, /* RTC int */ | ||
210 | { 11, MPP_UNUSED }, | ||
211 | { 12, MPP_UNUSED }, | ||
212 | { 13, MPP_UNUSED }, | ||
213 | { 14, MPP_GPIO }, /* SW_RST */ | ||
214 | { 15, MPP_GPIO }, /* USB copy button */ | ||
215 | { 16, MPP_UART }, /* UART1 RXD */ | ||
216 | { 17, MPP_UART }, /* UART1 TXD */ | ||
217 | { 18, MPP_UNUSED }, | ||
218 | { 19, MPP_UNUSED }, | ||
219 | { -1 }, | ||
220 | }; | ||
221 | |||
222 | static void __init qnap_ts409_init(void) | ||
223 | { | ||
224 | /* | ||
225 | * Setup basic Orion functions. Need to be called early. | ||
226 | */ | ||
227 | orion5x_init(); | ||
228 | |||
229 | orion5x_mpp_conf(ts409_mpp_modes); | ||
230 | |||
231 | /* | ||
232 | * Configure peripherals. | ||
233 | */ | ||
234 | orion5x_ehci0_init(); | ||
235 | qnap_tsx09_find_mac_addr(QNAP_TS409_NOR_BOOT_BASE + | ||
236 | qnap_ts409_partitions[5].offset, | ||
237 | qnap_ts409_partitions[5].size); | ||
238 | orion5x_eth_init(&qnap_tsx09_eth_data); | ||
239 | orion5x_i2c_init(); | ||
240 | orion5x_uart0_init(); | ||
241 | |||
242 | orion5x_setup_dev_boot_win(QNAP_TS409_NOR_BOOT_BASE, | ||
243 | QNAP_TS409_NOR_BOOT_SIZE); | ||
244 | platform_device_register(&qnap_ts409_nor_flash); | ||
245 | |||
246 | platform_device_register(&qnap_ts409_button_device); | ||
247 | |||
248 | /* Get RTC IRQ and register the chip */ | ||
249 | if (gpio_request(TS409_RTC_GPIO, "rtc") == 0) { | ||
250 | if (gpio_direction_input(TS409_RTC_GPIO) == 0) | ||
251 | qnap_ts409_i2c_rtc.irq = gpio_to_irq(TS409_RTC_GPIO); | ||
252 | else | ||
253 | gpio_free(TS409_RTC_GPIO); | ||
254 | } | ||
255 | if (qnap_ts409_i2c_rtc.irq == 0) | ||
256 | pr_warning("qnap_ts409_init: failed to get RTC IRQ\n"); | ||
257 | i2c_register_board_info(0, &qnap_ts409_i2c_rtc, 1); | ||
258 | |||
259 | /* register tsx09 specific power-off method */ | ||
260 | pm_power_off = qnap_tsx09_power_off; | ||
261 | } | ||
262 | |||
263 | MACHINE_START(TS409, "QNAP TS-409") | ||
264 | /* Maintainer: Sylver Bruneau <sylver.bruneau@gmail.com> */ | ||
265 | .phys_io = ORION5X_REGS_PHYS_BASE, | ||
266 | .io_pg_offst = ((ORION5X_REGS_VIRT_BASE) >> 18) & 0xFFFC, | ||
267 | .boot_params = 0x00000100, | ||
268 | .init_machine = qnap_ts409_init, | ||
269 | .map_io = orion5x_map_io, | ||
270 | .init_irq = orion5x_init_irq, | ||
271 | .timer = &orion5x_timer, | ||
272 | .fixup = tag_fixup_mem32, | ||
273 | MACHINE_END | ||
diff --git a/arch/arm/mach-orion5x/ts78xx-setup.c b/arch/arm/mach-orion5x/ts78xx-setup.c new file mode 100644 index 000000000000..77e9f351f07a --- /dev/null +++ b/arch/arm/mach-orion5x/ts78xx-setup.c | |||
@@ -0,0 +1,277 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-orion5x/ts78xx-setup.c | ||
3 | * | ||
4 | * Maintainer: Alexander Clouter <alex@digriz.org.uk> | ||
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/mtd/physmap.h> | ||
15 | #include <linux/mv643xx_eth.h> | ||
16 | #include <linux/ata_platform.h> | ||
17 | #include <linux/m48t86.h> | ||
18 | #include <asm/mach-types.h> | ||
19 | #include <asm/mach/arch.h> | ||
20 | #include <asm/mach/map.h> | ||
21 | #include <asm/arch/orion5x.h> | ||
22 | #include "common.h" | ||
23 | #include "mpp.h" | ||
24 | |||
25 | /***************************************************************************** | ||
26 | * TS-78xx Info | ||
27 | ****************************************************************************/ | ||
28 | |||
29 | /* | ||
30 | * FPGA - lives where the PCI bus would be at ORION5X_PCI_MEM_PHYS_BASE | ||
31 | */ | ||
32 | #define TS78XX_FPGA_REGS_PHYS_BASE 0xe8000000 | ||
33 | #define TS78XX_FPGA_REGS_VIRT_BASE 0xff900000 | ||
34 | #define TS78XX_FPGA_REGS_SIZE SZ_1M | ||
35 | |||
36 | #define TS78XX_FPGA_REGS_SYSCON_ID (TS78XX_FPGA_REGS_VIRT_BASE | 0x000) | ||
37 | #define TS78XX_FPGA_REGS_SYSCON_LCDI (TS78XX_FPGA_REGS_VIRT_BASE | 0x004) | ||
38 | #define TS78XX_FPGA_REGS_SYSCON_LCDO (TS78XX_FPGA_REGS_VIRT_BASE | 0x008) | ||
39 | |||
40 | #define TS78XX_FPGA_REGS_RTC_CTRL (TS78XX_FPGA_REGS_VIRT_BASE | 0x808) | ||
41 | #define TS78XX_FPGA_REGS_RTC_DATA (TS78XX_FPGA_REGS_VIRT_BASE | 0x80c) | ||
42 | |||
43 | /* | ||
44 | * 512kB NOR flash Device | ||
45 | */ | ||
46 | #define TS78XX_NOR_BOOT_BASE 0xff800000 | ||
47 | #define TS78XX_NOR_BOOT_SIZE SZ_512K | ||
48 | |||
49 | /***************************************************************************** | ||
50 | * I/O Address Mapping | ||
51 | ****************************************************************************/ | ||
52 | static struct map_desc ts78xx_io_desc[] __initdata = { | ||
53 | { | ||
54 | .virtual = TS78XX_FPGA_REGS_VIRT_BASE, | ||
55 | .pfn = __phys_to_pfn(TS78XX_FPGA_REGS_PHYS_BASE), | ||
56 | .length = TS78XX_FPGA_REGS_SIZE, | ||
57 | .type = MT_DEVICE, | ||
58 | }, | ||
59 | }; | ||
60 | |||
61 | void __init ts78xx_map_io(void) | ||
62 | { | ||
63 | orion5x_map_io(); | ||
64 | iotable_init(ts78xx_io_desc, ARRAY_SIZE(ts78xx_io_desc)); | ||
65 | } | ||
66 | |||
67 | /***************************************************************************** | ||
68 | * 512kB NOR Boot Flash - the chip is a M25P40 | ||
69 | ****************************************************************************/ | ||
70 | static struct mtd_partition ts78xx_nor_boot_flash_resources[] = { | ||
71 | { | ||
72 | .name = "ts-bootrom", | ||
73 | .offset = 0, | ||
74 | /* only the first 256kB is used */ | ||
75 | .size = SZ_256K, | ||
76 | .mask_flags = MTD_WRITEABLE, | ||
77 | }, | ||
78 | }; | ||
79 | |||
80 | static struct physmap_flash_data ts78xx_nor_boot_flash_data = { | ||
81 | .width = 1, | ||
82 | .parts = ts78xx_nor_boot_flash_resources, | ||
83 | .nr_parts = ARRAY_SIZE(ts78xx_nor_boot_flash_resources), | ||
84 | }; | ||
85 | |||
86 | static struct resource ts78xx_nor_boot_flash_resource = { | ||
87 | .flags = IORESOURCE_MEM, | ||
88 | .start = TS78XX_NOR_BOOT_BASE, | ||
89 | .end = TS78XX_NOR_BOOT_BASE + TS78XX_NOR_BOOT_SIZE - 1, | ||
90 | }; | ||
91 | |||
92 | static struct platform_device ts78xx_nor_boot_flash = { | ||
93 | .name = "physmap-flash", | ||
94 | .id = -1, | ||
95 | .dev = { | ||
96 | .platform_data = &ts78xx_nor_boot_flash_data, | ||
97 | }, | ||
98 | .num_resources = 1, | ||
99 | .resource = &ts78xx_nor_boot_flash_resource, | ||
100 | }; | ||
101 | |||
102 | /***************************************************************************** | ||
103 | * Ethernet | ||
104 | ****************************************************************************/ | ||
105 | static struct mv643xx_eth_platform_data ts78xx_eth_data = { | ||
106 | .phy_addr = 0, | ||
107 | .force_phy_addr = 1, | ||
108 | }; | ||
109 | |||
110 | /***************************************************************************** | ||
111 | * RTC M48T86 - nicked^Wborrowed from arch/arm/mach-ep93xx/ts72xx.c | ||
112 | ****************************************************************************/ | ||
113 | #ifdef CONFIG_RTC_DRV_M48T86 | ||
114 | static unsigned char ts78xx_rtc_readbyte(unsigned long addr) | ||
115 | { | ||
116 | writeb(addr, TS78XX_FPGA_REGS_RTC_CTRL); | ||
117 | return readb(TS78XX_FPGA_REGS_RTC_DATA); | ||
118 | } | ||
119 | |||
120 | static void ts78xx_rtc_writebyte(unsigned char value, unsigned long addr) | ||
121 | { | ||
122 | writeb(addr, TS78XX_FPGA_REGS_RTC_CTRL); | ||
123 | writeb(value, TS78XX_FPGA_REGS_RTC_DATA); | ||
124 | } | ||
125 | |||
126 | static struct m48t86_ops ts78xx_rtc_ops = { | ||
127 | .readbyte = ts78xx_rtc_readbyte, | ||
128 | .writebyte = ts78xx_rtc_writebyte, | ||
129 | }; | ||
130 | |||
131 | static struct platform_device ts78xx_rtc_device = { | ||
132 | .name = "rtc-m48t86", | ||
133 | .id = -1, | ||
134 | .dev = { | ||
135 | .platform_data = &ts78xx_rtc_ops, | ||
136 | }, | ||
137 | .num_resources = 0, | ||
138 | }; | ||
139 | |||
140 | /* | ||
141 | * TS uses some of the user storage space on the RTC chip so see if it is | ||
142 | * present; as it's an optional feature at purchase time and not all boards | ||
143 | * will have it present | ||
144 | * | ||
145 | * I've used the method TS use in their rtc7800.c example for the detection | ||
146 | * | ||
147 | * TODO: track down a guinea pig without an RTC to see if we can work out a | ||
148 | * better RTC detection routine | ||
149 | */ | ||
150 | static int __init ts78xx_rtc_init(void) | ||
151 | { | ||
152 | unsigned char tmp_rtc0, tmp_rtc1; | ||
153 | |||
154 | tmp_rtc0 = ts78xx_rtc_readbyte(126); | ||
155 | tmp_rtc1 = ts78xx_rtc_readbyte(127); | ||
156 | |||
157 | ts78xx_rtc_writebyte(0x00, 126); | ||
158 | ts78xx_rtc_writebyte(0x55, 127); | ||
159 | if (ts78xx_rtc_readbyte(127) == 0x55) { | ||
160 | ts78xx_rtc_writebyte(0xaa, 127); | ||
161 | if (ts78xx_rtc_readbyte(127) == 0xaa | ||
162 | && ts78xx_rtc_readbyte(126) == 0x00) { | ||
163 | ts78xx_rtc_writebyte(tmp_rtc0, 126); | ||
164 | ts78xx_rtc_writebyte(tmp_rtc1, 127); | ||
165 | platform_device_register(&ts78xx_rtc_device); | ||
166 | return 1; | ||
167 | } | ||
168 | } | ||
169 | |||
170 | return 0; | ||
171 | }; | ||
172 | #else | ||
173 | static int __init ts78xx_rtc_init(void) | ||
174 | { | ||
175 | return 0; | ||
176 | } | ||
177 | #endif | ||
178 | |||
179 | /***************************************************************************** | ||
180 | * SATA | ||
181 | ****************************************************************************/ | ||
182 | static struct mv_sata_platform_data ts78xx_sata_data = { | ||
183 | .n_ports = 2, | ||
184 | }; | ||
185 | |||
186 | /***************************************************************************** | ||
187 | * print some information regarding the board | ||
188 | ****************************************************************************/ | ||
189 | static void __init ts78xx_print_board_id(void) | ||
190 | { | ||
191 | unsigned int board_info; | ||
192 | |||
193 | board_info = readl(TS78XX_FPGA_REGS_SYSCON_ID); | ||
194 | printk(KERN_INFO "TS-78xx Info: FPGA rev=%.2x, Board Magic=%.6x, ", | ||
195 | board_info & 0xff, | ||
196 | (board_info >> 8) & 0xffffff); | ||
197 | board_info = readl(TS78XX_FPGA_REGS_SYSCON_LCDI); | ||
198 | printk("JP1=%d, JP2=%d\n", | ||
199 | (board_info >> 30) & 0x1, | ||
200 | (board_info >> 31) & 0x1); | ||
201 | }; | ||
202 | |||
203 | /***************************************************************************** | ||
204 | * General Setup | ||
205 | ****************************************************************************/ | ||
206 | static struct orion5x_mpp_mode ts78xx_mpp_modes[] __initdata = { | ||
207 | { 0, MPP_UNUSED }, | ||
208 | { 1, MPP_GPIO }, /* JTAG Clock */ | ||
209 | { 2, MPP_GPIO }, /* JTAG Data In */ | ||
210 | { 3, MPP_GPIO }, /* Lat ECP2 256 FPGA - PB2B */ | ||
211 | { 4, MPP_GPIO }, /* JTAG Data Out */ | ||
212 | { 5, MPP_GPIO }, /* JTAG TMS */ | ||
213 | { 6, MPP_GPIO }, /* Lat ECP2 256 FPGA - PB31A_CLK4+ */ | ||
214 | { 7, MPP_GPIO }, /* Lat ECP2 256 FPGA - PB22B */ | ||
215 | { 8, MPP_UNUSED }, | ||
216 | { 9, MPP_UNUSED }, | ||
217 | { 10, MPP_UNUSED }, | ||
218 | { 11, MPP_UNUSED }, | ||
219 | { 12, MPP_UNUSED }, | ||
220 | { 13, MPP_UNUSED }, | ||
221 | { 14, MPP_UNUSED }, | ||
222 | { 15, MPP_UNUSED }, | ||
223 | { 16, MPP_UART }, | ||
224 | { 17, MPP_UART }, | ||
225 | { 18, MPP_UART }, | ||
226 | { 19, MPP_UART }, | ||
227 | { -1 }, | ||
228 | }; | ||
229 | |||
230 | static void __init ts78xx_init(void) | ||
231 | { | ||
232 | /* | ||
233 | * Setup basic Orion functions. Need to be called early. | ||
234 | */ | ||
235 | orion5x_init(); | ||
236 | |||
237 | ts78xx_print_board_id(); | ||
238 | |||
239 | orion5x_mpp_conf(ts78xx_mpp_modes); | ||
240 | |||
241 | /* | ||
242 | * MPP[20] PCI Clock Out 1 | ||
243 | * MPP[21] PCI Clock Out 0 | ||
244 | * MPP[22] Unused | ||
245 | * MPP[23] Unused | ||
246 | * MPP[24] Unused | ||
247 | * MPP[25] Unused | ||
248 | */ | ||
249 | |||
250 | /* | ||
251 | * Configure peripherals. | ||
252 | */ | ||
253 | orion5x_ehci0_init(); | ||
254 | orion5x_ehci1_init(); | ||
255 | orion5x_eth_init(&ts78xx_eth_data); | ||
256 | orion5x_sata_init(&ts78xx_sata_data); | ||
257 | orion5x_uart0_init(); | ||
258 | orion5x_uart1_init(); | ||
259 | |||
260 | orion5x_setup_dev_boot_win(TS78XX_NOR_BOOT_BASE, | ||
261 | TS78XX_NOR_BOOT_SIZE); | ||
262 | platform_device_register(&ts78xx_nor_boot_flash); | ||
263 | |||
264 | if (!ts78xx_rtc_init()) | ||
265 | printk(KERN_INFO "TS-78xx RTC not detected or enabled\n"); | ||
266 | } | ||
267 | |||
268 | MACHINE_START(TS78XX, "Technologic Systems TS-78xx SBC") | ||
269 | /* Maintainer: Alexander Clouter <alex@digriz.org.uk> */ | ||
270 | .phys_io = ORION5X_REGS_PHYS_BASE, | ||
271 | .io_pg_offst = ((ORION5X_REGS_VIRT_BASE) >> 18) & 0xFFFC, | ||
272 | .boot_params = 0x00000100, | ||
273 | .init_machine = ts78xx_init, | ||
274 | .map_io = ts78xx_map_io, | ||
275 | .init_irq = orion5x_init_irq, | ||
276 | .timer = &orion5x_timer, | ||
277 | MACHINE_END | ||
diff --git a/arch/arm/mach-orion5x/tsx09-common.c b/arch/arm/mach-orion5x/tsx09-common.c new file mode 100644 index 000000000000..83feac3147a6 --- /dev/null +++ b/arch/arm/mach-orion5x/tsx09-common.c | |||
@@ -0,0 +1,133 @@ | |||
1 | /* | ||
2 | * QNAP TS-x09 Boards common functions | ||
3 | * | ||
4 | * Maintainers: Lennert Buytenhek <buytenh@marvell.com> | ||
5 | * Byron Bradley <byron.bbradley@gmail.com> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or | ||
8 | * modify it under the terms of the GNU General Public License | ||
9 | * as published by the Free Software Foundation; either version | ||
10 | * 2 of the License, or (at your option) any later version. | ||
11 | */ | ||
12 | |||
13 | #include <linux/kernel.h> | ||
14 | #include <linux/pci.h> | ||
15 | #include <linux/mv643xx_eth.h> | ||
16 | #include <linux/timex.h> | ||
17 | #include <linux/serial_reg.h> | ||
18 | #include "tsx09-common.h" | ||
19 | |||
20 | /***************************************************************************** | ||
21 | * QNAP TS-x09 specific power off method via UART1-attached PIC | ||
22 | ****************************************************************************/ | ||
23 | |||
24 | #define UART1_REG(x) (UART1_VIRT_BASE + ((UART_##x) << 2)) | ||
25 | |||
26 | void qnap_tsx09_power_off(void) | ||
27 | { | ||
28 | /* 19200 baud divisor */ | ||
29 | const unsigned divisor = ((ORION5X_TCLK + (8 * 19200)) / (16 * 19200)); | ||
30 | |||
31 | pr_info("%s: triggering power-off...\n", __func__); | ||
32 | |||
33 | /* hijack uart1 and reset into sane state (19200,8n1) */ | ||
34 | writel(0x83, UART1_REG(LCR)); | ||
35 | writel(divisor & 0xff, UART1_REG(DLL)); | ||
36 | writel((divisor >> 8) & 0xff, UART1_REG(DLM)); | ||
37 | writel(0x03, UART1_REG(LCR)); | ||
38 | writel(0x00, UART1_REG(IER)); | ||
39 | writel(0x00, UART1_REG(FCR)); | ||
40 | writel(0x00, UART1_REG(MCR)); | ||
41 | |||
42 | /* send the power-off command 'A' to PIC */ | ||
43 | writel('A', UART1_REG(TX)); | ||
44 | } | ||
45 | |||
46 | /***************************************************************************** | ||
47 | * Ethernet | ||
48 | ****************************************************************************/ | ||
49 | |||
50 | struct mv643xx_eth_platform_data qnap_tsx09_eth_data = { | ||
51 | .phy_addr = 8, | ||
52 | }; | ||
53 | |||
54 | static int __init qnap_tsx09_parse_hex_nibble(char n) | ||
55 | { | ||
56 | if (n >= '0' && n <= '9') | ||
57 | return n - '0'; | ||
58 | |||
59 | if (n >= 'A' && n <= 'F') | ||
60 | return n - 'A' + 10; | ||
61 | |||
62 | if (n >= 'a' && n <= 'f') | ||
63 | return n - 'a' + 10; | ||
64 | |||
65 | return -1; | ||
66 | } | ||
67 | |||
68 | static int __init qnap_tsx09_parse_hex_byte(const char *b) | ||
69 | { | ||
70 | int hi; | ||
71 | int lo; | ||
72 | |||
73 | hi = qnap_tsx09_parse_hex_nibble(b[0]); | ||
74 | lo = qnap_tsx09_parse_hex_nibble(b[1]); | ||
75 | |||
76 | if (hi < 0 || lo < 0) | ||
77 | return -1; | ||
78 | |||
79 | return (hi << 4) | lo; | ||
80 | } | ||
81 | |||
82 | static int __init qnap_tsx09_check_mac_addr(const char *addr_str) | ||
83 | { | ||
84 | u_int8_t addr[6]; | ||
85 | int i; | ||
86 | |||
87 | for (i = 0; i < 6; i++) { | ||
88 | int byte; | ||
89 | |||
90 | /* | ||
91 | * Enforce "xx:xx:xx:xx:xx:xx\n" format. | ||
92 | */ | ||
93 | if (addr_str[(i * 3) + 2] != ((i < 5) ? ':' : '\n')) | ||
94 | return -1; | ||
95 | |||
96 | byte = qnap_tsx09_parse_hex_byte(addr_str + (i * 3)); | ||
97 | if (byte < 0) | ||
98 | return -1; | ||
99 | addr[i] = byte; | ||
100 | } | ||
101 | |||
102 | printk(KERN_INFO "tsx09: found ethernet mac address "); | ||
103 | for (i = 0; i < 6; i++) | ||
104 | printk("%.2x%s", addr[i], (i < 5) ? ":" : ".\n"); | ||
105 | |||
106 | memcpy(qnap_tsx09_eth_data.mac_addr, addr, 6); | ||
107 | |||
108 | return 0; | ||
109 | } | ||
110 | |||
111 | /* | ||
112 | * The 'NAS Config' flash partition has an ext2 filesystem which | ||
113 | * contains a file that has the ethernet MAC address in plain text | ||
114 | * (format "xx:xx:xx:xx:xx:xx\n"). | ||
115 | */ | ||
116 | void __init qnap_tsx09_find_mac_addr(u32 mem_base, u32 size) | ||
117 | { | ||
118 | unsigned long addr; | ||
119 | |||
120 | for (addr = mem_base; addr < (mem_base + size); addr += 1024) { | ||
121 | char *nor_page; | ||
122 | int ret = 0; | ||
123 | |||
124 | nor_page = ioremap(addr, 1024); | ||
125 | if (nor_page != NULL) { | ||
126 | ret = qnap_tsx09_check_mac_addr(nor_page); | ||
127 | iounmap(nor_page); | ||
128 | } | ||
129 | |||
130 | if (ret == 0) | ||
131 | break; | ||
132 | } | ||
133 | } | ||
diff --git a/arch/arm/mach-orion5x/tsx09-common.h b/arch/arm/mach-orion5x/tsx09-common.h new file mode 100644 index 000000000000..0984264616f0 --- /dev/null +++ b/arch/arm/mach-orion5x/tsx09-common.h | |||
@@ -0,0 +1,20 @@ | |||
1 | #ifndef __ARCH_ORION5X_TSX09_COMMON_H | ||
2 | #define __ARCH_ORION5X_TSX09_COMMON_H | ||
3 | |||
4 | /* | ||
5 | * QNAP TS-x09 Boards power-off function | ||
6 | */ | ||
7 | extern void qnap_tsx09_power_off(void); | ||
8 | |||
9 | /* | ||
10 | * QNAP TS-x09 Boards function to find Ethernet MAC address in flash memory | ||
11 | */ | ||
12 | extern void __init qnap_tsx09_find_mac_addr(u32 mem_base, u32 size); | ||
13 | |||
14 | /* | ||
15 | * QNAP TS-x09 Boards ethernet declaration | ||
16 | */ | ||
17 | extern struct mv643xx_eth_platform_data qnap_tsx09_eth_data; | ||
18 | |||
19 | |||
20 | #endif | ||
diff --git a/arch/arm/mach-orion5x/wnr854t-setup.c b/arch/arm/mach-orion5x/wnr854t-setup.c new file mode 100644 index 000000000000..1af093ff8cf3 --- /dev/null +++ b/arch/arm/mach-orion5x/wnr854t-setup.c | |||
@@ -0,0 +1,164 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-orion5x/wnr854t-setup.c | ||
3 | * | ||
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 | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #include <linux/kernel.h> | ||
10 | #include <linux/init.h> | ||
11 | #include <linux/platform_device.h> | ||
12 | #include <linux/pci.h> | ||
13 | #include <linux/irq.h> | ||
14 | #include <linux/delay.h> | ||
15 | #include <linux/mtd/physmap.h> | ||
16 | #include <linux/mv643xx_eth.h> | ||
17 | #include <asm/mach-types.h> | ||
18 | #include <asm/gpio.h> | ||
19 | #include <asm/mach/arch.h> | ||
20 | #include <asm/mach/pci.h> | ||
21 | #include <asm/arch/orion5x.h> | ||
22 | #include "common.h" | ||
23 | #include "mpp.h" | ||
24 | |||
25 | static struct orion5x_mpp_mode wnr854t_mpp_modes[] __initdata = { | ||
26 | { 0, MPP_GPIO }, /* Power LED green (0=on) */ | ||
27 | { 1, MPP_GPIO }, /* Reset Button (0=off) */ | ||
28 | { 2, MPP_GPIO }, /* Power LED blink (0=off) */ | ||
29 | { 3, MPP_GPIO }, /* WAN Status LED amber (0=off) */ | ||
30 | { 4, MPP_GPIO }, /* PCI int */ | ||
31 | { 5, MPP_GPIO }, /* ??? */ | ||
32 | { 6, MPP_GPIO }, /* ??? */ | ||
33 | { 7, MPP_GPIO }, /* ??? */ | ||
34 | { 8, MPP_UNUSED }, /* ??? */ | ||
35 | { 9, MPP_GIGE }, /* GE_RXERR */ | ||
36 | { 10, MPP_UNUSED }, /* ??? */ | ||
37 | { 11, MPP_UNUSED }, /* ??? */ | ||
38 | { 12, MPP_GIGE }, /* GE_TXD[4] */ | ||
39 | { 13, MPP_GIGE }, /* GE_TXD[5] */ | ||
40 | { 14, MPP_GIGE }, /* GE_TXD[6] */ | ||
41 | { 15, MPP_GIGE }, /* GE_TXD[7] */ | ||
42 | { 16, MPP_GIGE }, /* GE_RXD[4] */ | ||
43 | { 17, MPP_GIGE }, /* GE_RXD[5] */ | ||
44 | { 18, MPP_GIGE }, /* GE_RXD[6] */ | ||
45 | { 19, MPP_GIGE }, /* GE_RXD[7] */ | ||
46 | { -1 }, | ||
47 | }; | ||
48 | |||
49 | /* | ||
50 | * 8M NOR flash Device bus boot chip select | ||
51 | */ | ||
52 | #define WNR854T_NOR_BOOT_BASE 0xf4000000 | ||
53 | #define WNR854T_NOR_BOOT_SIZE SZ_8M | ||
54 | |||
55 | static struct mtd_partition wnr854t_nor_flash_partitions[] = { | ||
56 | { | ||
57 | .name = "kernel", | ||
58 | .offset = 0x00000000, | ||
59 | .size = 0x00100000, | ||
60 | }, { | ||
61 | .name = "rootfs", | ||
62 | .offset = 0x00100000, | ||
63 | .size = 0x00660000, | ||
64 | }, { | ||
65 | .name = "uboot", | ||
66 | .offset = 0x00760000, | ||
67 | .size = 0x00040000, | ||
68 | }, | ||
69 | }; | ||
70 | |||
71 | static struct physmap_flash_data wnr854t_nor_flash_data = { | ||
72 | .width = 2, | ||
73 | .parts = wnr854t_nor_flash_partitions, | ||
74 | .nr_parts = ARRAY_SIZE(wnr854t_nor_flash_partitions), | ||
75 | }; | ||
76 | |||
77 | static struct resource wnr854t_nor_flash_resource = { | ||
78 | .flags = IORESOURCE_MEM, | ||
79 | .start = WNR854T_NOR_BOOT_BASE, | ||
80 | .end = WNR854T_NOR_BOOT_BASE + WNR854T_NOR_BOOT_SIZE - 1, | ||
81 | }; | ||
82 | |||
83 | static struct platform_device wnr854t_nor_flash = { | ||
84 | .name = "physmap-flash", | ||
85 | .id = 0, | ||
86 | .dev = { | ||
87 | .platform_data = &wnr854t_nor_flash_data, | ||
88 | }, | ||
89 | .num_resources = 1, | ||
90 | .resource = &wnr854t_nor_flash_resource, | ||
91 | }; | ||
92 | |||
93 | static struct mv643xx_eth_platform_data wnr854t_eth_data = { | ||
94 | .phy_addr = -1, | ||
95 | }; | ||
96 | |||
97 | static void __init wnr854t_init(void) | ||
98 | { | ||
99 | /* | ||
100 | * Setup basic Orion functions. Need to be called early. | ||
101 | */ | ||
102 | orion5x_init(); | ||
103 | |||
104 | orion5x_mpp_conf(wnr854t_mpp_modes); | ||
105 | |||
106 | /* | ||
107 | * Configure peripherals. | ||
108 | */ | ||
109 | orion5x_eth_init(&wnr854t_eth_data); | ||
110 | orion5x_uart0_init(); | ||
111 | |||
112 | orion5x_setup_dev_boot_win(WNR854T_NOR_BOOT_BASE, | ||
113 | WNR854T_NOR_BOOT_SIZE); | ||
114 | platform_device_register(&wnr854t_nor_flash); | ||
115 | } | ||
116 | |||
117 | static int __init wnr854t_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | ||
118 | { | ||
119 | int irq; | ||
120 | |||
121 | /* | ||
122 | * Check for devices with hard-wired IRQs. | ||
123 | */ | ||
124 | irq = orion5x_pci_map_irq(dev, slot, pin); | ||
125 | if (irq != -1) | ||
126 | return irq; | ||
127 | |||
128 | /* | ||
129 | * Mini-PCI slot. | ||
130 | */ | ||
131 | if (slot == 7) | ||
132 | return gpio_to_irq(4); | ||
133 | |||
134 | return -1; | ||
135 | } | ||
136 | |||
137 | static struct hw_pci wnr854t_pci __initdata = { | ||
138 | .nr_controllers = 2, | ||
139 | .swizzle = pci_std_swizzle, | ||
140 | .setup = orion5x_pci_sys_setup, | ||
141 | .scan = orion5x_pci_sys_scan_bus, | ||
142 | .map_irq = wnr854t_pci_map_irq, | ||
143 | }; | ||
144 | |||
145 | static int __init wnr854t_pci_init(void) | ||
146 | { | ||
147 | if (machine_is_wnr854t()) | ||
148 | pci_common_init(&wnr854t_pci); | ||
149 | |||
150 | return 0; | ||
151 | } | ||
152 | subsys_initcall(wnr854t_pci_init); | ||
153 | |||
154 | MACHINE_START(WNR854T, "Netgear WNR854T") | ||
155 | /* Maintainer: Imre Kaloz <kaloz@openwrt.org> */ | ||
156 | .phys_io = ORION5X_REGS_PHYS_BASE, | ||
157 | .io_pg_offst = ((ORION5X_REGS_VIRT_BASE) >> 18) & 0xFFFC, | ||
158 | .boot_params = 0x00000100, | ||
159 | .init_machine = wnr854t_init, | ||
160 | .map_io = orion5x_map_io, | ||
161 | .init_irq = orion5x_init_irq, | ||
162 | .timer = &orion5x_timer, | ||
163 | .fixup = tag_fixup_mem32, | ||
164 | MACHINE_END | ||
diff --git a/arch/arm/mach-orion5x/wrt350n-v2-setup.c b/arch/arm/mach-orion5x/wrt350n-v2-setup.c new file mode 100644 index 000000000000..aeab55c6a82d --- /dev/null +++ b/arch/arm/mach-orion5x/wrt350n-v2-setup.c | |||
@@ -0,0 +1,173 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-orion5x/wrt350n-v2-setup.c | ||
3 | * | ||
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 | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #include <linux/kernel.h> | ||
10 | #include <linux/init.h> | ||
11 | #include <linux/platform_device.h> | ||
12 | #include <linux/pci.h> | ||
13 | #include <linux/irq.h> | ||
14 | #include <linux/delay.h> | ||
15 | #include <linux/mtd/physmap.h> | ||
16 | #include <linux/mv643xx_eth.h> | ||
17 | #include <asm/mach-types.h> | ||
18 | #include <asm/gpio.h> | ||
19 | #include <asm/mach/arch.h> | ||
20 | #include <asm/mach/pci.h> | ||
21 | #include <asm/arch/orion5x.h> | ||
22 | #include "common.h" | ||
23 | #include "mpp.h" | ||
24 | |||
25 | static struct orion5x_mpp_mode wrt350n_v2_mpp_modes[] __initdata = { | ||
26 | { 0, MPP_GPIO }, /* Power LED green (0=on) */ | ||
27 | { 1, MPP_GPIO }, /* Security LED (0=on) */ | ||
28 | { 2, MPP_GPIO }, /* Internal Button (0=on) */ | ||
29 | { 3, MPP_GPIO }, /* Reset Button (0=on) */ | ||
30 | { 4, MPP_GPIO }, /* PCI int */ | ||
31 | { 5, MPP_GPIO }, /* Power LED orange (0=on) */ | ||
32 | { 6, MPP_GPIO }, /* USB LED (0=on) */ | ||
33 | { 7, MPP_GPIO }, /* Wireless LED (0=on) */ | ||
34 | { 8, MPP_UNUSED }, /* ??? */ | ||
35 | { 9, MPP_GIGE }, /* GE_RXERR */ | ||
36 | { 10, MPP_UNUSED }, /* ??? */ | ||
37 | { 11, MPP_UNUSED }, /* ??? */ | ||
38 | { 12, MPP_GIGE }, /* GE_TXD[4] */ | ||
39 | { 13, MPP_GIGE }, /* GE_TXD[5] */ | ||
40 | { 14, MPP_GIGE }, /* GE_TXD[6] */ | ||
41 | { 15, MPP_GIGE }, /* GE_TXD[7] */ | ||
42 | { 16, MPP_GIGE }, /* GE_RXD[4] */ | ||
43 | { 17, MPP_GIGE }, /* GE_RXD[5] */ | ||
44 | { 18, MPP_GIGE }, /* GE_RXD[6] */ | ||
45 | { 19, MPP_GIGE }, /* GE_RXD[7] */ | ||
46 | { -1 }, | ||
47 | }; | ||
48 | |||
49 | /* | ||
50 | * 8M NOR flash Device bus boot chip select | ||
51 | */ | ||
52 | #define WRT350N_V2_NOR_BOOT_BASE 0xf4000000 | ||
53 | #define WRT350N_V2_NOR_BOOT_SIZE SZ_8M | ||
54 | |||
55 | static struct mtd_partition wrt350n_v2_nor_flash_partitions[] = { | ||
56 | { | ||
57 | .name = "kernel", | ||
58 | .offset = 0x00000000, | ||
59 | .size = 0x00760000, | ||
60 | }, { | ||
61 | .name = "rootfs", | ||
62 | .offset = 0x001a0000, | ||
63 | .size = 0x005c0000, | ||
64 | }, { | ||
65 | .name = "lang", | ||
66 | .offset = 0x00760000, | ||
67 | .size = 0x00040000, | ||
68 | }, { | ||
69 | .name = "nvram", | ||
70 | .offset = 0x007a0000, | ||
71 | .size = 0x00020000, | ||
72 | }, { | ||
73 | .name = "u-boot", | ||
74 | .offset = 0x007c0000, | ||
75 | .size = 0x00040000, | ||
76 | }, | ||
77 | }; | ||
78 | |||
79 | static struct physmap_flash_data wrt350n_v2_nor_flash_data = { | ||
80 | .width = 1, | ||
81 | .parts = wrt350n_v2_nor_flash_partitions, | ||
82 | .nr_parts = ARRAY_SIZE(wrt350n_v2_nor_flash_partitions), | ||
83 | }; | ||
84 | |||
85 | static struct resource wrt350n_v2_nor_flash_resource = { | ||
86 | .flags = IORESOURCE_MEM, | ||
87 | .start = WRT350N_V2_NOR_BOOT_BASE, | ||
88 | .end = WRT350N_V2_NOR_BOOT_BASE + WRT350N_V2_NOR_BOOT_SIZE - 1, | ||
89 | }; | ||
90 | |||
91 | static struct platform_device wrt350n_v2_nor_flash = { | ||
92 | .name = "physmap-flash", | ||
93 | .id = 0, | ||
94 | .dev = { | ||
95 | .platform_data = &wrt350n_v2_nor_flash_data, | ||
96 | }, | ||
97 | .num_resources = 1, | ||
98 | .resource = &wrt350n_v2_nor_flash_resource, | ||
99 | }; | ||
100 | |||
101 | static struct mv643xx_eth_platform_data wrt350n_v2_eth_data = { | ||
102 | .phy_addr = -1, | ||
103 | }; | ||
104 | |||
105 | static void __init wrt350n_v2_init(void) | ||
106 | { | ||
107 | /* | ||
108 | * Setup basic Orion functions. Need to be called early. | ||
109 | */ | ||
110 | orion5x_init(); | ||
111 | |||
112 | orion5x_mpp_conf(wrt350n_v2_mpp_modes); | ||
113 | |||
114 | /* | ||
115 | * Configure peripherals. | ||
116 | */ | ||
117 | orion5x_ehci0_init(); | ||
118 | orion5x_eth_init(&wrt350n_v2_eth_data); | ||
119 | orion5x_uart0_init(); | ||
120 | |||
121 | orion5x_setup_dev_boot_win(WRT350N_V2_NOR_BOOT_BASE, | ||
122 | WRT350N_V2_NOR_BOOT_SIZE); | ||
123 | platform_device_register(&wrt350n_v2_nor_flash); | ||
124 | } | ||
125 | |||
126 | static int __init wrt350n_v2_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | ||
127 | { | ||
128 | int irq; | ||
129 | |||
130 | /* | ||
131 | * Check for devices with hard-wired IRQs. | ||
132 | */ | ||
133 | irq = orion5x_pci_map_irq(dev, slot, pin); | ||
134 | if (irq != -1) | ||
135 | return irq; | ||
136 | |||
137 | /* | ||
138 | * Mini-PCI slot. | ||
139 | */ | ||
140 | if (slot == 7) | ||
141 | return gpio_to_irq(4); | ||
142 | |||
143 | return -1; | ||
144 | } | ||
145 | |||
146 | static struct hw_pci wrt350n_v2_pci __initdata = { | ||
147 | .nr_controllers = 2, | ||
148 | .swizzle = pci_std_swizzle, | ||
149 | .setup = orion5x_pci_sys_setup, | ||
150 | .scan = orion5x_pci_sys_scan_bus, | ||
151 | .map_irq = wrt350n_v2_pci_map_irq, | ||
152 | }; | ||
153 | |||
154 | static int __init wrt350n_v2_pci_init(void) | ||
155 | { | ||
156 | if (machine_is_wrt350n_v2()) | ||
157 | pci_common_init(&wrt350n_v2_pci); | ||
158 | |||
159 | return 0; | ||
160 | } | ||
161 | subsys_initcall(wrt350n_v2_pci_init); | ||
162 | |||
163 | MACHINE_START(WRT350N_V2, "Linksys WRT350N v2") | ||
164 | /* Maintainer: Lennert Buytenhek <buytenh@marvell.com> */ | ||
165 | .phys_io = ORION5X_REGS_PHYS_BASE, | ||
166 | .io_pg_offst = ((ORION5X_REGS_VIRT_BASE) >> 18) & 0xFFFC, | ||
167 | .boot_params = 0x00000100, | ||
168 | .init_machine = wrt350n_v2_init, | ||
169 | .map_io = orion5x_map_io, | ||
170 | .init_irq = orion5x_init_irq, | ||
171 | .timer = &orion5x_timer, | ||
172 | .fixup = tag_fixup_mem32, | ||
173 | MACHINE_END | ||
diff --git a/arch/arm/mach-s3c2410/Kconfig b/arch/arm/mach-s3c2410/Kconfig index cd3dc0834b3b..99fdc736698c 100644 --- a/arch/arm/mach-s3c2410/Kconfig +++ b/arch/arm/mach-s3c2410/Kconfig | |||
@@ -37,6 +37,17 @@ config S3C2410_CLOCK | |||
37 | help | 37 | help |
38 | Clock code for the S3C2410, and similar processors | 38 | Clock code for the S3C2410, and similar processors |
39 | 39 | ||
40 | config SIMTEC_NOR | ||
41 | bool | ||
42 | help | ||
43 | Internal node to specify machine has simtec NOR mapping | ||
44 | |||
45 | config MACH_BAST_IDE | ||
46 | bool | ||
47 | select HAVE_PATA_PLATFORM | ||
48 | help | ||
49 | Internal node for machines with an BAST style IDE | ||
50 | interface | ||
40 | 51 | ||
41 | menu "S3C2410 Machines" | 52 | menu "S3C2410 Machines" |
42 | 53 | ||
@@ -61,15 +72,18 @@ config PM_H1940 | |||
61 | Internal node for H1940 and related PM | 72 | Internal node for H1940 and related PM |
62 | 73 | ||
63 | config MACH_N30 | 74 | config MACH_N30 |
64 | bool "Acer N30" | 75 | bool "Acer N30 family" |
65 | select CPU_S3C2410 | 76 | select CPU_S3C2410 |
66 | help | 77 | help |
67 | Say Y here if you are using the Acer N30 | 78 | Say Y here if you want suppt for the Acer N30, Acer N35, |
79 | Navman PiN570, Yakumo AlphaX or Airis NC05 PDAs. | ||
68 | 80 | ||
69 | config ARCH_BAST | 81 | config ARCH_BAST |
70 | bool "Simtec Electronics BAST (EB2410ITX)" | 82 | bool "Simtec Electronics BAST (EB2410ITX)" |
71 | select CPU_S3C2410 | 83 | select CPU_S3C2410 |
72 | select PM_SIMTEC if PM | 84 | select PM_SIMTEC if PM |
85 | select SIMTEC_NOR | ||
86 | select MACH_BAST_IDE | ||
73 | select ISA | 87 | select ISA |
74 | help | 88 | help |
75 | Say Y here if you are using the Simtec Electronics EB2410ITX | 89 | Say Y here if you are using the Simtec Electronics EB2410ITX |
@@ -107,6 +121,8 @@ config MACH_TCT_HAMMER | |||
107 | config MACH_VR1000 | 121 | config MACH_VR1000 |
108 | bool "Thorcom VR1000" | 122 | bool "Thorcom VR1000" |
109 | select PM_SIMTEC if PM | 123 | select PM_SIMTEC if PM |
124 | select SIMTEC_NOR | ||
125 | select MACH_BAST_IDE | ||
110 | select CPU_S3C2410 | 126 | select CPU_S3C2410 |
111 | help | 127 | help |
112 | Say Y here if you are using the Thorcom VR1000 board. | 128 | Say Y here if you are using the Thorcom VR1000 board. |
@@ -118,4 +134,3 @@ config MACH_QT2410 | |||
118 | Say Y here if you are using the Armzone QT2410 | 134 | Say Y here if you are using the Armzone QT2410 |
119 | 135 | ||
120 | endmenu | 136 | endmenu |
121 | |||
diff --git a/arch/arm/mach-s3c2410/Makefile b/arch/arm/mach-s3c2410/Makefile index cabc13ce09e4..00f31f8c4e78 100644 --- a/arch/arm/mach-s3c2410/Makefile +++ b/arch/arm/mach-s3c2410/Makefile | |||
@@ -30,3 +30,11 @@ obj-$(CONFIG_BAST_PC104_IRQ) += bast-irq.o | |||
30 | obj-$(CONFIG_MACH_TCT_HAMMER) += mach-tct_hammer.o | 30 | obj-$(CONFIG_MACH_TCT_HAMMER) += mach-tct_hammer.o |
31 | obj-$(CONFIG_MACH_VR1000) += mach-vr1000.o usb-simtec.o | 31 | obj-$(CONFIG_MACH_VR1000) += mach-vr1000.o usb-simtec.o |
32 | obj-$(CONFIG_MACH_QT2410) += mach-qt2410.o | 32 | obj-$(CONFIG_MACH_QT2410) += mach-qt2410.o |
33 | |||
34 | # Common bits of machine support | ||
35 | |||
36 | obj-$(CONFIG_SIMTEC_NOR) += nor-simtec.o | ||
37 | |||
38 | # machine additions | ||
39 | |||
40 | obj-$(CONFIG_MACH_BAST_IDE) += bast-ide.o | ||
diff --git a/arch/arm/mach-s3c2410/bast-ide.c b/arch/arm/mach-s3c2410/bast-ide.c new file mode 100644 index 000000000000..df95fe37cdc8 --- /dev/null +++ b/arch/arm/mach-s3c2410/bast-ide.c | |||
@@ -0,0 +1,112 @@ | |||
1 | /* linux/arch/arm/mach-s3c2410/bast-ide.c | ||
2 | * | ||
3 | * Copyright 2007 Simtec Electronics | ||
4 | * http://www.simtec.co.uk/products/EB2410ITX/ | ||
5 | * http://armlinux.simtec.co.uk/ | ||
6 | * Ben Dooks <ben@simtec.co.uk> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #include <linux/kernel.h> | ||
14 | #include <linux/types.h> | ||
15 | #include <linux/init.h> | ||
16 | #include <linux/interrupt.h> | ||
17 | |||
18 | #include <linux/platform_device.h> | ||
19 | #include <linux/ata_platform.h> | ||
20 | |||
21 | #include <asm/mach-types.h> | ||
22 | |||
23 | #include <asm/mach/arch.h> | ||
24 | #include <asm/mach/map.h> | ||
25 | #include <asm/mach/irq.h> | ||
26 | |||
27 | #include <asm/arch/map.h> | ||
28 | #include <asm/arch/bast-map.h> | ||
29 | #include <asm/arch/bast-irq.h> | ||
30 | |||
31 | /* IDE ports */ | ||
32 | |||
33 | static struct pata_platform_info bast_ide_platdata = { | ||
34 | .ioport_shift = 5, | ||
35 | }; | ||
36 | |||
37 | #define IDE_CS S3C2410_CS5 | ||
38 | |||
39 | static struct resource bast_ide0_resource[] = { | ||
40 | [0] = { | ||
41 | .start = IDE_CS + BAST_PA_IDEPRI, | ||
42 | .end = IDE_CS + BAST_PA_IDEPRI + (8 * 0x20) - 1, | ||
43 | .flags = IORESOURCE_MEM, | ||
44 | }, | ||
45 | [1] = { | ||
46 | .start = IDE_CS + BAST_PA_IDEPRIAUX + (6 * 0x20) , | ||
47 | .end = IDE_CS + BAST_PA_IDEPRIAUX + (7 * 0x20) - 1, | ||
48 | .flags = IORESOURCE_MEM, | ||
49 | }, | ||
50 | [2] = { | ||
51 | .start = IRQ_IDE0, | ||
52 | .end = IRQ_IDE0, | ||
53 | .flags = IORESOURCE_IRQ, | ||
54 | }, | ||
55 | }; | ||
56 | |||
57 | static struct platform_device bast_device_ide0 = { | ||
58 | .name = "pata_platform", | ||
59 | .id = 0, | ||
60 | .num_resources = ARRAY_SIZE(bast_ide0_resource), | ||
61 | .resource = bast_ide0_resource, | ||
62 | .dev = { | ||
63 | .platform_data = &bast_ide_platdata, | ||
64 | .coherent_dma_mask = ~0, | ||
65 | } | ||
66 | |||
67 | }; | ||
68 | |||
69 | static struct resource bast_ide1_resource[] = { | ||
70 | [0] = { | ||
71 | .start = IDE_CS + BAST_PA_IDESEC, | ||
72 | .end = IDE_CS + BAST_PA_IDESEC + (8 * 0x20) - 1, | ||
73 | .flags = IORESOURCE_MEM, | ||
74 | }, | ||
75 | [1] = { | ||
76 | .start = IDE_CS + BAST_PA_IDESECAUX + (6 * 0x20), | ||
77 | .end = IDE_CS + BAST_PA_IDESECAUX + (7 * 0x20) - 1, | ||
78 | .flags = IORESOURCE_MEM, | ||
79 | }, | ||
80 | [2] = { | ||
81 | .start = IRQ_IDE1, | ||
82 | .end = IRQ_IDE1, | ||
83 | .flags = IORESOURCE_IRQ, | ||
84 | }, | ||
85 | }; | ||
86 | |||
87 | static struct platform_device bast_device_ide1 = { | ||
88 | .name = "pata_platform", | ||
89 | .id = 1, | ||
90 | .num_resources = ARRAY_SIZE(bast_ide1_resource), | ||
91 | .resource = bast_ide1_resource, | ||
92 | .dev = { | ||
93 | .platform_data = &bast_ide_platdata, | ||
94 | .coherent_dma_mask = ~0, | ||
95 | } | ||
96 | }; | ||
97 | |||
98 | static struct platform_device *bast_ide_devices[] __initdata = { | ||
99 | &bast_device_ide0, | ||
100 | &bast_device_ide1, | ||
101 | }; | ||
102 | |||
103 | static __init int bast_ide_init(void) | ||
104 | { | ||
105 | if (machine_is_bast() || machine_is_vr1000()) | ||
106 | return platform_add_devices(bast_ide_devices, | ||
107 | ARRAY_SIZE(bast_ide_devices)); | ||
108 | |||
109 | return 0; | ||
110 | } | ||
111 | |||
112 | fs_initcall(bast_ide_init); | ||
diff --git a/arch/arm/mach-s3c2410/mach-bast.c b/arch/arm/mach-s3c2410/mach-bast.c index 27f63d5d3a7b..965f27129707 100644 --- a/arch/arm/mach-s3c2410/mach-bast.c +++ b/arch/arm/mach-s3c2410/mach-bast.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* linux/arch/arm/mach-s3c2410/mach-bast.c | 1 | /* linux/arch/arm/mach-s3c2410/mach-bast.c |
2 | * | 2 | * |
3 | * Copyright (c) 2003-2005 Simtec Electronics | 3 | * Copyright (c) 2003-2005,2008 Simtec Electronics |
4 | * Ben Dooks <ben@simtec.co.uk> | 4 | * Ben Dooks <ben@simtec.co.uk> |
5 | * | 5 | * |
6 | * http://www.simtec.co.uk/products/EB2410ITX/ | 6 | * http://www.simtec.co.uk/products/EB2410ITX/ |
@@ -20,6 +20,8 @@ | |||
20 | #include <linux/serial_core.h> | 20 | #include <linux/serial_core.h> |
21 | #include <linux/platform_device.h> | 21 | #include <linux/platform_device.h> |
22 | #include <linux/dm9000.h> | 22 | #include <linux/dm9000.h> |
23 | #include <linux/ata_platform.h> | ||
24 | #include <linux/i2c.h> | ||
23 | 25 | ||
24 | #include <net/ax88796.h> | 26 | #include <net/ax88796.h> |
25 | 27 | ||
@@ -56,7 +58,9 @@ | |||
56 | #include <asm/plat-s3c24xx/clock.h> | 58 | #include <asm/plat-s3c24xx/clock.h> |
57 | #include <asm/plat-s3c24xx/devs.h> | 59 | #include <asm/plat-s3c24xx/devs.h> |
58 | #include <asm/plat-s3c24xx/cpu.h> | 60 | #include <asm/plat-s3c24xx/cpu.h> |
61 | |||
59 | #include "usb-simtec.h" | 62 | #include "usb-simtec.h" |
63 | #include "nor-simtec.h" | ||
60 | 64 | ||
61 | #define COPYRIGHT ", (c) 2004-2005 Simtec Electronics" | 65 | #define COPYRIGHT ", (c) 2004-2005 Simtec Electronics" |
62 | 66 | ||
@@ -134,37 +138,21 @@ static struct map_desc bast_iodesc[] __initdata = { | |||
134 | { VA_C2(BAST_VA_ISAIO), PA_CS2(BAST_PA_ISAIO), SZ_16M, MT_DEVICE }, | 138 | { VA_C2(BAST_VA_ISAIO), PA_CS2(BAST_PA_ISAIO), SZ_16M, MT_DEVICE }, |
135 | { VA_C2(BAST_VA_ISAMEM), PA_CS2(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE }, | 139 | { VA_C2(BAST_VA_ISAMEM), PA_CS2(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE }, |
136 | { VA_C2(BAST_VA_SUPERIO), PA_CS2(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE }, | 140 | { VA_C2(BAST_VA_SUPERIO), PA_CS2(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE }, |
137 | { VA_C2(BAST_VA_IDEPRI), PA_CS3(BAST_PA_IDEPRI), SZ_1M, MT_DEVICE }, | ||
138 | { VA_C2(BAST_VA_IDESEC), PA_CS3(BAST_PA_IDESEC), SZ_1M, MT_DEVICE }, | ||
139 | { VA_C2(BAST_VA_IDEPRIAUX), PA_CS3(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, | ||
140 | { VA_C2(BAST_VA_IDESECAUX), PA_CS3(BAST_PA_IDESECAUX), SZ_1M, MT_DEVICE }, | ||
141 | 141 | ||
142 | /* slow, word */ | 142 | /* slow, word */ |
143 | { VA_C3(BAST_VA_ISAIO), PA_CS3(BAST_PA_ISAIO), SZ_16M, MT_DEVICE }, | 143 | { VA_C3(BAST_VA_ISAIO), PA_CS3(BAST_PA_ISAIO), SZ_16M, MT_DEVICE }, |
144 | { VA_C3(BAST_VA_ISAMEM), PA_CS3(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE }, | 144 | { VA_C3(BAST_VA_ISAMEM), PA_CS3(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE }, |
145 | { VA_C3(BAST_VA_SUPERIO), PA_CS3(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE }, | 145 | { VA_C3(BAST_VA_SUPERIO), PA_CS3(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE }, |
146 | { VA_C3(BAST_VA_IDEPRI), PA_CS3(BAST_PA_IDEPRI), SZ_1M, MT_DEVICE }, | ||
147 | { VA_C3(BAST_VA_IDESEC), PA_CS3(BAST_PA_IDESEC), SZ_1M, MT_DEVICE }, | ||
148 | { VA_C3(BAST_VA_IDEPRIAUX), PA_CS3(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, | ||
149 | { VA_C3(BAST_VA_IDESECAUX), PA_CS3(BAST_PA_IDESECAUX), SZ_1M, MT_DEVICE }, | ||
150 | 146 | ||
151 | /* fast, byte */ | 147 | /* fast, byte */ |
152 | { VA_C4(BAST_VA_ISAIO), PA_CS4(BAST_PA_ISAIO), SZ_16M, MT_DEVICE }, | 148 | { VA_C4(BAST_VA_ISAIO), PA_CS4(BAST_PA_ISAIO), SZ_16M, MT_DEVICE }, |
153 | { VA_C4(BAST_VA_ISAMEM), PA_CS4(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE }, | 149 | { VA_C4(BAST_VA_ISAMEM), PA_CS4(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE }, |
154 | { VA_C4(BAST_VA_SUPERIO), PA_CS4(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE }, | 150 | { VA_C4(BAST_VA_SUPERIO), PA_CS4(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE }, |
155 | { VA_C4(BAST_VA_IDEPRI), PA_CS5(BAST_PA_IDEPRI), SZ_1M, MT_DEVICE }, | ||
156 | { VA_C4(BAST_VA_IDESEC), PA_CS5(BAST_PA_IDESEC), SZ_1M, MT_DEVICE }, | ||
157 | { VA_C4(BAST_VA_IDEPRIAUX), PA_CS5(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, | ||
158 | { VA_C4(BAST_VA_IDESECAUX), PA_CS5(BAST_PA_IDESECAUX), SZ_1M, MT_DEVICE }, | ||
159 | 151 | ||
160 | /* fast, word */ | 152 | /* fast, word */ |
161 | { VA_C5(BAST_VA_ISAIO), PA_CS5(BAST_PA_ISAIO), SZ_16M, MT_DEVICE }, | 153 | { VA_C5(BAST_VA_ISAIO), PA_CS5(BAST_PA_ISAIO), SZ_16M, MT_DEVICE }, |
162 | { VA_C5(BAST_VA_ISAMEM), PA_CS5(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE }, | 154 | { VA_C5(BAST_VA_ISAMEM), PA_CS5(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE }, |
163 | { VA_C5(BAST_VA_SUPERIO), PA_CS5(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE }, | 155 | { VA_C5(BAST_VA_SUPERIO), PA_CS5(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE }, |
164 | { VA_C5(BAST_VA_IDEPRI), PA_CS5(BAST_PA_IDEPRI), SZ_1M, MT_DEVICE }, | ||
165 | { VA_C5(BAST_VA_IDESEC), PA_CS5(BAST_PA_IDESEC), SZ_1M, MT_DEVICE }, | ||
166 | { VA_C5(BAST_VA_IDEPRIAUX), PA_CS5(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, | ||
167 | { VA_C5(BAST_VA_IDESECAUX), PA_CS5(BAST_PA_IDESECAUX), SZ_1M, MT_DEVICE }, | ||
168 | }; | 156 | }; |
169 | 157 | ||
170 | #define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK | 158 | #define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK |
@@ -218,23 +206,6 @@ static struct s3c2410_uartcfg bast_uartcfgs[] __initdata = { | |||
218 | } | 206 | } |
219 | }; | 207 | }; |
220 | 208 | ||
221 | /* NOR Flash on BAST board */ | ||
222 | |||
223 | static struct resource bast_nor_resource[] = { | ||
224 | [0] = { | ||
225 | .start = S3C2410_CS1 + 0x4000000, | ||
226 | .end = S3C2410_CS1 + 0x4000000 + (32*1024*1024) - 1, | ||
227 | .flags = IORESOURCE_MEM, | ||
228 | } | ||
229 | }; | ||
230 | |||
231 | static struct platform_device bast_device_nor = { | ||
232 | .name = "bast-nor", | ||
233 | .id = -1, | ||
234 | .num_resources = ARRAY_SIZE(bast_nor_resource), | ||
235 | .resource = bast_nor_resource, | ||
236 | }; | ||
237 | |||
238 | /* NAND Flash on BAST board */ | 209 | /* NAND Flash on BAST board */ |
239 | 210 | ||
240 | #ifdef CONFIG_PM | 211 | #ifdef CONFIG_PM |
@@ -374,7 +345,7 @@ static struct resource bast_dm9k_resource[] = { | |||
374 | [2] = { | 345 | [2] = { |
375 | .start = IRQ_DM9000, | 346 | .start = IRQ_DM9000, |
376 | .end = IRQ_DM9000, | 347 | .end = IRQ_DM9000, |
377 | .flags = IORESOURCE_IRQ | IRQF_TRIGGER_HIGH, | 348 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, |
378 | } | 349 | } |
379 | 350 | ||
380 | }; | 351 | }; |
@@ -564,6 +535,18 @@ static struct s3c2410fb_mach_info __initdata bast_fb_info = { | |||
564 | .default_display = 1, | 535 | .default_display = 1, |
565 | }; | 536 | }; |
566 | 537 | ||
538 | /* I2C devices fitted. */ | ||
539 | |||
540 | static struct i2c_board_info bast_i2c_devs[] __initdata = { | ||
541 | { | ||
542 | I2C_BOARD_INFO("tlv320aic23", 0x1a), | ||
543 | }, { | ||
544 | I2C_BOARD_INFO("simtec-pmu", 0x6b), | ||
545 | }, { | ||
546 | I2C_BOARD_INFO("ch7013", 0x75), | ||
547 | }, | ||
548 | }; | ||
549 | |||
567 | /* Standard BAST devices */ | 550 | /* Standard BAST devices */ |
568 | 551 | ||
569 | static struct platform_device *bast_devices[] __initdata = { | 552 | static struct platform_device *bast_devices[] __initdata = { |
@@ -573,7 +556,6 @@ static struct platform_device *bast_devices[] __initdata = { | |||
573 | &s3c_device_i2c, | 556 | &s3c_device_i2c, |
574 | &s3c_device_rtc, | 557 | &s3c_device_rtc, |
575 | &s3c_device_nand, | 558 | &s3c_device_nand, |
576 | &bast_device_nor, | ||
577 | &bast_device_dm9k, | 559 | &bast_device_dm9k, |
578 | &bast_device_asix, | 560 | &bast_device_asix, |
579 | &bast_device_axpp, | 561 | &bast_device_axpp, |
@@ -622,6 +604,11 @@ static void __init bast_init(void) | |||
622 | 604 | ||
623 | s3c24xx_fb_set_platdata(&bast_fb_info); | 605 | s3c24xx_fb_set_platdata(&bast_fb_info); |
624 | platform_add_devices(bast_devices, ARRAY_SIZE(bast_devices)); | 606 | platform_add_devices(bast_devices, ARRAY_SIZE(bast_devices)); |
607 | |||
608 | i2c_register_board_info(0, bast_i2c_devs, | ||
609 | ARRAY_SIZE(bast_i2c_devs)); | ||
610 | |||
611 | nor_simtec_init(); | ||
625 | } | 612 | } |
626 | 613 | ||
627 | MACHINE_START(BAST, "Simtec-BAST") | 614 | MACHINE_START(BAST, "Simtec-BAST") |
diff --git a/arch/arm/mach-s3c2410/mach-n30.c b/arch/arm/mach-s3c2410/mach-n30.c index 621f548da610..43c2e915c5bf 100644 --- a/arch/arm/mach-s3c2410/mach-n30.c +++ b/arch/arm/mach-s3c2410/mach-n30.c | |||
@@ -1,9 +1,10 @@ | |||
1 | /* linux/arch/arm/mach-s3c2410/mach-n30.c | 1 | /* Machine specific code for the Acer n30, Acer N35, Navman PiN 570, |
2 | * Yakumo AlphaX and Airis NC05 PDAs. | ||
2 | * | 3 | * |
3 | * Copyright (c) 2003-2005 Simtec Electronics | 4 | * Copyright (c) 2003-2005 Simtec Electronics |
4 | * Ben Dooks <ben@simtec.co.uk> | 5 | * Ben Dooks <ben@simtec.co.uk> |
5 | * | 6 | * |
6 | * Copyright (c) 2005 Christer Weinigel <christer@weinigel.se> | 7 | * Copyright (c) 2005-2008 Christer Weinigel <christer@weinigel.se> |
7 | * | 8 | * |
8 | * There is a wiki with more information about the n30 port at | 9 | * There is a wiki with more information about the n30 port at |
9 | * http://handhelds.org/moin/moin.cgi/AcerN30Documentation . | 10 | * http://handhelds.org/moin/moin.cgi/AcerN30Documentation . |
@@ -11,36 +12,42 @@ | |||
11 | * This program is free software; you can redistribute it and/or modify | 12 | * This program is free software; you can redistribute it and/or modify |
12 | * it under the terms of the GNU General Public License version 2 as | 13 | * it under the terms of the GNU General Public License version 2 as |
13 | * published by the Free Software Foundation. | 14 | * published by the Free Software Foundation. |
14 | */ | 15 | */ |
15 | 16 | ||
16 | #include <linux/kernel.h> | 17 | #include <linux/kernel.h> |
17 | #include <linux/types.h> | 18 | #include <linux/types.h> |
18 | #include <linux/interrupt.h> | 19 | |
19 | #include <linux/list.h> | ||
20 | #include <linux/timer.h> | ||
21 | #include <linux/init.h> | ||
22 | #include <linux/delay.h> | 20 | #include <linux/delay.h> |
23 | #include <linux/serial_core.h> | 21 | #include <linux/gpio_keys.h> |
22 | #include <linux/init.h> | ||
23 | #include <linux/input.h> | ||
24 | #include <linux/interrupt.h> | ||
24 | #include <linux/platform_device.h> | 25 | #include <linux/platform_device.h> |
25 | #include <linux/kthread.h> | 26 | #include <linux/serial_core.h> |
26 | 27 | #include <linux/timer.h> | |
27 | #include <asm/mach/arch.h> | ||
28 | #include <asm/mach/map.h> | ||
29 | #include <asm/mach/irq.h> | ||
30 | 28 | ||
31 | #include <asm/hardware.h> | 29 | #include <asm/hardware.h> |
32 | #include <asm/io.h> | 30 | #include <asm/io.h> |
33 | #include <asm/irq.h> | 31 | #include <asm/irq.h> |
34 | #include <asm/mach-types.h> | 32 | #include <asm/mach-types.h> |
35 | 33 | ||
36 | #include <asm/plat-s3c/regs-serial.h> | 34 | #include <asm/arch/fb.h> |
35 | #include <asm/arch/leds-gpio.h> | ||
37 | #include <asm/arch/regs-gpio.h> | 36 | #include <asm/arch/regs-gpio.h> |
37 | #include <asm/arch/regs-lcd.h> | ||
38 | |||
39 | #include <asm/mach/arch.h> | ||
40 | #include <asm/mach/irq.h> | ||
41 | #include <asm/mach/map.h> | ||
42 | |||
38 | #include <asm/plat-s3c/iic.h> | 43 | #include <asm/plat-s3c/iic.h> |
44 | #include <asm/plat-s3c/regs-serial.h> | ||
39 | 45 | ||
40 | #include <asm/plat-s3c24xx/s3c2410.h> | ||
41 | #include <asm/plat-s3c24xx/clock.h> | 46 | #include <asm/plat-s3c24xx/clock.h> |
42 | #include <asm/plat-s3c24xx/devs.h> | ||
43 | #include <asm/plat-s3c24xx/cpu.h> | 47 | #include <asm/plat-s3c24xx/cpu.h> |
48 | #include <asm/plat-s3c24xx/devs.h> | ||
49 | #include <asm/plat-s3c24xx/s3c2410.h> | ||
50 | #include <asm/plat-s3c24xx/udc.h> | ||
44 | 51 | ||
45 | static struct map_desc n30_iodesc[] __initdata = { | 52 | static struct map_desc n30_iodesc[] __initdata = { |
46 | /* nothing here yet */ | 53 | /* nothing here yet */ |
@@ -64,7 +71,8 @@ static struct s3c2410_uartcfg n30_uartcfgs[] = { | |||
64 | .ulcon = 0x43, | 71 | .ulcon = 0x43, |
65 | .ufcon = 0x51, | 72 | .ufcon = 0x51, |
66 | }, | 73 | }, |
67 | /* The BlueTooth controller is connected to port 2 */ | 74 | /* On the N30 the bluetooth controller is connected here. |
75 | * On the N35 and variants the GPS receiver is connected here. */ | ||
68 | [2] = { | 76 | [2] = { |
69 | .hwport = 2, | 77 | .hwport = 2, |
70 | .flags = 0, | 78 | .flags = 0, |
@@ -74,13 +82,260 @@ static struct s3c2410_uartcfg n30_uartcfgs[] = { | |||
74 | }, | 82 | }, |
75 | }; | 83 | }; |
76 | 84 | ||
85 | static void n30_udc_pullup(enum s3c2410_udc_cmd_e cmd) | ||
86 | { | ||
87 | switch (cmd) { | ||
88 | case S3C2410_UDC_P_ENABLE : | ||
89 | s3c2410_gpio_setpin(S3C2410_GPB3, 1); | ||
90 | break; | ||
91 | case S3C2410_UDC_P_DISABLE : | ||
92 | s3c2410_gpio_setpin(S3C2410_GPB3, 0); | ||
93 | break; | ||
94 | case S3C2410_UDC_P_RESET : | ||
95 | break; | ||
96 | default: | ||
97 | break; | ||
98 | } | ||
99 | } | ||
100 | |||
101 | static struct s3c2410_udc_mach_info n30_udc_cfg __initdata = { | ||
102 | .udc_command = n30_udc_pullup, | ||
103 | .vbus_pin = S3C2410_GPG1, | ||
104 | .vbus_pin_inverted = 0, | ||
105 | }; | ||
106 | |||
107 | static struct gpio_keys_button n30_buttons[] = { | ||
108 | { | ||
109 | .gpio = S3C2410_GPF0, | ||
110 | .code = KEY_POWER, | ||
111 | .desc = "Power", | ||
112 | .active_low = 0, | ||
113 | }, | ||
114 | { | ||
115 | .gpio = S3C2410_GPG9, | ||
116 | .code = KEY_UP, | ||
117 | .desc = "Thumbwheel Up", | ||
118 | .active_low = 0, | ||
119 | }, | ||
120 | { | ||
121 | .gpio = S3C2410_GPG8, | ||
122 | .code = KEY_DOWN, | ||
123 | .desc = "Thumbwheel Down", | ||
124 | .active_low = 0, | ||
125 | }, | ||
126 | { | ||
127 | .gpio = S3C2410_GPG7, | ||
128 | .code = KEY_ENTER, | ||
129 | .desc = "Thumbwheel Press", | ||
130 | .active_low = 0, | ||
131 | }, | ||
132 | { | ||
133 | .gpio = S3C2410_GPF7, | ||
134 | .code = KEY_HOMEPAGE, | ||
135 | .desc = "Home", | ||
136 | .active_low = 0, | ||
137 | }, | ||
138 | { | ||
139 | .gpio = S3C2410_GPF6, | ||
140 | .code = KEY_CALENDAR, | ||
141 | .desc = "Calendar", | ||
142 | .active_low = 0, | ||
143 | }, | ||
144 | { | ||
145 | .gpio = S3C2410_GPF5, | ||
146 | .code = KEY_ADDRESSBOOK, | ||
147 | .desc = "Contacts", | ||
148 | .active_low = 0, | ||
149 | }, | ||
150 | { | ||
151 | .gpio = S3C2410_GPF4, | ||
152 | .code = KEY_MAIL, | ||
153 | .desc = "Mail", | ||
154 | .active_low = 0, | ||
155 | }, | ||
156 | }; | ||
157 | |||
158 | static struct gpio_keys_platform_data n30_button_data = { | ||
159 | .buttons = n30_buttons, | ||
160 | .nbuttons = ARRAY_SIZE(n30_buttons), | ||
161 | }; | ||
162 | |||
163 | static struct platform_device n30_button_device = { | ||
164 | .name = "gpio-keys", | ||
165 | .id = -1, | ||
166 | .dev = { | ||
167 | .platform_data = &n30_button_data, | ||
168 | } | ||
169 | }; | ||
170 | |||
171 | static struct gpio_keys_button n35_buttons[] = { | ||
172 | { | ||
173 | .gpio = S3C2410_GPF0, | ||
174 | .code = KEY_POWER, | ||
175 | .desc = "Power", | ||
176 | .active_low = 0, | ||
177 | }, | ||
178 | { | ||
179 | .gpio = S3C2410_GPG9, | ||
180 | .code = KEY_UP, | ||
181 | .desc = "Joystick Up", | ||
182 | .active_low = 0, | ||
183 | }, | ||
184 | { | ||
185 | .gpio = S3C2410_GPG8, | ||
186 | .code = KEY_DOWN, | ||
187 | .desc = "Joystick Down", | ||
188 | .active_low = 0, | ||
189 | }, | ||
190 | { | ||
191 | .gpio = S3C2410_GPG6, | ||
192 | .code = KEY_DOWN, | ||
193 | .desc = "Joystick Left", | ||
194 | .active_low = 0, | ||
195 | }, | ||
196 | { | ||
197 | .gpio = S3C2410_GPG5, | ||
198 | .code = KEY_DOWN, | ||
199 | .desc = "Joystick Right", | ||
200 | .active_low = 0, | ||
201 | }, | ||
202 | { | ||
203 | .gpio = S3C2410_GPG7, | ||
204 | .code = KEY_ENTER, | ||
205 | .desc = "Joystick Press", | ||
206 | .active_low = 0, | ||
207 | }, | ||
208 | { | ||
209 | .gpio = S3C2410_GPF7, | ||
210 | .code = KEY_HOMEPAGE, | ||
211 | .desc = "Home", | ||
212 | .active_low = 0, | ||
213 | }, | ||
214 | { | ||
215 | .gpio = S3C2410_GPF6, | ||
216 | .code = KEY_CALENDAR, | ||
217 | .desc = "Calendar", | ||
218 | .active_low = 0, | ||
219 | }, | ||
220 | { | ||
221 | .gpio = S3C2410_GPF5, | ||
222 | .code = KEY_ADDRESSBOOK, | ||
223 | .desc = "Contacts", | ||
224 | .active_low = 0, | ||
225 | }, | ||
226 | { | ||
227 | .gpio = S3C2410_GPF4, | ||
228 | .code = KEY_MAIL, | ||
229 | .desc = "Mail", | ||
230 | .active_low = 0, | ||
231 | }, | ||
232 | { | ||
233 | .gpio = S3C2410_GPF3, | ||
234 | .code = SW_RADIO, | ||
235 | .desc = "GPS Antenna", | ||
236 | .active_low = 0, | ||
237 | }, | ||
238 | { | ||
239 | .gpio = S3C2410_GPG2, | ||
240 | .code = SW_HEADPHONE_INSERT, | ||
241 | .desc = "Headphone", | ||
242 | .active_low = 0, | ||
243 | }, | ||
244 | }; | ||
245 | |||
246 | static struct gpio_keys_platform_data n35_button_data = { | ||
247 | .buttons = n35_buttons, | ||
248 | .nbuttons = ARRAY_SIZE(n35_buttons), | ||
249 | }; | ||
250 | |||
251 | static struct platform_device n35_button_device = { | ||
252 | .name = "gpio-keys", | ||
253 | .id = -1, | ||
254 | .num_resources = 0, | ||
255 | .dev = { | ||
256 | .platform_data = &n35_button_data, | ||
257 | } | ||
258 | }; | ||
259 | |||
260 | /* This is the bluetooth LED on the device. */ | ||
261 | static struct s3c24xx_led_platdata n30_blue_led_pdata = { | ||
262 | .name = "blue_led", | ||
263 | .gpio = S3C2410_GPG6, | ||
264 | .def_trigger = "", | ||
265 | }; | ||
266 | |||
267 | /* This LED is driven by the battery microcontroller, and is blinking | ||
268 | * red, blinking green or solid green when the battery is low, | ||
269 | * charging or full respectively. By driving GPD9 low, it's possible | ||
270 | * to force the LED to blink red, so call that warning LED. */ | ||
271 | static struct s3c24xx_led_platdata n30_warning_led_pdata = { | ||
272 | .name = "warning_led", | ||
273 | .flags = S3C24XX_LEDF_ACTLOW, | ||
274 | .gpio = S3C2410_GPD9, | ||
275 | .def_trigger = "", | ||
276 | }; | ||
277 | |||
278 | static struct platform_device n30_blue_led = { | ||
279 | .name = "s3c24xx_led", | ||
280 | .id = 1, | ||
281 | .dev = { | ||
282 | .platform_data = &n30_blue_led_pdata, | ||
283 | }, | ||
284 | }; | ||
285 | |||
286 | static struct platform_device n30_warning_led = { | ||
287 | .name = "s3c24xx_led", | ||
288 | .id = 2, | ||
289 | .dev = { | ||
290 | .platform_data = &n30_warning_led_pdata, | ||
291 | }, | ||
292 | }; | ||
293 | |||
294 | static struct s3c2410fb_display n30_display __initdata = { | ||
295 | .type = S3C2410_LCDCON1_TFT, | ||
296 | .width = 240, | ||
297 | .height = 320, | ||
298 | .pixclock = 170000, | ||
299 | |||
300 | .xres = 240, | ||
301 | .yres = 320, | ||
302 | .bpp = 16, | ||
303 | .left_margin = 3, | ||
304 | .right_margin = 40, | ||
305 | .hsync_len = 40, | ||
306 | .upper_margin = 2, | ||
307 | .lower_margin = 3, | ||
308 | .vsync_len = 2, | ||
309 | |||
310 | .lcdcon5 = S3C2410_LCDCON5_INVVLINE | S3C2410_LCDCON5_INVVFRAME, | ||
311 | }; | ||
312 | |||
313 | static struct s3c2410fb_mach_info n30_fb_info __initdata = { | ||
314 | .displays = &n30_display, | ||
315 | .num_displays = 1, | ||
316 | .default_display = 0, | ||
317 | .lpcsel = 0x06, | ||
318 | }; | ||
319 | |||
77 | static struct platform_device *n30_devices[] __initdata = { | 320 | static struct platform_device *n30_devices[] __initdata = { |
321 | &s3c_device_lcd, | ||
322 | &s3c_device_wdt, | ||
323 | &s3c_device_i2c, | ||
324 | &s3c_device_iis, | ||
78 | &s3c_device_usb, | 325 | &s3c_device_usb, |
326 | &s3c_device_usbgadget, | ||
327 | &n30_button_device, | ||
328 | &n30_blue_led, | ||
329 | &n30_warning_led, | ||
330 | }; | ||
331 | |||
332 | static struct platform_device *n35_devices[] __initdata = { | ||
79 | &s3c_device_lcd, | 333 | &s3c_device_lcd, |
80 | &s3c_device_wdt, | 334 | &s3c_device_wdt, |
81 | &s3c_device_i2c, | 335 | &s3c_device_i2c, |
82 | &s3c_device_iis, | 336 | &s3c_device_iis, |
83 | &s3c_device_usbgadget, | 337 | &s3c_device_usbgadget, |
338 | &n35_button_device, | ||
84 | }; | 339 | }; |
85 | 340 | ||
86 | static struct s3c2410_platform_i2c n30_i2ccfg = { | 341 | static struct s3c2410_platform_i2c n30_i2ccfg = { |
@@ -90,9 +345,148 @@ static struct s3c2410_platform_i2c n30_i2ccfg = { | |||
90 | .max_freq = 10*1000, | 345 | .max_freq = 10*1000, |
91 | }; | 346 | }; |
92 | 347 | ||
348 | /* Lots of hardcoded stuff, but it sets up the hardware in a useful | ||
349 | * state so that we can boot Linux directly from flash. */ | ||
350 | static void __init n30_hwinit(void) | ||
351 | { | ||
352 | /* GPA0-11 special functions -- unknown what they do | ||
353 | * GPA12 N30 special function -- unknown what it does | ||
354 | * N35/PiN output -- unknown what it does | ||
355 | * | ||
356 | * A12 is nGCS1 on the N30 and an output on the N35/PiN. I | ||
357 | * don't think it does anything useful on the N30, so I ought | ||
358 | * to make it an output there too since it always driven to 0 | ||
359 | * as far as I can tell. */ | ||
360 | if (machine_is_n30()) | ||
361 | __raw_writel(0x007fffff, S3C2410_GPACON); | ||
362 | if (machine_is_n35()) | ||
363 | __raw_writel(0x007fefff, S3C2410_GPACON); | ||
364 | __raw_writel(0x00000000, S3C2410_GPADAT); | ||
365 | |||
366 | /* GPB0 TOUT0 backlight level | ||
367 | * GPB1 output 1=backlight on | ||
368 | * GPB2 output IrDA enable 0=transceiver enabled, 1=disabled | ||
369 | * GPB3 output USB D+ pull up 0=disabled, 1=enabled | ||
370 | * GPB4 N30 output -- unknown function | ||
371 | * N30/PiN GPS control 0=GPS enabled, 1=GPS disabled | ||
372 | * GPB5 output -- unknown function | ||
373 | * GPB6 input -- unknown function | ||
374 | * GPB7 output -- unknown function | ||
375 | * GPB8 output -- probably LCD driver enable | ||
376 | * GPB9 output -- probably LCD VSYNC driver enable | ||
377 | * GPB10 output -- probably LCD HSYNC driver enable | ||
378 | */ | ||
379 | __raw_writel(0x00154556, S3C2410_GPBCON); | ||
380 | __raw_writel(0x00000750, S3C2410_GPBDAT); | ||
381 | __raw_writel(0x00000073, S3C2410_GPBUP); | ||
382 | |||
383 | /* GPC0 input RS232 DCD/DSR/RI | ||
384 | * GPC1 LCD | ||
385 | * GPC2 output RS232 DTR? | ||
386 | * GPC3 input RS232 DCD/DSR/RI | ||
387 | * GPC4 LCD | ||
388 | * GPC5 output 0=NAND write enabled, 1=NAND write protect | ||
389 | * GPC6 input -- unknown function | ||
390 | * GPC7 input charger status 0=charger connected | ||
391 | * this input can be triggered by power on the USB device | ||
392 | * port too, but will go back to disconnected soon after. | ||
393 | * GPC8 N30/N35 output -- unknown function, always driven to 1 | ||
394 | * PiN input -- unknown function, always read as 1 | ||
395 | * Make it an input with a pull up for all models. | ||
396 | * GPC9-15 LCD | ||
397 | */ | ||
398 | __raw_writel(0xaaa80618, S3C2410_GPCCON); | ||
399 | __raw_writel(0x0000014c, S3C2410_GPCDAT); | ||
400 | __raw_writel(0x0000fef2, S3C2410_GPCUP); | ||
401 | |||
402 | /* GPD0 input -- unknown function | ||
403 | * GPD1-D7 LCD | ||
404 | * GPD8 N30 output -- unknown function | ||
405 | * N35/PiN output 1=GPS LED on | ||
406 | * GPD9 output 0=power led blinks red, 1=normal power led function | ||
407 | * GPD10 output -- unknown function | ||
408 | * GPD11-15 LCD drivers | ||
409 | */ | ||
410 | __raw_writel(0xaa95aaa4, S3C2410_GPDCON); | ||
411 | __raw_writel(0x00000601, S3C2410_GPDDAT); | ||
412 | __raw_writel(0x0000fbfe, S3C2410_GPDUP); | ||
413 | |||
414 | /* GPE0-4 I2S audio bus | ||
415 | * GPE5-10 SD/MMC bus | ||
416 | * E11-13 outputs -- unknown function, probably power management | ||
417 | * E14-15 I2C bus connected to the battery controller | ||
418 | */ | ||
419 | __raw_writel(0xa56aaaaa, S3C2410_GPECON); | ||
420 | __raw_writel(0x0000efc5, S3C2410_GPEDAT); | ||
421 | __raw_writel(0x0000f81f, S3C2410_GPEUP); | ||
422 | |||
423 | /* GPF0 input 0=power button pressed | ||
424 | * GPF1 input SD/MMC switch 0=card present | ||
425 | * GPF2 N30 1=reset button pressed (inverted compared to the rest) | ||
426 | * N35/PiN 0=reset button pressed | ||
427 | * GPF3 N30/PiN input -- unknown function | ||
428 | * N35 input GPS antenna position, 0=antenna closed, 1=open | ||
429 | * GPF4 input 0=button 4 pressed | ||
430 | * GPF5 input 0=button 3 pressed | ||
431 | * GPF6 input 0=button 2 pressed | ||
432 | * GPF7 input 0=button 1 pressed | ||
433 | */ | ||
434 | __raw_writel(0x0000aaaa, S3C2410_GPFCON); | ||
435 | __raw_writel(0x00000000, S3C2410_GPFDAT); | ||
436 | __raw_writel(0x000000ff, S3C2410_GPFUP); | ||
437 | |||
438 | /* GPG0 input RS232 DCD/DSR/RI | ||
439 | * GPG1 input 1=USB gadget port has power from a host | ||
440 | * GPG2 N30 input -- unknown function | ||
441 | * N35/PiN input 0=headphones plugged in, 1=not plugged in | ||
442 | * GPG3 N30 output -- unknown function | ||
443 | * N35/PiN input with unknown function | ||
444 | * GPG4 N30 output 0=MMC enabled, 1=MMC disabled | ||
445 | * GPG5 N30 output 0=BlueTooth chip disabled, 1=enabled | ||
446 | * N35/PiN input joystick right | ||
447 | * GPG6 N30 output 0=blue led on, 1=off | ||
448 | * N35/PiN input joystick left | ||
449 | * GPG7 input 0=thumbwheel pressed | ||
450 | * GPG8 input 0=thumbwheel down | ||
451 | * GPG9 input 0=thumbwheel up | ||
452 | * GPG10 input SD/MMC write protect switch | ||
453 | * GPG11 N30 input -- unknown function | ||
454 | * N35 output 0=GPS antenna powered, 1=not powered | ||
455 | * PiN output -- unknown function | ||
456 | * GPG12-15 touch screen functions | ||
457 | * | ||
458 | * The pullups differ between the models, so enable all | ||
459 | * pullups that are enabled on any of the models. | ||
460 | */ | ||
461 | if (machine_is_n30()) | ||
462 | __raw_writel(0xff0a956a, S3C2410_GPGCON); | ||
463 | if (machine_is_n35()) | ||
464 | __raw_writel(0xff4aa92a, S3C2410_GPGCON); | ||
465 | __raw_writel(0x0000e800, S3C2410_GPGDAT); | ||
466 | __raw_writel(0x0000f86f, S3C2410_GPGUP); | ||
467 | |||
468 | /* GPH0/1/2/3 RS232 serial port | ||
469 | * GPH4/5 IrDA serial port | ||
470 | * GPH6/7 N30 BlueTooth serial port | ||
471 | * N35/PiN GPS receiver | ||
472 | * GPH8 input -- unknown function | ||
473 | * GPH9 CLKOUT0 HCLK -- unknown use | ||
474 | * GPH10 CLKOUT1 FCLK -- unknown use | ||
475 | * | ||
476 | * The pull ups for H6/H7 are enabled on N30 but not on the | ||
477 | * N35/PiN. I suppose is useful for a budget model of the N30 | ||
478 | * with no bluetooh. It doesn't hurt to have the pull ups | ||
479 | * enabled on the N35, so leave them enabled for all models. | ||
480 | */ | ||
481 | __raw_writel(0x0028aaaa, S3C2410_GPHCON); | ||
482 | __raw_writel(0x000005ef, S3C2410_GPHDAT); | ||
483 | __raw_writel(0x0000063f, S3C2410_GPHUP); | ||
484 | } | ||
485 | |||
93 | static void __init n30_map_io(void) | 486 | static void __init n30_map_io(void) |
94 | { | 487 | { |
95 | s3c24xx_init_io(n30_iodesc, ARRAY_SIZE(n30_iodesc)); | 488 | s3c24xx_init_io(n30_iodesc, ARRAY_SIZE(n30_iodesc)); |
489 | n30_hwinit(); | ||
96 | s3c24xx_init_clocks(0); | 490 | s3c24xx_init_clocks(0); |
97 | s3c24xx_init_uarts(n30_uartcfgs, ARRAY_SIZE(n30_uartcfgs)); | 491 | s3c24xx_init_uarts(n30_uartcfgs, ARRAY_SIZE(n30_uartcfgs)); |
98 | } | 492 | } |
@@ -106,7 +500,9 @@ static void __init n30_init_irq(void) | |||
106 | 500 | ||
107 | static void __init n30_init(void) | 501 | static void __init n30_init(void) |
108 | { | 502 | { |
503 | s3c24xx_fb_set_platdata(&n30_fb_info); | ||
109 | s3c_device_i2c.dev.platform_data = &n30_i2ccfg; | 504 | s3c_device_i2c.dev.platform_data = &n30_i2ccfg; |
505 | s3c24xx_udc_set_platdata(&n30_udc_cfg); | ||
110 | 506 | ||
111 | /* Turn off suspend on both USB ports, and switch the | 507 | /* Turn off suspend on both USB ports, and switch the |
112 | * selectable USB port to USB device mode. */ | 508 | * selectable USB port to USB device mode. */ |
@@ -115,7 +511,32 @@ static void __init n30_init(void) | |||
115 | S3C2410_MISCCR_USBSUSPND0 | | 511 | S3C2410_MISCCR_USBSUSPND0 | |
116 | S3C2410_MISCCR_USBSUSPND1, 0x0); | 512 | S3C2410_MISCCR_USBSUSPND1, 0x0); |
117 | 513 | ||
118 | platform_add_devices(n30_devices, ARRAY_SIZE(n30_devices)); | 514 | if (machine_is_n30()) { |
515 | /* Turn off suspend on both USB ports, and switch the | ||
516 | * selectable USB port to USB device mode. */ | ||
517 | s3c2410_modify_misccr(S3C2410_MISCCR_USBHOST | | ||
518 | S3C2410_MISCCR_USBSUSPND0 | | ||
519 | S3C2410_MISCCR_USBSUSPND1, 0x0); | ||
520 | |||
521 | platform_add_devices(n30_devices, ARRAY_SIZE(n30_devices)); | ||
522 | } | ||
523 | |||
524 | if (machine_is_n35()) { | ||
525 | /* Turn off suspend and switch the selectable USB port | ||
526 | * to USB device mode. Turn on suspend for the host | ||
527 | * port since it is not connected on the N35. | ||
528 | * | ||
529 | * Actually, the host port is available at some pads | ||
530 | * on the back of the device, so it would actually be | ||
531 | * possible to add a USB device inside the N35 if you | ||
532 | * are willing to do some hardware modifications. */ | ||
533 | s3c2410_modify_misccr(S3C2410_MISCCR_USBHOST | | ||
534 | S3C2410_MISCCR_USBSUSPND0 | | ||
535 | S3C2410_MISCCR_USBSUSPND1, | ||
536 | S3C2410_MISCCR_USBSUSPND1); | ||
537 | |||
538 | platform_add_devices(n35_devices, ARRAY_SIZE(n35_devices)); | ||
539 | } | ||
119 | } | 540 | } |
120 | 541 | ||
121 | MACHINE_START(N30, "Acer-N30") | 542 | MACHINE_START(N30, "Acer-N30") |
@@ -131,9 +552,14 @@ MACHINE_START(N30, "Acer-N30") | |||
131 | .map_io = n30_map_io, | 552 | .map_io = n30_map_io, |
132 | MACHINE_END | 553 | MACHINE_END |
133 | 554 | ||
134 | /* | 555 | MACHINE_START(N35, "Acer-N35") |
135 | Local variables: | 556 | /* Maintainer: Christer Weinigel <christer@weinigel.se> |
136 | compile-command: "make ARCH=arm CROSS_COMPILE=/usr/local/arm/3.3.2/bin/arm-linux- -k -C ../../.." | 557 | */ |
137 | c-basic-offset: 8 | 558 | .phys_io = S3C2410_PA_UART, |
138 | End: | 559 | .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc, |
139 | */ | 560 | .boot_params = S3C2410_SDRAM_PA + 0x100, |
561 | .timer = &s3c24xx_timer, | ||
562 | .init_machine = n30_init, | ||
563 | .init_irq = n30_init_irq, | ||
564 | .map_io = n30_map_io, | ||
565 | MACHINE_END | ||
diff --git a/arch/arm/mach-s3c2410/mach-vr1000.c b/arch/arm/mach-s3c2410/mach-vr1000.c index 4c4b5c4207c4..9a0965ac5e11 100644 --- a/arch/arm/mach-s3c2410/mach-vr1000.c +++ b/arch/arm/mach-s3c2410/mach-vr1000.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* linux/arch/arm/mach-s3c2410/mach-vr1000.c | 1 | /* linux/arch/arm/mach-s3c2410/mach-vr1000.c |
2 | * | 2 | * |
3 | * Copyright (c) 2003-2005 Simtec Electronics | 3 | * Copyright (c) 2003-2005,2008 Simtec Electronics |
4 | * Ben Dooks <ben@simtec.co.uk> | 4 | * Ben Dooks <ben@simtec.co.uk> |
5 | * | 5 | * |
6 | * Machine support for Thorcom VR1000 board. Designed for Thorcom by | 6 | * Machine support for Thorcom VR1000 board. Designed for Thorcom by |
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/timer.h> | 19 | #include <linux/timer.h> |
20 | #include <linux/init.h> | 20 | #include <linux/init.h> |
21 | #include <linux/dm9000.h> | 21 | #include <linux/dm9000.h> |
22 | #include <linux/i2c.h> | ||
22 | 23 | ||
23 | #include <linux/serial.h> | 24 | #include <linux/serial.h> |
24 | #include <linux/tty.h> | 25 | #include <linux/tty.h> |
@@ -46,7 +47,9 @@ | |||
46 | #include <asm/plat-s3c24xx/clock.h> | 47 | #include <asm/plat-s3c24xx/clock.h> |
47 | #include <asm/plat-s3c24xx/devs.h> | 48 | #include <asm/plat-s3c24xx/devs.h> |
48 | #include <asm/plat-s3c24xx/cpu.h> | 49 | #include <asm/plat-s3c24xx/cpu.h> |
50 | |||
49 | #include "usb-simtec.h" | 51 | #include "usb-simtec.h" |
52 | #include "nor-simtec.h" | ||
50 | 53 | ||
51 | /* macros for virtual address mods for the io space entries */ | 54 | /* macros for virtual address mods for the io space entries */ |
52 | #define VA_C5(item) ((unsigned long)(item) + BAST_VAM_CS5) | 55 | #define VA_C5(item) ((unsigned long)(item) + BAST_VAM_CS5) |
@@ -97,34 +100,6 @@ static struct map_desc vr1000_iodesc[] __initdata = { | |||
97 | .length = SZ_1M, | 100 | .length = SZ_1M, |
98 | .type = MT_DEVICE, | 101 | .type = MT_DEVICE, |
99 | }, | 102 | }, |
100 | |||
101 | /* peripheral space... one for each of fast/slow/byte/16bit */ | ||
102 | /* note, ide is only decoded in word space, even though some registers | ||
103 | * are only 8bit */ | ||
104 | |||
105 | /* slow, byte */ | ||
106 | { VA_C2(VR1000_VA_IDEPRI), PA_CS3(VR1000_PA_IDEPRI), SZ_1M, MT_DEVICE }, | ||
107 | { VA_C2(VR1000_VA_IDESEC), PA_CS3(VR1000_PA_IDESEC), SZ_1M, MT_DEVICE }, | ||
108 | { VA_C2(VR1000_VA_IDEPRIAUX), PA_CS3(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, | ||
109 | { VA_C2(VR1000_VA_IDESECAUX), PA_CS3(VR1000_PA_IDESECAUX), SZ_1M, MT_DEVICE }, | ||
110 | |||
111 | /* slow, word */ | ||
112 | { VA_C3(VR1000_VA_IDEPRI), PA_CS3(VR1000_PA_IDEPRI), SZ_1M, MT_DEVICE }, | ||
113 | { VA_C3(VR1000_VA_IDESEC), PA_CS3(VR1000_PA_IDESEC), SZ_1M, MT_DEVICE }, | ||
114 | { VA_C3(VR1000_VA_IDEPRIAUX), PA_CS3(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, | ||
115 | { VA_C3(VR1000_VA_IDESECAUX), PA_CS3(VR1000_PA_IDESECAUX), SZ_1M, MT_DEVICE }, | ||
116 | |||
117 | /* fast, byte */ | ||
118 | { VA_C4(VR1000_VA_IDEPRI), PA_CS5(VR1000_PA_IDEPRI), SZ_1M, MT_DEVICE }, | ||
119 | { VA_C4(VR1000_VA_IDESEC), PA_CS5(VR1000_PA_IDESEC), SZ_1M, MT_DEVICE }, | ||
120 | { VA_C4(VR1000_VA_IDEPRIAUX), PA_CS5(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, | ||
121 | { VA_C4(VR1000_VA_IDESECAUX), PA_CS5(VR1000_PA_IDESECAUX), SZ_1M, MT_DEVICE }, | ||
122 | |||
123 | /* fast, word */ | ||
124 | { VA_C5(VR1000_VA_IDEPRI), PA_CS5(VR1000_PA_IDEPRI), SZ_1M, MT_DEVICE }, | ||
125 | { VA_C5(VR1000_VA_IDESEC), PA_CS5(VR1000_PA_IDESEC), SZ_1M, MT_DEVICE }, | ||
126 | { VA_C5(VR1000_VA_IDEPRIAUX), PA_CS5(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, | ||
127 | { VA_C5(VR1000_VA_IDESECAUX), PA_CS5(VR1000_PA_IDESECAUX), SZ_1M, MT_DEVICE }, | ||
128 | }; | 103 | }; |
129 | 104 | ||
130 | #define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK | 105 | #define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK |
@@ -230,23 +205,6 @@ static struct platform_device serial_device = { | |||
230 | }, | 205 | }, |
231 | }; | 206 | }; |
232 | 207 | ||
233 | /* MTD NOR Flash */ | ||
234 | |||
235 | static struct resource vr1000_nor_resource[] = { | ||
236 | [0] = { | ||
237 | .start = S3C2410_CS1 + 0x4000000, | ||
238 | .end = S3C2410_CS1 + 0x4000000 + SZ_16M - 1, | ||
239 | .flags = IORESOURCE_MEM, | ||
240 | } | ||
241 | }; | ||
242 | |||
243 | static struct platform_device vr1000_nor = { | ||
244 | .name = "bast-nor", | ||
245 | .id = -1, | ||
246 | .num_resources = ARRAY_SIZE(vr1000_nor_resource), | ||
247 | .resource = vr1000_nor_resource, | ||
248 | }; | ||
249 | |||
250 | /* DM9000 ethernet devices */ | 208 | /* DM9000 ethernet devices */ |
251 | 209 | ||
252 | static struct resource vr1000_dm9k0_resource[] = { | 210 | static struct resource vr1000_dm9k0_resource[] = { |
@@ -263,7 +221,7 @@ static struct resource vr1000_dm9k0_resource[] = { | |||
263 | [2] = { | 221 | [2] = { |
264 | .start = IRQ_VR1000_DM9000A, | 222 | .start = IRQ_VR1000_DM9000A, |
265 | .end = IRQ_VR1000_DM9000A, | 223 | .end = IRQ_VR1000_DM9000A, |
266 | .flags = IORESOURCE_IRQ | IRQF_TRIGGER_HIGH, | 224 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, |
267 | } | 225 | } |
268 | 226 | ||
269 | }; | 227 | }; |
@@ -282,7 +240,7 @@ static struct resource vr1000_dm9k1_resource[] = { | |||
282 | [2] = { | 240 | [2] = { |
283 | .start = IRQ_VR1000_DM9000N, | 241 | .start = IRQ_VR1000_DM9000N, |
284 | .end = IRQ_VR1000_DM9000N, | 242 | .end = IRQ_VR1000_DM9000N, |
285 | .flags = IORESOURCE_IRQ | IRQF_TRIGGER_HIGH, | 243 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, |
286 | } | 244 | } |
287 | }; | 245 | }; |
288 | 246 | ||
@@ -358,6 +316,18 @@ static struct platform_device vr1000_led3 = { | |||
358 | }, | 316 | }, |
359 | }; | 317 | }; |
360 | 318 | ||
319 | /* I2C devices. */ | ||
320 | |||
321 | static struct i2c_board_info vr1000_i2c_devs[] __initdata = { | ||
322 | { | ||
323 | I2C_BOARD_INFO("tlv320aic23", 0x1a), | ||
324 | }, { | ||
325 | I2C_BOARD_INFO("tmp101", 0x48), | ||
326 | }, { | ||
327 | I2C_BOARD_INFO("m41st87", 0x68), | ||
328 | }, | ||
329 | }; | ||
330 | |||
361 | /* devices for this board */ | 331 | /* devices for this board */ |
362 | 332 | ||
363 | static struct platform_device *vr1000_devices[] __initdata = { | 333 | static struct platform_device *vr1000_devices[] __initdata = { |
@@ -367,7 +337,6 @@ static struct platform_device *vr1000_devices[] __initdata = { | |||
367 | &s3c_device_i2c, | 337 | &s3c_device_i2c, |
368 | &s3c_device_adc, | 338 | &s3c_device_adc, |
369 | &serial_device, | 339 | &serial_device, |
370 | &vr1000_nor, | ||
371 | &vr1000_dm9k0, | 340 | &vr1000_dm9k0, |
372 | &vr1000_dm9k1, | 341 | &vr1000_dm9k1, |
373 | &vr1000_led1, | 342 | &vr1000_led1, |
@@ -416,6 +385,11 @@ static void __init vr1000_map_io(void) | |||
416 | static void __init vr1000_init(void) | 385 | static void __init vr1000_init(void) |
417 | { | 386 | { |
418 | platform_add_devices(vr1000_devices, ARRAY_SIZE(vr1000_devices)); | 387 | platform_add_devices(vr1000_devices, ARRAY_SIZE(vr1000_devices)); |
388 | |||
389 | i2c_register_board_info(0, vr1000_i2c_devs, | ||
390 | ARRAY_SIZE(vr1000_i2c_devs)); | ||
391 | |||
392 | nor_simtec_init(); | ||
419 | } | 393 | } |
420 | 394 | ||
421 | MACHINE_START(VR1000, "Thorcom-VR1000") | 395 | MACHINE_START(VR1000, "Thorcom-VR1000") |
diff --git a/arch/arm/mach-s3c2410/nor-simtec.c b/arch/arm/mach-s3c2410/nor-simtec.c new file mode 100644 index 000000000000..f44e21b9c3ba --- /dev/null +++ b/arch/arm/mach-s3c2410/nor-simtec.c | |||
@@ -0,0 +1,86 @@ | |||
1 | /* linux/arch/arm/mach-s3c2410/nor-simtec.c | ||
2 | * | ||
3 | * Copyright (c) 2008 Simtec Electronics | ||
4 | * http://armlinux.simtec.co.uk/ | ||
5 | * Ben Dooks <ben@simtec.co.uk> | ||
6 | * | ||
7 | * Simtec NOR mapping | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License version 2 as | ||
11 | * published by the Free Software Foundation. | ||
12 | */ | ||
13 | |||
14 | #include <linux/module.h> | ||
15 | #include <linux/types.h> | ||
16 | #include <linux/init.h> | ||
17 | #include <linux/kernel.h> | ||
18 | #include <linux/platform_device.h> | ||
19 | |||
20 | #include <linux/mtd/mtd.h> | ||
21 | #include <linux/mtd/map.h> | ||
22 | #include <linux/mtd/physmap.h> | ||
23 | #include <linux/mtd/partitions.h> | ||
24 | |||
25 | #include <asm/mach/arch.h> | ||
26 | #include <asm/mach/map.h> | ||
27 | #include <asm/mach/irq.h> | ||
28 | |||
29 | #include <asm/arch/map.h> | ||
30 | #include <asm/arch/bast-map.h> | ||
31 | #include <asm/arch/bast-cpld.h> | ||
32 | |||
33 | |||
34 | static void simtec_nor_vpp(struct map_info *map, int vpp) | ||
35 | { | ||
36 | unsigned int val; | ||
37 | unsigned long flags; | ||
38 | |||
39 | local_irq_save(flags); | ||
40 | val = __raw_readb(BAST_VA_CTRL3); | ||
41 | |||
42 | printk(KERN_DEBUG "%s(%d)\n", __func__, vpp); | ||
43 | |||
44 | if (vpp) | ||
45 | val |= BAST_CPLD_CTRL3_ROMWEN; | ||
46 | else | ||
47 | val &= ~BAST_CPLD_CTRL3_ROMWEN; | ||
48 | |||
49 | __raw_writeb(val, BAST_VA_CTRL3); | ||
50 | local_irq_restore(flags); | ||
51 | } | ||
52 | |||
53 | struct physmap_flash_data simtec_nor_pdata = { | ||
54 | .width = 2, | ||
55 | .set_vpp = simtec_nor_vpp, | ||
56 | .nr_parts = 0, | ||
57 | }; | ||
58 | |||
59 | static struct resource simtec_nor_resource[] = { | ||
60 | [0] = { | ||
61 | .start = S3C2410_CS1 + 0x4000000, | ||
62 | .end = S3C2410_CS1 + 0x4000000 + SZ_8M - 1, | ||
63 | .flags = IORESOURCE_MEM, | ||
64 | } | ||
65 | }; | ||
66 | |||
67 | static struct platform_device simtec_device_nor = { | ||
68 | .name = "physmap-flash", | ||
69 | .id = -1, | ||
70 | .num_resources = ARRAY_SIZE(simtec_nor_resource), | ||
71 | .resource = simtec_nor_resource, | ||
72 | .dev = { | ||
73 | .platform_data = &simtec_nor_pdata, | ||
74 | }, | ||
75 | }; | ||
76 | |||
77 | void __init nor_simtec_init(void) | ||
78 | { | ||
79 | int ret; | ||
80 | |||
81 | ret = platform_device_register(&simtec_device_nor); | ||
82 | if (ret < 0) | ||
83 | printk(KERN_ERR "failed to register physmap-flash device\n"); | ||
84 | else | ||
85 | simtec_nor_vpp(NULL, 1); | ||
86 | } | ||
diff --git a/arch/arm/mach-s3c2410/nor-simtec.h b/arch/arm/mach-s3c2410/nor-simtec.h new file mode 100644 index 000000000000..f619c1e0d0c8 --- /dev/null +++ b/arch/arm/mach-s3c2410/nor-simtec.h | |||
@@ -0,0 +1,14 @@ | |||
1 | /* linux/arch/arm/mach-s3c2410/nor-simtec.h | ||
2 | * | ||
3 | * Copyright (c) 2008 Simtec Electronics | ||
4 | * http://armlinux.simtec.co.uk/ | ||
5 | * Ben Dooks <ben@simtec.co.uk> | ||
6 | * | ||
7 | * Simtec NOR mapping | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License version 2 as | ||
11 | * published by the Free Software Foundation. | ||
12 | */ | ||
13 | |||
14 | extern void nor_simtec_init(void); | ||
diff --git a/arch/arm/mach-s3c2412/Kconfig b/arch/arm/mach-s3c2412/Kconfig index 0b43431d4b75..c59a9d2ee9a6 100644 --- a/arch/arm/mach-s3c2412/Kconfig +++ b/arch/arm/mach-s3c2412/Kconfig | |||
@@ -34,6 +34,16 @@ config S3C2412_PM | |||
34 | 34 | ||
35 | menu "S3C2412 Machines" | 35 | menu "S3C2412 Machines" |
36 | 36 | ||
37 | config MACH_JIVE | ||
38 | bool "Logitech Jive" | ||
39 | select CPU_S3C2412 | ||
40 | help | ||
41 | Say Y here if you are using the Logitech Jive. | ||
42 | |||
43 | config MACH_JIVE_SHOW_BOOTLOADER | ||
44 | bool "Allow access to bootloader partitions in MTD" | ||
45 | depends on MACH_JIVE && EXPERIMENTAL | ||
46 | |||
37 | config MACH_SMDK2413 | 47 | config MACH_SMDK2413 |
38 | bool "SMDK2413" | 48 | bool "SMDK2413" |
39 | select CPU_S3C2412 | 49 | select CPU_S3C2412 |
diff --git a/arch/arm/mach-s3c2412/Makefile b/arch/arm/mach-s3c2412/Makefile index 267f3348301e..20918d5dc6a9 100644 --- a/arch/arm/mach-s3c2412/Makefile +++ b/arch/arm/mach-s3c2412/Makefile | |||
@@ -18,5 +18,6 @@ obj-$(CONFIG_S3C2412_PM) += pm.o sleep.o | |||
18 | 18 | ||
19 | # Machine support | 19 | # Machine support |
20 | 20 | ||
21 | obj-$(CONFIG_MACH_JIVE) += mach-jive.o | ||
21 | obj-$(CONFIG_MACH_SMDK2413) += mach-smdk2413.o | 22 | obj-$(CONFIG_MACH_SMDK2413) += mach-smdk2413.o |
22 | obj-$(CONFIG_MACH_VSTMS) += mach-vstms.o | 23 | obj-$(CONFIG_MACH_VSTMS) += mach-vstms.o |
diff --git a/arch/arm/mach-s3c2412/clock.c b/arch/arm/mach-s3c2412/clock.c index 2697a65ba727..1157b5a16263 100644 --- a/arch/arm/mach-s3c2412/clock.c +++ b/arch/arm/mach-s3c2412/clock.c | |||
@@ -631,6 +631,17 @@ static struct clk_init clks_src[] __initdata = { | |||
631 | .bit = S3C2412_CLKSRC_USBCLK_HCLK, | 631 | .bit = S3C2412_CLKSRC_USBCLK_HCLK, |
632 | .src_0 = &clk_usysclk, | 632 | .src_0 = &clk_usysclk, |
633 | .src_1 = &clk_h, | 633 | .src_1 = &clk_h, |
634 | /* here we assume OM[4] select xtal */ | ||
635 | }, { | ||
636 | .clk = &clk_erefclk, | ||
637 | .bit = S3C2412_CLKSRC_EREFCLK_EXTCLK, | ||
638 | .src_0 = &clk_xtal, | ||
639 | .src_1 = &clk_ext, | ||
640 | }, { | ||
641 | .clk = &clk_urefclk, | ||
642 | .bit = S3C2412_CLKSRC_UREFCLK_EXTCLK, | ||
643 | .src_0 = &clk_xtal, | ||
644 | .src_1 = &clk_ext, | ||
634 | }, | 645 | }, |
635 | }; | 646 | }; |
636 | 647 | ||
@@ -666,8 +677,6 @@ static void __init s3c2412_clk_initparents(void) | |||
666 | static struct clk *clks[] __initdata = { | 677 | static struct clk *clks[] __initdata = { |
667 | &clk_ext, | 678 | &clk_ext, |
668 | &clk_usb_bus, | 679 | &clk_usb_bus, |
669 | &clk_erefclk, | ||
670 | &clk_urefclk, | ||
671 | &clk_mrefclk, | 680 | &clk_mrefclk, |
672 | &clk_armclk, | 681 | &clk_armclk, |
673 | }; | 682 | }; |
diff --git a/arch/arm/mach-s3c2412/mach-jive.c b/arch/arm/mach-s3c2412/mach-jive.c new file mode 100644 index 000000000000..7f5924713485 --- /dev/null +++ b/arch/arm/mach-s3c2412/mach-jive.c | |||
@@ -0,0 +1,687 @@ | |||
1 | /* linux/arch/arm/mach-s3c2410/mach-jive.c | ||
2 | * | ||
3 | * Copyright 2007 Simtec Electronics | ||
4 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | ||
6 | * http://armlinux.simtec.co.uk/ | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #include <linux/kernel.h> | ||
14 | #include <linux/types.h> | ||
15 | #include <linux/interrupt.h> | ||
16 | #include <linux/list.h> | ||
17 | #include <linux/timer.h> | ||
18 | #include <linux/init.h> | ||
19 | #include <linux/sysdev.h> | ||
20 | #include <linux/delay.h> | ||
21 | #include <linux/serial_core.h> | ||
22 | #include <linux/platform_device.h> | ||
23 | #include <linux/i2c.h> | ||
24 | |||
25 | #include <video/ili9320.h> | ||
26 | |||
27 | #include <linux/spi/spi.h> | ||
28 | |||
29 | #include <linux/mtd/mtd.h> | ||
30 | #include <linux/mtd/partitions.h> | ||
31 | |||
32 | #include <asm/mach/arch.h> | ||
33 | #include <asm/mach/map.h> | ||
34 | #include <asm/mach/irq.h> | ||
35 | |||
36 | #include <asm/plat-s3c/regs-serial.h> | ||
37 | #include <asm/plat-s3c/nand.h> | ||
38 | #include <asm/plat-s3c/iic.h> | ||
39 | |||
40 | #include <asm/arch/regs-power.h> | ||
41 | #include <asm/arch/regs-gpio.h> | ||
42 | #include <asm/arch/regs-mem.h> | ||
43 | #include <asm/arch/regs-lcd.h> | ||
44 | #include <asm/arch/spi-gpio.h> | ||
45 | #include <asm/arch/fb.h> | ||
46 | |||
47 | #include <asm/mach-types.h> | ||
48 | |||
49 | #include <linux/mtd/mtd.h> | ||
50 | #include <linux/mtd/nand.h> | ||
51 | #include <linux/mtd/nand_ecc.h> | ||
52 | #include <linux/mtd/partitions.h> | ||
53 | |||
54 | #include <asm/plat-s3c24xx/clock.h> | ||
55 | #include <asm/plat-s3c24xx/devs.h> | ||
56 | #include <asm/plat-s3c24xx/cpu.h> | ||
57 | #include <asm/plat-s3c24xx/pm.h> | ||
58 | #include <asm/plat-s3c24xx/udc.h> | ||
59 | |||
60 | static struct map_desc jive_iodesc[] __initdata = { | ||
61 | }; | ||
62 | |||
63 | #define UCON S3C2410_UCON_DEFAULT | ||
64 | #define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | ||
65 | #define UFCON S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE | ||
66 | |||
67 | static struct s3c2410_uartcfg jive_uartcfgs[] = { | ||
68 | [0] = { | ||
69 | .hwport = 0, | ||
70 | .flags = 0, | ||
71 | .ucon = UCON, | ||
72 | .ulcon = ULCON, | ||
73 | .ufcon = UFCON, | ||
74 | }, | ||
75 | [1] = { | ||
76 | .hwport = 1, | ||
77 | .flags = 0, | ||
78 | .ucon = UCON, | ||
79 | .ulcon = ULCON, | ||
80 | .ufcon = UFCON, | ||
81 | }, | ||
82 | [2] = { | ||
83 | .hwport = 2, | ||
84 | .flags = 0, | ||
85 | .ucon = UCON, | ||
86 | .ulcon = ULCON, | ||
87 | .ufcon = UFCON, | ||
88 | } | ||
89 | }; | ||
90 | |||
91 | /* Jive flash assignment | ||
92 | * | ||
93 | * 0x00000000-0x00028000 : uboot | ||
94 | * 0x00028000-0x0002c000 : uboot env | ||
95 | * 0x0002c000-0x00030000 : spare | ||
96 | * 0x00030000-0x00200000 : zimage A | ||
97 | * 0x00200000-0x01600000 : cramfs A | ||
98 | * 0x01600000-0x017d0000 : zimage B | ||
99 | * 0x017d0000-0x02bd0000 : cramfs B | ||
100 | * 0x02bd0000-0x03fd0000 : yaffs | ||
101 | */ | ||
102 | static struct mtd_partition jive_imageA_nand_part[] = { | ||
103 | |||
104 | #ifdef CONFIG_MACH_JIVE_SHOW_BOOTLOADER | ||
105 | /* Don't allow access to the bootloader from linux */ | ||
106 | { | ||
107 | .name = "uboot", | ||
108 | .offset = 0, | ||
109 | .size = (160 * SZ_1K), | ||
110 | .mask_flags = MTD_WRITEABLE, /* force read-only */ | ||
111 | }, | ||
112 | |||
113 | /* spare */ | ||
114 | { | ||
115 | .name = "spare", | ||
116 | .offset = (176 * SZ_1K), | ||
117 | .size = (16 * SZ_1K), | ||
118 | }, | ||
119 | #endif | ||
120 | |||
121 | /* booted images */ | ||
122 | { | ||
123 | .name = "kernel (ro)", | ||
124 | .offset = (192 * SZ_1K), | ||
125 | .size = (SZ_2M) - (192 * SZ_1K), | ||
126 | .mask_flags = MTD_WRITEABLE, /* force read-only */ | ||
127 | }, { | ||
128 | .name = "root (ro)", | ||
129 | .offset = (SZ_2M), | ||
130 | .size = (20 * SZ_1M), | ||
131 | .mask_flags = MTD_WRITEABLE, /* force read-only */ | ||
132 | }, | ||
133 | |||
134 | /* yaffs */ | ||
135 | { | ||
136 | .name = "yaffs", | ||
137 | .offset = (44 * SZ_1M), | ||
138 | .size = (20 * SZ_1M), | ||
139 | }, | ||
140 | |||
141 | /* bootloader environment */ | ||
142 | { | ||
143 | .name = "env", | ||
144 | .offset = (160 * SZ_1K), | ||
145 | .size = (16 * SZ_1K), | ||
146 | }, | ||
147 | |||
148 | /* upgrade images */ | ||
149 | { | ||
150 | .name = "zimage", | ||
151 | .offset = (22 * SZ_1M), | ||
152 | .size = (2 * SZ_1M) - (192 * SZ_1K), | ||
153 | }, { | ||
154 | .name = "cramfs", | ||
155 | .offset = (24 * SZ_1M) - (192*SZ_1K), | ||
156 | .size = (20 * SZ_1M), | ||
157 | }, | ||
158 | }; | ||
159 | |||
160 | static struct mtd_partition jive_imageB_nand_part[] = { | ||
161 | |||
162 | #ifdef CONFIG_MACH_JIVE_SHOW_BOOTLOADER | ||
163 | /* Don't allow access to the bootloader from linux */ | ||
164 | { | ||
165 | .name = "uboot", | ||
166 | .offset = 0, | ||
167 | .size = (160 * SZ_1K), | ||
168 | .mask_flags = MTD_WRITEABLE, /* force read-only */ | ||
169 | }, | ||
170 | |||
171 | /* spare */ | ||
172 | { | ||
173 | .name = "spare", | ||
174 | .offset = (176 * SZ_1K), | ||
175 | .size = (16 * SZ_1K), | ||
176 | }, | ||
177 | #endif | ||
178 | |||
179 | /* booted images */ | ||
180 | { | ||
181 | .name = "kernel (ro)", | ||
182 | .offset = (22 * SZ_1M), | ||
183 | .size = (2 * SZ_1M) - (192 * SZ_1K), | ||
184 | .mask_flags = MTD_WRITEABLE, /* force read-only */ | ||
185 | }, | ||
186 | { | ||
187 | .name = "root (ro)", | ||
188 | .offset = (24 * SZ_1M) - (192 * SZ_1K), | ||
189 | .size = (20 * SZ_1M), | ||
190 | .mask_flags = MTD_WRITEABLE, /* force read-only */ | ||
191 | }, | ||
192 | |||
193 | /* yaffs */ | ||
194 | { | ||
195 | .name = "yaffs", | ||
196 | .offset = (44 * SZ_1M), | ||
197 | .size = (20 * SZ_1M), | ||
198 | }, | ||
199 | |||
200 | /* bootloader environment */ | ||
201 | { | ||
202 | .name = "env", | ||
203 | .offset = (160 * SZ_1K), | ||
204 | .size = (16 * SZ_1K), | ||
205 | }, | ||
206 | |||
207 | /* upgrade images */ | ||
208 | { | ||
209 | .name = "zimage", | ||
210 | .offset = (192 * SZ_1K), | ||
211 | .size = (2 * SZ_1M) - (192 * SZ_1K), | ||
212 | }, { | ||
213 | .name = "cramfs", | ||
214 | .offset = (2 * SZ_1M), | ||
215 | .size = (20 * SZ_1M), | ||
216 | }, | ||
217 | }; | ||
218 | |||
219 | static struct s3c2410_nand_set jive_nand_sets[] = { | ||
220 | [0] = { | ||
221 | .name = "flash", | ||
222 | .nr_chips = 1, | ||
223 | .nr_partitions = ARRAY_SIZE(jive_imageA_nand_part), | ||
224 | .partitions = jive_imageA_nand_part, | ||
225 | }, | ||
226 | }; | ||
227 | |||
228 | static struct s3c2410_platform_nand jive_nand_info = { | ||
229 | /* set taken from osiris nand timings, possibly still conservative */ | ||
230 | .tacls = 30, | ||
231 | .twrph0 = 55, | ||
232 | .twrph1 = 40, | ||
233 | .sets = jive_nand_sets, | ||
234 | .nr_sets = ARRAY_SIZE(jive_nand_sets), | ||
235 | }; | ||
236 | |||
237 | static int __init jive_mtdset(char *options) | ||
238 | { | ||
239 | struct s3c2410_nand_set *nand = &jive_nand_sets[0]; | ||
240 | unsigned long set; | ||
241 | |||
242 | if (options == NULL || options[0] == '\0') | ||
243 | return 0; | ||
244 | |||
245 | if (strict_strtoul(options, 10, &set)) { | ||
246 | printk(KERN_ERR "failed to parse mtdset=%s\n", options); | ||
247 | return 0; | ||
248 | } | ||
249 | |||
250 | switch (set) { | ||
251 | case 1: | ||
252 | nand->nr_partitions = ARRAY_SIZE(jive_imageB_nand_part); | ||
253 | nand->partitions = jive_imageB_nand_part; | ||
254 | case 0: | ||
255 | /* this is already setup in the nand info */ | ||
256 | break; | ||
257 | default: | ||
258 | printk(KERN_ERR "Unknown mtd set %ld specified," | ||
259 | "using default.", set); | ||
260 | } | ||
261 | |||
262 | return 0; | ||
263 | } | ||
264 | |||
265 | /* parse the mtdset= option given to the kernel command line */ | ||
266 | __setup("mtdset=", jive_mtdset); | ||
267 | |||
268 | /* LCD timing and setup */ | ||
269 | |||
270 | #define LCD_XRES (240) | ||
271 | #define LCD_YRES (320) | ||
272 | #define LCD_LEFT_MARGIN (12) | ||
273 | #define LCD_RIGHT_MARGIN (12) | ||
274 | #define LCD_LOWER_MARGIN (12) | ||
275 | #define LCD_UPPER_MARGIN (12) | ||
276 | #define LCD_VSYNC (2) | ||
277 | #define LCD_HSYNC (2) | ||
278 | |||
279 | #define LCD_REFRESH (60) | ||
280 | |||
281 | #define LCD_HTOT (LCD_HSYNC + LCD_LEFT_MARGIN + LCD_XRES + LCD_RIGHT_MARGIN) | ||
282 | #define LCD_VTOT (LCD_VSYNC + LCD_LOWER_MARGIN + LCD_YRES + LCD_UPPER_MARGIN) | ||
283 | |||
284 | struct s3c2410fb_display jive_vgg2432a4_display[] = { | ||
285 | [0] = { | ||
286 | .width = LCD_XRES, | ||
287 | .height = LCD_YRES, | ||
288 | .xres = LCD_XRES, | ||
289 | .yres = LCD_YRES, | ||
290 | .left_margin = LCD_LEFT_MARGIN, | ||
291 | .right_margin = LCD_RIGHT_MARGIN, | ||
292 | .upper_margin = LCD_UPPER_MARGIN, | ||
293 | .lower_margin = LCD_LOWER_MARGIN, | ||
294 | .hsync_len = LCD_HSYNC, | ||
295 | .vsync_len = LCD_VSYNC, | ||
296 | |||
297 | .pixclock = (1000000000000LL / | ||
298 | (LCD_REFRESH * LCD_HTOT * LCD_VTOT)), | ||
299 | |||
300 | .bpp = 16, | ||
301 | .type = (S3C2410_LCDCON1_TFT16BPP | | ||
302 | S3C2410_LCDCON1_TFT), | ||
303 | |||
304 | .lcdcon5 = (S3C2410_LCDCON5_FRM565 | | ||
305 | S3C2410_LCDCON5_INVVLINE | | ||
306 | S3C2410_LCDCON5_INVVFRAME | | ||
307 | S3C2410_LCDCON5_INVVDEN | | ||
308 | S3C2410_LCDCON5_PWREN), | ||
309 | }, | ||
310 | }; | ||
311 | |||
312 | /* todo - put into gpio header */ | ||
313 | |||
314 | #define S3C2410_GPCCON_MASK(x) (3 << ((x) * 2)) | ||
315 | #define S3C2410_GPDCON_MASK(x) (3 << ((x) * 2)) | ||
316 | |||
317 | struct s3c2410fb_mach_info jive_lcd_config = { | ||
318 | .displays = jive_vgg2432a4_display, | ||
319 | .num_displays = ARRAY_SIZE(jive_vgg2432a4_display), | ||
320 | .default_display = 0, | ||
321 | |||
322 | /* Enable VD[2..7], VD[10..15], VD[18..23] and VCLK, syncs, VDEN | ||
323 | * and disable the pull down resistors on pins we are using for LCD | ||
324 | * data. */ | ||
325 | |||
326 | .gpcup = (0xf << 1) | (0x3f << 10), | ||
327 | |||
328 | .gpccon = (S3C2410_GPC1_VCLK | S3C2410_GPC2_VLINE | | ||
329 | S3C2410_GPC3_VFRAME | S3C2410_GPC4_VM | | ||
330 | S3C2410_GPC10_VD2 | S3C2410_GPC11_VD3 | | ||
331 | S3C2410_GPC12_VD4 | S3C2410_GPC13_VD5 | | ||
332 | S3C2410_GPC14_VD6 | S3C2410_GPC15_VD7), | ||
333 | |||
334 | .gpccon_mask = (S3C2410_GPCCON_MASK(1) | S3C2410_GPCCON_MASK(2) | | ||
335 | S3C2410_GPCCON_MASK(3) | S3C2410_GPCCON_MASK(4) | | ||
336 | S3C2410_GPCCON_MASK(10) | S3C2410_GPCCON_MASK(11) | | ||
337 | S3C2410_GPCCON_MASK(12) | S3C2410_GPCCON_MASK(13) | | ||
338 | S3C2410_GPCCON_MASK(14) | S3C2410_GPCCON_MASK(15)), | ||
339 | |||
340 | .gpdup = (0x3f << 2) | (0x3f << 10), | ||
341 | |||
342 | .gpdcon = (S3C2410_GPD2_VD10 | S3C2410_GPD3_VD11 | | ||
343 | S3C2410_GPD4_VD12 | S3C2410_GPD5_VD13 | | ||
344 | S3C2410_GPD6_VD14 | S3C2410_GPD7_VD15 | | ||
345 | S3C2410_GPD10_VD18 | S3C2410_GPD11_VD19 | | ||
346 | S3C2410_GPD12_VD20 | S3C2410_GPD13_VD21 | | ||
347 | S3C2410_GPD14_VD22 | S3C2410_GPD15_VD23), | ||
348 | |||
349 | .gpdcon_mask = (S3C2410_GPDCON_MASK(2) | S3C2410_GPDCON_MASK(3) | | ||
350 | S3C2410_GPDCON_MASK(4) | S3C2410_GPDCON_MASK(5) | | ||
351 | S3C2410_GPDCON_MASK(6) | S3C2410_GPDCON_MASK(7) | | ||
352 | S3C2410_GPDCON_MASK(10) | S3C2410_GPDCON_MASK(11)| | ||
353 | S3C2410_GPDCON_MASK(12) | S3C2410_GPDCON_MASK(13)| | ||
354 | S3C2410_GPDCON_MASK(14) | S3C2410_GPDCON_MASK(15)), | ||
355 | }; | ||
356 | |||
357 | /* ILI9320 support. */ | ||
358 | |||
359 | static void jive_lcm_reset(unsigned int set) | ||
360 | { | ||
361 | printk(KERN_DEBUG "%s(%d)\n", __func__, set); | ||
362 | |||
363 | s3c2410_gpio_setpin(S3C2410_GPG13, set); | ||
364 | s3c2410_gpio_cfgpin(S3C2410_GPG13, S3C2410_GPIO_OUTPUT); | ||
365 | } | ||
366 | |||
367 | #undef LCD_UPPER_MARGIN | ||
368 | #define LCD_UPPER_MARGIN 2 | ||
369 | |||
370 | static struct ili9320_platdata jive_lcm_config = { | ||
371 | .hsize = LCD_XRES, | ||
372 | .vsize = LCD_YRES, | ||
373 | |||
374 | .reset = jive_lcm_reset, | ||
375 | .suspend = ILI9320_SUSPEND_DEEP, | ||
376 | |||
377 | .entry_mode = ILI9320_ENTRYMODE_ID(3) | ILI9320_ENTRYMODE_BGR, | ||
378 | .display2 = (ILI9320_DISPLAY2_FP(LCD_UPPER_MARGIN) | | ||
379 | ILI9320_DISPLAY2_BP(LCD_LOWER_MARGIN)), | ||
380 | .display3 = 0x0, | ||
381 | .display4 = 0x0, | ||
382 | .rgb_if1 = (ILI9320_RGBIF1_RIM_RGB18 | | ||
383 | ILI9320_RGBIF1_RM | ILI9320_RGBIF1_CLK_RGBIF), | ||
384 | .rgb_if2 = ILI9320_RGBIF2_DPL, | ||
385 | .interface2 = 0x0, | ||
386 | .interface3 = 0x3, | ||
387 | .interface4 = (ILI9320_INTERFACE4_RTNE(16) | | ||
388 | ILI9320_INTERFACE4_DIVE(1)), | ||
389 | .interface5 = 0x0, | ||
390 | .interface6 = 0x0, | ||
391 | }; | ||
392 | |||
393 | /* LCD SPI support */ | ||
394 | |||
395 | static void jive_lcd_spi_chipselect(struct s3c2410_spigpio_info *spi, int cs) | ||
396 | { | ||
397 | s3c2410_gpio_setpin(S3C2410_GPB7, cs ? 0 : 1); | ||
398 | } | ||
399 | |||
400 | static struct s3c2410_spigpio_info jive_lcd_spi = { | ||
401 | .bus_num = 0, | ||
402 | .pin_clk = S3C2410_GPG8, | ||
403 | .pin_mosi = S3C2410_GPB8, | ||
404 | .chip_select = jive_lcd_spi_chipselect, | ||
405 | }; | ||
406 | |||
407 | static struct platform_device jive_device_lcdspi = { | ||
408 | .name = "s3c24xx-spi-gpio", | ||
409 | .id = 1, | ||
410 | .num_resources = 0, | ||
411 | .dev.platform_data = &jive_lcd_spi, | ||
412 | }; | ||
413 | |||
414 | /* WM8750 audio code SPI definition */ | ||
415 | |||
416 | static void jive_wm8750_chipselect(struct s3c2410_spigpio_info *spi, int cs) | ||
417 | { | ||
418 | s3c2410_gpio_setpin(S3C2410_GPH10, cs ? 0 : 1); | ||
419 | } | ||
420 | |||
421 | static struct s3c2410_spigpio_info jive_wm8750_spi = { | ||
422 | .bus_num = 2, | ||
423 | .pin_clk = S3C2410_GPB4, | ||
424 | .pin_mosi = S3C2410_GPB9, | ||
425 | .chip_select = jive_wm8750_chipselect, | ||
426 | }; | ||
427 | |||
428 | static struct platform_device jive_device_wm8750 = { | ||
429 | .name = "s3c24xx-spi-gpio", | ||
430 | .id = 2, | ||
431 | .num_resources = 0, | ||
432 | .dev.platform_data = &jive_wm8750_spi, | ||
433 | }; | ||
434 | |||
435 | /* JIVE SPI devices. */ | ||
436 | |||
437 | static struct spi_board_info __initdata jive_spi_devs[] = { | ||
438 | [0] = { | ||
439 | .modalias = "VGG2432A4", | ||
440 | .bus_num = 1, | ||
441 | .chip_select = 0, | ||
442 | .mode = SPI_MODE_3, /* CPOL=1, CPHA=1 */ | ||
443 | .max_speed_hz = 100000, | ||
444 | .platform_data = &jive_lcm_config, | ||
445 | }, { | ||
446 | .modalias = "WM8750", | ||
447 | .bus_num = 2, | ||
448 | .chip_select = 0, | ||
449 | .mode = SPI_MODE_0, /* CPOL=0, CPHA=0 */ | ||
450 | .max_speed_hz = 100000, | ||
451 | }, | ||
452 | }; | ||
453 | |||
454 | /* I2C bus and device configuration. */ | ||
455 | |||
456 | static struct s3c2410_platform_i2c jive_i2c_cfg = { | ||
457 | .max_freq = 80 * 1000, | ||
458 | .bus_freq = 50 * 1000, | ||
459 | .flags = S3C_IICFLG_FILTER, | ||
460 | .sda_delay = 2, | ||
461 | }; | ||
462 | |||
463 | static struct i2c_board_info jive_i2c_devs[] = { | ||
464 | [0] = { | ||
465 | I2C_BOARD_INFO("lis302dl", 0x1c), | ||
466 | .irq = IRQ_EINT14, | ||
467 | }, | ||
468 | }; | ||
469 | |||
470 | /* The platform devices being used. */ | ||
471 | |||
472 | static struct platform_device *jive_devices[] __initdata = { | ||
473 | &s3c_device_usb, | ||
474 | &s3c_device_rtc, | ||
475 | &s3c_device_wdt, | ||
476 | &s3c_device_i2c, | ||
477 | &s3c_device_lcd, | ||
478 | &jive_device_lcdspi, | ||
479 | &jive_device_wm8750, | ||
480 | &s3c_device_nand, | ||
481 | &s3c_device_usbgadget, | ||
482 | }; | ||
483 | |||
484 | static struct s3c2410_udc_mach_info jive_udc_cfg __initdata = { | ||
485 | .vbus_pin = S3C2410_GPG1, /* detect is on GPG1 */ | ||
486 | }; | ||
487 | |||
488 | /* Jive power management device */ | ||
489 | |||
490 | #ifdef CONFIG_PM | ||
491 | static int jive_pm_suspend(struct sys_device *sd, pm_message_t state) | ||
492 | { | ||
493 | /* Write the magic value u-boot uses to check for resume into | ||
494 | * the INFORM0 register, and ensure INFORM1 is set to the | ||
495 | * correct address to resume from. */ | ||
496 | |||
497 | __raw_writel(0x2BED, S3C2412_INFORM0); | ||
498 | __raw_writel(virt_to_phys(s3c2410_cpu_resume), S3C2412_INFORM1); | ||
499 | |||
500 | return 0; | ||
501 | } | ||
502 | |||
503 | static int jive_pm_resume(struct sys_device *sd) | ||
504 | { | ||
505 | __raw_writel(0x0, S3C2412_INFORM0); | ||
506 | return 0; | ||
507 | } | ||
508 | |||
509 | #else | ||
510 | #define jive_pm_suspend NULL | ||
511 | #define jive_pm_resume NULL | ||
512 | #endif | ||
513 | |||
514 | static struct sysdev_class jive_pm_sysclass = { | ||
515 | .name = "jive-pm", | ||
516 | .suspend = jive_pm_suspend, | ||
517 | .resume = jive_pm_resume, | ||
518 | }; | ||
519 | |||
520 | static struct sys_device jive_pm_sysdev = { | ||
521 | .cls = &jive_pm_sysclass, | ||
522 | }; | ||
523 | |||
524 | static void __init jive_map_io(void) | ||
525 | { | ||
526 | s3c24xx_init_io(jive_iodesc, ARRAY_SIZE(jive_iodesc)); | ||
527 | s3c24xx_init_clocks(12000000); | ||
528 | s3c24xx_init_uarts(jive_uartcfgs, ARRAY_SIZE(jive_uartcfgs)); | ||
529 | } | ||
530 | |||
531 | static void jive_power_off(void) | ||
532 | { | ||
533 | printk(KERN_INFO "powering system down...\n"); | ||
534 | |||
535 | s3c2410_gpio_setpin(S3C2410_GPC5, 1); | ||
536 | s3c2410_gpio_cfgpin(S3C2410_GPC5, S3C2410_GPIO_OUTPUT); | ||
537 | } | ||
538 | |||
539 | static void __init jive_machine_init(void) | ||
540 | { | ||
541 | /* register system devices for managing low level suspend */ | ||
542 | |||
543 | sysdev_class_register(&jive_pm_sysclass); | ||
544 | sysdev_register(&jive_pm_sysdev); | ||
545 | |||
546 | /* write our sleep configurations for the IO. Pull down all unused | ||
547 | * IO, ensure that we have turned off all peripherals we do not | ||
548 | * need, and configure the ones we do need. */ | ||
549 | |||
550 | /* Port B sleep */ | ||
551 | |||
552 | __raw_writel(S3C2412_SLPCON_IN(0) | | ||
553 | S3C2412_SLPCON_PULL(1) | | ||
554 | S3C2412_SLPCON_HIGH(2) | | ||
555 | S3C2412_SLPCON_PULL(3) | | ||
556 | S3C2412_SLPCON_PULL(4) | | ||
557 | S3C2412_SLPCON_PULL(5) | | ||
558 | S3C2412_SLPCON_PULL(6) | | ||
559 | S3C2412_SLPCON_HIGH(7) | | ||
560 | S3C2412_SLPCON_PULL(8) | | ||
561 | S3C2412_SLPCON_PULL(9) | | ||
562 | S3C2412_SLPCON_PULL(10), S3C2412_GPBSLPCON); | ||
563 | |||
564 | /* Port C sleep */ | ||
565 | |||
566 | __raw_writel(S3C2412_SLPCON_PULL(0) | | ||
567 | S3C2412_SLPCON_PULL(1) | | ||
568 | S3C2412_SLPCON_PULL(2) | | ||
569 | S3C2412_SLPCON_PULL(3) | | ||
570 | S3C2412_SLPCON_PULL(4) | | ||
571 | S3C2412_SLPCON_PULL(5) | | ||
572 | S3C2412_SLPCON_LOW(6) | | ||
573 | S3C2412_SLPCON_PULL(6) | | ||
574 | S3C2412_SLPCON_PULL(7) | | ||
575 | S3C2412_SLPCON_PULL(8) | | ||
576 | S3C2412_SLPCON_PULL(9) | | ||
577 | S3C2412_SLPCON_PULL(10) | | ||
578 | S3C2412_SLPCON_PULL(11) | | ||
579 | S3C2412_SLPCON_PULL(12) | | ||
580 | S3C2412_SLPCON_PULL(13) | | ||
581 | S3C2412_SLPCON_PULL(14) | | ||
582 | S3C2412_SLPCON_PULL(15), S3C2412_GPCSLPCON); | ||
583 | |||
584 | /* Port D sleep */ | ||
585 | |||
586 | __raw_writel(S3C2412_SLPCON_ALL_PULL, S3C2412_GPDSLPCON); | ||
587 | |||
588 | /* Port F sleep */ | ||
589 | |||
590 | __raw_writel(S3C2412_SLPCON_LOW(0) | | ||
591 | S3C2412_SLPCON_LOW(1) | | ||
592 | S3C2412_SLPCON_LOW(2) | | ||
593 | S3C2412_SLPCON_EINT(3) | | ||
594 | S3C2412_SLPCON_EINT(4) | | ||
595 | S3C2412_SLPCON_EINT(5) | | ||
596 | S3C2412_SLPCON_EINT(6) | | ||
597 | S3C2412_SLPCON_EINT(7), S3C2412_GPFSLPCON); | ||
598 | |||
599 | /* Port G sleep */ | ||
600 | |||
601 | __raw_writel(S3C2412_SLPCON_IN(0) | | ||
602 | S3C2412_SLPCON_IN(1) | | ||
603 | S3C2412_SLPCON_IN(2) | | ||
604 | S3C2412_SLPCON_IN(3) | | ||
605 | S3C2412_SLPCON_IN(4) | | ||
606 | S3C2412_SLPCON_IN(5) | | ||
607 | S3C2412_SLPCON_IN(6) | | ||
608 | S3C2412_SLPCON_IN(7) | | ||
609 | S3C2412_SLPCON_PULL(8) | | ||
610 | S3C2412_SLPCON_PULL(9) | | ||
611 | S3C2412_SLPCON_IN(10) | | ||
612 | S3C2412_SLPCON_PULL(11) | | ||
613 | S3C2412_SLPCON_PULL(12) | | ||
614 | S3C2412_SLPCON_PULL(13) | | ||
615 | S3C2412_SLPCON_IN(14) | | ||
616 | S3C2412_SLPCON_PULL(15), S3C2412_GPGSLPCON); | ||
617 | |||
618 | /* Port H sleep */ | ||
619 | |||
620 | __raw_writel(S3C2412_SLPCON_PULL(0) | | ||
621 | S3C2412_SLPCON_PULL(1) | | ||
622 | S3C2412_SLPCON_PULL(2) | | ||
623 | S3C2412_SLPCON_PULL(3) | | ||
624 | S3C2412_SLPCON_PULL(4) | | ||
625 | S3C2412_SLPCON_PULL(5) | | ||
626 | S3C2412_SLPCON_PULL(6) | | ||
627 | S3C2412_SLPCON_IN(7) | | ||
628 | S3C2412_SLPCON_IN(8) | | ||
629 | S3C2412_SLPCON_PULL(9) | | ||
630 | S3C2412_SLPCON_IN(10), S3C2412_GPHSLPCON); | ||
631 | |||
632 | /* initialise the power management now we've setup everything. */ | ||
633 | |||
634 | s3c2410_pm_init(); | ||
635 | |||
636 | s3c_device_nand.dev.platform_data = &jive_nand_info; | ||
637 | |||
638 | /* initialise the spi */ | ||
639 | |||
640 | s3c2410_gpio_setpin(S3C2410_GPG13, 0); | ||
641 | s3c2410_gpio_cfgpin(S3C2410_GPG13, S3C2410_GPIO_OUTPUT); | ||
642 | |||
643 | s3c2410_gpio_setpin(S3C2410_GPB7, 1); | ||
644 | s3c2410_gpio_cfgpin(S3C2410_GPB7, S3C2410_GPIO_OUTPUT); | ||
645 | |||
646 | s3c2410_gpio_setpin(S3C2410_GPB6, 0); | ||
647 | s3c2410_gpio_cfgpin(S3C2410_GPB6, S3C2410_GPIO_OUTPUT); | ||
648 | |||
649 | s3c2410_gpio_setpin(S3C2410_GPG8, 1); | ||
650 | s3c2410_gpio_cfgpin(S3C2410_GPG8, S3C2410_GPIO_OUTPUT); | ||
651 | |||
652 | /* initialise the WM8750 spi */ | ||
653 | |||
654 | s3c2410_gpio_setpin(S3C2410_GPH10, 1); | ||
655 | s3c2410_gpio_cfgpin(S3C2410_GPH10, S3C2410_GPIO_OUTPUT); | ||
656 | |||
657 | /* Turn off suspend on both USB ports, and switch the | ||
658 | * selectable USB port to USB device mode. */ | ||
659 | |||
660 | s3c2410_modify_misccr(S3C2410_MISCCR_USBHOST | | ||
661 | S3C2410_MISCCR_USBSUSPND0 | | ||
662 | S3C2410_MISCCR_USBSUSPND1, 0x0); | ||
663 | |||
664 | s3c24xx_udc_set_platdata(&jive_udc_cfg); | ||
665 | s3c24xx_fb_set_platdata(&jive_lcd_config); | ||
666 | |||
667 | spi_register_board_info(jive_spi_devs, ARRAY_SIZE(jive_spi_devs)); | ||
668 | |||
669 | s3c_device_i2c.dev.platform_data = &jive_i2c_cfg; | ||
670 | i2c_register_board_info(0, jive_i2c_devs, ARRAY_SIZE(jive_i2c_devs)); | ||
671 | |||
672 | pm_power_off = jive_power_off; | ||
673 | |||
674 | platform_add_devices(jive_devices, ARRAY_SIZE(jive_devices)); | ||
675 | } | ||
676 | |||
677 | MACHINE_START(JIVE, "JIVE") | ||
678 | /* Maintainer: Ben Dooks <ben@fluff.org> */ | ||
679 | .phys_io = S3C2410_PA_UART, | ||
680 | .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc, | ||
681 | .boot_params = S3C2410_SDRAM_PA + 0x100, | ||
682 | |||
683 | .init_irq = s3c24xx_init_irq, | ||
684 | .map_io = jive_map_io, | ||
685 | .init_machine = jive_machine_init, | ||
686 | .timer = &s3c24xx_timer, | ||
687 | MACHINE_END | ||
diff --git a/arch/arm/mach-s3c2440/Kconfig b/arch/arm/mach-s3c2440/Kconfig index f1915bd61d15..25de042ab996 100644 --- a/arch/arm/mach-s3c2440/Kconfig +++ b/arch/arm/mach-s3c2440/Kconfig | |||
@@ -29,6 +29,7 @@ config MACH_ANUBIS | |||
29 | bool "Simtec Electronics ANUBIS" | 29 | bool "Simtec Electronics ANUBIS" |
30 | select CPU_S3C2440 | 30 | select CPU_S3C2440 |
31 | select PM_SIMTEC if PM | 31 | select PM_SIMTEC if PM |
32 | select HAVE_PATA_PLATFORM | ||
32 | help | 33 | help |
33 | Say Y here if you are using the Simtec Electronics ANUBIS | 34 | Say Y here if you are using the Simtec Electronics ANUBIS |
34 | development system | 35 | development system |
@@ -67,6 +68,11 @@ config SMDK2440_CPU2440 | |||
67 | default y if ARCH_S3C2440 | 68 | default y if ARCH_S3C2440 |
68 | select CPU_S3C2440 | 69 | select CPU_S3C2440 |
69 | 70 | ||
71 | config MACH_AT2440EVB | ||
72 | bool "Avantech AT2440EVB development board" | ||
73 | select CPU_S3C2440 | ||
74 | help | ||
75 | Say Y here if you are using the AT2440EVB development board | ||
70 | 76 | ||
71 | endmenu | 77 | endmenu |
72 | 78 | ||
diff --git a/arch/arm/mach-s3c2440/Makefile b/arch/arm/mach-s3c2440/Makefile index c81ed6248dcb..0b4440e79b90 100644 --- a/arch/arm/mach-s3c2440/Makefile +++ b/arch/arm/mach-s3c2440/Makefile | |||
@@ -21,3 +21,4 @@ obj-$(CONFIG_MACH_OSIRIS) += mach-osiris.o | |||
21 | obj-$(CONFIG_MACH_RX3715) += mach-rx3715.o | 21 | obj-$(CONFIG_MACH_RX3715) += mach-rx3715.o |
22 | obj-$(CONFIG_ARCH_S3C2440) += mach-smdk2440.o | 22 | obj-$(CONFIG_ARCH_S3C2440) += mach-smdk2440.o |
23 | obj-$(CONFIG_MACH_NEXCODER_2440) += mach-nexcoder.o | 23 | obj-$(CONFIG_MACH_NEXCODER_2440) += mach-nexcoder.o |
24 | obj-$(CONFIG_MACH_AT2440EVB) += mach-at2440evb.o | ||
diff --git a/arch/arm/mach-s3c2440/mach-anubis.c b/arch/arm/mach-s3c2440/mach-anubis.c index 47258915a2f9..09af8b23500b 100644 --- a/arch/arm/mach-s3c2440/mach-anubis.c +++ b/arch/arm/mach-s3c2440/mach-anubis.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* linux/arch/arm/mach-s3c2440/mach-anubis.c | 1 | /* linux/arch/arm/mach-s3c2440/mach-anubis.c |
2 | * | 2 | * |
3 | * Copyright (c) 2003-2005 Simtec Electronics | 3 | * Copyright (c) 2003-2005,2008 Simtec Electronics |
4 | * http://armlinux.simtec.co.uk/ | 4 | * http://armlinux.simtec.co.uk/ |
5 | * Ben Dooks <ben@simtec.co.uk> | 5 | * Ben Dooks <ben@simtec.co.uk> |
6 | * | 6 | * |
@@ -17,6 +17,8 @@ | |||
17 | #include <linux/init.h> | 17 | #include <linux/init.h> |
18 | #include <linux/serial_core.h> | 18 | #include <linux/serial_core.h> |
19 | #include <linux/platform_device.h> | 19 | #include <linux/platform_device.h> |
20 | #include <linux/ata_platform.h> | ||
21 | #include <linux/i2c.h> | ||
20 | 22 | ||
21 | #include <linux/sm501.h> | 23 | #include <linux/sm501.h> |
22 | #include <linux/sm501-regs.h> | 24 | #include <linux/sm501-regs.h> |
@@ -241,14 +243,18 @@ static struct s3c2410_platform_nand anubis_nand_info = { | |||
241 | 243 | ||
242 | /* IDE channels */ | 244 | /* IDE channels */ |
243 | 245 | ||
246 | struct pata_platform_info anubis_ide_platdata = { | ||
247 | .ioport_shift = 5, | ||
248 | }; | ||
249 | |||
244 | static struct resource anubis_ide0_resource[] = { | 250 | static struct resource anubis_ide0_resource[] = { |
245 | { | 251 | { |
246 | .start = S3C2410_CS3, | 252 | .start = S3C2410_CS3, |
247 | .end = S3C2410_CS3 + (8*32) - 1, | 253 | .end = S3C2410_CS3 + (8*32) - 1, |
248 | .flags = IORESOURCE_MEM, | 254 | .flags = IORESOURCE_MEM, |
249 | }, { | 255 | }, { |
250 | .start = S3C2410_CS3 + (1<<26), | 256 | .start = S3C2410_CS3 + (1<<26) + (6*32), |
251 | .end = S3C2410_CS3 + (1<<26) + (8*32) - 1, | 257 | .end = S3C2410_CS3 + (1<<26) + (7*32) - 1, |
252 | .flags = IORESOURCE_MEM, | 258 | .flags = IORESOURCE_MEM, |
253 | }, { | 259 | }, { |
254 | .start = IRQ_IDE0, | 260 | .start = IRQ_IDE0, |
@@ -258,10 +264,14 @@ static struct resource anubis_ide0_resource[] = { | |||
258 | }; | 264 | }; |
259 | 265 | ||
260 | static struct platform_device anubis_device_ide0 = { | 266 | static struct platform_device anubis_device_ide0 = { |
261 | .name = "simtec-ide", | 267 | .name = "pata_platform", |
262 | .id = 0, | 268 | .id = 0, |
263 | .num_resources = ARRAY_SIZE(anubis_ide0_resource), | 269 | .num_resources = ARRAY_SIZE(anubis_ide0_resource), |
264 | .resource = anubis_ide0_resource, | 270 | .resource = anubis_ide0_resource, |
271 | .dev = { | ||
272 | .platform_data = &anubis_ide_platdata, | ||
273 | .coherent_dma_mask = ~0, | ||
274 | }, | ||
265 | }; | 275 | }; |
266 | 276 | ||
267 | static struct resource anubis_ide1_resource[] = { | 277 | static struct resource anubis_ide1_resource[] = { |
@@ -270,8 +280,8 @@ static struct resource anubis_ide1_resource[] = { | |||
270 | .end = S3C2410_CS4 + (8*32) - 1, | 280 | .end = S3C2410_CS4 + (8*32) - 1, |
271 | .flags = IORESOURCE_MEM, | 281 | .flags = IORESOURCE_MEM, |
272 | }, { | 282 | }, { |
273 | .start = S3C2410_CS4 + (1<<26), | 283 | .start = S3C2410_CS4 + (1<<26) + (6*32), |
274 | .end = S3C2410_CS4 + (1<<26) + (8*32) - 1, | 284 | .end = S3C2410_CS4 + (1<<26) + (7*32) - 1, |
275 | .flags = IORESOURCE_MEM, | 285 | .flags = IORESOURCE_MEM, |
276 | }, { | 286 | }, { |
277 | .start = IRQ_IDE0, | 287 | .start = IRQ_IDE0, |
@@ -280,12 +290,15 @@ static struct resource anubis_ide1_resource[] = { | |||
280 | }, | 290 | }, |
281 | }; | 291 | }; |
282 | 292 | ||
283 | |||
284 | static struct platform_device anubis_device_ide1 = { | 293 | static struct platform_device anubis_device_ide1 = { |
285 | .name = "simtec-ide", | 294 | .name = "pata_platform", |
286 | .id = 1, | 295 | .id = 1, |
287 | .num_resources = ARRAY_SIZE(anubis_ide1_resource), | 296 | .num_resources = ARRAY_SIZE(anubis_ide1_resource), |
288 | .resource = anubis_ide1_resource, | 297 | .resource = anubis_ide1_resource, |
298 | .dev = { | ||
299 | .platform_data = &anubis_ide_platdata, | ||
300 | .coherent_dma_mask = ~0, | ||
301 | }, | ||
289 | }; | 302 | }; |
290 | 303 | ||
291 | /* Asix AX88796 10/100 ethernet controller */ | 304 | /* Asix AX88796 10/100 ethernet controller */ |
@@ -409,6 +422,15 @@ static struct clk *anubis_clocks[] = { | |||
409 | &s3c24xx_uclk, | 422 | &s3c24xx_uclk, |
410 | }; | 423 | }; |
411 | 424 | ||
425 | /* I2C devices. */ | ||
426 | |||
427 | static struct i2c_board_info anubis_i2c_devs[] __initdata = { | ||
428 | { | ||
429 | I2C_BOARD_INFO("tps65011", 0x48), | ||
430 | .irq = IRQ_EINT20, | ||
431 | } | ||
432 | }; | ||
433 | |||
412 | static void __init anubis_map_io(void) | 434 | static void __init anubis_map_io(void) |
413 | { | 435 | { |
414 | /* initialise the clocks */ | 436 | /* initialise the clocks */ |
@@ -448,6 +470,9 @@ static void __init anubis_map_io(void) | |||
448 | static void __init anubis_init(void) | 470 | static void __init anubis_init(void) |
449 | { | 471 | { |
450 | platform_add_devices(anubis_devices, ARRAY_SIZE(anubis_devices)); | 472 | platform_add_devices(anubis_devices, ARRAY_SIZE(anubis_devices)); |
473 | |||
474 | i2c_register_board_info(0, anubis_i2c_devs, | ||
475 | ARRAY_SIZE(anubis_i2c_devs)); | ||
451 | } | 476 | } |
452 | 477 | ||
453 | 478 | ||
diff --git a/arch/arm/mach-s3c2440/mach-at2440evb.c b/arch/arm/mach-s3c2440/mach-at2440evb.c new file mode 100644 index 000000000000..f5e3c7f27639 --- /dev/null +++ b/arch/arm/mach-s3c2440/mach-at2440evb.c | |||
@@ -0,0 +1,198 @@ | |||
1 | /* linux/arch/arm/mach-s3c2440/mach-at2440evb.c | ||
2 | * | ||
3 | * Copyright (c) 2008 Ramax Lo <ramaxlo@gmail.com> | ||
4 | * Based on mach-anubis.c by Ben Dooks <ben@simtec.co.uk> | ||
5 | * and modifications by SBZ <sbz@spgui.org> and | ||
6 | * Weibing <http://weibing.blogbus.com> | ||
7 | * | ||
8 | * For product information, visit http://www.arm9e.com/ | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License version 2 as | ||
12 | * published by the Free Software Foundation. | ||
13 | */ | ||
14 | |||
15 | #include <linux/kernel.h> | ||
16 | #include <linux/types.h> | ||
17 | #include <linux/interrupt.h> | ||
18 | #include <linux/list.h> | ||
19 | #include <linux/timer.h> | ||
20 | #include <linux/init.h> | ||
21 | #include <linux/io.h> | ||
22 | #include <linux/serial_core.h> | ||
23 | #include <linux/dm9000.h> | ||
24 | #include <linux/platform_device.h> | ||
25 | |||
26 | #include <asm/mach/arch.h> | ||
27 | #include <asm/mach/map.h> | ||
28 | #include <asm/mach/irq.h> | ||
29 | |||
30 | #include <asm/hardware.h> | ||
31 | #include <asm/irq.h> | ||
32 | #include <asm/mach-types.h> | ||
33 | |||
34 | #include <asm/plat-s3c/regs-serial.h> | ||
35 | #include <asm/arch/regs-gpio.h> | ||
36 | #include <asm/arch/regs-mem.h> | ||
37 | #include <asm/arch/regs-lcd.h> | ||
38 | #include <asm/plat-s3c/nand.h> | ||
39 | |||
40 | #include <linux/mtd/mtd.h> | ||
41 | #include <linux/mtd/nand.h> | ||
42 | #include <linux/mtd/nand_ecc.h> | ||
43 | #include <linux/mtd/partitions.h> | ||
44 | |||
45 | #include <asm/plat-s3c24xx/clock.h> | ||
46 | #include <asm/plat-s3c24xx/devs.h> | ||
47 | #include <asm/plat-s3c24xx/cpu.h> | ||
48 | |||
49 | static struct map_desc at2440evb_iodesc[] __initdata = { | ||
50 | /* Nothing here */ | ||
51 | }; | ||
52 | |||
53 | #define UCON S3C2410_UCON_DEFAULT | ||
54 | #define ULCON (S3C2410_LCON_CS8 | S3C2410_LCON_PNONE) | ||
55 | #define UFCON (S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE) | ||
56 | |||
57 | static struct s3c24xx_uart_clksrc at2440evb_serial_clocks[] = { | ||
58 | [0] = { | ||
59 | .name = "uclk", | ||
60 | .divisor = 1, | ||
61 | .min_baud = 0, | ||
62 | .max_baud = 0, | ||
63 | }, | ||
64 | [1] = { | ||
65 | .name = "pclk", | ||
66 | .divisor = 1, | ||
67 | .min_baud = 0, | ||
68 | .max_baud = 0, | ||
69 | } | ||
70 | }; | ||
71 | |||
72 | |||
73 | static struct s3c2410_uartcfg at2440evb_uartcfgs[] __initdata = { | ||
74 | [0] = { | ||
75 | .hwport = 0, | ||
76 | .flags = 0, | ||
77 | .ucon = UCON, | ||
78 | .ulcon = ULCON, | ||
79 | .ufcon = UFCON, | ||
80 | .clocks = at2440evb_serial_clocks, | ||
81 | .clocks_size = ARRAY_SIZE(at2440evb_serial_clocks), | ||
82 | }, | ||
83 | [1] = { | ||
84 | .hwport = 1, | ||
85 | .flags = 0, | ||
86 | .ucon = UCON, | ||
87 | .ulcon = ULCON, | ||
88 | .ufcon = UFCON, | ||
89 | .clocks = at2440evb_serial_clocks, | ||
90 | .clocks_size = ARRAY_SIZE(at2440evb_serial_clocks), | ||
91 | }, | ||
92 | }; | ||
93 | |||
94 | /* NAND Flash on AT2440EVB board */ | ||
95 | |||
96 | static struct mtd_partition at2440evb_default_nand_part[] = { | ||
97 | [0] = { | ||
98 | .name = "Boot Agent", | ||
99 | .size = SZ_256K, | ||
100 | .offset = 0, | ||
101 | }, | ||
102 | [1] = { | ||
103 | .name = "Kernel", | ||
104 | .size = SZ_2M, | ||
105 | .offset = SZ_256K, | ||
106 | }, | ||
107 | [2] = { | ||
108 | .name = "Root", | ||
109 | .offset = SZ_256K + SZ_2M, | ||
110 | .size = MTDPART_SIZ_FULL, | ||
111 | }, | ||
112 | }; | ||
113 | |||
114 | static struct s3c2410_nand_set at2440evb_nand_sets[] = { | ||
115 | [0] = { | ||
116 | .name = "nand", | ||
117 | .nr_chips = 1, | ||
118 | .nr_partitions = ARRAY_SIZE(at2440evb_default_nand_part), | ||
119 | .partitions = at2440evb_default_nand_part, | ||
120 | }, | ||
121 | }; | ||
122 | |||
123 | static struct s3c2410_platform_nand at2440evb_nand_info = { | ||
124 | .tacls = 25, | ||
125 | .twrph0 = 55, | ||
126 | .twrph1 = 40, | ||
127 | .nr_sets = ARRAY_SIZE(at2440evb_nand_sets), | ||
128 | .sets = at2440evb_nand_sets, | ||
129 | }; | ||
130 | |||
131 | /* DM9000AEP 10/100 ethernet controller */ | ||
132 | |||
133 | static struct resource at2440evb_dm9k_resource[] = { | ||
134 | [0] = { | ||
135 | .start = S3C2410_CS3, | ||
136 | .end = S3C2410_CS3 + 3, | ||
137 | .flags = IORESOURCE_MEM | ||
138 | }, | ||
139 | [1] = { | ||
140 | .start = S3C2410_CS3 + 4, | ||
141 | .end = S3C2410_CS3 + 7, | ||
142 | .flags = IORESOURCE_MEM | ||
143 | }, | ||
144 | [2] = { | ||
145 | .start = IRQ_EINT7, | ||
146 | .end = IRQ_EINT7, | ||
147 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE, | ||
148 | } | ||
149 | }; | ||
150 | |||
151 | static struct dm9000_plat_data at2440evb_dm9k_pdata = { | ||
152 | .flags = (DM9000_PLATF_16BITONLY | DM9000_PLATF_NO_EEPROM), | ||
153 | }; | ||
154 | |||
155 | static struct platform_device at2440evb_device_eth = { | ||
156 | .name = "dm9000", | ||
157 | .id = -1, | ||
158 | .num_resources = ARRAY_SIZE(at2440evb_dm9k_resource), | ||
159 | .resource = at2440evb_dm9k_resource, | ||
160 | .dev = { | ||
161 | .platform_data = &at2440evb_dm9k_pdata, | ||
162 | }, | ||
163 | }; | ||
164 | |||
165 | static struct platform_device *at2440evb_devices[] __initdata = { | ||
166 | &s3c_device_usb, | ||
167 | &s3c_device_wdt, | ||
168 | &s3c_device_adc, | ||
169 | &s3c_device_i2c, | ||
170 | &s3c_device_rtc, | ||
171 | &s3c_device_nand, | ||
172 | &at2440evb_device_eth, | ||
173 | }; | ||
174 | |||
175 | static void __init at2440evb_map_io(void) | ||
176 | { | ||
177 | s3c_device_nand.dev.platform_data = &at2440evb_nand_info; | ||
178 | |||
179 | s3c24xx_init_io(at2440evb_iodesc, ARRAY_SIZE(at2440evb_iodesc)); | ||
180 | s3c24xx_init_clocks(16934400); | ||
181 | s3c24xx_init_uarts(at2440evb_uartcfgs, ARRAY_SIZE(at2440evb_uartcfgs)); | ||
182 | } | ||
183 | |||
184 | static void __init at2440evb_init(void) | ||
185 | { | ||
186 | platform_add_devices(at2440evb_devices, ARRAY_SIZE(at2440evb_devices)); | ||
187 | } | ||
188 | |||
189 | |||
190 | MACHINE_START(AT2440EVB, "AT2440EVB") | ||
191 | .phys_io = S3C2410_PA_UART, | ||
192 | .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc, | ||
193 | .boot_params = S3C2410_SDRAM_PA + 0x100, | ||
194 | .map_io = at2440evb_map_io, | ||
195 | .init_machine = at2440evb_init, | ||
196 | .init_irq = s3c24xx_init_irq, | ||
197 | .timer = &s3c24xx_timer, | ||
198 | MACHINE_END | ||
diff --git a/arch/arm/mach-s3c2440/mach-osiris.c b/arch/arm/mach-s3c2440/mach-osiris.c index 8a8acdbd072d..af996b0e91e8 100644 --- a/arch/arm/mach-s3c2440/mach-osiris.c +++ b/arch/arm/mach-s3c2440/mach-osiris.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* linux/arch/arm/mach-s3c2440/mach-osiris.c | 1 | /* linux/arch/arm/mach-s3c2440/mach-osiris.c |
2 | * | 2 | * |
3 | * Copyright (c) 2005 Simtec Electronics | 3 | * Copyright (c) 2005,2008 Simtec Electronics |
4 | * http://armlinux.simtec.co.uk/ | 4 | * http://armlinux.simtec.co.uk/ |
5 | * Ben Dooks <ben@simtec.co.uk> | 5 | * Ben Dooks <ben@simtec.co.uk> |
6 | * | 6 | * |
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/sysdev.h> | 19 | #include <linux/sysdev.h> |
20 | #include <linux/serial_core.h> | 20 | #include <linux/serial_core.h> |
21 | #include <linux/clk.h> | 21 | #include <linux/clk.h> |
22 | #include <linux/i2c.h> | ||
22 | 23 | ||
23 | #include <asm/mach/arch.h> | 24 | #include <asm/mach/arch.h> |
24 | #include <asm/mach/map.h> | 25 | #include <asm/mach/map.h> |
@@ -322,6 +323,15 @@ static struct sys_device osiris_pm_sysdev = { | |||
322 | .cls = &osiris_pm_sysclass, | 323 | .cls = &osiris_pm_sysclass, |
323 | }; | 324 | }; |
324 | 325 | ||
326 | /* I2C devices fitted. */ | ||
327 | |||
328 | static struct i2c_board_info osiris_i2c_devs[] __initdata = { | ||
329 | { | ||
330 | I2C_BOARD_INFO("tps65011", 0x48), | ||
331 | .irq = IRQ_EINT20, | ||
332 | }, | ||
333 | }; | ||
334 | |||
325 | /* Standard Osiris devices */ | 335 | /* Standard Osiris devices */ |
326 | 336 | ||
327 | static struct platform_device *osiris_devices[] __initdata = { | 337 | static struct platform_device *osiris_devices[] __initdata = { |
@@ -388,6 +398,9 @@ static void __init osiris_init(void) | |||
388 | sysdev_class_register(&osiris_pm_sysclass); | 398 | sysdev_class_register(&osiris_pm_sysclass); |
389 | sysdev_register(&osiris_pm_sysdev); | 399 | sysdev_register(&osiris_pm_sysdev); |
390 | 400 | ||
401 | i2c_register_board_info(0, osiris_i2c_devs, | ||
402 | ARRAY_SIZE(osiris_i2c_devs)); | ||
403 | |||
391 | platform_add_devices(osiris_devices, ARRAY_SIZE(osiris_devices)); | 404 | platform_add_devices(osiris_devices, ARRAY_SIZE(osiris_devices)); |
392 | }; | 405 | }; |
393 | 406 | ||
diff --git a/arch/arm/mach-s3c2443/clock.c b/arch/arm/mach-s3c2443/clock.c index b42f956738d0..17f064fabdaf 100644 --- a/arch/arm/mach-s3c2443/clock.c +++ b/arch/arm/mach-s3c2443/clock.c | |||
@@ -81,7 +81,7 @@ static int s3c2443_clkcon_enable_p(struct clk *clk, int enable) | |||
81 | else | 81 | else |
82 | clkcon &= ~clocks; | 82 | clkcon &= ~clocks; |
83 | 83 | ||
84 | __raw_writel(clkcon, S3C2443_HCLKCON); | 84 | __raw_writel(clkcon, S3C2443_PCLKCON); |
85 | 85 | ||
86 | return 0; | 86 | return 0; |
87 | } | 87 | } |
@@ -221,7 +221,6 @@ static struct clk clk_mdivclk = { | |||
221 | .get_rate = s3c2443_getrate_mdivclk, | 221 | .get_rate = s3c2443_getrate_mdivclk, |
222 | }; | 222 | }; |
223 | 223 | ||
224 | |||
225 | static int s3c2443_setparent_msysclk(struct clk *clk, struct clk *parent) | 224 | static int s3c2443_setparent_msysclk(struct clk *clk, struct clk *parent) |
226 | { | 225 | { |
227 | unsigned long clksrc = __raw_readl(S3C2443_CLKSRC); | 226 | unsigned long clksrc = __raw_readl(S3C2443_CLKSRC); |
@@ -249,6 +248,46 @@ static struct clk clk_msysclk = { | |||
249 | .set_parent = s3c2443_setparent_msysclk, | 248 | .set_parent = s3c2443_setparent_msysclk, |
250 | }; | 249 | }; |
251 | 250 | ||
251 | /* armdiv | ||
252 | * | ||
253 | * this clock is sourced from msysclk and can have a number of | ||
254 | * divider values applied to it to then be fed into armclk. | ||
255 | */ | ||
256 | |||
257 | static struct clk clk_armdiv = { | ||
258 | .name = "armdiv", | ||
259 | .id = -1, | ||
260 | .parent = &clk_msysclk, | ||
261 | }; | ||
262 | |||
263 | /* armclk | ||
264 | * | ||
265 | * this is the clock fed into the ARM core itself, either from | ||
266 | * armdiv or from hclk. | ||
267 | */ | ||
268 | |||
269 | static int s3c2443_setparent_armclk(struct clk *clk, struct clk *parent) | ||
270 | { | ||
271 | unsigned long clkdiv0; | ||
272 | |||
273 | clkdiv0 = __raw_readl(S3C2443_CLKDIV0); | ||
274 | |||
275 | if (parent == &clk_armdiv) | ||
276 | clkdiv0 &= ~S3C2443_CLKDIV0_DVS; | ||
277 | else if (parent == &clk_h) | ||
278 | clkdiv0 |= S3C2443_CLKDIV0_DVS; | ||
279 | else | ||
280 | return -EINVAL; | ||
281 | |||
282 | __raw_writel(clkdiv0, S3C2443_CLKDIV0); | ||
283 | return 0; | ||
284 | } | ||
285 | |||
286 | static struct clk clk_arm = { | ||
287 | .name = "armclk", | ||
288 | .id = -1, | ||
289 | .set_parent = s3c2443_setparent_armclk, | ||
290 | }; | ||
252 | 291 | ||
253 | /* esysclk | 292 | /* esysclk |
254 | * | 293 | * |
@@ -639,6 +678,29 @@ static struct clk clk_display = { | |||
639 | .round_rate = s3c2443_roundrate_clksrc256, | 678 | .round_rate = s3c2443_roundrate_clksrc256, |
640 | }; | 679 | }; |
641 | 680 | ||
681 | /* prediv | ||
682 | * | ||
683 | * this divides the msysclk down to pass to h/p/etc. | ||
684 | */ | ||
685 | |||
686 | static unsigned long s3c2443_prediv_getrate(struct clk *clk) | ||
687 | { | ||
688 | unsigned long rate = clk_get_rate(clk->parent); | ||
689 | unsigned long clkdiv0 = __raw_readl(S3C2443_CLKDIV0); | ||
690 | |||
691 | clkdiv0 &= S3C2443_CLKDIV0_PREDIV_MASK; | ||
692 | clkdiv0 >>= S3C2443_CLKDIV0_PREDIV_SHIFT; | ||
693 | |||
694 | return rate / (clkdiv0 + 1); | ||
695 | } | ||
696 | |||
697 | static struct clk clk_prediv = { | ||
698 | .name = "prediv", | ||
699 | .id = -1, | ||
700 | .parent = &clk_msysclk, | ||
701 | .get_rate = s3c2443_prediv_getrate, | ||
702 | }; | ||
703 | |||
642 | /* standard clock definitions */ | 704 | /* standard clock definitions */ |
643 | 705 | ||
644 | static struct clk init_clocks_disable[] = { | 706 | static struct clk init_clocks_disable[] = { |
@@ -887,6 +949,15 @@ static void __init s3c2443_clk_initparents(void) | |||
887 | } | 949 | } |
888 | 950 | ||
889 | clk_init_set_parent(&clk_msysclk, parent); | 951 | clk_init_set_parent(&clk_msysclk, parent); |
952 | |||
953 | /* arm */ | ||
954 | |||
955 | if (__raw_readl(S3C2443_CLKDIV0) & S3C2443_CLKDIV0_DVS) | ||
956 | parent = &clk_h; | ||
957 | else | ||
958 | parent = &clk_armdiv; | ||
959 | |||
960 | clk_init_set_parent(&clk_arm, parent); | ||
890 | } | 961 | } |
891 | 962 | ||
892 | /* armdiv divisor table */ | 963 | /* armdiv divisor table */ |
@@ -909,10 +980,9 @@ static inline unsigned int s3c2443_fclk_div(unsigned long clkcon0) | |||
909 | return armdiv[clkcon0 >> S3C2443_CLKDIV0_ARMDIV_SHIFT]; | 980 | return armdiv[clkcon0 >> S3C2443_CLKDIV0_ARMDIV_SHIFT]; |
910 | } | 981 | } |
911 | 982 | ||
912 | static inline unsigned long s3c2443_get_prediv(unsigned long clkcon0) | 983 | static inline unsigned long s3c2443_get_hdiv(unsigned long clkcon0) |
913 | { | 984 | { |
914 | clkcon0 &= S3C2443_CLKDIV0_PREDIV_MASK; | 985 | clkcon0 &= S3C2443_CLKDIV0_HCLKDIV_MASK; |
915 | clkcon0 >>= S3C2443_CLKDIV0_PREDIV_SHIFT; | ||
916 | 986 | ||
917 | return clkcon0 + 1; | 987 | return clkcon0 + 1; |
918 | } | 988 | } |
@@ -936,6 +1006,9 @@ static struct clk *clks[] __initdata = { | |||
936 | &clk_hsspi, | 1006 | &clk_hsspi, |
937 | &clk_hsmmc_div, | 1007 | &clk_hsmmc_div, |
938 | &clk_hsmmc, | 1008 | &clk_hsmmc, |
1009 | &clk_armdiv, | ||
1010 | &clk_arm, | ||
1011 | &clk_prediv, | ||
939 | }; | 1012 | }; |
940 | 1013 | ||
941 | void __init s3c2443_init_clocks(int xtal) | 1014 | void __init s3c2443_init_clocks(int xtal) |
@@ -951,10 +1024,16 @@ void __init s3c2443_init_clocks(int xtal) | |||
951 | int ret; | 1024 | int ret; |
952 | int ptr; | 1025 | int ptr; |
953 | 1026 | ||
1027 | /* s3c2443 parents h and p clocks from prediv */ | ||
1028 | clk_h.parent = &clk_prediv; | ||
1029 | clk_p.parent = &clk_prediv; | ||
1030 | |||
954 | pll = s3c2443_get_mpll(mpllcon, xtal); | 1031 | pll = s3c2443_get_mpll(mpllcon, xtal); |
1032 | clk_msysclk.rate = pll; | ||
955 | 1033 | ||
956 | fclk = pll / s3c2443_fclk_div(clkdiv0); | 1034 | fclk = pll / s3c2443_fclk_div(clkdiv0); |
957 | hclk = fclk / s3c2443_get_prediv(clkdiv0); | 1035 | hclk = s3c2443_prediv_getrate(&clk_prediv); |
1036 | hclk = hclk / s3c2443_get_hdiv(clkdiv0); | ||
958 | hclk = hclk / ((clkdiv0 & S3C2443_CLKDIV0_HALF_HCLK) ? 2 : 1); | 1037 | hclk = hclk / ((clkdiv0 & S3C2443_CLKDIV0_HALF_HCLK) ? 2 : 1); |
959 | pclk = hclk / ((clkdiv0 & S3C2443_CLKDIV0_HALF_PCLK) ? 2 : 1); | 1038 | pclk = hclk / ((clkdiv0 & S3C2443_CLKDIV0_HALF_PCLK) ? 2 : 1); |
960 | 1039 | ||
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig index 33ed048502a3..a2c8b006d710 100644 --- a/arch/arm/mm/Kconfig +++ b/arch/arm/mm/Kconfig | |||
@@ -180,8 +180,8 @@ config CPU_ARM925T | |||
180 | # ARM926T | 180 | # ARM926T |
181 | config CPU_ARM926T | 181 | config CPU_ARM926T |
182 | bool "Support ARM926T processor" | 182 | bool "Support ARM926T processor" |
183 | depends on ARCH_INTEGRATOR || ARCH_VERSATILE_PB || MACH_VERSATILE_AB || ARCH_OMAP730 || ARCH_OMAP16XX || MACH_REALVIEW_EB || ARCH_PNX4008 || ARCH_NETX || CPU_S3C2412 || ARCH_AT91SAM9260 || ARCH_AT91SAM9261 || ARCH_AT91SAM9263 || ARCH_AT91SAM9RL || ARCH_AT91CAP9 || ARCH_NS9XXX || ARCH_DAVINCI | 183 | depends on ARCH_INTEGRATOR || ARCH_VERSATILE_PB || MACH_VERSATILE_AB || ARCH_OMAP730 || ARCH_OMAP16XX || MACH_REALVIEW_EB || ARCH_PNX4008 || ARCH_NETX || CPU_S3C2412 || ARCH_AT91SAM9260 || ARCH_AT91SAM9261 || ARCH_AT91SAM9263 || ARCH_AT91SAM9RL || ARCH_AT91SAM9G20 || ARCH_AT91CAP9 || ARCH_NS9XXX || ARCH_DAVINCI |
184 | default y if ARCH_VERSATILE_PB || MACH_VERSATILE_AB || ARCH_OMAP730 || ARCH_OMAP16XX || ARCH_PNX4008 || ARCH_NETX || CPU_S3C2412 || ARCH_AT91SAM9260 || ARCH_AT91SAM9261 || ARCH_AT91SAM9263 || ARCH_AT91SAM9RL || ARCH_AT91CAP9 || ARCH_NS9XXX || ARCH_DAVINCI | 184 | default y if ARCH_VERSATILE_PB || MACH_VERSATILE_AB || ARCH_OMAP730 || ARCH_OMAP16XX || ARCH_PNX4008 || ARCH_NETX || CPU_S3C2412 || ARCH_AT91SAM9260 || ARCH_AT91SAM9261 || ARCH_AT91SAM9263 || ARCH_AT91SAM9RL || ARCH_AT91SAM9G20 || ARCH_AT91CAP9 || ARCH_NS9XXX || ARCH_DAVINCI |
185 | select CPU_32v5 | 185 | select CPU_32v5 |
186 | select CPU_ABRT_EV5TJ | 186 | select CPU_ABRT_EV5TJ |
187 | select CPU_PABRT_NOIFAR | 187 | select CPU_PABRT_NOIFAR |
@@ -365,7 +365,7 @@ config CPU_XSC3 | |||
365 | # Feroceon | 365 | # Feroceon |
366 | config CPU_FEROCEON | 366 | config CPU_FEROCEON |
367 | bool | 367 | bool |
368 | depends on ARCH_ORION5X | 368 | depends on ARCH_ORION5X || ARCH_LOKI || ARCH_KIRKWOOD || ARCH_MV78XX0 |
369 | default y | 369 | default y |
370 | select CPU_32v5 | 370 | select CPU_32v5 |
371 | select CPU_ABRT_EV5T | 371 | select CPU_ABRT_EV5T |
@@ -373,7 +373,7 @@ config CPU_FEROCEON | |||
373 | select CPU_CACHE_VIVT | 373 | select CPU_CACHE_VIVT |
374 | select CPU_CP15_MMU | 374 | select CPU_CP15_MMU |
375 | select CPU_COPY_FEROCEON if MMU | 375 | select CPU_COPY_FEROCEON if MMU |
376 | select CPU_TLB_V4WBI if MMU | 376 | select CPU_TLB_FEROCEON if MMU |
377 | 377 | ||
378 | config CPU_FEROCEON_OLD_ID | 378 | config CPU_FEROCEON_OLD_ID |
379 | bool "Accept early Feroceon cores with an ARM926 ID" | 379 | bool "Accept early Feroceon cores with an ARM926 ID" |
@@ -551,6 +551,11 @@ config CPU_TLB_V4WBI | |||
551 | ARM Architecture Version 4 TLB with writeback cache and invalidate | 551 | ARM Architecture Version 4 TLB with writeback cache and invalidate |
552 | instruction cache entry. | 552 | instruction cache entry. |
553 | 553 | ||
554 | config CPU_TLB_FEROCEON | ||
555 | bool | ||
556 | help | ||
557 | Feroceon TLB (v4wbi with non-outer-cachable page table walks). | ||
558 | |||
554 | config CPU_TLB_V6 | 559 | config CPU_TLB_V6 |
555 | bool | 560 | bool |
556 | 561 | ||
@@ -709,6 +714,14 @@ config OUTER_CACHE | |||
709 | bool | 714 | bool |
710 | default n | 715 | default n |
711 | 716 | ||
717 | config CACHE_FEROCEON_L2 | ||
718 | bool "Enable the Feroceon L2 cache controller" | ||
719 | depends on ARCH_KIRKWOOD || ARCH_MV78XX0 | ||
720 | default y | ||
721 | select OUTER_CACHE | ||
722 | help | ||
723 | This option enables the Feroceon L2 cache controller. | ||
724 | |||
712 | config CACHE_L2X0 | 725 | config CACHE_L2X0 |
713 | bool "Enable the L2x0 outer cache controller" | 726 | bool "Enable the L2x0 outer cache controller" |
714 | depends on REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || MACH_REALVIEW_PB1176 | 727 | depends on REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || MACH_REALVIEW_PB1176 |
diff --git a/arch/arm/mm/Makefile b/arch/arm/mm/Makefile index 32b2d2d213a6..f64b92557b11 100644 --- a/arch/arm/mm/Makefile +++ b/arch/arm/mm/Makefile | |||
@@ -46,6 +46,7 @@ obj-$(CONFIG_CPU_TLB_V3) += tlb-v3.o | |||
46 | obj-$(CONFIG_CPU_TLB_V4WT) += tlb-v4.o | 46 | obj-$(CONFIG_CPU_TLB_V4WT) += tlb-v4.o |
47 | obj-$(CONFIG_CPU_TLB_V4WB) += tlb-v4wb.o | 47 | obj-$(CONFIG_CPU_TLB_V4WB) += tlb-v4wb.o |
48 | obj-$(CONFIG_CPU_TLB_V4WBI) += tlb-v4wbi.o | 48 | obj-$(CONFIG_CPU_TLB_V4WBI) += tlb-v4wbi.o |
49 | obj-$(CONFIG_CPU_TLB_FEROCEON) += tlb-v4wbi.o # reuse v4wbi TLB functions | ||
49 | obj-$(CONFIG_CPU_TLB_V6) += tlb-v6.o | 50 | obj-$(CONFIG_CPU_TLB_V6) += tlb-v6.o |
50 | obj-$(CONFIG_CPU_TLB_V7) += tlb-v7.o | 51 | obj-$(CONFIG_CPU_TLB_V7) += tlb-v7.o |
51 | 52 | ||
@@ -73,4 +74,5 @@ obj-$(CONFIG_CPU_FEROCEON) += proc-feroceon.o | |||
73 | obj-$(CONFIG_CPU_V6) += proc-v6.o | 74 | obj-$(CONFIG_CPU_V6) += proc-v6.o |
74 | obj-$(CONFIG_CPU_V7) += proc-v7.o | 75 | obj-$(CONFIG_CPU_V7) += proc-v7.o |
75 | 76 | ||
77 | obj-$(CONFIG_CACHE_FEROCEON_L2) += cache-feroceon-l2.o | ||
76 | obj-$(CONFIG_CACHE_L2X0) += cache-l2x0.o | 78 | obj-$(CONFIG_CACHE_L2X0) += cache-l2x0.o |
diff --git a/arch/arm/mm/cache-feroceon-l2.c b/arch/arm/mm/cache-feroceon-l2.c new file mode 100644 index 000000000000..20eec4ba173f --- /dev/null +++ b/arch/arm/mm/cache-feroceon-l2.c | |||
@@ -0,0 +1,318 @@ | |||
1 | /* | ||
2 | * arch/arm/mm/cache-feroceon-l2.c - Feroceon L2 cache controller support | ||
3 | * | ||
4 | * Copyright (C) 2008 Marvell Semiconductor | ||
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 | * References: | ||
11 | * - Unified Layer 2 Cache for Feroceon CPU Cores, | ||
12 | * Document ID MV-S104858-00, Rev. A, October 23 2007. | ||
13 | */ | ||
14 | |||
15 | #include <linux/init.h> | ||
16 | #include <asm/cacheflush.h> | ||
17 | #include <asm/plat-orion/cache-feroceon-l2.h> | ||
18 | |||
19 | |||
20 | /* | ||
21 | * Low-level cache maintenance operations. | ||
22 | * | ||
23 | * As well as the regular 'clean/invalidate/flush L2 cache line by | ||
24 | * MVA' instructions, the Feroceon L2 cache controller also features | ||
25 | * 'clean/invalidate L2 range by MVA' operations. | ||
26 | * | ||
27 | * Cache range operations are initiated by writing the start and | ||
28 | * end addresses to successive cp15 registers, and process every | ||
29 | * cache line whose first byte address lies in the inclusive range | ||
30 | * [start:end]. | ||
31 | * | ||
32 | * The cache range operations stall the CPU pipeline until completion. | ||
33 | * | ||
34 | * The range operations require two successive cp15 writes, in | ||
35 | * between which we don't want to be preempted. | ||
36 | */ | ||
37 | static inline void l2_clean_pa(unsigned long addr) | ||
38 | { | ||
39 | __asm__("mcr p15, 1, %0, c15, c9, 3" : : "r" (addr)); | ||
40 | } | ||
41 | |||
42 | static inline void l2_clean_mva_range(unsigned long start, unsigned long end) | ||
43 | { | ||
44 | unsigned long flags; | ||
45 | |||
46 | /* | ||
47 | * Make sure 'start' and 'end' reference the same page, as | ||
48 | * L2 is PIPT and range operations only do a TLB lookup on | ||
49 | * the start address. | ||
50 | */ | ||
51 | BUG_ON((start ^ end) & ~(PAGE_SIZE - 1)); | ||
52 | |||
53 | raw_local_irq_save(flags); | ||
54 | __asm__("mcr p15, 1, %0, c15, c9, 4" : : "r" (start)); | ||
55 | __asm__("mcr p15, 1, %0, c15, c9, 5" : : "r" (end)); | ||
56 | raw_local_irq_restore(flags); | ||
57 | } | ||
58 | |||
59 | static inline void l2_clean_pa_range(unsigned long start, unsigned long end) | ||
60 | { | ||
61 | l2_clean_mva_range(__phys_to_virt(start), __phys_to_virt(end)); | ||
62 | } | ||
63 | |||
64 | static inline void l2_clean_inv_pa(unsigned long addr) | ||
65 | { | ||
66 | __asm__("mcr p15, 1, %0, c15, c10, 3" : : "r" (addr)); | ||
67 | } | ||
68 | |||
69 | static inline void l2_inv_pa(unsigned long addr) | ||
70 | { | ||
71 | __asm__("mcr p15, 1, %0, c15, c11, 3" : : "r" (addr)); | ||
72 | } | ||
73 | |||
74 | static inline void l2_inv_mva_range(unsigned long start, unsigned long end) | ||
75 | { | ||
76 | unsigned long flags; | ||
77 | |||
78 | /* | ||
79 | * Make sure 'start' and 'end' reference the same page, as | ||
80 | * L2 is PIPT and range operations only do a TLB lookup on | ||
81 | * the start address. | ||
82 | */ | ||
83 | BUG_ON((start ^ end) & ~(PAGE_SIZE - 1)); | ||
84 | |||
85 | raw_local_irq_save(flags); | ||
86 | __asm__("mcr p15, 1, %0, c15, c11, 4" : : "r" (start)); | ||
87 | __asm__("mcr p15, 1, %0, c15, c11, 5" : : "r" (end)); | ||
88 | raw_local_irq_restore(flags); | ||
89 | } | ||
90 | |||
91 | static inline void l2_inv_pa_range(unsigned long start, unsigned long end) | ||
92 | { | ||
93 | l2_inv_mva_range(__phys_to_virt(start), __phys_to_virt(end)); | ||
94 | } | ||
95 | |||
96 | |||
97 | /* | ||
98 | * Linux primitives. | ||
99 | * | ||
100 | * Note that the end addresses passed to Linux primitives are | ||
101 | * noninclusive, while the hardware cache range operations use | ||
102 | * inclusive start and end addresses. | ||
103 | */ | ||
104 | #define CACHE_LINE_SIZE 32 | ||
105 | #define MAX_RANGE_SIZE 1024 | ||
106 | |||
107 | static int l2_wt_override; | ||
108 | |||
109 | static unsigned long calc_range_end(unsigned long start, unsigned long end) | ||
110 | { | ||
111 | unsigned long range_end; | ||
112 | |||
113 | BUG_ON(start & (CACHE_LINE_SIZE - 1)); | ||
114 | BUG_ON(end & (CACHE_LINE_SIZE - 1)); | ||
115 | |||
116 | /* | ||
117 | * Try to process all cache lines between 'start' and 'end'. | ||
118 | */ | ||
119 | range_end = end; | ||
120 | |||
121 | /* | ||
122 | * Limit the number of cache lines processed at once, | ||
123 | * since cache range operations stall the CPU pipeline | ||
124 | * until completion. | ||
125 | */ | ||
126 | if (range_end > start + MAX_RANGE_SIZE) | ||
127 | range_end = start + MAX_RANGE_SIZE; | ||
128 | |||
129 | /* | ||
130 | * Cache range operations can't straddle a page boundary. | ||
131 | */ | ||
132 | if (range_end > (start | (PAGE_SIZE - 1)) + 1) | ||
133 | range_end = (start | (PAGE_SIZE - 1)) + 1; | ||
134 | |||
135 | return range_end; | ||
136 | } | ||
137 | |||
138 | static void feroceon_l2_inv_range(unsigned long start, unsigned long end) | ||
139 | { | ||
140 | /* | ||
141 | * Clean and invalidate partial first cache line. | ||
142 | */ | ||
143 | if (start & (CACHE_LINE_SIZE - 1)) { | ||
144 | l2_clean_inv_pa(start & ~(CACHE_LINE_SIZE - 1)); | ||
145 | start = (start | (CACHE_LINE_SIZE - 1)) + 1; | ||
146 | } | ||
147 | |||
148 | /* | ||
149 | * Clean and invalidate partial last cache line. | ||
150 | */ | ||
151 | if (end & (CACHE_LINE_SIZE - 1)) { | ||
152 | l2_clean_inv_pa(end & ~(CACHE_LINE_SIZE - 1)); | ||
153 | end &= ~(CACHE_LINE_SIZE - 1); | ||
154 | } | ||
155 | |||
156 | /* | ||
157 | * Invalidate all full cache lines between 'start' and 'end'. | ||
158 | */ | ||
159 | while (start != end) { | ||
160 | unsigned long range_end = calc_range_end(start, end); | ||
161 | l2_inv_pa_range(start, range_end - CACHE_LINE_SIZE); | ||
162 | start = range_end; | ||
163 | } | ||
164 | |||
165 | dsb(); | ||
166 | } | ||
167 | |||
168 | static void feroceon_l2_clean_range(unsigned long start, unsigned long end) | ||
169 | { | ||
170 | /* | ||
171 | * If L2 is forced to WT, the L2 will always be clean and we | ||
172 | * don't need to do anything here. | ||
173 | */ | ||
174 | if (!l2_wt_override) { | ||
175 | start &= ~(CACHE_LINE_SIZE - 1); | ||
176 | end = (end + CACHE_LINE_SIZE - 1) & ~(CACHE_LINE_SIZE - 1); | ||
177 | while (start != end) { | ||
178 | unsigned long range_end = calc_range_end(start, end); | ||
179 | l2_clean_pa_range(start, range_end - CACHE_LINE_SIZE); | ||
180 | start = range_end; | ||
181 | } | ||
182 | } | ||
183 | |||
184 | dsb(); | ||
185 | } | ||
186 | |||
187 | static void feroceon_l2_flush_range(unsigned long start, unsigned long end) | ||
188 | { | ||
189 | start &= ~(CACHE_LINE_SIZE - 1); | ||
190 | end = (end + CACHE_LINE_SIZE - 1) & ~(CACHE_LINE_SIZE - 1); | ||
191 | while (start != end) { | ||
192 | unsigned long range_end = calc_range_end(start, end); | ||
193 | if (!l2_wt_override) | ||
194 | l2_clean_pa_range(start, range_end - CACHE_LINE_SIZE); | ||
195 | l2_inv_pa_range(start, range_end - CACHE_LINE_SIZE); | ||
196 | start = range_end; | ||
197 | } | ||
198 | |||
199 | dsb(); | ||
200 | } | ||
201 | |||
202 | |||
203 | /* | ||
204 | * Routines to disable and re-enable the D-cache and I-cache at run | ||
205 | * time. These are necessary because the L2 cache can only be enabled | ||
206 | * or disabled while the L1 Dcache and Icache are both disabled. | ||
207 | */ | ||
208 | static void __init invalidate_and_disable_dcache(void) | ||
209 | { | ||
210 | u32 cr; | ||
211 | |||
212 | cr = get_cr(); | ||
213 | if (cr & CR_C) { | ||
214 | unsigned long flags; | ||
215 | |||
216 | raw_local_irq_save(flags); | ||
217 | flush_cache_all(); | ||
218 | set_cr(cr & ~CR_C); | ||
219 | raw_local_irq_restore(flags); | ||
220 | } | ||
221 | } | ||
222 | |||
223 | static void __init enable_dcache(void) | ||
224 | { | ||
225 | u32 cr; | ||
226 | |||
227 | cr = get_cr(); | ||
228 | if (!(cr & CR_C)) | ||
229 | set_cr(cr | CR_C); | ||
230 | } | ||
231 | |||
232 | static void __init __invalidate_icache(void) | ||
233 | { | ||
234 | int dummy; | ||
235 | |||
236 | __asm__ __volatile__("mcr p15, 0, %0, c7, c5, 0\n" : "=r" (dummy)); | ||
237 | } | ||
238 | |||
239 | static void __init invalidate_and_disable_icache(void) | ||
240 | { | ||
241 | u32 cr; | ||
242 | |||
243 | cr = get_cr(); | ||
244 | if (cr & CR_I) { | ||
245 | set_cr(cr & ~CR_I); | ||
246 | __invalidate_icache(); | ||
247 | } | ||
248 | } | ||
249 | |||
250 | static void __init enable_icache(void) | ||
251 | { | ||
252 | u32 cr; | ||
253 | |||
254 | cr = get_cr(); | ||
255 | if (!(cr & CR_I)) | ||
256 | set_cr(cr | CR_I); | ||
257 | } | ||
258 | |||
259 | static inline u32 read_extra_features(void) | ||
260 | { | ||
261 | u32 u; | ||
262 | |||
263 | __asm__("mrc p15, 1, %0, c15, c1, 0" : "=r" (u)); | ||
264 | |||
265 | return u; | ||
266 | } | ||
267 | |||
268 | static inline void write_extra_features(u32 u) | ||
269 | { | ||
270 | __asm__("mcr p15, 1, %0, c15, c1, 0" : : "r" (u)); | ||
271 | } | ||
272 | |||
273 | static void __init disable_l2_prefetch(void) | ||
274 | { | ||
275 | u32 u; | ||
276 | |||
277 | /* | ||
278 | * Read the CPU Extra Features register and verify that the | ||
279 | * Disable L2 Prefetch bit is set. | ||
280 | */ | ||
281 | u = read_extra_features(); | ||
282 | if (!(u & 0x01000000)) { | ||
283 | printk(KERN_INFO "Feroceon L2: Disabling L2 prefetch.\n"); | ||
284 | write_extra_features(u | 0x01000000); | ||
285 | } | ||
286 | } | ||
287 | |||
288 | static void __init enable_l2(void) | ||
289 | { | ||
290 | u32 u; | ||
291 | |||
292 | u = read_extra_features(); | ||
293 | if (!(u & 0x00400000)) { | ||
294 | printk(KERN_INFO "Feroceon L2: Enabling L2\n"); | ||
295 | |||
296 | invalidate_and_disable_dcache(); | ||
297 | invalidate_and_disable_icache(); | ||
298 | write_extra_features(u | 0x00400000); | ||
299 | enable_icache(); | ||
300 | enable_dcache(); | ||
301 | } | ||
302 | } | ||
303 | |||
304 | void __init feroceon_l2_init(int __l2_wt_override) | ||
305 | { | ||
306 | l2_wt_override = __l2_wt_override; | ||
307 | |||
308 | disable_l2_prefetch(); | ||
309 | |||
310 | outer_cache.inv_range = feroceon_l2_inv_range; | ||
311 | outer_cache.clean_range = feroceon_l2_clean_range; | ||
312 | outer_cache.flush_range = feroceon_l2_flush_range; | ||
313 | |||
314 | enable_l2(); | ||
315 | |||
316 | printk(KERN_INFO "Feroceon L2: Cache support initialised%s.\n", | ||
317 | l2_wt_override ? ", in WT override mode" : ""); | ||
318 | } | ||
diff --git a/arch/arm/mm/fault-armv.c b/arch/arm/mm/fault-armv.c index 44558d5f9313..fbfa26058442 100644 --- a/arch/arm/mm/fault-armv.c +++ b/arch/arm/mm/fault-armv.c | |||
@@ -144,13 +144,17 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long addr, pte_t pte) | |||
144 | page = pfn_to_page(pfn); | 144 | page = pfn_to_page(pfn); |
145 | mapping = page_mapping(page); | 145 | mapping = page_mapping(page); |
146 | if (mapping) { | 146 | if (mapping) { |
147 | #ifndef CONFIG_SMP | ||
147 | int dirty = test_and_clear_bit(PG_dcache_dirty, &page->flags); | 148 | int dirty = test_and_clear_bit(PG_dcache_dirty, &page->flags); |
148 | 149 | ||
149 | if (dirty) | 150 | if (dirty) |
150 | __flush_dcache_page(mapping, page); | 151 | __flush_dcache_page(mapping, page); |
152 | #endif | ||
151 | 153 | ||
152 | if (cache_is_vivt()) | 154 | if (cache_is_vivt()) |
153 | make_coherent(mapping, vma, addr, pfn); | 155 | make_coherent(mapping, vma, addr, pfn); |
156 | else if (vma->vm_flags & VM_EXEC) | ||
157 | __flush_icache_all(); | ||
154 | } | 158 | } |
155 | } | 159 | } |
156 | 160 | ||
diff --git a/arch/arm/mm/flush.c b/arch/arm/mm/flush.c index 9df507d36e0b..029ee65fda2b 100644 --- a/arch/arm/mm/flush.c +++ b/arch/arm/mm/flush.c | |||
@@ -199,6 +199,8 @@ void flush_dcache_page(struct page *page) | |||
199 | __flush_dcache_page(mapping, page); | 199 | __flush_dcache_page(mapping, page); |
200 | if (mapping && cache_is_vivt()) | 200 | if (mapping && cache_is_vivt()) |
201 | __flush_dcache_aliases(mapping, page); | 201 | __flush_dcache_aliases(mapping, page); |
202 | else if (mapping) | ||
203 | __flush_icache_all(); | ||
202 | } | 204 | } |
203 | } | 205 | } |
204 | EXPORT_SYMBOL(flush_dcache_page); | 206 | EXPORT_SYMBOL(flush_dcache_page); |
diff --git a/arch/arm/mm/proc-feroceon.S b/arch/arm/mm/proc-feroceon.S index a02c1712b52d..f2e5884c513a 100644 --- a/arch/arm/mm/proc-feroceon.S +++ b/arch/arm/mm/proc-feroceon.S | |||
@@ -44,11 +44,31 @@ | |||
44 | */ | 44 | */ |
45 | #define CACHE_DLINESIZE 32 | 45 | #define CACHE_DLINESIZE 32 |
46 | 46 | ||
47 | .bss | ||
48 | .align 3 | ||
49 | __cache_params_loc: | ||
50 | .space 8 | ||
51 | |||
47 | .text | 52 | .text |
53 | __cache_params: | ||
54 | .word __cache_params_loc | ||
55 | |||
48 | /* | 56 | /* |
49 | * cpu_feroceon_proc_init() | 57 | * cpu_feroceon_proc_init() |
50 | */ | 58 | */ |
51 | ENTRY(cpu_feroceon_proc_init) | 59 | ENTRY(cpu_feroceon_proc_init) |
60 | mrc p15, 0, r0, c0, c0, 1 @ read cache type register | ||
61 | ldr r1, __cache_params | ||
62 | mov r2, #(16 << 5) | ||
63 | tst r0, #(1 << 16) @ get way | ||
64 | mov r0, r0, lsr #18 @ get cache size order | ||
65 | movne r3, #((4 - 1) << 30) @ 4-way | ||
66 | and r0, r0, #0xf | ||
67 | moveq r3, #0 @ 1-way | ||
68 | mov r2, r2, lsl r0 @ actual cache size | ||
69 | movne r2, r2, lsr #2 @ turned into # of sets | ||
70 | sub r2, r2, #(1 << 5) | ||
71 | stmia r1, {r2, r3} | ||
52 | mov pc, lr | 72 | mov pc, lr |
53 | 73 | ||
54 | /* | 74 | /* |
@@ -59,6 +79,13 @@ ENTRY(cpu_feroceon_proc_fin) | |||
59 | mov ip, #PSR_F_BIT | PSR_I_BIT | SVC_MODE | 79 | mov ip, #PSR_F_BIT | PSR_I_BIT | SVC_MODE |
60 | msr cpsr_c, ip | 80 | msr cpsr_c, ip |
61 | bl feroceon_flush_kern_cache_all | 81 | bl feroceon_flush_kern_cache_all |
82 | |||
83 | #if defined(CONFIG_CACHE_FEROCEON_L2) && !defined(CONFIG_L2_CACHE_WRITETHROUGH) | ||
84 | mov r0, #0 | ||
85 | mcr p15, 1, r0, c15, c9, 0 @ clean L2 | ||
86 | mcr p15, 0, r0, c7, c10, 4 @ drain WB | ||
87 | #endif | ||
88 | |||
62 | mrc p15, 0, r0, c1, c0, 0 @ ctrl register | 89 | mrc p15, 0, r0, c1, c0, 0 @ ctrl register |
63 | bic r0, r0, #0x1000 @ ...i............ | 90 | bic r0, r0, #0x1000 @ ...i............ |
64 | bic r0, r0, #0x000e @ ............wca. | 91 | bic r0, r0, #0x000e @ ............wca. |
@@ -117,11 +144,19 @@ ENTRY(feroceon_flush_user_cache_all) | |||
117 | */ | 144 | */ |
118 | ENTRY(feroceon_flush_kern_cache_all) | 145 | ENTRY(feroceon_flush_kern_cache_all) |
119 | mov r2, #VM_EXEC | 146 | mov r2, #VM_EXEC |
120 | mov ip, #0 | 147 | |
121 | __flush_whole_cache: | 148 | __flush_whole_cache: |
122 | 1: mrc p15, 0, r15, c7, c14, 3 @ test,clean,invalidate | 149 | ldr r1, __cache_params |
123 | bne 1b | 150 | ldmia r1, {r1, r3} |
151 | 1: orr ip, r1, r3 | ||
152 | 2: mcr p15, 0, ip, c7, c14, 2 @ clean + invalidate D set/way | ||
153 | subs ip, ip, #(1 << 30) @ next way | ||
154 | bcs 2b | ||
155 | subs r1, r1, #(1 << 5) @ next set | ||
156 | bcs 1b | ||
157 | |||
124 | tst r2, #VM_EXEC | 158 | tst r2, #VM_EXEC |
159 | mov ip, #0 | ||
125 | mcrne p15, 0, ip, c7, c5, 0 @ invalidate I cache | 160 | mcrne p15, 0, ip, c7, c5, 0 @ invalidate I cache |
126 | mcrne p15, 0, ip, c7, c10, 4 @ drain WB | 161 | mcrne p15, 0, ip, c7, c10, 4 @ drain WB |
127 | mov pc, lr | 162 | mov pc, lr |
@@ -138,7 +173,6 @@ __flush_whole_cache: | |||
138 | */ | 173 | */ |
139 | .align 5 | 174 | .align 5 |
140 | ENTRY(feroceon_flush_user_cache_range) | 175 | ENTRY(feroceon_flush_user_cache_range) |
141 | mov ip, #0 | ||
142 | sub r3, r1, r0 @ calculate total size | 176 | sub r3, r1, r0 @ calculate total size |
143 | cmp r3, #CACHE_DLIMIT | 177 | cmp r3, #CACHE_DLIMIT |
144 | bgt __flush_whole_cache | 178 | bgt __flush_whole_cache |
@@ -152,6 +186,7 @@ ENTRY(feroceon_flush_user_cache_range) | |||
152 | cmp r0, r1 | 186 | cmp r0, r1 |
153 | blo 1b | 187 | blo 1b |
154 | tst r2, #VM_EXEC | 188 | tst r2, #VM_EXEC |
189 | mov ip, #0 | ||
155 | mcrne p15, 0, ip, c7, c10, 4 @ drain WB | 190 | mcrne p15, 0, ip, c7, c10, 4 @ drain WB |
156 | mov pc, lr | 191 | mov pc, lr |
157 | 192 | ||
@@ -209,6 +244,20 @@ ENTRY(feroceon_flush_kern_dcache_page) | |||
209 | mcr p15, 0, r0, c7, c10, 4 @ drain WB | 244 | mcr p15, 0, r0, c7, c10, 4 @ drain WB |
210 | mov pc, lr | 245 | mov pc, lr |
211 | 246 | ||
247 | .align 5 | ||
248 | ENTRY(feroceon_range_flush_kern_dcache_page) | ||
249 | mrs r2, cpsr | ||
250 | add r1, r0, #PAGE_SZ - CACHE_DLINESIZE @ top addr is inclusive | ||
251 | orr r3, r2, #PSR_I_BIT | ||
252 | msr cpsr_c, r3 @ disable interrupts | ||
253 | mcr p15, 5, r0, c15, c15, 0 @ D clean/inv range start | ||
254 | mcr p15, 5, r1, c15, c15, 1 @ D clean/inv range top | ||
255 | msr cpsr_c, r2 @ restore interrupts | ||
256 | mov r0, #0 | ||
257 | mcr p15, 0, r0, c7, c5, 0 @ invalidate I cache | ||
258 | mcr p15, 0, r0, c7, c10, 4 @ drain WB | ||
259 | mov pc, lr | ||
260 | |||
212 | /* | 261 | /* |
213 | * dma_inv_range(start, end) | 262 | * dma_inv_range(start, end) |
214 | * | 263 | * |
@@ -225,10 +274,10 @@ ENTRY(feroceon_flush_kern_dcache_page) | |||
225 | .align 5 | 274 | .align 5 |
226 | ENTRY(feroceon_dma_inv_range) | 275 | ENTRY(feroceon_dma_inv_range) |
227 | tst r0, #CACHE_DLINESIZE - 1 | 276 | tst r0, #CACHE_DLINESIZE - 1 |
277 | bic r0, r0, #CACHE_DLINESIZE - 1 | ||
228 | mcrne p15, 0, r0, c7, c10, 1 @ clean D entry | 278 | mcrne p15, 0, r0, c7, c10, 1 @ clean D entry |
229 | tst r1, #CACHE_DLINESIZE - 1 | 279 | tst r1, #CACHE_DLINESIZE - 1 |
230 | mcrne p15, 0, r1, c7, c10, 1 @ clean D entry | 280 | mcrne p15, 0, r1, c7, c10, 1 @ clean D entry |
231 | bic r0, r0, #CACHE_DLINESIZE - 1 | ||
232 | 1: mcr p15, 0, r0, c7, c6, 1 @ invalidate D entry | 281 | 1: mcr p15, 0, r0, c7, c6, 1 @ invalidate D entry |
233 | add r0, r0, #CACHE_DLINESIZE | 282 | add r0, r0, #CACHE_DLINESIZE |
234 | cmp r0, r1 | 283 | cmp r0, r1 |
@@ -236,6 +285,22 @@ ENTRY(feroceon_dma_inv_range) | |||
236 | mcr p15, 0, r0, c7, c10, 4 @ drain WB | 285 | mcr p15, 0, r0, c7, c10, 4 @ drain WB |
237 | mov pc, lr | 286 | mov pc, lr |
238 | 287 | ||
288 | .align 5 | ||
289 | ENTRY(feroceon_range_dma_inv_range) | ||
290 | mrs r2, cpsr | ||
291 | tst r0, #CACHE_DLINESIZE - 1 | ||
292 | mcrne p15, 0, r0, c7, c10, 1 @ clean D entry | ||
293 | tst r1, #CACHE_DLINESIZE - 1 | ||
294 | mcrne p15, 0, r1, c7, c10, 1 @ clean D entry | ||
295 | cmp r1, r0 | ||
296 | subne r1, r1, #1 @ top address is inclusive | ||
297 | orr r3, r2, #PSR_I_BIT | ||
298 | msr cpsr_c, r3 @ disable interrupts | ||
299 | mcr p15, 5, r0, c15, c14, 0 @ D inv range start | ||
300 | mcr p15, 5, r1, c15, c14, 1 @ D inv range top | ||
301 | msr cpsr_c, r2 @ restore interrupts | ||
302 | mov pc, lr | ||
303 | |||
239 | /* | 304 | /* |
240 | * dma_clean_range(start, end) | 305 | * dma_clean_range(start, end) |
241 | * | 306 | * |
@@ -256,6 +321,19 @@ ENTRY(feroceon_dma_clean_range) | |||
256 | mcr p15, 0, r0, c7, c10, 4 @ drain WB | 321 | mcr p15, 0, r0, c7, c10, 4 @ drain WB |
257 | mov pc, lr | 322 | mov pc, lr |
258 | 323 | ||
324 | .align 5 | ||
325 | ENTRY(feroceon_range_dma_clean_range) | ||
326 | mrs r2, cpsr | ||
327 | cmp r1, r0 | ||
328 | subne r1, r1, #1 @ top address is inclusive | ||
329 | orr r3, r2, #PSR_I_BIT | ||
330 | msr cpsr_c, r3 @ disable interrupts | ||
331 | mcr p15, 5, r0, c15, c13, 0 @ D clean range start | ||
332 | mcr p15, 5, r1, c15, c13, 1 @ D clean range top | ||
333 | msr cpsr_c, r2 @ restore interrupts | ||
334 | mcr p15, 0, r0, c7, c10, 4 @ drain WB | ||
335 | mov pc, lr | ||
336 | |||
259 | /* | 337 | /* |
260 | * dma_flush_range(start, end) | 338 | * dma_flush_range(start, end) |
261 | * | 339 | * |
@@ -274,6 +352,19 @@ ENTRY(feroceon_dma_flush_range) | |||
274 | mcr p15, 0, r0, c7, c10, 4 @ drain WB | 352 | mcr p15, 0, r0, c7, c10, 4 @ drain WB |
275 | mov pc, lr | 353 | mov pc, lr |
276 | 354 | ||
355 | .align 5 | ||
356 | ENTRY(feroceon_range_dma_flush_range) | ||
357 | mrs r2, cpsr | ||
358 | cmp r1, r0 | ||
359 | subne r1, r1, #1 @ top address is inclusive | ||
360 | orr r3, r2, #PSR_I_BIT | ||
361 | msr cpsr_c, r3 @ disable interrupts | ||
362 | mcr p15, 5, r0, c15, c15, 0 @ D clean/inv range start | ||
363 | mcr p15, 5, r1, c15, c15, 1 @ D clean/inv range top | ||
364 | msr cpsr_c, r2 @ restore interrupts | ||
365 | mcr p15, 0, r0, c7, c10, 4 @ drain WB | ||
366 | mov pc, lr | ||
367 | |||
277 | ENTRY(feroceon_cache_fns) | 368 | ENTRY(feroceon_cache_fns) |
278 | .long feroceon_flush_kern_cache_all | 369 | .long feroceon_flush_kern_cache_all |
279 | .long feroceon_flush_user_cache_all | 370 | .long feroceon_flush_user_cache_all |
@@ -285,12 +376,33 @@ ENTRY(feroceon_cache_fns) | |||
285 | .long feroceon_dma_clean_range | 376 | .long feroceon_dma_clean_range |
286 | .long feroceon_dma_flush_range | 377 | .long feroceon_dma_flush_range |
287 | 378 | ||
379 | ENTRY(feroceon_range_cache_fns) | ||
380 | .long feroceon_flush_kern_cache_all | ||
381 | .long feroceon_flush_user_cache_all | ||
382 | .long feroceon_flush_user_cache_range | ||
383 | .long feroceon_coherent_kern_range | ||
384 | .long feroceon_coherent_user_range | ||
385 | .long feroceon_range_flush_kern_dcache_page | ||
386 | .long feroceon_range_dma_inv_range | ||
387 | .long feroceon_range_dma_clean_range | ||
388 | .long feroceon_range_dma_flush_range | ||
389 | |||
288 | .align 5 | 390 | .align 5 |
289 | ENTRY(cpu_feroceon_dcache_clean_area) | 391 | ENTRY(cpu_feroceon_dcache_clean_area) |
392 | #if defined(CONFIG_CACHE_FEROCEON_L2) && !defined(CONFIG_L2_CACHE_WRITETHROUGH) | ||
393 | mov r2, r0 | ||
394 | mov r3, r1 | ||
395 | #endif | ||
290 | 1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry | 396 | 1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry |
291 | add r0, r0, #CACHE_DLINESIZE | 397 | add r0, r0, #CACHE_DLINESIZE |
292 | subs r1, r1, #CACHE_DLINESIZE | 398 | subs r1, r1, #CACHE_DLINESIZE |
293 | bhi 1b | 399 | bhi 1b |
400 | #if defined(CONFIG_CACHE_FEROCEON_L2) && !defined(CONFIG_L2_CACHE_WRITETHROUGH) | ||
401 | 1: mcr p15, 1, r2, c15, c9, 1 @ clean L2 entry | ||
402 | add r2, r2, #CACHE_DLINESIZE | ||
403 | subs r3, r3, #CACHE_DLINESIZE | ||
404 | bhi 1b | ||
405 | #endif | ||
294 | mcr p15, 0, r0, c7, c10, 4 @ drain WB | 406 | mcr p15, 0, r0, c7, c10, 4 @ drain WB |
295 | mov pc, lr | 407 | mov pc, lr |
296 | 408 | ||
@@ -306,16 +418,25 @@ ENTRY(cpu_feroceon_dcache_clean_area) | |||
306 | .align 5 | 418 | .align 5 |
307 | ENTRY(cpu_feroceon_switch_mm) | 419 | ENTRY(cpu_feroceon_switch_mm) |
308 | #ifdef CONFIG_MMU | 420 | #ifdef CONFIG_MMU |
309 | mov ip, #0 | 421 | /* |
310 | @ && 'Clean & Invalidate whole DCache' | 422 | * Note: we wish to call __flush_whole_cache but we need to preserve |
311 | 1: mrc p15, 0, r15, c7, c14, 3 @ test,clean,invalidate | 423 | * lr to do so. The only way without touching main memory is to |
312 | bne 1b | 424 | * use r2 which is normally used to test the VM_EXEC flag, and |
313 | mcr p15, 0, ip, c7, c5, 0 @ invalidate I cache | 425 | * compensate locally for the skipped ops if it is not set. |
314 | mcr p15, 0, ip, c7, c10, 4 @ drain WB | 426 | */ |
427 | mov r2, lr @ abuse r2 to preserve lr | ||
428 | bl __flush_whole_cache | ||
429 | @ if r2 contains the VM_EXEC bit then the next 2 ops are done already | ||
430 | tst r2, #VM_EXEC | ||
431 | mcreq p15, 0, ip, c7, c5, 0 @ invalidate I cache | ||
432 | mcreq p15, 0, ip, c7, c10, 4 @ drain WB | ||
433 | |||
315 | mcr p15, 0, r0, c2, c0, 0 @ load page table pointer | 434 | mcr p15, 0, r0, c2, c0, 0 @ load page table pointer |
316 | mcr p15, 0, ip, c8, c7, 0 @ invalidate I & D TLBs | 435 | mcr p15, 0, ip, c8, c7, 0 @ invalidate I & D TLBs |
317 | #endif | 436 | mov pc, r2 |
437 | #else | ||
318 | mov pc, lr | 438 | mov pc, lr |
439 | #endif | ||
319 | 440 | ||
320 | /* | 441 | /* |
321 | * cpu_feroceon_set_pte_ext(ptep, pte, ext) | 442 | * cpu_feroceon_set_pte_ext(ptep, pte, ext) |
@@ -345,6 +466,9 @@ ENTRY(cpu_feroceon_set_pte_ext) | |||
345 | str r2, [r0] @ hardware version | 466 | str r2, [r0] @ hardware version |
346 | mov r0, r0 | 467 | mov r0, r0 |
347 | mcr p15, 0, r0, c7, c10, 1 @ clean D entry | 468 | mcr p15, 0, r0, c7, c10, 1 @ clean D entry |
469 | #if defined(CONFIG_CACHE_FEROCEON_L2) && !defined(CONFIG_L2_CACHE_WRITETHROUGH) | ||
470 | mcr p15, 1, r0, c15, c9, 1 @ clean L2 entry | ||
471 | #endif | ||
348 | mcr p15, 0, r0, c7, c10, 4 @ drain WB | 472 | mcr p15, 0, r0, c7, c10, 4 @ drain WB |
349 | #endif | 473 | #endif |
350 | mov pc, lr | 474 | mov pc, lr |
@@ -369,14 +493,15 @@ __feroceon_setup: | |||
369 | .size __feroceon_setup, . - __feroceon_setup | 493 | .size __feroceon_setup, . - __feroceon_setup |
370 | 494 | ||
371 | /* | 495 | /* |
372 | * R | 496 | * B |
373 | * .RVI ZFRS BLDP WCAM | 497 | * R P |
374 | * .011 0001 ..11 0101 | 498 | * .RVI UFRS BLDP WCAM |
499 | * .011 .001 ..11 0101 | ||
375 | * | 500 | * |
376 | */ | 501 | */ |
377 | .type feroceon_crval, #object | 502 | .type feroceon_crval, #object |
378 | feroceon_crval: | 503 | feroceon_crval: |
379 | crval clear=0x00007f3f, mmuset=0x00003135, ucset=0x00001134 | 504 | crval clear=0x0000773f, mmuset=0x00003135, ucset=0x00001134 |
380 | 505 | ||
381 | __INITDATA | 506 | __INITDATA |
382 | 507 | ||
@@ -414,6 +539,21 @@ cpu_feroceon_name: | |||
414 | .asciz "Feroceon" | 539 | .asciz "Feroceon" |
415 | .size cpu_feroceon_name, . - cpu_feroceon_name | 540 | .size cpu_feroceon_name, . - cpu_feroceon_name |
416 | 541 | ||
542 | .type cpu_88fr531_name, #object | ||
543 | cpu_88fr531_name: | ||
544 | .asciz "Feroceon 88FR531-vd" | ||
545 | .size cpu_88fr531_name, . - cpu_88fr531_name | ||
546 | |||
547 | .type cpu_88fr571_name, #object | ||
548 | cpu_88fr571_name: | ||
549 | .asciz "Feroceon 88FR571-vd" | ||
550 | .size cpu_88fr571_name, . - cpu_88fr571_name | ||
551 | |||
552 | .type cpu_88fr131_name, #object | ||
553 | cpu_88fr131_name: | ||
554 | .asciz "Feroceon 88FR131" | ||
555 | .size cpu_88fr131_name, . - cpu_88fr131_name | ||
556 | |||
417 | .align | 557 | .align |
418 | 558 | ||
419 | .section ".proc.info.init", #alloc, #execinstr | 559 | .section ".proc.info.init", #alloc, #execinstr |
@@ -421,15 +561,15 @@ cpu_feroceon_name: | |||
421 | #ifdef CONFIG_CPU_FEROCEON_OLD_ID | 561 | #ifdef CONFIG_CPU_FEROCEON_OLD_ID |
422 | .type __feroceon_old_id_proc_info,#object | 562 | .type __feroceon_old_id_proc_info,#object |
423 | __feroceon_old_id_proc_info: | 563 | __feroceon_old_id_proc_info: |
424 | .long 0x41069260 | 564 | .long 0x41009260 |
425 | .long 0xfffffff0 | 565 | .long 0xff00fff0 |
426 | .long PMD_TYPE_SECT | \ | 566 | .long PMD_TYPE_SECT | \ |
427 | PMD_SECT_BUFFERABLE | \ | 567 | PMD_SECT_BUFFERABLE | \ |
428 | PMD_SECT_CACHEABLE | \ | 568 | PMD_SECT_CACHEABLE | \ |
429 | PMD_BIT4 | \ | 569 | PMD_BIT4 | \ |
430 | PMD_SECT_AP_WRITE | \ | 570 | PMD_SECT_AP_WRITE | \ |
431 | PMD_SECT_AP_READ | 571 | PMD_SECT_AP_READ |
432 | .long PMD_TYPE_SECT | \ | 572 | .long PMD_TYPE_SECT | \ |
433 | PMD_BIT4 | \ | 573 | PMD_BIT4 | \ |
434 | PMD_SECT_AP_WRITE | \ | 574 | PMD_SECT_AP_WRITE | \ |
435 | PMD_SECT_AP_READ | 575 | PMD_SECT_AP_READ |
@@ -445,17 +585,17 @@ __feroceon_old_id_proc_info: | |||
445 | .size __feroceon_old_id_proc_info, . - __feroceon_old_id_proc_info | 585 | .size __feroceon_old_id_proc_info, . - __feroceon_old_id_proc_info |
446 | #endif | 586 | #endif |
447 | 587 | ||
448 | .type __feroceon_proc_info,#object | 588 | .type __88fr531_proc_info,#object |
449 | __feroceon_proc_info: | 589 | __88fr531_proc_info: |
450 | .long 0x56055310 | 590 | .long 0x56055310 |
451 | .long 0xfffffff0 | 591 | .long 0xfffffff0 |
452 | .long PMD_TYPE_SECT | \ | 592 | .long PMD_TYPE_SECT | \ |
453 | PMD_SECT_BUFFERABLE | \ | 593 | PMD_SECT_BUFFERABLE | \ |
454 | PMD_SECT_CACHEABLE | \ | 594 | PMD_SECT_CACHEABLE | \ |
455 | PMD_BIT4 | \ | 595 | PMD_BIT4 | \ |
456 | PMD_SECT_AP_WRITE | \ | 596 | PMD_SECT_AP_WRITE | \ |
457 | PMD_SECT_AP_READ | 597 | PMD_SECT_AP_READ |
458 | .long PMD_TYPE_SECT | \ | 598 | .long PMD_TYPE_SECT | \ |
459 | PMD_BIT4 | \ | 599 | PMD_BIT4 | \ |
460 | PMD_SECT_AP_WRITE | \ | 600 | PMD_SECT_AP_WRITE | \ |
461 | PMD_SECT_AP_READ | 601 | PMD_SECT_AP_READ |
@@ -463,9 +603,59 @@ __feroceon_proc_info: | |||
463 | .long cpu_arch_name | 603 | .long cpu_arch_name |
464 | .long cpu_elf_name | 604 | .long cpu_elf_name |
465 | .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP | 605 | .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP |
466 | .long cpu_feroceon_name | 606 | .long cpu_88fr531_name |
467 | .long feroceon_processor_functions | 607 | .long feroceon_processor_functions |
468 | .long v4wbi_tlb_fns | 608 | .long v4wbi_tlb_fns |
469 | .long feroceon_user_fns | 609 | .long feroceon_user_fns |
470 | .long feroceon_cache_fns | 610 | .long feroceon_cache_fns |
471 | .size __feroceon_proc_info, . - __feroceon_proc_info | 611 | .size __88fr531_proc_info, . - __88fr531_proc_info |
612 | |||
613 | .type __88fr571_proc_info,#object | ||
614 | __88fr571_proc_info: | ||
615 | .long 0x56155710 | ||
616 | .long 0xfffffff0 | ||
617 | .long PMD_TYPE_SECT | \ | ||
618 | PMD_SECT_BUFFERABLE | \ | ||
619 | PMD_SECT_CACHEABLE | \ | ||
620 | PMD_BIT4 | \ | ||
621 | PMD_SECT_AP_WRITE | \ | ||
622 | PMD_SECT_AP_READ | ||
623 | .long PMD_TYPE_SECT | \ | ||
624 | PMD_BIT4 | \ | ||
625 | PMD_SECT_AP_WRITE | \ | ||
626 | PMD_SECT_AP_READ | ||
627 | b __feroceon_setup | ||
628 | .long cpu_arch_name | ||
629 | .long cpu_elf_name | ||
630 | .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP | ||
631 | .long cpu_88fr571_name | ||
632 | .long feroceon_processor_functions | ||
633 | .long v4wbi_tlb_fns | ||
634 | .long feroceon_user_fns | ||
635 | .long feroceon_range_cache_fns | ||
636 | .size __88fr571_proc_info, . - __88fr571_proc_info | ||
637 | |||
638 | .type __88fr131_proc_info,#object | ||
639 | __88fr131_proc_info: | ||
640 | .long 0x56251310 | ||
641 | .long 0xfffffff0 | ||
642 | .long PMD_TYPE_SECT | \ | ||
643 | PMD_SECT_BUFFERABLE | \ | ||
644 | PMD_SECT_CACHEABLE | \ | ||
645 | PMD_BIT4 | \ | ||
646 | PMD_SECT_AP_WRITE | \ | ||
647 | PMD_SECT_AP_READ | ||
648 | .long PMD_TYPE_SECT | \ | ||
649 | PMD_BIT4 | \ | ||
650 | PMD_SECT_AP_WRITE | \ | ||
651 | PMD_SECT_AP_READ | ||
652 | b __feroceon_setup | ||
653 | .long cpu_arch_name | ||
654 | .long cpu_elf_name | ||
655 | .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP | ||
656 | .long cpu_88fr131_name | ||
657 | .long feroceon_processor_functions | ||
658 | .long v4wbi_tlb_fns | ||
659 | .long feroceon_user_fns | ||
660 | .long feroceon_range_cache_fns | ||
661 | .size __88fr131_proc_info, . - __88fr131_proc_info | ||
diff --git a/arch/arm/plat-iop/gpio.c b/arch/arm/plat-iop/gpio.c index eda436083417..640e498c12ef 100644 --- a/arch/arm/plat-iop/gpio.c +++ b/arch/arm/plat-iop/gpio.c | |||
@@ -11,6 +11,10 @@ | |||
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/device.h> | 13 | #include <linux/device.h> |
14 | #include <linux/init.h> | ||
15 | #include <linux/types.h> | ||
16 | #include <linux/errno.h> | ||
17 | #include <linux/gpio.h> | ||
14 | #include <asm/hardware/iop3xx.h> | 18 | #include <asm/hardware/iop3xx.h> |
15 | 19 | ||
16 | void gpio_line_config(int line, int direction) | 20 | void gpio_line_config(int line, int direction) |
@@ -46,3 +50,42 @@ void gpio_line_set(int line, int value) | |||
46 | local_irq_restore(flags); | 50 | local_irq_restore(flags); |
47 | } | 51 | } |
48 | EXPORT_SYMBOL(gpio_line_set); | 52 | EXPORT_SYMBOL(gpio_line_set); |
53 | |||
54 | static int iop3xx_gpio_direction_input(struct gpio_chip *chip, unsigned gpio) | ||
55 | { | ||
56 | gpio_line_config(gpio, GPIO_IN); | ||
57 | return 0; | ||
58 | } | ||
59 | |||
60 | static int iop3xx_gpio_direction_output(struct gpio_chip *chip, unsigned gpio, int level) | ||
61 | { | ||
62 | gpio_line_set(gpio, level); | ||
63 | gpio_line_config(gpio, GPIO_OUT); | ||
64 | return 0; | ||
65 | } | ||
66 | |||
67 | static int iop3xx_gpio_get_value(struct gpio_chip *chip, unsigned gpio) | ||
68 | { | ||
69 | return gpio_line_get(gpio); | ||
70 | } | ||
71 | |||
72 | static void iop3xx_gpio_set_value(struct gpio_chip *chip, unsigned gpio, int value) | ||
73 | { | ||
74 | gpio_line_set(gpio, value); | ||
75 | } | ||
76 | |||
77 | static struct gpio_chip iop3xx_chip = { | ||
78 | .label = "iop3xx", | ||
79 | .direction_input = iop3xx_gpio_direction_input, | ||
80 | .get = iop3xx_gpio_get_value, | ||
81 | .direction_output = iop3xx_gpio_direction_output, | ||
82 | .set = iop3xx_gpio_set_value, | ||
83 | .base = 0, | ||
84 | .ngpio = IOP3XX_N_GPIOS, | ||
85 | }; | ||
86 | |||
87 | static int __init iop3xx_gpio_setup(void) | ||
88 | { | ||
89 | return gpiochip_add(&iop3xx_chip); | ||
90 | } | ||
91 | arch_initcall(iop3xx_gpio_setup); | ||
diff --git a/arch/arm/plat-orion/irq.c b/arch/arm/plat-orion/irq.c index c5b669d234bc..fe66a1835169 100644 --- a/arch/arm/plat-orion/irq.c +++ b/arch/arm/plat-orion/irq.c | |||
@@ -36,8 +36,8 @@ static void orion_irq_unmask(u32 irq) | |||
36 | 36 | ||
37 | static struct irq_chip orion_irq_chip = { | 37 | static struct irq_chip orion_irq_chip = { |
38 | .name = "orion_irq", | 38 | .name = "orion_irq", |
39 | .ack = orion_irq_mask, | ||
40 | .mask = orion_irq_mask, | 39 | .mask = orion_irq_mask, |
40 | .mask_ack = orion_irq_mask, | ||
41 | .unmask = orion_irq_unmask, | 41 | .unmask = orion_irq_unmask, |
42 | }; | 42 | }; |
43 | 43 | ||
@@ -59,6 +59,7 @@ void __init orion_irq_init(unsigned int irq_start, void __iomem *maskaddr) | |||
59 | set_irq_chip(irq, &orion_irq_chip); | 59 | set_irq_chip(irq, &orion_irq_chip); |
60 | set_irq_chip_data(irq, maskaddr); | 60 | set_irq_chip_data(irq, maskaddr); |
61 | set_irq_handler(irq, handle_level_irq); | 61 | set_irq_handler(irq, handle_level_irq); |
62 | irq_desc[irq].status |= IRQ_LEVEL; | ||
62 | set_irq_flags(irq, IRQF_VALID); | 63 | set_irq_flags(irq, IRQF_VALID); |
63 | } | 64 | } |
64 | } | 65 | } |
diff --git a/arch/arm/plat-orion/pcie.c b/arch/arm/plat-orion/pcie.c index abfda53f1800..ca32c60e14d7 100644 --- a/arch/arm/plat-orion/pcie.c +++ b/arch/arm/plat-orion/pcie.c | |||
@@ -39,6 +39,7 @@ | |||
39 | #define PCIE_CONF_DATA_OFF 0x18fc | 39 | #define PCIE_CONF_DATA_OFF 0x18fc |
40 | #define PCIE_MASK_OFF 0x1910 | 40 | #define PCIE_MASK_OFF 0x1910 |
41 | #define PCIE_CTRL_OFF 0x1a00 | 41 | #define PCIE_CTRL_OFF 0x1a00 |
42 | #define PCIE_CTRL_X1_MODE 0x0001 | ||
42 | #define PCIE_STAT_OFF 0x1a04 | 43 | #define PCIE_STAT_OFF 0x1a04 |
43 | #define PCIE_STAT_DEV_OFFS 20 | 44 | #define PCIE_STAT_DEV_OFFS 20 |
44 | #define PCIE_STAT_DEV_MASK 0x1f | 45 | #define PCIE_STAT_DEV_MASK 0x1f |
@@ -62,6 +63,11 @@ int orion_pcie_link_up(void __iomem *base) | |||
62 | return !(readl(base + PCIE_STAT_OFF) & PCIE_STAT_LINK_DOWN); | 63 | return !(readl(base + PCIE_STAT_OFF) & PCIE_STAT_LINK_DOWN); |
63 | } | 64 | } |
64 | 65 | ||
66 | int __init orion_pcie_x4_mode(void __iomem *base) | ||
67 | { | ||
68 | return !(readl(base + PCIE_CTRL_OFF) & PCIE_CTRL_X1_MODE); | ||
69 | } | ||
70 | |||
65 | int orion_pcie_get_local_bus_nr(void __iomem *base) | 71 | int orion_pcie_get_local_bus_nr(void __iomem *base) |
66 | { | 72 | { |
67 | u32 stat = readl(base + PCIE_STAT_OFF); | 73 | u32 stat = readl(base + PCIE_STAT_OFF); |
diff --git a/arch/arm/plat-orion/time.c b/arch/arm/plat-orion/time.c index 28b5285446e8..93c4ef9f0067 100644 --- a/arch/arm/plat-orion/time.c +++ b/arch/arm/plat-orion/time.c | |||
@@ -74,7 +74,7 @@ orion_clkevt_next_event(unsigned long delta, struct clock_event_device *dev) | |||
74 | /* | 74 | /* |
75 | * Clear and enable clockevent timer interrupt. | 75 | * Clear and enable clockevent timer interrupt. |
76 | */ | 76 | */ |
77 | writel(~BRIDGE_INT_TIMER1, BRIDGE_CAUSE); | 77 | writel(BRIDGE_INT_TIMER1_CLR, BRIDGE_CAUSE); |
78 | 78 | ||
79 | u = readl(BRIDGE_MASK); | 79 | u = readl(BRIDGE_MASK); |
80 | u |= BRIDGE_INT_TIMER1; | 80 | u |= BRIDGE_INT_TIMER1; |
@@ -138,7 +138,7 @@ orion_clkevt_mode(enum clock_event_mode mode, struct clock_event_device *dev) | |||
138 | /* | 138 | /* |
139 | * ACK pending timer interrupt. | 139 | * ACK pending timer interrupt. |
140 | */ | 140 | */ |
141 | writel(~BRIDGE_INT_TIMER1, BRIDGE_CAUSE); | 141 | writel(BRIDGE_INT_TIMER1_CLR, BRIDGE_CAUSE); |
142 | 142 | ||
143 | } | 143 | } |
144 | local_irq_restore(flags); | 144 | local_irq_restore(flags); |
@@ -159,7 +159,7 @@ static irqreturn_t orion_timer_interrupt(int irq, void *dev_id) | |||
159 | /* | 159 | /* |
160 | * ACK timer interrupt and call event handler. | 160 | * ACK timer interrupt and call event handler. |
161 | */ | 161 | */ |
162 | writel(~BRIDGE_INT_TIMER1, BRIDGE_CAUSE); | 162 | writel(BRIDGE_INT_TIMER1_CLR, BRIDGE_CAUSE); |
163 | orion_clkevt.event_handler(&orion_clkevt); | 163 | orion_clkevt.event_handler(&orion_clkevt); |
164 | 164 | ||
165 | return IRQ_HANDLED; | 165 | return IRQ_HANDLED; |
diff --git a/arch/arm/plat-s3c24xx/Kconfig b/arch/arm/plat-s3c24xx/Kconfig index b66fb3c4e228..5e28c217b8c2 100644 --- a/arch/arm/plat-s3c24xx/Kconfig +++ b/arch/arm/plat-s3c24xx/Kconfig | |||
@@ -9,6 +9,7 @@ config PLAT_S3C24XX | |||
9 | depends on ARCH_S3C2410 | 9 | depends on ARCH_S3C2410 |
10 | default y if ARCH_S3C2410 | 10 | default y if ARCH_S3C2410 |
11 | select NO_IOPORT | 11 | select NO_IOPORT |
12 | select HAVE_GPIO_LIB | ||
12 | help | 13 | help |
13 | Base platform code for any Samsung S3C24XX device | 14 | Base platform code for any Samsung S3C24XX device |
14 | 15 | ||
@@ -20,6 +21,13 @@ config CPU_S3C244X | |||
20 | help | 21 | help |
21 | Support for S3C2440 and S3C2442 Samsung Mobile CPU based systems. | 22 | Support for S3C2440 and S3C2442 Samsung Mobile CPU based systems. |
22 | 23 | ||
24 | config S3C24XX_PWM | ||
25 | bool "PWM device support" | ||
26 | select HAVE_PWM | ||
27 | help | ||
28 | Support for exporting the PWM timer blocks via the pwm device | ||
29 | system. | ||
30 | |||
23 | config PM_SIMTEC | 31 | config PM_SIMTEC |
24 | bool | 32 | bool |
25 | help | 33 | help |
diff --git a/arch/arm/plat-s3c24xx/Makefile b/arch/arm/plat-s3c24xx/Makefile index 131d20237dd7..d82767b2b833 100644 --- a/arch/arm/plat-s3c24xx/Makefile +++ b/arch/arm/plat-s3c24xx/Makefile | |||
@@ -16,8 +16,10 @@ obj-y += cpu.o | |||
16 | obj-y += irq.o | 16 | obj-y += irq.o |
17 | obj-y += devs.o | 17 | obj-y += devs.o |
18 | obj-y += gpio.o | 18 | obj-y += gpio.o |
19 | obj-y += gpiolib.o | ||
19 | obj-y += time.o | 20 | obj-y += time.o |
20 | obj-y += clock.o | 21 | obj-y += clock.o |
22 | obj-y += pwm-clock.o | ||
21 | 23 | ||
22 | # Architecture dependant builds | 24 | # Architecture dependant builds |
23 | 25 | ||
@@ -27,5 +29,6 @@ obj-$(CONFIG_CPU_S3C244X) += s3c244x-clock.o | |||
27 | obj-$(CONFIG_PM_SIMTEC) += pm-simtec.o | 29 | obj-$(CONFIG_PM_SIMTEC) += pm-simtec.o |
28 | obj-$(CONFIG_PM) += pm.o | 30 | obj-$(CONFIG_PM) += pm.o |
29 | obj-$(CONFIG_PM) += sleep.o | 31 | obj-$(CONFIG_PM) += sleep.o |
32 | obj-$(CONFIG_HAVE_PWM) += pwm.o | ||
30 | obj-$(CONFIG_S3C2410_DMA) += dma.o | 33 | obj-$(CONFIG_S3C2410_DMA) += dma.o |
31 | obj-$(CONFIG_MACH_SMDK) += common-smdk.o | 34 | obj-$(CONFIG_MACH_SMDK) += common-smdk.o |
diff --git a/arch/arm/plat-s3c24xx/devs.c b/arch/arm/plat-s3c24xx/devs.c index e546e933b3f7..eea3b32ff798 100644 --- a/arch/arm/plat-s3c24xx/devs.c +++ b/arch/arm/plat-s3c24xx/devs.c | |||
@@ -495,106 +495,6 @@ struct platform_device s3c_device_spi1 = { | |||
495 | 495 | ||
496 | EXPORT_SYMBOL(s3c_device_spi1); | 496 | EXPORT_SYMBOL(s3c_device_spi1); |
497 | 497 | ||
498 | /* pwm timer blocks */ | ||
499 | |||
500 | static struct resource s3c_timer0_resource[] = { | ||
501 | [0] = { | ||
502 | .start = S3C24XX_PA_TIMER + 0x0C, | ||
503 | .end = S3C24XX_PA_TIMER + 0x0C + 0xB, | ||
504 | .flags = IORESOURCE_MEM, | ||
505 | }, | ||
506 | [1] = { | ||
507 | .start = IRQ_TIMER0, | ||
508 | .end = IRQ_TIMER0, | ||
509 | .flags = IORESOURCE_IRQ, | ||
510 | } | ||
511 | |||
512 | }; | ||
513 | |||
514 | struct platform_device s3c_device_timer0 = { | ||
515 | .name = "s3c2410-timer", | ||
516 | .id = 0, | ||
517 | .num_resources = ARRAY_SIZE(s3c_timer0_resource), | ||
518 | .resource = s3c_timer0_resource, | ||
519 | }; | ||
520 | |||
521 | EXPORT_SYMBOL(s3c_device_timer0); | ||
522 | |||
523 | /* timer 1 */ | ||
524 | |||
525 | static struct resource s3c_timer1_resource[] = { | ||
526 | [0] = { | ||
527 | .start = S3C24XX_PA_TIMER + 0x18, | ||
528 | .end = S3C24XX_PA_TIMER + 0x23, | ||
529 | .flags = IORESOURCE_MEM, | ||
530 | }, | ||
531 | [1] = { | ||
532 | .start = IRQ_TIMER1, | ||
533 | .end = IRQ_TIMER1, | ||
534 | .flags = IORESOURCE_IRQ, | ||
535 | } | ||
536 | |||
537 | }; | ||
538 | |||
539 | struct platform_device s3c_device_timer1 = { | ||
540 | .name = "s3c2410-timer", | ||
541 | .id = 1, | ||
542 | .num_resources = ARRAY_SIZE(s3c_timer1_resource), | ||
543 | .resource = s3c_timer1_resource, | ||
544 | }; | ||
545 | |||
546 | EXPORT_SYMBOL(s3c_device_timer1); | ||
547 | |||
548 | /* timer 2 */ | ||
549 | |||
550 | static struct resource s3c_timer2_resource[] = { | ||
551 | [0] = { | ||
552 | .start = S3C24XX_PA_TIMER + 0x24, | ||
553 | .end = S3C24XX_PA_TIMER + 0x2F, | ||
554 | .flags = IORESOURCE_MEM, | ||
555 | }, | ||
556 | [1] = { | ||
557 | .start = IRQ_TIMER2, | ||
558 | .end = IRQ_TIMER2, | ||
559 | .flags = IORESOURCE_IRQ, | ||
560 | } | ||
561 | |||
562 | }; | ||
563 | |||
564 | struct platform_device s3c_device_timer2 = { | ||
565 | .name = "s3c2410-timer", | ||
566 | .id = 2, | ||
567 | .num_resources = ARRAY_SIZE(s3c_timer2_resource), | ||
568 | .resource = s3c_timer2_resource, | ||
569 | }; | ||
570 | |||
571 | EXPORT_SYMBOL(s3c_device_timer2); | ||
572 | |||
573 | /* timer 3 */ | ||
574 | |||
575 | static struct resource s3c_timer3_resource[] = { | ||
576 | [0] = { | ||
577 | .start = S3C24XX_PA_TIMER + 0x30, | ||
578 | .end = S3C24XX_PA_TIMER + 0x3B, | ||
579 | .flags = IORESOURCE_MEM, | ||
580 | }, | ||
581 | [1] = { | ||
582 | .start = IRQ_TIMER3, | ||
583 | .end = IRQ_TIMER3, | ||
584 | .flags = IORESOURCE_IRQ, | ||
585 | } | ||
586 | |||
587 | }; | ||
588 | |||
589 | struct platform_device s3c_device_timer3 = { | ||
590 | .name = "s3c2410-timer", | ||
591 | .id = 3, | ||
592 | .num_resources = ARRAY_SIZE(s3c_timer3_resource), | ||
593 | .resource = s3c_timer3_resource, | ||
594 | }; | ||
595 | |||
596 | EXPORT_SYMBOL(s3c_device_timer3); | ||
597 | |||
598 | #ifdef CONFIG_CPU_S3C2440 | 498 | #ifdef CONFIG_CPU_S3C2440 |
599 | 499 | ||
600 | /* Camif Controller */ | 500 | /* Camif Controller */ |
diff --git a/arch/arm/plat-s3c24xx/gpiolib.c b/arch/arm/plat-s3c24xx/gpiolib.c new file mode 100644 index 000000000000..825d8d0c5ca2 --- /dev/null +++ b/arch/arm/plat-s3c24xx/gpiolib.c | |||
@@ -0,0 +1,259 @@ | |||
1 | /* linux/arch/arm/plat-s3c24xx/gpiolib.c | ||
2 | * | ||
3 | * Copyright (c) 2008 Simtec Electronics | ||
4 | * http://armlinux.simtec.co.uk/ | ||
5 | * Ben Dooks <ben@simtec.co.uk> | ||
6 | * | ||
7 | * S3C24XX GPIOlib support | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; either version 2 of the License. | ||
12 | */ | ||
13 | |||
14 | #include <linux/kernel.h> | ||
15 | #include <linux/init.h> | ||
16 | #include <linux/module.h> | ||
17 | #include <linux/interrupt.h> | ||
18 | #include <linux/ioport.h> | ||
19 | #include <linux/io.h> | ||
20 | #include <linux/gpio.h> | ||
21 | |||
22 | #include <asm/hardware.h> | ||
23 | #include <asm/irq.h> | ||
24 | |||
25 | #include <asm/arch/regs-gpio.h> | ||
26 | |||
27 | struct s3c24xx_gpio_chip { | ||
28 | struct gpio_chip chip; | ||
29 | void __iomem *base; | ||
30 | }; | ||
31 | |||
32 | static inline struct s3c24xx_gpio_chip *to_s3c_chip(struct gpio_chip *gpc) | ||
33 | { | ||
34 | return container_of(gpc, struct s3c24xx_gpio_chip, chip); | ||
35 | } | ||
36 | |||
37 | /* these routines are exported for use by other parts of the platform | ||
38 | * and system support, but are not intended to be used directly by the | ||
39 | * drivers themsevles. | ||
40 | */ | ||
41 | |||
42 | int s3c24xx_gpiolib_input(struct gpio_chip *chip, unsigned offset) | ||
43 | { | ||
44 | struct s3c24xx_gpio_chip *ourchip = to_s3c_chip(chip); | ||
45 | void __iomem *base = ourchip->base; | ||
46 | unsigned long flags; | ||
47 | unsigned long con; | ||
48 | |||
49 | local_irq_save(flags); | ||
50 | |||
51 | con = __raw_readl(base + 0x00); | ||
52 | con &= ~(3 << (offset * 2)); | ||
53 | con |= (S3C2410_GPIO_OUTPUT & 0xf) << (offset * 2); | ||
54 | |||
55 | __raw_writel(con, base + 0x00); | ||
56 | |||
57 | local_irq_restore(flags); | ||
58 | return 0; | ||
59 | } | ||
60 | |||
61 | int s3c24xx_gpiolib_output(struct gpio_chip *chip, | ||
62 | unsigned offset, int value) | ||
63 | { | ||
64 | struct s3c24xx_gpio_chip *ourchip = to_s3c_chip(chip); | ||
65 | void __iomem *base = ourchip->base; | ||
66 | unsigned long flags; | ||
67 | unsigned long dat; | ||
68 | unsigned long con; | ||
69 | |||
70 | local_irq_save(flags); | ||
71 | |||
72 | dat = __raw_readl(base + 0x04); | ||
73 | dat &= ~(1 << offset); | ||
74 | if (value) | ||
75 | dat |= 1 << offset; | ||
76 | __raw_writel(dat, base + 0x04); | ||
77 | |||
78 | con = __raw_readl(base + 0x00); | ||
79 | con &= ~(3 << (offset * 2)); | ||
80 | con |= (S3C2410_GPIO_OUTPUT & 0xf) << (offset * 2); | ||
81 | |||
82 | __raw_writel(con, base + 0x00); | ||
83 | __raw_writel(dat, base + 0x04); | ||
84 | |||
85 | local_irq_restore(flags); | ||
86 | return 0; | ||
87 | } | ||
88 | |||
89 | void s3c24xx_gpiolib_set(struct gpio_chip *chip, unsigned offset, int value) | ||
90 | { | ||
91 | struct s3c24xx_gpio_chip *ourchip = to_s3c_chip(chip); | ||
92 | void __iomem *base = ourchip->base; | ||
93 | unsigned long flags; | ||
94 | unsigned long dat; | ||
95 | |||
96 | local_irq_save(flags); | ||
97 | |||
98 | dat = __raw_readl(base + 0x04); | ||
99 | dat &= ~(1 << offset); | ||
100 | if (value) | ||
101 | dat |= 1 << offset; | ||
102 | __raw_writel(dat, base + 0x04); | ||
103 | |||
104 | local_irq_restore(flags); | ||
105 | } | ||
106 | |||
107 | int s3c24xx_gpiolib_get(struct gpio_chip *chip, unsigned offset) | ||
108 | { | ||
109 | struct s3c24xx_gpio_chip *ourchip = to_s3c_chip(chip); | ||
110 | unsigned long val; | ||
111 | |||
112 | val = __raw_readl(ourchip->base + 0x04); | ||
113 | val >>= offset; | ||
114 | val &= 1; | ||
115 | |||
116 | return val; | ||
117 | } | ||
118 | |||
119 | static int s3c24xx_gpiolib_banka_input(struct gpio_chip *chip, unsigned offset) | ||
120 | { | ||
121 | return -EINVAL; | ||
122 | } | ||
123 | |||
124 | static int s3c24xx_gpiolib_banka_output(struct gpio_chip *chip, | ||
125 | unsigned offset, int value) | ||
126 | { | ||
127 | struct s3c24xx_gpio_chip *ourchip = to_s3c_chip(chip); | ||
128 | void __iomem *base = ourchip->base; | ||
129 | unsigned long flags; | ||
130 | unsigned long dat; | ||
131 | unsigned long con; | ||
132 | |||
133 | local_irq_save(flags); | ||
134 | |||
135 | con = __raw_readl(base + 0x00); | ||
136 | dat = __raw_readl(base + 0x04); | ||
137 | |||
138 | dat &= ~(1 << offset); | ||
139 | if (value) | ||
140 | dat |= 1 << offset; | ||
141 | |||
142 | __raw_writel(dat, base + 0x04); | ||
143 | |||
144 | con &= ~(1 << offset); | ||
145 | |||
146 | __raw_writel(con, base + 0x00); | ||
147 | __raw_writel(dat, base + 0x04); | ||
148 | |||
149 | local_irq_restore(flags); | ||
150 | return 0; | ||
151 | } | ||
152 | |||
153 | |||
154 | struct s3c24xx_gpio_chip gpios[] = { | ||
155 | [0] = { | ||
156 | .base = S3C24XX_GPIO_BASE(S3C2410_GPA0), | ||
157 | .chip = { | ||
158 | .base = S3C2410_GPA0, | ||
159 | .owner = THIS_MODULE, | ||
160 | .label = "GPIOA", | ||
161 | .ngpio = 24, | ||
162 | .direction_input = s3c24xx_gpiolib_banka_input, | ||
163 | .direction_output = s3c24xx_gpiolib_banka_output, | ||
164 | .set = s3c24xx_gpiolib_set, | ||
165 | .get = s3c24xx_gpiolib_get, | ||
166 | }, | ||
167 | }, | ||
168 | [1] = { | ||
169 | .base = S3C24XX_GPIO_BASE(S3C2410_GPB0), | ||
170 | .chip = { | ||
171 | .base = S3C2410_GPB0, | ||
172 | .owner = THIS_MODULE, | ||
173 | .label = "GPIOB", | ||
174 | .ngpio = 16, | ||
175 | .direction_input = s3c24xx_gpiolib_input, | ||
176 | .direction_output = s3c24xx_gpiolib_output, | ||
177 | .set = s3c24xx_gpiolib_set, | ||
178 | .get = s3c24xx_gpiolib_get, | ||
179 | }, | ||
180 | }, | ||
181 | [2] = { | ||
182 | .base = S3C24XX_GPIO_BASE(S3C2410_GPC0), | ||
183 | .chip = { | ||
184 | .base = S3C2410_GPC0, | ||
185 | .owner = THIS_MODULE, | ||
186 | .label = "GPIOC", | ||
187 | .ngpio = 16, | ||
188 | .direction_input = s3c24xx_gpiolib_input, | ||
189 | .direction_output = s3c24xx_gpiolib_output, | ||
190 | .set = s3c24xx_gpiolib_set, | ||
191 | .get = s3c24xx_gpiolib_get, | ||
192 | }, | ||
193 | }, | ||
194 | [3] = { | ||
195 | .base = S3C24XX_GPIO_BASE(S3C2410_GPD0), | ||
196 | .chip = { | ||
197 | .base = S3C2410_GPD0, | ||
198 | .owner = THIS_MODULE, | ||
199 | .label = "GPIOD", | ||
200 | .ngpio = 16, | ||
201 | .direction_input = s3c24xx_gpiolib_input, | ||
202 | .direction_output = s3c24xx_gpiolib_output, | ||
203 | .set = s3c24xx_gpiolib_set, | ||
204 | .get = s3c24xx_gpiolib_get, | ||
205 | }, | ||
206 | }, | ||
207 | [4] = { | ||
208 | .base = S3C24XX_GPIO_BASE(S3C2410_GPE0), | ||
209 | .chip = { | ||
210 | .base = S3C2410_GPE0, | ||
211 | .label = "GPIOE", | ||
212 | .owner = THIS_MODULE, | ||
213 | .ngpio = 16, | ||
214 | .direction_input = s3c24xx_gpiolib_input, | ||
215 | .direction_output = s3c24xx_gpiolib_output, | ||
216 | .set = s3c24xx_gpiolib_set, | ||
217 | .get = s3c24xx_gpiolib_get, | ||
218 | }, | ||
219 | }, | ||
220 | [5] = { | ||
221 | .base = S3C24XX_GPIO_BASE(S3C2410_GPF0), | ||
222 | .chip = { | ||
223 | .base = S3C2410_GPF0, | ||
224 | .owner = THIS_MODULE, | ||
225 | .label = "GPIOF", | ||
226 | .ngpio = 8, | ||
227 | .direction_input = s3c24xx_gpiolib_input, | ||
228 | .direction_output = s3c24xx_gpiolib_output, | ||
229 | .set = s3c24xx_gpiolib_set, | ||
230 | .get = s3c24xx_gpiolib_get, | ||
231 | }, | ||
232 | }, | ||
233 | [6] = { | ||
234 | .base = S3C24XX_GPIO_BASE(S3C2410_GPG0), | ||
235 | .chip = { | ||
236 | .base = S3C2410_GPG0, | ||
237 | .owner = THIS_MODULE, | ||
238 | .label = "GPIOG", | ||
239 | .ngpio = 10, | ||
240 | .direction_input = s3c24xx_gpiolib_input, | ||
241 | .direction_output = s3c24xx_gpiolib_output, | ||
242 | .set = s3c24xx_gpiolib_set, | ||
243 | .get = s3c24xx_gpiolib_get, | ||
244 | }, | ||
245 | }, | ||
246 | }; | ||
247 | |||
248 | static __init int s3c24xx_gpiolib_init(void) | ||
249 | { | ||
250 | struct s3c24xx_gpio_chip *chip = gpios; | ||
251 | int gpn; | ||
252 | |||
253 | for (gpn = 0; gpn < ARRAY_SIZE(gpios); gpn++, chip++) | ||
254 | gpiochip_add(&chip->chip); | ||
255 | |||
256 | return 0; | ||
257 | } | ||
258 | |||
259 | arch_initcall(s3c24xx_gpiolib_init); | ||
diff --git a/arch/arm/plat-s3c24xx/pwm-clock.c b/arch/arm/plat-s3c24xx/pwm-clock.c new file mode 100644 index 000000000000..2cda3e3c6786 --- /dev/null +++ b/arch/arm/plat-s3c24xx/pwm-clock.c | |||
@@ -0,0 +1,437 @@ | |||
1 | /* linux/arch/arm/plat-s3c24xx/pwm-clock.c | ||
2 | * | ||
3 | * Copyright (c) 2007 Simtec Electronics | ||
4 | * Copyright (c) 2007, 2008 Ben Dooks | ||
5 | * Ben Dooks <ben-linux@fluff.org> | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License as published by | ||
9 | * the Free Software Foundation; either version 2 of the License. | ||
10 | */ | ||
11 | |||
12 | #include <linux/init.h> | ||
13 | #include <linux/module.h> | ||
14 | #include <linux/kernel.h> | ||
15 | #include <linux/list.h> | ||
16 | #include <linux/errno.h> | ||
17 | #include <linux/clk.h> | ||
18 | #include <linux/err.h> | ||
19 | #include <linux/io.h> | ||
20 | |||
21 | #include <asm/hardware.h> | ||
22 | #include <asm/irq.h> | ||
23 | |||
24 | #include <asm/arch/regs-clock.h> | ||
25 | #include <asm/arch/regs-gpio.h> | ||
26 | |||
27 | #include <asm/plat-s3c24xx/clock.h> | ||
28 | #include <asm/plat-s3c24xx/cpu.h> | ||
29 | |||
30 | #include <asm/plat-s3c/regs-timer.h> | ||
31 | |||
32 | /* Each of the timers 0 through 5 go through the following | ||
33 | * clock tree, with the inputs depending on the timers. | ||
34 | * | ||
35 | * pclk ---- [ prescaler 0 ] -+---> timer 0 | ||
36 | * +---> timer 1 | ||
37 | * | ||
38 | * pclk ---- [ prescaler 1 ] -+---> timer 2 | ||
39 | * +---> timer 3 | ||
40 | * \---> timer 4 | ||
41 | * | ||
42 | * Which are fed into the timers as so: | ||
43 | * | ||
44 | * prescaled 0 ---- [ div 2,4,8,16 ] ---\ | ||
45 | * [mux] -> timer 0 | ||
46 | * tclk 0 ------------------------------/ | ||
47 | * | ||
48 | * prescaled 0 ---- [ div 2,4,8,16 ] ---\ | ||
49 | * [mux] -> timer 1 | ||
50 | * tclk 0 ------------------------------/ | ||
51 | * | ||
52 | * | ||
53 | * prescaled 1 ---- [ div 2,4,8,16 ] ---\ | ||
54 | * [mux] -> timer 2 | ||
55 | * tclk 1 ------------------------------/ | ||
56 | * | ||
57 | * prescaled 1 ---- [ div 2,4,8,16 ] ---\ | ||
58 | * [mux] -> timer 3 | ||
59 | * tclk 1 ------------------------------/ | ||
60 | * | ||
61 | * prescaled 1 ---- [ div 2,4,8, 16 ] --\ | ||
62 | * [mux] -> timer 4 | ||
63 | * tclk 1 ------------------------------/ | ||
64 | * | ||
65 | * Since the mux and the divider are tied together in the | ||
66 | * same register space, it is impossible to set the parent | ||
67 | * and the rate at the same time. To avoid this, we add an | ||
68 | * intermediate 'prescaled-and-divided' clock to select | ||
69 | * as the parent for the timer input clock called tdiv. | ||
70 | * | ||
71 | * prescaled clk --> pwm-tdiv ---\ | ||
72 | * [ mux ] --> timer X | ||
73 | * tclk -------------------------/ | ||
74 | */ | ||
75 | |||
76 | static unsigned long clk_pwm_scaler_getrate(struct clk *clk) | ||
77 | { | ||
78 | unsigned long tcfg0 = __raw_readl(S3C2410_TCFG0); | ||
79 | |||
80 | if (clk->id == 1) { | ||
81 | tcfg0 &= S3C2410_TCFG_PRESCALER1_MASK; | ||
82 | tcfg0 >>= S3C2410_TCFG_PRESCALER1_SHIFT; | ||
83 | } else { | ||
84 | tcfg0 &= S3C2410_TCFG_PRESCALER0_MASK; | ||
85 | } | ||
86 | |||
87 | return clk_get_rate(clk->parent) / (tcfg0 + 1); | ||
88 | } | ||
89 | |||
90 | /* TODO - add set rate calls. */ | ||
91 | |||
92 | struct clk clk_timer_scaler[] = { | ||
93 | [0] = { | ||
94 | .name = "pwm-scaler0", | ||
95 | .id = -1, | ||
96 | .get_rate = clk_pwm_scaler_getrate, | ||
97 | }, | ||
98 | [1] = { | ||
99 | .name = "pwm-scaler1", | ||
100 | .id = -1, | ||
101 | .get_rate = clk_pwm_scaler_getrate, | ||
102 | }, | ||
103 | }; | ||
104 | |||
105 | struct clk clk_timer_tclk[] = { | ||
106 | [0] = { | ||
107 | .name = "pwm-tclk0", | ||
108 | .id = -1, | ||
109 | }, | ||
110 | [1] = { | ||
111 | .name = "pwm-tclk1", | ||
112 | .id = -1, | ||
113 | }, | ||
114 | }; | ||
115 | |||
116 | struct pwm_tdiv_clk { | ||
117 | struct clk clk; | ||
118 | unsigned int divisor; | ||
119 | }; | ||
120 | |||
121 | static inline struct pwm_tdiv_clk *to_tdiv(struct clk *clk) | ||
122 | { | ||
123 | return container_of(clk, struct pwm_tdiv_clk, clk); | ||
124 | } | ||
125 | |||
126 | static inline unsigned long tcfg_to_divisor(unsigned long tcfg1) | ||
127 | { | ||
128 | return 1 << (1 + tcfg1); | ||
129 | } | ||
130 | |||
131 | static unsigned long clk_pwm_tdiv_get_rate(struct clk *clk) | ||
132 | { | ||
133 | unsigned long tcfg1 = __raw_readl(S3C2410_TCFG1); | ||
134 | unsigned int divisor; | ||
135 | |||
136 | tcfg1 >>= S3C2410_TCFG1_SHIFT(clk->id); | ||
137 | tcfg1 &= S3C2410_TCFG1_MUX_MASK; | ||
138 | |||
139 | if (tcfg1 == S3C2410_TCFG1_MUX_TCLK) | ||
140 | divisor = to_tdiv(clk)->divisor; | ||
141 | else | ||
142 | divisor = tcfg_to_divisor(tcfg1); | ||
143 | |||
144 | return clk_get_rate(clk->parent) / divisor; | ||
145 | } | ||
146 | |||
147 | static unsigned long clk_pwm_tdiv_round_rate(struct clk *clk, | ||
148 | unsigned long rate) | ||
149 | { | ||
150 | unsigned long parent_rate; | ||
151 | unsigned long divisor; | ||
152 | |||
153 | parent_rate = clk_get_rate(clk->parent); | ||
154 | divisor = parent_rate / rate; | ||
155 | |||
156 | if (divisor <= 2) | ||
157 | divisor = 2; | ||
158 | else if (divisor <= 4) | ||
159 | divisor = 4; | ||
160 | else if (divisor <= 8) | ||
161 | divisor = 8; | ||
162 | else | ||
163 | divisor = 16; | ||
164 | |||
165 | return parent_rate / divisor; | ||
166 | } | ||
167 | |||
168 | static unsigned long clk_pwm_tdiv_bits(struct pwm_tdiv_clk *divclk) | ||
169 | { | ||
170 | unsigned long bits; | ||
171 | |||
172 | switch (divclk->divisor) { | ||
173 | case 2: | ||
174 | bits = S3C2410_TCFG1_MUX_DIV2; | ||
175 | break; | ||
176 | case 4: | ||
177 | bits = S3C2410_TCFG1_MUX_DIV4; | ||
178 | break; | ||
179 | case 8: | ||
180 | bits = S3C2410_TCFG1_MUX_DIV8; | ||
181 | break; | ||
182 | case 16: | ||
183 | default: | ||
184 | bits = S3C2410_TCFG1_MUX_DIV16; | ||
185 | break; | ||
186 | } | ||
187 | |||
188 | return bits; | ||
189 | } | ||
190 | |||
191 | static void clk_pwm_tdiv_update(struct pwm_tdiv_clk *divclk) | ||
192 | { | ||
193 | unsigned long tcfg1 = __raw_readl(S3C2410_TCFG1); | ||
194 | unsigned long bits = clk_pwm_tdiv_bits(divclk); | ||
195 | unsigned long flags; | ||
196 | unsigned long shift = S3C2410_TCFG1_SHIFT(divclk->clk.id); | ||
197 | |||
198 | local_irq_save(flags); | ||
199 | |||
200 | tcfg1 = __raw_readl(S3C2410_TCFG1); | ||
201 | tcfg1 &= ~(S3C2410_TCFG1_MUX_MASK << shift); | ||
202 | tcfg1 |= bits << shift; | ||
203 | __raw_writel(tcfg1, S3C2410_TCFG1); | ||
204 | |||
205 | local_irq_restore(flags); | ||
206 | } | ||
207 | |||
208 | static int clk_pwm_tdiv_set_rate(struct clk *clk, unsigned long rate) | ||
209 | { | ||
210 | struct pwm_tdiv_clk *divclk = to_tdiv(clk); | ||
211 | unsigned long tcfg1 = __raw_readl(S3C2410_TCFG1); | ||
212 | unsigned long parent_rate = clk_get_rate(clk->parent); | ||
213 | unsigned long divisor; | ||
214 | |||
215 | tcfg1 >>= S3C2410_TCFG1_SHIFT(clk->id); | ||
216 | tcfg1 &= S3C2410_TCFG1_MUX_MASK; | ||
217 | |||
218 | rate = clk_round_rate(clk, rate); | ||
219 | divisor = parent_rate / rate; | ||
220 | |||
221 | if (divisor > 16) | ||
222 | return -EINVAL; | ||
223 | |||
224 | divclk->divisor = divisor; | ||
225 | |||
226 | /* Update the current MUX settings if we are currently | ||
227 | * selected as the clock source for this clock. */ | ||
228 | |||
229 | if (tcfg1 != S3C2410_TCFG1_MUX_TCLK) | ||
230 | clk_pwm_tdiv_update(divclk); | ||
231 | |||
232 | return 0; | ||
233 | } | ||
234 | |||
235 | struct pwm_tdiv_clk clk_timer_tdiv[] = { | ||
236 | [0] = { | ||
237 | .clk = { | ||
238 | .name = "pwm-tdiv", | ||
239 | .parent = &clk_timer_scaler[0], | ||
240 | .get_rate = clk_pwm_tdiv_get_rate, | ||
241 | .set_rate = clk_pwm_tdiv_set_rate, | ||
242 | .round_rate = clk_pwm_tdiv_round_rate, | ||
243 | }, | ||
244 | }, | ||
245 | [1] = { | ||
246 | .clk = { | ||
247 | .name = "pwm-tdiv", | ||
248 | .parent = &clk_timer_scaler[0], | ||
249 | .get_rate = clk_pwm_tdiv_get_rate, | ||
250 | .set_rate = clk_pwm_tdiv_set_rate, | ||
251 | .round_rate = clk_pwm_tdiv_round_rate, | ||
252 | } | ||
253 | }, | ||
254 | [2] = { | ||
255 | .clk = { | ||
256 | .name = "pwm-tdiv", | ||
257 | .parent = &clk_timer_scaler[1], | ||
258 | .get_rate = clk_pwm_tdiv_get_rate, | ||
259 | .set_rate = clk_pwm_tdiv_set_rate, | ||
260 | .round_rate = clk_pwm_tdiv_round_rate, | ||
261 | }, | ||
262 | }, | ||
263 | [3] = { | ||
264 | .clk = { | ||
265 | .name = "pwm-tdiv", | ||
266 | .parent = &clk_timer_scaler[1], | ||
267 | .get_rate = clk_pwm_tdiv_get_rate, | ||
268 | .set_rate = clk_pwm_tdiv_set_rate, | ||
269 | .round_rate = clk_pwm_tdiv_round_rate, | ||
270 | }, | ||
271 | }, | ||
272 | [4] = { | ||
273 | .clk = { | ||
274 | .name = "pwm-tdiv", | ||
275 | .parent = &clk_timer_scaler[1], | ||
276 | .get_rate = clk_pwm_tdiv_get_rate, | ||
277 | .set_rate = clk_pwm_tdiv_set_rate, | ||
278 | .round_rate = clk_pwm_tdiv_round_rate, | ||
279 | }, | ||
280 | }, | ||
281 | }; | ||
282 | |||
283 | static int __init clk_pwm_tdiv_register(unsigned int id) | ||
284 | { | ||
285 | struct pwm_tdiv_clk *divclk = &clk_timer_tdiv[id]; | ||
286 | unsigned long tcfg1 = __raw_readl(S3C2410_TCFG1); | ||
287 | |||
288 | tcfg1 >>= S3C2410_TCFG1_SHIFT(id); | ||
289 | tcfg1 &= S3C2410_TCFG1_MUX_MASK; | ||
290 | |||
291 | divclk->clk.id = id; | ||
292 | divclk->divisor = tcfg_to_divisor(tcfg1); | ||
293 | |||
294 | return s3c24xx_register_clock(&divclk->clk); | ||
295 | } | ||
296 | |||
297 | static inline struct clk *s3c24xx_pwmclk_tclk(unsigned int id) | ||
298 | { | ||
299 | return (id >= 2) ? &clk_timer_tclk[1] : &clk_timer_tclk[0]; | ||
300 | } | ||
301 | |||
302 | static inline struct clk *s3c24xx_pwmclk_tdiv(unsigned int id) | ||
303 | { | ||
304 | return &clk_timer_tdiv[id].clk; | ||
305 | } | ||
306 | |||
307 | static int clk_pwm_tin_set_parent(struct clk *clk, struct clk *parent) | ||
308 | { | ||
309 | unsigned int id = clk->id; | ||
310 | unsigned long tcfg1; | ||
311 | unsigned long flags; | ||
312 | unsigned long bits; | ||
313 | unsigned long shift = S3C2410_TCFG1_SHIFT(id); | ||
314 | |||
315 | if (parent == s3c24xx_pwmclk_tclk(id)) | ||
316 | bits = S3C2410_TCFG1_MUX_TCLK << shift; | ||
317 | else if (parent == s3c24xx_pwmclk_tdiv(id)) | ||
318 | bits = clk_pwm_tdiv_bits(to_tdiv(clk)) << shift; | ||
319 | else | ||
320 | return -EINVAL; | ||
321 | |||
322 | clk->parent = parent; | ||
323 | |||
324 | local_irq_save(flags); | ||
325 | |||
326 | tcfg1 = __raw_readl(S3C2410_TCFG1); | ||
327 | tcfg1 &= ~(S3C2410_TCFG1_MUX_MASK << shift); | ||
328 | __raw_writel(tcfg1 | bits, S3C2410_TCFG1); | ||
329 | |||
330 | local_irq_restore(flags); | ||
331 | |||
332 | return 0; | ||
333 | } | ||
334 | |||
335 | static struct clk clk_tin[] = { | ||
336 | [0] = { | ||
337 | .name = "pwm-tin", | ||
338 | .id = 0, | ||
339 | .set_parent = clk_pwm_tin_set_parent, | ||
340 | }, | ||
341 | [1] = { | ||
342 | .name = "pwm-tin", | ||
343 | .id = 1, | ||
344 | .set_parent = clk_pwm_tin_set_parent, | ||
345 | }, | ||
346 | [2] = { | ||
347 | .name = "pwm-tin", | ||
348 | .id = 2, | ||
349 | .set_parent = clk_pwm_tin_set_parent, | ||
350 | }, | ||
351 | [3] = { | ||
352 | .name = "pwm-tin", | ||
353 | .id = 3, | ||
354 | .set_parent = clk_pwm_tin_set_parent, | ||
355 | }, | ||
356 | [4] = { | ||
357 | .name = "pwm-tin", | ||
358 | .id = 4, | ||
359 | .set_parent = clk_pwm_tin_set_parent, | ||
360 | }, | ||
361 | }; | ||
362 | |||
363 | static __init int clk_pwm_tin_register(struct clk *pwm) | ||
364 | { | ||
365 | unsigned long tcfg1 = __raw_readl(S3C2410_TCFG1); | ||
366 | unsigned int id = pwm->id; | ||
367 | |||
368 | struct clk *parent; | ||
369 | int ret; | ||
370 | |||
371 | ret = s3c24xx_register_clock(pwm); | ||
372 | if (ret < 0) | ||
373 | return ret; | ||
374 | |||
375 | tcfg1 >>= S3C2410_TCFG1_SHIFT(id); | ||
376 | tcfg1 &= S3C2410_TCFG1_MUX_MASK; | ||
377 | |||
378 | if (tcfg1 == S3C2410_TCFG1_MUX_TCLK) | ||
379 | parent = s3c24xx_pwmclk_tclk(id); | ||
380 | else | ||
381 | parent = s3c24xx_pwmclk_tdiv(id); | ||
382 | |||
383 | return clk_set_parent(pwm, parent); | ||
384 | } | ||
385 | |||
386 | static __init int s3c24xx_pwmclk_init(void) | ||
387 | { | ||
388 | struct clk *clk_timers; | ||
389 | unsigned int clk; | ||
390 | int ret; | ||
391 | |||
392 | clk_timers = clk_get(NULL, "timers"); | ||
393 | if (IS_ERR(clk_timers)) { | ||
394 | printk(KERN_ERR "%s: no parent clock\n", __func__); | ||
395 | return -EINVAL; | ||
396 | } | ||
397 | |||
398 | for (clk = 0; clk < ARRAY_SIZE(clk_timer_scaler); clk++) { | ||
399 | clk_timer_scaler[clk].parent = clk_timers; | ||
400 | ret = s3c24xx_register_clock(&clk_timer_scaler[clk]); | ||
401 | if (ret < 0) { | ||
402 | printk(KERN_ERR "error adding pwm scaler%d clock\n", clk); | ||
403 | goto err; | ||
404 | } | ||
405 | } | ||
406 | |||
407 | for (clk = 0; clk < ARRAY_SIZE(clk_timer_tclk); clk++) { | ||
408 | ret = s3c24xx_register_clock(&clk_timer_tclk[clk]); | ||
409 | if (ret < 0) { | ||
410 | printk(KERN_ERR "error adding pww tclk%d\n", clk); | ||
411 | goto err; | ||
412 | } | ||
413 | } | ||
414 | |||
415 | for (clk = 0; clk < ARRAY_SIZE(clk_timer_tdiv); clk++) { | ||
416 | ret = clk_pwm_tdiv_register(clk); | ||
417 | if (ret < 0) { | ||
418 | printk(KERN_ERR "error adding pwm%d tdiv clock\n", clk); | ||
419 | goto err; | ||
420 | } | ||
421 | } | ||
422 | |||
423 | for (clk = 0; clk < ARRAY_SIZE(clk_tin); clk++) { | ||
424 | ret = clk_pwm_tin_register(&clk_tin[clk]); | ||
425 | if (ret < 0) { | ||
426 | printk(KERN_ERR "error adding pwm%d tin clock\n", clk); | ||
427 | goto err; | ||
428 | } | ||
429 | } | ||
430 | |||
431 | return 0; | ||
432 | |||
433 | err: | ||
434 | return ret; | ||
435 | } | ||
436 | |||
437 | arch_initcall(s3c24xx_pwmclk_init); | ||
diff --git a/arch/arm/plat-s3c24xx/pwm.c b/arch/arm/plat-s3c24xx/pwm.c new file mode 100644 index 000000000000..18c4bdc49a05 --- /dev/null +++ b/arch/arm/plat-s3c24xx/pwm.c | |||
@@ -0,0 +1,402 @@ | |||
1 | /* arch/arm/plat-s3c24xx/pwm.c | ||
2 | * | ||
3 | * Copyright (c) 2007 Ben Dooks | ||
4 | * Copyright (c) 2008 Simtec Electronics | ||
5 | * Ben Dooks <ben@simtec.co.uk>, <ben-linux@fluff.org> | ||
6 | * | ||
7 | * S3C24XX PWM device core | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; either version 2 of the License. | ||
12 | */ | ||
13 | |||
14 | #include <linux/module.h> | ||
15 | #include <linux/kernel.h> | ||
16 | #include <linux/platform_device.h> | ||
17 | #include <linux/err.h> | ||
18 | #include <linux/clk.h> | ||
19 | #include <linux/io.h> | ||
20 | #include <linux/pwm.h> | ||
21 | |||
22 | #include <asm/plat-s3c/regs-timer.h> | ||
23 | |||
24 | struct pwm_device { | ||
25 | struct list_head list; | ||
26 | struct platform_device *pdev; | ||
27 | |||
28 | struct clk *clk_div; | ||
29 | struct clk *clk; | ||
30 | const char *label; | ||
31 | |||
32 | unsigned int period_ns; | ||
33 | unsigned int duty_ns; | ||
34 | |||
35 | unsigned char tcon_base; | ||
36 | unsigned char running; | ||
37 | unsigned char use_count; | ||
38 | unsigned char pwm_id; | ||
39 | }; | ||
40 | |||
41 | #define pwm_dbg(_pwm, msg...) dev_info(&(_pwm)->pdev->dev, msg) | ||
42 | |||
43 | static struct clk *clk_scaler[2]; | ||
44 | |||
45 | /* Standard setup for a timer block. */ | ||
46 | |||
47 | #define TIMER_RESOURCE_SIZE (1) | ||
48 | |||
49 | #define TIMER_RESOURCE(_tmr, _irq) \ | ||
50 | (struct resource [TIMER_RESOURCE_SIZE]) { \ | ||
51 | [0] = { \ | ||
52 | .start = _irq, \ | ||
53 | .end = _irq, \ | ||
54 | .flags = IORESOURCE_IRQ \ | ||
55 | } \ | ||
56 | } | ||
57 | |||
58 | #define DEFINE_TIMER(_tmr_no, _irq) \ | ||
59 | .name = "s3c24xx-pwm", \ | ||
60 | .id = _tmr_no, \ | ||
61 | .num_resources = TIMER_RESOURCE_SIZE, \ | ||
62 | .resource = TIMER_RESOURCE(_tmr_no, _irq), \ | ||
63 | |||
64 | /* since we already have an static mapping for the timer, we do not | ||
65 | * bother setting any IO resource for the base. | ||
66 | */ | ||
67 | |||
68 | struct platform_device s3c_device_timer[] = { | ||
69 | [0] = { DEFINE_TIMER(0, IRQ_TIMER0) }, | ||
70 | [1] = { DEFINE_TIMER(1, IRQ_TIMER1) }, | ||
71 | [2] = { DEFINE_TIMER(2, IRQ_TIMER2) }, | ||
72 | [3] = { DEFINE_TIMER(3, IRQ_TIMER3) }, | ||
73 | [4] = { DEFINE_TIMER(4, IRQ_TIMER4) }, | ||
74 | }; | ||
75 | |||
76 | static inline int pwm_is_tdiv(struct pwm_device *pwm) | ||
77 | { | ||
78 | return clk_get_parent(pwm->clk) == pwm->clk_div; | ||
79 | } | ||
80 | |||
81 | static DEFINE_MUTEX(pwm_lock); | ||
82 | static LIST_HEAD(pwm_list); | ||
83 | |||
84 | struct pwm_device *pwm_request(int pwm_id, const char *label) | ||
85 | { | ||
86 | struct pwm_device *pwm; | ||
87 | int found = 0; | ||
88 | |||
89 | mutex_lock(&pwm_lock); | ||
90 | |||
91 | list_for_each_entry(pwm, &pwm_list, list) { | ||
92 | if (pwm->pwm_id == pwm_id) { | ||
93 | found = 1; | ||
94 | break; | ||
95 | } | ||
96 | } | ||
97 | |||
98 | if (found) { | ||
99 | if (pwm->use_count == 0) { | ||
100 | pwm->use_count = 1; | ||
101 | pwm->label = label; | ||
102 | } else | ||
103 | pwm = ERR_PTR(-EBUSY); | ||
104 | } else | ||
105 | pwm = ERR_PTR(-ENOENT); | ||
106 | |||
107 | mutex_unlock(&pwm_lock); | ||
108 | return pwm; | ||
109 | } | ||
110 | |||
111 | EXPORT_SYMBOL(pwm_request); | ||
112 | |||
113 | |||
114 | void pwm_free(struct pwm_device *pwm) | ||
115 | { | ||
116 | mutex_lock(&pwm_lock); | ||
117 | |||
118 | if (pwm->use_count) { | ||
119 | pwm->use_count--; | ||
120 | pwm->label = NULL; | ||
121 | } else | ||
122 | printk(KERN_ERR "PWM%d device already freed\n", pwm->pwm_id); | ||
123 | |||
124 | mutex_unlock(&pwm_lock); | ||
125 | } | ||
126 | |||
127 | EXPORT_SYMBOL(pwm_free); | ||
128 | |||
129 | #define pwm_tcon_start(pwm) (1 << (pwm->tcon_base + 0)) | ||
130 | #define pwm_tcon_invert(pwm) (1 << (pwm->tcon_base + 2)) | ||
131 | #define pwm_tcon_autoreload(pwm) (1 << (pwm->tcon_base + 3)) | ||
132 | #define pwm_tcon_manulupdate(pwm) (1 << (pwm->tcon_base + 1)) | ||
133 | |||
134 | int pwm_enable(struct pwm_device *pwm) | ||
135 | { | ||
136 | unsigned long flags; | ||
137 | unsigned long tcon; | ||
138 | |||
139 | local_irq_save(flags); | ||
140 | |||
141 | tcon = __raw_readl(S3C2410_TCON); | ||
142 | tcon |= pwm_tcon_start(pwm); | ||
143 | __raw_writel(tcon, S3C2410_TCON); | ||
144 | |||
145 | local_irq_restore(flags); | ||
146 | |||
147 | pwm->running = 1; | ||
148 | return 0; | ||
149 | } | ||
150 | |||
151 | EXPORT_SYMBOL(pwm_enable); | ||
152 | |||
153 | void pwm_disable(struct pwm_device *pwm) | ||
154 | { | ||
155 | unsigned long flags; | ||
156 | unsigned long tcon; | ||
157 | |||
158 | local_irq_save(flags); | ||
159 | |||
160 | tcon = __raw_readl(S3C2410_TCON); | ||
161 | tcon &= ~pwm_tcon_start(pwm); | ||
162 | __raw_writel(tcon, S3C2410_TCON); | ||
163 | |||
164 | local_irq_restore(flags); | ||
165 | |||
166 | pwm->running = 0; | ||
167 | } | ||
168 | |||
169 | EXPORT_SYMBOL(pwm_disable); | ||
170 | |||
171 | unsigned long pwm_calc_tin(struct pwm_device *pwm, unsigned long freq) | ||
172 | { | ||
173 | unsigned long tin_parent_rate; | ||
174 | unsigned int div; | ||
175 | |||
176 | tin_parent_rate = clk_get_rate(clk_get_parent(pwm->clk_div)); | ||
177 | pwm_dbg(pwm, "tin parent at %lu\n", tin_parent_rate); | ||
178 | |||
179 | for (div = 2; div <= 16; div *= 2) { | ||
180 | if ((tin_parent_rate / (div << 16)) < freq) | ||
181 | return tin_parent_rate / div; | ||
182 | } | ||
183 | |||
184 | return tin_parent_rate / 16; | ||
185 | } | ||
186 | |||
187 | #define NS_IN_HZ (1000000000UL) | ||
188 | |||
189 | int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) | ||
190 | { | ||
191 | unsigned long tin_rate; | ||
192 | unsigned long tin_ns; | ||
193 | unsigned long period; | ||
194 | unsigned long flags; | ||
195 | unsigned long tcon; | ||
196 | unsigned long tcnt; | ||
197 | long tcmp; | ||
198 | |||
199 | /* We currently avoid using 64bit arithmetic by using the | ||
200 | * fact that anything faster than 1Hz is easily representable | ||
201 | * by 32bits. */ | ||
202 | |||
203 | if (period_ns > NS_IN_HZ || duty_ns > NS_IN_HZ) | ||
204 | return -ERANGE; | ||
205 | |||
206 | if (duty_ns > period_ns) | ||
207 | return -EINVAL; | ||
208 | |||
209 | if (period_ns == pwm->period_ns && | ||
210 | duty_ns == pwm->duty_ns) | ||
211 | return 0; | ||
212 | |||
213 | /* The TCMP and TCNT can be read without a lock, they're not | ||
214 | * shared between the timers. */ | ||
215 | |||
216 | tcmp = __raw_readl(S3C2410_TCMPB(pwm->pwm_id)); | ||
217 | tcnt = __raw_readl(S3C2410_TCNTB(pwm->pwm_id)); | ||
218 | |||
219 | period = NS_IN_HZ / period_ns; | ||
220 | |||
221 | pwm_dbg(pwm, "duty_ns=%d, period_ns=%d (%lu)\n", | ||
222 | duty_ns, period_ns, period); | ||
223 | |||
224 | /* Check to see if we are changing the clock rate of the PWM */ | ||
225 | |||
226 | if (pwm->period_ns != period_ns) { | ||
227 | if (pwm_is_tdiv(pwm)) { | ||
228 | tin_rate = pwm_calc_tin(pwm, period); | ||
229 | clk_set_rate(pwm->clk_div, tin_rate); | ||
230 | } else | ||
231 | tin_rate = clk_get_rate(pwm->clk); | ||
232 | |||
233 | pwm->period_ns = period_ns; | ||
234 | |||
235 | pwm_dbg(pwm, "tin_rate=%lu\n", tin_rate); | ||
236 | |||
237 | tin_ns = NS_IN_HZ / tin_rate; | ||
238 | tcnt = period_ns / tin_ns; | ||
239 | } else | ||
240 | tin_ns = NS_IN_HZ / clk_get_rate(pwm->clk); | ||
241 | |||
242 | /* Note, counters count down */ | ||
243 | |||
244 | tcmp = duty_ns / tin_ns; | ||
245 | tcmp = tcnt - tcmp; | ||
246 | |||
247 | pwm_dbg(pwm, "tin_ns=%lu, tcmp=%ld/%lu\n", tin_ns, tcmp, tcnt); | ||
248 | |||
249 | if (tcmp < 0) | ||
250 | tcmp = 0; | ||
251 | |||
252 | /* Update the PWM register block. */ | ||
253 | |||
254 | local_irq_save(flags); | ||
255 | |||
256 | __raw_writel(tcmp, S3C2410_TCMPB(pwm->pwm_id)); | ||
257 | __raw_writel(tcnt, S3C2410_TCNTB(pwm->pwm_id)); | ||
258 | |||
259 | tcon = __raw_readl(S3C2410_TCON); | ||
260 | tcon |= pwm_tcon_manulupdate(pwm); | ||
261 | tcon |= pwm_tcon_autoreload(pwm); | ||
262 | __raw_writel(tcon, S3C2410_TCON); | ||
263 | |||
264 | tcon &= ~pwm_tcon_manulupdate(pwm); | ||
265 | __raw_writel(tcon, S3C2410_TCON); | ||
266 | |||
267 | local_irq_restore(flags); | ||
268 | |||
269 | return 0; | ||
270 | } | ||
271 | |||
272 | EXPORT_SYMBOL(pwm_config); | ||
273 | |||
274 | static int pwm_register(struct pwm_device *pwm) | ||
275 | { | ||
276 | pwm->duty_ns = -1; | ||
277 | pwm->period_ns = -1; | ||
278 | |||
279 | mutex_lock(&pwm_lock); | ||
280 | list_add_tail(&pwm->list, &pwm_list); | ||
281 | mutex_unlock(&pwm_lock); | ||
282 | |||
283 | return 0; | ||
284 | } | ||
285 | |||
286 | static int s3c_pwm_probe(struct platform_device *pdev) | ||
287 | { | ||
288 | struct device *dev = &pdev->dev; | ||
289 | struct pwm_device *pwm; | ||
290 | unsigned long flags; | ||
291 | unsigned long tcon; | ||
292 | unsigned int id = pdev->id; | ||
293 | int ret; | ||
294 | |||
295 | if (id == 4) { | ||
296 | dev_err(dev, "TIMER4 is currently not supported\n"); | ||
297 | return -ENXIO; | ||
298 | } | ||
299 | |||
300 | pwm = kzalloc(sizeof(struct pwm_device), GFP_KERNEL); | ||
301 | if (pwm == NULL) { | ||
302 | dev_err(dev, "failed to allocate pwm_device\n"); | ||
303 | return -ENOMEM; | ||
304 | } | ||
305 | |||
306 | pwm->pdev = pdev; | ||
307 | pwm->pwm_id = id; | ||
308 | |||
309 | /* calculate base of control bits in TCON */ | ||
310 | pwm->tcon_base = id == 0 ? 0 : (id * 4) + 4; | ||
311 | |||
312 | pwm->clk = clk_get(dev, "pwm-tin"); | ||
313 | if (IS_ERR(pwm->clk)) { | ||
314 | dev_err(dev, "failed to get pwm tin clk\n"); | ||
315 | ret = PTR_ERR(pwm->clk); | ||
316 | goto err_alloc; | ||
317 | } | ||
318 | |||
319 | pwm->clk_div = clk_get(dev, "pwm-tdiv"); | ||
320 | if (IS_ERR(pwm->clk_div)) { | ||
321 | dev_err(dev, "failed to get pwm tdiv clk\n"); | ||
322 | ret = PTR_ERR(pwm->clk_div); | ||
323 | goto err_clk_tin; | ||
324 | } | ||
325 | |||
326 | local_irq_save(flags); | ||
327 | |||
328 | tcon = __raw_readl(S3C2410_TCON); | ||
329 | tcon |= pwm_tcon_invert(pwm); | ||
330 | __raw_writel(tcon, S3C2410_TCON); | ||
331 | |||
332 | local_irq_restore(flags); | ||
333 | |||
334 | |||
335 | ret = pwm_register(pwm); | ||
336 | if (ret) { | ||
337 | dev_err(dev, "failed to register pwm\n"); | ||
338 | goto err_clk_tdiv; | ||
339 | } | ||
340 | |||
341 | pwm_dbg(pwm, "config bits %02x\n", | ||
342 | (__raw_readl(S3C2410_TCON) >> pwm->tcon_base) & 0x0f); | ||
343 | |||
344 | dev_info(dev, "tin at %lu, tdiv at %lu, tin=%sclk, base %d\n", | ||
345 | clk_get_rate(pwm->clk), | ||
346 | clk_get_rate(pwm->clk_div), | ||
347 | pwm_is_tdiv(pwm) ? "div" : "ext", pwm->tcon_base); | ||
348 | |||
349 | platform_set_drvdata(pdev, pwm); | ||
350 | return 0; | ||
351 | |||
352 | err_clk_tdiv: | ||
353 | clk_put(pwm->clk_div); | ||
354 | |||
355 | err_clk_tin: | ||
356 | clk_put(pwm->clk); | ||
357 | |||
358 | err_alloc: | ||
359 | kfree(pwm); | ||
360 | return ret; | ||
361 | } | ||
362 | |||
363 | static int s3c_pwm_remove(struct platform_device *pdev) | ||
364 | { | ||
365 | struct pwm_device *pwm = platform_get_drvdata(pdev); | ||
366 | |||
367 | clk_put(pwm->clk_div); | ||
368 | clk_put(pwm->clk); | ||
369 | kfree(pwm); | ||
370 | |||
371 | return 0; | ||
372 | } | ||
373 | |||
374 | static struct platform_driver s3c_pwm_driver = { | ||
375 | .driver = { | ||
376 | .name = "s3c24xx-pwm", | ||
377 | .owner = THIS_MODULE, | ||
378 | }, | ||
379 | .probe = s3c_pwm_probe, | ||
380 | .remove = __devexit_p(s3c_pwm_remove), | ||
381 | }; | ||
382 | |||
383 | static int __init pwm_init(void) | ||
384 | { | ||
385 | int ret; | ||
386 | |||
387 | clk_scaler[0] = clk_get(NULL, "pwm-scaler0"); | ||
388 | clk_scaler[1] = clk_get(NULL, "pwm-scaler1"); | ||
389 | |||
390 | if (IS_ERR(clk_scaler[0]) || IS_ERR(clk_scaler[1])) { | ||
391 | printk(KERN_ERR "%s: failed to get scaler clocks\n", __func__); | ||
392 | return -EINVAL; | ||
393 | } | ||
394 | |||
395 | ret = platform_driver_register(&s3c_pwm_driver); | ||
396 | if (ret) | ||
397 | printk(KERN_ERR "%s: failed to add pwm driver\n", __func__); | ||
398 | |||
399 | return ret; | ||
400 | } | ||
401 | |||
402 | arch_initcall(pwm_init); | ||
diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types index 207a8b5a0c4a..0be5630ff568 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: Sat Apr 19 11:23:38 2008 | 15 | # Last update: Mon Jul 7 16:25:39 2008 |
16 | # | 16 | # |
17 | # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number | 17 | # machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number |
18 | # | 18 | # |
@@ -560,7 +560,6 @@ husky MACH_HUSKY HUSKY 543 | |||
560 | boxer MACH_BOXER BOXER 544 | 560 | boxer MACH_BOXER BOXER 544 |
561 | shepherd MACH_SHEPHERD SHEPHERD 545 | 561 | shepherd MACH_SHEPHERD SHEPHERD 545 |
562 | aml42800aa MACH_AML42800AA AML42800AA 546 | 562 | aml42800aa MACH_AML42800AA AML42800AA 546 |
563 | ml674001 MACH_MACH_TYPE_ML674001 MACH_TYPE_ML674001 547 | ||
564 | lpc2294 MACH_LPC2294 LPC2294 548 | 563 | lpc2294 MACH_LPC2294 LPC2294 548 |
565 | switchgrass MACH_SWITCHGRASS SWITCHGRASS 549 | 564 | switchgrass MACH_SWITCHGRASS SWITCHGRASS 549 |
566 | ens_cmu MACH_ENS_CMU ENS_CMU 550 | 565 | ens_cmu MACH_ENS_CMU ENS_CMU 550 |
@@ -748,7 +747,6 @@ anubis MACH_ANUBIS ANUBIS 734 | |||
748 | ite8152 MACH_ITE8152 ITE8152 735 | 747 | ite8152 MACH_ITE8152 ITE8152 735 |
749 | lpc3xxx MACH_LPC3XXX LPC3XXX 736 | 748 | lpc3xxx MACH_LPC3XXX LPC3XXX 736 |
750 | puppeteer MACH_PUPPETEER PUPPETEER 737 | 749 | puppeteer MACH_PUPPETEER PUPPETEER 737 |
751 | vt001 MACH_MACH_VADATECH MACH_VADATECH 738 | ||
752 | e570 MACH_E570 E570 739 | 750 | e570 MACH_E570 E570 739 |
753 | x50 MACH_X50 X50 740 | 751 | x50 MACH_X50 X50 740 |
754 | recon MACH_RECON RECON 741 | 752 | recon MACH_RECON RECON 741 |
@@ -839,7 +837,7 @@ ccxp270 MACH_CCXP CCXP 825 | |||
839 | omap_gsample MACH_OMAP_GSAMPLE OMAP_GSAMPLE 826 | 837 | omap_gsample MACH_OMAP_GSAMPLE OMAP_GSAMPLE 826 |
840 | realview_eb MACH_REALVIEW_EB REALVIEW_EB 827 | 838 | realview_eb MACH_REALVIEW_EB REALVIEW_EB 827 |
841 | samoa MACH_SAMOA SAMOA 828 | 839 | samoa MACH_SAMOA SAMOA 828 |
842 | t3xscale MACH_T3XSCALE T3XSCALE 829 | 840 | palmt3 MACH_PALMT3 PALMT3 829 |
843 | i878 MACH_I878 I878 830 | 841 | i878 MACH_I878 I878 830 |
844 | borzoi MACH_BORZOI BORZOI 831 | 842 | borzoi MACH_BORZOI BORZOI 831 |
845 | gecko MACH_GECKO GECKO 832 | 843 | gecko MACH_GECKO GECKO 832 |
@@ -895,7 +893,7 @@ mio8390 MACH_MIO8390 MIO8390 881 | |||
895 | omi_board MACH_OMI_BOARD OMI_BOARD 882 | 893 | omi_board MACH_OMI_BOARD OMI_BOARD 882 |
896 | mx21civ MACH_MX21CIV MX21CIV 883 | 894 | mx21civ MACH_MX21CIV MX21CIV 883 |
897 | mahi_cdac MACH_MAHI_CDAC MAHI_CDAC 884 | 895 | mahi_cdac MACH_MAHI_CDAC MAHI_CDAC 884 |
898 | xscale_palmtx MACH_XSCALE_PALMTX XSCALE_PALMTX 885 | 896 | palmtx MACH_PALMTX PALMTX 885 |
899 | s3c2413 MACH_S3C2413 S3C2413 887 | 897 | s3c2413 MACH_S3C2413 S3C2413 887 |
900 | samsys_ep0 MACH_SAMSYS_EP0 SAMSYS_EP0 888 | 898 | samsys_ep0 MACH_SAMSYS_EP0 SAMSYS_EP0 888 |
901 | wg302v1 MACH_WG302V1 WG302V1 889 | 899 | wg302v1 MACH_WG302V1 WG302V1 889 |
@@ -918,7 +916,7 @@ nxdb500 MACH_NXDB500 NXDB500 905 | |||
918 | apf9328 MACH_APF9328 APF9328 906 | 916 | apf9328 MACH_APF9328 APF9328 906 |
919 | omap_wipoq MACH_OMAP_WIPOQ OMAP_WIPOQ 907 | 917 | omap_wipoq MACH_OMAP_WIPOQ OMAP_WIPOQ 907 |
920 | omap_twip MACH_OMAP_TWIP OMAP_TWIP 908 | 918 | omap_twip MACH_OMAP_TWIP OMAP_TWIP 908 |
921 | xscale_treo650 MACH_XSCALE_PALMTREO650 XSCALE_PALMTREO650 909 | 919 | palmtreo650 MACH_PALMTREO650 PALMTREO650 909 |
922 | acumen MACH_ACUMEN ACUMEN 910 | 920 | acumen MACH_ACUMEN ACUMEN 910 |
923 | xp100 MACH_XP100 XP100 911 | 921 | xp100 MACH_XP100 XP100 911 |
924 | fs2410 MACH_FS2410 FS2410 912 | 922 | fs2410 MACH_FS2410 FS2410 912 |
@@ -926,8 +924,8 @@ pxa270_cerf MACH_PXA270_CERF PXA270_CERF 913 | |||
926 | sq2ftlpalm MACH_SQ2FTLPALM SQ2FTLPALM 914 | 924 | sq2ftlpalm MACH_SQ2FTLPALM SQ2FTLPALM 914 |
927 | bsemserver MACH_BSEMSERVER BSEMSERVER 915 | 925 | bsemserver MACH_BSEMSERVER BSEMSERVER 915 |
928 | netclient MACH_NETCLIENT NETCLIENT 916 | 926 | netclient MACH_NETCLIENT NETCLIENT 916 |
929 | xscale_palmtt5 MACH_XSCALE_PALMTT5 XSCALE_PALMTT5 917 | 927 | palmt5 MACH_PALMT5 PALMT5 917 |
930 | xscale_palmtc MACH_OMAP_PALMTC OMAP_PALMTC 918 | 928 | palmtc MACH_PALMTC PALMTC 918 |
931 | omap_apollon MACH_OMAP_APOLLON OMAP_APOLLON 919 | 929 | omap_apollon MACH_OMAP_APOLLON OMAP_APOLLON 919 |
932 | mxc30030evb MACH_MXC30030EVB MXC30030EVB 920 | 930 | mxc30030evb MACH_MXC30030EVB MXC30030EVB 920 |
933 | rea_2d MACH_REA_2D REA_2D 921 | 931 | rea_2d MACH_REA_2D REA_2D 921 |
@@ -1220,7 +1218,6 @@ empca400 MACH_EMPCA400 EMPCA400 1211 | |||
1220 | em7210 MACH_EM7210 EM7210 1212 | 1218 | em7210 MACH_EM7210 EM7210 1212 |
1221 | htchermes MACH_HTCHERMES HTCHERMES 1213 | 1219 | htchermes MACH_HTCHERMES HTCHERMES 1213 |
1222 | eti_c1 MACH_ETI_C1 ETI_C1 1214 | 1220 | eti_c1 MACH_ETI_C1 ETI_C1 1214 |
1223 | mach_dep2410 MACH_MACH_DEP2410 MACH_DEP2410 1215 | ||
1224 | ac100 MACH_AC100 AC100 1216 | 1221 | ac100 MACH_AC100 AC100 1216 |
1225 | sneetch MACH_SNEETCH SNEETCH 1217 | 1222 | sneetch MACH_SNEETCH SNEETCH 1217 |
1226 | studentmate MACH_STUDENTMATE STUDENTMATE 1218 | 1223 | studentmate MACH_STUDENTMATE STUDENTMATE 1218 |
@@ -1421,10 +1418,10 @@ looxc550 MACH_LOOXC550 LOOXC550 1417 | |||
1421 | cnty_titan MACH_CNTY_TITAN CNTY_TITAN 1418 | 1418 | cnty_titan MACH_CNTY_TITAN CNTY_TITAN 1418 |
1422 | app3xx MACH_APP3XX APP3XX 1419 | 1419 | app3xx MACH_APP3XX APP3XX 1419 |
1423 | sideoatsgrama MACH_SIDEOATSGRAMA SIDEOATSGRAMA 1420 | 1420 | sideoatsgrama MACH_SIDEOATSGRAMA SIDEOATSGRAMA 1420 |
1424 | xscale_palmt700p MACH_XSCALE_PALMT700P XSCALE_PALMT700P 1421 | 1421 | palmtreo700p MACH_PALMTREO700P PALMTREO700P 1421 |
1425 | xscale_palmt700w MACH_XSCALE_PALMT700W XSCALE_PALMT700W 1422 | 1422 | palmtreo700w MACH_PALMTREO700W PALMTREO700W 1422 |
1426 | xscale_palmt750 MACH_XSCALE_PALMT750 XSCALE_PALMT750 1423 | 1423 | palmtreo750 MACH_PALMTREO750 PALMTREO750 1423 |
1427 | xscale_palmt755p MACH_XSCALE_PALMT755P XSCALE_PALMT755P 1424 | 1424 | palmtreo755p MACH_PALMTREO755P PALMTREO755P 1424 |
1428 | ezreganut9200 MACH_EZREGANUT9200 EZREGANUT9200 1425 | 1425 | ezreganut9200 MACH_EZREGANUT9200 EZREGANUT9200 1425 |
1429 | sarge MACH_SARGE SARGE 1426 | 1426 | sarge MACH_SARGE SARGE 1426 |
1430 | a696 MACH_A696 A696 1427 | 1427 | a696 MACH_A696 A696 1427 |
@@ -1463,7 +1460,7 @@ artemis MACH_ARTEMIS ARTEMIS 1462 | |||
1463 | htctitan MACH_HTCTITAN HTCTITAN 1463 | 1460 | htctitan MACH_HTCTITAN HTCTITAN 1463 |
1464 | qranium MACH_QRANIUM QRANIUM 1464 | 1461 | qranium MACH_QRANIUM QRANIUM 1464 |
1465 | adx_wsc2 MACH_ADX_WSC2 ADX_WSC2 1465 | 1462 | adx_wsc2 MACH_ADX_WSC2 ADX_WSC2 1465 |
1466 | adx_medcom MACH_ADX_MEDINET ADX_MEDINET 1466 | 1463 | adx_medcom MACH_ADX_MEDCOM ADX_MEDCOM 1466 |
1467 | bboard MACH_BBOARD BBOARD 1467 | 1464 | bboard MACH_BBOARD BBOARD 1467 |
1468 | cambria MACH_CAMBRIA CAMBRIA 1468 | 1465 | cambria MACH_CAMBRIA CAMBRIA 1468 |
1469 | mt7xxx MACH_MT7XXX MT7XXX 1469 | 1466 | mt7xxx MACH_MT7XXX MT7XXX 1469 |
@@ -1519,7 +1516,7 @@ wp188 MACH_WP188 WP188 1518 | |||
1519 | corsica MACH_CORSICA CORSICA 1519 | 1516 | corsica MACH_CORSICA CORSICA 1519 |
1520 | bigeye MACH_BIGEYE BIGEYE 1520 | 1517 | bigeye MACH_BIGEYE BIGEYE 1520 |
1521 | tll5000 MACH_TLL5000 TLL5000 1522 | 1518 | tll5000 MACH_TLL5000 TLL5000 1522 |
1522 | hni270 MACH_HNI_X270 HNI_X270 1523 | 1519 | bebot MACH_BEBOT BEBOT 1523 |
1523 | qong MACH_QONG QONG 1524 | 1520 | qong MACH_QONG QONG 1524 |
1524 | tcompact MACH_TCOMPACT TCOMPACT 1525 | 1521 | tcompact MACH_TCOMPACT TCOMPACT 1525 |
1525 | puma5 MACH_PUMA5 PUMA5 1526 | 1522 | puma5 MACH_PUMA5 PUMA5 1526 |
@@ -1636,7 +1633,6 @@ awlug4lcu MACH_AWLUG4LCU AWLUG4LCU 1637 | |||
1636 | palermoc MACH_PALERMOC PALERMOC 1638 | 1633 | palermoc MACH_PALERMOC PALERMOC 1638 |
1637 | omap_ldp MACH_OMAP_LDP OMAP_LDP 1639 | 1634 | omap_ldp MACH_OMAP_LDP OMAP_LDP 1639 |
1638 | ip500 MACH_IP500 IP500 1640 | 1635 | ip500 MACH_IP500 IP500 1640 |
1639 | mx35ads MACH_MACH_MX35ADS MACH_MX35ADS 1641 | ||
1640 | ase2 MACH_ASE2 ASE2 1642 | 1636 | ase2 MACH_ASE2 ASE2 1642 |
1641 | mx35evb MACH_MX35EVB MX35EVB 1643 | 1637 | mx35evb MACH_MX35EVB MX35EVB 1643 |
1642 | aml_m8050 MACH_AML_M8050 AML_M8050 1644 | 1638 | aml_m8050 MACH_AML_M8050 AML_M8050 1644 |
@@ -1647,7 +1643,7 @@ badger MACH_BADGER BADGER 1648 | |||
1647 | trizeps4wl MACH_TRIZEPS4WL TRIZEPS4WL 1649 | 1643 | trizeps4wl MACH_TRIZEPS4WL TRIZEPS4WL 1649 |
1648 | trizeps5 MACH_TRIZEPS5 TRIZEPS5 1650 | 1644 | trizeps5 MACH_TRIZEPS5 TRIZEPS5 1650 |
1649 | marlin MACH_MARLIN MARLIN 1651 | 1645 | marlin MACH_MARLIN MARLIN 1651 |
1650 | ts7800 MACH_TS7800 TS7800 1652 | 1646 | ts78xx MACH_TS78XX TS78XX 1652 |
1651 | hpipaq214 MACH_HPIPAQ214 HPIPAQ214 1653 | 1647 | hpipaq214 MACH_HPIPAQ214 HPIPAQ214 1653 |
1652 | at572d940dcm MACH_AT572D940DCM AT572D940DCM 1654 | 1648 | at572d940dcm MACH_AT572D940DCM AT572D940DCM 1654 |
1653 | ne1board MACH_NE1BOARD NE1BOARD 1655 | 1649 | ne1board MACH_NE1BOARD NE1BOARD 1655 |
@@ -1720,3 +1716,99 @@ htc_kaiser MACH_HTC_KAISER HTC_KAISER 1724 | |||
1720 | lg_ks20 MACH_LG_KS20 LG_KS20 1725 | 1716 | lg_ks20 MACH_LG_KS20 LG_KS20 1725 |
1721 | hhgps MACH_HHGPS HHGPS 1726 | 1717 | hhgps MACH_HHGPS HHGPS 1726 |
1722 | nokia_n810_wimax MACH_NOKIA_N810_WIMAX NOKIA_N810_WIMAX 1727 | 1718 | nokia_n810_wimax MACH_NOKIA_N810_WIMAX NOKIA_N810_WIMAX 1727 |
1719 | insight MACH_INSIGHT INSIGHT 1728 | ||
1720 | sapphire MACH_SAPPHIRE SAPPHIRE 1729 | ||
1721 | csb637xo MACH_CSB637XO CSB637XO 1730 | ||
1722 | evisiong MACH_EVISIONG EVISIONG 1731 | ||
1723 | stmp37xx MACH_STMP37XX STMP37XX 1732 | ||
1724 | stmp378x MACH_STMP38XX STMP38XX 1733 | ||
1725 | tnt MACH_TNT TNT 1734 | ||
1726 | tbxt MACH_TBXT TBXT 1735 | ||
1727 | playmate MACH_PLAYMATE PLAYMATE 1736 | ||
1728 | pns10 MACH_PNS10 PNS10 1737 | ||
1729 | eznavi MACH_EZNAVI EZNAVI 1738 | ||
1730 | ps4000 MACH_PS4000 PS4000 1739 | ||
1731 | ezx_a780 MACH_EZX_A780 EZX_A780 1740 | ||
1732 | ezx_e680 MACH_EZX_E680 EZX_E680 1741 | ||
1733 | ezx_a1200 MACH_EZX_A1200 EZX_A1200 1742 | ||
1734 | ezx_e6 MACH_EZX_E6 EZX_E6 1743 | ||
1735 | ezx_e2 MACH_EZX_E2 EZX_E2 1744 | ||
1736 | ezx_a910 MACH_EZX_A910 EZX_A910 1745 | ||
1737 | cwmx31 MACH_CWMX31 CWMX31 1746 | ||
1738 | sl2312 MACH_SL2312 SL2312 1747 | ||
1739 | blenny MACH_BLENNY BLENNY 1748 | ||
1740 | ds107 MACH_DS107 DS107 1749 | ||
1741 | dsx07 MACH_DSX07 DSX07 1750 | ||
1742 | picocom1 MACH_PICOCOM1 PICOCOM1 1751 | ||
1743 | lynx_wolverine MACH_LYNX_WOLVERINE LYNX_WOLVERINE 1752 | ||
1744 | ubisys_p9_sc19 MACH_UBISYS_P9_SC19 UBISYS_P9_SC19 1753 | ||
1745 | kratos_low MACH_KRATOS_LOW KRATOS_LOW 1754 | ||
1746 | m700 MACH_M700 M700 1755 | ||
1747 | edmini_v2 MACH_EDMINI_V2 EDMINI_V2 1756 | ||
1748 | zipit2 MACH_ZIPIT2 ZIPIT2 1757 | ||
1749 | hslfemtocell MACH_HSLFEMTOCELL HSLFEMTOCELL 1758 | ||
1750 | daintree_at91 MACH_DAINTREE_AT91 DAINTREE_AT91 1759 | ||
1751 | sg560usb MACH_SG560USB SG560USB 1760 | ||
1752 | omap3_pandora MACH_OMAP3_PANDORA OMAP3_PANDORA 1761 | ||
1753 | usr8200 MACH_USR8200 USR8200 1762 | ||
1754 | s1s65k MACH_S1S65K S1S65K 1763 | ||
1755 | s2s65a MACH_S2S65A S2S65A 1764 | ||
1756 | icore MACH_ICORE ICORE 1765 | ||
1757 | mss2 MACH_MSS2 MSS2 1766 | ||
1758 | belmont MACH_BELMONT BELMONT 1767 | ||
1759 | asusp525 MACH_ASUSP525 ASUSP525 1768 | ||
1760 | lb88rc8480 MACH_LB88RC8480 LB88RC8480 1769 | ||
1761 | hipxa MACH_HIPXA HIPXA 1770 | ||
1762 | mx25_3ds MACH_MX25_3DS MX25_3DS 1771 | ||
1763 | m800 MACH_M800 M800 1772 | ||
1764 | omap3530_lv_som MACH_OMAP3530_LV_SOM OMAP3530_LV_SOM 1773 | ||
1765 | prima_evb MACH_PRIMA_EVB PRIMA_EVB 1774 | ||
1766 | mx31bt1 MACH_MX31BT1 MX31BT1 1775 | ||
1767 | atlas4_evb MACH_ATLAS4_EVB ATLAS4_EVB 1776 | ||
1768 | mx31cicada MACH_MX31CICADA MX31CICADA 1777 | ||
1769 | mi424wr MACH_MI424WR MI424WR 1778 | ||
1770 | axs_ultrax MACH_AXS_ULTRAX AXS_ULTRAX 1779 | ||
1771 | at572d940deb MACH_AT572D940DEB AT572D940DEB 1780 | ||
1772 | davinci_da8xx_evm MACH_DAVINCI_DA8XX_EVM DAVINCI_DA8XX_EVM 1781 | ||
1773 | ep9302 MACH_EP9302 EP9302 1782 | ||
1774 | at572d940hfeb MACH_AT572D940HFEB AT572D940HFEB 1783 | ||
1775 | cybook3 MACH_CYBOOK3 CYBOOK3 1784 | ||
1776 | wdg002 MACH_WDG002 WDG002 1785 | ||
1777 | sg560adsl MACH_SG560ADSL SG560ADSL 1786 | ||
1778 | nextio_n2800_ica MACH_NEXTIO_N2800_ICA NEXTIO_N2800_ICA 1787 | ||
1779 | marvell_newdb MACH_MARVELL_NEWDB MARVELL_NEWDB 1789 | ||
1780 | vandihud MACH_VANDIHUD VANDIHUD 1790 | ||
1781 | magx_e8 MACH_MAGX_E8 MAGX_E8 1791 | ||
1782 | magx_z6 MACH_MAGX_Z6 MAGX_Z6 1792 | ||
1783 | magx_v8 MACH_MAGX_V8 MAGX_V8 1793 | ||
1784 | magx_u9 MACH_MAGX_U9 MAGX_U9 1794 | ||
1785 | toughcf08 MACH_TOUGHCF08 TOUGHCF08 1795 | ||
1786 | zw4400 MACH_ZW4400 ZW4400 1796 | ||
1787 | marat91 MACH_MARAT91 MARAT91 1797 | ||
1788 | overo MACH_OVERO OVERO 1798 | ||
1789 | at2440evb MACH_AT2440EVB AT2440EVB 1799 | ||
1790 | neocore926 MACH_NEOCORE926 NEOCORE926 1800 | ||
1791 | wnr854t MACH_WNR854T WNR854T 1801 | ||
1792 | imx27 MACH_IMX27 IMX27 1802 | ||
1793 | moose_db MACH_MOOSE_DB MOOSE_DB 1803 | ||
1794 | fab4 MACH_FAB4 FAB4 1804 | ||
1795 | htcdiamond MACH_HTCDIAMOND HTCDIAMOND 1805 | ||
1796 | fiona MACH_FIONA FIONA 1806 | ||
1797 | mxc30030_x MACH_MXC30030_X MXC30030_X 1807 | ||
1798 | bmp1000 MACH_BMP1000 BMP1000 1808 | ||
1799 | logi9200 MACH_LOGI9200 LOGI9200 1809 | ||
1800 | tqma31 MACH_TQMA31 TQMA31 1810 | ||
1801 | ccw9p9215js MACH_CCW9P9215JS CCW9P9215JS 1811 | ||
1802 | rd88f5181l_ge MACH_RD88F5181L_GE RD88F5181L_GE 1812 | ||
1803 | sifmain MACH_SIFMAIN SIFMAIN 1813 | ||
1804 | sam9_l9261 MACH_SAM9_L9261 SAM9_L9261 1814 | ||
1805 | cc9m2443js MACH_CC9M2443JS CC9M2443JS 1815 | ||
1806 | xaria300 MACH_XARIA300 XARIA300 1816 | ||
1807 | it9200 MACH_IT9200 IT9200 1817 | ||
1808 | rd88f5181l_fxo MACH_RD88F5181L_FXO RD88F5181L_FXO 1818 | ||
1809 | kriss_sensor MACH_KRISS_SENSOR KRISS_SENSOR 1819 | ||
1810 | pilz_pmi5 MACH_PILZ_PMI5 PILZ_PMI5 1820 | ||
1811 | jade MACH_JADE JADE 1821 | ||
1812 | ks8695_softplc MACH_KS8695_SOFTPLC KS8695_SOFTPLC 1822 | ||
1813 | gprisc4 MACH_GPRISC4 GPRISC4 1823 | ||
1814 | stamp9260 MACH_STAMP9260 STAMP9260 1824 | ||
diff --git a/arch/sh/configs/landisk_defconfig b/arch/sh/configs/landisk_defconfig index f52db125432f..38f934ab50c7 100644 --- a/arch/sh/configs/landisk_defconfig +++ b/arch/sh/configs/landisk_defconfig | |||
@@ -226,7 +226,6 @@ CONFIG_CPU_HAS_PTEA=y | |||
226 | # | 226 | # |
227 | CONFIG_SH_TMU=y | 227 | CONFIG_SH_TMU=y |
228 | CONFIG_SH_TIMER_IRQ=16 | 228 | CONFIG_SH_TIMER_IRQ=16 |
229 | # CONFIG_NO_IDLE_HZ is not set | ||
230 | CONFIG_SH_PCLK_FREQ=33333333 | 229 | CONFIG_SH_PCLK_FREQ=33333333 |
231 | 230 | ||
232 | # | 231 | # |
diff --git a/arch/sh/configs/lboxre2_defconfig b/arch/sh/configs/lboxre2_defconfig index 9fa66d92a4e7..b68b6cdbb78f 100644 --- a/arch/sh/configs/lboxre2_defconfig +++ b/arch/sh/configs/lboxre2_defconfig | |||
@@ -231,7 +231,6 @@ CONFIG_CPU_HAS_PTEA=y | |||
231 | # | 231 | # |
232 | CONFIG_SH_TMU=y | 232 | CONFIG_SH_TMU=y |
233 | CONFIG_SH_TIMER_IRQ=16 | 233 | CONFIG_SH_TIMER_IRQ=16 |
234 | # CONFIG_NO_IDLE_HZ is not set | ||
235 | CONFIG_SH_PCLK_FREQ=40000000 | 234 | CONFIG_SH_PCLK_FREQ=40000000 |
236 | 235 | ||
237 | # | 236 | # |
diff --git a/arch/sh/configs/se7705_defconfig b/arch/sh/configs/se7705_defconfig index 84717d854867..490dcbc2ce33 100644 --- a/arch/sh/configs/se7705_defconfig +++ b/arch/sh/configs/se7705_defconfig | |||
@@ -239,7 +239,6 @@ CONFIG_CPU_HAS_SR_RB=y | |||
239 | # | 239 | # |
240 | CONFIG_SH_TMU=y | 240 | CONFIG_SH_TMU=y |
241 | CONFIG_SH_TIMER_IRQ=16 | 241 | CONFIG_SH_TIMER_IRQ=16 |
242 | # CONFIG_NO_IDLE_HZ is not set | ||
243 | CONFIG_SH_PCLK_FREQ=33333333 | 242 | CONFIG_SH_PCLK_FREQ=33333333 |
244 | 243 | ||
245 | # | 244 | # |
diff --git a/arch/sh/configs/se7712_defconfig b/arch/sh/configs/se7712_defconfig index 240a1cef69aa..2dd83af988f0 100644 --- a/arch/sh/configs/se7712_defconfig +++ b/arch/sh/configs/se7712_defconfig | |||
@@ -236,7 +236,6 @@ CONFIG_CPU_HAS_SR_RB=y | |||
236 | # | 236 | # |
237 | CONFIG_SH_TMU=y | 237 | CONFIG_SH_TMU=y |
238 | CONFIG_SH_TIMER_IRQ=16 | 238 | CONFIG_SH_TIMER_IRQ=16 |
239 | # CONFIG_NO_IDLE_HZ is not set | ||
240 | CONFIG_SH_PCLK_FREQ=66666666 | 239 | CONFIG_SH_PCLK_FREQ=66666666 |
241 | 240 | ||
242 | # | 241 | # |
diff --git a/arch/sh/configs/se7750_defconfig b/arch/sh/configs/se7750_defconfig index c60b6fd4fc42..167786f9a9bd 100644 --- a/arch/sh/configs/se7750_defconfig +++ b/arch/sh/configs/se7750_defconfig | |||
@@ -235,7 +235,6 @@ CONFIG_CPU_HAS_PTEA=y | |||
235 | # | 235 | # |
236 | CONFIG_SH_TMU=y | 236 | CONFIG_SH_TMU=y |
237 | CONFIG_SH_TIMER_IRQ=16 | 237 | CONFIG_SH_TIMER_IRQ=16 |
238 | # CONFIG_NO_IDLE_HZ is not set | ||
239 | CONFIG_SH_PCLK_FREQ=33333333 | 238 | CONFIG_SH_PCLK_FREQ=33333333 |
240 | 239 | ||
241 | # | 240 | # |
diff --git a/drivers/acorn/char/Makefile b/drivers/acorn/char/Makefile deleted file mode 100644 index d006c9f168d2..000000000000 --- a/drivers/acorn/char/Makefile +++ /dev/null | |||
@@ -1,5 +0,0 @@ | |||
1 | # | ||
2 | # Makefile for the acorn character device drivers. | ||
3 | # | ||
4 | |||
5 | obj-$(CONFIG_L7200_KEYB) += defkeymap-l7200.o keyb_l7200.o | ||
diff --git a/drivers/acorn/char/defkeymap-l7200.c b/drivers/acorn/char/defkeymap-l7200.c deleted file mode 100644 index 93d80a1c36f9..000000000000 --- a/drivers/acorn/char/defkeymap-l7200.c +++ /dev/null | |||
@@ -1,386 +0,0 @@ | |||
1 | /* | ||
2 | * linux/drivers/acorn/char/defkeymap-l7200.c | ||
3 | * | ||
4 | * Default keyboard maps for LinkUp Systems L7200 board | ||
5 | * | ||
6 | * Copyright (C) 2000 Steve Hill (sjhill@cotw.com) | ||
7 | * | ||
8 | * Changelog: | ||
9 | * 08-04-2000 SJH Created file | ||
10 | */ | ||
11 | |||
12 | #include <linux/types.h> | ||
13 | #include <linux/keyboard.h> | ||
14 | #include <linux/kd.h> | ||
15 | |||
16 | /* Normal (maps 1:1 with no processing) */ | ||
17 | #define KTn 0xF0 | ||
18 | /* Function keys */ | ||
19 | #define KTf 0xF1 | ||
20 | /* Special (Performs special house-keeping funcs) */ | ||
21 | #define KTs 0xF2 | ||
22 | #define KIGNORE K(KTs, 0) /* Ignore */ | ||
23 | #define KENTER K(KTs, 1) /* Enter */ | ||
24 | #define KREGS K(KTs, 2) /* Regs */ | ||
25 | #define KMEM K(KTs, 3) /* Mem */ | ||
26 | #define KSTAT K(KTs, 4) /* State */ | ||
27 | #define KINTR K(KTs, 5) /* Intr */ | ||
28 | #define Ksl 6 /* Last console */ | ||
29 | #define KCAPSLK K(KTs, 7) /* Caps lock */ | ||
30 | #define KNUMLK K(KTs, 8) /* Num-lock */ | ||
31 | #define KSCRLLK K(KTs, 9) /* Scroll-lock */ | ||
32 | #define KSCRLFOR K(KTs,10) /* Scroll forward */ | ||
33 | #define KSCRLBAK K(KTs,11) /* Scroll back */ | ||
34 | #define KREBOOT K(KTs,12) /* Reboot */ | ||
35 | #define KCAPSON K(KTs,13) /* Caps on */ | ||
36 | #define KCOMPOSE K(KTs,14) /* Compose */ | ||
37 | #define KSAK K(KTs,15) /* SAK */ | ||
38 | #define CONS_DEC K(KTs,16) /* Dec console */ | ||
39 | #define CONS_INC K(KTs,17) /* Incr console */ | ||
40 | #define KFLOPPY K(KTs,18) /* Floppy */ | ||
41 | /* Key pad (0-9 = digits, 10=+, 11=-, 12=*, 13=/, 14=enter, 16=., 17=# */ | ||
42 | #define KTp 0xF3 | ||
43 | #define KPAD_0 K(KTp, 0 ) | ||
44 | #define KPAD_1 K(KTp, 1 ) | ||
45 | #define KPAD_2 K(KTp, 2 ) | ||
46 | #define KPAD_3 K(KTp, 3 ) | ||
47 | #define KPAD_4 K(KTp, 4 ) | ||
48 | #define KPAD_5 K(KTp, 5 ) | ||
49 | #define KPAD_6 K(KTp, 6 ) | ||
50 | #define KPAD_7 K(KTp, 7 ) | ||
51 | #define KPAD_8 K(KTp, 8 ) | ||
52 | #define KPAD_9 K(KTp, 9 ) | ||
53 | #define KPAD_PL K(KTp,10 ) | ||
54 | #define KPAD_MI K(KTp,11 ) | ||
55 | #define KPAD_ML K(KTp,12 ) | ||
56 | #define KPAD_DV K(KTp,13 ) | ||
57 | #define KPAD_EN K(KTp,14 ) | ||
58 | #define KPAD_DT K(KTp,16 ) | ||
59 | #define KPAD_HS K(KTp,20 ) | ||
60 | /* Console switching */ | ||
61 | #define KCn 0xF5 | ||
62 | /* Cursor */ | ||
63 | #define KTc 0xF6 | ||
64 | #define Kcd 0 /* Cursor down */ | ||
65 | #define Kcl 1 /* Cursor left */ | ||
66 | #define Kcr 2 /* Cursor right */ | ||
67 | #define Kcu 3 /* Cursor up */ | ||
68 | /* Shift/alt modifiers etc */ | ||
69 | #define KMd 0xF7 | ||
70 | #define KSHIFT K(KMd, 0 ) | ||
71 | #define KALTGR K(KMd, 1 ) | ||
72 | #define KCTRL K(KMd, 2 ) | ||
73 | #define KALT K(KMd, 3 ) | ||
74 | /* Meta */ | ||
75 | #define KMt 0xF8 | ||
76 | #define KAs 0xF9 | ||
77 | #define KPADA_0 K(KAs, 0 ) | ||
78 | #define KPADA_1 K(KAs, 1 ) | ||
79 | #define KPADA_2 K(KAs, 2 ) | ||
80 | #define KPADA_3 K(KAs, 3 ) | ||
81 | #define KPADA_4 K(KAs, 4 ) | ||
82 | #define KPADA_5 K(KAs, 5 ) | ||
83 | #define KPADA_6 K(KAs, 6 ) | ||
84 | #define KPADA_7 K(KAs, 7 ) | ||
85 | #define KPADA_8 K(KAs, 8 ) | ||
86 | #define KPADA_9 K(KAs, 9 ) | ||
87 | #define KPADB_0 K(KAs,10 ) | ||
88 | #define KPADB_1 K(KAs,11 ) | ||
89 | #define KPADB_2 K(KAs,12 ) | ||
90 | #define KPADB_3 K(KAs,13 ) | ||
91 | #define KPADB_4 K(KAs,14 ) | ||
92 | #define KPADB_5 K(KAs,15 ) | ||
93 | #define KPADB_6 K(KAs,16 ) | ||
94 | #define KPADB_7 K(KAs,17 ) | ||
95 | #define KPADB_8 K(KAs,18 ) | ||
96 | #define KPADB_9 K(KAs,19 ) | ||
97 | /* Locking keys */ | ||
98 | #define KLk 0xFA | ||
99 | /* Letters */ | ||
100 | #define KTl 0xFB | ||
101 | |||
102 | /* | ||
103 | * Here is the layout of the keys for the Fujitsu QWERTY | ||
104 | * style keyboard: | ||
105 | * | ||
106 | * static char Fujitsu_Key_Table[] = | ||
107 | * { | ||
108 | * KALT, '`' , KNUL, KCTL, KFUN, KESC, '1' , '2' , | ||
109 | * '9' , '0' , '-' , '=' , KNUL, KBSP, KNUL, KNUL, | ||
110 | * KNUL, KBSL, KSHF, KNUL, KNUL, KDEL, KNUL, 't' , | ||
111 | * 'y' , 'u' , 'i' , KRET, KSHF, KPGD, KNUL, KNUL, | ||
112 | * KNUL, KTAB, KNUL, KNUL, KNUL, 'q' , 'w' , 'e' , | ||
113 | * 'r' , 'o' , 'p' , '[' , KNUL, ']' , KNUL, KNUL, | ||
114 | * KNUL, 'z' , KNUL, KNUL, KNUL, KSHL, KNUL, KNUL, | ||
115 | * 'k' , 'l' , ';' , KSQT, KNUL, KPGU, KNUL, KNUL, | ||
116 | * KNUL, 'a' , KNUL, KNUL, KNUL, 's' , 'd' , 'f' , | ||
117 | * 'g' , 'h' , 'j' , '/' , KNUL, KHME, KNUL, KNUL, | ||
118 | * KNUL, 'x' , KNUL, KNUL, KNUL, 'c' , 'v' , 'b' , | ||
119 | * 'n' , 'm' , ',' , '.' , KNUL, ' ' , KNUL, KNUL, | ||
120 | * KNUL, KNUL, KNUL, KNUL, KNUL, '3' , '4' , '5' , | ||
121 | * '6' , '7' , '8' , KNUL, KPRG, KNUL, KEND, KNUL, | ||
122 | * }; | ||
123 | */ | ||
124 | |||
125 | u_short plain_map[NR_KEYS]= | ||
126 | { | ||
127 | 0xf703, 0xf060, 0xf200, 0xf702, 0xf200, 0xf01b, 0xf031, 0xf032, | ||
128 | 0xf039, 0xf030, 0xf02d, 0xf03d, 0xf200, 0xf07f, 0xf200, 0xf200, | ||
129 | 0xf200, 0xf05c, 0xf700, 0xf200, 0xf200, 0xf116, 0xf000, 0xfb74, | ||
130 | 0xfb79, 0xfb75, 0xfb69, 0xf201, 0xf700, 0xf600, 0xf200, 0xf200, | ||
131 | 0xf200, 0xf009, 0xf200, 0xf200, 0xf200, 0xfb71, 0xfb77, 0xfb65, | ||
132 | 0xfb72, 0xfb6f, 0xfb70, 0xf05b, 0xf200, 0xf05d, 0xf200, 0xf200, | ||
133 | 0xf200, 0xfb7a, 0xf200, 0xf200, 0xf200, 0xf207, 0xf200, 0xf200, | ||
134 | 0xfb6b, 0xfb6c, 0xf03b, 0xf027, 0xf200, 0xf603, 0xf200, 0xf200, | ||
135 | 0xf200, 0xfb61, 0xf200, 0xf200, 0xf200, 0xfb73, 0xfb64, 0xfb66, | ||
136 | 0xfb67, 0xfb68, 0xfb6a, 0xf02f, 0xf200, 0xf601, 0xf200, 0xf200, | ||
137 | 0xf200, 0xfb78, 0xf200, 0xf200, 0xf200, 0xfb63, 0xfb76, 0xfb62, | ||
138 | 0xfb6e, 0xfb6d, 0xf02c, 0xf02e, 0xf200, 0xf020, 0xf200, 0xf200, | ||
139 | 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf033, 0xf034, 0xf035, | ||
140 | 0xf036, 0xf037, 0xf038, 0xf200, 0xf200, 0xf200, 0xf602, 0xf200, | ||
141 | 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, | ||
142 | 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, | ||
143 | }; | ||
144 | |||
145 | u_short shift_map[NR_KEYS]= | ||
146 | { | ||
147 | 0xf703, 0xf07e, 0xf200, 0xf702, 0xf200, 0xf01b, 0xf021, 0xf040, | ||
148 | 0xf028, 0xf029, 0xf05f, 0xf02b, 0xf200, 0xf07f, 0xf200, 0xf200, | ||
149 | 0xf200, 0xf07c, 0xf700, 0xf200, 0xf200, 0xf116, 0xf000, 0xfb54, | ||
150 | 0xfb59, 0xfb55, 0xfb49, 0xf201, 0xf700, 0xf600, 0xf200, 0xf200, | ||
151 | 0xf200, 0xf009, 0xf200, 0xf200, 0xf200, 0xfb51, 0xfb57, 0xfb45, | ||
152 | 0xfb52, 0xfb4f, 0xfb50, 0xf07b, 0xf200, 0xf07d, 0xf200, 0xf200, | ||
153 | 0xf200, 0xfb5a, 0xf200, 0xf200, 0xf200, 0xf207, 0xf200, 0xf200, | ||
154 | 0xfb4b, 0xfb4c, 0xf03a, 0xf022, 0xf200, 0xf603, 0xf200, 0xf200, | ||
155 | 0xf200, 0xfb41, 0xf200, 0xf200, 0xf200, 0xfb53, 0xfb44, 0xfb46, | ||
156 | 0xfb47, 0xfb48, 0xfb4a, 0xf03f, 0xf200, 0xf601, 0xf200, 0xf200, | ||
157 | 0xf200, 0xfb58, 0xf200, 0xf200, 0xf200, 0xfb43, 0xfb56, 0xfb42, | ||
158 | 0xfb4e, 0xfb4d, 0xf03c, 0xf03e, 0xf200, 0xf020, 0xf200, 0xf200, | ||
159 | 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf023, 0xf024, 0xf025, | ||
160 | 0xf05e, 0xf026, 0xf02a, 0xf200, 0xf200, 0xf200, 0xf602, 0xf200, | ||
161 | 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, | ||
162 | 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, | ||
163 | }; | ||
164 | |||
165 | u_short altgr_map[NR_KEYS]= | ||
166 | { | ||
167 | KIGNORE ,K(KCn,12 ),K(KCn,13 ),K(KCn,14 ),K(KCn,15 ),K(KCn,16 ),K(KCn,17 ),K(KCn, 18), | ||
168 | K(KCn, 19),K(KCn,20 ),K(KCn,21 ),K(KCn,22 ),K(KCn,23 ),KIGNORE ,KREGS ,KINTR , | ||
169 | KIGNORE ,KIGNORE ,K(KTn,'@'),KIGNORE ,K(KTn,'$'),KIGNORE ,KIGNORE ,K(KTn,'{'), | ||
170 | K(KTn,'['),K(KTn,']'),K(KTn,'}'),K(KTn,'\\'),KIGNORE ,KIGNORE ,KIGNORE ,K(KTf,21 ), | ||
171 | K(KTf,20 ),K(KTf,24 ),KNUMLK ,KPAD_DV ,KPAD_ML ,KPAD_HS ,KIGNORE ,K(KTl,'q'), | ||
172 | K(KTl,'w'),K(KTl,'e'),K(KTl,'r'),K(KTl,'t' ),K(KTl,'y'),K(KTl,'u'),K(KTl,'i' ),K(KTl,'o'), | ||
173 | K(KTl,'p'),KIGNORE ,K(KTn,'~'),KIGNORE ,K(KTf,22 ),K(KTf,23 ),K(KTf,25 ),KPADB_7 , | ||
174 | KPADB_8 ,KPADB_9 ,KPAD_MI ,KCTRL ,K(KAs,20 ),K(KTl,'s'),K(KAs,23 ),K(KAs,25 ), | ||
175 | K(KTl,'g'),K(KTl,'h'),K(KTl,'j'),K(KTl,'k' ),K(KTl,'l'),KIGNORE ,KIGNORE ,KENTER , | ||
176 | KPADB_4 ,KPADB_5 ,KPADB_6 ,KPAD_PL ,KSHIFT ,KIGNORE ,K(KTl,'z' ),K(KTl,'x'), | ||
177 | K(KAs,22 ),K(KTl,'v'),K(KTl,21 ),K(KTl,'n' ),K(KTl,'m'),KIGNORE ,KIGNORE ,KIGNORE , | ||
178 | KSHIFT ,K(KTc,Kcu),KPADB_1 ,KPADB_2 ,KPADB_3 ,KCAPSLK ,KALT ,KIGNORE , | ||
179 | KALTGR ,KCTRL ,K(KTc,Kcl),K(KTc,Kcd ),K(KTc,Kcr),KPADB_0 ,KPAD_DT ,KPAD_EN , | ||
180 | KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , | ||
181 | KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , | ||
182 | KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , | ||
183 | }; | ||
184 | |||
185 | u_short ctrl_map[NR_KEYS]= | ||
186 | { | ||
187 | 0xf703, 0xf200, 0xf200, 0xf702, 0xf200, 0xf200, 0xf001, 0xf002, | ||
188 | 0xf009, 0xf000, 0xf031, 0xf200, 0xf200, 0xf07f, 0xf200, 0xf200, | ||
189 | 0xf200, 0xf01c, 0xf700, 0xf200, 0xf200, 0xf116, 0xf000, 0xf020, | ||
190 | 0xf019, 0xf015, 0xf009, 0xf201, 0xf700, 0xf600, 0xf200, 0xf200, | ||
191 | 0xf200, 0xf009, 0xf200, 0xf200, 0xf200, 0xf011, 0xf017, 0xf005, | ||
192 | 0xf012, 0xf00f, 0xf010, 0xf01b, 0xf200, 0xf01d, 0xf200, 0xf200, | ||
193 | 0xf200, 0xf01a, 0xf200, 0xf200, 0xf200, 0xf207, 0xf200, 0xf200, | ||
194 | 0xf00b, 0xf00c, 0xf200, 0xf007, 0xf200, 0xf603, 0xf200, 0xf200, | ||
195 | 0xf200, 0xf001, 0xf200, 0xf200, 0xf200, 0xf001, 0xf013, 0xf006, | ||
196 | 0xf007, 0xf008, 0xf00a, 0xf07f, 0xf200, 0xf601, 0xf200, 0xf200, | ||
197 | 0xf200, 0xf018, 0xf200, 0xf200, 0xf200, 0xf003, 0xf016, 0xf002, | ||
198 | 0xf00e, 0xf00d, 0xf200, 0xf200, 0xf200, 0xf000, 0xf200, 0xf200, | ||
199 | 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf01b, 0xf01c, 0xf01d, | ||
200 | 0xf036, 0xf037, 0xf038, 0xf200, 0xf200, 0xf200, 0xf602, 0xf200, | ||
201 | 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, | ||
202 | 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf602, 0xf200, | ||
203 | }; | ||
204 | |||
205 | u_short shift_ctrl_map[NR_KEYS]= | ||
206 | { | ||
207 | KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , | ||
208 | KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KFLOPPY ,KINTR , | ||
209 | KIGNORE ,KIGNORE ,K(KTn, 0 ),KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , | ||
210 | KIGNORE ,KIGNORE ,KIGNORE ,K(KTn,31 ),KIGNORE ,KIGNORE ,KIGNORE ,K(KTf,21 ), | ||
211 | K(KTf,20 ),K(KTf,24 ),KNUMLK ,KPAD_DV ,KPAD_ML ,KPAD_HS ,KIGNORE ,K(KTn,17 ), | ||
212 | K(KTn,23 ),K(KTn, 5 ),K(KTn,18 ),K(KTn,20 ),K(KTn,25 ),K(KTn,21 ),K(KTn, 9 ),K(KTn,15 ), | ||
213 | K(KTn,16 ),KIGNORE ,KIGNORE ,KIGNORE ,K(KTf,22 ),K(KTf,23 ),K(KTf,25 ),KPAD_7 , | ||
214 | KPAD_8 ,KPAD_9 ,KPAD_MI ,KCTRL ,K(KTn, 1 ),K(KTn,19 ),K(KTn, 4 ),K(KTn, 6 ), | ||
215 | K(KTn, 7 ),K(KTn, 8 ),K(KTn,10 ),K(KTn,11 ),K(KTn,12 ),KIGNORE ,K(KTn, 7 ),KENTER , | ||
216 | KPAD_4 ,KPAD_5 ,KPAD_6 ,KPAD_PL ,KSHIFT ,KIGNORE ,K(KTn,26 ),K(KTn,24 ), | ||
217 | K(KTn, 3 ),K(KTn,22 ),K(KTn, 2 ),K(KTn,14 ),K(KTn,13 ),KIGNORE ,KIGNORE ,KIGNORE , | ||
218 | KSHIFT ,K(KTc,Kcu),KPAD_1 ,KPAD_2 ,KPAD_3 ,KCAPSLK ,KALT ,K(KTn, 0 ), | ||
219 | KALTGR ,KCTRL ,K(KTc,Kcl),K(KTc,Kcd ),K(KTc,Kcr),KPAD_0 ,KPAD_DT ,KPAD_EN , | ||
220 | KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , | ||
221 | KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , | ||
222 | KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , | ||
223 | }; | ||
224 | |||
225 | u_short alt_map[NR_KEYS]= | ||
226 | { | ||
227 | K(KMt,27 ),K(KCn, 0 ),K(KCn, 1 ),K(KCn, 2 ),K(KCn, 3 ),K(KCn, 4 ),K(KCn, 5 ),K(KCn, 6 ), | ||
228 | K(KCn, 7 ),K(KCn, 8 ),K(KCn, 9 ),K(KCn,10 ),K(KCn,11 ),KIGNORE ,KSCRLLK ,KINTR , | ||
229 | K(KMt,'`'),K(KMt,'1'),K(KMt,'2'),K(KMt,'3' ),K(KMt,'4'),K(KMt,'5'),K(KMt,'6' ),K(KMt,'7'), | ||
230 | K(KMt,'8'),K(KMt,'9'),K(KMt,'0'),K(KMt,'-' ),K(KMt,'='),K(KMt,'£'),K(KMt,127 ),K(KTf,21 ), | ||
231 | K(KTf,20 ),K(KTf,24 ),KNUMLK ,KPAD_DV ,KPAD_ML ,KPAD_HS ,K(KMt, 9 ),K(KMt,'q'), | ||
232 | K(KMt,'w'),K(KMt,'e'),K(KMt,'r'),K(KMt,'t' ),K(KMt,'y'),K(KMt,'u'),K(KMt,'i' ),K(KMt,'o'), | ||
233 | K(KMt,'p'),K(KMt,'['),K(KMt,']'),K(KMt,'\\'),K(KTf,22 ),K(KTf,23 ),K(KTf,25 ),KPADA_7 , | ||
234 | KPADA_8 ,KPADA_9 ,KPAD_MI ,KCTRL ,K(KMt,'a'),K(KMt,'s'),K(KMt,'d' ),K(KMt,'f'), | ||
235 | K(KMt,'g'),K(KMt,'h'),K(KMt,'j'),K(KMt,'k' ),K(KMt,'l'),K(KMt,';'),K(KMt,'\''),K(KMt,13 ), | ||
236 | KPADA_4 ,KPADA_5 ,KPADA_6 ,KPAD_PL ,KSHIFT ,KIGNORE ,K(KMt,'z' ),K(KMt,'x'), | ||
237 | K(KMt,'c'),K(KMt,'v'),K(KMt,'b'),K(KMt,'n' ),K(KMt,'m'),K(KMt,','),K(KMt,'.' ),KIGNORE , | ||
238 | KSHIFT ,K(KTc,Kcu),KPADA_1 ,KPADA_2 ,KPADA_3 ,KCAPSLK ,KALT ,K(KMt,' '), | ||
239 | KALTGR ,KCTRL ,CONS_DEC ,K(KTc,Kcd ),CONS_INC ,KPADA_0 ,KPAD_DT ,KPAD_EN , | ||
240 | KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , | ||
241 | KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , | ||
242 | KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , | ||
243 | }; | ||
244 | |||
245 | u_short ctrl_alt_map[NR_KEYS]= | ||
246 | { | ||
247 | KIGNORE ,K(KCn, 0 ),K(KCn, 1 ),K(KCn, 2 ),K(KCn, 3 ),K(KCn, 4 ),K(KCn, 5 ),K(KCn, 6 ), | ||
248 | K(KCn, 7 ),K(KCn, 8 ),K(KCn, 9 ),K(KCn,10 ),K(KCn,11 ),KIGNORE ,KIGNORE ,KINTR , | ||
249 | KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , | ||
250 | KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,K(KTf,21 ), | ||
251 | K(KTf,20 ),K(KTf,24 ),KNUMLK ,KPAD_DV ,KPAD_ML ,KPAD_HS ,KIGNORE ,K(KMt,17 ), | ||
252 | K(KMt,23 ),K(KMt, 5 ),K(KMt,18 ),K(KMt,20 ),K(KMt,25 ),K(KMt,21 ),K(KMt, 9 ),K(KMt,15 ), | ||
253 | K(KMt,16 ),KIGNORE ,KIGNORE ,KIGNORE ,KREBOOT ,K(KTf,23 ),K(KTf,25 ),KPAD_7 , | ||
254 | KPAD_8 ,KPAD_9 ,KPAD_MI ,KCTRL ,K(KMt, 1 ),K(KMt,19 ),K(KMt, 4 ),K(KMt, 6 ), | ||
255 | K(KMt, 7 ),K(KMt, 8 ),K(KMt,10 ),K(KMt,11 ),K(KMt,12 ),KIGNORE ,KIGNORE ,KENTER , | ||
256 | KPAD_4 ,KPAD_5 ,KPAD_6 ,KPAD_PL ,KSHIFT ,KIGNORE ,K(KMt,26 ),K(KMt,24 ), | ||
257 | K(KMt, 3 ),K(KMt,22 ),K(KMt, 2 ),K(KMt,14 ),K(KMt,13 ),KIGNORE ,KIGNORE ,KIGNORE , | ||
258 | KSHIFT ,K(KTc,Kcu),KPAD_1 ,KPAD_2 ,KPAD_3 ,KCAPSLK ,KALT ,KIGNORE , | ||
259 | KALTGR ,KCTRL ,K(KTc,Kcl),K(KTc,Kcd ),K(KTc,Kcr),KPAD_0 ,KREBOOT ,KPAD_EN , | ||
260 | KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , | ||
261 | KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , | ||
262 | KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE ,KIGNORE , | ||
263 | }; | ||
264 | |||
265 | ushort *key_maps[MAX_NR_KEYMAPS] = { | ||
266 | plain_map, shift_map, altgr_map, 0, | ||
267 | ctrl_map, shift_ctrl_map, 0, 0, | ||
268 | alt_map, 0, 0, 0, | ||
269 | ctrl_alt_map, 0 | ||
270 | }; | ||
271 | |||
272 | unsigned int keymap_count = 7; | ||
273 | |||
274 | /* | ||
275 | * Philosophy: most people do not define more strings, but they who do | ||
276 | * often want quite a lot of string space. So, we statically allocate | ||
277 | * the default and allocate dynamically in chunks of 512 bytes. | ||
278 | */ | ||
279 | |||
280 | char func_buf[] = { | ||
281 | '\033', '[', '[', 'A', 0, | ||
282 | '\033', '[', '[', 'B', 0, | ||
283 | '\033', '[', '[', 'C', 0, | ||
284 | '\033', '[', '[', 'D', 0, | ||
285 | '\033', '[', '[', 'E', 0, | ||
286 | '\033', '[', '1', '7', '~', 0, | ||
287 | '\033', '[', '1', '8', '~', 0, | ||
288 | '\033', '[', '1', '9', '~', 0, | ||
289 | '\033', '[', '2', '0', '~', 0, | ||
290 | '\033', '[', '2', '1', '~', 0, | ||
291 | '\033', '[', '2', '3', '~', 0, | ||
292 | '\033', '[', '2', '4', '~', 0, | ||
293 | '\033', '[', '2', '5', '~', 0, | ||
294 | '\033', '[', '2', '6', '~', 0, | ||
295 | '\033', '[', '2', '8', '~', 0, | ||
296 | '\033', '[', '2', '9', '~', 0, | ||
297 | '\033', '[', '3', '1', '~', 0, | ||
298 | '\033', '[', '3', '2', '~', 0, | ||
299 | '\033', '[', '3', '3', '~', 0, | ||
300 | '\033', '[', '3', '4', '~', 0, | ||
301 | '\033', '[', '1', '~', 0, | ||
302 | '\033', '[', '2', '~', 0, | ||
303 | '\033', '[', '3', '~', 0, | ||
304 | '\033', '[', '4', '~', 0, | ||
305 | '\033', '[', '5', '~', 0, | ||
306 | '\033', '[', '6', '~', 0, | ||
307 | '\033', '[', 'M', 0, | ||
308 | '\033', '[', 'P', 0, | ||
309 | }; | ||
310 | |||
311 | char *funcbufptr = func_buf; | ||
312 | int funcbufsize = sizeof(func_buf); | ||
313 | int funcbufleft = 0; /* space left */ | ||
314 | |||
315 | char *func_table[MAX_NR_FUNC] = { | ||
316 | func_buf + 0, | ||
317 | func_buf + 5, | ||
318 | func_buf + 10, | ||
319 | func_buf + 15, | ||
320 | func_buf + 20, | ||
321 | func_buf + 25, | ||
322 | func_buf + 31, | ||
323 | func_buf + 37, | ||
324 | func_buf + 43, | ||
325 | func_buf + 49, | ||
326 | func_buf + 55, | ||
327 | func_buf + 61, | ||
328 | func_buf + 67, | ||
329 | func_buf + 73, | ||
330 | func_buf + 79, | ||
331 | func_buf + 85, | ||
332 | func_buf + 91, | ||
333 | func_buf + 97, | ||
334 | func_buf + 103, | ||
335 | func_buf + 109, | ||
336 | func_buf + 115, | ||
337 | func_buf + 120, | ||
338 | func_buf + 125, | ||
339 | func_buf + 130, | ||
340 | func_buf + 135, | ||
341 | func_buf + 140, | ||
342 | func_buf + 145, | ||
343 | 0, | ||
344 | 0, | ||
345 | func_buf + 149, | ||
346 | 0, | ||
347 | }; | ||
348 | |||
349 | struct kbdiacruc accent_table[MAX_DIACR] = { | ||
350 | {'`', 'A', 0300}, {'`', 'a', 0340}, | ||
351 | {'\'', 'A', 0301}, {'\'', 'a', 0341}, | ||
352 | {'^', 'A', 0302}, {'^', 'a', 0342}, | ||
353 | {'~', 'A', 0303}, {'~', 'a', 0343}, | ||
354 | {'"', 'A', 0304}, {'"', 'a', 0344}, | ||
355 | {'O', 'A', 0305}, {'o', 'a', 0345}, | ||
356 | {'0', 'A', 0305}, {'0', 'a', 0345}, | ||
357 | {'A', 'A', 0305}, {'a', 'a', 0345}, | ||
358 | {'A', 'E', 0306}, {'a', 'e', 0346}, | ||
359 | {',', 'C', 0307}, {',', 'c', 0347}, | ||
360 | {'`', 'E', 0310}, {'`', 'e', 0350}, | ||
361 | {'\'', 'E', 0311}, {'\'', 'e', 0351}, | ||
362 | {'^', 'E', 0312}, {'^', 'e', 0352}, | ||
363 | {'"', 'E', 0313}, {'"', 'e', 0353}, | ||
364 | {'`', 'I', 0314}, {'`', 'i', 0354}, | ||
365 | {'\'', 'I', 0315}, {'\'', 'i', 0355}, | ||
366 | {'^', 'I', 0316}, {'^', 'i', 0356}, | ||
367 | {'"', 'I', 0317}, {'"', 'i', 0357}, | ||
368 | {'-', 'D', 0320}, {'-', 'd', 0360}, | ||
369 | {'~', 'N', 0321}, {'~', 'n', 0361}, | ||
370 | {'`', 'O', 0322}, {'`', 'o', 0362}, | ||
371 | {'\'', 'O', 0323}, {'\'', 'o', 0363}, | ||
372 | {'^', 'O', 0324}, {'^', 'o', 0364}, | ||
373 | {'~', 'O', 0325}, {'~', 'o', 0365}, | ||
374 | {'"', 'O', 0326}, {'"', 'o', 0366}, | ||
375 | {'/', 'O', 0330}, {'/', 'o', 0370}, | ||
376 | {'`', 'U', 0331}, {'`', 'u', 0371}, | ||
377 | {'\'', 'U', 0332}, {'\'', 'u', 0372}, | ||
378 | {'^', 'U', 0333}, {'^', 'u', 0373}, | ||
379 | {'"', 'U', 0334}, {'"', 'u', 0374}, | ||
380 | {'\'', 'Y', 0335}, {'\'', 'y', 0375}, | ||
381 | {'T', 'H', 0336}, {'t', 'h', 0376}, | ||
382 | {'s', 's', 0337}, {'"', 'y', 0377}, | ||
383 | {'s', 'z', 0337}, {'i', 'j', 0377}, | ||
384 | }; | ||
385 | |||
386 | unsigned int accent_table_size = 68; | ||
diff --git a/drivers/mmc/host/imxmmc.c b/drivers/mmc/host/imxmmc.c index 95f33e87a99c..c4349c746cb3 100644 --- a/drivers/mmc/host/imxmmc.c +++ b/drivers/mmc/host/imxmmc.c | |||
@@ -1017,8 +1017,8 @@ static int imxmci_probe(struct platform_device *pdev) | |||
1017 | host->imask = IMXMCI_INT_MASK_DEFAULT; | 1017 | host->imask = IMXMCI_INT_MASK_DEFAULT; |
1018 | MMC_INT_MASK = host->imask; | 1018 | MMC_INT_MASK = host->imask; |
1019 | 1019 | ||
1020 | 1020 | host->dma = imx_dma_request_by_prio(DRIVER_NAME, DMA_PRIO_LOW); | |
1021 | if(imx_dma_request_by_prio(&host->dma, DRIVER_NAME, DMA_PRIO_LOW)<0){ | 1021 | if(host->dma < 0) { |
1022 | dev_err(mmc_dev(host->mmc), "imx_dma_request_by_prio failed\n"); | 1022 | dev_err(mmc_dev(host->mmc), "imx_dma_request_by_prio failed\n"); |
1023 | ret = -EBUSY; | 1023 | ret = -EBUSY; |
1024 | goto out; | 1024 | goto out; |
diff --git a/drivers/mtd/nand/orion_nand.c b/drivers/mtd/nand/orion_nand.c index 59e05a1c50cf..ee2ac3948cd8 100644 --- a/drivers/mtd/nand/orion_nand.c +++ b/drivers/mtd/nand/orion_nand.c | |||
@@ -85,6 +85,9 @@ static int __init orion_nand_probe(struct platform_device *pdev) | |||
85 | nc->cmd_ctrl = orion_nand_cmd_ctrl; | 85 | nc->cmd_ctrl = orion_nand_cmd_ctrl; |
86 | nc->ecc.mode = NAND_ECC_SOFT; | 86 | nc->ecc.mode = NAND_ECC_SOFT; |
87 | 87 | ||
88 | if (board->chip_delay) | ||
89 | nc->chip_delay = board->chip_delay; | ||
90 | |||
88 | if (board->width == 16) | 91 | if (board->width == 16) |
89 | nc->options |= NAND_BUSWIDTH_16; | 92 | nc->options |= NAND_BUSWIDTH_16; |
90 | 93 | ||
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index f4182cfffe9d..45a41b597da9 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig | |||
@@ -217,7 +217,7 @@ config MII | |||
217 | 217 | ||
218 | config MACB | 218 | config MACB |
219 | tristate "Atmel MACB support" | 219 | tristate "Atmel MACB support" |
220 | depends on AVR32 || ARCH_AT91SAM9260 || ARCH_AT91SAM9263 || ARCH_AT91CAP9 | 220 | depends on AVR32 || ARCH_AT91SAM9260 || ARCH_AT91SAM9263 || ARCH_AT91SAM9G20 || ARCH_AT91CAP9 |
221 | select PHYLIB | 221 | select PHYLIB |
222 | help | 222 | help |
223 | The Atmel MACB ethernet interface is found on many AT32 and AT91 | 223 | The Atmel MACB ethernet interface is found on many AT32 and AT91 |
diff --git a/drivers/net/arm/etherh.c b/drivers/net/arm/etherh.c index 00081d2b9cd5..e9d15eccad08 100644 --- a/drivers/net/arm/etherh.c +++ b/drivers/net/arm/etherh.c | |||
@@ -647,7 +647,7 @@ etherh_probe(struct expansion_card *ec, const struct ecard_id *id) | |||
647 | struct ei_device *ei_local; | 647 | struct ei_device *ei_local; |
648 | struct net_device *dev; | 648 | struct net_device *dev; |
649 | struct etherh_priv *eh; | 649 | struct etherh_priv *eh; |
650 | int i, ret; | 650 | int ret; |
651 | DECLARE_MAC_BUF(mac); | 651 | DECLARE_MAC_BUF(mac); |
652 | 652 | ||
653 | etherh_banner(); | 653 | etherh_banner(); |
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index 4949dc4859be..fc85bf2e4a97 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig | |||
@@ -469,6 +469,16 @@ config RTC_DRV_VR41XX | |||
469 | To compile this driver as a module, choose M here: the | 469 | To compile this driver as a module, choose M here: the |
470 | module will be called rtc-vr41xx. | 470 | module will be called rtc-vr41xx. |
471 | 471 | ||
472 | config RTC_DRV_PL030 | ||
473 | tristate "ARM AMBA PL030 RTC" | ||
474 | depends on ARM_AMBA | ||
475 | help | ||
476 | If you say Y here you will get access to ARM AMBA | ||
477 | PrimeCell PL030 RTC found on certain ARM SOCs. | ||
478 | |||
479 | To compile this driver as a module, choose M here: the | ||
480 | module will be called rtc-pl030. | ||
481 | |||
472 | config RTC_DRV_PL031 | 482 | config RTC_DRV_PL031 |
473 | tristate "ARM AMBA PL031 RTC" | 483 | tristate "ARM AMBA PL031 RTC" |
474 | depends on ARM_AMBA | 484 | depends on ARM_AMBA |
@@ -495,12 +505,13 @@ config RTC_DRV_AT91RM9200 | |||
495 | this is powered by the backup power supply. | 505 | this is powered by the backup power supply. |
496 | 506 | ||
497 | config RTC_DRV_AT91SAM9 | 507 | config RTC_DRV_AT91SAM9 |
498 | tristate "AT91SAM9x" | 508 | tristate "AT91SAM9x/AT91CAP9" |
499 | depends on ARCH_AT91 && !(ARCH_AT91RM9200 || ARCH_AT91X40) | 509 | depends on ARCH_AT91 && !(ARCH_AT91RM9200 || ARCH_AT91X40) |
500 | help | 510 | help |
501 | RTC driver for the Atmel AT91SAM9x internal RTT (Real Time Timer). | 511 | RTC driver for the Atmel AT91SAM9x and AT91CAP9 internal RTT |
502 | These timers are powered by the backup power supply (such as a | 512 | (Real Time Timer). These timers are powered by the backup power |
503 | small coin cell battery), but do not need to be used as RTCs. | 513 | supply (such as a small coin cell battery), but do not need to |
514 | be used as RTCs. | ||
504 | 515 | ||
505 | (On AT91SAM9rl chips you probably want to use the dedicated RTC | 516 | (On AT91SAM9rl chips you probably want to use the dedicated RTC |
506 | module and leave the RTT available for other uses.) | 517 | module and leave the RTT available for other uses.) |
diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile index b6e14d51670b..b5d9d67df887 100644 --- a/drivers/rtc/Makefile +++ b/drivers/rtc/Makefile | |||
@@ -41,6 +41,7 @@ obj-$(CONFIG_RTC_DRV_MAX6902) += rtc-max6902.o | |||
41 | obj-$(CONFIG_RTC_DRV_OMAP) += rtc-omap.o | 41 | obj-$(CONFIG_RTC_DRV_OMAP) += rtc-omap.o |
42 | obj-$(CONFIG_RTC_DRV_PCF8563) += rtc-pcf8563.o | 42 | obj-$(CONFIG_RTC_DRV_PCF8563) += rtc-pcf8563.o |
43 | obj-$(CONFIG_RTC_DRV_PCF8583) += rtc-pcf8583.o | 43 | obj-$(CONFIG_RTC_DRV_PCF8583) += rtc-pcf8583.o |
44 | obj-$(CONFIG_RTC_DRV_PL030) += rtc-pl030.o | ||
44 | obj-$(CONFIG_RTC_DRV_PL031) += rtc-pl031.o | 45 | obj-$(CONFIG_RTC_DRV_PL031) += rtc-pl031.o |
45 | obj-$(CONFIG_RTC_DRV_PPC) += rtc-ppc.o | 46 | obj-$(CONFIG_RTC_DRV_PPC) += rtc-ppc.o |
46 | obj-$(CONFIG_RTC_DRV_R9701) += rtc-r9701.o | 47 | obj-$(CONFIG_RTC_DRV_R9701) += rtc-r9701.o |
diff --git a/drivers/rtc/rtc-at91rm9200.c b/drivers/rtc/rtc-at91rm9200.c index 39e64ab1ecb7..9c3db934cc24 100644 --- a/drivers/rtc/rtc-at91rm9200.c +++ b/drivers/rtc/rtc-at91rm9200.c | |||
@@ -29,10 +29,6 @@ | |||
29 | #include <linux/completion.h> | 29 | #include <linux/completion.h> |
30 | 30 | ||
31 | #include <asm/uaccess.h> | 31 | #include <asm/uaccess.h> |
32 | #include <asm/rtc.h> | ||
33 | |||
34 | #include <asm/mach/time.h> | ||
35 | |||
36 | #include <asm/arch/at91_rtc.h> | 32 | #include <asm/arch/at91_rtc.h> |
37 | 33 | ||
38 | 34 | ||
diff --git a/drivers/rtc/rtc-at91sam9.c b/drivers/rtc/rtc-at91sam9.c index 38d8742a4bdf..f0246ef413a4 100644 --- a/drivers/rtc/rtc-at91sam9.c +++ b/drivers/rtc/rtc-at91sam9.c | |||
@@ -19,7 +19,6 @@ | |||
19 | #include <linux/interrupt.h> | 19 | #include <linux/interrupt.h> |
20 | #include <linux/ioctl.h> | 20 | #include <linux/ioctl.h> |
21 | 21 | ||
22 | #include <asm/mach/time.h> | ||
23 | #include <asm/arch/board.h> | 22 | #include <asm/arch/board.h> |
24 | #include <asm/arch/at91_rtt.h> | 23 | #include <asm/arch/at91_rtt.h> |
25 | 24 | ||
diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c index 58f81c774943..eb23d8423f42 100644 --- a/drivers/rtc/rtc-omap.c +++ b/drivers/rtc/rtc-omap.c | |||
@@ -22,7 +22,6 @@ | |||
22 | #include <linux/platform_device.h> | 22 | #include <linux/platform_device.h> |
23 | 23 | ||
24 | #include <asm/io.h> | 24 | #include <asm/io.h> |
25 | #include <asm/mach/time.h> | ||
26 | 25 | ||
27 | 26 | ||
28 | /* The OMAP1 RTC is a year/month/day/hours/minutes/seconds BCD clock | 27 | /* The OMAP1 RTC is a year/month/day/hours/minutes/seconds BCD clock |
diff --git a/drivers/rtc/rtc-pl030.c b/drivers/rtc/rtc-pl030.c new file mode 100644 index 000000000000..8448eeb9d675 --- /dev/null +++ b/drivers/rtc/rtc-pl030.c | |||
@@ -0,0 +1,217 @@ | |||
1 | /* | ||
2 | * linux/drivers/rtc/rtc-pl030.c | ||
3 | * | ||
4 | * Copyright (C) 2000-2001 Deep Blue Solutions Ltd. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #include <linux/module.h> | ||
11 | #include <linux/rtc.h> | ||
12 | #include <linux/init.h> | ||
13 | #include <linux/interrupt.h> | ||
14 | #include <linux/amba/bus.h> | ||
15 | #include <linux/io.h> | ||
16 | |||
17 | #define RTC_DR (0) | ||
18 | #define RTC_MR (4) | ||
19 | #define RTC_STAT (8) | ||
20 | #define RTC_EOI (8) | ||
21 | #define RTC_LR (12) | ||
22 | #define RTC_CR (16) | ||
23 | #define RTC_CR_MIE (1 << 0) | ||
24 | |||
25 | struct pl030_rtc { | ||
26 | struct rtc_device *rtc; | ||
27 | void __iomem *base; | ||
28 | }; | ||
29 | |||
30 | static irqreturn_t pl030_interrupt(int irq, void *dev_id) | ||
31 | { | ||
32 | struct pl030_rtc *rtc = dev_id; | ||
33 | writel(0, rtc->base + RTC_EOI); | ||
34 | return IRQ_HANDLED; | ||
35 | } | ||
36 | |||
37 | static int pl030_open(struct device *dev) | ||
38 | { | ||
39 | return 0; | ||
40 | } | ||
41 | |||
42 | static void pl030_release(struct device *dev) | ||
43 | { | ||
44 | } | ||
45 | |||
46 | static int pl030_ioctl(struct device *dev, unsigned int cmd, unsigned long arg) | ||
47 | { | ||
48 | return -ENOIOCTLCMD; | ||
49 | } | ||
50 | |||
51 | static int pl030_read_alarm(struct device *dev, struct rtc_wkalrm *alrm) | ||
52 | { | ||
53 | struct pl030_rtc *rtc = dev_get_drvdata(dev); | ||
54 | |||
55 | rtc_time_to_tm(readl(rtc->base + RTC_MR), &alrm->time); | ||
56 | return 0; | ||
57 | } | ||
58 | |||
59 | static int pl030_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) | ||
60 | { | ||
61 | struct pl030_rtc *rtc = dev_get_drvdata(dev); | ||
62 | unsigned long time; | ||
63 | int ret; | ||
64 | |||
65 | /* | ||
66 | * At the moment, we can only deal with non-wildcarded alarm times. | ||
67 | */ | ||
68 | ret = rtc_valid_tm(&alrm->time); | ||
69 | if (ret == 0) | ||
70 | ret = rtc_tm_to_time(&alrm->time, &time); | ||
71 | if (ret == 0) | ||
72 | writel(time, rtc->base + RTC_MR); | ||
73 | return ret; | ||
74 | } | ||
75 | |||
76 | static int pl030_read_time(struct device *dev, struct rtc_time *tm) | ||
77 | { | ||
78 | struct pl030_rtc *rtc = dev_get_drvdata(dev); | ||
79 | |||
80 | rtc_time_to_tm(readl(rtc->base + RTC_DR), tm); | ||
81 | |||
82 | return 0; | ||
83 | } | ||
84 | |||
85 | /* | ||
86 | * Set the RTC time. Unfortunately, we can't accurately set | ||
87 | * the point at which the counter updates. | ||
88 | * | ||
89 | * Also, since RTC_LR is transferred to RTC_CR on next rising | ||
90 | * edge of the 1Hz clock, we must write the time one second | ||
91 | * in advance. | ||
92 | */ | ||
93 | static int pl030_set_time(struct device *dev, struct rtc_time *tm) | ||
94 | { | ||
95 | struct pl030_rtc *rtc = dev_get_drvdata(dev); | ||
96 | unsigned long time; | ||
97 | int ret; | ||
98 | |||
99 | ret = rtc_tm_to_time(tm, &time); | ||
100 | if (ret == 0) | ||
101 | writel(time + 1, rtc->base + RTC_LR); | ||
102 | |||
103 | return ret; | ||
104 | } | ||
105 | |||
106 | static const struct rtc_class_ops pl030_ops = { | ||
107 | .open = pl030_open, | ||
108 | .release = pl030_release, | ||
109 | .ioctl = pl030_ioctl, | ||
110 | .read_time = pl030_read_time, | ||
111 | .set_time = pl030_set_time, | ||
112 | .read_alarm = pl030_read_alarm, | ||
113 | .set_alarm = pl030_set_alarm, | ||
114 | }; | ||
115 | |||
116 | static int pl030_probe(struct amba_device *dev, void *id) | ||
117 | { | ||
118 | struct pl030_rtc *rtc; | ||
119 | int ret; | ||
120 | |||
121 | ret = amba_request_regions(dev, NULL); | ||
122 | if (ret) | ||
123 | goto err_req; | ||
124 | |||
125 | rtc = kmalloc(sizeof(*rtc), GFP_KERNEL); | ||
126 | if (!rtc) { | ||
127 | ret = -ENOMEM; | ||
128 | goto err_rtc; | ||
129 | } | ||
130 | |||
131 | rtc->base = ioremap(dev->res.start, SZ_4K); | ||
132 | if (!rtc->base) { | ||
133 | ret = -ENOMEM; | ||
134 | goto err_map; | ||
135 | } | ||
136 | |||
137 | __raw_writel(0, rtc->base + RTC_CR); | ||
138 | __raw_writel(0, rtc->base + RTC_EOI); | ||
139 | |||
140 | amba_set_drvdata(dev, rtc); | ||
141 | |||
142 | ret = request_irq(dev->irq[0], pl030_interrupt, IRQF_DISABLED, | ||
143 | "rtc-pl030", rtc); | ||
144 | if (ret) | ||
145 | goto err_irq; | ||
146 | |||
147 | rtc->rtc = rtc_device_register("pl030", &dev->dev, &pl030_ops, | ||
148 | THIS_MODULE); | ||
149 | if (IS_ERR(rtc->rtc)) { | ||
150 | ret = PTR_ERR(rtc->rtc); | ||
151 | goto err_reg; | ||
152 | } | ||
153 | |||
154 | return 0; | ||
155 | |||
156 | err_reg: | ||
157 | free_irq(dev->irq[0], rtc); | ||
158 | err_irq: | ||
159 | iounmap(rtc->base); | ||
160 | err_map: | ||
161 | kfree(rtc); | ||
162 | err_rtc: | ||
163 | amba_release_regions(dev); | ||
164 | err_req: | ||
165 | return ret; | ||
166 | } | ||
167 | |||
168 | static int pl030_remove(struct amba_device *dev) | ||
169 | { | ||
170 | struct pl030_rtc *rtc = amba_get_drvdata(dev); | ||
171 | |||
172 | amba_set_drvdata(dev, NULL); | ||
173 | |||
174 | writel(0, rtc->base + RTC_CR); | ||
175 | |||
176 | free_irq(dev->irq[0], rtc); | ||
177 | rtc_device_unregister(rtc->rtc); | ||
178 | iounmap(rtc->base); | ||
179 | kfree(rtc); | ||
180 | amba_release_regions(dev); | ||
181 | |||
182 | return 0; | ||
183 | } | ||
184 | |||
185 | static struct amba_id pl030_ids[] = { | ||
186 | { | ||
187 | .id = 0x00041030, | ||
188 | .mask = 0x000fffff, | ||
189 | }, | ||
190 | { 0, 0 }, | ||
191 | }; | ||
192 | |||
193 | static struct amba_driver pl030_driver = { | ||
194 | .drv = { | ||
195 | .name = "rtc-pl030", | ||
196 | }, | ||
197 | .probe = pl030_probe, | ||
198 | .remove = pl030_remove, | ||
199 | .id_table = pl030_ids, | ||
200 | }; | ||
201 | |||
202 | static int __init pl030_init(void) | ||
203 | { | ||
204 | return amba_driver_register(&pl030_driver); | ||
205 | } | ||
206 | |||
207 | static void __exit pl030_exit(void) | ||
208 | { | ||
209 | amba_driver_unregister(&pl030_driver); | ||
210 | } | ||
211 | |||
212 | module_init(pl030_init); | ||
213 | module_exit(pl030_exit); | ||
214 | |||
215 | MODULE_AUTHOR("Russell King <rmk@arm.linux.org.uk>"); | ||
216 | MODULE_DESCRIPTION("ARM AMBA PL030 RTC Driver"); | ||
217 | MODULE_LICENSE("GPL"); | ||
diff --git a/drivers/rtc/rtc-pl031.c b/drivers/rtc/rtc-pl031.c index 2fd49edcc712..08b4610ec5a6 100644 --- a/drivers/rtc/rtc-pl031.c +++ b/drivers/rtc/rtc-pl031.c | |||
@@ -12,23 +12,12 @@ | |||
12 | * as published by the Free Software Foundation; either version | 12 | * as published by the Free Software Foundation; either version |
13 | * 2 of the License, or (at your option) any later version. | 13 | * 2 of the License, or (at your option) any later version. |
14 | */ | 14 | */ |
15 | |||
16 | #include <linux/platform_device.h> | ||
17 | #include <linux/module.h> | 15 | #include <linux/module.h> |
18 | #include <linux/rtc.h> | 16 | #include <linux/rtc.h> |
19 | #include <linux/init.h> | 17 | #include <linux/init.h> |
20 | #include <linux/fs.h> | ||
21 | #include <linux/interrupt.h> | 18 | #include <linux/interrupt.h> |
22 | #include <linux/string.h> | ||
23 | #include <linux/pm.h> | ||
24 | #include <linux/bitops.h> | ||
25 | |||
26 | #include <linux/amba/bus.h> | 19 | #include <linux/amba/bus.h> |
27 | 20 | #include <linux/io.h> | |
28 | #include <asm/io.h> | ||
29 | #include <asm/hardware.h> | ||
30 | #include <asm/irq.h> | ||
31 | #include <asm/rtc.h> | ||
32 | 21 | ||
33 | /* | 22 | /* |
34 | * Register definitions | 23 | * Register definitions |
@@ -142,13 +131,12 @@ static int pl031_remove(struct amba_device *adev) | |||
142 | { | 131 | { |
143 | struct pl031_local *ldata = dev_get_drvdata(&adev->dev); | 132 | struct pl031_local *ldata = dev_get_drvdata(&adev->dev); |
144 | 133 | ||
145 | if (ldata) { | 134 | amba_set_drvdata(adev, NULL); |
146 | dev_set_drvdata(&adev->dev, NULL); | 135 | free_irq(adev->irq[0], ldata->rtc); |
147 | free_irq(adev->irq[0], ldata->rtc); | 136 | rtc_device_unregister(ldata->rtc); |
148 | rtc_device_unregister(ldata->rtc); | 137 | iounmap(ldata->base); |
149 | iounmap(ldata->base); | 138 | kfree(ldata); |
150 | kfree(ldata); | 139 | amba_release_regions(adev); |
151 | } | ||
152 | 140 | ||
153 | return 0; | 141 | return 0; |
154 | } | 142 | } |
@@ -158,13 +146,15 @@ static int pl031_probe(struct amba_device *adev, void *id) | |||
158 | int ret; | 146 | int ret; |
159 | struct pl031_local *ldata; | 147 | struct pl031_local *ldata; |
160 | 148 | ||
149 | ret = amba_request_regions(adev, NULL); | ||
150 | if (ret) | ||
151 | goto err_req; | ||
161 | 152 | ||
162 | ldata = kmalloc(sizeof(struct pl031_local), GFP_KERNEL); | 153 | ldata = kmalloc(sizeof(struct pl031_local), GFP_KERNEL); |
163 | if (!ldata) { | 154 | if (!ldata) { |
164 | ret = -ENOMEM; | 155 | ret = -ENOMEM; |
165 | goto out; | 156 | goto out; |
166 | } | 157 | } |
167 | dev_set_drvdata(&adev->dev, ldata); | ||
168 | 158 | ||
169 | ldata->base = ioremap(adev->res.start, | 159 | ldata->base = ioremap(adev->res.start, |
170 | adev->res.end - adev->res.start + 1); | 160 | adev->res.end - adev->res.start + 1); |
@@ -173,6 +163,8 @@ static int pl031_probe(struct amba_device *adev, void *id) | |||
173 | goto out_no_remap; | 163 | goto out_no_remap; |
174 | } | 164 | } |
175 | 165 | ||
166 | amba_set_drvdata(adev, ldata); | ||
167 | |||
176 | if (request_irq(adev->irq[0], pl031_interrupt, IRQF_DISABLED, | 168 | if (request_irq(adev->irq[0], pl031_interrupt, IRQF_DISABLED, |
177 | "rtc-pl031", ldata->rtc)) { | 169 | "rtc-pl031", ldata->rtc)) { |
178 | ret = -EIO; | 170 | ret = -EIO; |
@@ -192,10 +184,12 @@ out_no_rtc: | |||
192 | free_irq(adev->irq[0], ldata->rtc); | 184 | free_irq(adev->irq[0], ldata->rtc); |
193 | out_no_irq: | 185 | out_no_irq: |
194 | iounmap(ldata->base); | 186 | iounmap(ldata->base); |
187 | amba_set_drvdata(adev, NULL); | ||
195 | out_no_remap: | 188 | out_no_remap: |
196 | dev_set_drvdata(&adev->dev, NULL); | ||
197 | kfree(ldata); | 189 | kfree(ldata); |
198 | out: | 190 | out: |
191 | amba_release_regions(adev); | ||
192 | err_req: | ||
199 | return ret; | 193 | return ret; |
200 | } | 194 | } |
201 | 195 | ||
diff --git a/drivers/rtc/rtc-s3c.c b/drivers/rtc/rtc-s3c.c index f26e0cad8f16..fed86e507fdf 100644 --- a/drivers/rtc/rtc-s3c.c +++ b/drivers/rtc/rtc-s3c.c | |||
@@ -26,10 +26,6 @@ | |||
26 | #include <asm/uaccess.h> | 26 | #include <asm/uaccess.h> |
27 | #include <asm/io.h> | 27 | #include <asm/io.h> |
28 | #include <asm/irq.h> | 28 | #include <asm/irq.h> |
29 | #include <asm/rtc.h> | ||
30 | |||
31 | #include <asm/mach/time.h> | ||
32 | |||
33 | #include <asm/plat-s3c/regs-rtc.h> | 29 | #include <asm/plat-s3c/regs-rtc.h> |
34 | 30 | ||
35 | /* I have yet to find an S3C implementation with more than one | 31 | /* I have yet to find an S3C implementation with more than one |
diff --git a/drivers/rtc/rtc-sa1100.c b/drivers/rtc/rtc-sa1100.c index 67421b0d3a7b..f47294c60148 100644 --- a/drivers/rtc/rtc-sa1100.c +++ b/drivers/rtc/rtc-sa1100.c | |||
@@ -33,7 +33,6 @@ | |||
33 | 33 | ||
34 | #include <asm/hardware.h> | 34 | #include <asm/hardware.h> |
35 | #include <asm/irq.h> | 35 | #include <asm/irq.h> |
36 | #include <asm/rtc.h> | ||
37 | 36 | ||
38 | #ifdef CONFIG_ARCH_PXA | 37 | #ifdef CONFIG_ARCH_PXA |
39 | #include <asm/arch/pxa-regs.h> | 38 | #include <asm/arch/pxa-regs.h> |
@@ -47,6 +46,42 @@ static unsigned long rtc_freq = 1024; | |||
47 | static struct rtc_time rtc_alarm; | 46 | static struct rtc_time rtc_alarm; |
48 | static DEFINE_SPINLOCK(sa1100_rtc_lock); | 47 | static DEFINE_SPINLOCK(sa1100_rtc_lock); |
49 | 48 | ||
49 | static inline int rtc_periodic_alarm(struct rtc_time *tm) | ||
50 | { | ||
51 | return (tm->tm_year == -1) || | ||
52 | ((unsigned)tm->tm_mon >= 12) || | ||
53 | ((unsigned)(tm->tm_mday - 1) >= 31) || | ||
54 | ((unsigned)tm->tm_hour > 23) || | ||
55 | ((unsigned)tm->tm_min > 59) || | ||
56 | ((unsigned)tm->tm_sec > 59); | ||
57 | } | ||
58 | |||
59 | /* | ||
60 | * Calculate the next alarm time given the requested alarm time mask | ||
61 | * and the current time. | ||
62 | */ | ||
63 | static void rtc_next_alarm_time(struct rtc_time *next, struct rtc_time *now, struct rtc_time *alrm) | ||
64 | { | ||
65 | unsigned long next_time; | ||
66 | unsigned long now_time; | ||
67 | |||
68 | next->tm_year = now->tm_year; | ||
69 | next->tm_mon = now->tm_mon; | ||
70 | next->tm_mday = now->tm_mday; | ||
71 | next->tm_hour = alrm->tm_hour; | ||
72 | next->tm_min = alrm->tm_min; | ||
73 | next->tm_sec = alrm->tm_sec; | ||
74 | |||
75 | rtc_tm_to_time(now, &now_time); | ||
76 | rtc_tm_to_time(next, &next_time); | ||
77 | |||
78 | if (next_time < now_time) { | ||
79 | /* Advance one day */ | ||
80 | next_time += 60 * 60 * 24; | ||
81 | rtc_time_to_tm(next_time, next); | ||
82 | } | ||
83 | } | ||
84 | |||
50 | static int rtc_update_alarm(struct rtc_time *alrm) | 85 | static int rtc_update_alarm(struct rtc_time *alrm) |
51 | { | 86 | { |
52 | struct rtc_time alarm_tm, now_tm; | 87 | struct rtc_time alarm_tm, now_tm; |
diff --git a/drivers/scsi/arm/Kconfig b/drivers/scsi/arm/Kconfig index 7236143941f3..a8587f1f5e7e 100644 --- a/drivers/scsi/arm/Kconfig +++ b/drivers/scsi/arm/Kconfig | |||
@@ -3,7 +3,7 @@ | |||
3 | # | 3 | # |
4 | config SCSI_ACORNSCSI_3 | 4 | config SCSI_ACORNSCSI_3 |
5 | tristate "Acorn SCSI card (aka30) support" | 5 | tristate "Acorn SCSI card (aka30) support" |
6 | depends on ARCH_ACORN && SCSI && BROKEN | 6 | depends on ARCH_ACORN && SCSI |
7 | select SCSI_SPI_ATTRS | 7 | select SCSI_SPI_ATTRS |
8 | help | 8 | help |
9 | This enables support for the Acorn SCSI card (aka30). If you have an | 9 | This enables support for the Acorn SCSI card (aka30). If you have an |
diff --git a/drivers/scsi/arm/acornscsi-io.S b/drivers/scsi/arm/acornscsi-io.S index 93467e6ac923..5cebe3105260 100644 --- a/drivers/scsi/arm/acornscsi-io.S +++ b/drivers/scsi/arm/acornscsi-io.S | |||
@@ -10,17 +10,10 @@ | |||
10 | #include <asm/assembler.h> | 10 | #include <asm/assembler.h> |
11 | #include <asm/hardware.h> | 11 | #include <asm/hardware.h> |
12 | 12 | ||
13 | #if (IO_BASE == (PCIO_BASE & 0xff000000)) | 13 | #if defined(__APCS_32__) |
14 | #define ADDR(off,reg) \ | 14 | #define LOADREGS(t,r,l...) ldm##t r, l |
15 | tst off, $0x80000000 ;\ | 15 | #elif defined(__APCS_26__) |
16 | mov reg, $IO_BASE ;\ | 16 | #define LOADREGS(t,r,l...) ldm##t r, l##^ |
17 | orreq reg, reg, $(PCIO_BASE & 0x00ff0000) | ||
18 | #else | ||
19 | #define ADDR(off,reg) \ | ||
20 | tst off, $0x80000000 ;\ | ||
21 | movne reg, $IO_BASE ;\ | ||
22 | moveq reg, $(PCIO_BASE & 0xff000000) ;\ | ||
23 | orreq reg, reg, $(PCIO_BASE & 0x00ff0000) | ||
24 | #endif | 17 | #endif |
25 | 18 | ||
26 | @ Purpose: transfer a block of data from the acorn scsi card to memory | 19 | @ Purpose: transfer a block of data from the acorn scsi card to memory |
diff --git a/drivers/scsi/arm/acornscsi.c b/drivers/scsi/arm/acornscsi.c index 8e53f02cc311..918ccf818757 100644 --- a/drivers/scsi/arm/acornscsi.c +++ b/drivers/scsi/arm/acornscsi.c | |||
@@ -123,12 +123,6 @@ | |||
123 | #define DBG(cmd,xxx...) xxx | 123 | #define DBG(cmd,xxx...) xxx |
124 | #endif | 124 | #endif |
125 | 125 | ||
126 | #ifndef STRINGIFY | ||
127 | #define STRINGIFY(x) #x | ||
128 | #endif | ||
129 | #define STRx(x) STRINGIFY(x) | ||
130 | #define NO_WRITE_STR STRx(NO_WRITE) | ||
131 | |||
132 | #include <linux/module.h> | 126 | #include <linux/module.h> |
133 | #include <linux/kernel.h> | 127 | #include <linux/kernel.h> |
134 | #include <linux/string.h> | 128 | #include <linux/string.h> |
@@ -141,9 +135,10 @@ | |||
141 | #include <linux/interrupt.h> | 135 | #include <linux/interrupt.h> |
142 | #include <linux/init.h> | 136 | #include <linux/init.h> |
143 | #include <linux/bitops.h> | 137 | #include <linux/bitops.h> |
138 | #include <linux/stringify.h> | ||
139 | #include <linux/io.h> | ||
144 | 140 | ||
145 | #include <asm/system.h> | 141 | #include <asm/system.h> |
146 | #include <asm/io.h> | ||
147 | #include <asm/ecard.h> | 142 | #include <asm/ecard.h> |
148 | 143 | ||
149 | #include "../scsi.h" | 144 | #include "../scsi.h" |
@@ -203,44 +198,46 @@ static void acornscsi_abortcmd(AS_Host *host, unsigned char tag); | |||
203 | * Miscellaneous | 198 | * Miscellaneous |
204 | */ | 199 | */ |
205 | 200 | ||
206 | static inline void | 201 | /* Offsets from MEMC base */ |
207 | sbic_arm_write(unsigned int io_port, int reg, int value) | 202 | #define SBIC_REGIDX 0x2000 |
203 | #define SBIC_REGVAL 0x2004 | ||
204 | #define DMAC_OFFSET 0x3000 | ||
205 | |||
206 | /* Offsets from FAST IOC base */ | ||
207 | #define INT_REG 0x2000 | ||
208 | #define PAGE_REG 0x3000 | ||
209 | |||
210 | static inline void sbic_arm_write(AS_Host *host, unsigned int reg, unsigned int value) | ||
208 | { | 211 | { |
209 | __raw_writeb(reg, io_port); | 212 | writeb(reg, host->base + SBIC_REGIDX); |
210 | __raw_writeb(value, io_port + 4); | 213 | writeb(value, host->base + SBIC_REGVAL); |
211 | } | 214 | } |
212 | 215 | ||
213 | #define sbic_arm_writenext(io,val) \ | 216 | static inline int sbic_arm_read(AS_Host *host, unsigned int reg) |
214 | __raw_writeb((val), (io) + 4) | ||
215 | |||
216 | static inline | ||
217 | int sbic_arm_read(unsigned int io_port, int reg) | ||
218 | { | 217 | { |
219 | if(reg == SBIC_ASR) | 218 | if(reg == SBIC_ASR) |
220 | return __raw_readl(io_port) & 255; | 219 | return readl(host->base + SBIC_REGIDX) & 255; |
221 | __raw_writeb(reg, io_port); | 220 | writeb(reg, host->base + SBIC_REGIDX); |
222 | return __raw_readl(io_port + 4) & 255; | 221 | return readl(host->base + SBIC_REGVAL) & 255; |
223 | } | 222 | } |
224 | 223 | ||
225 | #define sbic_arm_readnext(io) \ | 224 | #define sbic_arm_writenext(host, val) writeb((val), (host)->base + SBIC_REGVAL) |
226 | __raw_readb((io) + 4) | 225 | #define sbic_arm_readnext(host) readb((host)->base + SBIC_REGVAL) |
227 | 226 | ||
228 | #ifdef USE_DMAC | 227 | #ifdef USE_DMAC |
229 | #define dmac_read(io_port,reg) \ | 228 | #define dmac_read(host,reg) \ |
230 | inb((io_port) + (reg)) | 229 | readb((host)->base + DMAC_OFFSET + ((reg) << 2)) |
231 | 230 | ||
232 | #define dmac_write(io_port,reg,value) \ | 231 | #define dmac_write(host,reg,value) \ |
233 | ({ outb((value), (io_port) + (reg)); }) | 232 | ({ writeb((value), (host)->base + DMAC_OFFSET + ((reg) << 2)); }) |
234 | 233 | ||
235 | #define dmac_clearintr(io_port) \ | 234 | #define dmac_clearintr(host) writeb(0, (host)->fast + INT_REG) |
236 | ({ outb(0, (io_port)); }) | ||
237 | 235 | ||
238 | static inline | 236 | static inline unsigned int dmac_address(AS_Host *host) |
239 | unsigned int dmac_address(unsigned int io_port) | ||
240 | { | 237 | { |
241 | return dmac_read(io_port, DMAC_TXADRHI) << 16 | | 238 | return dmac_read(host, DMAC_TXADRHI) << 16 | |
242 | dmac_read(io_port, DMAC_TXADRMD) << 8 | | 239 | dmac_read(host, DMAC_TXADRMD) << 8 | |
243 | dmac_read(io_port, DMAC_TXADRLO); | 240 | dmac_read(host, DMAC_TXADRLO); |
244 | } | 241 | } |
245 | 242 | ||
246 | static | 243 | static |
@@ -248,15 +245,15 @@ void acornscsi_dumpdma(AS_Host *host, char *where) | |||
248 | { | 245 | { |
249 | unsigned int mode, addr, len; | 246 | unsigned int mode, addr, len; |
250 | 247 | ||
251 | mode = dmac_read(host->dma.io_port, DMAC_MODECON); | 248 | mode = dmac_read(host, DMAC_MODECON); |
252 | addr = dmac_address(host->dma.io_port); | 249 | addr = dmac_address(host); |
253 | len = dmac_read(host->dma.io_port, DMAC_TXCNTHI) << 8 | | 250 | len = dmac_read(host, DMAC_TXCNTHI) << 8 | |
254 | dmac_read(host->dma.io_port, DMAC_TXCNTLO); | 251 | dmac_read(host, DMAC_TXCNTLO); |
255 | 252 | ||
256 | printk("scsi%d: %s: DMAC %02x @%06x+%04x msk %02x, ", | 253 | printk("scsi%d: %s: DMAC %02x @%06x+%04x msk %02x, ", |
257 | host->host->host_no, where, | 254 | host->host->host_no, where, |
258 | mode, addr, (len + 1) & 0xffff, | 255 | mode, addr, (len + 1) & 0xffff, |
259 | dmac_read(host->dma.io_port, DMAC_MASKREG)); | 256 | dmac_read(host, DMAC_MASKREG)); |
260 | 257 | ||
261 | printk("DMA @%06x, ", host->dma.start_addr); | 258 | printk("DMA @%06x, ", host->dma.start_addr); |
262 | printk("BH @%p +%04x, ", host->scsi.SCp.ptr, | 259 | printk("BH @%p +%04x, ", host->scsi.SCp.ptr, |
@@ -272,9 +269,9 @@ unsigned long acornscsi_sbic_xfcount(AS_Host *host) | |||
272 | { | 269 | { |
273 | unsigned long length; | 270 | unsigned long length; |
274 | 271 | ||
275 | length = sbic_arm_read(host->scsi.io_port, SBIC_TRANSCNTH) << 16; | 272 | length = sbic_arm_read(host, SBIC_TRANSCNTH) << 16; |
276 | length |= sbic_arm_readnext(host->scsi.io_port) << 8; | 273 | length |= sbic_arm_readnext(host) << 8; |
277 | length |= sbic_arm_readnext(host->scsi.io_port); | 274 | length |= sbic_arm_readnext(host); |
278 | 275 | ||
279 | return length; | 276 | return length; |
280 | } | 277 | } |
@@ -285,7 +282,7 @@ acornscsi_sbic_wait(AS_Host *host, int stat_mask, int stat, int timeout, char *m | |||
285 | int asr; | 282 | int asr; |
286 | 283 | ||
287 | do { | 284 | do { |
288 | asr = sbic_arm_read(host->scsi.io_port, SBIC_ASR); | 285 | asr = sbic_arm_read(host, SBIC_ASR); |
289 | 286 | ||
290 | if ((asr & stat_mask) == stat) | 287 | if ((asr & stat_mask) == stat) |
291 | return 0; | 288 | return 0; |
@@ -304,7 +301,7 @@ int acornscsi_sbic_issuecmd(AS_Host *host, int command) | |||
304 | if (acornscsi_sbic_wait(host, ASR_CIP, 0, 1000, "issuing command")) | 301 | if (acornscsi_sbic_wait(host, ASR_CIP, 0, 1000, "issuing command")) |
305 | return -1; | 302 | return -1; |
306 | 303 | ||
307 | sbic_arm_write(host->scsi.io_port, SBIC_CMND, command); | 304 | sbic_arm_write(host, SBIC_CMND, command); |
308 | 305 | ||
309 | return 0; | 306 | return 0; |
310 | } | 307 | } |
@@ -331,20 +328,20 @@ void acornscsi_resetcard(AS_Host *host) | |||
331 | 328 | ||
332 | /* assert reset line */ | 329 | /* assert reset line */ |
333 | host->card.page_reg = 0x80; | 330 | host->card.page_reg = 0x80; |
334 | outb(host->card.page_reg, host->card.io_page); | 331 | writeb(host->card.page_reg, host->fast + PAGE_REG); |
335 | 332 | ||
336 | /* wait 3 cs. SCSI standard says 25ms. */ | 333 | /* wait 3 cs. SCSI standard says 25ms. */ |
337 | acornscsi_csdelay(3); | 334 | acornscsi_csdelay(3); |
338 | 335 | ||
339 | host->card.page_reg = 0; | 336 | host->card.page_reg = 0; |
340 | outb(host->card.page_reg, host->card.io_page); | 337 | writeb(host->card.page_reg, host->fast + PAGE_REG); |
341 | 338 | ||
342 | /* | 339 | /* |
343 | * Should get a reset from the card | 340 | * Should get a reset from the card |
344 | */ | 341 | */ |
345 | timeout = 1000; | 342 | timeout = 1000; |
346 | do { | 343 | do { |
347 | if (inb(host->card.io_intr) & 8) | 344 | if (readb(host->fast + INT_REG) & 8) |
348 | break; | 345 | break; |
349 | udelay(1); | 346 | udelay(1); |
350 | } while (--timeout); | 347 | } while (--timeout); |
@@ -353,19 +350,19 @@ void acornscsi_resetcard(AS_Host *host) | |||
353 | printk("scsi%d: timeout while resetting card\n", | 350 | printk("scsi%d: timeout while resetting card\n", |
354 | host->host->host_no); | 351 | host->host->host_no); |
355 | 352 | ||
356 | sbic_arm_read(host->scsi.io_port, SBIC_ASR); | 353 | sbic_arm_read(host, SBIC_ASR); |
357 | sbic_arm_read(host->scsi.io_port, SBIC_SSR); | 354 | sbic_arm_read(host, SBIC_SSR); |
358 | 355 | ||
359 | /* setup sbic - WD33C93A */ | 356 | /* setup sbic - WD33C93A */ |
360 | sbic_arm_write(host->scsi.io_port, SBIC_OWNID, OWNID_EAF | host->host->this_id); | 357 | sbic_arm_write(host, SBIC_OWNID, OWNID_EAF | host->host->this_id); |
361 | sbic_arm_write(host->scsi.io_port, SBIC_CMND, CMND_RESET); | 358 | sbic_arm_write(host, SBIC_CMND, CMND_RESET); |
362 | 359 | ||
363 | /* | 360 | /* |
364 | * Command should cause a reset interrupt | 361 | * Command should cause a reset interrupt |
365 | */ | 362 | */ |
366 | timeout = 1000; | 363 | timeout = 1000; |
367 | do { | 364 | do { |
368 | if (inb(host->card.io_intr) & 8) | 365 | if (readb(host->fast + INT_REG) & 8) |
369 | break; | 366 | break; |
370 | udelay(1); | 367 | udelay(1); |
371 | } while (--timeout); | 368 | } while (--timeout); |
@@ -374,26 +371,26 @@ void acornscsi_resetcard(AS_Host *host) | |||
374 | printk("scsi%d: timeout while resetting card\n", | 371 | printk("scsi%d: timeout while resetting card\n", |
375 | host->host->host_no); | 372 | host->host->host_no); |
376 | 373 | ||
377 | sbic_arm_read(host->scsi.io_port, SBIC_ASR); | 374 | sbic_arm_read(host, SBIC_ASR); |
378 | if (sbic_arm_read(host->scsi.io_port, SBIC_SSR) != 0x01) | 375 | if (sbic_arm_read(host, SBIC_SSR) != 0x01) |
379 | printk(KERN_CRIT "scsi%d: WD33C93A didn't give enhanced reset interrupt\n", | 376 | printk(KERN_CRIT "scsi%d: WD33C93A didn't give enhanced reset interrupt\n", |
380 | host->host->host_no); | 377 | host->host->host_no); |
381 | 378 | ||
382 | sbic_arm_write(host->scsi.io_port, SBIC_CTRL, INIT_SBICDMA | CTRL_IDI); | 379 | sbic_arm_write(host, SBIC_CTRL, INIT_SBICDMA | CTRL_IDI); |
383 | sbic_arm_write(host->scsi.io_port, SBIC_TIMEOUT, TIMEOUT_TIME); | 380 | sbic_arm_write(host, SBIC_TIMEOUT, TIMEOUT_TIME); |
384 | sbic_arm_write(host->scsi.io_port, SBIC_SYNCHTRANSFER, SYNCHTRANSFER_2DBA); | 381 | sbic_arm_write(host, SBIC_SYNCHTRANSFER, SYNCHTRANSFER_2DBA); |
385 | sbic_arm_write(host->scsi.io_port, SBIC_SOURCEID, SOURCEID_ER | SOURCEID_DSP); | 382 | sbic_arm_write(host, SBIC_SOURCEID, SOURCEID_ER | SOURCEID_DSP); |
386 | 383 | ||
387 | host->card.page_reg = 0x40; | 384 | host->card.page_reg = 0x40; |
388 | outb(host->card.page_reg, host->card.io_page); | 385 | writeb(host->card.page_reg, host->fast + PAGE_REG); |
389 | 386 | ||
390 | /* setup dmac - uPC71071 */ | 387 | /* setup dmac - uPC71071 */ |
391 | dmac_write(host->dma.io_port, DMAC_INIT, 0); | 388 | dmac_write(host, DMAC_INIT, 0); |
392 | #ifdef USE_DMAC | 389 | #ifdef USE_DMAC |
393 | dmac_write(host->dma.io_port, DMAC_INIT, INIT_8BIT); | 390 | dmac_write(host, DMAC_INIT, INIT_8BIT); |
394 | dmac_write(host->dma.io_port, DMAC_CHANNEL, CHANNEL_0); | 391 | dmac_write(host, DMAC_CHANNEL, CHANNEL_0); |
395 | dmac_write(host->dma.io_port, DMAC_DEVCON0, INIT_DEVCON0); | 392 | dmac_write(host, DMAC_DEVCON0, INIT_DEVCON0); |
396 | dmac_write(host->dma.io_port, DMAC_DEVCON1, INIT_DEVCON1); | 393 | dmac_write(host, DMAC_DEVCON1, INIT_DEVCON1); |
397 | #endif | 394 | #endif |
398 | 395 | ||
399 | host->SCpnt = NULL; | 396 | host->SCpnt = NULL; |
@@ -741,9 +738,9 @@ intr_ret_t acornscsi_kick(AS_Host *host) | |||
741 | * If we have an interrupt pending, then we may have been reselected. | 738 | * If we have an interrupt pending, then we may have been reselected. |
742 | * In this case, we don't want to write to the registers | 739 | * In this case, we don't want to write to the registers |
743 | */ | 740 | */ |
744 | if (!(sbic_arm_read(host->scsi.io_port, SBIC_ASR) & (ASR_INT|ASR_BSY|ASR_CIP))) { | 741 | if (!(sbic_arm_read(host, SBIC_ASR) & (ASR_INT|ASR_BSY|ASR_CIP))) { |
745 | sbic_arm_write(host->scsi.io_port, SBIC_DESTID, SCpnt->device->id); | 742 | sbic_arm_write(host, SBIC_DESTID, SCpnt->device->id); |
746 | sbic_arm_write(host->scsi.io_port, SBIC_CMND, CMND_SELWITHATN); | 743 | sbic_arm_write(host, SBIC_CMND, CMND_SELWITHATN); |
747 | } | 744 | } |
748 | 745 | ||
749 | /* | 746 | /* |
@@ -807,7 +804,7 @@ static void acornscsi_done(AS_Host *host, struct scsi_cmnd **SCpntp, | |||
807 | struct scsi_cmnd *SCpnt = *SCpntp; | 804 | struct scsi_cmnd *SCpnt = *SCpntp; |
808 | 805 | ||
809 | /* clean up */ | 806 | /* clean up */ |
810 | sbic_arm_write(host->scsi.io_port, SBIC_SOURCEID, SOURCEID_ER | SOURCEID_DSP); | 807 | sbic_arm_write(host, SBIC_SOURCEID, SOURCEID_ER | SOURCEID_DSP); |
811 | 808 | ||
812 | host->stats.fins += 1; | 809 | host->stats.fins += 1; |
813 | 810 | ||
@@ -918,13 +915,13 @@ static | |||
918 | void acornscsi_data_read(AS_Host *host, char *ptr, | 915 | void acornscsi_data_read(AS_Host *host, char *ptr, |
919 | unsigned int start_addr, unsigned int length) | 916 | unsigned int start_addr, unsigned int length) |
920 | { | 917 | { |
921 | extern void __acornscsi_in(int port, char *buf, int len); | 918 | extern void __acornscsi_in(void __iomem *, char *buf, int len); |
922 | unsigned int page, offset, len = length; | 919 | unsigned int page, offset, len = length; |
923 | 920 | ||
924 | page = (start_addr >> 12); | 921 | page = (start_addr >> 12); |
925 | offset = start_addr & ((1 << 12) - 1); | 922 | offset = start_addr & ((1 << 12) - 1); |
926 | 923 | ||
927 | outb((page & 0x3f) | host->card.page_reg, host->card.io_page); | 924 | writeb((page & 0x3f) | host->card.page_reg, host->fast + PAGE_REG); |
928 | 925 | ||
929 | while (len > 0) { | 926 | while (len > 0) { |
930 | unsigned int this_len; | 927 | unsigned int this_len; |
@@ -934,7 +931,7 @@ void acornscsi_data_read(AS_Host *host, char *ptr, | |||
934 | else | 931 | else |
935 | this_len = len; | 932 | this_len = len; |
936 | 933 | ||
937 | __acornscsi_in(host->card.io_ram + (offset << 1), ptr, this_len); | 934 | __acornscsi_in(host->base + (offset << 1), ptr, this_len); |
938 | 935 | ||
939 | offset += this_len; | 936 | offset += this_len; |
940 | ptr += this_len; | 937 | ptr += this_len; |
@@ -943,10 +940,10 @@ void acornscsi_data_read(AS_Host *host, char *ptr, | |||
943 | if (offset == (1 << 12)) { | 940 | if (offset == (1 << 12)) { |
944 | offset = 0; | 941 | offset = 0; |
945 | page ++; | 942 | page ++; |
946 | outb((page & 0x3f) | host->card.page_reg, host->card.io_page); | 943 | writeb((page & 0x3f) | host->card.page_reg, host->fast + PAGE_REG); |
947 | } | 944 | } |
948 | } | 945 | } |
949 | outb(host->card.page_reg, host->card.io_page); | 946 | writeb(host->card.page_reg, host->fast + PAGE_REG); |
950 | } | 947 | } |
951 | 948 | ||
952 | /* | 949 | /* |
@@ -963,13 +960,13 @@ static | |||
963 | void acornscsi_data_write(AS_Host *host, char *ptr, | 960 | void acornscsi_data_write(AS_Host *host, char *ptr, |
964 | unsigned int start_addr, unsigned int length) | 961 | unsigned int start_addr, unsigned int length) |
965 | { | 962 | { |
966 | extern void __acornscsi_out(int port, char *buf, int len); | 963 | extern void __acornscsi_out(void __iomem *, char *buf, int len); |
967 | unsigned int page, offset, len = length; | 964 | unsigned int page, offset, len = length; |
968 | 965 | ||
969 | page = (start_addr >> 12); | 966 | page = (start_addr >> 12); |
970 | offset = start_addr & ((1 << 12) - 1); | 967 | offset = start_addr & ((1 << 12) - 1); |
971 | 968 | ||
972 | outb((page & 0x3f) | host->card.page_reg, host->card.io_page); | 969 | writeb((page & 0x3f) | host->card.page_reg, host->fast + PAGE_REG); |
973 | 970 | ||
974 | while (len > 0) { | 971 | while (len > 0) { |
975 | unsigned int this_len; | 972 | unsigned int this_len; |
@@ -979,7 +976,7 @@ void acornscsi_data_write(AS_Host *host, char *ptr, | |||
979 | else | 976 | else |
980 | this_len = len; | 977 | this_len = len; |
981 | 978 | ||
982 | __acornscsi_out(host->card.io_ram + (offset << 1), ptr, this_len); | 979 | __acornscsi_out(host->base + (offset << 1), ptr, this_len); |
983 | 980 | ||
984 | offset += this_len; | 981 | offset += this_len; |
985 | ptr += this_len; | 982 | ptr += this_len; |
@@ -988,10 +985,10 @@ void acornscsi_data_write(AS_Host *host, char *ptr, | |||
988 | if (offset == (1 << 12)) { | 985 | if (offset == (1 << 12)) { |
989 | offset = 0; | 986 | offset = 0; |
990 | page ++; | 987 | page ++; |
991 | outb((page & 0x3f) | host->card.page_reg, host->card.io_page); | 988 | writeb((page & 0x3f) | host->card.page_reg, host->fast + PAGE_REG); |
992 | } | 989 | } |
993 | } | 990 | } |
994 | outb(host->card.page_reg, host->card.io_page); | 991 | writeb(host->card.page_reg, host->fast + PAGE_REG); |
995 | } | 992 | } |
996 | 993 | ||
997 | /* ========================================================================================= | 994 | /* ========================================================================================= |
@@ -1008,8 +1005,8 @@ void acornscsi_data_write(AS_Host *host, char *ptr, | |||
1008 | static inline | 1005 | static inline |
1009 | void acornscsi_dma_stop(AS_Host *host) | 1006 | void acornscsi_dma_stop(AS_Host *host) |
1010 | { | 1007 | { |
1011 | dmac_write(host->dma.io_port, DMAC_MASKREG, MASK_ON); | 1008 | dmac_write(host, DMAC_MASKREG, MASK_ON); |
1012 | dmac_clearintr(host->dma.io_intr_clear); | 1009 | dmac_clearintr(host); |
1013 | 1010 | ||
1014 | #if (DEBUG & DEBUG_DMA) | 1011 | #if (DEBUG & DEBUG_DMA) |
1015 | DBG(host->SCpnt, acornscsi_dumpdma(host, "stop")); | 1012 | DBG(host->SCpnt, acornscsi_dumpdma(host, "stop")); |
@@ -1031,7 +1028,7 @@ void acornscsi_dma_setup(AS_Host *host, dmadir_t direction) | |||
1031 | 1028 | ||
1032 | host->dma.direction = direction; | 1029 | host->dma.direction = direction; |
1033 | 1030 | ||
1034 | dmac_write(host->dma.io_port, DMAC_MASKREG, MASK_ON); | 1031 | dmac_write(host, DMAC_MASKREG, MASK_ON); |
1035 | 1032 | ||
1036 | if (direction == DMA_OUT) { | 1033 | if (direction == DMA_OUT) { |
1037 | #if (DEBUG & DEBUG_NO_WRITE) | 1034 | #if (DEBUG & DEBUG_NO_WRITE) |
@@ -1062,13 +1059,13 @@ void acornscsi_dma_setup(AS_Host *host, dmadir_t direction) | |||
1062 | length); | 1059 | length); |
1063 | 1060 | ||
1064 | length -= 1; | 1061 | length -= 1; |
1065 | dmac_write(host->dma.io_port, DMAC_TXCNTLO, length); | 1062 | dmac_write(host, DMAC_TXCNTLO, length); |
1066 | dmac_write(host->dma.io_port, DMAC_TXCNTHI, length >> 8); | 1063 | dmac_write(host, DMAC_TXCNTHI, length >> 8); |
1067 | dmac_write(host->dma.io_port, DMAC_TXADRLO, address); | 1064 | dmac_write(host, DMAC_TXADRLO, address); |
1068 | dmac_write(host->dma.io_port, DMAC_TXADRMD, address >> 8); | 1065 | dmac_write(host, DMAC_TXADRMD, address >> 8); |
1069 | dmac_write(host->dma.io_port, DMAC_TXADRHI, 0); | 1066 | dmac_write(host, DMAC_TXADRHI, 0); |
1070 | dmac_write(host->dma.io_port, DMAC_MODECON, mode); | 1067 | dmac_write(host, DMAC_MODECON, mode); |
1071 | dmac_write(host->dma.io_port, DMAC_MASKREG, MASK_OFF); | 1068 | dmac_write(host, DMAC_MASKREG, MASK_OFF); |
1072 | 1069 | ||
1073 | #if (DEBUG & DEBUG_DMA) | 1070 | #if (DEBUG & DEBUG_DMA) |
1074 | DBG(host->SCpnt, acornscsi_dumpdma(host, "strt")); | 1071 | DBG(host->SCpnt, acornscsi_dumpdma(host, "strt")); |
@@ -1088,8 +1085,8 @@ void acornscsi_dma_setup(AS_Host *host, dmadir_t direction) | |||
1088 | static | 1085 | static |
1089 | void acornscsi_dma_cleanup(AS_Host *host) | 1086 | void acornscsi_dma_cleanup(AS_Host *host) |
1090 | { | 1087 | { |
1091 | dmac_write(host->dma.io_port, DMAC_MASKREG, MASK_ON); | 1088 | dmac_write(host, DMAC_MASKREG, MASK_ON); |
1092 | dmac_clearintr(host->dma.io_intr_clear); | 1089 | dmac_clearintr(host); |
1093 | 1090 | ||
1094 | /* | 1091 | /* |
1095 | * Check for a pending transfer | 1092 | * Check for a pending transfer |
@@ -1116,7 +1113,7 @@ void acornscsi_dma_cleanup(AS_Host *host) | |||
1116 | /* | 1113 | /* |
1117 | * Calculate number of bytes transferred from DMA. | 1114 | * Calculate number of bytes transferred from DMA. |
1118 | */ | 1115 | */ |
1119 | transferred = dmac_address(host->dma.io_port) - host->dma.start_addr; | 1116 | transferred = dmac_address(host) - host->dma.start_addr; |
1120 | host->dma.transferred += transferred; | 1117 | host->dma.transferred += transferred; |
1121 | 1118 | ||
1122 | if (host->dma.direction == DMA_IN) | 1119 | if (host->dma.direction == DMA_IN) |
@@ -1152,13 +1149,13 @@ void acornscsi_dma_intr(AS_Host *host) | |||
1152 | DBG(host->SCpnt, acornscsi_dumpdma(host, "inti")); | 1149 | DBG(host->SCpnt, acornscsi_dumpdma(host, "inti")); |
1153 | #endif | 1150 | #endif |
1154 | 1151 | ||
1155 | dmac_write(host->dma.io_port, DMAC_MASKREG, MASK_ON); | 1152 | dmac_write(host, DMAC_MASKREG, MASK_ON); |
1156 | dmac_clearintr(host->dma.io_intr_clear); | 1153 | dmac_clearintr(host); |
1157 | 1154 | ||
1158 | /* | 1155 | /* |
1159 | * Calculate amount transferred via DMA | 1156 | * Calculate amount transferred via DMA |
1160 | */ | 1157 | */ |
1161 | transferred = dmac_address(host->dma.io_port) - host->dma.start_addr; | 1158 | transferred = dmac_address(host) - host->dma.start_addr; |
1162 | host->dma.transferred += transferred; | 1159 | host->dma.transferred += transferred; |
1163 | 1160 | ||
1164 | /* | 1161 | /* |
@@ -1190,12 +1187,12 @@ void acornscsi_dma_intr(AS_Host *host) | |||
1190 | length); | 1187 | length); |
1191 | 1188 | ||
1192 | length -= 1; | 1189 | length -= 1; |
1193 | dmac_write(host->dma.io_port, DMAC_TXCNTLO, length); | 1190 | dmac_write(host, DMAC_TXCNTLO, length); |
1194 | dmac_write(host->dma.io_port, DMAC_TXCNTHI, length >> 8); | 1191 | dmac_write(host, DMAC_TXCNTHI, length >> 8); |
1195 | dmac_write(host->dma.io_port, DMAC_TXADRLO, address); | 1192 | dmac_write(host, DMAC_TXADRLO, address); |
1196 | dmac_write(host->dma.io_port, DMAC_TXADRMD, address >> 8); | 1193 | dmac_write(host, DMAC_TXADRMD, address >> 8); |
1197 | dmac_write(host->dma.io_port, DMAC_TXADRHI, 0); | 1194 | dmac_write(host, DMAC_TXADRHI, 0); |
1198 | dmac_write(host->dma.io_port, DMAC_MASKREG, MASK_OFF); | 1195 | dmac_write(host, DMAC_MASKREG, MASK_OFF); |
1199 | 1196 | ||
1200 | #if (DEBUG & DEBUG_DMA) | 1197 | #if (DEBUG & DEBUG_DMA) |
1201 | DBG(host->SCpnt, acornscsi_dumpdma(host, "into")); | 1198 | DBG(host->SCpnt, acornscsi_dumpdma(host, "into")); |
@@ -1209,15 +1206,15 @@ void acornscsi_dma_intr(AS_Host *host) | |||
1209 | * attention condition. We continue giving one byte until | 1206 | * attention condition. We continue giving one byte until |
1210 | * the device recognises the attention. | 1207 | * the device recognises the attention. |
1211 | */ | 1208 | */ |
1212 | if (dmac_read(host->dma.io_port, DMAC_STATUS) & STATUS_RQ0) { | 1209 | if (dmac_read(host, DMAC_STATUS) & STATUS_RQ0) { |
1213 | acornscsi_abortcmd(host, host->SCpnt->tag); | 1210 | acornscsi_abortcmd(host, host->SCpnt->tag); |
1214 | 1211 | ||
1215 | dmac_write(host->dma.io_port, DMAC_TXCNTLO, 0); | 1212 | dmac_write(host, DMAC_TXCNTLO, 0); |
1216 | dmac_write(host->dma.io_port, DMAC_TXCNTHI, 0); | 1213 | dmac_write(host, DMAC_TXCNTHI, 0); |
1217 | dmac_write(host->dma.io_port, DMAC_TXADRLO, 0); | 1214 | dmac_write(host, DMAC_TXADRLO, 0); |
1218 | dmac_write(host->dma.io_port, DMAC_TXADRMD, 0); | 1215 | dmac_write(host, DMAC_TXADRMD, 0); |
1219 | dmac_write(host->dma.io_port, DMAC_TXADRHI, 0); | 1216 | dmac_write(host, DMAC_TXADRHI, 0); |
1220 | dmac_write(host->dma.io_port, DMAC_MASKREG, MASK_OFF); | 1217 | dmac_write(host, DMAC_MASKREG, MASK_OFF); |
1221 | } | 1218 | } |
1222 | #endif | 1219 | #endif |
1223 | } | 1220 | } |
@@ -1271,9 +1268,9 @@ void acornscsi_dma_adjust(AS_Host *host) | |||
1271 | host->dma.xfer_setup = 0; | 1268 | host->dma.xfer_setup = 0; |
1272 | else { | 1269 | else { |
1273 | transferred += host->dma.start_addr; | 1270 | transferred += host->dma.start_addr; |
1274 | dmac_write(host->dma.io_port, DMAC_TXADRLO, transferred); | 1271 | dmac_write(host, DMAC_TXADRLO, transferred); |
1275 | dmac_write(host->dma.io_port, DMAC_TXADRMD, transferred >> 8); | 1272 | dmac_write(host, DMAC_TXADRMD, transferred >> 8); |
1276 | dmac_write(host->dma.io_port, DMAC_TXADRHI, transferred >> 16); | 1273 | dmac_write(host, DMAC_TXADRHI, transferred >> 16); |
1277 | #if (DEBUG & (DEBUG_DMA|DEBUG_WRITE)) | 1274 | #if (DEBUG & (DEBUG_DMA|DEBUG_WRITE)) |
1278 | DBG(host->SCpnt, acornscsi_dumpdma(host, "adjo")); | 1275 | DBG(host->SCpnt, acornscsi_dumpdma(host, "adjo")); |
1279 | #endif | 1276 | #endif |
@@ -1292,12 +1289,12 @@ acornscsi_write_pio(AS_Host *host, char *bytes, int *ptr, int len, unsigned int | |||
1292 | int my_ptr = *ptr; | 1289 | int my_ptr = *ptr; |
1293 | 1290 | ||
1294 | while (my_ptr < len) { | 1291 | while (my_ptr < len) { |
1295 | asr = sbic_arm_read(host->scsi.io_port, SBIC_ASR); | 1292 | asr = sbic_arm_read(host, SBIC_ASR); |
1296 | 1293 | ||
1297 | if (asr & ASR_DBR) { | 1294 | if (asr & ASR_DBR) { |
1298 | timeout = max_timeout; | 1295 | timeout = max_timeout; |
1299 | 1296 | ||
1300 | sbic_arm_write(host->scsi.io_port, SBIC_DATA, bytes[my_ptr++]); | 1297 | sbic_arm_write(host, SBIC_DATA, bytes[my_ptr++]); |
1301 | } else if (asr & ASR_INT) | 1298 | } else if (asr & ASR_INT) |
1302 | break; | 1299 | break; |
1303 | else if (--timeout == 0) | 1300 | else if (--timeout == 0) |
@@ -1320,9 +1317,9 @@ acornscsi_sendcommand(AS_Host *host) | |||
1320 | { | 1317 | { |
1321 | struct scsi_cmnd *SCpnt = host->SCpnt; | 1318 | struct scsi_cmnd *SCpnt = host->SCpnt; |
1322 | 1319 | ||
1323 | sbic_arm_write(host->scsi.io_port, SBIC_TRANSCNTH, 0); | 1320 | sbic_arm_write(host, SBIC_TRANSCNTH, 0); |
1324 | sbic_arm_writenext(host->scsi.io_port, 0); | 1321 | sbic_arm_writenext(host, 0); |
1325 | sbic_arm_writenext(host->scsi.io_port, SCpnt->cmd_len - host->scsi.SCp.sent_command); | 1322 | sbic_arm_writenext(host, SCpnt->cmd_len - host->scsi.SCp.sent_command); |
1326 | 1323 | ||
1327 | acornscsi_sbic_issuecmd(host, CMND_XFERINFO); | 1324 | acornscsi_sbic_issuecmd(host, CMND_XFERINFO); |
1328 | 1325 | ||
@@ -1351,7 +1348,7 @@ void acornscsi_sendmessage(AS_Host *host) | |||
1351 | 1348 | ||
1352 | acornscsi_sbic_wait(host, ASR_DBR, ASR_DBR, 1000, "sending message 1"); | 1349 | acornscsi_sbic_wait(host, ASR_DBR, ASR_DBR, 1000, "sending message 1"); |
1353 | 1350 | ||
1354 | sbic_arm_write(host->scsi.io_port, SBIC_DATA, NOP); | 1351 | sbic_arm_write(host, SBIC_DATA, NOP); |
1355 | 1352 | ||
1356 | host->scsi.last_message = NOP; | 1353 | host->scsi.last_message = NOP; |
1357 | #if (DEBUG & DEBUG_MESSAGES) | 1354 | #if (DEBUG & DEBUG_MESSAGES) |
@@ -1365,7 +1362,7 @@ void acornscsi_sendmessage(AS_Host *host) | |||
1365 | 1362 | ||
1366 | acornscsi_sbic_wait(host, ASR_DBR, ASR_DBR, 1000, "sending message 2"); | 1363 | acornscsi_sbic_wait(host, ASR_DBR, ASR_DBR, 1000, "sending message 2"); |
1367 | 1364 | ||
1368 | sbic_arm_write(host->scsi.io_port, SBIC_DATA, msg->msg[0]); | 1365 | sbic_arm_write(host, SBIC_DATA, msg->msg[0]); |
1369 | 1366 | ||
1370 | host->scsi.last_message = msg->msg[0]; | 1367 | host->scsi.last_message = msg->msg[0]; |
1371 | #if (DEBUG & DEBUG_MESSAGES) | 1368 | #if (DEBUG & DEBUG_MESSAGES) |
@@ -1382,9 +1379,9 @@ void acornscsi_sendmessage(AS_Host *host) | |||
1382 | * initiator. This provides an interlock so that the | 1379 | * initiator. This provides an interlock so that the |
1383 | * initiator can determine which message byte is rejected. | 1380 | * initiator can determine which message byte is rejected. |
1384 | */ | 1381 | */ |
1385 | sbic_arm_write(host->scsi.io_port, SBIC_TRANSCNTH, 0); | 1382 | sbic_arm_write(host, SBIC_TRANSCNTH, 0); |
1386 | sbic_arm_writenext(host->scsi.io_port, 0); | 1383 | sbic_arm_writenext(host, 0); |
1387 | sbic_arm_writenext(host->scsi.io_port, message_length); | 1384 | sbic_arm_writenext(host, message_length); |
1388 | acornscsi_sbic_issuecmd(host, CMND_XFERINFO); | 1385 | acornscsi_sbic_issuecmd(host, CMND_XFERINFO); |
1389 | 1386 | ||
1390 | msgnr = 0; | 1387 | msgnr = 0; |
@@ -1421,7 +1418,7 @@ void acornscsi_readstatusbyte(AS_Host *host) | |||
1421 | { | 1418 | { |
1422 | acornscsi_sbic_issuecmd(host, CMND_XFERINFO|CMND_SBT); | 1419 | acornscsi_sbic_issuecmd(host, CMND_XFERINFO|CMND_SBT); |
1423 | acornscsi_sbic_wait(host, ASR_DBR, ASR_DBR, 1000, "reading status byte"); | 1420 | acornscsi_sbic_wait(host, ASR_DBR, ASR_DBR, 1000, "reading status byte"); |
1424 | host->scsi.SCp.Status = sbic_arm_read(host->scsi.io_port, SBIC_DATA); | 1421 | host->scsi.SCp.Status = sbic_arm_read(host, SBIC_DATA); |
1425 | } | 1422 | } |
1426 | 1423 | ||
1427 | /* | 1424 | /* |
@@ -1438,12 +1435,12 @@ unsigned char acornscsi_readmessagebyte(AS_Host *host) | |||
1438 | 1435 | ||
1439 | acornscsi_sbic_wait(host, ASR_DBR, ASR_DBR, 1000, "for message byte"); | 1436 | acornscsi_sbic_wait(host, ASR_DBR, ASR_DBR, 1000, "for message byte"); |
1440 | 1437 | ||
1441 | message = sbic_arm_read(host->scsi.io_port, SBIC_DATA); | 1438 | message = sbic_arm_read(host, SBIC_DATA); |
1442 | 1439 | ||
1443 | /* wait for MSGIN-XFER-PAUSED */ | 1440 | /* wait for MSGIN-XFER-PAUSED */ |
1444 | acornscsi_sbic_wait(host, ASR_INT, ASR_INT, 1000, "for interrupt after message byte"); | 1441 | acornscsi_sbic_wait(host, ASR_INT, ASR_INT, 1000, "for interrupt after message byte"); |
1445 | 1442 | ||
1446 | sbic_arm_read(host->scsi.io_port, SBIC_SSR); | 1443 | sbic_arm_read(host, SBIC_SSR); |
1447 | 1444 | ||
1448 | return message; | 1445 | return message; |
1449 | } | 1446 | } |
@@ -1480,7 +1477,7 @@ void acornscsi_message(AS_Host *host) | |||
1480 | 1477 | ||
1481 | /* wait for next msg-in */ | 1478 | /* wait for next msg-in */ |
1482 | acornscsi_sbic_wait(host, ASR_INT, ASR_INT, 1000, "for interrupt after negate ack"); | 1479 | acornscsi_sbic_wait(host, ASR_INT, ASR_INT, 1000, "for interrupt after negate ack"); |
1483 | sbic_arm_read(host->scsi.io_port, SBIC_SSR); | 1480 | sbic_arm_read(host, SBIC_SSR); |
1484 | } | 1481 | } |
1485 | } while (msgidx < msglen); | 1482 | } while (msgidx < msglen); |
1486 | 1483 | ||
@@ -1602,7 +1599,7 @@ void acornscsi_message(AS_Host *host) | |||
1602 | host->host->host_no, acornscsi_target(host)); | 1599 | host->host->host_no, acornscsi_target(host)); |
1603 | host->device[host->SCpnt->device->id].sync_xfer = SYNCHTRANSFER_2DBA; | 1600 | host->device[host->SCpnt->device->id].sync_xfer = SYNCHTRANSFER_2DBA; |
1604 | host->device[host->SCpnt->device->id].sync_state = SYNC_ASYNCHRONOUS; | 1601 | host->device[host->SCpnt->device->id].sync_state = SYNC_ASYNCHRONOUS; |
1605 | sbic_arm_write(host->scsi.io_port, SBIC_SYNCHTRANSFER, host->device[host->SCpnt->device->id].sync_xfer); | 1602 | sbic_arm_write(host, SBIC_SYNCHTRANSFER, host->device[host->SCpnt->device->id].sync_xfer); |
1606 | break; | 1603 | break; |
1607 | 1604 | ||
1608 | default: | 1605 | default: |
@@ -1652,7 +1649,7 @@ void acornscsi_message(AS_Host *host) | |||
1652 | host->device[host->SCpnt->device->id].sync_xfer = | 1649 | host->device[host->SCpnt->device->id].sync_xfer = |
1653 | calc_sync_xfer(period * 4, length); | 1650 | calc_sync_xfer(period * 4, length); |
1654 | } | 1651 | } |
1655 | sbic_arm_write(host->scsi.io_port, SBIC_SYNCHTRANSFER, host->device[host->SCpnt->device->id].sync_xfer); | 1652 | sbic_arm_write(host, SBIC_SYNCHTRANSFER, host->device[host->SCpnt->device->id].sync_xfer); |
1656 | break; | 1653 | break; |
1657 | #else | 1654 | #else |
1658 | /* We do not accept synchronous transfers. Respond with a | 1655 | /* We do not accept synchronous transfers. Respond with a |
@@ -1792,10 +1789,10 @@ int acornscsi_starttransfer(AS_Host *host) | |||
1792 | 1789 | ||
1793 | residual = scsi_bufflen(host->SCpnt) - host->scsi.SCp.scsi_xferred; | 1790 | residual = scsi_bufflen(host->SCpnt) - host->scsi.SCp.scsi_xferred; |
1794 | 1791 | ||
1795 | sbic_arm_write(host->scsi.io_port, SBIC_SYNCHTRANSFER, host->device[host->SCpnt->device->id].sync_xfer); | 1792 | sbic_arm_write(host, SBIC_SYNCHTRANSFER, host->device[host->SCpnt->device->id].sync_xfer); |
1796 | sbic_arm_writenext(host->scsi.io_port, residual >> 16); | 1793 | sbic_arm_writenext(host, residual >> 16); |
1797 | sbic_arm_writenext(host->scsi.io_port, residual >> 8); | 1794 | sbic_arm_writenext(host, residual >> 8); |
1798 | sbic_arm_writenext(host->scsi.io_port, residual); | 1795 | sbic_arm_writenext(host, residual); |
1799 | acornscsi_sbic_issuecmd(host, CMND_XFERINFO); | 1796 | acornscsi_sbic_issuecmd(host, CMND_XFERINFO); |
1800 | return 1; | 1797 | return 1; |
1801 | } | 1798 | } |
@@ -1816,7 +1813,7 @@ int acornscsi_reconnect(AS_Host *host) | |||
1816 | { | 1813 | { |
1817 | unsigned int target, lun, ok = 0; | 1814 | unsigned int target, lun, ok = 0; |
1818 | 1815 | ||
1819 | target = sbic_arm_read(host->scsi.io_port, SBIC_SOURCEID); | 1816 | target = sbic_arm_read(host, SBIC_SOURCEID); |
1820 | 1817 | ||
1821 | if (!(target & 8)) | 1818 | if (!(target & 8)) |
1822 | printk(KERN_ERR "scsi%d: invalid source id after reselection " | 1819 | printk(KERN_ERR "scsi%d: invalid source id after reselection " |
@@ -1832,7 +1829,7 @@ int acornscsi_reconnect(AS_Host *host) | |||
1832 | host->SCpnt = NULL; | 1829 | host->SCpnt = NULL; |
1833 | } | 1830 | } |
1834 | 1831 | ||
1835 | lun = sbic_arm_read(host->scsi.io_port, SBIC_DATA) & 7; | 1832 | lun = sbic_arm_read(host, SBIC_DATA) & 7; |
1836 | 1833 | ||
1837 | host->scsi.reconnected.target = target; | 1834 | host->scsi.reconnected.target = target; |
1838 | host->scsi.reconnected.lun = lun; | 1835 | host->scsi.reconnected.lun = lun; |
@@ -1952,7 +1949,7 @@ static | |||
1952 | void acornscsi_abortcmd(AS_Host *host, unsigned char tag) | 1949 | void acornscsi_abortcmd(AS_Host *host, unsigned char tag) |
1953 | { | 1950 | { |
1954 | host->scsi.phase = PHASE_ABORTED; | 1951 | host->scsi.phase = PHASE_ABORTED; |
1955 | sbic_arm_write(host->scsi.io_port, SBIC_CMND, CMND_ASSERTATN); | 1952 | sbic_arm_write(host, SBIC_CMND, CMND_ASSERTATN); |
1956 | 1953 | ||
1957 | msgqueue_flush(&host->scsi.msgs); | 1954 | msgqueue_flush(&host->scsi.msgs); |
1958 | #ifdef CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE | 1955 | #ifdef CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE |
@@ -1979,11 +1976,11 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq) | |||
1979 | { | 1976 | { |
1980 | unsigned int asr, ssr; | 1977 | unsigned int asr, ssr; |
1981 | 1978 | ||
1982 | asr = sbic_arm_read(host->scsi.io_port, SBIC_ASR); | 1979 | asr = sbic_arm_read(host, SBIC_ASR); |
1983 | if (!(asr & ASR_INT)) | 1980 | if (!(asr & ASR_INT)) |
1984 | return INTR_IDLE; | 1981 | return INTR_IDLE; |
1985 | 1982 | ||
1986 | ssr = sbic_arm_read(host->scsi.io_port, SBIC_SSR); | 1983 | ssr = sbic_arm_read(host, SBIC_SSR); |
1987 | 1984 | ||
1988 | #if (DEBUG & DEBUG_PHASES) | 1985 | #if (DEBUG & DEBUG_PHASES) |
1989 | print_sbic_status(asr, ssr, host->scsi.phase); | 1986 | print_sbic_status(asr, ssr, host->scsi.phase); |
@@ -1999,15 +1996,15 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq) | |||
1999 | printk(KERN_ERR "scsi%d: reset in standard mode but wanted advanced mode.\n", | 1996 | printk(KERN_ERR "scsi%d: reset in standard mode but wanted advanced mode.\n", |
2000 | host->host->host_no); | 1997 | host->host->host_no); |
2001 | /* setup sbic - WD33C93A */ | 1998 | /* setup sbic - WD33C93A */ |
2002 | sbic_arm_write(host->scsi.io_port, SBIC_OWNID, OWNID_EAF | host->host->this_id); | 1999 | sbic_arm_write(host, SBIC_OWNID, OWNID_EAF | host->host->this_id); |
2003 | sbic_arm_write(host->scsi.io_port, SBIC_CMND, CMND_RESET); | 2000 | sbic_arm_write(host, SBIC_CMND, CMND_RESET); |
2004 | return INTR_IDLE; | 2001 | return INTR_IDLE; |
2005 | 2002 | ||
2006 | case 0x01: /* reset state - advanced */ | 2003 | case 0x01: /* reset state - advanced */ |
2007 | sbic_arm_write(host->scsi.io_port, SBIC_CTRL, INIT_SBICDMA | CTRL_IDI); | 2004 | sbic_arm_write(host, SBIC_CTRL, INIT_SBICDMA | CTRL_IDI); |
2008 | sbic_arm_write(host->scsi.io_port, SBIC_TIMEOUT, TIMEOUT_TIME); | 2005 | sbic_arm_write(host, SBIC_TIMEOUT, TIMEOUT_TIME); |
2009 | sbic_arm_write(host->scsi.io_port, SBIC_SYNCHTRANSFER, SYNCHTRANSFER_2DBA); | 2006 | sbic_arm_write(host, SBIC_SYNCHTRANSFER, SYNCHTRANSFER_2DBA); |
2010 | sbic_arm_write(host->scsi.io_port, SBIC_SOURCEID, SOURCEID_ER | SOURCEID_DSP); | 2007 | sbic_arm_write(host, SBIC_SOURCEID, SOURCEID_ER | SOURCEID_DSP); |
2011 | msgqueue_flush(&host->scsi.msgs); | 2008 | msgqueue_flush(&host->scsi.msgs); |
2012 | return INTR_IDLE; | 2009 | return INTR_IDLE; |
2013 | 2010 | ||
@@ -2025,10 +2022,10 @@ intr_ret_t acornscsi_sbicintr(AS_Host *host, int in_irq) | |||
2025 | msgqueue_flush(&host->scsi.msgs); | 2022 | msgqueue_flush(&host->scsi.msgs); |
2026 | host->dma.transferred = host->scsi.SCp.scsi_xferred; | 2023 | host->dma.transferred = host->scsi.SCp.scsi_xferred; |
2027 | /* 33C93 gives next interrupt indicating bus phase */ | 2024 | /* 33C93 gives next interrupt indicating bus phase */ |
2028 | asr = sbic_arm_read(host->scsi.io_port, SBIC_ASR); | 2025 | asr = sbic_arm_read(host, SBIC_ASR); |
2029 | if (!(asr & ASR_INT)) | 2026 | if (!(asr & ASR_INT)) |
2030 | break; | 2027 | break; |
2031 | ssr = sbic_arm_read(host->scsi.io_port, SBIC_SSR); | 2028 | ssr = sbic_arm_read(host, SBIC_SSR); |
2032 | ADD_STATUS(8, ssr, host->scsi.phase, 1); | 2029 | ADD_STATUS(8, ssr, host->scsi.phase, 1); |
2033 | ADD_STATUS(host->SCpnt->device->id, ssr, host->scsi.phase, 1); | 2030 | ADD_STATUS(host->SCpnt->device->id, ssr, host->scsi.phase, 1); |
2034 | goto connected; | 2031 | goto connected; |
@@ -2476,11 +2473,11 @@ acornscsi_intr(int irq, void *dev_id) | |||
2476 | do { | 2473 | do { |
2477 | ret = INTR_IDLE; | 2474 | ret = INTR_IDLE; |
2478 | 2475 | ||
2479 | iostatus = inb(host->card.io_intr); | 2476 | iostatus = readb(host->fast + INT_REG); |
2480 | 2477 | ||
2481 | if (iostatus & 2) { | 2478 | if (iostatus & 2) { |
2482 | acornscsi_dma_intr(host); | 2479 | acornscsi_dma_intr(host); |
2483 | iostatus = inb(host->card.io_intr); | 2480 | iostatus = readb(host->fast + INT_REG); |
2484 | } | 2481 | } |
2485 | 2482 | ||
2486 | if (iostatus & 8) | 2483 | if (iostatus & 8) |
@@ -2655,7 +2652,7 @@ static enum res_abort acornscsi_do_abort(AS_Host *host, struct scsi_cmnd *SCpnt) | |||
2655 | * busylun bit. | 2652 | * busylun bit. |
2656 | */ | 2653 | */ |
2657 | case PHASE_CONNECTED: | 2654 | case PHASE_CONNECTED: |
2658 | sbic_arm_write(host->scsi.io_port, SBIC_CMND, CMND_DISCONNECT); | 2655 | sbic_arm_write(host, SBIC_CMND, CMND_DISCONNECT); |
2659 | host->SCpnt = NULL; | 2656 | host->SCpnt = NULL; |
2660 | res = res_success_clear; | 2657 | res = res_success_clear; |
2661 | break; | 2658 | break; |
@@ -2699,8 +2696,8 @@ int acornscsi_abort(struct scsi_cmnd *SCpnt) | |||
2699 | #if (DEBUG & DEBUG_ABORT) | 2696 | #if (DEBUG & DEBUG_ABORT) |
2700 | { | 2697 | { |
2701 | int asr, ssr; | 2698 | int asr, ssr; |
2702 | asr = sbic_arm_read(host->scsi.io_port, SBIC_ASR); | 2699 | asr = sbic_arm_read(host, SBIC_ASR); |
2703 | ssr = sbic_arm_read(host->scsi.io_port, SBIC_SSR); | 2700 | ssr = sbic_arm_read(host, SBIC_SSR); |
2704 | 2701 | ||
2705 | printk(KERN_WARNING "acornscsi_abort: "); | 2702 | printk(KERN_WARNING "acornscsi_abort: "); |
2706 | print_sbic_status(asr, ssr, host->scsi.phase); | 2703 | print_sbic_status(asr, ssr, host->scsi.phase); |
@@ -2731,9 +2728,7 @@ int acornscsi_abort(struct scsi_cmnd *SCpnt) | |||
2731 | //#if (DEBUG & DEBUG_ABORT) | 2728 | //#if (DEBUG & DEBUG_ABORT) |
2732 | printk("success\n"); | 2729 | printk("success\n"); |
2733 | //#endif | 2730 | //#endif |
2734 | SCpnt->result = DID_ABORT << 16; | 2731 | result = SUCCESS; |
2735 | SCpnt->scsi_done(SCpnt); | ||
2736 | result = SCSI_ABORT_SUCCESS; | ||
2737 | break; | 2732 | break; |
2738 | 2733 | ||
2739 | /* | 2734 | /* |
@@ -2745,7 +2740,7 @@ int acornscsi_abort(struct scsi_cmnd *SCpnt) | |||
2745 | //#if (DEBUG & DEBUG_ABORT) | 2740 | //#if (DEBUG & DEBUG_ABORT) |
2746 | printk("snooze\n"); | 2741 | printk("snooze\n"); |
2747 | //#endif | 2742 | //#endif |
2748 | result = SCSI_ABORT_SNOOZE; | 2743 | result = FAILED; |
2749 | break; | 2744 | break; |
2750 | 2745 | ||
2751 | /* | 2746 | /* |
@@ -2755,11 +2750,7 @@ int acornscsi_abort(struct scsi_cmnd *SCpnt) | |||
2755 | default: | 2750 | default: |
2756 | case res_not_running: | 2751 | case res_not_running: |
2757 | acornscsi_dumplog(host, SCpnt->device->id); | 2752 | acornscsi_dumplog(host, SCpnt->device->id); |
2758 | #if (DEBUG & DEBUG_ABORT) | 2753 | result = FAILED; |
2759 | result = SCSI_ABORT_SNOOZE; | ||
2760 | #else | ||
2761 | result = SCSI_ABORT_NOT_RUNNING; | ||
2762 | #endif | ||
2763 | //#if (DEBUG & DEBUG_ABORT) | 2754 | //#if (DEBUG & DEBUG_ABORT) |
2764 | printk("not running\n"); | 2755 | printk("not running\n"); |
2765 | //#endif | 2756 | //#endif |
@@ -2770,13 +2761,12 @@ int acornscsi_abort(struct scsi_cmnd *SCpnt) | |||
2770 | } | 2761 | } |
2771 | 2762 | ||
2772 | /* | 2763 | /* |
2773 | * Prototype: int acornscsi_reset(struct scsi_cmnd *SCpnt, unsigned int reset_flags) | 2764 | * Prototype: int acornscsi_reset(struct scsi_cmnd *SCpnt) |
2774 | * Purpose : reset a command on this host/reset this host | 2765 | * Purpose : reset a command on this host/reset this host |
2775 | * Params : SCpnt - command causing reset | 2766 | * Params : SCpnt - command causing reset |
2776 | * result - what type of reset to perform | ||
2777 | * Returns : one of SCSI_RESET_ macros | 2767 | * Returns : one of SCSI_RESET_ macros |
2778 | */ | 2768 | */ |
2779 | int acornscsi_reset(struct scsi_cmnd *SCpnt, unsigned int reset_flags) | 2769 | int acornscsi_bus_reset(struct scsi_cmnd *SCpnt) |
2780 | { | 2770 | { |
2781 | AS_Host *host = (AS_Host *)SCpnt->device->host->hostdata; | 2771 | AS_Host *host = (AS_Host *)SCpnt->device->host->hostdata; |
2782 | struct scsi_cmnd *SCptr; | 2772 | struct scsi_cmnd *SCptr; |
@@ -2787,8 +2777,8 @@ int acornscsi_reset(struct scsi_cmnd *SCpnt, unsigned int reset_flags) | |||
2787 | { | 2777 | { |
2788 | int asr, ssr; | 2778 | int asr, ssr; |
2789 | 2779 | ||
2790 | asr = sbic_arm_read(host->scsi.io_port, SBIC_ASR); | 2780 | asr = sbic_arm_read(host, SBIC_ASR); |
2791 | ssr = sbic_arm_read(host->scsi.io_port, SBIC_SSR); | 2781 | ssr = sbic_arm_read(host, SBIC_SSR); |
2792 | 2782 | ||
2793 | printk(KERN_WARNING "acornscsi_reset: "); | 2783 | printk(KERN_WARNING "acornscsi_reset: "); |
2794 | print_sbic_status(asr, ssr, host->scsi.phase); | 2784 | print_sbic_status(asr, ssr, host->scsi.phase); |
@@ -2798,28 +2788,16 @@ int acornscsi_reset(struct scsi_cmnd *SCpnt, unsigned int reset_flags) | |||
2798 | 2788 | ||
2799 | acornscsi_dma_stop(host); | 2789 | acornscsi_dma_stop(host); |
2800 | 2790 | ||
2801 | SCptr = host->SCpnt; | ||
2802 | |||
2803 | /* | 2791 | /* |
2804 | * do hard reset. This resets all devices on this host, and so we | 2792 | * do hard reset. This resets all devices on this host, and so we |
2805 | * must set the reset status on all commands. | 2793 | * must set the reset status on all commands. |
2806 | */ | 2794 | */ |
2807 | acornscsi_resetcard(host); | 2795 | acornscsi_resetcard(host); |
2808 | 2796 | ||
2809 | /* | ||
2810 | * report reset on commands current connected/disconnected | ||
2811 | */ | ||
2812 | acornscsi_reportstatus(&host->SCpnt, &SCptr, DID_RESET); | ||
2813 | |||
2814 | while ((SCptr = queue_remove(&host->queues.disconnected)) != NULL) | 2797 | while ((SCptr = queue_remove(&host->queues.disconnected)) != NULL) |
2815 | acornscsi_reportstatus(&SCptr, &SCpnt, DID_RESET); | 2798 | ; |
2816 | |||
2817 | if (SCpnt) { | ||
2818 | SCpnt->result = DID_RESET << 16; | ||
2819 | SCpnt->scsi_done(SCpnt); | ||
2820 | } | ||
2821 | 2799 | ||
2822 | return SCSI_RESET_BUS_RESET | SCSI_RESET_HOST_RESET | SCSI_RESET_SUCCESS; | 2800 | return SUCCESS; |
2823 | } | 2801 | } |
2824 | 2802 | ||
2825 | /*============================================================================================== | 2803 | /*============================================================================================== |
@@ -2850,7 +2828,7 @@ char *acornscsi_info(struct Scsi_Host *host) | |||
2850 | " LINK" | 2828 | " LINK" |
2851 | #endif | 2829 | #endif |
2852 | #if (DEBUG & DEBUG_NO_WRITE) | 2830 | #if (DEBUG & DEBUG_NO_WRITE) |
2853 | " NOWRITE ("NO_WRITE_STR")" | 2831 | " NOWRITE (" __stringify(NO_WRITE) ")" |
2854 | #endif | 2832 | #endif |
2855 | , host->hostt->name, host->io_port, host->irq, | 2833 | , host->hostt->name, host->io_port, host->irq, |
2856 | VER_MAJOR, VER_MINOR, VER_PATCH); | 2834 | VER_MAJOR, VER_MINOR, VER_PATCH); |
@@ -2881,15 +2859,15 @@ int acornscsi_proc_info(struct Scsi_Host *instance, char *buffer, char **start, | |||
2881 | " LINK" | 2859 | " LINK" |
2882 | #endif | 2860 | #endif |
2883 | #if (DEBUG & DEBUG_NO_WRITE) | 2861 | #if (DEBUG & DEBUG_NO_WRITE) |
2884 | " NOWRITE ("NO_WRITE_STR")" | 2862 | " NOWRITE (" __stringify(NO_WRITE) ")" |
2885 | #endif | 2863 | #endif |
2886 | "\n\n", VER_MAJOR, VER_MINOR, VER_PATCH); | 2864 | "\n\n", VER_MAJOR, VER_MINOR, VER_PATCH); |
2887 | 2865 | ||
2888 | p += sprintf(p, "SBIC: WD33C93A Address: %08X IRQ : %d\n", | 2866 | p += sprintf(p, "SBIC: WD33C93A Address: %p IRQ : %d\n", |
2889 | host->scsi.io_port, host->scsi.irq); | 2867 | host->base + SBIC_REGIDX, host->scsi.irq); |
2890 | #ifdef USE_DMAC | 2868 | #ifdef USE_DMAC |
2891 | p += sprintf(p, "DMAC: uPC71071 Address: %08X IRQ : %d\n\n", | 2869 | p += sprintf(p, "DMAC: uPC71071 Address: %p IRQ : %d\n\n", |
2892 | host->dma.io_port, host->scsi.irq); | 2870 | host->base + DMAC_OFFSET, host->scsi.irq); |
2893 | #endif | 2871 | #endif |
2894 | 2872 | ||
2895 | p += sprintf(p, "Statistics:\n" | 2873 | p += sprintf(p, "Statistics:\n" |
@@ -2976,9 +2954,8 @@ static struct scsi_host_template acornscsi_template = { | |||
2976 | .name = "AcornSCSI", | 2954 | .name = "AcornSCSI", |
2977 | .info = acornscsi_info, | 2955 | .info = acornscsi_info, |
2978 | .queuecommand = acornscsi_queuecmd, | 2956 | .queuecommand = acornscsi_queuecmd, |
2979 | #warning fixme | 2957 | .eh_abort_handler = acornscsi_abort, |
2980 | .abort = acornscsi_abort, | 2958 | .eh_bus_reset_handler = acornscsi_bus_reset, |
2981 | .reset = acornscsi_reset, | ||
2982 | .can_queue = 16, | 2959 | .can_queue = 16, |
2983 | .this_id = 7, | 2960 | .this_id = 7, |
2984 | .sg_tablesize = SG_ALL, | 2961 | .sg_tablesize = SG_ALL, |
@@ -2992,48 +2969,37 @@ acornscsi_probe(struct expansion_card *ec, const struct ecard_id *id) | |||
2992 | { | 2969 | { |
2993 | struct Scsi_Host *host; | 2970 | struct Scsi_Host *host; |
2994 | AS_Host *ashost; | 2971 | AS_Host *ashost; |
2995 | int ret = -ENOMEM; | 2972 | int ret; |
2996 | 2973 | ||
2997 | host = scsi_host_alloc(&acornscsi_template, sizeof(AS_Host)); | 2974 | ret = ecard_request_resources(ec); |
2998 | if (!host) | 2975 | if (ret) |
2999 | goto out; | 2976 | goto out; |
3000 | 2977 | ||
2978 | host = scsi_host_alloc(&acornscsi_template, sizeof(AS_Host)); | ||
2979 | if (!host) { | ||
2980 | ret = -ENOMEM; | ||
2981 | goto out_release; | ||
2982 | } | ||
2983 | |||
3001 | ashost = (AS_Host *)host->hostdata; | 2984 | ashost = (AS_Host *)host->hostdata; |
3002 | 2985 | ||
3003 | host->io_port = ecard_address(ec, ECARD_MEMC, 0); | 2986 | ashost->base = ecardm_iomap(ec, ECARD_RES_MEMC, 0, 0); |
3004 | host->irq = ec->irq; | 2987 | ashost->fast = ecardm_iomap(ec, ECARD_RES_IOCFAST, 0, 0); |
2988 | if (!ashost->base || !ashost->fast) | ||
2989 | goto out_put; | ||
3005 | 2990 | ||
3006 | ashost->host = host; | 2991 | host->irq = ec->irq; |
3007 | ashost->scsi.io_port = ioaddr(host->io_port + 0x800); | 2992 | ashost->host = host; |
3008 | ashost->scsi.irq = host->irq; | 2993 | ashost->scsi.irq = host->irq; |
3009 | ashost->card.io_intr = POD_SPACE(host->io_port) + 0x800; | ||
3010 | ashost->card.io_page = POD_SPACE(host->io_port) + 0xc00; | ||
3011 | ashost->card.io_ram = ioaddr(host->io_port); | ||
3012 | ashost->dma.io_port = host->io_port + 0xc00; | ||
3013 | ashost->dma.io_intr_clear = POD_SPACE(host->io_port) + 0x800; | ||
3014 | 2994 | ||
3015 | ec->irqaddr = (char *)ioaddr(ashost->card.io_intr); | 2995 | ec->irqaddr = ashost->fast + INT_REG; |
3016 | ec->irqmask = 0x0a; | 2996 | ec->irqmask = 0x0a; |
3017 | 2997 | ||
3018 | ret = -EBUSY; | ||
3019 | if (!request_region(host->io_port + 0x800, 2, "acornscsi(sbic)")) | ||
3020 | goto err_1; | ||
3021 | if (!request_region(ashost->card.io_intr, 1, "acornscsi(intr)")) | ||
3022 | goto err_2; | ||
3023 | if (!request_region(ashost->card.io_page, 1, "acornscsi(page)")) | ||
3024 | goto err_3; | ||
3025 | #ifdef USE_DMAC | ||
3026 | if (!request_region(ashost->dma.io_port, 256, "acornscsi(dmac)")) | ||
3027 | goto err_4; | ||
3028 | #endif | ||
3029 | if (!request_region(host->io_port, 2048, "acornscsi(ram)")) | ||
3030 | goto err_5; | ||
3031 | |||
3032 | ret = request_irq(host->irq, acornscsi_intr, IRQF_DISABLED, "acornscsi", ashost); | 2998 | ret = request_irq(host->irq, acornscsi_intr, IRQF_DISABLED, "acornscsi", ashost); |
3033 | if (ret) { | 2999 | if (ret) { |
3034 | printk(KERN_CRIT "scsi%d: IRQ%d not free: %d\n", | 3000 | printk(KERN_CRIT "scsi%d: IRQ%d not free: %d\n", |
3035 | host->host_no, ashost->scsi.irq, ret); | 3001 | host->host_no, ashost->scsi.irq, ret); |
3036 | goto err_6; | 3002 | goto out_put; |
3037 | } | 3003 | } |
3038 | 3004 | ||
3039 | memset(&ashost->stats, 0, sizeof (ashost->stats)); | 3005 | memset(&ashost->stats, 0, sizeof (ashost->stats)); |
@@ -3045,27 +3011,22 @@ acornscsi_probe(struct expansion_card *ec, const struct ecard_id *id) | |||
3045 | 3011 | ||
3046 | ret = scsi_add_host(host, &ec->dev); | 3012 | ret = scsi_add_host(host, &ec->dev); |
3047 | if (ret) | 3013 | if (ret) |
3048 | goto err_7; | 3014 | goto out_irq; |
3049 | 3015 | ||
3050 | scsi_scan_host(host); | 3016 | scsi_scan_host(host); |
3051 | goto out; | 3017 | goto out; |
3052 | 3018 | ||
3053 | err_7: | 3019 | out_irq: |
3054 | free_irq(host->irq, ashost); | 3020 | free_irq(host->irq, ashost); |
3055 | err_6: | 3021 | msgqueue_free(&ashost->scsi.msgs); |
3056 | release_region(host->io_port, 2048); | 3022 | queue_free(&ashost->queues.disconnected); |
3057 | err_5: | 3023 | queue_free(&ashost->queues.issue); |
3058 | #ifdef USE_DMAC | 3024 | out_put: |
3059 | release_region(ashost->dma.io_port, 256); | 3025 | ecardm_iounmap(ec, ashost->fast); |
3060 | #endif | 3026 | ecardm_iounmap(ec, ashost->base); |
3061 | err_4: | ||
3062 | release_region(ashost->card.io_page, 1); | ||
3063 | err_3: | ||
3064 | release_region(ashost->card.io_intr, 1); | ||
3065 | err_2: | ||
3066 | release_region(host->io_port + 0x800, 2); | ||
3067 | err_1: | ||
3068 | scsi_host_put(host); | 3027 | scsi_host_put(host); |
3028 | out_release: | ||
3029 | ecard_release_resources(ec); | ||
3069 | out: | 3030 | out: |
3070 | return ret; | 3031 | return ret; |
3071 | } | 3032 | } |
@@ -3081,20 +3042,17 @@ static void __devexit acornscsi_remove(struct expansion_card *ec) | |||
3081 | /* | 3042 | /* |
3082 | * Put card into RESET state | 3043 | * Put card into RESET state |
3083 | */ | 3044 | */ |
3084 | outb(0x80, ashost->card.io_page); | 3045 | writeb(0x80, ashost->fast + PAGE_REG); |
3085 | 3046 | ||
3086 | free_irq(host->irq, ashost); | 3047 | free_irq(host->irq, ashost); |
3087 | 3048 | ||
3088 | release_region(host->io_port + 0x800, 2); | ||
3089 | release_region(ashost->card.io_intr, 1); | ||
3090 | release_region(ashost->card.io_page, 1); | ||
3091 | release_region(ashost->dma.io_port, 256); | ||
3092 | release_region(host->io_port, 2048); | ||
3093 | |||
3094 | msgqueue_free(&ashost->scsi.msgs); | 3049 | msgqueue_free(&ashost->scsi.msgs); |
3095 | queue_free(&ashost->queues.disconnected); | 3050 | queue_free(&ashost->queues.disconnected); |
3096 | queue_free(&ashost->queues.issue); | 3051 | queue_free(&ashost->queues.issue); |
3052 | ecardm_iounmap(ec, ashost->fast); | ||
3053 | ecardm_iounmap(ec, ashost->base); | ||
3097 | scsi_host_put(host); | 3054 | scsi_host_put(host); |
3055 | ecard_release_resources(ec); | ||
3098 | } | 3056 | } |
3099 | 3057 | ||
3100 | static const struct ecard_id acornscsi_cids[] = { | 3058 | static const struct ecard_id acornscsi_cids[] = { |
diff --git a/drivers/scsi/arm/acornscsi.h b/drivers/scsi/arm/acornscsi.h index d11424b89f42..8d2172a0b351 100644 --- a/drivers/scsi/arm/acornscsi.h +++ b/drivers/scsi/arm/acornscsi.h | |||
@@ -179,7 +179,6 @@ | |||
179 | 179 | ||
180 | /* miscellaneous internal variables */ | 180 | /* miscellaneous internal variables */ |
181 | 181 | ||
182 | #define POD_SPACE(x) ((x) + 0xd0000) | ||
183 | #define MASK_ON (MASKREG_M3|MASKREG_M2|MASKREG_M1|MASKREG_M0) | 182 | #define MASK_ON (MASKREG_M3|MASKREG_M2|MASKREG_M1|MASKREG_M0) |
184 | #define MASK_OFF (MASKREG_M3|MASKREG_M2|MASKREG_M1) | 183 | #define MASK_OFF (MASKREG_M3|MASKREG_M2|MASKREG_M1) |
185 | 184 | ||
@@ -279,10 +278,11 @@ typedef struct acornscsi_hostdata { | |||
279 | struct Scsi_Host *host; /* host */ | 278 | struct Scsi_Host *host; /* host */ |
280 | struct scsi_cmnd *SCpnt; /* currently processing command */ | 279 | struct scsi_cmnd *SCpnt; /* currently processing command */ |
281 | struct scsi_cmnd *origSCpnt; /* original connecting command */ | 280 | struct scsi_cmnd *origSCpnt; /* original connecting command */ |
281 | void __iomem *base; /* memc base address */ | ||
282 | void __iomem *fast; /* fast ioc base address */ | ||
282 | 283 | ||
283 | /* driver information */ | 284 | /* driver information */ |
284 | struct { | 285 | struct { |
285 | unsigned int io_port; /* base address of WD33C93 */ | ||
286 | unsigned int irq; /* interrupt */ | 286 | unsigned int irq; /* interrupt */ |
287 | phase_t phase; /* current phase */ | 287 | phase_t phase; /* current phase */ |
288 | 288 | ||
@@ -329,8 +329,6 @@ typedef struct acornscsi_hostdata { | |||
329 | 329 | ||
330 | /* DMA info */ | 330 | /* DMA info */ |
331 | struct { | 331 | struct { |
332 | unsigned int io_port; /* base address of DMA controller */ | ||
333 | unsigned int io_intr_clear; /* address of DMA interrupt clear */ | ||
334 | unsigned int free_addr; /* next free address */ | 332 | unsigned int free_addr; /* next free address */ |
335 | unsigned int start_addr; /* start address of current transfer */ | 333 | unsigned int start_addr; /* start address of current transfer */ |
336 | dmadir_t direction; /* dma direction */ | 334 | dmadir_t direction; /* dma direction */ |
@@ -345,9 +343,6 @@ typedef struct acornscsi_hostdata { | |||
345 | 343 | ||
346 | /* card info */ | 344 | /* card info */ |
347 | struct { | 345 | struct { |
348 | unsigned int io_intr; /* base address of interrupt id reg */ | ||
349 | unsigned int io_page; /* base address of page reg */ | ||
350 | unsigned int io_ram; /* base address of RAM access */ | ||
351 | unsigned char page_reg; /* current setting of page reg */ | 346 | unsigned char page_reg; /* current setting of page reg */ |
352 | } card; | 347 | } card; |
353 | 348 | ||
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index 9bc42763623c..5a9754455eed 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig | |||
@@ -448,22 +448,27 @@ config SERIAL_CLPS711X_CONSOLE | |||
448 | your boot loader (lilo or loadlin) about how to pass options to the | 448 | your boot loader (lilo or loadlin) about how to pass options to the |
449 | kernel at boot time.) | 449 | kernel at boot time.) |
450 | 450 | ||
451 | config SERIAL_S3C2410 | 451 | config SERIAL_SAMSUNG |
452 | tristate "Samsung S3C2410/S3C2440/S3C2442/S3C2412 Serial port support" | 452 | tristate "Samsung SoC serial support" |
453 | depends on ARM && ARCH_S3C2410 | 453 | depends on ARM && PLAT_S3C24XX |
454 | select SERIAL_CORE | ||
455 | help | 454 | help |
456 | Support for the on-chip UARTs on the Samsung S3C24XX series CPUs, | 455 | Support for the on-chip UARTs on the Samsung S3C24XX series CPUs, |
457 | providing /dev/ttySAC0, 1 and 2 (note, some machines may not | 456 | providing /dev/ttySAC0, 1 and 2 (note, some machines may not |
458 | provide all of these ports, depending on how the serial port | 457 | provide all of these ports, depending on how the serial port |
459 | pins are configured. | 458 | pins are configured. |
460 | 459 | ||
461 | Currently this driver supports the UARTS on the S3C2410, S3C2440, | 460 | config SERIAL_SAMSUNG_DEBUG |
462 | S3C2442, S3C2412 and S3C2413 CPUs. | 461 | bool "Samsung SoC serial debug" |
462 | depends on SERIAL_SAMSUNG | ||
463 | help | ||
464 | Add support for debugging the serial driver. Since this is | ||
465 | generally being used as a console, we use our own output | ||
466 | routines that go via the low-level debug printascii() | ||
467 | function. | ||
463 | 468 | ||
464 | config SERIAL_S3C2410_CONSOLE | 469 | config SERIAL_SAMSUNG_CONSOLE |
465 | bool "Support for console on S3C2410 serial port" | 470 | bool "Support for console on Samsung SoC serial port" |
466 | depends on SERIAL_S3C2410=y | 471 | depends on SERIAL_SAMSUNG=y |
467 | select SERIAL_CORE_CONSOLE | 472 | select SERIAL_CORE_CONSOLE |
468 | help | 473 | help |
469 | Allow selection of the S3C24XX on-board serial ports for use as | 474 | Allow selection of the S3C24XX on-board serial ports for use as |
@@ -476,6 +481,37 @@ config SERIAL_S3C2410_CONSOLE | |||
476 | your boot loader about how to pass options to the kernel at | 481 | your boot loader about how to pass options to the kernel at |
477 | boot time.) | 482 | boot time.) |
478 | 483 | ||
484 | config SERIAL_S3C2400 | ||
485 | tristate "Samsung S3C2410 Serial port support" | ||
486 | depends on ARM && SERIAL_SAMSUNG && CPU_S3C2400 | ||
487 | default y if CPU_S3C2400 | ||
488 | help | ||
489 | Serial port support for the Samsung S3C2400 SoC | ||
490 | |||
491 | config SERIAL_S3C2410 | ||
492 | tristate "Samsung S3C2410 Serial port support" | ||
493 | depends on SERIAL_SAMSUNG && CPU_S3C2410 | ||
494 | default y if CPU_S3C2410 | ||
495 | help | ||
496 | Serial port support for the Samsung S3C2410 SoC | ||
497 | |||
498 | config SERIAL_S3C2412 | ||
499 | tristate "Samsung S3C2412/S3C2413 Serial port support" | ||
500 | depends on SERIAL_SAMSUNG && CPU_S3C2412 | ||
501 | default y if CPU_S3C2412 | ||
502 | help | ||
503 | Serial port support for the Samsung S3C2412 and S3C2413 SoC | ||
504 | |||
505 | config SERIAL_S3C2440 | ||
506 | tristate "Samsung S3C2440/S3C2442 Serial port support" | ||
507 | depends on SERIAL_SAMSUNG && (CPU_S3C2440 || CPU_S3C2442) | ||
508 | default y if CPU_S3C2440 | ||
509 | default y if CPU_S3C2442 | ||
510 | help | ||
511 | Serial port support for the Samsung S3C2440 and S3C2442 SoC | ||
512 | |||
513 | |||
514 | |||
479 | config SERIAL_DZ | 515 | config SERIAL_DZ |
480 | bool "DECstation DZ serial driver" | 516 | bool "DECstation DZ serial driver" |
481 | depends on MACH_DECSTATION && 32BIT | 517 | depends on MACH_DECSTATION && 32BIT |
diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile index 0d9c09b1e836..7d85c1fbe7e0 100644 --- a/drivers/serial/Makefile +++ b/drivers/serial/Makefile | |||
@@ -28,7 +28,11 @@ obj-$(CONFIG_SERIAL_PNX8XXX) += pnx8xxx_uart.o | |||
28 | obj-$(CONFIG_SERIAL_SA1100) += sa1100.o | 28 | obj-$(CONFIG_SERIAL_SA1100) += sa1100.o |
29 | obj-$(CONFIG_SERIAL_BFIN) += bfin_5xx.o | 29 | obj-$(CONFIG_SERIAL_BFIN) += bfin_5xx.o |
30 | obj-$(CONFIG_SERIAL_BFIN_SPORT) += bfin_sport_uart.o | 30 | obj-$(CONFIG_SERIAL_BFIN_SPORT) += bfin_sport_uart.o |
31 | obj-$(CONFIG_SERIAL_SAMSUNG) += samsung.o | ||
32 | obj-$(CONFIG_SERIAL_S3C2400) += s3c2400.o | ||
31 | obj-$(CONFIG_SERIAL_S3C2410) += s3c2410.o | 33 | obj-$(CONFIG_SERIAL_S3C2410) += s3c2410.o |
34 | obj-$(CONFIG_SERIAL_S3C2412) += s3c2412.o | ||
35 | obj-$(CONFIG_SERIAL_S3C2440) += s3c2440.o | ||
32 | obj-$(CONFIG_SERIAL_SUNCORE) += suncore.o | 36 | obj-$(CONFIG_SERIAL_SUNCORE) += suncore.o |
33 | obj-$(CONFIG_SERIAL_SUNHV) += sunhv.o | 37 | obj-$(CONFIG_SERIAL_SUNHV) += sunhv.o |
34 | obj-$(CONFIG_SERIAL_SUNZILOG) += sunzilog.o | 38 | obj-$(CONFIG_SERIAL_SUNZILOG) += sunzilog.o |
diff --git a/drivers/serial/s3c2400.c b/drivers/serial/s3c2400.c new file mode 100644 index 000000000000..a1102053e553 --- /dev/null +++ b/drivers/serial/s3c2400.c | |||
@@ -0,0 +1,106 @@ | |||
1 | /* linux/drivers/serial/s3c240.c | ||
2 | * | ||
3 | * Driver for Samsung SoC onboard UARTs. | ||
4 | * | ||
5 | * Ben Dooks, Copyright (c) 2003-2005 Simtec Electronics | ||
6 | * http://armlinux.simtec.co.uk/ | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #include <linux/module.h> | ||
14 | #include <linux/ioport.h> | ||
15 | #include <linux/io.h> | ||
16 | #include <linux/platform_device.h> | ||
17 | |||
18 | #include <asm/irq.h> | ||
19 | |||
20 | #include <asm/hardware.h> | ||
21 | |||
22 | #include <asm/plat-s3c/regs-serial.h> | ||
23 | #include <asm/arch/regs-gpio.h> | ||
24 | |||
25 | #include "samsung.h" | ||
26 | |||
27 | static int s3c2400_serial_getsource(struct uart_port *port, | ||
28 | struct s3c24xx_uart_clksrc *clk) | ||
29 | { | ||
30 | clk->divisor = 1; | ||
31 | clk->name = "pclk"; | ||
32 | |||
33 | return 0; | ||
34 | } | ||
35 | |||
36 | static int s3c2400_serial_setsource(struct uart_port *port, | ||
37 | struct s3c24xx_uart_clksrc *clk) | ||
38 | { | ||
39 | return 0; | ||
40 | } | ||
41 | |||
42 | static int s3c2400_serial_resetport(struct uart_port *port, | ||
43 | struct s3c2410_uartcfg *cfg) | ||
44 | { | ||
45 | dbg("s3c2400_serial_resetport: port=%p (%08lx), cfg=%p\n", | ||
46 | port, port->mapbase, cfg); | ||
47 | |||
48 | wr_regl(port, S3C2410_UCON, cfg->ucon); | ||
49 | wr_regl(port, S3C2410_ULCON, cfg->ulcon); | ||
50 | |||
51 | /* reset both fifos */ | ||
52 | |||
53 | wr_regl(port, S3C2410_UFCON, cfg->ufcon | S3C2410_UFCON_RESETBOTH); | ||
54 | wr_regl(port, S3C2410_UFCON, cfg->ufcon); | ||
55 | |||
56 | return 0; | ||
57 | } | ||
58 | |||
59 | static struct s3c24xx_uart_info s3c2400_uart_inf = { | ||
60 | .name = "Samsung S3C2400 UART", | ||
61 | .type = PORT_S3C2400, | ||
62 | .fifosize = 16, | ||
63 | .rx_fifomask = S3C2410_UFSTAT_RXMASK, | ||
64 | .rx_fifoshift = S3C2410_UFSTAT_RXSHIFT, | ||
65 | .rx_fifofull = S3C2410_UFSTAT_RXFULL, | ||
66 | .tx_fifofull = S3C2410_UFSTAT_TXFULL, | ||
67 | .tx_fifomask = S3C2410_UFSTAT_TXMASK, | ||
68 | .tx_fifoshift = S3C2410_UFSTAT_TXSHIFT, | ||
69 | .get_clksrc = s3c2400_serial_getsource, | ||
70 | .set_clksrc = s3c2400_serial_setsource, | ||
71 | .reset_port = s3c2400_serial_resetport, | ||
72 | }; | ||
73 | |||
74 | static int s3c2400_serial_probe(struct platform_device *dev) | ||
75 | { | ||
76 | return s3c24xx_serial_probe(dev, &s3c2400_uart_inf); | ||
77 | } | ||
78 | |||
79 | static struct platform_driver s3c2400_serial_drv = { | ||
80 | .probe = s3c2400_serial_probe, | ||
81 | .remove = s3c24xx_serial_remove, | ||
82 | .driver = { | ||
83 | .name = "s3c2400-uart", | ||
84 | .owner = THIS_MODULE, | ||
85 | }, | ||
86 | }; | ||
87 | |||
88 | s3c24xx_console_init(&s3c2400_serial_drv, &s3c2400_uart_inf); | ||
89 | |||
90 | static inline int s3c2400_serial_init(void) | ||
91 | { | ||
92 | return s3c24xx_serial_init(&s3c2400_serial_drv, &s3c2400_uart_inf); | ||
93 | } | ||
94 | |||
95 | static inline void s3c2400_serial_exit(void) | ||
96 | { | ||
97 | platform_driver_unregister(&s3c2400_serial_drv); | ||
98 | } | ||
99 | |||
100 | module_init(s3c2400_serial_init); | ||
101 | module_exit(s3c2400_serial_exit); | ||
102 | |||
103 | MODULE_LICENSE("GPL v2"); | ||
104 | MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>"); | ||
105 | MODULE_DESCRIPTION("Samsung S3C2400 SoC Serial port driver"); | ||
106 | MODULE_ALIAS("platform:s3c2400-uart"); | ||
diff --git a/drivers/serial/s3c2410.c b/drivers/serial/s3c2410.c index 2b6a013639e6..c5f03f41686f 100644 --- a/drivers/serial/s3c2410.c +++ b/drivers/serial/s3c2410.c | |||
@@ -1,1270 +1,30 @@ | |||
1 | /* | 1 | /* linux/drivers/serial/s3c2410.c |
2 | * linux/drivers/serial/s3c2410.c | ||
3 | * | 2 | * |
4 | * Driver for onboard UARTs on the Samsung S3C24XX | 3 | * Driver for Samsung S3C2410 SoC onboard UARTs. |
5 | * | 4 | * |
6 | * Based on drivers/char/serial.c and drivers/char/21285.c | 5 | * Ben Dooks, Copyright (c) 2003-2005,2008 Simtec Electronics |
6 | * http://armlinux.simtec.co.uk/ | ||
7 | * | 7 | * |
8 | * Ben Dooks, (c) 2003-2005 Simtec Electronics | 8 | * This program is free software; you can redistribute it and/or modify |
9 | * http://www.simtec.co.uk/products/SWLINUX/ | 9 | * it under the terms of the GNU General Public License version 2 as |
10 | * | 10 | * published by the Free Software Foundation. |
11 | * Changelog: | ||
12 | * | ||
13 | * 22-Jul-2004 BJD Finished off device rewrite | ||
14 | * | ||
15 | * 21-Jul-2004 BJD Thanks to <herbet@13thfloor.at> for pointing out | ||
16 | * problems with baud rate and loss of IR settings. Update | ||
17 | * to add configuration via platform_device structure | ||
18 | * | ||
19 | * 28-Sep-2004 BJD Re-write for the following items | ||
20 | * - S3C2410 and S3C2440 serial support | ||
21 | * - Power Management support | ||
22 | * - Fix console via IrDA devices | ||
23 | * - SysReq (Herbert Pötzl) | ||
24 | * - Break character handling (Herbert Pötzl) | ||
25 | * - spin-lock initialisation (Dimitry Andric) | ||
26 | * - added clock control | ||
27 | * - updated init code to use platform_device info | ||
28 | * | ||
29 | * 06-Mar-2005 BJD Add s3c2440 fclk clock source | ||
30 | * | ||
31 | * 09-Mar-2005 BJD Add s3c2400 support | ||
32 | * | ||
33 | * 10-Mar-2005 LCVR Changed S3C2410_VA_UART to S3C24XX_VA_UART | ||
34 | */ | ||
35 | |||
36 | /* Note on 2440 fclk clock source handling | ||
37 | * | ||
38 | * Whilst it is possible to use the fclk as clock source, the method | ||
39 | * of properly switching too/from this is currently un-implemented, so | ||
40 | * whichever way is configured at startup is the one that will be used. | ||
41 | */ | ||
42 | |||
43 | /* Hote on 2410 error handling | ||
44 | * | ||
45 | * The s3c2410 manual has a love/hate affair with the contents of the | ||
46 | * UERSTAT register in the UART blocks, and keeps marking some of the | ||
47 | * error bits as reserved. Having checked with the s3c2410x01, | ||
48 | * it copes with BREAKs properly, so I am happy to ignore the RESERVED | ||
49 | * feature from the latter versions of the manual. | ||
50 | * | ||
51 | * If it becomes aparrent that latter versions of the 2410 remove these | ||
52 | * bits, then action will have to be taken to differentiate the versions | ||
53 | * and change the policy on BREAK | ||
54 | * | ||
55 | * BJD, 04-Nov-2004 | ||
56 | */ | 11 | */ |
57 | 12 | ||
58 | |||
59 | #if defined(CONFIG_SERIAL_S3C2410_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) | ||
60 | #define SUPPORT_SYSRQ | ||
61 | #endif | ||
62 | |||
63 | #include <linux/module.h> | 13 | #include <linux/module.h> |
64 | #include <linux/ioport.h> | 14 | #include <linux/ioport.h> |
15 | #include <linux/io.h> | ||
65 | #include <linux/platform_device.h> | 16 | #include <linux/platform_device.h> |
66 | #include <linux/init.h> | 17 | #include <linux/init.h> |
67 | #include <linux/sysrq.h> | ||
68 | #include <linux/console.h> | ||
69 | #include <linux/tty.h> | ||
70 | #include <linux/tty_flip.h> | ||
71 | #include <linux/serial_core.h> | 18 | #include <linux/serial_core.h> |
72 | #include <linux/serial.h> | 19 | #include <linux/serial.h> |
73 | #include <linux/delay.h> | ||
74 | #include <linux/clk.h> | ||
75 | 20 | ||
76 | #include <asm/io.h> | ||
77 | #include <asm/irq.h> | 21 | #include <asm/irq.h> |
78 | |||
79 | #include <asm/hardware.h> | 22 | #include <asm/hardware.h> |
80 | 23 | ||
81 | #include <asm/plat-s3c/regs-serial.h> | 24 | #include <asm/plat-s3c/regs-serial.h> |
82 | #include <asm/arch/regs-gpio.h> | 25 | #include <asm/arch/regs-gpio.h> |
83 | 26 | ||
84 | /* structures */ | 27 | #include "samsung.h" |
85 | |||
86 | struct s3c24xx_uart_info { | ||
87 | char *name; | ||
88 | unsigned int type; | ||
89 | unsigned int fifosize; | ||
90 | unsigned long rx_fifomask; | ||
91 | unsigned long rx_fifoshift; | ||
92 | unsigned long rx_fifofull; | ||
93 | unsigned long tx_fifomask; | ||
94 | unsigned long tx_fifoshift; | ||
95 | unsigned long tx_fifofull; | ||
96 | |||
97 | /* clock source control */ | ||
98 | |||
99 | int (*get_clksrc)(struct uart_port *, struct s3c24xx_uart_clksrc *clk); | ||
100 | int (*set_clksrc)(struct uart_port *, struct s3c24xx_uart_clksrc *clk); | ||
101 | |||
102 | /* uart controls */ | ||
103 | int (*reset_port)(struct uart_port *, struct s3c2410_uartcfg *); | ||
104 | }; | ||
105 | |||
106 | struct s3c24xx_uart_port { | ||
107 | unsigned char rx_claimed; | ||
108 | unsigned char tx_claimed; | ||
109 | |||
110 | struct s3c24xx_uart_info *info; | ||
111 | struct s3c24xx_uart_clksrc *clksrc; | ||
112 | struct clk *clk; | ||
113 | struct clk *baudclk; | ||
114 | struct uart_port port; | ||
115 | }; | ||
116 | |||
117 | |||
118 | /* configuration defines */ | ||
119 | |||
120 | #if 0 | ||
121 | #if 1 | ||
122 | /* send debug to the low-level output routines */ | ||
123 | |||
124 | extern void printascii(const char *); | ||
125 | |||
126 | static void | ||
127 | s3c24xx_serial_dbg(const char *fmt, ...) | ||
128 | { | ||
129 | va_list va; | ||
130 | char buff[256]; | ||
131 | |||
132 | va_start(va, fmt); | ||
133 | vsprintf(buff, fmt, va); | ||
134 | va_end(va); | ||
135 | |||
136 | printascii(buff); | ||
137 | } | ||
138 | |||
139 | #define dbg(x...) s3c24xx_serial_dbg(x) | ||
140 | |||
141 | #else | ||
142 | #define dbg(x...) printk(KERN_DEBUG "s3c24xx: "); | ||
143 | #endif | ||
144 | #else /* no debug */ | ||
145 | #define dbg(x...) do {} while(0) | ||
146 | #endif | ||
147 | |||
148 | /* UART name and device definitions */ | ||
149 | |||
150 | #define S3C24XX_SERIAL_NAME "ttySAC" | ||
151 | #define S3C24XX_SERIAL_MAJOR 204 | ||
152 | #define S3C24XX_SERIAL_MINOR 64 | ||
153 | |||
154 | |||
155 | /* conversion functions */ | ||
156 | |||
157 | #define s3c24xx_dev_to_port(__dev) (struct uart_port *)dev_get_drvdata(__dev) | ||
158 | #define s3c24xx_dev_to_cfg(__dev) (struct s3c2410_uartcfg *)((__dev)->platform_data) | ||
159 | |||
160 | /* we can support 3 uarts, but not always use them */ | ||
161 | |||
162 | #ifdef CONFIG_CPU_S3C2400 | ||
163 | #define NR_PORTS (2) | ||
164 | #else | ||
165 | #define NR_PORTS (3) | ||
166 | #endif | ||
167 | |||
168 | /* port irq numbers */ | ||
169 | |||
170 | #define TX_IRQ(port) ((port)->irq + 1) | ||
171 | #define RX_IRQ(port) ((port)->irq) | ||
172 | |||
173 | /* register access controls */ | ||
174 | |||
175 | #define portaddr(port, reg) ((port)->membase + (reg)) | ||
176 | |||
177 | #define rd_regb(port, reg) (__raw_readb(portaddr(port, reg))) | ||
178 | #define rd_regl(port, reg) (__raw_readl(portaddr(port, reg))) | ||
179 | |||
180 | #define wr_regb(port, reg, val) \ | ||
181 | do { __raw_writeb(val, portaddr(port, reg)); } while(0) | ||
182 | |||
183 | #define wr_regl(port, reg, val) \ | ||
184 | do { __raw_writel(val, portaddr(port, reg)); } while(0) | ||
185 | |||
186 | /* macros to change one thing to another */ | ||
187 | |||
188 | #define tx_enabled(port) ((port)->unused[0]) | ||
189 | #define rx_enabled(port) ((port)->unused[1]) | ||
190 | |||
191 | /* flag to ignore all characters comming in */ | ||
192 | #define RXSTAT_DUMMY_READ (0x10000000) | ||
193 | |||
194 | static inline struct s3c24xx_uart_port *to_ourport(struct uart_port *port) | ||
195 | { | ||
196 | return container_of(port, struct s3c24xx_uart_port, port); | ||
197 | } | ||
198 | |||
199 | /* translate a port to the device name */ | ||
200 | |||
201 | static inline const char *s3c24xx_serial_portname(struct uart_port *port) | ||
202 | { | ||
203 | return to_platform_device(port->dev)->name; | ||
204 | } | ||
205 | |||
206 | static int s3c24xx_serial_txempty_nofifo(struct uart_port *port) | ||
207 | { | ||
208 | return (rd_regl(port, S3C2410_UTRSTAT) & S3C2410_UTRSTAT_TXE); | ||
209 | } | ||
210 | |||
211 | static void s3c24xx_serial_rx_enable(struct uart_port *port) | ||
212 | { | ||
213 | unsigned long flags; | ||
214 | unsigned int ucon, ufcon; | ||
215 | int count = 10000; | ||
216 | |||
217 | spin_lock_irqsave(&port->lock, flags); | ||
218 | |||
219 | while (--count && !s3c24xx_serial_txempty_nofifo(port)) | ||
220 | udelay(100); | ||
221 | |||
222 | ufcon = rd_regl(port, S3C2410_UFCON); | ||
223 | ufcon |= S3C2410_UFCON_RESETRX; | ||
224 | wr_regl(port, S3C2410_UFCON, ufcon); | ||
225 | |||
226 | ucon = rd_regl(port, S3C2410_UCON); | ||
227 | ucon |= S3C2410_UCON_RXIRQMODE; | ||
228 | wr_regl(port, S3C2410_UCON, ucon); | ||
229 | |||
230 | rx_enabled(port) = 1; | ||
231 | spin_unlock_irqrestore(&port->lock, flags); | ||
232 | } | ||
233 | |||
234 | static void s3c24xx_serial_rx_disable(struct uart_port *port) | ||
235 | { | ||
236 | unsigned long flags; | ||
237 | unsigned int ucon; | ||
238 | |||
239 | spin_lock_irqsave(&port->lock, flags); | ||
240 | |||
241 | ucon = rd_regl(port, S3C2410_UCON); | ||
242 | ucon &= ~S3C2410_UCON_RXIRQMODE; | ||
243 | wr_regl(port, S3C2410_UCON, ucon); | ||
244 | |||
245 | rx_enabled(port) = 0; | ||
246 | spin_unlock_irqrestore(&port->lock, flags); | ||
247 | } | ||
248 | |||
249 | static void s3c24xx_serial_stop_tx(struct uart_port *port) | ||
250 | { | ||
251 | if (tx_enabled(port)) { | ||
252 | disable_irq(TX_IRQ(port)); | ||
253 | tx_enabled(port) = 0; | ||
254 | if (port->flags & UPF_CONS_FLOW) | ||
255 | s3c24xx_serial_rx_enable(port); | ||
256 | } | ||
257 | } | ||
258 | |||
259 | static void s3c24xx_serial_start_tx(struct uart_port *port) | ||
260 | { | ||
261 | if (!tx_enabled(port)) { | ||
262 | if (port->flags & UPF_CONS_FLOW) | ||
263 | s3c24xx_serial_rx_disable(port); | ||
264 | |||
265 | enable_irq(TX_IRQ(port)); | ||
266 | tx_enabled(port) = 1; | ||
267 | } | ||
268 | } | ||
269 | |||
270 | |||
271 | static void s3c24xx_serial_stop_rx(struct uart_port *port) | ||
272 | { | ||
273 | if (rx_enabled(port)) { | ||
274 | dbg("s3c24xx_serial_stop_rx: port=%p\n", port); | ||
275 | disable_irq(RX_IRQ(port)); | ||
276 | rx_enabled(port) = 0; | ||
277 | } | ||
278 | } | ||
279 | |||
280 | static void s3c24xx_serial_enable_ms(struct uart_port *port) | ||
281 | { | ||
282 | } | ||
283 | |||
284 | static inline struct s3c24xx_uart_info *s3c24xx_port_to_info(struct uart_port *port) | ||
285 | { | ||
286 | return to_ourport(port)->info; | ||
287 | } | ||
288 | |||
289 | static inline struct s3c2410_uartcfg *s3c24xx_port_to_cfg(struct uart_port *port) | ||
290 | { | ||
291 | if (port->dev == NULL) | ||
292 | return NULL; | ||
293 | |||
294 | return (struct s3c2410_uartcfg *)port->dev->platform_data; | ||
295 | } | ||
296 | |||
297 | static int s3c24xx_serial_rx_fifocnt(struct s3c24xx_uart_port *ourport, | ||
298 | unsigned long ufstat) | ||
299 | { | ||
300 | struct s3c24xx_uart_info *info = ourport->info; | ||
301 | |||
302 | if (ufstat & info->rx_fifofull) | ||
303 | return info->fifosize; | ||
304 | |||
305 | return (ufstat & info->rx_fifomask) >> info->rx_fifoshift; | ||
306 | } | ||
307 | |||
308 | |||
309 | /* ? - where has parity gone?? */ | ||
310 | #define S3C2410_UERSTAT_PARITY (0x1000) | ||
311 | |||
312 | static irqreturn_t | ||
313 | s3c24xx_serial_rx_chars(int irq, void *dev_id) | ||
314 | { | ||
315 | struct s3c24xx_uart_port *ourport = dev_id; | ||
316 | struct uart_port *port = &ourport->port; | ||
317 | struct tty_struct *tty = port->info->tty; | ||
318 | unsigned int ufcon, ch, flag, ufstat, uerstat; | ||
319 | int max_count = 64; | ||
320 | |||
321 | while (max_count-- > 0) { | ||
322 | ufcon = rd_regl(port, S3C2410_UFCON); | ||
323 | ufstat = rd_regl(port, S3C2410_UFSTAT); | ||
324 | |||
325 | if (s3c24xx_serial_rx_fifocnt(ourport, ufstat) == 0) | ||
326 | break; | ||
327 | |||
328 | uerstat = rd_regl(port, S3C2410_UERSTAT); | ||
329 | ch = rd_regb(port, S3C2410_URXH); | ||
330 | |||
331 | if (port->flags & UPF_CONS_FLOW) { | ||
332 | int txe = s3c24xx_serial_txempty_nofifo(port); | ||
333 | |||
334 | if (rx_enabled(port)) { | ||
335 | if (!txe) { | ||
336 | rx_enabled(port) = 0; | ||
337 | continue; | ||
338 | } | ||
339 | } else { | ||
340 | if (txe) { | ||
341 | ufcon |= S3C2410_UFCON_RESETRX; | ||
342 | wr_regl(port, S3C2410_UFCON, ufcon); | ||
343 | rx_enabled(port) = 1; | ||
344 | goto out; | ||
345 | } | ||
346 | continue; | ||
347 | } | ||
348 | } | ||
349 | |||
350 | /* insert the character into the buffer */ | ||
351 | |||
352 | flag = TTY_NORMAL; | ||
353 | port->icount.rx++; | ||
354 | |||
355 | if (unlikely(uerstat & S3C2410_UERSTAT_ANY)) { | ||
356 | dbg("rxerr: port ch=0x%02x, rxs=0x%08x\n", | ||
357 | ch, uerstat); | ||
358 | |||
359 | /* check for break */ | ||
360 | if (uerstat & S3C2410_UERSTAT_BREAK) { | ||
361 | dbg("break!\n"); | ||
362 | port->icount.brk++; | ||
363 | if (uart_handle_break(port)) | ||
364 | goto ignore_char; | ||
365 | } | ||
366 | |||
367 | if (uerstat & S3C2410_UERSTAT_FRAME) | ||
368 | port->icount.frame++; | ||
369 | if (uerstat & S3C2410_UERSTAT_OVERRUN) | ||
370 | port->icount.overrun++; | ||
371 | |||
372 | uerstat &= port->read_status_mask; | ||
373 | |||
374 | if (uerstat & S3C2410_UERSTAT_BREAK) | ||
375 | flag = TTY_BREAK; | ||
376 | else if (uerstat & S3C2410_UERSTAT_PARITY) | ||
377 | flag = TTY_PARITY; | ||
378 | else if (uerstat & ( S3C2410_UERSTAT_FRAME | S3C2410_UERSTAT_OVERRUN)) | ||
379 | flag = TTY_FRAME; | ||
380 | } | ||
381 | |||
382 | if (uart_handle_sysrq_char(port, ch)) | ||
383 | goto ignore_char; | ||
384 | |||
385 | uart_insert_char(port, uerstat, S3C2410_UERSTAT_OVERRUN, ch, flag); | ||
386 | |||
387 | ignore_char: | ||
388 | continue; | ||
389 | } | ||
390 | tty_flip_buffer_push(tty); | ||
391 | |||
392 | out: | ||
393 | return IRQ_HANDLED; | ||
394 | } | ||
395 | |||
396 | static irqreturn_t s3c24xx_serial_tx_chars(int irq, void *id) | ||
397 | { | ||
398 | struct s3c24xx_uart_port *ourport = id; | ||
399 | struct uart_port *port = &ourport->port; | ||
400 | struct circ_buf *xmit = &port->info->xmit; | ||
401 | int count = 256; | ||
402 | |||
403 | if (port->x_char) { | ||
404 | wr_regb(port, S3C2410_UTXH, port->x_char); | ||
405 | port->icount.tx++; | ||
406 | port->x_char = 0; | ||
407 | goto out; | ||
408 | } | ||
409 | |||
410 | /* if there isnt anything more to transmit, or the uart is now | ||
411 | * stopped, disable the uart and exit | ||
412 | */ | ||
413 | |||
414 | if (uart_circ_empty(xmit) || uart_tx_stopped(port)) { | ||
415 | s3c24xx_serial_stop_tx(port); | ||
416 | goto out; | ||
417 | } | ||
418 | |||
419 | /* try and drain the buffer... */ | ||
420 | |||
421 | while (!uart_circ_empty(xmit) && count-- > 0) { | ||
422 | if (rd_regl(port, S3C2410_UFSTAT) & ourport->info->tx_fifofull) | ||
423 | break; | ||
424 | |||
425 | wr_regb(port, S3C2410_UTXH, xmit->buf[xmit->tail]); | ||
426 | xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); | ||
427 | port->icount.tx++; | ||
428 | } | ||
429 | |||
430 | if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) | ||
431 | uart_write_wakeup(port); | ||
432 | |||
433 | if (uart_circ_empty(xmit)) | ||
434 | s3c24xx_serial_stop_tx(port); | ||
435 | |||
436 | out: | ||
437 | return IRQ_HANDLED; | ||
438 | } | ||
439 | |||
440 | static unsigned int s3c24xx_serial_tx_empty(struct uart_port *port) | ||
441 | { | ||
442 | struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); | ||
443 | unsigned long ufstat = rd_regl(port, S3C2410_UFSTAT); | ||
444 | unsigned long ufcon = rd_regl(port, S3C2410_UFCON); | ||
445 | |||
446 | if (ufcon & S3C2410_UFCON_FIFOMODE) { | ||
447 | if ((ufstat & info->tx_fifomask) != 0 || | ||
448 | (ufstat & info->tx_fifofull)) | ||
449 | return 0; | ||
450 | |||
451 | return 1; | ||
452 | } | ||
453 | |||
454 | return s3c24xx_serial_txempty_nofifo(port); | ||
455 | } | ||
456 | |||
457 | /* no modem control lines */ | ||
458 | static unsigned int s3c24xx_serial_get_mctrl(struct uart_port *port) | ||
459 | { | ||
460 | unsigned int umstat = rd_regb(port,S3C2410_UMSTAT); | ||
461 | |||
462 | if (umstat & S3C2410_UMSTAT_CTS) | ||
463 | return TIOCM_CAR | TIOCM_DSR | TIOCM_CTS; | ||
464 | else | ||
465 | return TIOCM_CAR | TIOCM_DSR; | ||
466 | } | ||
467 | |||
468 | static void s3c24xx_serial_set_mctrl(struct uart_port *port, unsigned int mctrl) | ||
469 | { | ||
470 | /* todo - possibly remove AFC and do manual CTS */ | ||
471 | } | ||
472 | |||
473 | static void s3c24xx_serial_break_ctl(struct uart_port *port, int break_state) | ||
474 | { | ||
475 | unsigned long flags; | ||
476 | unsigned int ucon; | ||
477 | |||
478 | spin_lock_irqsave(&port->lock, flags); | ||
479 | |||
480 | ucon = rd_regl(port, S3C2410_UCON); | ||
481 | |||
482 | if (break_state) | ||
483 | ucon |= S3C2410_UCON_SBREAK; | ||
484 | else | ||
485 | ucon &= ~S3C2410_UCON_SBREAK; | ||
486 | |||
487 | wr_regl(port, S3C2410_UCON, ucon); | ||
488 | |||
489 | spin_unlock_irqrestore(&port->lock, flags); | ||
490 | } | ||
491 | |||
492 | static void s3c24xx_serial_shutdown(struct uart_port *port) | ||
493 | { | ||
494 | struct s3c24xx_uart_port *ourport = to_ourport(port); | ||
495 | |||
496 | if (ourport->tx_claimed) { | ||
497 | free_irq(TX_IRQ(port), ourport); | ||
498 | tx_enabled(port) = 0; | ||
499 | ourport->tx_claimed = 0; | ||
500 | } | ||
501 | |||
502 | if (ourport->rx_claimed) { | ||
503 | free_irq(RX_IRQ(port), ourport); | ||
504 | ourport->rx_claimed = 0; | ||
505 | rx_enabled(port) = 0; | ||
506 | } | ||
507 | } | ||
508 | |||
509 | |||
510 | static int s3c24xx_serial_startup(struct uart_port *port) | ||
511 | { | ||
512 | struct s3c24xx_uart_port *ourport = to_ourport(port); | ||
513 | int ret; | ||
514 | |||
515 | dbg("s3c24xx_serial_startup: port=%p (%08lx,%p)\n", | ||
516 | port->mapbase, port->membase); | ||
517 | |||
518 | rx_enabled(port) = 1; | ||
519 | |||
520 | ret = request_irq(RX_IRQ(port), | ||
521 | s3c24xx_serial_rx_chars, 0, | ||
522 | s3c24xx_serial_portname(port), ourport); | ||
523 | |||
524 | if (ret != 0) { | ||
525 | printk(KERN_ERR "cannot get irq %d\n", RX_IRQ(port)); | ||
526 | return ret; | ||
527 | } | ||
528 | |||
529 | ourport->rx_claimed = 1; | ||
530 | |||
531 | dbg("requesting tx irq...\n"); | ||
532 | |||
533 | tx_enabled(port) = 1; | ||
534 | |||
535 | ret = request_irq(TX_IRQ(port), | ||
536 | s3c24xx_serial_tx_chars, 0, | ||
537 | s3c24xx_serial_portname(port), ourport); | ||
538 | |||
539 | if (ret) { | ||
540 | printk(KERN_ERR "cannot get irq %d\n", TX_IRQ(port)); | ||
541 | goto err; | ||
542 | } | ||
543 | |||
544 | ourport->tx_claimed = 1; | ||
545 | |||
546 | dbg("s3c24xx_serial_startup ok\n"); | ||
547 | |||
548 | /* the port reset code should have done the correct | ||
549 | * register setup for the port controls */ | ||
550 | |||
551 | return ret; | ||
552 | |||
553 | err: | ||
554 | s3c24xx_serial_shutdown(port); | ||
555 | return ret; | ||
556 | } | ||
557 | |||
558 | /* power power management control */ | ||
559 | |||
560 | static void s3c24xx_serial_pm(struct uart_port *port, unsigned int level, | ||
561 | unsigned int old) | ||
562 | { | ||
563 | struct s3c24xx_uart_port *ourport = to_ourport(port); | ||
564 | |||
565 | switch (level) { | ||
566 | case 3: | ||
567 | if (!IS_ERR(ourport->baudclk) && ourport->baudclk != NULL) | ||
568 | clk_disable(ourport->baudclk); | ||
569 | |||
570 | clk_disable(ourport->clk); | ||
571 | break; | ||
572 | |||
573 | case 0: | ||
574 | clk_enable(ourport->clk); | ||
575 | |||
576 | if (!IS_ERR(ourport->baudclk) && ourport->baudclk != NULL) | ||
577 | clk_enable(ourport->baudclk); | ||
578 | |||
579 | break; | ||
580 | default: | ||
581 | printk(KERN_ERR "s3c24xx_serial: unknown pm %d\n", level); | ||
582 | } | ||
583 | } | ||
584 | |||
585 | /* baud rate calculation | ||
586 | * | ||
587 | * The UARTs on the S3C2410/S3C2440 can take their clocks from a number | ||
588 | * of different sources, including the peripheral clock ("pclk") and an | ||
589 | * external clock ("uclk"). The S3C2440 also adds the core clock ("fclk") | ||
590 | * with a programmable extra divisor. | ||
591 | * | ||
592 | * The following code goes through the clock sources, and calculates the | ||
593 | * baud clocks (and the resultant actual baud rates) and then tries to | ||
594 | * pick the closest one and select that. | ||
595 | * | ||
596 | */ | ||
597 | |||
598 | |||
599 | #define MAX_CLKS (8) | ||
600 | |||
601 | static struct s3c24xx_uart_clksrc tmp_clksrc = { | ||
602 | .name = "pclk", | ||
603 | .min_baud = 0, | ||
604 | .max_baud = 0, | ||
605 | .divisor = 1, | ||
606 | }; | ||
607 | |||
608 | static inline int | ||
609 | s3c24xx_serial_getsource(struct uart_port *port, struct s3c24xx_uart_clksrc *c) | ||
610 | { | ||
611 | struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); | ||
612 | |||
613 | return (info->get_clksrc)(port, c); | ||
614 | } | ||
615 | |||
616 | static inline int | ||
617 | s3c24xx_serial_setsource(struct uart_port *port, struct s3c24xx_uart_clksrc *c) | ||
618 | { | ||
619 | struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); | ||
620 | |||
621 | return (info->set_clksrc)(port, c); | ||
622 | } | ||
623 | |||
624 | struct baud_calc { | ||
625 | struct s3c24xx_uart_clksrc *clksrc; | ||
626 | unsigned int calc; | ||
627 | unsigned int quot; | ||
628 | struct clk *src; | ||
629 | }; | ||
630 | |||
631 | static int s3c24xx_serial_calcbaud(struct baud_calc *calc, | ||
632 | struct uart_port *port, | ||
633 | struct s3c24xx_uart_clksrc *clksrc, | ||
634 | unsigned int baud) | ||
635 | { | ||
636 | unsigned long rate; | ||
637 | |||
638 | calc->src = clk_get(port->dev, clksrc->name); | ||
639 | if (calc->src == NULL || IS_ERR(calc->src)) | ||
640 | return 0; | ||
641 | |||
642 | rate = clk_get_rate(calc->src); | ||
643 | rate /= clksrc->divisor; | ||
644 | |||
645 | calc->clksrc = clksrc; | ||
646 | calc->quot = (rate + (8 * baud)) / (16 * baud); | ||
647 | calc->calc = (rate / (calc->quot * 16)); | ||
648 | |||
649 | calc->quot--; | ||
650 | return 1; | ||
651 | } | ||
652 | |||
653 | static unsigned int s3c24xx_serial_getclk(struct uart_port *port, | ||
654 | struct s3c24xx_uart_clksrc **clksrc, | ||
655 | struct clk **clk, | ||
656 | unsigned int baud) | ||
657 | { | ||
658 | struct s3c2410_uartcfg *cfg = s3c24xx_port_to_cfg(port); | ||
659 | struct s3c24xx_uart_clksrc *clkp; | ||
660 | struct baud_calc res[MAX_CLKS]; | ||
661 | struct baud_calc *resptr, *best, *sptr; | ||
662 | int i; | ||
663 | |||
664 | clkp = cfg->clocks; | ||
665 | best = NULL; | ||
666 | |||
667 | if (cfg->clocks_size < 2) { | ||
668 | if (cfg->clocks_size == 0) | ||
669 | clkp = &tmp_clksrc; | ||
670 | |||
671 | /* check to see if we're sourcing fclk, and if so we're | ||
672 | * going to have to update the clock source | ||
673 | */ | ||
674 | |||
675 | if (strcmp(clkp->name, "fclk") == 0) { | ||
676 | struct s3c24xx_uart_clksrc src; | ||
677 | |||
678 | s3c24xx_serial_getsource(port, &src); | ||
679 | |||
680 | /* check that the port already using fclk, and if | ||
681 | * not, then re-select fclk | ||
682 | */ | ||
683 | |||
684 | if (strcmp(src.name, clkp->name) == 0) { | ||
685 | s3c24xx_serial_setsource(port, clkp); | ||
686 | s3c24xx_serial_getsource(port, &src); | ||
687 | } | ||
688 | |||
689 | clkp->divisor = src.divisor; | ||
690 | } | ||
691 | |||
692 | s3c24xx_serial_calcbaud(res, port, clkp, baud); | ||
693 | best = res; | ||
694 | resptr = best + 1; | ||
695 | } else { | ||
696 | resptr = res; | ||
697 | |||
698 | for (i = 0; i < cfg->clocks_size; i++, clkp++) { | ||
699 | if (s3c24xx_serial_calcbaud(resptr, port, clkp, baud)) | ||
700 | resptr++; | ||
701 | } | ||
702 | } | ||
703 | |||
704 | /* ok, we now need to select the best clock we found */ | ||
705 | |||
706 | if (!best) { | ||
707 | unsigned int deviation = (1<<30)|((1<<30)-1); | ||
708 | int calc_deviation; | ||
709 | |||
710 | for (sptr = res; sptr < resptr; sptr++) { | ||
711 | printk(KERN_DEBUG | ||
712 | "found clk %p (%s) quot %d, calc %d\n", | ||
713 | sptr->clksrc, sptr->clksrc->name, | ||
714 | sptr->quot, sptr->calc); | ||
715 | |||
716 | calc_deviation = baud - sptr->calc; | ||
717 | if (calc_deviation < 0) | ||
718 | calc_deviation = -calc_deviation; | ||
719 | |||
720 | if (calc_deviation < deviation) { | ||
721 | best = sptr; | ||
722 | deviation = calc_deviation; | ||
723 | } | ||
724 | } | ||
725 | |||
726 | printk(KERN_DEBUG "best %p (deviation %d)\n", best, deviation); | ||
727 | } | ||
728 | |||
729 | printk(KERN_DEBUG "selected clock %p (%s) quot %d, calc %d\n", | ||
730 | best->clksrc, best->clksrc->name, best->quot, best->calc); | ||
731 | |||
732 | /* store results to pass back */ | ||
733 | |||
734 | *clksrc = best->clksrc; | ||
735 | *clk = best->src; | ||
736 | |||
737 | return best->quot; | ||
738 | } | ||
739 | |||
740 | static void s3c24xx_serial_set_termios(struct uart_port *port, | ||
741 | struct ktermios *termios, | ||
742 | struct ktermios *old) | ||
743 | { | ||
744 | struct s3c2410_uartcfg *cfg = s3c24xx_port_to_cfg(port); | ||
745 | struct s3c24xx_uart_port *ourport = to_ourport(port); | ||
746 | struct s3c24xx_uart_clksrc *clksrc = NULL; | ||
747 | struct clk *clk = NULL; | ||
748 | unsigned long flags; | ||
749 | unsigned int baud, quot; | ||
750 | unsigned int ulcon; | ||
751 | unsigned int umcon; | ||
752 | |||
753 | /* | ||
754 | * We don't support modem control lines. | ||
755 | */ | ||
756 | termios->c_cflag &= ~(HUPCL | CMSPAR); | ||
757 | termios->c_cflag |= CLOCAL; | ||
758 | |||
759 | /* | ||
760 | * Ask the core to calculate the divisor for us. | ||
761 | */ | ||
762 | |||
763 | baud = uart_get_baud_rate(port, termios, old, 0, 115200*8); | ||
764 | |||
765 | if (baud == 38400 && (port->flags & UPF_SPD_MASK) == UPF_SPD_CUST) | ||
766 | quot = port->custom_divisor; | ||
767 | else | ||
768 | quot = s3c24xx_serial_getclk(port, &clksrc, &clk, baud); | ||
769 | |||
770 | /* check to see if we need to change clock source */ | ||
771 | |||
772 | if (ourport->clksrc != clksrc || ourport->baudclk != clk) { | ||
773 | s3c24xx_serial_setsource(port, clksrc); | ||
774 | |||
775 | if (ourport->baudclk != NULL && !IS_ERR(ourport->baudclk)) { | ||
776 | clk_disable(ourport->baudclk); | ||
777 | ourport->baudclk = NULL; | ||
778 | } | ||
779 | |||
780 | clk_enable(clk); | ||
781 | |||
782 | ourport->clksrc = clksrc; | ||
783 | ourport->baudclk = clk; | ||
784 | } | ||
785 | |||
786 | switch (termios->c_cflag & CSIZE) { | ||
787 | case CS5: | ||
788 | dbg("config: 5bits/char\n"); | ||
789 | ulcon = S3C2410_LCON_CS5; | ||
790 | break; | ||
791 | case CS6: | ||
792 | dbg("config: 6bits/char\n"); | ||
793 | ulcon = S3C2410_LCON_CS6; | ||
794 | break; | ||
795 | case CS7: | ||
796 | dbg("config: 7bits/char\n"); | ||
797 | ulcon = S3C2410_LCON_CS7; | ||
798 | break; | ||
799 | case CS8: | ||
800 | default: | ||
801 | dbg("config: 8bits/char\n"); | ||
802 | ulcon = S3C2410_LCON_CS8; | ||
803 | break; | ||
804 | } | ||
805 | |||
806 | /* preserve original lcon IR settings */ | ||
807 | ulcon |= (cfg->ulcon & S3C2410_LCON_IRM); | ||
808 | |||
809 | if (termios->c_cflag & CSTOPB) | ||
810 | ulcon |= S3C2410_LCON_STOPB; | ||
811 | |||
812 | umcon = (termios->c_cflag & CRTSCTS) ? S3C2410_UMCOM_AFC : 0; | ||
813 | |||
814 | if (termios->c_cflag & PARENB) { | ||
815 | if (termios->c_cflag & PARODD) | ||
816 | ulcon |= S3C2410_LCON_PODD; | ||
817 | else | ||
818 | ulcon |= S3C2410_LCON_PEVEN; | ||
819 | } else { | ||
820 | ulcon |= S3C2410_LCON_PNONE; | ||
821 | } | ||
822 | |||
823 | spin_lock_irqsave(&port->lock, flags); | ||
824 | |||
825 | dbg("setting ulcon to %08x, brddiv to %d\n", ulcon, quot); | ||
826 | |||
827 | wr_regl(port, S3C2410_ULCON, ulcon); | ||
828 | wr_regl(port, S3C2410_UBRDIV, quot); | ||
829 | wr_regl(port, S3C2410_UMCON, umcon); | ||
830 | |||
831 | dbg("uart: ulcon = 0x%08x, ucon = 0x%08x, ufcon = 0x%08x\n", | ||
832 | rd_regl(port, S3C2410_ULCON), | ||
833 | rd_regl(port, S3C2410_UCON), | ||
834 | rd_regl(port, S3C2410_UFCON)); | ||
835 | |||
836 | /* | ||
837 | * Update the per-port timeout. | ||
838 | */ | ||
839 | uart_update_timeout(port, termios->c_cflag, baud); | ||
840 | |||
841 | /* | ||
842 | * Which character status flags are we interested in? | ||
843 | */ | ||
844 | port->read_status_mask = S3C2410_UERSTAT_OVERRUN; | ||
845 | if (termios->c_iflag & INPCK) | ||
846 | port->read_status_mask |= S3C2410_UERSTAT_FRAME | S3C2410_UERSTAT_PARITY; | ||
847 | |||
848 | /* | ||
849 | * Which character status flags should we ignore? | ||
850 | */ | ||
851 | port->ignore_status_mask = 0; | ||
852 | if (termios->c_iflag & IGNPAR) | ||
853 | port->ignore_status_mask |= S3C2410_UERSTAT_OVERRUN; | ||
854 | if (termios->c_iflag & IGNBRK && termios->c_iflag & IGNPAR) | ||
855 | port->ignore_status_mask |= S3C2410_UERSTAT_FRAME; | ||
856 | |||
857 | /* | ||
858 | * Ignore all characters if CREAD is not set. | ||
859 | */ | ||
860 | if ((termios->c_cflag & CREAD) == 0) | ||
861 | port->ignore_status_mask |= RXSTAT_DUMMY_READ; | ||
862 | |||
863 | spin_unlock_irqrestore(&port->lock, flags); | ||
864 | } | ||
865 | |||
866 | static const char *s3c24xx_serial_type(struct uart_port *port) | ||
867 | { | ||
868 | switch (port->type) { | ||
869 | case PORT_S3C2410: | ||
870 | return "S3C2410"; | ||
871 | case PORT_S3C2440: | ||
872 | return "S3C2440"; | ||
873 | case PORT_S3C2412: | ||
874 | return "S3C2412"; | ||
875 | default: | ||
876 | return NULL; | ||
877 | } | ||
878 | } | ||
879 | |||
880 | #define MAP_SIZE (0x100) | ||
881 | |||
882 | static void s3c24xx_serial_release_port(struct uart_port *port) | ||
883 | { | ||
884 | release_mem_region(port->mapbase, MAP_SIZE); | ||
885 | } | ||
886 | |||
887 | static int s3c24xx_serial_request_port(struct uart_port *port) | ||
888 | { | ||
889 | const char *name = s3c24xx_serial_portname(port); | ||
890 | return request_mem_region(port->mapbase, MAP_SIZE, name) ? 0 : -EBUSY; | ||
891 | } | ||
892 | |||
893 | static void s3c24xx_serial_config_port(struct uart_port *port, int flags) | ||
894 | { | ||
895 | struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); | ||
896 | |||
897 | if (flags & UART_CONFIG_TYPE && | ||
898 | s3c24xx_serial_request_port(port) == 0) | ||
899 | port->type = info->type; | ||
900 | } | ||
901 | |||
902 | /* | ||
903 | * verify the new serial_struct (for TIOCSSERIAL). | ||
904 | */ | ||
905 | static int | ||
906 | s3c24xx_serial_verify_port(struct uart_port *port, struct serial_struct *ser) | ||
907 | { | ||
908 | struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); | ||
909 | |||
910 | if (ser->type != PORT_UNKNOWN && ser->type != info->type) | ||
911 | return -EINVAL; | ||
912 | |||
913 | return 0; | ||
914 | } | ||
915 | |||
916 | |||
917 | #ifdef CONFIG_SERIAL_S3C2410_CONSOLE | ||
918 | |||
919 | static struct console s3c24xx_serial_console; | ||
920 | |||
921 | #define S3C24XX_SERIAL_CONSOLE &s3c24xx_serial_console | ||
922 | #else | ||
923 | #define S3C24XX_SERIAL_CONSOLE NULL | ||
924 | #endif | ||
925 | |||
926 | static struct uart_ops s3c24xx_serial_ops = { | ||
927 | .pm = s3c24xx_serial_pm, | ||
928 | .tx_empty = s3c24xx_serial_tx_empty, | ||
929 | .get_mctrl = s3c24xx_serial_get_mctrl, | ||
930 | .set_mctrl = s3c24xx_serial_set_mctrl, | ||
931 | .stop_tx = s3c24xx_serial_stop_tx, | ||
932 | .start_tx = s3c24xx_serial_start_tx, | ||
933 | .stop_rx = s3c24xx_serial_stop_rx, | ||
934 | .enable_ms = s3c24xx_serial_enable_ms, | ||
935 | .break_ctl = s3c24xx_serial_break_ctl, | ||
936 | .startup = s3c24xx_serial_startup, | ||
937 | .shutdown = s3c24xx_serial_shutdown, | ||
938 | .set_termios = s3c24xx_serial_set_termios, | ||
939 | .type = s3c24xx_serial_type, | ||
940 | .release_port = s3c24xx_serial_release_port, | ||
941 | .request_port = s3c24xx_serial_request_port, | ||
942 | .config_port = s3c24xx_serial_config_port, | ||
943 | .verify_port = s3c24xx_serial_verify_port, | ||
944 | }; | ||
945 | |||
946 | |||
947 | static struct uart_driver s3c24xx_uart_drv = { | ||
948 | .owner = THIS_MODULE, | ||
949 | .dev_name = "s3c2410_serial", | ||
950 | .nr = 3, | ||
951 | .cons = S3C24XX_SERIAL_CONSOLE, | ||
952 | .driver_name = S3C24XX_SERIAL_NAME, | ||
953 | .major = S3C24XX_SERIAL_MAJOR, | ||
954 | .minor = S3C24XX_SERIAL_MINOR, | ||
955 | }; | ||
956 | |||
957 | static struct s3c24xx_uart_port s3c24xx_serial_ports[NR_PORTS] = { | ||
958 | [0] = { | ||
959 | .port = { | ||
960 | .lock = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[0].port.lock), | ||
961 | .iotype = UPIO_MEM, | ||
962 | .irq = IRQ_S3CUART_RX0, | ||
963 | .uartclk = 0, | ||
964 | .fifosize = 16, | ||
965 | .ops = &s3c24xx_serial_ops, | ||
966 | .flags = UPF_BOOT_AUTOCONF, | ||
967 | .line = 0, | ||
968 | } | ||
969 | }, | ||
970 | [1] = { | ||
971 | .port = { | ||
972 | .lock = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[1].port.lock), | ||
973 | .iotype = UPIO_MEM, | ||
974 | .irq = IRQ_S3CUART_RX1, | ||
975 | .uartclk = 0, | ||
976 | .fifosize = 16, | ||
977 | .ops = &s3c24xx_serial_ops, | ||
978 | .flags = UPF_BOOT_AUTOCONF, | ||
979 | .line = 1, | ||
980 | } | ||
981 | }, | ||
982 | #if NR_PORTS > 2 | ||
983 | |||
984 | [2] = { | ||
985 | .port = { | ||
986 | .lock = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[2].port.lock), | ||
987 | .iotype = UPIO_MEM, | ||
988 | .irq = IRQ_S3CUART_RX2, | ||
989 | .uartclk = 0, | ||
990 | .fifosize = 16, | ||
991 | .ops = &s3c24xx_serial_ops, | ||
992 | .flags = UPF_BOOT_AUTOCONF, | ||
993 | .line = 2, | ||
994 | } | ||
995 | } | ||
996 | #endif | ||
997 | }; | ||
998 | |||
999 | /* s3c24xx_serial_resetport | ||
1000 | * | ||
1001 | * wrapper to call the specific reset for this port (reset the fifos | ||
1002 | * and the settings) | ||
1003 | */ | ||
1004 | |||
1005 | static inline int s3c24xx_serial_resetport(struct uart_port * port, | ||
1006 | struct s3c2410_uartcfg *cfg) | ||
1007 | { | ||
1008 | struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); | ||
1009 | |||
1010 | return (info->reset_port)(port, cfg); | ||
1011 | } | ||
1012 | |||
1013 | /* s3c24xx_serial_init_port | ||
1014 | * | ||
1015 | * initialise a single serial port from the platform device given | ||
1016 | */ | ||
1017 | |||
1018 | static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport, | ||
1019 | struct s3c24xx_uart_info *info, | ||
1020 | struct platform_device *platdev) | ||
1021 | { | ||
1022 | struct uart_port *port = &ourport->port; | ||
1023 | struct s3c2410_uartcfg *cfg; | ||
1024 | struct resource *res; | ||
1025 | int ret; | ||
1026 | |||
1027 | dbg("s3c24xx_serial_init_port: port=%p, platdev=%p\n", port, platdev); | ||
1028 | |||
1029 | if (platdev == NULL) | ||
1030 | return -ENODEV; | ||
1031 | |||
1032 | cfg = s3c24xx_dev_to_cfg(&platdev->dev); | ||
1033 | |||
1034 | if (port->mapbase != 0) | ||
1035 | return 0; | ||
1036 | |||
1037 | if (cfg->hwport > 3) | ||
1038 | return -EINVAL; | ||
1039 | |||
1040 | /* setup info for port */ | ||
1041 | port->dev = &platdev->dev; | ||
1042 | ourport->info = info; | ||
1043 | |||
1044 | /* copy the info in from provided structure */ | ||
1045 | ourport->port.fifosize = info->fifosize; | ||
1046 | |||
1047 | dbg("s3c24xx_serial_init_port: %p (hw %d)...\n", port, cfg->hwport); | ||
1048 | |||
1049 | port->uartclk = 1; | ||
1050 | |||
1051 | if (cfg->uart_flags & UPF_CONS_FLOW) { | ||
1052 | dbg("s3c24xx_serial_init_port: enabling flow control\n"); | ||
1053 | port->flags |= UPF_CONS_FLOW; | ||
1054 | } | ||
1055 | |||
1056 | /* sort our the physical and virtual addresses for each UART */ | ||
1057 | |||
1058 | res = platform_get_resource(platdev, IORESOURCE_MEM, 0); | ||
1059 | if (res == NULL) { | ||
1060 | printk(KERN_ERR "failed to find memory resource for uart\n"); | ||
1061 | return -EINVAL; | ||
1062 | } | ||
1063 | |||
1064 | dbg("resource %p (%lx..%lx)\n", res, res->start, res->end); | ||
1065 | |||
1066 | port->mapbase = res->start; | ||
1067 | port->membase = S3C24XX_VA_UART + (res->start - S3C24XX_PA_UART); | ||
1068 | ret = platform_get_irq(platdev, 0); | ||
1069 | if (ret < 0) | ||
1070 | port->irq = 0; | ||
1071 | else | ||
1072 | port->irq = ret; | ||
1073 | |||
1074 | ourport->clk = clk_get(&platdev->dev, "uart"); | ||
1075 | |||
1076 | dbg("port: map=%08x, mem=%08x, irq=%d, clock=%ld\n", | ||
1077 | port->mapbase, port->membase, port->irq, port->uartclk); | ||
1078 | |||
1079 | /* reset the fifos (and setup the uart) */ | ||
1080 | s3c24xx_serial_resetport(port, cfg); | ||
1081 | return 0; | ||
1082 | } | ||
1083 | |||
1084 | /* Device driver serial port probe */ | ||
1085 | |||
1086 | static int probe_index = 0; | ||
1087 | |||
1088 | static int s3c24xx_serial_probe(struct platform_device *dev, | ||
1089 | struct s3c24xx_uart_info *info) | ||
1090 | { | ||
1091 | struct s3c24xx_uart_port *ourport; | ||
1092 | int ret; | ||
1093 | |||
1094 | dbg("s3c24xx_serial_probe(%p, %p) %d\n", dev, info, probe_index); | ||
1095 | |||
1096 | ourport = &s3c24xx_serial_ports[probe_index]; | ||
1097 | probe_index++; | ||
1098 | |||
1099 | dbg("%s: initialising port %p...\n", __func__, ourport); | ||
1100 | |||
1101 | ret = s3c24xx_serial_init_port(ourport, info, dev); | ||
1102 | if (ret < 0) | ||
1103 | goto probe_err; | ||
1104 | |||
1105 | dbg("%s: adding port\n", __func__); | ||
1106 | uart_add_one_port(&s3c24xx_uart_drv, &ourport->port); | ||
1107 | platform_set_drvdata(dev, &ourport->port); | ||
1108 | |||
1109 | return 0; | ||
1110 | |||
1111 | probe_err: | ||
1112 | return ret; | ||
1113 | } | ||
1114 | |||
1115 | static int s3c24xx_serial_remove(struct platform_device *dev) | ||
1116 | { | ||
1117 | struct uart_port *port = s3c24xx_dev_to_port(&dev->dev); | ||
1118 | |||
1119 | if (port) | ||
1120 | uart_remove_one_port(&s3c24xx_uart_drv, port); | ||
1121 | |||
1122 | return 0; | ||
1123 | } | ||
1124 | |||
1125 | /* UART power management code */ | ||
1126 | |||
1127 | #ifdef CONFIG_PM | ||
1128 | |||
1129 | static int s3c24xx_serial_suspend(struct platform_device *dev, pm_message_t state) | ||
1130 | { | ||
1131 | struct uart_port *port = s3c24xx_dev_to_port(&dev->dev); | ||
1132 | |||
1133 | if (port) | ||
1134 | uart_suspend_port(&s3c24xx_uart_drv, port); | ||
1135 | |||
1136 | return 0; | ||
1137 | } | ||
1138 | |||
1139 | static int s3c24xx_serial_resume(struct platform_device *dev) | ||
1140 | { | ||
1141 | struct uart_port *port = s3c24xx_dev_to_port(&dev->dev); | ||
1142 | struct s3c24xx_uart_port *ourport = to_ourport(port); | ||
1143 | |||
1144 | if (port) { | ||
1145 | clk_enable(ourport->clk); | ||
1146 | s3c24xx_serial_resetport(port, s3c24xx_port_to_cfg(port)); | ||
1147 | clk_disable(ourport->clk); | ||
1148 | |||
1149 | uart_resume_port(&s3c24xx_uart_drv, port); | ||
1150 | } | ||
1151 | |||
1152 | return 0; | ||
1153 | } | ||
1154 | |||
1155 | #else | ||
1156 | #define s3c24xx_serial_suspend NULL | ||
1157 | #define s3c24xx_serial_resume NULL | ||
1158 | #endif | ||
1159 | |||
1160 | static int s3c24xx_serial_init(struct platform_driver *drv, | ||
1161 | struct s3c24xx_uart_info *info) | ||
1162 | { | ||
1163 | dbg("s3c24xx_serial_init(%p,%p)\n", drv, info); | ||
1164 | return platform_driver_register(drv); | ||
1165 | } | ||
1166 | |||
1167 | |||
1168 | /* now comes the code to initialise either the s3c2410 or s3c2440 serial | ||
1169 | * port information | ||
1170 | */ | ||
1171 | |||
1172 | /* cpu specific variations on the serial port support */ | ||
1173 | |||
1174 | #ifdef CONFIG_CPU_S3C2400 | ||
1175 | |||
1176 | static int s3c2400_serial_getsource(struct uart_port *port, | ||
1177 | struct s3c24xx_uart_clksrc *clk) | ||
1178 | { | ||
1179 | clk->divisor = 1; | ||
1180 | clk->name = "pclk"; | ||
1181 | |||
1182 | return 0; | ||
1183 | } | ||
1184 | |||
1185 | static int s3c2400_serial_setsource(struct uart_port *port, | ||
1186 | struct s3c24xx_uart_clksrc *clk) | ||
1187 | { | ||
1188 | return 0; | ||
1189 | } | ||
1190 | |||
1191 | static int s3c2400_serial_resetport(struct uart_port *port, | ||
1192 | struct s3c2410_uartcfg *cfg) | ||
1193 | { | ||
1194 | dbg("s3c2400_serial_resetport: port=%p (%08lx), cfg=%p\n", | ||
1195 | port, port->mapbase, cfg); | ||
1196 | |||
1197 | wr_regl(port, S3C2410_UCON, cfg->ucon); | ||
1198 | wr_regl(port, S3C2410_ULCON, cfg->ulcon); | ||
1199 | |||
1200 | /* reset both fifos */ | ||
1201 | |||
1202 | wr_regl(port, S3C2410_UFCON, cfg->ufcon | S3C2410_UFCON_RESETBOTH); | ||
1203 | wr_regl(port, S3C2410_UFCON, cfg->ufcon); | ||
1204 | |||
1205 | return 0; | ||
1206 | } | ||
1207 | |||
1208 | static struct s3c24xx_uart_info s3c2400_uart_inf = { | ||
1209 | .name = "Samsung S3C2400 UART", | ||
1210 | .type = PORT_S3C2400, | ||
1211 | .fifosize = 16, | ||
1212 | .rx_fifomask = S3C2410_UFSTAT_RXMASK, | ||
1213 | .rx_fifoshift = S3C2410_UFSTAT_RXSHIFT, | ||
1214 | .rx_fifofull = S3C2410_UFSTAT_RXFULL, | ||
1215 | .tx_fifofull = S3C2410_UFSTAT_TXFULL, | ||
1216 | .tx_fifomask = S3C2410_UFSTAT_TXMASK, | ||
1217 | .tx_fifoshift = S3C2410_UFSTAT_TXSHIFT, | ||
1218 | .get_clksrc = s3c2400_serial_getsource, | ||
1219 | .set_clksrc = s3c2400_serial_setsource, | ||
1220 | .reset_port = s3c2400_serial_resetport, | ||
1221 | }; | ||
1222 | |||
1223 | static int s3c2400_serial_probe(struct platform_device *dev) | ||
1224 | { | ||
1225 | return s3c24xx_serial_probe(dev, &s3c2400_uart_inf); | ||
1226 | } | ||
1227 | |||
1228 | static struct platform_driver s3c2400_serial_drv = { | ||
1229 | .probe = s3c2400_serial_probe, | ||
1230 | .remove = s3c24xx_serial_remove, | ||
1231 | .suspend = s3c24xx_serial_suspend, | ||
1232 | .resume = s3c24xx_serial_resume, | ||
1233 | .driver = { | ||
1234 | .name = "s3c2400-uart", | ||
1235 | .owner = THIS_MODULE, | ||
1236 | }, | ||
1237 | }; | ||
1238 | |||
1239 | static inline int s3c2400_serial_init(void) | ||
1240 | { | ||
1241 | return s3c24xx_serial_init(&s3c2400_serial_drv, &s3c2400_uart_inf); | ||
1242 | } | ||
1243 | |||
1244 | static inline void s3c2400_serial_exit(void) | ||
1245 | { | ||
1246 | platform_driver_unregister(&s3c2400_serial_drv); | ||
1247 | } | ||
1248 | |||
1249 | #define s3c2400_uart_inf_at &s3c2400_uart_inf | ||
1250 | #else | ||
1251 | |||
1252 | static inline int s3c2400_serial_init(void) | ||
1253 | { | ||
1254 | return 0; | ||
1255 | } | ||
1256 | |||
1257 | static inline void s3c2400_serial_exit(void) | ||
1258 | { | ||
1259 | } | ||
1260 | |||
1261 | #define s3c2400_uart_inf_at NULL | ||
1262 | |||
1263 | #endif /* CONFIG_CPU_S3C2400 */ | ||
1264 | |||
1265 | /* S3C2410 support */ | ||
1266 | |||
1267 | #ifdef CONFIG_CPU_S3C2410 | ||
1268 | 28 | ||
1269 | static int s3c2410_serial_setsource(struct uart_port *port, | 29 | static int s3c2410_serial_setsource(struct uart_port *port, |
1270 | struct s3c24xx_uart_clksrc *clk) | 30 | struct s3c24xx_uart_clksrc *clk) |
@@ -1323,8 +83,6 @@ static struct s3c24xx_uart_info s3c2410_uart_inf = { | |||
1323 | .reset_port = s3c2410_serial_resetport, | 83 | .reset_port = s3c2410_serial_resetport, |
1324 | }; | 84 | }; |
1325 | 85 | ||
1326 | /* device management */ | ||
1327 | |||
1328 | static int s3c2410_serial_probe(struct platform_device *dev) | 86 | static int s3c2410_serial_probe(struct platform_device *dev) |
1329 | { | 87 | { |
1330 | return s3c24xx_serial_probe(dev, &s3c2410_uart_inf); | 88 | return s3c24xx_serial_probe(dev, &s3c2410_uart_inf); |
@@ -1333,612 +91,28 @@ static int s3c2410_serial_probe(struct platform_device *dev) | |||
1333 | static struct platform_driver s3c2410_serial_drv = { | 91 | static struct platform_driver s3c2410_serial_drv = { |
1334 | .probe = s3c2410_serial_probe, | 92 | .probe = s3c2410_serial_probe, |
1335 | .remove = s3c24xx_serial_remove, | 93 | .remove = s3c24xx_serial_remove, |
1336 | .suspend = s3c24xx_serial_suspend, | ||
1337 | .resume = s3c24xx_serial_resume, | ||
1338 | .driver = { | 94 | .driver = { |
1339 | .name = "s3c2410-uart", | 95 | .name = "s3c2410-uart", |
1340 | .owner = THIS_MODULE, | 96 | .owner = THIS_MODULE, |
1341 | }, | 97 | }, |
1342 | }; | 98 | }; |
1343 | 99 | ||
1344 | static inline int s3c2410_serial_init(void) | 100 | s3c24xx_console_init(&s3c2410_serial_drv, &s3c2410_uart_inf); |
101 | |||
102 | static int __init s3c2410_serial_init(void) | ||
1345 | { | 103 | { |
1346 | return s3c24xx_serial_init(&s3c2410_serial_drv, &s3c2410_uart_inf); | 104 | return s3c24xx_serial_init(&s3c2410_serial_drv, &s3c2410_uart_inf); |
1347 | } | 105 | } |
1348 | 106 | ||
1349 | static inline void s3c2410_serial_exit(void) | 107 | static void __exit s3c2410_serial_exit(void) |
1350 | { | 108 | { |
1351 | platform_driver_unregister(&s3c2410_serial_drv); | 109 | platform_driver_unregister(&s3c2410_serial_drv); |
1352 | } | 110 | } |
1353 | 111 | ||
1354 | #define s3c2410_uart_inf_at &s3c2410_uart_inf | 112 | module_init(s3c2410_serial_init); |
1355 | #else | 113 | module_exit(s3c2410_serial_exit); |
1356 | |||
1357 | static inline int s3c2410_serial_init(void) | ||
1358 | { | ||
1359 | return 0; | ||
1360 | } | ||
1361 | |||
1362 | static inline void s3c2410_serial_exit(void) | ||
1363 | { | ||
1364 | } | ||
1365 | |||
1366 | #define s3c2410_uart_inf_at NULL | ||
1367 | |||
1368 | #endif /* CONFIG_CPU_S3C2410 */ | ||
1369 | |||
1370 | #if defined(CONFIG_CPU_S3C2440) || defined(CONFIG_CPU_S3C2442) | ||
1371 | |||
1372 | static int s3c2440_serial_setsource(struct uart_port *port, | ||
1373 | struct s3c24xx_uart_clksrc *clk) | ||
1374 | { | ||
1375 | unsigned long ucon = rd_regl(port, S3C2410_UCON); | ||
1376 | |||
1377 | // todo - proper fclk<>nonfclk switch // | ||
1378 | |||
1379 | ucon &= ~S3C2440_UCON_CLKMASK; | ||
1380 | |||
1381 | if (strcmp(clk->name, "uclk") == 0) | ||
1382 | ucon |= S3C2440_UCON_UCLK; | ||
1383 | else if (strcmp(clk->name, "pclk") == 0) | ||
1384 | ucon |= S3C2440_UCON_PCLK; | ||
1385 | else if (strcmp(clk->name, "fclk") == 0) | ||
1386 | ucon |= S3C2440_UCON_FCLK; | ||
1387 | else { | ||
1388 | printk(KERN_ERR "unknown clock source %s\n", clk->name); | ||
1389 | return -EINVAL; | ||
1390 | } | ||
1391 | |||
1392 | wr_regl(port, S3C2410_UCON, ucon); | ||
1393 | return 0; | ||
1394 | } | ||
1395 | |||
1396 | |||
1397 | static int s3c2440_serial_getsource(struct uart_port *port, | ||
1398 | struct s3c24xx_uart_clksrc *clk) | ||
1399 | { | ||
1400 | unsigned long ucon = rd_regl(port, S3C2410_UCON); | ||
1401 | unsigned long ucon0, ucon1, ucon2; | ||
1402 | |||
1403 | switch (ucon & S3C2440_UCON_CLKMASK) { | ||
1404 | case S3C2440_UCON_UCLK: | ||
1405 | clk->divisor = 1; | ||
1406 | clk->name = "uclk"; | ||
1407 | break; | ||
1408 | |||
1409 | case S3C2440_UCON_PCLK: | ||
1410 | case S3C2440_UCON_PCLK2: | ||
1411 | clk->divisor = 1; | ||
1412 | clk->name = "pclk"; | ||
1413 | break; | ||
1414 | |||
1415 | case S3C2440_UCON_FCLK: | ||
1416 | /* the fun of calculating the uart divisors on | ||
1417 | * the s3c2440 */ | ||
1418 | |||
1419 | ucon0 = __raw_readl(S3C24XX_VA_UART0 + S3C2410_UCON); | ||
1420 | ucon1 = __raw_readl(S3C24XX_VA_UART1 + S3C2410_UCON); | ||
1421 | ucon2 = __raw_readl(S3C24XX_VA_UART2 + S3C2410_UCON); | ||
1422 | |||
1423 | printk("ucons: %08lx, %08lx, %08lx\n", ucon0, ucon1, ucon2); | ||
1424 | |||
1425 | ucon0 &= S3C2440_UCON0_DIVMASK; | ||
1426 | ucon1 &= S3C2440_UCON1_DIVMASK; | ||
1427 | ucon2 &= S3C2440_UCON2_DIVMASK; | ||
1428 | |||
1429 | if (ucon0 != 0) { | ||
1430 | clk->divisor = ucon0 >> S3C2440_UCON_DIVSHIFT; | ||
1431 | clk->divisor += 6; | ||
1432 | } else if (ucon1 != 0) { | ||
1433 | clk->divisor = ucon1 >> S3C2440_UCON_DIVSHIFT; | ||
1434 | clk->divisor += 21; | ||
1435 | } else if (ucon2 != 0) { | ||
1436 | clk->divisor = ucon2 >> S3C2440_UCON_DIVSHIFT; | ||
1437 | clk->divisor += 36; | ||
1438 | } else { | ||
1439 | /* manual calims 44, seems to be 9 */ | ||
1440 | clk->divisor = 9; | ||
1441 | } | ||
1442 | |||
1443 | clk->name = "fclk"; | ||
1444 | break; | ||
1445 | } | ||
1446 | |||
1447 | return 0; | ||
1448 | } | ||
1449 | |||
1450 | static int s3c2440_serial_resetport(struct uart_port *port, | ||
1451 | struct s3c2410_uartcfg *cfg) | ||
1452 | { | ||
1453 | unsigned long ucon = rd_regl(port, S3C2410_UCON); | ||
1454 | |||
1455 | dbg("s3c2440_serial_resetport: port=%p (%08lx), cfg=%p\n", | ||
1456 | port, port->mapbase, cfg); | ||
1457 | |||
1458 | /* ensure we don't change the clock settings... */ | ||
1459 | |||
1460 | ucon &= (S3C2440_UCON0_DIVMASK | (3<<10)); | ||
1461 | |||
1462 | wr_regl(port, S3C2410_UCON, ucon | cfg->ucon); | ||
1463 | wr_regl(port, S3C2410_ULCON, cfg->ulcon); | ||
1464 | |||
1465 | /* reset both fifos */ | ||
1466 | |||
1467 | wr_regl(port, S3C2410_UFCON, cfg->ufcon | S3C2410_UFCON_RESETBOTH); | ||
1468 | wr_regl(port, S3C2410_UFCON, cfg->ufcon); | ||
1469 | |||
1470 | return 0; | ||
1471 | } | ||
1472 | |||
1473 | static struct s3c24xx_uart_info s3c2440_uart_inf = { | ||
1474 | .name = "Samsung S3C2440 UART", | ||
1475 | .type = PORT_S3C2440, | ||
1476 | .fifosize = 64, | ||
1477 | .rx_fifomask = S3C2440_UFSTAT_RXMASK, | ||
1478 | .rx_fifoshift = S3C2440_UFSTAT_RXSHIFT, | ||
1479 | .rx_fifofull = S3C2440_UFSTAT_RXFULL, | ||
1480 | .tx_fifofull = S3C2440_UFSTAT_TXFULL, | ||
1481 | .tx_fifomask = S3C2440_UFSTAT_TXMASK, | ||
1482 | .tx_fifoshift = S3C2440_UFSTAT_TXSHIFT, | ||
1483 | .get_clksrc = s3c2440_serial_getsource, | ||
1484 | .set_clksrc = s3c2440_serial_setsource, | ||
1485 | .reset_port = s3c2440_serial_resetport, | ||
1486 | }; | ||
1487 | |||
1488 | /* device management */ | ||
1489 | |||
1490 | static int s3c2440_serial_probe(struct platform_device *dev) | ||
1491 | { | ||
1492 | dbg("s3c2440_serial_probe: dev=%p\n", dev); | ||
1493 | return s3c24xx_serial_probe(dev, &s3c2440_uart_inf); | ||
1494 | } | ||
1495 | |||
1496 | static struct platform_driver s3c2440_serial_drv = { | ||
1497 | .probe = s3c2440_serial_probe, | ||
1498 | .remove = s3c24xx_serial_remove, | ||
1499 | .suspend = s3c24xx_serial_suspend, | ||
1500 | .resume = s3c24xx_serial_resume, | ||
1501 | .driver = { | ||
1502 | .name = "s3c2440-uart", | ||
1503 | .owner = THIS_MODULE, | ||
1504 | }, | ||
1505 | }; | ||
1506 | |||
1507 | |||
1508 | static inline int s3c2440_serial_init(void) | ||
1509 | { | ||
1510 | return s3c24xx_serial_init(&s3c2440_serial_drv, &s3c2440_uart_inf); | ||
1511 | } | ||
1512 | |||
1513 | static inline void s3c2440_serial_exit(void) | ||
1514 | { | ||
1515 | platform_driver_unregister(&s3c2440_serial_drv); | ||
1516 | } | ||
1517 | |||
1518 | #define s3c2440_uart_inf_at &s3c2440_uart_inf | ||
1519 | #else | ||
1520 | |||
1521 | static inline int s3c2440_serial_init(void) | ||
1522 | { | ||
1523 | return 0; | ||
1524 | } | ||
1525 | |||
1526 | static inline void s3c2440_serial_exit(void) | ||
1527 | { | ||
1528 | } | ||
1529 | |||
1530 | #define s3c2440_uart_inf_at NULL | ||
1531 | #endif /* CONFIG_CPU_S3C2440 */ | ||
1532 | |||
1533 | #if defined(CONFIG_CPU_S3C2412) | ||
1534 | |||
1535 | static int s3c2412_serial_setsource(struct uart_port *port, | ||
1536 | struct s3c24xx_uart_clksrc *clk) | ||
1537 | { | ||
1538 | unsigned long ucon = rd_regl(port, S3C2410_UCON); | ||
1539 | |||
1540 | ucon &= ~S3C2412_UCON_CLKMASK; | ||
1541 | |||
1542 | if (strcmp(clk->name, "uclk") == 0) | ||
1543 | ucon |= S3C2440_UCON_UCLK; | ||
1544 | else if (strcmp(clk->name, "pclk") == 0) | ||
1545 | ucon |= S3C2440_UCON_PCLK; | ||
1546 | else if (strcmp(clk->name, "usysclk") == 0) | ||
1547 | ucon |= S3C2412_UCON_USYSCLK; | ||
1548 | else { | ||
1549 | printk(KERN_ERR "unknown clock source %s\n", clk->name); | ||
1550 | return -EINVAL; | ||
1551 | } | ||
1552 | |||
1553 | wr_regl(port, S3C2410_UCON, ucon); | ||
1554 | return 0; | ||
1555 | } | ||
1556 | |||
1557 | |||
1558 | static int s3c2412_serial_getsource(struct uart_port *port, | ||
1559 | struct s3c24xx_uart_clksrc *clk) | ||
1560 | { | ||
1561 | unsigned long ucon = rd_regl(port, S3C2410_UCON); | ||
1562 | |||
1563 | switch (ucon & S3C2412_UCON_CLKMASK) { | ||
1564 | case S3C2412_UCON_UCLK: | ||
1565 | clk->divisor = 1; | ||
1566 | clk->name = "uclk"; | ||
1567 | break; | ||
1568 | |||
1569 | case S3C2412_UCON_PCLK: | ||
1570 | case S3C2412_UCON_PCLK2: | ||
1571 | clk->divisor = 1; | ||
1572 | clk->name = "pclk"; | ||
1573 | break; | ||
1574 | |||
1575 | case S3C2412_UCON_USYSCLK: | ||
1576 | clk->divisor = 1; | ||
1577 | clk->name = "usysclk"; | ||
1578 | break; | ||
1579 | } | ||
1580 | |||
1581 | return 0; | ||
1582 | } | ||
1583 | |||
1584 | static int s3c2412_serial_resetport(struct uart_port *port, | ||
1585 | struct s3c2410_uartcfg *cfg) | ||
1586 | { | ||
1587 | unsigned long ucon = rd_regl(port, S3C2410_UCON); | ||
1588 | |||
1589 | dbg("%s: port=%p (%08lx), cfg=%p\n", | ||
1590 | __func__, port, port->mapbase, cfg); | ||
1591 | |||
1592 | /* ensure we don't change the clock settings... */ | ||
1593 | |||
1594 | ucon &= S3C2412_UCON_CLKMASK; | ||
1595 | |||
1596 | wr_regl(port, S3C2410_UCON, ucon | cfg->ucon); | ||
1597 | wr_regl(port, S3C2410_ULCON, cfg->ulcon); | ||
1598 | |||
1599 | /* reset both fifos */ | ||
1600 | |||
1601 | wr_regl(port, S3C2410_UFCON, cfg->ufcon | S3C2410_UFCON_RESETBOTH); | ||
1602 | wr_regl(port, S3C2410_UFCON, cfg->ufcon); | ||
1603 | |||
1604 | return 0; | ||
1605 | } | ||
1606 | |||
1607 | static struct s3c24xx_uart_info s3c2412_uart_inf = { | ||
1608 | .name = "Samsung S3C2412 UART", | ||
1609 | .type = PORT_S3C2412, | ||
1610 | .fifosize = 64, | ||
1611 | .rx_fifomask = S3C2440_UFSTAT_RXMASK, | ||
1612 | .rx_fifoshift = S3C2440_UFSTAT_RXSHIFT, | ||
1613 | .rx_fifofull = S3C2440_UFSTAT_RXFULL, | ||
1614 | .tx_fifofull = S3C2440_UFSTAT_TXFULL, | ||
1615 | .tx_fifomask = S3C2440_UFSTAT_TXMASK, | ||
1616 | .tx_fifoshift = S3C2440_UFSTAT_TXSHIFT, | ||
1617 | .get_clksrc = s3c2412_serial_getsource, | ||
1618 | .set_clksrc = s3c2412_serial_setsource, | ||
1619 | .reset_port = s3c2412_serial_resetport, | ||
1620 | }; | ||
1621 | |||
1622 | /* device management */ | ||
1623 | |||
1624 | static int s3c2412_serial_probe(struct platform_device *dev) | ||
1625 | { | ||
1626 | dbg("s3c2440_serial_probe: dev=%p\n", dev); | ||
1627 | return s3c24xx_serial_probe(dev, &s3c2412_uart_inf); | ||
1628 | } | ||
1629 | |||
1630 | static struct platform_driver s3c2412_serial_drv = { | ||
1631 | .probe = s3c2412_serial_probe, | ||
1632 | .remove = s3c24xx_serial_remove, | ||
1633 | .suspend = s3c24xx_serial_suspend, | ||
1634 | .resume = s3c24xx_serial_resume, | ||
1635 | .driver = { | ||
1636 | .name = "s3c2412-uart", | ||
1637 | .owner = THIS_MODULE, | ||
1638 | }, | ||
1639 | }; | ||
1640 | |||
1641 | |||
1642 | static inline int s3c2412_serial_init(void) | ||
1643 | { | ||
1644 | return s3c24xx_serial_init(&s3c2412_serial_drv, &s3c2412_uart_inf); | ||
1645 | } | ||
1646 | |||
1647 | static inline void s3c2412_serial_exit(void) | ||
1648 | { | ||
1649 | platform_driver_unregister(&s3c2412_serial_drv); | ||
1650 | } | ||
1651 | |||
1652 | #define s3c2412_uart_inf_at &s3c2412_uart_inf | ||
1653 | #else | ||
1654 | |||
1655 | static inline int s3c2412_serial_init(void) | ||
1656 | { | ||
1657 | return 0; | ||
1658 | } | ||
1659 | |||
1660 | static inline void s3c2412_serial_exit(void) | ||
1661 | { | ||
1662 | } | ||
1663 | |||
1664 | #define s3c2412_uart_inf_at NULL | ||
1665 | #endif /* CONFIG_CPU_S3C2440 */ | ||
1666 | |||
1667 | |||
1668 | /* module initialisation code */ | ||
1669 | |||
1670 | static int __init s3c24xx_serial_modinit(void) | ||
1671 | { | ||
1672 | int ret; | ||
1673 | |||
1674 | ret = uart_register_driver(&s3c24xx_uart_drv); | ||
1675 | if (ret < 0) { | ||
1676 | printk(KERN_ERR "failed to register UART driver\n"); | ||
1677 | return -1; | ||
1678 | } | ||
1679 | |||
1680 | s3c2400_serial_init(); | ||
1681 | s3c2410_serial_init(); | ||
1682 | s3c2412_serial_init(); | ||
1683 | s3c2440_serial_init(); | ||
1684 | |||
1685 | return 0; | ||
1686 | } | ||
1687 | |||
1688 | static void __exit s3c24xx_serial_modexit(void) | ||
1689 | { | ||
1690 | s3c2400_serial_exit(); | ||
1691 | s3c2410_serial_exit(); | ||
1692 | s3c2412_serial_exit(); | ||
1693 | s3c2440_serial_exit(); | ||
1694 | |||
1695 | uart_unregister_driver(&s3c24xx_uart_drv); | ||
1696 | } | ||
1697 | |||
1698 | |||
1699 | module_init(s3c24xx_serial_modinit); | ||
1700 | module_exit(s3c24xx_serial_modexit); | ||
1701 | |||
1702 | /* Console code */ | ||
1703 | |||
1704 | #ifdef CONFIG_SERIAL_S3C2410_CONSOLE | ||
1705 | |||
1706 | static struct uart_port *cons_uart; | ||
1707 | |||
1708 | static int | ||
1709 | s3c24xx_serial_console_txrdy(struct uart_port *port, unsigned int ufcon) | ||
1710 | { | ||
1711 | struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); | ||
1712 | unsigned long ufstat, utrstat; | ||
1713 | |||
1714 | if (ufcon & S3C2410_UFCON_FIFOMODE) { | ||
1715 | /* fifo mode - check ammount of data in fifo registers... */ | ||
1716 | |||
1717 | ufstat = rd_regl(port, S3C2410_UFSTAT); | ||
1718 | return (ufstat & info->tx_fifofull) ? 0 : 1; | ||
1719 | } | ||
1720 | |||
1721 | /* in non-fifo mode, we go and use the tx buffer empty */ | ||
1722 | |||
1723 | utrstat = rd_regl(port, S3C2410_UTRSTAT); | ||
1724 | return (utrstat & S3C2410_UTRSTAT_TXE) ? 1 : 0; | ||
1725 | } | ||
1726 | |||
1727 | static void | ||
1728 | s3c24xx_serial_console_putchar(struct uart_port *port, int ch) | ||
1729 | { | ||
1730 | unsigned int ufcon = rd_regl(cons_uart, S3C2410_UFCON); | ||
1731 | while (!s3c24xx_serial_console_txrdy(port, ufcon)) | ||
1732 | barrier(); | ||
1733 | wr_regb(cons_uart, S3C2410_UTXH, ch); | ||
1734 | } | ||
1735 | |||
1736 | static void | ||
1737 | s3c24xx_serial_console_write(struct console *co, const char *s, | ||
1738 | unsigned int count) | ||
1739 | { | ||
1740 | uart_console_write(cons_uart, s, count, s3c24xx_serial_console_putchar); | ||
1741 | } | ||
1742 | |||
1743 | static void __init | ||
1744 | s3c24xx_serial_get_options(struct uart_port *port, int *baud, | ||
1745 | int *parity, int *bits) | ||
1746 | { | ||
1747 | struct s3c24xx_uart_clksrc clksrc; | ||
1748 | struct clk *clk; | ||
1749 | unsigned int ulcon; | ||
1750 | unsigned int ucon; | ||
1751 | unsigned int ubrdiv; | ||
1752 | unsigned long rate; | ||
1753 | |||
1754 | ulcon = rd_regl(port, S3C2410_ULCON); | ||
1755 | ucon = rd_regl(port, S3C2410_UCON); | ||
1756 | ubrdiv = rd_regl(port, S3C2410_UBRDIV); | ||
1757 | |||
1758 | dbg("s3c24xx_serial_get_options: port=%p\n" | ||
1759 | "registers: ulcon=%08x, ucon=%08x, ubdriv=%08x\n", | ||
1760 | port, ulcon, ucon, ubrdiv); | ||
1761 | |||
1762 | if ((ucon & 0xf) != 0) { | ||
1763 | /* consider the serial port configured if the tx/rx mode set */ | ||
1764 | |||
1765 | switch (ulcon & S3C2410_LCON_CSMASK) { | ||
1766 | case S3C2410_LCON_CS5: | ||
1767 | *bits = 5; | ||
1768 | break; | ||
1769 | case S3C2410_LCON_CS6: | ||
1770 | *bits = 6; | ||
1771 | break; | ||
1772 | case S3C2410_LCON_CS7: | ||
1773 | *bits = 7; | ||
1774 | break; | ||
1775 | default: | ||
1776 | case S3C2410_LCON_CS8: | ||
1777 | *bits = 8; | ||
1778 | break; | ||
1779 | } | ||
1780 | |||
1781 | switch (ulcon & S3C2410_LCON_PMASK) { | ||
1782 | case S3C2410_LCON_PEVEN: | ||
1783 | *parity = 'e'; | ||
1784 | break; | ||
1785 | |||
1786 | case S3C2410_LCON_PODD: | ||
1787 | *parity = 'o'; | ||
1788 | break; | ||
1789 | |||
1790 | case S3C2410_LCON_PNONE: | ||
1791 | default: | ||
1792 | *parity = 'n'; | ||
1793 | } | ||
1794 | |||
1795 | /* now calculate the baud rate */ | ||
1796 | |||
1797 | s3c24xx_serial_getsource(port, &clksrc); | ||
1798 | |||
1799 | clk = clk_get(port->dev, clksrc.name); | ||
1800 | if (!IS_ERR(clk) && clk != NULL) | ||
1801 | rate = clk_get_rate(clk) / clksrc.divisor; | ||
1802 | else | ||
1803 | rate = 1; | ||
1804 | |||
1805 | |||
1806 | *baud = rate / ( 16 * (ubrdiv + 1)); | ||
1807 | dbg("calculated baud %d\n", *baud); | ||
1808 | } | ||
1809 | |||
1810 | } | ||
1811 | |||
1812 | /* s3c24xx_serial_init_ports | ||
1813 | * | ||
1814 | * initialise the serial ports from the machine provided initialisation | ||
1815 | * data. | ||
1816 | */ | ||
1817 | |||
1818 | static int s3c24xx_serial_init_ports(struct s3c24xx_uart_info *info) | ||
1819 | { | ||
1820 | struct s3c24xx_uart_port *ptr = s3c24xx_serial_ports; | ||
1821 | struct platform_device **platdev_ptr; | ||
1822 | int i; | ||
1823 | |||
1824 | dbg("s3c24xx_serial_init_ports: initialising ports...\n"); | ||
1825 | |||
1826 | platdev_ptr = s3c24xx_uart_devs; | ||
1827 | |||
1828 | for (i = 0; i < NR_PORTS; i++, ptr++, platdev_ptr++) { | ||
1829 | s3c24xx_serial_init_port(ptr, info, *platdev_ptr); | ||
1830 | } | ||
1831 | |||
1832 | return 0; | ||
1833 | } | ||
1834 | |||
1835 | static int __init | ||
1836 | s3c24xx_serial_console_setup(struct console *co, char *options) | ||
1837 | { | ||
1838 | struct uart_port *port; | ||
1839 | int baud = 9600; | ||
1840 | int bits = 8; | ||
1841 | int parity = 'n'; | ||
1842 | int flow = 'n'; | ||
1843 | |||
1844 | dbg("s3c24xx_serial_console_setup: co=%p (%d), %s\n", | ||
1845 | co, co->index, options); | ||
1846 | |||
1847 | /* is this a valid port */ | ||
1848 | |||
1849 | if (co->index == -1 || co->index >= NR_PORTS) | ||
1850 | co->index = 0; | ||
1851 | |||
1852 | port = &s3c24xx_serial_ports[co->index].port; | ||
1853 | |||
1854 | /* is the port configured? */ | ||
1855 | |||
1856 | if (port->mapbase == 0x0) { | ||
1857 | co->index = 0; | ||
1858 | port = &s3c24xx_serial_ports[co->index].port; | ||
1859 | } | ||
1860 | |||
1861 | cons_uart = port; | ||
1862 | |||
1863 | dbg("s3c24xx_serial_console_setup: port=%p (%d)\n", port, co->index); | ||
1864 | |||
1865 | /* | ||
1866 | * Check whether an invalid uart number has been specified, and | ||
1867 | * if so, search for the first available port that does have | ||
1868 | * console support. | ||
1869 | */ | ||
1870 | if (options) | ||
1871 | uart_parse_options(options, &baud, &parity, &bits, &flow); | ||
1872 | else | ||
1873 | s3c24xx_serial_get_options(port, &baud, &parity, &bits); | ||
1874 | |||
1875 | dbg("s3c24xx_serial_console_setup: baud %d\n", baud); | ||
1876 | |||
1877 | return uart_set_options(port, co, baud, parity, bits, flow); | ||
1878 | } | ||
1879 | |||
1880 | /* s3c24xx_serial_initconsole | ||
1881 | * | ||
1882 | * initialise the console from one of the uart drivers | ||
1883 | */ | ||
1884 | |||
1885 | static struct console s3c24xx_serial_console = | ||
1886 | { | ||
1887 | .name = S3C24XX_SERIAL_NAME, | ||
1888 | .device = uart_console_device, | ||
1889 | .flags = CON_PRINTBUFFER, | ||
1890 | .index = -1, | ||
1891 | .write = s3c24xx_serial_console_write, | ||
1892 | .setup = s3c24xx_serial_console_setup | ||
1893 | }; | ||
1894 | |||
1895 | static int s3c24xx_serial_initconsole(void) | ||
1896 | { | ||
1897 | struct s3c24xx_uart_info *info; | ||
1898 | struct platform_device *dev = s3c24xx_uart_devs[0]; | ||
1899 | |||
1900 | dbg("s3c24xx_serial_initconsole\n"); | ||
1901 | |||
1902 | /* select driver based on the cpu */ | ||
1903 | |||
1904 | if (dev == NULL) { | ||
1905 | printk(KERN_ERR "s3c24xx: no devices for console init\n"); | ||
1906 | return 0; | ||
1907 | } | ||
1908 | |||
1909 | if (strcmp(dev->name, "s3c2400-uart") == 0) { | ||
1910 | info = s3c2400_uart_inf_at; | ||
1911 | } else if (strcmp(dev->name, "s3c2410-uart") == 0) { | ||
1912 | info = s3c2410_uart_inf_at; | ||
1913 | } else if (strcmp(dev->name, "s3c2440-uart") == 0) { | ||
1914 | info = s3c2440_uart_inf_at; | ||
1915 | } else if (strcmp(dev->name, "s3c2412-uart") == 0) { | ||
1916 | info = s3c2412_uart_inf_at; | ||
1917 | } else { | ||
1918 | printk(KERN_ERR "s3c24xx: no driver for %s\n", dev->name); | ||
1919 | return 0; | ||
1920 | } | ||
1921 | |||
1922 | if (info == NULL) { | ||
1923 | printk(KERN_ERR "s3c24xx: no driver for console\n"); | ||
1924 | return 0; | ||
1925 | } | ||
1926 | |||
1927 | s3c24xx_serial_console.data = &s3c24xx_uart_drv; | ||
1928 | s3c24xx_serial_init_ports(info); | ||
1929 | |||
1930 | register_console(&s3c24xx_serial_console); | ||
1931 | return 0; | ||
1932 | } | ||
1933 | |||
1934 | console_initcall(s3c24xx_serial_initconsole); | ||
1935 | |||
1936 | #endif /* CONFIG_SERIAL_S3C2410_CONSOLE */ | ||
1937 | 114 | ||
1938 | MODULE_LICENSE("GPL"); | 115 | MODULE_LICENSE("GPL v2"); |
1939 | MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>"); | 116 | MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>"); |
1940 | MODULE_DESCRIPTION("Samsung S3C2410/S3C2440/S3C2412 Serial port driver"); | 117 | MODULE_DESCRIPTION("Samsung S3C2410 SoC Serial port driver"); |
1941 | MODULE_ALIAS("platform:s3c2400-uart"); | ||
1942 | MODULE_ALIAS("platform:s3c2410-uart"); | 118 | MODULE_ALIAS("platform:s3c2410-uart"); |
1943 | MODULE_ALIAS("platform:s3c2412-uart"); | ||
1944 | MODULE_ALIAS("platform:s3c2440-uart"); | ||
diff --git a/drivers/serial/s3c2412.c b/drivers/serial/s3c2412.c new file mode 100644 index 000000000000..ce0c220e3e92 --- /dev/null +++ b/drivers/serial/s3c2412.c | |||
@@ -0,0 +1,151 @@ | |||
1 | /* linux/drivers/serial/s3c2412.c | ||
2 | * | ||
3 | * Driver for Samsung S3C2412 and S3C2413 SoC onboard UARTs. | ||
4 | * | ||
5 | * Ben Dooks, Copyright (c) 2003-2005,2008 Simtec Electronics | ||
6 | * http://armlinux.simtec.co.uk/ | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #include <linux/module.h> | ||
14 | #include <linux/ioport.h> | ||
15 | #include <linux/io.h> | ||
16 | #include <linux/platform_device.h> | ||
17 | #include <linux/init.h> | ||
18 | #include <linux/serial_core.h> | ||
19 | #include <linux/serial.h> | ||
20 | |||
21 | #include <asm/irq.h> | ||
22 | #include <asm/hardware.h> | ||
23 | |||
24 | #include <asm/plat-s3c/regs-serial.h> | ||
25 | #include <asm/arch/regs-gpio.h> | ||
26 | |||
27 | #include "samsung.h" | ||
28 | |||
29 | static int s3c2412_serial_setsource(struct uart_port *port, | ||
30 | struct s3c24xx_uart_clksrc *clk) | ||
31 | { | ||
32 | unsigned long ucon = rd_regl(port, S3C2410_UCON); | ||
33 | |||
34 | ucon &= ~S3C2412_UCON_CLKMASK; | ||
35 | |||
36 | if (strcmp(clk->name, "uclk") == 0) | ||
37 | ucon |= S3C2440_UCON_UCLK; | ||
38 | else if (strcmp(clk->name, "pclk") == 0) | ||
39 | ucon |= S3C2440_UCON_PCLK; | ||
40 | else if (strcmp(clk->name, "usysclk") == 0) | ||
41 | ucon |= S3C2412_UCON_USYSCLK; | ||
42 | else { | ||
43 | printk(KERN_ERR "unknown clock source %s\n", clk->name); | ||
44 | return -EINVAL; | ||
45 | } | ||
46 | |||
47 | wr_regl(port, S3C2410_UCON, ucon); | ||
48 | return 0; | ||
49 | } | ||
50 | |||
51 | |||
52 | static int s3c2412_serial_getsource(struct uart_port *port, | ||
53 | struct s3c24xx_uart_clksrc *clk) | ||
54 | { | ||
55 | unsigned long ucon = rd_regl(port, S3C2410_UCON); | ||
56 | |||
57 | switch (ucon & S3C2412_UCON_CLKMASK) { | ||
58 | case S3C2412_UCON_UCLK: | ||
59 | clk->divisor = 1; | ||
60 | clk->name = "uclk"; | ||
61 | break; | ||
62 | |||
63 | case S3C2412_UCON_PCLK: | ||
64 | case S3C2412_UCON_PCLK2: | ||
65 | clk->divisor = 1; | ||
66 | clk->name = "pclk"; | ||
67 | break; | ||
68 | |||
69 | case S3C2412_UCON_USYSCLK: | ||
70 | clk->divisor = 1; | ||
71 | clk->name = "usysclk"; | ||
72 | break; | ||
73 | } | ||
74 | |||
75 | return 0; | ||
76 | } | ||
77 | |||
78 | static int s3c2412_serial_resetport(struct uart_port *port, | ||
79 | struct s3c2410_uartcfg *cfg) | ||
80 | { | ||
81 | unsigned long ucon = rd_regl(port, S3C2410_UCON); | ||
82 | |||
83 | dbg("%s: port=%p (%08lx), cfg=%p\n", | ||
84 | __func__, port, port->mapbase, cfg); | ||
85 | |||
86 | /* ensure we don't change the clock settings... */ | ||
87 | |||
88 | ucon &= S3C2412_UCON_CLKMASK; | ||
89 | |||
90 | wr_regl(port, S3C2410_UCON, ucon | cfg->ucon); | ||
91 | wr_regl(port, S3C2410_ULCON, cfg->ulcon); | ||
92 | |||
93 | /* reset both fifos */ | ||
94 | |||
95 | wr_regl(port, S3C2410_UFCON, cfg->ufcon | S3C2410_UFCON_RESETBOTH); | ||
96 | wr_regl(port, S3C2410_UFCON, cfg->ufcon); | ||
97 | |||
98 | return 0; | ||
99 | } | ||
100 | |||
101 | static struct s3c24xx_uart_info s3c2412_uart_inf = { | ||
102 | .name = "Samsung S3C2412 UART", | ||
103 | .type = PORT_S3C2412, | ||
104 | .fifosize = 64, | ||
105 | .rx_fifomask = S3C2440_UFSTAT_RXMASK, | ||
106 | .rx_fifoshift = S3C2440_UFSTAT_RXSHIFT, | ||
107 | .rx_fifofull = S3C2440_UFSTAT_RXFULL, | ||
108 | .tx_fifofull = S3C2440_UFSTAT_TXFULL, | ||
109 | .tx_fifomask = S3C2440_UFSTAT_TXMASK, | ||
110 | .tx_fifoshift = S3C2440_UFSTAT_TXSHIFT, | ||
111 | .get_clksrc = s3c2412_serial_getsource, | ||
112 | .set_clksrc = s3c2412_serial_setsource, | ||
113 | .reset_port = s3c2412_serial_resetport, | ||
114 | }; | ||
115 | |||
116 | /* device management */ | ||
117 | |||
118 | static int s3c2412_serial_probe(struct platform_device *dev) | ||
119 | { | ||
120 | dbg("s3c2440_serial_probe: dev=%p\n", dev); | ||
121 | return s3c24xx_serial_probe(dev, &s3c2412_uart_inf); | ||
122 | } | ||
123 | |||
124 | static struct platform_driver s3c2412_serial_drv = { | ||
125 | .probe = s3c2412_serial_probe, | ||
126 | .remove = s3c24xx_serial_remove, | ||
127 | .driver = { | ||
128 | .name = "s3c2412-uart", | ||
129 | .owner = THIS_MODULE, | ||
130 | }, | ||
131 | }; | ||
132 | |||
133 | s3c24xx_console_init(&s3c2412_serial_drv, &s3c2412_uart_inf); | ||
134 | |||
135 | static inline int s3c2412_serial_init(void) | ||
136 | { | ||
137 | return s3c24xx_serial_init(&s3c2412_serial_drv, &s3c2412_uart_inf); | ||
138 | } | ||
139 | |||
140 | static inline void s3c2412_serial_exit(void) | ||
141 | { | ||
142 | platform_driver_unregister(&s3c2412_serial_drv); | ||
143 | } | ||
144 | |||
145 | module_init(s3c2412_serial_init); | ||
146 | module_exit(s3c2412_serial_exit); | ||
147 | |||
148 | MODULE_DESCRIPTION("Samsung S3C2412,S3C2413 SoC Serial port driver"); | ||
149 | MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>"); | ||
150 | MODULE_LICENSE("GPL v2"); | ||
151 | MODULE_ALIAS("platform:s3c2412-uart"); | ||
diff --git a/drivers/serial/s3c2440.c b/drivers/serial/s3c2440.c new file mode 100644 index 000000000000..38f954bd39c6 --- /dev/null +++ b/drivers/serial/s3c2440.c | |||
@@ -0,0 +1,181 @@ | |||
1 | /* linux/drivers/serial/s3c2440.c | ||
2 | * | ||
3 | * Driver for Samsung S3C2440 and S3C2442 SoC onboard UARTs. | ||
4 | * | ||
5 | * Ben Dooks, Copyright (c) 2003-2005,2008 Simtec Electronics | ||
6 | * http://armlinux.simtec.co.uk/ | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | #include <linux/module.h> | ||
14 | #include <linux/ioport.h> | ||
15 | #include <linux/io.h> | ||
16 | #include <linux/platform_device.h> | ||
17 | #include <linux/init.h> | ||
18 | #include <linux/serial_core.h> | ||
19 | #include <linux/serial.h> | ||
20 | |||
21 | #include <asm/irq.h> | ||
22 | #include <asm/hardware.h> | ||
23 | |||
24 | #include <asm/plat-s3c/regs-serial.h> | ||
25 | #include <asm/arch/regs-gpio.h> | ||
26 | |||
27 | #include "samsung.h" | ||
28 | |||
29 | |||
30 | static int s3c2440_serial_setsource(struct uart_port *port, | ||
31 | struct s3c24xx_uart_clksrc *clk) | ||
32 | { | ||
33 | unsigned long ucon = rd_regl(port, S3C2410_UCON); | ||
34 | |||
35 | /* todo - proper fclk<>nonfclk switch. */ | ||
36 | |||
37 | ucon &= ~S3C2440_UCON_CLKMASK; | ||
38 | |||
39 | if (strcmp(clk->name, "uclk") == 0) | ||
40 | ucon |= S3C2440_UCON_UCLK; | ||
41 | else if (strcmp(clk->name, "pclk") == 0) | ||
42 | ucon |= S3C2440_UCON_PCLK; | ||
43 | else if (strcmp(clk->name, "fclk") == 0) | ||
44 | ucon |= S3C2440_UCON_FCLK; | ||
45 | else { | ||
46 | printk(KERN_ERR "unknown clock source %s\n", clk->name); | ||
47 | return -EINVAL; | ||
48 | } | ||
49 | |||
50 | wr_regl(port, S3C2410_UCON, ucon); | ||
51 | return 0; | ||
52 | } | ||
53 | |||
54 | |||
55 | static int s3c2440_serial_getsource(struct uart_port *port, | ||
56 | struct s3c24xx_uart_clksrc *clk) | ||
57 | { | ||
58 | unsigned long ucon = rd_regl(port, S3C2410_UCON); | ||
59 | unsigned long ucon0, ucon1, ucon2; | ||
60 | |||
61 | switch (ucon & S3C2440_UCON_CLKMASK) { | ||
62 | case S3C2440_UCON_UCLK: | ||
63 | clk->divisor = 1; | ||
64 | clk->name = "uclk"; | ||
65 | break; | ||
66 | |||
67 | case S3C2440_UCON_PCLK: | ||
68 | case S3C2440_UCON_PCLK2: | ||
69 | clk->divisor = 1; | ||
70 | clk->name = "pclk"; | ||
71 | break; | ||
72 | |||
73 | case S3C2440_UCON_FCLK: | ||
74 | /* the fun of calculating the uart divisors on | ||
75 | * the s3c2440 */ | ||
76 | |||
77 | ucon0 = __raw_readl(S3C24XX_VA_UART0 + S3C2410_UCON); | ||
78 | ucon1 = __raw_readl(S3C24XX_VA_UART1 + S3C2410_UCON); | ||
79 | ucon2 = __raw_readl(S3C24XX_VA_UART2 + S3C2410_UCON); | ||
80 | |||
81 | printk("ucons: %08lx, %08lx, %08lx\n", ucon0, ucon1, ucon2); | ||
82 | |||
83 | ucon0 &= S3C2440_UCON0_DIVMASK; | ||
84 | ucon1 &= S3C2440_UCON1_DIVMASK; | ||
85 | ucon2 &= S3C2440_UCON2_DIVMASK; | ||
86 | |||
87 | if (ucon0 != 0) { | ||
88 | clk->divisor = ucon0 >> S3C2440_UCON_DIVSHIFT; | ||
89 | clk->divisor += 6; | ||
90 | } else if (ucon1 != 0) { | ||
91 | clk->divisor = ucon1 >> S3C2440_UCON_DIVSHIFT; | ||
92 | clk->divisor += 21; | ||
93 | } else if (ucon2 != 0) { | ||
94 | clk->divisor = ucon2 >> S3C2440_UCON_DIVSHIFT; | ||
95 | clk->divisor += 36; | ||
96 | } else { | ||
97 | /* manual calims 44, seems to be 9 */ | ||
98 | clk->divisor = 9; | ||
99 | } | ||
100 | |||
101 | clk->name = "fclk"; | ||
102 | break; | ||
103 | } | ||
104 | |||
105 | return 0; | ||
106 | } | ||
107 | |||
108 | static int s3c2440_serial_resetport(struct uart_port *port, | ||
109 | struct s3c2410_uartcfg *cfg) | ||
110 | { | ||
111 | unsigned long ucon = rd_regl(port, S3C2410_UCON); | ||
112 | |||
113 | dbg("s3c2440_serial_resetport: port=%p (%08lx), cfg=%p\n", | ||
114 | port, port->mapbase, cfg); | ||
115 | |||
116 | /* ensure we don't change the clock settings... */ | ||
117 | |||
118 | ucon &= (S3C2440_UCON0_DIVMASK | (3<<10)); | ||
119 | |||
120 | wr_regl(port, S3C2410_UCON, ucon | cfg->ucon); | ||
121 | wr_regl(port, S3C2410_ULCON, cfg->ulcon); | ||
122 | |||
123 | /* reset both fifos */ | ||
124 | |||
125 | wr_regl(port, S3C2410_UFCON, cfg->ufcon | S3C2410_UFCON_RESETBOTH); | ||
126 | wr_regl(port, S3C2410_UFCON, cfg->ufcon); | ||
127 | |||
128 | return 0; | ||
129 | } | ||
130 | |||
131 | static struct s3c24xx_uart_info s3c2440_uart_inf = { | ||
132 | .name = "Samsung S3C2440 UART", | ||
133 | .type = PORT_S3C2440, | ||
134 | .fifosize = 64, | ||
135 | .rx_fifomask = S3C2440_UFSTAT_RXMASK, | ||
136 | .rx_fifoshift = S3C2440_UFSTAT_RXSHIFT, | ||
137 | .rx_fifofull = S3C2440_UFSTAT_RXFULL, | ||
138 | .tx_fifofull = S3C2440_UFSTAT_TXFULL, | ||
139 | .tx_fifomask = S3C2440_UFSTAT_TXMASK, | ||
140 | .tx_fifoshift = S3C2440_UFSTAT_TXSHIFT, | ||
141 | .get_clksrc = s3c2440_serial_getsource, | ||
142 | .set_clksrc = s3c2440_serial_setsource, | ||
143 | .reset_port = s3c2440_serial_resetport, | ||
144 | }; | ||
145 | |||
146 | /* device management */ | ||
147 | |||
148 | static int s3c2440_serial_probe(struct platform_device *dev) | ||
149 | { | ||
150 | dbg("s3c2440_serial_probe: dev=%p\n", dev); | ||
151 | return s3c24xx_serial_probe(dev, &s3c2440_uart_inf); | ||
152 | } | ||
153 | |||
154 | static struct platform_driver s3c2440_serial_drv = { | ||
155 | .probe = s3c2440_serial_probe, | ||
156 | .remove = s3c24xx_serial_remove, | ||
157 | .driver = { | ||
158 | .name = "s3c2440-uart", | ||
159 | .owner = THIS_MODULE, | ||
160 | }, | ||
161 | }; | ||
162 | |||
163 | s3c24xx_console_init(&s3c2440_serial_drv, &s3c2440_uart_inf); | ||
164 | |||
165 | static int __init s3c2440_serial_init(void) | ||
166 | { | ||
167 | return s3c24xx_serial_init(&s3c2440_serial_drv, &s3c2440_uart_inf); | ||
168 | } | ||
169 | |||
170 | static void __exit s3c2440_serial_exit(void) | ||
171 | { | ||
172 | platform_driver_unregister(&s3c2440_serial_drv); | ||
173 | } | ||
174 | |||
175 | module_init(s3c2440_serial_init); | ||
176 | module_exit(s3c2440_serial_exit); | ||
177 | |||
178 | MODULE_DESCRIPTION("Samsung S3C2440,S3C2442 SoC Serial port driver"); | ||
179 | MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>"); | ||
180 | MODULE_LICENSE("GPLi v2"); | ||
181 | MODULE_ALIAS("platform:s3c2440-uart"); | ||
diff --git a/drivers/serial/samsung.c b/drivers/serial/samsung.c new file mode 100644 index 000000000000..4a3ecaa629e6 --- /dev/null +++ b/drivers/serial/samsung.c | |||
@@ -0,0 +1,1317 @@ | |||
1 | /* linux/drivers/serial/samsuing.c | ||
2 | * | ||
3 | * Driver core for Samsung SoC onboard UARTs. | ||
4 | * | ||
5 | * Ben Dooks, Copyright (c) 2003-2005,2008 Simtec Electronics | ||
6 | * http://armlinux.simtec.co.uk/ | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | /* Hote on 2410 error handling | ||
14 | * | ||
15 | * The s3c2410 manual has a love/hate affair with the contents of the | ||
16 | * UERSTAT register in the UART blocks, and keeps marking some of the | ||
17 | * error bits as reserved. Having checked with the s3c2410x01, | ||
18 | * it copes with BREAKs properly, so I am happy to ignore the RESERVED | ||
19 | * feature from the latter versions of the manual. | ||
20 | * | ||
21 | * If it becomes aparrent that latter versions of the 2410 remove these | ||
22 | * bits, then action will have to be taken to differentiate the versions | ||
23 | * and change the policy on BREAK | ||
24 | * | ||
25 | * BJD, 04-Nov-2004 | ||
26 | */ | ||
27 | |||
28 | #if defined(CONFIG_SERIAL_SAMSUNG_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) | ||
29 | #define SUPPORT_SYSRQ | ||
30 | #endif | ||
31 | |||
32 | #include <linux/module.h> | ||
33 | #include <linux/ioport.h> | ||
34 | #include <linux/io.h> | ||
35 | #include <linux/platform_device.h> | ||
36 | #include <linux/init.h> | ||
37 | #include <linux/sysrq.h> | ||
38 | #include <linux/console.h> | ||
39 | #include <linux/tty.h> | ||
40 | #include <linux/tty_flip.h> | ||
41 | #include <linux/serial_core.h> | ||
42 | #include <linux/serial.h> | ||
43 | #include <linux/delay.h> | ||
44 | #include <linux/clk.h> | ||
45 | |||
46 | #include <asm/irq.h> | ||
47 | |||
48 | #include <asm/hardware.h> | ||
49 | |||
50 | #include <asm/plat-s3c/regs-serial.h> | ||
51 | #include <asm/arch/regs-gpio.h> | ||
52 | |||
53 | #include "samsung.h" | ||
54 | |||
55 | /* UART name and device definitions */ | ||
56 | |||
57 | #define S3C24XX_SERIAL_NAME "ttySAC" | ||
58 | #define S3C24XX_SERIAL_MAJOR 204 | ||
59 | #define S3C24XX_SERIAL_MINOR 64 | ||
60 | |||
61 | /* we can support 3 uarts, but not always use them */ | ||
62 | |||
63 | #ifdef CONFIG_CPU_S3C2400 | ||
64 | #define NR_PORTS (2) | ||
65 | #else | ||
66 | #define NR_PORTS (3) | ||
67 | #endif | ||
68 | |||
69 | /* port irq numbers */ | ||
70 | |||
71 | #define TX_IRQ(port) ((port)->irq + 1) | ||
72 | #define RX_IRQ(port) ((port)->irq) | ||
73 | |||
74 | /* macros to change one thing to another */ | ||
75 | |||
76 | #define tx_enabled(port) ((port)->unused[0]) | ||
77 | #define rx_enabled(port) ((port)->unused[1]) | ||
78 | |||
79 | /* flag to ignore all characters comming in */ | ||
80 | #define RXSTAT_DUMMY_READ (0x10000000) | ||
81 | |||
82 | static inline struct s3c24xx_uart_port *to_ourport(struct uart_port *port) | ||
83 | { | ||
84 | return container_of(port, struct s3c24xx_uart_port, port); | ||
85 | } | ||
86 | |||
87 | /* translate a port to the device name */ | ||
88 | |||
89 | static inline const char *s3c24xx_serial_portname(struct uart_port *port) | ||
90 | { | ||
91 | return to_platform_device(port->dev)->name; | ||
92 | } | ||
93 | |||
94 | static int s3c24xx_serial_txempty_nofifo(struct uart_port *port) | ||
95 | { | ||
96 | return (rd_regl(port, S3C2410_UTRSTAT) & S3C2410_UTRSTAT_TXE); | ||
97 | } | ||
98 | |||
99 | static void s3c24xx_serial_rx_enable(struct uart_port *port) | ||
100 | { | ||
101 | unsigned long flags; | ||
102 | unsigned int ucon, ufcon; | ||
103 | int count = 10000; | ||
104 | |||
105 | spin_lock_irqsave(&port->lock, flags); | ||
106 | |||
107 | while (--count && !s3c24xx_serial_txempty_nofifo(port)) | ||
108 | udelay(100); | ||
109 | |||
110 | ufcon = rd_regl(port, S3C2410_UFCON); | ||
111 | ufcon |= S3C2410_UFCON_RESETRX; | ||
112 | wr_regl(port, S3C2410_UFCON, ufcon); | ||
113 | |||
114 | ucon = rd_regl(port, S3C2410_UCON); | ||
115 | ucon |= S3C2410_UCON_RXIRQMODE; | ||
116 | wr_regl(port, S3C2410_UCON, ucon); | ||
117 | |||
118 | rx_enabled(port) = 1; | ||
119 | spin_unlock_irqrestore(&port->lock, flags); | ||
120 | } | ||
121 | |||
122 | static void s3c24xx_serial_rx_disable(struct uart_port *port) | ||
123 | { | ||
124 | unsigned long flags; | ||
125 | unsigned int ucon; | ||
126 | |||
127 | spin_lock_irqsave(&port->lock, flags); | ||
128 | |||
129 | ucon = rd_regl(port, S3C2410_UCON); | ||
130 | ucon &= ~S3C2410_UCON_RXIRQMODE; | ||
131 | wr_regl(port, S3C2410_UCON, ucon); | ||
132 | |||
133 | rx_enabled(port) = 0; | ||
134 | spin_unlock_irqrestore(&port->lock, flags); | ||
135 | } | ||
136 | |||
137 | static void s3c24xx_serial_stop_tx(struct uart_port *port) | ||
138 | { | ||
139 | if (tx_enabled(port)) { | ||
140 | disable_irq(TX_IRQ(port)); | ||
141 | tx_enabled(port) = 0; | ||
142 | if (port->flags & UPF_CONS_FLOW) | ||
143 | s3c24xx_serial_rx_enable(port); | ||
144 | } | ||
145 | } | ||
146 | |||
147 | static void s3c24xx_serial_start_tx(struct uart_port *port) | ||
148 | { | ||
149 | if (!tx_enabled(port)) { | ||
150 | if (port->flags & UPF_CONS_FLOW) | ||
151 | s3c24xx_serial_rx_disable(port); | ||
152 | |||
153 | enable_irq(TX_IRQ(port)); | ||
154 | tx_enabled(port) = 1; | ||
155 | } | ||
156 | } | ||
157 | |||
158 | |||
159 | static void s3c24xx_serial_stop_rx(struct uart_port *port) | ||
160 | { | ||
161 | if (rx_enabled(port)) { | ||
162 | dbg("s3c24xx_serial_stop_rx: port=%p\n", port); | ||
163 | disable_irq(RX_IRQ(port)); | ||
164 | rx_enabled(port) = 0; | ||
165 | } | ||
166 | } | ||
167 | |||
168 | static void s3c24xx_serial_enable_ms(struct uart_port *port) | ||
169 | { | ||
170 | } | ||
171 | |||
172 | static inline struct s3c24xx_uart_info *s3c24xx_port_to_info(struct uart_port *port) | ||
173 | { | ||
174 | return to_ourport(port)->info; | ||
175 | } | ||
176 | |||
177 | static inline struct s3c2410_uartcfg *s3c24xx_port_to_cfg(struct uart_port *port) | ||
178 | { | ||
179 | if (port->dev == NULL) | ||
180 | return NULL; | ||
181 | |||
182 | return (struct s3c2410_uartcfg *)port->dev->platform_data; | ||
183 | } | ||
184 | |||
185 | static int s3c24xx_serial_rx_fifocnt(struct s3c24xx_uart_port *ourport, | ||
186 | unsigned long ufstat) | ||
187 | { | ||
188 | struct s3c24xx_uart_info *info = ourport->info; | ||
189 | |||
190 | if (ufstat & info->rx_fifofull) | ||
191 | return info->fifosize; | ||
192 | |||
193 | return (ufstat & info->rx_fifomask) >> info->rx_fifoshift; | ||
194 | } | ||
195 | |||
196 | |||
197 | /* ? - where has parity gone?? */ | ||
198 | #define S3C2410_UERSTAT_PARITY (0x1000) | ||
199 | |||
200 | static irqreturn_t | ||
201 | s3c24xx_serial_rx_chars(int irq, void *dev_id) | ||
202 | { | ||
203 | struct s3c24xx_uart_port *ourport = dev_id; | ||
204 | struct uart_port *port = &ourport->port; | ||
205 | struct tty_struct *tty = port->info->tty; | ||
206 | unsigned int ufcon, ch, flag, ufstat, uerstat; | ||
207 | int max_count = 64; | ||
208 | |||
209 | while (max_count-- > 0) { | ||
210 | ufcon = rd_regl(port, S3C2410_UFCON); | ||
211 | ufstat = rd_regl(port, S3C2410_UFSTAT); | ||
212 | |||
213 | if (s3c24xx_serial_rx_fifocnt(ourport, ufstat) == 0) | ||
214 | break; | ||
215 | |||
216 | uerstat = rd_regl(port, S3C2410_UERSTAT); | ||
217 | ch = rd_regb(port, S3C2410_URXH); | ||
218 | |||
219 | if (port->flags & UPF_CONS_FLOW) { | ||
220 | int txe = s3c24xx_serial_txempty_nofifo(port); | ||
221 | |||
222 | if (rx_enabled(port)) { | ||
223 | if (!txe) { | ||
224 | rx_enabled(port) = 0; | ||
225 | continue; | ||
226 | } | ||
227 | } else { | ||
228 | if (txe) { | ||
229 | ufcon |= S3C2410_UFCON_RESETRX; | ||
230 | wr_regl(port, S3C2410_UFCON, ufcon); | ||
231 | rx_enabled(port) = 1; | ||
232 | goto out; | ||
233 | } | ||
234 | continue; | ||
235 | } | ||
236 | } | ||
237 | |||
238 | /* insert the character into the buffer */ | ||
239 | |||
240 | flag = TTY_NORMAL; | ||
241 | port->icount.rx++; | ||
242 | |||
243 | if (unlikely(uerstat & S3C2410_UERSTAT_ANY)) { | ||
244 | dbg("rxerr: port ch=0x%02x, rxs=0x%08x\n", | ||
245 | ch, uerstat); | ||
246 | |||
247 | /* check for break */ | ||
248 | if (uerstat & S3C2410_UERSTAT_BREAK) { | ||
249 | dbg("break!\n"); | ||
250 | port->icount.brk++; | ||
251 | if (uart_handle_break(port)) | ||
252 | goto ignore_char; | ||
253 | } | ||
254 | |||
255 | if (uerstat & S3C2410_UERSTAT_FRAME) | ||
256 | port->icount.frame++; | ||
257 | if (uerstat & S3C2410_UERSTAT_OVERRUN) | ||
258 | port->icount.overrun++; | ||
259 | |||
260 | uerstat &= port->read_status_mask; | ||
261 | |||
262 | if (uerstat & S3C2410_UERSTAT_BREAK) | ||
263 | flag = TTY_BREAK; | ||
264 | else if (uerstat & S3C2410_UERSTAT_PARITY) | ||
265 | flag = TTY_PARITY; | ||
266 | else if (uerstat & (S3C2410_UERSTAT_FRAME | | ||
267 | S3C2410_UERSTAT_OVERRUN)) | ||
268 | flag = TTY_FRAME; | ||
269 | } | ||
270 | |||
271 | if (uart_handle_sysrq_char(port, ch)) | ||
272 | goto ignore_char; | ||
273 | |||
274 | uart_insert_char(port, uerstat, S3C2410_UERSTAT_OVERRUN, | ||
275 | ch, flag); | ||
276 | |||
277 | ignore_char: | ||
278 | continue; | ||
279 | } | ||
280 | tty_flip_buffer_push(tty); | ||
281 | |||
282 | out: | ||
283 | return IRQ_HANDLED; | ||
284 | } | ||
285 | |||
286 | static irqreturn_t s3c24xx_serial_tx_chars(int irq, void *id) | ||
287 | { | ||
288 | struct s3c24xx_uart_port *ourport = id; | ||
289 | struct uart_port *port = &ourport->port; | ||
290 | struct circ_buf *xmit = &port->info->xmit; | ||
291 | int count = 256; | ||
292 | |||
293 | if (port->x_char) { | ||
294 | wr_regb(port, S3C2410_UTXH, port->x_char); | ||
295 | port->icount.tx++; | ||
296 | port->x_char = 0; | ||
297 | goto out; | ||
298 | } | ||
299 | |||
300 | /* if there isnt anything more to transmit, or the uart is now | ||
301 | * stopped, disable the uart and exit | ||
302 | */ | ||
303 | |||
304 | if (uart_circ_empty(xmit) || uart_tx_stopped(port)) { | ||
305 | s3c24xx_serial_stop_tx(port); | ||
306 | goto out; | ||
307 | } | ||
308 | |||
309 | /* try and drain the buffer... */ | ||
310 | |||
311 | while (!uart_circ_empty(xmit) && count-- > 0) { | ||
312 | if (rd_regl(port, S3C2410_UFSTAT) & ourport->info->tx_fifofull) | ||
313 | break; | ||
314 | |||
315 | wr_regb(port, S3C2410_UTXH, xmit->buf[xmit->tail]); | ||
316 | xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); | ||
317 | port->icount.tx++; | ||
318 | } | ||
319 | |||
320 | if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) | ||
321 | uart_write_wakeup(port); | ||
322 | |||
323 | if (uart_circ_empty(xmit)) | ||
324 | s3c24xx_serial_stop_tx(port); | ||
325 | |||
326 | out: | ||
327 | return IRQ_HANDLED; | ||
328 | } | ||
329 | |||
330 | static unsigned int s3c24xx_serial_tx_empty(struct uart_port *port) | ||
331 | { | ||
332 | struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); | ||
333 | unsigned long ufstat = rd_regl(port, S3C2410_UFSTAT); | ||
334 | unsigned long ufcon = rd_regl(port, S3C2410_UFCON); | ||
335 | |||
336 | if (ufcon & S3C2410_UFCON_FIFOMODE) { | ||
337 | if ((ufstat & info->tx_fifomask) != 0 || | ||
338 | (ufstat & info->tx_fifofull)) | ||
339 | return 0; | ||
340 | |||
341 | return 1; | ||
342 | } | ||
343 | |||
344 | return s3c24xx_serial_txempty_nofifo(port); | ||
345 | } | ||
346 | |||
347 | /* no modem control lines */ | ||
348 | static unsigned int s3c24xx_serial_get_mctrl(struct uart_port *port) | ||
349 | { | ||
350 | unsigned int umstat = rd_regb(port, S3C2410_UMSTAT); | ||
351 | |||
352 | if (umstat & S3C2410_UMSTAT_CTS) | ||
353 | return TIOCM_CAR | TIOCM_DSR | TIOCM_CTS; | ||
354 | else | ||
355 | return TIOCM_CAR | TIOCM_DSR; | ||
356 | } | ||
357 | |||
358 | static void s3c24xx_serial_set_mctrl(struct uart_port *port, unsigned int mctrl) | ||
359 | { | ||
360 | /* todo - possibly remove AFC and do manual CTS */ | ||
361 | } | ||
362 | |||
363 | static void s3c24xx_serial_break_ctl(struct uart_port *port, int break_state) | ||
364 | { | ||
365 | unsigned long flags; | ||
366 | unsigned int ucon; | ||
367 | |||
368 | spin_lock_irqsave(&port->lock, flags); | ||
369 | |||
370 | ucon = rd_regl(port, S3C2410_UCON); | ||
371 | |||
372 | if (break_state) | ||
373 | ucon |= S3C2410_UCON_SBREAK; | ||
374 | else | ||
375 | ucon &= ~S3C2410_UCON_SBREAK; | ||
376 | |||
377 | wr_regl(port, S3C2410_UCON, ucon); | ||
378 | |||
379 | spin_unlock_irqrestore(&port->lock, flags); | ||
380 | } | ||
381 | |||
382 | static void s3c24xx_serial_shutdown(struct uart_port *port) | ||
383 | { | ||
384 | struct s3c24xx_uart_port *ourport = to_ourport(port); | ||
385 | |||
386 | if (ourport->tx_claimed) { | ||
387 | free_irq(TX_IRQ(port), ourport); | ||
388 | tx_enabled(port) = 0; | ||
389 | ourport->tx_claimed = 0; | ||
390 | } | ||
391 | |||
392 | if (ourport->rx_claimed) { | ||
393 | free_irq(RX_IRQ(port), ourport); | ||
394 | ourport->rx_claimed = 0; | ||
395 | rx_enabled(port) = 0; | ||
396 | } | ||
397 | } | ||
398 | |||
399 | |||
400 | static int s3c24xx_serial_startup(struct uart_port *port) | ||
401 | { | ||
402 | struct s3c24xx_uart_port *ourport = to_ourport(port); | ||
403 | int ret; | ||
404 | |||
405 | dbg("s3c24xx_serial_startup: port=%p (%08lx,%p)\n", | ||
406 | port->mapbase, port->membase); | ||
407 | |||
408 | rx_enabled(port) = 1; | ||
409 | |||
410 | ret = request_irq(RX_IRQ(port), | ||
411 | s3c24xx_serial_rx_chars, 0, | ||
412 | s3c24xx_serial_portname(port), ourport); | ||
413 | |||
414 | if (ret != 0) { | ||
415 | printk(KERN_ERR "cannot get irq %d\n", RX_IRQ(port)); | ||
416 | return ret; | ||
417 | } | ||
418 | |||
419 | ourport->rx_claimed = 1; | ||
420 | |||
421 | dbg("requesting tx irq...\n"); | ||
422 | |||
423 | tx_enabled(port) = 1; | ||
424 | |||
425 | ret = request_irq(TX_IRQ(port), | ||
426 | s3c24xx_serial_tx_chars, 0, | ||
427 | s3c24xx_serial_portname(port), ourport); | ||
428 | |||
429 | if (ret) { | ||
430 | printk(KERN_ERR "cannot get irq %d\n", TX_IRQ(port)); | ||
431 | goto err; | ||
432 | } | ||
433 | |||
434 | ourport->tx_claimed = 1; | ||
435 | |||
436 | dbg("s3c24xx_serial_startup ok\n"); | ||
437 | |||
438 | /* the port reset code should have done the correct | ||
439 | * register setup for the port controls */ | ||
440 | |||
441 | return ret; | ||
442 | |||
443 | err: | ||
444 | s3c24xx_serial_shutdown(port); | ||
445 | return ret; | ||
446 | } | ||
447 | |||
448 | /* power power management control */ | ||
449 | |||
450 | static void s3c24xx_serial_pm(struct uart_port *port, unsigned int level, | ||
451 | unsigned int old) | ||
452 | { | ||
453 | struct s3c24xx_uart_port *ourport = to_ourport(port); | ||
454 | |||
455 | switch (level) { | ||
456 | case 3: | ||
457 | if (!IS_ERR(ourport->baudclk) && ourport->baudclk != NULL) | ||
458 | clk_disable(ourport->baudclk); | ||
459 | |||
460 | clk_disable(ourport->clk); | ||
461 | break; | ||
462 | |||
463 | case 0: | ||
464 | clk_enable(ourport->clk); | ||
465 | |||
466 | if (!IS_ERR(ourport->baudclk) && ourport->baudclk != NULL) | ||
467 | clk_enable(ourport->baudclk); | ||
468 | |||
469 | break; | ||
470 | default: | ||
471 | printk(KERN_ERR "s3c24xx_serial: unknown pm %d\n", level); | ||
472 | } | ||
473 | } | ||
474 | |||
475 | /* baud rate calculation | ||
476 | * | ||
477 | * The UARTs on the S3C2410/S3C2440 can take their clocks from a number | ||
478 | * of different sources, including the peripheral clock ("pclk") and an | ||
479 | * external clock ("uclk"). The S3C2440 also adds the core clock ("fclk") | ||
480 | * with a programmable extra divisor. | ||
481 | * | ||
482 | * The following code goes through the clock sources, and calculates the | ||
483 | * baud clocks (and the resultant actual baud rates) and then tries to | ||
484 | * pick the closest one and select that. | ||
485 | * | ||
486 | */ | ||
487 | |||
488 | |||
489 | #define MAX_CLKS (8) | ||
490 | |||
491 | static struct s3c24xx_uart_clksrc tmp_clksrc = { | ||
492 | .name = "pclk", | ||
493 | .min_baud = 0, | ||
494 | .max_baud = 0, | ||
495 | .divisor = 1, | ||
496 | }; | ||
497 | |||
498 | static inline int | ||
499 | s3c24xx_serial_getsource(struct uart_port *port, struct s3c24xx_uart_clksrc *c) | ||
500 | { | ||
501 | struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); | ||
502 | |||
503 | return (info->get_clksrc)(port, c); | ||
504 | } | ||
505 | |||
506 | static inline int | ||
507 | s3c24xx_serial_setsource(struct uart_port *port, struct s3c24xx_uart_clksrc *c) | ||
508 | { | ||
509 | struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); | ||
510 | |||
511 | return (info->set_clksrc)(port, c); | ||
512 | } | ||
513 | |||
514 | struct baud_calc { | ||
515 | struct s3c24xx_uart_clksrc *clksrc; | ||
516 | unsigned int calc; | ||
517 | unsigned int quot; | ||
518 | struct clk *src; | ||
519 | }; | ||
520 | |||
521 | static int s3c24xx_serial_calcbaud(struct baud_calc *calc, | ||
522 | struct uart_port *port, | ||
523 | struct s3c24xx_uart_clksrc *clksrc, | ||
524 | unsigned int baud) | ||
525 | { | ||
526 | unsigned long rate; | ||
527 | |||
528 | calc->src = clk_get(port->dev, clksrc->name); | ||
529 | if (calc->src == NULL || IS_ERR(calc->src)) | ||
530 | return 0; | ||
531 | |||
532 | rate = clk_get_rate(calc->src); | ||
533 | rate /= clksrc->divisor; | ||
534 | |||
535 | calc->clksrc = clksrc; | ||
536 | calc->quot = (rate + (8 * baud)) / (16 * baud); | ||
537 | calc->calc = (rate / (calc->quot * 16)); | ||
538 | |||
539 | calc->quot--; | ||
540 | return 1; | ||
541 | } | ||
542 | |||
543 | static unsigned int s3c24xx_serial_getclk(struct uart_port *port, | ||
544 | struct s3c24xx_uart_clksrc **clksrc, | ||
545 | struct clk **clk, | ||
546 | unsigned int baud) | ||
547 | { | ||
548 | struct s3c2410_uartcfg *cfg = s3c24xx_port_to_cfg(port); | ||
549 | struct s3c24xx_uart_clksrc *clkp; | ||
550 | struct baud_calc res[MAX_CLKS]; | ||
551 | struct baud_calc *resptr, *best, *sptr; | ||
552 | int i; | ||
553 | |||
554 | clkp = cfg->clocks; | ||
555 | best = NULL; | ||
556 | |||
557 | if (cfg->clocks_size < 2) { | ||
558 | if (cfg->clocks_size == 0) | ||
559 | clkp = &tmp_clksrc; | ||
560 | |||
561 | /* check to see if we're sourcing fclk, and if so we're | ||
562 | * going to have to update the clock source | ||
563 | */ | ||
564 | |||
565 | if (strcmp(clkp->name, "fclk") == 0) { | ||
566 | struct s3c24xx_uart_clksrc src; | ||
567 | |||
568 | s3c24xx_serial_getsource(port, &src); | ||
569 | |||
570 | /* check that the port already using fclk, and if | ||
571 | * not, then re-select fclk | ||
572 | */ | ||
573 | |||
574 | if (strcmp(src.name, clkp->name) == 0) { | ||
575 | s3c24xx_serial_setsource(port, clkp); | ||
576 | s3c24xx_serial_getsource(port, &src); | ||
577 | } | ||
578 | |||
579 | clkp->divisor = src.divisor; | ||
580 | } | ||
581 | |||
582 | s3c24xx_serial_calcbaud(res, port, clkp, baud); | ||
583 | best = res; | ||
584 | resptr = best + 1; | ||
585 | } else { | ||
586 | resptr = res; | ||
587 | |||
588 | for (i = 0; i < cfg->clocks_size; i++, clkp++) { | ||
589 | if (s3c24xx_serial_calcbaud(resptr, port, clkp, baud)) | ||
590 | resptr++; | ||
591 | } | ||
592 | } | ||
593 | |||
594 | /* ok, we now need to select the best clock we found */ | ||
595 | |||
596 | if (!best) { | ||
597 | unsigned int deviation = (1<<30)|((1<<30)-1); | ||
598 | int calc_deviation; | ||
599 | |||
600 | for (sptr = res; sptr < resptr; sptr++) { | ||
601 | calc_deviation = baud - sptr->calc; | ||
602 | if (calc_deviation < 0) | ||
603 | calc_deviation = -calc_deviation; | ||
604 | |||
605 | if (calc_deviation < deviation) { | ||
606 | best = sptr; | ||
607 | deviation = calc_deviation; | ||
608 | } | ||
609 | } | ||
610 | } | ||
611 | |||
612 | /* store results to pass back */ | ||
613 | |||
614 | *clksrc = best->clksrc; | ||
615 | *clk = best->src; | ||
616 | |||
617 | return best->quot; | ||
618 | } | ||
619 | |||
620 | static void s3c24xx_serial_set_termios(struct uart_port *port, | ||
621 | struct ktermios *termios, | ||
622 | struct ktermios *old) | ||
623 | { | ||
624 | struct s3c2410_uartcfg *cfg = s3c24xx_port_to_cfg(port); | ||
625 | struct s3c24xx_uart_port *ourport = to_ourport(port); | ||
626 | struct s3c24xx_uart_clksrc *clksrc = NULL; | ||
627 | struct clk *clk = NULL; | ||
628 | unsigned long flags; | ||
629 | unsigned int baud, quot; | ||
630 | unsigned int ulcon; | ||
631 | unsigned int umcon; | ||
632 | |||
633 | /* | ||
634 | * We don't support modem control lines. | ||
635 | */ | ||
636 | termios->c_cflag &= ~(HUPCL | CMSPAR); | ||
637 | termios->c_cflag |= CLOCAL; | ||
638 | |||
639 | /* | ||
640 | * Ask the core to calculate the divisor for us. | ||
641 | */ | ||
642 | |||
643 | baud = uart_get_baud_rate(port, termios, old, 0, 115200*8); | ||
644 | |||
645 | if (baud == 38400 && (port->flags & UPF_SPD_MASK) == UPF_SPD_CUST) | ||
646 | quot = port->custom_divisor; | ||
647 | else | ||
648 | quot = s3c24xx_serial_getclk(port, &clksrc, &clk, baud); | ||
649 | |||
650 | /* check to see if we need to change clock source */ | ||
651 | |||
652 | if (ourport->clksrc != clksrc || ourport->baudclk != clk) { | ||
653 | s3c24xx_serial_setsource(port, clksrc); | ||
654 | |||
655 | if (ourport->baudclk != NULL && !IS_ERR(ourport->baudclk)) { | ||
656 | clk_disable(ourport->baudclk); | ||
657 | ourport->baudclk = NULL; | ||
658 | } | ||
659 | |||
660 | clk_enable(clk); | ||
661 | |||
662 | ourport->clksrc = clksrc; | ||
663 | ourport->baudclk = clk; | ||
664 | } | ||
665 | |||
666 | switch (termios->c_cflag & CSIZE) { | ||
667 | case CS5: | ||
668 | dbg("config: 5bits/char\n"); | ||
669 | ulcon = S3C2410_LCON_CS5; | ||
670 | break; | ||
671 | case CS6: | ||
672 | dbg("config: 6bits/char\n"); | ||
673 | ulcon = S3C2410_LCON_CS6; | ||
674 | break; | ||
675 | case CS7: | ||
676 | dbg("config: 7bits/char\n"); | ||
677 | ulcon = S3C2410_LCON_CS7; | ||
678 | break; | ||
679 | case CS8: | ||
680 | default: | ||
681 | dbg("config: 8bits/char\n"); | ||
682 | ulcon = S3C2410_LCON_CS8; | ||
683 | break; | ||
684 | } | ||
685 | |||
686 | /* preserve original lcon IR settings */ | ||
687 | ulcon |= (cfg->ulcon & S3C2410_LCON_IRM); | ||
688 | |||
689 | if (termios->c_cflag & CSTOPB) | ||
690 | ulcon |= S3C2410_LCON_STOPB; | ||
691 | |||
692 | umcon = (termios->c_cflag & CRTSCTS) ? S3C2410_UMCOM_AFC : 0; | ||
693 | |||
694 | if (termios->c_cflag & PARENB) { | ||
695 | if (termios->c_cflag & PARODD) | ||
696 | ulcon |= S3C2410_LCON_PODD; | ||
697 | else | ||
698 | ulcon |= S3C2410_LCON_PEVEN; | ||
699 | } else { | ||
700 | ulcon |= S3C2410_LCON_PNONE; | ||
701 | } | ||
702 | |||
703 | spin_lock_irqsave(&port->lock, flags); | ||
704 | |||
705 | dbg("setting ulcon to %08x, brddiv to %d\n", ulcon, quot); | ||
706 | |||
707 | wr_regl(port, S3C2410_ULCON, ulcon); | ||
708 | wr_regl(port, S3C2410_UBRDIV, quot); | ||
709 | wr_regl(port, S3C2410_UMCON, umcon); | ||
710 | |||
711 | dbg("uart: ulcon = 0x%08x, ucon = 0x%08x, ufcon = 0x%08x\n", | ||
712 | rd_regl(port, S3C2410_ULCON), | ||
713 | rd_regl(port, S3C2410_UCON), | ||
714 | rd_regl(port, S3C2410_UFCON)); | ||
715 | |||
716 | /* | ||
717 | * Update the per-port timeout. | ||
718 | */ | ||
719 | uart_update_timeout(port, termios->c_cflag, baud); | ||
720 | |||
721 | /* | ||
722 | * Which character status flags are we interested in? | ||
723 | */ | ||
724 | port->read_status_mask = S3C2410_UERSTAT_OVERRUN; | ||
725 | if (termios->c_iflag & INPCK) | ||
726 | port->read_status_mask |= S3C2410_UERSTAT_FRAME | S3C2410_UERSTAT_PARITY; | ||
727 | |||
728 | /* | ||
729 | * Which character status flags should we ignore? | ||
730 | */ | ||
731 | port->ignore_status_mask = 0; | ||
732 | if (termios->c_iflag & IGNPAR) | ||
733 | port->ignore_status_mask |= S3C2410_UERSTAT_OVERRUN; | ||
734 | if (termios->c_iflag & IGNBRK && termios->c_iflag & IGNPAR) | ||
735 | port->ignore_status_mask |= S3C2410_UERSTAT_FRAME; | ||
736 | |||
737 | /* | ||
738 | * Ignore all characters if CREAD is not set. | ||
739 | */ | ||
740 | if ((termios->c_cflag & CREAD) == 0) | ||
741 | port->ignore_status_mask |= RXSTAT_DUMMY_READ; | ||
742 | |||
743 | spin_unlock_irqrestore(&port->lock, flags); | ||
744 | } | ||
745 | |||
746 | static const char *s3c24xx_serial_type(struct uart_port *port) | ||
747 | { | ||
748 | switch (port->type) { | ||
749 | case PORT_S3C2410: | ||
750 | return "S3C2410"; | ||
751 | case PORT_S3C2440: | ||
752 | return "S3C2440"; | ||
753 | case PORT_S3C2412: | ||
754 | return "S3C2412"; | ||
755 | default: | ||
756 | return NULL; | ||
757 | } | ||
758 | } | ||
759 | |||
760 | #define MAP_SIZE (0x100) | ||
761 | |||
762 | static void s3c24xx_serial_release_port(struct uart_port *port) | ||
763 | { | ||
764 | release_mem_region(port->mapbase, MAP_SIZE); | ||
765 | } | ||
766 | |||
767 | static int s3c24xx_serial_request_port(struct uart_port *port) | ||
768 | { | ||
769 | const char *name = s3c24xx_serial_portname(port); | ||
770 | return request_mem_region(port->mapbase, MAP_SIZE, name) ? 0 : -EBUSY; | ||
771 | } | ||
772 | |||
773 | static void s3c24xx_serial_config_port(struct uart_port *port, int flags) | ||
774 | { | ||
775 | struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); | ||
776 | |||
777 | if (flags & UART_CONFIG_TYPE && | ||
778 | s3c24xx_serial_request_port(port) == 0) | ||
779 | port->type = info->type; | ||
780 | } | ||
781 | |||
782 | /* | ||
783 | * verify the new serial_struct (for TIOCSSERIAL). | ||
784 | */ | ||
785 | static int | ||
786 | s3c24xx_serial_verify_port(struct uart_port *port, struct serial_struct *ser) | ||
787 | { | ||
788 | struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); | ||
789 | |||
790 | if (ser->type != PORT_UNKNOWN && ser->type != info->type) | ||
791 | return -EINVAL; | ||
792 | |||
793 | return 0; | ||
794 | } | ||
795 | |||
796 | |||
797 | #ifdef CONFIG_SERIAL_SAMSUNG_CONSOLE | ||
798 | |||
799 | static struct console s3c24xx_serial_console; | ||
800 | |||
801 | #define S3C24XX_SERIAL_CONSOLE &s3c24xx_serial_console | ||
802 | #else | ||
803 | #define S3C24XX_SERIAL_CONSOLE NULL | ||
804 | #endif | ||
805 | |||
806 | static struct uart_ops s3c24xx_serial_ops = { | ||
807 | .pm = s3c24xx_serial_pm, | ||
808 | .tx_empty = s3c24xx_serial_tx_empty, | ||
809 | .get_mctrl = s3c24xx_serial_get_mctrl, | ||
810 | .set_mctrl = s3c24xx_serial_set_mctrl, | ||
811 | .stop_tx = s3c24xx_serial_stop_tx, | ||
812 | .start_tx = s3c24xx_serial_start_tx, | ||
813 | .stop_rx = s3c24xx_serial_stop_rx, | ||
814 | .enable_ms = s3c24xx_serial_enable_ms, | ||
815 | .break_ctl = s3c24xx_serial_break_ctl, | ||
816 | .startup = s3c24xx_serial_startup, | ||
817 | .shutdown = s3c24xx_serial_shutdown, | ||
818 | .set_termios = s3c24xx_serial_set_termios, | ||
819 | .type = s3c24xx_serial_type, | ||
820 | .release_port = s3c24xx_serial_release_port, | ||
821 | .request_port = s3c24xx_serial_request_port, | ||
822 | .config_port = s3c24xx_serial_config_port, | ||
823 | .verify_port = s3c24xx_serial_verify_port, | ||
824 | }; | ||
825 | |||
826 | |||
827 | static struct uart_driver s3c24xx_uart_drv = { | ||
828 | .owner = THIS_MODULE, | ||
829 | .dev_name = "s3c2410_serial", | ||
830 | .nr = 3, | ||
831 | .cons = S3C24XX_SERIAL_CONSOLE, | ||
832 | .driver_name = S3C24XX_SERIAL_NAME, | ||
833 | .major = S3C24XX_SERIAL_MAJOR, | ||
834 | .minor = S3C24XX_SERIAL_MINOR, | ||
835 | }; | ||
836 | |||
837 | static struct s3c24xx_uart_port s3c24xx_serial_ports[NR_PORTS] = { | ||
838 | [0] = { | ||
839 | .port = { | ||
840 | .lock = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[0].port.lock), | ||
841 | .iotype = UPIO_MEM, | ||
842 | .irq = IRQ_S3CUART_RX0, | ||
843 | .uartclk = 0, | ||
844 | .fifosize = 16, | ||
845 | .ops = &s3c24xx_serial_ops, | ||
846 | .flags = UPF_BOOT_AUTOCONF, | ||
847 | .line = 0, | ||
848 | } | ||
849 | }, | ||
850 | [1] = { | ||
851 | .port = { | ||
852 | .lock = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[1].port.lock), | ||
853 | .iotype = UPIO_MEM, | ||
854 | .irq = IRQ_S3CUART_RX1, | ||
855 | .uartclk = 0, | ||
856 | .fifosize = 16, | ||
857 | .ops = &s3c24xx_serial_ops, | ||
858 | .flags = UPF_BOOT_AUTOCONF, | ||
859 | .line = 1, | ||
860 | } | ||
861 | }, | ||
862 | #if NR_PORTS > 2 | ||
863 | |||
864 | [2] = { | ||
865 | .port = { | ||
866 | .lock = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[2].port.lock), | ||
867 | .iotype = UPIO_MEM, | ||
868 | .irq = IRQ_S3CUART_RX2, | ||
869 | .uartclk = 0, | ||
870 | .fifosize = 16, | ||
871 | .ops = &s3c24xx_serial_ops, | ||
872 | .flags = UPF_BOOT_AUTOCONF, | ||
873 | .line = 2, | ||
874 | } | ||
875 | } | ||
876 | #endif | ||
877 | }; | ||
878 | |||
879 | /* s3c24xx_serial_resetport | ||
880 | * | ||
881 | * wrapper to call the specific reset for this port (reset the fifos | ||
882 | * and the settings) | ||
883 | */ | ||
884 | |||
885 | static inline int s3c24xx_serial_resetport(struct uart_port *port, | ||
886 | struct s3c2410_uartcfg *cfg) | ||
887 | { | ||
888 | struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); | ||
889 | |||
890 | return (info->reset_port)(port, cfg); | ||
891 | } | ||
892 | |||
893 | /* s3c24xx_serial_init_port | ||
894 | * | ||
895 | * initialise a single serial port from the platform device given | ||
896 | */ | ||
897 | |||
898 | static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport, | ||
899 | struct s3c24xx_uart_info *info, | ||
900 | struct platform_device *platdev) | ||
901 | { | ||
902 | struct uart_port *port = &ourport->port; | ||
903 | struct s3c2410_uartcfg *cfg; | ||
904 | struct resource *res; | ||
905 | int ret; | ||
906 | |||
907 | dbg("s3c24xx_serial_init_port: port=%p, platdev=%p\n", port, platdev); | ||
908 | |||
909 | if (platdev == NULL) | ||
910 | return -ENODEV; | ||
911 | |||
912 | cfg = s3c24xx_dev_to_cfg(&platdev->dev); | ||
913 | |||
914 | if (port->mapbase != 0) | ||
915 | return 0; | ||
916 | |||
917 | if (cfg->hwport > 3) | ||
918 | return -EINVAL; | ||
919 | |||
920 | /* setup info for port */ | ||
921 | port->dev = &platdev->dev; | ||
922 | ourport->info = info; | ||
923 | |||
924 | /* copy the info in from provided structure */ | ||
925 | ourport->port.fifosize = info->fifosize; | ||
926 | |||
927 | dbg("s3c24xx_serial_init_port: %p (hw %d)...\n", port, cfg->hwport); | ||
928 | |||
929 | port->uartclk = 1; | ||
930 | |||
931 | if (cfg->uart_flags & UPF_CONS_FLOW) { | ||
932 | dbg("s3c24xx_serial_init_port: enabling flow control\n"); | ||
933 | port->flags |= UPF_CONS_FLOW; | ||
934 | } | ||
935 | |||
936 | /* sort our the physical and virtual addresses for each UART */ | ||
937 | |||
938 | res = platform_get_resource(platdev, IORESOURCE_MEM, 0); | ||
939 | if (res == NULL) { | ||
940 | printk(KERN_ERR "failed to find memory resource for uart\n"); | ||
941 | return -EINVAL; | ||
942 | } | ||
943 | |||
944 | dbg("resource %p (%lx..%lx)\n", res, res->start, res->end); | ||
945 | |||
946 | port->mapbase = res->start; | ||
947 | port->membase = S3C24XX_VA_UART + (res->start - S3C24XX_PA_UART); | ||
948 | ret = platform_get_irq(platdev, 0); | ||
949 | if (ret < 0) | ||
950 | port->irq = 0; | ||
951 | else | ||
952 | port->irq = ret; | ||
953 | |||
954 | ourport->clk = clk_get(&platdev->dev, "uart"); | ||
955 | |||
956 | dbg("port: map=%08x, mem=%08x, irq=%d, clock=%ld\n", | ||
957 | port->mapbase, port->membase, port->irq, port->uartclk); | ||
958 | |||
959 | /* reset the fifos (and setup the uart) */ | ||
960 | s3c24xx_serial_resetport(port, cfg); | ||
961 | return 0; | ||
962 | } | ||
963 | |||
964 | static ssize_t s3c24xx_serial_show_clksrc(struct device *dev, | ||
965 | struct device_attribute *attr, | ||
966 | char *buf) | ||
967 | { | ||
968 | struct uart_port *port = s3c24xx_dev_to_port(dev); | ||
969 | struct s3c24xx_uart_port *ourport = to_ourport(port); | ||
970 | |||
971 | return snprintf(buf, PAGE_SIZE, "* %s\n", ourport->clksrc->name); | ||
972 | } | ||
973 | |||
974 | static DEVICE_ATTR(clock_source, S_IRUGO, s3c24xx_serial_show_clksrc, NULL); | ||
975 | |||
976 | /* Device driver serial port probe */ | ||
977 | |||
978 | static int probe_index; | ||
979 | |||
980 | int s3c24xx_serial_probe(struct platform_device *dev, | ||
981 | struct s3c24xx_uart_info *info) | ||
982 | { | ||
983 | struct s3c24xx_uart_port *ourport; | ||
984 | int ret; | ||
985 | |||
986 | dbg("s3c24xx_serial_probe(%p, %p) %d\n", dev, info, probe_index); | ||
987 | |||
988 | ourport = &s3c24xx_serial_ports[probe_index]; | ||
989 | probe_index++; | ||
990 | |||
991 | dbg("%s: initialising port %p...\n", __func__, ourport); | ||
992 | |||
993 | ret = s3c24xx_serial_init_port(ourport, info, dev); | ||
994 | if (ret < 0) | ||
995 | goto probe_err; | ||
996 | |||
997 | dbg("%s: adding port\n", __func__); | ||
998 | uart_add_one_port(&s3c24xx_uart_drv, &ourport->port); | ||
999 | platform_set_drvdata(dev, &ourport->port); | ||
1000 | |||
1001 | ret = device_create_file(&dev->dev, &dev_attr_clock_source); | ||
1002 | if (ret < 0) | ||
1003 | printk(KERN_ERR "%s: failed to add clksrc attr.\n", __func__); | ||
1004 | |||
1005 | return 0; | ||
1006 | |||
1007 | probe_err: | ||
1008 | return ret; | ||
1009 | } | ||
1010 | |||
1011 | EXPORT_SYMBOL_GPL(s3c24xx_serial_probe); | ||
1012 | |||
1013 | int s3c24xx_serial_remove(struct platform_device *dev) | ||
1014 | { | ||
1015 | struct uart_port *port = s3c24xx_dev_to_port(&dev->dev); | ||
1016 | |||
1017 | if (port) { | ||
1018 | device_remove_file(&dev->dev, &dev_attr_clock_source); | ||
1019 | uart_remove_one_port(&s3c24xx_uart_drv, port); | ||
1020 | } | ||
1021 | |||
1022 | return 0; | ||
1023 | } | ||
1024 | |||
1025 | EXPORT_SYMBOL_GPL(s3c24xx_serial_remove); | ||
1026 | |||
1027 | /* UART power management code */ | ||
1028 | |||
1029 | #ifdef CONFIG_PM | ||
1030 | |||
1031 | static int s3c24xx_serial_suspend(struct platform_device *dev, pm_message_t state) | ||
1032 | { | ||
1033 | struct uart_port *port = s3c24xx_dev_to_port(&dev->dev); | ||
1034 | |||
1035 | if (port) | ||
1036 | uart_suspend_port(&s3c24xx_uart_drv, port); | ||
1037 | |||
1038 | return 0; | ||
1039 | } | ||
1040 | |||
1041 | static int s3c24xx_serial_resume(struct platform_device *dev) | ||
1042 | { | ||
1043 | struct uart_port *port = s3c24xx_dev_to_port(&dev->dev); | ||
1044 | struct s3c24xx_uart_port *ourport = to_ourport(port); | ||
1045 | |||
1046 | if (port) { | ||
1047 | clk_enable(ourport->clk); | ||
1048 | s3c24xx_serial_resetport(port, s3c24xx_port_to_cfg(port)); | ||
1049 | clk_disable(ourport->clk); | ||
1050 | |||
1051 | uart_resume_port(&s3c24xx_uart_drv, port); | ||
1052 | } | ||
1053 | |||
1054 | return 0; | ||
1055 | } | ||
1056 | #endif | ||
1057 | |||
1058 | int s3c24xx_serial_init(struct platform_driver *drv, | ||
1059 | struct s3c24xx_uart_info *info) | ||
1060 | { | ||
1061 | dbg("s3c24xx_serial_init(%p,%p)\n", drv, info); | ||
1062 | |||
1063 | #ifdef CONFIG_PM | ||
1064 | drv->suspend = s3c24xx_serial_suspend; | ||
1065 | drv->resume = s3c24xx_serial_resume; | ||
1066 | #endif | ||
1067 | |||
1068 | return platform_driver_register(drv); | ||
1069 | } | ||
1070 | |||
1071 | EXPORT_SYMBOL_GPL(s3c24xx_serial_init); | ||
1072 | |||
1073 | /* module initialisation code */ | ||
1074 | |||
1075 | static int __init s3c24xx_serial_modinit(void) | ||
1076 | { | ||
1077 | int ret; | ||
1078 | |||
1079 | ret = uart_register_driver(&s3c24xx_uart_drv); | ||
1080 | if (ret < 0) { | ||
1081 | printk(KERN_ERR "failed to register UART driver\n"); | ||
1082 | return -1; | ||
1083 | } | ||
1084 | |||
1085 | return 0; | ||
1086 | } | ||
1087 | |||
1088 | static void __exit s3c24xx_serial_modexit(void) | ||
1089 | { | ||
1090 | uart_unregister_driver(&s3c24xx_uart_drv); | ||
1091 | } | ||
1092 | |||
1093 | module_init(s3c24xx_serial_modinit); | ||
1094 | module_exit(s3c24xx_serial_modexit); | ||
1095 | |||
1096 | /* Console code */ | ||
1097 | |||
1098 | #ifdef CONFIG_SERIAL_SAMSUNG_CONSOLE | ||
1099 | |||
1100 | static struct uart_port *cons_uart; | ||
1101 | |||
1102 | static int | ||
1103 | s3c24xx_serial_console_txrdy(struct uart_port *port, unsigned int ufcon) | ||
1104 | { | ||
1105 | struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); | ||
1106 | unsigned long ufstat, utrstat; | ||
1107 | |||
1108 | if (ufcon & S3C2410_UFCON_FIFOMODE) { | ||
1109 | /* fifo mode - check ammount of data in fifo registers... */ | ||
1110 | |||
1111 | ufstat = rd_regl(port, S3C2410_UFSTAT); | ||
1112 | return (ufstat & info->tx_fifofull) ? 0 : 1; | ||
1113 | } | ||
1114 | |||
1115 | /* in non-fifo mode, we go and use the tx buffer empty */ | ||
1116 | |||
1117 | utrstat = rd_regl(port, S3C2410_UTRSTAT); | ||
1118 | return (utrstat & S3C2410_UTRSTAT_TXE) ? 1 : 0; | ||
1119 | } | ||
1120 | |||
1121 | static void | ||
1122 | s3c24xx_serial_console_putchar(struct uart_port *port, int ch) | ||
1123 | { | ||
1124 | unsigned int ufcon = rd_regl(cons_uart, S3C2410_UFCON); | ||
1125 | while (!s3c24xx_serial_console_txrdy(port, ufcon)) | ||
1126 | barrier(); | ||
1127 | wr_regb(cons_uart, S3C2410_UTXH, ch); | ||
1128 | } | ||
1129 | |||
1130 | static void | ||
1131 | s3c24xx_serial_console_write(struct console *co, const char *s, | ||
1132 | unsigned int count) | ||
1133 | { | ||
1134 | uart_console_write(cons_uart, s, count, s3c24xx_serial_console_putchar); | ||
1135 | } | ||
1136 | |||
1137 | static void __init | ||
1138 | s3c24xx_serial_get_options(struct uart_port *port, int *baud, | ||
1139 | int *parity, int *bits) | ||
1140 | { | ||
1141 | struct s3c24xx_uart_clksrc clksrc; | ||
1142 | struct clk *clk; | ||
1143 | unsigned int ulcon; | ||
1144 | unsigned int ucon; | ||
1145 | unsigned int ubrdiv; | ||
1146 | unsigned long rate; | ||
1147 | |||
1148 | ulcon = rd_regl(port, S3C2410_ULCON); | ||
1149 | ucon = rd_regl(port, S3C2410_UCON); | ||
1150 | ubrdiv = rd_regl(port, S3C2410_UBRDIV); | ||
1151 | |||
1152 | dbg("s3c24xx_serial_get_options: port=%p\n" | ||
1153 | "registers: ulcon=%08x, ucon=%08x, ubdriv=%08x\n", | ||
1154 | port, ulcon, ucon, ubrdiv); | ||
1155 | |||
1156 | if ((ucon & 0xf) != 0) { | ||
1157 | /* consider the serial port configured if the tx/rx mode set */ | ||
1158 | |||
1159 | switch (ulcon & S3C2410_LCON_CSMASK) { | ||
1160 | case S3C2410_LCON_CS5: | ||
1161 | *bits = 5; | ||
1162 | break; | ||
1163 | case S3C2410_LCON_CS6: | ||
1164 | *bits = 6; | ||
1165 | break; | ||
1166 | case S3C2410_LCON_CS7: | ||
1167 | *bits = 7; | ||
1168 | break; | ||
1169 | default: | ||
1170 | case S3C2410_LCON_CS8: | ||
1171 | *bits = 8; | ||
1172 | break; | ||
1173 | } | ||
1174 | |||
1175 | switch (ulcon & S3C2410_LCON_PMASK) { | ||
1176 | case S3C2410_LCON_PEVEN: | ||
1177 | *parity = 'e'; | ||
1178 | break; | ||
1179 | |||
1180 | case S3C2410_LCON_PODD: | ||
1181 | *parity = 'o'; | ||
1182 | break; | ||
1183 | |||
1184 | case S3C2410_LCON_PNONE: | ||
1185 | default: | ||
1186 | *parity = 'n'; | ||
1187 | } | ||
1188 | |||
1189 | /* now calculate the baud rate */ | ||
1190 | |||
1191 | s3c24xx_serial_getsource(port, &clksrc); | ||
1192 | |||
1193 | clk = clk_get(port->dev, clksrc.name); | ||
1194 | if (!IS_ERR(clk) && clk != NULL) | ||
1195 | rate = clk_get_rate(clk) / clksrc.divisor; | ||
1196 | else | ||
1197 | rate = 1; | ||
1198 | |||
1199 | |||
1200 | *baud = rate / (16 * (ubrdiv + 1)); | ||
1201 | dbg("calculated baud %d\n", *baud); | ||
1202 | } | ||
1203 | |||
1204 | } | ||
1205 | |||
1206 | /* s3c24xx_serial_init_ports | ||
1207 | * | ||
1208 | * initialise the serial ports from the machine provided initialisation | ||
1209 | * data. | ||
1210 | */ | ||
1211 | |||
1212 | static int s3c24xx_serial_init_ports(struct s3c24xx_uart_info *info) | ||
1213 | { | ||
1214 | struct s3c24xx_uart_port *ptr = s3c24xx_serial_ports; | ||
1215 | struct platform_device **platdev_ptr; | ||
1216 | int i; | ||
1217 | |||
1218 | dbg("s3c24xx_serial_init_ports: initialising ports...\n"); | ||
1219 | |||
1220 | platdev_ptr = s3c24xx_uart_devs; | ||
1221 | |||
1222 | for (i = 0; i < NR_PORTS; i++, ptr++, platdev_ptr++) { | ||
1223 | s3c24xx_serial_init_port(ptr, info, *platdev_ptr); | ||
1224 | } | ||
1225 | |||
1226 | return 0; | ||
1227 | } | ||
1228 | |||
1229 | static int __init | ||
1230 | s3c24xx_serial_console_setup(struct console *co, char *options) | ||
1231 | { | ||
1232 | struct uart_port *port; | ||
1233 | int baud = 9600; | ||
1234 | int bits = 8; | ||
1235 | int parity = 'n'; | ||
1236 | int flow = 'n'; | ||
1237 | |||
1238 | dbg("s3c24xx_serial_console_setup: co=%p (%d), %s\n", | ||
1239 | co, co->index, options); | ||
1240 | |||
1241 | /* is this a valid port */ | ||
1242 | |||
1243 | if (co->index == -1 || co->index >= NR_PORTS) | ||
1244 | co->index = 0; | ||
1245 | |||
1246 | port = &s3c24xx_serial_ports[co->index].port; | ||
1247 | |||
1248 | /* is the port configured? */ | ||
1249 | |||
1250 | if (port->mapbase == 0x0) { | ||
1251 | co->index = 0; | ||
1252 | port = &s3c24xx_serial_ports[co->index].port; | ||
1253 | } | ||
1254 | |||
1255 | cons_uart = port; | ||
1256 | |||
1257 | dbg("s3c24xx_serial_console_setup: port=%p (%d)\n", port, co->index); | ||
1258 | |||
1259 | /* | ||
1260 | * Check whether an invalid uart number has been specified, and | ||
1261 | * if so, search for the first available port that does have | ||
1262 | * console support. | ||
1263 | */ | ||
1264 | if (options) | ||
1265 | uart_parse_options(options, &baud, &parity, &bits, &flow); | ||
1266 | else | ||
1267 | s3c24xx_serial_get_options(port, &baud, &parity, &bits); | ||
1268 | |||
1269 | dbg("s3c24xx_serial_console_setup: baud %d\n", baud); | ||
1270 | |||
1271 | return uart_set_options(port, co, baud, parity, bits, flow); | ||
1272 | } | ||
1273 | |||
1274 | /* s3c24xx_serial_initconsole | ||
1275 | * | ||
1276 | * initialise the console from one of the uart drivers | ||
1277 | */ | ||
1278 | |||
1279 | static struct console s3c24xx_serial_console = { | ||
1280 | .name = S3C24XX_SERIAL_NAME, | ||
1281 | .device = uart_console_device, | ||
1282 | .flags = CON_PRINTBUFFER, | ||
1283 | .index = -1, | ||
1284 | .write = s3c24xx_serial_console_write, | ||
1285 | .setup = s3c24xx_serial_console_setup | ||
1286 | }; | ||
1287 | |||
1288 | int s3c24xx_serial_initconsole(struct platform_driver *drv, | ||
1289 | struct s3c24xx_uart_info *info) | ||
1290 | |||
1291 | { | ||
1292 | struct platform_device *dev = s3c24xx_uart_devs[0]; | ||
1293 | |||
1294 | dbg("s3c24xx_serial_initconsole\n"); | ||
1295 | |||
1296 | /* select driver based on the cpu */ | ||
1297 | |||
1298 | if (dev == NULL) { | ||
1299 | printk(KERN_ERR "s3c24xx: no devices for console init\n"); | ||
1300 | return 0; | ||
1301 | } | ||
1302 | |||
1303 | if (strcmp(dev->name, drv->driver.name) != 0) | ||
1304 | return 0; | ||
1305 | |||
1306 | s3c24xx_serial_console.data = &s3c24xx_uart_drv; | ||
1307 | s3c24xx_serial_init_ports(info); | ||
1308 | |||
1309 | register_console(&s3c24xx_serial_console); | ||
1310 | return 0; | ||
1311 | } | ||
1312 | |||
1313 | #endif /* CONFIG_SERIAL_SAMSUNG_CONSOLE */ | ||
1314 | |||
1315 | MODULE_DESCRIPTION("Samsung SoC Serial port driver"); | ||
1316 | MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>"); | ||
1317 | MODULE_LICENSE("GPL v2"); | ||
diff --git a/drivers/serial/samsung.h b/drivers/serial/samsung.h new file mode 100644 index 000000000000..5c92ebbe7d9e --- /dev/null +++ b/drivers/serial/samsung.h | |||
@@ -0,0 +1,102 @@ | |||
1 | /* linux/drivers/serial/samsung.h | ||
2 | * | ||
3 | * Driver for Samsung SoC onboard UARTs. | ||
4 | * | ||
5 | * Ben Dooks, Copyright (c) 2003-2005,2008 Simtec Electronics | ||
6 | * http://armlinux.simtec.co.uk/ | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License version 2 as | ||
10 | * published by the Free Software Foundation. | ||
11 | */ | ||
12 | |||
13 | struct s3c24xx_uart_info { | ||
14 | char *name; | ||
15 | unsigned int type; | ||
16 | unsigned int fifosize; | ||
17 | unsigned long rx_fifomask; | ||
18 | unsigned long rx_fifoshift; | ||
19 | unsigned long rx_fifofull; | ||
20 | unsigned long tx_fifomask; | ||
21 | unsigned long tx_fifoshift; | ||
22 | unsigned long tx_fifofull; | ||
23 | |||
24 | /* clock source control */ | ||
25 | |||
26 | int (*get_clksrc)(struct uart_port *, struct s3c24xx_uart_clksrc *clk); | ||
27 | int (*set_clksrc)(struct uart_port *, struct s3c24xx_uart_clksrc *clk); | ||
28 | |||
29 | /* uart controls */ | ||
30 | int (*reset_port)(struct uart_port *, struct s3c2410_uartcfg *); | ||
31 | }; | ||
32 | |||
33 | struct s3c24xx_uart_port { | ||
34 | unsigned char rx_claimed; | ||
35 | unsigned char tx_claimed; | ||
36 | |||
37 | struct s3c24xx_uart_info *info; | ||
38 | struct s3c24xx_uart_clksrc *clksrc; | ||
39 | struct clk *clk; | ||
40 | struct clk *baudclk; | ||
41 | struct uart_port port; | ||
42 | }; | ||
43 | |||
44 | /* conversion functions */ | ||
45 | |||
46 | #define s3c24xx_dev_to_port(__dev) (struct uart_port *)dev_get_drvdata(__dev) | ||
47 | #define s3c24xx_dev_to_cfg(__dev) (struct s3c2410_uartcfg *)((__dev)->platform_data) | ||
48 | |||
49 | /* register access controls */ | ||
50 | |||
51 | #define portaddr(port, reg) ((port)->membase + (reg)) | ||
52 | |||
53 | #define rd_regb(port, reg) (__raw_readb(portaddr(port, reg))) | ||
54 | #define rd_regl(port, reg) (__raw_readl(portaddr(port, reg))) | ||
55 | |||
56 | #define wr_regb(port, reg, val) __raw_writeb(val, portaddr(port, reg)) | ||
57 | #define wr_regl(port, reg, val) __raw_writel(val, portaddr(port, reg)) | ||
58 | |||
59 | extern int s3c24xx_serial_probe(struct platform_device *dev, | ||
60 | struct s3c24xx_uart_info *uart); | ||
61 | |||
62 | extern int s3c24xx_serial_remove(struct platform_device *dev); | ||
63 | |||
64 | extern int s3c24xx_serial_initconsole(struct platform_driver *drv, | ||
65 | struct s3c24xx_uart_info *uart); | ||
66 | |||
67 | extern int s3c24xx_serial_init(struct platform_driver *drv, | ||
68 | struct s3c24xx_uart_info *info); | ||
69 | |||
70 | #ifdef CONFIG_SERIAL_SAMSUNG_CONSOLE | ||
71 | |||
72 | #define s3c24xx_console_init(__drv, __inf) \ | ||
73 | static int __init s3c_serial_console_init(void) \ | ||
74 | { \ | ||
75 | return s3c24xx_serial_initconsole(__drv, __inf); \ | ||
76 | } \ | ||
77 | \ | ||
78 | console_initcall(s3c_serial_console_init) | ||
79 | |||
80 | #else | ||
81 | #define s3c24xx_console_init(drv, inf) extern void no_console(void) | ||
82 | #endif | ||
83 | |||
84 | #ifdef CONFIG_SERIAL_SAMSUNG_DEBUG | ||
85 | |||
86 | extern void printascii(const char *); | ||
87 | |||
88 | static void dbg(const char *fmt, ...) | ||
89 | { | ||
90 | va_list va; | ||
91 | char buff[256]; | ||
92 | |||
93 | va_start(va, fmt); | ||
94 | vsprintf(buff, fmt, va); | ||
95 | va_end(va); | ||
96 | |||
97 | printascii(buff); | ||
98 | } | ||
99 | |||
100 | #else | ||
101 | #define dbg(x...) do { } while (0) | ||
102 | #endif | ||
diff --git a/drivers/spi/spi_imx.c b/drivers/spi/spi_imx.c index c730d05bfeb6..547e30298278 100644 --- a/drivers/spi/spi_imx.c +++ b/drivers/spi/spi_imx.c | |||
@@ -1526,24 +1526,24 @@ static int __init spi_imx_probe(struct platform_device *pdev) | |||
1526 | drv_data->rx_channel = -1; | 1526 | drv_data->rx_channel = -1; |
1527 | if (platform_info->enable_dma) { | 1527 | if (platform_info->enable_dma) { |
1528 | /* Get rx DMA channel */ | 1528 | /* Get rx DMA channel */ |
1529 | status = imx_dma_request_by_prio(&drv_data->rx_channel, | 1529 | drv_data->rx_channel = imx_dma_request_by_prio("spi_imx_rx", |
1530 | "spi_imx_rx", DMA_PRIO_HIGH); | 1530 | DMA_PRIO_HIGH); |
1531 | if (status < 0) { | 1531 | if (drv_data->rx_channel < 0) { |
1532 | dev_err(dev, | 1532 | dev_err(dev, |
1533 | "probe - problem (%d) requesting rx channel\n", | 1533 | "probe - problem (%d) requesting rx channel\n", |
1534 | status); | 1534 | drv_data->rx_channel); |
1535 | goto err_no_rxdma; | 1535 | goto err_no_rxdma; |
1536 | } else | 1536 | } else |
1537 | imx_dma_setup_handlers(drv_data->rx_channel, NULL, | 1537 | imx_dma_setup_handlers(drv_data->rx_channel, NULL, |
1538 | dma_err_handler, drv_data); | 1538 | dma_err_handler, drv_data); |
1539 | 1539 | ||
1540 | /* Get tx DMA channel */ | 1540 | /* Get tx DMA channel */ |
1541 | status = imx_dma_request_by_prio(&drv_data->tx_channel, | 1541 | drv_data->tx_channel = imx_dma_request_by_prio("spi_imx_tx", |
1542 | "spi_imx_tx", DMA_PRIO_MEDIUM); | 1542 | DMA_PRIO_MEDIUM); |
1543 | if (status < 0) { | 1543 | if (drv_data->tx_channel < 0) { |
1544 | dev_err(dev, | 1544 | dev_err(dev, |
1545 | "probe - problem (%d) requesting tx channel\n", | 1545 | "probe - problem (%d) requesting tx channel\n", |
1546 | status); | 1546 | drv_data->tx_channel); |
1547 | imx_dma_free(drv_data->rx_channel); | 1547 | imx_dma_free(drv_data->rx_channel); |
1548 | goto err_no_txdma; | 1548 | goto err_no_txdma; |
1549 | } else | 1549 | } else |
diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig index 6e784d2db423..3565d4352826 100644 --- a/drivers/usb/gadget/Kconfig +++ b/drivers/usb/gadget/Kconfig | |||
@@ -118,10 +118,10 @@ config USB_AMD5536UDC | |||
118 | config USB_GADGET_ATMEL_USBA | 118 | config USB_GADGET_ATMEL_USBA |
119 | boolean "Atmel USBA" | 119 | boolean "Atmel USBA" |
120 | select USB_GADGET_DUALSPEED | 120 | select USB_GADGET_DUALSPEED |
121 | depends on AVR32 || ARCH_AT91CAP9 | 121 | depends on AVR32 || ARCH_AT91CAP9 || ARCH_AT91SAM9RL |
122 | help | 122 | help |
123 | USBA is the integrated high-speed USB Device controller on | 123 | USBA is the integrated high-speed USB Device controller on |
124 | the AT32AP700x and AT91CAP9 processors from Atmel. | 124 | the AT32AP700x, some AT91SAM9 and AT91CAP9 processors from Atmel. |
125 | 125 | ||
126 | config USB_ATMEL_USBA | 126 | config USB_ATMEL_USBA |
127 | tristate | 127 | tristate |
diff --git a/drivers/usb/gadget/at91_udc.c b/drivers/usb/gadget/at91_udc.c index 274c60a970cd..b6b2a0a5ba37 100644 --- a/drivers/usb/gadget/at91_udc.c +++ b/drivers/usb/gadget/at91_udc.c | |||
@@ -888,7 +888,7 @@ static void pullup(struct at91_udc *udc, int is_on) | |||
888 | at91_udp_write(udc, AT91_UDP_TXVC, 0); | 888 | at91_udp_write(udc, AT91_UDP_TXVC, 0); |
889 | if (cpu_is_at91rm9200()) | 889 | if (cpu_is_at91rm9200()) |
890 | gpio_set_value(udc->board.pullup_pin, active); | 890 | gpio_set_value(udc->board.pullup_pin, active); |
891 | else if (cpu_is_at91sam9260() || cpu_is_at91sam9263()) { | 891 | else if (cpu_is_at91sam9260() || cpu_is_at91sam9263() || cpu_is_at91sam9g20()) { |
892 | u32 txvc = at91_udp_read(udc, AT91_UDP_TXVC); | 892 | u32 txvc = at91_udp_read(udc, AT91_UDP_TXVC); |
893 | 893 | ||
894 | txvc |= AT91_UDP_TXVC_PUON; | 894 | txvc |= AT91_UDP_TXVC_PUON; |
@@ -906,7 +906,7 @@ static void pullup(struct at91_udc *udc, int is_on) | |||
906 | at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS); | 906 | at91_udp_write(udc, AT91_UDP_TXVC, AT91_UDP_TXVC_TXVDIS); |
907 | if (cpu_is_at91rm9200()) | 907 | if (cpu_is_at91rm9200()) |
908 | gpio_set_value(udc->board.pullup_pin, !active); | 908 | gpio_set_value(udc->board.pullup_pin, !active); |
909 | else if (cpu_is_at91sam9260() || cpu_is_at91sam9263()) { | 909 | else if (cpu_is_at91sam9260() || cpu_is_at91sam9263() || cpu_is_at91sam9g20()) { |
910 | u32 txvc = at91_udp_read(udc, AT91_UDP_TXVC); | 910 | u32 txvc = at91_udp_read(udc, AT91_UDP_TXVC); |
911 | 911 | ||
912 | txvc &= ~AT91_UDP_TXVC_PUON; | 912 | txvc &= ~AT91_UDP_TXVC_PUON; |
diff --git a/include/asm-arm/arch-at91/at91_pmc.h b/include/asm-arm/arch-at91/at91_pmc.h index c2b13c280155..2001e81f2267 100644 --- a/include/asm-arm/arch-at91/at91_pmc.h +++ b/include/asm-arm/arch-at91/at91_pmc.h | |||
@@ -39,10 +39,14 @@ | |||
39 | #define AT91_PMC_PCSR (AT91_PMC + 0x18) /* Peripheral Clock Status Register */ | 39 | #define AT91_PMC_PCSR (AT91_PMC + 0x18) /* Peripheral Clock Status Register */ |
40 | 40 | ||
41 | #define AT91_CKGR_UCKR (AT91_PMC + 0x1C) /* UTMI Clock Register [SAM9RL, CAP9] */ | 41 | #define AT91_CKGR_UCKR (AT91_PMC + 0x1C) /* UTMI Clock Register [SAM9RL, CAP9] */ |
42 | #define AT91_PMC_UPLLEN (1 << 16) /* UTMI PLL Enable */ | ||
43 | #define AT91_PMC_UPLLCOUNT (0xf << 20) /* UTMI PLL Start-up Time */ | ||
44 | #define AT91_PMC_BIASEN (1 << 24) /* UTMI BIAS Enable */ | ||
45 | #define AT91_PMC_BIASCOUNT (0xf << 28) /* UTMI PLL Start-up Time */ | ||
42 | 46 | ||
43 | #define AT91_CKGR_MOR (AT91_PMC + 0x20) /* Main Oscillator Register [not on SAM9RL] */ | 47 | #define AT91_CKGR_MOR (AT91_PMC + 0x20) /* Main Oscillator Register [not on SAM9RL] */ |
44 | #define AT91_PMC_MOSCEN (1 << 0) /* Main Oscillator Enable */ | 48 | #define AT91_PMC_MOSCEN (1 << 0) /* Main Oscillator Enable */ |
45 | #define AT91_PMC_OSCBYPASS (1 << 1) /* Oscillator Bypass [AT91SAM926x only] */ | 49 | #define AT91_PMC_OSCBYPASS (1 << 1) /* Oscillator Bypass [SAM9x, CAP9] */ |
46 | #define AT91_PMC_OSCOUNT (0xff << 8) /* Main Oscillator Start-up Time */ | 50 | #define AT91_PMC_OSCOUNT (0xff << 8) /* Main Oscillator Start-up Time */ |
47 | 51 | ||
48 | #define AT91_CKGR_MCFR (AT91_PMC + 0x24) /* Main Clock Frequency Register */ | 52 | #define AT91_CKGR_MCFR (AT91_PMC + 0x24) /* Main Clock Frequency Register */ |
@@ -97,6 +101,7 @@ | |||
97 | #define AT91_PMC_LOCKA (1 << 1) /* PLLA Lock */ | 101 | #define AT91_PMC_LOCKA (1 << 1) /* PLLA Lock */ |
98 | #define AT91_PMC_LOCKB (1 << 2) /* PLLB Lock */ | 102 | #define AT91_PMC_LOCKB (1 << 2) /* PLLB Lock */ |
99 | #define AT91_PMC_MCKRDY (1 << 3) /* Master Clock */ | 103 | #define AT91_PMC_MCKRDY (1 << 3) /* Master Clock */ |
104 | #define AT91_PMC_LOCKU (1 << 6) /* UPLL Lock [AT91CAP9 only] */ | ||
100 | #define AT91_PMC_PCK0RDY (1 << 8) /* Programmable Clock 0 */ | 105 | #define AT91_PMC_PCK0RDY (1 << 8) /* Programmable Clock 0 */ |
101 | #define AT91_PMC_PCK1RDY (1 << 9) /* Programmable Clock 1 */ | 106 | #define AT91_PMC_PCK1RDY (1 << 9) /* Programmable Clock 1 */ |
102 | #define AT91_PMC_PCK2RDY (1 << 10) /* Programmable Clock 2 */ | 107 | #define AT91_PMC_PCK2RDY (1 << 10) /* Programmable Clock 2 */ |
diff --git a/include/asm-arm/arch-at91/at91cap9.h b/include/asm-arm/arch-at91/at91cap9.h index bac83adb5050..6f14d9053ac7 100644 --- a/include/asm-arm/arch-at91/at91cap9.h +++ b/include/asm-arm/arch-at91/at91cap9.h | |||
@@ -118,7 +118,7 @@ | |||
118 | #define AT91CAP9_ROM_SIZE (32 * SZ_1K) /* Internal ROM size (32Kb) */ | 118 | #define AT91CAP9_ROM_SIZE (32 * SZ_1K) /* Internal ROM size (32Kb) */ |
119 | 119 | ||
120 | #define AT91CAP9_LCDC_BASE 0x00500000 /* LCD Controller */ | 120 | #define AT91CAP9_LCDC_BASE 0x00500000 /* LCD Controller */ |
121 | #define AT91CAP9_UDPHS_BASE 0x00600000 /* USB High Speed Device Port */ | 121 | #define AT91CAP9_UDPHS_FIFO 0x00600000 /* USB High Speed Device Port */ |
122 | #define AT91CAP9_UHP_BASE 0x00700000 /* USB Host controller */ | 122 | #define AT91CAP9_UHP_BASE 0x00700000 /* USB Host controller */ |
123 | 123 | ||
124 | #define CONFIG_DRAM_BASE AT91_CHIPSELECT_6 | 124 | #define CONFIG_DRAM_BASE AT91_CHIPSELECT_6 |
diff --git a/include/asm-arm/arch-at91/at91cap9_matrix.h b/include/asm-arm/arch-at91/at91cap9_matrix.h index a641686b6c3d..ddbd4873c842 100644 --- a/include/asm-arm/arch-at91/at91cap9_matrix.h +++ b/include/asm-arm/arch-at91/at91cap9_matrix.h | |||
@@ -106,6 +106,11 @@ | |||
106 | #define AT91_MPBS0_SFR (AT91_MATRIX + 0x114) /* MPBlock Slave 0 Special Function Register */ | 106 | #define AT91_MPBS0_SFR (AT91_MATRIX + 0x114) /* MPBlock Slave 0 Special Function Register */ |
107 | #define AT91_MPBS1_SFR (AT91_MATRIX + 0x11C) /* MPBlock Slave 1 Special Function Register */ | 107 | #define AT91_MPBS1_SFR (AT91_MATRIX + 0x11C) /* MPBlock Slave 1 Special Function Register */ |
108 | 108 | ||
109 | #define AT91_MATRIX_UDPHS (AT91_MATRIX + 0x118) /* USBHS Special Function Register [AT91CAP9 only] */ | ||
110 | #define AT91_MATRIX_SELECT_UDPHS (0 << 31) /* select High Speed UDP */ | ||
111 | #define AT91_MATRIX_SELECT_UDP (1 << 31) /* select standard UDP */ | ||
112 | #define AT91_MATRIX_UDPHS_BYPASS_LOCK (1 << 30) /* bypass lock bit */ | ||
113 | |||
109 | #define AT91_MATRIX_EBICSA (AT91_MATRIX + 0x120) /* EBI Chip Select Assignment Register */ | 114 | #define AT91_MATRIX_EBICSA (AT91_MATRIX + 0x120) /* EBI Chip Select Assignment Register */ |
110 | #define AT91_MATRIX_EBI_CS1A (1 << 1) /* Chip Select 1 Assignment */ | 115 | #define AT91_MATRIX_EBI_CS1A (1 << 1) /* Chip Select 1 Assignment */ |
111 | #define AT91_MATRIX_EBI_CS1A_SMC (0 << 1) | 116 | #define AT91_MATRIX_EBI_CS1A_SMC (0 << 1) |
diff --git a/include/asm-arm/arch-at91/at91sam9260.h b/include/asm-arm/arch-at91/at91sam9260.h index c8934fe34dc5..889872a3f2a9 100644 --- a/include/asm-arm/arch-at91/at91sam9260.h +++ b/include/asm-arm/arch-at91/at91sam9260.h | |||
@@ -6,6 +6,8 @@ | |||
6 | * Common definitions. | 6 | * Common definitions. |
7 | * Based on AT91SAM9260 datasheet revision A (Preliminary). | 7 | * Based on AT91SAM9260 datasheet revision A (Preliminary). |
8 | * | 8 | * |
9 | * Includes also definitions for AT91SAM9XE and AT91SAM9G families | ||
10 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | 11 | * This program is free software; you can redistribute it and/or modify |
10 | * it under the terms of the GNU General Public License as published by | 12 | * it under the terms of the GNU General Public License as published by |
11 | * the Free Software Foundation; either version 2 of the License, or | 13 | * the Free Software Foundation; either version 2 of the License, or |
@@ -123,5 +125,14 @@ | |||
123 | #define AT91SAM9XE_FLASH_BASE 0x00200000 /* Internal FLASH base address */ | 125 | #define AT91SAM9XE_FLASH_BASE 0x00200000 /* Internal FLASH base address */ |
124 | #define AT91SAM9XE_SRAM_BASE 0x00300000 /* Internal SRAM base address */ | 126 | #define AT91SAM9XE_SRAM_BASE 0x00300000 /* Internal SRAM base address */ |
125 | 127 | ||
128 | #define AT91SAM9G20_ROM_BASE 0x00100000 /* Internal ROM base address */ | ||
129 | #define AT91SAM9G20_ROM_SIZE SZ_32K /* Internal ROM size (32Kb) */ | ||
130 | |||
131 | #define AT91SAM9G20_SRAM0_BASE 0x00200000 /* Internal SRAM 0 base address */ | ||
132 | #define AT91SAM9G20_SRAM0_SIZE SZ_16K /* Internal SRAM 0 size (16Kb) */ | ||
133 | #define AT91SAM9G20_SRAM1_BASE 0x00300000 /* Internal SRAM 1 base address */ | ||
134 | #define AT91SAM9G20_SRAM1_SIZE SZ_16K /* Internal SRAM 1 size (16Kb) */ | ||
135 | |||
136 | #define AT91SAM9G20_UHP_BASE 0x00500000 /* USB Host controller */ | ||
126 | 137 | ||
127 | #endif | 138 | #endif |
diff --git a/include/asm-arm/arch-at91/at91sam9rl.h b/include/asm-arm/arch-at91/at91sam9rl.h index 16d2832f6c0a..622e56f81d42 100644 --- a/include/asm-arm/arch-at91/at91sam9rl.h +++ b/include/asm-arm/arch-at91/at91sam9rl.h | |||
@@ -110,6 +110,6 @@ | |||
110 | #define AT91SAM9RL_ROM_SIZE (2 * SZ_16K) /* Internal ROM size (32Kb) */ | 110 | #define AT91SAM9RL_ROM_SIZE (2 * SZ_16K) /* Internal ROM size (32Kb) */ |
111 | 111 | ||
112 | #define AT91SAM9RL_LCDC_BASE 0x00500000 /* LCD Controller */ | 112 | #define AT91SAM9RL_LCDC_BASE 0x00500000 /* LCD Controller */ |
113 | #define AT91SAM9RL_UDPHS_BASE 0x00600000 /* USB Device HS controller */ | 113 | #define AT91SAM9RL_UDPHS_FIFO 0x00600000 /* USB Device HS controller */ |
114 | 114 | ||
115 | #endif | 115 | #endif |
diff --git a/include/asm-arm/arch-at91/board.h b/include/asm-arm/arch-at91/board.h index dc189f01c5b3..94de788da76e 100644 --- a/include/asm-arm/arch-at91/board.h +++ b/include/asm-arm/arch-at91/board.h | |||
@@ -36,6 +36,7 @@ | |||
36 | #include <linux/i2c.h> | 36 | #include <linux/i2c.h> |
37 | #include <linux/leds.h> | 37 | #include <linux/leds.h> |
38 | #include <linux/spi/spi.h> | 38 | #include <linux/spi/spi.h> |
39 | #include <linux/usb/atmel_usba_udc.h> | ||
39 | 40 | ||
40 | /* USB Device */ | 41 | /* USB Device */ |
41 | struct at91_udc_data { | 42 | struct at91_udc_data { |
@@ -45,6 +46,9 @@ struct at91_udc_data { | |||
45 | }; | 46 | }; |
46 | extern void __init at91_add_device_udc(struct at91_udc_data *data); | 47 | extern void __init at91_add_device_udc(struct at91_udc_data *data); |
47 | 48 | ||
49 | /* USB High Speed Device */ | ||
50 | extern void __init at91_add_device_usba(struct usba_platform_data *data); | ||
51 | |||
48 | /* Compact Flash */ | 52 | /* Compact Flash */ |
49 | struct at91_cf_data { | 53 | struct at91_cf_data { |
50 | u8 irq_pin; /* I/O IRQ */ | 54 | u8 irq_pin; /* I/O IRQ */ |
@@ -73,7 +77,7 @@ struct at91_eth_data { | |||
73 | }; | 77 | }; |
74 | extern void __init at91_add_device_eth(struct at91_eth_data *data); | 78 | extern void __init at91_add_device_eth(struct at91_eth_data *data); |
75 | 79 | ||
76 | #if defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9263) || defined(CONFIG_ARCH_AT91CAP9) | 80 | #if defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9263) || defined(CONFIG_ARCH_AT91SAM9G20) || defined(CONFIG_ARCH_AT91CAP9) |
77 | #define eth_platform_data at91_eth_data | 81 | #define eth_platform_data at91_eth_data |
78 | #endif | 82 | #endif |
79 | 83 | ||
diff --git a/include/asm-arm/arch-at91/cpu.h b/include/asm-arm/arch-at91/cpu.h index 7145166826a2..52df794205cb 100644 --- a/include/asm-arm/arch-at91/cpu.h +++ b/include/asm-arm/arch-at91/cpu.h | |||
@@ -21,6 +21,7 @@ | |||
21 | #define ARCH_ID_AT91SAM9260 0x019803a0 | 21 | #define ARCH_ID_AT91SAM9260 0x019803a0 |
22 | #define ARCH_ID_AT91SAM9261 0x019703a0 | 22 | #define ARCH_ID_AT91SAM9261 0x019703a0 |
23 | #define ARCH_ID_AT91SAM9263 0x019607a0 | 23 | #define ARCH_ID_AT91SAM9263 0x019607a0 |
24 | #define ARCH_ID_AT91SAM9G20 0x019905a0 | ||
24 | #define ARCH_ID_AT91SAM9RL64 0x019b03a0 | 25 | #define ARCH_ID_AT91SAM9RL64 0x019b03a0 |
25 | #define ARCH_ID_AT91CAP9 0x039A03A0 | 26 | #define ARCH_ID_AT91CAP9 0x039A03A0 |
26 | 27 | ||
@@ -63,6 +64,12 @@ static inline unsigned long at91_arch_identify(void) | |||
63 | #define cpu_is_at91sam9260() (0) | 64 | #define cpu_is_at91sam9260() (0) |
64 | #endif | 65 | #endif |
65 | 66 | ||
67 | #ifdef CONFIG_ARCH_AT91SAM9G20 | ||
68 | #define cpu_is_at91sam9g20() (at91_cpu_identify() == ARCH_ID_AT91SAM9G20) | ||
69 | #else | ||
70 | #define cpu_is_at91sam9g20() (0) | ||
71 | #endif | ||
72 | |||
66 | #ifdef CONFIG_ARCH_AT91SAM9261 | 73 | #ifdef CONFIG_ARCH_AT91SAM9261 |
67 | #define cpu_is_at91sam9261() (at91_cpu_identify() == ARCH_ID_AT91SAM9261) | 74 | #define cpu_is_at91sam9261() (at91_cpu_identify() == ARCH_ID_AT91SAM9261) |
68 | #else | 75 | #else |
diff --git a/include/asm-arm/arch-at91/hardware.h b/include/asm-arm/arch-at91/hardware.h index 2c826d8247a3..016a3a3f6633 100644 --- a/include/asm-arm/arch-at91/hardware.h +++ b/include/asm-arm/arch-at91/hardware.h | |||
@@ -18,7 +18,7 @@ | |||
18 | 18 | ||
19 | #if defined(CONFIG_ARCH_AT91RM9200) | 19 | #if defined(CONFIG_ARCH_AT91RM9200) |
20 | #include <asm/arch/at91rm9200.h> | 20 | #include <asm/arch/at91rm9200.h> |
21 | #elif defined(CONFIG_ARCH_AT91SAM9260) | 21 | #elif defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9G20) |
22 | #include <asm/arch/at91sam9260.h> | 22 | #include <asm/arch/at91sam9260.h> |
23 | #elif defined(CONFIG_ARCH_AT91SAM9261) | 23 | #elif defined(CONFIG_ARCH_AT91SAM9261) |
24 | #include <asm/arch/at91sam9261.h> | 24 | #include <asm/arch/at91sam9261.h> |
diff --git a/include/asm-arm/arch-at91/timex.h b/include/asm-arm/arch-at91/timex.h index f1933b0fa43f..298d8313cdac 100644 --- a/include/asm-arm/arch-at91/timex.h +++ b/include/asm-arm/arch-at91/timex.h | |||
@@ -27,14 +27,29 @@ | |||
27 | 27 | ||
28 | #define CLOCK_TICK_RATE (AT91_SLOW_CLOCK) | 28 | #define CLOCK_TICK_RATE (AT91_SLOW_CLOCK) |
29 | 29 | ||
30 | #elif defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9261) | 30 | #elif defined(CONFIG_ARCH_AT91SAM9260) |
31 | |||
32 | #if defined(CONFIG_MACH_USB_A9260) || defined(CONFIG_MACH_QIL_A9260) | ||
33 | #define AT91SAM9_MASTER_CLOCK 90000000 | ||
34 | #else | ||
35 | #define AT91SAM9_MASTER_CLOCK 99300000 | ||
36 | #endif | ||
37 | |||
38 | #define CLOCK_TICK_RATE (AT91SAM9_MASTER_CLOCK/16) | ||
39 | |||
40 | #elif defined(CONFIG_ARCH_AT91SAM9261) | ||
31 | 41 | ||
32 | #define AT91SAM9_MASTER_CLOCK 99300000 | 42 | #define AT91SAM9_MASTER_CLOCK 99300000 |
33 | #define CLOCK_TICK_RATE (AT91SAM9_MASTER_CLOCK/16) | 43 | #define CLOCK_TICK_RATE (AT91SAM9_MASTER_CLOCK/16) |
34 | 44 | ||
35 | #elif defined(CONFIG_ARCH_AT91SAM9263) | 45 | #elif defined(CONFIG_ARCH_AT91SAM9263) |
36 | 46 | ||
47 | #if defined(CONFIG_MACH_USB_A9263) | ||
48 | #define AT91SAM9_MASTER_CLOCK 90000000 | ||
49 | #else | ||
37 | #define AT91SAM9_MASTER_CLOCK 99959500 | 50 | #define AT91SAM9_MASTER_CLOCK 99959500 |
51 | #endif | ||
52 | |||
38 | #define CLOCK_TICK_RATE (AT91SAM9_MASTER_CLOCK/16) | 53 | #define CLOCK_TICK_RATE (AT91SAM9_MASTER_CLOCK/16) |
39 | 54 | ||
40 | #elif defined(CONFIG_ARCH_AT91SAM9RL) | 55 | #elif defined(CONFIG_ARCH_AT91SAM9RL) |
@@ -42,6 +57,11 @@ | |||
42 | #define AT91SAM9_MASTER_CLOCK 100000000 | 57 | #define AT91SAM9_MASTER_CLOCK 100000000 |
43 | #define CLOCK_TICK_RATE (AT91SAM9_MASTER_CLOCK/16) | 58 | #define CLOCK_TICK_RATE (AT91SAM9_MASTER_CLOCK/16) |
44 | 59 | ||
60 | #elif defined(CONFIG_ARCH_AT91SAM9G20) | ||
61 | |||
62 | #define AT91SAM9_MASTER_CLOCK 132096000 | ||
63 | #define CLOCK_TICK_RATE (AT91SAM9_MASTER_CLOCK/16) | ||
64 | |||
45 | #elif defined(CONFIG_ARCH_AT91CAP9) | 65 | #elif defined(CONFIG_ARCH_AT91CAP9) |
46 | 66 | ||
47 | #define AT91CAP9_MASTER_CLOCK 100000000 | 67 | #define AT91CAP9_MASTER_CLOCK 100000000 |
diff --git a/include/asm-arm/arch-ebsa285/hardware.h b/include/asm-arm/arch-ebsa285/hardware.h index daad8ee2d194..74610c2c63d4 100644 --- a/include/asm-arm/arch-ebsa285/hardware.h +++ b/include/asm-arm/arch-ebsa285/hardware.h | |||
@@ -14,7 +14,6 @@ | |||
14 | 14 | ||
15 | #include <asm/arch/memory.h> | 15 | #include <asm/arch/memory.h> |
16 | 16 | ||
17 | #ifdef CONFIG_ARCH_FOOTBRIDGE | ||
18 | /* Virtual Physical Size | 17 | /* Virtual Physical Size |
19 | * 0xff800000 0x40000000 1MB X-Bus | 18 | * 0xff800000 0x40000000 1MB X-Bus |
20 | * 0xff000000 0x7c000000 1MB PCI I/O space | 19 | * 0xff000000 0x7c000000 1MB PCI I/O space |
@@ -50,31 +49,6 @@ | |||
50 | #define PCIMEM_SIZE 0x01000000 | 49 | #define PCIMEM_SIZE 0x01000000 |
51 | #define PCIMEM_BASE 0xf0000000 | 50 | #define PCIMEM_BASE 0xf0000000 |
52 | 51 | ||
53 | #elif defined(CONFIG_ARCH_CO285) | ||
54 | /* | ||
55 | * This is the COEBSA285 cut-down mapping | ||
56 | */ | ||
57 | #define PCIMEM_SIZE 0x80000000 | ||
58 | #define PCIMEM_BASE 0x80000000 | ||
59 | |||
60 | #define WFLUSH_SIZE 0x01000000 | ||
61 | #define WFLUSH_BASE 0x7d000000 | ||
62 | |||
63 | #define ARMCSR_SIZE 0x00100000 | ||
64 | #define ARMCSR_BASE 0x7cf00000 | ||
65 | |||
66 | #define XBUS_SIZE 0x00020000 | ||
67 | #define XBUS_BASE 0x7cee0000 | ||
68 | |||
69 | #define PCIO_SIZE 0x00010000 | ||
70 | #define PCIO_BASE 0x7ced0000 | ||
71 | |||
72 | #else | ||
73 | |||
74 | #error "Undefined footbridge architecture" | ||
75 | |||
76 | #endif | ||
77 | |||
78 | #define XBUS_LEDS ((volatile unsigned char *)(XBUS_BASE + 0x12000)) | 52 | #define XBUS_LEDS ((volatile unsigned char *)(XBUS_BASE + 0x12000)) |
79 | #define XBUS_LED_AMBER (1 << 0) | 53 | #define XBUS_LED_AMBER (1 << 0) |
80 | #define XBUS_LED_GREEN (1 << 1) | 54 | #define XBUS_LED_GREEN (1 << 1) |
diff --git a/include/asm-arm/arch-ebsa285/memory.h b/include/asm-arm/arch-ebsa285/memory.h index cbd7ae64bcc9..9019a3bf5ab9 100644 --- a/include/asm-arm/arch-ebsa285/memory.h +++ b/include/asm-arm/arch-ebsa285/memory.h | |||
@@ -42,8 +42,6 @@ extern unsigned long __bus_to_virt(unsigned long); | |||
42 | 42 | ||
43 | #endif | 43 | #endif |
44 | 44 | ||
45 | #if defined(CONFIG_ARCH_FOOTBRIDGE) | ||
46 | |||
47 | /* Task size and page offset at 3GB */ | 45 | /* Task size and page offset at 3GB */ |
48 | #define TASK_SIZE UL(0xbf000000) | 46 | #define TASK_SIZE UL(0xbf000000) |
49 | #define PAGE_OFFSET UL(0xc0000000) | 47 | #define PAGE_OFFSET UL(0xc0000000) |
@@ -53,23 +51,6 @@ extern unsigned long __bus_to_virt(unsigned long); | |||
53 | */ | 51 | */ |
54 | #define FLUSH_BASE 0xf9000000 | 52 | #define FLUSH_BASE 0xf9000000 |
55 | 53 | ||
56 | #elif defined(CONFIG_ARCH_CO285) | ||
57 | |||
58 | /* Task size and page offset at 1.5GB */ | ||
59 | #define TASK_SIZE UL(0x5f000000) | ||
60 | #define PAGE_OFFSET UL(0x60000000) | ||
61 | |||
62 | /* | ||
63 | * Cache flushing area. | ||
64 | */ | ||
65 | #define FLUSH_BASE 0x7e000000 | ||
66 | |||
67 | #else | ||
68 | |||
69 | #error "Undefined footbridge architecture" | ||
70 | |||
71 | #endif | ||
72 | |||
73 | /* | 54 | /* |
74 | * Physical DRAM offset. | 55 | * Physical DRAM offset. |
75 | */ | 56 | */ |
diff --git a/include/asm-arm/arch-ebsa285/vmalloc.h b/include/asm-arm/arch-ebsa285/vmalloc.h index 02598200997d..e487d7e8c8a6 100644 --- a/include/asm-arm/arch-ebsa285/vmalloc.h +++ b/include/asm-arm/arch-ebsa285/vmalloc.h | |||
@@ -7,8 +7,4 @@ | |||
7 | */ | 7 | */ |
8 | 8 | ||
9 | 9 | ||
10 | #ifdef CONFIG_ARCH_FOOTBRIDGE | ||
11 | #define VMALLOC_END (PAGE_OFFSET + 0x30000000) | 10 | #define VMALLOC_END (PAGE_OFFSET + 0x30000000) |
12 | #else | ||
13 | #define VMALLOC_END (PAGE_OFFSET + 0x20000000) | ||
14 | #endif | ||
diff --git a/include/asm-arm/arch-imx/imx-dma.h b/include/asm-arm/arch-imx/imx-dma.h index 5b1066da4e1f..44d89c35539a 100644 --- a/include/asm-arm/arch-imx/imx-dma.h +++ b/include/asm-arm/arch-imx/imx-dma.h | |||
@@ -88,7 +88,7 @@ int imx_dma_request(imx_dmach_t dma_ch, const char *name); | |||
88 | 88 | ||
89 | void imx_dma_free(imx_dmach_t dma_ch); | 89 | void imx_dma_free(imx_dmach_t dma_ch); |
90 | 90 | ||
91 | int imx_dma_request_by_prio(imx_dmach_t *pdma_ch, const char *name, imx_dma_prio prio); | 91 | imx_dmach_t imx_dma_request_by_prio(const char *name, imx_dma_prio prio); |
92 | 92 | ||
93 | 93 | ||
94 | #endif /* _ASM_ARCH_IMX_DMA_H */ | 94 | #endif /* _ASM_ARCH_IMX_DMA_H */ |
diff --git a/include/asm-arm/arch-iop13xx/dma.h b/include/asm-arm/arch-iop13xx/dma.h index 2e15da53ff79..d79846fbb394 100644 --- a/include/asm-arm/arch-iop13xx/dma.h +++ b/include/asm-arm/arch-iop13xx/dma.h | |||
@@ -1,3 +1,3 @@ | |||
1 | #ifndef _IOP13XX_DMA_H | 1 | #ifndef _IOP13XX_DMA_H |
2 | #define _IOP13XX_DMA_H_ | 2 | #define _IOP13XX_DMA_H |
3 | #endif | 3 | #endif |
diff --git a/include/asm-arm/arch-iop32x/gpio.h b/include/asm-arm/arch-iop32x/gpio.h new file mode 100644 index 000000000000..708f4ec9db1d --- /dev/null +++ b/include/asm-arm/arch-iop32x/gpio.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef __ASM_ARCH_IOP32X_GPIO_H | ||
2 | #define __ASM_ARCH_IOP32X_GPIO_H | ||
3 | |||
4 | #include <asm/hardware/iop3xx-gpio.h> | ||
5 | |||
6 | #endif | ||
diff --git a/include/asm-arm/arch-iop33x/gpio.h b/include/asm-arm/arch-iop33x/gpio.h new file mode 100644 index 000000000000..ddd55bba9bb9 --- /dev/null +++ b/include/asm-arm/arch-iop33x/gpio.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef __ASM_ARCH_IOP33X_GPIO_H | ||
2 | #define __ASM_ARCH_IOP33X_GPIO_H | ||
3 | |||
4 | #include <asm/hardware/iop3xx-gpio.h> | ||
5 | |||
6 | #endif | ||
diff --git a/include/asm-arm/arch-ixp4xx/fsg.h b/include/asm-arm/arch-ixp4xx/fsg.h new file mode 100644 index 000000000000..c0100cc7981c --- /dev/null +++ b/include/asm-arm/arch-ixp4xx/fsg.h | |||
@@ -0,0 +1,50 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-ixp4xx/fsg.h | ||
3 | * | ||
4 | * Freecom FSG-3 platform specific definitions | ||
5 | * | ||
6 | * Author: Rod Whitby <rod@whitby.id.au> | ||
7 | * Author: Tomasz Chmielewski <mangoo@wpkg.org> | ||
8 | * Maintainers: http://www.nslu2-linux.org | ||
9 | * | ||
10 | * Based on coyote.h by | ||
11 | * Copyright 2004 (c) MontaVista, Software, Inc. | ||
12 | * | ||
13 | * This file is licensed under the terms of the GNU General Public | ||
14 | * License version 2. This program is licensed "as is" without any | ||
15 | * warranty of any kind, whether express or implied. | ||
16 | */ | ||
17 | |||
18 | #ifndef __ASM_ARCH_HARDWARE_H__ | ||
19 | #error "Do not include this directly, instead #include <asm/hardware.h>" | ||
20 | #endif | ||
21 | |||
22 | #define FSG_SDA_PIN 12 | ||
23 | #define FSG_SCL_PIN 13 | ||
24 | |||
25 | /* | ||
26 | * FSG PCI IRQs | ||
27 | */ | ||
28 | #define FSG_PCI_MAX_DEV 3 | ||
29 | #define FSG_PCI_IRQ_LINES 3 | ||
30 | |||
31 | |||
32 | /* PCI controller GPIO to IRQ pin mappings */ | ||
33 | #define FSG_PCI_INTA_PIN 6 | ||
34 | #define FSG_PCI_INTB_PIN 7 | ||
35 | #define FSG_PCI_INTC_PIN 5 | ||
36 | |||
37 | /* Buttons */ | ||
38 | |||
39 | #define FSG_SB_GPIO 4 /* sync button */ | ||
40 | #define FSG_RB_GPIO 9 /* reset button */ | ||
41 | #define FSG_UB_GPIO 10 /* usb button */ | ||
42 | |||
43 | /* LEDs */ | ||
44 | |||
45 | #define FSG_LED_WLAN_BIT 0 | ||
46 | #define FSG_LED_WAN_BIT 1 | ||
47 | #define FSG_LED_SATA_BIT 2 | ||
48 | #define FSG_LED_USB_BIT 4 | ||
49 | #define FSG_LED_RING_BIT 5 | ||
50 | #define FSG_LED_SYNC_BIT 7 | ||
diff --git a/include/asm-arm/arch-ixp4xx/hardware.h b/include/asm-arm/arch-ixp4xx/hardware.h index 73e8dc36f6a4..fa723a627854 100644 --- a/include/asm-arm/arch-ixp4xx/hardware.h +++ b/include/asm-arm/arch-ixp4xx/hardware.h | |||
@@ -45,5 +45,6 @@ | |||
45 | #include "nslu2.h" | 45 | #include "nslu2.h" |
46 | #include "nas100d.h" | 46 | #include "nas100d.h" |
47 | #include "dsmg600.h" | 47 | #include "dsmg600.h" |
48 | #include "fsg.h" | ||
48 | 49 | ||
49 | #endif /* _ASM_ARCH_HARDWARE_H */ | 50 | #endif /* _ASM_ARCH_HARDWARE_H */ |
diff --git a/include/asm-arm/arch-ixp4xx/irqs.h b/include/asm-arm/arch-ixp4xx/irqs.h index 11801605047b..674af4a84147 100644 --- a/include/asm-arm/arch-ixp4xx/irqs.h +++ b/include/asm-arm/arch-ixp4xx/irqs.h | |||
@@ -128,4 +128,11 @@ | |||
128 | #define IRQ_DSMG600_PCI_INTE IRQ_IXP4XX_GPIO7 | 128 | #define IRQ_DSMG600_PCI_INTE IRQ_IXP4XX_GPIO7 |
129 | #define IRQ_DSMG600_PCI_INTF IRQ_IXP4XX_GPIO6 | 129 | #define IRQ_DSMG600_PCI_INTF IRQ_IXP4XX_GPIO6 |
130 | 130 | ||
131 | /* | ||
132 | * Freecom FSG-3 Board IRQs | ||
133 | */ | ||
134 | #define IRQ_FSG_PCI_INTA IRQ_IXP4XX_GPIO6 | ||
135 | #define IRQ_FSG_PCI_INTB IRQ_IXP4XX_GPIO7 | ||
136 | #define IRQ_FSG_PCI_INTC IRQ_IXP4XX_GPIO5 | ||
137 | |||
131 | #endif | 138 | #endif |
diff --git a/include/asm-arm/arch-kirkwood/debug-macro.S b/include/asm-arm/arch-kirkwood/debug-macro.S new file mode 100644 index 000000000000..f55fb8ad9ee4 --- /dev/null +++ b/include/asm-arm/arch-kirkwood/debug-macro.S | |||
@@ -0,0 +1,20 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-kirkwood/debug-macro.S | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | |||
9 | #include <asm/arch/kirkwood.h> | ||
10 | |||
11 | .macro addruart,rx | ||
12 | mrc p15, 0, \rx, c1, c0 | ||
13 | tst \rx, #1 @ MMU enabled? | ||
14 | ldreq \rx, =KIRKWOOD_REGS_PHYS_BASE | ||
15 | ldrne \rx, =KIRKWOOD_REGS_VIRT_BASE | ||
16 | orr \rx, \rx, #0x00012000 | ||
17 | .endm | ||
18 | |||
19 | #define UART_SHIFT 2 | ||
20 | #include <asm/hardware/debug-8250.S> | ||
diff --git a/include/asm-arm/arch-kirkwood/dma.h b/include/asm-arm/arch-kirkwood/dma.h new file mode 100644 index 000000000000..40a8c178f10d --- /dev/null +++ b/include/asm-arm/arch-kirkwood/dma.h | |||
@@ -0,0 +1 @@ | |||
/* empty */ | |||
diff --git a/include/asm-arm/arch-kirkwood/entry-macro.S b/include/asm-arm/arch-kirkwood/entry-macro.S new file mode 100644 index 000000000000..fc6a43d9355c --- /dev/null +++ b/include/asm-arm/arch-kirkwood/entry-macro.S | |||
@@ -0,0 +1,40 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-kirkwood/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for Marvell Kirkwood platforms | ||
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 <asm/arch/kirkwood.h> | ||
12 | |||
13 | .macro disable_fiq | ||
14 | .endm | ||
15 | |||
16 | .macro arch_ret_to_user, tmp1, tmp2 | ||
17 | .endm | ||
18 | |||
19 | .macro get_irqnr_preamble, base, tmp | ||
20 | ldr \base, =IRQ_VIRT_BASE | ||
21 | .endm | ||
22 | |||
23 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
24 | @ check low interrupts | ||
25 | ldr \irqstat, [\base, #IRQ_CAUSE_LOW_OFF] | ||
26 | ldr \tmp, [\base, #IRQ_MASK_LOW_OFF] | ||
27 | mov \irqnr, #31 | ||
28 | ands \irqstat, \irqstat, \tmp | ||
29 | bne 1001f | ||
30 | |||
31 | @ if no low interrupts set, check high interrupts | ||
32 | ldr \irqstat, [\base, #IRQ_CAUSE_HIGH_OFF] | ||
33 | ldr \tmp, [\base, #IRQ_MASK_HIGH_OFF] | ||
34 | mov \irqnr, #63 | ||
35 | ands \irqstat, \irqstat, \tmp | ||
36 | |||
37 | @ find first active interrupt source | ||
38 | 1001: clzne \irqstat, \irqstat | ||
39 | subne \irqnr, \irqnr, \irqstat | ||
40 | .endm | ||
diff --git a/include/asm-arm/arch-kirkwood/hardware.h b/include/asm-arm/arch-kirkwood/hardware.h new file mode 100644 index 000000000000..e695719771a5 --- /dev/null +++ b/include/asm-arm/arch-kirkwood/hardware.h | |||
@@ -0,0 +1,21 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-kirkwood/hardware.h | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | |||
9 | #ifndef __ASM_ARCH_HARDWARE_H | ||
10 | #define __ASM_ARCH_HARDWARE_H | ||
11 | |||
12 | #include "kirkwood.h" | ||
13 | |||
14 | #define pcibios_assign_all_busses() 1 | ||
15 | |||
16 | #define PCIBIOS_MIN_IO 0x00001000 | ||
17 | #define PCIBIOS_MIN_MEM 0x01000000 | ||
18 | #define PCIMEM_BASE KIRKWOOD_PCIE_MEM_PHYS_BASE /* mem base for VGA */ | ||
19 | |||
20 | |||
21 | #endif | ||
diff --git a/include/asm-arm/arch-kirkwood/io.h b/include/asm-arm/arch-kirkwood/io.h new file mode 100644 index 000000000000..0ef6e95f5d5b --- /dev/null +++ b/include/asm-arm/arch-kirkwood/io.h | |||
@@ -0,0 +1,26 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-kirkwood/io.h | ||
3 | * | ||
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 | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #ifndef __ASM_ARCH_IO_H | ||
10 | #define __ASM_ARCH_IO_H | ||
11 | |||
12 | #include "kirkwood.h" | ||
13 | |||
14 | #define IO_SPACE_LIMIT 0xffffffff | ||
15 | |||
16 | static inline void __iomem *__io(unsigned long addr) | ||
17 | { | ||
18 | return (void __iomem *)((addr - KIRKWOOD_PCIE_IO_PHYS_BASE) | ||
19 | + KIRKWOOD_PCIE_IO_VIRT_BASE); | ||
20 | } | ||
21 | |||
22 | #define __io(a) __io(a) | ||
23 | #define __mem_pci(a) (a) | ||
24 | |||
25 | |||
26 | #endif | ||
diff --git a/include/asm-arm/arch-kirkwood/irqs.h b/include/asm-arm/arch-kirkwood/irqs.h new file mode 100644 index 000000000000..2e7b5da6335c --- /dev/null +++ b/include/asm-arm/arch-kirkwood/irqs.h | |||
@@ -0,0 +1,63 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-kirkwood/irqs.h | ||
3 | * | ||
4 | * IRQ definitions for Marvell Kirkwood SoCs | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #ifndef __ASM_ARCH_IRQS_H | ||
12 | #define __ASM_ARCH_IRQS_H | ||
13 | |||
14 | #include "kirkwood.h" /* need GPIO_MAX */ | ||
15 | |||
16 | /* | ||
17 | * Low Interrupt Controller | ||
18 | */ | ||
19 | #define IRQ_KIRKWOOD_HIGH_SUM 0 | ||
20 | #define IRQ_KIRKWOOD_BRIDGE 1 | ||
21 | #define IRQ_KIRKWOOD_HOST2CPU 2 | ||
22 | #define IRQ_KIRKWOOD_CPU2HOST 3 | ||
23 | #define IRQ_KIRKWOOD_XOR_00 5 | ||
24 | #define IRQ_KIRKWOOD_XOR_01 6 | ||
25 | #define IRQ_KIRKWOOD_XOR_10 7 | ||
26 | #define IRQ_KIRKWOOD_XOR_11 8 | ||
27 | #define IRQ_KIRKWOOD_PCIE 9 | ||
28 | #define IRQ_KIRKWOOD_GE00_SUM 11 | ||
29 | #define IRQ_KIRKWOOD_GE01_SUM 15 | ||
30 | #define IRQ_KIRKWOOD_USB 19 | ||
31 | #define IRQ_KIRKWOOD_SATA 21 | ||
32 | #define IRQ_KIRKWOOD_CRYPTO 22 | ||
33 | #define IRQ_KIRKWOOD_SPI 23 | ||
34 | #define IRQ_KIRKWOOD_I2S 24 | ||
35 | #define IRQ_KIRKWOOD_TS_0 26 | ||
36 | #define IRQ_KIRKWOOD_SDIO 28 | ||
37 | #define IRQ_KIRKWOOD_TWSI 29 | ||
38 | #define IRQ_KIRKWOOD_AVB 30 | ||
39 | #define IRQ_KIRKWOOD_TDMI 31 | ||
40 | |||
41 | /* | ||
42 | * High Interrupt Controller | ||
43 | */ | ||
44 | #define IRQ_KIRKWOOD_UART_0 33 | ||
45 | #define IRQ_KIRKWOOD_UART_1 34 | ||
46 | #define IRQ_KIRKWOOD_GPIO_LOW_0_7 35 | ||
47 | #define IRQ_KIRKWOOD_GPIO_LOW_8_15 36 | ||
48 | #define IRQ_KIRKWOOD_GPIO_LOW_16_23 37 | ||
49 | #define IRQ_KIRKWOOD_GPIO_LOW_24_31 38 | ||
50 | #define IRQ_KIRKWOOD_GPIO_HIGH_0_7 39 | ||
51 | #define IRQ_KIRKWOOD_GPIO_HIGH_8_15 40 | ||
52 | #define IRQ_KIRKWOOD_GPIO_HIGH_16_23 41 | ||
53 | |||
54 | /* | ||
55 | * KIRKWOOD General Purpose Pins | ||
56 | */ | ||
57 | #define IRQ_KIRKWOOD_GPIO_START 64 | ||
58 | #define NR_GPIO_IRQS GPIO_MAX | ||
59 | |||
60 | #define NR_IRQS (IRQ_KIRKWOOD_GPIO_START + NR_GPIO_IRQS) | ||
61 | |||
62 | |||
63 | #endif | ||
diff --git a/include/asm-arm/arch-kirkwood/kirkwood.h b/include/asm-arm/arch-kirkwood/kirkwood.h new file mode 100644 index 000000000000..bb31b315c350 --- /dev/null +++ b/include/asm-arm/arch-kirkwood/kirkwood.h | |||
@@ -0,0 +1,100 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-kirkwood/kirkwood.h | ||
3 | * | ||
4 | * Generic definitions for Marvell Kirkwood SoC flavors: | ||
5 | * 88F6180, 88F6192 and 88F6281. | ||
6 | * | ||
7 | * This file is licensed under the terms of the GNU General Public | ||
8 | * License version 2. This program is licensed "as is" without any | ||
9 | * warranty of any kind, whether express or implied. | ||
10 | */ | ||
11 | |||
12 | #ifndef __ASM_ARCH_KIRKWOOD_H | ||
13 | #define __ASM_ARCH_KIRKWOOD_H | ||
14 | |||
15 | /* | ||
16 | * Marvell Kirkwood address maps. | ||
17 | * | ||
18 | * phys | ||
19 | * e0000000 PCIe Memory space | ||
20 | * f1000000 on-chip peripheral registers | ||
21 | * f2000000 PCIe I/O space | ||
22 | * f3000000 NAND controller address window | ||
23 | * | ||
24 | * virt phys size | ||
25 | * fee00000 f1000000 1M on-chip peripheral registers | ||
26 | * fef00000 f2000000 1M PCIe I/O space | ||
27 | */ | ||
28 | |||
29 | #define KIRKWOOD_NAND_MEM_PHYS_BASE 0xf3000000 | ||
30 | #define KIRKWOOD_NAND_MEM_SIZE SZ_64K /* 1K is sufficient, but 64K | ||
31 | * is the minimal window size | ||
32 | */ | ||
33 | |||
34 | #define KIRKWOOD_PCIE_IO_PHYS_BASE 0xf2000000 | ||
35 | #define KIRKWOOD_PCIE_IO_VIRT_BASE 0xfef00000 | ||
36 | #define KIRKWOOD_PCIE_IO_BUS_BASE 0x00000000 | ||
37 | #define KIRKWOOD_PCIE_IO_SIZE SZ_1M | ||
38 | |||
39 | #define KIRKWOOD_REGS_PHYS_BASE 0xf1000000 | ||
40 | #define KIRKWOOD_REGS_VIRT_BASE 0xfee00000 | ||
41 | #define KIRKWOOD_REGS_SIZE SZ_1M | ||
42 | |||
43 | #define KIRKWOOD_PCIE_MEM_PHYS_BASE 0xe0000000 | ||
44 | #define KIRKWOOD_PCIE_MEM_SIZE SZ_128M | ||
45 | |||
46 | /* | ||
47 | * MBUS bridge registers. | ||
48 | */ | ||
49 | #define BRIDGE_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x20000) | ||
50 | #define CPU_CONTROL (BRIDGE_VIRT_BASE | 0x0104) | ||
51 | #define CPU_RESET 0x00000002 | ||
52 | #define RSTOUTn_MASK (BRIDGE_VIRT_BASE | 0x0108) | ||
53 | #define SOFT_RESET_OUT_EN 0x00000004 | ||
54 | #define SYSTEM_SOFT_RESET (BRIDGE_VIRT_BASE | 0x010c) | ||
55 | #define SOFT_RESET 0x00000001 | ||
56 | #define BRIDGE_CAUSE (BRIDGE_VIRT_BASE | 0x0110) | ||
57 | #define BRIDGE_MASK (BRIDGE_VIRT_BASE | 0x0114) | ||
58 | #define BRIDGE_INT_TIMER0 0x0002 | ||
59 | #define BRIDGE_INT_TIMER1 0x0004 | ||
60 | #define BRIDGE_INT_TIMER1_CLR (~0x0004) | ||
61 | #define IRQ_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0200) | ||
62 | #define IRQ_CAUSE_LOW_OFF 0x0000 | ||
63 | #define IRQ_MASK_LOW_OFF 0x0004 | ||
64 | #define IRQ_CAUSE_HIGH_OFF 0x0010 | ||
65 | #define IRQ_MASK_HIGH_OFF 0x0014 | ||
66 | #define TIMER_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0300) | ||
67 | #define L2_CONFIG_REG (BRIDGE_VIRT_BASE | 0x0128) | ||
68 | #define L2_WRITETHROUGH 0x00000010 | ||
69 | |||
70 | /* | ||
71 | * Register Map | ||
72 | */ | ||
73 | #define DDR_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x00000) | ||
74 | #define DDR_WINDOW_CPU_BASE (DDR_VIRT_BASE | 0x1500) | ||
75 | |||
76 | #define DEV_BUS_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x10000) | ||
77 | #define DEV_BUS_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x10000) | ||
78 | #define SAMPLE_AT_RESET (DEV_BUS_VIRT_BASE | 0x0030) | ||
79 | #define DEVICE_ID (DEV_BUS_VIRT_BASE | 0x0034) | ||
80 | #define RTC_PHYS_BASE (DEV_BUS_PHYS_BASE | 0x0300) | ||
81 | #define SPI_PHYS_BASE (DEV_BUS_PHYS_BASE | 0x0600) | ||
82 | #define UART0_PHYS_BASE (DEV_BUS_PHYS_BASE | 0x2000) | ||
83 | #define UART0_VIRT_BASE (DEV_BUS_VIRT_BASE | 0x2000) | ||
84 | #define UART1_PHYS_BASE (DEV_BUS_PHYS_BASE | 0x2100) | ||
85 | #define UART1_VIRT_BASE (DEV_BUS_VIRT_BASE | 0x2100) | ||
86 | |||
87 | #define PCIE_VIRT_BASE (KIRKWOOD_REGS_VIRT_BASE | 0x40000) | ||
88 | |||
89 | #define USB_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x50000) | ||
90 | |||
91 | #define GE00_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x70000) | ||
92 | #define GE01_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x74000) | ||
93 | |||
94 | #define SATA_PHYS_BASE (KIRKWOOD_REGS_PHYS_BASE | 0x80000) | ||
95 | |||
96 | |||
97 | #define GPIO_MAX 50 | ||
98 | |||
99 | |||
100 | #endif | ||
diff --git a/include/asm-arm/arch-kirkwood/memory.h b/include/asm-arm/arch-kirkwood/memory.h new file mode 100644 index 000000000000..e5108f408ce6 --- /dev/null +++ b/include/asm-arm/arch-kirkwood/memory.h | |||
@@ -0,0 +1,14 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-kirkwood/memory.h | ||
3 | */ | ||
4 | |||
5 | #ifndef __ASM_ARCH_MEMORY_H | ||
6 | #define __ASM_ARCH_MEMORY_H | ||
7 | |||
8 | #define PHYS_OFFSET UL(0x00000000) | ||
9 | |||
10 | #define __virt_to_bus(x) __virt_to_phys(x) | ||
11 | #define __bus_to_virt(x) __phys_to_virt(x) | ||
12 | |||
13 | |||
14 | #endif | ||
diff --git a/include/asm-arm/arch-kirkwood/system.h b/include/asm-arm/arch-kirkwood/system.h new file mode 100644 index 000000000000..8dde7e379855 --- /dev/null +++ b/include/asm-arm/arch-kirkwood/system.h | |||
@@ -0,0 +1,37 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-kirkwood/system.h | ||
3 | * | ||
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 | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #ifndef __ASM_ARCH_SYSTEM_H | ||
10 | #define __ASM_ARCH_SYSTEM_H | ||
11 | |||
12 | #include <asm/arch/hardware.h> | ||
13 | #include <asm/arch/kirkwood.h> | ||
14 | |||
15 | static inline void arch_idle(void) | ||
16 | { | ||
17 | cpu_do_idle(); | ||
18 | } | ||
19 | |||
20 | static inline void arch_reset(char mode) | ||
21 | { | ||
22 | /* | ||
23 | * Enable soft reset to assert RSTOUTn. | ||
24 | */ | ||
25 | writel(SOFT_RESET_OUT_EN, RSTOUTn_MASK); | ||
26 | |||
27 | /* | ||
28 | * Assert soft reset. | ||
29 | */ | ||
30 | writel(SOFT_RESET, SYSTEM_SOFT_RESET); | ||
31 | |||
32 | while (1) | ||
33 | ; | ||
34 | } | ||
35 | |||
36 | |||
37 | #endif | ||
diff --git a/include/asm-arm/arch-kirkwood/timex.h b/include/asm-arm/arch-kirkwood/timex.h new file mode 100644 index 000000000000..82122e134e3c --- /dev/null +++ b/include/asm-arm/arch-kirkwood/timex.h | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-kirkwood/timex.h | ||
3 | * | ||
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 | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #define CLOCK_TICK_RATE (100 * HZ) | ||
10 | |||
11 | #define KIRKWOOD_TCLK 166666667 | ||
diff --git a/include/asm-arm/arch-kirkwood/uncompress.h b/include/asm-arm/arch-kirkwood/uncompress.h new file mode 100644 index 000000000000..a9062b6d7680 --- /dev/null +++ b/include/asm-arm/arch-kirkwood/uncompress.h | |||
@@ -0,0 +1,47 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-kirkwood/uncompress.h | ||
3 | * | ||
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 | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #include <linux/serial_reg.h> | ||
10 | #include <asm/arch/kirkwood.h> | ||
11 | |||
12 | #define SERIAL_BASE ((unsigned char *)UART0_PHYS_BASE) | ||
13 | |||
14 | static void putc(const char c) | ||
15 | { | ||
16 | unsigned char *base = SERIAL_BASE; | ||
17 | int i; | ||
18 | |||
19 | for (i = 0; i < 0x1000; i++) { | ||
20 | if (base[UART_LSR << 2] & UART_LSR_THRE) | ||
21 | break; | ||
22 | barrier(); | ||
23 | } | ||
24 | |||
25 | base[UART_TX << 2] = c; | ||
26 | } | ||
27 | |||
28 | static void flush(void) | ||
29 | { | ||
30 | unsigned char *base = SERIAL_BASE; | ||
31 | unsigned char mask; | ||
32 | int i; | ||
33 | |||
34 | mask = UART_LSR_TEMT | UART_LSR_THRE; | ||
35 | |||
36 | for (i = 0; i < 0x1000; i++) { | ||
37 | if ((base[UART_LSR << 2] & mask) == mask) | ||
38 | break; | ||
39 | barrier(); | ||
40 | } | ||
41 | } | ||
42 | |||
43 | /* | ||
44 | * nothing to do | ||
45 | */ | ||
46 | #define arch_decomp_setup() | ||
47 | #define arch_decomp_wdog() | ||
diff --git a/include/asm-arm/arch-kirkwood/vmalloc.h b/include/asm-arm/arch-kirkwood/vmalloc.h new file mode 100644 index 000000000000..41852c6e77f3 --- /dev/null +++ b/include/asm-arm/arch-kirkwood/vmalloc.h | |||
@@ -0,0 +1,5 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-kirkwood/vmalloc.h | ||
3 | */ | ||
4 | |||
5 | #define VMALLOC_END 0xfe800000 | ||
diff --git a/include/asm-arm/arch-loki/debug-macro.S b/include/asm-arm/arch-loki/debug-macro.S new file mode 100644 index 000000000000..585502e96513 --- /dev/null +++ b/include/asm-arm/arch-loki/debug-macro.S | |||
@@ -0,0 +1,20 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-loki/debug-macro.S | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | |||
9 | #include <asm/arch/loki.h> | ||
10 | |||
11 | .macro addruart,rx | ||
12 | mrc p15, 0, \rx, c1, c0 | ||
13 | tst \rx, #1 @ MMU enabled? | ||
14 | ldreq \rx, =LOKI_REGS_PHYS_BASE | ||
15 | ldrne \rx, =LOKI_REGS_VIRT_BASE | ||
16 | orr \rx, \rx, #0x00012000 | ||
17 | .endm | ||
18 | |||
19 | #define UART_SHIFT 2 | ||
20 | #include <asm/hardware/debug-8250.S> | ||
diff --git a/include/asm-arm/arch-loki/dma.h b/include/asm-arm/arch-loki/dma.h new file mode 100644 index 000000000000..40a8c178f10d --- /dev/null +++ b/include/asm-arm/arch-loki/dma.h | |||
@@ -0,0 +1 @@ | |||
/* empty */ | |||
diff --git a/include/asm-arm/arch-loki/entry-macro.S b/include/asm-arm/arch-loki/entry-macro.S new file mode 100644 index 000000000000..693257cdbeb8 --- /dev/null +++ b/include/asm-arm/arch-loki/entry-macro.S | |||
@@ -0,0 +1,30 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-loki/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for Marvell Loki (88RC8480) platforms | ||
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 <asm/arch/loki.h> | ||
12 | |||
13 | .macro disable_fiq | ||
14 | .endm | ||
15 | |||
16 | .macro arch_ret_to_user, tmp1, tmp2 | ||
17 | .endm | ||
18 | |||
19 | .macro get_irqnr_preamble, base, tmp | ||
20 | ldr \base, =IRQ_VIRT_BASE | ||
21 | .endm | ||
22 | |||
23 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
24 | ldr \irqstat, [\base, #IRQ_CAUSE_OFF] | ||
25 | ldr \tmp, [\base, #IRQ_MASK_OFF] | ||
26 | mov \irqnr, #0 | ||
27 | ands \irqstat, \irqstat, \tmp | ||
28 | clzne \irqnr, \irqstat | ||
29 | rsbne \irqnr, \irqnr, #31 | ||
30 | .endm | ||
diff --git a/include/asm-arm/arch-loki/hardware.h b/include/asm-arm/arch-loki/hardware.h new file mode 100644 index 000000000000..f65b01c733b6 --- /dev/null +++ b/include/asm-arm/arch-loki/hardware.h | |||
@@ -0,0 +1,15 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-loki/hardware.h | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | |||
9 | #ifndef __ASM_ARCH_HARDWARE_H | ||
10 | #define __ASM_ARCH_HARDWARE_H | ||
11 | |||
12 | #include "loki.h" | ||
13 | |||
14 | |||
15 | #endif | ||
diff --git a/include/asm-arm/arch-loki/io.h b/include/asm-arm/arch-loki/io.h new file mode 100644 index 000000000000..e7418a915e75 --- /dev/null +++ b/include/asm-arm/arch-loki/io.h | |||
@@ -0,0 +1,26 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-loki/io.h | ||
3 | * | ||
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 | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #ifndef __ASM_ARCH_IO_H | ||
10 | #define __ASM_ARCH_IO_H | ||
11 | |||
12 | #include "loki.h" | ||
13 | |||
14 | #define IO_SPACE_LIMIT 0xffffffff | ||
15 | |||
16 | static inline void __iomem *__io(unsigned long addr) | ||
17 | { | ||
18 | return (void __iomem *)((addr - LOKI_PCIE0_IO_PHYS_BASE) | ||
19 | + LOKI_PCIE0_IO_VIRT_BASE); | ||
20 | } | ||
21 | |||
22 | #define __io(a) __io(a) | ||
23 | #define __mem_pci(a) (a) | ||
24 | |||
25 | |||
26 | #endif | ||
diff --git a/include/asm-arm/arch-loki/irqs.h b/include/asm-arm/arch-loki/irqs.h new file mode 100644 index 000000000000..7e4971438072 --- /dev/null +++ b/include/asm-arm/arch-loki/irqs.h | |||
@@ -0,0 +1,58 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-loki/irqs.h | ||
3 | * | ||
4 | * IRQ definitions for Marvell Loki (88RC8480) SoCs | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #ifndef __ASM_ARCH_IRQS_H | ||
12 | #define __ASM_ARCH_IRQS_H | ||
13 | |||
14 | #include "loki.h" /* need GPIO_MAX */ | ||
15 | |||
16 | /* | ||
17 | * Interrupt Controller | ||
18 | */ | ||
19 | #define IRQ_LOKI_PCIE_A_CPU_DRBL 0 | ||
20 | #define IRQ_LOKI_CPU_PCIE_A_DRBL 1 | ||
21 | #define IRQ_LOKI_PCIE_B_CPU_DRBL 2 | ||
22 | #define IRQ_LOKI_CPU_PCIE_B_DRBL 3 | ||
23 | #define IRQ_LOKI_COM_A_ERR 6 | ||
24 | #define IRQ_LOKI_COM_A_IN 7 | ||
25 | #define IRQ_LOKI_COM_A_OUT 8 | ||
26 | #define IRQ_LOKI_COM_B_ERR 9 | ||
27 | #define IRQ_LOKI_COM_B_IN 10 | ||
28 | #define IRQ_LOKI_COM_B_OUT 11 | ||
29 | #define IRQ_LOKI_DMA_A 12 | ||
30 | #define IRQ_LOKI_DMA_B 13 | ||
31 | #define IRQ_LOKI_SAS_A 14 | ||
32 | #define IRQ_LOKI_SAS_B 15 | ||
33 | #define IRQ_LOKI_DDR 16 | ||
34 | #define IRQ_LOKI_XOR 17 | ||
35 | #define IRQ_LOKI_BRIDGE 18 | ||
36 | #define IRQ_LOKI_PCIE_A_ERR 20 | ||
37 | #define IRQ_LOKI_PCIE_A_INT 21 | ||
38 | #define IRQ_LOKI_PCIE_B_ERR 22 | ||
39 | #define IRQ_LOKI_PCIE_B_INT 23 | ||
40 | #define IRQ_LOKI_GBE_A_INT 24 | ||
41 | #define IRQ_LOKI_GBE_B_INT 25 | ||
42 | #define IRQ_LOKI_DEV_ERR 26 | ||
43 | #define IRQ_LOKI_UART0 27 | ||
44 | #define IRQ_LOKI_UART1 28 | ||
45 | #define IRQ_LOKI_TWSI 29 | ||
46 | #define IRQ_LOKI_GPIO_23_0 30 | ||
47 | #define IRQ_LOKI_GPIO_25_24 31 | ||
48 | |||
49 | /* | ||
50 | * Loki General Purpose Pins | ||
51 | */ | ||
52 | #define IRQ_LOKI_GPIO_START 32 | ||
53 | #define NR_GPIO_IRQS GPIO_MAX | ||
54 | |||
55 | #define NR_IRQS (IRQ_LOKI_GPIO_START + NR_GPIO_IRQS) | ||
56 | |||
57 | |||
58 | #endif | ||
diff --git a/include/asm-arm/arch-loki/loki.h b/include/asm-arm/arch-loki/loki.h new file mode 100644 index 000000000000..5dd05ee0a4e6 --- /dev/null +++ b/include/asm-arm/arch-loki/loki.h | |||
@@ -0,0 +1,97 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-loki/loki.h | ||
3 | * | ||
4 | * Generic definitions for Marvell Loki (88RC8480) SoC flavors | ||
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 | #ifndef __ASM_ARCH_LOKI_H | ||
12 | #define __ASM_ARCH_LOKI_H | ||
13 | |||
14 | /* | ||
15 | * Marvell Loki (88RC8480) address maps. | ||
16 | * | ||
17 | * phys | ||
18 | * d0000000 on-chip peripheral registers | ||
19 | * e0000000 PCIe 0 Memory space | ||
20 | * e8000000 PCIe 1 Memory space | ||
21 | * f0000000 PCIe 0 I/O space | ||
22 | * f0100000 PCIe 1 I/O space | ||
23 | * | ||
24 | * virt phys size | ||
25 | * fed00000 d0000000 1M on-chip peripheral registers | ||
26 | * fee00000 f0000000 64K PCIe 0 I/O space | ||
27 | * fef00000 f0100000 64K PCIe 1 I/O space | ||
28 | */ | ||
29 | |||
30 | #define LOKI_REGS_PHYS_BASE 0xd0000000 | ||
31 | #define LOKI_REGS_VIRT_BASE 0xfed00000 | ||
32 | #define LOKI_REGS_SIZE SZ_1M | ||
33 | |||
34 | #define LOKI_PCIE0_IO_PHYS_BASE 0xf0000000 | ||
35 | #define LOKI_PCIE0_IO_VIRT_BASE 0xfee00000 | ||
36 | #define LOKI_PCIE0_IO_BUS_BASE 0x00000000 | ||
37 | #define LOKI_PCIE0_IO_SIZE SZ_64K | ||
38 | |||
39 | #define LOKI_PCIE1_IO_PHYS_BASE 0xf0100000 | ||
40 | #define LOKI_PCIE1_IO_VIRT_BASE 0xfef00000 | ||
41 | #define LOKI_PCIE1_IO_BUS_BASE 0x00000000 | ||
42 | #define LOKI_PCIE1_IO_SIZE SZ_64K | ||
43 | |||
44 | #define LOKI_PCIE0_MEM_PHYS_BASE 0xe0000000 | ||
45 | #define LOKI_PCIE0_MEM_SIZE SZ_128M | ||
46 | |||
47 | #define LOKI_PCIE1_MEM_PHYS_BASE 0xe8000000 | ||
48 | #define LOKI_PCIE1_MEM_SIZE SZ_128M | ||
49 | |||
50 | /* | ||
51 | * Register Map | ||
52 | */ | ||
53 | #define DEV_BUS_PHYS_BASE (LOKI_REGS_PHYS_BASE | 0x10000) | ||
54 | #define DEV_BUS_VIRT_BASE (LOKI_REGS_VIRT_BASE | 0x10000) | ||
55 | #define UART0_PHYS_BASE (DEV_BUS_PHYS_BASE | 0x2000) | ||
56 | #define UART0_VIRT_BASE (DEV_BUS_VIRT_BASE | 0x2000) | ||
57 | #define UART1_PHYS_BASE (DEV_BUS_PHYS_BASE | 0x2100) | ||
58 | #define UART1_VIRT_BASE (DEV_BUS_VIRT_BASE | 0x2100) | ||
59 | |||
60 | #define BRIDGE_VIRT_BASE (LOKI_REGS_VIRT_BASE | 0x20000) | ||
61 | #define BRIDGE_REG(x) (BRIDGE_VIRT_BASE | (x)) | ||
62 | #define RSTOUTn_MASK (BRIDGE_VIRT_BASE | 0x0108) | ||
63 | #define SOFT_RESET_OUT_EN 0x00000004 | ||
64 | #define SYSTEM_SOFT_RESET (BRIDGE_VIRT_BASE | 0x010c) | ||
65 | #define SOFT_RESET 0x00000001 | ||
66 | #define BRIDGE_CAUSE (BRIDGE_VIRT_BASE | 0x0110) | ||
67 | #define BRIDGE_MASK (BRIDGE_VIRT_BASE | 0x0114) | ||
68 | #define BRIDGE_INT_TIMER0 0x0002 | ||
69 | #define BRIDGE_INT_TIMER1 0x0004 | ||
70 | #define BRIDGE_INT_TIMER1_CLR 0x0004 | ||
71 | #define IRQ_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0200) | ||
72 | #define IRQ_CAUSE_OFF 0x0000 | ||
73 | #define IRQ_MASK_OFF 0x0004 | ||
74 | #define TIMER_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0300) | ||
75 | |||
76 | #define PCIE0_VIRT_BASE (LOKI_REGS_VIRT_BASE | 0x30000) | ||
77 | |||
78 | #define PCIE1_VIRT_BASE (LOKI_REGS_VIRT_BASE | 0x40000) | ||
79 | |||
80 | #define SAS0_PHYS_BASE (LOKI_REGS_PHYS_BASE | 0x80000) | ||
81 | |||
82 | #define SAS1_PHYS_BASE (LOKI_REGS_PHYS_BASE | 0x90000) | ||
83 | |||
84 | #define GE0_PHYS_BASE (LOKI_REGS_PHYS_BASE | 0xa0000) | ||
85 | #define GE0_VIRT_BASE (LOKI_REGS_VIRT_BASE | 0xa0000) | ||
86 | |||
87 | #define GE1_PHYS_BASE (LOKI_REGS_PHYS_BASE | 0xb0000) | ||
88 | #define GE1_VIRT_BASE (LOKI_REGS_VIRT_BASE | 0xb0000) | ||
89 | |||
90 | #define DDR_VIRT_BASE (LOKI_REGS_VIRT_BASE | 0xf0000) | ||
91 | #define DDR_REG(x) (DDR_VIRT_BASE | (x)) | ||
92 | |||
93 | |||
94 | #define GPIO_MAX 8 | ||
95 | |||
96 | |||
97 | #endif | ||
diff --git a/include/asm-arm/arch-loki/memory.h b/include/asm-arm/arch-loki/memory.h new file mode 100644 index 000000000000..835101e49875 --- /dev/null +++ b/include/asm-arm/arch-loki/memory.h | |||
@@ -0,0 +1,14 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-loki/memory.h | ||
3 | */ | ||
4 | |||
5 | #ifndef __ASM_ARCH_MEMORY_H | ||
6 | #define __ASM_ARCH_MEMORY_H | ||
7 | |||
8 | #define PHYS_OFFSET UL(0x00000000) | ||
9 | |||
10 | #define __virt_to_bus(x) __virt_to_phys(x) | ||
11 | #define __bus_to_virt(x) __phys_to_virt(x) | ||
12 | |||
13 | |||
14 | #endif | ||
diff --git a/include/asm-arm/arch-loki/system.h b/include/asm-arm/arch-loki/system.h new file mode 100644 index 000000000000..a3568ac8ec35 --- /dev/null +++ b/include/asm-arm/arch-loki/system.h | |||
@@ -0,0 +1,37 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-loki/system.h | ||
3 | * | ||
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 | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #ifndef __ASM_ARCH_SYSTEM_H | ||
10 | #define __ASM_ARCH_SYSTEM_H | ||
11 | |||
12 | #include <asm/arch/hardware.h> | ||
13 | #include <asm/arch/loki.h> | ||
14 | |||
15 | static inline void arch_idle(void) | ||
16 | { | ||
17 | cpu_do_idle(); | ||
18 | } | ||
19 | |||
20 | static inline void arch_reset(char mode) | ||
21 | { | ||
22 | /* | ||
23 | * Enable soft reset to assert RSTOUTn. | ||
24 | */ | ||
25 | writel(SOFT_RESET_OUT_EN, RSTOUTn_MASK); | ||
26 | |||
27 | /* | ||
28 | * Assert soft reset. | ||
29 | */ | ||
30 | writel(SOFT_RESET, SYSTEM_SOFT_RESET); | ||
31 | |||
32 | while (1) | ||
33 | ; | ||
34 | } | ||
35 | |||
36 | |||
37 | #endif | ||
diff --git a/include/asm-arm/arch-loki/timex.h b/include/asm-arm/arch-loki/timex.h new file mode 100644 index 000000000000..940014f97cae --- /dev/null +++ b/include/asm-arm/arch-loki/timex.h | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-loki/timex.h | ||
3 | * | ||
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 | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #define CLOCK_TICK_RATE (100 * HZ) | ||
10 | |||
11 | #define LOKI_TCLK 180000000 | ||
diff --git a/include/asm-arm/arch-loki/uncompress.h b/include/asm-arm/arch-loki/uncompress.h new file mode 100644 index 000000000000..89a0cf88d3a5 --- /dev/null +++ b/include/asm-arm/arch-loki/uncompress.h | |||
@@ -0,0 +1,47 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-loki/uncompress.h | ||
3 | * | ||
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 | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #include <linux/serial_reg.h> | ||
10 | #include <asm/arch/loki.h> | ||
11 | |||
12 | #define SERIAL_BASE ((unsigned char *)UART0_PHYS_BASE) | ||
13 | |||
14 | static void putc(const char c) | ||
15 | { | ||
16 | unsigned char *base = SERIAL_BASE; | ||
17 | int i; | ||
18 | |||
19 | for (i = 0; i < 0x1000; i++) { | ||
20 | if (base[UART_LSR << 2] & UART_LSR_THRE) | ||
21 | break; | ||
22 | barrier(); | ||
23 | } | ||
24 | |||
25 | base[UART_TX << 2] = c; | ||
26 | } | ||
27 | |||
28 | static void flush(void) | ||
29 | { | ||
30 | unsigned char *base = SERIAL_BASE; | ||
31 | unsigned char mask; | ||
32 | int i; | ||
33 | |||
34 | mask = UART_LSR_TEMT | UART_LSR_THRE; | ||
35 | |||
36 | for (i = 0; i < 0x1000; i++) { | ||
37 | if ((base[UART_LSR << 2] & mask) == mask) | ||
38 | break; | ||
39 | barrier(); | ||
40 | } | ||
41 | } | ||
42 | |||
43 | /* | ||
44 | * nothing to do | ||
45 | */ | ||
46 | #define arch_decomp_setup() | ||
47 | #define arch_decomp_wdog() | ||
diff --git a/include/asm-arm/arch-loki/vmalloc.h b/include/asm-arm/arch-loki/vmalloc.h new file mode 100644 index 000000000000..f5be06220491 --- /dev/null +++ b/include/asm-arm/arch-loki/vmalloc.h | |||
@@ -0,0 +1,5 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-loki/vmalloc.h | ||
3 | */ | ||
4 | |||
5 | #define VMALLOC_END 0xfe800000 | ||
diff --git a/include/asm-arm/arch-msm/irqs.h b/include/asm-arm/arch-msm/irqs.h index 565430cfaa7e..e62a108b1857 100644 --- a/include/asm-arm/arch-msm/irqs.h +++ b/include/asm-arm/arch-msm/irqs.h | |||
@@ -15,6 +15,7 @@ | |||
15 | */ | 15 | */ |
16 | 16 | ||
17 | #ifndef __ASM_ARCH_MSM_IRQS_H | 17 | #ifndef __ASM_ARCH_MSM_IRQS_H |
18 | #define __ASM_ARCH_MSM_IRQS_H | ||
18 | 19 | ||
19 | /* MSM ARM11 Interrupt Numbers */ | 20 | /* MSM ARM11 Interrupt Numbers */ |
20 | /* See 80-VE113-1 A, pp219-221 */ | 21 | /* See 80-VE113-1 A, pp219-221 */ |
diff --git a/include/asm-arm/arch-msm/timex.h b/include/asm-arm/arch-msm/timex.h index 154b23fb3599..8724487ab4c9 100644 --- a/include/asm-arm/arch-msm/timex.h +++ b/include/asm-arm/arch-msm/timex.h | |||
@@ -14,6 +14,7 @@ | |||
14 | */ | 14 | */ |
15 | 15 | ||
16 | #ifndef __ASM_ARCH_MSM_TIMEX_H | 16 | #ifndef __ASM_ARCH_MSM_TIMEX_H |
17 | #define __ASM_ARCH_MSM_TIMEX_H | ||
17 | 18 | ||
18 | #define CLOCK_TICK_RATE 1000000 | 19 | #define CLOCK_TICK_RATE 1000000 |
19 | 20 | ||
diff --git a/include/asm-arm/arch-mv78xx0/debug-macro.S b/include/asm-arm/arch-mv78xx0/debug-macro.S new file mode 100644 index 000000000000..d0595bd645e5 --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/debug-macro.S | |||
@@ -0,0 +1,20 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-mv78xx0/debug-macro.S | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | |||
9 | #include <asm/arch/mv78xx0.h> | ||
10 | |||
11 | .macro addruart,rx | ||
12 | mrc p15, 0, \rx, c1, c0 | ||
13 | tst \rx, #1 @ MMU enabled? | ||
14 | ldreq \rx, =MV78XX0_REGS_PHYS_BASE | ||
15 | ldrne \rx, =MV78XX0_REGS_VIRT_BASE | ||
16 | orr \rx, \rx, #0x00012000 | ||
17 | .endm | ||
18 | |||
19 | #define UART_SHIFT 2 | ||
20 | #include <asm/hardware/debug-8250.S> | ||
diff --git a/include/asm-arm/arch-mv78xx0/dma.h b/include/asm-arm/arch-mv78xx0/dma.h new file mode 100644 index 000000000000..40a8c178f10d --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/dma.h | |||
@@ -0,0 +1 @@ | |||
/* empty */ | |||
diff --git a/include/asm-arm/arch-mv78xx0/entry-macro.S b/include/asm-arm/arch-mv78xx0/entry-macro.S new file mode 100644 index 000000000000..e9a606b12669 --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/entry-macro.S | |||
@@ -0,0 +1,39 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-mv78xx0/entry-macro.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for Marvell MV78xx0 platforms | ||
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 <asm/arch/mv78xx0.h> | ||
12 | |||
13 | .macro disable_fiq | ||
14 | .endm | ||
15 | |||
16 | .macro arch_ret_to_user, tmp1, tmp2 | ||
17 | .endm | ||
18 | |||
19 | .macro get_irqnr_preamble, base, tmp | ||
20 | ldr \base, =IRQ_VIRT_BASE | ||
21 | .endm | ||
22 | |||
23 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
24 | @ check low interrupts | ||
25 | ldr \irqstat, [\base, #IRQ_CAUSE_LOW_OFF] | ||
26 | ldr \tmp, [\base, #IRQ_MASK_LOW_OFF] | ||
27 | mov \irqnr, #31 | ||
28 | ands \irqstat, \irqstat, \tmp | ||
29 | |||
30 | @ if no low interrupts set, check high interrupts | ||
31 | ldreq \irqstat, [\base, #IRQ_CAUSE_HIGH_OFF] | ||
32 | ldreq \tmp, [\base, #IRQ_MASK_HIGH_OFF] | ||
33 | moveq \irqnr, #63 | ||
34 | andeqs \irqstat, \irqstat, \tmp | ||
35 | |||
36 | @ find first active interrupt source | ||
37 | clzne \irqstat, \irqstat | ||
38 | subne \irqnr, \irqnr, \irqstat | ||
39 | .endm | ||
diff --git a/include/asm-arm/arch-mv78xx0/hardware.h b/include/asm-arm/arch-mv78xx0/hardware.h new file mode 100644 index 000000000000..8e17926086c6 --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/hardware.h | |||
@@ -0,0 +1,21 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-mv78xx0/hardware.h | ||
3 | * | ||
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 | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #ifndef __ASM_ARCH_HARDWARE_H | ||
10 | #define __ASM_ARCH_HARDWARE_H | ||
11 | |||
12 | #include "mv78xx0.h" | ||
13 | |||
14 | #define pcibios_assign_all_busses() 1 | ||
15 | |||
16 | #define PCIBIOS_MIN_IO 0x00001000 | ||
17 | #define PCIBIOS_MIN_MEM 0x01000000 | ||
18 | #define PCIMEM_BASE MV78XX0_PCIE_MEM_PHYS_BASE /* mem base for VGA */ | ||
19 | |||
20 | |||
21 | #endif | ||
diff --git a/include/asm-arm/arch-mv78xx0/io.h b/include/asm-arm/arch-mv78xx0/io.h new file mode 100644 index 000000000000..415d4c98e3d1 --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/io.h | |||
@@ -0,0 +1,26 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-mv78xx0/io.h | ||
3 | * | ||
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 | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #ifndef __ASM_ARCH_IO_H | ||
10 | #define __ASM_ARCH_IO_H | ||
11 | |||
12 | #include "mv78xx0.h" | ||
13 | |||
14 | #define IO_SPACE_LIMIT 0xffffffff | ||
15 | |||
16 | static inline void __iomem *__io(unsigned long addr) | ||
17 | { | ||
18 | return (void __iomem *)((addr - MV78XX0_PCIE_IO_PHYS_BASE(0)) | ||
19 | + MV78XX0_PCIE_IO_VIRT_BASE(0)); | ||
20 | } | ||
21 | |||
22 | #define __io(a) __io(a) | ||
23 | #define __mem_pci(a) (a) | ||
24 | |||
25 | |||
26 | #endif | ||
diff --git a/include/asm-arm/arch-mv78xx0/irqs.h b/include/asm-arm/arch-mv78xx0/irqs.h new file mode 100644 index 000000000000..75930450cd65 --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/irqs.h | |||
@@ -0,0 +1,91 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-mv78xx0/irqs.h | ||
3 | * | ||
4 | * IRQ definitions for Marvell MV78xx0 SoCs | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #ifndef __ASM_ARCH_IRQS_H | ||
12 | #define __ASM_ARCH_IRQS_H | ||
13 | |||
14 | #include "mv78xx0.h" /* need GPIO_MAX */ | ||
15 | |||
16 | /* | ||
17 | * MV78xx0 Low Interrupt Controller | ||
18 | */ | ||
19 | #define IRQ_MV78XX0_ERR 0 | ||
20 | #define IRQ_MV78XX0_SPI 1 | ||
21 | #define IRQ_MV78XX0_I2C_0 2 | ||
22 | #define IRQ_MV78XX0_I2C_1 3 | ||
23 | #define IRQ_MV78XX0_IDMA_0 4 | ||
24 | #define IRQ_MV78XX0_IDMA_1 5 | ||
25 | #define IRQ_MV78XX0_IDMA_2 6 | ||
26 | #define IRQ_MV78XX0_IDMA_3 7 | ||
27 | #define IRQ_MV78XX0_TIMER_0 8 | ||
28 | #define IRQ_MV78XX0_TIMER_1 9 | ||
29 | #define IRQ_MV78XX0_TIMER_2 10 | ||
30 | #define IRQ_MV78XX0_TIMER_3 11 | ||
31 | #define IRQ_MV78XX0_UART_0 12 | ||
32 | #define IRQ_MV78XX0_UART_1 13 | ||
33 | #define IRQ_MV78XX0_UART_2 14 | ||
34 | #define IRQ_MV78XX0_UART_3 15 | ||
35 | #define IRQ_MV78XX0_USB_0 16 | ||
36 | #define IRQ_MV78XX0_USB_1 17 | ||
37 | #define IRQ_MV78XX0_USB_2 18 | ||
38 | #define IRQ_MV78XX0_CRYPTO 19 | ||
39 | #define IRQ_MV78XX0_SDIO_0 20 | ||
40 | #define IRQ_MV78XX0_SDIO_1 21 | ||
41 | #define IRQ_MV78XX0_XOR_0 22 | ||
42 | #define IRQ_MV78XX0_XOR_1 23 | ||
43 | #define IRQ_MV78XX0_I2S_0 24 | ||
44 | #define IRQ_MV78XX0_I2S_1 25 | ||
45 | #define IRQ_MV78XX0_SATA 26 | ||
46 | #define IRQ_MV78XX0_TDMI 27 | ||
47 | |||
48 | /* | ||
49 | * MV78xx0 High Interrupt Controller | ||
50 | */ | ||
51 | #define IRQ_MV78XX0_PCIE_00 32 | ||
52 | #define IRQ_MV78XX0_PCIE_01 33 | ||
53 | #define IRQ_MV78XX0_PCIE_02 34 | ||
54 | #define IRQ_MV78XX0_PCIE_03 35 | ||
55 | #define IRQ_MV78XX0_PCIE_10 36 | ||
56 | #define IRQ_MV78XX0_PCIE_11 37 | ||
57 | #define IRQ_MV78XX0_PCIE_12 38 | ||
58 | #define IRQ_MV78XX0_PCIE_13 39 | ||
59 | #define IRQ_MV78XX0_GE00_SUM 40 | ||
60 | #define IRQ_MV78XX0_GE00_RX 41 | ||
61 | #define IRQ_MV78XX0_GE00_TX 42 | ||
62 | #define IRQ_MV78XX0_GE00_MISC 43 | ||
63 | #define IRQ_MV78XX0_GE01_SUM 44 | ||
64 | #define IRQ_MV78XX0_GE01_RX 45 | ||
65 | #define IRQ_MV78XX0_GE01_TX 46 | ||
66 | #define IRQ_MV78XX0_GE01_MISC 47 | ||
67 | #define IRQ_MV78XX0_GE10_SUM 48 | ||
68 | #define IRQ_MV78XX0_GE10_RX 49 | ||
69 | #define IRQ_MV78XX0_GE10_TX 50 | ||
70 | #define IRQ_MV78XX0_GE10_MISC 51 | ||
71 | #define IRQ_MV78XX0_GE11_SUM 52 | ||
72 | #define IRQ_MV78XX0_GE11_RX 53 | ||
73 | #define IRQ_MV78XX0_GE11_TX 54 | ||
74 | #define IRQ_MV78XX0_GE11_MISC 55 | ||
75 | #define IRQ_MV78XX0_GPIO_0_7 56 | ||
76 | #define IRQ_MV78XX0_GPIO_8_15 57 | ||
77 | #define IRQ_MV78XX0_GPIO_16_23 58 | ||
78 | #define IRQ_MV78XX0_GPIO_24_31 59 | ||
79 | #define IRQ_MV78XX0_DB_IN 60 | ||
80 | #define IRQ_MV78XX0_DB_OUT 61 | ||
81 | |||
82 | /* | ||
83 | * MV78XX0 General Purpose Pins | ||
84 | */ | ||
85 | #define IRQ_MV78XX0_GPIO_START 64 | ||
86 | #define NR_GPIO_IRQS GPIO_MAX | ||
87 | |||
88 | #define NR_IRQS (IRQ_MV78XX0_GPIO_START + NR_GPIO_IRQS) | ||
89 | |||
90 | |||
91 | #endif | ||
diff --git a/include/asm-arm/arch-mv78xx0/memory.h b/include/asm-arm/arch-mv78xx0/memory.h new file mode 100644 index 000000000000..721a6b185b91 --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/memory.h | |||
@@ -0,0 +1,14 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-mv78xx0/memory.h | ||
3 | */ | ||
4 | |||
5 | #ifndef __ASM_ARCH_MEMORY_H | ||
6 | #define __ASM_ARCH_MEMORY_H | ||
7 | |||
8 | #define PHYS_OFFSET UL(0x00000000) | ||
9 | |||
10 | #define __virt_to_bus(x) __virt_to_phys(x) | ||
11 | #define __bus_to_virt(x) __phys_to_virt(x) | ||
12 | |||
13 | |||
14 | #endif | ||
diff --git a/include/asm-arm/arch-mv78xx0/mv78xx0.h b/include/asm-arm/arch-mv78xx0/mv78xx0.h new file mode 100644 index 000000000000..9f5d83c73faa --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/mv78xx0.h | |||
@@ -0,0 +1,126 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-mv78xx0/mv78xx0.h | ||
3 | * | ||
4 | * Generic definitions for Marvell MV78xx0 SoC flavors: | ||
5 | * MV781x0 and MV782x0. | ||
6 | * | ||
7 | * This file is licensed under the terms of the GNU General Public | ||
8 | * License version 2. This program is licensed "as is" without any | ||
9 | * warranty of any kind, whether express or implied. | ||
10 | */ | ||
11 | |||
12 | #ifndef __ASM_ARCH_MV78XX0_H | ||
13 | #define __ASM_ARCH_MV78XX0_H | ||
14 | |||
15 | /* | ||
16 | * Marvell MV78xx0 address maps. | ||
17 | * | ||
18 | * phys | ||
19 | * c0000000 PCIe Memory space | ||
20 | * f0800000 PCIe #0 I/O space | ||
21 | * f0900000 PCIe #1 I/O space | ||
22 | * f0a00000 PCIe #2 I/O space | ||
23 | * f0b00000 PCIe #3 I/O space | ||
24 | * f0c00000 PCIe #4 I/O space | ||
25 | * f0d00000 PCIe #5 I/O space | ||
26 | * f0e00000 PCIe #6 I/O space | ||
27 | * f0f00000 PCIe #7 I/O space | ||
28 | * f1000000 on-chip peripheral registers | ||
29 | * | ||
30 | * virt phys size | ||
31 | * fe400000 f102x000 16K core-specific peripheral registers | ||
32 | * fe700000 f0800000 1M PCIe #0 I/O space | ||
33 | * fe800000 f0900000 1M PCIe #1 I/O space | ||
34 | * fe900000 f0a00000 1M PCIe #2 I/O space | ||
35 | * fea00000 f0b00000 1M PCIe #3 I/O space | ||
36 | * feb00000 f0c00000 1M PCIe #4 I/O space | ||
37 | * fec00000 f0d00000 1M PCIe #5 I/O space | ||
38 | * fed00000 f0e00000 1M PCIe #6 I/O space | ||
39 | * fee00000 f0f00000 1M PCIe #7 I/O space | ||
40 | * fef00000 f1000000 1M on-chip peripheral registers | ||
41 | */ | ||
42 | #define MV78XX0_CORE0_REGS_PHYS_BASE 0xf1020000 | ||
43 | #define MV78XX0_CORE1_REGS_PHYS_BASE 0xf1024000 | ||
44 | #define MV78XX0_CORE_REGS_VIRT_BASE 0xfe400000 | ||
45 | #define MV78XX0_CORE_REGS_SIZE SZ_16K | ||
46 | |||
47 | #define MV78XX0_PCIE_IO_PHYS_BASE(i) (0xf0800000 + ((i) << 20)) | ||
48 | #define MV78XX0_PCIE_IO_VIRT_BASE(i) (0xfe700000 + ((i) << 20)) | ||
49 | #define MV78XX0_PCIE_IO_SIZE SZ_1M | ||
50 | |||
51 | #define MV78XX0_REGS_PHYS_BASE 0xf1000000 | ||
52 | #define MV78XX0_REGS_VIRT_BASE 0xfef00000 | ||
53 | #define MV78XX0_REGS_SIZE SZ_1M | ||
54 | |||
55 | #define MV78XX0_PCIE_MEM_PHYS_BASE 0xc0000000 | ||
56 | #define MV78XX0_PCIE_MEM_SIZE 0x30000000 | ||
57 | |||
58 | /* | ||
59 | * Core-specific peripheral registers. | ||
60 | */ | ||
61 | #define BRIDGE_VIRT_BASE (MV78XX0_CORE_REGS_VIRT_BASE) | ||
62 | #define CPU_CONTROL (BRIDGE_VIRT_BASE | 0x0104) | ||
63 | #define L2_WRITETHROUGH 0x00020000 | ||
64 | #define RSTOUTn_MASK (BRIDGE_VIRT_BASE | 0x0108) | ||
65 | #define SOFT_RESET_OUT_EN 0x00000004 | ||
66 | #define SYSTEM_SOFT_RESET (BRIDGE_VIRT_BASE | 0x010c) | ||
67 | #define SOFT_RESET 0x00000001 | ||
68 | #define BRIDGE_CAUSE (BRIDGE_VIRT_BASE | 0x0110) | ||
69 | #define BRIDGE_MASK (BRIDGE_VIRT_BASE | 0x0114) | ||
70 | #define BRIDGE_INT_TIMER0 0x0002 | ||
71 | #define BRIDGE_INT_TIMER1 0x0004 | ||
72 | #define BRIDGE_INT_TIMER1_CLR (~0x0004) | ||
73 | #define IRQ_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0200) | ||
74 | #define IRQ_CAUSE_LOW_OFF 0x0004 | ||
75 | #define IRQ_CAUSE_HIGH_OFF 0x0008 | ||
76 | #define IRQ_MASK_LOW_OFF 0x0010 | ||
77 | #define IRQ_MASK_HIGH_OFF 0x0014 | ||
78 | #define TIMER_VIRT_BASE (BRIDGE_VIRT_BASE | 0x0300) | ||
79 | |||
80 | /* | ||
81 | * Register Map | ||
82 | */ | ||
83 | #define DDR_VIRT_BASE (MV78XX0_REGS_VIRT_BASE | 0x00000) | ||
84 | #define DDR_WINDOW_CPU0_BASE (DDR_VIRT_BASE | 0x1500) | ||
85 | #define DDR_WINDOW_CPU1_BASE (DDR_VIRT_BASE | 0x1700) | ||
86 | |||
87 | #define DEV_BUS_PHYS_BASE (MV78XX0_REGS_PHYS_BASE | 0x10000) | ||
88 | #define DEV_BUS_VIRT_BASE (MV78XX0_REGS_VIRT_BASE | 0x10000) | ||
89 | #define SAMPLE_AT_RESET_LOW (DEV_BUS_VIRT_BASE | 0x0030) | ||
90 | #define SAMPLE_AT_RESET_HIGH (DEV_BUS_VIRT_BASE | 0x0034) | ||
91 | #define UART0_PHYS_BASE (DEV_BUS_PHYS_BASE | 0x2000) | ||
92 | #define UART0_VIRT_BASE (DEV_BUS_VIRT_BASE | 0x2000) | ||
93 | #define UART1_PHYS_BASE (DEV_BUS_PHYS_BASE | 0x2100) | ||
94 | #define UART1_VIRT_BASE (DEV_BUS_VIRT_BASE | 0x2100) | ||
95 | #define UART2_PHYS_BASE (DEV_BUS_PHYS_BASE | 0x2200) | ||
96 | #define UART2_VIRT_BASE (DEV_BUS_VIRT_BASE | 0x2200) | ||
97 | #define UART3_PHYS_BASE (DEV_BUS_PHYS_BASE | 0x2300) | ||
98 | #define UART3_VIRT_BASE (DEV_BUS_VIRT_BASE | 0x2300) | ||
99 | |||
100 | #define GE10_PHYS_BASE (MV78XX0_REGS_PHYS_BASE | 0x30000) | ||
101 | #define GE11_PHYS_BASE (MV78XX0_REGS_PHYS_BASE | 0x34000) | ||
102 | |||
103 | #define PCIE00_VIRT_BASE (MV78XX0_REGS_VIRT_BASE | 0x40000) | ||
104 | #define PCIE01_VIRT_BASE (MV78XX0_REGS_VIRT_BASE | 0x44000) | ||
105 | #define PCIE02_VIRT_BASE (MV78XX0_REGS_VIRT_BASE | 0x48000) | ||
106 | #define PCIE03_VIRT_BASE (MV78XX0_REGS_VIRT_BASE | 0x4c000) | ||
107 | |||
108 | #define USB0_PHYS_BASE (MV78XX0_REGS_PHYS_BASE | 0x50000) | ||
109 | #define USB1_PHYS_BASE (MV78XX0_REGS_PHYS_BASE | 0x51000) | ||
110 | #define USB2_PHYS_BASE (MV78XX0_REGS_PHYS_BASE | 0x52000) | ||
111 | |||
112 | #define GE00_PHYS_BASE (MV78XX0_REGS_PHYS_BASE | 0x70000) | ||
113 | #define GE01_PHYS_BASE (MV78XX0_REGS_PHYS_BASE | 0x74000) | ||
114 | |||
115 | #define PCIE10_VIRT_BASE (MV78XX0_REGS_VIRT_BASE | 0x80000) | ||
116 | #define PCIE11_VIRT_BASE (MV78XX0_REGS_VIRT_BASE | 0x84000) | ||
117 | #define PCIE12_VIRT_BASE (MV78XX0_REGS_VIRT_BASE | 0x88000) | ||
118 | #define PCIE13_VIRT_BASE (MV78XX0_REGS_VIRT_BASE | 0x8c000) | ||
119 | |||
120 | #define SATA_PHYS_BASE (MV78XX0_REGS_PHYS_BASE | 0xa0000) | ||
121 | |||
122 | |||
123 | #define GPIO_MAX 32 | ||
124 | |||
125 | |||
126 | #endif | ||
diff --git a/include/asm-arm/arch-mv78xx0/system.h b/include/asm-arm/arch-mv78xx0/system.h new file mode 100644 index 000000000000..7eb47d376db9 --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/system.h | |||
@@ -0,0 +1,37 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-mv78xx0/system.h | ||
3 | * | ||
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 | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #ifndef __ASM_ARCH_SYSTEM_H | ||
10 | #define __ASM_ARCH_SYSTEM_H | ||
11 | |||
12 | #include <asm/arch/hardware.h> | ||
13 | #include <asm/arch/mv78xx0.h> | ||
14 | |||
15 | static inline void arch_idle(void) | ||
16 | { | ||
17 | cpu_do_idle(); | ||
18 | } | ||
19 | |||
20 | static inline void arch_reset(char mode) | ||
21 | { | ||
22 | /* | ||
23 | * Enable soft reset to assert RSTOUTn. | ||
24 | */ | ||
25 | writel(SOFT_RESET_OUT_EN, RSTOUTn_MASK); | ||
26 | |||
27 | /* | ||
28 | * Assert soft reset. | ||
29 | */ | ||
30 | writel(SOFT_RESET, SYSTEM_SOFT_RESET); | ||
31 | |||
32 | while (1) | ||
33 | ; | ||
34 | } | ||
35 | |||
36 | |||
37 | #endif | ||
diff --git a/include/asm-arm/arch-mv78xx0/timex.h b/include/asm-arm/arch-mv78xx0/timex.h new file mode 100644 index 000000000000..a854b1ccbd01 --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/timex.h | |||
@@ -0,0 +1,9 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-mv78xx0/timex.h | ||
3 | * | ||
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 | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #define CLOCK_TICK_RATE (100 * HZ) | ||
diff --git a/include/asm-arm/arch-mv78xx0/uncompress.h b/include/asm-arm/arch-mv78xx0/uncompress.h new file mode 100644 index 000000000000..3bfe0a293ef7 --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/uncompress.h | |||
@@ -0,0 +1,47 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-mv78xx0/uncompress.h | ||
3 | * | ||
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 | ||
6 | * warranty of any kind, whether express or implied. | ||
7 | */ | ||
8 | |||
9 | #include <linux/serial_reg.h> | ||
10 | #include <asm/arch/mv78xx0.h> | ||
11 | |||
12 | #define SERIAL_BASE ((unsigned char *)UART0_PHYS_BASE) | ||
13 | |||
14 | static void putc(const char c) | ||
15 | { | ||
16 | unsigned char *base = SERIAL_BASE; | ||
17 | int i; | ||
18 | |||
19 | for (i = 0; i < 0x1000; i++) { | ||
20 | if (base[UART_LSR << 2] & UART_LSR_THRE) | ||
21 | break; | ||
22 | barrier(); | ||
23 | } | ||
24 | |||
25 | base[UART_TX << 2] = c; | ||
26 | } | ||
27 | |||
28 | static void flush(void) | ||
29 | { | ||
30 | unsigned char *base = SERIAL_BASE; | ||
31 | unsigned char mask; | ||
32 | int i; | ||
33 | |||
34 | mask = UART_LSR_TEMT | UART_LSR_THRE; | ||
35 | |||
36 | for (i = 0; i < 0x1000; i++) { | ||
37 | if ((base[UART_LSR << 2] & mask) == mask) | ||
38 | break; | ||
39 | barrier(); | ||
40 | } | ||
41 | } | ||
42 | |||
43 | /* | ||
44 | * nothing to do | ||
45 | */ | ||
46 | #define arch_decomp_setup() | ||
47 | #define arch_decomp_wdog() | ||
diff --git a/include/asm-arm/arch-mv78xx0/vmalloc.h b/include/asm-arm/arch-mv78xx0/vmalloc.h new file mode 100644 index 000000000000..f2c512197579 --- /dev/null +++ b/include/asm-arm/arch-mv78xx0/vmalloc.h | |||
@@ -0,0 +1,5 @@ | |||
1 | /* | ||
2 | * include/asm-arm/arch-mv78xx0/vmalloc.h | ||
3 | */ | ||
4 | |||
5 | #define VMALLOC_END 0xfe000000 | ||
diff --git a/include/asm-arm/arch-ns9xxx/hardware.h b/include/asm-arm/arch-ns9xxx/hardware.h index 0b7b34603f1c..0dca11ce21fc 100644 --- a/include/asm-arm/arch-ns9xxx/hardware.h +++ b/include/asm-arm/arch-ns9xxx/hardware.h | |||
@@ -66,13 +66,13 @@ | |||
66 | __REGGET(var, reg ## _ ## field) / __REGSHIFT(reg ## _ ## field) | 66 | __REGGET(var, reg ## _ ## field) / __REGSHIFT(reg ## _ ## field) |
67 | 67 | ||
68 | # define REGGETIM_IDX(var, reg, field, idx) \ | 68 | # define REGGETIM_IDX(var, reg, field, idx) \ |
69 | __REGGET(var, reg ## _ ## field((idx))) / \ | 69 | __REGGET(var, reg ## _ ## field((idx))) / \ |
70 | __REGSHIFT(reg ## _ ## field((idx))) | 70 | __REGSHIFT(reg ## _ ## field((idx))) |
71 | 71 | ||
72 | #else | 72 | #else |
73 | 73 | ||
74 | # define __REG(x) io_p2v(x) | 74 | # define __REG(x) io_p2v(x) |
75 | # define __REG2(x, y) io_p2v((x) + (y)) | 75 | # define __REG2(x, y) io_p2v((x) + 4 * (y)) |
76 | 76 | ||
77 | #endif | 77 | #endif |
78 | 78 | ||
diff --git a/include/asm-arm/arch-orion5x/io.h b/include/asm-arm/arch-orion5x/io.h index 50f8c8802206..59f1bc96a23b 100644 --- a/include/asm-arm/arch-orion5x/io.h +++ b/include/asm-arm/arch-orion5x/io.h | |||
@@ -14,7 +14,6 @@ | |||
14 | #include "orion5x.h" | 14 | #include "orion5x.h" |
15 | 15 | ||
16 | #define IO_SPACE_LIMIT 0xffffffff | 16 | #define IO_SPACE_LIMIT 0xffffffff |
17 | #define IO_SPACE_REMAP ORION5X_PCI_SYS_IO_BASE | ||
18 | 17 | ||
19 | static inline void __iomem * | 18 | static inline void __iomem * |
20 | __arch_ioremap(unsigned long paddr, size_t size, unsigned int mtype) | 19 | __arch_ioremap(unsigned long paddr, size_t size, unsigned int mtype) |
@@ -53,15 +52,12 @@ static inline void __iomem *__io(unsigned long addr) | |||
53 | /***************************************************************************** | 52 | /***************************************************************************** |
54 | * Helpers to access Orion registers | 53 | * Helpers to access Orion registers |
55 | ****************************************************************************/ | 54 | ****************************************************************************/ |
56 | #define orion5x_read(r) __raw_readl(r) | ||
57 | #define orion5x_write(r, val) __raw_writel(val, r) | ||
58 | |||
59 | /* | 55 | /* |
60 | * These are not preempt-safe. Locks, if needed, must be taken | 56 | * These are not preempt-safe. Locks, if needed, must be taken |
61 | * care of by the caller. | 57 | * care of by the caller. |
62 | */ | 58 | */ |
63 | #define orion5x_setbits(r, mask) orion5x_write((r), orion5x_read(r) | (mask)) | 59 | #define orion5x_setbits(r, mask) writel(readl(r) | (mask), (r)) |
64 | #define orion5x_clrbits(r, mask) orion5x_write((r), orion5x_read(r) & ~(mask)) | 60 | #define orion5x_clrbits(r, mask) writel(readl(r) & ~(mask), (r)) |
65 | 61 | ||
66 | 62 | ||
67 | #endif | 63 | #endif |
diff --git a/include/asm-arm/arch-orion5x/orion5x.h b/include/asm-arm/arch-orion5x/orion5x.h index 206ddd71e193..10257f5c5e9e 100644 --- a/include/asm-arm/arch-orion5x/orion5x.h +++ b/include/asm-arm/arch-orion5x/orion5x.h | |||
@@ -2,7 +2,7 @@ | |||
2 | * include/asm-arm/arch-orion5x/orion5x.h | 2 | * include/asm-arm/arch-orion5x/orion5x.h |
3 | * | 3 | * |
4 | * Generic definitions of Orion SoC flavors: | 4 | * Generic definitions of Orion SoC flavors: |
5 | * Orion-1, Orion-NAS, Orion-VoIP, and Orion-2. | 5 | * Orion-1, Orion-VoIP, Orion-NAS, and Orion-2. |
6 | * | 6 | * |
7 | * Maintainer: Tzachi Perelstein <tzachi@marvell.com> | 7 | * Maintainer: Tzachi Perelstein <tzachi@marvell.com> |
8 | * | 8 | * |
@@ -63,9 +63,11 @@ | |||
63 | /******************************************************************************* | 63 | /******************************************************************************* |
64 | * Supported Devices & Revisions | 64 | * Supported Devices & Revisions |
65 | ******************************************************************************/ | 65 | ******************************************************************************/ |
66 | /* Orion-1 (88F5181) */ | 66 | /* Orion-1 (88F5181) and Orion-VoIP (88F5181L) */ |
67 | #define MV88F5181_DEV_ID 0x5181 | 67 | #define MV88F5181_DEV_ID 0x5181 |
68 | #define MV88F5181_REV_B1 3 | 68 | #define MV88F5181_REV_B1 3 |
69 | #define MV88F5181L_REV_A0 8 | ||
70 | #define MV88F5181L_REV_A1 9 | ||
69 | /* Orion-NAS (88F5182) */ | 71 | /* Orion-NAS (88F5182) */ |
70 | #define MV88F5182_DEV_ID 0x5182 | 72 | #define MV88F5182_DEV_ID 0x5182 |
71 | #define MV88F5182_REV_A2 2 | 73 | #define MV88F5182_REV_A2 2 |
@@ -152,6 +154,7 @@ | |||
152 | #define BRIDGE_MASK ORION5X_BRIDGE_REG(0x114) | 154 | #define BRIDGE_MASK ORION5X_BRIDGE_REG(0x114) |
153 | #define BRIDGE_INT_TIMER0 0x0002 | 155 | #define BRIDGE_INT_TIMER0 0x0002 |
154 | #define BRIDGE_INT_TIMER1 0x0004 | 156 | #define BRIDGE_INT_TIMER1 0x0004 |
157 | #define BRIDGE_INT_TIMER1_CLR (~0x0004) | ||
155 | #define MAIN_IRQ_CAUSE ORION5X_BRIDGE_REG(0x200) | 158 | #define MAIN_IRQ_CAUSE ORION5X_BRIDGE_REG(0x200) |
156 | #define MAIN_IRQ_MASK ORION5X_BRIDGE_REG(0x204) | 159 | #define MAIN_IRQ_MASK ORION5X_BRIDGE_REG(0x204) |
157 | 160 | ||
diff --git a/include/asm-arm/arch-orion5x/uncompress.h b/include/asm-arm/arch-orion5x/uncompress.h index 5c13d4fafb4e..7548cedf2d76 100644 --- a/include/asm-arm/arch-orion5x/uncompress.h +++ b/include/asm-arm/arch-orion5x/uncompress.h | |||
@@ -8,23 +8,38 @@ | |||
8 | * warranty of any kind, whether express or implied. | 8 | * warranty of any kind, whether express or implied. |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <linux/serial_reg.h> | ||
11 | #include <asm/arch/orion5x.h> | 12 | #include <asm/arch/orion5x.h> |
12 | 13 | ||
13 | #define MV_UART_THR ((volatile unsigned char *)(UART0_PHYS_BASE + 0x0)) | 14 | #define SERIAL_BASE ((unsigned char *)UART0_PHYS_BASE) |
14 | #define MV_UART_LSR ((volatile unsigned char *)(UART0_PHYS_BASE + 0x14)) | ||
15 | |||
16 | #define LSR_THRE 0x20 | ||
17 | 15 | ||
18 | static void putc(const char c) | 16 | static void putc(const char c) |
19 | { | 17 | { |
20 | int j = 0x1000; | 18 | unsigned char *base = SERIAL_BASE; |
21 | while (--j && !(*MV_UART_LSR & LSR_THRE)) | 19 | int i; |
20 | |||
21 | for (i = 0; i < 0x1000; i++) { | ||
22 | if (base[UART_LSR << 2] & UART_LSR_THRE) | ||
23 | break; | ||
22 | barrier(); | 24 | barrier(); |
23 | *MV_UART_THR = c; | 25 | } |
26 | |||
27 | base[UART_TX << 2] = c; | ||
24 | } | 28 | } |
25 | 29 | ||
26 | static void flush(void) | 30 | static void flush(void) |
27 | { | 31 | { |
32 | unsigned char *base = SERIAL_BASE; | ||
33 | unsigned char mask; | ||
34 | int i; | ||
35 | |||
36 | mask = UART_LSR_TEMT | UART_LSR_THRE; | ||
37 | |||
38 | for (i = 0; i < 0x1000; i++) { | ||
39 | if ((base[UART_LSR << 2] & mask) == mask) | ||
40 | break; | ||
41 | barrier(); | ||
42 | } | ||
28 | } | 43 | } |
29 | 44 | ||
30 | /* | 45 | /* |
diff --git a/include/asm-arm/arch-rpc/io.h b/include/asm-arm/arch-rpc/io.h index b4da08d7a336..6bd2295c0e01 100644 --- a/include/asm-arm/arch-rpc/io.h +++ b/include/asm-arm/arch-rpc/io.h | |||
@@ -126,7 +126,7 @@ static inline unsigned sz __in##fnsuffix (unsigned int port) \ | |||
126 | return (unsigned sz)value; \ | 126 | return (unsigned sz)value; \ |
127 | } | 127 | } |
128 | 128 | ||
129 | static inline void __iomem *__ioaddr(unsigned int port) | 129 | static inline void __iomem *__deprecated __ioaddr(unsigned int port) |
130 | { | 130 | { |
131 | void __iomem *ret; | 131 | void __iomem *ret; |
132 | if (__PORT_PCIO(port)) | 132 | if (__PORT_PCIO(port)) |
@@ -232,8 +232,7 @@ DECLARE_IO(int,l,"") | |||
232 | result; \ | 232 | result; \ |
233 | }) | 233 | }) |
234 | 234 | ||
235 | #define __ioaddrc(port) \ | 235 | #define __ioaddrc(port) __ioaddr(port) |
236 | ((__PORT_PCIO(port) ? PCIO_BASE : IO_BASE) + ((port) << 2)) | ||
237 | 236 | ||
238 | #define inb(p) (__builtin_constant_p((p)) ? __inbc(p) : __inb(p)) | 237 | #define inb(p) (__builtin_constant_p((p)) ? __inbc(p) : __inb(p)) |
239 | #define inw(p) (__builtin_constant_p((p)) ? __inwc(p) : __inw(p)) | 238 | #define inw(p) (__builtin_constant_p((p)) ? __inwc(p) : __inw(p)) |
diff --git a/include/asm-arm/arch-s3c2410/gpio.h b/include/asm-arm/arch-s3c2410/gpio.h index 7583895fd336..18e10d2c35ea 100644 --- a/include/asm-arm/arch-s3c2410/gpio.h +++ b/include/asm-arm/arch-s3c2410/gpio.h | |||
@@ -1,68 +1,18 @@ | |||
1 | /* | 1 | /* linux/include/asm-arm/arch-s3c2410/gpio.h |
2 | * linux/include/asm-arm/arch-s3c2410/gpio.h | ||
3 | * | 2 | * |
4 | * S3C2410 GPIO wrappers for arch-neutral GPIO calls | 3 | * Copyright (c) 2008 Simtec Electronics |
4 | * http://armlinux.simtec.co.uk/ | ||
5 | * Ben Dooks <ben@simtec.co.uk> | ||
5 | * | 6 | * |
6 | * Written by Philipp Zabel <philipp.zabel@gmail.com> | 7 | * S3C2410 - GPIO lib support |
7 | * | 8 | * |
8 | * This program is free software; you can redistribute it and/or modify | 9 | * This program is free software; you can redistribute it and/or modify |
9 | * it under the terms of the GNU General Public License as published by | 10 | * it under the terms of the GNU General Public License version 2 as |
10 | * the Free Software Foundation; either version 2 of the License, or | 11 | * published by the Free Software Foundation. |
11 | * (at your option) any later version. | 12 | */ |
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, | ||
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
16 | * GNU General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
21 | * | ||
22 | */ | ||
23 | |||
24 | #ifndef __ASM_ARCH_S3C2410_GPIO_H | ||
25 | #define __ASM_ARCH_S3C2410_GPIO_H | ||
26 | |||
27 | #include <asm/irq.h> | ||
28 | #include <asm/hardware.h> | ||
29 | #include <asm/arch/regs-gpio.h> | ||
30 | |||
31 | static inline int gpio_request(unsigned gpio, const char *label) | ||
32 | { | ||
33 | return 0; | ||
34 | } | ||
35 | |||
36 | static inline void gpio_free(unsigned gpio) | ||
37 | { | ||
38 | return; | ||
39 | } | ||
40 | |||
41 | static inline int gpio_direction_input(unsigned gpio) | ||
42 | { | ||
43 | s3c2410_gpio_cfgpin(gpio, S3C2410_GPIO_INPUT); | ||
44 | return 0; | ||
45 | } | ||
46 | |||
47 | static inline int gpio_direction_output(unsigned gpio, int value) | ||
48 | { | ||
49 | s3c2410_gpio_cfgpin(gpio, S3C2410_GPIO_OUTPUT); | ||
50 | /* REVISIT can we write the value first, to avoid glitching? */ | ||
51 | s3c2410_gpio_setpin(gpio, value); | ||
52 | return 0; | ||
53 | } | ||
54 | |||
55 | #define gpio_get_value(gpio) s3c2410_gpio_getpin(gpio) | ||
56 | #define gpio_set_value(gpio,value) s3c2410_gpio_setpin(gpio, value) | ||
57 | |||
58 | #include <asm-generic/gpio.h> /* cansleep wrappers */ | ||
59 | |||
60 | #ifdef CONFIG_CPU_S3C2400 | ||
61 | #define gpio_to_irq(gpio) s3c2400_gpio_getirq(gpio) | ||
62 | #else | ||
63 | #define gpio_to_irq(gpio) s3c2410_gpio_getirq(gpio) | ||
64 | #endif | ||
65 | 13 | ||
66 | /* FIXME implement irq_to_gpio() */ | 14 | #define gpio_get_value __gpio_get_value |
15 | #define gpio_set_value __gpio_set_value | ||
16 | #define gpio_cansleep __gpio_cansleep | ||
67 | 17 | ||
68 | #endif | 18 | #include <asm-generic/gpio.h> |
diff --git a/include/asm-arm/arch-s3c2410/regs-clock.h b/include/asm-arm/arch-s3c2410/regs-clock.h index ecae9e7f5e45..37661358b42b 100644 --- a/include/asm-arm/arch-s3c2410/regs-clock.h +++ b/include/asm-arm/arch-s3c2410/regs-clock.h | |||
@@ -189,6 +189,8 @@ s3c2410_get_pll(unsigned int pllval, unsigned int baseclk) | |||
189 | #define S3C2412_CLKSRC_I2SCLK_MPLL (1<<9) | 189 | #define S3C2412_CLKSRC_I2SCLK_MPLL (1<<9) |
190 | #define S3C2412_CLKSRC_USBCLK_HCLK (1<<10) | 190 | #define S3C2412_CLKSRC_USBCLK_HCLK (1<<10) |
191 | #define S3C2412_CLKSRC_CAMCLK_HCLK (1<<11) | 191 | #define S3C2412_CLKSRC_CAMCLK_HCLK (1<<11) |
192 | #define S3C2412_CLKSRC_UREFCLK_EXTCLK (1<<12) | ||
193 | #define S3C2412_CLKSRC_EREFCLK_EXTCLK (1<<14) | ||
192 | 194 | ||
193 | #endif /* CONFIG_CPU_S3C2412 | CONFIG_CPU_S3C2413 */ | 195 | #endif /* CONFIG_CPU_S3C2412 | CONFIG_CPU_S3C2413 */ |
194 | 196 | ||
diff --git a/include/asm-arm/assembler.h b/include/asm-arm/assembler.h index fce832820825..911393b2c6f0 100644 --- a/include/asm-arm/assembler.h +++ b/include/asm-arm/assembler.h | |||
@@ -56,6 +56,21 @@ | |||
56 | #endif | 56 | #endif |
57 | 57 | ||
58 | /* | 58 | /* |
59 | * This can be used to enable code to cacheline align the destination | ||
60 | * pointer when bulk writing to memory. Experiments on StrongARM and | ||
61 | * XScale didn't show this a worthwhile thing to do when the cache is not | ||
62 | * set to write-allocate (this would need further testing on XScale when WA | ||
63 | * is used). | ||
64 | * | ||
65 | * On Feroceon there is much to gain however, regardless of cache mode. | ||
66 | */ | ||
67 | #ifdef CONFIG_CPU_FEROCEON | ||
68 | #define CALGN(code...) code | ||
69 | #else | ||
70 | #define CALGN(code...) | ||
71 | #endif | ||
72 | |||
73 | /* | ||
59 | * Enable and disable interrupts | 74 | * Enable and disable interrupts |
60 | */ | 75 | */ |
61 | #if __LINUX_ARM_ARCH__ >= 6 | 76 | #if __LINUX_ARM_ARCH__ >= 6 |
diff --git a/include/asm-arm/cacheflush.h b/include/asm-arm/cacheflush.h index 759a97b56eed..70b0fe724b62 100644 --- a/include/asm-arm/cacheflush.h +++ b/include/asm-arm/cacheflush.h | |||
@@ -95,11 +95,7 @@ | |||
95 | #endif | 95 | #endif |
96 | 96 | ||
97 | #if defined(CONFIG_CPU_FEROCEON) | 97 | #if defined(CONFIG_CPU_FEROCEON) |
98 | # ifdef _CACHE | 98 | # define MULTI_CACHE 1 |
99 | # define MULTI_CACHE 1 | ||
100 | # else | ||
101 | # define _CACHE feroceon | ||
102 | # endif | ||
103 | #endif | 99 | #endif |
104 | 100 | ||
105 | #if defined(CONFIG_CPU_V6) | 101 | #if defined(CONFIG_CPU_V6) |
@@ -410,6 +406,13 @@ extern void flush_dcache_page(struct page *); | |||
410 | 406 | ||
411 | extern void __flush_dcache_page(struct address_space *mapping, struct page *page); | 407 | extern void __flush_dcache_page(struct address_space *mapping, struct page *page); |
412 | 408 | ||
409 | static inline void __flush_icache_all(void) | ||
410 | { | ||
411 | asm("mcr p15, 0, %0, c7, c5, 0 @ invalidate I-cache\n" | ||
412 | : | ||
413 | : "r" (0)); | ||
414 | } | ||
415 | |||
413 | #define ARCH_HAS_FLUSH_ANON_PAGE | 416 | #define ARCH_HAS_FLUSH_ANON_PAGE |
414 | static inline void flush_anon_page(struct vm_area_struct *vma, | 417 | static inline void flush_anon_page(struct vm_area_struct *vma, |
415 | struct page *page, unsigned long vmaddr) | 418 | struct page *page, unsigned long vmaddr) |
diff --git a/include/asm-arm/dyntick.h b/include/asm-arm/dyntick.h deleted file mode 100644 index 19fab2d2b760..000000000000 --- a/include/asm-arm/dyntick.h +++ /dev/null | |||
@@ -1,6 +0,0 @@ | |||
1 | #ifndef _ASMARM_DYNTICK_H | ||
2 | #define _ASMARM_DYNTICK_H | ||
3 | |||
4 | #include <asm/mach/time.h> | ||
5 | |||
6 | #endif /* _ASMARM_DYNTICK_H */ | ||
diff --git a/include/asm-arm/ecard.h b/include/asm-arm/ecard.h index 684fe0645239..5e22881a630d 100644 --- a/include/asm-arm/ecard.h +++ b/include/asm-arm/ecard.h | |||
@@ -85,19 +85,6 @@ | |||
85 | 85 | ||
86 | #define MAX_ECARDS 9 | 86 | #define MAX_ECARDS 9 |
87 | 87 | ||
88 | typedef enum { /* Cards address space */ | ||
89 | ECARD_IOC, | ||
90 | ECARD_MEMC, | ||
91 | ECARD_EASI | ||
92 | } card_type_t; | ||
93 | |||
94 | typedef enum { /* Speed for ECARD_IOC space */ | ||
95 | ECARD_SLOW = 0, | ||
96 | ECARD_MEDIUM = 1, | ||
97 | ECARD_FAST = 2, | ||
98 | ECARD_SYNC = 3 | ||
99 | } card_speed_t; | ||
100 | |||
101 | struct ecard_id { /* Card ID structure */ | 88 | struct ecard_id { /* Card ID structure */ |
102 | unsigned short manufacturer; | 89 | unsigned short manufacturer; |
103 | unsigned short product; | 90 | unsigned short product; |
@@ -190,16 +177,6 @@ struct in_chunk_dir { | |||
190 | }; | 177 | }; |
191 | 178 | ||
192 | /* | 179 | /* |
193 | * ecard_claim: claim an expansion card entry | ||
194 | */ | ||
195 | #define ecard_claim(ec) ((ec)->claimed = 1) | ||
196 | |||
197 | /* | ||
198 | * ecard_release: release an expansion card entry | ||
199 | */ | ||
200 | #define ecard_release(ec) ((ec)->claimed = 0) | ||
201 | |||
202 | /* | ||
203 | * Read a chunk from an expansion card | 180 | * Read a chunk from an expansion card |
204 | * cd : where to put read data | 181 | * cd : where to put read data |
205 | * ec : expansion card info struct | 182 | * ec : expansion card info struct |
@@ -209,18 +186,6 @@ struct in_chunk_dir { | |||
209 | extern int ecard_readchunk (struct in_chunk_dir *cd, struct expansion_card *ec, int id, int num); | 186 | extern int ecard_readchunk (struct in_chunk_dir *cd, struct expansion_card *ec, int id, int num); |
210 | 187 | ||
211 | /* | 188 | /* |
212 | * Obtain the address of a card. This returns the "old style" address | ||
213 | * and should no longer be used. | ||
214 | */ | ||
215 | static inline unsigned int __deprecated | ||
216 | ecard_address(struct expansion_card *ec, card_type_t type, card_speed_t speed) | ||
217 | { | ||
218 | extern unsigned int __ecard_address(struct expansion_card *, | ||
219 | card_type_t, card_speed_t); | ||
220 | return __ecard_address(ec, type, speed); | ||
221 | } | ||
222 | |||
223 | /* | ||
224 | * Request and release ecard resources | 189 | * Request and release ecard resources |
225 | */ | 190 | */ |
226 | extern int ecard_request_resources(struct expansion_card *ec); | 191 | extern int ecard_request_resources(struct expansion_card *ec); |
diff --git a/include/asm-arm/hardware/iop3xx-gpio.h b/include/asm-arm/hardware/iop3xx-gpio.h new file mode 100644 index 000000000000..0c9331f9ac24 --- /dev/null +++ b/include/asm-arm/hardware/iop3xx-gpio.h | |||
@@ -0,0 +1,73 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/hardware/iop3xx-gpio.h | ||
3 | * | ||
4 | * IOP3xx GPIO wrappers | ||
5 | * | ||
6 | * Copyright (c) 2008 Arnaud Patard <arnaud.patard@rtp-net.org> | ||
7 | * Based on IXP4XX gpio.h file | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License as published by | ||
11 | * the Free Software Foundation; either version 2 of the License, or | ||
12 | * (at your option) any later version. | ||
13 | * | ||
14 | * This program is distributed in the hope that it will be useful, | ||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
17 | * GNU General Public License for more details. | ||
18 | * | ||
19 | * You should have received a copy of the GNU General Public License | ||
20 | * along with this program; if not, write to the Free Software | ||
21 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
22 | * | ||
23 | */ | ||
24 | |||
25 | #ifndef __ASM_ARM_HARDWARE_IOP3XX_GPIO_H | ||
26 | #define __ASM_ARM_HARDWARE_IOP3XX_GPIO_H | ||
27 | |||
28 | #include <asm/hardware.h> | ||
29 | #include <asm-generic/gpio.h> | ||
30 | |||
31 | #define IOP3XX_N_GPIOS 8 | ||
32 | |||
33 | static inline int gpio_get_value(unsigned gpio) | ||
34 | { | ||
35 | if (gpio > IOP3XX_N_GPIOS) | ||
36 | return __gpio_get_value(gpio); | ||
37 | |||
38 | return gpio_line_get(gpio); | ||
39 | } | ||
40 | |||
41 | static inline void gpio_set_value(unsigned gpio, int value) | ||
42 | { | ||
43 | if (gpio > IOP3XX_N_GPIOS) { | ||
44 | __gpio_set_value(gpio, value); | ||
45 | return; | ||
46 | } | ||
47 | gpio_line_set(gpio, value); | ||
48 | } | ||
49 | |||
50 | static inline int gpio_cansleep(unsigned gpio) | ||
51 | { | ||
52 | if (gpio < IOP3XX_N_GPIOS) | ||
53 | return 0; | ||
54 | else | ||
55 | return __gpio_cansleep(gpio); | ||
56 | } | ||
57 | |||
58 | /* | ||
59 | * The GPIOs are not generating any interrupt | ||
60 | * Note : manuals are not clear about this | ||
61 | */ | ||
62 | static inline int gpio_to_irq(int gpio) | ||
63 | { | ||
64 | return -EINVAL; | ||
65 | } | ||
66 | |||
67 | static inline int irq_to_gpio(int gpio) | ||
68 | { | ||
69 | return -EINVAL; | ||
70 | } | ||
71 | |||
72 | #endif | ||
73 | |||
diff --git a/include/asm-arm/hw_irq.h b/include/asm-arm/hw_irq.h index 98d594a973d6..f1a08a500604 100644 --- a/include/asm-arm/hw_irq.h +++ b/include/asm-arm/hw_irq.h | |||
@@ -6,15 +6,4 @@ | |||
6 | 6 | ||
7 | #include <asm/mach/irq.h> | 7 | #include <asm/mach/irq.h> |
8 | 8 | ||
9 | #if defined(CONFIG_NO_IDLE_HZ) | ||
10 | # include <asm/dyntick.h> | ||
11 | # define handle_dynamic_tick(action) \ | ||
12 | if (!(action->flags & IRQF_TIMER) && system_timer->dyn_tick) { \ | ||
13 | write_seqlock(&xtime_lock); \ | ||
14 | if (system_timer->dyn_tick->state & DYN_TICK_ENABLED) \ | ||
15 | system_timer->dyn_tick->handler(irq, NULL); \ | ||
16 | write_sequnlock(&xtime_lock); \ | ||
17 | } | ||
18 | #endif | ||
19 | |||
20 | #endif | 9 | #endif |
diff --git a/include/asm-arm/kexec.h b/include/asm-arm/kexec.h index 47fe34d692da..c8986bb99ed5 100644 --- a/include/asm-arm/kexec.h +++ b/include/asm-arm/kexec.h | |||
@@ -14,8 +14,6 @@ | |||
14 | 14 | ||
15 | #define KEXEC_ARCH KEXEC_ARCH_ARM | 15 | #define KEXEC_ARCH KEXEC_ARCH_ARM |
16 | 16 | ||
17 | #define KEXEC_BOOT_PARAMS_SIZE 1536 | ||
18 | |||
19 | #define KEXEC_ARM_ATAGS_OFFSET 0x1000 | 17 | #define KEXEC_ARM_ATAGS_OFFSET 0x1000 |
20 | #define KEXEC_ARM_ZIMAGE_OFFSET 0x8000 | 18 | #define KEXEC_ARM_ZIMAGE_OFFSET 0x8000 |
21 | 19 | ||
diff --git a/include/asm-arm/mach/time.h b/include/asm-arm/mach/time.h index 5dc357013b79..2fd36ea0130d 100644 --- a/include/asm-arm/mach/time.h +++ b/include/asm-arm/mach/time.h | |||
@@ -41,30 +41,8 @@ struct sys_timer { | |||
41 | #ifndef CONFIG_GENERIC_TIME | 41 | #ifndef CONFIG_GENERIC_TIME |
42 | unsigned long (*offset)(void); | 42 | unsigned long (*offset)(void); |
43 | #endif | 43 | #endif |
44 | |||
45 | #ifdef CONFIG_NO_IDLE_HZ | ||
46 | struct dyn_tick_timer *dyn_tick; | ||
47 | #endif | ||
48 | }; | ||
49 | |||
50 | #ifdef CONFIG_NO_IDLE_HZ | ||
51 | |||
52 | #define DYN_TICK_ENABLED (1 << 1) | ||
53 | |||
54 | struct dyn_tick_timer { | ||
55 | spinlock_t lock; | ||
56 | unsigned int state; /* Current state */ | ||
57 | int (*enable)(void); /* Enables dynamic tick */ | ||
58 | int (*disable)(void); /* Disables dynamic tick */ | ||
59 | void (*reprogram)(unsigned long); /* Reprograms the timer */ | ||
60 | int (*handler)(int, void *); | ||
61 | }; | 44 | }; |
62 | 45 | ||
63 | void timer_dyn_reprogram(void); | ||
64 | #else | ||
65 | #define timer_dyn_reprogram() do { } while (0) | ||
66 | #endif | ||
67 | |||
68 | extern struct sys_timer *system_timer; | 46 | extern struct sys_timer *system_timer; |
69 | extern void timer_tick(void); | 47 | extern void timer_tick(void); |
70 | 48 | ||
diff --git a/include/asm-arm/mmu_context.h b/include/asm-arm/mmu_context.h index 6913d02ca5d6..91b9dfdfed52 100644 --- a/include/asm-arm/mmu_context.h +++ b/include/asm-arm/mmu_context.h | |||
@@ -97,6 +97,11 @@ switch_mm(struct mm_struct *prev, struct mm_struct *next, | |||
97 | #ifdef CONFIG_MMU | 97 | #ifdef CONFIG_MMU |
98 | unsigned int cpu = smp_processor_id(); | 98 | unsigned int cpu = smp_processor_id(); |
99 | 99 | ||
100 | #ifdef CONFIG_SMP | ||
101 | /* check for possible thread migration */ | ||
102 | if (!cpus_empty(next->cpu_vm_mask) && !cpu_isset(cpu, next->cpu_vm_mask)) | ||
103 | __flush_icache_all(); | ||
104 | #endif | ||
100 | if (!cpu_test_and_set(cpu, next->cpu_vm_mask) || prev != next) { | 105 | if (!cpu_test_and_set(cpu, next->cpu_vm_mask) || prev != next) { |
101 | check_context(next); | 106 | check_context(next); |
102 | cpu_switch_mm(next->pgd, next); | 107 | cpu_switch_mm(next->pgd, next); |
diff --git a/include/asm-arm/plat-orion/cache-feroceon-l2.h b/include/asm-arm/plat-orion/cache-feroceon-l2.h new file mode 100644 index 000000000000..ba4e016d3ec0 --- /dev/null +++ b/include/asm-arm/plat-orion/cache-feroceon-l2.h | |||
@@ -0,0 +1,11 @@ | |||
1 | /* | ||
2 | * include/asm-arm/plat-orion/cache-feroceon-l2.h | ||
3 | * | ||
4 | * Copyright (C) 2008 Marvell Semiconductor | ||
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 | extern void __init feroceon_l2_init(int l2_wt_override); | ||
diff --git a/include/asm-arm/plat-orion/orion_nand.h b/include/asm-arm/plat-orion/orion_nand.h index ffd3852a0dd7..ad4ce94c1998 100644 --- a/include/asm-arm/plat-orion/orion_nand.h +++ b/include/asm-arm/plat-orion/orion_nand.h | |||
@@ -18,6 +18,7 @@ struct orion_nand_data { | |||
18 | u8 ale; /* address line number connected to ALE */ | 18 | u8 ale; /* address line number connected to ALE */ |
19 | u8 cle; /* address line number connected to CLE */ | 19 | u8 cle; /* address line number connected to CLE */ |
20 | u8 width; /* buswidth */ | 20 | u8 width; /* buswidth */ |
21 | u8 chip_delay; | ||
21 | }; | 22 | }; |
22 | 23 | ||
23 | 24 | ||
diff --git a/include/asm-arm/plat-orion/pcie.h b/include/asm-arm/plat-orion/pcie.h index 6434ac685d21..e61b7bd97af5 100644 --- a/include/asm-arm/plat-orion/pcie.h +++ b/include/asm-arm/plat-orion/pcie.h | |||
@@ -14,6 +14,7 @@ | |||
14 | u32 orion_pcie_dev_id(void __iomem *base); | 14 | u32 orion_pcie_dev_id(void __iomem *base); |
15 | u32 orion_pcie_rev(void __iomem *base); | 15 | u32 orion_pcie_rev(void __iomem *base); |
16 | int orion_pcie_link_up(void __iomem *base); | 16 | int orion_pcie_link_up(void __iomem *base); |
17 | int orion_pcie_x4_mode(void __iomem *base); | ||
17 | int orion_pcie_get_local_bus_nr(void __iomem *base); | 18 | int orion_pcie_get_local_bus_nr(void __iomem *base); |
18 | void orion_pcie_set_local_bus_nr(void __iomem *base, int nr); | 19 | void orion_pcie_set_local_bus_nr(void __iomem *base, int nr); |
19 | void orion_pcie_setup(void __iomem *base, | 20 | void orion_pcie_setup(void __iomem *base, |
diff --git a/include/asm-arm/plat-s3c/regs-timer.h b/include/asm-arm/plat-s3c/regs-timer.h index 8b0d594397b1..b5bc692f3489 100644 --- a/include/asm-arm/plat-s3c/regs-timer.h +++ b/include/asm-arm/plat-s3c/regs-timer.h | |||
@@ -65,6 +65,15 @@ | |||
65 | #define S3C2410_TCFG1_MUX0_TCLK0 (4<<0) | 65 | #define S3C2410_TCFG1_MUX0_TCLK0 (4<<0) |
66 | #define S3C2410_TCFG1_MUX0_MASK (15<<0) | 66 | #define S3C2410_TCFG1_MUX0_MASK (15<<0) |
67 | 67 | ||
68 | #define S3C2410_TCFG1_MUX_DIV2 (0<<0) | ||
69 | #define S3C2410_TCFG1_MUX_DIV4 (1<<0) | ||
70 | #define S3C2410_TCFG1_MUX_DIV8 (2<<0) | ||
71 | #define S3C2410_TCFG1_MUX_DIV16 (3<<0) | ||
72 | #define S3C2410_TCFG1_MUX_TCLK (4<<0) | ||
73 | #define S3C2410_TCFG1_MUX_MASK (15<<0) | ||
74 | |||
75 | #define S3C2410_TCFG1_SHIFT(x) ((x) * 4) | ||
76 | |||
68 | /* for each timer, we have an count buffer, an compare buffer and | 77 | /* for each timer, we have an count buffer, an compare buffer and |
69 | * an observation buffer | 78 | * an observation buffer |
70 | */ | 79 | */ |
diff --git a/include/asm-arm/plat-s3c24xx/devs.h b/include/asm-arm/plat-s3c24xx/devs.h index f9d6f0317bc1..badaac9d64a8 100644 --- a/include/asm-arm/plat-s3c24xx/devs.h +++ b/include/asm-arm/plat-s3c24xx/devs.h | |||
@@ -21,6 +21,8 @@ extern struct s3c24xx_uart_resources s3c2410_uart_resources[]; | |||
21 | extern struct platform_device *s3c24xx_uart_devs[]; | 21 | extern struct platform_device *s3c24xx_uart_devs[]; |
22 | extern struct platform_device *s3c24xx_uart_src[]; | 22 | extern struct platform_device *s3c24xx_uart_src[]; |
23 | 23 | ||
24 | extern struct platform_device s3c_device_timer[]; | ||
25 | |||
24 | extern struct platform_device s3c_device_usb; | 26 | extern struct platform_device s3c_device_usb; |
25 | extern struct platform_device s3c_device_lcd; | 27 | extern struct platform_device s3c_device_lcd; |
26 | extern struct platform_device s3c_device_wdt; | 28 | extern struct platform_device s3c_device_wdt; |
@@ -36,11 +38,6 @@ extern struct platform_device s3c_device_spi1; | |||
36 | 38 | ||
37 | extern struct platform_device s3c_device_nand; | 39 | extern struct platform_device s3c_device_nand; |
38 | 40 | ||
39 | extern struct platform_device s3c_device_timer0; | ||
40 | extern struct platform_device s3c_device_timer1; | ||
41 | extern struct platform_device s3c_device_timer2; | ||
42 | extern struct platform_device s3c_device_timer3; | ||
43 | |||
44 | extern struct platform_device s3c_device_usbgadget; | 41 | extern struct platform_device s3c_device_usbgadget; |
45 | 42 | ||
46 | /* s3c2440 specific devices */ | 43 | /* s3c2440 specific devices */ |
diff --git a/include/asm-arm/rtc.h b/include/asm-arm/rtc.h deleted file mode 100644 index 1a5c9232a91e..000000000000 --- a/include/asm-arm/rtc.h +++ /dev/null | |||
@@ -1,43 +0,0 @@ | |||
1 | /* | ||
2 | * linux/include/asm-arm/rtc.h | ||
3 | * | ||
4 | * Copyright (C) 2003 Deep Blue Solutions Ltd. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | #ifndef ASMARM_RTC_H | ||
11 | #define ASMARM_RTC_H | ||
12 | |||
13 | struct module; | ||
14 | |||
15 | struct rtc_ops { | ||
16 | struct module *owner; | ||
17 | int (*open)(void); | ||
18 | void (*release)(void); | ||
19 | int (*ioctl)(unsigned int, unsigned long); | ||
20 | |||
21 | int (*read_time)(struct rtc_time *); | ||
22 | int (*set_time)(struct rtc_time *); | ||
23 | int (*read_alarm)(struct rtc_wkalrm *); | ||
24 | int (*set_alarm)(struct rtc_wkalrm *); | ||
25 | int (*proc)(char *buf); | ||
26 | }; | ||
27 | |||
28 | void rtc_next_alarm_time(struct rtc_time *, struct rtc_time *, struct rtc_time *); | ||
29 | void rtc_update(unsigned long, unsigned long); | ||
30 | int register_rtc(struct rtc_ops *); | ||
31 | void unregister_rtc(struct rtc_ops *); | ||
32 | |||
33 | static inline int rtc_periodic_alarm(struct rtc_time *tm) | ||
34 | { | ||
35 | return (tm->tm_year == -1) || | ||
36 | ((unsigned)tm->tm_mon >= 12) || | ||
37 | ((unsigned)(tm->tm_mday - 1) >= 31) || | ||
38 | ((unsigned)tm->tm_hour > 23) || | ||
39 | ((unsigned)tm->tm_min > 59) || | ||
40 | ((unsigned)tm->tm_sec > 59); | ||
41 | } | ||
42 | |||
43 | #endif | ||
diff --git a/include/asm-arm/tlbflush.h b/include/asm-arm/tlbflush.h index 8c6bc1bb9d1a..909656c747ef 100644 --- a/include/asm-arm/tlbflush.h +++ b/include/asm-arm/tlbflush.h | |||
@@ -39,6 +39,7 @@ | |||
39 | #define TLB_V6_D_ASID (1 << 17) | 39 | #define TLB_V6_D_ASID (1 << 17) |
40 | #define TLB_V6_I_ASID (1 << 18) | 40 | #define TLB_V6_I_ASID (1 << 18) |
41 | 41 | ||
42 | #define TLB_L2CLEAN_FR (1 << 29) /* Feroceon */ | ||
42 | #define TLB_DCLEAN (1 << 30) | 43 | #define TLB_DCLEAN (1 << 30) |
43 | #define TLB_WB (1 << 31) | 44 | #define TLB_WB (1 << 31) |
44 | 45 | ||
@@ -51,6 +52,7 @@ | |||
51 | * v4 - ARMv4 without write buffer | 52 | * v4 - ARMv4 without write buffer |
52 | * v4wb - ARMv4 with write buffer without I TLB flush entry instruction | 53 | * v4wb - ARMv4 with write buffer without I TLB flush entry instruction |
53 | * v4wbi - ARMv4 with write buffer with I TLB flush entry instruction | 54 | * v4wbi - ARMv4 with write buffer with I TLB flush entry instruction |
55 | * fr - Feroceon (v4wbi with non-outer-cacheable page table walks) | ||
54 | * v6wbi - ARMv6 with write buffer with I TLB flush entry instruction | 56 | * v6wbi - ARMv6 with write buffer with I TLB flush entry instruction |
55 | */ | 57 | */ |
56 | #undef _TLB | 58 | #undef _TLB |
@@ -103,6 +105,23 @@ | |||
103 | # define v4wbi_always_flags (-1UL) | 105 | # define v4wbi_always_flags (-1UL) |
104 | #endif | 106 | #endif |
105 | 107 | ||
108 | #define fr_tlb_flags (TLB_WB | TLB_DCLEAN | TLB_L2CLEAN_FR | \ | ||
109 | TLB_V4_I_FULL | TLB_V4_D_FULL | \ | ||
110 | TLB_V4_I_PAGE | TLB_V4_D_PAGE) | ||
111 | |||
112 | #ifdef CONFIG_CPU_TLB_FEROCEON | ||
113 | # define fr_possible_flags fr_tlb_flags | ||
114 | # define fr_always_flags fr_tlb_flags | ||
115 | # ifdef _TLB | ||
116 | # define MULTI_TLB 1 | ||
117 | # else | ||
118 | # define _TLB v4wbi | ||
119 | # endif | ||
120 | #else | ||
121 | # define fr_possible_flags 0 | ||
122 | # define fr_always_flags (-1UL) | ||
123 | #endif | ||
124 | |||
106 | #define v4wb_tlb_flags (TLB_WB | TLB_DCLEAN | \ | 125 | #define v4wb_tlb_flags (TLB_WB | TLB_DCLEAN | \ |
107 | TLB_V4_I_FULL | TLB_V4_D_FULL | \ | 126 | TLB_V4_I_FULL | TLB_V4_D_FULL | \ |
108 | TLB_V4_D_PAGE) | 127 | TLB_V4_D_PAGE) |
@@ -245,12 +264,14 @@ extern struct cpu_tlb_fns cpu_tlb; | |||
245 | #define possible_tlb_flags (v3_possible_flags | \ | 264 | #define possible_tlb_flags (v3_possible_flags | \ |
246 | v4_possible_flags | \ | 265 | v4_possible_flags | \ |
247 | v4wbi_possible_flags | \ | 266 | v4wbi_possible_flags | \ |
267 | fr_possible_flags | \ | ||
248 | v4wb_possible_flags | \ | 268 | v4wb_possible_flags | \ |
249 | v6wbi_possible_flags) | 269 | v6wbi_possible_flags) |
250 | 270 | ||
251 | #define always_tlb_flags (v3_always_flags & \ | 271 | #define always_tlb_flags (v3_always_flags & \ |
252 | v4_always_flags & \ | 272 | v4_always_flags & \ |
253 | v4wbi_always_flags & \ | 273 | v4wbi_always_flags & \ |
274 | fr_always_flags & \ | ||
254 | v4wb_always_flags & \ | 275 | v4wb_always_flags & \ |
255 | v6wbi_always_flags) | 276 | v6wbi_always_flags) |
256 | 277 | ||
@@ -417,6 +438,11 @@ static inline void flush_pmd_entry(pmd_t *pmd) | |||
417 | if (tlb_flag(TLB_DCLEAN)) | 438 | if (tlb_flag(TLB_DCLEAN)) |
418 | asm("mcr p15, 0, %0, c7, c10, 1 @ flush_pmd" | 439 | asm("mcr p15, 0, %0, c7, c10, 1 @ flush_pmd" |
419 | : : "r" (pmd) : "cc"); | 440 | : : "r" (pmd) : "cc"); |
441 | |||
442 | if (tlb_flag(TLB_L2CLEAN_FR)) | ||
443 | asm("mcr p15, 1, %0, c15, c9, 1 @ L2 flush_pmd" | ||
444 | : : "r" (pmd) : "cc"); | ||
445 | |||
420 | if (tlb_flag(TLB_WB)) | 446 | if (tlb_flag(TLB_WB)) |
421 | dsb(); | 447 | dsb(); |
422 | } | 448 | } |
@@ -428,6 +454,10 @@ static inline void clean_pmd_entry(pmd_t *pmd) | |||
428 | if (tlb_flag(TLB_DCLEAN)) | 454 | if (tlb_flag(TLB_DCLEAN)) |
429 | asm("mcr p15, 0, %0, c7, c10, 1 @ flush_pmd" | 455 | asm("mcr p15, 0, %0, c7, c10, 1 @ flush_pmd" |
430 | : : "r" (pmd) : "cc"); | 456 | : : "r" (pmd) : "cc"); |
457 | |||
458 | if (tlb_flag(TLB_L2CLEAN_FR)) | ||
459 | asm("mcr p15, 1, %0, c15, c9, 1 @ L2 flush_pmd" | ||
460 | : : "r" (pmd) : "cc"); | ||
431 | } | 461 | } |
432 | 462 | ||
433 | #undef tlb_flag | 463 | #undef tlb_flag |
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c index 421be5fe5cc7..543d9ca9b4f4 100644 --- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c | |||
@@ -1078,7 +1078,7 @@ ktime_t hrtimer_get_remaining(const struct hrtimer *timer) | |||
1078 | } | 1078 | } |
1079 | EXPORT_SYMBOL_GPL(hrtimer_get_remaining); | 1079 | EXPORT_SYMBOL_GPL(hrtimer_get_remaining); |
1080 | 1080 | ||
1081 | #if defined(CONFIG_NO_IDLE_HZ) || defined(CONFIG_NO_HZ) | 1081 | #ifdef CONFIG_NO_HZ |
1082 | /** | 1082 | /** |
1083 | * hrtimer_get_next_event - get the time until next expiry event | 1083 | * hrtimer_get_next_event - get the time until next expiry event |
1084 | * | 1084 | * |
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 29116652dca8..f6d2e57b99a0 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c | |||
@@ -132,8 +132,6 @@ extern int sysctl_userprocess_debug; | |||
132 | extern int spin_retry; | 132 | extern int spin_retry; |
133 | #endif | 133 | #endif |
134 | 134 | ||
135 | extern int sysctl_hz_timer; | ||
136 | |||
137 | #ifdef CONFIG_BSD_PROCESS_ACCT | 135 | #ifdef CONFIG_BSD_PROCESS_ACCT |
138 | extern int acct_parm[]; | 136 | extern int acct_parm[]; |
139 | #endif | 137 | #endif |
@@ -563,16 +561,6 @@ static struct ctl_table kern_table[] = { | |||
563 | .proc_handler = &proc_dointvec, | 561 | .proc_handler = &proc_dointvec, |
564 | }, | 562 | }, |
565 | #endif | 563 | #endif |
566 | #ifdef CONFIG_NO_IDLE_HZ | ||
567 | { | ||
568 | .ctl_name = KERN_HZ_TIMER, | ||
569 | .procname = "hz_timer", | ||
570 | .data = &sysctl_hz_timer, | ||
571 | .maxlen = sizeof(int), | ||
572 | .mode = 0644, | ||
573 | .proc_handler = &proc_dointvec, | ||
574 | }, | ||
575 | #endif | ||
576 | { | 564 | { |
577 | .ctl_name = KERN_S390_USER_DEBUG_LOGGING, | 565 | .ctl_name = KERN_S390_USER_DEBUG_LOGGING, |
578 | .procname = "userprocess_debug", | 566 | .procname = "userprocess_debug", |
diff --git a/kernel/timer.c b/kernel/timer.c index ceacc6626572..ef3fa6906e8f 100644 --- a/kernel/timer.c +++ b/kernel/timer.c | |||
@@ -812,7 +812,7 @@ static inline void __run_timers(struct tvec_base *base) | |||
812 | spin_unlock_irq(&base->lock); | 812 | spin_unlock_irq(&base->lock); |
813 | } | 813 | } |
814 | 814 | ||
815 | #if defined(CONFIG_NO_IDLE_HZ) || defined(CONFIG_NO_HZ) | 815 | #ifdef CONFIG_NO_HZ |
816 | /* | 816 | /* |
817 | * Find out when the next timer event is due to happen. This | 817 | * Find out when the next timer event is due to happen. This |
818 | * is used on S/390 to stop all activity when a cpus is idle. | 818 | * is used on S/390 to stop all activity when a cpus is idle. |
@@ -947,14 +947,6 @@ unsigned long get_next_timer_interrupt(unsigned long now) | |||
947 | 947 | ||
948 | return cmp_next_hrtimer_event(now, expires); | 948 | return cmp_next_hrtimer_event(now, expires); |
949 | } | 949 | } |
950 | |||
951 | #ifdef CONFIG_NO_IDLE_HZ | ||
952 | unsigned long next_timer_interrupt(void) | ||
953 | { | ||
954 | return get_next_timer_interrupt(jiffies); | ||
955 | } | ||
956 | #endif | ||
957 | |||
958 | #endif | 950 | #endif |
959 | 951 | ||
960 | #ifndef CONFIG_VIRT_CPU_ACCOUNTING | 952 | #ifndef CONFIG_VIRT_CPU_ACCOUNTING |
diff --git a/sound/soc/at91/at91-ssc.c b/sound/soc/at91/at91-ssc.c index bc35d00a38f8..1a4260950142 100644 --- a/sound/soc/at91/at91-ssc.c +++ b/sound/soc/at91/at91-ssc.c | |||
@@ -41,7 +41,7 @@ | |||
41 | #define DBG(x...) | 41 | #define DBG(x...) |
42 | #endif | 42 | #endif |
43 | 43 | ||
44 | #if defined(CONFIG_ARCH_AT91SAM9260) | 44 | #if defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9G20) |
45 | #define NUM_SSC_DEVICES 1 | 45 | #define NUM_SSC_DEVICES 1 |
46 | #else | 46 | #else |
47 | #define NUM_SSC_DEVICES 3 | 47 | #define NUM_SSC_DEVICES 3 |