diff options
83 files changed, 5106 insertions, 570 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 16129e67678a..6150c80bccf6 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -771,6 +771,14 @@ ARM/NEC MOBILEPRO 900/c MACHINE SUPPORT | |||
771 | M: Michael Petchkovsky <mkpetch@internode.on.net> | 771 | M: Michael Petchkovsky <mkpetch@internode.on.net> |
772 | S: Maintained | 772 | S: Maintained |
773 | 773 | ||
774 | ARM/NOMADIK ARCHITECTURE | ||
775 | M: Alessandro Rubini <rubini@unipv.it> | ||
776 | M: STEricsson <STEricsson_nomadik_linux@list.st.com> | ||
777 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||
778 | S: Maintained | ||
779 | F: arch/arm/mach-nomadik/ | ||
780 | F: arch/arm/plat-nomadik/ | ||
781 | |||
774 | ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT | 782 | ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT |
775 | M: Nelson Castillo <arhuaco@freaks-unidos.net> | 783 | M: Nelson Castillo <arhuaco@freaks-unidos.net> |
776 | L: openmoko-kernel@lists.openmoko.org (subscribers-only) | 784 | L: openmoko-kernel@lists.openmoko.org (subscribers-only) |
@@ -915,6 +923,12 @@ L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | |||
915 | W: http://www.mcuos.com | 923 | W: http://www.mcuos.com |
916 | S: Maintained | 924 | S: Maintained |
917 | 925 | ||
926 | ARM/U8500 ARM ARCHITECTURE | ||
927 | M: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com> | ||
928 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | ||
929 | S: Maintained | ||
930 | F: arch/arm/mach-ux500/ | ||
931 | |||
918 | ARM/VFP SUPPORT | 932 | ARM/VFP SUPPORT |
919 | M: Russell King <linux@arm.linux.org.uk> | 933 | M: Russell King <linux@arm.linux.org.uk> |
920 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) | 934 | L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) |
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 1c4119c60040..1ae18d879e12 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -702,6 +702,16 @@ config ARCH_BCMRING | |||
702 | help | 702 | help |
703 | Support for Broadcom's BCMRing platform. | 703 | Support for Broadcom's BCMRing platform. |
704 | 704 | ||
705 | config ARCH_U8500 | ||
706 | bool "ST-Ericsson U8500 Series" | ||
707 | select CPU_V7 | ||
708 | select ARM_AMBA | ||
709 | select GENERIC_TIME | ||
710 | select GENERIC_CLOCKEVENTS | ||
711 | select COMMON_CLKDEV | ||
712 | help | ||
713 | Support for ST-Ericsson's Ux500 architecture | ||
714 | |||
705 | endchoice | 715 | endchoice |
706 | 716 | ||
707 | source "arch/arm/mach-clps711x/Kconfig" | 717 | source "arch/arm/mach-clps711x/Kconfig" |
@@ -787,6 +797,7 @@ source "arch/arm/mach-at91/Kconfig" | |||
787 | source "arch/arm/plat-mxc/Kconfig" | 797 | source "arch/arm/plat-mxc/Kconfig" |
788 | 798 | ||
789 | source "arch/arm/mach-nomadik/Kconfig" | 799 | source "arch/arm/mach-nomadik/Kconfig" |
800 | source "arch/arm/plat-nomadik/Kconfig" | ||
790 | 801 | ||
791 | source "arch/arm/mach-netx/Kconfig" | 802 | source "arch/arm/mach-netx/Kconfig" |
792 | 803 | ||
@@ -804,6 +815,8 @@ source "arch/arm/mach-w90x900/Kconfig" | |||
804 | 815 | ||
805 | source "arch/arm/mach-bcmring/Kconfig" | 816 | source "arch/arm/mach-bcmring/Kconfig" |
806 | 817 | ||
818 | source "arch/arm/mach-ux500/Kconfig" | ||
819 | |||
807 | # Definitions to make life easier | 820 | # Definitions to make life easier |
808 | config ARCH_ACORN | 821 | config ARCH_ACORN |
809 | bool | 822 | bool |
@@ -955,10 +968,10 @@ source "kernel/time/Kconfig" | |||
955 | config SMP | 968 | config SMP |
956 | bool "Symmetric Multi-Processing (EXPERIMENTAL)" | 969 | bool "Symmetric Multi-Processing (EXPERIMENTAL)" |
957 | depends on EXPERIMENTAL && (REALVIEW_EB_ARM11MP || REALVIEW_EB_A9MP ||\ | 970 | depends on EXPERIMENTAL && (REALVIEW_EB_ARM11MP || REALVIEW_EB_A9MP ||\ |
958 | MACH_REALVIEW_PB11MP || MACH_REALVIEW_PBX || ARCH_OMAP4) | 971 | MACH_REALVIEW_PB11MP || MACH_REALVIEW_PBX || ARCH_OMAP4 || ARCH_U8500) |
959 | depends on GENERIC_CLOCKEVENTS | 972 | depends on GENERIC_CLOCKEVENTS |
960 | select USE_GENERIC_SMP_HELPERS | 973 | select USE_GENERIC_SMP_HELPERS |
961 | select HAVE_ARM_SCU if (ARCH_REALVIEW || ARCH_OMAP4) | 974 | select HAVE_ARM_SCU if (ARCH_REALVIEW || ARCH_OMAP4 || ARCH_U8500) |
962 | help | 975 | help |
963 | This enables support for systems with more than one CPU. If you have | 976 | This enables support for systems with more than one CPU. If you have |
964 | a system with only one CPU, like most personal computers, say N. If | 977 | a system with only one CPU, like most personal computers, say N. If |
@@ -1027,9 +1040,9 @@ config HOTPLUG_CPU | |||
1027 | config LOCAL_TIMERS | 1040 | config LOCAL_TIMERS |
1028 | bool "Use local timer interrupts" | 1041 | bool "Use local timer interrupts" |
1029 | depends on SMP && (REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || \ | 1042 | depends on SMP && (REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || \ |
1030 | REALVIEW_EB_A9MP || MACH_REALVIEW_PBX || ARCH_OMAP4) | 1043 | REALVIEW_EB_A9MP || MACH_REALVIEW_PBX || ARCH_OMAP4 || ARCH_U8500) |
1031 | default y | 1044 | default y |
1032 | select HAVE_ARM_TWD if (ARCH_REALVIEW || ARCH_OMAP4) | 1045 | select HAVE_ARM_TWD if (ARCH_REALVIEW || ARCH_OMAP4 || ARCH_U8500) |
1033 | help | 1046 | help |
1034 | Enable support for local timers on SMP platforms, rather then the | 1047 | Enable support for local timers on SMP platforms, rather then the |
1035 | legacy IPI broadcast method. Local timers allows the system | 1048 | legacy IPI broadcast method. Local timers allows the system |
diff --git a/arch/arm/Makefile b/arch/arm/Makefile index a73caaf66763..7603eba7c0cd 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile | |||
@@ -166,6 +166,7 @@ machine-$(CONFIG_ARCH_SHARK) := shark | |||
166 | machine-$(CONFIG_ARCH_STMP378X) := stmp378x | 166 | machine-$(CONFIG_ARCH_STMP378X) := stmp378x |
167 | machine-$(CONFIG_ARCH_STMP37XX) := stmp37xx | 167 | machine-$(CONFIG_ARCH_STMP37XX) := stmp37xx |
168 | machine-$(CONFIG_ARCH_U300) := u300 | 168 | machine-$(CONFIG_ARCH_U300) := u300 |
169 | machine-$(CONFIG_ARCH_U8500) := ux500 | ||
169 | machine-$(CONFIG_ARCH_VERSATILE) := versatile | 170 | machine-$(CONFIG_ARCH_VERSATILE) := versatile |
170 | machine-$(CONFIG_ARCH_W90X900) := w90x900 | 171 | machine-$(CONFIG_ARCH_W90X900) := w90x900 |
171 | machine-$(CONFIG_FOOTBRIDGE) := footbridge | 172 | machine-$(CONFIG_FOOTBRIDGE) := footbridge |
@@ -176,6 +177,7 @@ machine-$(CONFIG_ARCH_MXC91231) := mxc91231 | |||
176 | plat-$(CONFIG_ARCH_MXC) := mxc | 177 | plat-$(CONFIG_ARCH_MXC) := mxc |
177 | plat-$(CONFIG_ARCH_OMAP) := omap | 178 | plat-$(CONFIG_ARCH_OMAP) := omap |
178 | plat-$(CONFIG_PLAT_IOP) := iop | 179 | plat-$(CONFIG_PLAT_IOP) := iop |
180 | plat-$(CONFIG_PLAT_NOMADIK) := nomadik | ||
179 | plat-$(CONFIG_PLAT_ORION) := orion | 181 | plat-$(CONFIG_PLAT_ORION) := orion |
180 | plat-$(CONFIG_PLAT_PXA) := pxa | 182 | plat-$(CONFIG_PLAT_PXA) := pxa |
181 | plat-$(CONFIG_PLAT_S3C24XX) := s3c24xx s3c | 183 | plat-$(CONFIG_PLAT_S3C24XX) := s3c24xx s3c |
diff --git a/arch/arm/common/dmabounce.c b/arch/arm/common/dmabounce.c index 734ac9135998..5a375e5fef21 100644 --- a/arch/arm/common/dmabounce.c +++ b/arch/arm/common/dmabounce.c | |||
@@ -342,6 +342,22 @@ dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size, | |||
342 | } | 342 | } |
343 | EXPORT_SYMBOL(dma_map_single); | 343 | EXPORT_SYMBOL(dma_map_single); |
344 | 344 | ||
345 | /* | ||
346 | * see if a mapped address was really a "safe" buffer and if so, copy | ||
347 | * the data from the safe buffer back to the unsafe buffer and free up | ||
348 | * the safe buffer. (basically return things back to the way they | ||
349 | * should be) | ||
350 | */ | ||
351 | void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, | ||
352 | enum dma_data_direction dir) | ||
353 | { | ||
354 | dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n", | ||
355 | __func__, (void *) dma_addr, size, dir); | ||
356 | |||
357 | unmap_single(dev, dma_addr, size, dir); | ||
358 | } | ||
359 | EXPORT_SYMBOL(dma_unmap_single); | ||
360 | |||
345 | dma_addr_t dma_map_page(struct device *dev, struct page *page, | 361 | dma_addr_t dma_map_page(struct device *dev, struct page *page, |
346 | unsigned long offset, size_t size, enum dma_data_direction dir) | 362 | unsigned long offset, size_t size, enum dma_data_direction dir) |
347 | { | 363 | { |
@@ -366,8 +382,7 @@ EXPORT_SYMBOL(dma_map_page); | |||
366 | * the safe buffer. (basically return things back to the way they | 382 | * the safe buffer. (basically return things back to the way they |
367 | * should be) | 383 | * should be) |
368 | */ | 384 | */ |
369 | 385 | void dma_unmap_page(struct device *dev, dma_addr_t dma_addr, size_t size, | |
370 | void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, | ||
371 | enum dma_data_direction dir) | 386 | enum dma_data_direction dir) |
372 | { | 387 | { |
373 | dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n", | 388 | dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n", |
@@ -375,7 +390,7 @@ void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size, | |||
375 | 390 | ||
376 | unmap_single(dev, dma_addr, size, dir); | 391 | unmap_single(dev, dma_addr, size, dir); |
377 | } | 392 | } |
378 | EXPORT_SYMBOL(dma_unmap_single); | 393 | EXPORT_SYMBOL(dma_unmap_page); |
379 | 394 | ||
380 | int dmabounce_sync_for_cpu(struct device *dev, dma_addr_t addr, | 395 | int dmabounce_sync_for_cpu(struct device *dev, dma_addr_t addr, |
381 | unsigned long off, size_t sz, enum dma_data_direction dir) | 396 | unsigned long off, size_t sz, enum dma_data_direction dir) |
diff --git a/arch/arm/configs/at91rm9200dk_defconfig b/arch/arm/configs/at91rm9200dk_defconfig index 238b218394e3..c97e1022ada1 100644 --- a/arch/arm/configs/at91rm9200dk_defconfig +++ b/arch/arm/configs/at91rm9200dk_defconfig | |||
@@ -120,6 +120,7 @@ CONFIG_ARCH_AT91RM9200DK=y | |||
120 | # CONFIG_MACH_CARMEVA is not set | 120 | # CONFIG_MACH_CARMEVA is not set |
121 | # CONFIG_MACH_KB9200 is not set | 121 | # CONFIG_MACH_KB9200 is not set |
122 | # CONFIG_MACH_ATEB9200 is not set | 122 | # CONFIG_MACH_ATEB9200 is not set |
123 | CONFIG_MACH_ECO920=y | ||
123 | 124 | ||
124 | # | 125 | # |
125 | # AT91RM9200 Feature Selections | 126 | # AT91RM9200 Feature Selections |
diff --git a/arch/arm/configs/w90p910_defconfig b/arch/arm/configs/nuc910_defconfig index 5245655a0ad3..5245655a0ad3 100644 --- a/arch/arm/configs/w90p910_defconfig +++ b/arch/arm/configs/nuc910_defconfig | |||
diff --git a/arch/arm/configs/nuc950_defconfig b/arch/arm/configs/nuc950_defconfig new file mode 100644 index 000000000000..df1de9b45ca4 --- /dev/null +++ b/arch/arm/configs/nuc950_defconfig | |||
@@ -0,0 +1,922 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.32-rc7 | ||
4 | # Tue Nov 17 12:31:33 2009 | ||
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_GENERIC_HARDIRQS=y | ||
12 | CONFIG_STACKTRACE_SUPPORT=y | ||
13 | CONFIG_HAVE_LATENCYTOP_SUPPORT=y | ||
14 | CONFIG_LOCKDEP_SUPPORT=y | ||
15 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
16 | CONFIG_HARDIRQS_SW_RESEND=y | ||
17 | CONFIG_GENERIC_IRQ_PROBE=y | ||
18 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
19 | CONFIG_GENERIC_HWEIGHT=y | ||
20 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
21 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | ||
22 | CONFIG_VECTORS_BASE=0xffff0000 | ||
23 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
24 | CONFIG_CONSTRUCTORS=y | ||
25 | |||
26 | # | ||
27 | # General setup | ||
28 | # | ||
29 | CONFIG_EXPERIMENTAL=y | ||
30 | CONFIG_BROKEN_ON_SMP=y | ||
31 | CONFIG_LOCK_KERNEL=y | ||
32 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
33 | CONFIG_LOCALVERSION="" | ||
34 | # CONFIG_LOCALVERSION_AUTO is not set | ||
35 | CONFIG_SWAP=y | ||
36 | CONFIG_SYSVIPC=y | ||
37 | CONFIG_SYSVIPC_SYSCTL=y | ||
38 | CONFIG_BSD_PROCESS_ACCT=y | ||
39 | # CONFIG_BSD_PROCESS_ACCT_V3 is not set | ||
40 | |||
41 | # | ||
42 | # RCU Subsystem | ||
43 | # | ||
44 | CONFIG_TREE_RCU=y | ||
45 | # CONFIG_TREE_PREEMPT_RCU is not set | ||
46 | # CONFIG_RCU_TRACE is not set | ||
47 | CONFIG_RCU_FANOUT=32 | ||
48 | # CONFIG_RCU_FANOUT_EXACT is not set | ||
49 | # CONFIG_TREE_RCU_TRACE is not set | ||
50 | # CONFIG_IKCONFIG is not set | ||
51 | CONFIG_LOG_BUF_SHIFT=17 | ||
52 | # CONFIG_GROUP_SCHED is not set | ||
53 | # CONFIG_CGROUPS is not set | ||
54 | CONFIG_SYSFS_DEPRECATED=y | ||
55 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
56 | CONFIG_RELAY=y | ||
57 | CONFIG_NAMESPACES=y | ||
58 | # CONFIG_UTS_NS is not set | ||
59 | # CONFIG_IPC_NS is not set | ||
60 | CONFIG_USER_NS=y | ||
61 | # CONFIG_PID_NS is not set | ||
62 | CONFIG_BLK_DEV_INITRD=y | ||
63 | CONFIG_INITRAMFS_SOURCE="" | ||
64 | CONFIG_RD_GZIP=y | ||
65 | CONFIG_RD_BZIP2=y | ||
66 | CONFIG_RD_LZMA=y | ||
67 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
68 | CONFIG_SYSCTL=y | ||
69 | CONFIG_ANON_INODES=y | ||
70 | # CONFIG_EMBEDDED is not set | ||
71 | CONFIG_UID16=y | ||
72 | CONFIG_SYSCTL_SYSCALL=y | ||
73 | CONFIG_KALLSYMS=y | ||
74 | CONFIG_KALLSYMS_EXTRA_PASS=y | ||
75 | CONFIG_HOTPLUG=y | ||
76 | CONFIG_PRINTK=y | ||
77 | CONFIG_BUG=y | ||
78 | CONFIG_ELF_CORE=y | ||
79 | CONFIG_BASE_FULL=y | ||
80 | CONFIG_FUTEX=y | ||
81 | CONFIG_EPOLL=y | ||
82 | CONFIG_SIGNALFD=y | ||
83 | CONFIG_TIMERFD=y | ||
84 | CONFIG_EVENTFD=y | ||
85 | CONFIG_SHMEM=y | ||
86 | CONFIG_AIO=y | ||
87 | |||
88 | # | ||
89 | # Kernel Performance Events And Counters | ||
90 | # | ||
91 | CONFIG_VM_EVENT_COUNTERS=y | ||
92 | CONFIG_COMPAT_BRK=y | ||
93 | CONFIG_SLAB=y | ||
94 | # CONFIG_SLUB is not set | ||
95 | # CONFIG_SLOB is not set | ||
96 | # CONFIG_PROFILING is not set | ||
97 | CONFIG_HAVE_OPROFILE=y | ||
98 | CONFIG_HAVE_KPROBES=y | ||
99 | CONFIG_HAVE_KRETPROBES=y | ||
100 | CONFIG_HAVE_CLK=y | ||
101 | |||
102 | # | ||
103 | # GCOV-based kernel profiling | ||
104 | # | ||
105 | # CONFIG_GCOV_KERNEL is not set | ||
106 | # CONFIG_SLOW_WORK is not set | ||
107 | CONFIG_HAVE_GENERIC_DMA_COHERENT=y | ||
108 | CONFIG_SLABINFO=y | ||
109 | CONFIG_RT_MUTEXES=y | ||
110 | CONFIG_BASE_SMALL=0 | ||
111 | # CONFIG_MODULES is not set | ||
112 | CONFIG_BLOCK=y | ||
113 | CONFIG_LBDAF=y | ||
114 | CONFIG_BLK_DEV_BSG=y | ||
115 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
116 | |||
117 | # | ||
118 | # IO Schedulers | ||
119 | # | ||
120 | CONFIG_IOSCHED_NOOP=y | ||
121 | CONFIG_IOSCHED_AS=y | ||
122 | CONFIG_IOSCHED_DEADLINE=y | ||
123 | CONFIG_IOSCHED_CFQ=y | ||
124 | # CONFIG_DEFAULT_AS is not set | ||
125 | # CONFIG_DEFAULT_DEADLINE is not set | ||
126 | CONFIG_DEFAULT_CFQ=y | ||
127 | # CONFIG_DEFAULT_NOOP is not set | ||
128 | CONFIG_DEFAULT_IOSCHED="cfq" | ||
129 | # CONFIG_FREEZER is not set | ||
130 | |||
131 | # | ||
132 | # System Type | ||
133 | # | ||
134 | CONFIG_MMU=y | ||
135 | # CONFIG_ARCH_AAEC2000 is not set | ||
136 | # CONFIG_ARCH_INTEGRATOR is not set | ||
137 | # CONFIG_ARCH_REALVIEW is not set | ||
138 | # CONFIG_ARCH_VERSATILE is not set | ||
139 | # CONFIG_ARCH_AT91 is not set | ||
140 | # CONFIG_ARCH_CLPS711X is not set | ||
141 | # CONFIG_ARCH_GEMINI is not set | ||
142 | # CONFIG_ARCH_EBSA110 is not set | ||
143 | # CONFIG_ARCH_EP93XX is not set | ||
144 | # CONFIG_ARCH_FOOTBRIDGE is not set | ||
145 | # CONFIG_ARCH_MXC is not set | ||
146 | # CONFIG_ARCH_STMP3XXX is not set | ||
147 | # CONFIG_ARCH_NETX is not set | ||
148 | # CONFIG_ARCH_H720X is not set | ||
149 | # CONFIG_ARCH_NOMADIK is not set | ||
150 | # CONFIG_ARCH_IOP13XX is not set | ||
151 | # CONFIG_ARCH_IOP32X is not set | ||
152 | # CONFIG_ARCH_IOP33X is not set | ||
153 | # CONFIG_ARCH_IXP23XX is not set | ||
154 | # CONFIG_ARCH_IXP2000 is not set | ||
155 | # CONFIG_ARCH_IXP4XX is not set | ||
156 | # CONFIG_ARCH_L7200 is not set | ||
157 | # CONFIG_ARCH_KIRKWOOD is not set | ||
158 | # CONFIG_ARCH_LOKI is not set | ||
159 | # CONFIG_ARCH_MV78XX0 is not set | ||
160 | # CONFIG_ARCH_ORION5X is not set | ||
161 | # CONFIG_ARCH_MMP is not set | ||
162 | # CONFIG_ARCH_KS8695 is not set | ||
163 | # CONFIG_ARCH_NS9XXX is not set | ||
164 | CONFIG_ARCH_W90X900=y | ||
165 | # CONFIG_ARCH_PNX4008 is not set | ||
166 | # CONFIG_ARCH_PXA is not set | ||
167 | # CONFIG_ARCH_MSM is not set | ||
168 | # CONFIG_ARCH_RPC is not set | ||
169 | # CONFIG_ARCH_SA1100 is not set | ||
170 | # CONFIG_ARCH_S3C2410 is not set | ||
171 | # CONFIG_ARCH_S3C64XX is not set | ||
172 | # CONFIG_ARCH_S5PC1XX is not set | ||
173 | # CONFIG_ARCH_SHARK is not set | ||
174 | # CONFIG_ARCH_LH7A40X is not set | ||
175 | # CONFIG_ARCH_U300 is not set | ||
176 | # CONFIG_ARCH_DAVINCI is not set | ||
177 | # CONFIG_ARCH_OMAP is not set | ||
178 | # CONFIG_ARCH_BCMRING is not set | ||
179 | CONFIG_CPU_NUC950=y | ||
180 | |||
181 | # | ||
182 | # W90P910 Machines | ||
183 | # | ||
184 | # CONFIG_MACH_W90P910EVB is not set | ||
185 | |||
186 | # | ||
187 | # NUC950 Machines | ||
188 | # | ||
189 | CONFIG_MACH_W90P950EVB=y | ||
190 | |||
191 | # | ||
192 | # NUC960 Machines | ||
193 | # | ||
194 | # CONFIG_MACH_W90N960EVB is not set | ||
195 | |||
196 | # | ||
197 | # NUC932 Machines | ||
198 | # | ||
199 | # CONFIG_MACH_NUC932EVB is not set | ||
200 | |||
201 | # | ||
202 | # Processor Type | ||
203 | # | ||
204 | CONFIG_CPU_32=y | ||
205 | CONFIG_CPU_ARM926T=y | ||
206 | CONFIG_CPU_32v5=y | ||
207 | CONFIG_CPU_ABRT_EV5TJ=y | ||
208 | CONFIG_CPU_PABRT_LEGACY=y | ||
209 | CONFIG_CPU_CACHE_VIVT=y | ||
210 | CONFIG_CPU_COPY_V4WB=y | ||
211 | CONFIG_CPU_TLB_V4WBI=y | ||
212 | CONFIG_CPU_CP15=y | ||
213 | CONFIG_CPU_CP15_MMU=y | ||
214 | |||
215 | # | ||
216 | # Processor Features | ||
217 | # | ||
218 | CONFIG_ARM_THUMB=y | ||
219 | # CONFIG_CPU_ICACHE_DISABLE is not set | ||
220 | # CONFIG_CPU_DCACHE_DISABLE is not set | ||
221 | # CONFIG_CPU_DCACHE_WRITETHROUGH is not set | ||
222 | # CONFIG_CPU_CACHE_ROUND_ROBIN is not set | ||
223 | CONFIG_ARM_L1_CACHE_SHIFT=5 | ||
224 | CONFIG_COMMON_CLKDEV=y | ||
225 | |||
226 | # | ||
227 | # Bus support | ||
228 | # | ||
229 | # CONFIG_PCI_SYSCALL is not set | ||
230 | # CONFIG_ARCH_SUPPORTS_MSI is not set | ||
231 | # CONFIG_PCCARD is not set | ||
232 | |||
233 | # | ||
234 | # Kernel Features | ||
235 | # | ||
236 | CONFIG_TICK_ONESHOT=y | ||
237 | CONFIG_NO_HZ=y | ||
238 | CONFIG_HIGH_RES_TIMERS=y | ||
239 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
240 | CONFIG_VMSPLIT_3G=y | ||
241 | # CONFIG_VMSPLIT_2G is not set | ||
242 | # CONFIG_VMSPLIT_1G is not set | ||
243 | CONFIG_PAGE_OFFSET=0xC0000000 | ||
244 | # CONFIG_PREEMPT_NONE is not set | ||
245 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
246 | CONFIG_PREEMPT=y | ||
247 | CONFIG_HZ=100 | ||
248 | CONFIG_AEABI=y | ||
249 | CONFIG_OABI_COMPAT=y | ||
250 | # CONFIG_ARCH_SPARSEMEM_DEFAULT is not set | ||
251 | # CONFIG_ARCH_SELECT_MEMORY_MODEL is not set | ||
252 | # CONFIG_HIGHMEM is not set | ||
253 | CONFIG_SELECT_MEMORY_MODEL=y | ||
254 | CONFIG_FLATMEM_MANUAL=y | ||
255 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
256 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
257 | CONFIG_FLATMEM=y | ||
258 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
259 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
260 | CONFIG_SPLIT_PTLOCK_CPUS=4096 | ||
261 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
262 | CONFIG_ZONE_DMA_FLAG=0 | ||
263 | CONFIG_VIRT_TO_BUS=y | ||
264 | CONFIG_HAVE_MLOCK=y | ||
265 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y | ||
266 | # CONFIG_KSM is not set | ||
267 | CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 | ||
268 | CONFIG_ALIGNMENT_TRAP=y | ||
269 | # CONFIG_UACCESS_WITH_MEMCPY is not set | ||
270 | |||
271 | # | ||
272 | # Boot options | ||
273 | # | ||
274 | CONFIG_ZBOOT_ROM_TEXT=0 | ||
275 | CONFIG_ZBOOT_ROM_BSS=0 | ||
276 | CONFIG_CMDLINE="root=/dev/ram0 console=ttyS0,115200n8 rdinit=/sbin/init mem=64M" | ||
277 | # CONFIG_XIP_KERNEL is not set | ||
278 | CONFIG_KEXEC=y | ||
279 | CONFIG_ATAGS_PROC=y | ||
280 | |||
281 | # | ||
282 | # CPU Power Management | ||
283 | # | ||
284 | # CONFIG_CPU_IDLE is not set | ||
285 | |||
286 | # | ||
287 | # Floating point emulation | ||
288 | # | ||
289 | |||
290 | # | ||
291 | # At least one emulation must be selected | ||
292 | # | ||
293 | CONFIG_FPE_NWFPE=y | ||
294 | # CONFIG_FPE_NWFPE_XP is not set | ||
295 | # CONFIG_FPE_FASTFPE is not set | ||
296 | # CONFIG_VFP is not set | ||
297 | |||
298 | # | ||
299 | # Userspace binary formats | ||
300 | # | ||
301 | CONFIG_BINFMT_ELF=y | ||
302 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
303 | CONFIG_HAVE_AOUT=y | ||
304 | CONFIG_BINFMT_AOUT=y | ||
305 | CONFIG_BINFMT_MISC=y | ||
306 | |||
307 | # | ||
308 | # Power management options | ||
309 | # | ||
310 | # CONFIG_PM is not set | ||
311 | CONFIG_ARCH_SUSPEND_POSSIBLE=y | ||
312 | # CONFIG_NET is not set | ||
313 | |||
314 | # | ||
315 | # Device Drivers | ||
316 | # | ||
317 | |||
318 | # | ||
319 | # Generic Driver Options | ||
320 | # | ||
321 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
322 | # CONFIG_DEVTMPFS is not set | ||
323 | CONFIG_STANDALONE=y | ||
324 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
325 | CONFIG_FW_LOADER=y | ||
326 | CONFIG_FIRMWARE_IN_KERNEL=y | ||
327 | CONFIG_EXTRA_FIRMWARE="" | ||
328 | # CONFIG_SYS_HYPERVISOR is not set | ||
329 | CONFIG_MTD=y | ||
330 | # CONFIG_MTD_DEBUG is not set | ||
331 | CONFIG_MTD_CONCAT=y | ||
332 | CONFIG_MTD_PARTITIONS=y | ||
333 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
334 | # CONFIG_MTD_CMDLINE_PARTS is not set | ||
335 | # CONFIG_MTD_AFS_PARTS is not set | ||
336 | # CONFIG_MTD_AR7_PARTS is not set | ||
337 | |||
338 | # | ||
339 | # User Modules And Translation Layers | ||
340 | # | ||
341 | CONFIG_MTD_CHAR=y | ||
342 | CONFIG_MTD_BLKDEVS=y | ||
343 | CONFIG_MTD_BLOCK=y | ||
344 | # CONFIG_FTL is not set | ||
345 | # CONFIG_NFTL is not set | ||
346 | # CONFIG_INFTL is not set | ||
347 | # CONFIG_RFD_FTL is not set | ||
348 | # CONFIG_SSFDC is not set | ||
349 | # CONFIG_MTD_OOPS is not set | ||
350 | |||
351 | # | ||
352 | # RAM/ROM/Flash chip drivers | ||
353 | # | ||
354 | CONFIG_MTD_CFI=y | ||
355 | # CONFIG_MTD_JEDECPROBE is not set | ||
356 | CONFIG_MTD_GEN_PROBE=y | ||
357 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set | ||
358 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
359 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
360 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
361 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
362 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
363 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
364 | CONFIG_MTD_CFI_I1=y | ||
365 | CONFIG_MTD_CFI_I2=y | ||
366 | # CONFIG_MTD_CFI_I4 is not set | ||
367 | # CONFIG_MTD_CFI_I8 is not set | ||
368 | # CONFIG_MTD_CFI_INTELEXT is not set | ||
369 | CONFIG_MTD_CFI_AMDSTD=y | ||
370 | # CONFIG_MTD_CFI_STAA is not set | ||
371 | CONFIG_MTD_CFI_UTIL=y | ||
372 | # CONFIG_MTD_RAM is not set | ||
373 | # CONFIG_MTD_ROM is not set | ||
374 | # CONFIG_MTD_ABSENT is not set | ||
375 | |||
376 | # | ||
377 | # Mapping drivers for chip access | ||
378 | # | ||
379 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
380 | CONFIG_MTD_PHYSMAP=y | ||
381 | # CONFIG_MTD_PHYSMAP_COMPAT is not set | ||
382 | # CONFIG_MTD_ARM_INTEGRATOR is not set | ||
383 | # CONFIG_MTD_PLATRAM is not set | ||
384 | |||
385 | # | ||
386 | # Self-contained MTD device drivers | ||
387 | # | ||
388 | # CONFIG_MTD_SLRAM is not set | ||
389 | # CONFIG_MTD_PHRAM is not set | ||
390 | # CONFIG_MTD_MTDRAM is not set | ||
391 | # CONFIG_MTD_BLOCK2MTD is not set | ||
392 | |||
393 | # | ||
394 | # Disk-On-Chip Device Drivers | ||
395 | # | ||
396 | # CONFIG_MTD_DOC2000 is not set | ||
397 | # CONFIG_MTD_DOC2001 is not set | ||
398 | # CONFIG_MTD_DOC2001PLUS is not set | ||
399 | # CONFIG_MTD_NAND is not set | ||
400 | # CONFIG_MTD_ONENAND is not set | ||
401 | |||
402 | # | ||
403 | # LPDDR flash memory drivers | ||
404 | # | ||
405 | # CONFIG_MTD_LPDDR is not set | ||
406 | |||
407 | # | ||
408 | # UBI - Unsorted block images | ||
409 | # | ||
410 | # CONFIG_MTD_UBI is not set | ||
411 | # CONFIG_PARPORT is not set | ||
412 | CONFIG_BLK_DEV=y | ||
413 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
414 | # CONFIG_BLK_DEV_LOOP is not set | ||
415 | # CONFIG_BLK_DEV_UB is not set | ||
416 | CONFIG_BLK_DEV_RAM=y | ||
417 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
418 | CONFIG_BLK_DEV_RAM_SIZE=16384 | ||
419 | # CONFIG_BLK_DEV_XIP is not set | ||
420 | # CONFIG_CDROM_PKTCDVD is not set | ||
421 | # CONFIG_MG_DISK is not set | ||
422 | # CONFIG_MISC_DEVICES is not set | ||
423 | CONFIG_HAVE_IDE=y | ||
424 | # CONFIG_IDE is not set | ||
425 | |||
426 | # | ||
427 | # SCSI device support | ||
428 | # | ||
429 | # CONFIG_RAID_ATTRS is not set | ||
430 | CONFIG_SCSI=y | ||
431 | CONFIG_SCSI_DMA=y | ||
432 | # CONFIG_SCSI_TGT is not set | ||
433 | # CONFIG_SCSI_NETLINK is not set | ||
434 | # CONFIG_SCSI_PROC_FS is not set | ||
435 | |||
436 | # | ||
437 | # SCSI support type (disk, tape, CD-ROM) | ||
438 | # | ||
439 | CONFIG_BLK_DEV_SD=y | ||
440 | # CONFIG_CHR_DEV_ST is not set | ||
441 | # CONFIG_CHR_DEV_OSST is not set | ||
442 | # CONFIG_BLK_DEV_SR is not set | ||
443 | # CONFIG_CHR_DEV_SG is not set | ||
444 | # CONFIG_CHR_DEV_SCH is not set | ||
445 | # CONFIG_SCSI_MULTI_LUN is not set | ||
446 | # CONFIG_SCSI_CONSTANTS is not set | ||
447 | # CONFIG_SCSI_LOGGING is not set | ||
448 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
449 | |||
450 | # | ||
451 | # SCSI Transports | ||
452 | # | ||
453 | # CONFIG_SCSI_SPI_ATTRS is not set | ||
454 | # CONFIG_SCSI_FC_ATTRS is not set | ||
455 | # CONFIG_SCSI_SAS_ATTRS is not set | ||
456 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
457 | # CONFIG_SCSI_SRP_ATTRS is not set | ||
458 | # CONFIG_SCSI_LOWLEVEL is not set | ||
459 | # CONFIG_SCSI_DH is not set | ||
460 | # CONFIG_SCSI_OSD_INITIATOR is not set | ||
461 | # CONFIG_ATA is not set | ||
462 | # CONFIG_MD is not set | ||
463 | # CONFIG_PHONE is not set | ||
464 | |||
465 | # | ||
466 | # Input device support | ||
467 | # | ||
468 | CONFIG_INPUT=y | ||
469 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
470 | # CONFIG_INPUT_POLLDEV is not set | ||
471 | |||
472 | # | ||
473 | # Userland interfaces | ||
474 | # | ||
475 | CONFIG_INPUT_MOUSEDEV=y | ||
476 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
477 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
478 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
479 | # CONFIG_INPUT_JOYDEV is not set | ||
480 | # CONFIG_INPUT_EVDEV is not set | ||
481 | # CONFIG_INPUT_EVBUG is not set | ||
482 | |||
483 | # | ||
484 | # Input Device Drivers | ||
485 | # | ||
486 | # CONFIG_INPUT_KEYBOARD is not set | ||
487 | # CONFIG_INPUT_MOUSE is not set | ||
488 | # CONFIG_INPUT_JOYSTICK is not set | ||
489 | # CONFIG_INPUT_TABLET is not set | ||
490 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
491 | # CONFIG_INPUT_MISC is not set | ||
492 | |||
493 | # | ||
494 | # Hardware I/O ports | ||
495 | # | ||
496 | # CONFIG_SERIO is not set | ||
497 | # CONFIG_GAMEPORT is not set | ||
498 | |||
499 | # | ||
500 | # Character devices | ||
501 | # | ||
502 | CONFIG_VT=y | ||
503 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
504 | CONFIG_VT_CONSOLE=y | ||
505 | CONFIG_HW_CONSOLE=y | ||
506 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
507 | # CONFIG_DEVKMEM is not set | ||
508 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
509 | |||
510 | # | ||
511 | # Serial drivers | ||
512 | # | ||
513 | CONFIG_SERIAL_8250=y | ||
514 | CONFIG_SERIAL_8250_CONSOLE=y | ||
515 | CONFIG_SERIAL_8250_NR_UARTS=1 | ||
516 | CONFIG_SERIAL_8250_RUNTIME_UARTS=1 | ||
517 | # CONFIG_SERIAL_8250_EXTENDED is not set | ||
518 | |||
519 | # | ||
520 | # Non-8250 serial port support | ||
521 | # | ||
522 | CONFIG_SERIAL_CORE=y | ||
523 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
524 | CONFIG_UNIX98_PTYS=y | ||
525 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | ||
526 | # CONFIG_LEGACY_PTYS is not set | ||
527 | # CONFIG_IPMI_HANDLER is not set | ||
528 | # CONFIG_HW_RANDOM is not set | ||
529 | # CONFIG_R3964 is not set | ||
530 | # CONFIG_RAW_DRIVER is not set | ||
531 | # CONFIG_TCG_TPM is not set | ||
532 | # CONFIG_I2C is not set | ||
533 | # CONFIG_SPI is not set | ||
534 | |||
535 | # | ||
536 | # PPS support | ||
537 | # | ||
538 | # CONFIG_PPS is not set | ||
539 | CONFIG_ARCH_REQUIRE_GPIOLIB=y | ||
540 | CONFIG_GPIOLIB=y | ||
541 | # CONFIG_GPIO_SYSFS is not set | ||
542 | |||
543 | # | ||
544 | # Memory mapped GPIO expanders: | ||
545 | # | ||
546 | |||
547 | # | ||
548 | # I2C GPIO expanders: | ||
549 | # | ||
550 | |||
551 | # | ||
552 | # PCI GPIO expanders: | ||
553 | # | ||
554 | |||
555 | # | ||
556 | # SPI GPIO expanders: | ||
557 | # | ||
558 | |||
559 | # | ||
560 | # AC97 GPIO expanders: | ||
561 | # | ||
562 | # CONFIG_W1 is not set | ||
563 | # CONFIG_POWER_SUPPLY is not set | ||
564 | # CONFIG_HWMON is not set | ||
565 | # CONFIG_THERMAL is not set | ||
566 | # CONFIG_WATCHDOG is not set | ||
567 | CONFIG_SSB_POSSIBLE=y | ||
568 | |||
569 | # | ||
570 | # Sonics Silicon Backplane | ||
571 | # | ||
572 | # CONFIG_SSB is not set | ||
573 | |||
574 | # | ||
575 | # Multifunction device drivers | ||
576 | # | ||
577 | # CONFIG_MFD_CORE is not set | ||
578 | # CONFIG_MFD_SM501 is not set | ||
579 | # CONFIG_MFD_ASIC3 is not set | ||
580 | # CONFIG_HTC_EGPIO is not set | ||
581 | # CONFIG_HTC_PASIC3 is not set | ||
582 | # CONFIG_MFD_TMIO is not set | ||
583 | # CONFIG_MFD_T7L66XB is not set | ||
584 | # CONFIG_MFD_TC6387XB is not set | ||
585 | # CONFIG_MFD_TC6393XB is not set | ||
586 | # CONFIG_REGULATOR is not set | ||
587 | # CONFIG_MEDIA_SUPPORT is not set | ||
588 | |||
589 | # | ||
590 | # Graphics support | ||
591 | # | ||
592 | # CONFIG_VGASTATE is not set | ||
593 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
594 | # CONFIG_FB is not set | ||
595 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
596 | |||
597 | # | ||
598 | # Display device support | ||
599 | # | ||
600 | # CONFIG_DISPLAY_SUPPORT is not set | ||
601 | |||
602 | # | ||
603 | # Console display driver support | ||
604 | # | ||
605 | # CONFIG_VGA_CONSOLE is not set | ||
606 | CONFIG_DUMMY_CONSOLE=y | ||
607 | # CONFIG_SOUND is not set | ||
608 | # CONFIG_HID_SUPPORT is not set | ||
609 | CONFIG_USB_SUPPORT=y | ||
610 | CONFIG_USB_ARCH_HAS_HCD=y | ||
611 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
612 | CONFIG_USB_ARCH_HAS_EHCI=y | ||
613 | CONFIG_USB=y | ||
614 | # CONFIG_USB_DEBUG is not set | ||
615 | # CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set | ||
616 | |||
617 | # | ||
618 | # Miscellaneous USB options | ||
619 | # | ||
620 | # CONFIG_USB_DEVICEFS is not set | ||
621 | CONFIG_USB_DEVICE_CLASS=y | ||
622 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
623 | # CONFIG_USB_OTG is not set | ||
624 | CONFIG_USB_MON=y | ||
625 | # CONFIG_USB_WUSB is not set | ||
626 | # CONFIG_USB_WUSB_CBAF is not set | ||
627 | |||
628 | # | ||
629 | # USB Host Controller Drivers | ||
630 | # | ||
631 | # CONFIG_USB_C67X00_HCD is not set | ||
632 | # CONFIG_USB_EHCI_HCD is not set | ||
633 | # CONFIG_USB_OXU210HP_HCD is not set | ||
634 | # CONFIG_USB_ISP116X_HCD is not set | ||
635 | # CONFIG_USB_ISP1760_HCD is not set | ||
636 | # CONFIG_USB_ISP1362_HCD is not set | ||
637 | # CONFIG_USB_OHCI_HCD is not set | ||
638 | # CONFIG_USB_SL811_HCD is not set | ||
639 | # CONFIG_USB_R8A66597_HCD is not set | ||
640 | # CONFIG_USB_HWA_HCD is not set | ||
641 | # CONFIG_USB_MUSB_HDRC is not set | ||
642 | |||
643 | # | ||
644 | # USB Device Class drivers | ||
645 | # | ||
646 | # CONFIG_USB_ACM is not set | ||
647 | # CONFIG_USB_PRINTER is not set | ||
648 | # CONFIG_USB_WDM is not set | ||
649 | # CONFIG_USB_TMC is not set | ||
650 | |||
651 | # | ||
652 | # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may | ||
653 | # | ||
654 | |||
655 | # | ||
656 | # also be needed; see USB_STORAGE Help for more info | ||
657 | # | ||
658 | CONFIG_USB_STORAGE=y | ||
659 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
660 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
661 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
662 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
663 | # CONFIG_USB_STORAGE_USBAT is not set | ||
664 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
665 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
666 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
667 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
668 | # CONFIG_USB_STORAGE_ONETOUCH is not set | ||
669 | # CONFIG_USB_STORAGE_KARMA is not set | ||
670 | # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set | ||
671 | # CONFIG_USB_LIBUSUAL is not set | ||
672 | |||
673 | # | ||
674 | # USB Imaging devices | ||
675 | # | ||
676 | # CONFIG_USB_MDC800 is not set | ||
677 | # CONFIG_USB_MICROTEK is not set | ||
678 | |||
679 | # | ||
680 | # USB port drivers | ||
681 | # | ||
682 | # CONFIG_USB_SERIAL is not set | ||
683 | |||
684 | # | ||
685 | # USB Miscellaneous drivers | ||
686 | # | ||
687 | # CONFIG_USB_EMI62 is not set | ||
688 | # CONFIG_USB_EMI26 is not set | ||
689 | # CONFIG_USB_ADUTUX is not set | ||
690 | # CONFIG_USB_SEVSEG is not set | ||
691 | # CONFIG_USB_RIO500 is not set | ||
692 | # CONFIG_USB_LEGOTOWER is not set | ||
693 | # CONFIG_USB_LCD is not set | ||
694 | # CONFIG_USB_BERRY_CHARGE is not set | ||
695 | # CONFIG_USB_LED is not set | ||
696 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
697 | # CONFIG_USB_CYTHERM is not set | ||
698 | # CONFIG_USB_IDMOUSE is not set | ||
699 | # CONFIG_USB_FTDI_ELAN is not set | ||
700 | # CONFIG_USB_APPLEDISPLAY is not set | ||
701 | # CONFIG_USB_LD is not set | ||
702 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
703 | # CONFIG_USB_IOWARRIOR is not set | ||
704 | # CONFIG_USB_TEST is not set | ||
705 | # CONFIG_USB_ISIGHTFW is not set | ||
706 | # CONFIG_USB_VST is not set | ||
707 | # CONFIG_USB_GADGET is not set | ||
708 | |||
709 | # | ||
710 | # OTG and related infrastructure | ||
711 | # | ||
712 | # CONFIG_USB_GPIO_VBUS is not set | ||
713 | # CONFIG_NOP_USB_XCEIV is not set | ||
714 | # CONFIG_MMC is not set | ||
715 | # CONFIG_MEMSTICK is not set | ||
716 | # CONFIG_NEW_LEDS is not set | ||
717 | # CONFIG_ACCESSIBILITY is not set | ||
718 | CONFIG_RTC_LIB=y | ||
719 | # CONFIG_RTC_CLASS is not set | ||
720 | # CONFIG_DMADEVICES is not set | ||
721 | # CONFIG_AUXDISPLAY is not set | ||
722 | # CONFIG_UIO is not set | ||
723 | |||
724 | # | ||
725 | # TI VLYNQ | ||
726 | # | ||
727 | # CONFIG_STAGING is not set | ||
728 | |||
729 | # | ||
730 | # File systems | ||
731 | # | ||
732 | # CONFIG_EXT2_FS is not set | ||
733 | # CONFIG_EXT3_FS is not set | ||
734 | # CONFIG_EXT4_FS is not set | ||
735 | # CONFIG_REISERFS_FS is not set | ||
736 | # CONFIG_JFS_FS is not set | ||
737 | CONFIG_FS_POSIX_ACL=y | ||
738 | # CONFIG_XFS_FS is not set | ||
739 | # CONFIG_GFS2_FS is not set | ||
740 | # CONFIG_BTRFS_FS is not set | ||
741 | # CONFIG_NILFS2_FS is not set | ||
742 | CONFIG_FILE_LOCKING=y | ||
743 | CONFIG_FSNOTIFY=y | ||
744 | # CONFIG_DNOTIFY is not set | ||
745 | # CONFIG_INOTIFY is not set | ||
746 | CONFIG_INOTIFY_USER=y | ||
747 | # CONFIG_QUOTA is not set | ||
748 | # CONFIG_AUTOFS_FS is not set | ||
749 | # CONFIG_AUTOFS4_FS is not set | ||
750 | # CONFIG_FUSE_FS is not set | ||
751 | CONFIG_GENERIC_ACL=y | ||
752 | |||
753 | # | ||
754 | # Caches | ||
755 | # | ||
756 | # CONFIG_FSCACHE is not set | ||
757 | |||
758 | # | ||
759 | # CD-ROM/DVD Filesystems | ||
760 | # | ||
761 | # CONFIG_ISO9660_FS is not set | ||
762 | # CONFIG_UDF_FS is not set | ||
763 | |||
764 | # | ||
765 | # DOS/FAT/NT Filesystems | ||
766 | # | ||
767 | # CONFIG_MSDOS_FS is not set | ||
768 | # CONFIG_VFAT_FS is not set | ||
769 | # CONFIG_NTFS_FS is not set | ||
770 | |||
771 | # | ||
772 | # Pseudo filesystems | ||
773 | # | ||
774 | CONFIG_PROC_FS=y | ||
775 | CONFIG_PROC_SYSCTL=y | ||
776 | CONFIG_PROC_PAGE_MONITOR=y | ||
777 | CONFIG_SYSFS=y | ||
778 | CONFIG_TMPFS=y | ||
779 | CONFIG_TMPFS_POSIX_ACL=y | ||
780 | # CONFIG_HUGETLB_PAGE is not set | ||
781 | # CONFIG_CONFIGFS_FS is not set | ||
782 | CONFIG_MISC_FILESYSTEMS=y | ||
783 | # CONFIG_ADFS_FS is not set | ||
784 | # CONFIG_AFFS_FS is not set | ||
785 | # CONFIG_HFS_FS is not set | ||
786 | # CONFIG_HFSPLUS_FS is not set | ||
787 | # CONFIG_BEFS_FS is not set | ||
788 | # CONFIG_BFS_FS is not set | ||
789 | # CONFIG_EFS_FS is not set | ||
790 | # CONFIG_JFFS2_FS is not set | ||
791 | # CONFIG_CRAMFS is not set | ||
792 | # CONFIG_SQUASHFS is not set | ||
793 | # CONFIG_VXFS_FS is not set | ||
794 | # CONFIG_MINIX_FS is not set | ||
795 | # CONFIG_OMFS_FS is not set | ||
796 | # CONFIG_HPFS_FS is not set | ||
797 | # CONFIG_QNX4FS_FS is not set | ||
798 | CONFIG_ROMFS_FS=y | ||
799 | CONFIG_ROMFS_BACKED_BY_BLOCK=y | ||
800 | # CONFIG_ROMFS_BACKED_BY_MTD is not set | ||
801 | # CONFIG_ROMFS_BACKED_BY_BOTH is not set | ||
802 | CONFIG_ROMFS_ON_BLOCK=y | ||
803 | # CONFIG_SYSV_FS is not set | ||
804 | # CONFIG_UFS_FS is not set | ||
805 | |||
806 | # | ||
807 | # Partition Types | ||
808 | # | ||
809 | CONFIG_PARTITION_ADVANCED=y | ||
810 | # CONFIG_ACORN_PARTITION is not set | ||
811 | # CONFIG_OSF_PARTITION is not set | ||
812 | # CONFIG_AMIGA_PARTITION is not set | ||
813 | # CONFIG_ATARI_PARTITION is not set | ||
814 | # CONFIG_MAC_PARTITION is not set | ||
815 | CONFIG_MSDOS_PARTITION=y | ||
816 | # CONFIG_BSD_DISKLABEL is not set | ||
817 | # CONFIG_MINIX_SUBPARTITION is not set | ||
818 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
819 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
820 | # CONFIG_LDM_PARTITION is not set | ||
821 | # CONFIG_SGI_PARTITION is not set | ||
822 | # CONFIG_ULTRIX_PARTITION is not set | ||
823 | # CONFIG_SUN_PARTITION is not set | ||
824 | # CONFIG_KARMA_PARTITION is not set | ||
825 | # CONFIG_EFI_PARTITION is not set | ||
826 | # CONFIG_SYSV68_PARTITION is not set | ||
827 | CONFIG_NLS=y | ||
828 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
829 | CONFIG_NLS_CODEPAGE_437=y | ||
830 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
831 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
832 | # CONFIG_NLS_CODEPAGE_850 is not set | ||
833 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
834 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
835 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
836 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
837 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
838 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
839 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
840 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
841 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
842 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
843 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
844 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
845 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
846 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
847 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
848 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
849 | # CONFIG_NLS_ISO8859_8 is not set | ||
850 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
851 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
852 | # CONFIG_NLS_ASCII is not set | ||
853 | CONFIG_NLS_ISO8859_1=y | ||
854 | # CONFIG_NLS_ISO8859_2 is not set | ||
855 | # CONFIG_NLS_ISO8859_3 is not set | ||
856 | # CONFIG_NLS_ISO8859_4 is not set | ||
857 | # CONFIG_NLS_ISO8859_5 is not set | ||
858 | # CONFIG_NLS_ISO8859_6 is not set | ||
859 | # CONFIG_NLS_ISO8859_7 is not set | ||
860 | # CONFIG_NLS_ISO8859_9 is not set | ||
861 | # CONFIG_NLS_ISO8859_13 is not set | ||
862 | # CONFIG_NLS_ISO8859_14 is not set | ||
863 | # CONFIG_NLS_ISO8859_15 is not set | ||
864 | # CONFIG_NLS_KOI8_R is not set | ||
865 | # CONFIG_NLS_KOI8_U is not set | ||
866 | # CONFIG_NLS_UTF8 is not set | ||
867 | |||
868 | # | ||
869 | # Kernel hacking | ||
870 | # | ||
871 | # CONFIG_PRINTK_TIME is not set | ||
872 | # CONFIG_ENABLE_WARN_DEPRECATED is not set | ||
873 | # CONFIG_ENABLE_MUST_CHECK is not set | ||
874 | CONFIG_FRAME_WARN=1024 | ||
875 | # CONFIG_MAGIC_SYSRQ is not set | ||
876 | # CONFIG_STRIP_ASM_SYMS is not set | ||
877 | # CONFIG_UNUSED_SYMBOLS is not set | ||
878 | CONFIG_DEBUG_FS=y | ||
879 | # CONFIG_HEADERS_CHECK is not set | ||
880 | # CONFIG_DEBUG_KERNEL is not set | ||
881 | CONFIG_DEBUG_BUGVERBOSE=y | ||
882 | CONFIG_DEBUG_MEMORY_INIT=y | ||
883 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
884 | # CONFIG_LATENCYTOP is not set | ||
885 | # CONFIG_SYSCTL_SYSCALL_CHECK is not set | ||
886 | CONFIG_HAVE_FUNCTION_TRACER=y | ||
887 | CONFIG_TRACING_SUPPORT=y | ||
888 | # CONFIG_FTRACE is not set | ||
889 | # CONFIG_DYNAMIC_DEBUG is not set | ||
890 | # CONFIG_SAMPLES is not set | ||
891 | CONFIG_HAVE_ARCH_KGDB=y | ||
892 | CONFIG_ARM_UNWIND=y | ||
893 | # CONFIG_DEBUG_USER is not set | ||
894 | |||
895 | # | ||
896 | # Security options | ||
897 | # | ||
898 | # CONFIG_KEYS is not set | ||
899 | # CONFIG_SECURITY is not set | ||
900 | # CONFIG_SECURITYFS is not set | ||
901 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | ||
902 | # CONFIG_CRYPTO is not set | ||
903 | # CONFIG_BINARY_PRINTF is not set | ||
904 | |||
905 | # | ||
906 | # Library routines | ||
907 | # | ||
908 | CONFIG_GENERIC_FIND_LAST_BIT=y | ||
909 | # CONFIG_CRC_CCITT is not set | ||
910 | # CONFIG_CRC16 is not set | ||
911 | # CONFIG_CRC_T10DIF is not set | ||
912 | # CONFIG_CRC_ITU_T is not set | ||
913 | # CONFIG_CRC32 is not set | ||
914 | # CONFIG_CRC7 is not set | ||
915 | # CONFIG_LIBCRC32C is not set | ||
916 | CONFIG_ZLIB_INFLATE=y | ||
917 | CONFIG_DECOMPRESS_GZIP=y | ||
918 | CONFIG_DECOMPRESS_BZIP2=y | ||
919 | CONFIG_DECOMPRESS_LZMA=y | ||
920 | CONFIG_HAS_IOMEM=y | ||
921 | CONFIG_HAS_IOPORT=y | ||
922 | CONFIG_HAS_DMA=y | ||
diff --git a/arch/arm/configs/nuc960_defconfig b/arch/arm/configs/nuc960_defconfig new file mode 100644 index 000000000000..4b2cd9eae9bc --- /dev/null +++ b/arch/arm/configs/nuc960_defconfig | |||
@@ -0,0 +1,922 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.32-rc7 | ||
4 | # Tue Nov 17 12:20:11 2009 | ||
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_GENERIC_HARDIRQS=y | ||
12 | CONFIG_STACKTRACE_SUPPORT=y | ||
13 | CONFIG_HAVE_LATENCYTOP_SUPPORT=y | ||
14 | CONFIG_LOCKDEP_SUPPORT=y | ||
15 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
16 | CONFIG_HARDIRQS_SW_RESEND=y | ||
17 | CONFIG_GENERIC_IRQ_PROBE=y | ||
18 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
19 | CONFIG_GENERIC_HWEIGHT=y | ||
20 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
21 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | ||
22 | CONFIG_VECTORS_BASE=0xffff0000 | ||
23 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
24 | CONFIG_CONSTRUCTORS=y | ||
25 | |||
26 | # | ||
27 | # General setup | ||
28 | # | ||
29 | CONFIG_EXPERIMENTAL=y | ||
30 | CONFIG_BROKEN_ON_SMP=y | ||
31 | CONFIG_LOCK_KERNEL=y | ||
32 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
33 | CONFIG_LOCALVERSION="" | ||
34 | # CONFIG_LOCALVERSION_AUTO is not set | ||
35 | CONFIG_SWAP=y | ||
36 | CONFIG_SYSVIPC=y | ||
37 | CONFIG_SYSVIPC_SYSCTL=y | ||
38 | CONFIG_BSD_PROCESS_ACCT=y | ||
39 | # CONFIG_BSD_PROCESS_ACCT_V3 is not set | ||
40 | |||
41 | # | ||
42 | # RCU Subsystem | ||
43 | # | ||
44 | CONFIG_TREE_RCU=y | ||
45 | # CONFIG_TREE_PREEMPT_RCU is not set | ||
46 | # CONFIG_RCU_TRACE is not set | ||
47 | CONFIG_RCU_FANOUT=32 | ||
48 | # CONFIG_RCU_FANOUT_EXACT is not set | ||
49 | # CONFIG_TREE_RCU_TRACE is not set | ||
50 | # CONFIG_IKCONFIG is not set | ||
51 | CONFIG_LOG_BUF_SHIFT=17 | ||
52 | # CONFIG_GROUP_SCHED is not set | ||
53 | # CONFIG_CGROUPS is not set | ||
54 | CONFIG_SYSFS_DEPRECATED=y | ||
55 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
56 | CONFIG_RELAY=y | ||
57 | CONFIG_NAMESPACES=y | ||
58 | # CONFIG_UTS_NS is not set | ||
59 | # CONFIG_IPC_NS is not set | ||
60 | CONFIG_USER_NS=y | ||
61 | # CONFIG_PID_NS is not set | ||
62 | CONFIG_BLK_DEV_INITRD=y | ||
63 | CONFIG_INITRAMFS_SOURCE="" | ||
64 | CONFIG_RD_GZIP=y | ||
65 | CONFIG_RD_BZIP2=y | ||
66 | CONFIG_RD_LZMA=y | ||
67 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
68 | CONFIG_SYSCTL=y | ||
69 | CONFIG_ANON_INODES=y | ||
70 | # CONFIG_EMBEDDED is not set | ||
71 | CONFIG_UID16=y | ||
72 | CONFIG_SYSCTL_SYSCALL=y | ||
73 | CONFIG_KALLSYMS=y | ||
74 | CONFIG_KALLSYMS_EXTRA_PASS=y | ||
75 | CONFIG_HOTPLUG=y | ||
76 | CONFIG_PRINTK=y | ||
77 | CONFIG_BUG=y | ||
78 | CONFIG_ELF_CORE=y | ||
79 | CONFIG_BASE_FULL=y | ||
80 | CONFIG_FUTEX=y | ||
81 | CONFIG_EPOLL=y | ||
82 | CONFIG_SIGNALFD=y | ||
83 | CONFIG_TIMERFD=y | ||
84 | CONFIG_EVENTFD=y | ||
85 | CONFIG_SHMEM=y | ||
86 | CONFIG_AIO=y | ||
87 | |||
88 | # | ||
89 | # Kernel Performance Events And Counters | ||
90 | # | ||
91 | CONFIG_VM_EVENT_COUNTERS=y | ||
92 | CONFIG_COMPAT_BRK=y | ||
93 | CONFIG_SLAB=y | ||
94 | # CONFIG_SLUB is not set | ||
95 | # CONFIG_SLOB is not set | ||
96 | # CONFIG_PROFILING is not set | ||
97 | CONFIG_HAVE_OPROFILE=y | ||
98 | CONFIG_HAVE_KPROBES=y | ||
99 | CONFIG_HAVE_KRETPROBES=y | ||
100 | CONFIG_HAVE_CLK=y | ||
101 | |||
102 | # | ||
103 | # GCOV-based kernel profiling | ||
104 | # | ||
105 | # CONFIG_GCOV_KERNEL is not set | ||
106 | # CONFIG_SLOW_WORK is not set | ||
107 | CONFIG_HAVE_GENERIC_DMA_COHERENT=y | ||
108 | CONFIG_SLABINFO=y | ||
109 | CONFIG_RT_MUTEXES=y | ||
110 | CONFIG_BASE_SMALL=0 | ||
111 | # CONFIG_MODULES is not set | ||
112 | CONFIG_BLOCK=y | ||
113 | CONFIG_LBDAF=y | ||
114 | CONFIG_BLK_DEV_BSG=y | ||
115 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
116 | |||
117 | # | ||
118 | # IO Schedulers | ||
119 | # | ||
120 | CONFIG_IOSCHED_NOOP=y | ||
121 | CONFIG_IOSCHED_AS=y | ||
122 | CONFIG_IOSCHED_DEADLINE=y | ||
123 | CONFIG_IOSCHED_CFQ=y | ||
124 | # CONFIG_DEFAULT_AS is not set | ||
125 | # CONFIG_DEFAULT_DEADLINE is not set | ||
126 | CONFIG_DEFAULT_CFQ=y | ||
127 | # CONFIG_DEFAULT_NOOP is not set | ||
128 | CONFIG_DEFAULT_IOSCHED="cfq" | ||
129 | # CONFIG_FREEZER is not set | ||
130 | |||
131 | # | ||
132 | # System Type | ||
133 | # | ||
134 | CONFIG_MMU=y | ||
135 | # CONFIG_ARCH_AAEC2000 is not set | ||
136 | # CONFIG_ARCH_INTEGRATOR is not set | ||
137 | # CONFIG_ARCH_REALVIEW is not set | ||
138 | # CONFIG_ARCH_VERSATILE is not set | ||
139 | # CONFIG_ARCH_AT91 is not set | ||
140 | # CONFIG_ARCH_CLPS711X is not set | ||
141 | # CONFIG_ARCH_GEMINI is not set | ||
142 | # CONFIG_ARCH_EBSA110 is not set | ||
143 | # CONFIG_ARCH_EP93XX is not set | ||
144 | # CONFIG_ARCH_FOOTBRIDGE is not set | ||
145 | # CONFIG_ARCH_MXC is not set | ||
146 | # CONFIG_ARCH_STMP3XXX is not set | ||
147 | # CONFIG_ARCH_NETX is not set | ||
148 | # CONFIG_ARCH_H720X is not set | ||
149 | # CONFIG_ARCH_NOMADIK is not set | ||
150 | # CONFIG_ARCH_IOP13XX is not set | ||
151 | # CONFIG_ARCH_IOP32X is not set | ||
152 | # CONFIG_ARCH_IOP33X is not set | ||
153 | # CONFIG_ARCH_IXP23XX is not set | ||
154 | # CONFIG_ARCH_IXP2000 is not set | ||
155 | # CONFIG_ARCH_IXP4XX is not set | ||
156 | # CONFIG_ARCH_L7200 is not set | ||
157 | # CONFIG_ARCH_KIRKWOOD is not set | ||
158 | # CONFIG_ARCH_LOKI is not set | ||
159 | # CONFIG_ARCH_MV78XX0 is not set | ||
160 | # CONFIG_ARCH_ORION5X is not set | ||
161 | # CONFIG_ARCH_MMP is not set | ||
162 | # CONFIG_ARCH_KS8695 is not set | ||
163 | # CONFIG_ARCH_NS9XXX is not set | ||
164 | CONFIG_ARCH_W90X900=y | ||
165 | # CONFIG_ARCH_PNX4008 is not set | ||
166 | # CONFIG_ARCH_PXA is not set | ||
167 | # CONFIG_ARCH_MSM is not set | ||
168 | # CONFIG_ARCH_RPC is not set | ||
169 | # CONFIG_ARCH_SA1100 is not set | ||
170 | # CONFIG_ARCH_S3C2410 is not set | ||
171 | # CONFIG_ARCH_S3C64XX is not set | ||
172 | # CONFIG_ARCH_S5PC1XX is not set | ||
173 | # CONFIG_ARCH_SHARK is not set | ||
174 | # CONFIG_ARCH_LH7A40X is not set | ||
175 | # CONFIG_ARCH_U300 is not set | ||
176 | # CONFIG_ARCH_DAVINCI is not set | ||
177 | # CONFIG_ARCH_OMAP is not set | ||
178 | # CONFIG_ARCH_BCMRING is not set | ||
179 | CONFIG_CPU_NUC960=y | ||
180 | |||
181 | # | ||
182 | # W90P910 Machines | ||
183 | # | ||
184 | # CONFIG_MACH_W90P910EVB is not set | ||
185 | |||
186 | # | ||
187 | # NUC950 Machines | ||
188 | # | ||
189 | # CONFIG_MACH_W90P950EVB is not set | ||
190 | |||
191 | # | ||
192 | # NUC960 Machines | ||
193 | # | ||
194 | CONFIG_MACH_W90N960EVB=y | ||
195 | |||
196 | # | ||
197 | # NUC932 Machines | ||
198 | # | ||
199 | # CONFIG_MACH_NUC932EVB is not set | ||
200 | |||
201 | # | ||
202 | # Processor Type | ||
203 | # | ||
204 | CONFIG_CPU_32=y | ||
205 | CONFIG_CPU_ARM926T=y | ||
206 | CONFIG_CPU_32v5=y | ||
207 | CONFIG_CPU_ABRT_EV5TJ=y | ||
208 | CONFIG_CPU_PABRT_LEGACY=y | ||
209 | CONFIG_CPU_CACHE_VIVT=y | ||
210 | CONFIG_CPU_COPY_V4WB=y | ||
211 | CONFIG_CPU_TLB_V4WBI=y | ||
212 | CONFIG_CPU_CP15=y | ||
213 | CONFIG_CPU_CP15_MMU=y | ||
214 | |||
215 | # | ||
216 | # Processor Features | ||
217 | # | ||
218 | CONFIG_ARM_THUMB=y | ||
219 | # CONFIG_CPU_ICACHE_DISABLE is not set | ||
220 | # CONFIG_CPU_DCACHE_DISABLE is not set | ||
221 | # CONFIG_CPU_DCACHE_WRITETHROUGH is not set | ||
222 | # CONFIG_CPU_CACHE_ROUND_ROBIN is not set | ||
223 | CONFIG_ARM_L1_CACHE_SHIFT=5 | ||
224 | CONFIG_COMMON_CLKDEV=y | ||
225 | |||
226 | # | ||
227 | # Bus support | ||
228 | # | ||
229 | # CONFIG_PCI_SYSCALL is not set | ||
230 | # CONFIG_ARCH_SUPPORTS_MSI is not set | ||
231 | # CONFIG_PCCARD is not set | ||
232 | |||
233 | # | ||
234 | # Kernel Features | ||
235 | # | ||
236 | CONFIG_TICK_ONESHOT=y | ||
237 | CONFIG_NO_HZ=y | ||
238 | CONFIG_HIGH_RES_TIMERS=y | ||
239 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
240 | CONFIG_VMSPLIT_3G=y | ||
241 | # CONFIG_VMSPLIT_2G is not set | ||
242 | # CONFIG_VMSPLIT_1G is not set | ||
243 | CONFIG_PAGE_OFFSET=0xC0000000 | ||
244 | # CONFIG_PREEMPT_NONE is not set | ||
245 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
246 | CONFIG_PREEMPT=y | ||
247 | CONFIG_HZ=100 | ||
248 | CONFIG_AEABI=y | ||
249 | CONFIG_OABI_COMPAT=y | ||
250 | # CONFIG_ARCH_SPARSEMEM_DEFAULT is not set | ||
251 | # CONFIG_ARCH_SELECT_MEMORY_MODEL is not set | ||
252 | # CONFIG_HIGHMEM is not set | ||
253 | CONFIG_SELECT_MEMORY_MODEL=y | ||
254 | CONFIG_FLATMEM_MANUAL=y | ||
255 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
256 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
257 | CONFIG_FLATMEM=y | ||
258 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
259 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
260 | CONFIG_SPLIT_PTLOCK_CPUS=4096 | ||
261 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
262 | CONFIG_ZONE_DMA_FLAG=0 | ||
263 | CONFIG_VIRT_TO_BUS=y | ||
264 | CONFIG_HAVE_MLOCK=y | ||
265 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y | ||
266 | # CONFIG_KSM is not set | ||
267 | CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 | ||
268 | CONFIG_ALIGNMENT_TRAP=y | ||
269 | # CONFIG_UACCESS_WITH_MEMCPY is not set | ||
270 | |||
271 | # | ||
272 | # Boot options | ||
273 | # | ||
274 | CONFIG_ZBOOT_ROM_TEXT=0 | ||
275 | CONFIG_ZBOOT_ROM_BSS=0 | ||
276 | CONFIG_CMDLINE="root=/dev/ram0 console=ttyS0,115200n8 rdinit=/sbin/init mem=64M" | ||
277 | # CONFIG_XIP_KERNEL is not set | ||
278 | CONFIG_KEXEC=y | ||
279 | CONFIG_ATAGS_PROC=y | ||
280 | |||
281 | # | ||
282 | # CPU Power Management | ||
283 | # | ||
284 | # CONFIG_CPU_IDLE is not set | ||
285 | |||
286 | # | ||
287 | # Floating point emulation | ||
288 | # | ||
289 | |||
290 | # | ||
291 | # At least one emulation must be selected | ||
292 | # | ||
293 | CONFIG_FPE_NWFPE=y | ||
294 | # CONFIG_FPE_NWFPE_XP is not set | ||
295 | # CONFIG_FPE_FASTFPE is not set | ||
296 | # CONFIG_VFP is not set | ||
297 | |||
298 | # | ||
299 | # Userspace binary formats | ||
300 | # | ||
301 | CONFIG_BINFMT_ELF=y | ||
302 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
303 | CONFIG_HAVE_AOUT=y | ||
304 | CONFIG_BINFMT_AOUT=y | ||
305 | CONFIG_BINFMT_MISC=y | ||
306 | |||
307 | # | ||
308 | # Power management options | ||
309 | # | ||
310 | # CONFIG_PM is not set | ||
311 | CONFIG_ARCH_SUSPEND_POSSIBLE=y | ||
312 | # CONFIG_NET is not set | ||
313 | |||
314 | # | ||
315 | # Device Drivers | ||
316 | # | ||
317 | |||
318 | # | ||
319 | # Generic Driver Options | ||
320 | # | ||
321 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
322 | # CONFIG_DEVTMPFS is not set | ||
323 | CONFIG_STANDALONE=y | ||
324 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
325 | CONFIG_FW_LOADER=y | ||
326 | CONFIG_FIRMWARE_IN_KERNEL=y | ||
327 | CONFIG_EXTRA_FIRMWARE="" | ||
328 | # CONFIG_SYS_HYPERVISOR is not set | ||
329 | CONFIG_MTD=y | ||
330 | # CONFIG_MTD_DEBUG is not set | ||
331 | CONFIG_MTD_CONCAT=y | ||
332 | CONFIG_MTD_PARTITIONS=y | ||
333 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
334 | # CONFIG_MTD_CMDLINE_PARTS is not set | ||
335 | # CONFIG_MTD_AFS_PARTS is not set | ||
336 | # CONFIG_MTD_AR7_PARTS is not set | ||
337 | |||
338 | # | ||
339 | # User Modules And Translation Layers | ||
340 | # | ||
341 | CONFIG_MTD_CHAR=y | ||
342 | CONFIG_MTD_BLKDEVS=y | ||
343 | CONFIG_MTD_BLOCK=y | ||
344 | # CONFIG_FTL is not set | ||
345 | # CONFIG_NFTL is not set | ||
346 | # CONFIG_INFTL is not set | ||
347 | # CONFIG_RFD_FTL is not set | ||
348 | # CONFIG_SSFDC is not set | ||
349 | # CONFIG_MTD_OOPS is not set | ||
350 | |||
351 | # | ||
352 | # RAM/ROM/Flash chip drivers | ||
353 | # | ||
354 | CONFIG_MTD_CFI=y | ||
355 | # CONFIG_MTD_JEDECPROBE is not set | ||
356 | CONFIG_MTD_GEN_PROBE=y | ||
357 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set | ||
358 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
359 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
360 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
361 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
362 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
363 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
364 | CONFIG_MTD_CFI_I1=y | ||
365 | CONFIG_MTD_CFI_I2=y | ||
366 | # CONFIG_MTD_CFI_I4 is not set | ||
367 | # CONFIG_MTD_CFI_I8 is not set | ||
368 | # CONFIG_MTD_CFI_INTELEXT is not set | ||
369 | CONFIG_MTD_CFI_AMDSTD=y | ||
370 | # CONFIG_MTD_CFI_STAA is not set | ||
371 | CONFIG_MTD_CFI_UTIL=y | ||
372 | # CONFIG_MTD_RAM is not set | ||
373 | # CONFIG_MTD_ROM is not set | ||
374 | # CONFIG_MTD_ABSENT is not set | ||
375 | |||
376 | # | ||
377 | # Mapping drivers for chip access | ||
378 | # | ||
379 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
380 | CONFIG_MTD_PHYSMAP=y | ||
381 | # CONFIG_MTD_PHYSMAP_COMPAT is not set | ||
382 | # CONFIG_MTD_ARM_INTEGRATOR is not set | ||
383 | # CONFIG_MTD_PLATRAM is not set | ||
384 | |||
385 | # | ||
386 | # Self-contained MTD device drivers | ||
387 | # | ||
388 | # CONFIG_MTD_SLRAM is not set | ||
389 | # CONFIG_MTD_PHRAM is not set | ||
390 | # CONFIG_MTD_MTDRAM is not set | ||
391 | # CONFIG_MTD_BLOCK2MTD is not set | ||
392 | |||
393 | # | ||
394 | # Disk-On-Chip Device Drivers | ||
395 | # | ||
396 | # CONFIG_MTD_DOC2000 is not set | ||
397 | # CONFIG_MTD_DOC2001 is not set | ||
398 | # CONFIG_MTD_DOC2001PLUS is not set | ||
399 | # CONFIG_MTD_NAND is not set | ||
400 | # CONFIG_MTD_ONENAND is not set | ||
401 | |||
402 | # | ||
403 | # LPDDR flash memory drivers | ||
404 | # | ||
405 | # CONFIG_MTD_LPDDR is not set | ||
406 | |||
407 | # | ||
408 | # UBI - Unsorted block images | ||
409 | # | ||
410 | # CONFIG_MTD_UBI is not set | ||
411 | # CONFIG_PARPORT is not set | ||
412 | CONFIG_BLK_DEV=y | ||
413 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
414 | # CONFIG_BLK_DEV_LOOP is not set | ||
415 | # CONFIG_BLK_DEV_UB is not set | ||
416 | CONFIG_BLK_DEV_RAM=y | ||
417 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
418 | CONFIG_BLK_DEV_RAM_SIZE=16384 | ||
419 | # CONFIG_BLK_DEV_XIP is not set | ||
420 | # CONFIG_CDROM_PKTCDVD is not set | ||
421 | # CONFIG_MG_DISK is not set | ||
422 | # CONFIG_MISC_DEVICES is not set | ||
423 | CONFIG_HAVE_IDE=y | ||
424 | # CONFIG_IDE is not set | ||
425 | |||
426 | # | ||
427 | # SCSI device support | ||
428 | # | ||
429 | # CONFIG_RAID_ATTRS is not set | ||
430 | CONFIG_SCSI=y | ||
431 | CONFIG_SCSI_DMA=y | ||
432 | # CONFIG_SCSI_TGT is not set | ||
433 | # CONFIG_SCSI_NETLINK is not set | ||
434 | # CONFIG_SCSI_PROC_FS is not set | ||
435 | |||
436 | # | ||
437 | # SCSI support type (disk, tape, CD-ROM) | ||
438 | # | ||
439 | CONFIG_BLK_DEV_SD=y | ||
440 | # CONFIG_CHR_DEV_ST is not set | ||
441 | # CONFIG_CHR_DEV_OSST is not set | ||
442 | # CONFIG_BLK_DEV_SR is not set | ||
443 | # CONFIG_CHR_DEV_SG is not set | ||
444 | # CONFIG_CHR_DEV_SCH is not set | ||
445 | # CONFIG_SCSI_MULTI_LUN is not set | ||
446 | # CONFIG_SCSI_CONSTANTS is not set | ||
447 | # CONFIG_SCSI_LOGGING is not set | ||
448 | # CONFIG_SCSI_SCAN_ASYNC is not set | ||
449 | |||
450 | # | ||
451 | # SCSI Transports | ||
452 | # | ||
453 | # CONFIG_SCSI_SPI_ATTRS is not set | ||
454 | # CONFIG_SCSI_FC_ATTRS is not set | ||
455 | # CONFIG_SCSI_SAS_ATTRS is not set | ||
456 | # CONFIG_SCSI_SAS_LIBSAS is not set | ||
457 | # CONFIG_SCSI_SRP_ATTRS is not set | ||
458 | # CONFIG_SCSI_LOWLEVEL is not set | ||
459 | # CONFIG_SCSI_DH is not set | ||
460 | # CONFIG_SCSI_OSD_INITIATOR is not set | ||
461 | # CONFIG_ATA is not set | ||
462 | # CONFIG_MD is not set | ||
463 | # CONFIG_PHONE is not set | ||
464 | |||
465 | # | ||
466 | # Input device support | ||
467 | # | ||
468 | CONFIG_INPUT=y | ||
469 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
470 | # CONFIG_INPUT_POLLDEV is not set | ||
471 | |||
472 | # | ||
473 | # Userland interfaces | ||
474 | # | ||
475 | CONFIG_INPUT_MOUSEDEV=y | ||
476 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
477 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
478 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
479 | # CONFIG_INPUT_JOYDEV is not set | ||
480 | # CONFIG_INPUT_EVDEV is not set | ||
481 | # CONFIG_INPUT_EVBUG is not set | ||
482 | |||
483 | # | ||
484 | # Input Device Drivers | ||
485 | # | ||
486 | # CONFIG_INPUT_KEYBOARD is not set | ||
487 | # CONFIG_INPUT_MOUSE is not set | ||
488 | # CONFIG_INPUT_JOYSTICK is not set | ||
489 | # CONFIG_INPUT_TABLET is not set | ||
490 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
491 | # CONFIG_INPUT_MISC is not set | ||
492 | |||
493 | # | ||
494 | # Hardware I/O ports | ||
495 | # | ||
496 | # CONFIG_SERIO is not set | ||
497 | # CONFIG_GAMEPORT is not set | ||
498 | |||
499 | # | ||
500 | # Character devices | ||
501 | # | ||
502 | CONFIG_VT=y | ||
503 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
504 | CONFIG_VT_CONSOLE=y | ||
505 | CONFIG_HW_CONSOLE=y | ||
506 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | ||
507 | # CONFIG_DEVKMEM is not set | ||
508 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
509 | |||
510 | # | ||
511 | # Serial drivers | ||
512 | # | ||
513 | CONFIG_SERIAL_8250=y | ||
514 | CONFIG_SERIAL_8250_CONSOLE=y | ||
515 | CONFIG_SERIAL_8250_NR_UARTS=1 | ||
516 | CONFIG_SERIAL_8250_RUNTIME_UARTS=1 | ||
517 | # CONFIG_SERIAL_8250_EXTENDED is not set | ||
518 | |||
519 | # | ||
520 | # Non-8250 serial port support | ||
521 | # | ||
522 | CONFIG_SERIAL_CORE=y | ||
523 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
524 | CONFIG_UNIX98_PTYS=y | ||
525 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | ||
526 | # CONFIG_LEGACY_PTYS is not set | ||
527 | # CONFIG_IPMI_HANDLER is not set | ||
528 | # CONFIG_HW_RANDOM is not set | ||
529 | # CONFIG_R3964 is not set | ||
530 | # CONFIG_RAW_DRIVER is not set | ||
531 | # CONFIG_TCG_TPM is not set | ||
532 | # CONFIG_I2C is not set | ||
533 | # CONFIG_SPI is not set | ||
534 | |||
535 | # | ||
536 | # PPS support | ||
537 | # | ||
538 | # CONFIG_PPS is not set | ||
539 | CONFIG_ARCH_REQUIRE_GPIOLIB=y | ||
540 | CONFIG_GPIOLIB=y | ||
541 | # CONFIG_GPIO_SYSFS is not set | ||
542 | |||
543 | # | ||
544 | # Memory mapped GPIO expanders: | ||
545 | # | ||
546 | |||
547 | # | ||
548 | # I2C GPIO expanders: | ||
549 | # | ||
550 | |||
551 | # | ||
552 | # PCI GPIO expanders: | ||
553 | # | ||
554 | |||
555 | # | ||
556 | # SPI GPIO expanders: | ||
557 | # | ||
558 | |||
559 | # | ||
560 | # AC97 GPIO expanders: | ||
561 | # | ||
562 | # CONFIG_W1 is not set | ||
563 | # CONFIG_POWER_SUPPLY is not set | ||
564 | # CONFIG_HWMON is not set | ||
565 | # CONFIG_THERMAL is not set | ||
566 | # CONFIG_WATCHDOG is not set | ||
567 | CONFIG_SSB_POSSIBLE=y | ||
568 | |||
569 | # | ||
570 | # Sonics Silicon Backplane | ||
571 | # | ||
572 | # CONFIG_SSB is not set | ||
573 | |||
574 | # | ||
575 | # Multifunction device drivers | ||
576 | # | ||
577 | # CONFIG_MFD_CORE is not set | ||
578 | # CONFIG_MFD_SM501 is not set | ||
579 | # CONFIG_MFD_ASIC3 is not set | ||
580 | # CONFIG_HTC_EGPIO is not set | ||
581 | # CONFIG_HTC_PASIC3 is not set | ||
582 | # CONFIG_MFD_TMIO is not set | ||
583 | # CONFIG_MFD_T7L66XB is not set | ||
584 | # CONFIG_MFD_TC6387XB is not set | ||
585 | # CONFIG_MFD_TC6393XB is not set | ||
586 | # CONFIG_REGULATOR is not set | ||
587 | # CONFIG_MEDIA_SUPPORT is not set | ||
588 | |||
589 | # | ||
590 | # Graphics support | ||
591 | # | ||
592 | # CONFIG_VGASTATE is not set | ||
593 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
594 | # CONFIG_FB is not set | ||
595 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
596 | |||
597 | # | ||
598 | # Display device support | ||
599 | # | ||
600 | # CONFIG_DISPLAY_SUPPORT is not set | ||
601 | |||
602 | # | ||
603 | # Console display driver support | ||
604 | # | ||
605 | # CONFIG_VGA_CONSOLE is not set | ||
606 | CONFIG_DUMMY_CONSOLE=y | ||
607 | # CONFIG_SOUND is not set | ||
608 | # CONFIG_HID_SUPPORT is not set | ||
609 | CONFIG_USB_SUPPORT=y | ||
610 | CONFIG_USB_ARCH_HAS_HCD=y | ||
611 | CONFIG_USB_ARCH_HAS_OHCI=y | ||
612 | CONFIG_USB_ARCH_HAS_EHCI=y | ||
613 | CONFIG_USB=y | ||
614 | # CONFIG_USB_DEBUG is not set | ||
615 | # CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set | ||
616 | |||
617 | # | ||
618 | # Miscellaneous USB options | ||
619 | # | ||
620 | # CONFIG_USB_DEVICEFS is not set | ||
621 | CONFIG_USB_DEVICE_CLASS=y | ||
622 | # CONFIG_USB_DYNAMIC_MINORS is not set | ||
623 | # CONFIG_USB_OTG is not set | ||
624 | CONFIG_USB_MON=y | ||
625 | # CONFIG_USB_WUSB is not set | ||
626 | # CONFIG_USB_WUSB_CBAF is not set | ||
627 | |||
628 | # | ||
629 | # USB Host Controller Drivers | ||
630 | # | ||
631 | # CONFIG_USB_C67X00_HCD is not set | ||
632 | # CONFIG_USB_EHCI_HCD is not set | ||
633 | # CONFIG_USB_OXU210HP_HCD is not set | ||
634 | # CONFIG_USB_ISP116X_HCD is not set | ||
635 | # CONFIG_USB_ISP1760_HCD is not set | ||
636 | # CONFIG_USB_ISP1362_HCD is not set | ||
637 | # CONFIG_USB_OHCI_HCD is not set | ||
638 | # CONFIG_USB_SL811_HCD is not set | ||
639 | # CONFIG_USB_R8A66597_HCD is not set | ||
640 | # CONFIG_USB_HWA_HCD is not set | ||
641 | # CONFIG_USB_MUSB_HDRC is not set | ||
642 | |||
643 | # | ||
644 | # USB Device Class drivers | ||
645 | # | ||
646 | # CONFIG_USB_ACM is not set | ||
647 | # CONFIG_USB_PRINTER is not set | ||
648 | # CONFIG_USB_WDM is not set | ||
649 | # CONFIG_USB_TMC is not set | ||
650 | |||
651 | # | ||
652 | # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may | ||
653 | # | ||
654 | |||
655 | # | ||
656 | # also be needed; see USB_STORAGE Help for more info | ||
657 | # | ||
658 | CONFIG_USB_STORAGE=y | ||
659 | # CONFIG_USB_STORAGE_DEBUG is not set | ||
660 | # CONFIG_USB_STORAGE_DATAFAB is not set | ||
661 | # CONFIG_USB_STORAGE_FREECOM is not set | ||
662 | # CONFIG_USB_STORAGE_ISD200 is not set | ||
663 | # CONFIG_USB_STORAGE_USBAT is not set | ||
664 | # CONFIG_USB_STORAGE_SDDR09 is not set | ||
665 | # CONFIG_USB_STORAGE_SDDR55 is not set | ||
666 | # CONFIG_USB_STORAGE_JUMPSHOT is not set | ||
667 | # CONFIG_USB_STORAGE_ALAUDA is not set | ||
668 | # CONFIG_USB_STORAGE_ONETOUCH is not set | ||
669 | # CONFIG_USB_STORAGE_KARMA is not set | ||
670 | # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set | ||
671 | # CONFIG_USB_LIBUSUAL is not set | ||
672 | |||
673 | # | ||
674 | # USB Imaging devices | ||
675 | # | ||
676 | # CONFIG_USB_MDC800 is not set | ||
677 | # CONFIG_USB_MICROTEK is not set | ||
678 | |||
679 | # | ||
680 | # USB port drivers | ||
681 | # | ||
682 | # CONFIG_USB_SERIAL is not set | ||
683 | |||
684 | # | ||
685 | # USB Miscellaneous drivers | ||
686 | # | ||
687 | # CONFIG_USB_EMI62 is not set | ||
688 | # CONFIG_USB_EMI26 is not set | ||
689 | # CONFIG_USB_ADUTUX is not set | ||
690 | # CONFIG_USB_SEVSEG is not set | ||
691 | # CONFIG_USB_RIO500 is not set | ||
692 | # CONFIG_USB_LEGOTOWER is not set | ||
693 | # CONFIG_USB_LCD is not set | ||
694 | # CONFIG_USB_BERRY_CHARGE is not set | ||
695 | # CONFIG_USB_LED is not set | ||
696 | # CONFIG_USB_CYPRESS_CY7C63 is not set | ||
697 | # CONFIG_USB_CYTHERM is not set | ||
698 | # CONFIG_USB_IDMOUSE is not set | ||
699 | # CONFIG_USB_FTDI_ELAN is not set | ||
700 | # CONFIG_USB_APPLEDISPLAY is not set | ||
701 | # CONFIG_USB_LD is not set | ||
702 | # CONFIG_USB_TRANCEVIBRATOR is not set | ||
703 | # CONFIG_USB_IOWARRIOR is not set | ||
704 | # CONFIG_USB_TEST is not set | ||
705 | # CONFIG_USB_ISIGHTFW is not set | ||
706 | # CONFIG_USB_VST is not set | ||
707 | # CONFIG_USB_GADGET is not set | ||
708 | |||
709 | # | ||
710 | # OTG and related infrastructure | ||
711 | # | ||
712 | # CONFIG_USB_GPIO_VBUS is not set | ||
713 | # CONFIG_NOP_USB_XCEIV is not set | ||
714 | # CONFIG_MMC is not set | ||
715 | # CONFIG_MEMSTICK is not set | ||
716 | # CONFIG_NEW_LEDS is not set | ||
717 | # CONFIG_ACCESSIBILITY is not set | ||
718 | CONFIG_RTC_LIB=y | ||
719 | # CONFIG_RTC_CLASS is not set | ||
720 | # CONFIG_DMADEVICES is not set | ||
721 | # CONFIG_AUXDISPLAY is not set | ||
722 | # CONFIG_UIO is not set | ||
723 | |||
724 | # | ||
725 | # TI VLYNQ | ||
726 | # | ||
727 | # CONFIG_STAGING is not set | ||
728 | |||
729 | # | ||
730 | # File systems | ||
731 | # | ||
732 | # CONFIG_EXT2_FS is not set | ||
733 | # CONFIG_EXT3_FS is not set | ||
734 | # CONFIG_EXT4_FS is not set | ||
735 | # CONFIG_REISERFS_FS is not set | ||
736 | # CONFIG_JFS_FS is not set | ||
737 | CONFIG_FS_POSIX_ACL=y | ||
738 | # CONFIG_XFS_FS is not set | ||
739 | # CONFIG_GFS2_FS is not set | ||
740 | # CONFIG_BTRFS_FS is not set | ||
741 | # CONFIG_NILFS2_FS is not set | ||
742 | CONFIG_FILE_LOCKING=y | ||
743 | CONFIG_FSNOTIFY=y | ||
744 | # CONFIG_DNOTIFY is not set | ||
745 | # CONFIG_INOTIFY is not set | ||
746 | CONFIG_INOTIFY_USER=y | ||
747 | # CONFIG_QUOTA is not set | ||
748 | # CONFIG_AUTOFS_FS is not set | ||
749 | # CONFIG_AUTOFS4_FS is not set | ||
750 | # CONFIG_FUSE_FS is not set | ||
751 | CONFIG_GENERIC_ACL=y | ||
752 | |||
753 | # | ||
754 | # Caches | ||
755 | # | ||
756 | # CONFIG_FSCACHE is not set | ||
757 | |||
758 | # | ||
759 | # CD-ROM/DVD Filesystems | ||
760 | # | ||
761 | # CONFIG_ISO9660_FS is not set | ||
762 | # CONFIG_UDF_FS is not set | ||
763 | |||
764 | # | ||
765 | # DOS/FAT/NT Filesystems | ||
766 | # | ||
767 | # CONFIG_MSDOS_FS is not set | ||
768 | # CONFIG_VFAT_FS is not set | ||
769 | # CONFIG_NTFS_FS is not set | ||
770 | |||
771 | # | ||
772 | # Pseudo filesystems | ||
773 | # | ||
774 | CONFIG_PROC_FS=y | ||
775 | CONFIG_PROC_SYSCTL=y | ||
776 | CONFIG_PROC_PAGE_MONITOR=y | ||
777 | CONFIG_SYSFS=y | ||
778 | CONFIG_TMPFS=y | ||
779 | CONFIG_TMPFS_POSIX_ACL=y | ||
780 | # CONFIG_HUGETLB_PAGE is not set | ||
781 | # CONFIG_CONFIGFS_FS is not set | ||
782 | CONFIG_MISC_FILESYSTEMS=y | ||
783 | # CONFIG_ADFS_FS is not set | ||
784 | # CONFIG_AFFS_FS is not set | ||
785 | # CONFIG_HFS_FS is not set | ||
786 | # CONFIG_HFSPLUS_FS is not set | ||
787 | # CONFIG_BEFS_FS is not set | ||
788 | # CONFIG_BFS_FS is not set | ||
789 | # CONFIG_EFS_FS is not set | ||
790 | # CONFIG_JFFS2_FS is not set | ||
791 | # CONFIG_CRAMFS is not set | ||
792 | # CONFIG_SQUASHFS is not set | ||
793 | # CONFIG_VXFS_FS is not set | ||
794 | # CONFIG_MINIX_FS is not set | ||
795 | # CONFIG_OMFS_FS is not set | ||
796 | # CONFIG_HPFS_FS is not set | ||
797 | # CONFIG_QNX4FS_FS is not set | ||
798 | CONFIG_ROMFS_FS=y | ||
799 | CONFIG_ROMFS_BACKED_BY_BLOCK=y | ||
800 | # CONFIG_ROMFS_BACKED_BY_MTD is not set | ||
801 | # CONFIG_ROMFS_BACKED_BY_BOTH is not set | ||
802 | CONFIG_ROMFS_ON_BLOCK=y | ||
803 | # CONFIG_SYSV_FS is not set | ||
804 | # CONFIG_UFS_FS is not set | ||
805 | |||
806 | # | ||
807 | # Partition Types | ||
808 | # | ||
809 | CONFIG_PARTITION_ADVANCED=y | ||
810 | # CONFIG_ACORN_PARTITION is not set | ||
811 | # CONFIG_OSF_PARTITION is not set | ||
812 | # CONFIG_AMIGA_PARTITION is not set | ||
813 | # CONFIG_ATARI_PARTITION is not set | ||
814 | # CONFIG_MAC_PARTITION is not set | ||
815 | CONFIG_MSDOS_PARTITION=y | ||
816 | # CONFIG_BSD_DISKLABEL is not set | ||
817 | # CONFIG_MINIX_SUBPARTITION is not set | ||
818 | # CONFIG_SOLARIS_X86_PARTITION is not set | ||
819 | # CONFIG_UNIXWARE_DISKLABEL is not set | ||
820 | # CONFIG_LDM_PARTITION is not set | ||
821 | # CONFIG_SGI_PARTITION is not set | ||
822 | # CONFIG_ULTRIX_PARTITION is not set | ||
823 | # CONFIG_SUN_PARTITION is not set | ||
824 | # CONFIG_KARMA_PARTITION is not set | ||
825 | # CONFIG_EFI_PARTITION is not set | ||
826 | # CONFIG_SYSV68_PARTITION is not set | ||
827 | CONFIG_NLS=y | ||
828 | CONFIG_NLS_DEFAULT="iso8859-1" | ||
829 | CONFIG_NLS_CODEPAGE_437=y | ||
830 | # CONFIG_NLS_CODEPAGE_737 is not set | ||
831 | # CONFIG_NLS_CODEPAGE_775 is not set | ||
832 | # CONFIG_NLS_CODEPAGE_850 is not set | ||
833 | # CONFIG_NLS_CODEPAGE_852 is not set | ||
834 | # CONFIG_NLS_CODEPAGE_855 is not set | ||
835 | # CONFIG_NLS_CODEPAGE_857 is not set | ||
836 | # CONFIG_NLS_CODEPAGE_860 is not set | ||
837 | # CONFIG_NLS_CODEPAGE_861 is not set | ||
838 | # CONFIG_NLS_CODEPAGE_862 is not set | ||
839 | # CONFIG_NLS_CODEPAGE_863 is not set | ||
840 | # CONFIG_NLS_CODEPAGE_864 is not set | ||
841 | # CONFIG_NLS_CODEPAGE_865 is not set | ||
842 | # CONFIG_NLS_CODEPAGE_866 is not set | ||
843 | # CONFIG_NLS_CODEPAGE_869 is not set | ||
844 | # CONFIG_NLS_CODEPAGE_936 is not set | ||
845 | # CONFIG_NLS_CODEPAGE_950 is not set | ||
846 | # CONFIG_NLS_CODEPAGE_932 is not set | ||
847 | # CONFIG_NLS_CODEPAGE_949 is not set | ||
848 | # CONFIG_NLS_CODEPAGE_874 is not set | ||
849 | # CONFIG_NLS_ISO8859_8 is not set | ||
850 | # CONFIG_NLS_CODEPAGE_1250 is not set | ||
851 | # CONFIG_NLS_CODEPAGE_1251 is not set | ||
852 | # CONFIG_NLS_ASCII is not set | ||
853 | CONFIG_NLS_ISO8859_1=y | ||
854 | # CONFIG_NLS_ISO8859_2 is not set | ||
855 | # CONFIG_NLS_ISO8859_3 is not set | ||
856 | # CONFIG_NLS_ISO8859_4 is not set | ||
857 | # CONFIG_NLS_ISO8859_5 is not set | ||
858 | # CONFIG_NLS_ISO8859_6 is not set | ||
859 | # CONFIG_NLS_ISO8859_7 is not set | ||
860 | # CONFIG_NLS_ISO8859_9 is not set | ||
861 | # CONFIG_NLS_ISO8859_13 is not set | ||
862 | # CONFIG_NLS_ISO8859_14 is not set | ||
863 | # CONFIG_NLS_ISO8859_15 is not set | ||
864 | # CONFIG_NLS_KOI8_R is not set | ||
865 | # CONFIG_NLS_KOI8_U is not set | ||
866 | # CONFIG_NLS_UTF8 is not set | ||
867 | |||
868 | # | ||
869 | # Kernel hacking | ||
870 | # | ||
871 | # CONFIG_PRINTK_TIME is not set | ||
872 | # CONFIG_ENABLE_WARN_DEPRECATED is not set | ||
873 | # CONFIG_ENABLE_MUST_CHECK is not set | ||
874 | CONFIG_FRAME_WARN=1024 | ||
875 | # CONFIG_MAGIC_SYSRQ is not set | ||
876 | # CONFIG_STRIP_ASM_SYMS is not set | ||
877 | # CONFIG_UNUSED_SYMBOLS is not set | ||
878 | CONFIG_DEBUG_FS=y | ||
879 | # CONFIG_HEADERS_CHECK is not set | ||
880 | # CONFIG_DEBUG_KERNEL is not set | ||
881 | CONFIG_DEBUG_BUGVERBOSE=y | ||
882 | CONFIG_DEBUG_MEMORY_INIT=y | ||
883 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
884 | # CONFIG_LATENCYTOP is not set | ||
885 | # CONFIG_SYSCTL_SYSCALL_CHECK is not set | ||
886 | CONFIG_HAVE_FUNCTION_TRACER=y | ||
887 | CONFIG_TRACING_SUPPORT=y | ||
888 | # CONFIG_FTRACE is not set | ||
889 | # CONFIG_DYNAMIC_DEBUG is not set | ||
890 | # CONFIG_SAMPLES is not set | ||
891 | CONFIG_HAVE_ARCH_KGDB=y | ||
892 | CONFIG_ARM_UNWIND=y | ||
893 | # CONFIG_DEBUG_USER is not set | ||
894 | |||
895 | # | ||
896 | # Security options | ||
897 | # | ||
898 | # CONFIG_KEYS is not set | ||
899 | # CONFIG_SECURITY is not set | ||
900 | # CONFIG_SECURITYFS is not set | ||
901 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | ||
902 | # CONFIG_CRYPTO is not set | ||
903 | # CONFIG_BINARY_PRINTF is not set | ||
904 | |||
905 | # | ||
906 | # Library routines | ||
907 | # | ||
908 | CONFIG_GENERIC_FIND_LAST_BIT=y | ||
909 | # CONFIG_CRC_CCITT is not set | ||
910 | # CONFIG_CRC16 is not set | ||
911 | # CONFIG_CRC_T10DIF is not set | ||
912 | # CONFIG_CRC_ITU_T is not set | ||
913 | # CONFIG_CRC32 is not set | ||
914 | # CONFIG_CRC7 is not set | ||
915 | # CONFIG_LIBCRC32C is not set | ||
916 | CONFIG_ZLIB_INFLATE=y | ||
917 | CONFIG_DECOMPRESS_GZIP=y | ||
918 | CONFIG_DECOMPRESS_BZIP2=y | ||
919 | CONFIG_DECOMPRESS_LZMA=y | ||
920 | CONFIG_HAS_IOMEM=y | ||
921 | CONFIG_HAS_IOPORT=y | ||
922 | CONFIG_HAS_DMA=y | ||
diff --git a/arch/arm/configs/u8500_defconfig b/arch/arm/configs/u8500_defconfig new file mode 100644 index 000000000000..15fde22ce3f3 --- /dev/null +++ b/arch/arm/configs/u8500_defconfig | |||
@@ -0,0 +1,680 @@ | |||
1 | # | ||
2 | # Automatically generated make config: don't edit | ||
3 | # Linux kernel version: 2.6.32-rc8 | ||
4 | # Mon Nov 30 11:11:29 2009 | ||
5 | # | ||
6 | CONFIG_ARM=y | ||
7 | CONFIG_SYS_SUPPORTS_APM_EMULATION=y | ||
8 | CONFIG_GENERIC_TIME=y | ||
9 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
10 | CONFIG_GENERIC_HARDIRQS=y | ||
11 | CONFIG_STACKTRACE_SUPPORT=y | ||
12 | CONFIG_LOCKDEP_SUPPORT=y | ||
13 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
14 | CONFIG_HARDIRQS_SW_RESEND=y | ||
15 | CONFIG_GENERIC_IRQ_PROBE=y | ||
16 | CONFIG_GENERIC_LOCKBREAK=y | ||
17 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
18 | CONFIG_GENERIC_HWEIGHT=y | ||
19 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
20 | CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y | ||
21 | CONFIG_VECTORS_BASE=0xffff0000 | ||
22 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
23 | CONFIG_CONSTRUCTORS=y | ||
24 | |||
25 | # | ||
26 | # General setup | ||
27 | # | ||
28 | CONFIG_EXPERIMENTAL=y | ||
29 | CONFIG_LOCK_KERNEL=y | ||
30 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
31 | CONFIG_LOCALVERSION="" | ||
32 | CONFIG_LOCALVERSION_AUTO=y | ||
33 | # CONFIG_SWAP is not set | ||
34 | CONFIG_SYSVIPC=y | ||
35 | CONFIG_SYSVIPC_SYSCTL=y | ||
36 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
37 | |||
38 | # | ||
39 | # RCU Subsystem | ||
40 | # | ||
41 | CONFIG_TREE_RCU=y | ||
42 | # CONFIG_TREE_PREEMPT_RCU is not set | ||
43 | # CONFIG_RCU_TRACE is not set | ||
44 | CONFIG_RCU_FANOUT=32 | ||
45 | # CONFIG_RCU_FANOUT_EXACT is not set | ||
46 | # CONFIG_TREE_RCU_TRACE is not set | ||
47 | # CONFIG_IKCONFIG is not set | ||
48 | CONFIG_LOG_BUF_SHIFT=17 | ||
49 | CONFIG_GROUP_SCHED=y | ||
50 | CONFIG_FAIR_GROUP_SCHED=y | ||
51 | CONFIG_RT_GROUP_SCHED=y | ||
52 | CONFIG_USER_SCHED=y | ||
53 | # CONFIG_CGROUP_SCHED is not set | ||
54 | # CONFIG_CGROUPS is not set | ||
55 | CONFIG_SYSFS_DEPRECATED=y | ||
56 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
57 | # CONFIG_RELAY is not set | ||
58 | CONFIG_NAMESPACES=y | ||
59 | # CONFIG_UTS_NS is not set | ||
60 | # CONFIG_IPC_NS is not set | ||
61 | # CONFIG_USER_NS is not set | ||
62 | # CONFIG_PID_NS is not set | ||
63 | CONFIG_BLK_DEV_INITRD=y | ||
64 | CONFIG_INITRAMFS_SOURCE="" | ||
65 | CONFIG_RD_GZIP=y | ||
66 | CONFIG_RD_BZIP2=y | ||
67 | CONFIG_RD_LZMA=y | ||
68 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
69 | CONFIG_SYSCTL=y | ||
70 | CONFIG_ANON_INODES=y | ||
71 | # CONFIG_EMBEDDED is not set | ||
72 | CONFIG_UID16=y | ||
73 | CONFIG_SYSCTL_SYSCALL=y | ||
74 | CONFIG_KALLSYMS=y | ||
75 | CONFIG_KALLSYMS_ALL=y | ||
76 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
77 | CONFIG_HOTPLUG=y | ||
78 | CONFIG_PRINTK=y | ||
79 | CONFIG_BUG=y | ||
80 | CONFIG_ELF_CORE=y | ||
81 | CONFIG_BASE_FULL=y | ||
82 | CONFIG_FUTEX=y | ||
83 | CONFIG_EPOLL=y | ||
84 | CONFIG_SIGNALFD=y | ||
85 | CONFIG_TIMERFD=y | ||
86 | CONFIG_EVENTFD=y | ||
87 | CONFIG_SHMEM=y | ||
88 | CONFIG_AIO=y | ||
89 | |||
90 | # | ||
91 | # Kernel Performance Events And Counters | ||
92 | # | ||
93 | CONFIG_VM_EVENT_COUNTERS=y | ||
94 | CONFIG_SLUB_DEBUG=y | ||
95 | CONFIG_COMPAT_BRK=y | ||
96 | # CONFIG_SLAB is not set | ||
97 | CONFIG_SLUB=y | ||
98 | # CONFIG_SLOB is not set | ||
99 | # CONFIG_PROFILING is not set | ||
100 | CONFIG_HAVE_OPROFILE=y | ||
101 | # CONFIG_KPROBES is not set | ||
102 | CONFIG_HAVE_KPROBES=y | ||
103 | CONFIG_HAVE_KRETPROBES=y | ||
104 | CONFIG_USE_GENERIC_SMP_HELPERS=y | ||
105 | |||
106 | # | ||
107 | # GCOV-based kernel profiling | ||
108 | # | ||
109 | # CONFIG_SLOW_WORK is not set | ||
110 | CONFIG_HAVE_GENERIC_DMA_COHERENT=y | ||
111 | CONFIG_SLABINFO=y | ||
112 | CONFIG_RT_MUTEXES=y | ||
113 | CONFIG_BASE_SMALL=0 | ||
114 | CONFIG_MODULES=y | ||
115 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
116 | CONFIG_MODULE_UNLOAD=y | ||
117 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
118 | # CONFIG_MODVERSIONS is not set | ||
119 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
120 | CONFIG_STOP_MACHINE=y | ||
121 | CONFIG_BLOCK=y | ||
122 | # CONFIG_LBDAF is not set | ||
123 | # CONFIG_BLK_DEV_BSG is not set | ||
124 | # CONFIG_BLK_DEV_INTEGRITY is not set | ||
125 | |||
126 | # | ||
127 | # IO Schedulers | ||
128 | # | ||
129 | CONFIG_IOSCHED_NOOP=y | ||
130 | CONFIG_IOSCHED_AS=y | ||
131 | CONFIG_IOSCHED_DEADLINE=y | ||
132 | CONFIG_IOSCHED_CFQ=y | ||
133 | # CONFIG_DEFAULT_AS is not set | ||
134 | # CONFIG_DEFAULT_DEADLINE is not set | ||
135 | CONFIG_DEFAULT_CFQ=y | ||
136 | # CONFIG_DEFAULT_NOOP is not set | ||
137 | CONFIG_DEFAULT_IOSCHED="cfq" | ||
138 | # CONFIG_FREEZER is not set | ||
139 | |||
140 | # | ||
141 | # System Type | ||
142 | # | ||
143 | CONFIG_MMU=y | ||
144 | # CONFIG_ARCH_AAEC2000 is not set | ||
145 | # CONFIG_ARCH_INTEGRATOR is not set | ||
146 | # CONFIG_ARCH_REALVIEW is not set | ||
147 | # CONFIG_ARCH_VERSATILE is not set | ||
148 | # CONFIG_ARCH_AT91 is not set | ||
149 | # CONFIG_ARCH_CLPS711X is not set | ||
150 | # CONFIG_ARCH_GEMINI is not set | ||
151 | # CONFIG_ARCH_EBSA110 is not set | ||
152 | # CONFIG_ARCH_EP93XX is not set | ||
153 | # CONFIG_ARCH_FOOTBRIDGE is not set | ||
154 | # CONFIG_ARCH_MXC is not set | ||
155 | # CONFIG_ARCH_STMP3XXX is not set | ||
156 | # CONFIG_ARCH_NETX is not set | ||
157 | # CONFIG_ARCH_H720X is not set | ||
158 | # CONFIG_ARCH_NOMADIK is not set | ||
159 | # CONFIG_ARCH_IOP13XX is not set | ||
160 | # CONFIG_ARCH_IOP32X is not set | ||
161 | # CONFIG_ARCH_IOP33X is not set | ||
162 | # CONFIG_ARCH_IXP23XX is not set | ||
163 | # CONFIG_ARCH_IXP2000 is not set | ||
164 | # CONFIG_ARCH_IXP4XX is not set | ||
165 | # CONFIG_ARCH_L7200 is not set | ||
166 | # CONFIG_ARCH_KIRKWOOD is not set | ||
167 | # CONFIG_ARCH_LOKI is not set | ||
168 | # CONFIG_ARCH_MV78XX0 is not set | ||
169 | # CONFIG_ARCH_ORION5X is not set | ||
170 | # CONFIG_ARCH_MMP is not set | ||
171 | # CONFIG_ARCH_KS8695 is not set | ||
172 | # CONFIG_ARCH_NS9XXX is not set | ||
173 | # CONFIG_ARCH_W90X900 is not set | ||
174 | # CONFIG_ARCH_PNX4008 is not set | ||
175 | # CONFIG_ARCH_PXA is not set | ||
176 | # CONFIG_ARCH_MSM is not set | ||
177 | # CONFIG_ARCH_RPC is not set | ||
178 | # CONFIG_ARCH_SA1100 is not set | ||
179 | # CONFIG_ARCH_S3C2410 is not set | ||
180 | # CONFIG_ARCH_S3C64XX is not set | ||
181 | # CONFIG_ARCH_S5PC1XX is not set | ||
182 | # CONFIG_ARCH_SHARK is not set | ||
183 | # CONFIG_ARCH_LH7A40X is not set | ||
184 | # CONFIG_ARCH_U300 is not set | ||
185 | # CONFIG_ARCH_DAVINCI is not set | ||
186 | # CONFIG_ARCH_OMAP is not set | ||
187 | # CONFIG_ARCH_BCMRING is not set | ||
188 | CONFIG_ARCH_U8500=y | ||
189 | CONFIG_PLAT_NOMADIK=y | ||
190 | CONFIG_HAS_MTU=y | ||
191 | |||
192 | # | ||
193 | # ST-Ericsson platform type | ||
194 | # | ||
195 | |||
196 | # | ||
197 | # ST-Ericsson Multicore Mobile Platforms | ||
198 | # | ||
199 | CONFIG_MACH_U8500_MOP=y | ||
200 | |||
201 | # | ||
202 | # Processor Type | ||
203 | # | ||
204 | CONFIG_CPU_32=y | ||
205 | CONFIG_CPU_32v6K=y | ||
206 | CONFIG_CPU_V7=y | ||
207 | CONFIG_CPU_32v7=y | ||
208 | CONFIG_CPU_ABRT_EV7=y | ||
209 | CONFIG_CPU_PABRT_V7=y | ||
210 | CONFIG_CPU_CACHE_V7=y | ||
211 | CONFIG_CPU_CACHE_VIPT=y | ||
212 | CONFIG_CPU_COPY_V6=y | ||
213 | CONFIG_CPU_TLB_V7=y | ||
214 | CONFIG_CPU_HAS_ASID=y | ||
215 | CONFIG_CPU_CP15=y | ||
216 | CONFIG_CPU_CP15_MMU=y | ||
217 | |||
218 | # | ||
219 | # Processor Features | ||
220 | # | ||
221 | CONFIG_ARM_THUMB=y | ||
222 | # CONFIG_ARM_THUMBEE is not set | ||
223 | # CONFIG_CPU_ICACHE_DISABLE is not set | ||
224 | # CONFIG_CPU_DCACHE_DISABLE is not set | ||
225 | # CONFIG_CPU_BPREDICT_DISABLE is not set | ||
226 | CONFIG_HAS_TLS_REG=y | ||
227 | CONFIG_ARM_L1_CACHE_SHIFT=5 | ||
228 | # CONFIG_ARM_ERRATA_430973 is not set | ||
229 | # CONFIG_ARM_ERRATA_458693 is not set | ||
230 | # CONFIG_ARM_ERRATA_460075 is not set | ||
231 | CONFIG_ARM_GIC=y | ||
232 | CONFIG_COMMON_CLKDEV=y | ||
233 | |||
234 | # | ||
235 | # Bus support | ||
236 | # | ||
237 | CONFIG_ARM_AMBA=y | ||
238 | # CONFIG_PCI_SYSCALL is not set | ||
239 | # CONFIG_ARCH_SUPPORTS_MSI is not set | ||
240 | # CONFIG_PCCARD is not set | ||
241 | |||
242 | # | ||
243 | # Kernel Features | ||
244 | # | ||
245 | # CONFIG_NO_HZ is not set | ||
246 | # CONFIG_HIGH_RES_TIMERS is not set | ||
247 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
248 | CONFIG_SMP=y | ||
249 | CONFIG_HAVE_ARM_SCU=y | ||
250 | CONFIG_HAVE_ARM_TWD=y | ||
251 | CONFIG_VMSPLIT_3G=y | ||
252 | # CONFIG_VMSPLIT_2G is not set | ||
253 | # CONFIG_VMSPLIT_1G is not set | ||
254 | CONFIG_PAGE_OFFSET=0xC0000000 | ||
255 | CONFIG_NR_CPUS=2 | ||
256 | # CONFIG_HOTPLUG_CPU is not set | ||
257 | CONFIG_LOCAL_TIMERS=y | ||
258 | # CONFIG_PREEMPT_NONE is not set | ||
259 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
260 | CONFIG_PREEMPT=y | ||
261 | CONFIG_HZ=100 | ||
262 | # CONFIG_THUMB2_KERNEL is not set | ||
263 | CONFIG_AEABI=y | ||
264 | CONFIG_OABI_COMPAT=y | ||
265 | # CONFIG_ARCH_SPARSEMEM_DEFAULT is not set | ||
266 | # CONFIG_ARCH_SELECT_MEMORY_MODEL is not set | ||
267 | # CONFIG_HIGHMEM is not set | ||
268 | CONFIG_SELECT_MEMORY_MODEL=y | ||
269 | CONFIG_FLATMEM_MANUAL=y | ||
270 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
271 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
272 | CONFIG_FLATMEM=y | ||
273 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
274 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
275 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
276 | # CONFIG_PHYS_ADDR_T_64BIT is not set | ||
277 | CONFIG_ZONE_DMA_FLAG=0 | ||
278 | CONFIG_VIRT_TO_BUS=y | ||
279 | CONFIG_HAVE_MLOCK=y | ||
280 | CONFIG_HAVE_MLOCKED_PAGE_BIT=y | ||
281 | # CONFIG_KSM is not set | ||
282 | CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 | ||
283 | CONFIG_ALIGNMENT_TRAP=y | ||
284 | # CONFIG_UACCESS_WITH_MEMCPY is not set | ||
285 | |||
286 | # | ||
287 | # Boot options | ||
288 | # | ||
289 | CONFIG_ZBOOT_ROM_TEXT=0 | ||
290 | CONFIG_ZBOOT_ROM_BSS=0 | ||
291 | CONFIG_CMDLINE="root=/dev/ram0 console=ttyAMA2,115200n8" | ||
292 | # CONFIG_XIP_KERNEL is not set | ||
293 | # CONFIG_KEXEC is not set | ||
294 | |||
295 | # | ||
296 | # CPU Power Management | ||
297 | # | ||
298 | # CONFIG_CPU_IDLE is not set | ||
299 | |||
300 | # | ||
301 | # Floating point emulation | ||
302 | # | ||
303 | |||
304 | # | ||
305 | # At least one emulation must be selected | ||
306 | # | ||
307 | # CONFIG_FPE_NWFPE is not set | ||
308 | # CONFIG_FPE_FASTFPE is not set | ||
309 | CONFIG_VFP=y | ||
310 | CONFIG_VFPv3=y | ||
311 | CONFIG_NEON=y | ||
312 | |||
313 | # | ||
314 | # Userspace binary formats | ||
315 | # | ||
316 | CONFIG_BINFMT_ELF=y | ||
317 | # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set | ||
318 | CONFIG_HAVE_AOUT=y | ||
319 | # CONFIG_BINFMT_AOUT is not set | ||
320 | # CONFIG_BINFMT_MISC is not set | ||
321 | |||
322 | # | ||
323 | # Power management options | ||
324 | # | ||
325 | # CONFIG_PM is not set | ||
326 | CONFIG_ARCH_SUSPEND_POSSIBLE=y | ||
327 | # CONFIG_NET is not set | ||
328 | |||
329 | # | ||
330 | # Device Drivers | ||
331 | # | ||
332 | |||
333 | # | ||
334 | # Generic Driver Options | ||
335 | # | ||
336 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
337 | # CONFIG_DEVTMPFS is not set | ||
338 | CONFIG_STANDALONE=y | ||
339 | CONFIG_PREVENT_FIRMWARE_BUILD=y | ||
340 | CONFIG_FW_LOADER=y | ||
341 | CONFIG_FIRMWARE_IN_KERNEL=y | ||
342 | CONFIG_EXTRA_FIRMWARE="" | ||
343 | # CONFIG_DEBUG_DRIVER is not set | ||
344 | # CONFIG_DEBUG_DEVRES is not set | ||
345 | # CONFIG_SYS_HYPERVISOR is not set | ||
346 | # CONFIG_MTD is not set | ||
347 | # CONFIG_PARPORT is not set | ||
348 | CONFIG_BLK_DEV=y | ||
349 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
350 | # CONFIG_BLK_DEV_LOOP is not set | ||
351 | CONFIG_BLK_DEV_RAM=y | ||
352 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
353 | CONFIG_BLK_DEV_RAM_SIZE=65536 | ||
354 | # CONFIG_BLK_DEV_XIP is not set | ||
355 | # CONFIG_CDROM_PKTCDVD is not set | ||
356 | # CONFIG_MISC_DEVICES is not set | ||
357 | CONFIG_HAVE_IDE=y | ||
358 | # CONFIG_IDE is not set | ||
359 | |||
360 | # | ||
361 | # SCSI device support | ||
362 | # | ||
363 | # CONFIG_RAID_ATTRS is not set | ||
364 | # CONFIG_SCSI is not set | ||
365 | # CONFIG_SCSI_DMA is not set | ||
366 | # CONFIG_SCSI_NETLINK is not set | ||
367 | # CONFIG_ATA is not set | ||
368 | # CONFIG_MD is not set | ||
369 | # CONFIG_PHONE is not set | ||
370 | |||
371 | # | ||
372 | # Input device support | ||
373 | # | ||
374 | CONFIG_INPUT=y | ||
375 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
376 | # CONFIG_INPUT_POLLDEV is not set | ||
377 | |||
378 | # | ||
379 | # Userland interfaces | ||
380 | # | ||
381 | CONFIG_INPUT_MOUSEDEV=y | ||
382 | # CONFIG_INPUT_MOUSEDEV_PSAUX is not set | ||
383 | CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 | ||
384 | CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 | ||
385 | # CONFIG_INPUT_JOYDEV is not set | ||
386 | CONFIG_INPUT_EVDEV=y | ||
387 | # CONFIG_INPUT_EVBUG is not set | ||
388 | |||
389 | # | ||
390 | # Input Device Drivers | ||
391 | # | ||
392 | # CONFIG_INPUT_KEYBOARD is not set | ||
393 | # CONFIG_INPUT_MOUSE is not set | ||
394 | # CONFIG_INPUT_JOYSTICK is not set | ||
395 | # CONFIG_INPUT_TABLET is not set | ||
396 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
397 | # CONFIG_INPUT_MISC is not set | ||
398 | |||
399 | # | ||
400 | # Hardware I/O ports | ||
401 | # | ||
402 | # CONFIG_SERIO is not set | ||
403 | # CONFIG_GAMEPORT is not set | ||
404 | |||
405 | # | ||
406 | # Character devices | ||
407 | # | ||
408 | CONFIG_VT=y | ||
409 | CONFIG_CONSOLE_TRANSLATIONS=y | ||
410 | CONFIG_VT_CONSOLE=y | ||
411 | CONFIG_HW_CONSOLE=y | ||
412 | CONFIG_VT_HW_CONSOLE_BINDING=y | ||
413 | CONFIG_DEVKMEM=y | ||
414 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
415 | |||
416 | # | ||
417 | # Serial drivers | ||
418 | # | ||
419 | # CONFIG_SERIAL_8250 is not set | ||
420 | |||
421 | # | ||
422 | # Non-8250 serial port support | ||
423 | # | ||
424 | # CONFIG_SERIAL_AMBA_PL010 is not set | ||
425 | CONFIG_SERIAL_AMBA_PL011=y | ||
426 | CONFIG_SERIAL_AMBA_PL011_CONSOLE=y | ||
427 | # CONFIG_SERIAL_MAX3100 is not set | ||
428 | CONFIG_SERIAL_CORE=y | ||
429 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
430 | CONFIG_UNIX98_PTYS=y | ||
431 | # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set | ||
432 | # CONFIG_LEGACY_PTYS is not set | ||
433 | # CONFIG_IPMI_HANDLER is not set | ||
434 | # CONFIG_HW_RANDOM is not set | ||
435 | # CONFIG_R3964 is not set | ||
436 | # CONFIG_RAW_DRIVER is not set | ||
437 | # CONFIG_TCG_TPM is not set | ||
438 | # CONFIG_I2C is not set | ||
439 | CONFIG_SPI=y | ||
440 | # CONFIG_SPI_DEBUG is not set | ||
441 | CONFIG_SPI_MASTER=y | ||
442 | |||
443 | # | ||
444 | # SPI Master Controller Drivers | ||
445 | # | ||
446 | # CONFIG_SPI_BITBANG is not set | ||
447 | CONFIG_SPI_PL022=y | ||
448 | |||
449 | # | ||
450 | # SPI Protocol Masters | ||
451 | # | ||
452 | # CONFIG_SPI_SPIDEV is not set | ||
453 | # CONFIG_SPI_TLE62X0 is not set | ||
454 | |||
455 | # | ||
456 | # PPS support | ||
457 | # | ||
458 | # CONFIG_PPS is not set | ||
459 | # CONFIG_W1 is not set | ||
460 | # CONFIG_POWER_SUPPLY is not set | ||
461 | # CONFIG_HWMON is not set | ||
462 | # CONFIG_THERMAL is not set | ||
463 | # CONFIG_WATCHDOG is not set | ||
464 | CONFIG_SSB_POSSIBLE=y | ||
465 | |||
466 | # | ||
467 | # Sonics Silicon Backplane | ||
468 | # | ||
469 | # CONFIG_SSB is not set | ||
470 | |||
471 | # | ||
472 | # Multifunction device drivers | ||
473 | # | ||
474 | # CONFIG_MFD_CORE is not set | ||
475 | # CONFIG_MFD_SM501 is not set | ||
476 | # CONFIG_HTC_PASIC3 is not set | ||
477 | # CONFIG_MFD_TMIO is not set | ||
478 | # CONFIG_MFD_MC13783 is not set | ||
479 | # CONFIG_EZX_PCAP is not set | ||
480 | # CONFIG_REGULATOR is not set | ||
481 | # CONFIG_MEDIA_SUPPORT is not set | ||
482 | |||
483 | # | ||
484 | # Graphics support | ||
485 | # | ||
486 | # CONFIG_VGASTATE is not set | ||
487 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
488 | # CONFIG_FB is not set | ||
489 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
490 | |||
491 | # | ||
492 | # Display device support | ||
493 | # | ||
494 | # CONFIG_DISPLAY_SUPPORT is not set | ||
495 | |||
496 | # | ||
497 | # Console display driver support | ||
498 | # | ||
499 | # CONFIG_VGA_CONSOLE is not set | ||
500 | CONFIG_DUMMY_CONSOLE=y | ||
501 | # CONFIG_SOUND is not set | ||
502 | # CONFIG_HID_SUPPORT is not set | ||
503 | # CONFIG_USB_SUPPORT is not set | ||
504 | # CONFIG_MMC is not set | ||
505 | # CONFIG_MEMSTICK is not set | ||
506 | # CONFIG_NEW_LEDS is not set | ||
507 | # CONFIG_ACCESSIBILITY is not set | ||
508 | CONFIG_RTC_LIB=y | ||
509 | # CONFIG_RTC_CLASS is not set | ||
510 | # CONFIG_DMADEVICES is not set | ||
511 | # CONFIG_AUXDISPLAY is not set | ||
512 | # CONFIG_UIO is not set | ||
513 | |||
514 | # | ||
515 | # TI VLYNQ | ||
516 | # | ||
517 | # CONFIG_STAGING is not set | ||
518 | |||
519 | # | ||
520 | # File systems | ||
521 | # | ||
522 | CONFIG_EXT2_FS=y | ||
523 | CONFIG_EXT2_FS_XATTR=y | ||
524 | CONFIG_EXT2_FS_POSIX_ACL=y | ||
525 | CONFIG_EXT2_FS_SECURITY=y | ||
526 | # CONFIG_EXT2_FS_XIP is not set | ||
527 | # CONFIG_EXT3_FS is not set | ||
528 | # CONFIG_EXT4_FS is not set | ||
529 | CONFIG_FS_MBCACHE=y | ||
530 | # CONFIG_REISERFS_FS is not set | ||
531 | # CONFIG_JFS_FS is not set | ||
532 | CONFIG_FS_POSIX_ACL=y | ||
533 | # CONFIG_XFS_FS is not set | ||
534 | # CONFIG_BTRFS_FS is not set | ||
535 | # CONFIG_NILFS2_FS is not set | ||
536 | CONFIG_FILE_LOCKING=y | ||
537 | CONFIG_FSNOTIFY=y | ||
538 | CONFIG_DNOTIFY=y | ||
539 | CONFIG_INOTIFY=y | ||
540 | CONFIG_INOTIFY_USER=y | ||
541 | # CONFIG_QUOTA is not set | ||
542 | # CONFIG_AUTOFS_FS is not set | ||
543 | # CONFIG_AUTOFS4_FS is not set | ||
544 | # CONFIG_FUSE_FS is not set | ||
545 | CONFIG_GENERIC_ACL=y | ||
546 | |||
547 | # | ||
548 | # Caches | ||
549 | # | ||
550 | # CONFIG_FSCACHE is not set | ||
551 | |||
552 | # | ||
553 | # CD-ROM/DVD Filesystems | ||
554 | # | ||
555 | # CONFIG_ISO9660_FS is not set | ||
556 | # CONFIG_UDF_FS is not set | ||
557 | |||
558 | # | ||
559 | # DOS/FAT/NT Filesystems | ||
560 | # | ||
561 | # CONFIG_MSDOS_FS is not set | ||
562 | # CONFIG_VFAT_FS is not set | ||
563 | # CONFIG_NTFS_FS is not set | ||
564 | |||
565 | # | ||
566 | # Pseudo filesystems | ||
567 | # | ||
568 | CONFIG_PROC_FS=y | ||
569 | CONFIG_PROC_SYSCTL=y | ||
570 | CONFIG_PROC_PAGE_MONITOR=y | ||
571 | CONFIG_SYSFS=y | ||
572 | CONFIG_TMPFS=y | ||
573 | CONFIG_TMPFS_POSIX_ACL=y | ||
574 | # CONFIG_HUGETLB_PAGE is not set | ||
575 | CONFIG_CONFIGFS_FS=m | ||
576 | # CONFIG_MISC_FILESYSTEMS is not set | ||
577 | |||
578 | # | ||
579 | # Partition Types | ||
580 | # | ||
581 | # CONFIG_PARTITION_ADVANCED is not set | ||
582 | CONFIG_MSDOS_PARTITION=y | ||
583 | # CONFIG_NLS is not set | ||
584 | |||
585 | # | ||
586 | # Kernel hacking | ||
587 | # | ||
588 | # CONFIG_PRINTK_TIME is not set | ||
589 | CONFIG_ENABLE_WARN_DEPRECATED=y | ||
590 | CONFIG_ENABLE_MUST_CHECK=y | ||
591 | CONFIG_FRAME_WARN=1024 | ||
592 | CONFIG_MAGIC_SYSRQ=y | ||
593 | # CONFIG_STRIP_ASM_SYMS is not set | ||
594 | # CONFIG_UNUSED_SYMBOLS is not set | ||
595 | # CONFIG_DEBUG_FS is not set | ||
596 | # CONFIG_HEADERS_CHECK is not set | ||
597 | CONFIG_DEBUG_KERNEL=y | ||
598 | # CONFIG_DEBUG_SHIRQ is not set | ||
599 | CONFIG_DETECT_SOFTLOCKUP=y | ||
600 | # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set | ||
601 | CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 | ||
602 | CONFIG_DETECT_HUNG_TASK=y | ||
603 | # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set | ||
604 | CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 | ||
605 | # CONFIG_SCHED_DEBUG is not set | ||
606 | # CONFIG_SCHEDSTATS is not set | ||
607 | # CONFIG_TIMER_STATS is not set | ||
608 | # CONFIG_DEBUG_OBJECTS is not set | ||
609 | # CONFIG_SLUB_DEBUG_ON is not set | ||
610 | # CONFIG_SLUB_STATS is not set | ||
611 | # CONFIG_DEBUG_KMEMLEAK is not set | ||
612 | # CONFIG_DEBUG_PREEMPT is not set | ||
613 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
614 | # CONFIG_RT_MUTEX_TESTER is not set | ||
615 | # CONFIG_DEBUG_SPINLOCK is not set | ||
616 | # CONFIG_DEBUG_MUTEXES is not set | ||
617 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
618 | # CONFIG_PROVE_LOCKING is not set | ||
619 | # CONFIG_LOCK_STAT is not set | ||
620 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | ||
621 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
622 | # CONFIG_DEBUG_KOBJECT is not set | ||
623 | CONFIG_DEBUG_BUGVERBOSE=y | ||
624 | CONFIG_DEBUG_INFO=y | ||
625 | # CONFIG_DEBUG_VM is not set | ||
626 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
627 | CONFIG_DEBUG_MEMORY_INIT=y | ||
628 | # CONFIG_DEBUG_LIST is not set | ||
629 | # CONFIG_DEBUG_SG is not set | ||
630 | # CONFIG_DEBUG_NOTIFIERS is not set | ||
631 | # CONFIG_DEBUG_CREDENTIALS is not set | ||
632 | # CONFIG_BOOT_PRINTK_DELAY is not set | ||
633 | # CONFIG_RCU_TORTURE_TEST is not set | ||
634 | # CONFIG_RCU_CPU_STALL_DETECTOR is not set | ||
635 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
636 | # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set | ||
637 | # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set | ||
638 | # CONFIG_FAULT_INJECTION is not set | ||
639 | # CONFIG_SYSCTL_SYSCALL_CHECK is not set | ||
640 | # CONFIG_PAGE_POISONING is not set | ||
641 | CONFIG_HAVE_FUNCTION_TRACER=y | ||
642 | CONFIG_TRACING_SUPPORT=y | ||
643 | # CONFIG_FTRACE is not set | ||
644 | # CONFIG_SAMPLES is not set | ||
645 | CONFIG_HAVE_ARCH_KGDB=y | ||
646 | # CONFIG_KGDB is not set | ||
647 | CONFIG_ARM_UNWIND=y | ||
648 | CONFIG_DEBUG_USER=y | ||
649 | CONFIG_DEBUG_ERRORS=y | ||
650 | # CONFIG_DEBUG_STACK_USAGE is not set | ||
651 | # CONFIG_DEBUG_LL is not set | ||
652 | |||
653 | # | ||
654 | # Security options | ||
655 | # | ||
656 | # CONFIG_KEYS is not set | ||
657 | # CONFIG_SECURITY is not set | ||
658 | # CONFIG_SECURITYFS is not set | ||
659 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | ||
660 | # CONFIG_CRYPTO is not set | ||
661 | # CONFIG_BINARY_PRINTF is not set | ||
662 | |||
663 | # | ||
664 | # Library routines | ||
665 | # | ||
666 | CONFIG_GENERIC_FIND_LAST_BIT=y | ||
667 | # CONFIG_CRC_CCITT is not set | ||
668 | # CONFIG_CRC16 is not set | ||
669 | CONFIG_CRC_T10DIF=m | ||
670 | # CONFIG_CRC_ITU_T is not set | ||
671 | # CONFIG_CRC32 is not set | ||
672 | # CONFIG_CRC7 is not set | ||
673 | # CONFIG_LIBCRC32C is not set | ||
674 | CONFIG_ZLIB_INFLATE=y | ||
675 | CONFIG_DECOMPRESS_GZIP=y | ||
676 | CONFIG_DECOMPRESS_BZIP2=y | ||
677 | CONFIG_DECOMPRESS_LZMA=y | ||
678 | CONFIG_HAS_IOMEM=y | ||
679 | CONFIG_HAS_IOPORT=y | ||
680 | CONFIG_HAS_DMA=y | ||
diff --git a/arch/arm/include/asm/cacheflush.h b/arch/arm/include/asm/cacheflush.h index 3d0cdd21b882..9fd6d3ab68c0 100644 --- a/arch/arm/include/asm/cacheflush.h +++ b/arch/arm/include/asm/cacheflush.h | |||
@@ -331,15 +331,15 @@ static inline void outer_flush_range(unsigned long start, unsigned long end) | |||
331 | * Convert calls to our calling convention. | 331 | * Convert calls to our calling convention. |
332 | */ | 332 | */ |
333 | #define flush_cache_all() __cpuc_flush_kern_all() | 333 | #define flush_cache_all() __cpuc_flush_kern_all() |
334 | #ifndef CONFIG_CPU_CACHE_VIPT | 334 | |
335 | static inline void flush_cache_mm(struct mm_struct *mm) | 335 | static inline void vivt_flush_cache_mm(struct mm_struct *mm) |
336 | { | 336 | { |
337 | if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(mm))) | 337 | if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(mm))) |
338 | __cpuc_flush_user_all(); | 338 | __cpuc_flush_user_all(); |
339 | } | 339 | } |
340 | 340 | ||
341 | static inline void | 341 | static inline void |
342 | flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end) | 342 | vivt_flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end) |
343 | { | 343 | { |
344 | if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(vma->vm_mm))) | 344 | if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(vma->vm_mm))) |
345 | __cpuc_flush_user_range(start & PAGE_MASK, PAGE_ALIGN(end), | 345 | __cpuc_flush_user_range(start & PAGE_MASK, PAGE_ALIGN(end), |
@@ -347,7 +347,7 @@ flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long | |||
347 | } | 347 | } |
348 | 348 | ||
349 | static inline void | 349 | static inline void |
350 | flush_cache_page(struct vm_area_struct *vma, unsigned long user_addr, unsigned long pfn) | 350 | vivt_flush_cache_page(struct vm_area_struct *vma, unsigned long user_addr, unsigned long pfn) |
351 | { | 351 | { |
352 | if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(vma->vm_mm))) { | 352 | if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(vma->vm_mm))) { |
353 | unsigned long addr = user_addr & PAGE_MASK; | 353 | unsigned long addr = user_addr & PAGE_MASK; |
@@ -356,7 +356,7 @@ flush_cache_page(struct vm_area_struct *vma, unsigned long user_addr, unsigned l | |||
356 | } | 356 | } |
357 | 357 | ||
358 | static inline void | 358 | static inline void |
359 | flush_ptrace_access(struct vm_area_struct *vma, struct page *page, | 359 | vivt_flush_ptrace_access(struct vm_area_struct *vma, struct page *page, |
360 | unsigned long uaddr, void *kaddr, | 360 | unsigned long uaddr, void *kaddr, |
361 | unsigned long len, int write) | 361 | unsigned long len, int write) |
362 | { | 362 | { |
@@ -365,6 +365,16 @@ flush_ptrace_access(struct vm_area_struct *vma, struct page *page, | |||
365 | __cpuc_coherent_kern_range(addr, addr + len); | 365 | __cpuc_coherent_kern_range(addr, addr + len); |
366 | } | 366 | } |
367 | } | 367 | } |
368 | |||
369 | #ifndef CONFIG_CPU_CACHE_VIPT | ||
370 | #define flush_cache_mm(mm) \ | ||
371 | vivt_flush_cache_mm(mm) | ||
372 | #define flush_cache_range(vma,start,end) \ | ||
373 | vivt_flush_cache_range(vma,start,end) | ||
374 | #define flush_cache_page(vma,addr,pfn) \ | ||
375 | vivt_flush_cache_page(vma,addr,pfn) | ||
376 | #define flush_ptrace_access(vma,page,ua,ka,len,write) \ | ||
377 | vivt_flush_ptrace_access(vma,page,ua,ka,len,write) | ||
368 | #else | 378 | #else |
369 | extern void flush_cache_mm(struct mm_struct *mm); | 379 | extern void flush_cache_mm(struct mm_struct *mm); |
370 | extern void flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end); | 380 | extern void flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end); |
@@ -410,8 +420,6 @@ extern void flush_ptrace_access(struct vm_area_struct *vma, struct page *page, | |||
410 | */ | 420 | */ |
411 | extern void flush_dcache_page(struct page *); | 421 | extern void flush_dcache_page(struct page *); |
412 | 422 | ||
413 | extern void __flush_dcache_page(struct address_space *mapping, struct page *page); | ||
414 | |||
415 | static inline void __flush_icache_all(void) | 423 | static inline void __flush_icache_all(void) |
416 | { | 424 | { |
417 | #ifdef CONFIG_ARM_ERRATA_411920 | 425 | #ifdef CONFIG_ARM_ERRATA_411920 |
diff --git a/arch/arm/include/asm/dma-mapping.h b/arch/arm/include/asm/dma-mapping.h index ff46dfa68a97..a96300bf83fd 100644 --- a/arch/arm/include/asm/dma-mapping.h +++ b/arch/arm/include/asm/dma-mapping.h | |||
@@ -15,20 +15,15 @@ | |||
15 | * must not be used by drivers. | 15 | * must not be used by drivers. |
16 | */ | 16 | */ |
17 | #ifndef __arch_page_to_dma | 17 | #ifndef __arch_page_to_dma |
18 | |||
19 | #if !defined(CONFIG_HIGHMEM) | ||
20 | static inline dma_addr_t page_to_dma(struct device *dev, struct page *page) | 18 | static inline dma_addr_t page_to_dma(struct device *dev, struct page *page) |
21 | { | 19 | { |
22 | return (dma_addr_t)__virt_to_bus((unsigned long)page_address(page)); | 20 | return (dma_addr_t)__pfn_to_bus(page_to_pfn(page)); |
23 | } | 21 | } |
24 | #elif defined(__pfn_to_bus) | 22 | |
25 | static inline dma_addr_t page_to_dma(struct device *dev, struct page *page) | 23 | static inline struct page *dma_to_page(struct device *dev, dma_addr_t addr) |
26 | { | 24 | { |
27 | return (dma_addr_t)__pfn_to_bus(page_to_pfn(page)); | 25 | return pfn_to_page(__bus_to_pfn(addr)); |
28 | } | 26 | } |
29 | #else | ||
30 | #error "this machine class needs to define __arch_page_to_dma to use HIGHMEM" | ||
31 | #endif | ||
32 | 27 | ||
33 | static inline void *dma_to_virt(struct device *dev, dma_addr_t addr) | 28 | static inline void *dma_to_virt(struct device *dev, dma_addr_t addr) |
34 | { | 29 | { |
@@ -45,6 +40,11 @@ static inline dma_addr_t page_to_dma(struct device *dev, struct page *page) | |||
45 | return __arch_page_to_dma(dev, page); | 40 | return __arch_page_to_dma(dev, page); |
46 | } | 41 | } |
47 | 42 | ||
43 | static inline struct page *dma_to_page(struct device *dev, dma_addr_t addr) | ||
44 | { | ||
45 | return __arch_dma_to_page(dev, addr); | ||
46 | } | ||
47 | |||
48 | static inline void *dma_to_virt(struct device *dev, dma_addr_t addr) | 48 | static inline void *dma_to_virt(struct device *dev, dma_addr_t addr) |
49 | { | 49 | { |
50 | return __arch_dma_to_virt(dev, addr); | 50 | return __arch_dma_to_virt(dev, addr); |
@@ -257,9 +257,11 @@ extern int dma_needs_bounce(struct device*, dma_addr_t, size_t); | |||
257 | */ | 257 | */ |
258 | extern dma_addr_t dma_map_single(struct device *, void *, size_t, | 258 | extern dma_addr_t dma_map_single(struct device *, void *, size_t, |
259 | enum dma_data_direction); | 259 | enum dma_data_direction); |
260 | extern void dma_unmap_single(struct device *, dma_addr_t, size_t, | ||
261 | enum dma_data_direction); | ||
260 | extern dma_addr_t dma_map_page(struct device *, struct page *, | 262 | extern dma_addr_t dma_map_page(struct device *, struct page *, |
261 | unsigned long, size_t, enum dma_data_direction); | 263 | unsigned long, size_t, enum dma_data_direction); |
262 | extern void dma_unmap_single(struct device *, dma_addr_t, size_t, | 264 | extern void dma_unmap_page(struct device *, dma_addr_t, size_t, |
263 | enum dma_data_direction); | 265 | enum dma_data_direction); |
264 | 266 | ||
265 | /* | 267 | /* |
@@ -352,7 +354,6 @@ static inline void dma_unmap_single(struct device *dev, dma_addr_t handle, | |||
352 | { | 354 | { |
353 | /* nothing to do */ | 355 | /* nothing to do */ |
354 | } | 356 | } |
355 | #endif /* CONFIG_DMABOUNCE */ | ||
356 | 357 | ||
357 | /** | 358 | /** |
358 | * dma_unmap_page - unmap a buffer previously mapped through dma_map_page() | 359 | * dma_unmap_page - unmap a buffer previously mapped through dma_map_page() |
@@ -371,8 +372,9 @@ static inline void dma_unmap_single(struct device *dev, dma_addr_t handle, | |||
371 | static inline void dma_unmap_page(struct device *dev, dma_addr_t handle, | 372 | static inline void dma_unmap_page(struct device *dev, dma_addr_t handle, |
372 | size_t size, enum dma_data_direction dir) | 373 | size_t size, enum dma_data_direction dir) |
373 | { | 374 | { |
374 | dma_unmap_single(dev, handle, size, dir); | 375 | /* nothing to do */ |
375 | } | 376 | } |
377 | #endif /* CONFIG_DMABOUNCE */ | ||
376 | 378 | ||
377 | /** | 379 | /** |
378 | * dma_sync_single_range_for_cpu | 380 | * dma_sync_single_range_for_cpu |
diff --git a/arch/arm/include/asm/memory.h b/arch/arm/include/asm/memory.h index cefedf062138..5421d82a2572 100644 --- a/arch/arm/include/asm/memory.h +++ b/arch/arm/include/asm/memory.h | |||
@@ -125,8 +125,10 @@ | |||
125 | * private definitions which should NOT be used outside memory.h | 125 | * private definitions which should NOT be used outside memory.h |
126 | * files. Use virt_to_phys/phys_to_virt/__pa/__va instead. | 126 | * files. Use virt_to_phys/phys_to_virt/__pa/__va instead. |
127 | */ | 127 | */ |
128 | #ifndef __virt_to_phys | ||
128 | #define __virt_to_phys(x) ((x) - PAGE_OFFSET + PHYS_OFFSET) | 129 | #define __virt_to_phys(x) ((x) - PAGE_OFFSET + PHYS_OFFSET) |
129 | #define __phys_to_virt(x) ((x) - PHYS_OFFSET + PAGE_OFFSET) | 130 | #define __phys_to_virt(x) ((x) - PHYS_OFFSET + PAGE_OFFSET) |
131 | #endif | ||
130 | 132 | ||
131 | /* | 133 | /* |
132 | * Convert a physical address to a Page Frame Number and back | 134 | * Convert a physical address to a Page Frame Number and back |
@@ -134,6 +136,12 @@ | |||
134 | #define __phys_to_pfn(paddr) ((paddr) >> PAGE_SHIFT) | 136 | #define __phys_to_pfn(paddr) ((paddr) >> PAGE_SHIFT) |
135 | #define __pfn_to_phys(pfn) ((pfn) << PAGE_SHIFT) | 137 | #define __pfn_to_phys(pfn) ((pfn) << PAGE_SHIFT) |
136 | 138 | ||
139 | /* | ||
140 | * Convert a page to/from a physical address | ||
141 | */ | ||
142 | #define page_to_phys(page) (__pfn_to_phys(page_to_pfn(page))) | ||
143 | #define phys_to_page(phys) (pfn_to_page(__phys_to_pfn(phys))) | ||
144 | |||
137 | #ifndef __ASSEMBLY__ | 145 | #ifndef __ASSEMBLY__ |
138 | 146 | ||
139 | /* | 147 | /* |
@@ -194,7 +202,8 @@ static inline void *phys_to_virt(unsigned long x) | |||
194 | #ifndef __virt_to_bus | 202 | #ifndef __virt_to_bus |
195 | #define __virt_to_bus __virt_to_phys | 203 | #define __virt_to_bus __virt_to_phys |
196 | #define __bus_to_virt __phys_to_virt | 204 | #define __bus_to_virt __phys_to_virt |
197 | #define __pfn_to_bus(x) ((x) << PAGE_SHIFT) | 205 | #define __pfn_to_bus(x) __pfn_to_phys(x) |
206 | #define __bus_to_pfn(x) __phys_to_pfn(x) | ||
198 | #endif | 207 | #endif |
199 | 208 | ||
200 | static inline __deprecated unsigned long virt_to_bus(void *x) | 209 | static inline __deprecated unsigned long virt_to_bus(void *x) |
@@ -293,11 +302,6 @@ static inline __deprecated void *bus_to_virt(unsigned long x) | |||
293 | #endif /* !CONFIG_DISCONTIGMEM */ | 302 | #endif /* !CONFIG_DISCONTIGMEM */ |
294 | 303 | ||
295 | /* | 304 | /* |
296 | * For BIO. "will die". Kill me when bio_to_phys() and bvec_to_phys() die. | ||
297 | */ | ||
298 | #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) | ||
299 | |||
300 | /* | ||
301 | * Optional coherency support. Currently used only by selected | 305 | * Optional coherency support. Currently used only by selected |
302 | * Intel XSC3-based systems. | 306 | * Intel XSC3-based systems. |
303 | */ | 307 | */ |
diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h index 201ccaa11f61..11397687f42c 100644 --- a/arch/arm/include/asm/pgtable.h +++ b/arch/arm/include/asm/pgtable.h | |||
@@ -304,13 +304,23 @@ PTE_BIT_FUNC(mkyoung, |= L_PTE_YOUNG); | |||
304 | 304 | ||
305 | static inline pte_t pte_mkspecial(pte_t pte) { return pte; } | 305 | static inline pte_t pte_mkspecial(pte_t pte) { return pte; } |
306 | 306 | ||
307 | #define __pgprot_modify(prot,mask,bits) \ | ||
308 | __pgprot((pgprot_val(prot) & ~(mask)) | (bits)) | ||
309 | |||
307 | /* | 310 | /* |
308 | * Mark the prot value as uncacheable and unbufferable. | 311 | * Mark the prot value as uncacheable and unbufferable. |
309 | */ | 312 | */ |
310 | #define pgprot_noncached(prot) \ | 313 | #define pgprot_noncached(prot) \ |
311 | __pgprot((pgprot_val(prot) & ~L_PTE_MT_MASK) | L_PTE_MT_UNCACHED) | 314 | __pgprot_modify(prot, L_PTE_MT_MASK, L_PTE_MT_UNCACHED) |
312 | #define pgprot_writecombine(prot) \ | 315 | #define pgprot_writecombine(prot) \ |
313 | __pgprot((pgprot_val(prot) & ~L_PTE_MT_MASK) | L_PTE_MT_BUFFERABLE) | 316 | __pgprot_modify(prot, L_PTE_MT_MASK, L_PTE_MT_BUFFERABLE) |
317 | #if __LINUX_ARM_ARCH__ >= 7 | ||
318 | #define pgprot_dmacoherent(prot) \ | ||
319 | __pgprot_modify(prot, L_PTE_MT_MASK|L_PTE_EXEC, L_PTE_MT_BUFFERABLE) | ||
320 | #else | ||
321 | #define pgprot_dmacoherent(prot) \ | ||
322 | __pgprot_modify(prot, L_PTE_MT_MASK|L_PTE_EXEC, L_PTE_MT_UNCACHED) | ||
323 | #endif | ||
314 | 324 | ||
315 | #define pmd_none(pmd) (!pmd_val(pmd)) | 325 | #define pmd_none(pmd) (!pmd_val(pmd)) |
316 | #define pmd_present(pmd) (pmd_val(pmd)) | 326 | #define pmd_present(pmd) (pmd_val(pmd)) |
diff --git a/arch/arm/include/asm/swab.h b/arch/arm/include/asm/swab.h index ca2bf2f6d6ea..9997ad20eff1 100644 --- a/arch/arm/include/asm/swab.h +++ b/arch/arm/include/asm/swab.h | |||
@@ -22,6 +22,24 @@ | |||
22 | # define __SWAB_64_THRU_32__ | 22 | # define __SWAB_64_THRU_32__ |
23 | #endif | 23 | #endif |
24 | 24 | ||
25 | #if defined(__KERNEL__) && __LINUX_ARM_ARCH__ >= 6 | ||
26 | |||
27 | static inline __attribute_const__ __u16 __arch_swab16(__u16 x) | ||
28 | { | ||
29 | __asm__ ("rev16 %0, %1" : "=r" (x) : "r" (x)); | ||
30 | return x; | ||
31 | } | ||
32 | #define __arch_swab16 __arch_swab16 | ||
33 | |||
34 | static inline __attribute_const__ __u32 __arch_swab32(__u32 x) | ||
35 | { | ||
36 | __asm__ ("rev %0, %1" : "=r" (x) : "r" (x)); | ||
37 | return x; | ||
38 | } | ||
39 | #define __arch_swab32 __arch_swab32 | ||
40 | |||
41 | #else | ||
42 | |||
25 | static inline __attribute_const__ __u32 __arch_swab32(__u32 x) | 43 | static inline __attribute_const__ __u32 __arch_swab32(__u32 x) |
26 | { | 44 | { |
27 | __u32 t; | 45 | __u32 t; |
@@ -48,3 +66,4 @@ static inline __attribute_const__ __u32 __arch_swab32(__u32 x) | |||
48 | 66 | ||
49 | #endif | 67 | #endif |
50 | 68 | ||
69 | #endif | ||
diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h index d65b2f5bf41f..058e7e90881d 100644 --- a/arch/arm/include/asm/system.h +++ b/arch/arm/include/asm/system.h | |||
@@ -138,21 +138,26 @@ extern unsigned int user_debug; | |||
138 | #define dmb() __asm__ __volatile__ ("" : : : "memory") | 138 | #define dmb() __asm__ __volatile__ ("" : : : "memory") |
139 | #endif | 139 | #endif |
140 | 140 | ||
141 | #ifndef CONFIG_SMP | 141 | #if __LINUX_ARM_ARCH__ >= 7 || defined(CONFIG_SMP) |
142 | #define mb() dmb() | ||
143 | #define rmb() dmb() | ||
144 | #define wmb() dmb() | ||
145 | #else | ||
142 | #define mb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) | 146 | #define mb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) |
143 | #define rmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) | 147 | #define rmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) |
144 | #define wmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) | 148 | #define wmb() do { if (arch_is_coherent()) dmb(); else barrier(); } while (0) |
149 | #endif | ||
150 | |||
151 | #ifndef CONFIG_SMP | ||
145 | #define smp_mb() barrier() | 152 | #define smp_mb() barrier() |
146 | #define smp_rmb() barrier() | 153 | #define smp_rmb() barrier() |
147 | #define smp_wmb() barrier() | 154 | #define smp_wmb() barrier() |
148 | #else | 155 | #else |
149 | #define mb() dmb() | 156 | #define smp_mb() mb() |
150 | #define rmb() dmb() | 157 | #define smp_rmb() rmb() |
151 | #define wmb() dmb() | 158 | #define smp_wmb() wmb() |
152 | #define smp_mb() dmb() | ||
153 | #define smp_rmb() dmb() | ||
154 | #define smp_wmb() dmb() | ||
155 | #endif | 159 | #endif |
160 | |||
156 | #define read_barrier_depends() do { } while(0) | 161 | #define read_barrier_depends() do { } while(0) |
157 | #define smp_read_barrier_depends() do { } while(0) | 162 | #define smp_read_barrier_depends() do { } while(0) |
158 | 163 | ||
diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig index 2fd88437348b..c71e39ed092f 100644 --- a/arch/arm/mach-at91/Kconfig +++ b/arch/arm/mach-at91/Kconfig | |||
@@ -163,6 +163,11 @@ config MACH_CPUAT91 | |||
163 | Select this if you are using the Eukrea Electromatique's | 163 | Select this if you are using the Eukrea Electromatique's |
164 | CPUAT91 board <http://www.eukrea.com/>. | 164 | CPUAT91 board <http://www.eukrea.com/>. |
165 | 165 | ||
166 | config MACH_ECO920 | ||
167 | bool "eco920" | ||
168 | help | ||
169 | Select this if you are using the eco920 board | ||
170 | |||
166 | endif | 171 | endif |
167 | 172 | ||
168 | # ---------------------------------------------------------- | 173 | # ---------------------------------------------------------- |
diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile index ada440aab0c5..709fbad4a3ee 100644 --- a/arch/arm/mach-at91/Makefile +++ b/arch/arm/mach-at91/Makefile | |||
@@ -35,6 +35,7 @@ obj-$(CONFIG_MACH_PICOTUX2XX) += board-picotux200.o | |||
35 | obj-$(CONFIG_MACH_ECBAT91) += board-ecbat91.o | 35 | obj-$(CONFIG_MACH_ECBAT91) += board-ecbat91.o |
36 | obj-$(CONFIG_MACH_YL9200) += board-yl-9200.o | 36 | obj-$(CONFIG_MACH_YL9200) += board-yl-9200.o |
37 | obj-$(CONFIG_MACH_CPUAT91) += board-cpuat91.o | 37 | obj-$(CONFIG_MACH_CPUAT91) += board-cpuat91.o |
38 | obj-$(CONFIG_MACH_ECO920) += board-eco920.o | ||
38 | 39 | ||
39 | # AT91SAM9260 board-specific support | 40 | # AT91SAM9260 board-specific support |
40 | obj-$(CONFIG_MACH_AT91SAM9260EK) += board-sam9260ek.o | 41 | obj-$(CONFIG_MACH_AT91SAM9260EK) += board-sam9260ek.o |
@@ -77,6 +78,7 @@ obj-y += leds.o | |||
77 | # Power Management | 78 | # Power Management |
78 | obj-$(CONFIG_PM) += pm.o | 79 | obj-$(CONFIG_PM) += pm.o |
79 | obj-$(CONFIG_AT91_SLOW_CLOCK) += pm_slowclock.o | 80 | obj-$(CONFIG_AT91_SLOW_CLOCK) += pm_slowclock.o |
81 | obj-$(CONFIG_CPU_IDLE) += cpuidle.o | ||
80 | 82 | ||
81 | ifeq ($(CONFIG_PM_DEBUG),y) | 83 | ifeq ($(CONFIG_PM_DEBUG),y) |
82 | CFLAGS_pm.o += -DDEBUG | 84 | CFLAGS_pm.o += -DDEBUG |
diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c index 332b784050b2..a57af3e99c7c 100644 --- a/arch/arm/mach-at91/at91sam9g45_devices.c +++ b/arch/arm/mach-at91/at91sam9g45_devices.c | |||
@@ -131,6 +131,62 @@ void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data) {} | |||
131 | 131 | ||
132 | 132 | ||
133 | /* -------------------------------------------------------------------- | 133 | /* -------------------------------------------------------------------- |
134 | * USB Host HS (EHCI) | ||
135 | * Needs an OHCI host for low and full speed management | ||
136 | * -------------------------------------------------------------------- */ | ||
137 | |||
138 | #if defined(CONFIG_USB_EHCI_HCD) || defined(CONFIG_USB_EHCI_HCD_MODULE) | ||
139 | static u64 ehci_dmamask = DMA_BIT_MASK(32); | ||
140 | static struct at91_usbh_data usbh_ehci_data; | ||
141 | |||
142 | static struct resource usbh_ehci_resources[] = { | ||
143 | [0] = { | ||
144 | .start = AT91SAM9G45_EHCI_BASE, | ||
145 | .end = AT91SAM9G45_EHCI_BASE + SZ_1M - 1, | ||
146 | .flags = IORESOURCE_MEM, | ||
147 | }, | ||
148 | [1] = { | ||
149 | .start = AT91SAM9G45_ID_UHPHS, | ||
150 | .end = AT91SAM9G45_ID_UHPHS, | ||
151 | .flags = IORESOURCE_IRQ, | ||
152 | }, | ||
153 | }; | ||
154 | |||
155 | static struct platform_device at91_usbh_ehci_device = { | ||
156 | .name = "atmel-ehci", | ||
157 | .id = -1, | ||
158 | .dev = { | ||
159 | .dma_mask = &ehci_dmamask, | ||
160 | .coherent_dma_mask = DMA_BIT_MASK(32), | ||
161 | .platform_data = &usbh_ehci_data, | ||
162 | }, | ||
163 | .resource = usbh_ehci_resources, | ||
164 | .num_resources = ARRAY_SIZE(usbh_ehci_resources), | ||
165 | }; | ||
166 | |||
167 | void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data) | ||
168 | { | ||
169 | int i; | ||
170 | |||
171 | if (!data) | ||
172 | return; | ||
173 | |||
174 | /* Enable VBus control for UHP ports */ | ||
175 | for (i = 0; i < data->ports; i++) { | ||
176 | if (data->vbus_pin[i]) | ||
177 | at91_set_gpio_output(data->vbus_pin[i], 0); | ||
178 | } | ||
179 | |||
180 | usbh_ehci_data = *data; | ||
181 | at91_clock_associate("uhphs_clk", &at91_usbh_ehci_device.dev, "ehci_clk"); | ||
182 | platform_device_register(&at91_usbh_ehci_device); | ||
183 | } | ||
184 | #else | ||
185 | void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data) {} | ||
186 | #endif | ||
187 | |||
188 | |||
189 | /* -------------------------------------------------------------------- | ||
134 | * USB HS Device (Gadget) | 190 | * USB HS Device (Gadget) |
135 | * -------------------------------------------------------------------- */ | 191 | * -------------------------------------------------------------------- */ |
136 | 192 | ||
diff --git a/arch/arm/mach-at91/board-eco920.c b/arch/arm/mach-at91/board-eco920.c new file mode 100644 index 000000000000..295a96609e71 --- /dev/null +++ b/arch/arm/mach-at91/board-eco920.c | |||
@@ -0,0 +1,158 @@ | |||
1 | /* | ||
2 | * This program is free software; you can redistribute it and/or modify | ||
3 | * it under the terms of the GNU General Public License as published by | ||
4 | * the Free Software Foundation; either version 2 of the License, or | ||
5 | * (at your option) any later version. | ||
6 | * | ||
7 | * This program is distributed in the hope that it will be useful, | ||
8 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
9 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
10 | * GNU General Public License for more details. | ||
11 | * | ||
12 | * You should have received a copy of the GNU General Public License | ||
13 | * along with this program; if not, write to the Free Software | ||
14 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||
15 | */ | ||
16 | |||
17 | #include <linux/init.h> | ||
18 | #include <linux/platform_device.h> | ||
19 | #include <linux/mtd/physmap.h> | ||
20 | #include <linux/gpio.h> | ||
21 | |||
22 | #include <asm/mach-types.h> | ||
23 | |||
24 | #include <asm/mach/arch.h> | ||
25 | #include <asm/mach/map.h> | ||
26 | |||
27 | #include <mach/board.h> | ||
28 | #include <mach/at91rm9200_mc.h> | ||
29 | #include "generic.h" | ||
30 | |||
31 | static void __init eco920_map_io(void) | ||
32 | { | ||
33 | at91rm9200_initialize(18432000, AT91RM9200_PQFP); | ||
34 | |||
35 | /* Setup the LEDs */ | ||
36 | at91_init_leds(AT91_PIN_PB0, AT91_PIN_PB1); | ||
37 | |||
38 | /* DBGU on ttyS0. (Rx & Tx only */ | ||
39 | at91_register_uart(0, 0, 0); | ||
40 | |||
41 | /* set serial console to ttyS0 (ie, DBGU) */ | ||
42 | at91_set_serial_console(0); | ||
43 | } | ||
44 | |||
45 | static void __init eco920_init_irq(void) | ||
46 | { | ||
47 | at91rm9200_init_interrupts(NULL); | ||
48 | } | ||
49 | |||
50 | static struct at91_eth_data __initdata eco920_eth_data = { | ||
51 | .phy_irq_pin = AT91_PIN_PC2, | ||
52 | .is_rmii = 1, | ||
53 | }; | ||
54 | |||
55 | static struct at91_usbh_data __initdata eco920_usbh_data = { | ||
56 | .ports = 1, | ||
57 | }; | ||
58 | |||
59 | static struct at91_udc_data __initdata eco920_udc_data = { | ||
60 | .vbus_pin = AT91_PIN_PB12, | ||
61 | .pullup_pin = AT91_PIN_PB13, | ||
62 | }; | ||
63 | |||
64 | static struct at91_mmc_data __initdata eco920_mmc_data = { | ||
65 | .slot_b = 0, | ||
66 | .wire4 = 0, | ||
67 | }; | ||
68 | |||
69 | static struct physmap_flash_data eco920_flash_data = { | ||
70 | .width = 2, | ||
71 | }; | ||
72 | |||
73 | static struct resource eco920_flash_resource = { | ||
74 | .start = 0x11000000, | ||
75 | .end = 0x11ffffff, | ||
76 | .flags = IORESOURCE_MEM, | ||
77 | }; | ||
78 | |||
79 | static struct platform_device eco920_flash = { | ||
80 | .name = "physmap-flash", | ||
81 | .id = 0, | ||
82 | .dev = { | ||
83 | .platform_data = &eco920_flash_data, | ||
84 | }, | ||
85 | .resource = &eco920_flash_resource, | ||
86 | .num_resources = 1, | ||
87 | }; | ||
88 | |||
89 | static struct resource at91_beeper_resources[] = { | ||
90 | [0] = { | ||
91 | .start = AT91RM9200_BASE_TC3, | ||
92 | .end = AT91RM9200_BASE_TC3 + 0x39, | ||
93 | .flags = IORESOURCE_MEM, | ||
94 | }, | ||
95 | }; | ||
96 | |||
97 | static struct platform_device at91_beeper = { | ||
98 | .name = "at91_beeper", | ||
99 | .id = 0, | ||
100 | .resource = at91_beeper_resources, | ||
101 | .num_resources = ARRAY_SIZE(at91_beeper_resources), | ||
102 | }; | ||
103 | |||
104 | static struct spi_board_info eco920_spi_devices[] = { | ||
105 | { /* CAN controller */ | ||
106 | .modalias = "tlv5638", | ||
107 | .chip_select = 3, | ||
108 | .max_speed_hz = 20 * 1000 * 1000, | ||
109 | .mode = SPI_CPHA, | ||
110 | }, | ||
111 | }; | ||
112 | |||
113 | static void __init eco920_board_init(void) | ||
114 | { | ||
115 | at91_add_device_serial(); | ||
116 | at91_add_device_eth(&eco920_eth_data); | ||
117 | at91_add_device_usbh(&eco920_usbh_data); | ||
118 | at91_add_device_udc(&eco920_udc_data); | ||
119 | |||
120 | at91_add_device_mmc(0, &eco920_mmc_data); | ||
121 | platform_device_register(&eco920_flash); | ||
122 | |||
123 | at91_sys_write(AT91_SMC_CSR(7), AT91_SMC_RWHOLD_(1) | ||
124 | | AT91_SMC_RWSETUP_(1) | ||
125 | | AT91_SMC_DBW_8 | ||
126 | | AT91_SMC_WSEN | ||
127 | | AT91_SMC_NWS_(15)); | ||
128 | |||
129 | at91_set_A_periph(AT91_PIN_PC6, 1); | ||
130 | |||
131 | at91_set_gpio_input(AT91_PIN_PA23, 0); | ||
132 | at91_set_deglitch(AT91_PIN_PA23, 1); | ||
133 | |||
134 | /* Initialization of the Static Memory Controller for Chip Select 3 */ | ||
135 | at91_sys_write(AT91_SMC_CSR(3), | ||
136 | AT91_SMC_DBW_16 | /* 16 bit */ | ||
137 | AT91_SMC_WSEN | | ||
138 | AT91_SMC_NWS_(5) | /* wait states */ | ||
139 | AT91_SMC_TDF_(1) /* float time */ | ||
140 | ); | ||
141 | |||
142 | at91_clock_associate("tc3_clk", &at91_beeper.dev, "at91_beeper"); | ||
143 | at91_set_B_periph(AT91_PIN_PB6, 0); | ||
144 | platform_device_register(&at91_beeper); | ||
145 | |||
146 | at91_add_device_spi(eco920_spi_devices, ARRAY_SIZE(eco920_spi_devices)); | ||
147 | } | ||
148 | |||
149 | MACHINE_START(ECO920, "eco920") | ||
150 | /* Maintainer: Sascha Hauer */ | ||
151 | .phys_io = AT91_BASE_SYS, | ||
152 | .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc, | ||
153 | .boot_params = AT91_SDRAM_BASE + 0x100, | ||
154 | .timer = &at91rm9200_timer, | ||
155 | .map_io = eco920_map_io, | ||
156 | .init_irq = eco920_init_irq, | ||
157 | .init_machine = eco920_board_init, | ||
158 | MACHINE_END | ||
diff --git a/arch/arm/mach-at91/board-sam9m10g45ek.c b/arch/arm/mach-at91/board-sam9m10g45ek.c index 64c3843f323d..1cf4d8681078 100644 --- a/arch/arm/mach-at91/board-sam9m10g45ek.c +++ b/arch/arm/mach-at91/board-sam9m10g45ek.c | |||
@@ -366,6 +366,7 @@ static void __init ek_board_init(void) | |||
366 | at91_add_device_serial(); | 366 | at91_add_device_serial(); |
367 | /* USB HS Host */ | 367 | /* USB HS Host */ |
368 | at91_add_device_usbh_ohci(&ek_usbh_hs_data); | 368 | at91_add_device_usbh_ohci(&ek_usbh_hs_data); |
369 | at91_add_device_usbh_ehci(&ek_usbh_hs_data); | ||
369 | /* USB HS Device */ | 370 | /* USB HS Device */ |
370 | at91_add_device_usba(&ek_usba_udc_data); | 371 | at91_add_device_usba(&ek_usba_udc_data); |
371 | /* SPI */ | 372 | /* SPI */ |
diff --git a/arch/arm/mach-at91/cpuidle.c b/arch/arm/mach-at91/cpuidle.c new file mode 100644 index 000000000000..1cfeac1483d6 --- /dev/null +++ b/arch/arm/mach-at91/cpuidle.c | |||
@@ -0,0 +1,94 @@ | |||
1 | /* | ||
2 | * based on arch/arm/mach-kirkwood/cpuidle.c | ||
3 | * | ||
4 | * CPU idle support for AT91 SoC | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | * | ||
10 | * The cpu idle uses wait-for-interrupt and RAM self refresh in order | ||
11 | * to implement two idle states - | ||
12 | * #1 wait-for-interrupt | ||
13 | * #2 wait-for-interrupt and RAM self refresh | ||
14 | */ | ||
15 | |||
16 | #include <linux/kernel.h> | ||
17 | #include <linux/init.h> | ||
18 | #include <linux/platform_device.h> | ||
19 | #include <linux/cpuidle.h> | ||
20 | #include <asm/proc-fns.h> | ||
21 | #include <linux/io.h> | ||
22 | |||
23 | #include "pm.h" | ||
24 | |||
25 | #define AT91_MAX_STATES 2 | ||
26 | |||
27 | static DEFINE_PER_CPU(struct cpuidle_device, at91_cpuidle_device); | ||
28 | |||
29 | static struct cpuidle_driver at91_idle_driver = { | ||
30 | .name = "at91_idle", | ||
31 | .owner = THIS_MODULE, | ||
32 | }; | ||
33 | |||
34 | /* Actual code that puts the SoC in different idle states */ | ||
35 | static int at91_enter_idle(struct cpuidle_device *dev, | ||
36 | struct cpuidle_state *state) | ||
37 | { | ||
38 | struct timeval before, after; | ||
39 | int idle_time; | ||
40 | u32 saved_lpr; | ||
41 | |||
42 | local_irq_disable(); | ||
43 | do_gettimeofday(&before); | ||
44 | if (state == &dev->states[0]) | ||
45 | /* Wait for interrupt state */ | ||
46 | cpu_do_idle(); | ||
47 | else if (state == &dev->states[1]) { | ||
48 | asm("b 1f; .align 5; 1:"); | ||
49 | asm("mcr p15, 0, r0, c7, c10, 4"); /* drain write buffer */ | ||
50 | saved_lpr = sdram_selfrefresh_enable(); | ||
51 | cpu_do_idle(); | ||
52 | sdram_selfrefresh_disable(saved_lpr); | ||
53 | } | ||
54 | do_gettimeofday(&after); | ||
55 | local_irq_enable(); | ||
56 | idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC + | ||
57 | (after.tv_usec - before.tv_usec); | ||
58 | return idle_time; | ||
59 | } | ||
60 | |||
61 | /* Initialize CPU idle by registering the idle states */ | ||
62 | static int at91_init_cpuidle(void) | ||
63 | { | ||
64 | struct cpuidle_device *device; | ||
65 | |||
66 | cpuidle_register_driver(&at91_idle_driver); | ||
67 | |||
68 | device = &per_cpu(at91_cpuidle_device, smp_processor_id()); | ||
69 | device->state_count = AT91_MAX_STATES; | ||
70 | |||
71 | /* Wait for interrupt state */ | ||
72 | device->states[0].enter = at91_enter_idle; | ||
73 | device->states[0].exit_latency = 1; | ||
74 | device->states[0].target_residency = 10000; | ||
75 | device->states[0].flags = CPUIDLE_FLAG_TIME_VALID; | ||
76 | strcpy(device->states[0].name, "WFI"); | ||
77 | strcpy(device->states[0].desc, "Wait for interrupt"); | ||
78 | |||
79 | /* Wait for interrupt and RAM self refresh state */ | ||
80 | device->states[1].enter = at91_enter_idle; | ||
81 | device->states[1].exit_latency = 10; | ||
82 | device->states[1].target_residency = 10000; | ||
83 | device->states[1].flags = CPUIDLE_FLAG_TIME_VALID; | ||
84 | strcpy(device->states[1].name, "RAM_SR"); | ||
85 | strcpy(device->states[1].desc, "WFI and RAM Self Refresh"); | ||
86 | |||
87 | if (cpuidle_register_device(device)) { | ||
88 | printk(KERN_ERR "at91_init_cpuidle: Failed registering\n"); | ||
89 | return -EIO; | ||
90 | } | ||
91 | return 0; | ||
92 | } | ||
93 | |||
94 | device_initcall(at91_init_cpuidle); | ||
diff --git a/arch/arm/mach-at91/include/mach/board.h b/arch/arm/mach-at91/include/mach/board.h index 2f4fcedc02ba..2295d80dd893 100644 --- a/arch/arm/mach-at91/include/mach/board.h +++ b/arch/arm/mach-at91/include/mach/board.h | |||
@@ -98,6 +98,7 @@ struct at91_usbh_data { | |||
98 | }; | 98 | }; |
99 | extern void __init at91_add_device_usbh(struct at91_usbh_data *data); | 99 | extern void __init at91_add_device_usbh(struct at91_usbh_data *data); |
100 | extern void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data); | 100 | extern void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data); |
101 | extern void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data); | ||
101 | 102 | ||
102 | /* NAND / SmartMedia */ | 103 | /* NAND / SmartMedia */ |
103 | struct atmel_nand_data { | 104 | struct atmel_nand_data { |
diff --git a/arch/arm/mach-at91/pm.c b/arch/arm/mach-at91/pm.c index 4028724d490d..615668986480 100644 --- a/arch/arm/mach-at91/pm.c +++ b/arch/arm/mach-at91/pm.c | |||
@@ -29,62 +29,7 @@ | |||
29 | #include <mach/cpu.h> | 29 | #include <mach/cpu.h> |
30 | 30 | ||
31 | #include "generic.h" | 31 | #include "generic.h" |
32 | 32 | #include "pm.h" | |
33 | #ifdef CONFIG_ARCH_AT91RM9200 | ||
34 | #include <mach/at91rm9200_mc.h> | ||
35 | |||
36 | /* | ||
37 | * The AT91RM9200 goes into self-refresh mode with this command, and will | ||
38 | * terminate self-refresh automatically on the next SDRAM access. | ||
39 | */ | ||
40 | #define sdram_selfrefresh_enable() at91_sys_write(AT91_SDRAMC_SRR, 1) | ||
41 | #define sdram_selfrefresh_disable() do {} while (0) | ||
42 | |||
43 | #elif defined(CONFIG_ARCH_AT91CAP9) | ||
44 | #include <mach/at91cap9_ddrsdr.h> | ||
45 | |||
46 | static u32 saved_lpr; | ||
47 | |||
48 | static inline void sdram_selfrefresh_enable(void) | ||
49 | { | ||
50 | u32 lpr; | ||
51 | |||
52 | saved_lpr = at91_sys_read(AT91_DDRSDRC_LPR); | ||
53 | |||
54 | lpr = saved_lpr & ~AT91_DDRSDRC_LPCB; | ||
55 | at91_sys_write(AT91_DDRSDRC_LPR, lpr | AT91_DDRSDRC_LPCB_SELF_REFRESH); | ||
56 | } | ||
57 | |||
58 | #define sdram_selfrefresh_disable() at91_sys_write(AT91_DDRSDRC_LPR, saved_lpr) | ||
59 | |||
60 | #else | ||
61 | #include <mach/at91sam9_sdramc.h> | ||
62 | |||
63 | #ifdef CONFIG_ARCH_AT91SAM9263 | ||
64 | /* | ||
65 | * FIXME either or both the SDRAM controllers (EB0, EB1) might be in use; | ||
66 | * handle those cases both here and in the Suspend-To-RAM support. | ||
67 | */ | ||
68 | #define AT91_SDRAMC AT91_SDRAMC0 | ||
69 | #warning Assuming EB1 SDRAM controller is *NOT* used | ||
70 | #endif | ||
71 | |||
72 | static u32 saved_lpr; | ||
73 | |||
74 | static inline void sdram_selfrefresh_enable(void) | ||
75 | { | ||
76 | u32 lpr; | ||
77 | |||
78 | saved_lpr = at91_sys_read(AT91_SDRAMC_LPR); | ||
79 | |||
80 | lpr = saved_lpr & ~AT91_SDRAMC_LPCB; | ||
81 | at91_sys_write(AT91_SDRAMC_LPR, lpr | AT91_SDRAMC_LPCB_SELF_REFRESH); | ||
82 | } | ||
83 | |||
84 | #define sdram_selfrefresh_disable() at91_sys_write(AT91_SDRAMC_LPR, saved_lpr) | ||
85 | |||
86 | #endif | ||
87 | |||
88 | 33 | ||
89 | /* | 34 | /* |
90 | * Show the reason for the previous system reset. | 35 | * Show the reason for the previous system reset. |
@@ -260,6 +205,7 @@ extern u32 at91_slow_clock_sz; | |||
260 | 205 | ||
261 | static int at91_pm_enter(suspend_state_t state) | 206 | static int at91_pm_enter(suspend_state_t state) |
262 | { | 207 | { |
208 | u32 saved_lpr; | ||
263 | at91_gpio_suspend(); | 209 | at91_gpio_suspend(); |
264 | at91_irq_suspend(); | 210 | at91_irq_suspend(); |
265 | 211 | ||
@@ -315,9 +261,9 @@ static int at91_pm_enter(suspend_state_t state) | |||
315 | */ | 261 | */ |
316 | asm("b 1f; .align 5; 1:"); | 262 | asm("b 1f; .align 5; 1:"); |
317 | asm("mcr p15, 0, r0, c7, c10, 4"); /* drain write buffer */ | 263 | asm("mcr p15, 0, r0, c7, c10, 4"); /* drain write buffer */ |
318 | sdram_selfrefresh_enable(); | 264 | saved_lpr = sdram_selfrefresh_enable(); |
319 | asm("mcr p15, 0, r0, c7, c0, 4"); /* wait for interrupt */ | 265 | asm("mcr p15, 0, r0, c7, c0, 4"); /* wait for interrupt */ |
320 | sdram_selfrefresh_disable(); | 266 | sdram_selfrefresh_disable(saved_lpr); |
321 | break; | 267 | break; |
322 | 268 | ||
323 | case PM_SUSPEND_ON: | 269 | case PM_SUSPEND_ON: |
diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h new file mode 100644 index 000000000000..08322c44df1a --- /dev/null +++ b/arch/arm/mach-at91/pm.h | |||
@@ -0,0 +1,67 @@ | |||
1 | #ifdef CONFIG_ARCH_AT91RM9200 | ||
2 | #include <mach/at91rm9200_mc.h> | ||
3 | |||
4 | /* | ||
5 | * The AT91RM9200 goes into self-refresh mode with this command, and will | ||
6 | * terminate self-refresh automatically on the next SDRAM access. | ||
7 | * | ||
8 | * Self-refresh mode is exited as soon as a memory access is made, but we don't | ||
9 | * know for sure when that happens. However, we need to restore the low-power | ||
10 | * mode if it was enabled before going idle. Restoring low-power mode while | ||
11 | * still in self-refresh is "not recommended", but seems to work. | ||
12 | */ | ||
13 | |||
14 | static inline u32 sdram_selfrefresh_enable(void) | ||
15 | { | ||
16 | u32 saved_lpr = at91_sys_read(AT91_SDRAMC_LPR); | ||
17 | |||
18 | at91_sys_write(AT91_SDRAMC_LPR, 0); | ||
19 | at91_sys_write(AT91_SDRAMC_SRR, 1); | ||
20 | return saved_lpr; | ||
21 | } | ||
22 | |||
23 | #define sdram_selfrefresh_disable(saved_lpr) at91_sys_write(AT91_SDRAMC_LPR, saved_lpr) | ||
24 | |||
25 | #elif defined(CONFIG_ARCH_AT91CAP9) | ||
26 | #include <mach/at91cap9_ddrsdr.h> | ||
27 | |||
28 | |||
29 | static inline u32 sdram_selfrefresh_enable(void) | ||
30 | { | ||
31 | u32 saved_lpr, lpr; | ||
32 | |||
33 | saved_lpr = at91_sys_read(AT91_DDRSDRC_LPR); | ||
34 | |||
35 | lpr = saved_lpr & ~AT91_DDRSDRC_LPCB; | ||
36 | at91_sys_write(AT91_DDRSDRC_LPR, lpr | AT91_DDRSDRC_LPCB_SELF_REFRESH); | ||
37 | return saved_lpr; | ||
38 | } | ||
39 | |||
40 | #define sdram_selfrefresh_disable(saved_lpr) at91_sys_write(AT91_DDRSDRC_LPR, saved_lpr) | ||
41 | |||
42 | #else | ||
43 | #include <mach/at91sam9_sdramc.h> | ||
44 | |||
45 | #ifdef CONFIG_ARCH_AT91SAM9263 | ||
46 | /* | ||
47 | * FIXME either or both the SDRAM controllers (EB0, EB1) might be in use; | ||
48 | * handle those cases both here and in the Suspend-To-RAM support. | ||
49 | */ | ||
50 | #define AT91_SDRAMC AT91_SDRAMC0 | ||
51 | #warning Assuming EB1 SDRAM controller is *NOT* used | ||
52 | #endif | ||
53 | |||
54 | static inline u32 sdram_selfrefresh_enable(void) | ||
55 | { | ||
56 | u32 saved_lpr, lpr; | ||
57 | |||
58 | saved_lpr = at91_sys_read(AT91_SDRAMC_LPR); | ||
59 | |||
60 | lpr = saved_lpr & ~AT91_SDRAMC_LPCB; | ||
61 | at91_sys_write(AT91_SDRAMC_LPR, lpr | AT91_SDRAMC_LPCB_SELF_REFRESH); | ||
62 | return saved_lpr; | ||
63 | } | ||
64 | |||
65 | #define sdram_selfrefresh_disable(saved_lpr) at91_sys_write(AT91_SDRAMC_LPR, saved_lpr) | ||
66 | |||
67 | #endif | ||
diff --git a/arch/arm/mach-bcmring/include/mach/io.h b/arch/arm/mach-bcmring/include/mach/io.h index 4db0eff90357..dae5e9b166ea 100644 --- a/arch/arm/mach-bcmring/include/mach/io.h +++ b/arch/arm/mach-bcmring/include/mach/io.h | |||
@@ -23,34 +23,11 @@ | |||
23 | 23 | ||
24 | #define IO_SPACE_LIMIT 0xffffffff | 24 | #define IO_SPACE_LIMIT 0xffffffff |
25 | 25 | ||
26 | #define __io(a) ((void __iomem *)HW_IO_PHYS_TO_VIRT(a)) | 26 | /* |
27 | 27 | * We don't actually have real ISA nor PCI buses, but there is so many | |
28 | /* Do not enable mem_pci for a big endian arm architecture or unexpected byteswaps will */ | 28 | * drivers out there that might just work if we fake them... |
29 | /* happen in readw/writew etc. */ | 29 | */ |
30 | 30 | #define __io(a) __typesafe_io(a) | |
31 | #define readb(c) __raw_readb(c) | 31 | #define __mem_pci(a) (a) |
32 | #define readw(c) __raw_readw(c) | ||
33 | #define readl(c) __raw_readl(c) | ||
34 | #define readb_relaxed(addr) readb(addr) | ||
35 | #define readw_relaxed(addr) readw(addr) | ||
36 | #define readl_relaxed(addr) readl(addr) | ||
37 | |||
38 | #define readsb(p, d, l) __raw_readsb(p, d, l) | ||
39 | #define readsw(p, d, l) __raw_readsw(p, d, l) | ||
40 | #define readsl(p, d, l) __raw_readsl(p, d, l) | ||
41 | |||
42 | #define writeb(v, c) __raw_writeb(v, c) | ||
43 | #define writew(v, c) __raw_writew(v, c) | ||
44 | #define writel(v, c) __raw_writel(v, c) | ||
45 | |||
46 | #define writesb(p, d, l) __raw_writesb(p, d, l) | ||
47 | #define writesw(p, d, l) __raw_writesw(p, d, l) | ||
48 | #define writesl(p, d, l) __raw_writesl(p, d, l) | ||
49 | |||
50 | #define memset_io(c, v, l) _memset_io((c), (v), (l)) | ||
51 | #define memcpy_fromio(a, c, l) _memcpy_fromio((a), (c), (l)) | ||
52 | #define memcpy_toio(c, a, l) _memcpy_toio((c), (a), (l)) | ||
53 | |||
54 | #define eth_io_copy_and_sum(s, c, l, b) eth_copy_and_sum((s), (c), (l), (b)) | ||
55 | 32 | ||
56 | #endif | 33 | #endif |
diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c index b4357c388d2e..1f0d66561bbe 100644 --- a/arch/arm/mach-ep93xx/core.c +++ b/arch/arm/mach-ep93xx/core.c | |||
@@ -31,6 +31,7 @@ | |||
31 | 31 | ||
32 | #include <mach/hardware.h> | 32 | #include <mach/hardware.h> |
33 | #include <mach/fb.h> | 33 | #include <mach/fb.h> |
34 | #include <mach/ep93xx_keypad.h> | ||
34 | 35 | ||
35 | #include <asm/mach/map.h> | 36 | #include <asm/mach/map.h> |
36 | #include <asm/mach/time.h> | 37 | #include <asm/mach/time.h> |
@@ -728,6 +729,82 @@ void __init ep93xx_register_fb(struct ep93xxfb_mach_info *data) | |||
728 | platform_device_register(&ep93xx_fb_device); | 729 | platform_device_register(&ep93xx_fb_device); |
729 | } | 730 | } |
730 | 731 | ||
732 | |||
733 | /************************************************************************* | ||
734 | * EP93xx matrix keypad peripheral handling | ||
735 | *************************************************************************/ | ||
736 | static struct resource ep93xx_keypad_resource[] = { | ||
737 | { | ||
738 | .start = EP93XX_KEY_MATRIX_PHYS_BASE, | ||
739 | .end = EP93XX_KEY_MATRIX_PHYS_BASE + 0x0c - 1, | ||
740 | .flags = IORESOURCE_MEM, | ||
741 | }, { | ||
742 | .start = IRQ_EP93XX_KEY, | ||
743 | .end = IRQ_EP93XX_KEY, | ||
744 | .flags = IORESOURCE_IRQ, | ||
745 | }, | ||
746 | }; | ||
747 | |||
748 | static struct platform_device ep93xx_keypad_device = { | ||
749 | .name = "ep93xx-keypad", | ||
750 | .id = -1, | ||
751 | .num_resources = ARRAY_SIZE(ep93xx_keypad_resource), | ||
752 | .resource = ep93xx_keypad_resource, | ||
753 | }; | ||
754 | |||
755 | void __init ep93xx_register_keypad(struct ep93xx_keypad_platform_data *data) | ||
756 | { | ||
757 | ep93xx_keypad_device.dev.platform_data = data; | ||
758 | platform_device_register(&ep93xx_keypad_device); | ||
759 | } | ||
760 | |||
761 | int ep93xx_keypad_acquire_gpio(struct platform_device *pdev) | ||
762 | { | ||
763 | int err; | ||
764 | int i; | ||
765 | |||
766 | for (i = 0; i < 8; i++) { | ||
767 | err = gpio_request(EP93XX_GPIO_LINE_C(i), dev_name(&pdev->dev)); | ||
768 | if (err) | ||
769 | goto fail_gpio_c; | ||
770 | err = gpio_request(EP93XX_GPIO_LINE_D(i), dev_name(&pdev->dev)); | ||
771 | if (err) | ||
772 | goto fail_gpio_d; | ||
773 | } | ||
774 | |||
775 | /* Enable the keypad controller; GPIO ports C and D used for keypad */ | ||
776 | ep93xx_devcfg_clear_bits(EP93XX_SYSCON_DEVCFG_KEYS | | ||
777 | EP93XX_SYSCON_DEVCFG_GONK); | ||
778 | |||
779 | return 0; | ||
780 | |||
781 | fail_gpio_d: | ||
782 | gpio_free(EP93XX_GPIO_LINE_C(i)); | ||
783 | fail_gpio_c: | ||
784 | for ( ; i >= 0; --i) { | ||
785 | gpio_free(EP93XX_GPIO_LINE_C(i)); | ||
786 | gpio_free(EP93XX_GPIO_LINE_D(i)); | ||
787 | } | ||
788 | return err; | ||
789 | } | ||
790 | EXPORT_SYMBOL(ep93xx_keypad_acquire_gpio); | ||
791 | |||
792 | void ep93xx_keypad_release_gpio(struct platform_device *pdev) | ||
793 | { | ||
794 | int i; | ||
795 | |||
796 | for (i = 0; i < 8; i++) { | ||
797 | gpio_free(EP93XX_GPIO_LINE_C(i)); | ||
798 | gpio_free(EP93XX_GPIO_LINE_D(i)); | ||
799 | } | ||
800 | |||
801 | /* Disable the keypad controller; GPIO ports C and D used for GPIO */ | ||
802 | ep93xx_devcfg_set_bits(EP93XX_SYSCON_DEVCFG_KEYS | | ||
803 | EP93XX_SYSCON_DEVCFG_GONK); | ||
804 | } | ||
805 | EXPORT_SYMBOL(ep93xx_keypad_release_gpio); | ||
806 | |||
807 | |||
731 | extern void ep93xx_gpio_init(void); | 808 | extern void ep93xx_gpio_init(void); |
732 | 809 | ||
733 | void __init ep93xx_init_devices(void) | 810 | void __init ep93xx_init_devices(void) |
diff --git a/arch/arm/mach-ep93xx/include/mach/clkdev.h b/arch/arm/mach-ep93xx/include/mach/clkdev.h index 04b37a89801c..50cb991eadeb 100644 --- a/arch/arm/mach-ep93xx/include/mach/clkdev.h +++ b/arch/arm/mach-ep93xx/include/mach/clkdev.h | |||
@@ -1,3 +1,7 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-ep93xx/include/mach/clkdev.h | ||
3 | */ | ||
4 | |||
1 | #ifndef __ASM_MACH_CLKDEV_H | 5 | #ifndef __ASM_MACH_CLKDEV_H |
2 | #define __ASM_MACH_CLKDEV_H | 6 | #define __ASM_MACH_CLKDEV_H |
3 | 7 | ||
diff --git a/arch/arm/mach-ep93xx/include/mach/dma.h b/arch/arm/mach-ep93xx/include/mach/dma.h index ef6bd9d13148..3a5961d3f3b1 100644 --- a/arch/arm/mach-ep93xx/include/mach/dma.h +++ b/arch/arm/mach-ep93xx/include/mach/dma.h | |||
@@ -1,3 +1,7 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-ep93xx/include/mach/dma.h | ||
3 | */ | ||
4 | |||
1 | #ifndef __ASM_ARCH_DMA_H | 5 | #ifndef __ASM_ARCH_DMA_H |
2 | #define __ASM_ARCH_DMA_H | 6 | #define __ASM_ARCH_DMA_H |
3 | 7 | ||
diff --git a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h b/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h index b1f937eda29c..d55194a4c093 100644 --- a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h +++ b/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h | |||
@@ -134,6 +134,7 @@ | |||
134 | #define EP93XX_UART3_PHYS_BASE EP93XX_APB_PHYS(0x000e0000) | 134 | #define EP93XX_UART3_PHYS_BASE EP93XX_APB_PHYS(0x000e0000) |
135 | #define EP93XX_UART3_BASE EP93XX_APB_IOMEM(0x000e0000) | 135 | #define EP93XX_UART3_BASE EP93XX_APB_IOMEM(0x000e0000) |
136 | 136 | ||
137 | #define EP93XX_KEY_MATRIX_PHYS_BASE EP93XX_APB_PHYS(0x000f0000) | ||
137 | #define EP93XX_KEY_MATRIX_BASE EP93XX_APB_IOMEM(0x000f0000) | 138 | #define EP93XX_KEY_MATRIX_BASE EP93XX_APB_IOMEM(0x000f0000) |
138 | 139 | ||
139 | #define EP93XX_ADC_BASE EP93XX_APB_IOMEM(0x00100000) | 140 | #define EP93XX_ADC_BASE EP93XX_APB_IOMEM(0x00100000) |
diff --git a/arch/arm/mach-ep93xx/include/mach/hardware.h b/arch/arm/mach-ep93xx/include/mach/hardware.h index 349fa7cb72d5..5a3ce024b593 100644 --- a/arch/arm/mach-ep93xx/include/mach/hardware.h +++ b/arch/arm/mach-ep93xx/include/mach/hardware.h | |||
@@ -1,6 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * arch/arm/mach-ep93xx/include/mach/hardware.h | 2 | * arch/arm/mach-ep93xx/include/mach/hardware.h |
3 | */ | 3 | */ |
4 | |||
4 | #ifndef __ASM_ARCH_HARDWARE_H | 5 | #ifndef __ASM_ARCH_HARDWARE_H |
5 | #define __ASM_ARCH_HARDWARE_H | 6 | #define __ASM_ARCH_HARDWARE_H |
6 | 7 | ||
diff --git a/arch/arm/mach-ep93xx/include/mach/io.h b/arch/arm/mach-ep93xx/include/mach/io.h index cebcc1c53d63..594b77f21054 100644 --- a/arch/arm/mach-ep93xx/include/mach/io.h +++ b/arch/arm/mach-ep93xx/include/mach/io.h | |||
@@ -1,6 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * arch/arm/mach-ep93xx/include/mach/io.h | 2 | * arch/arm/mach-ep93xx/include/mach/io.h |
3 | */ | 3 | */ |
4 | |||
4 | #ifndef __ASM_MACH_IO_H | 5 | #ifndef __ASM_MACH_IO_H |
5 | #define __ASM_MACH_IO_H | 6 | #define __ASM_MACH_IO_H |
6 | 7 | ||
diff --git a/arch/arm/mach-ep93xx/include/mach/platform.h b/arch/arm/mach-ep93xx/include/mach/platform.h index 469fd968d517..c6dc14dbca18 100644 --- a/arch/arm/mach-ep93xx/include/mach/platform.h +++ b/arch/arm/mach-ep93xx/include/mach/platform.h | |||
@@ -8,6 +8,7 @@ struct i2c_gpio_platform_data; | |||
8 | struct i2c_board_info; | 8 | struct i2c_board_info; |
9 | struct platform_device; | 9 | struct platform_device; |
10 | struct ep93xxfb_mach_info; | 10 | struct ep93xxfb_mach_info; |
11 | struct ep93xx_keypad_platform_data; | ||
11 | 12 | ||
12 | struct ep93xx_eth_data | 13 | struct ep93xx_eth_data |
13 | { | 14 | { |
@@ -39,6 +40,9 @@ void ep93xx_register_fb(struct ep93xxfb_mach_info *data); | |||
39 | void ep93xx_register_pwm(int pwm0, int pwm1); | 40 | void ep93xx_register_pwm(int pwm0, int pwm1); |
40 | int ep93xx_pwm_acquire_gpio(struct platform_device *pdev); | 41 | int ep93xx_pwm_acquire_gpio(struct platform_device *pdev); |
41 | void ep93xx_pwm_release_gpio(struct platform_device *pdev); | 42 | void ep93xx_pwm_release_gpio(struct platform_device *pdev); |
43 | void ep93xx_register_keypad(struct ep93xx_keypad_platform_data *data); | ||
44 | int ep93xx_keypad_acquire_gpio(struct platform_device *pdev); | ||
45 | void ep93xx_keypad_release_gpio(struct platform_device *pdev); | ||
42 | 46 | ||
43 | void ep93xx_init_devices(void); | 47 | void ep93xx_init_devices(void); |
44 | extern struct sys_timer ep93xx_timer; | 48 | extern struct sys_timer ep93xx_timer; |
diff --git a/arch/arm/mach-iop13xx/include/mach/memory.h b/arch/arm/mach-iop13xx/include/mach/memory.h index 42ae29b288a1..25b1da9a5035 100644 --- a/arch/arm/mach-iop13xx/include/mach/memory.h +++ b/arch/arm/mach-iop13xx/include/mach/memory.h | |||
@@ -64,6 +64,8 @@ static inline unsigned long __lbus_to_virt(dma_addr_t x) | |||
64 | (dma_addr_t)page_to_phys(page); \ | 64 | (dma_addr_t)page_to_phys(page); \ |
65 | }) | 65 | }) |
66 | 66 | ||
67 | #define __arch_dma_to_page(dev, addr) phys_to_page(addr) | ||
68 | |||
67 | #endif /* CONFIG_ARCH_IOP13XX */ | 69 | #endif /* CONFIG_ARCH_IOP13XX */ |
68 | #endif /* !ASSEMBLY */ | 70 | #endif /* !ASSEMBLY */ |
69 | 71 | ||
diff --git a/arch/arm/mach-ks8695/include/mach/memory.h b/arch/arm/mach-ks8695/include/mach/memory.h index 76e5308685a4..ffa19aae6e05 100644 --- a/arch/arm/mach-ks8695/include/mach/memory.h +++ b/arch/arm/mach-ks8695/include/mach/memory.h | |||
@@ -41,6 +41,13 @@ extern struct bus_type platform_bus_type; | |||
41 | __dma = __dma - PHYS_OFFSET + KS8695_PCIMEM_PA; \ | 41 | __dma = __dma - PHYS_OFFSET + KS8695_PCIMEM_PA; \ |
42 | __dma; }) | 42 | __dma; }) |
43 | 43 | ||
44 | #define __arch_dma_to_page(dev, x) \ | ||
45 | ({ dma_addr_t __dma = x; \ | ||
46 | if (!is_lbus_device(dev)) \ | ||
47 | __dma += PHYS_OFFSET - KS8695_PCIMEM_PA; \ | ||
48 | phys_to_page(__dma); \ | ||
49 | }) | ||
50 | |||
44 | #endif | 51 | #endif |
45 | 52 | ||
46 | #endif | 53 | #endif |
diff --git a/arch/arm/mach-nomadik/Kconfig b/arch/arm/mach-nomadik/Kconfig index 2a02b49c40f0..3c5e0f522e9c 100644 --- a/arch/arm/mach-nomadik/Kconfig +++ b/arch/arm/mach-nomadik/Kconfig | |||
@@ -5,13 +5,13 @@ menu "Nomadik boards" | |||
5 | config MACH_NOMADIK_8815NHK | 5 | config MACH_NOMADIK_8815NHK |
6 | bool "ST 8815 Nomadik Hardware Kit (evaluation board)" | 6 | bool "ST 8815 Nomadik Hardware Kit (evaluation board)" |
7 | select NOMADIK_8815 | 7 | select NOMADIK_8815 |
8 | select HAS_MTU | ||
8 | 9 | ||
9 | endmenu | 10 | endmenu |
10 | 11 | ||
11 | config NOMADIK_8815 | 12 | config NOMADIK_8815 |
12 | bool | 13 | bool |
13 | 14 | ||
14 | |||
15 | config I2C_BITBANG_8815NHK | 15 | config I2C_BITBANG_8815NHK |
16 | tristate "Driver for bit-bang busses found on the 8815 NHK" | 16 | tristate "Driver for bit-bang busses found on the 8815 NHK" |
17 | depends on I2C && MACH_NOMADIK_8815NHK | 17 | depends on I2C && MACH_NOMADIK_8815NHK |
diff --git a/arch/arm/mach-nomadik/Makefile b/arch/arm/mach-nomadik/Makefile index 412040982a40..36f67fb207d2 100644 --- a/arch/arm/mach-nomadik/Makefile +++ b/arch/arm/mach-nomadik/Makefile | |||
@@ -7,7 +7,7 @@ | |||
7 | 7 | ||
8 | # Object file lists. | 8 | # Object file lists. |
9 | 9 | ||
10 | obj-y += clock.o timer.o gpio.o | 10 | obj-y += clock.o gpio.o |
11 | 11 | ||
12 | # Cpu revision | 12 | # Cpu revision |
13 | obj-$(CONFIG_NOMADIK_8815) += cpu-8815.o | 13 | obj-$(CONFIG_NOMADIK_8815) += cpu-8815.o |
diff --git a/arch/arm/mach-nomadik/board-nhk8815.c b/arch/arm/mach-nomadik/board-nhk8815.c index 6bfd537d5afb..116394484e71 100644 --- a/arch/arm/mach-nomadik/board-nhk8815.c +++ b/arch/arm/mach-nomadik/board-nhk8815.c | |||
@@ -25,11 +25,18 @@ | |||
25 | #include <asm/mach/arch.h> | 25 | #include <asm/mach/arch.h> |
26 | #include <asm/mach/irq.h> | 26 | #include <asm/mach/irq.h> |
27 | #include <asm/mach/flash.h> | 27 | #include <asm/mach/flash.h> |
28 | |||
29 | #include <plat/mtu.h> | ||
30 | |||
28 | #include <mach/setup.h> | 31 | #include <mach/setup.h> |
29 | #include <mach/nand.h> | 32 | #include <mach/nand.h> |
30 | #include <mach/fsmc.h> | 33 | #include <mach/fsmc.h> |
31 | #include "clock.h" | 34 | #include "clock.h" |
32 | 35 | ||
36 | /* Initial value for SRC control register: all timers use MXTAL/8 source */ | ||
37 | #define SRC_CR_INIT_MASK 0x00007fff | ||
38 | #define SRC_CR_INIT_VAL 0x2aaa8000 | ||
39 | |||
33 | /* These adresses span 16MB, so use three individual pages */ | 40 | /* These adresses span 16MB, so use three individual pages */ |
34 | static struct resource nhk8815_nand_resources[] = { | 41 | static struct resource nhk8815_nand_resources[] = { |
35 | { | 42 | { |
@@ -239,6 +246,26 @@ static struct platform_device *nhk8815_platform_devices[] __initdata = { | |||
239 | /* will add more devices */ | 246 | /* will add more devices */ |
240 | }; | 247 | }; |
241 | 248 | ||
249 | static void __init nomadik_timer_init(void) | ||
250 | { | ||
251 | u32 src_cr; | ||
252 | |||
253 | /* Configure timer sources in "system reset controller" ctrl reg */ | ||
254 | src_cr = readl(io_p2v(NOMADIK_SRC_BASE)); | ||
255 | src_cr &= SRC_CR_INIT_MASK; | ||
256 | src_cr |= SRC_CR_INIT_VAL; | ||
257 | writel(src_cr, io_p2v(NOMADIK_SRC_BASE)); | ||
258 | |||
259 | /* Save global pointer to mtu, used by platform timer code */ | ||
260 | mtu_base = io_p2v(NOMADIK_MTU0_BASE); | ||
261 | |||
262 | nmdk_timer_init(); | ||
263 | } | ||
264 | |||
265 | static struct sys_timer nomadik_timer = { | ||
266 | .init = nomadik_timer_init, | ||
267 | }; | ||
268 | |||
242 | static void __init nhk8815_platform_init(void) | 269 | static void __init nhk8815_platform_init(void) |
243 | { | 270 | { |
244 | int i; | 271 | int i; |
diff --git a/arch/arm/mach-nomadik/include/mach/setup.h b/arch/arm/mach-nomadik/include/mach/setup.h index a4e468cf63da..b7897edf1f35 100644 --- a/arch/arm/mach-nomadik/include/mach/setup.h +++ b/arch/arm/mach-nomadik/include/mach/setup.h | |||
@@ -15,7 +15,7 @@ | |||
15 | extern void cpu8815_map_io(void); | 15 | extern void cpu8815_map_io(void); |
16 | extern void cpu8815_platform_init(void); | 16 | extern void cpu8815_platform_init(void); |
17 | extern void cpu8815_init_irq(void); | 17 | extern void cpu8815_init_irq(void); |
18 | extern struct sys_timer nomadik_timer; | 18 | extern void nmdk_timer_init(void); |
19 | 19 | ||
20 | #endif /* NOMADIK_8815 */ | 20 | #endif /* NOMADIK_8815 */ |
21 | 21 | ||
diff --git a/arch/arm/mach-u300/Makefile b/arch/arm/mach-u300/Makefile index 885b5c027c1e..fab46fe9a71f 100644 --- a/arch/arm/mach-u300/Makefile +++ b/arch/arm/mach-u300/Makefile | |||
@@ -12,3 +12,4 @@ obj-$(CONFIG_MMC) += mmc.o | |||
12 | obj-$(CONFIG_SPI_PL022) += spi.o | 12 | obj-$(CONFIG_SPI_PL022) += spi.o |
13 | obj-$(CONFIG_MACH_U300_SPIDUMMY) += dummyspichip.o | 13 | obj-$(CONFIG_MACH_U300_SPIDUMMY) += dummyspichip.o |
14 | obj-$(CONFIG_I2C_STU300) += i2c.o | 14 | obj-$(CONFIG_I2C_STU300) += i2c.o |
15 | obj-$(CONFIG_REGULATOR_AB3100) += regulator.o | ||
diff --git a/arch/arm/mach-u300/i2c.c b/arch/arm/mach-u300/i2c.c index 10be1f888b27..c73ed06b6065 100644 --- a/arch/arm/mach-u300/i2c.c +++ b/arch/arm/mach-u300/i2c.c | |||
@@ -9,13 +9,257 @@ | |||
9 | */ | 9 | */ |
10 | #include <linux/kernel.h> | 10 | #include <linux/kernel.h> |
11 | #include <linux/i2c.h> | 11 | #include <linux/i2c.h> |
12 | #include <linux/mfd/ab3100.h> | ||
13 | #include <linux/regulator/machine.h> | ||
14 | #include <linux/amba/bus.h> | ||
12 | #include <mach/irqs.h> | 15 | #include <mach/irqs.h> |
13 | 16 | ||
17 | /* | ||
18 | * Initial settings of ab3100 registers. | ||
19 | * Common for below LDO regulator settings are that | ||
20 | * bit 7-5 controls voltage. Bit 4 turns regulator ON(1) or OFF(0). | ||
21 | * Bit 3-2 controls sleep enable and bit 1-0 controls sleep mode. | ||
22 | */ | ||
23 | |||
24 | /* LDO_A 0x16: 2.75V, ON, SLEEP_A, SLEEP OFF GND */ | ||
25 | #define LDO_A_SETTING 0x16 | ||
26 | /* LDO_C 0x10: 2.65V, ON, SLEEP_A or B, SLEEP full power */ | ||
27 | #define LDO_C_SETTING 0x10 | ||
28 | /* LDO_D 0x10: 2.65V, ON, sleep mode not used */ | ||
29 | #define LDO_D_SETTING 0x10 | ||
30 | /* LDO_E 0x10: 1.8V, ON, SLEEP_A or B, SLEEP full power */ | ||
31 | #define LDO_E_SETTING 0x10 | ||
32 | /* LDO_E SLEEP 0x00: 1.8V, not used, SLEEP_A or B, not used */ | ||
33 | #define LDO_E_SLEEP_SETTING 0x00 | ||
34 | /* LDO_F 0xD0: 2.5V, ON, SLEEP_A or B, SLEEP full power */ | ||
35 | #define LDO_F_SETTING 0xD0 | ||
36 | /* LDO_G 0x00: 2.85V, OFF, SLEEP_A or B, SLEEP full power */ | ||
37 | #define LDO_G_SETTING 0x00 | ||
38 | /* LDO_H 0x18: 2.75V, ON, SLEEP_B, SLEEP full power */ | ||
39 | #define LDO_H_SETTING 0x18 | ||
40 | /* LDO_K 0x00: 2.75V, OFF, SLEEP_A or B, SLEEP full power */ | ||
41 | #define LDO_K_SETTING 0x00 | ||
42 | /* LDO_EXT 0x00: Voltage not set, OFF, not used, not used */ | ||
43 | #define LDO_EXT_SETTING 0x00 | ||
44 | /* BUCK 0x7D: 1.2V, ON, SLEEP_A and B, SLEEP low power */ | ||
45 | #define BUCK_SETTING 0x7D | ||
46 | /* BUCK SLEEP 0xAC: 1.05V, Not used, SLEEP_A and B, Not used */ | ||
47 | #define BUCK_SLEEP_SETTING 0xAC | ||
48 | |||
49 | static struct regulator_consumer_supply supply_ldo_c[] = { | ||
50 | { | ||
51 | .dev_name = "ab3100-codec", | ||
52 | .supply = "vaudio", /* Powers the codec */ | ||
53 | }, | ||
54 | }; | ||
55 | |||
56 | /* | ||
57 | * This one needs to be a supply so we can turn it off | ||
58 | * in order to shut down the system. | ||
59 | */ | ||
60 | static struct regulator_consumer_supply supply_ldo_d[] = { | ||
61 | { | ||
62 | .dev = NULL, | ||
63 | .supply = "vana15", /* Powers the SoC (CPU etc) */ | ||
64 | }, | ||
65 | }; | ||
66 | |||
67 | static struct regulator_consumer_supply supply_ldo_g[] = { | ||
68 | { | ||
69 | .dev_name = "mmci", | ||
70 | .supply = "vmmc", /* Powers MMC/SD card */ | ||
71 | }, | ||
72 | }; | ||
73 | |||
74 | static struct regulator_consumer_supply supply_ldo_h[] = { | ||
75 | { | ||
76 | .dev_name = "xgam_pdi", | ||
77 | .supply = "vdisp", /* Powers camera, display etc */ | ||
78 | }, | ||
79 | }; | ||
80 | |||
81 | static struct regulator_consumer_supply supply_ldo_k[] = { | ||
82 | { | ||
83 | .dev_name = "irda", | ||
84 | .supply = "vir", /* Power IrDA */ | ||
85 | }, | ||
86 | }; | ||
87 | |||
88 | /* | ||
89 | * This is a placeholder for whoever wish to use the | ||
90 | * external power. | ||
91 | */ | ||
92 | static struct regulator_consumer_supply supply_ldo_ext[] = { | ||
93 | { | ||
94 | .dev = NULL, | ||
95 | .supply = "vext", /* External power */ | ||
96 | }, | ||
97 | }; | ||
98 | |||
99 | /* Preset (hardware defined) voltages for these regulators */ | ||
100 | #define LDO_A_VOLTAGE 2750000 | ||
101 | #define LDO_C_VOLTAGE 2650000 | ||
102 | #define LDO_D_VOLTAGE 2650000 | ||
103 | |||
104 | static struct ab3100_platform_data ab3100_plf_data = { | ||
105 | .reg_constraints = { | ||
106 | /* LDO A routing and constraints */ | ||
107 | { | ||
108 | .constraints = { | ||
109 | .name = "vrad", | ||
110 | .min_uV = LDO_A_VOLTAGE, | ||
111 | .max_uV = LDO_A_VOLTAGE, | ||
112 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
113 | .always_on = 1, | ||
114 | .boot_on = 1, | ||
115 | }, | ||
116 | }, | ||
117 | /* LDO C routing and constraints */ | ||
118 | { | ||
119 | .constraints = { | ||
120 | .min_uV = LDO_C_VOLTAGE, | ||
121 | .max_uV = LDO_C_VOLTAGE, | ||
122 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
123 | }, | ||
124 | .num_consumer_supplies = ARRAY_SIZE(supply_ldo_c), | ||
125 | .consumer_supplies = supply_ldo_c, | ||
126 | }, | ||
127 | /* LDO D routing and constraints */ | ||
128 | { | ||
129 | .constraints = { | ||
130 | .min_uV = LDO_D_VOLTAGE, | ||
131 | .max_uV = LDO_D_VOLTAGE, | ||
132 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
133 | .valid_ops_mask = REGULATOR_CHANGE_STATUS, | ||
134 | /* | ||
135 | * Actually this is boot_on but we need | ||
136 | * to reference count it externally to | ||
137 | * be able to shut down the system. | ||
138 | */ | ||
139 | }, | ||
140 | .num_consumer_supplies = ARRAY_SIZE(supply_ldo_d), | ||
141 | .consumer_supplies = supply_ldo_d, | ||
142 | }, | ||
143 | /* LDO E routing and constraints */ | ||
144 | { | ||
145 | .constraints = { | ||
146 | .name = "vio", | ||
147 | .min_uV = 1800000, | ||
148 | .max_uV = 1800000, | ||
149 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
150 | .valid_ops_mask = | ||
151 | REGULATOR_CHANGE_VOLTAGE | | ||
152 | REGULATOR_CHANGE_STATUS, | ||
153 | .always_on = 1, | ||
154 | .boot_on = 1, | ||
155 | }, | ||
156 | }, | ||
157 | /* LDO F routing and constraints */ | ||
158 | { | ||
159 | .constraints = { | ||
160 | .name = "vana25", | ||
161 | .min_uV = 2500000, | ||
162 | .max_uV = 2500000, | ||
163 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
164 | .valid_ops_mask = | ||
165 | REGULATOR_CHANGE_VOLTAGE | | ||
166 | REGULATOR_CHANGE_STATUS, | ||
167 | .always_on = 1, | ||
168 | .boot_on = 1, | ||
169 | }, | ||
170 | }, | ||
171 | /* LDO G routing and constraints */ | ||
172 | { | ||
173 | .constraints = { | ||
174 | .min_uV = 1500000, | ||
175 | .max_uV = 2850000, | ||
176 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
177 | .valid_ops_mask = | ||
178 | REGULATOR_CHANGE_VOLTAGE | | ||
179 | REGULATOR_CHANGE_STATUS, | ||
180 | }, | ||
181 | .num_consumer_supplies = ARRAY_SIZE(supply_ldo_g), | ||
182 | .consumer_supplies = supply_ldo_g, | ||
183 | }, | ||
184 | /* LDO H routing and constraints */ | ||
185 | { | ||
186 | .constraints = { | ||
187 | .min_uV = 1200000, | ||
188 | .max_uV = 2750000, | ||
189 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
190 | .valid_ops_mask = | ||
191 | REGULATOR_CHANGE_VOLTAGE | | ||
192 | REGULATOR_CHANGE_STATUS, | ||
193 | }, | ||
194 | .num_consumer_supplies = ARRAY_SIZE(supply_ldo_h), | ||
195 | .consumer_supplies = supply_ldo_h, | ||
196 | }, | ||
197 | /* LDO K routing and constraints */ | ||
198 | { | ||
199 | .constraints = { | ||
200 | .min_uV = 1800000, | ||
201 | .max_uV = 2750000, | ||
202 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
203 | .valid_ops_mask = | ||
204 | REGULATOR_CHANGE_VOLTAGE | | ||
205 | REGULATOR_CHANGE_STATUS, | ||
206 | }, | ||
207 | .num_consumer_supplies = ARRAY_SIZE(supply_ldo_k), | ||
208 | .consumer_supplies = supply_ldo_k, | ||
209 | }, | ||
210 | /* External regulator interface. No fixed voltage specified. | ||
211 | * If we knew the voltage of the external regulator and it | ||
212 | * was connected on the board, we could add the (fixed) | ||
213 | * voltage for it here. | ||
214 | */ | ||
215 | { | ||
216 | .constraints = { | ||
217 | .min_uV = 0, | ||
218 | .max_uV = 0, | ||
219 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
220 | .valid_ops_mask = | ||
221 | REGULATOR_CHANGE_STATUS, | ||
222 | }, | ||
223 | .num_consumer_supplies = ARRAY_SIZE(supply_ldo_ext), | ||
224 | .consumer_supplies = supply_ldo_ext, | ||
225 | }, | ||
226 | /* Buck converter routing and constraints */ | ||
227 | { | ||
228 | .constraints = { | ||
229 | .name = "vcore", | ||
230 | .min_uV = 1200000, | ||
231 | .max_uV = 1800000, | ||
232 | .valid_modes_mask = REGULATOR_MODE_NORMAL, | ||
233 | .valid_ops_mask = | ||
234 | REGULATOR_CHANGE_VOLTAGE | | ||
235 | REGULATOR_CHANGE_STATUS, | ||
236 | .always_on = 1, | ||
237 | .boot_on = 1, | ||
238 | }, | ||
239 | }, | ||
240 | }, | ||
241 | .reg_initvals = { | ||
242 | LDO_A_SETTING, | ||
243 | LDO_C_SETTING, | ||
244 | LDO_E_SETTING, | ||
245 | LDO_E_SLEEP_SETTING, | ||
246 | LDO_F_SETTING, | ||
247 | LDO_G_SETTING, | ||
248 | LDO_H_SETTING, | ||
249 | LDO_K_SETTING, | ||
250 | LDO_EXT_SETTING, | ||
251 | BUCK_SETTING, | ||
252 | BUCK_SLEEP_SETTING, | ||
253 | LDO_D_SETTING, | ||
254 | }, | ||
255 | }; | ||
256 | |||
14 | static struct i2c_board_info __initdata bus0_i2c_board_info[] = { | 257 | static struct i2c_board_info __initdata bus0_i2c_board_info[] = { |
15 | { | 258 | { |
16 | .type = "ab3100", | 259 | .type = "ab3100", |
17 | .addr = 0x48, | 260 | .addr = 0x48, |
18 | .irq = IRQ_U300_IRQ0_EXT, | 261 | .irq = IRQ_U300_IRQ0_EXT, |
262 | .platform_data = &ab3100_plf_data, | ||
19 | }, | 263 | }, |
20 | }; | 264 | }; |
21 | 265 | ||
@@ -38,6 +282,11 @@ void __init u300_i2c_register_board_devices(void) | |||
38 | { | 282 | { |
39 | i2c_register_board_info(0, bus0_i2c_board_info, | 283 | i2c_register_board_info(0, bus0_i2c_board_info, |
40 | ARRAY_SIZE(bus0_i2c_board_info)); | 284 | ARRAY_SIZE(bus0_i2c_board_info)); |
285 | /* | ||
286 | * This makes the core shut down all unused regulators | ||
287 | * after all the initcalls have completed. | ||
288 | */ | ||
289 | regulator_has_full_constraints(); | ||
41 | i2c_register_board_info(1, bus1_i2c_board_info, | 290 | i2c_register_board_info(1, bus1_i2c_board_info, |
42 | ARRAY_SIZE(bus1_i2c_board_info)); | 291 | ARRAY_SIZE(bus1_i2c_board_info)); |
43 | } | 292 | } |
diff --git a/arch/arm/mach-u300/mmc.c b/arch/arm/mach-u300/mmc.c index 7b6b016786bb..109f5a6e71c7 100644 --- a/arch/arm/mach-u300/mmc.c +++ b/arch/arm/mach-u300/mmc.c | |||
@@ -40,64 +40,6 @@ static unsigned int mmc_status(struct device *dev) | |||
40 | return mmci_card->mmc_inserted; | 40 | return mmci_card->mmc_inserted; |
41 | } | 41 | } |
42 | 42 | ||
43 | /* | ||
44 | * Here follows a large chunk of code which will only be enabled if you | ||
45 | * have both the AB3100 chip mounted and the MMC subsystem activated. | ||
46 | */ | ||
47 | |||
48 | static u32 mmc_translate_vdd(struct device *dev, unsigned int voltage) | ||
49 | { | ||
50 | int v; | ||
51 | |||
52 | /* | ||
53 | * MMC Spec: | ||
54 | * bit 7: 1.70 - 1.95V | ||
55 | * bit 8 - 14: 2.0 - 2.6V | ||
56 | * bit 15 - 23: 2.7 - 3.6V | ||
57 | * | ||
58 | * ab3100 voltages: | ||
59 | * 000 - 2.85V | ||
60 | * 001 - 2.75V | ||
61 | * 010 - 1.8V | ||
62 | * 011 - 1.5V | ||
63 | */ | ||
64 | switch (voltage) { | ||
65 | case 8: | ||
66 | v = 3; | ||
67 | break; | ||
68 | case 9: | ||
69 | case 10: | ||
70 | case 11: | ||
71 | case 12: | ||
72 | case 13: | ||
73 | case 14: | ||
74 | case 15: | ||
75 | v = 1; | ||
76 | break; | ||
77 | case 16: | ||
78 | v = 1; | ||
79 | break; | ||
80 | case 17: | ||
81 | case 18: | ||
82 | case 19: | ||
83 | case 20: | ||
84 | case 21: | ||
85 | case 22: | ||
86 | case 23: | ||
87 | case 24: | ||
88 | v = 0; | ||
89 | break; | ||
90 | default: | ||
91 | v = 0; | ||
92 | break; | ||
93 | } | ||
94 | |||
95 | /* PL180 voltage register bits */ | ||
96 | return v << 2; | ||
97 | } | ||
98 | |||
99 | |||
100 | |||
101 | static int mmci_callback(void *data) | 43 | static int mmci_callback(void *data) |
102 | { | 44 | { |
103 | struct mmci_card_event *mmci_card = data; | 45 | struct mmci_card_event *mmci_card = data; |
@@ -154,9 +96,11 @@ int __devinit mmc_init(struct amba_device *adev) | |||
154 | if (!mmci_card) | 96 | if (!mmci_card) |
155 | return -ENOMEM; | 97 | return -ENOMEM; |
156 | 98 | ||
99 | /* | ||
100 | * Do not set ocr_mask or voltage translation function, | ||
101 | * we have a regulator we can control instead. | ||
102 | */ | ||
157 | /* Nominally 2.85V on our platform */ | 103 | /* Nominally 2.85V on our platform */ |
158 | mmci_card->mmc0_plat_data.ocr_mask = MMC_VDD_28_29; | ||
159 | mmci_card->mmc0_plat_data.translate_vdd = mmc_translate_vdd; | ||
160 | mmci_card->mmc0_plat_data.status = mmc_status; | 104 | mmci_card->mmc0_plat_data.status = mmc_status; |
161 | mmci_card->mmc0_plat_data.gpio_wp = -1; | 105 | mmci_card->mmc0_plat_data.gpio_wp = -1; |
162 | mmci_card->mmc0_plat_data.gpio_cd = -1; | 106 | mmci_card->mmc0_plat_data.gpio_cd = -1; |
diff --git a/arch/arm/mach-u300/regulator.c b/arch/arm/mach-u300/regulator.c new file mode 100644 index 000000000000..9c53f01c62eb --- /dev/null +++ b/arch/arm/mach-u300/regulator.c | |||
@@ -0,0 +1,88 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-u300/regulator.c | ||
3 | * | ||
4 | * Copyright (C) 2009 ST-Ericsson AB | ||
5 | * License terms: GNU General Public License (GPL) version 2 | ||
6 | * Handle board-bound regulators and board power not related | ||
7 | * to any devices. | ||
8 | * Author: Linus Walleij <linus.walleij@stericsson.com> | ||
9 | */ | ||
10 | #include <linux/device.h> | ||
11 | #include <linux/signal.h> | ||
12 | #include <linux/err.h> | ||
13 | #include <linux/regulator/consumer.h> | ||
14 | /* Those are just for writing in syscon */ | ||
15 | #include <linux/io.h> | ||
16 | #include <mach/hardware.h> | ||
17 | #include <mach/syscon.h> | ||
18 | |||
19 | /* | ||
20 | * Regulators that power the board and chip and which are | ||
21 | * not copuled to specific drivers are hogged in these | ||
22 | * instances. | ||
23 | */ | ||
24 | static struct regulator *main_power_15; | ||
25 | |||
26 | /* | ||
27 | * This function is used from pm.h to shut down the system by | ||
28 | * resetting all regulators in turn and then disable regulator | ||
29 | * LDO D (main power). | ||
30 | */ | ||
31 | void u300_pm_poweroff(void) | ||
32 | { | ||
33 | sigset_t old, all; | ||
34 | |||
35 | sigfillset(&all); | ||
36 | if (!sigprocmask(SIG_BLOCK, &all, &old)) { | ||
37 | /* Disable LDO D to shut down the system */ | ||
38 | if (main_power_15) | ||
39 | regulator_disable(main_power_15); | ||
40 | else | ||
41 | pr_err("regulator not available to shut down system\n"); | ||
42 | (void) sigprocmask(SIG_SETMASK, &old, NULL); | ||
43 | } | ||
44 | return; | ||
45 | } | ||
46 | |||
47 | /* | ||
48 | * Hog the regulators needed to power up the board. | ||
49 | */ | ||
50 | static int __init u300_init_boardpower(void) | ||
51 | { | ||
52 | int err; | ||
53 | u32 val; | ||
54 | |||
55 | pr_info("U300: setting up board power\n"); | ||
56 | main_power_15 = regulator_get(NULL, "vana15"); | ||
57 | if (IS_ERR(main_power_15)) { | ||
58 | pr_err("could not get vana15"); | ||
59 | return PTR_ERR(main_power_15); | ||
60 | } | ||
61 | err = regulator_enable(main_power_15); | ||
62 | if (err) { | ||
63 | pr_err("could not enable vana15\n"); | ||
64 | return err; | ||
65 | } | ||
66 | |||
67 | /* | ||
68 | * On U300 a special system controller register pulls up the DC | ||
69 | * until the vana15 (LDO D) regulator comes up. At this point, all | ||
70 | * regulators are set and we do not need power control via | ||
71 | * DC ON anymore. This function will likely be moved whenever | ||
72 | * the rest of the U300 power management is implemented. | ||
73 | */ | ||
74 | pr_info("U300: disable system controller pull-up\n"); | ||
75 | val = readw(U300_SYSCON_VBASE + U300_SYSCON_PMCR); | ||
76 | val &= ~U300_SYSCON_PMCR_DCON_ENABLE; | ||
77 | writew(val, U300_SYSCON_VBASE + U300_SYSCON_PMCR); | ||
78 | |||
79 | /* Register globally exported PM poweroff hook */ | ||
80 | pm_power_off = u300_pm_poweroff; | ||
81 | |||
82 | return 0; | ||
83 | } | ||
84 | |||
85 | /* | ||
86 | * So at module init time we hog the regulator! | ||
87 | */ | ||
88 | module_init(u300_init_boardpower); | ||
diff --git a/arch/arm/mach-ux500/Kconfig b/arch/arm/mach-ux500/Kconfig new file mode 100644 index 000000000000..03625d744857 --- /dev/null +++ b/arch/arm/mach-ux500/Kconfig | |||
@@ -0,0 +1,15 @@ | |||
1 | menu "ST-Ericsson platform type" | ||
2 | depends on ARCH_U8500 | ||
3 | |||
4 | comment "ST-Ericsson Multicore Mobile Platforms" | ||
5 | |||
6 | config MACH_U8500_MOP | ||
7 | bool "U8500 Early Development platform" | ||
8 | default y | ||
9 | select ARM_GIC | ||
10 | select HAS_MTU | ||
11 | help | ||
12 | Include support for mop500 development platform | ||
13 | based on U8500 architecture. The platform is based | ||
14 | on early drop silicon version of 8500. | ||
15 | endmenu | ||
diff --git a/arch/arm/mach-ux500/Makefile b/arch/arm/mach-ux500/Makefile new file mode 100644 index 000000000000..95e6e24c0042 --- /dev/null +++ b/arch/arm/mach-ux500/Makefile | |||
@@ -0,0 +1,8 @@ | |||
1 | # | ||
2 | # Makefile for the linux kernel, U8500 machine. | ||
3 | # | ||
4 | |||
5 | obj-y := clock.o | ||
6 | obj-$(CONFIG_ARCH_U8500) += cpu-u8500.o | ||
7 | obj-$(CONFIG_MACH_U8500_MOP) += board-mop500.o | ||
8 | obj-$(CONFIG_SMP) += platsmp.o headsmp.o localtimer.o | ||
diff --git a/arch/arm/mach-ux500/Makefile.boot b/arch/arm/mach-ux500/Makefile.boot new file mode 100644 index 000000000000..c7e75acfe6c9 --- /dev/null +++ b/arch/arm/mach-ux500/Makefile.boot | |||
@@ -0,0 +1,4 @@ | |||
1 | zreladdr-y := 0x00008000 | ||
2 | params_phys-y := 0x00000100 | ||
3 | initrd_phys-y := 0x00800000 | ||
4 | |||
diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c new file mode 100644 index 000000000000..aa5afbcc90f9 --- /dev/null +++ b/arch/arm/mach-ux500/board-mop500.c | |||
@@ -0,0 +1,158 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2008-2009 ST-Ericsson | ||
3 | * | ||
4 | * Author: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com> | ||
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 | */ | ||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/init.h> | ||
13 | #include <linux/interrupt.h> | ||
14 | #include <linux/platform_device.h> | ||
15 | #include <linux/io.h> | ||
16 | #include <linux/amba/bus.h> | ||
17 | #include <linux/amba/pl022.h> | ||
18 | #include <linux/spi/spi.h> | ||
19 | |||
20 | #include <asm/localtimer.h> | ||
21 | #include <asm/mach-types.h> | ||
22 | #include <asm/mach/arch.h> | ||
23 | |||
24 | #include <plat/mtu.h> | ||
25 | |||
26 | #include <mach/hardware.h> | ||
27 | #include <mach/setup.h> | ||
28 | |||
29 | #define __MEM_4K_RESOURCE(x) \ | ||
30 | .res = {.start = (x), .end = (x) + SZ_4K - 1, .flags = IORESOURCE_MEM} | ||
31 | |||
32 | /* These are active devices on this board */ | ||
33 | static struct amba_device uart0_device = { | ||
34 | .dev = { .init_name = "uart0" }, | ||
35 | __MEM_4K_RESOURCE(U8500_UART0_BASE), | ||
36 | .irq = {IRQ_UART0, NO_IRQ}, | ||
37 | }; | ||
38 | |||
39 | static struct amba_device uart1_device = { | ||
40 | .dev = { .init_name = "uart1" }, | ||
41 | __MEM_4K_RESOURCE(U8500_UART1_BASE), | ||
42 | .irq = {IRQ_UART1, NO_IRQ}, | ||
43 | }; | ||
44 | |||
45 | static struct amba_device uart2_device = { | ||
46 | .dev = { .init_name = "uart2" }, | ||
47 | __MEM_4K_RESOURCE(U8500_UART2_BASE), | ||
48 | .irq = {IRQ_UART2, NO_IRQ}, | ||
49 | }; | ||
50 | |||
51 | static void ab4500_spi_cs_control(u32 command) | ||
52 | { | ||
53 | /* set the FRM signal, which is CS - TODO */ | ||
54 | } | ||
55 | |||
56 | struct pl022_config_chip ab4500_chip_info = { | ||
57 | .lbm = LOOPBACK_DISABLED, | ||
58 | .com_mode = INTERRUPT_TRANSFER, | ||
59 | .iface = SSP_INTERFACE_MOTOROLA_SPI, | ||
60 | /* we can act as master only */ | ||
61 | .hierarchy = SSP_MASTER, | ||
62 | .slave_tx_disable = 0, | ||
63 | .endian_rx = SSP_RX_MSB, | ||
64 | .endian_tx = SSP_TX_MSB, | ||
65 | .data_size = SSP_DATA_BITS_24, | ||
66 | .rx_lev_trig = SSP_RX_1_OR_MORE_ELEM, | ||
67 | .tx_lev_trig = SSP_TX_1_OR_MORE_EMPTY_LOC, | ||
68 | .clk_phase = SSP_CLK_SECOND_EDGE, | ||
69 | .clk_pol = SSP_CLK_POL_IDLE_HIGH, | ||
70 | .cs_control = ab4500_spi_cs_control, | ||
71 | }; | ||
72 | |||
73 | static struct spi_board_info u8500_spi_devices[] = { | ||
74 | { | ||
75 | .modalias = "ab4500", | ||
76 | .controller_data = &ab4500_chip_info, | ||
77 | .max_speed_hz = 12000000, | ||
78 | .bus_num = 0, | ||
79 | .chip_select = 0, | ||
80 | .mode = SPI_MODE_0, | ||
81 | .irq = IRQ_AB4500, | ||
82 | }, | ||
83 | }; | ||
84 | |||
85 | static struct pl022_ssp_controller ssp0_platform_data = { | ||
86 | .bus_id = 0, | ||
87 | /* pl022 not yet supports dma */ | ||
88 | .enable_dma = 0, | ||
89 | /* on this platform, gpio 31,142,144,214 & | ||
90 | * 224 are connected as chip selects | ||
91 | */ | ||
92 | .num_chipselect = 5, | ||
93 | }; | ||
94 | |||
95 | static struct amba_device pl022_device = { | ||
96 | .dev = { | ||
97 | .coherent_dma_mask = ~0, | ||
98 | .init_name = "pl022", | ||
99 | .platform_data = &ssp0_platform_data, | ||
100 | }, | ||
101 | .res = { | ||
102 | .start = U8500_SSP0_BASE, | ||
103 | .end = U8500_SSP0_BASE + SZ_4K - 1, | ||
104 | .flags = IORESOURCE_MEM, | ||
105 | }, | ||
106 | .irq = {IRQ_SSP0, NO_IRQ }, | ||
107 | /* ST-Ericsson modified id */ | ||
108 | .periphid = SSP_PER_ID, | ||
109 | }; | ||
110 | |||
111 | static struct amba_device *amba_devs[] __initdata = { | ||
112 | &uart0_device, | ||
113 | &uart1_device, | ||
114 | &uart2_device, | ||
115 | &pl022_device, | ||
116 | }; | ||
117 | |||
118 | static void __init u8500_timer_init(void) | ||
119 | { | ||
120 | #ifdef CONFIG_LOCAL_TIMERS | ||
121 | /* Setup the local timer base */ | ||
122 | twd_base = __io_address(U8500_TWD_BASE); | ||
123 | #endif | ||
124 | /* Setup the MTU base */ | ||
125 | mtu_base = __io_address(U8500_MTU0_BASE); | ||
126 | |||
127 | nmdk_timer_init(); | ||
128 | } | ||
129 | |||
130 | static struct sys_timer u8500_timer = { | ||
131 | .init = u8500_timer_init, | ||
132 | }; | ||
133 | |||
134 | static void __init u8500_init_machine(void) | ||
135 | { | ||
136 | int i; | ||
137 | |||
138 | /* Register the active AMBA devices on this board */ | ||
139 | for (i = 0; i < ARRAY_SIZE(amba_devs); i++) | ||
140 | amba_device_register(amba_devs[i], &iomem_resource); | ||
141 | |||
142 | spi_register_board_info(u8500_spi_devices, | ||
143 | ARRAY_SIZE(u8500_spi_devices)); | ||
144 | |||
145 | u8500_init_devices(); | ||
146 | } | ||
147 | |||
148 | MACHINE_START(U8500, "ST-Ericsson MOP500 platform") | ||
149 | /* Maintainer: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com> */ | ||
150 | .phys_io = U8500_UART2_BASE, | ||
151 | .io_pg_offst = (IO_ADDRESS(U8500_UART2_BASE) >> 18) & 0xfffc, | ||
152 | .boot_params = 0x100, | ||
153 | .map_io = u8500_map_io, | ||
154 | .init_irq = u8500_init_irq, | ||
155 | /* we re-use nomadik timer here */ | ||
156 | .timer = &u8500_timer, | ||
157 | .init_machine = u8500_init_machine, | ||
158 | MACHINE_END | ||
diff --git a/arch/arm/mach-ux500/clock.c b/arch/arm/mach-ux500/clock.c new file mode 100644 index 000000000000..20b6ebb6783a --- /dev/null +++ b/arch/arm/mach-ux500/clock.c | |||
@@ -0,0 +1,95 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2009 ST-Ericsson | ||
3 | * heavily based on realview platform | ||
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 version 2 as | ||
7 | * published by the Free Software Foundation. | ||
8 | */ | ||
9 | #include <linux/module.h> | ||
10 | #include <linux/kernel.h> | ||
11 | #include <linux/list.h> | ||
12 | #include <linux/errno.h> | ||
13 | #include <linux/err.h> | ||
14 | #include <linux/clk.h> | ||
15 | #include <linux/mutex.h> | ||
16 | |||
17 | #include <asm/clkdev.h> | ||
18 | |||
19 | /* currently the clk structure | ||
20 | * just supports rate. This would | ||
21 | * be extended as and when new devices are | ||
22 | * added - TODO | ||
23 | */ | ||
24 | struct clk { | ||
25 | unsigned long rate; | ||
26 | }; | ||
27 | |||
28 | int clk_enable(struct clk *clk) | ||
29 | { | ||
30 | return 0; | ||
31 | } | ||
32 | EXPORT_SYMBOL(clk_enable); | ||
33 | |||
34 | void clk_disable(struct clk *clk) | ||
35 | { | ||
36 | } | ||
37 | EXPORT_SYMBOL(clk_disable); | ||
38 | |||
39 | unsigned long clk_get_rate(struct clk *clk) | ||
40 | { | ||
41 | return clk->rate; | ||
42 | } | ||
43 | EXPORT_SYMBOL(clk_get_rate); | ||
44 | |||
45 | long clk_round_rate(struct clk *clk, unsigned long rate) | ||
46 | { | ||
47 | /*TODO*/ | ||
48 | return rate; | ||
49 | } | ||
50 | EXPORT_SYMBOL(clk_round_rate); | ||
51 | |||
52 | int clk_set_rate(struct clk *clk, unsigned long rate) | ||
53 | { | ||
54 | clk->rate = rate; | ||
55 | return 0; | ||
56 | } | ||
57 | EXPORT_SYMBOL(clk_set_rate); | ||
58 | |||
59 | /* ssp clock */ | ||
60 | static struct clk ssp_clk = { | ||
61 | .rate = 48000000, | ||
62 | }; | ||
63 | |||
64 | /* fixed clock */ | ||
65 | static struct clk f38_clk = { | ||
66 | .rate = 38400000, | ||
67 | }; | ||
68 | |||
69 | static struct clk_lookup lookups[] = { | ||
70 | { | ||
71 | /* UART0 */ | ||
72 | .dev_id = "uart0", | ||
73 | .clk = &f38_clk, | ||
74 | }, { /* UART1 */ | ||
75 | .dev_id = "uart1", | ||
76 | .clk = &f38_clk, | ||
77 | }, { /* UART2 */ | ||
78 | .dev_id = "uart2", | ||
79 | .clk = &f38_clk, | ||
80 | }, { /* SSP */ | ||
81 | .dev_id = "pl022", | ||
82 | .clk = &ssp_clk, | ||
83 | } | ||
84 | }; | ||
85 | |||
86 | static int __init clk_init(void) | ||
87 | { | ||
88 | int i; | ||
89 | |||
90 | /* register the clock lookups */ | ||
91 | for (i = 0; i < ARRAY_SIZE(lookups); i++) | ||
92 | clkdev_add(&lookups[i]); | ||
93 | return 0; | ||
94 | } | ||
95 | arch_initcall(clk_init); | ||
diff --git a/arch/arm/mach-ux500/cpu-u8500.c b/arch/arm/mach-ux500/cpu-u8500.c new file mode 100644 index 000000000000..5f05e5850f71 --- /dev/null +++ b/arch/arm/mach-ux500/cpu-u8500.c | |||
@@ -0,0 +1,64 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2008-2009 ST-Ericsson | ||
3 | * | ||
4 | * Author: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com> | ||
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 | */ | ||
11 | #include <linux/types.h> | ||
12 | #include <linux/init.h> | ||
13 | #include <linux/device.h> | ||
14 | #include <linux/amba/bus.h> | ||
15 | #include <linux/irq.h> | ||
16 | #include <linux/platform_device.h> | ||
17 | |||
18 | #include <asm/hardware/gic.h> | ||
19 | #include <asm/mach/map.h> | ||
20 | #include <mach/hardware.h> | ||
21 | |||
22 | /* add any platform devices here - TODO */ | ||
23 | static struct platform_device *platform_devs[] __initdata = { | ||
24 | /* yet to be added, add i2c0, gpio.. */ | ||
25 | }; | ||
26 | |||
27 | #define __IO_DEV_DESC(x, sz) { \ | ||
28 | .virtual = IO_ADDRESS(x), \ | ||
29 | .pfn = __phys_to_pfn(x), \ | ||
30 | .length = sz, \ | ||
31 | .type = MT_DEVICE, \ | ||
32 | } | ||
33 | |||
34 | /* minimum static i/o mapping required to boot U8500 platforms */ | ||
35 | static struct map_desc u8500_io_desc[] __initdata = { | ||
36 | __IO_DEV_DESC(U8500_GIC_CPU_BASE, SZ_4K), | ||
37 | __IO_DEV_DESC(U8500_GIC_DIST_BASE, SZ_4K), | ||
38 | __IO_DEV_DESC(U8500_MTU0_BASE, SZ_4K), | ||
39 | __IO_DEV_DESC(U8500_TWD_BASE, SZ_4K), | ||
40 | __IO_DEV_DESC(U8500_SCU_BASE, SZ_4K), | ||
41 | __IO_DEV_DESC(U8500_BACKUPRAM0_BASE, SZ_8K), | ||
42 | }; | ||
43 | |||
44 | void __init u8500_map_io(void) | ||
45 | { | ||
46 | iotable_init(u8500_io_desc, ARRAY_SIZE(u8500_io_desc)); | ||
47 | } | ||
48 | |||
49 | void __init u8500_init_irq(void) | ||
50 | { | ||
51 | gic_dist_init(0, __io_address(U8500_GIC_DIST_BASE), 29); | ||
52 | gic_cpu_init(0, __io_address(U8500_GIC_CPU_BASE)); | ||
53 | } | ||
54 | |||
55 | /* | ||
56 | * This function is called from the board init | ||
57 | */ | ||
58 | void __init u8500_init_devices(void) | ||
59 | { | ||
60 | /* Register the platform devices */ | ||
61 | platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs)); | ||
62 | |||
63 | return ; | ||
64 | } | ||
diff --git a/arch/arm/mach-ux500/headsmp.S b/arch/arm/mach-ux500/headsmp.S new file mode 100644 index 000000000000..a6be2cdf2b2f --- /dev/null +++ b/arch/arm/mach-ux500/headsmp.S | |||
@@ -0,0 +1,38 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2009 ST-Ericsson | ||
3 | * This file is based ARM Realview platform | ||
4 | * Copyright (c) 2003 ARM Limited | ||
5 | * All Rights Reserved | ||
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 version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | */ | ||
11 | #include <linux/linkage.h> | ||
12 | #include <linux/init.h> | ||
13 | |||
14 | __INIT | ||
15 | |||
16 | /* | ||
17 | * U8500 specific entry point for secondary CPUs. | ||
18 | */ | ||
19 | ENTRY(u8500_secondary_startup) | ||
20 | mrc p15, 0, r0, c0, c0, 5 | ||
21 | and r0, r0, #15 | ||
22 | adr r4, 1f | ||
23 | ldmia r4, {r5, r6} | ||
24 | sub r4, r4, r5 | ||
25 | add r6, r6, r4 | ||
26 | dsb | ||
27 | pen: ldr r7, [r6] | ||
28 | cmp r7, r0 | ||
29 | bne pen | ||
30 | |||
31 | /* | ||
32 | * we've been released from the holding pen: secondary_stack | ||
33 | * should now contain the SVC stack for this core | ||
34 | */ | ||
35 | b secondary_startup | ||
36 | |||
37 | 1: .long . | ||
38 | .long pen_release | ||
diff --git a/arch/arm/mach-ux500/include/mach/clkdev.h b/arch/arm/mach-ux500/include/mach/clkdev.h new file mode 100644 index 000000000000..04b37a89801c --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/clkdev.h | |||
@@ -0,0 +1,7 @@ | |||
1 | #ifndef __ASM_MACH_CLKDEV_H | ||
2 | #define __ASM_MACH_CLKDEV_H | ||
3 | |||
4 | #define __clk_get(clk) ({ 1; }) | ||
5 | #define __clk_put(clk) do { } while (0) | ||
6 | |||
7 | #endif | ||
diff --git a/arch/arm/mach-ux500/include/mach/debug-macro.S b/arch/arm/mach-ux500/include/mach/debug-macro.S new file mode 100644 index 000000000000..8f21b6a95dce --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/debug-macro.S | |||
@@ -0,0 +1,19 @@ | |||
1 | /* | ||
2 | * Debugging macro include header | ||
3 | * | ||
4 | * Copyright (C) 2009 ST-Ericsson | ||
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 | */ | ||
11 | .macro addruart,rx | ||
12 | mrc p15, 0, \rx, c1, c0 | ||
13 | tst \rx, #1 @MMU enabled? | ||
14 | moveq \rx, #0x80000000 @MMU off, Physical address | ||
15 | movne \rx, #0xF0000000 @MMU on, Virtual address | ||
16 | orr \rx, \rx, #0x7000 | ||
17 | .endm | ||
18 | |||
19 | #include <asm/hardware/debug-pl01x.S> | ||
diff --git a/arch/arm/mach-ux500/include/mach/entry-macro.S b/arch/arm/mach-ux500/include/mach/entry-macro.S new file mode 100644 index 000000000000..eece3301fef7 --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/entry-macro.S | |||
@@ -0,0 +1,89 @@ | |||
1 | /* | ||
2 | * Low-level IRQ helper macros for U8500 platforms | ||
3 | * | ||
4 | * Copyright (C) 2009 ST-Ericsson. | ||
5 | * | ||
6 | * This file is a copy of ARM Realview platform. | ||
7 | * -just satisfied checkpatch script. | ||
8 | * | ||
9 | * This file is licensed under the terms of the GNU General Public | ||
10 | * License version 2. This program is licensed "as is" without any | ||
11 | * warranty of any kind, whether express or implied. | ||
12 | */ | ||
13 | #include <mach/hardware.h> | ||
14 | #include <asm/hardware/gic.h> | ||
15 | |||
16 | .macro disable_fiq | ||
17 | .endm | ||
18 | |||
19 | .macro get_irqnr_preamble, base, tmp | ||
20 | ldr \base, =IO_ADDRESS(U8500_GIC_CPU_BASE) | ||
21 | .endm | ||
22 | |||
23 | .macro arch_ret_to_user, tmp1, tmp2 | ||
24 | .endm | ||
25 | |||
26 | /* | ||
27 | * The interrupt numbering scheme is defined in the | ||
28 | * interrupt controller spec. To wit: | ||
29 | * | ||
30 | * Interrupts 0-15 are IPI | ||
31 | * 16-28 are reserved | ||
32 | * 29-31 are local. We allow 30 to be used for the watchdog. | ||
33 | * 32-1020 are global | ||
34 | * 1021-1022 are reserved | ||
35 | * 1023 is "spurious" (no interrupt) | ||
36 | * | ||
37 | * For now, we ignore all local interrupts so only return an | ||
38 | * interrupt if it's between 30 and 1020. The test_for_ipi | ||
39 | * routine below will pick up on IPIs. | ||
40 | * | ||
41 | * A simple read from the controller will tell us the number | ||
42 | * of the highest priority enabled interrupt. We then just | ||
43 | * need to check whether it is in the valid range for an | ||
44 | * IRQ (30-1020 inclusive). | ||
45 | */ | ||
46 | |||
47 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
48 | |||
49 | /* bits 12-10 = src CPU, 9-0 = int # */ | ||
50 | ldr \irqstat, [\base, #GIC_CPU_INTACK] | ||
51 | |||
52 | ldr \tmp, =1021 | ||
53 | |||
54 | bic \irqnr, \irqstat, #0x1c00 | ||
55 | |||
56 | cmp \irqnr, #29 | ||
57 | cmpcc \irqnr, \irqnr | ||
58 | cmpne \irqnr, \tmp | ||
59 | cmpcs \irqnr, \irqnr | ||
60 | |||
61 | .endm | ||
62 | |||
63 | /* We assume that irqstat (the raw value of the IRQ | ||
64 | * acknowledge register) is preserved from the macro above. | ||
65 | * If there is an IPI, we immediately signal end of | ||
66 | * interrupt on the controller, since this requires the | ||
67 | * original irqstat value which we won't easily be able | ||
68 | * to recreate later. | ||
69 | */ | ||
70 | |||
71 | .macro test_for_ipi, irqnr, irqstat, base, tmp | ||
72 | bic \irqnr, \irqstat, #0x1c00 | ||
73 | cmp \irqnr, #16 | ||
74 | strcc \irqstat, [\base, #GIC_CPU_EOI] | ||
75 | cmpcs \irqnr, \irqnr | ||
76 | .endm | ||
77 | |||
78 | /* As above, this assumes that irqstat and base | ||
79 | * are preserved.. | ||
80 | */ | ||
81 | |||
82 | .macro test_for_ltirq, irqnr, irqstat, base, tmp | ||
83 | bic \irqnr, \irqstat, #0x1c00 | ||
84 | mov \tmp, #0 | ||
85 | cmp \irqnr, #29 | ||
86 | moveq \tmp, #1 | ||
87 | streq \irqstat, [\base, #GIC_CPU_EOI] | ||
88 | cmp \tmp, #0 | ||
89 | .endm | ||
diff --git a/arch/arm/mach-ux500/include/mach/hardware.h b/arch/arm/mach-ux500/include/mach/hardware.h new file mode 100644 index 000000000000..6da650202dc7 --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/hardware.h | |||
@@ -0,0 +1,131 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2009 ST-Ericsson. | ||
3 | * | ||
4 | * U8500 hardware definitions | ||
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 | #ifndef __MACH_HARDWARE_H | ||
11 | #define __MACH_HARDWARE_H | ||
12 | |||
13 | /* macros to get at IO space when running virtually | ||
14 | * We dont map all the peripherals, let ioremap do | ||
15 | * this for us. We map only very basic peripherals here. | ||
16 | */ | ||
17 | #define U8500_IO_VIRTUAL 0xf0000000 | ||
18 | #define U8500_IO_PHYSICAL 0xa0000000 | ||
19 | |||
20 | /* this macro is used in assembly, so no cast */ | ||
21 | #define IO_ADDRESS(x) \ | ||
22 | (((x) & 0x0fffffff) + (((x) >> 4) & 0x0f000000) + U8500_IO_VIRTUAL) | ||
23 | |||
24 | /* typesafe io address */ | ||
25 | #define __io_address(n) __io(IO_ADDRESS(n)) | ||
26 | |||
27 | /* | ||
28 | * Base address definitions for U8500 Onchip IPs. All the | ||
29 | * peripherals are contained in a single 1 Mbyte region, with | ||
30 | * AHB peripherals at the bottom and APB peripherals at the | ||
31 | * top of the region. PER stands for PERIPHERAL region which | ||
32 | * itself divided into sub regions. | ||
33 | */ | ||
34 | #define U8500_PER3_BASE 0x80000000 | ||
35 | #define U8500_PER2_BASE 0x80110000 | ||
36 | #define U8500_PER1_BASE 0x80120000 | ||
37 | #define U8500_PER4_BASE 0x80150000 | ||
38 | |||
39 | #define U8500_PER6_BASE 0xa03c0000 | ||
40 | #define U8500_PER5_BASE 0xa03e0000 | ||
41 | #define U8500_PER7_BASE 0xa03d0000 | ||
42 | |||
43 | #define U8500_SVA_BASE 0xa0100000 | ||
44 | #define U8500_SIA_BASE 0xa0200000 | ||
45 | |||
46 | #define U8500_SGA_BASE 0xa0300000 | ||
47 | #define U8500_MCDE_BASE 0xa0350000 | ||
48 | #define U8500_DMA_BASE 0xa0362000 | ||
49 | |||
50 | #define U8500_SCU_BASE 0xa0410000 | ||
51 | #define U8500_GIC_CPU_BASE 0xa0410100 | ||
52 | #define U8500_TWD_BASE 0xa0410600 | ||
53 | #define U8500_GIC_DIST_BASE 0xa0411000 | ||
54 | #define U8500_L2CC_BASE 0xa0412000 | ||
55 | |||
56 | #define U8500_TWD_SIZE 0x100 | ||
57 | |||
58 | /* per7 base addressess */ | ||
59 | #define U8500_CR_BASE (U8500_PER7_BASE + 0x8000) | ||
60 | #define U8500_MTU0_BASE (U8500_PER7_BASE + 0xa000) | ||
61 | #define U8500_MTU1_BASE (U8500_PER7_BASE + 0xb000) | ||
62 | #define U8500_TZPC0_BASE (U8500_PER7_BASE + 0xc000) | ||
63 | #define U8500_CLKRST7_BASE (U8500_PER7_BASE + 0xf000) | ||
64 | |||
65 | /* per6 base addressess */ | ||
66 | #define U8500_RNG_BASE (U8500_PER6_BASE + 0x0000) | ||
67 | #define U8500_PKA_BASE (U8500_PER6_BASE + 0x1000) | ||
68 | #define U8500_PKAM_BASE (U8500_PER6_BASE + 0x2000) | ||
69 | #define U8500_CRYPTO0_BASE (U8500_PER6_BASE + 0xa000) | ||
70 | #define U8500_CRYPTO1_BASE (U8500_PER6_BASE + 0xb000) | ||
71 | #define U8500_CLKRST6_BASE (U8500_PER7_BASE + 0xf000) | ||
72 | |||
73 | /* per5 base addressess */ | ||
74 | #define U8500_USBOTG_BASE (U8500_PER5_BASE + 0x00000) | ||
75 | #define U8500_GPIO5_BASE (U8500_PER5_BASE + 0x1e000) | ||
76 | #define U8500_CLKRST5_BASE (U8500_PER7_BASE + 0x1f000) | ||
77 | |||
78 | /* per4 base addressess */ | ||
79 | #define U8500_BACKUPRAM0_BASE (U8500_PER4_BASE + 0x0000) | ||
80 | #define U8500_BACKUPRAM1_BASE (U8500_PER4_BASE + 0x1000) | ||
81 | #define U8500_RTT0_BASE (U8500_PER4_BASE + 0x2000) | ||
82 | #define U8500_RTT1_BASE (U8500_PER4_BASE + 0x3000) | ||
83 | #define U8500_RTC_BASE (U8500_PER4_BASE + 0x4000) | ||
84 | #define U8500_SCR_BASE (U8500_PER4_BASE + 0x5000) | ||
85 | #define U8500_DMC_BASE (U8500_PER4_BASE + 0x6000) | ||
86 | #define U8500_PRCMU_BASE (U8500_PER4_BASE + 0x7000) | ||
87 | |||
88 | /* per3 base addressess */ | ||
89 | #define U8500_FSMC_BASE (U8500_PER3_BASE + 0x0000) | ||
90 | #define U8500_SSP0_BASE (U8500_PER3_BASE + 0x2000) | ||
91 | #define U8500_SSP1_BASE (U8500_PER3_BASE + 0x3000) | ||
92 | #define U8500_I2C0_BASE (U8500_PER3_BASE + 0x4000) | ||
93 | #define U8500_SDI2_BASE (U8500_PER3_BASE + 0x5000) | ||
94 | #define U8500_SKE_BASE (U8500_PER3_BASE + 0x6000) | ||
95 | #define U8500_UART2_BASE (U8500_PER3_BASE + 0x7000) | ||
96 | #define U8500_SDI5_BASE (U8500_PER3_BASE + 0x8000) | ||
97 | #define U8500_GPIO3_BASE (U8500_PER3_BASE + 0xe000) | ||
98 | #define U8500_CLKRST3_BASE (U8500_PER7_BASE + 0xf000) | ||
99 | |||
100 | /* per2 base addressess */ | ||
101 | #define U8500_I2C3_BASE (U8500_PER2_BASE + 0x0000) | ||
102 | #define U8500_SPI2_BASE (U8500_PER2_BASE + 0x1000) | ||
103 | #define U8500_SPI1_BASE (U8500_PER2_BASE + 0x2000) | ||
104 | #define U8500_PWL_BASE (U8500_PER2_BASE + 0x3000) | ||
105 | #define U8500_SDI4_BASE (U8500_PER2_BASE + 0x4000) | ||
106 | #define U8500_MSP2_BASE (U8500_PER2_BASE + 0x7000) | ||
107 | #define U8500_SDI1_BASE (U8500_PER2_BASE + 0x8000) | ||
108 | #define U8500_SDI3_BASE (U8500_PER2_BASE + 0x9000) | ||
109 | #define U8500_SPI0_BASE (U8500_PER2_BASE + 0xa000) | ||
110 | #define U8500_HSIR_BASE (U8500_PER2_BASE + 0xb000) | ||
111 | #define U8500_HSIT_BASE (U8500_PER2_BASE + 0xc000) | ||
112 | #define U8500_GPIO2_BASE (U8500_PER2_BASE + 0xe000) | ||
113 | #define U8500_CLKRST2_BASE (U8500_PER2_BASE + 0xf000) | ||
114 | |||
115 | /* per1 base addresses */ | ||
116 | #define U8500_UART0_BASE (U8500_PER1_BASE + 0x0000) | ||
117 | #define U8500_UART1_BASE (U8500_PER1_BASE + 0x1000) | ||
118 | #define U8500_I2C1_BASE (U8500_PER1_BASE + 0x2000) | ||
119 | #define U8500_MSP0_BASE (U8500_PER1_BASE + 0x3000) | ||
120 | #define U8500_MSP1_BASE (U8500_PER1_BASE + 0x4000) | ||
121 | #define U8500_SDI0_BASE (U8500_PER1_BASE + 0x6000) | ||
122 | #define U8500_I2C2_BASE (U8500_PER1_BASE + 0x8000) | ||
123 | #define U8500_SPI3_BASE (U8500_PER1_BASE + 0x9000) | ||
124 | #define U8500_SLIM0_BASE (U8500_PER1_BASE + 0xa000) | ||
125 | #define U8500_GPIO1_BASE (U8500_PER1_BASE + 0xe000) | ||
126 | #define U8500_CLKRST1_BASE (U8500_PER2_BASE + 0xf000) | ||
127 | |||
128 | /* ST-Ericsson modified pl022 id */ | ||
129 | #define SSP_PER_ID 0x01080022 | ||
130 | |||
131 | #endif /* __MACH_HARDWARE_H */ | ||
diff --git a/arch/arm/mach-ux500/include/mach/io.h b/arch/arm/mach-ux500/include/mach/io.h new file mode 100644 index 000000000000..1cf3f44ce5b2 --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/io.h | |||
@@ -0,0 +1,22 @@ | |||
1 | /* | ||
2 | * arch/arm/mach-u8500/include/mach/io.h | ||
3 | * | ||
4 | * Copyright (C) 1997-1999 Russell King | ||
5 | * | ||
6 | * Modifications: | ||
7 | * 06-12-1997 RMK Created. | ||
8 | * 07-04-1999 RMK Major cleanup | ||
9 | */ | ||
10 | #ifndef __ASM_ARM_ARCH_IO_H | ||
11 | #define __ASM_ARM_ARCH_IO_H | ||
12 | |||
13 | #define IO_SPACE_LIMIT 0xffffffff | ||
14 | |||
15 | /* | ||
16 | * We don't actually have real ISA nor PCI buses, but there is so many | ||
17 | * drivers out there that might just work if we fake them... | ||
18 | */ | ||
19 | #define __io(a) __typesafe_io(a) | ||
20 | #define __mem_pci(a) (a) | ||
21 | |||
22 | #endif | ||
diff --git a/arch/arm/mach-ux500/include/mach/irqs.h b/arch/arm/mach-ux500/include/mach/irqs.h new file mode 100644 index 000000000000..394b5dd2200f --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/irqs.h | |||
@@ -0,0 +1,71 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2008 STMicroelectronics | ||
3 | * Copyright (C) 2009 ST-Ericsson. | ||
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 | #ifndef ASM_ARCH_IRQS_H | ||
11 | #define ASM_ARCH_IRQS_H | ||
12 | |||
13 | #include <mach/hardware.h> | ||
14 | |||
15 | #define IRQ_LOCALTIMER 29 | ||
16 | #define IRQ_LOCALWDOG 30 | ||
17 | |||
18 | /* Shared Peripheral Interrupt (SHPI) */ | ||
19 | #define IRQ_SHPI_START 32 | ||
20 | |||
21 | /* Interrupt numbers generic for shared peripheral */ | ||
22 | #define IRQ_MTU0 (IRQ_SHPI_START + 4) | ||
23 | #define IRQ_SPI2 (IRQ_SHPI_START + 6) | ||
24 | #define IRQ_SPI0 (IRQ_SHPI_START + 8) | ||
25 | #define IRQ_UART0 (IRQ_SHPI_START + 11) | ||
26 | #define IRQ_I2C3 (IRQ_SHPI_START + 12) | ||
27 | #define IRQ_SSP0 (IRQ_SHPI_START + 14) | ||
28 | #define IRQ_MTU1 (IRQ_SHPI_START + 17) | ||
29 | #define IRQ_RTC_RTT (IRQ_SHPI_START + 18) | ||
30 | #define IRQ_UART1 (IRQ_SHPI_START + 19) | ||
31 | #define IRQ_I2C0 (IRQ_SHPI_START + 21) | ||
32 | #define IRQ_I2C1 (IRQ_SHPI_START + 22) | ||
33 | #define IRQ_USBOTG (IRQ_SHPI_START + 23) | ||
34 | #define IRQ_DMA (IRQ_SHPI_START + 25) | ||
35 | #define IRQ_UART2 (IRQ_SHPI_START + 26) | ||
36 | #define IRQ_HSIR_EXCEP (IRQ_SHPI_START + 29) | ||
37 | #define IRQ_MSP0 (IRQ_SHPI_START + 31) | ||
38 | #define IRQ_HSIR_CH0_OVRRUN (IRQ_SHPI_START + 32) | ||
39 | #define IRQ_HSIR_CH1_OVRRUN (IRQ_SHPI_START + 33) | ||
40 | #define IRQ_HSIR_CH2_OVRRUN (IRQ_SHPI_START + 34) | ||
41 | #define IRQ_HSIR_CH3_OVRRUN (IRQ_SHPI_START + 35) | ||
42 | #define IRQ_AB4500 (IRQ_SHPI_START + 40) | ||
43 | #define IRQ_DISP (IRQ_SHPI_START + 48) | ||
44 | #define IRQ_SiPI3 (IRQ_SHPI_START + 49) | ||
45 | #define IRQ_SSP1 (IRQ_SHPI_START + 52) | ||
46 | #define IRQ_I2C2 (IRQ_SHPI_START + 55) | ||
47 | #define IRQ_SDMMC0 (IRQ_SHPI_START + 60) | ||
48 | #define IRQ_MSP1 (IRQ_SHPI_START + 62) | ||
49 | #define IRQ_SPI1 (IRQ_SHPI_START + 96) | ||
50 | #define IRQ_MSP2 (IRQ_SHPI_START + 98) | ||
51 | #define IRQ_SDMMC4 (IRQ_SHPI_START + 99) | ||
52 | #define IRQ_HSIRD0 (IRQ_SHPI_START + 104) | ||
53 | #define IRQ_HSIRD1 (IRQ_SHPI_START + 105) | ||
54 | #define IRQ_HSITD0 (IRQ_SHPI_START + 106) | ||
55 | #define IRQ_HSITD1 (IRQ_SHPI_START + 107) | ||
56 | #define IRQ_GPIO0 (IRQ_SHPI_START + 119) | ||
57 | #define IRQ_GPIO1 (IRQ_SHPI_START + 120) | ||
58 | #define IRQ_GPIO2 (IRQ_SHPI_START + 121) | ||
59 | #define IRQ_GPIO3 (IRQ_SHPI_START + 122) | ||
60 | #define IRQ_GPIO4 (IRQ_SHPI_START + 123) | ||
61 | #define IRQ_GPIO5 (IRQ_SHPI_START + 124) | ||
62 | #define IRQ_GPIO6 (IRQ_SHPI_START + 125) | ||
63 | #define IRQ_GPIO7 (IRQ_SHPI_START + 126) | ||
64 | #define IRQ_GPIO8 (IRQ_SHPI_START + 127) | ||
65 | |||
66 | /* There are 128 shared peripheral interrupts assigned to | ||
67 | * INTID[160:32]. The first 32 interrupts are reserved. | ||
68 | */ | ||
69 | #define NR_IRQS 161 | ||
70 | |||
71 | #endif /*ASM_ARCH_IRQS_H*/ | ||
diff --git a/arch/arm/mach-ux500/include/mach/memory.h b/arch/arm/mach-ux500/include/mach/memory.h new file mode 100644 index 000000000000..510571a59e25 --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/memory.h | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2009 ST-Ericsson | ||
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 as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
8 | */ | ||
9 | #ifndef __ASM_ARCH_MEMORY_H | ||
10 | #define __ASM_ARCH_MEMORY_H | ||
11 | |||
12 | /* | ||
13 | * Physical DRAM offset. | ||
14 | */ | ||
15 | #define PHYS_OFFSET UL(0x00000000) | ||
16 | #define BUS_OFFSET UL(0x00000000) | ||
17 | |||
18 | #endif | ||
diff --git a/arch/arm/mach-ux500/include/mach/setup.h b/arch/arm/mach-ux500/include/mach/setup.h new file mode 100644 index 000000000000..cf0ce1687f24 --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/setup.h | |||
@@ -0,0 +1,23 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2009 ST-Ericsson. | ||
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 | * These symbols are needed for board-specific files to call their | ||
9 | * own cpu-specific files | ||
10 | */ | ||
11 | #ifndef __ASM_ARCH_SETUP_H | ||
12 | #define __ASM_ARCH_SETUP_H | ||
13 | |||
14 | #include <asm/mach/time.h> | ||
15 | #include <linux/init.h> | ||
16 | |||
17 | extern void u8500_map_io(void); | ||
18 | extern void u8500_init_devices(void); | ||
19 | extern void u8500_init_irq(void); | ||
20 | /* We re-use nomadik_timer for this platform */ | ||
21 | extern void nmdk_timer_init(void); | ||
22 | |||
23 | #endif /* __ASM_ARCH_SETUP_H */ | ||
diff --git a/arch/arm/mach-ux500/include/mach/smp.h b/arch/arm/mach-ux500/include/mach/smp.h new file mode 100644 index 000000000000..b59f7bc9725d --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/smp.h | |||
@@ -0,0 +1,32 @@ | |||
1 | /* | ||
2 | * This file is based ARM realview platform. | ||
3 | * Copyright (C) ARM Limited. | ||
4 | * | ||
5 | * This file is licensed under the terms of the GNU General Public | ||
6 | * License version 2. This program is licensed "as is" without any | ||
7 | * warranty of any kind, whether express or implied. | ||
8 | */ | ||
9 | #ifndef ASMARM_ARCH_SMP_H | ||
10 | #define ASMARM_ARCH_SMP_H | ||
11 | |||
12 | #include <asm/hardware/gic.h> | ||
13 | |||
14 | /* This is required to wakeup the secondary core */ | ||
15 | extern void u8500_secondary_startup(void); | ||
16 | |||
17 | #define hard_smp_processor_id() \ | ||
18 | ({ \ | ||
19 | unsigned int cpunum; \ | ||
20 | __asm__("mrc p15, 0, %0, c0, c0, 5" \ | ||
21 | : "=r" (cpunum)); \ | ||
22 | cpunum &= 0x0F; \ | ||
23 | }) | ||
24 | |||
25 | /* | ||
26 | * We use IRQ1 as the IPI | ||
27 | */ | ||
28 | static inline void smp_cross_call(const struct cpumask *mask) | ||
29 | { | ||
30 | gic_raise_softirq(mask, 1); | ||
31 | } | ||
32 | #endif | ||
diff --git a/arch/arm/mach-ux500/include/mach/system.h b/arch/arm/mach-ux500/include/mach/system.h new file mode 100644 index 000000000000..c0cd8006f1a2 --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/system.h | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2009 ST-Ericsson. | ||
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 | #ifndef __ASM_ARCH_SYSTEM_H | ||
9 | #define __ASM_ARCH_SYSTEM_H | ||
10 | |||
11 | static inline void arch_idle(void) | ||
12 | { | ||
13 | /* | ||
14 | * This should do all the clock switching | ||
15 | * and wait for interrupt tricks | ||
16 | */ | ||
17 | cpu_do_idle(); | ||
18 | } | ||
19 | |||
20 | static inline void arch_reset(char mode, const char *cmd) | ||
21 | { | ||
22 | /* yet to be implemented - TODO */ | ||
23 | } | ||
24 | |||
25 | #endif | ||
diff --git a/arch/arm/mach-ux500/include/mach/timex.h b/arch/arm/mach-ux500/include/mach/timex.h new file mode 100644 index 000000000000..d0942c174018 --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/timex.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef __ASM_ARCH_TIMEX_H | ||
2 | #define __ASM_ARCH_TIMEX_H | ||
3 | |||
4 | #define CLOCK_TICK_RATE 110000000 | ||
5 | |||
6 | #endif | ||
diff --git a/arch/arm/mach-ux500/include/mach/uncompress.h b/arch/arm/mach-ux500/include/mach/uncompress.h new file mode 100644 index 000000000000..8552eb188b50 --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/uncompress.h | |||
@@ -0,0 +1,58 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2009 ST-Ericsson | ||
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 as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
17 | */ | ||
18 | #ifndef __ASM_ARCH_UNCOMPRESS_H | ||
19 | #define __ASM_ARCH_UNCOMPRESS_H | ||
20 | |||
21 | #include <asm/setup.h> | ||
22 | #include <linux/io.h> | ||
23 | #include <mach/hardware.h> | ||
24 | |||
25 | #define U8500_UART_DR 0x80007000 | ||
26 | #define U8500_UART_LCRH 0x8000702c | ||
27 | #define U8500_UART_CR 0x80007030 | ||
28 | #define U8500_UART_FR 0x80007018 | ||
29 | |||
30 | static void putc(const char c) | ||
31 | { | ||
32 | /* Do nothing if the UART is not enabled. */ | ||
33 | if (!(readb(U8500_UART_CR) & 0x1)) | ||
34 | return; | ||
35 | |||
36 | if (c == '\n') | ||
37 | putc('\r'); | ||
38 | |||
39 | while (readb(U8500_UART_FR) & (1 << 5)) | ||
40 | barrier(); | ||
41 | writeb(c, U8500_UART_DR); | ||
42 | } | ||
43 | |||
44 | static void flush(void) | ||
45 | { | ||
46 | if (!(readb(U8500_UART_CR) & 0x1)) | ||
47 | return; | ||
48 | while (readb(U8500_UART_FR) & (1 << 3)) | ||
49 | barrier(); | ||
50 | } | ||
51 | |||
52 | static inline void arch_decomp_setup(void) | ||
53 | { | ||
54 | } | ||
55 | |||
56 | #define arch_decomp_wdog() /* nothing to do here */ | ||
57 | |||
58 | #endif /* __ASM_ARCH_UNCOMPRESS_H */ | ||
diff --git a/arch/arm/mach-ux500/include/mach/vmalloc.h b/arch/arm/mach-ux500/include/mach/vmalloc.h new file mode 100644 index 000000000000..86cdbbce1842 --- /dev/null +++ b/arch/arm/mach-ux500/include/mach/vmalloc.h | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2009 ST-Ericsson | ||
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 as published by | ||
6 | * the Free Software Foundation; either version 2 of the License, or | ||
7 | * (at your option) any later version. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, | ||
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
12 | * GNU General Public License for more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License | ||
15 | * along with this program; if not, write to the Free Software | ||
16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
17 | */ | ||
18 | #define VMALLOC_END 0xf0000000 | ||
diff --git a/arch/arm/mach-ux500/localtimer.c b/arch/arm/mach-ux500/localtimer.c new file mode 100644 index 000000000000..2288f6a7c518 --- /dev/null +++ b/arch/arm/mach-ux500/localtimer.c | |||
@@ -0,0 +1,28 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2008-2009 ST-Ericsson | ||
3 | * Srinidhi Kasagar <srinidhi.kasagar@stericsson.com> | ||
4 | * | ||
5 | * This file is heavily based on relaview platform, almost a copy. | ||
6 | * | ||
7 | * Copyright (C) 2002 ARM Ltd. | ||
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 | #include <linux/init.h> | ||
14 | #include <linux/smp.h> | ||
15 | #include <linux/clockchips.h> | ||
16 | |||
17 | #include <asm/irq.h> | ||
18 | #include <asm/smp_twd.h> | ||
19 | #include <asm/localtimer.h> | ||
20 | |||
21 | /* | ||
22 | * Setup the local clock events for a CPU. | ||
23 | */ | ||
24 | void __cpuinit local_timer_setup(struct clock_event_device *evt) | ||
25 | { | ||
26 | evt->irq = IRQ_LOCALTIMER; | ||
27 | twd_timer_setup(evt); | ||
28 | } | ||
diff --git a/arch/arm/mach-ux500/platsmp.c b/arch/arm/mach-ux500/platsmp.c new file mode 100644 index 000000000000..8dfe7ca245d8 --- /dev/null +++ b/arch/arm/mach-ux500/platsmp.c | |||
@@ -0,0 +1,177 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2002 ARM Ltd. | ||
3 | * Copyright (C) 2008 STMicroelctronics. | ||
4 | * Copyright (C) 2009 ST-Ericsson. | ||
5 | * Author: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com> | ||
6 | * | ||
7 | * This file is based on arm realview platform | ||
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 | #include <linux/init.h> | ||
14 | #include <linux/errno.h> | ||
15 | #include <linux/delay.h> | ||
16 | #include <linux/device.h> | ||
17 | #include <linux/smp.h> | ||
18 | #include <linux/io.h> | ||
19 | |||
20 | #include <asm/cacheflush.h> | ||
21 | #include <asm/localtimer.h> | ||
22 | #include <asm/smp_scu.h> | ||
23 | #include <mach/hardware.h> | ||
24 | |||
25 | /* | ||
26 | * control for which core is the next to come out of the secondary | ||
27 | * boot "holding pen" | ||
28 | */ | ||
29 | volatile int __cpuinitdata pen_release = -1; | ||
30 | |||
31 | static unsigned int __init get_core_count(void) | ||
32 | { | ||
33 | return scu_get_core_count(__io_address(U8500_SCU_BASE)); | ||
34 | } | ||
35 | |||
36 | static DEFINE_SPINLOCK(boot_lock); | ||
37 | |||
38 | void __cpuinit platform_secondary_init(unsigned int cpu) | ||
39 | { | ||
40 | trace_hardirqs_off(); | ||
41 | |||
42 | /* | ||
43 | * if any interrupts are already enabled for the primary | ||
44 | * core (e.g. timer irq), then they will not have been enabled | ||
45 | * for us: do so | ||
46 | */ | ||
47 | gic_cpu_init(0, __io_address(U8500_GIC_CPU_BASE)); | ||
48 | |||
49 | /* | ||
50 | * let the primary processor know we're out of the | ||
51 | * pen, then head off into the C entry point | ||
52 | */ | ||
53 | pen_release = -1; | ||
54 | |||
55 | /* | ||
56 | * Synchronise with the boot thread. | ||
57 | */ | ||
58 | spin_lock(&boot_lock); | ||
59 | spin_unlock(&boot_lock); | ||
60 | } | ||
61 | |||
62 | int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle) | ||
63 | { | ||
64 | unsigned long timeout; | ||
65 | |||
66 | /* | ||
67 | * set synchronisation state between this boot processor | ||
68 | * and the secondary one | ||
69 | */ | ||
70 | spin_lock(&boot_lock); | ||
71 | |||
72 | /* | ||
73 | * The secondary processor is waiting to be released from | ||
74 | * the holding pen - release it, then wait for it to flag | ||
75 | * that it has been released by resetting pen_release. | ||
76 | */ | ||
77 | pen_release = cpu; | ||
78 | flush_cache_all(); | ||
79 | |||
80 | timeout = jiffies + (1 * HZ); | ||
81 | while (time_before(jiffies, timeout)) { | ||
82 | if (pen_release == -1) | ||
83 | break; | ||
84 | } | ||
85 | |||
86 | /* | ||
87 | * now the secondary core is starting up let it run its | ||
88 | * calibrations, then wait for it to finish | ||
89 | */ | ||
90 | spin_unlock(&boot_lock); | ||
91 | |||
92 | return pen_release != -1 ? -ENOSYS : 0; | ||
93 | } | ||
94 | |||
95 | static void __init wakeup_secondary(void) | ||
96 | { | ||
97 | /* nobody is to be released from the pen yet */ | ||
98 | pen_release = -1; | ||
99 | |||
100 | /* | ||
101 | * write the address of secondary startup into the backup ram register | ||
102 | * at offset 0x1FF4, then write the magic number 0xA1FEED01 to the | ||
103 | * backup ram register at offset 0x1FF0, which is what boot rom code | ||
104 | * is waiting for. This would wake up the secondary core from WFE | ||
105 | */ | ||
106 | #define U8500_CPU1_JUMPADDR_OFFSET 0x1FF4 | ||
107 | __raw_writel(virt_to_phys(u8500_secondary_startup), | ||
108 | (void __iomem *)IO_ADDRESS(U8500_BACKUPRAM0_BASE) + | ||
109 | U8500_CPU1_JUMPADDR_OFFSET); | ||
110 | |||
111 | #define U8500_CPU1_WAKEMAGIC_OFFSET 0x1FF0 | ||
112 | __raw_writel(0xA1FEED01, | ||
113 | (void __iomem *)IO_ADDRESS(U8500_BACKUPRAM0_BASE) + | ||
114 | U8500_CPU1_WAKEMAGIC_OFFSET); | ||
115 | |||
116 | /* make sure write buffer is drained */ | ||
117 | mb(); | ||
118 | } | ||
119 | |||
120 | /* | ||
121 | * Initialise the CPU possible map early - this describes the CPUs | ||
122 | * which may be present or become present in the system. | ||
123 | */ | ||
124 | void __init smp_init_cpus(void) | ||
125 | { | ||
126 | unsigned int i, ncores = get_core_count(); | ||
127 | |||
128 | for (i = 0; i < ncores; i++) | ||
129 | set_cpu_possible(i, true); | ||
130 | } | ||
131 | |||
132 | void __init smp_prepare_cpus(unsigned int max_cpus) | ||
133 | { | ||
134 | unsigned int ncores = get_core_count(); | ||
135 | unsigned int cpu = smp_processor_id(); | ||
136 | int i; | ||
137 | |||
138 | /* sanity check */ | ||
139 | if (ncores == 0) { | ||
140 | printk(KERN_ERR | ||
141 | "U8500: strange CM count of 0? Default to 1\n"); | ||
142 | ncores = 1; | ||
143 | } | ||
144 | |||
145 | if (ncores > num_possible_cpus()) { | ||
146 | printk(KERN_WARNING | ||
147 | "U8500: no. of cores (%d) greater than configured " | ||
148 | "maximum of %d - clipping\n", | ||
149 | ncores, num_possible_cpus()); | ||
150 | ncores = num_possible_cpus(); | ||
151 | } | ||
152 | |||
153 | smp_store_cpu_info(cpu); | ||
154 | |||
155 | /* | ||
156 | * are we trying to boot more cores than exist? | ||
157 | */ | ||
158 | if (max_cpus > ncores) | ||
159 | max_cpus = ncores; | ||
160 | |||
161 | /* | ||
162 | * Initialise the present map, which describes the set of CPUs | ||
163 | * actually populated at the present time. | ||
164 | */ | ||
165 | for (i = 0; i < max_cpus; i++) | ||
166 | set_cpu_present(i, true); | ||
167 | |||
168 | if (max_cpus > 1) { | ||
169 | /* | ||
170 | * Enable the local timer or broadcast device for the | ||
171 | * boot CPU, but only if we have more than one CPU. | ||
172 | */ | ||
173 | percpu_timer_setup(); | ||
174 | scu_enable(__io_address(U8500_SCU_BASE)); | ||
175 | wakeup_secondary(); | ||
176 | } | ||
177 | } | ||
diff --git a/arch/arm/mach-w90x900/dev.c b/arch/arm/mach-w90x900/dev.c index 2a6f98de48d2..51f17b753348 100644 --- a/arch/arm/mach-w90x900/dev.c +++ b/arch/arm/mach-w90x900/dev.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <asm/mach-types.h> | 32 | #include <asm/mach-types.h> |
33 | 33 | ||
34 | #include <mach/regs-serial.h> | 34 | #include <mach/regs-serial.h> |
35 | #include <mach/nuc900_spi.h> | ||
35 | #include <mach/map.h> | 36 | #include <mach/map.h> |
36 | 37 | ||
37 | #include "cpu.h" | 38 | #include "cpu.h" |
@@ -196,6 +197,18 @@ static struct platform_device nuc900_device_emc = { | |||
196 | 197 | ||
197 | /* SPI device */ | 198 | /* SPI device */ |
198 | 199 | ||
200 | static struct w90p910_spi_info nuc900_spiflash_data = { | ||
201 | .num_cs = 1, | ||
202 | .lsb = 0, | ||
203 | .txneg = 1, | ||
204 | .rxneg = 0, | ||
205 | .divider = 24, | ||
206 | .sleep = 0, | ||
207 | .txnum = 0, | ||
208 | .txbitlen = 1, | ||
209 | .bus_num = 0, | ||
210 | }; | ||
211 | |||
199 | static struct resource nuc900_spi_resource[] = { | 212 | static struct resource nuc900_spi_resource[] = { |
200 | [0] = { | 213 | [0] = { |
201 | .start = W90X900_PA_I2C + SPIOFFSET, | 214 | .start = W90X900_PA_I2C + SPIOFFSET, |
@@ -214,6 +227,9 @@ static struct platform_device nuc900_device_spi = { | |||
214 | .id = -1, | 227 | .id = -1, |
215 | .num_resources = ARRAY_SIZE(nuc900_spi_resource), | 228 | .num_resources = ARRAY_SIZE(nuc900_spi_resource), |
216 | .resource = nuc900_spi_resource, | 229 | .resource = nuc900_spi_resource, |
230 | .dev = { | ||
231 | .platform_data = &nuc900_spiflash_data, | ||
232 | } | ||
217 | }; | 233 | }; |
218 | 234 | ||
219 | /* spi device, spi flash info */ | 235 | /* spi device, spi flash info */ |
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig index 9264d814cd7a..7b7d4c36c11c 100644 --- a/arch/arm/mm/Kconfig +++ b/arch/arm/mm/Kconfig | |||
@@ -774,5 +774,5 @@ config CACHE_XSC3L2 | |||
774 | 774 | ||
775 | config ARM_L1_CACHE_SHIFT | 775 | config ARM_L1_CACHE_SHIFT |
776 | int | 776 | int |
777 | default 6 if ARCH_OMAP3 | 777 | default 6 if ARCH_OMAP3 || ARCH_S5PC1XX |
778 | default 5 | 778 | default 5 |
diff --git a/arch/arm/mm/Makefile b/arch/arm/mm/Makefile index 055cb2aa8134..42352e75742b 100644 --- a/arch/arm/mm/Makefile +++ b/arch/arm/mm/Makefile | |||
@@ -6,7 +6,7 @@ obj-y := dma-mapping.o extable.o fault.o init.o \ | |||
6 | iomap.o | 6 | iomap.o |
7 | 7 | ||
8 | obj-$(CONFIG_MMU) += fault-armv.o flush.o ioremap.o mmap.o \ | 8 | obj-$(CONFIG_MMU) += fault-armv.o flush.o ioremap.o mmap.o \ |
9 | pgd.o mmu.o | 9 | pgd.o mmu.o vmregion.o |
10 | 10 | ||
11 | ifneq ($(CONFIG_MMU),y) | 11 | ifneq ($(CONFIG_MMU),y) |
12 | obj-y += nommu.o | 12 | obj-y += nommu.o |
diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c index b480f1d3591f..747f9a9021bb 100644 --- a/arch/arm/mm/cache-l2x0.c +++ b/arch/arm/mm/cache-l2x0.c | |||
@@ -99,18 +99,25 @@ void __init l2x0_init(void __iomem *base, __u32 aux_val, __u32 aux_mask) | |||
99 | 99 | ||
100 | l2x0_base = base; | 100 | l2x0_base = base; |
101 | 101 | ||
102 | /* disable L2X0 */ | 102 | /* |
103 | writel(0, l2x0_base + L2X0_CTRL); | 103 | * Check if l2x0 controller is already enabled. |
104 | * If you are booting from non-secure mode | ||
105 | * accessing the below registers will fault. | ||
106 | */ | ||
107 | if (!(readl(l2x0_base + L2X0_CTRL) & 1)) { | ||
104 | 108 | ||
105 | aux = readl(l2x0_base + L2X0_AUX_CTRL); | 109 | /* l2x0 controller is disabled */ |
106 | aux &= aux_mask; | ||
107 | aux |= aux_val; | ||
108 | writel(aux, l2x0_base + L2X0_AUX_CTRL); | ||
109 | 110 | ||
110 | l2x0_inv_all(); | 111 | aux = readl(l2x0_base + L2X0_AUX_CTRL); |
112 | aux &= aux_mask; | ||
113 | aux |= aux_val; | ||
114 | writel(aux, l2x0_base + L2X0_AUX_CTRL); | ||
111 | 115 | ||
112 | /* enable L2X0 */ | 116 | l2x0_inv_all(); |
113 | writel(1, l2x0_base + L2X0_CTRL); | 117 | |
118 | /* enable L2X0 */ | ||
119 | writel(1, l2x0_base + L2X0_CTRL); | ||
120 | } | ||
114 | 121 | ||
115 | outer_cache.inv_range = l2x0_inv_range; | 122 | outer_cache.inv_range = l2x0_inv_range; |
116 | outer_cache.clean_range = l2x0_clean_range; | 123 | outer_cache.clean_range = l2x0_clean_range; |
diff --git a/arch/arm/mm/copypage-v6.c b/arch/arm/mm/copypage-v6.c index 4127a7bddfe5..841f355319bf 100644 --- a/arch/arm/mm/copypage-v6.c +++ b/arch/arm/mm/copypage-v6.c | |||
@@ -41,6 +41,14 @@ static void v6_copy_user_highpage_nonaliasing(struct page *to, | |||
41 | kfrom = kmap_atomic(from, KM_USER0); | 41 | kfrom = kmap_atomic(from, KM_USER0); |
42 | kto = kmap_atomic(to, KM_USER1); | 42 | kto = kmap_atomic(to, KM_USER1); |
43 | copy_page(kto, kfrom); | 43 | copy_page(kto, kfrom); |
44 | #ifdef CONFIG_HIGHMEM | ||
45 | /* | ||
46 | * kmap_atomic() doesn't set the page virtual address, and | ||
47 | * kunmap_atomic() takes care of cache flushing already. | ||
48 | */ | ||
49 | if (page_address(to) != NULL) | ||
50 | #endif | ||
51 | __cpuc_flush_dcache_page(kto); | ||
44 | kunmap_atomic(kto, KM_USER1); | 52 | kunmap_atomic(kto, KM_USER1); |
45 | kunmap_atomic(kfrom, KM_USER0); | 53 | kunmap_atomic(kfrom, KM_USER0); |
46 | } | 54 | } |
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index b9590a7085ca..26325cb5d368 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c | |||
@@ -63,194 +63,152 @@ static u64 get_coherent_dma_mask(struct device *dev) | |||
63 | return mask; | 63 | return mask; |
64 | } | 64 | } |
65 | 65 | ||
66 | #ifdef CONFIG_MMU | ||
67 | /* | 66 | /* |
68 | * These are the page tables (2MB each) covering uncached, DMA consistent allocations | 67 | * Allocate a DMA buffer for 'dev' of size 'size' using the |
68 | * specified gfp mask. Note that 'size' must be page aligned. | ||
69 | */ | 69 | */ |
70 | static pte_t *consistent_pte[NUM_CONSISTENT_PTES]; | 70 | static struct page *__dma_alloc_buffer(struct device *dev, size_t size, gfp_t gfp) |
71 | static DEFINE_SPINLOCK(consistent_lock); | 71 | { |
72 | unsigned long order = get_order(size); | ||
73 | struct page *page, *p, *e; | ||
74 | void *ptr; | ||
75 | u64 mask = get_coherent_dma_mask(dev); | ||
72 | 76 | ||
73 | /* | 77 | #ifdef CONFIG_DMA_API_DEBUG |
74 | * VM region handling support. | 78 | u64 limit = (mask + 1) & ~mask; |
75 | * | 79 | if (limit && size >= limit) { |
76 | * This should become something generic, handling VM region allocations for | 80 | dev_warn(dev, "coherent allocation too big (requested %#x mask %#llx)\n", |
77 | * vmalloc and similar (ioremap, module space, etc). | 81 | size, mask); |
78 | * | 82 | return NULL; |
79 | * I envisage vmalloc()'s supporting vm_struct becoming: | 83 | } |
80 | * | 84 | #endif |
81 | * struct vm_struct { | ||
82 | * struct vm_region region; | ||
83 | * unsigned long flags; | ||
84 | * struct page **pages; | ||
85 | * unsigned int nr_pages; | ||
86 | * unsigned long phys_addr; | ||
87 | * }; | ||
88 | * | ||
89 | * get_vm_area() would then call vm_region_alloc with an appropriate | ||
90 | * struct vm_region head (eg): | ||
91 | * | ||
92 | * struct vm_region vmalloc_head = { | ||
93 | * .vm_list = LIST_HEAD_INIT(vmalloc_head.vm_list), | ||
94 | * .vm_start = VMALLOC_START, | ||
95 | * .vm_end = VMALLOC_END, | ||
96 | * }; | ||
97 | * | ||
98 | * However, vmalloc_head.vm_start is variable (typically, it is dependent on | ||
99 | * the amount of RAM found at boot time.) I would imagine that get_vm_area() | ||
100 | * would have to initialise this each time prior to calling vm_region_alloc(). | ||
101 | */ | ||
102 | struct arm_vm_region { | ||
103 | struct list_head vm_list; | ||
104 | unsigned long vm_start; | ||
105 | unsigned long vm_end; | ||
106 | struct page *vm_pages; | ||
107 | int vm_active; | ||
108 | }; | ||
109 | 85 | ||
110 | static struct arm_vm_region consistent_head = { | 86 | if (!mask) |
111 | .vm_list = LIST_HEAD_INIT(consistent_head.vm_list), | 87 | return NULL; |
112 | .vm_start = CONSISTENT_BASE, | ||
113 | .vm_end = CONSISTENT_END, | ||
114 | }; | ||
115 | 88 | ||
116 | static struct arm_vm_region * | 89 | if (mask < 0xffffffffULL) |
117 | arm_vm_region_alloc(struct arm_vm_region *head, size_t size, gfp_t gfp) | 90 | gfp |= GFP_DMA; |
118 | { | 91 | |
119 | unsigned long addr = head->vm_start, end = head->vm_end - size; | 92 | page = alloc_pages(gfp, order); |
120 | unsigned long flags; | 93 | if (!page) |
121 | struct arm_vm_region *c, *new; | 94 | return NULL; |
122 | |||
123 | new = kmalloc(sizeof(struct arm_vm_region), gfp); | ||
124 | if (!new) | ||
125 | goto out; | ||
126 | |||
127 | spin_lock_irqsave(&consistent_lock, flags); | ||
128 | |||
129 | list_for_each_entry(c, &head->vm_list, vm_list) { | ||
130 | if ((addr + size) < addr) | ||
131 | goto nospc; | ||
132 | if ((addr + size) <= c->vm_start) | ||
133 | goto found; | ||
134 | addr = c->vm_end; | ||
135 | if (addr > end) | ||
136 | goto nospc; | ||
137 | } | ||
138 | 95 | ||
139 | found: | ||
140 | /* | 96 | /* |
141 | * Insert this entry _before_ the one we found. | 97 | * Now split the huge page and free the excess pages |
142 | */ | 98 | */ |
143 | list_add_tail(&new->vm_list, &c->vm_list); | 99 | split_page(page, order); |
144 | new->vm_start = addr; | 100 | for (p = page + (size >> PAGE_SHIFT), e = page + (1 << order); p < e; p++) |
145 | new->vm_end = addr + size; | 101 | __free_page(p); |
146 | new->vm_active = 1; | 102 | |
147 | 103 | /* | |
148 | spin_unlock_irqrestore(&consistent_lock, flags); | 104 | * Ensure that the allocated pages are zeroed, and that any data |
149 | return new; | 105 | * lurking in the kernel direct-mapped region is invalidated. |
150 | 106 | */ | |
151 | nospc: | 107 | ptr = page_address(page); |
152 | spin_unlock_irqrestore(&consistent_lock, flags); | 108 | memset(ptr, 0, size); |
153 | kfree(new); | 109 | dmac_flush_range(ptr, ptr + size); |
154 | out: | 110 | outer_flush_range(__pa(ptr), __pa(ptr) + size); |
155 | return NULL; | 111 | |
112 | return page; | ||
156 | } | 113 | } |
157 | 114 | ||
158 | static struct arm_vm_region *arm_vm_region_find(struct arm_vm_region *head, unsigned long addr) | 115 | /* |
116 | * Free a DMA buffer. 'size' must be page aligned. | ||
117 | */ | ||
118 | static void __dma_free_buffer(struct page *page, size_t size) | ||
159 | { | 119 | { |
160 | struct arm_vm_region *c; | 120 | struct page *e = page + (size >> PAGE_SHIFT); |
161 | 121 | ||
162 | list_for_each_entry(c, &head->vm_list, vm_list) { | 122 | while (page < e) { |
163 | if (c->vm_active && c->vm_start == addr) | 123 | __free_page(page); |
164 | goto out; | 124 | page++; |
165 | } | 125 | } |
166 | c = NULL; | ||
167 | out: | ||
168 | return c; | ||
169 | } | 126 | } |
170 | 127 | ||
128 | #ifdef CONFIG_MMU | ||
129 | /* | ||
130 | * These are the page tables (2MB each) covering uncached, DMA consistent allocations | ||
131 | */ | ||
132 | static pte_t *consistent_pte[NUM_CONSISTENT_PTES]; | ||
133 | |||
134 | #include "vmregion.h" | ||
135 | |||
136 | static struct arm_vmregion_head consistent_head = { | ||
137 | .vm_lock = __SPIN_LOCK_UNLOCKED(&consistent_head.vm_lock), | ||
138 | .vm_list = LIST_HEAD_INIT(consistent_head.vm_list), | ||
139 | .vm_start = CONSISTENT_BASE, | ||
140 | .vm_end = CONSISTENT_END, | ||
141 | }; | ||
142 | |||
171 | #ifdef CONFIG_HUGETLB_PAGE | 143 | #ifdef CONFIG_HUGETLB_PAGE |
172 | #error ARM Coherent DMA allocator does not (yet) support huge TLB | 144 | #error ARM Coherent DMA allocator does not (yet) support huge TLB |
173 | #endif | 145 | #endif |
174 | 146 | ||
175 | static void * | 147 | /* |
176 | __dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp, | 148 | * Initialise the consistent memory allocation. |
177 | pgprot_t prot) | 149 | */ |
150 | static int __init consistent_init(void) | ||
178 | { | 151 | { |
179 | struct page *page; | 152 | int ret = 0; |
180 | struct arm_vm_region *c; | 153 | pgd_t *pgd; |
181 | unsigned long order; | 154 | pmd_t *pmd; |
182 | u64 mask = get_coherent_dma_mask(dev); | 155 | pte_t *pte; |
183 | u64 limit; | 156 | int i = 0; |
157 | u32 base = CONSISTENT_BASE; | ||
184 | 158 | ||
185 | if (!consistent_pte[0]) { | 159 | do { |
186 | printk(KERN_ERR "%s: not initialised\n", __func__); | 160 | pgd = pgd_offset(&init_mm, base); |
187 | dump_stack(); | 161 | pmd = pmd_alloc(&init_mm, pgd, base); |
188 | return NULL; | 162 | if (!pmd) { |
189 | } | 163 | printk(KERN_ERR "%s: no pmd tables\n", __func__); |
164 | ret = -ENOMEM; | ||
165 | break; | ||
166 | } | ||
167 | WARN_ON(!pmd_none(*pmd)); | ||
190 | 168 | ||
191 | if (!mask) | 169 | pte = pte_alloc_kernel(pmd, base); |
192 | goto no_page; | 170 | if (!pte) { |
171 | printk(KERN_ERR "%s: no pte tables\n", __func__); | ||
172 | ret = -ENOMEM; | ||
173 | break; | ||
174 | } | ||
193 | 175 | ||
194 | /* | 176 | consistent_pte[i++] = pte; |
195 | * Sanity check the allocation size. | 177 | base += (1 << PGDIR_SHIFT); |
196 | */ | 178 | } while (base < CONSISTENT_END); |
197 | size = PAGE_ALIGN(size); | ||
198 | limit = (mask + 1) & ~mask; | ||
199 | if ((limit && size >= limit) || | ||
200 | size >= (CONSISTENT_END - CONSISTENT_BASE)) { | ||
201 | printk(KERN_WARNING "coherent allocation too big " | ||
202 | "(requested %#x mask %#llx)\n", size, mask); | ||
203 | goto no_page; | ||
204 | } | ||
205 | 179 | ||
206 | order = get_order(size); | 180 | return ret; |
181 | } | ||
207 | 182 | ||
208 | if (mask < 0xffffffffULL) | 183 | core_initcall(consistent_init); |
209 | gfp |= GFP_DMA; | ||
210 | 184 | ||
211 | page = alloc_pages(gfp, order); | 185 | static void * |
212 | if (!page) | 186 | __dma_alloc_remap(struct page *page, size_t size, gfp_t gfp, pgprot_t prot) |
213 | goto no_page; | 187 | { |
188 | struct arm_vmregion *c; | ||
214 | 189 | ||
215 | /* | 190 | if (!consistent_pte[0]) { |
216 | * Invalidate any data that might be lurking in the | 191 | printk(KERN_ERR "%s: not initialised\n", __func__); |
217 | * kernel direct-mapped region for device DMA. | 192 | dump_stack(); |
218 | */ | 193 | return NULL; |
219 | { | ||
220 | void *ptr = page_address(page); | ||
221 | memset(ptr, 0, size); | ||
222 | dmac_flush_range(ptr, ptr + size); | ||
223 | outer_flush_range(__pa(ptr), __pa(ptr) + size); | ||
224 | } | 194 | } |
225 | 195 | ||
226 | /* | 196 | /* |
227 | * Allocate a virtual address in the consistent mapping region. | 197 | * Allocate a virtual address in the consistent mapping region. |
228 | */ | 198 | */ |
229 | c = arm_vm_region_alloc(&consistent_head, size, | 199 | c = arm_vmregion_alloc(&consistent_head, size, |
230 | gfp & ~(__GFP_DMA | __GFP_HIGHMEM)); | 200 | gfp & ~(__GFP_DMA | __GFP_HIGHMEM)); |
231 | if (c) { | 201 | if (c) { |
232 | pte_t *pte; | 202 | pte_t *pte; |
233 | struct page *end = page + (1 << order); | ||
234 | int idx = CONSISTENT_PTE_INDEX(c->vm_start); | 203 | int idx = CONSISTENT_PTE_INDEX(c->vm_start); |
235 | u32 off = CONSISTENT_OFFSET(c->vm_start) & (PTRS_PER_PTE-1); | 204 | u32 off = CONSISTENT_OFFSET(c->vm_start) & (PTRS_PER_PTE-1); |
236 | 205 | ||
237 | pte = consistent_pte[idx] + off; | 206 | pte = consistent_pte[idx] + off; |
238 | c->vm_pages = page; | 207 | c->vm_pages = page; |
239 | 208 | ||
240 | split_page(page, order); | ||
241 | |||
242 | /* | ||
243 | * Set the "dma handle" | ||
244 | */ | ||
245 | *handle = page_to_dma(dev, page); | ||
246 | |||
247 | do { | 209 | do { |
248 | BUG_ON(!pte_none(*pte)); | 210 | BUG_ON(!pte_none(*pte)); |
249 | 211 | ||
250 | /* | ||
251 | * x86 does not mark the pages reserved... | ||
252 | */ | ||
253 | SetPageReserved(page); | ||
254 | set_pte_ext(pte, mk_pte(page, prot), 0); | 212 | set_pte_ext(pte, mk_pte(page, prot), 0); |
255 | page++; | 213 | page++; |
256 | pte++; | 214 | pte++; |
@@ -261,48 +219,90 @@ __dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp, | |||
261 | } | 219 | } |
262 | } while (size -= PAGE_SIZE); | 220 | } while (size -= PAGE_SIZE); |
263 | 221 | ||
264 | /* | ||
265 | * Free the otherwise unused pages. | ||
266 | */ | ||
267 | while (page < end) { | ||
268 | __free_page(page); | ||
269 | page++; | ||
270 | } | ||
271 | |||
272 | return (void *)c->vm_start; | 222 | return (void *)c->vm_start; |
273 | } | 223 | } |
274 | |||
275 | if (page) | ||
276 | __free_pages(page, order); | ||
277 | no_page: | ||
278 | *handle = ~0; | ||
279 | return NULL; | 224 | return NULL; |
280 | } | 225 | } |
226 | |||
227 | static void __dma_free_remap(void *cpu_addr, size_t size) | ||
228 | { | ||
229 | struct arm_vmregion *c; | ||
230 | unsigned long addr; | ||
231 | pte_t *ptep; | ||
232 | int idx; | ||
233 | u32 off; | ||
234 | |||
235 | c = arm_vmregion_find_remove(&consistent_head, (unsigned long)cpu_addr); | ||
236 | if (!c) { | ||
237 | printk(KERN_ERR "%s: trying to free invalid coherent area: %p\n", | ||
238 | __func__, cpu_addr); | ||
239 | dump_stack(); | ||
240 | return; | ||
241 | } | ||
242 | |||
243 | if ((c->vm_end - c->vm_start) != size) { | ||
244 | printk(KERN_ERR "%s: freeing wrong coherent size (%ld != %d)\n", | ||
245 | __func__, c->vm_end - c->vm_start, size); | ||
246 | dump_stack(); | ||
247 | size = c->vm_end - c->vm_start; | ||
248 | } | ||
249 | |||
250 | idx = CONSISTENT_PTE_INDEX(c->vm_start); | ||
251 | off = CONSISTENT_OFFSET(c->vm_start) & (PTRS_PER_PTE-1); | ||
252 | ptep = consistent_pte[idx] + off; | ||
253 | addr = c->vm_start; | ||
254 | do { | ||
255 | pte_t pte = ptep_get_and_clear(&init_mm, addr, ptep); | ||
256 | |||
257 | ptep++; | ||
258 | addr += PAGE_SIZE; | ||
259 | off++; | ||
260 | if (off >= PTRS_PER_PTE) { | ||
261 | off = 0; | ||
262 | ptep = consistent_pte[++idx]; | ||
263 | } | ||
264 | |||
265 | if (pte_none(pte) || !pte_present(pte)) | ||
266 | printk(KERN_CRIT "%s: bad page in kernel page table\n", | ||
267 | __func__); | ||
268 | } while (size -= PAGE_SIZE); | ||
269 | |||
270 | flush_tlb_kernel_range(c->vm_start, c->vm_end); | ||
271 | |||
272 | arm_vmregion_free(&consistent_head, c); | ||
273 | } | ||
274 | |||
281 | #else /* !CONFIG_MMU */ | 275 | #else /* !CONFIG_MMU */ |
276 | |||
277 | #define __dma_alloc_remap(page, size, gfp, prot) page_address(page) | ||
278 | #define __dma_free_remap(addr, size) do { } while (0) | ||
279 | |||
280 | #endif /* CONFIG_MMU */ | ||
281 | |||
282 | static void * | 282 | static void * |
283 | __dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp, | 283 | __dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp, |
284 | pgprot_t prot) | 284 | pgprot_t prot) |
285 | { | 285 | { |
286 | void *virt; | 286 | struct page *page; |
287 | u64 mask = get_coherent_dma_mask(dev); | 287 | void *addr; |
288 | 288 | ||
289 | if (!mask) | 289 | *handle = ~0; |
290 | goto error; | 290 | size = PAGE_ALIGN(size); |
291 | 291 | ||
292 | if (mask < 0xffffffffULL) | 292 | page = __dma_alloc_buffer(dev, size, gfp); |
293 | gfp |= GFP_DMA; | 293 | if (!page) |
294 | virt = kmalloc(size, gfp); | 294 | return NULL; |
295 | if (!virt) | ||
296 | goto error; | ||
297 | 295 | ||
298 | *handle = virt_to_dma(dev, virt); | 296 | if (!arch_is_coherent()) |
299 | return virt; | 297 | addr = __dma_alloc_remap(page, size, gfp, prot); |
298 | else | ||
299 | addr = page_address(page); | ||
300 | 300 | ||
301 | error: | 301 | if (addr) |
302 | *handle = ~0; | 302 | *handle = page_to_dma(dev, page); |
303 | return NULL; | 303 | |
304 | return addr; | ||
304 | } | 305 | } |
305 | #endif /* CONFIG_MMU */ | ||
306 | 306 | ||
307 | /* | 307 | /* |
308 | * Allocate DMA-coherent memory space and return both the kernel remapped | 308 | * Allocate DMA-coherent memory space and return both the kernel remapped |
@@ -316,19 +316,8 @@ dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gf | |||
316 | if (dma_alloc_from_coherent(dev, size, handle, &memory)) | 316 | if (dma_alloc_from_coherent(dev, size, handle, &memory)) |
317 | return memory; | 317 | return memory; |
318 | 318 | ||
319 | if (arch_is_coherent()) { | ||
320 | void *virt; | ||
321 | |||
322 | virt = kmalloc(size, gfp); | ||
323 | if (!virt) | ||
324 | return NULL; | ||
325 | *handle = virt_to_dma(dev, virt); | ||
326 | |||
327 | return virt; | ||
328 | } | ||
329 | |||
330 | return __dma_alloc(dev, size, handle, gfp, | 319 | return __dma_alloc(dev, size, handle, gfp, |
331 | pgprot_noncached(pgprot_kernel)); | 320 | pgprot_dmacoherent(pgprot_kernel)); |
332 | } | 321 | } |
333 | EXPORT_SYMBOL(dma_alloc_coherent); | 322 | EXPORT_SYMBOL(dma_alloc_coherent); |
334 | 323 | ||
@@ -349,15 +338,12 @@ static int dma_mmap(struct device *dev, struct vm_area_struct *vma, | |||
349 | { | 338 | { |
350 | int ret = -ENXIO; | 339 | int ret = -ENXIO; |
351 | #ifdef CONFIG_MMU | 340 | #ifdef CONFIG_MMU |
352 | unsigned long flags, user_size, kern_size; | 341 | unsigned long user_size, kern_size; |
353 | struct arm_vm_region *c; | 342 | struct arm_vmregion *c; |
354 | 343 | ||
355 | user_size = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT; | 344 | user_size = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT; |
356 | 345 | ||
357 | spin_lock_irqsave(&consistent_lock, flags); | 346 | c = arm_vmregion_find(&consistent_head, (unsigned long)cpu_addr); |
358 | c = arm_vm_region_find(&consistent_head, (unsigned long)cpu_addr); | ||
359 | spin_unlock_irqrestore(&consistent_lock, flags); | ||
360 | |||
361 | if (c) { | 347 | if (c) { |
362 | unsigned long off = vma->vm_pgoff; | 348 | unsigned long off = vma->vm_pgoff; |
363 | 349 | ||
@@ -379,7 +365,7 @@ static int dma_mmap(struct device *dev, struct vm_area_struct *vma, | |||
379 | int dma_mmap_coherent(struct device *dev, struct vm_area_struct *vma, | 365 | int dma_mmap_coherent(struct device *dev, struct vm_area_struct *vma, |
380 | void *cpu_addr, dma_addr_t dma_addr, size_t size) | 366 | void *cpu_addr, dma_addr_t dma_addr, size_t size) |
381 | { | 367 | { |
382 | vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); | 368 | vma->vm_page_prot = pgprot_dmacoherent(vma->vm_page_prot); |
383 | return dma_mmap(dev, vma, cpu_addr, dma_addr, size); | 369 | return dma_mmap(dev, vma, cpu_addr, dma_addr, size); |
384 | } | 370 | } |
385 | EXPORT_SYMBOL(dma_mmap_coherent); | 371 | EXPORT_SYMBOL(dma_mmap_coherent); |
@@ -396,144 +382,23 @@ EXPORT_SYMBOL(dma_mmap_writecombine); | |||
396 | * free a page as defined by the above mapping. | 382 | * free a page as defined by the above mapping. |
397 | * Must not be called with IRQs disabled. | 383 | * Must not be called with IRQs disabled. |
398 | */ | 384 | */ |
399 | #ifdef CONFIG_MMU | ||
400 | void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, dma_addr_t handle) | 385 | void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, dma_addr_t handle) |
401 | { | 386 | { |
402 | struct arm_vm_region *c; | ||
403 | unsigned long flags, addr; | ||
404 | pte_t *ptep; | ||
405 | int idx; | ||
406 | u32 off; | ||
407 | |||
408 | WARN_ON(irqs_disabled()); | 387 | WARN_ON(irqs_disabled()); |
409 | 388 | ||
410 | if (dma_release_from_coherent(dev, get_order(size), cpu_addr)) | 389 | if (dma_release_from_coherent(dev, get_order(size), cpu_addr)) |
411 | return; | 390 | return; |
412 | 391 | ||
413 | if (arch_is_coherent()) { | ||
414 | kfree(cpu_addr); | ||
415 | return; | ||
416 | } | ||
417 | |||
418 | size = PAGE_ALIGN(size); | 392 | size = PAGE_ALIGN(size); |
419 | 393 | ||
420 | spin_lock_irqsave(&consistent_lock, flags); | 394 | if (!arch_is_coherent()) |
421 | c = arm_vm_region_find(&consistent_head, (unsigned long)cpu_addr); | 395 | __dma_free_remap(cpu_addr, size); |
422 | if (!c) | ||
423 | goto no_area; | ||
424 | |||
425 | c->vm_active = 0; | ||
426 | spin_unlock_irqrestore(&consistent_lock, flags); | ||
427 | |||
428 | if ((c->vm_end - c->vm_start) != size) { | ||
429 | printk(KERN_ERR "%s: freeing wrong coherent size (%ld != %d)\n", | ||
430 | __func__, c->vm_end - c->vm_start, size); | ||
431 | dump_stack(); | ||
432 | size = c->vm_end - c->vm_start; | ||
433 | } | ||
434 | |||
435 | idx = CONSISTENT_PTE_INDEX(c->vm_start); | ||
436 | off = CONSISTENT_OFFSET(c->vm_start) & (PTRS_PER_PTE-1); | ||
437 | ptep = consistent_pte[idx] + off; | ||
438 | addr = c->vm_start; | ||
439 | do { | ||
440 | pte_t pte = ptep_get_and_clear(&init_mm, addr, ptep); | ||
441 | unsigned long pfn; | ||
442 | |||
443 | ptep++; | ||
444 | addr += PAGE_SIZE; | ||
445 | off++; | ||
446 | if (off >= PTRS_PER_PTE) { | ||
447 | off = 0; | ||
448 | ptep = consistent_pte[++idx]; | ||
449 | } | ||
450 | |||
451 | if (!pte_none(pte) && pte_present(pte)) { | ||
452 | pfn = pte_pfn(pte); | ||
453 | |||
454 | if (pfn_valid(pfn)) { | ||
455 | struct page *page = pfn_to_page(pfn); | ||
456 | |||
457 | /* | ||
458 | * x86 does not mark the pages reserved... | ||
459 | */ | ||
460 | ClearPageReserved(page); | ||
461 | |||
462 | __free_page(page); | ||
463 | continue; | ||
464 | } | ||
465 | } | ||
466 | |||
467 | printk(KERN_CRIT "%s: bad page in kernel page table\n", | ||
468 | __func__); | ||
469 | } while (size -= PAGE_SIZE); | ||
470 | |||
471 | flush_tlb_kernel_range(c->vm_start, c->vm_end); | ||
472 | |||
473 | spin_lock_irqsave(&consistent_lock, flags); | ||
474 | list_del(&c->vm_list); | ||
475 | spin_unlock_irqrestore(&consistent_lock, flags); | ||
476 | |||
477 | kfree(c); | ||
478 | return; | ||
479 | 396 | ||
480 | no_area: | 397 | __dma_free_buffer(dma_to_page(dev, handle), size); |
481 | spin_unlock_irqrestore(&consistent_lock, flags); | ||
482 | printk(KERN_ERR "%s: trying to free invalid coherent area: %p\n", | ||
483 | __func__, cpu_addr); | ||
484 | dump_stack(); | ||
485 | } | 398 | } |
486 | #else /* !CONFIG_MMU */ | ||
487 | void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, dma_addr_t handle) | ||
488 | { | ||
489 | if (dma_release_from_coherent(dev, get_order(size), cpu_addr)) | ||
490 | return; | ||
491 | kfree(cpu_addr); | ||
492 | } | ||
493 | #endif /* CONFIG_MMU */ | ||
494 | EXPORT_SYMBOL(dma_free_coherent); | 399 | EXPORT_SYMBOL(dma_free_coherent); |
495 | 400 | ||
496 | /* | 401 | /* |
497 | * Initialise the consistent memory allocation. | ||
498 | */ | ||
499 | static int __init consistent_init(void) | ||
500 | { | ||
501 | int ret = 0; | ||
502 | #ifdef CONFIG_MMU | ||
503 | pgd_t *pgd; | ||
504 | pmd_t *pmd; | ||
505 | pte_t *pte; | ||
506 | int i = 0; | ||
507 | u32 base = CONSISTENT_BASE; | ||
508 | |||
509 | do { | ||
510 | pgd = pgd_offset(&init_mm, base); | ||
511 | pmd = pmd_alloc(&init_mm, pgd, base); | ||
512 | if (!pmd) { | ||
513 | printk(KERN_ERR "%s: no pmd tables\n", __func__); | ||
514 | ret = -ENOMEM; | ||
515 | break; | ||
516 | } | ||
517 | WARN_ON(!pmd_none(*pmd)); | ||
518 | |||
519 | pte = pte_alloc_kernel(pmd, base); | ||
520 | if (!pte) { | ||
521 | printk(KERN_ERR "%s: no pte tables\n", __func__); | ||
522 | ret = -ENOMEM; | ||
523 | break; | ||
524 | } | ||
525 | |||
526 | consistent_pte[i++] = pte; | ||
527 | base += (1 << PGDIR_SHIFT); | ||
528 | } while (base < CONSISTENT_END); | ||
529 | #endif /* !CONFIG_MMU */ | ||
530 | |||
531 | return ret; | ||
532 | } | ||
533 | |||
534 | core_initcall(consistent_init); | ||
535 | |||
536 | /* | ||
537 | * Make an area consistent for devices. | 402 | * Make an area consistent for devices. |
538 | * Note: Drivers should NOT use this function directly, as it will break | 403 | * Note: Drivers should NOT use this function directly, as it will break |
539 | * platforms with CONFIG_DMABOUNCE. | 404 | * platforms with CONFIG_DMABOUNCE. |
diff --git a/arch/arm/mm/fault-armv.c b/arch/arm/mm/fault-armv.c index d0d17b6a3703..729602291958 100644 --- a/arch/arm/mm/fault-armv.c +++ b/arch/arm/mm/fault-armv.c | |||
@@ -23,6 +23,8 @@ | |||
23 | #include <asm/pgtable.h> | 23 | #include <asm/pgtable.h> |
24 | #include <asm/tlbflush.h> | 24 | #include <asm/tlbflush.h> |
25 | 25 | ||
26 | #include "mm.h" | ||
27 | |||
26 | static unsigned long shared_pte_mask = L_PTE_MT_BUFFERABLE; | 28 | static unsigned long shared_pte_mask = L_PTE_MT_BUFFERABLE; |
27 | 29 | ||
28 | /* | 30 | /* |
@@ -151,7 +153,14 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long addr, pte_t pte) | |||
151 | if (!pfn_valid(pfn)) | 153 | if (!pfn_valid(pfn)) |
152 | return; | 154 | return; |
153 | 155 | ||
156 | /* | ||
157 | * The zero page is never written to, so never has any dirty | ||
158 | * cache lines, and therefore never needs to be flushed. | ||
159 | */ | ||
154 | page = pfn_to_page(pfn); | 160 | page = pfn_to_page(pfn); |
161 | if (page == ZERO_PAGE(0)) | ||
162 | return; | ||
163 | |||
155 | mapping = page_mapping(page); | 164 | mapping = page_mapping(page); |
156 | #ifndef CONFIG_SMP | 165 | #ifndef CONFIG_SMP |
157 | if (test_and_clear_bit(PG_dcache_dirty, &page->flags)) | 166 | if (test_and_clear_bit(PG_dcache_dirty, &page->flags)) |
diff --git a/arch/arm/mm/flush.c b/arch/arm/mm/flush.c index 7f294f307c83..329594e760cd 100644 --- a/arch/arm/mm/flush.c +++ b/arch/arm/mm/flush.c | |||
@@ -35,14 +35,12 @@ static void flush_pfn_alias(unsigned long pfn, unsigned long vaddr) | |||
35 | : | 35 | : |
36 | : "r" (to), "r" (to + PAGE_SIZE - L1_CACHE_BYTES), "r" (zero) | 36 | : "r" (to), "r" (to + PAGE_SIZE - L1_CACHE_BYTES), "r" (zero) |
37 | : "cc"); | 37 | : "cc"); |
38 | __flush_icache_all(); | ||
39 | } | 38 | } |
40 | 39 | ||
41 | void flush_cache_mm(struct mm_struct *mm) | 40 | void flush_cache_mm(struct mm_struct *mm) |
42 | { | 41 | { |
43 | if (cache_is_vivt()) { | 42 | if (cache_is_vivt()) { |
44 | if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(mm))) | 43 | vivt_flush_cache_mm(mm); |
45 | __cpuc_flush_user_all(); | ||
46 | return; | 44 | return; |
47 | } | 45 | } |
48 | 46 | ||
@@ -52,16 +50,13 @@ void flush_cache_mm(struct mm_struct *mm) | |||
52 | : | 50 | : |
53 | : "r" (0) | 51 | : "r" (0) |
54 | : "cc"); | 52 | : "cc"); |
55 | __flush_icache_all(); | ||
56 | } | 53 | } |
57 | } | 54 | } |
58 | 55 | ||
59 | void flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end) | 56 | void flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end) |
60 | { | 57 | { |
61 | if (cache_is_vivt()) { | 58 | if (cache_is_vivt()) { |
62 | if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(vma->vm_mm))) | 59 | vivt_flush_cache_range(vma, start, end); |
63 | __cpuc_flush_user_range(start & PAGE_MASK, PAGE_ALIGN(end), | ||
64 | vma->vm_flags); | ||
65 | return; | 60 | return; |
66 | } | 61 | } |
67 | 62 | ||
@@ -71,22 +66,26 @@ void flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned | |||
71 | : | 66 | : |
72 | : "r" (0) | 67 | : "r" (0) |
73 | : "cc"); | 68 | : "cc"); |
74 | __flush_icache_all(); | ||
75 | } | 69 | } |
70 | |||
71 | if (vma->vm_flags & VM_EXEC) | ||
72 | __flush_icache_all(); | ||
76 | } | 73 | } |
77 | 74 | ||
78 | void flush_cache_page(struct vm_area_struct *vma, unsigned long user_addr, unsigned long pfn) | 75 | void flush_cache_page(struct vm_area_struct *vma, unsigned long user_addr, unsigned long pfn) |
79 | { | 76 | { |
80 | if (cache_is_vivt()) { | 77 | if (cache_is_vivt()) { |
81 | if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(vma->vm_mm))) { | 78 | vivt_flush_cache_page(vma, user_addr, pfn); |
82 | unsigned long addr = user_addr & PAGE_MASK; | ||
83 | __cpuc_flush_user_range(addr, addr + PAGE_SIZE, vma->vm_flags); | ||
84 | } | ||
85 | return; | 79 | return; |
86 | } | 80 | } |
87 | 81 | ||
88 | if (cache_is_vipt_aliasing()) | 82 | if (cache_is_vipt_aliasing()) { |
89 | flush_pfn_alias(pfn, user_addr); | 83 | flush_pfn_alias(pfn, user_addr); |
84 | __flush_icache_all(); | ||
85 | } | ||
86 | |||
87 | if (vma->vm_flags & VM_EXEC && icache_is_vivt_asid_tagged()) | ||
88 | __flush_icache_all(); | ||
90 | } | 89 | } |
91 | 90 | ||
92 | void flush_ptrace_access(struct vm_area_struct *vma, struct page *page, | 91 | void flush_ptrace_access(struct vm_area_struct *vma, struct page *page, |
@@ -94,15 +93,13 @@ void flush_ptrace_access(struct vm_area_struct *vma, struct page *page, | |||
94 | unsigned long len, int write) | 93 | unsigned long len, int write) |
95 | { | 94 | { |
96 | if (cache_is_vivt()) { | 95 | if (cache_is_vivt()) { |
97 | if (cpumask_test_cpu(smp_processor_id(), mm_cpumask(vma->vm_mm))) { | 96 | vivt_flush_ptrace_access(vma, page, uaddr, kaddr, len, write); |
98 | unsigned long addr = (unsigned long)kaddr; | ||
99 | __cpuc_coherent_kern_range(addr, addr + len); | ||
100 | } | ||
101 | return; | 97 | return; |
102 | } | 98 | } |
103 | 99 | ||
104 | if (cache_is_vipt_aliasing()) { | 100 | if (cache_is_vipt_aliasing()) { |
105 | flush_pfn_alias(page_to_pfn(page), uaddr); | 101 | flush_pfn_alias(page_to_pfn(page), uaddr); |
102 | __flush_icache_all(); | ||
106 | return; | 103 | return; |
107 | } | 104 | } |
108 | 105 | ||
@@ -120,6 +117,8 @@ void flush_ptrace_access(struct vm_area_struct *vma, struct page *page, | |||
120 | 117 | ||
121 | void __flush_dcache_page(struct address_space *mapping, struct page *page) | 118 | void __flush_dcache_page(struct address_space *mapping, struct page *page) |
122 | { | 119 | { |
120 | void *addr = page_address(page); | ||
121 | |||
123 | /* | 122 | /* |
124 | * Writeback any data associated with the kernel mapping of this | 123 | * Writeback any data associated with the kernel mapping of this |
125 | * page. This ensures that data in the physical page is mutually | 124 | * page. This ensures that data in the physical page is mutually |
@@ -130,9 +129,9 @@ void __flush_dcache_page(struct address_space *mapping, struct page *page) | |||
130 | * kmap_atomic() doesn't set the page virtual address, and | 129 | * kmap_atomic() doesn't set the page virtual address, and |
131 | * kunmap_atomic() takes care of cache flushing already. | 130 | * kunmap_atomic() takes care of cache flushing already. |
132 | */ | 131 | */ |
133 | if (page_address(page)) | 132 | if (addr) |
134 | #endif | 133 | #endif |
135 | __cpuc_flush_dcache_page(page_address(page)); | 134 | __cpuc_flush_dcache_page(addr); |
136 | 135 | ||
137 | /* | 136 | /* |
138 | * If this is a page cache page, and we have an aliasing VIPT cache, | 137 | * If this is a page cache page, and we have an aliasing VIPT cache, |
@@ -196,7 +195,16 @@ static void __flush_dcache_aliases(struct address_space *mapping, struct page *p | |||
196 | */ | 195 | */ |
197 | void flush_dcache_page(struct page *page) | 196 | void flush_dcache_page(struct page *page) |
198 | { | 197 | { |
199 | struct address_space *mapping = page_mapping(page); | 198 | struct address_space *mapping; |
199 | |||
200 | /* | ||
201 | * The zero page is never written to, so never has any dirty | ||
202 | * cache lines, and therefore never needs to be flushed. | ||
203 | */ | ||
204 | if (page == ZERO_PAGE(0)) | ||
205 | return; | ||
206 | |||
207 | mapping = page_mapping(page); | ||
200 | 208 | ||
201 | #ifndef CONFIG_SMP | 209 | #ifndef CONFIG_SMP |
202 | if (!PageHighMem(page) && mapping && !mapping_mapped(mapping)) | 210 | if (!PageHighMem(page) && mapping && !mapping_mapped(mapping)) |
@@ -242,6 +250,7 @@ void __flush_anon_page(struct vm_area_struct *vma, struct page *page, unsigned l | |||
242 | * userspace address only. | 250 | * userspace address only. |
243 | */ | 251 | */ |
244 | flush_pfn_alias(pfn, vmaddr); | 252 | flush_pfn_alias(pfn, vmaddr); |
253 | __flush_icache_all(); | ||
245 | } | 254 | } |
246 | 255 | ||
247 | /* | 256 | /* |
diff --git a/arch/arm/mm/mm.h b/arch/arm/mm/mm.h index c4f6f05198e0..a888363398f8 100644 --- a/arch/arm/mm/mm.h +++ b/arch/arm/mm/mm.h | |||
@@ -24,6 +24,8 @@ struct mem_type { | |||
24 | 24 | ||
25 | const struct mem_type *get_mem_type(unsigned int type); | 25 | const struct mem_type *get_mem_type(unsigned int type); |
26 | 26 | ||
27 | extern void __flush_dcache_page(struct address_space *mapping, struct page *page); | ||
28 | |||
27 | #endif | 29 | #endif |
28 | 30 | ||
29 | struct map_desc; | 31 | struct map_desc; |
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index ea67be0223ac..2427cdcd9098 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c | |||
@@ -1036,7 +1036,7 @@ void __init paging_init(struct machine_desc *mdesc) | |||
1036 | */ | 1036 | */ |
1037 | zero_page = alloc_bootmem_low_pages(PAGE_SIZE); | 1037 | zero_page = alloc_bootmem_low_pages(PAGE_SIZE); |
1038 | empty_zero_page = virt_to_page(zero_page); | 1038 | empty_zero_page = virt_to_page(zero_page); |
1039 | flush_dcache_page(empty_zero_page); | 1039 | __flush_dcache_page(NULL, empty_zero_page); |
1040 | } | 1040 | } |
1041 | 1041 | ||
1042 | /* | 1042 | /* |
diff --git a/arch/arm/mm/vmregion.c b/arch/arm/mm/vmregion.c new file mode 100644 index 000000000000..19e09bdb1b8a --- /dev/null +++ b/arch/arm/mm/vmregion.c | |||
@@ -0,0 +1,131 @@ | |||
1 | #include <linux/spinlock.h> | ||
2 | #include <linux/list.h> | ||
3 | #include <linux/slab.h> | ||
4 | |||
5 | #include "vmregion.h" | ||
6 | |||
7 | /* | ||
8 | * VM region handling support. | ||
9 | * | ||
10 | * This should become something generic, handling VM region allocations for | ||
11 | * vmalloc and similar (ioremap, module space, etc). | ||
12 | * | ||
13 | * I envisage vmalloc()'s supporting vm_struct becoming: | ||
14 | * | ||
15 | * struct vm_struct { | ||
16 | * struct vmregion region; | ||
17 | * unsigned long flags; | ||
18 | * struct page **pages; | ||
19 | * unsigned int nr_pages; | ||
20 | * unsigned long phys_addr; | ||
21 | * }; | ||
22 | * | ||
23 | * get_vm_area() would then call vmregion_alloc with an appropriate | ||
24 | * struct vmregion head (eg): | ||
25 | * | ||
26 | * struct vmregion vmalloc_head = { | ||
27 | * .vm_list = LIST_HEAD_INIT(vmalloc_head.vm_list), | ||
28 | * .vm_start = VMALLOC_START, | ||
29 | * .vm_end = VMALLOC_END, | ||
30 | * }; | ||
31 | * | ||
32 | * However, vmalloc_head.vm_start is variable (typically, it is dependent on | ||
33 | * the amount of RAM found at boot time.) I would imagine that get_vm_area() | ||
34 | * would have to initialise this each time prior to calling vmregion_alloc(). | ||
35 | */ | ||
36 | |||
37 | struct arm_vmregion * | ||
38 | arm_vmregion_alloc(struct arm_vmregion_head *head, size_t size, gfp_t gfp) | ||
39 | { | ||
40 | unsigned long addr = head->vm_start, end = head->vm_end - size; | ||
41 | unsigned long flags; | ||
42 | struct arm_vmregion *c, *new; | ||
43 | |||
44 | if (head->vm_end - head->vm_start < size) { | ||
45 | printk(KERN_WARNING "%s: allocation too big (requested %#x)\n", | ||
46 | __func__, size); | ||
47 | goto out; | ||
48 | } | ||
49 | |||
50 | new = kmalloc(sizeof(struct arm_vmregion), gfp); | ||
51 | if (!new) | ||
52 | goto out; | ||
53 | |||
54 | spin_lock_irqsave(&head->vm_lock, flags); | ||
55 | |||
56 | list_for_each_entry(c, &head->vm_list, vm_list) { | ||
57 | if ((addr + size) < addr) | ||
58 | goto nospc; | ||
59 | if ((addr + size) <= c->vm_start) | ||
60 | goto found; | ||
61 | addr = c->vm_end; | ||
62 | if (addr > end) | ||
63 | goto nospc; | ||
64 | } | ||
65 | |||
66 | found: | ||
67 | /* | ||
68 | * Insert this entry _before_ the one we found. | ||
69 | */ | ||
70 | list_add_tail(&new->vm_list, &c->vm_list); | ||
71 | new->vm_start = addr; | ||
72 | new->vm_end = addr + size; | ||
73 | new->vm_active = 1; | ||
74 | |||
75 | spin_unlock_irqrestore(&head->vm_lock, flags); | ||
76 | return new; | ||
77 | |||
78 | nospc: | ||
79 | spin_unlock_irqrestore(&head->vm_lock, flags); | ||
80 | kfree(new); | ||
81 | out: | ||
82 | return NULL; | ||
83 | } | ||
84 | |||
85 | static struct arm_vmregion *__arm_vmregion_find(struct arm_vmregion_head *head, unsigned long addr) | ||
86 | { | ||
87 | struct arm_vmregion *c; | ||
88 | |||
89 | list_for_each_entry(c, &head->vm_list, vm_list) { | ||
90 | if (c->vm_active && c->vm_start == addr) | ||
91 | goto out; | ||
92 | } | ||
93 | c = NULL; | ||
94 | out: | ||
95 | return c; | ||
96 | } | ||
97 | |||
98 | struct arm_vmregion *arm_vmregion_find(struct arm_vmregion_head *head, unsigned long addr) | ||
99 | { | ||
100 | struct arm_vmregion *c; | ||
101 | unsigned long flags; | ||
102 | |||
103 | spin_lock_irqsave(&head->vm_lock, flags); | ||
104 | c = __arm_vmregion_find(head, addr); | ||
105 | spin_unlock_irqrestore(&head->vm_lock, flags); | ||
106 | return c; | ||
107 | } | ||
108 | |||
109 | struct arm_vmregion *arm_vmregion_find_remove(struct arm_vmregion_head *head, unsigned long addr) | ||
110 | { | ||
111 | struct arm_vmregion *c; | ||
112 | unsigned long flags; | ||
113 | |||
114 | spin_lock_irqsave(&head->vm_lock, flags); | ||
115 | c = __arm_vmregion_find(head, addr); | ||
116 | if (c) | ||
117 | c->vm_active = 0; | ||
118 | spin_unlock_irqrestore(&head->vm_lock, flags); | ||
119 | return c; | ||
120 | } | ||
121 | |||
122 | void arm_vmregion_free(struct arm_vmregion_head *head, struct arm_vmregion *c) | ||
123 | { | ||
124 | unsigned long flags; | ||
125 | |||
126 | spin_lock_irqsave(&head->vm_lock, flags); | ||
127 | list_del(&c->vm_list); | ||
128 | spin_unlock_irqrestore(&head->vm_lock, flags); | ||
129 | |||
130 | kfree(c); | ||
131 | } | ||
diff --git a/arch/arm/mm/vmregion.h b/arch/arm/mm/vmregion.h new file mode 100644 index 000000000000..6b2cdbdf3a85 --- /dev/null +++ b/arch/arm/mm/vmregion.h | |||
@@ -0,0 +1,29 @@ | |||
1 | #ifndef VMREGION_H | ||
2 | #define VMREGION_H | ||
3 | |||
4 | #include <linux/spinlock.h> | ||
5 | #include <linux/list.h> | ||
6 | |||
7 | struct page; | ||
8 | |||
9 | struct arm_vmregion_head { | ||
10 | spinlock_t vm_lock; | ||
11 | struct list_head vm_list; | ||
12 | unsigned long vm_start; | ||
13 | unsigned long vm_end; | ||
14 | }; | ||
15 | |||
16 | struct arm_vmregion { | ||
17 | struct list_head vm_list; | ||
18 | unsigned long vm_start; | ||
19 | unsigned long vm_end; | ||
20 | struct page *vm_pages; | ||
21 | int vm_active; | ||
22 | }; | ||
23 | |||
24 | struct arm_vmregion *arm_vmregion_alloc(struct arm_vmregion_head *, size_t, gfp_t); | ||
25 | struct arm_vmregion *arm_vmregion_find(struct arm_vmregion_head *, unsigned long); | ||
26 | struct arm_vmregion *arm_vmregion_find_remove(struct arm_vmregion_head *, unsigned long); | ||
27 | void arm_vmregion_free(struct arm_vmregion_head *, struct arm_vmregion *); | ||
28 | |||
29 | #endif | ||
diff --git a/arch/arm/plat-nomadik/Kconfig b/arch/arm/plat-nomadik/Kconfig new file mode 100644 index 000000000000..159daf583f85 --- /dev/null +++ b/arch/arm/plat-nomadik/Kconfig | |||
@@ -0,0 +1,22 @@ | |||
1 | # We keep common IP's here for Nomadik and other similar | ||
2 | # familiy of processors from ST-Ericsson. At the moment we have | ||
3 | # just MTU, others to follow soon. | ||
4 | |||
5 | config PLAT_NOMADIK | ||
6 | bool | ||
7 | depends on ARCH_NOMADIK || ARCH_U8500 | ||
8 | default y | ||
9 | help | ||
10 | Common platform code for Nomadik and other ST-Ericsson | ||
11 | platforms. | ||
12 | |||
13 | if PLAT_NOMADIK | ||
14 | |||
15 | config HAS_MTU | ||
16 | bool | ||
17 | help | ||
18 | Support for Multi Timer Unit. MTU provides access | ||
19 | to multiple interrupt generating programmable | ||
20 | 32-bit free running decrementing counters. | ||
21 | |||
22 | endif | ||
diff --git a/arch/arm/plat-nomadik/Makefile b/arch/arm/plat-nomadik/Makefile new file mode 100644 index 000000000000..37c7cdd0f8f0 --- /dev/null +++ b/arch/arm/plat-nomadik/Makefile | |||
@@ -0,0 +1,5 @@ | |||
1 | # arch/arm/plat-nomadik/Makefile | ||
2 | # Copyright 2009 ST-Ericsson | ||
3 | # Licensed under GPLv2 | ||
4 | |||
5 | obj-$(CONFIG_HAS_MTU) += timer.o | ||
diff --git a/arch/arm/mach-nomadik/include/mach/mtu.h b/arch/arm/plat-nomadik/include/plat/mtu.h index 76da7f085330..42c907258b14 100644 --- a/arch/arm/mach-nomadik/include/mach/mtu.h +++ b/arch/arm/plat-nomadik/include/plat/mtu.h | |||
@@ -1,5 +1,8 @@ | |||
1 | #ifndef __ASM_ARCH_MTU_H | 1 | #ifndef __PLAT_MTU_H |
2 | #define __ASM_ARCH_MTU_H | 2 | #define __PLAT_MTU_H |
3 | |||
4 | /* should be set by the platform code */ | ||
5 | extern void __iomem *mtu_base; | ||
3 | 6 | ||
4 | /* | 7 | /* |
5 | * The MTU device hosts four different counters, with 4 set of | 8 | * The MTU device hosts four different counters, with 4 set of |
@@ -41,5 +44,5 @@ | |||
41 | #define MTU_PCELL2 0xff8 | 44 | #define MTU_PCELL2 0xff8 |
42 | #define MTU_PCELL3 0xffC | 45 | #define MTU_PCELL3 0xffC |
43 | 46 | ||
44 | #endif /* __ASM_ARCH_MTU_H */ | 47 | #endif /* __PLAT_MTU_H */ |
45 | 48 | ||
diff --git a/arch/arm/mach-nomadik/timer.c b/arch/arm/plat-nomadik/timer.c index d1738e7061d4..62f18ad43a28 100644 --- a/arch/arm/mach-nomadik/timer.c +++ b/arch/arm/plat-nomadik/timer.c | |||
@@ -15,19 +15,14 @@ | |||
15 | #include <linux/clockchips.h> | 15 | #include <linux/clockchips.h> |
16 | #include <linux/jiffies.h> | 16 | #include <linux/jiffies.h> |
17 | #include <asm/mach/time.h> | 17 | #include <asm/mach/time.h> |
18 | #include <mach/mtu.h> | ||
19 | 18 | ||
20 | #define TIMER_CTRL 0x80 /* No divisor */ | 19 | #include <plat/mtu.h> |
21 | #define TIMER_PERIODIC 0x40 | ||
22 | #define TIMER_SZ32BIT 0x02 | ||
23 | |||
24 | /* Initial value for SRC control register: all timers use MXTAL/8 source */ | ||
25 | #define SRC_CR_INIT_MASK 0x00007fff | ||
26 | #define SRC_CR_INIT_VAL 0x2aaa8000 | ||
27 | 20 | ||
28 | static u32 nmdk_count; /* accumulated count */ | 21 | static u32 nmdk_count; /* accumulated count */ |
29 | static u32 nmdk_cycle; /* write-once */ | 22 | static u32 nmdk_cycle; /* write-once */ |
30 | static __iomem void *mtu_base; | 23 | |
24 | /* setup by the platform code */ | ||
25 | void __iomem *mtu_base; | ||
31 | 26 | ||
32 | /* | 27 | /* |
33 | * clocksource: the MTU device is a decrementing counters, so we negate | 28 | * clocksource: the MTU device is a decrementing counters, so we negate |
@@ -93,7 +88,7 @@ static struct clock_event_device nmdk_clkevt = { | |||
93 | static irqreturn_t nmdk_timer_interrupt(int irq, void *dev_id) | 88 | static irqreturn_t nmdk_timer_interrupt(int irq, void *dev_id) |
94 | { | 89 | { |
95 | /* ack: "interrupt clear register" */ | 90 | /* ack: "interrupt clear register" */ |
96 | writel( 1 << 0, mtu_base + MTU_ICR); | 91 | writel(1 << 0, mtu_base + MTU_ICR); |
97 | 92 | ||
98 | /* we can't count lost ticks, unfortunately */ | 93 | /* we can't count lost ticks, unfortunately */ |
99 | nmdk_count += nmdk_cycle; | 94 | nmdk_count += nmdk_cycle; |
@@ -125,24 +120,14 @@ static void nmdk_timer_reset(void) | |||
125 | writel(cr | MTU_CRn_ENA, mtu_base + MTU_CR(0)); | 120 | writel(cr | MTU_CRn_ENA, mtu_base + MTU_CR(0)); |
126 | } | 121 | } |
127 | 122 | ||
128 | static void __init nmdk_timer_init(void) | 123 | void __init nmdk_timer_init(void) |
129 | { | 124 | { |
130 | u32 src_cr; | ||
131 | unsigned long rate; | 125 | unsigned long rate; |
132 | int bits; | 126 | int bits; |
133 | 127 | ||
134 | rate = CLOCK_TICK_RATE; /* 2.4MHz */ | 128 | rate = CLOCK_TICK_RATE; /* 2.4MHz */ |
135 | nmdk_cycle = (rate + HZ/2) / HZ; | 129 | nmdk_cycle = (rate + HZ/2) / HZ; |
136 | 130 | ||
137 | /* Configure timer sources in "system reset controller" ctrl reg */ | ||
138 | src_cr = readl(io_p2v(NOMADIK_SRC_BASE)); | ||
139 | src_cr &= SRC_CR_INIT_MASK; | ||
140 | src_cr |= SRC_CR_INIT_VAL; | ||
141 | writel(src_cr, io_p2v(NOMADIK_SRC_BASE)); | ||
142 | |||
143 | /* Save global pointer to mtu, used by functions above */ | ||
144 | mtu_base = io_p2v(NOMADIK_MTU0_BASE); | ||
145 | |||
146 | /* Init the timer and register clocksource */ | 131 | /* Init the timer and register clocksource */ |
147 | nmdk_timer_reset(); | 132 | nmdk_timer_reset(); |
148 | 133 | ||
@@ -150,7 +135,9 @@ static void __init nmdk_timer_init(void) | |||
150 | bits = 8*sizeof(nmdk_count); | 135 | bits = 8*sizeof(nmdk_count); |
151 | nmdk_clksrc.mask = CLOCKSOURCE_MASK(bits); | 136 | nmdk_clksrc.mask = CLOCKSOURCE_MASK(bits); |
152 | 137 | ||
153 | clocksource_register(&nmdk_clksrc); | 138 | if (clocksource_register(&nmdk_clksrc)) |
139 | printk(KERN_ERR "timer: failed to initialize clock " | ||
140 | "source %s\n", nmdk_clksrc.name); | ||
154 | 141 | ||
155 | /* Register irq and clockevents */ | 142 | /* Register irq and clockevents */ |
156 | setup_irq(IRQ_MTU0, &nmdk_timer_irq); | 143 | setup_irq(IRQ_MTU0, &nmdk_timer_irq); |
@@ -158,7 +145,3 @@ static void __init nmdk_timer_init(void) | |||
158 | nmdk_clkevt.cpumask = cpumask_of(0); | 145 | nmdk_clkevt.cpumask = cpumask_of(0); |
159 | clockevents_register_device(&nmdk_clkevt); | 146 | clockevents_register_device(&nmdk_clkevt); |
160 | } | 147 | } |
161 | |||
162 | struct sys_timer nomadik_timer = { | ||
163 | .init = nmdk_timer_init, | ||
164 | }; | ||
diff --git a/arch/arm/plat-omap/include/mach/memory.h b/arch/arm/plat-omap/include/mach/memory.h index 9ad41dc484c1..3325f7b49eaa 100644 --- a/arch/arm/plat-omap/include/mach/memory.h +++ b/arch/arm/plat-omap/include/mach/memory.h | |||
@@ -68,6 +68,13 @@ | |||
68 | __dma = __dma - PHYS_OFFSET + OMAP1510_LB_OFFSET; \ | 68 | __dma = __dma - PHYS_OFFSET + OMAP1510_LB_OFFSET; \ |
69 | __dma; }) | 69 | __dma; }) |
70 | 70 | ||
71 | #define __arch_dma_to_page(dev, addr) \ | ||
72 | ({ dma_addr_t __dma = addr; \ | ||
73 | if (is_lbus_device(dev)) \ | ||
74 | __dma += PHYS_OFFSET - OMAP1510_LB_OFFSET; \ | ||
75 | phys_to_page(__dma); \ | ||
76 | }) | ||
77 | |||
71 | #define __arch_dma_to_virt(dev, addr) ({ (void *) (is_lbus_device(dev) ? \ | 78 | #define __arch_dma_to_virt(dev, addr) ({ (void *) (is_lbus_device(dev) ? \ |
72 | lbus_to_virt(addr) : \ | 79 | lbus_to_virt(addr) : \ |
73 | __phys_to_virt(addr)); }) | 80 | __phys_to_virt(addr)); }) |
diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig index b401dadad4a8..eb140ff38c27 100644 --- a/drivers/dma/Kconfig +++ b/drivers/dma/Kconfig | |||
@@ -54,7 +54,7 @@ config DW_DMAC | |||
54 | 54 | ||
55 | config AT_HDMAC | 55 | config AT_HDMAC |
56 | tristate "Atmel AHB DMA support" | 56 | tristate "Atmel AHB DMA support" |
57 | depends on ARCH_AT91SAM9RL | 57 | depends on ARCH_AT91SAM9RL || ARCH_AT91SAM9G45 |
58 | select DMA_ENGINE | 58 | select DMA_ENGINE |
59 | help | 59 | help |
60 | Support the Atmel AHB DMA controller. This can be integrated in | 60 | Support the Atmel AHB DMA controller. This can be integrated in |
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c index 705a5894a6bb..90d168ad03b6 100644 --- a/drivers/mmc/host/mmci.c +++ b/drivers/mmc/host/mmci.c | |||
@@ -56,7 +56,7 @@ static void mmci_set_clkreg(struct mmci_host *host, unsigned int desired) | |||
56 | clk = 255; | 56 | clk = 255; |
57 | host->cclk = host->mclk / (2 * (clk + 1)); | 57 | host->cclk = host->mclk / (2 * (clk + 1)); |
58 | } | 58 | } |
59 | if (host->hw_designer == 0x80) | 59 | if (host->hw_designer == AMBA_VENDOR_ST) |
60 | clk |= MCI_FCEN; /* Bug fix in ST IP block */ | 60 | clk |= MCI_FCEN; /* Bug fix in ST IP block */ |
61 | clk |= MCI_CLK_ENABLE; | 61 | clk |= MCI_CLK_ENABLE; |
62 | /* This hasn't proven to be worthwhile */ | 62 | /* This hasn't proven to be worthwhile */ |