aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm')
-rw-r--r--arch/arm/Kconfig39
-rw-r--r--arch/arm/Makefile3
-rw-r--r--arch/arm/boot/install.sh4
-rw-r--r--arch/arm/common/amba.c2
-rw-r--r--arch/arm/common/dmabounce.c36
-rw-r--r--arch/arm/common/sa1111.c13
-rw-r--r--arch/arm/common/sharpsl_param.c2
-rw-r--r--arch/arm/configs/enp2611_defconfig67
-rw-r--r--arch/arm/configs/ixdp2400_defconfig67
-rw-r--r--arch/arm/configs/ixdp2401_defconfig67
-rw-r--r--arch/arm/configs/ixdp2800_defconfig67
-rw-r--r--arch/arm/configs/ixdp2801_defconfig67
-rw-r--r--arch/arm/configs/s3c2410_defconfig27
-rw-r--r--arch/arm/kernel/Makefile2
-rw-r--r--arch/arm/kernel/arch.c46
-rw-r--r--arch/arm/kernel/armksyms.c6
-rw-r--r--arch/arm/kernel/ecard.c12
-rw-r--r--arch/arm/kernel/irq.c14
-rw-r--r--arch/arm/kernel/process.c5
-rw-r--r--arch/arm/kernel/setup.c28
-rw-r--r--arch/arm/kernel/signal.c31
-rw-r--r--arch/arm/kernel/signal.h12
-rw-r--r--arch/arm/kernel/smp.c126
-rw-r--r--arch/arm/kernel/time.c107
-rw-r--r--arch/arm/kernel/traps.c21
-rw-r--r--arch/arm/lib/Makefile2
-rw-r--r--arch/arm/lib/ashldi3.c47
-rw-r--r--arch/arm/lib/ashrdi3.c48
-rw-r--r--arch/arm/lib/gcclib.h27
-rw-r--r--arch/arm/lib/longlong.h183
-rw-r--r--arch/arm/lib/lshrdi3.c47
-rw-r--r--arch/arm/lib/muldi3.c31
-rw-r--r--arch/arm/lib/ucmpdi2.c30
-rw-r--r--arch/arm/lib/udivdi3.c242
-rw-r--r--arch/arm/mach-aaec2000/Kconfig11
-rw-r--r--arch/arm/mach-aaec2000/Makefile9
-rw-r--r--arch/arm/mach-aaec2000/Makefile.boot1
-rw-r--r--arch/arm/mach-aaec2000/aaed2000.c48
-rw-r--r--arch/arm/mach-aaec2000/core.c157
-rw-r--r--arch/arm/mach-aaec2000/core.h16
-rw-r--r--arch/arm/mach-clps711x/Kconfig2
-rw-r--r--arch/arm/mach-clps711x/time.c4
-rw-r--r--arch/arm/mach-clps7500/core.c6
-rw-r--r--arch/arm/mach-ebsa110/core.c4
-rw-r--r--arch/arm/mach-epxa10db/time.c4
-rw-r--r--arch/arm/mach-footbridge/dc21285-timer.c2
-rw-r--r--arch/arm/mach-footbridge/isa-timer.c2
-rw-r--r--arch/arm/mach-h720x/cpu-h7201.c4
-rw-r--r--arch/arm/mach-h720x/cpu-h7202.c4
-rw-r--r--arch/arm/mach-imx/time.c4
-rw-r--r--arch/arm/mach-integrator/core.c46
-rw-r--r--arch/arm/mach-iop3xx/iop321-time.c2
-rw-r--r--arch/arm/mach-iop3xx/iop331-time.c2
-rw-r--r--arch/arm/mach-ixp2000/Kconfig8
-rw-r--r--arch/arm/mach-ixp2000/core.c128
-rw-r--r--arch/arm/mach-ixp2000/enp2611.c17
-rw-r--r--arch/arm/mach-ixp2000/ixdp2800.c6
-rw-r--r--arch/arm/mach-ixp2000/ixdp2x00.c3
-rw-r--r--arch/arm/mach-ixp2000/pci.c13
-rw-r--r--arch/arm/mach-ixp4xx/common.c12
-rw-r--r--arch/arm/mach-lh7a40x/time.c4
-rw-r--r--arch/arm/mach-omap/pm.c16
-rw-r--r--arch/arm/mach-omap/time.c54
-rw-r--r--arch/arm/mach-omap/usb.c8
-rw-r--r--arch/arm/mach-pxa/time.c4
-rw-r--r--arch/arm/mach-rpc/riscpc.c7
-rw-r--r--arch/arm/mach-s3c2410/Kconfig5
-rw-r--r--arch/arm/mach-s3c2410/Makefile1
-rw-r--r--arch/arm/mach-s3c2410/devs.c4
-rw-r--r--arch/arm/mach-s3c2410/irq.c7
-rw-r--r--arch/arm/mach-s3c2410/mach-bast.c88
-rw-r--r--arch/arm/mach-s3c2410/mach-vr1000.c85
-rw-r--r--arch/arm/mach-s3c2410/pm-simtec.c65
-rw-r--r--arch/arm/mach-s3c2410/time.c4
-rw-r--r--arch/arm/mach-sa1100/h3600.c2
-rw-r--r--arch/arm/mach-sa1100/time.c4
-rw-r--r--arch/arm/mach-shark/core.c4
-rw-r--r--arch/arm/mach-versatile/Makefile1
-rw-r--r--arch/arm/mach-versatile/core.c79
-rw-r--r--arch/arm/mach-versatile/pci.c360
-rw-r--r--arch/arm/mm/Kconfig2
-rw-r--r--arch/arm/mm/copypage-v6.c6
-rw-r--r--arch/arm/mm/fault-armv.c31
-rw-r--r--arch/arm/mm/fault.c75
-rw-r--r--arch/arm/mm/flush.c44
-rw-r--r--arch/arm/mm/init.c92
-rw-r--r--arch/arm/mm/ioremap.c47
-rw-r--r--arch/arm/mm/mm-armv.c89
-rw-r--r--arch/arm/mm/mmap.c10
-rw-r--r--arch/arm/mm/proc-arm1020.S4
-rw-r--r--arch/arm/mm/proc-arm1020e.S4
-rw-r--r--arch/arm/mm/proc-v6.S6
-rw-r--r--arch/arm/nwfpe/softfloat-macros22
-rw-r--r--arch/arm/nwfpe/softfloat.c12
-rw-r--r--arch/arm/oprofile/Makefile2
-rw-r--r--arch/arm/oprofile/backtrace.c144
-rw-r--r--arch/arm/oprofile/init.c2
-rw-r--r--arch/arm/oprofile/op_arm_model.h2
-rw-r--r--arch/arm/tools/mach-types69
-rw-r--r--arch/arm/vfp/vfp.h15
-rw-r--r--arch/arm/vfp/vfpdouble.c2
-rw-r--r--arch/arm/vfp/vfpmodule.c2
-rw-r--r--arch/arm/vfp/vfpsingle.c14
103 files changed, 2374 insertions, 1167 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 475950c8a831..620f2ca94ed2 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -67,10 +67,6 @@ config GENERIC_BUST_SPINLOCK
67config GENERIC_ISA_DMA 67config GENERIC_ISA_DMA
68 bool 68 bool
69 69
70config GENERIC_IOMAP
71 bool
72 default y
73
74config FIQ 70config FIQ
75 bool 71 bool
76 72
@@ -161,7 +157,7 @@ config ARCH_RPC
161config ARCH_SA1100 157config ARCH_SA1100
162 bool "SA1100-based" 158 bool "SA1100-based"
163 select ISA 159 select ISA
164 select DISCONTIGMEM 160 select ARCH_DISCONTIGMEM_ENABLE
165 161
166config ARCH_S3C2410 162config ARCH_S3C2410
167 bool "Samsung S3C2410" 163 bool "Samsung S3C2410"
@@ -202,6 +198,11 @@ config ARCH_H720X
202 help 198 help
203 This enables support for systems based on the Hynix HMS720x 199 This enables support for systems based on the Hynix HMS720x
204 200
201config ARCH_AAEC2000
202 bool "Agilent AAEC-2000 based"
203 help
204 This enables support for systems based on the Agilent AAEC-2000
205
205endchoice 206endchoice
206 207
207source "arch/arm/mach-clps711x/Kconfig" 208source "arch/arm/mach-clps711x/Kconfig"
@@ -234,6 +235,8 @@ source "arch/arm/mach-h720x/Kconfig"
234 235
235source "arch/arm/mach-versatile/Kconfig" 236source "arch/arm/mach-versatile/Kconfig"
236 237
238source "arch/arm/mach-aaec2000/Kconfig"
239
237# Definitions to make life easier 240# Definitions to make life easier
238config ARCH_ACORN 241config ARCH_ACORN
239 bool 242 bool
@@ -277,7 +280,7 @@ config ISA_DMA_API
277 default y 280 default y
278 281
279config PCI 282config PCI
280 bool "PCI support" if ARCH_INTEGRATOR_AP 283 bool "PCI support" if ARCH_INTEGRATOR_AP || ARCH_VERSATILE_PB
281 help 284 help
282 Find out whether you have a PCI motherboard. PCI is the name of a 285 Find out whether you have a PCI motherboard. PCI is the name of a
283 bus system, i.e. the way the CPU talks to the other stuff inside 286 bus system, i.e. the way the CPU talks to the other stuff inside
@@ -343,7 +346,27 @@ config PREEMPT
343 Say Y here if you are building a kernel for a desktop, embedded 346 Say Y here if you are building a kernel for a desktop, embedded
344 or real-time system. Say N if you are unsure. 347 or real-time system. Say N if you are unsure.
345 348
346config DISCONTIGMEM 349config NO_IDLE_HZ
350 bool "Dynamic tick timer"
351 help
352 Select this option if you want to disable continuous timer ticks
353 and have them programmed to occur as required. This option saves
354 power as the system can remain in idle state for longer.
355
356 By default dynamic tick is disabled during the boot, and can be
357 manually enabled with:
358
359 echo 1 > /sys/devices/system/timer/timer0/dyn_tick
360
361 Alternatively, if you want dynamic tick automatically enabled
362 during boot, pass "dyntick=enable" via the kernel command string.
363
364 Please note that dynamic tick may affect the accuracy of
365 timekeeping on some platforms depending on the implementation.
366 Currently at least OMAP platform is known to have accurate
367 timekeeping with dynamic tick.
368
369config ARCH_DISCONTIGMEM_ENABLE
347 bool 370 bool
348 default (ARCH_LH7A40X && !LH7A40X_CONTIGMEM) 371 default (ARCH_LH7A40X && !LH7A40X_CONTIGMEM)
349 help 372 help
@@ -352,6 +375,8 @@ config DISCONTIGMEM
352 or have huge holes in the physical address space for other reasons. 375 or have huge holes in the physical address space for other reasons.
353 See <file:Documentation/vm/numa> for more. 376 See <file:Documentation/vm/numa> for more.
354 377
378source "mm/Kconfig"
379
355config LEDS 380config LEDS
356 bool "Timer and CPU usage LEDs" 381 bool "Timer and CPU usage LEDs"
357 depends on ARCH_CDB89712 || ARCH_CO285 || ARCH_EBSA110 || \ 382 depends on ARCH_CDB89712 || ARCH_CO285 || ARCH_EBSA110 || \
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 2277e3d179cc..eb933dcafba0 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -56,7 +56,7 @@ tune-$(CONFIG_CPU_XSCALE) :=$(call cc-option,-mtune=xscale,-mtune=strongarm110)
56tune-$(CONFIG_CPU_V6) :=-mtune=strongarm 56tune-$(CONFIG_CPU_V6) :=-mtune=strongarm
57 57
58# Need -Uarm for gcc < 3.x 58# Need -Uarm for gcc < 3.x
59CFLAGS_ABI :=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) 59CFLAGS_ABI :=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) $(call cc-option,-mno-thumb-interwork,)
60CFLAGS +=$(CFLAGS_ABI) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm 60CFLAGS +=$(CFLAGS_ABI) $(arch-y) $(tune-y) $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,)) -msoft-float -Uarm
61AFLAGS +=$(CFLAGS_ABI) $(arch-y) $(tune-y) -msoft-float 61AFLAGS +=$(CFLAGS_ABI) $(arch-y) $(tune-y) -msoft-float
62 62
@@ -97,6 +97,7 @@ textaddr-$(CONFIG_ARCH_FORTUNET) := 0xc0008000
97 machine-$(CONFIG_ARCH_VERSATILE) := versatile 97 machine-$(CONFIG_ARCH_VERSATILE) := versatile
98 machine-$(CONFIG_ARCH_IMX) := imx 98 machine-$(CONFIG_ARCH_IMX) := imx
99 machine-$(CONFIG_ARCH_H720X) := h720x 99 machine-$(CONFIG_ARCH_H720X) := h720x
100 machine-$(CONFIG_ARCH_AAEC2000) := aaec2000
100 101
101ifeq ($(CONFIG_ARCH_EBSA110),y) 102ifeq ($(CONFIG_ARCH_EBSA110),y)
102# This is what happens if you forget the IOCS16 line. 103# This is what happens if you forget the IOCS16 line.
diff --git a/arch/arm/boot/install.sh b/arch/arm/boot/install.sh
index 935bb27369e9..9f9bed207345 100644
--- a/arch/arm/boot/install.sh
+++ b/arch/arm/boot/install.sh
@@ -21,8 +21,8 @@
21# 21#
22 22
23# User may have a custom install script 23# User may have a custom install script
24if [ -x ~/bin/installkernel ]; then exec ~/bin/installkernel "$@"; fi 24if [ -x ~/bin/${CROSS_COMPILE}installkernel ]; then exec ~/bin/${CROSS_COMPILE}installkernel "$@"; fi
25if [ -x /sbin/installkernel ]; then exec /sbin/installkernel "$@"; fi 25if [ -x /sbin/${CROSS_COMPILE}installkernel ]; then exec /sbin/${CROSS_COMPILE}installkernel "$@"; fi
26 26
27if [ "$(basename $2)" = "zImage" ]; then 27if [ "$(basename $2)" = "zImage" ]; then
28# Compressed install 28# Compressed install
diff --git a/arch/arm/common/amba.c b/arch/arm/common/amba.c
index a0507f8c33fe..c6beb751f2a9 100644
--- a/arch/arm/common/amba.c
+++ b/arch/arm/common/amba.c
@@ -169,7 +169,7 @@ static void amba_device_release(struct device *dev)
169} 169}
170 170
171#define amba_attr(name,fmt,arg...) \ 171#define amba_attr(name,fmt,arg...) \
172static ssize_t show_##name(struct device *_dev, char *buf) \ 172static ssize_t show_##name(struct device *_dev, struct device_attribute *attr, char *buf) \
173{ \ 173{ \
174 struct amba_device *dev = to_amba_device(_dev); \ 174 struct amba_device *dev = to_amba_device(_dev); \
175 return sprintf(buf, fmt, arg); \ 175 return sprintf(buf, fmt, arg); \
diff --git a/arch/arm/common/dmabounce.c b/arch/arm/common/dmabounce.c
index 5797b1b100a1..cbf2165476b0 100644
--- a/arch/arm/common/dmabounce.c
+++ b/arch/arm/common/dmabounce.c
@@ -30,6 +30,8 @@
30#include <linux/dmapool.h> 30#include <linux/dmapool.h>
31#include <linux/list.h> 31#include <linux/list.h>
32 32
33#include <asm/cacheflush.h>
34
33#undef DEBUG 35#undef DEBUG
34 36
35#undef STATS 37#undef STATS
@@ -91,15 +93,12 @@ static void print_alloc_stats(struct dmabounce_device_info *device_info)
91static inline struct dmabounce_device_info * 93static inline struct dmabounce_device_info *
92find_dmabounce_dev(struct device *dev) 94find_dmabounce_dev(struct device *dev)
93{ 95{
94 struct list_head *entry; 96 struct dmabounce_device_info *d;
95
96 list_for_each(entry, &dmabounce_devs) {
97 struct dmabounce_device_info *d =
98 list_entry(entry, struct dmabounce_device_info, node);
99 97
98 list_for_each_entry(d, &dmabounce_devs, node)
100 if (d->dev == dev) 99 if (d->dev == dev)
101 return d; 100 return d;
102 } 101
103 return NULL; 102 return NULL;
104} 103}
105 104
@@ -170,15 +169,11 @@ alloc_safe_buffer(struct dmabounce_device_info *device_info, void *ptr,
170static inline struct safe_buffer * 169static inline struct safe_buffer *
171find_safe_buffer(struct dmabounce_device_info *device_info, dma_addr_t safe_dma_addr) 170find_safe_buffer(struct dmabounce_device_info *device_info, dma_addr_t safe_dma_addr)
172{ 171{
173 struct list_head *entry; 172 struct safe_buffer *b;
174
175 list_for_each(entry, &device_info->safe_buffers) {
176 struct safe_buffer *b =
177 list_entry(entry, struct safe_buffer, node);
178 173
174 list_for_each_entry(b, &device_info->safe_buffers, node)
179 if (b->safe_dma_addr == safe_dma_addr) 175 if (b->safe_dma_addr == safe_dma_addr)
180 return b; 176 return b;
181 }
182 177
183 return NULL; 178 return NULL;
184} 179}
@@ -299,15 +294,26 @@ unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
299 __func__, buf->ptr, (void *) virt_to_dma(dev, buf->ptr), 294 __func__, buf->ptr, (void *) virt_to_dma(dev, buf->ptr),
300 buf->safe, (void *) buf->safe_dma_addr); 295 buf->safe, (void *) buf->safe_dma_addr);
301 296
302
303 DO_STATS ( device_info->bounce_count++ ); 297 DO_STATS ( device_info->bounce_count++ );
304 298
305 if ((dir == DMA_FROM_DEVICE) || 299 if (dir == DMA_FROM_DEVICE || dir == DMA_BIDIRECTIONAL) {
306 (dir == DMA_BIDIRECTIONAL)) { 300 unsigned long ptr;
301
307 dev_dbg(dev, 302 dev_dbg(dev,
308 "%s: copy back safe %p to unsafe %p size %d\n", 303 "%s: copy back safe %p to unsafe %p size %d\n",
309 __func__, buf->safe, buf->ptr, size); 304 __func__, buf->safe, buf->ptr, size);
310 memcpy(buf->ptr, buf->safe, size); 305 memcpy(buf->ptr, buf->safe, size);
306
307 /*
308 * DMA buffers must have the same cache properties
309 * as if they were really used for DMA - which means
310 * data must be written back to RAM. Note that
311 * we don't use dmac_flush_range() here for the
312 * bidirectional case because we know the cache
313 * lines will be coherent with the data written.
314 */
315 ptr = (unsigned long)buf->ptr;
316 dmac_clean_range(ptr, ptr + size);
311 } 317 }
312 free_safe_buffer(device_info, buf); 318 free_safe_buffer(device_info, buf);
313 } 319 }
diff --git a/arch/arm/common/sa1111.c b/arch/arm/common/sa1111.c
index 21fce3414ed1..38c2eb667eb9 100644
--- a/arch/arm/common/sa1111.c
+++ b/arch/arm/common/sa1111.c
@@ -721,16 +721,17 @@ __sa1111_probe(struct device *me, struct resource *mem, int irq)
721 return ret; 721 return ret;
722} 722}
723 723
724static int sa1111_remove_one(struct device *dev, void *data)
725{
726 device_unregister(dev);
727 return 0;
728}
729
724static void __sa1111_remove(struct sa1111 *sachip) 730static void __sa1111_remove(struct sa1111 *sachip)
725{ 731{
726 struct list_head *l, *n;
727 void __iomem *irqbase = sachip->base + SA1111_INTC; 732 void __iomem *irqbase = sachip->base + SA1111_INTC;
728 733
729 list_for_each_safe(l, n, &sachip->dev->children) { 734 device_for_each_child(sachip->dev, NULL, sa1111_remove_one);
730 struct device *d = list_to_dev(l);
731
732 device_unregister(d);
733 }
734 735
735 /* disable all IRQs */ 736 /* disable all IRQs */
736 sa1111_writel(0, irqbase + SA1111_INTEN0); 737 sa1111_writel(0, irqbase + SA1111_INTEN0);
diff --git a/arch/arm/common/sharpsl_param.c b/arch/arm/common/sharpsl_param.c
index c2c557a224c2..c94864c5b1af 100644
--- a/arch/arm/common/sharpsl_param.c
+++ b/arch/arm/common/sharpsl_param.c
@@ -22,7 +22,7 @@
22 * them early in the boot process, then pass them to the appropriate drivers. 22 * them early in the boot process, then pass them to the appropriate drivers.
23 * Not all devices use all paramaters but the format is common to all. 23 * Not all devices use all paramaters but the format is common to all.
24 */ 24 */
25#ifdef ARCH_SA1100 25#ifdef CONFIG_ARCH_SA1100
26#define PARAM_BASE 0xe8ffc000 26#define PARAM_BASE 0xe8ffc000
27#else 27#else
28#define PARAM_BASE 0xa0000a00 28#define PARAM_BASE 0xa0000a00
diff --git a/arch/arm/configs/enp2611_defconfig b/arch/arm/configs/enp2611_defconfig
index e8f9fccffe84..b8c51ee7f1bb 100644
--- a/arch/arm/configs/enp2611_defconfig
+++ b/arch/arm/configs/enp2611_defconfig
@@ -1,14 +1,13 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.12-rc1-bk2 3# Linux kernel version: 2.6.12-git6
4# Sun Mar 27 22:08:24 2005 4# Sat Jun 25 00:57:29 2005
5# 5#
6CONFIG_ARM=y 6CONFIG_ARM=y
7CONFIG_MMU=y 7CONFIG_MMU=y
8CONFIG_UID16=y 8CONFIG_UID16=y
9CONFIG_RWSEM_GENERIC_SPINLOCK=y 9CONFIG_RWSEM_GENERIC_SPINLOCK=y
10CONFIG_GENERIC_CALIBRATE_DELAY=y 10CONFIG_GENERIC_CALIBRATE_DELAY=y
11CONFIG_GENERIC_IOMAP=y
12 11
13# 12#
14# Code maturity level options 13# Code maturity level options
@@ -16,6 +15,7 @@ CONFIG_GENERIC_IOMAP=y
16CONFIG_EXPERIMENTAL=y 15CONFIG_EXPERIMENTAL=y
17CONFIG_CLEAN_COMPILE=y 16CONFIG_CLEAN_COMPILE=y
18CONFIG_BROKEN_ON_SMP=y 17CONFIG_BROKEN_ON_SMP=y
18CONFIG_INIT_ENV_ARG_LIMIT=32
19 19
20# 20#
21# General setup 21# General setup
@@ -35,6 +35,8 @@ CONFIG_EMBEDDED=y
35CONFIG_KALLSYMS=y 35CONFIG_KALLSYMS=y
36# CONFIG_KALLSYMS_ALL is not set 36# CONFIG_KALLSYMS_ALL is not set
37# CONFIG_KALLSYMS_EXTRA_PASS is not set 37# CONFIG_KALLSYMS_EXTRA_PASS is not set
38CONFIG_PRINTK=y
39CONFIG_BUG=y
38CONFIG_BASE_FULL=y 40CONFIG_BASE_FULL=y
39CONFIG_FUTEX=y 41CONFIG_FUTEX=y
40CONFIG_EPOLL=y 42CONFIG_EPOLL=y
@@ -50,7 +52,13 @@ CONFIG_BASE_SMALL=0
50# 52#
51# Loadable module support 53# Loadable module support
52# 54#
53# CONFIG_MODULES is not set 55CONFIG_MODULES=y
56CONFIG_MODULE_UNLOAD=y
57# CONFIG_MODULE_FORCE_UNLOAD is not set
58CONFIG_OBSOLETE_MODPARM=y
59# CONFIG_MODVERSIONS is not set
60# CONFIG_MODULE_SRCVERSION_ALL is not set
61CONFIG_KMOD=y
54 62
55# 63#
56# System Type 64# System Type
@@ -76,6 +84,7 @@ CONFIG_ARCH_IXP2000=y
76# CONFIG_ARCH_VERSATILE is not set 84# CONFIG_ARCH_VERSATILE is not set
77# CONFIG_ARCH_IMX is not set 85# CONFIG_ARCH_IMX is not set
78# CONFIG_ARCH_H720X is not set 86# CONFIG_ARCH_H720X is not set
87# CONFIG_ARCH_AAEC2000 is not set
79CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y 88CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
80 89
81# 90#
@@ -90,6 +99,7 @@ CONFIG_ARCH_ENP2611=y
90# CONFIG_ARCH_IXDP2800 is not set 99# CONFIG_ARCH_IXDP2800 is not set
91# CONFIG_ARCH_IXDP2401 is not set 100# CONFIG_ARCH_IXDP2401 is not set
92# CONFIG_ARCH_IXDP2801 is not set 101# CONFIG_ARCH_IXDP2801 is not set
102# CONFIG_IXP2000_SUPPORT_BROKEN_PCI_IO is not set
93 103
94# 104#
95# Processor Type 105# Processor Type
@@ -100,7 +110,6 @@ CONFIG_CPU_32v5=y
100CONFIG_CPU_ABRT_EV5T=y 110CONFIG_CPU_ABRT_EV5T=y
101CONFIG_CPU_CACHE_VIVT=y 111CONFIG_CPU_CACHE_VIVT=y
102CONFIG_CPU_TLB_V4WBI=y 112CONFIG_CPU_TLB_V4WBI=y
103CONFIG_CPU_MINICACHE=y
104 113
105# 114#
106# Processor Features 115# Processor Features
@@ -112,9 +121,11 @@ CONFIG_XSCALE_PMU=y
112# 121#
113# Bus support 122# Bus support
114# 123#
124CONFIG_ISA_DMA_API=y
115CONFIG_PCI=y 125CONFIG_PCI=y
116CONFIG_PCI_LEGACY_PROC=y 126CONFIG_PCI_LEGACY_PROC=y
117CONFIG_PCI_NAMES=y 127CONFIG_PCI_NAMES=y
128# CONFIG_PCI_DEBUG is not set
118 129
119# 130#
120# PCCARD (PCMCIA/CardBus) support 131# PCCARD (PCMCIA/CardBus) support
@@ -124,7 +135,15 @@ CONFIG_PCI_NAMES=y
124# 135#
125# Kernel Features 136# Kernel Features
126# 137#
138# CONFIG_SMP is not set
127# CONFIG_PREEMPT is not set 139# CONFIG_PREEMPT is not set
140# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
141CONFIG_SELECT_MEMORY_MODEL=y
142CONFIG_FLATMEM_MANUAL=y
143# CONFIG_DISCONTIGMEM_MANUAL is not set
144# CONFIG_SPARSEMEM_MANUAL is not set
145CONFIG_FLATMEM=y
146CONFIG_FLAT_NODE_MEM_MAP=y
128CONFIG_ALIGNMENT_TRAP=y 147CONFIG_ALIGNMENT_TRAP=y
129 148
130# 149#
@@ -263,7 +282,6 @@ CONFIG_MTD_IXP2000=y
263# 282#
264# Block devices 283# Block devices
265# 284#
266# CONFIG_BLK_DEV_FD is not set
267# CONFIG_BLK_CPQ_DA is not set 285# CONFIG_BLK_CPQ_DA is not set
268# CONFIG_BLK_CPQ_CISS_DA is not set 286# CONFIG_BLK_CPQ_CISS_DA is not set
269# CONFIG_BLK_DEV_DAC960 is not set 287# CONFIG_BLK_DEV_DAC960 is not set
@@ -302,6 +320,7 @@ CONFIG_IOSCHED_CFQ=y
302# 320#
303# Fusion MPT device support 321# Fusion MPT device support
304# 322#
323# CONFIG_FUSION is not set
305 324
306# 325#
307# IEEE 1394 (FireWire) support 326# IEEE 1394 (FireWire) support
@@ -323,10 +342,11 @@ CONFIG_NET=y
323# 342#
324CONFIG_PACKET=y 343CONFIG_PACKET=y
325CONFIG_PACKET_MMAP=y 344CONFIG_PACKET_MMAP=y
326# CONFIG_NETLINK_DEV is not set
327CONFIG_UNIX=y 345CONFIG_UNIX=y
328# CONFIG_NET_KEY is not set 346# CONFIG_NET_KEY is not set
329CONFIG_INET=y 347CONFIG_INET=y
348CONFIG_IP_FIB_HASH=y
349# CONFIG_IP_FIB_TRIE is not set
330# CONFIG_IP_MULTICAST is not set 350# CONFIG_IP_MULTICAST is not set
331# CONFIG_IP_ADVANCED_ROUTER is not set 351# CONFIG_IP_ADVANCED_ROUTER is not set
332CONFIG_IP_PNP=y 352CONFIG_IP_PNP=y
@@ -343,6 +363,17 @@ CONFIG_SYN_COOKIES=y
343# CONFIG_INET_TUNNEL is not set 363# CONFIG_INET_TUNNEL is not set
344# CONFIG_IP_TCPDIAG is not set 364# CONFIG_IP_TCPDIAG is not set
345# CONFIG_IP_TCPDIAG_IPV6 is not set 365# CONFIG_IP_TCPDIAG_IPV6 is not set
366
367#
368# TCP congestion control
369#
370CONFIG_TCP_CONG_BIC=y
371CONFIG_TCP_CONG_WESTWOOD=m
372CONFIG_TCP_CONG_HTCP=m
373# CONFIG_TCP_CONG_HSTCP is not set
374# CONFIG_TCP_CONG_HYBLA is not set
375# CONFIG_TCP_CONG_VEGAS is not set
376# CONFIG_TCP_CONG_SCALABLE is not set
346# CONFIG_IPV6 is not set 377# CONFIG_IPV6 is not set
347# CONFIG_NETFILTER is not set 378# CONFIG_NETFILTER is not set
348 379
@@ -398,6 +429,7 @@ CONFIG_MII=y
398# CONFIG_SUNGEM is not set 429# CONFIG_SUNGEM is not set
399# CONFIG_NET_VENDOR_3COM is not set 430# CONFIG_NET_VENDOR_3COM is not set
400# CONFIG_SMC91X is not set 431# CONFIG_SMC91X is not set
432# CONFIG_DM9000 is not set
401 433
402# 434#
403# Tulip family network device support 435# Tulip family network device support
@@ -434,9 +466,11 @@ CONFIG_EEPRO100=y
434# CONFIG_HAMACHI is not set 466# CONFIG_HAMACHI is not set
435# CONFIG_YELLOWFIN is not set 467# CONFIG_YELLOWFIN is not set
436# CONFIG_R8169 is not set 468# CONFIG_R8169 is not set
469# CONFIG_SKGE is not set
437# CONFIG_SK98LIN is not set 470# CONFIG_SK98LIN is not set
438# CONFIG_VIA_VELOCITY is not set 471# CONFIG_VIA_VELOCITY is not set
439# CONFIG_TIGON3 is not set 472# CONFIG_TIGON3 is not set
473# CONFIG_BNX2 is not set
440 474
441# 475#
442# Ethernet (10000 Mbit) 476# Ethernet (10000 Mbit)
@@ -458,6 +492,7 @@ CONFIG_EEPRO100=y
458# Wan interfaces 492# Wan interfaces
459# 493#
460CONFIG_WAN=y 494CONFIG_WAN=y
495# CONFIG_DSCC4 is not set
461# CONFIG_LANMEDIA is not set 496# CONFIG_LANMEDIA is not set
462# CONFIG_SYNCLINK_SYNCPPP is not set 497# CONFIG_SYNCLINK_SYNCPPP is not set
463CONFIG_HDLC=y 498CONFIG_HDLC=y
@@ -520,7 +555,6 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
520# 555#
521# CONFIG_SERIO is not set 556# CONFIG_SERIO is not set
522# CONFIG_GAMEPORT is not set 557# CONFIG_GAMEPORT is not set
523CONFIG_SOUND_GAMEPORT=y
524 558
525# 559#
526# Character devices 560# Character devices
@@ -541,6 +575,7 @@ CONFIG_SERIAL_8250_NR_UARTS=2
541# 575#
542CONFIG_SERIAL_CORE=y 576CONFIG_SERIAL_CORE=y
543CONFIG_SERIAL_CORE_CONSOLE=y 577CONFIG_SERIAL_CORE_CONSOLE=y
578# CONFIG_SERIAL_JSM is not set
544CONFIG_UNIX98_PTYS=y 579CONFIG_UNIX98_PTYS=y
545CONFIG_LEGACY_PTYS=y 580CONFIG_LEGACY_PTYS=y
546CONFIG_LEGACY_PTY_COUNT=256 581CONFIG_LEGACY_PTY_COUNT=256
@@ -607,17 +642,18 @@ CONFIG_I2C_ALGOBIT=y
607# CONFIG_I2C_AMD8111 is not set 642# CONFIG_I2C_AMD8111 is not set
608# CONFIG_I2C_I801 is not set 643# CONFIG_I2C_I801 is not set
609# CONFIG_I2C_I810 is not set 644# CONFIG_I2C_I810 is not set
645# CONFIG_I2C_PIIX4 is not set
610# CONFIG_I2C_ISA is not set 646# CONFIG_I2C_ISA is not set
611# CONFIG_I2C_IXP2000 is not set 647# CONFIG_I2C_IXP2000 is not set
612# CONFIG_I2C_NFORCE2 is not set 648# CONFIG_I2C_NFORCE2 is not set
613# CONFIG_I2C_PARPORT_LIGHT is not set 649# CONFIG_I2C_PARPORT_LIGHT is not set
614# CONFIG_I2C_PIIX4 is not set
615# CONFIG_I2C_PROSAVAGE is not set 650# CONFIG_I2C_PROSAVAGE is not set
616# CONFIG_I2C_SAVAGE4 is not set 651# CONFIG_I2C_SAVAGE4 is not set
617# CONFIG_SCx200_ACB is not set 652# CONFIG_SCx200_ACB is not set
618# CONFIG_I2C_SIS5595 is not set 653# CONFIG_I2C_SIS5595 is not set
619# CONFIG_I2C_SIS630 is not set 654# CONFIG_I2C_SIS630 is not set
620# CONFIG_I2C_SIS96X is not set 655# CONFIG_I2C_SIS96X is not set
656# CONFIG_I2C_STUB is not set
621# CONFIG_I2C_VIA is not set 657# CONFIG_I2C_VIA is not set
622# CONFIG_I2C_VIAPRO is not set 658# CONFIG_I2C_VIAPRO is not set
623# CONFIG_I2C_VOODOO3 is not set 659# CONFIG_I2C_VOODOO3 is not set
@@ -631,7 +667,9 @@ CONFIG_I2C_SENSOR=y
631# CONFIG_SENSORS_ADM1025 is not set 667# CONFIG_SENSORS_ADM1025 is not set
632# CONFIG_SENSORS_ADM1026 is not set 668# CONFIG_SENSORS_ADM1026 is not set
633# CONFIG_SENSORS_ADM1031 is not set 669# CONFIG_SENSORS_ADM1031 is not set
670# CONFIG_SENSORS_ADM9240 is not set
634# CONFIG_SENSORS_ASB100 is not set 671# CONFIG_SENSORS_ASB100 is not set
672# CONFIG_SENSORS_ATXP1 is not set
635# CONFIG_SENSORS_DS1621 is not set 673# CONFIG_SENSORS_DS1621 is not set
636# CONFIG_SENSORS_FSCHER is not set 674# CONFIG_SENSORS_FSCHER is not set
637# CONFIG_SENSORS_FSCPOS is not set 675# CONFIG_SENSORS_FSCPOS is not set
@@ -647,6 +685,7 @@ CONFIG_I2C_SENSOR=y
647# CONFIG_SENSORS_LM85 is not set 685# CONFIG_SENSORS_LM85 is not set
648# CONFIG_SENSORS_LM87 is not set 686# CONFIG_SENSORS_LM87 is not set
649# CONFIG_SENSORS_LM90 is not set 687# CONFIG_SENSORS_LM90 is not set
688# CONFIG_SENSORS_LM92 is not set
650# CONFIG_SENSORS_MAX1619 is not set 689# CONFIG_SENSORS_MAX1619 is not set
651# CONFIG_SENSORS_PC87360 is not set 690# CONFIG_SENSORS_PC87360 is not set
652# CONFIG_SENSORS_SMSC47B397 is not set 691# CONFIG_SENSORS_SMSC47B397 is not set
@@ -656,14 +695,19 @@ CONFIG_I2C_SENSOR=y
656# CONFIG_SENSORS_W83781D is not set 695# CONFIG_SENSORS_W83781D is not set
657# CONFIG_SENSORS_W83L785TS is not set 696# CONFIG_SENSORS_W83L785TS is not set
658# CONFIG_SENSORS_W83627HF is not set 697# CONFIG_SENSORS_W83627HF is not set
698# CONFIG_SENSORS_W83627EHF is not set
659 699
660# 700#
661# Other I2C Chip support 701# Other I2C Chip support
662# 702#
703# CONFIG_SENSORS_DS1337 is not set
704# CONFIG_SENSORS_DS1374 is not set
663CONFIG_SENSORS_EEPROM=y 705CONFIG_SENSORS_EEPROM=y
664# CONFIG_SENSORS_PCF8574 is not set 706# CONFIG_SENSORS_PCF8574 is not set
707# CONFIG_SENSORS_PCA9539 is not set
665# CONFIG_SENSORS_PCF8591 is not set 708# CONFIG_SENSORS_PCF8591 is not set
666# CONFIG_SENSORS_RTC8564 is not set 709# CONFIG_SENSORS_RTC8564 is not set
710# CONFIG_SENSORS_MAX6875 is not set
667# CONFIG_I2C_DEBUG_CORE is not set 711# CONFIG_I2C_DEBUG_CORE is not set
668# CONFIG_I2C_DEBUG_ALGO is not set 712# CONFIG_I2C_DEBUG_ALGO is not set
669# CONFIG_I2C_DEBUG_BUS is not set 713# CONFIG_I2C_DEBUG_BUS is not set
@@ -717,6 +761,7 @@ CONFIG_EXT2_FS=y
717CONFIG_EXT2_FS_XATTR=y 761CONFIG_EXT2_FS_XATTR=y
718CONFIG_EXT2_FS_POSIX_ACL=y 762CONFIG_EXT2_FS_POSIX_ACL=y
719# CONFIG_EXT2_FS_SECURITY is not set 763# CONFIG_EXT2_FS_SECURITY is not set
764# CONFIG_EXT2_FS_XIP is not set
720CONFIG_EXT3_FS=y 765CONFIG_EXT3_FS=y
721CONFIG_EXT3_FS_XATTR=y 766CONFIG_EXT3_FS_XATTR=y
722CONFIG_EXT3_FS_POSIX_ACL=y 767CONFIG_EXT3_FS_POSIX_ACL=y
@@ -757,7 +802,6 @@ CONFIG_DNOTIFY=y
757# 802#
758CONFIG_PROC_FS=y 803CONFIG_PROC_FS=y
759CONFIG_SYSFS=y 804CONFIG_SYSFS=y
760# CONFIG_DEVFS_FS is not set
761# CONFIG_DEVPTS_FS_XATTR is not set 805# CONFIG_DEVPTS_FS_XATTR is not set
762CONFIG_TMPFS=y 806CONFIG_TMPFS=y
763# CONFIG_TMPFS_XATTR is not set 807# CONFIG_TMPFS_XATTR is not set
@@ -795,12 +839,14 @@ CONFIG_JFFS2_RTIME=y
795# 839#
796CONFIG_NFS_FS=y 840CONFIG_NFS_FS=y
797CONFIG_NFS_V3=y 841CONFIG_NFS_V3=y
842# CONFIG_NFS_V3_ACL is not set
798# CONFIG_NFS_V4 is not set 843# CONFIG_NFS_V4 is not set
799# CONFIG_NFS_DIRECTIO is not set 844# CONFIG_NFS_DIRECTIO is not set
800# CONFIG_NFSD is not set 845# CONFIG_NFSD is not set
801CONFIG_ROOT_NFS=y 846CONFIG_ROOT_NFS=y
802CONFIG_LOCKD=y 847CONFIG_LOCKD=y
803CONFIG_LOCKD_V4=y 848CONFIG_LOCKD_V4=y
849CONFIG_NFS_COMMON=y
804CONFIG_SUNRPC=y 850CONFIG_SUNRPC=y
805# CONFIG_RPCSEC_GSS_KRB5 is not set 851# CONFIG_RPCSEC_GSS_KRB5 is not set
806# CONFIG_RPCSEC_GSS_SPKM3 is not set 852# CONFIG_RPCSEC_GSS_SPKM3 is not set
@@ -885,3 +931,4 @@ CONFIG_CRC32=y
885# CONFIG_LIBCRC32C is not set 931# CONFIG_LIBCRC32C is not set
886CONFIG_ZLIB_INFLATE=y 932CONFIG_ZLIB_INFLATE=y
887CONFIG_ZLIB_DEFLATE=y 933CONFIG_ZLIB_DEFLATE=y
934# CONFIG_TEXTSEARCH is not set
diff --git a/arch/arm/configs/ixdp2400_defconfig b/arch/arm/configs/ixdp2400_defconfig
index 4fd663ecbe39..3cfbe2ec29ca 100644
--- a/arch/arm/configs/ixdp2400_defconfig
+++ b/arch/arm/configs/ixdp2400_defconfig
@@ -1,14 +1,13 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.12-rc1-bk2 3# Linux kernel version: 2.6.12-git6
4# Sun Mar 27 21:13:38 2005 4# Sat Jun 25 00:58:38 2005
5# 5#
6CONFIG_ARM=y 6CONFIG_ARM=y
7CONFIG_MMU=y 7CONFIG_MMU=y
8CONFIG_UID16=y 8CONFIG_UID16=y
9CONFIG_RWSEM_GENERIC_SPINLOCK=y 9CONFIG_RWSEM_GENERIC_SPINLOCK=y
10CONFIG_GENERIC_CALIBRATE_DELAY=y 10CONFIG_GENERIC_CALIBRATE_DELAY=y
11CONFIG_GENERIC_IOMAP=y
12 11
13# 12#
14# Code maturity level options 13# Code maturity level options
@@ -16,6 +15,7 @@ CONFIG_GENERIC_IOMAP=y
16CONFIG_EXPERIMENTAL=y 15CONFIG_EXPERIMENTAL=y
17CONFIG_CLEAN_COMPILE=y 16CONFIG_CLEAN_COMPILE=y
18CONFIG_BROKEN_ON_SMP=y 17CONFIG_BROKEN_ON_SMP=y
18CONFIG_INIT_ENV_ARG_LIMIT=32
19 19
20# 20#
21# General setup 21# General setup
@@ -35,6 +35,8 @@ CONFIG_EMBEDDED=y
35CONFIG_KALLSYMS=y 35CONFIG_KALLSYMS=y
36# CONFIG_KALLSYMS_ALL is not set 36# CONFIG_KALLSYMS_ALL is not set
37# CONFIG_KALLSYMS_EXTRA_PASS is not set 37# CONFIG_KALLSYMS_EXTRA_PASS is not set
38CONFIG_PRINTK=y
39CONFIG_BUG=y
38CONFIG_BASE_FULL=y 40CONFIG_BASE_FULL=y
39CONFIG_FUTEX=y 41CONFIG_FUTEX=y
40CONFIG_EPOLL=y 42CONFIG_EPOLL=y
@@ -50,7 +52,13 @@ CONFIG_BASE_SMALL=0
50# 52#
51# Loadable module support 53# Loadable module support
52# 54#
53# CONFIG_MODULES is not set 55CONFIG_MODULES=y
56CONFIG_MODULE_UNLOAD=y
57# CONFIG_MODULE_FORCE_UNLOAD is not set
58CONFIG_OBSOLETE_MODPARM=y
59# CONFIG_MODVERSIONS is not set
60# CONFIG_MODULE_SRCVERSION_ALL is not set
61CONFIG_KMOD=y
54 62
55# 63#
56# System Type 64# System Type
@@ -76,6 +84,7 @@ CONFIG_ARCH_IXP2000=y
76# CONFIG_ARCH_VERSATILE is not set 84# CONFIG_ARCH_VERSATILE is not set
77# CONFIG_ARCH_IMX is not set 85# CONFIG_ARCH_IMX is not set
78# CONFIG_ARCH_H720X is not set 86# CONFIG_ARCH_H720X is not set
87# CONFIG_ARCH_AAEC2000 is not set
79CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y 88CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
80 89
81# 90#
@@ -91,6 +100,7 @@ CONFIG_ARCH_IXDP2400=y
91CONFIG_ARCH_IXDP2X00=y 100CONFIG_ARCH_IXDP2X00=y
92# CONFIG_ARCH_IXDP2401 is not set 101# CONFIG_ARCH_IXDP2401 is not set
93# CONFIG_ARCH_IXDP2801 is not set 102# CONFIG_ARCH_IXDP2801 is not set
103# CONFIG_IXP2000_SUPPORT_BROKEN_PCI_IO is not set
94 104
95# 105#
96# Processor Type 106# Processor Type
@@ -101,7 +111,6 @@ CONFIG_CPU_32v5=y
101CONFIG_CPU_ABRT_EV5T=y 111CONFIG_CPU_ABRT_EV5T=y
102CONFIG_CPU_CACHE_VIVT=y 112CONFIG_CPU_CACHE_VIVT=y
103CONFIG_CPU_TLB_V4WBI=y 113CONFIG_CPU_TLB_V4WBI=y
104CONFIG_CPU_MINICACHE=y
105 114
106# 115#
107# Processor Features 116# Processor Features
@@ -113,9 +122,11 @@ CONFIG_XSCALE_PMU=y
113# 122#
114# Bus support 123# Bus support
115# 124#
125CONFIG_ISA_DMA_API=y
116CONFIG_PCI=y 126CONFIG_PCI=y
117CONFIG_PCI_LEGACY_PROC=y 127CONFIG_PCI_LEGACY_PROC=y
118CONFIG_PCI_NAMES=y 128CONFIG_PCI_NAMES=y
129# CONFIG_PCI_DEBUG is not set
119 130
120# 131#
121# PCCARD (PCMCIA/CardBus) support 132# PCCARD (PCMCIA/CardBus) support
@@ -125,7 +136,15 @@ CONFIG_PCI_NAMES=y
125# 136#
126# Kernel Features 137# Kernel Features
127# 138#
139# CONFIG_SMP is not set
128# CONFIG_PREEMPT is not set 140# CONFIG_PREEMPT is not set
141# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
142CONFIG_SELECT_MEMORY_MODEL=y
143CONFIG_FLATMEM_MANUAL=y
144# CONFIG_DISCONTIGMEM_MANUAL is not set
145# CONFIG_SPARSEMEM_MANUAL is not set
146CONFIG_FLATMEM=y
147CONFIG_FLAT_NODE_MEM_MAP=y
129CONFIG_ALIGNMENT_TRAP=y 148CONFIG_ALIGNMENT_TRAP=y
130 149
131# 150#
@@ -264,7 +283,6 @@ CONFIG_MTD_IXP2000=y
264# 283#
265# Block devices 284# Block devices
266# 285#
267# CONFIG_BLK_DEV_FD is not set
268# CONFIG_BLK_CPQ_DA is not set 286# CONFIG_BLK_CPQ_DA is not set
269# CONFIG_BLK_CPQ_CISS_DA is not set 287# CONFIG_BLK_CPQ_CISS_DA is not set
270# CONFIG_BLK_DEV_DAC960 is not set 288# CONFIG_BLK_DEV_DAC960 is not set
@@ -303,6 +321,7 @@ CONFIG_IOSCHED_CFQ=y
303# 321#
304# Fusion MPT device support 322# Fusion MPT device support
305# 323#
324# CONFIG_FUSION is not set
306 325
307# 326#
308# IEEE 1394 (FireWire) support 327# IEEE 1394 (FireWire) support
@@ -324,10 +343,11 @@ CONFIG_NET=y
324# 343#
325CONFIG_PACKET=y 344CONFIG_PACKET=y
326CONFIG_PACKET_MMAP=y 345CONFIG_PACKET_MMAP=y
327# CONFIG_NETLINK_DEV is not set
328CONFIG_UNIX=y 346CONFIG_UNIX=y
329# CONFIG_NET_KEY is not set 347# CONFIG_NET_KEY is not set
330CONFIG_INET=y 348CONFIG_INET=y
349CONFIG_IP_FIB_HASH=y
350# CONFIG_IP_FIB_TRIE is not set
331# CONFIG_IP_MULTICAST is not set 351# CONFIG_IP_MULTICAST is not set
332# CONFIG_IP_ADVANCED_ROUTER is not set 352# CONFIG_IP_ADVANCED_ROUTER is not set
333CONFIG_IP_PNP=y 353CONFIG_IP_PNP=y
@@ -344,6 +364,17 @@ CONFIG_SYN_COOKIES=y
344# CONFIG_INET_TUNNEL is not set 364# CONFIG_INET_TUNNEL is not set
345# CONFIG_IP_TCPDIAG is not set 365# CONFIG_IP_TCPDIAG is not set
346# CONFIG_IP_TCPDIAG_IPV6 is not set 366# CONFIG_IP_TCPDIAG_IPV6 is not set
367
368#
369# TCP congestion control
370#
371CONFIG_TCP_CONG_BIC=y
372CONFIG_TCP_CONG_WESTWOOD=m
373CONFIG_TCP_CONG_HTCP=m
374# CONFIG_TCP_CONG_HSTCP is not set
375# CONFIG_TCP_CONG_HYBLA is not set
376# CONFIG_TCP_CONG_VEGAS is not set
377# CONFIG_TCP_CONG_SCALABLE is not set
347# CONFIG_IPV6 is not set 378# CONFIG_IPV6 is not set
348# CONFIG_NETFILTER is not set 379# CONFIG_NETFILTER is not set
349 380
@@ -399,6 +430,7 @@ CONFIG_MII=y
399# CONFIG_SUNGEM is not set 430# CONFIG_SUNGEM is not set
400# CONFIG_NET_VENDOR_3COM is not set 431# CONFIG_NET_VENDOR_3COM is not set
401# CONFIG_SMC91X is not set 432# CONFIG_SMC91X is not set
433# CONFIG_DM9000 is not set
402 434
403# 435#
404# Tulip family network device support 436# Tulip family network device support
@@ -435,9 +467,11 @@ CONFIG_EEPRO100=y
435# CONFIG_HAMACHI is not set 467# CONFIG_HAMACHI is not set
436# CONFIG_YELLOWFIN is not set 468# CONFIG_YELLOWFIN is not set
437# CONFIG_R8169 is not set 469# CONFIG_R8169 is not set
470# CONFIG_SKGE is not set
438# CONFIG_SK98LIN is not set 471# CONFIG_SK98LIN is not set
439# CONFIG_VIA_VELOCITY is not set 472# CONFIG_VIA_VELOCITY is not set
440# CONFIG_TIGON3 is not set 473# CONFIG_TIGON3 is not set
474# CONFIG_BNX2 is not set
441 475
442# 476#
443# Ethernet (10000 Mbit) 477# Ethernet (10000 Mbit)
@@ -459,6 +493,7 @@ CONFIG_EEPRO100=y
459# Wan interfaces 493# Wan interfaces
460# 494#
461CONFIG_WAN=y 495CONFIG_WAN=y
496# CONFIG_DSCC4 is not set
462# CONFIG_LANMEDIA is not set 497# CONFIG_LANMEDIA is not set
463# CONFIG_SYNCLINK_SYNCPPP is not set 498# CONFIG_SYNCLINK_SYNCPPP is not set
464CONFIG_HDLC=y 499CONFIG_HDLC=y
@@ -521,7 +556,6 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
521# 556#
522# CONFIG_SERIO is not set 557# CONFIG_SERIO is not set
523# CONFIG_GAMEPORT is not set 558# CONFIG_GAMEPORT is not set
524CONFIG_SOUND_GAMEPORT=y
525 559
526# 560#
527# Character devices 561# Character devices
@@ -542,6 +576,7 @@ CONFIG_SERIAL_8250_NR_UARTS=2
542# 576#
543CONFIG_SERIAL_CORE=y 577CONFIG_SERIAL_CORE=y
544CONFIG_SERIAL_CORE_CONSOLE=y 578CONFIG_SERIAL_CORE_CONSOLE=y
579# CONFIG_SERIAL_JSM is not set
545CONFIG_UNIX98_PTYS=y 580CONFIG_UNIX98_PTYS=y
546CONFIG_LEGACY_PTYS=y 581CONFIG_LEGACY_PTYS=y
547CONFIG_LEGACY_PTY_COUNT=256 582CONFIG_LEGACY_PTY_COUNT=256
@@ -608,17 +643,18 @@ CONFIG_I2C_ALGOBIT=y
608# CONFIG_I2C_AMD8111 is not set 643# CONFIG_I2C_AMD8111 is not set
609# CONFIG_I2C_I801 is not set 644# CONFIG_I2C_I801 is not set
610# CONFIG_I2C_I810 is not set 645# CONFIG_I2C_I810 is not set
646# CONFIG_I2C_PIIX4 is not set
611# CONFIG_I2C_ISA is not set 647# CONFIG_I2C_ISA is not set
612# CONFIG_I2C_IXP2000 is not set 648# CONFIG_I2C_IXP2000 is not set
613# CONFIG_I2C_NFORCE2 is not set 649# CONFIG_I2C_NFORCE2 is not set
614# CONFIG_I2C_PARPORT_LIGHT is not set 650# CONFIG_I2C_PARPORT_LIGHT is not set
615# CONFIG_I2C_PIIX4 is not set
616# CONFIG_I2C_PROSAVAGE is not set 651# CONFIG_I2C_PROSAVAGE is not set
617# CONFIG_I2C_SAVAGE4 is not set 652# CONFIG_I2C_SAVAGE4 is not set
618# CONFIG_SCx200_ACB is not set 653# CONFIG_SCx200_ACB is not set
619# CONFIG_I2C_SIS5595 is not set 654# CONFIG_I2C_SIS5595 is not set
620# CONFIG_I2C_SIS630 is not set 655# CONFIG_I2C_SIS630 is not set
621# CONFIG_I2C_SIS96X is not set 656# CONFIG_I2C_SIS96X is not set
657# CONFIG_I2C_STUB is not set
622# CONFIG_I2C_VIA is not set 658# CONFIG_I2C_VIA is not set
623# CONFIG_I2C_VIAPRO is not set 659# CONFIG_I2C_VIAPRO is not set
624# CONFIG_I2C_VOODOO3 is not set 660# CONFIG_I2C_VOODOO3 is not set
@@ -632,7 +668,9 @@ CONFIG_I2C_SENSOR=y
632# CONFIG_SENSORS_ADM1025 is not set 668# CONFIG_SENSORS_ADM1025 is not set
633# CONFIG_SENSORS_ADM1026 is not set 669# CONFIG_SENSORS_ADM1026 is not set
634# CONFIG_SENSORS_ADM1031 is not set 670# CONFIG_SENSORS_ADM1031 is not set
671# CONFIG_SENSORS_ADM9240 is not set
635# CONFIG_SENSORS_ASB100 is not set 672# CONFIG_SENSORS_ASB100 is not set
673# CONFIG_SENSORS_ATXP1 is not set
636# CONFIG_SENSORS_DS1621 is not set 674# CONFIG_SENSORS_DS1621 is not set
637# CONFIG_SENSORS_FSCHER is not set 675# CONFIG_SENSORS_FSCHER is not set
638# CONFIG_SENSORS_FSCPOS is not set 676# CONFIG_SENSORS_FSCPOS is not set
@@ -648,6 +686,7 @@ CONFIG_I2C_SENSOR=y
648# CONFIG_SENSORS_LM85 is not set 686# CONFIG_SENSORS_LM85 is not set
649# CONFIG_SENSORS_LM87 is not set 687# CONFIG_SENSORS_LM87 is not set
650# CONFIG_SENSORS_LM90 is not set 688# CONFIG_SENSORS_LM90 is not set
689# CONFIG_SENSORS_LM92 is not set
651# CONFIG_SENSORS_MAX1619 is not set 690# CONFIG_SENSORS_MAX1619 is not set
652# CONFIG_SENSORS_PC87360 is not set 691# CONFIG_SENSORS_PC87360 is not set
653# CONFIG_SENSORS_SMSC47B397 is not set 692# CONFIG_SENSORS_SMSC47B397 is not set
@@ -657,14 +696,19 @@ CONFIG_I2C_SENSOR=y
657# CONFIG_SENSORS_W83781D is not set 696# CONFIG_SENSORS_W83781D is not set
658# CONFIG_SENSORS_W83L785TS is not set 697# CONFIG_SENSORS_W83L785TS is not set
659# CONFIG_SENSORS_W83627HF is not set 698# CONFIG_SENSORS_W83627HF is not set
699# CONFIG_SENSORS_W83627EHF is not set
660 700
661# 701#
662# Other I2C Chip support 702# Other I2C Chip support
663# 703#
704# CONFIG_SENSORS_DS1337 is not set
705# CONFIG_SENSORS_DS1374 is not set
664CONFIG_SENSORS_EEPROM=y 706CONFIG_SENSORS_EEPROM=y
665# CONFIG_SENSORS_PCF8574 is not set 707# CONFIG_SENSORS_PCF8574 is not set
708# CONFIG_SENSORS_PCA9539 is not set
666# CONFIG_SENSORS_PCF8591 is not set 709# CONFIG_SENSORS_PCF8591 is not set
667# CONFIG_SENSORS_RTC8564 is not set 710# CONFIG_SENSORS_RTC8564 is not set
711# CONFIG_SENSORS_MAX6875 is not set
668# CONFIG_I2C_DEBUG_CORE is not set 712# CONFIG_I2C_DEBUG_CORE is not set
669# CONFIG_I2C_DEBUG_ALGO is not set 713# CONFIG_I2C_DEBUG_ALGO is not set
670# CONFIG_I2C_DEBUG_BUS is not set 714# CONFIG_I2C_DEBUG_BUS is not set
@@ -718,6 +762,7 @@ CONFIG_EXT2_FS=y
718CONFIG_EXT2_FS_XATTR=y 762CONFIG_EXT2_FS_XATTR=y
719CONFIG_EXT2_FS_POSIX_ACL=y 763CONFIG_EXT2_FS_POSIX_ACL=y
720# CONFIG_EXT2_FS_SECURITY is not set 764# CONFIG_EXT2_FS_SECURITY is not set
765# CONFIG_EXT2_FS_XIP is not set
721CONFIG_EXT3_FS=y 766CONFIG_EXT3_FS=y
722CONFIG_EXT3_FS_XATTR=y 767CONFIG_EXT3_FS_XATTR=y
723CONFIG_EXT3_FS_POSIX_ACL=y 768CONFIG_EXT3_FS_POSIX_ACL=y
@@ -758,7 +803,6 @@ CONFIG_DNOTIFY=y
758# 803#
759CONFIG_PROC_FS=y 804CONFIG_PROC_FS=y
760CONFIG_SYSFS=y 805CONFIG_SYSFS=y
761# CONFIG_DEVFS_FS is not set
762# CONFIG_DEVPTS_FS_XATTR is not set 806# CONFIG_DEVPTS_FS_XATTR is not set
763CONFIG_TMPFS=y 807CONFIG_TMPFS=y
764# CONFIG_TMPFS_XATTR is not set 808# CONFIG_TMPFS_XATTR is not set
@@ -796,12 +840,14 @@ CONFIG_JFFS2_RTIME=y
796# 840#
797CONFIG_NFS_FS=y 841CONFIG_NFS_FS=y
798CONFIG_NFS_V3=y 842CONFIG_NFS_V3=y
843# CONFIG_NFS_V3_ACL is not set
799# CONFIG_NFS_V4 is not set 844# CONFIG_NFS_V4 is not set
800# CONFIG_NFS_DIRECTIO is not set 845# CONFIG_NFS_DIRECTIO is not set
801# CONFIG_NFSD is not set 846# CONFIG_NFSD is not set
802CONFIG_ROOT_NFS=y 847CONFIG_ROOT_NFS=y
803CONFIG_LOCKD=y 848CONFIG_LOCKD=y
804CONFIG_LOCKD_V4=y 849CONFIG_LOCKD_V4=y
850CONFIG_NFS_COMMON=y
805CONFIG_SUNRPC=y 851CONFIG_SUNRPC=y
806# CONFIG_RPCSEC_GSS_KRB5 is not set 852# CONFIG_RPCSEC_GSS_KRB5 is not set
807# CONFIG_RPCSEC_GSS_SPKM3 is not set 853# CONFIG_RPCSEC_GSS_SPKM3 is not set
@@ -886,3 +932,4 @@ CONFIG_CRC32=y
886# CONFIG_LIBCRC32C is not set 932# CONFIG_LIBCRC32C is not set
887CONFIG_ZLIB_INFLATE=y 933CONFIG_ZLIB_INFLATE=y
888CONFIG_ZLIB_DEFLATE=y 934CONFIG_ZLIB_DEFLATE=y
935# CONFIG_TEXTSEARCH is not set
diff --git a/arch/arm/configs/ixdp2401_defconfig b/arch/arm/configs/ixdp2401_defconfig
index 6f51c98084a3..5c87e8e6969b 100644
--- a/arch/arm/configs/ixdp2401_defconfig
+++ b/arch/arm/configs/ixdp2401_defconfig
@@ -1,14 +1,13 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.12-rc1-bk2 3# Linux kernel version: 2.6.12-git6
4# Sun Mar 27 21:53:55 2005 4# Sat Jun 25 00:59:35 2005
5# 5#
6CONFIG_ARM=y 6CONFIG_ARM=y
7CONFIG_MMU=y 7CONFIG_MMU=y
8CONFIG_UID16=y 8CONFIG_UID16=y
9CONFIG_RWSEM_GENERIC_SPINLOCK=y 9CONFIG_RWSEM_GENERIC_SPINLOCK=y
10CONFIG_GENERIC_CALIBRATE_DELAY=y 10CONFIG_GENERIC_CALIBRATE_DELAY=y
11CONFIG_GENERIC_IOMAP=y
12 11
13# 12#
14# Code maturity level options 13# Code maturity level options
@@ -16,6 +15,7 @@ CONFIG_GENERIC_IOMAP=y
16CONFIG_EXPERIMENTAL=y 15CONFIG_EXPERIMENTAL=y
17CONFIG_CLEAN_COMPILE=y 16CONFIG_CLEAN_COMPILE=y
18CONFIG_BROKEN_ON_SMP=y 17CONFIG_BROKEN_ON_SMP=y
18CONFIG_INIT_ENV_ARG_LIMIT=32
19 19
20# 20#
21# General setup 21# General setup
@@ -35,6 +35,8 @@ CONFIG_EMBEDDED=y
35CONFIG_KALLSYMS=y 35CONFIG_KALLSYMS=y
36# CONFIG_KALLSYMS_ALL is not set 36# CONFIG_KALLSYMS_ALL is not set
37# CONFIG_KALLSYMS_EXTRA_PASS is not set 37# CONFIG_KALLSYMS_EXTRA_PASS is not set
38CONFIG_PRINTK=y
39CONFIG_BUG=y
38CONFIG_BASE_FULL=y 40CONFIG_BASE_FULL=y
39CONFIG_FUTEX=y 41CONFIG_FUTEX=y
40CONFIG_EPOLL=y 42CONFIG_EPOLL=y
@@ -50,7 +52,13 @@ CONFIG_BASE_SMALL=0
50# 52#
51# Loadable module support 53# Loadable module support
52# 54#
53# CONFIG_MODULES is not set 55CONFIG_MODULES=y
56CONFIG_MODULE_UNLOAD=y
57# CONFIG_MODULE_FORCE_UNLOAD is not set
58CONFIG_OBSOLETE_MODPARM=y
59# CONFIG_MODVERSIONS is not set
60# CONFIG_MODULE_SRCVERSION_ALL is not set
61CONFIG_KMOD=y
54 62
55# 63#
56# System Type 64# System Type
@@ -76,6 +84,7 @@ CONFIG_ARCH_IXP2000=y
76# CONFIG_ARCH_VERSATILE is not set 84# CONFIG_ARCH_VERSATILE is not set
77# CONFIG_ARCH_IMX is not set 85# CONFIG_ARCH_IMX is not set
78# CONFIG_ARCH_H720X is not set 86# CONFIG_ARCH_H720X is not set
87# CONFIG_ARCH_AAEC2000 is not set
79CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y 88CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
80 89
81# 90#
@@ -91,6 +100,7 @@ CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
91CONFIG_ARCH_IXDP2401=y 100CONFIG_ARCH_IXDP2401=y
92# CONFIG_ARCH_IXDP2801 is not set 101# CONFIG_ARCH_IXDP2801 is not set
93CONFIG_ARCH_IXDP2X01=y 102CONFIG_ARCH_IXDP2X01=y
103# CONFIG_IXP2000_SUPPORT_BROKEN_PCI_IO is not set
94 104
95# 105#
96# Processor Type 106# Processor Type
@@ -101,7 +111,6 @@ CONFIG_CPU_32v5=y
101CONFIG_CPU_ABRT_EV5T=y 111CONFIG_CPU_ABRT_EV5T=y
102CONFIG_CPU_CACHE_VIVT=y 112CONFIG_CPU_CACHE_VIVT=y
103CONFIG_CPU_TLB_V4WBI=y 113CONFIG_CPU_TLB_V4WBI=y
104CONFIG_CPU_MINICACHE=y
105 114
106# 115#
107# Processor Features 116# Processor Features
@@ -113,9 +122,11 @@ CONFIG_XSCALE_PMU=y
113# 122#
114# Bus support 123# Bus support
115# 124#
125CONFIG_ISA_DMA_API=y
116CONFIG_PCI=y 126CONFIG_PCI=y
117CONFIG_PCI_LEGACY_PROC=y 127CONFIG_PCI_LEGACY_PROC=y
118CONFIG_PCI_NAMES=y 128CONFIG_PCI_NAMES=y
129# CONFIG_PCI_DEBUG is not set
119 130
120# 131#
121# PCCARD (PCMCIA/CardBus) support 132# PCCARD (PCMCIA/CardBus) support
@@ -125,7 +136,15 @@ CONFIG_PCI_NAMES=y
125# 136#
126# Kernel Features 137# Kernel Features
127# 138#
139# CONFIG_SMP is not set
128# CONFIG_PREEMPT is not set 140# CONFIG_PREEMPT is not set
141# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
142CONFIG_SELECT_MEMORY_MODEL=y
143CONFIG_FLATMEM_MANUAL=y
144# CONFIG_DISCONTIGMEM_MANUAL is not set
145# CONFIG_SPARSEMEM_MANUAL is not set
146CONFIG_FLATMEM=y
147CONFIG_FLAT_NODE_MEM_MAP=y
129CONFIG_ALIGNMENT_TRAP=y 148CONFIG_ALIGNMENT_TRAP=y
130 149
131# 150#
@@ -264,7 +283,6 @@ CONFIG_MTD_IXP2000=y
264# 283#
265# Block devices 284# Block devices
266# 285#
267# CONFIG_BLK_DEV_FD is not set
268# CONFIG_BLK_CPQ_DA is not set 286# CONFIG_BLK_CPQ_DA is not set
269# CONFIG_BLK_CPQ_CISS_DA is not set 287# CONFIG_BLK_CPQ_CISS_DA is not set
270# CONFIG_BLK_DEV_DAC960 is not set 288# CONFIG_BLK_DEV_DAC960 is not set
@@ -303,6 +321,7 @@ CONFIG_IOSCHED_CFQ=y
303# 321#
304# Fusion MPT device support 322# Fusion MPT device support
305# 323#
324# CONFIG_FUSION is not set
306 325
307# 326#
308# IEEE 1394 (FireWire) support 327# IEEE 1394 (FireWire) support
@@ -324,10 +343,11 @@ CONFIG_NET=y
324# 343#
325CONFIG_PACKET=y 344CONFIG_PACKET=y
326CONFIG_PACKET_MMAP=y 345CONFIG_PACKET_MMAP=y
327# CONFIG_NETLINK_DEV is not set
328CONFIG_UNIX=y 346CONFIG_UNIX=y
329# CONFIG_NET_KEY is not set 347# CONFIG_NET_KEY is not set
330CONFIG_INET=y 348CONFIG_INET=y
349CONFIG_IP_FIB_HASH=y
350# CONFIG_IP_FIB_TRIE is not set
331# CONFIG_IP_MULTICAST is not set 351# CONFIG_IP_MULTICAST is not set
332# CONFIG_IP_ADVANCED_ROUTER is not set 352# CONFIG_IP_ADVANCED_ROUTER is not set
333CONFIG_IP_PNP=y 353CONFIG_IP_PNP=y
@@ -344,6 +364,17 @@ CONFIG_SYN_COOKIES=y
344# CONFIG_INET_TUNNEL is not set 364# CONFIG_INET_TUNNEL is not set
345CONFIG_IP_TCPDIAG=y 365CONFIG_IP_TCPDIAG=y
346# CONFIG_IP_TCPDIAG_IPV6 is not set 366# CONFIG_IP_TCPDIAG_IPV6 is not set
367
368#
369# TCP congestion control
370#
371CONFIG_TCP_CONG_BIC=y
372CONFIG_TCP_CONG_WESTWOOD=m
373CONFIG_TCP_CONG_HTCP=m
374# CONFIG_TCP_CONG_HSTCP is not set
375# CONFIG_TCP_CONG_HYBLA is not set
376# CONFIG_TCP_CONG_VEGAS is not set
377# CONFIG_TCP_CONG_SCALABLE is not set
347# CONFIG_IPV6 is not set 378# CONFIG_IPV6 is not set
348# CONFIG_NETFILTER is not set 379# CONFIG_NETFILTER is not set
349 380
@@ -399,6 +430,7 @@ CONFIG_MII=y
399# CONFIG_SUNGEM is not set 430# CONFIG_SUNGEM is not set
400# CONFIG_NET_VENDOR_3COM is not set 431# CONFIG_NET_VENDOR_3COM is not set
401# CONFIG_SMC91X is not set 432# CONFIG_SMC91X is not set
433# CONFIG_DM9000 is not set
402 434
403# 435#
404# Tulip family network device support 436# Tulip family network device support
@@ -436,9 +468,11 @@ CONFIG_EEPRO100=y
436# CONFIG_HAMACHI is not set 468# CONFIG_HAMACHI is not set
437# CONFIG_YELLOWFIN is not set 469# CONFIG_YELLOWFIN is not set
438# CONFIG_R8169 is not set 470# CONFIG_R8169 is not set
471# CONFIG_SKGE is not set
439# CONFIG_SK98LIN is not set 472# CONFIG_SK98LIN is not set
440# CONFIG_VIA_VELOCITY is not set 473# CONFIG_VIA_VELOCITY is not set
441# CONFIG_TIGON3 is not set 474# CONFIG_TIGON3 is not set
475# CONFIG_BNX2 is not set
442 476
443# 477#
444# Ethernet (10000 Mbit) 478# Ethernet (10000 Mbit)
@@ -460,6 +494,7 @@ CONFIG_EEPRO100=y
460# Wan interfaces 494# Wan interfaces
461# 495#
462CONFIG_WAN=y 496CONFIG_WAN=y
497# CONFIG_DSCC4 is not set
463# CONFIG_LANMEDIA is not set 498# CONFIG_LANMEDIA is not set
464# CONFIG_SYNCLINK_SYNCPPP is not set 499# CONFIG_SYNCLINK_SYNCPPP is not set
465CONFIG_HDLC=y 500CONFIG_HDLC=y
@@ -522,7 +557,6 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
522# 557#
523# CONFIG_SERIO is not set 558# CONFIG_SERIO is not set
524# CONFIG_GAMEPORT is not set 559# CONFIG_GAMEPORT is not set
525CONFIG_SOUND_GAMEPORT=y
526 560
527# 561#
528# Character devices 562# Character devices
@@ -543,6 +577,7 @@ CONFIG_SERIAL_8250_NR_UARTS=2
543# 577#
544CONFIG_SERIAL_CORE=y 578CONFIG_SERIAL_CORE=y
545CONFIG_SERIAL_CORE_CONSOLE=y 579CONFIG_SERIAL_CORE_CONSOLE=y
580# CONFIG_SERIAL_JSM is not set
546CONFIG_UNIX98_PTYS=y 581CONFIG_UNIX98_PTYS=y
547CONFIG_LEGACY_PTYS=y 582CONFIG_LEGACY_PTYS=y
548CONFIG_LEGACY_PTY_COUNT=256 583CONFIG_LEGACY_PTY_COUNT=256
@@ -609,17 +644,18 @@ CONFIG_I2C_ALGOBIT=y
609# CONFIG_I2C_AMD8111 is not set 644# CONFIG_I2C_AMD8111 is not set
610# CONFIG_I2C_I801 is not set 645# CONFIG_I2C_I801 is not set
611# CONFIG_I2C_I810 is not set 646# CONFIG_I2C_I810 is not set
647# CONFIG_I2C_PIIX4 is not set
612# CONFIG_I2C_ISA is not set 648# CONFIG_I2C_ISA is not set
613# CONFIG_I2C_IXP2000 is not set 649# CONFIG_I2C_IXP2000 is not set
614# CONFIG_I2C_NFORCE2 is not set 650# CONFIG_I2C_NFORCE2 is not set
615# CONFIG_I2C_PARPORT_LIGHT is not set 651# CONFIG_I2C_PARPORT_LIGHT is not set
616# CONFIG_I2C_PIIX4 is not set
617# CONFIG_I2C_PROSAVAGE is not set 652# CONFIG_I2C_PROSAVAGE is not set
618# CONFIG_I2C_SAVAGE4 is not set 653# CONFIG_I2C_SAVAGE4 is not set
619# CONFIG_SCx200_ACB is not set 654# CONFIG_SCx200_ACB is not set
620# CONFIG_I2C_SIS5595 is not set 655# CONFIG_I2C_SIS5595 is not set
621# CONFIG_I2C_SIS630 is not set 656# CONFIG_I2C_SIS630 is not set
622# CONFIG_I2C_SIS96X is not set 657# CONFIG_I2C_SIS96X is not set
658# CONFIG_I2C_STUB is not set
623# CONFIG_I2C_VIA is not set 659# CONFIG_I2C_VIA is not set
624# CONFIG_I2C_VIAPRO is not set 660# CONFIG_I2C_VIAPRO is not set
625# CONFIG_I2C_VOODOO3 is not set 661# CONFIG_I2C_VOODOO3 is not set
@@ -633,7 +669,9 @@ CONFIG_I2C_SENSOR=y
633# CONFIG_SENSORS_ADM1025 is not set 669# CONFIG_SENSORS_ADM1025 is not set
634# CONFIG_SENSORS_ADM1026 is not set 670# CONFIG_SENSORS_ADM1026 is not set
635# CONFIG_SENSORS_ADM1031 is not set 671# CONFIG_SENSORS_ADM1031 is not set
672# CONFIG_SENSORS_ADM9240 is not set
636# CONFIG_SENSORS_ASB100 is not set 673# CONFIG_SENSORS_ASB100 is not set
674# CONFIG_SENSORS_ATXP1 is not set
637# CONFIG_SENSORS_DS1621 is not set 675# CONFIG_SENSORS_DS1621 is not set
638# CONFIG_SENSORS_FSCHER is not set 676# CONFIG_SENSORS_FSCHER is not set
639# CONFIG_SENSORS_FSCPOS is not set 677# CONFIG_SENSORS_FSCPOS is not set
@@ -649,6 +687,7 @@ CONFIG_I2C_SENSOR=y
649# CONFIG_SENSORS_LM85 is not set 687# CONFIG_SENSORS_LM85 is not set
650# CONFIG_SENSORS_LM87 is not set 688# CONFIG_SENSORS_LM87 is not set
651# CONFIG_SENSORS_LM90 is not set 689# CONFIG_SENSORS_LM90 is not set
690# CONFIG_SENSORS_LM92 is not set
652# CONFIG_SENSORS_MAX1619 is not set 691# CONFIG_SENSORS_MAX1619 is not set
653# CONFIG_SENSORS_PC87360 is not set 692# CONFIG_SENSORS_PC87360 is not set
654# CONFIG_SENSORS_SMSC47B397 is not set 693# CONFIG_SENSORS_SMSC47B397 is not set
@@ -658,14 +697,19 @@ CONFIG_I2C_SENSOR=y
658# CONFIG_SENSORS_W83781D is not set 697# CONFIG_SENSORS_W83781D is not set
659# CONFIG_SENSORS_W83L785TS is not set 698# CONFIG_SENSORS_W83L785TS is not set
660# CONFIG_SENSORS_W83627HF is not set 699# CONFIG_SENSORS_W83627HF is not set
700# CONFIG_SENSORS_W83627EHF is not set
661 701
662# 702#
663# Other I2C Chip support 703# Other I2C Chip support
664# 704#
705# CONFIG_SENSORS_DS1337 is not set
706# CONFIG_SENSORS_DS1374 is not set
665CONFIG_SENSORS_EEPROM=y 707CONFIG_SENSORS_EEPROM=y
666# CONFIG_SENSORS_PCF8574 is not set 708# CONFIG_SENSORS_PCF8574 is not set
709# CONFIG_SENSORS_PCA9539 is not set
667# CONFIG_SENSORS_PCF8591 is not set 710# CONFIG_SENSORS_PCF8591 is not set
668# CONFIG_SENSORS_RTC8564 is not set 711# CONFIG_SENSORS_RTC8564 is not set
712# CONFIG_SENSORS_MAX6875 is not set
669# CONFIG_I2C_DEBUG_CORE is not set 713# CONFIG_I2C_DEBUG_CORE is not set
670# CONFIG_I2C_DEBUG_ALGO is not set 714# CONFIG_I2C_DEBUG_ALGO is not set
671# CONFIG_I2C_DEBUG_BUS is not set 715# CONFIG_I2C_DEBUG_BUS is not set
@@ -719,6 +763,7 @@ CONFIG_EXT2_FS=y
719CONFIG_EXT2_FS_XATTR=y 763CONFIG_EXT2_FS_XATTR=y
720CONFIG_EXT2_FS_POSIX_ACL=y 764CONFIG_EXT2_FS_POSIX_ACL=y
721# CONFIG_EXT2_FS_SECURITY is not set 765# CONFIG_EXT2_FS_SECURITY is not set
766# CONFIG_EXT2_FS_XIP is not set
722CONFIG_EXT3_FS=y 767CONFIG_EXT3_FS=y
723CONFIG_EXT3_FS_XATTR=y 768CONFIG_EXT3_FS_XATTR=y
724CONFIG_EXT3_FS_POSIX_ACL=y 769CONFIG_EXT3_FS_POSIX_ACL=y
@@ -759,7 +804,6 @@ CONFIG_DNOTIFY=y
759# 804#
760CONFIG_PROC_FS=y 805CONFIG_PROC_FS=y
761CONFIG_SYSFS=y 806CONFIG_SYSFS=y
762# CONFIG_DEVFS_FS is not set
763# CONFIG_DEVPTS_FS_XATTR is not set 807# CONFIG_DEVPTS_FS_XATTR is not set
764CONFIG_TMPFS=y 808CONFIG_TMPFS=y
765# CONFIG_TMPFS_XATTR is not set 809# CONFIG_TMPFS_XATTR is not set
@@ -797,12 +841,14 @@ CONFIG_JFFS2_RTIME=y
797# 841#
798CONFIG_NFS_FS=y 842CONFIG_NFS_FS=y
799CONFIG_NFS_V3=y 843CONFIG_NFS_V3=y
844# CONFIG_NFS_V3_ACL is not set
800# CONFIG_NFS_V4 is not set 845# CONFIG_NFS_V4 is not set
801# CONFIG_NFS_DIRECTIO is not set 846# CONFIG_NFS_DIRECTIO is not set
802# CONFIG_NFSD is not set 847# CONFIG_NFSD is not set
803CONFIG_ROOT_NFS=y 848CONFIG_ROOT_NFS=y
804CONFIG_LOCKD=y 849CONFIG_LOCKD=y
805CONFIG_LOCKD_V4=y 850CONFIG_LOCKD_V4=y
851CONFIG_NFS_COMMON=y
806CONFIG_SUNRPC=y 852CONFIG_SUNRPC=y
807# CONFIG_RPCSEC_GSS_KRB5 is not set 853# CONFIG_RPCSEC_GSS_KRB5 is not set
808# CONFIG_RPCSEC_GSS_SPKM3 is not set 854# CONFIG_RPCSEC_GSS_SPKM3 is not set
@@ -887,3 +933,4 @@ CONFIG_CRC32=y
887# CONFIG_LIBCRC32C is not set 933# CONFIG_LIBCRC32C is not set
888CONFIG_ZLIB_INFLATE=y 934CONFIG_ZLIB_INFLATE=y
889CONFIG_ZLIB_DEFLATE=y 935CONFIG_ZLIB_DEFLATE=y
936# CONFIG_TEXTSEARCH is not set
diff --git a/arch/arm/configs/ixdp2800_defconfig b/arch/arm/configs/ixdp2800_defconfig
index 7be3521f91fc..3cb561a551cb 100644
--- a/arch/arm/configs/ixdp2800_defconfig
+++ b/arch/arm/configs/ixdp2800_defconfig
@@ -1,14 +1,13 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.12-rc1-bk2 3# Linux kernel version: 2.6.12-git6
4# Sun Mar 27 22:15:23 2005 4# Sat Jun 25 01:00:27 2005
5# 5#
6CONFIG_ARM=y 6CONFIG_ARM=y
7CONFIG_MMU=y 7CONFIG_MMU=y
8CONFIG_UID16=y 8CONFIG_UID16=y
9CONFIG_RWSEM_GENERIC_SPINLOCK=y 9CONFIG_RWSEM_GENERIC_SPINLOCK=y
10CONFIG_GENERIC_CALIBRATE_DELAY=y 10CONFIG_GENERIC_CALIBRATE_DELAY=y
11CONFIG_GENERIC_IOMAP=y
12 11
13# 12#
14# Code maturity level options 13# Code maturity level options
@@ -16,6 +15,7 @@ CONFIG_GENERIC_IOMAP=y
16CONFIG_EXPERIMENTAL=y 15CONFIG_EXPERIMENTAL=y
17CONFIG_CLEAN_COMPILE=y 16CONFIG_CLEAN_COMPILE=y
18CONFIG_BROKEN_ON_SMP=y 17CONFIG_BROKEN_ON_SMP=y
18CONFIG_INIT_ENV_ARG_LIMIT=32
19 19
20# 20#
21# General setup 21# General setup
@@ -35,6 +35,8 @@ CONFIG_EMBEDDED=y
35CONFIG_KALLSYMS=y 35CONFIG_KALLSYMS=y
36# CONFIG_KALLSYMS_ALL is not set 36# CONFIG_KALLSYMS_ALL is not set
37# CONFIG_KALLSYMS_EXTRA_PASS is not set 37# CONFIG_KALLSYMS_EXTRA_PASS is not set
38CONFIG_PRINTK=y
39CONFIG_BUG=y
38CONFIG_BASE_FULL=y 40CONFIG_BASE_FULL=y
39CONFIG_FUTEX=y 41CONFIG_FUTEX=y
40CONFIG_EPOLL=y 42CONFIG_EPOLL=y
@@ -50,7 +52,13 @@ CONFIG_BASE_SMALL=0
50# 52#
51# Loadable module support 53# Loadable module support
52# 54#
53# CONFIG_MODULES is not set 55CONFIG_MODULES=y
56CONFIG_MODULE_UNLOAD=y
57# CONFIG_MODULE_FORCE_UNLOAD is not set
58CONFIG_OBSOLETE_MODPARM=y
59# CONFIG_MODVERSIONS is not set
60# CONFIG_MODULE_SRCVERSION_ALL is not set
61CONFIG_KMOD=y
54 62
55# 63#
56# System Type 64# System Type
@@ -76,6 +84,7 @@ CONFIG_ARCH_IXP2000=y
76# CONFIG_ARCH_VERSATILE is not set 84# CONFIG_ARCH_VERSATILE is not set
77# CONFIG_ARCH_IMX is not set 85# CONFIG_ARCH_IMX is not set
78# CONFIG_ARCH_H720X is not set 86# CONFIG_ARCH_H720X is not set
87# CONFIG_ARCH_AAEC2000 is not set
79CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y 88CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
80 89
81# 90#
@@ -91,6 +100,7 @@ CONFIG_ARCH_IXDP2800=y
91CONFIG_ARCH_IXDP2X00=y 100CONFIG_ARCH_IXDP2X00=y
92# CONFIG_ARCH_IXDP2401 is not set 101# CONFIG_ARCH_IXDP2401 is not set
93# CONFIG_ARCH_IXDP2801 is not set 102# CONFIG_ARCH_IXDP2801 is not set
103# CONFIG_IXP2000_SUPPORT_BROKEN_PCI_IO is not set
94 104
95# 105#
96# Processor Type 106# Processor Type
@@ -101,7 +111,6 @@ CONFIG_CPU_32v5=y
101CONFIG_CPU_ABRT_EV5T=y 111CONFIG_CPU_ABRT_EV5T=y
102CONFIG_CPU_CACHE_VIVT=y 112CONFIG_CPU_CACHE_VIVT=y
103CONFIG_CPU_TLB_V4WBI=y 113CONFIG_CPU_TLB_V4WBI=y
104CONFIG_CPU_MINICACHE=y
105 114
106# 115#
107# Processor Features 116# Processor Features
@@ -113,9 +122,11 @@ CONFIG_XSCALE_PMU=y
113# 122#
114# Bus support 123# Bus support
115# 124#
125CONFIG_ISA_DMA_API=y
116CONFIG_PCI=y 126CONFIG_PCI=y
117CONFIG_PCI_LEGACY_PROC=y 127CONFIG_PCI_LEGACY_PROC=y
118CONFIG_PCI_NAMES=y 128CONFIG_PCI_NAMES=y
129# CONFIG_PCI_DEBUG is not set
119 130
120# 131#
121# PCCARD (PCMCIA/CardBus) support 132# PCCARD (PCMCIA/CardBus) support
@@ -125,7 +136,15 @@ CONFIG_PCI_NAMES=y
125# 136#
126# Kernel Features 137# Kernel Features
127# 138#
139# CONFIG_SMP is not set
128# CONFIG_PREEMPT is not set 140# CONFIG_PREEMPT is not set
141# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
142CONFIG_SELECT_MEMORY_MODEL=y
143CONFIG_FLATMEM_MANUAL=y
144# CONFIG_DISCONTIGMEM_MANUAL is not set
145# CONFIG_SPARSEMEM_MANUAL is not set
146CONFIG_FLATMEM=y
147CONFIG_FLAT_NODE_MEM_MAP=y
129CONFIG_ALIGNMENT_TRAP=y 148CONFIG_ALIGNMENT_TRAP=y
130 149
131# 150#
@@ -264,7 +283,6 @@ CONFIG_MTD_IXP2000=y
264# 283#
265# Block devices 284# Block devices
266# 285#
267# CONFIG_BLK_DEV_FD is not set
268# CONFIG_BLK_CPQ_DA is not set 286# CONFIG_BLK_CPQ_DA is not set
269# CONFIG_BLK_CPQ_CISS_DA is not set 287# CONFIG_BLK_CPQ_CISS_DA is not set
270# CONFIG_BLK_DEV_DAC960 is not set 288# CONFIG_BLK_DEV_DAC960 is not set
@@ -303,6 +321,7 @@ CONFIG_IOSCHED_CFQ=y
303# 321#
304# Fusion MPT device support 322# Fusion MPT device support
305# 323#
324# CONFIG_FUSION is not set
306 325
307# 326#
308# IEEE 1394 (FireWire) support 327# IEEE 1394 (FireWire) support
@@ -324,10 +343,11 @@ CONFIG_NET=y
324# 343#
325CONFIG_PACKET=y 344CONFIG_PACKET=y
326CONFIG_PACKET_MMAP=y 345CONFIG_PACKET_MMAP=y
327# CONFIG_NETLINK_DEV is not set
328CONFIG_UNIX=y 346CONFIG_UNIX=y
329# CONFIG_NET_KEY is not set 347# CONFIG_NET_KEY is not set
330CONFIG_INET=y 348CONFIG_INET=y
349CONFIG_IP_FIB_HASH=y
350# CONFIG_IP_FIB_TRIE is not set
331# CONFIG_IP_MULTICAST is not set 351# CONFIG_IP_MULTICAST is not set
332# CONFIG_IP_ADVANCED_ROUTER is not set 352# CONFIG_IP_ADVANCED_ROUTER is not set
333CONFIG_IP_PNP=y 353CONFIG_IP_PNP=y
@@ -344,6 +364,17 @@ CONFIG_SYN_COOKIES=y
344# CONFIG_INET_TUNNEL is not set 364# CONFIG_INET_TUNNEL is not set
345# CONFIG_IP_TCPDIAG is not set 365# CONFIG_IP_TCPDIAG is not set
346# CONFIG_IP_TCPDIAG_IPV6 is not set 366# CONFIG_IP_TCPDIAG_IPV6 is not set
367
368#
369# TCP congestion control
370#
371CONFIG_TCP_CONG_BIC=y
372CONFIG_TCP_CONG_WESTWOOD=m
373CONFIG_TCP_CONG_HTCP=m
374# CONFIG_TCP_CONG_HSTCP is not set
375# CONFIG_TCP_CONG_HYBLA is not set
376# CONFIG_TCP_CONG_VEGAS is not set
377# CONFIG_TCP_CONG_SCALABLE is not set
347# CONFIG_IPV6 is not set 378# CONFIG_IPV6 is not set
348# CONFIG_NETFILTER is not set 379# CONFIG_NETFILTER is not set
349 380
@@ -399,6 +430,7 @@ CONFIG_MII=y
399# CONFIG_SUNGEM is not set 430# CONFIG_SUNGEM is not set
400# CONFIG_NET_VENDOR_3COM is not set 431# CONFIG_NET_VENDOR_3COM is not set
401# CONFIG_SMC91X is not set 432# CONFIG_SMC91X is not set
433# CONFIG_DM9000 is not set
402 434
403# 435#
404# Tulip family network device support 436# Tulip family network device support
@@ -435,9 +467,11 @@ CONFIG_EEPRO100=y
435# CONFIG_HAMACHI is not set 467# CONFIG_HAMACHI is not set
436# CONFIG_YELLOWFIN is not set 468# CONFIG_YELLOWFIN is not set
437# CONFIG_R8169 is not set 469# CONFIG_R8169 is not set
470# CONFIG_SKGE is not set
438# CONFIG_SK98LIN is not set 471# CONFIG_SK98LIN is not set
439# CONFIG_VIA_VELOCITY is not set 472# CONFIG_VIA_VELOCITY is not set
440# CONFIG_TIGON3 is not set 473# CONFIG_TIGON3 is not set
474# CONFIG_BNX2 is not set
441 475
442# 476#
443# Ethernet (10000 Mbit) 477# Ethernet (10000 Mbit)
@@ -459,6 +493,7 @@ CONFIG_EEPRO100=y
459# Wan interfaces 493# Wan interfaces
460# 494#
461CONFIG_WAN=y 495CONFIG_WAN=y
496# CONFIG_DSCC4 is not set
462# CONFIG_LANMEDIA is not set 497# CONFIG_LANMEDIA is not set
463# CONFIG_SYNCLINK_SYNCPPP is not set 498# CONFIG_SYNCLINK_SYNCPPP is not set
464CONFIG_HDLC=y 499CONFIG_HDLC=y
@@ -521,7 +556,6 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
521# 556#
522# CONFIG_SERIO is not set 557# CONFIG_SERIO is not set
523# CONFIG_GAMEPORT is not set 558# CONFIG_GAMEPORT is not set
524CONFIG_SOUND_GAMEPORT=y
525 559
526# 560#
527# Character devices 561# Character devices
@@ -542,6 +576,7 @@ CONFIG_SERIAL_8250_NR_UARTS=2
542# 576#
543CONFIG_SERIAL_CORE=y 577CONFIG_SERIAL_CORE=y
544CONFIG_SERIAL_CORE_CONSOLE=y 578CONFIG_SERIAL_CORE_CONSOLE=y
579# CONFIG_SERIAL_JSM is not set
545CONFIG_UNIX98_PTYS=y 580CONFIG_UNIX98_PTYS=y
546CONFIG_LEGACY_PTYS=y 581CONFIG_LEGACY_PTYS=y
547CONFIG_LEGACY_PTY_COUNT=256 582CONFIG_LEGACY_PTY_COUNT=256
@@ -608,17 +643,18 @@ CONFIG_I2C_ALGOBIT=y
608# CONFIG_I2C_AMD8111 is not set 643# CONFIG_I2C_AMD8111 is not set
609# CONFIG_I2C_I801 is not set 644# CONFIG_I2C_I801 is not set
610# CONFIG_I2C_I810 is not set 645# CONFIG_I2C_I810 is not set
646# CONFIG_I2C_PIIX4 is not set
611# CONFIG_I2C_ISA is not set 647# CONFIG_I2C_ISA is not set
612# CONFIG_I2C_IXP2000 is not set 648# CONFIG_I2C_IXP2000 is not set
613# CONFIG_I2C_NFORCE2 is not set 649# CONFIG_I2C_NFORCE2 is not set
614# CONFIG_I2C_PARPORT_LIGHT is not set 650# CONFIG_I2C_PARPORT_LIGHT is not set
615# CONFIG_I2C_PIIX4 is not set
616# CONFIG_I2C_PROSAVAGE is not set 651# CONFIG_I2C_PROSAVAGE is not set
617# CONFIG_I2C_SAVAGE4 is not set 652# CONFIG_I2C_SAVAGE4 is not set
618# CONFIG_SCx200_ACB is not set 653# CONFIG_SCx200_ACB is not set
619# CONFIG_I2C_SIS5595 is not set 654# CONFIG_I2C_SIS5595 is not set
620# CONFIG_I2C_SIS630 is not set 655# CONFIG_I2C_SIS630 is not set
621# CONFIG_I2C_SIS96X is not set 656# CONFIG_I2C_SIS96X is not set
657# CONFIG_I2C_STUB is not set
622# CONFIG_I2C_VIA is not set 658# CONFIG_I2C_VIA is not set
623# CONFIG_I2C_VIAPRO is not set 659# CONFIG_I2C_VIAPRO is not set
624# CONFIG_I2C_VOODOO3 is not set 660# CONFIG_I2C_VOODOO3 is not set
@@ -632,7 +668,9 @@ CONFIG_I2C_SENSOR=y
632# CONFIG_SENSORS_ADM1025 is not set 668# CONFIG_SENSORS_ADM1025 is not set
633# CONFIG_SENSORS_ADM1026 is not set 669# CONFIG_SENSORS_ADM1026 is not set
634# CONFIG_SENSORS_ADM1031 is not set 670# CONFIG_SENSORS_ADM1031 is not set
671# CONFIG_SENSORS_ADM9240 is not set
635# CONFIG_SENSORS_ASB100 is not set 672# CONFIG_SENSORS_ASB100 is not set
673# CONFIG_SENSORS_ATXP1 is not set
636# CONFIG_SENSORS_DS1621 is not set 674# CONFIG_SENSORS_DS1621 is not set
637# CONFIG_SENSORS_FSCHER is not set 675# CONFIG_SENSORS_FSCHER is not set
638# CONFIG_SENSORS_FSCPOS is not set 676# CONFIG_SENSORS_FSCPOS is not set
@@ -648,6 +686,7 @@ CONFIG_I2C_SENSOR=y
648# CONFIG_SENSORS_LM85 is not set 686# CONFIG_SENSORS_LM85 is not set
649# CONFIG_SENSORS_LM87 is not set 687# CONFIG_SENSORS_LM87 is not set
650# CONFIG_SENSORS_LM90 is not set 688# CONFIG_SENSORS_LM90 is not set
689# CONFIG_SENSORS_LM92 is not set
651# CONFIG_SENSORS_MAX1619 is not set 690# CONFIG_SENSORS_MAX1619 is not set
652# CONFIG_SENSORS_PC87360 is not set 691# CONFIG_SENSORS_PC87360 is not set
653# CONFIG_SENSORS_SMSC47B397 is not set 692# CONFIG_SENSORS_SMSC47B397 is not set
@@ -657,14 +696,19 @@ CONFIG_I2C_SENSOR=y
657# CONFIG_SENSORS_W83781D is not set 696# CONFIG_SENSORS_W83781D is not set
658# CONFIG_SENSORS_W83L785TS is not set 697# CONFIG_SENSORS_W83L785TS is not set
659# CONFIG_SENSORS_W83627HF is not set 698# CONFIG_SENSORS_W83627HF is not set
699# CONFIG_SENSORS_W83627EHF is not set
660 700
661# 701#
662# Other I2C Chip support 702# Other I2C Chip support
663# 703#
704# CONFIG_SENSORS_DS1337 is not set
705# CONFIG_SENSORS_DS1374 is not set
664CONFIG_SENSORS_EEPROM=y 706CONFIG_SENSORS_EEPROM=y
665# CONFIG_SENSORS_PCF8574 is not set 707# CONFIG_SENSORS_PCF8574 is not set
708# CONFIG_SENSORS_PCA9539 is not set
666# CONFIG_SENSORS_PCF8591 is not set 709# CONFIG_SENSORS_PCF8591 is not set
667# CONFIG_SENSORS_RTC8564 is not set 710# CONFIG_SENSORS_RTC8564 is not set
711# CONFIG_SENSORS_MAX6875 is not set
668# CONFIG_I2C_DEBUG_CORE is not set 712# CONFIG_I2C_DEBUG_CORE is not set
669# CONFIG_I2C_DEBUG_ALGO is not set 713# CONFIG_I2C_DEBUG_ALGO is not set
670# CONFIG_I2C_DEBUG_BUS is not set 714# CONFIG_I2C_DEBUG_BUS is not set
@@ -718,6 +762,7 @@ CONFIG_EXT2_FS=y
718CONFIG_EXT2_FS_XATTR=y 762CONFIG_EXT2_FS_XATTR=y
719CONFIG_EXT2_FS_POSIX_ACL=y 763CONFIG_EXT2_FS_POSIX_ACL=y
720# CONFIG_EXT2_FS_SECURITY is not set 764# CONFIG_EXT2_FS_SECURITY is not set
765# CONFIG_EXT2_FS_XIP is not set
721CONFIG_EXT3_FS=y 766CONFIG_EXT3_FS=y
722CONFIG_EXT3_FS_XATTR=y 767CONFIG_EXT3_FS_XATTR=y
723CONFIG_EXT3_FS_POSIX_ACL=y 768CONFIG_EXT3_FS_POSIX_ACL=y
@@ -758,7 +803,6 @@ CONFIG_DNOTIFY=y
758# 803#
759CONFIG_PROC_FS=y 804CONFIG_PROC_FS=y
760CONFIG_SYSFS=y 805CONFIG_SYSFS=y
761# CONFIG_DEVFS_FS is not set
762# CONFIG_DEVPTS_FS_XATTR is not set 806# CONFIG_DEVPTS_FS_XATTR is not set
763CONFIG_TMPFS=y 807CONFIG_TMPFS=y
764# CONFIG_TMPFS_XATTR is not set 808# CONFIG_TMPFS_XATTR is not set
@@ -796,12 +840,14 @@ CONFIG_JFFS2_RTIME=y
796# 840#
797CONFIG_NFS_FS=y 841CONFIG_NFS_FS=y
798CONFIG_NFS_V3=y 842CONFIG_NFS_V3=y
843# CONFIG_NFS_V3_ACL is not set
799# CONFIG_NFS_V4 is not set 844# CONFIG_NFS_V4 is not set
800# CONFIG_NFS_DIRECTIO is not set 845# CONFIG_NFS_DIRECTIO is not set
801# CONFIG_NFSD is not set 846# CONFIG_NFSD is not set
802CONFIG_ROOT_NFS=y 847CONFIG_ROOT_NFS=y
803CONFIG_LOCKD=y 848CONFIG_LOCKD=y
804CONFIG_LOCKD_V4=y 849CONFIG_LOCKD_V4=y
850CONFIG_NFS_COMMON=y
805CONFIG_SUNRPC=y 851CONFIG_SUNRPC=y
806# CONFIG_RPCSEC_GSS_KRB5 is not set 852# CONFIG_RPCSEC_GSS_KRB5 is not set
807# CONFIG_RPCSEC_GSS_SPKM3 is not set 853# CONFIG_RPCSEC_GSS_SPKM3 is not set
@@ -886,3 +932,4 @@ CONFIG_CRC32=y
886# CONFIG_LIBCRC32C is not set 932# CONFIG_LIBCRC32C is not set
887CONFIG_ZLIB_INFLATE=y 933CONFIG_ZLIB_INFLATE=y
888CONFIG_ZLIB_DEFLATE=y 934CONFIG_ZLIB_DEFLATE=y
935# CONFIG_TEXTSEARCH is not set
diff --git a/arch/arm/configs/ixdp2801_defconfig b/arch/arm/configs/ixdp2801_defconfig
index cd84a20f30f1..b1e162f29cb9 100644
--- a/arch/arm/configs/ixdp2801_defconfig
+++ b/arch/arm/configs/ixdp2801_defconfig
@@ -1,14 +1,13 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.12-rc1-bk2 3# Linux kernel version: 2.6.12-git6
4# Sun Mar 27 22:39:19 2005 4# Sat Jun 25 01:01:18 2005
5# 5#
6CONFIG_ARM=y 6CONFIG_ARM=y
7CONFIG_MMU=y 7CONFIG_MMU=y
8CONFIG_UID16=y 8CONFIG_UID16=y
9CONFIG_RWSEM_GENERIC_SPINLOCK=y 9CONFIG_RWSEM_GENERIC_SPINLOCK=y
10CONFIG_GENERIC_CALIBRATE_DELAY=y 10CONFIG_GENERIC_CALIBRATE_DELAY=y
11CONFIG_GENERIC_IOMAP=y
12 11
13# 12#
14# Code maturity level options 13# Code maturity level options
@@ -16,6 +15,7 @@ CONFIG_GENERIC_IOMAP=y
16CONFIG_EXPERIMENTAL=y 15CONFIG_EXPERIMENTAL=y
17CONFIG_CLEAN_COMPILE=y 16CONFIG_CLEAN_COMPILE=y
18CONFIG_BROKEN_ON_SMP=y 17CONFIG_BROKEN_ON_SMP=y
18CONFIG_INIT_ENV_ARG_LIMIT=32
19 19
20# 20#
21# General setup 21# General setup
@@ -35,6 +35,8 @@ CONFIG_EMBEDDED=y
35CONFIG_KALLSYMS=y 35CONFIG_KALLSYMS=y
36# CONFIG_KALLSYMS_ALL is not set 36# CONFIG_KALLSYMS_ALL is not set
37# CONFIG_KALLSYMS_EXTRA_PASS is not set 37# CONFIG_KALLSYMS_EXTRA_PASS is not set
38CONFIG_PRINTK=y
39CONFIG_BUG=y
38CONFIG_BASE_FULL=y 40CONFIG_BASE_FULL=y
39CONFIG_FUTEX=y 41CONFIG_FUTEX=y
40CONFIG_EPOLL=y 42CONFIG_EPOLL=y
@@ -50,7 +52,13 @@ CONFIG_BASE_SMALL=0
50# 52#
51# Loadable module support 53# Loadable module support
52# 54#
53# CONFIG_MODULES is not set 55CONFIG_MODULES=y
56CONFIG_MODULE_UNLOAD=y
57# CONFIG_MODULE_FORCE_UNLOAD is not set
58CONFIG_OBSOLETE_MODPARM=y
59# CONFIG_MODVERSIONS is not set
60# CONFIG_MODULE_SRCVERSION_ALL is not set
61CONFIG_KMOD=y
54 62
55# 63#
56# System Type 64# System Type
@@ -76,6 +84,7 @@ CONFIG_ARCH_IXP2000=y
76# CONFIG_ARCH_VERSATILE is not set 84# CONFIG_ARCH_VERSATILE is not set
77# CONFIG_ARCH_IMX is not set 85# CONFIG_ARCH_IMX is not set
78# CONFIG_ARCH_H720X is not set 86# CONFIG_ARCH_H720X is not set
87# CONFIG_ARCH_AAEC2000 is not set
79CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y 88CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
80 89
81# 90#
@@ -91,6 +100,7 @@ CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y
91# CONFIG_ARCH_IXDP2401 is not set 100# CONFIG_ARCH_IXDP2401 is not set
92CONFIG_ARCH_IXDP2801=y 101CONFIG_ARCH_IXDP2801=y
93CONFIG_ARCH_IXDP2X01=y 102CONFIG_ARCH_IXDP2X01=y
103# CONFIG_IXP2000_SUPPORT_BROKEN_PCI_IO is not set
94 104
95# 105#
96# Processor Type 106# Processor Type
@@ -101,7 +111,6 @@ CONFIG_CPU_32v5=y
101CONFIG_CPU_ABRT_EV5T=y 111CONFIG_CPU_ABRT_EV5T=y
102CONFIG_CPU_CACHE_VIVT=y 112CONFIG_CPU_CACHE_VIVT=y
103CONFIG_CPU_TLB_V4WBI=y 113CONFIG_CPU_TLB_V4WBI=y
104CONFIG_CPU_MINICACHE=y
105 114
106# 115#
107# Processor Features 116# Processor Features
@@ -113,9 +122,11 @@ CONFIG_XSCALE_PMU=y
113# 122#
114# Bus support 123# Bus support
115# 124#
125CONFIG_ISA_DMA_API=y
116CONFIG_PCI=y 126CONFIG_PCI=y
117CONFIG_PCI_LEGACY_PROC=y 127CONFIG_PCI_LEGACY_PROC=y
118CONFIG_PCI_NAMES=y 128CONFIG_PCI_NAMES=y
129# CONFIG_PCI_DEBUG is not set
119 130
120# 131#
121# PCCARD (PCMCIA/CardBus) support 132# PCCARD (PCMCIA/CardBus) support
@@ -125,7 +136,15 @@ CONFIG_PCI_NAMES=y
125# 136#
126# Kernel Features 137# Kernel Features
127# 138#
139# CONFIG_SMP is not set
128# CONFIG_PREEMPT is not set 140# CONFIG_PREEMPT is not set
141# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
142CONFIG_SELECT_MEMORY_MODEL=y
143CONFIG_FLATMEM_MANUAL=y
144# CONFIG_DISCONTIGMEM_MANUAL is not set
145# CONFIG_SPARSEMEM_MANUAL is not set
146CONFIG_FLATMEM=y
147CONFIG_FLAT_NODE_MEM_MAP=y
129CONFIG_ALIGNMENT_TRAP=y 148CONFIG_ALIGNMENT_TRAP=y
130 149
131# 150#
@@ -264,7 +283,6 @@ CONFIG_MTD_IXP2000=y
264# 283#
265# Block devices 284# Block devices
266# 285#
267# CONFIG_BLK_DEV_FD is not set
268# CONFIG_BLK_CPQ_DA is not set 286# CONFIG_BLK_CPQ_DA is not set
269# CONFIG_BLK_CPQ_CISS_DA is not set 287# CONFIG_BLK_CPQ_CISS_DA is not set
270# CONFIG_BLK_DEV_DAC960 is not set 288# CONFIG_BLK_DEV_DAC960 is not set
@@ -303,6 +321,7 @@ CONFIG_IOSCHED_CFQ=y
303# 321#
304# Fusion MPT device support 322# Fusion MPT device support
305# 323#
324# CONFIG_FUSION is not set
306 325
307# 326#
308# IEEE 1394 (FireWire) support 327# IEEE 1394 (FireWire) support
@@ -324,10 +343,11 @@ CONFIG_NET=y
324# 343#
325CONFIG_PACKET=y 344CONFIG_PACKET=y
326CONFIG_PACKET_MMAP=y 345CONFIG_PACKET_MMAP=y
327# CONFIG_NETLINK_DEV is not set
328CONFIG_UNIX=y 346CONFIG_UNIX=y
329# CONFIG_NET_KEY is not set 347# CONFIG_NET_KEY is not set
330CONFIG_INET=y 348CONFIG_INET=y
349CONFIG_IP_FIB_HASH=y
350# CONFIG_IP_FIB_TRIE is not set
331# CONFIG_IP_MULTICAST is not set 351# CONFIG_IP_MULTICAST is not set
332# CONFIG_IP_ADVANCED_ROUTER is not set 352# CONFIG_IP_ADVANCED_ROUTER is not set
333CONFIG_IP_PNP=y 353CONFIG_IP_PNP=y
@@ -344,6 +364,17 @@ CONFIG_SYN_COOKIES=y
344# CONFIG_INET_TUNNEL is not set 364# CONFIG_INET_TUNNEL is not set
345# CONFIG_IP_TCPDIAG is not set 365# CONFIG_IP_TCPDIAG is not set
346# CONFIG_IP_TCPDIAG_IPV6 is not set 366# CONFIG_IP_TCPDIAG_IPV6 is not set
367
368#
369# TCP congestion control
370#
371CONFIG_TCP_CONG_BIC=y
372CONFIG_TCP_CONG_WESTWOOD=m
373CONFIG_TCP_CONG_HTCP=m
374# CONFIG_TCP_CONG_HSTCP is not set
375# CONFIG_TCP_CONG_HYBLA is not set
376# CONFIG_TCP_CONG_VEGAS is not set
377# CONFIG_TCP_CONG_SCALABLE is not set
347# CONFIG_IPV6 is not set 378# CONFIG_IPV6 is not set
348# CONFIG_NETFILTER is not set 379# CONFIG_NETFILTER is not set
349 380
@@ -399,6 +430,7 @@ CONFIG_MII=y
399# CONFIG_SUNGEM is not set 430# CONFIG_SUNGEM is not set
400# CONFIG_NET_VENDOR_3COM is not set 431# CONFIG_NET_VENDOR_3COM is not set
401# CONFIG_SMC91X is not set 432# CONFIG_SMC91X is not set
433# CONFIG_DM9000 is not set
402 434
403# 435#
404# Tulip family network device support 436# Tulip family network device support
@@ -436,9 +468,11 @@ CONFIG_EEPRO100=y
436# CONFIG_HAMACHI is not set 468# CONFIG_HAMACHI is not set
437# CONFIG_YELLOWFIN is not set 469# CONFIG_YELLOWFIN is not set
438# CONFIG_R8169 is not set 470# CONFIG_R8169 is not set
471# CONFIG_SKGE is not set
439# CONFIG_SK98LIN is not set 472# CONFIG_SK98LIN is not set
440# CONFIG_VIA_VELOCITY is not set 473# CONFIG_VIA_VELOCITY is not set
441# CONFIG_TIGON3 is not set 474# CONFIG_TIGON3 is not set
475# CONFIG_BNX2 is not set
442 476
443# 477#
444# Ethernet (10000 Mbit) 478# Ethernet (10000 Mbit)
@@ -460,6 +494,7 @@ CONFIG_EEPRO100=y
460# Wan interfaces 494# Wan interfaces
461# 495#
462CONFIG_WAN=y 496CONFIG_WAN=y
497# CONFIG_DSCC4 is not set
463# CONFIG_LANMEDIA is not set 498# CONFIG_LANMEDIA is not set
464# CONFIG_SYNCLINK_SYNCPPP is not set 499# CONFIG_SYNCLINK_SYNCPPP is not set
465CONFIG_HDLC=y 500CONFIG_HDLC=y
@@ -522,7 +557,6 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
522# 557#
523# CONFIG_SERIO is not set 558# CONFIG_SERIO is not set
524# CONFIG_GAMEPORT is not set 559# CONFIG_GAMEPORT is not set
525CONFIG_SOUND_GAMEPORT=y
526 560
527# 561#
528# Character devices 562# Character devices
@@ -543,6 +577,7 @@ CONFIG_SERIAL_8250_NR_UARTS=2
543# 577#
544CONFIG_SERIAL_CORE=y 578CONFIG_SERIAL_CORE=y
545CONFIG_SERIAL_CORE_CONSOLE=y 579CONFIG_SERIAL_CORE_CONSOLE=y
580# CONFIG_SERIAL_JSM is not set
546CONFIG_UNIX98_PTYS=y 581CONFIG_UNIX98_PTYS=y
547CONFIG_LEGACY_PTYS=y 582CONFIG_LEGACY_PTYS=y
548CONFIG_LEGACY_PTY_COUNT=256 583CONFIG_LEGACY_PTY_COUNT=256
@@ -609,17 +644,18 @@ CONFIG_I2C_ALGOBIT=y
609# CONFIG_I2C_AMD8111 is not set 644# CONFIG_I2C_AMD8111 is not set
610# CONFIG_I2C_I801 is not set 645# CONFIG_I2C_I801 is not set
611# CONFIG_I2C_I810 is not set 646# CONFIG_I2C_I810 is not set
647# CONFIG_I2C_PIIX4 is not set
612# CONFIG_I2C_ISA is not set 648# CONFIG_I2C_ISA is not set
613# CONFIG_I2C_IXP2000 is not set 649# CONFIG_I2C_IXP2000 is not set
614# CONFIG_I2C_NFORCE2 is not set 650# CONFIG_I2C_NFORCE2 is not set
615# CONFIG_I2C_PARPORT_LIGHT is not set 651# CONFIG_I2C_PARPORT_LIGHT is not set
616# CONFIG_I2C_PIIX4 is not set
617# CONFIG_I2C_PROSAVAGE is not set 652# CONFIG_I2C_PROSAVAGE is not set
618# CONFIG_I2C_SAVAGE4 is not set 653# CONFIG_I2C_SAVAGE4 is not set
619# CONFIG_SCx200_ACB is not set 654# CONFIG_SCx200_ACB is not set
620# CONFIG_I2C_SIS5595 is not set 655# CONFIG_I2C_SIS5595 is not set
621# CONFIG_I2C_SIS630 is not set 656# CONFIG_I2C_SIS630 is not set
622# CONFIG_I2C_SIS96X is not set 657# CONFIG_I2C_SIS96X is not set
658# CONFIG_I2C_STUB is not set
623# CONFIG_I2C_VIA is not set 659# CONFIG_I2C_VIA is not set
624# CONFIG_I2C_VIAPRO is not set 660# CONFIG_I2C_VIAPRO is not set
625# CONFIG_I2C_VOODOO3 is not set 661# CONFIG_I2C_VOODOO3 is not set
@@ -633,7 +669,9 @@ CONFIG_I2C_SENSOR=y
633# CONFIG_SENSORS_ADM1025 is not set 669# CONFIG_SENSORS_ADM1025 is not set
634# CONFIG_SENSORS_ADM1026 is not set 670# CONFIG_SENSORS_ADM1026 is not set
635# CONFIG_SENSORS_ADM1031 is not set 671# CONFIG_SENSORS_ADM1031 is not set
672# CONFIG_SENSORS_ADM9240 is not set
636# CONFIG_SENSORS_ASB100 is not set 673# CONFIG_SENSORS_ASB100 is not set
674# CONFIG_SENSORS_ATXP1 is not set
637# CONFIG_SENSORS_DS1621 is not set 675# CONFIG_SENSORS_DS1621 is not set
638# CONFIG_SENSORS_FSCHER is not set 676# CONFIG_SENSORS_FSCHER is not set
639# CONFIG_SENSORS_FSCPOS is not set 677# CONFIG_SENSORS_FSCPOS is not set
@@ -649,6 +687,7 @@ CONFIG_I2C_SENSOR=y
649# CONFIG_SENSORS_LM85 is not set 687# CONFIG_SENSORS_LM85 is not set
650# CONFIG_SENSORS_LM87 is not set 688# CONFIG_SENSORS_LM87 is not set
651# CONFIG_SENSORS_LM90 is not set 689# CONFIG_SENSORS_LM90 is not set
690# CONFIG_SENSORS_LM92 is not set
652# CONFIG_SENSORS_MAX1619 is not set 691# CONFIG_SENSORS_MAX1619 is not set
653# CONFIG_SENSORS_PC87360 is not set 692# CONFIG_SENSORS_PC87360 is not set
654# CONFIG_SENSORS_SMSC47B397 is not set 693# CONFIG_SENSORS_SMSC47B397 is not set
@@ -658,14 +697,19 @@ CONFIG_I2C_SENSOR=y
658# CONFIG_SENSORS_W83781D is not set 697# CONFIG_SENSORS_W83781D is not set
659# CONFIG_SENSORS_W83L785TS is not set 698# CONFIG_SENSORS_W83L785TS is not set
660# CONFIG_SENSORS_W83627HF is not set 699# CONFIG_SENSORS_W83627HF is not set
700# CONFIG_SENSORS_W83627EHF is not set
661 701
662# 702#
663# Other I2C Chip support 703# Other I2C Chip support
664# 704#
705# CONFIG_SENSORS_DS1337 is not set
706# CONFIG_SENSORS_DS1374 is not set
665CONFIG_SENSORS_EEPROM=y 707CONFIG_SENSORS_EEPROM=y
666# CONFIG_SENSORS_PCF8574 is not set 708# CONFIG_SENSORS_PCF8574 is not set
709# CONFIG_SENSORS_PCA9539 is not set
667# CONFIG_SENSORS_PCF8591 is not set 710# CONFIG_SENSORS_PCF8591 is not set
668# CONFIG_SENSORS_RTC8564 is not set 711# CONFIG_SENSORS_RTC8564 is not set
712# CONFIG_SENSORS_MAX6875 is not set
669# CONFIG_I2C_DEBUG_CORE is not set 713# CONFIG_I2C_DEBUG_CORE is not set
670# CONFIG_I2C_DEBUG_ALGO is not set 714# CONFIG_I2C_DEBUG_ALGO is not set
671# CONFIG_I2C_DEBUG_BUS is not set 715# CONFIG_I2C_DEBUG_BUS is not set
@@ -719,6 +763,7 @@ CONFIG_EXT2_FS=y
719CONFIG_EXT2_FS_XATTR=y 763CONFIG_EXT2_FS_XATTR=y
720CONFIG_EXT2_FS_POSIX_ACL=y 764CONFIG_EXT2_FS_POSIX_ACL=y
721# CONFIG_EXT2_FS_SECURITY is not set 765# CONFIG_EXT2_FS_SECURITY is not set
766# CONFIG_EXT2_FS_XIP is not set
722CONFIG_EXT3_FS=y 767CONFIG_EXT3_FS=y
723CONFIG_EXT3_FS_XATTR=y 768CONFIG_EXT3_FS_XATTR=y
724CONFIG_EXT3_FS_POSIX_ACL=y 769CONFIG_EXT3_FS_POSIX_ACL=y
@@ -759,7 +804,6 @@ CONFIG_DNOTIFY=y
759# 804#
760CONFIG_PROC_FS=y 805CONFIG_PROC_FS=y
761CONFIG_SYSFS=y 806CONFIG_SYSFS=y
762# CONFIG_DEVFS_FS is not set
763# CONFIG_DEVPTS_FS_XATTR is not set 807# CONFIG_DEVPTS_FS_XATTR is not set
764CONFIG_TMPFS=y 808CONFIG_TMPFS=y
765# CONFIG_TMPFS_XATTR is not set 809# CONFIG_TMPFS_XATTR is not set
@@ -797,12 +841,14 @@ CONFIG_JFFS2_RTIME=y
797# 841#
798CONFIG_NFS_FS=y 842CONFIG_NFS_FS=y
799CONFIG_NFS_V3=y 843CONFIG_NFS_V3=y
844# CONFIG_NFS_V3_ACL is not set
800# CONFIG_NFS_V4 is not set 845# CONFIG_NFS_V4 is not set
801# CONFIG_NFS_DIRECTIO is not set 846# CONFIG_NFS_DIRECTIO is not set
802# CONFIG_NFSD is not set 847# CONFIG_NFSD is not set
803CONFIG_ROOT_NFS=y 848CONFIG_ROOT_NFS=y
804CONFIG_LOCKD=y 849CONFIG_LOCKD=y
805CONFIG_LOCKD_V4=y 850CONFIG_LOCKD_V4=y
851CONFIG_NFS_COMMON=y
806CONFIG_SUNRPC=y 852CONFIG_SUNRPC=y
807# CONFIG_RPCSEC_GSS_KRB5 is not set 853# CONFIG_RPCSEC_GSS_KRB5 is not set
808# CONFIG_RPCSEC_GSS_SPKM3 is not set 854# CONFIG_RPCSEC_GSS_SPKM3 is not set
@@ -887,3 +933,4 @@ CONFIG_CRC32=y
887# CONFIG_LIBCRC32C is not set 933# CONFIG_LIBCRC32C is not set
888CONFIG_ZLIB_INFLATE=y 934CONFIG_ZLIB_INFLATE=y
889CONFIG_ZLIB_DEFLATE=y 935CONFIG_ZLIB_DEFLATE=y
936# CONFIG_TEXTSEARCH is not set
diff --git a/arch/arm/configs/s3c2410_defconfig b/arch/arm/configs/s3c2410_defconfig
index 2a63fb277196..98b72ff38832 100644
--- a/arch/arm/configs/s3c2410_defconfig
+++ b/arch/arm/configs/s3c2410_defconfig
@@ -1,14 +1,13 @@
1# 1#
2# Automatically generated make config: don't edit 2# Automatically generated make config: don't edit
3# Linux kernel version: 2.6.12-rc1-bk2 3# Linux kernel version: 2.6.12-git4
4# Sun Mar 27 17:47:45 2005 4# Wed Jun 22 15:56:42 2005
5# 5#
6CONFIG_ARM=y 6CONFIG_ARM=y
7CONFIG_MMU=y 7CONFIG_MMU=y
8CONFIG_UID16=y 8CONFIG_UID16=y
9CONFIG_RWSEM_GENERIC_SPINLOCK=y 9CONFIG_RWSEM_GENERIC_SPINLOCK=y
10CONFIG_GENERIC_CALIBRATE_DELAY=y 10CONFIG_GENERIC_CALIBRATE_DELAY=y
11CONFIG_GENERIC_IOMAP=y
12 11
13# 12#
14# Code maturity level options 13# Code maturity level options
@@ -17,6 +16,7 @@ CONFIG_EXPERIMENTAL=y
17# CONFIG_CLEAN_COMPILE is not set 16# CONFIG_CLEAN_COMPILE is not set
18CONFIG_BROKEN=y 17CONFIG_BROKEN=y
19CONFIG_BROKEN_ON_SMP=y 18CONFIG_BROKEN_ON_SMP=y
19CONFIG_INIT_ENV_ARG_LIMIT=32
20 20
21# 21#
22# General setup 22# General setup
@@ -35,6 +35,8 @@ CONFIG_KOBJECT_UEVENT=y
35CONFIG_KALLSYMS=y 35CONFIG_KALLSYMS=y
36# CONFIG_KALLSYMS_ALL is not set 36# CONFIG_KALLSYMS_ALL is not set
37# CONFIG_KALLSYMS_EXTRA_PASS is not set 37# CONFIG_KALLSYMS_EXTRA_PASS is not set
38CONFIG_PRINTK=y
39CONFIG_BUG=y
38CONFIG_BASE_FULL=y 40CONFIG_BASE_FULL=y
39CONFIG_FUTEX=y 41CONFIG_FUTEX=y
40CONFIG_EPOLL=y 42CONFIG_EPOLL=y
@@ -81,6 +83,7 @@ CONFIG_ARCH_S3C2410=y
81# CONFIG_ARCH_VERSATILE is not set 83# CONFIG_ARCH_VERSATILE is not set
82# CONFIG_ARCH_IMX is not set 84# CONFIG_ARCH_IMX is not set
83# CONFIG_ARCH_H720X is not set 85# CONFIG_ARCH_H720X is not set
86# CONFIG_ARCH_AAEC2000 is not set
84 87
85# 88#
86# S3C24XX Implementations 89# S3C24XX Implementations
@@ -134,6 +137,7 @@ CONFIG_CPU_TLB_V4WBI=y
134# 137#
135# Bus support 138# Bus support
136# 139#
140CONFIG_ISA_DMA_API=y
137 141
138# 142#
139# PCCARD (PCMCIA/CardBus) support 143# PCCARD (PCMCIA/CardBus) support
@@ -143,7 +147,9 @@ CONFIG_CPU_TLB_V4WBI=y
143# 147#
144# Kernel Features 148# Kernel Features
145# 149#
150# CONFIG_SMP is not set
146# CONFIG_PREEMPT is not set 151# CONFIG_PREEMPT is not set
152# CONFIG_DISCONTIGMEM is not set
147CONFIG_ALIGNMENT_TRAP=y 153CONFIG_ALIGNMENT_TRAP=y
148 154
149# 155#
@@ -297,7 +303,6 @@ CONFIG_PARPORT_1284=y
297# 303#
298# Block devices 304# Block devices
299# 305#
300# CONFIG_BLK_DEV_FD is not set
301# CONFIG_PARIDE is not set 306# CONFIG_PARIDE is not set
302# CONFIG_BLK_DEV_COW_COMMON is not set 307# CONFIG_BLK_DEV_COW_COMMON is not set
303CONFIG_BLK_DEV_LOOP=y 308CONFIG_BLK_DEV_LOOP=y
@@ -359,6 +364,7 @@ CONFIG_BLK_DEV_IDE_BAST=y
359# 364#
360# Fusion MPT device support 365# Fusion MPT device support
361# 366#
367# CONFIG_FUSION is not set
362 368
363# 369#
364# IEEE 1394 (FireWire) support 370# IEEE 1394 (FireWire) support
@@ -378,10 +384,11 @@ CONFIG_NET=y
378# Networking options 384# Networking options
379# 385#
380# CONFIG_PACKET is not set 386# CONFIG_PACKET is not set
381# CONFIG_NETLINK_DEV is not set
382CONFIG_UNIX=y 387CONFIG_UNIX=y
383# CONFIG_NET_KEY is not set 388# CONFIG_NET_KEY is not set
384CONFIG_INET=y 389CONFIG_INET=y
390CONFIG_IP_FIB_HASH=y
391# CONFIG_IP_FIB_TRIE is not set
385# CONFIG_IP_MULTICAST is not set 392# CONFIG_IP_MULTICAST is not set
386# CONFIG_IP_ADVANCED_ROUTER is not set 393# CONFIG_IP_ADVANCED_ROUTER is not set
387CONFIG_IP_PNP=y 394CONFIG_IP_PNP=y
@@ -443,8 +450,9 @@ CONFIG_NETDEVICES=y
443# Ethernet (10 or 100Mbit) 450# Ethernet (10 or 100Mbit)
444# 451#
445CONFIG_NET_ETHERNET=y 452CONFIG_NET_ETHERNET=y
446# CONFIG_MII is not set 453CONFIG_MII=m
447# CONFIG_SMC91X is not set 454# CONFIG_SMC91X is not set
455CONFIG_DM9000=m
448 456
449# 457#
450# Ethernet (1000 Mbit) 458# Ethernet (1000 Mbit)
@@ -521,7 +529,6 @@ CONFIG_SERIO_SERPORT=y
521CONFIG_SERIO_LIBPS2=y 529CONFIG_SERIO_LIBPS2=y
522# CONFIG_SERIO_RAW is not set 530# CONFIG_SERIO_RAW is not set
523# CONFIG_GAMEPORT is not set 531# CONFIG_GAMEPORT is not set
524CONFIG_SOUND_GAMEPORT=y
525 532
526# 533#
527# Character devices 534# Character devices
@@ -605,7 +612,6 @@ CONFIG_S3C2410_RTC=y
605# 612#
606# TPM devices 613# TPM devices
607# 614#
608# CONFIG_TCG_TPM is not set
609 615
610# 616#
611# I2C support 617# I2C support
@@ -654,6 +660,7 @@ CONFIG_SENSORS_LM78=m
654CONFIG_SENSORS_LM85=m 660CONFIG_SENSORS_LM85=m
655# CONFIG_SENSORS_LM87 is not set 661# CONFIG_SENSORS_LM87 is not set
656# CONFIG_SENSORS_LM90 is not set 662# CONFIG_SENSORS_LM90 is not set
663# CONFIG_SENSORS_LM92 is not set
657# CONFIG_SENSORS_MAX1619 is not set 664# CONFIG_SENSORS_MAX1619 is not set
658# CONFIG_SENSORS_PC87360 is not set 665# CONFIG_SENSORS_PC87360 is not set
659# CONFIG_SENSORS_SMSC47B397 is not set 666# CONFIG_SENSORS_SMSC47B397 is not set
@@ -665,6 +672,7 @@ CONFIG_SENSORS_LM85=m
665# 672#
666# Other I2C Chip support 673# Other I2C Chip support
667# 674#
675# CONFIG_SENSORS_DS1337 is not set
668CONFIG_SENSORS_EEPROM=m 676CONFIG_SENSORS_EEPROM=m
669# CONFIG_SENSORS_PCF8574 is not set 677# CONFIG_SENSORS_PCF8574 is not set
670# CONFIG_SENSORS_PCF8591 is not set 678# CONFIG_SENSORS_PCF8591 is not set
@@ -696,8 +704,10 @@ CONFIG_FB=y
696# CONFIG_FB_CFB_COPYAREA is not set 704# CONFIG_FB_CFB_COPYAREA is not set
697# CONFIG_FB_CFB_IMAGEBLIT is not set 705# CONFIG_FB_CFB_IMAGEBLIT is not set
698# CONFIG_FB_SOFT_CURSOR is not set 706# CONFIG_FB_SOFT_CURSOR is not set
707# CONFIG_FB_MACMODES is not set
699CONFIG_FB_MODE_HELPERS=y 708CONFIG_FB_MODE_HELPERS=y
700# CONFIG_FB_TILEBLITTING is not set 709# CONFIG_FB_TILEBLITTING is not set
710# CONFIG_FB_S1D13XXX is not set
701# CONFIG_FB_VIRTUAL is not set 711# CONFIG_FB_VIRTUAL is not set
702 712
703# 713#
@@ -782,7 +792,6 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
782# 792#
783CONFIG_PROC_FS=y 793CONFIG_PROC_FS=y
784CONFIG_SYSFS=y 794CONFIG_SYSFS=y
785# CONFIG_DEVFS_FS is not set
786# CONFIG_DEVPTS_FS_XATTR is not set 795# CONFIG_DEVPTS_FS_XATTR is not set
787# CONFIG_TMPFS is not set 796# CONFIG_TMPFS is not set
788# CONFIG_HUGETLBFS is not set 797# CONFIG_HUGETLBFS is not set
diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile
index 4a2af55e134b..3e1b0327e4d7 100644
--- a/arch/arm/kernel/Makefile
+++ b/arch/arm/kernel/Makefile
@@ -6,7 +6,7 @@ AFLAGS_head.o := -DTEXTADDR=$(TEXTADDR) -DDATAADDR=$(DATAADDR)
6 6
7# Object file lists. 7# Object file lists.
8 8
9obj-y := arch.o compat.o dma.o entry-armv.o entry-common.o irq.o \ 9obj-y := compat.o dma.o entry-armv.o entry-common.o irq.o \
10 process.o ptrace.o semaphore.o setup.o signal.o sys_arm.o \ 10 process.o ptrace.o semaphore.o setup.o signal.o sys_arm.o \
11 time.o traps.o 11 time.o traps.o
12 12
diff --git a/arch/arm/kernel/arch.c b/arch/arm/kernel/arch.c
deleted file mode 100644
index 4e02fbeb10a6..000000000000
--- a/arch/arm/kernel/arch.c
+++ /dev/null
@@ -1,46 +0,0 @@
1/*
2 * linux/arch/arm/kernel/arch.c
3 *
4 * Architecture specific fixups.
5 */
6#include <linux/config.h>
7#include <linux/init.h>
8#include <linux/types.h>
9
10#include <asm/elf.h>
11#include <asm/page.h>
12#include <asm/setup.h>
13#include <asm/mach/arch.h>
14
15unsigned int vram_size;
16
17#ifdef CONFIG_ARCH_ACORN
18
19unsigned int memc_ctrl_reg;
20unsigned int number_mfm_drives;
21
22static int __init parse_tag_acorn(const struct tag *tag)
23{
24 memc_ctrl_reg = tag->u.acorn.memc_control_reg;
25 number_mfm_drives = tag->u.acorn.adfsdrives;
26
27 switch (tag->u.acorn.vram_pages) {
28 case 512:
29 vram_size += PAGE_SIZE * 256;
30 case 256:
31 vram_size += PAGE_SIZE * 256;
32 default:
33 break;
34 }
35#if 0
36 if (vram_size) {
37 desc->video_start = 0x02000000;
38 desc->video_end = 0x02000000 + vram_size;
39 }
40#endif
41 return 0;
42}
43
44__tagtable(ATAG_ACORN, parse_tag_acorn);
45
46#endif
diff --git a/arch/arm/kernel/armksyms.c b/arch/arm/kernel/armksyms.c
index 4c38bd8bc298..b713c44c6fb4 100644
--- a/arch/arm/kernel/armksyms.c
+++ b/arch/arm/kernel/armksyms.c
@@ -30,9 +30,6 @@ extern void __lshrdi3(void);
30extern void __modsi3(void); 30extern void __modsi3(void);
31extern void __muldi3(void); 31extern void __muldi3(void);
32extern void __ucmpdi2(void); 32extern void __ucmpdi2(void);
33extern void __udivdi3(void);
34extern void __umoddi3(void);
35extern void __udivmoddi4(void);
36extern void __udivsi3(void); 33extern void __udivsi3(void);
37extern void __umodsi3(void); 34extern void __umodsi3(void);
38extern void __do_div64(void); 35extern void __do_div64(void);
@@ -134,9 +131,6 @@ EXPORT_SYMBOL(__lshrdi3);
134EXPORT_SYMBOL(__modsi3); 131EXPORT_SYMBOL(__modsi3);
135EXPORT_SYMBOL(__muldi3); 132EXPORT_SYMBOL(__muldi3);
136EXPORT_SYMBOL(__ucmpdi2); 133EXPORT_SYMBOL(__ucmpdi2);
137EXPORT_SYMBOL(__udivdi3);
138EXPORT_SYMBOL(__umoddi3);
139EXPORT_SYMBOL(__udivmoddi4);
140EXPORT_SYMBOL(__udivsi3); 134EXPORT_SYMBOL(__udivsi3);
141EXPORT_SYMBOL(__umodsi3); 135EXPORT_SYMBOL(__umodsi3);
142EXPORT_SYMBOL(__do_div64); 136EXPORT_SYMBOL(__do_div64);
diff --git a/arch/arm/kernel/ecard.c b/arch/arm/kernel/ecard.c
index 3dc15b131f53..6540db691338 100644
--- a/arch/arm/kernel/ecard.c
+++ b/arch/arm/kernel/ecard.c
@@ -866,19 +866,19 @@ static struct expansion_card *__init ecard_alloc_card(int type, int slot)
866 return ec; 866 return ec;
867} 867}
868 868
869static ssize_t ecard_show_irq(struct device *dev, char *buf) 869static ssize_t ecard_show_irq(struct device *dev, struct device_attribute *attr, char *buf)
870{ 870{
871 struct expansion_card *ec = ECARD_DEV(dev); 871 struct expansion_card *ec = ECARD_DEV(dev);
872 return sprintf(buf, "%u\n", ec->irq); 872 return sprintf(buf, "%u\n", ec->irq);
873} 873}
874 874
875static ssize_t ecard_show_dma(struct device *dev, char *buf) 875static ssize_t ecard_show_dma(struct device *dev, struct device_attribute *attr, char *buf)
876{ 876{
877 struct expansion_card *ec = ECARD_DEV(dev); 877 struct expansion_card *ec = ECARD_DEV(dev);
878 return sprintf(buf, "%u\n", ec->dma); 878 return sprintf(buf, "%u\n", ec->dma);
879} 879}
880 880
881static ssize_t ecard_show_resources(struct device *dev, char *buf) 881static ssize_t ecard_show_resources(struct device *dev, struct device_attribute *attr, char *buf)
882{ 882{
883 struct expansion_card *ec = ECARD_DEV(dev); 883 struct expansion_card *ec = ECARD_DEV(dev);
884 char *str = buf; 884 char *str = buf;
@@ -893,19 +893,19 @@ static ssize_t ecard_show_resources(struct device *dev, char *buf)
893 return str - buf; 893 return str - buf;
894} 894}
895 895
896static ssize_t ecard_show_vendor(struct device *dev, char *buf) 896static ssize_t ecard_show_vendor(struct device *dev, struct device_attribute *attr, char *buf)
897{ 897{
898 struct expansion_card *ec = ECARD_DEV(dev); 898 struct expansion_card *ec = ECARD_DEV(dev);
899 return sprintf(buf, "%u\n", ec->cid.manufacturer); 899 return sprintf(buf, "%u\n", ec->cid.manufacturer);
900} 900}
901 901
902static ssize_t ecard_show_device(struct device *dev, char *buf) 902static ssize_t ecard_show_device(struct device *dev, struct device_attribute *attr, char *buf)
903{ 903{
904 struct expansion_card *ec = ECARD_DEV(dev); 904 struct expansion_card *ec = ECARD_DEV(dev);
905 return sprintf(buf, "%u\n", ec->cid.product); 905 return sprintf(buf, "%u\n", ec->cid.product);
906} 906}
907 907
908static ssize_t ecard_show_type(struct device *dev, char *buf) 908static ssize_t ecard_show_type(struct device *dev, struct device_attribute *attr, char *buf)
909{ 909{
910 struct expansion_card *ec = ECARD_DEV(dev); 910 struct expansion_card *ec = ECARD_DEV(dev);
911 return sprintf(buf, "%s\n", ec->type == ECARD_EASI ? "EASI" : "IOC"); 911 return sprintf(buf, "%s\n", ec->type == ECARD_EASI ? "EASI" : "IOC");
diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c
index ff187f4308f0..395137a8fad2 100644
--- a/arch/arm/kernel/irq.c
+++ b/arch/arm/kernel/irq.c
@@ -4,6 +4,10 @@
4 * Copyright (C) 1992 Linus Torvalds 4 * Copyright (C) 1992 Linus Torvalds
5 * Modifications for ARM processor Copyright (C) 1995-2000 Russell King. 5 * Modifications for ARM processor Copyright (C) 1995-2000 Russell King.
6 * 6 *
7 * Support for Dynamic Tick Timer Copyright (C) 2004-2005 Nokia Corporation.
8 * Dynamic Tick Timer written by Tony Lindgren <tony@atomide.com> and
9 * Tuukka Tikkanen <tuukka.tikkanen@elektrobit.com>.
10 *
7 * This program is free software; you can redistribute it and/or modify 11 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as 12 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation. 13 * published by the Free Software Foundation.
@@ -37,6 +41,7 @@
37#include <asm/irq.h> 41#include <asm/irq.h>
38#include <asm/system.h> 42#include <asm/system.h>
39#include <asm/mach/irq.h> 43#include <asm/mach/irq.h>
44#include <asm/mach/time.h>
40 45
41/* 46/*
42 * Maximum IRQ count. Currently, this is arbitary. However, it should 47 * Maximum IRQ count. Currently, this is arbitary. However, it should
@@ -329,6 +334,15 @@ __do_irq(unsigned int irq, struct irqaction *action, struct pt_regs *regs)
329 334
330 spin_unlock(&irq_controller_lock); 335 spin_unlock(&irq_controller_lock);
331 336
337#ifdef CONFIG_NO_IDLE_HZ
338 if (!(action->flags & SA_TIMER) && system_timer->dyn_tick != NULL) {
339 write_seqlock(&xtime_lock);
340 if (system_timer->dyn_tick->state & DYN_TICK_ENABLED)
341 system_timer->dyn_tick->handler(irq, 0, regs);
342 write_sequnlock(&xtime_lock);
343 }
344#endif
345
332 if (!(action->flags & SA_INTERRUPT)) 346 if (!(action->flags & SA_INTERRUPT))
333 local_irq_enable(); 347 local_irq_enable();
334 348
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
index 8f146a4b4752..bbea636ff687 100644
--- a/arch/arm/kernel/process.c
+++ b/arch/arm/kernel/process.c
@@ -32,6 +32,7 @@
32#include <asm/leds.h> 32#include <asm/leds.h>
33#include <asm/processor.h> 33#include <asm/processor.h>
34#include <asm/uaccess.h> 34#include <asm/uaccess.h>
35#include <asm/mach/time.h>
35 36
36extern const char *processor_modes[]; 37extern const char *processor_modes[];
37extern void setup_mm_for_reboot(char mode); 38extern void setup_mm_for_reboot(char mode);
@@ -85,8 +86,10 @@ EXPORT_SYMBOL(pm_power_off);
85void default_idle(void) 86void default_idle(void)
86{ 87{
87 local_irq_disable(); 88 local_irq_disable();
88 if (!need_resched() && !hlt_counter) 89 if (!need_resched() && !hlt_counter) {
90 timer_dyn_reprogram();
89 arch_idle(); 91 arch_idle();
92 }
90 local_irq_enable(); 93 local_irq_enable();
91} 94}
92 95
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
index 9fed5fa194d9..35b7273cfdb4 100644
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
@@ -359,7 +359,8 @@ void cpu_init(void)
359 "I" (offsetof(struct stack, abt[0])), 359 "I" (offsetof(struct stack, abt[0])),
360 "I" (PSR_F_BIT | PSR_I_BIT | UND_MODE), 360 "I" (PSR_F_BIT | PSR_I_BIT | UND_MODE),
361 "I" (offsetof(struct stack, und[0])), 361 "I" (offsetof(struct stack, und[0])),
362 "I" (PSR_F_BIT | PSR_I_BIT | SVC_MODE)); 362 "I" (PSR_F_BIT | PSR_I_BIT | SVC_MODE)
363 : "r14");
363} 364}
364 365
365static struct machine_desc * __init setup_machine(unsigned int nr) 366static struct machine_desc * __init setup_machine(unsigned int nr)
@@ -395,6 +396,20 @@ static void __init early_initrd(char **p)
395} 396}
396__early_param("initrd=", early_initrd); 397__early_param("initrd=", early_initrd);
397 398
399static void __init add_memory(unsigned long start, unsigned long size)
400{
401 /*
402 * Ensure that start/size are aligned to a page boundary.
403 * Size is appropriately rounded down, start is rounded up.
404 */
405 size -= start & ~PAGE_MASK;
406
407 meminfo.bank[meminfo.nr_banks].start = PAGE_ALIGN(start);
408 meminfo.bank[meminfo.nr_banks].size = size & PAGE_MASK;
409 meminfo.bank[meminfo.nr_banks].node = PHYS_TO_NID(start);
410 meminfo.nr_banks += 1;
411}
412
398/* 413/*
399 * Pick out the memory size. We look for mem=size@start, 414 * Pick out the memory size. We look for mem=size@start,
400 * where start and size are "size[KkMm]" 415 * where start and size are "size[KkMm]"
@@ -419,10 +434,7 @@ static void __init early_mem(char **p)
419 if (**p == '@') 434 if (**p == '@')
420 start = memparse(*p + 1, p); 435 start = memparse(*p + 1, p);
421 436
422 meminfo.bank[meminfo.nr_banks].start = start; 437 add_memory(start, size);
423 meminfo.bank[meminfo.nr_banks].size = size;
424 meminfo.bank[meminfo.nr_banks].node = PHYS_TO_NID(start);
425 meminfo.nr_banks += 1;
426} 438}
427__early_param("mem=", early_mem); 439__early_param("mem=", early_mem);
428 440
@@ -564,11 +576,7 @@ static int __init parse_tag_mem32(const struct tag *tag)
564 tag->u.mem.start, tag->u.mem.size / 1024); 576 tag->u.mem.start, tag->u.mem.size / 1024);
565 return -EINVAL; 577 return -EINVAL;
566 } 578 }
567 meminfo.bank[meminfo.nr_banks].start = tag->u.mem.start; 579 add_memory(tag->u.mem.start, tag->u.mem.size);
568 meminfo.bank[meminfo.nr_banks].size = tag->u.mem.size;
569 meminfo.bank[meminfo.nr_banks].node = PHYS_TO_NID(tag->u.mem.start);
570 meminfo.nr_banks += 1;
571
572 return 0; 580 return 0;
573} 581}
574 582
diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
index 931919fd5121..5e435e42dacd 100644
--- a/arch/arm/kernel/signal.c
+++ b/arch/arm/kernel/signal.c
@@ -19,6 +19,7 @@
19#include <asm/unistd.h> 19#include <asm/unistd.h>
20 20
21#include "ptrace.h" 21#include "ptrace.h"
22#include "signal.h"
22 23
23#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) 24#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
24 25
@@ -35,7 +36,7 @@
35#define SWI_THUMB_SIGRETURN (0xdf00 << 16 | 0x2700 | (__NR_sigreturn - __NR_SYSCALL_BASE)) 36#define SWI_THUMB_SIGRETURN (0xdf00 << 16 | 0x2700 | (__NR_sigreturn - __NR_SYSCALL_BASE))
36#define SWI_THUMB_RT_SIGRETURN (0xdf00 << 16 | 0x2700 | (__NR_rt_sigreturn - __NR_SYSCALL_BASE)) 37#define SWI_THUMB_RT_SIGRETURN (0xdf00 << 16 | 0x2700 | (__NR_rt_sigreturn - __NR_SYSCALL_BASE))
37 38
38static const unsigned long retcodes[4] = { 39const unsigned long sigreturn_codes[4] = {
39 SWI_SYS_SIGRETURN, SWI_THUMB_SIGRETURN, 40 SWI_SYS_SIGRETURN, SWI_THUMB_SIGRETURN,
40 SWI_SYS_RT_SIGRETURN, SWI_THUMB_RT_SIGRETURN 41 SWI_SYS_RT_SIGRETURN, SWI_THUMB_RT_SIGRETURN
41}; 42};
@@ -500,17 +501,25 @@ setup_return(struct pt_regs *regs, struct k_sigaction *ka,
500 if (ka->sa.sa_flags & SA_SIGINFO) 501 if (ka->sa.sa_flags & SA_SIGINFO)
501 idx += 2; 502 idx += 2;
502 503
503 if (__put_user(retcodes[idx], rc)) 504 if (__put_user(sigreturn_codes[idx], rc))
504 return 1; 505 return 1;
505 506
506 /* 507 if (cpsr & MODE32_BIT) {
507 * Ensure that the instruction cache sees 508 /*
508 * the return code written onto the stack. 509 * 32-bit code can use the new high-page
509 */ 510 * signal return code support.
510 flush_icache_range((unsigned long)rc, 511 */
511 (unsigned long)(rc + 1)); 512 retcode = KERN_SIGRETURN_CODE + (idx << 2) + thumb;
512 513 } else {
513 retcode = ((unsigned long)rc) + thumb; 514 /*
515 * Ensure that the instruction cache sees
516 * the return code written onto the stack.
517 */
518 flush_icache_range((unsigned long)rc,
519 (unsigned long)(rc + 1));
520
521 retcode = ((unsigned long)rc) + thumb;
522 }
514 } 523 }
515 524
516 regs->ARM_r0 = usig; 525 regs->ARM_r0 = usig;
@@ -688,7 +697,7 @@ static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall)
688 if (!user_mode(regs)) 697 if (!user_mode(regs))
689 return 0; 698 return 0;
690 699
691 if (try_to_freeze(0)) 700 if (try_to_freeze())
692 goto no_signal; 701 goto no_signal;
693 702
694 if (current->ptrace & PT_SINGLESTEP) 703 if (current->ptrace & PT_SINGLESTEP)
diff --git a/arch/arm/kernel/signal.h b/arch/arm/kernel/signal.h
new file mode 100644
index 000000000000..91d26faca62b
--- /dev/null
+++ b/arch/arm/kernel/signal.h
@@ -0,0 +1,12 @@
1/*
2 * linux/arch/arm/kernel/signal.h
3 *
4 * Copyright (C) 2005 Russell King.
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#define KERN_SIGRETURN_CODE 0xffff0500
11
12extern const unsigned long sigreturn_codes[4];
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
index 45ed036336e0..a931409c8fe4 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -145,7 +145,8 @@ int __init __cpu_up(unsigned int cpu)
145 pgd_free(pgd); 145 pgd_free(pgd);
146 146
147 if (ret) { 147 if (ret) {
148 printk(KERN_CRIT "cpu_up: processor %d failed to boot\n", cpu); 148 printk(KERN_CRIT "CPU%u: processor failed to boot\n", cpu);
149
149 /* 150 /*
150 * FIXME: We need to clean up the new idle thread. --rmk 151 * FIXME: We need to clean up the new idle thread. --rmk
151 */ 152 */
@@ -501,3 +502,126 @@ int __init setup_profiling_timer(unsigned int multiplier)
501{ 502{
502 return -EINVAL; 503 return -EINVAL;
503} 504}
505
506static int
507on_each_cpu_mask(void (*func)(void *), void *info, int retry, int wait,
508 cpumask_t mask)
509{
510 int ret = 0;
511
512 preempt_disable();
513
514 ret = smp_call_function_on_cpu(func, info, retry, wait, mask);
515 if (cpu_isset(smp_processor_id(), mask))
516 func(info);
517
518 preempt_enable();
519
520 return ret;
521}
522
523/**********************************************************************/
524
525/*
526 * TLB operations
527 */
528struct tlb_args {
529 struct vm_area_struct *ta_vma;
530 unsigned long ta_start;
531 unsigned long ta_end;
532};
533
534static inline void ipi_flush_tlb_all(void *ignored)
535{
536 local_flush_tlb_all();
537}
538
539static inline void ipi_flush_tlb_mm(void *arg)
540{
541 struct mm_struct *mm = (struct mm_struct *)arg;
542
543 local_flush_tlb_mm(mm);
544}
545
546static inline void ipi_flush_tlb_page(void *arg)
547{
548 struct tlb_args *ta = (struct tlb_args *)arg;
549
550 local_flush_tlb_page(ta->ta_vma, ta->ta_start);
551}
552
553static inline void ipi_flush_tlb_kernel_page(void *arg)
554{
555 struct tlb_args *ta = (struct tlb_args *)arg;
556
557 local_flush_tlb_kernel_page(ta->ta_start);
558}
559
560static inline void ipi_flush_tlb_range(void *arg)
561{
562 struct tlb_args *ta = (struct tlb_args *)arg;
563
564 local_flush_tlb_range(ta->ta_vma, ta->ta_start, ta->ta_end);
565}
566
567static inline void ipi_flush_tlb_kernel_range(void *arg)
568{
569 struct tlb_args *ta = (struct tlb_args *)arg;
570
571 local_flush_tlb_kernel_range(ta->ta_start, ta->ta_end);
572}
573
574void flush_tlb_all(void)
575{
576 on_each_cpu(ipi_flush_tlb_all, NULL, 1, 1);
577}
578
579void flush_tlb_mm(struct mm_struct *mm)
580{
581 cpumask_t mask = mm->cpu_vm_mask;
582
583 on_each_cpu_mask(ipi_flush_tlb_mm, mm, 1, 1, mask);
584}
585
586void flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)
587{
588 cpumask_t mask = vma->vm_mm->cpu_vm_mask;
589 struct tlb_args ta;
590
591 ta.ta_vma = vma;
592 ta.ta_start = uaddr;
593
594 on_each_cpu_mask(ipi_flush_tlb_page, &ta, 1, 1, mask);
595}
596
597void flush_tlb_kernel_page(unsigned long kaddr)
598{
599 struct tlb_args ta;
600
601 ta.ta_start = kaddr;
602
603 on_each_cpu(ipi_flush_tlb_kernel_page, &ta, 1, 1);
604}
605
606void flush_tlb_range(struct vm_area_struct *vma,
607 unsigned long start, unsigned long end)
608{
609 cpumask_t mask = vma->vm_mm->cpu_vm_mask;
610 struct tlb_args ta;
611
612 ta.ta_vma = vma;
613 ta.ta_start = start;
614 ta.ta_end = end;
615
616 on_each_cpu_mask(ipi_flush_tlb_range, &ta, 1, 1, mask);
617}
618
619void flush_tlb_kernel_range(unsigned long start, unsigned long end)
620{
621 struct tlb_args ta;
622
623 ta.ta_start = start;
624 ta.ta_end = end;
625
626 on_each_cpu(ipi_flush_tlb_kernel_range, &ta, 1, 1);
627}
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c
index c232f24f4a60..1b7fcd50c3e2 100644
--- a/arch/arm/kernel/time.c
+++ b/arch/arm/kernel/time.c
@@ -381,6 +381,99 @@ static struct sysdev_class timer_sysclass = {
381 .resume = timer_resume, 381 .resume = timer_resume,
382}; 382};
383 383
384#ifdef CONFIG_NO_IDLE_HZ
385static int timer_dyn_tick_enable(void)
386{
387 struct dyn_tick_timer *dyn_tick = system_timer->dyn_tick;
388 unsigned long flags;
389 int ret = -ENODEV;
390
391 if (dyn_tick) {
392 write_seqlock_irqsave(&xtime_lock, flags);
393 ret = 0;
394 if (!(dyn_tick->state & DYN_TICK_ENABLED)) {
395 ret = dyn_tick->enable();
396
397 if (ret == 0)
398 dyn_tick->state |= DYN_TICK_ENABLED;
399 }
400 write_sequnlock_irqrestore(&xtime_lock, flags);
401 }
402
403 return ret;
404}
405
406static int timer_dyn_tick_disable(void)
407{
408 struct dyn_tick_timer *dyn_tick = system_timer->dyn_tick;
409 unsigned long flags;
410 int ret = -ENODEV;
411
412 if (dyn_tick) {
413 write_seqlock_irqsave(&xtime_lock, flags);
414 ret = 0;
415 if (dyn_tick->state & DYN_TICK_ENABLED) {
416 ret = dyn_tick->disable();
417
418 if (ret == 0)
419 dyn_tick->state &= ~DYN_TICK_ENABLED;
420 }
421 write_sequnlock_irqrestore(&xtime_lock, flags);
422 }
423
424 return ret;
425}
426
427/*
428 * Reprogram the system timer for at least the calculated time interval.
429 * This function should be called from the idle thread with IRQs disabled,
430 * immediately before sleeping.
431 */
432void timer_dyn_reprogram(void)
433{
434 struct dyn_tick_timer *dyn_tick = system_timer->dyn_tick;
435
436 write_seqlock(&xtime_lock);
437 if (dyn_tick->state & DYN_TICK_ENABLED)
438 dyn_tick->reprogram(next_timer_interrupt() - jiffies);
439 write_sequnlock(&xtime_lock);
440}
441
442static ssize_t timer_show_dyn_tick(struct sys_device *dev, char *buf)
443{
444 return sprintf(buf, "%i\n",
445 (system_timer->dyn_tick->state & DYN_TICK_ENABLED) >> 1);
446}
447
448static ssize_t timer_set_dyn_tick(struct sys_device *dev, const char *buf,
449 size_t count)
450{
451 unsigned int enable = simple_strtoul(buf, NULL, 2);
452
453 if (enable)
454 timer_dyn_tick_enable();
455 else
456 timer_dyn_tick_disable();
457
458 return count;
459}
460static SYSDEV_ATTR(dyn_tick, 0644, timer_show_dyn_tick, timer_set_dyn_tick);
461
462/*
463 * dyntick=enable|disable
464 */
465static char dyntick_str[4] __initdata = "";
466
467static int __init dyntick_setup(char *str)
468{
469 if (str)
470 strlcpy(dyntick_str, str, sizeof(dyntick_str));
471 return 1;
472}
473
474__setup("dyntick=", dyntick_setup);
475#endif
476
384static int __init timer_init_sysfs(void) 477static int __init timer_init_sysfs(void)
385{ 478{
386 int ret = sysdev_class_register(&timer_sysclass); 479 int ret = sysdev_class_register(&timer_sysclass);
@@ -388,6 +481,20 @@ static int __init timer_init_sysfs(void)
388 system_timer->dev.cls = &timer_sysclass; 481 system_timer->dev.cls = &timer_sysclass;
389 ret = sysdev_register(&system_timer->dev); 482 ret = sysdev_register(&system_timer->dev);
390 } 483 }
484
485#ifdef CONFIG_NO_IDLE_HZ
486 if (ret == 0 && system_timer->dyn_tick) {
487 ret = sysdev_create_file(&system_timer->dev, &attr_dyn_tick);
488
489 /*
490 * Turn on dynamic tick after calibrate delay
491 * for correct bogomips
492 */
493 if (ret == 0 && dyntick_str[0] == 'e')
494 ret = timer_dyn_tick_enable();
495 }
496#endif
497
391 return ret; 498 return ret;
392} 499}
393 500
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
index 45d2a032d890..df2cb06ce424 100644
--- a/arch/arm/kernel/traps.c
+++ b/arch/arm/kernel/traps.c
@@ -30,6 +30,7 @@
30#include <asm/traps.h> 30#include <asm/traps.h>
31 31
32#include "ptrace.h" 32#include "ptrace.h"
33#include "signal.h"
33 34
34const char *processor_modes[]= 35const char *processor_modes[]=
35{ "USER_26", "FIQ_26" , "IRQ_26" , "SVC_26" , "UK4_26" , "UK5_26" , "UK6_26" , "UK7_26" , 36{ "USER_26", "FIQ_26" , "IRQ_26" , "SVC_26" , "UK4_26" , "UK5_26" , "UK6_26" , "UK7_26" ,
@@ -229,16 +230,8 @@ NORET_TYPE void die(const char *str, struct pt_regs *regs, int err)
229 do_exit(SIGSEGV); 230 do_exit(SIGSEGV);
230} 231}
231 232
232void die_if_kernel(const char *str, struct pt_regs *regs, int err) 233void notify_die(const char *str, struct pt_regs *regs, struct siginfo *info,
233{ 234 unsigned long err, unsigned long trap)
234 if (user_mode(regs))
235 return;
236
237 die(str, regs, err);
238}
239
240static void notify_die(const char *str, struct pt_regs *regs, siginfo_t *info,
241 unsigned long err, unsigned long trap)
242{ 235{
243 if (user_mode(regs)) { 236 if (user_mode(regs)) {
244 current->thread.error_code = err; 237 current->thread.error_code = err;
@@ -683,6 +676,14 @@ void __init trap_init(void)
683 memcpy((void *)0xffff0000, __vectors_start, __vectors_end - __vectors_start); 676 memcpy((void *)0xffff0000, __vectors_start, __vectors_end - __vectors_start);
684 memcpy((void *)0xffff0200, __stubs_start, __stubs_end - __stubs_start); 677 memcpy((void *)0xffff0200, __stubs_start, __stubs_end - __stubs_start);
685 memcpy((void *)0xffff1000 - kuser_sz, __kuser_helper_start, kuser_sz); 678 memcpy((void *)0xffff1000 - kuser_sz, __kuser_helper_start, kuser_sz);
679
680 /*
681 * Copy signal return handlers into the vector page, and
682 * set sigreturn to be a pointer to these.
683 */
684 memcpy((void *)KERN_SIGRETURN_CODE, sigreturn_codes,
685 sizeof(sigreturn_codes));
686
686 flush_icache_range(0xffff0000, 0xffff0000 + PAGE_SIZE); 687 flush_icache_range(0xffff0000, 0xffff0000 + PAGE_SIZE);
687 modify_domain(DOMAIN_USER, DOMAIN_CLIENT); 688 modify_domain(DOMAIN_USER, DOMAIN_CLIENT);
688} 689}
diff --git a/arch/arm/lib/Makefile b/arch/arm/lib/Makefile
index c0e65833ffc4..8725d63e4219 100644
--- a/arch/arm/lib/Makefile
+++ b/arch/arm/lib/Makefile
@@ -11,7 +11,7 @@ lib-y := backtrace.o changebit.o csumipv6.o csumpartial.o \
11 strnlen_user.o strchr.o strrchr.o testchangebit.o \ 11 strnlen_user.o strchr.o strrchr.o testchangebit.o \
12 testclearbit.o testsetbit.o uaccess.o getuser.o \ 12 testclearbit.o testsetbit.o uaccess.o getuser.o \
13 putuser.o ashldi3.o ashrdi3.o lshrdi3.o muldi3.o \ 13 putuser.o ashldi3.o ashrdi3.o lshrdi3.o muldi3.o \
14 ucmpdi2.o udivdi3.o lib1funcs.o div64.o \ 14 ucmpdi2.o lib1funcs.o div64.o \
15 io-readsb.o io-writesb.o io-readsl.o io-writesl.o 15 io-readsb.o io-writesb.o io-readsl.o io-writesl.o
16 16
17ifeq ($(CONFIG_CPU_32v3),y) 17ifeq ($(CONFIG_CPU_32v3),y)
diff --git a/arch/arm/lib/ashldi3.c b/arch/arm/lib/ashldi3.c
index 130f5a839669..b62875cfd8f8 100644
--- a/arch/arm/lib/ashldi3.c
+++ b/arch/arm/lib/ashldi3.c
@@ -31,31 +31,26 @@ Boston, MA 02111-1307, USA. */
31 31
32#include "gcclib.h" 32#include "gcclib.h"
33 33
34DItype 34s64 __ashldi3(s64 u, int b)
35__ashldi3 (DItype u, word_type b)
36{ 35{
37 DIunion w; 36 DIunion w;
38 word_type bm; 37 int bm;
39 DIunion uu; 38 DIunion uu;
40 39
41 if (b == 0) 40 if (b == 0)
42 return u; 41 return u;
43 42
44 uu.ll = u; 43 uu.ll = u;
45 44
46 bm = (sizeof (SItype) * BITS_PER_UNIT) - b; 45 bm = (sizeof(s32) * BITS_PER_UNIT) - b;
47 if (bm <= 0) 46 if (bm <= 0) {
48 { 47 w.s.low = 0;
49 w.s.low = 0; 48 w.s.high = (u32) uu.s.low << -bm;
50 w.s.high = (USItype)uu.s.low << -bm; 49 } else {
51 } 50 u32 carries = (u32) uu.s.low >> bm;
52 else 51 w.s.low = (u32) uu.s.low << b;
53 { 52 w.s.high = ((u32) uu.s.high << b) | carries;
54 USItype carries = (USItype)uu.s.low >> bm; 53 }
55 w.s.low = (USItype)uu.s.low << b; 54
56 w.s.high = ((USItype)uu.s.high << b) | carries; 55 return w.ll;
57 }
58
59 return w.ll;
60} 56}
61
diff --git a/arch/arm/lib/ashrdi3.c b/arch/arm/lib/ashrdi3.c
index 71625d218f8d..9a8600a7543f 100644
--- a/arch/arm/lib/ashrdi3.c
+++ b/arch/arm/lib/ashrdi3.c
@@ -31,31 +31,27 @@ Boston, MA 02111-1307, USA. */
31 31
32#include "gcclib.h" 32#include "gcclib.h"
33 33
34DItype 34s64 __ashrdi3(s64 u, int b)
35__ashrdi3 (DItype u, word_type b)
36{ 35{
37 DIunion w; 36 DIunion w;
38 word_type bm; 37 int bm;
39 DIunion uu; 38 DIunion uu;
40 39
41 if (b == 0) 40 if (b == 0)
42 return u; 41 return u;
43 42
44 uu.ll = u; 43 uu.ll = u;
45 44
46 bm = (sizeof (SItype) * BITS_PER_UNIT) - b; 45 bm = (sizeof(s32) * BITS_PER_UNIT) - b;
47 if (bm <= 0) 46 if (bm <= 0) {
48 { 47 /* w.s.high = 1..1 or 0..0 */
49 /* w.s.high = 1..1 or 0..0 */ 48 w.s.high = uu.s.high >> (sizeof(s32) * BITS_PER_UNIT - 1);
50 w.s.high = uu.s.high >> (sizeof (SItype) * BITS_PER_UNIT - 1); 49 w.s.low = uu.s.high >> -bm;
51 w.s.low = uu.s.high >> -bm; 50 } else {
52 } 51 u32 carries = (u32) uu.s.high << bm;
53 else 52 w.s.high = uu.s.high >> b;
54 { 53 w.s.low = ((u32) uu.s.low >> b) | carries;
55 USItype carries = (USItype)uu.s.high << bm; 54 }
56 w.s.high = uu.s.high >> b; 55
57 w.s.low = ((USItype)uu.s.low >> b) | carries; 56 return w.ll;
58 }
59
60 return w.ll;
61} 57}
diff --git a/arch/arm/lib/gcclib.h b/arch/arm/lib/gcclib.h
index 65314a3d9e27..8b6dcc656de7 100644
--- a/arch/arm/lib/gcclib.h
+++ b/arch/arm/lib/gcclib.h
@@ -1,25 +1,22 @@
1/* gcclib.h -- definitions for various functions 'borrowed' from gcc-2.95.3 */ 1/* gcclib.h -- definitions for various functions 'borrowed' from gcc-2.95.3 */
2/* I Molton 29/07/01 */ 2/* I Molton 29/07/01 */
3 3
4#define BITS_PER_UNIT 8 4#include <linux/types.h>
5#define SI_TYPE_SIZE (sizeof (SItype) * BITS_PER_UNIT)
6 5
7typedef unsigned int UQItype __attribute__ ((mode (QI))); 6#define BITS_PER_UNIT 8
8typedef int SItype __attribute__ ((mode (SI))); 7#define SI_TYPE_SIZE (sizeof(s32) * BITS_PER_UNIT)
9typedef unsigned int USItype __attribute__ ((mode (SI)));
10typedef int DItype __attribute__ ((mode (DI)));
11typedef int word_type __attribute__ ((mode (__word__)));
12typedef unsigned int UDItype __attribute__ ((mode (DI)));
13 8
14#ifdef __ARMEB__ 9#ifdef __ARMEB__
15 struct DIstruct {SItype high, low;}; 10struct DIstruct {
11 s32 high, low;
12};
16#else 13#else
17 struct DIstruct {SItype low, high;}; 14struct DIstruct {
15 s32 low, high;
16};
18#endif 17#endif
19 18
20typedef union 19typedef union {
21{ 20 struct DIstruct s;
22 struct DIstruct s; 21 s64 ll;
23 DItype ll;
24} DIunion; 22} DIunion;
25
diff --git a/arch/arm/lib/longlong.h b/arch/arm/lib/longlong.h
deleted file mode 100644
index 179eea4edc35..000000000000
--- a/arch/arm/lib/longlong.h
+++ /dev/null
@@ -1,183 +0,0 @@
1/* longlong.h -- based on code from gcc-2.95.3
2
3 definitions for mixed size 32/64 bit arithmetic.
4 Copyright (C) 1991, 92, 94, 95, 96, 1997, 1998 Free Software Foundation, Inc.
5
6 This definition file is free software; you can redistribute it
7 and/or modify it under the terms of the GNU General Public
8 License as published by the Free Software Foundation; either
9 version 2, or (at your option) any later version.
10
11 This definition file is distributed in the hope that it will be
12 useful, but WITHOUT ANY WARRANTY; without even the implied
13 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14 See the GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
20
21/* Borrowed from GCC 2.95.3, I Molton 29/07/01 */
22
23#ifndef SI_TYPE_SIZE
24#define SI_TYPE_SIZE 32
25#endif
26
27#define __BITS4 (SI_TYPE_SIZE / 4)
28#define __ll_B (1L << (SI_TYPE_SIZE / 2))
29#define __ll_lowpart(t) ((USItype) (t) % __ll_B)
30#define __ll_highpart(t) ((USItype) (t) / __ll_B)
31
32/* Define auxiliary asm macros.
33
34 1) umul_ppmm(high_prod, low_prod, multipler, multiplicand)
35 multiplies two USItype integers MULTIPLER and MULTIPLICAND,
36 and generates a two-part USItype product in HIGH_PROD and
37 LOW_PROD.
38
39 2) __umulsidi3(a,b) multiplies two USItype integers A and B,
40 and returns a UDItype product. This is just a variant of umul_ppmm.
41
42 3) udiv_qrnnd(quotient, remainder, high_numerator, low_numerator,
43 denominator) divides a two-word unsigned integer, composed by the
44 integers HIGH_NUMERATOR and LOW_NUMERATOR, by DENOMINATOR and
45 places the quotient in QUOTIENT and the remainder in REMAINDER.
46 HIGH_NUMERATOR must be less than DENOMINATOR for correct operation.
47 If, in addition, the most significant bit of DENOMINATOR must be 1,
48 then the pre-processor symbol UDIV_NEEDS_NORMALIZATION is defined to 1.
49
50 4) sdiv_qrnnd(quotient, remainder, high_numerator, low_numerator,
51 denominator). Like udiv_qrnnd but the numbers are signed. The
52 quotient is rounded towards 0.
53
54 5) count_leading_zeros(count, x) counts the number of zero-bits from
55 the msb to the first non-zero bit. This is the number of steps X
56 needs to be shifted left to set the msb. Undefined for X == 0.
57
58 6) add_ssaaaa(high_sum, low_sum, high_addend_1, low_addend_1,
59 high_addend_2, low_addend_2) adds two two-word unsigned integers,
60 composed by HIGH_ADDEND_1 and LOW_ADDEND_1, and HIGH_ADDEND_2 and
61 LOW_ADDEND_2 respectively. The result is placed in HIGH_SUM and
62 LOW_SUM. Overflow (i.e. carry out) is not stored anywhere, and is
63 lost.
64
65 7) sub_ddmmss(high_difference, low_difference, high_minuend,
66 low_minuend, high_subtrahend, low_subtrahend) subtracts two
67 two-word unsigned integers, composed by HIGH_MINUEND_1 and
68 LOW_MINUEND_1, and HIGH_SUBTRAHEND_2 and LOW_SUBTRAHEND_2
69 respectively. The result is placed in HIGH_DIFFERENCE and
70 LOW_DIFFERENCE. Overflow (i.e. carry out) is not stored anywhere,
71 and is lost.
72
73 If any of these macros are left undefined for a particular CPU,
74 C macros are used. */
75
76#if defined (__arm__)
77#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
78 __asm__ ("adds %1, %4, %5 \n\
79 adc %0, %2, %3" \
80 : "=r" ((USItype) (sh)), \
81 "=&r" ((USItype) (sl)) \
82 : "%r" ((USItype) (ah)), \
83 "rI" ((USItype) (bh)), \
84 "%r" ((USItype) (al)), \
85 "rI" ((USItype) (bl)))
86#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
87 __asm__ ("subs %1, %4, %5 \n\
88 sbc %0, %2, %3" \
89 : "=r" ((USItype) (sh)), \
90 "=&r" ((USItype) (sl)) \
91 : "r" ((USItype) (ah)), \
92 "rI" ((USItype) (bh)), \
93 "r" ((USItype) (al)), \
94 "rI" ((USItype) (bl)))
95#define umul_ppmm(xh, xl, a, b) \
96{register USItype __t0, __t1, __t2; \
97 __asm__ ("%@ Inlined umul_ppmm \n\
98 mov %2, %5, lsr #16 \n\
99 mov %0, %6, lsr #16 \n\
100 bic %3, %5, %2, lsl #16 \n\
101 bic %4, %6, %0, lsl #16 \n\
102 mul %1, %3, %4 \n\
103 mul %4, %2, %4 \n\
104 mul %3, %0, %3 \n\
105 mul %0, %2, %0 \n\
106 adds %3, %4, %3 \n\
107 addcs %0, %0, #65536 \n\
108 adds %1, %1, %3, lsl #16 \n\
109 adc %0, %0, %3, lsr #16" \
110 : "=&r" ((USItype) (xh)), \
111 "=r" ((USItype) (xl)), \
112 "=&r" (__t0), "=&r" (__t1), "=r" (__t2) \
113 : "r" ((USItype) (a)), \
114 "r" ((USItype) (b)));}
115#define UMUL_TIME 20
116#define UDIV_TIME 100
117#endif /* __arm__ */
118
119#define __umulsidi3(u, v) \
120 ({DIunion __w; \
121 umul_ppmm (__w.s.high, __w.s.low, u, v); \
122 __w.ll; })
123
124#define __udiv_qrnnd_c(q, r, n1, n0, d) \
125 do { \
126 USItype __d1, __d0, __q1, __q0; \
127 USItype __r1, __r0, __m; \
128 __d1 = __ll_highpart (d); \
129 __d0 = __ll_lowpart (d); \
130 \
131 __r1 = (n1) % __d1; \
132 __q1 = (n1) / __d1; \
133 __m = (USItype) __q1 * __d0; \
134 __r1 = __r1 * __ll_B | __ll_highpart (n0); \
135 if (__r1 < __m) \
136 { \
137 __q1--, __r1 += (d); \
138 if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\
139 if (__r1 < __m) \
140 __q1--, __r1 += (d); \
141 } \
142 __r1 -= __m; \
143 \
144 __r0 = __r1 % __d1; \
145 __q0 = __r1 / __d1; \
146 __m = (USItype) __q0 * __d0; \
147 __r0 = __r0 * __ll_B | __ll_lowpart (n0); \
148 if (__r0 < __m) \
149 { \
150 __q0--, __r0 += (d); \
151 if (__r0 >= (d)) \
152 if (__r0 < __m) \
153 __q0--, __r0 += (d); \
154 } \
155 __r0 -= __m; \
156 \
157 (q) = (USItype) __q1 * __ll_B | __q0; \
158 (r) = __r0; \
159 } while (0)
160
161#define UDIV_NEEDS_NORMALIZATION 1
162#define udiv_qrnnd __udiv_qrnnd_c
163
164#define count_leading_zeros(count, x) \
165 do { \
166 USItype __xr = (x); \
167 USItype __a; \
168 \
169 if (SI_TYPE_SIZE <= 32) \
170 { \
171 __a = __xr < ((USItype)1<<2*__BITS4) \
172 ? (__xr < ((USItype)1<<__BITS4) ? 0 : __BITS4) \
173 : (__xr < ((USItype)1<<3*__BITS4) ? 2*__BITS4 : 3*__BITS4); \
174 } \
175 else \
176 { \
177 for (__a = SI_TYPE_SIZE - 8; __a > 0; __a -= 8) \
178 if (((__xr >> __a) & 0xff) != 0) \
179 break; \
180 } \
181 \
182 (count) = SI_TYPE_SIZE - (__clz_tab[__xr >> __a] + __a); \
183 } while (0)
diff --git a/arch/arm/lib/lshrdi3.c b/arch/arm/lib/lshrdi3.c
index b666f1bad451..3681f49d2b6e 100644
--- a/arch/arm/lib/lshrdi3.c
+++ b/arch/arm/lib/lshrdi3.c
@@ -31,31 +31,26 @@ Boston, MA 02111-1307, USA. */
31 31
32#include "gcclib.h" 32#include "gcclib.h"
33 33
34DItype 34s64 __lshrdi3(s64 u, int b)
35__lshrdi3 (DItype u, word_type b)
36{ 35{
37 DIunion w; 36 DIunion w;
38 word_type bm; 37 int bm;
39 DIunion uu; 38 DIunion uu;
40 39
41 if (b == 0) 40 if (b == 0)
42 return u; 41 return u;
43 42
44 uu.ll = u; 43 uu.ll = u;
45 44
46 bm = (sizeof (SItype) * BITS_PER_UNIT) - b; 45 bm = (sizeof(s32) * BITS_PER_UNIT) - b;
47 if (bm <= 0) 46 if (bm <= 0) {
48 { 47 w.s.high = 0;
49 w.s.high = 0; 48 w.s.low = (u32) uu.s.high >> -bm;
50 w.s.low = (USItype)uu.s.high >> -bm; 49 } else {
51 } 50 u32 carries = (u32) uu.s.high << bm;
52 else 51 w.s.high = (u32) uu.s.high >> b;
53 { 52 w.s.low = ((u32) uu.s.low >> b) | carries;
54 USItype carries = (USItype)uu.s.high << bm; 53 }
55 w.s.high = (USItype)uu.s.high >> b; 54
56 w.s.low = ((USItype)uu.s.low >> b) | carries; 55 return w.ll;
57 }
58
59 return w.ll;
60} 56}
61
diff --git a/arch/arm/lib/muldi3.c b/arch/arm/lib/muldi3.c
index 44d611b1cfdb..0a3b93313f18 100644
--- a/arch/arm/lib/muldi3.c
+++ b/arch/arm/lib/muldi3.c
@@ -32,7 +32,7 @@ Boston, MA 02111-1307, USA. */
32#include "gcclib.h" 32#include "gcclib.h"
33 33
34#define umul_ppmm(xh, xl, a, b) \ 34#define umul_ppmm(xh, xl, a, b) \
35{register USItype __t0, __t1, __t2; \ 35{register u32 __t0, __t1, __t2; \
36 __asm__ ("%@ Inlined umul_ppmm \n\ 36 __asm__ ("%@ Inlined umul_ppmm \n\
37 mov %2, %5, lsr #16 \n\ 37 mov %2, %5, lsr #16 \n\
38 mov %0, %6, lsr #16 \n\ 38 mov %0, %6, lsr #16 \n\
@@ -46,32 +46,27 @@ Boston, MA 02111-1307, USA. */
46 addcs %0, %0, #65536 \n\ 46 addcs %0, %0, #65536 \n\
47 adds %1, %1, %3, lsl #16 \n\ 47 adds %1, %1, %3, lsl #16 \n\
48 adc %0, %0, %3, lsr #16" \ 48 adc %0, %0, %3, lsr #16" \
49 : "=&r" ((USItype) (xh)), \ 49 : "=&r" ((u32) (xh)), \
50 "=r" ((USItype) (xl)), \ 50 "=r" ((u32) (xl)), \
51 "=&r" (__t0), "=&r" (__t1), "=r" (__t2) \ 51 "=&r" (__t0), "=&r" (__t1), "=r" (__t2) \
52 : "r" ((USItype) (a)), \ 52 : "r" ((u32) (a)), \
53 "r" ((USItype) (b)));} 53 "r" ((u32) (b)));}
54
55 54
56#define __umulsidi3(u, v) \ 55#define __umulsidi3(u, v) \
57 ({DIunion __w; \ 56 ({DIunion __w; \
58 umul_ppmm (__w.s.high, __w.s.low, u, v); \ 57 umul_ppmm (__w.s.high, __w.s.low, u, v); \
59 __w.ll; }) 58 __w.ll; })
60 59
61 60s64 __muldi3(s64 u, s64 v)
62DItype
63__muldi3 (DItype u, DItype v)
64{ 61{
65 DIunion w; 62 DIunion w;
66 DIunion uu, vv; 63 DIunion uu, vv;
67 64
68 uu.ll = u, 65 uu.ll = u, vv.ll = v;
69 vv.ll = v;
70 66
71 w.ll = __umulsidi3 (uu.s.low, vv.s.low); 67 w.ll = __umulsidi3(uu.s.low, vv.s.low);
72 w.s.high += ((USItype) uu.s.low * (USItype) vv.s.high 68 w.s.high += ((u32) uu.s.low * (u32) vv.s.high
73 + (USItype) uu.s.high * (USItype) vv.s.low); 69 + (u32) uu.s.high * (u32) vv.s.low);
74 70
75 return w.ll; 71 return w.ll;
76} 72}
77
diff --git a/arch/arm/lib/ucmpdi2.c b/arch/arm/lib/ucmpdi2.c
index 6c6ae63efa02..57f3f2df3850 100644
--- a/arch/arm/lib/ucmpdi2.c
+++ b/arch/arm/lib/ucmpdi2.c
@@ -31,21 +31,19 @@ Boston, MA 02111-1307, USA. */
31 31
32#include "gcclib.h" 32#include "gcclib.h"
33 33
34word_type 34int __ucmpdi2(s64 a, s64 b)
35__ucmpdi2 (DItype a, DItype b)
36{ 35{
37 DIunion au, bu; 36 DIunion au, bu;
38 37
39 au.ll = a, bu.ll = b; 38 au.ll = a, bu.ll = b;
40 39
41 if ((USItype) au.s.high < (USItype) bu.s.high) 40 if ((u32) au.s.high < (u32) bu.s.high)
42 return 0; 41 return 0;
43 else if ((USItype) au.s.high > (USItype) bu.s.high) 42 else if ((u32) au.s.high > (u32) bu.s.high)
44 return 2; 43 return 2;
45 if ((USItype) au.s.low < (USItype) bu.s.low) 44 if ((u32) au.s.low < (u32) bu.s.low)
46 return 0; 45 return 0;
47 else if ((USItype) au.s.low > (USItype) bu.s.low) 46 else if ((u32) au.s.low > (u32) bu.s.low)
48 return 2; 47 return 2;
49 return 1; 48 return 1;
50} 49}
51
diff --git a/arch/arm/lib/udivdi3.c b/arch/arm/lib/udivdi3.c
deleted file mode 100644
index d25195f673f4..000000000000
--- a/arch/arm/lib/udivdi3.c
+++ /dev/null
@@ -1,242 +0,0 @@
1/* More subroutines needed by GCC output code on some machines. */
2/* Compile this one with gcc. */
3/* Copyright (C) 1989, 92-98, 1999 Free Software Foundation, Inc.
4
5This file is part of GNU CC.
6
7GNU CC is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2, or (at your option)
10any later version.
11
12GNU CC is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GNU CC; see the file COPYING. If not, write to
19the Free Software Foundation, 59 Temple Place - Suite 330,
20Boston, MA 02111-1307, USA. */
21
22/* As a special exception, if you link this library with other files,
23 some of which are compiled with GCC, to produce an executable,
24 this library does not by itself cause the resulting executable
25 to be covered by the GNU General Public License.
26 This exception does not however invalidate any other reasons why
27 the executable file might be covered by the GNU General Public License.
28 */
29/* support functions required by the kernel. based on code from gcc-2.95.3 */
30/* I Molton 29/07/01 */
31
32#include "gcclib.h"
33#include "longlong.h"
34
35static const UQItype __clz_tab[] =
36{
37 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
38 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
39 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
40 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
41 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
42 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
43 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
44 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
45};
46
47UDItype
48__udivmoddi4 (UDItype n, UDItype d, UDItype *rp)
49{
50 DIunion ww;
51 DIunion nn, dd;
52 DIunion rr;
53 USItype d0, d1, n0, n1, n2;
54 USItype q0, q1;
55 USItype b, bm;
56
57 nn.ll = n;
58 dd.ll = d;
59
60 d0 = dd.s.low;
61 d1 = dd.s.high;
62 n0 = nn.s.low;
63 n1 = nn.s.high;
64
65 if (d1 == 0)
66 {
67 if (d0 > n1)
68 {
69 /* 0q = nn / 0D */
70
71 count_leading_zeros (bm, d0);
72
73 if (bm != 0)
74 {
75 /* Normalize, i.e. make the most significant bit of the
76 denominator set. */
77
78 d0 = d0 << bm;
79 n1 = (n1 << bm) | (n0 >> (SI_TYPE_SIZE - bm));
80 n0 = n0 << bm;
81 }
82
83 udiv_qrnnd (q0, n0, n1, n0, d0);
84 q1 = 0;
85
86 /* Remainder in n0 >> bm. */
87 }
88 else
89 {
90 /* qq = NN / 0d */
91
92 if (d0 == 0)
93 d0 = 1 / d0; /* Divide intentionally by zero. */
94
95 count_leading_zeros (bm, d0);
96
97 if (bm == 0)
98 {
99 /* From (n1 >= d0) /\ (the most significant bit of d0 is set),
100 conclude (the most significant bit of n1 is set) /\ (the
101 leading quotient digit q1 = 1).
102
103 This special case is necessary, not an optimization.
104 (Shifts counts of SI_TYPE_SIZE are undefined.) */
105
106 n1 -= d0;
107 q1 = 1;
108 }
109 else
110 {
111 /* Normalize. */
112
113 b = SI_TYPE_SIZE - bm;
114
115 d0 = d0 << bm;
116 n2 = n1 >> b;
117 n1 = (n1 << bm) | (n0 >> b);
118 n0 = n0 << bm;
119
120 udiv_qrnnd (q1, n1, n2, n1, d0);
121 }
122
123 /* n1 != d0... */
124
125 udiv_qrnnd (q0, n0, n1, n0, d0);
126
127 /* Remainder in n0 >> bm. */
128 }
129
130 if (rp != 0)
131 {
132 rr.s.low = n0 >> bm;
133 rr.s.high = 0;
134 *rp = rr.ll;
135 }
136 }
137 else
138 {
139 if (d1 > n1)
140 {
141 /* 00 = nn / DD */
142
143 q0 = 0;
144 q1 = 0;
145
146 /* Remainder in n1n0. */
147 if (rp != 0)
148 {
149 rr.s.low = n0;
150 rr.s.high = n1;
151 *rp = rr.ll;
152 }
153 }
154 else
155 {
156 /* 0q = NN / dd */
157
158 count_leading_zeros (bm, d1);
159 if (bm == 0)
160 {
161 /* From (n1 >= d1) /\ (the most significant bit of d1 is set),
162 conclude (the most significant bit of n1 is set) /\ (the
163 quotient digit q0 = 0 or 1).
164
165 This special case is necessary, not an optimization. */
166
167 /* The condition on the next line takes advantage of that
168 n1 >= d1 (true due to program flow). */
169 if (n1 > d1 || n0 >= d0)
170 {
171 q0 = 1;
172 sub_ddmmss (n1, n0, n1, n0, d1, d0);
173 }
174 else
175 q0 = 0;
176
177 q1 = 0;
178
179 if (rp != 0)
180 {
181 rr.s.low = n0;
182 rr.s.high = n1;
183 *rp = rr.ll;
184 }
185 }
186 else
187 {
188 USItype m1, m0;
189 /* Normalize. */
190
191 b = SI_TYPE_SIZE - bm;
192
193 d1 = (d1 << bm) | (d0 >> b);
194 d0 = d0 << bm;
195 n2 = n1 >> b;
196 n1 = (n1 << bm) | (n0 >> b);
197 n0 = n0 << bm;
198
199 udiv_qrnnd (q0, n1, n2, n1, d1);
200 umul_ppmm (m1, m0, q0, d0);
201
202 if (m1 > n1 || (m1 == n1 && m0 > n0))
203 {
204 q0--;
205 sub_ddmmss (m1, m0, m1, m0, d1, d0);
206 }
207
208 q1 = 0;
209
210 /* Remainder in (n1n0 - m1m0) >> bm. */
211 if (rp != 0)
212 {
213 sub_ddmmss (n1, n0, n1, n0, m1, m0);
214 rr.s.low = (n1 << b) | (n0 >> bm);
215 rr.s.high = n1 >> bm;
216 *rp = rr.ll;
217 }
218 }
219 }
220 }
221
222 ww.s.low = q0;
223 ww.s.high = q1;
224 return ww.ll;
225}
226
227UDItype
228__udivdi3 (UDItype n, UDItype d)
229{
230 return __udivmoddi4 (n, d, (UDItype *) 0);
231}
232
233UDItype
234__umoddi3 (UDItype u, UDItype v)
235{
236 UDItype w;
237
238 (void) __udivmoddi4 (u ,v, &w);
239
240 return w;
241}
242
diff --git a/arch/arm/mach-aaec2000/Kconfig b/arch/arm/mach-aaec2000/Kconfig
new file mode 100644
index 000000000000..5e4bef93754c
--- /dev/null
+++ b/arch/arm/mach-aaec2000/Kconfig
@@ -0,0 +1,11 @@
1if ARCH_AAEC2000
2
3menu "Agilent AAEC-2000 Implementations"
4
5config MACH_AAED2000
6 bool "Agilent AAED-2000 Development Platform"
7 select CPU_ARM920T
8
9endmenu
10
11endif
diff --git a/arch/arm/mach-aaec2000/Makefile b/arch/arm/mach-aaec2000/Makefile
new file mode 100644
index 000000000000..20ec83896c37
--- /dev/null
+++ b/arch/arm/mach-aaec2000/Makefile
@@ -0,0 +1,9 @@
1#
2# Makefile for the linux kernel.
3#
4
5# Common support (must be linked before board specific support)
6obj-y += core.o
7
8# Specific board support
9obj-$(CONFIG_MACH_AAED2000) += aaed2000.o
diff --git a/arch/arm/mach-aaec2000/Makefile.boot b/arch/arm/mach-aaec2000/Makefile.boot
new file mode 100644
index 000000000000..8f5a8b7c53c7
--- /dev/null
+++ b/arch/arm/mach-aaec2000/Makefile.boot
@@ -0,0 +1 @@
zreladdr-y := 0xf0008000
diff --git a/arch/arm/mach-aaec2000/aaed2000.c b/arch/arm/mach-aaec2000/aaed2000.c
new file mode 100644
index 000000000000..5417ca3f4621
--- /dev/null
+++ b/arch/arm/mach-aaec2000/aaed2000.c
@@ -0,0 +1,48 @@
1/*
2 * linux/arch/arm/mach-aaec2000/aaed2000.c
3 *
4 * Support for the Agilent AAED-2000 Development Platform.
5 *
6 * Copyright (c) 2005 Nicolas Bellido Y Ortega
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 *
12 */
13#include <linux/module.h>
14#include <linux/kernel.h>
15#include <linux/init.h>
16#include <linux/device.h>
17#include <linux/major.h>
18#include <linux/interrupt.h>
19
20#include <asm/setup.h>
21#include <asm/memory.h>
22#include <asm/mach-types.h>
23#include <asm/hardware.h>
24#include <asm/irq.h>
25
26#include <asm/mach/arch.h>
27#include <asm/mach/map.h>
28#include <asm/mach/irq.h>
29
30#include "core.h"
31
32static void __init aaed2000_init_irq(void)
33{
34 aaec2000_init_irq();
35}
36
37static void __init aaed2000_map_io(void)
38{
39 aaec2000_map_io();
40}
41
42MACHINE_START(AAED2000, "Agilent AAED-2000 Development Platform")
43 MAINTAINER("Nicolas Bellido Y Ortega")
44 BOOT_MEM(0xf0000000, PIO_BASE, VIO_BASE)
45 MAPIO(aaed2000_map_io)
46 INITIRQ(aaed2000_init_irq)
47 .timer = &aaec2000_timer,
48MACHINE_END
diff --git a/arch/arm/mach-aaec2000/core.c b/arch/arm/mach-aaec2000/core.c
new file mode 100644
index 000000000000..aece0cd4f0a3
--- /dev/null
+++ b/arch/arm/mach-aaec2000/core.c
@@ -0,0 +1,157 @@
1/*
2 * linux/arch/arm/mach-aaec2000/core.c
3 *
4 * Code common to all AAEC-2000 machines
5 *
6 * Copyright (c) 2005 Nicolas Bellido Y Ortega
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation.
11 */
12#include <linux/config.h>
13#include <linux/module.h>
14#include <linux/kernel.h>
15#include <linux/init.h>
16#include <linux/list.h>
17#include <linux/errno.h>
18#include <linux/interrupt.h>
19#include <linux/timex.h>
20#include <linux/signal.h>
21
22#include <asm/hardware.h>
23#include <asm/irq.h>
24
25#include <asm/mach/irq.h>
26#include <asm/mach/time.h>
27#include <asm/mach/map.h>
28
29/*
30 * Common I/O mapping:
31 *
32 * Static virtual address mappings are as follow:
33 *
34 * 0xf8000000-0xf8001ffff: Devices connected to APB bus
35 * 0xf8002000-0xf8003ffff: Devices connected to AHB bus
36 *
37 * Below 0xe8000000 is reserved for vm allocation.
38 *
39 * The machine specific code must provide the extra mapping beside the
40 * default mapping provided here.
41 */
42static struct map_desc standard_io_desc[] __initdata = {
43 /* virtual physical length type */
44 { VIO_APB_BASE, PIO_APB_BASE, IO_APB_LENGTH, MT_DEVICE },
45 { VIO_AHB_BASE, PIO_AHB_BASE, IO_AHB_LENGTH, MT_DEVICE }
46};
47
48void __init aaec2000_map_io(void)
49{
50 iotable_init(standard_io_desc, ARRAY_SIZE(standard_io_desc));
51}
52
53/*
54 * Interrupt handling routines
55 */
56static void aaec2000_int_ack(unsigned int irq)
57{
58 IRQ_INTSR = 1 << irq;
59}
60
61static void aaec2000_int_mask(unsigned int irq)
62{
63 IRQ_INTENC |= (1 << irq);
64}
65
66static void aaec2000_int_unmask(unsigned int irq)
67{
68 IRQ_INTENS |= (1 << irq);
69}
70
71static struct irqchip aaec2000_irq_chip = {
72 .ack = aaec2000_int_ack,
73 .mask = aaec2000_int_mask,
74 .unmask = aaec2000_int_unmask,
75};
76
77void __init aaec2000_init_irq(void)
78{
79 unsigned int i;
80
81 for (i = 0; i < NR_IRQS; i++) {
82 set_irq_handler(i, do_level_IRQ);
83 set_irq_chip(i, &aaec2000_irq_chip);
84 set_irq_flags(i, IRQF_VALID);
85 }
86
87 /* Disable all interrupts */
88 IRQ_INTENC = 0xffffffff;
89
90 /* Clear any pending interrupts */
91 IRQ_INTSR = IRQ_INTSR;
92}
93
94/*
95 * Time keeping
96 */
97/* IRQs are disabled before entering here from do_gettimeofday() */
98static unsigned long aaec2000_gettimeoffset(void)
99{
100 unsigned long ticks_to_match, elapsed, usec;
101
102 /* Get ticks before next timer match */
103 ticks_to_match = TIMER1_LOAD - TIMER1_VAL;
104
105 /* We need elapsed ticks since last match */
106 elapsed = LATCH - ticks_to_match;
107
108 /* Now, convert them to usec */
109 usec = (unsigned long)(elapsed * (tick_nsec / 1000))/LATCH;
110
111 return usec;
112}
113
114/* We enter here with IRQs enabled */
115static irqreturn_t
116aaec2000_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
117{
118 /* TODO: Check timer accuracy */
119 write_seqlock(&xtime_lock);
120
121 timer_tick(regs);
122 TIMER1_CLEAR = 1;
123
124 write_sequnlock(&xtime_lock);
125
126 return IRQ_HANDLED;
127}
128
129static struct irqaction aaec2000_timer_irq = {
130 .name = "AAEC-2000 Timer Tick",
131 .flags = SA_INTERRUPT | SA_TIMER,
132 .handler = aaec2000_timer_interrupt,
133};
134
135static void __init aaec2000_timer_init(void)
136{
137 /* Disable timer 1 */
138 TIMER1_CTRL = 0;
139
140 /* We have somehow to generate a 100Hz clock.
141 * We then use the 508KHz timer in periodic mode.
142 */
143 TIMER1_LOAD = LATCH;
144 TIMER1_CLEAR = 1; /* Clear interrupt */
145
146 setup_irq(INT_TMR1_OFL, &aaec2000_timer_irq);
147
148 TIMER1_CTRL = TIMER_CTRL_ENABLE |
149 TIMER_CTRL_PERIODIC |
150 TIMER_CTRL_CLKSEL_508K;
151}
152
153struct sys_timer aaec2000_timer = {
154 .init = aaec2000_timer_init,
155 .offset = aaec2000_gettimeoffset,
156};
157
diff --git a/arch/arm/mach-aaec2000/core.h b/arch/arm/mach-aaec2000/core.h
new file mode 100644
index 000000000000..91893d848c16
--- /dev/null
+++ b/arch/arm/mach-aaec2000/core.h
@@ -0,0 +1,16 @@
1/*
2 * linux/arch/arm/mach-aaec2000/core.h
3 *
4 * Copyright (c) 2005 Nicolas Bellido Y Ortega
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
12struct sys_timer;
13
14extern struct sys_timer aaec2000_timer;
15extern void __init aaec2000_map_io(void);
16extern void __init aaec2000_init_irq(void);
diff --git a/arch/arm/mach-clps711x/Kconfig b/arch/arm/mach-clps711x/Kconfig
index 45c930ccd064..0793dcf54f2e 100644
--- a/arch/arm/mach-clps711x/Kconfig
+++ b/arch/arm/mach-clps711x/Kconfig
@@ -28,7 +28,7 @@ config ARCH_CLEP7312
28config ARCH_EDB7211 28config ARCH_EDB7211
29 bool "EDB7211" 29 bool "EDB7211"
30 select ISA 30 select ISA
31 select DISCONTIGMEM 31 select ARCH_DISCONTIGMEM_ENABLE
32 help 32 help
33 Say Y here if you intend to run this kernel on a Cirrus Logic EDB-7211 33 Say Y here if you intend to run this kernel on a Cirrus Logic EDB-7211
34 evaluation board. 34 evaluation board.
diff --git a/arch/arm/mach-clps711x/time.c b/arch/arm/mach-clps711x/time.c
index 383d4e0c6e35..1a23f0dcd4b8 100644
--- a/arch/arm/mach-clps711x/time.c
+++ b/arch/arm/mach-clps711x/time.c
@@ -57,8 +57,8 @@ p720t_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
57 57
58static struct irqaction clps711x_timer_irq = { 58static struct irqaction clps711x_timer_irq = {
59 .name = "CLPS711x Timer Tick", 59 .name = "CLPS711x Timer Tick",
60 .flags = SA_INTERRUPT, 60 .flags = SA_INTERRUPT | SA_TIMER,
61 .handler = p720t_timer_interrupt 61 .handler = p720t_timer_interrupt,
62}; 62};
63 63
64static void __init clps711x_timer_init(void) 64static void __init clps711x_timer_init(void)
diff --git a/arch/arm/mach-clps7500/core.c b/arch/arm/mach-clps7500/core.c
index fdfededfd96f..90e85f434f6f 100644
--- a/arch/arm/mach-clps7500/core.c
+++ b/arch/arm/mach-clps7500/core.c
@@ -26,6 +26,8 @@
26#include <asm/irq.h> 26#include <asm/irq.h>
27#include <asm/mach-types.h> 27#include <asm/mach-types.h>
28 28
29unsigned int vram_size;
30
29static void cl7500_ack_irq_a(unsigned int irq) 31static void cl7500_ack_irq_a(unsigned int irq)
30{ 32{
31 unsigned int val, mask; 33 unsigned int val, mask;
@@ -296,8 +298,8 @@ clps7500_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
296 298
297static struct irqaction clps7500_timer_irq = { 299static struct irqaction clps7500_timer_irq = {
298 .name = "CLPS7500 Timer Tick", 300 .name = "CLPS7500 Timer Tick",
299 .flags = SA_INTERRUPT, 301 .flags = SA_INTERRUPT | SA_TIMER,
300 .handler = clps7500_timer_interrupt 302 .handler = clps7500_timer_interrupt,
301}; 303};
302 304
303/* 305/*
diff --git a/arch/arm/mach-ebsa110/core.c b/arch/arm/mach-ebsa110/core.c
index ef362d44949d..86ffdbb5626e 100644
--- a/arch/arm/mach-ebsa110/core.c
+++ b/arch/arm/mach-ebsa110/core.c
@@ -173,8 +173,8 @@ ebsa110_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
173 173
174static struct irqaction ebsa110_timer_irq = { 174static struct irqaction ebsa110_timer_irq = {
175 .name = "EBSA110 Timer Tick", 175 .name = "EBSA110 Timer Tick",
176 .flags = SA_INTERRUPT, 176 .flags = SA_INTERRUPT | SA_TIMER,
177 .handler = ebsa110_timer_interrupt 177 .handler = ebsa110_timer_interrupt,
178}; 178};
179 179
180/* 180/*
diff --git a/arch/arm/mach-epxa10db/time.c b/arch/arm/mach-epxa10db/time.c
index 1b991f3cc3c6..4b1084dde8dd 100644
--- a/arch/arm/mach-epxa10db/time.c
+++ b/arch/arm/mach-epxa10db/time.c
@@ -56,8 +56,8 @@ epxa10db_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
56 56
57static struct irqaction epxa10db_timer_irq = { 57static struct irqaction epxa10db_timer_irq = {
58 .name = "Excalibur Timer Tick", 58 .name = "Excalibur Timer Tick",
59 .flags = SA_INTERRUPT, 59 .flags = SA_INTERRUPT | SA_TIMER,
60 .handler = epxa10db_timer_interrupt 60 .handler = epxa10db_timer_interrupt,
61}; 61};
62 62
63/* 63/*
diff --git a/arch/arm/mach-footbridge/dc21285-timer.c b/arch/arm/mach-footbridge/dc21285-timer.c
index da5b9b7623ca..14a62d6008fe 100644
--- a/arch/arm/mach-footbridge/dc21285-timer.c
+++ b/arch/arm/mach-footbridge/dc21285-timer.c
@@ -43,7 +43,7 @@ timer1_interrupt(int irq, void *dev_id, struct pt_regs *regs)
43static struct irqaction footbridge_timer_irq = { 43static struct irqaction footbridge_timer_irq = {
44 .name = "Timer1 timer tick", 44 .name = "Timer1 timer tick",
45 .handler = timer1_interrupt, 45 .handler = timer1_interrupt,
46 .flags = SA_INTERRUPT, 46 .flags = SA_INTERRUPT | SA_TIMER,
47}; 47};
48 48
49/* 49/*
diff --git a/arch/arm/mach-footbridge/isa-timer.c b/arch/arm/mach-footbridge/isa-timer.c
index a4fefa0bb5a1..c1d74f7ab669 100644
--- a/arch/arm/mach-footbridge/isa-timer.c
+++ b/arch/arm/mach-footbridge/isa-timer.c
@@ -72,7 +72,7 @@ isa_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
72static struct irqaction isa_timer_irq = { 72static struct irqaction isa_timer_irq = {
73 .name = "ISA timer tick", 73 .name = "ISA timer tick",
74 .handler = isa_timer_interrupt, 74 .handler = isa_timer_interrupt,
75 .flags = SA_INTERRUPT, 75 .flags = SA_INTERRUPT | SA_TIMER,
76}; 76};
77 77
78static void __init isa_timer_init(void) 78static void __init isa_timer_init(void)
diff --git a/arch/arm/mach-h720x/cpu-h7201.c b/arch/arm/mach-h720x/cpu-h7201.c
index 743656881ed6..af9e4a5d5ea7 100644
--- a/arch/arm/mach-h720x/cpu-h7201.c
+++ b/arch/arm/mach-h720x/cpu-h7201.c
@@ -41,8 +41,8 @@ h7201_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
41 41
42static struct irqaction h7201_timer_irq = { 42static struct irqaction h7201_timer_irq = {
43 .name = "h7201 Timer Tick", 43 .name = "h7201 Timer Tick",
44 .flags = SA_INTERRUPT, 44 .flags = SA_INTERRUPT | SA_TIMER,
45 .handler = h7201_timer_interrupt 45 .handler = h7201_timer_interrupt,
46}; 46};
47 47
48/* 48/*
diff --git a/arch/arm/mach-h720x/cpu-h7202.c b/arch/arm/mach-h720x/cpu-h7202.c
index 21b8fb6122cd..593b6a2a30e1 100644
--- a/arch/arm/mach-h720x/cpu-h7202.c
+++ b/arch/arm/mach-h720x/cpu-h7202.c
@@ -171,8 +171,8 @@ static struct irqchip h7202_timerx_chip = {
171 171
172static struct irqaction h7202_timer_irq = { 172static struct irqaction h7202_timer_irq = {
173 .name = "h7202 Timer Tick", 173 .name = "h7202 Timer Tick",
174 .flags = SA_INTERRUPT, 174 .flags = SA_INTERRUPT | SA_TIMER,
175 .handler = h7202_timer_interrupt 175 .handler = h7202_timer_interrupt,
176}; 176};
177 177
178/* 178/*
diff --git a/arch/arm/mach-imx/time.c b/arch/arm/mach-imx/time.c
index 11f1e56c36bc..ea805bfa5e54 100644
--- a/arch/arm/mach-imx/time.c
+++ b/arch/arm/mach-imx/time.c
@@ -72,8 +72,8 @@ imx_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
72 72
73static struct irqaction imx_timer_irq = { 73static struct irqaction imx_timer_irq = {
74 .name = "i.MX Timer Tick", 74 .name = "i.MX Timer Tick",
75 .flags = SA_INTERRUPT, 75 .flags = SA_INTERRUPT | SA_TIMER,
76 .handler = imx_timer_interrupt 76 .handler = imx_timer_interrupt,
77}; 77};
78 78
79/* 79/*
diff --git a/arch/arm/mach-integrator/core.c b/arch/arm/mach-integrator/core.c
index d302f0405fd2..dacbf504dae2 100644
--- a/arch/arm/mach-integrator/core.c
+++ b/arch/arm/mach-integrator/core.c
@@ -20,6 +20,7 @@
20#include <asm/irq.h> 20#include <asm/irq.h>
21#include <asm/io.h> 21#include <asm/io.h>
22#include <asm/hardware/amba.h> 22#include <asm/hardware/amba.h>
23#include <asm/hardware/arm_timer.h>
23#include <asm/arch/cm.h> 24#include <asm/arch/cm.h>
24#include <asm/system.h> 25#include <asm/system.h>
25#include <asm/leds.h> 26#include <asm/leds.h>
@@ -156,16 +157,6 @@ EXPORT_SYMBOL(cm_control);
156#define TICKS2USECS(x) ((x) / TICKS_PER_uSEC) 157#define TICKS2USECS(x) ((x) / TICKS_PER_uSEC)
157#endif 158#endif
158 159
159/*
160 * What does it look like?
161 */
162typedef struct TimerStruct {
163 unsigned long TimerLoad;
164 unsigned long TimerValue;
165 unsigned long TimerControl;
166 unsigned long TimerClear;
167} TimerStruct_t;
168
169static unsigned long timer_reload; 160static unsigned long timer_reload;
170 161
171/* 162/*
@@ -174,7 +165,6 @@ static unsigned long timer_reload;
174 */ 165 */
175unsigned long integrator_gettimeoffset(void) 166unsigned long integrator_gettimeoffset(void)
176{ 167{
177 volatile TimerStruct_t *timer1 = (TimerStruct_t *)TIMER1_VA_BASE;
178 unsigned long ticks1, ticks2, status; 168 unsigned long ticks1, ticks2, status;
179 169
180 /* 170 /*
@@ -183,11 +173,11 @@ unsigned long integrator_gettimeoffset(void)
183 * an interrupt. We get around this by ensuring that the 173 * an interrupt. We get around this by ensuring that the
184 * counter has not reloaded between our two reads. 174 * counter has not reloaded between our two reads.
185 */ 175 */
186 ticks2 = timer1->TimerValue & 0xffff; 176 ticks2 = readl(TIMER1_VA_BASE + TIMER_VALUE) & 0xffff;
187 do { 177 do {
188 ticks1 = ticks2; 178 ticks1 = ticks2;
189 status = __raw_readl(VA_IC_BASE + IRQ_RAW_STATUS); 179 status = __raw_readl(VA_IC_BASE + IRQ_RAW_STATUS);
190 ticks2 = timer1->TimerValue & 0xffff; 180 ticks2 = readl(TIMER1_VA_BASE + TIMER_VALUE) & 0xffff;
191 } while (ticks2 > ticks1); 181 } while (ticks2 > ticks1);
192 182
193 /* 183 /*
@@ -213,21 +203,18 @@ unsigned long integrator_gettimeoffset(void)
213static irqreturn_t 203static irqreturn_t
214integrator_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) 204integrator_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
215{ 205{
216 volatile TimerStruct_t *timer1 = (volatile TimerStruct_t *)TIMER1_VA_BASE;
217
218 write_seqlock(&xtime_lock); 206 write_seqlock(&xtime_lock);
219 207
220 /* 208 /*
221 * clear the interrupt 209 * clear the interrupt
222 */ 210 */
223 timer1->TimerClear = 1; 211 writel(1, TIMER1_VA_BASE + TIMER_INTCLR);
224 212
225 /* 213 /*
226 * the clock tick routines are only processed on the 214 * the clock tick routines are only processed on the
227 * primary CPU 215 * primary CPU
228 */ 216 */
229 if (hard_smp_processor_id() == 0) { 217 if (hard_smp_processor_id() == 0) {
230 nmi_tick();
231 timer_tick(regs); 218 timer_tick(regs);
232#ifdef CONFIG_SMP 219#ifdef CONFIG_SMP
233 smp_send_timer(); 220 smp_send_timer();
@@ -248,8 +235,8 @@ integrator_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
248 235
249static struct irqaction integrator_timer_irq = { 236static struct irqaction integrator_timer_irq = {
250 .name = "Integrator Timer Tick", 237 .name = "Integrator Timer Tick",
251 .flags = SA_INTERRUPT, 238 .flags = SA_INTERRUPT | SA_TIMER,
252 .handler = integrator_timer_interrupt 239 .handler = integrator_timer_interrupt,
253}; 240};
254 241
255/* 242/*
@@ -257,32 +244,29 @@ static struct irqaction integrator_timer_irq = {
257 */ 244 */
258void __init integrator_time_init(unsigned long reload, unsigned int ctrl) 245void __init integrator_time_init(unsigned long reload, unsigned int ctrl)
259{ 246{
260 volatile TimerStruct_t *timer0 = (volatile TimerStruct_t *)TIMER0_VA_BASE; 247 unsigned int timer_ctrl = TIMER_CTRL_ENABLE | TIMER_CTRL_PERIODIC;
261 volatile TimerStruct_t *timer1 = (volatile TimerStruct_t *)TIMER1_VA_BASE;
262 volatile TimerStruct_t *timer2 = (volatile TimerStruct_t *)TIMER2_VA_BASE;
263 unsigned int timer_ctrl = 0x80 | 0x40; /* periodic */
264 248
265 timer_reload = reload; 249 timer_reload = reload;
266 timer_ctrl |= ctrl; 250 timer_ctrl |= ctrl;
267 251
268 if (timer_reload > 0x100000) { 252 if (timer_reload > 0x100000) {
269 timer_reload >>= 8; 253 timer_reload >>= 8;
270 timer_ctrl |= 0x08; /* /256 */ 254 timer_ctrl |= TIMER_CTRL_DIV256;
271 } else if (timer_reload > 0x010000) { 255 } else if (timer_reload > 0x010000) {
272 timer_reload >>= 4; 256 timer_reload >>= 4;
273 timer_ctrl |= 0x04; /* /16 */ 257 timer_ctrl |= TIMER_CTRL_DIV16;
274 } 258 }
275 259
276 /* 260 /*
277 * Initialise to a known state (all timers off) 261 * Initialise to a known state (all timers off)
278 */ 262 */
279 timer0->TimerControl = 0; 263 writel(0, TIMER0_VA_BASE + TIMER_CTRL);
280 timer1->TimerControl = 0; 264 writel(0, TIMER1_VA_BASE + TIMER_CTRL);
281 timer2->TimerControl = 0; 265 writel(0, TIMER2_VA_BASE + TIMER_CTRL);
282 266
283 timer1->TimerLoad = timer_reload; 267 writel(timer_reload, TIMER1_VA_BASE + TIMER_LOAD);
284 timer1->TimerValue = timer_reload; 268 writel(timer_reload, TIMER1_VA_BASE + TIMER_VALUE);
285 timer1->TimerControl = timer_ctrl; 269 writel(timer_ctrl, TIMER1_VA_BASE + TIMER_CTRL);
286 270
287 /* 271 /*
288 * Make irqs happen for the system timer 272 * Make irqs happen for the system timer
diff --git a/arch/arm/mach-iop3xx/iop321-time.c b/arch/arm/mach-iop3xx/iop321-time.c
index 9b7dd64d1b8f..d53af1669502 100644
--- a/arch/arm/mach-iop3xx/iop321-time.c
+++ b/arch/arm/mach-iop3xx/iop321-time.c
@@ -86,7 +86,7 @@ iop321_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
86static struct irqaction iop321_timer_irq = { 86static struct irqaction iop321_timer_irq = {
87 .name = "IOP321 Timer Tick", 87 .name = "IOP321 Timer Tick",
88 .handler = iop321_timer_interrupt, 88 .handler = iop321_timer_interrupt,
89 .flags = SA_INTERRUPT 89 .flags = SA_INTERRUPT | SA_TIMER,
90}; 90};
91 91
92static void __init iop321_timer_init(void) 92static void __init iop321_timer_init(void)
diff --git a/arch/arm/mach-iop3xx/iop331-time.c b/arch/arm/mach-iop3xx/iop331-time.c
index e01696769263..1a6d9d661e4b 100644
--- a/arch/arm/mach-iop3xx/iop331-time.c
+++ b/arch/arm/mach-iop3xx/iop331-time.c
@@ -83,7 +83,7 @@ iop331_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
83static struct irqaction iop331_timer_irq = { 83static struct irqaction iop331_timer_irq = {
84 .name = "IOP331 Timer Tick", 84 .name = "IOP331 Timer Tick",
85 .handler = iop331_timer_interrupt, 85 .handler = iop331_timer_interrupt,
86 .flags = SA_INTERRUPT 86 .flags = SA_INTERRUPT | SA_TIMER,
87}; 87};
88 88
89static void __init iop331_timer_init(void) 89static void __init iop331_timer_init(void)
diff --git a/arch/arm/mach-ixp2000/Kconfig b/arch/arm/mach-ixp2000/Kconfig
index 9361e05f6fa3..ecb58d83478e 100644
--- a/arch/arm/mach-ixp2000/Kconfig
+++ b/arch/arm/mach-ixp2000/Kconfig
@@ -54,6 +54,14 @@ config ARCH_IXDP2X01
54 depends on ARCH_IXDP2401 || ARCH_IXDP2801 54 depends on ARCH_IXDP2401 || ARCH_IXDP2801
55 default y 55 default y
56 56
57config IXP2000_SUPPORT_BROKEN_PCI_IO
58 bool "Support broken PCI I/O on older IXP2000s"
59 default y
60 help
61 Say 'N' here if you only intend to run your kernel on an
62 IXP2000 B0 or later model and do not need the PCI I/O
63 byteswap workaround. Say 'Y' otherwise.
64
57endmenu 65endmenu
58 66
59endif 67endif
diff --git a/arch/arm/mach-ixp2000/core.c b/arch/arm/mach-ixp2000/core.c
index 4f3c3d5c781c..4b9d841e04c1 100644
--- a/arch/arm/mach-ixp2000/core.c
+++ b/arch/arm/mach-ixp2000/core.c
@@ -40,6 +40,8 @@
40#include <asm/mach/time.h> 40#include <asm/mach/time.h>
41#include <asm/mach/irq.h> 41#include <asm/mach/irq.h>
42 42
43#include <asm/arch/gpio.h>
44
43static DEFINE_SPINLOCK(ixp2000_slowport_lock); 45static DEFINE_SPINLOCK(ixp2000_slowport_lock);
44static unsigned long ixp2000_slowport_irq_flags; 46static unsigned long ixp2000_slowport_irq_flags;
45 47
@@ -101,6 +103,11 @@ static struct map_desc ixp2000_io_desc[] __initdata = {
101 .length = IXP2000_PCI_CSR_SIZE, 103 .length = IXP2000_PCI_CSR_SIZE,
102 .type = MT_DEVICE 104 .type = MT_DEVICE
103 }, { 105 }, {
106 .virtual = IXP2000_MSF_VIRT_BASE,
107 .physical = IXP2000_MSF_PHYS_BASE,
108 .length = IXP2000_MSF_SIZE,
109 .type = MT_DEVICE
110 }, {
104 .virtual = IXP2000_PCI_IO_VIRT_BASE, 111 .virtual = IXP2000_PCI_IO_VIRT_BASE,
105 .physical = IXP2000_PCI_IO_PHYS_BASE, 112 .physical = IXP2000_PCI_IO_PHYS_BASE,
106 .length = IXP2000_PCI_IO_SIZE, 113 .length = IXP2000_PCI_IO_SIZE,
@@ -162,12 +169,13 @@ void __init ixp2000_map_io(void)
162static unsigned ticks_per_jiffy; 169static unsigned ticks_per_jiffy;
163static unsigned ticks_per_usec; 170static unsigned ticks_per_usec;
164static unsigned next_jiffy_time; 171static unsigned next_jiffy_time;
172static volatile unsigned long *missing_jiffy_timer_csr;
165 173
166unsigned long ixp2000_gettimeoffset (void) 174unsigned long ixp2000_gettimeoffset (void)
167{ 175{
168 unsigned long offset; 176 unsigned long offset;
169 177
170 offset = next_jiffy_time - *IXP2000_T4_CSR; 178 offset = next_jiffy_time - *missing_jiffy_timer_csr;
171 179
172 return offset / ticks_per_usec; 180 return offset / ticks_per_usec;
173} 181}
@@ -178,8 +186,8 @@ static int ixp2000_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
178 186
179 /* clear timer 1 */ 187 /* clear timer 1 */
180 ixp2000_reg_write(IXP2000_T1_CLR, 1); 188 ixp2000_reg_write(IXP2000_T1_CLR, 1);
181 189
182 while ((next_jiffy_time - *IXP2000_T4_CSR) > ticks_per_jiffy) { 190 while ((next_jiffy_time - *missing_jiffy_timer_csr) > ticks_per_jiffy) {
183 timer_tick(regs); 191 timer_tick(regs);
184 next_jiffy_time -= ticks_per_jiffy; 192 next_jiffy_time -= ticks_per_jiffy;
185 } 193 }
@@ -191,26 +199,43 @@ static int ixp2000_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
191 199
192static struct irqaction ixp2000_timer_irq = { 200static struct irqaction ixp2000_timer_irq = {
193 .name = "IXP2000 Timer Tick", 201 .name = "IXP2000 Timer Tick",
194 .flags = SA_INTERRUPT, 202 .flags = SA_INTERRUPT | SA_TIMER,
195 .handler = ixp2000_timer_interrupt 203 .handler = ixp2000_timer_interrupt,
196}; 204};
197 205
198void __init ixp2000_init_time(unsigned long tick_rate) 206void __init ixp2000_init_time(unsigned long tick_rate)
199{ 207{
200 ixp2000_reg_write(IXP2000_T1_CLR, 0);
201 ixp2000_reg_write(IXP2000_T4_CLR, 0);
202
203 ticks_per_jiffy = (tick_rate + HZ/2) / HZ; 208 ticks_per_jiffy = (tick_rate + HZ/2) / HZ;
204 ticks_per_usec = tick_rate / 1000000; 209 ticks_per_usec = tick_rate / 1000000;
205 210
211 /*
212 * We use timer 1 as our timer interrupt.
213 */
214 ixp2000_reg_write(IXP2000_T1_CLR, 0);
206 ixp2000_reg_write(IXP2000_T1_CLD, ticks_per_jiffy - 1); 215 ixp2000_reg_write(IXP2000_T1_CLD, ticks_per_jiffy - 1);
207 ixp2000_reg_write(IXP2000_T1_CTL, (1 << 7)); 216 ixp2000_reg_write(IXP2000_T1_CTL, (1 << 7));
208 217
209 /* 218 /*
210 * We use T4 as a monotonic counter to track missed jiffies 219 * We use a second timer as a monotonic counter for tracking
220 * missed jiffies. The IXP2000 has four timers, but if we're
221 * on an A-step IXP2800, timer 2 and 3 don't work, so on those
222 * chips we use timer 4. Timer 4 is the only timer that can
223 * be used for the watchdog, so we use timer 2 if we're on a
224 * non-buggy chip.
211 */ 225 */
212 ixp2000_reg_write(IXP2000_T4_CLD, -1); 226 if ((*IXP2000_PRODUCT_ID & 0x001ffef0) == 0x00000000) {
213 ixp2000_reg_write(IXP2000_T4_CTL, (1 << 7)); 227 printk(KERN_INFO "Enabling IXP2800 erratum #25 workaround\n");
228
229 ixp2000_reg_write(IXP2000_T4_CLR, 0);
230 ixp2000_reg_write(IXP2000_T4_CLD, -1);
231 ixp2000_reg_write(IXP2000_T4_CTL, (1 << 7));
232 missing_jiffy_timer_csr = IXP2000_T4_CSR;
233 } else {
234 ixp2000_reg_write(IXP2000_T2_CLR, 0);
235 ixp2000_reg_write(IXP2000_T2_CLD, -1);
236 ixp2000_reg_write(IXP2000_T2_CTL, (1 << 7));
237 missing_jiffy_timer_csr = IXP2000_T2_CSR;
238 }
214 next_jiffy_time = 0xffffffff; 239 next_jiffy_time = 0xffffffff;
215 240
216 /* register for interrupt */ 241 /* register for interrupt */
@@ -220,35 +245,40 @@ void __init ixp2000_init_time(unsigned long tick_rate)
220/************************************************************************* 245/*************************************************************************
221 * GPIO helpers 246 * GPIO helpers
222 *************************************************************************/ 247 *************************************************************************/
223static unsigned long GPIO_IRQ_rising_edge;
224static unsigned long GPIO_IRQ_falling_edge; 248static unsigned long GPIO_IRQ_falling_edge;
249static unsigned long GPIO_IRQ_rising_edge;
225static unsigned long GPIO_IRQ_level_low; 250static unsigned long GPIO_IRQ_level_low;
226static unsigned long GPIO_IRQ_level_high; 251static unsigned long GPIO_IRQ_level_high;
227 252
228void gpio_line_config(int line, int style) 253static void update_gpio_int_csrs(void)
254{
255 ixp2000_reg_write(IXP2000_GPIO_FEDR, GPIO_IRQ_falling_edge);
256 ixp2000_reg_write(IXP2000_GPIO_REDR, GPIO_IRQ_rising_edge);
257 ixp2000_reg_write(IXP2000_GPIO_LSLR, GPIO_IRQ_level_low);
258 ixp2000_reg_write(IXP2000_GPIO_LSHR, GPIO_IRQ_level_high);
259}
260
261void gpio_line_config(int line, int direction)
229{ 262{
230 unsigned long flags; 263 unsigned long flags;
231 264
232 local_irq_save(flags); 265 local_irq_save(flags);
266 if (direction == GPIO_OUT) {
267 irq_desc[line + IRQ_IXP2000_GPIO0].valid = 0;
233 268
234 if(style == GPIO_OUT) {
235 /* if it's an output, it ain't an interrupt anymore */ 269 /* if it's an output, it ain't an interrupt anymore */
236 ixp2000_reg_write(IXP2000_GPIO_PDSR, (1 << line));
237 GPIO_IRQ_falling_edge &= ~(1 << line); 270 GPIO_IRQ_falling_edge &= ~(1 << line);
238 GPIO_IRQ_rising_edge &= ~(1 << line); 271 GPIO_IRQ_rising_edge &= ~(1 << line);
239 GPIO_IRQ_level_low &= ~(1 << line); 272 GPIO_IRQ_level_low &= ~(1 << line);
240 GPIO_IRQ_level_high &= ~(1 << line); 273 GPIO_IRQ_level_high &= ~(1 << line);
241 ixp2000_reg_write(IXP2000_GPIO_FEDR, GPIO_IRQ_falling_edge); 274 update_gpio_int_csrs();
242 ixp2000_reg_write(IXP2000_GPIO_REDR, GPIO_IRQ_rising_edge); 275
243 ixp2000_reg_write(IXP2000_GPIO_LSHR, GPIO_IRQ_level_high); 276 ixp2000_reg_write(IXP2000_GPIO_PDSR, 1 << line);
244 ixp2000_reg_write(IXP2000_GPIO_LSLR, GPIO_IRQ_level_low); 277 } else if (direction == GPIO_IN) {
245 irq_desc[line+IRQ_IXP2000_GPIO0].valid = 0; 278 ixp2000_reg_write(IXP2000_GPIO_PDCR, 1 << line);
246 } else if(style == GPIO_IN) {
247 ixp2000_reg_write(IXP2000_GPIO_PDCR, (1 << line));
248 } 279 }
249
250 local_irq_restore(flags); 280 local_irq_restore(flags);
251} 281}
252 282
253 283
254/************************************************************************* 284/*************************************************************************
@@ -267,9 +297,50 @@ static void ixp2000_GPIO_irq_handler(unsigned int irq, struct irqdesc *desc, str
267 } 297 }
268} 298}
269 299
300static int ixp2000_GPIO_irq_type(unsigned int irq, unsigned int type)
301{
302 int line = irq - IRQ_IXP2000_GPIO0;
303
304 /*
305 * First, configure this GPIO line as an input.
306 */
307 ixp2000_reg_write(IXP2000_GPIO_PDCR, 1 << line);
308
309 /*
310 * Then, set the proper trigger type.
311 */
312 if (type & IRQT_FALLING)
313 GPIO_IRQ_falling_edge |= 1 << line;
314 else
315 GPIO_IRQ_falling_edge &= ~(1 << line);
316 if (type & IRQT_RISING)
317 GPIO_IRQ_rising_edge |= 1 << line;
318 else
319 GPIO_IRQ_rising_edge &= ~(1 << line);
320 if (type & IRQT_LOW)
321 GPIO_IRQ_level_low |= 1 << line;
322 else
323 GPIO_IRQ_level_low &= ~(1 << line);
324 if (type & IRQT_HIGH)
325 GPIO_IRQ_level_high |= 1 << line;
326 else
327 GPIO_IRQ_level_high &= ~(1 << line);
328 update_gpio_int_csrs();
329
330 /*
331 * Finally, mark the corresponding IRQ as valid.
332 */
333 irq_desc[irq].valid = 1;
334
335 return 0;
336}
337
270static void ixp2000_GPIO_irq_mask_ack(unsigned int irq) 338static void ixp2000_GPIO_irq_mask_ack(unsigned int irq)
271{ 339{
272 ixp2000_reg_write(IXP2000_GPIO_INCR, (1 << (irq - IRQ_IXP2000_GPIO0))); 340 ixp2000_reg_write(IXP2000_GPIO_INCR, (1 << (irq - IRQ_IXP2000_GPIO0)));
341
342 ixp2000_reg_write(IXP2000_GPIO_EDSR, (1 << (irq - IRQ_IXP2000_GPIO0)));
343 ixp2000_reg_write(IXP2000_GPIO_LDSR, (1 << (irq - IRQ_IXP2000_GPIO0)));
273 ixp2000_reg_write(IXP2000_GPIO_INST, (1 << (irq - IRQ_IXP2000_GPIO0))); 344 ixp2000_reg_write(IXP2000_GPIO_INST, (1 << (irq - IRQ_IXP2000_GPIO0)));
274} 345}
275 346
@@ -284,6 +355,7 @@ static void ixp2000_GPIO_irq_unmask(unsigned int irq)
284} 355}
285 356
286static struct irqchip ixp2000_GPIO_irq_chip = { 357static struct irqchip ixp2000_GPIO_irq_chip = {
358 .type = ixp2000_GPIO_irq_type,
287 .ack = ixp2000_GPIO_irq_mask_ack, 359 .ack = ixp2000_GPIO_irq_mask_ack,
288 .mask = ixp2000_GPIO_irq_mask, 360 .mask = ixp2000_GPIO_irq_mask,
289 .unmask = ixp2000_GPIO_irq_unmask 361 .unmask = ixp2000_GPIO_irq_unmask
@@ -320,7 +392,7 @@ static void ixp2000_irq_mask(unsigned int irq)
320 392
321static void ixp2000_irq_unmask(unsigned int irq) 393static void ixp2000_irq_unmask(unsigned int irq)
322{ 394{
323 ixp2000_reg_write(IXP2000_IRQ_ENABLE_SET, (1 << irq)); 395 ixp2000_reg_write(IXP2000_IRQ_ENABLE_SET, (1 << irq));
324} 396}
325 397
326static struct irqchip ixp2000_irq_chip = { 398static struct irqchip ixp2000_irq_chip = {
@@ -357,16 +429,16 @@ void __init ixp2000_init_irq(void)
357 * our mask/unmask code much simpler. 429 * our mask/unmask code much simpler.
358 */ 430 */
359 for (irq = IRQ_IXP2000_SOFT_INT; irq <= IRQ_IXP2000_THDB3; irq++) { 431 for (irq = IRQ_IXP2000_SOFT_INT; irq <= IRQ_IXP2000_THDB3; irq++) {
360 if((1 << irq) & IXP2000_VALID_IRQ_MASK) { 432 if ((1 << irq) & IXP2000_VALID_IRQ_MASK) {
361 set_irq_chip(irq, &ixp2000_irq_chip); 433 set_irq_chip(irq, &ixp2000_irq_chip);
362 set_irq_handler(irq, do_level_IRQ); 434 set_irq_handler(irq, do_level_IRQ);
363 set_irq_flags(irq, IRQF_VALID); 435 set_irq_flags(irq, IRQF_VALID);
364 } else set_irq_flags(irq, 0); 436 } else set_irq_flags(irq, 0);
365 } 437 }
366 438
367 /* 439 /*
368 * GPIO IRQs are invalid until someone sets the interrupt mode 440 * GPIO IRQs are invalid until someone sets the interrupt mode
369 * by calling gpio_line_set(); 441 * by calling set_irq_type().
370 */ 442 */
371 for (irq = IRQ_IXP2000_GPIO0; irq <= IRQ_IXP2000_GPIO7; irq++) { 443 for (irq = IRQ_IXP2000_GPIO0; irq <= IRQ_IXP2000_GPIO7; irq++) {
372 set_irq_chip(irq, &ixp2000_GPIO_irq_chip); 444 set_irq_chip(irq, &ixp2000_GPIO_irq_chip);
diff --git a/arch/arm/mach-ixp2000/enp2611.c b/arch/arm/mach-ixp2000/enp2611.c
index 04b38bcf9aac..f3a291b6a9fb 100644
--- a/arch/arm/mach-ixp2000/enp2611.c
+++ b/arch/arm/mach-ixp2000/enp2611.c
@@ -197,8 +197,23 @@ static struct platform_device enp2611_flash = {
197 .resource = &enp2611_flash_resource, 197 .resource = &enp2611_flash_resource,
198}; 198};
199 199
200static struct ixp2000_i2c_pins enp2611_i2c_gpio_pins = {
201 .sda_pin = ENP2611_GPIO_SDA,
202 .scl_pin = ENP2611_GPIO_SCL,
203};
204
205static struct platform_device enp2611_i2c_controller = {
206 .name = "IXP2000-I2C",
207 .id = 0,
208 .dev = {
209 .platform_data = &enp2611_i2c_gpio_pins
210 },
211 .num_resources = 0
212};
213
200static struct platform_device *enp2611_devices[] __initdata = { 214static struct platform_device *enp2611_devices[] __initdata = {
201 &enp2611_flash 215 &enp2611_flash,
216 &enp2611_i2c_controller
202}; 217};
203 218
204static void __init enp2611_init_machine(void) 219static void __init enp2611_init_machine(void)
diff --git a/arch/arm/mach-ixp2000/ixdp2800.c b/arch/arm/mach-ixp2000/ixdp2800.c
index aec13c7108a9..468a4bbfb724 100644
--- a/arch/arm/mach-ixp2000/ixdp2800.c
+++ b/arch/arm/mach-ixp2000/ixdp2800.c
@@ -42,12 +42,6 @@
42#include <asm/mach/flash.h> 42#include <asm/mach/flash.h>
43#include <asm/mach/arch.h> 43#include <asm/mach/arch.h>
44 44
45
46void ixdp2400_init_irq(void)
47{
48 ixdp2x00_init_irq(IXDP2800_CPLD_INT_STAT, IXDP2800_CPLD_INT_MASK, IXDP2400_NR_IRQS);
49}
50
51/************************************************************************* 45/*************************************************************************
52 * IXDP2800 timer tick 46 * IXDP2800 timer tick
53 *************************************************************************/ 47 *************************************************************************/
diff --git a/arch/arm/mach-ixp2000/ixdp2x00.c b/arch/arm/mach-ixp2000/ixdp2x00.c
index 21c41fe15b99..5e4380747b53 100644
--- a/arch/arm/mach-ixp2000/ixdp2x00.c
+++ b/arch/arm/mach-ixp2000/ixdp2x00.c
@@ -42,6 +42,9 @@
42#include <asm/mach/flash.h> 42#include <asm/mach/flash.h>
43#include <asm/mach/arch.h> 43#include <asm/mach/arch.h>
44 44
45#include <asm/arch/gpio.h>
46
47
45/************************************************************************* 48/*************************************************************************
46 * IXDP2x00 IRQ Initialization 49 * IXDP2x00 IRQ Initialization
47 *************************************************************************/ 50 *************************************************************************/
diff --git a/arch/arm/mach-ixp2000/pci.c b/arch/arm/mach-ixp2000/pci.c
index 5ff2f2718c58..0788fb2b5c10 100644
--- a/arch/arm/mach-ixp2000/pci.c
+++ b/arch/arm/mach-ixp2000/pci.c
@@ -198,6 +198,19 @@ clear_master_aborts(void)
198void __init 198void __init
199ixp2000_pci_preinit(void) 199ixp2000_pci_preinit(void)
200{ 200{
201#ifndef CONFIG_IXP2000_SUPPORT_BROKEN_PCI_IO
202 /*
203 * Configure the PCI unit to properly byteswap I/O transactions,
204 * and verify that it worked.
205 */
206 ixp2000_reg_write(IXP2000_PCI_CONTROL,
207 (*IXP2000_PCI_CONTROL | PCI_CONTROL_IEE));
208
209 if ((*IXP2000_PCI_CONTROL & PCI_CONTROL_IEE) == 0)
210 panic("IXP2000: PCI I/O is broken on this ixp model, and "
211 "the needed workaround has not been configured in");
212#endif
213
201 hook_fault_code(16+6, ixp2000_pci_abort_handler, SIGBUS, 214 hook_fault_code(16+6, ixp2000_pci_abort_handler, SIGBUS,
202 "PCI config cycle to non-existent device"); 215 "PCI config cycle to non-existent device");
203} 216}
diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c
index 267ba02d77dc..04490a9f8f6e 100644
--- a/arch/arm/mach-ixp4xx/common.c
+++ b/arch/arm/mach-ixp4xx/common.c
@@ -141,7 +141,15 @@ static struct map_desc ixp4xx_io_desc[] __initdata = {
141 .physical = IXP4XX_PCI_CFG_BASE_PHYS, 141 .physical = IXP4XX_PCI_CFG_BASE_PHYS,
142 .length = IXP4XX_PCI_CFG_REGION_SIZE, 142 .length = IXP4XX_PCI_CFG_REGION_SIZE,
143 .type = MT_DEVICE 143 .type = MT_DEVICE
144 },
145#ifdef CONFIG_DEBUG_LL
146 { /* Debug UART mapping */
147 .virtual = IXP4XX_DEBUG_UART_BASE_VIRT,
148 .physical = IXP4XX_DEBUG_UART_BASE_PHYS,
149 .length = IXP4XX_DEBUG_UART_REGION_SIZE,
150 .type = MT_DEVICE
144 } 151 }
152#endif
145}; 153};
146 154
147void __init ixp4xx_map_io(void) 155void __init ixp4xx_map_io(void)
@@ -290,8 +298,8 @@ static irqreturn_t ixp4xx_timer_interrupt(int irq, void *dev_id, struct pt_regs
290 298
291static struct irqaction ixp4xx_timer_irq = { 299static struct irqaction ixp4xx_timer_irq = {
292 .name = "IXP4xx Timer Tick", 300 .name = "IXP4xx Timer Tick",
293 .flags = SA_INTERRUPT, 301 .flags = SA_INTERRUPT | SA_TIMER,
294 .handler = ixp4xx_timer_interrupt 302 .handler = ixp4xx_timer_interrupt,
295}; 303};
296 304
297static void __init ixp4xx_timer_init(void) 305static void __init ixp4xx_timer_init(void)
diff --git a/arch/arm/mach-lh7a40x/time.c b/arch/arm/mach-lh7a40x/time.c
index 51e1c814b400..be377e331f25 100644
--- a/arch/arm/mach-lh7a40x/time.c
+++ b/arch/arm/mach-lh7a40x/time.c
@@ -53,8 +53,8 @@ lh7a40x_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
53 53
54static struct irqaction lh7a40x_timer_irq = { 54static struct irqaction lh7a40x_timer_irq = {
55 .name = "LHA740x Timer Tick", 55 .name = "LHA740x Timer Tick",
56 .flags = SA_INTERRUPT, 56 .flags = SA_INTERRUPT | SA_TIMER,
57 .handler = lh7a40x_timer_interrupt 57 .handler = lh7a40x_timer_interrupt,
58}; 58};
59 59
60static void __init lh7a40x_timer_init(void) 60static void __init lh7a40x_timer_init(void)
diff --git a/arch/arm/mach-omap/pm.c b/arch/arm/mach-omap/pm.c
index 00fac155df2a..6b03ccdc1e92 100644
--- a/arch/arm/mach-omap/pm.c
+++ b/arch/arm/mach-omap/pm.c
@@ -41,7 +41,9 @@
41#include <linux/pm.h> 41#include <linux/pm.h>
42 42
43#include <asm/io.h> 43#include <asm/io.h>
44#include <asm/mach/time.h>
44#include <asm/mach-types.h> 45#include <asm/mach-types.h>
46
45#include <asm/arch/omap16xx.h> 47#include <asm/arch/omap16xx.h>
46#include <asm/arch/pm.h> 48#include <asm/arch/pm.h>
47#include <asm/arch/mux.h> 49#include <asm/arch/mux.h>
@@ -80,13 +82,13 @@ void omap_pm_idle(void)
80 return; 82 return;
81 } 83 }
82 mask32 = omap_readl(ARM_SYSST); 84 mask32 = omap_readl(ARM_SYSST);
83 local_fiq_enable();
84 local_irq_enable();
85 85
86#if defined(CONFIG_OMAP_32K_TIMER) && defined(CONFIG_NO_IDLE_HZ) 86 /*
87 /* Override timer to use VST for the next cycle */ 87 * Since an interrupt may set up a timer, we don't want to
88 omap_32k_timer_next_vst_interrupt(); 88 * reprogram the hardware timer with interrupts enabled.
89#endif 89 * Re-enable interrupts only after returning from idle.
90 */
91 timer_dyn_reprogram();
90 92
91 if ((mask32 & DSP_IDLE) == 0) { 93 if ((mask32 & DSP_IDLE) == 0) {
92 __asm__ volatile ("mcr p15, 0, r0, c7, c0, 4"); 94 __asm__ volatile ("mcr p15, 0, r0, c7, c0, 4");
@@ -102,6 +104,8 @@ void omap_pm_idle(void)
102 104
103 func_ptr(); 105 func_ptr();
104 } 106 }
107 local_fiq_enable();
108 local_irq_enable();
105} 109}
106 110
107/* 111/*
diff --git a/arch/arm/mach-omap/time.c b/arch/arm/mach-omap/time.c
index 4205fdcb632c..dd34e9f4c413 100644
--- a/arch/arm/mach-omap/time.c
+++ b/arch/arm/mach-omap/time.c
@@ -4,7 +4,7 @@
4 * OMAP Timers 4 * OMAP Timers
5 * 5 *
6 * Copyright (C) 2004 Nokia Corporation 6 * Copyright (C) 2004 Nokia Corporation
7 * Partial timer rewrite and additional VST timer support by 7 * Partial timer rewrite and additional dynamic tick timer support by
8 * Tony Lindgen <tony@atomide.com> and 8 * Tony Lindgen <tony@atomide.com> and
9 * Tuukka Tikkanen <tuukka.tikkanen@elektrobit.com> 9 * Tuukka Tikkanen <tuukka.tikkanen@elektrobit.com>
10 * 10 *
@@ -188,8 +188,8 @@ static irqreturn_t omap_mpu_timer_interrupt(int irq, void *dev_id,
188 188
189static struct irqaction omap_mpu_timer_irq = { 189static struct irqaction omap_mpu_timer_irq = {
190 .name = "mpu timer", 190 .name = "mpu timer",
191 .flags = SA_INTERRUPT, 191 .flags = SA_INTERRUPT | SA_TIMER,
192 .handler = omap_mpu_timer_interrupt 192 .handler = omap_mpu_timer_interrupt,
193}; 193};
194 194
195static unsigned long omap_mpu_timer1_overflows; 195static unsigned long omap_mpu_timer1_overflows;
@@ -203,7 +203,7 @@ static irqreturn_t omap_mpu_timer1_interrupt(int irq, void *dev_id,
203static struct irqaction omap_mpu_timer1_irq = { 203static struct irqaction omap_mpu_timer1_irq = {
204 .name = "mpu timer1 overflow", 204 .name = "mpu timer1 overflow",
205 .flags = SA_INTERRUPT, 205 .flags = SA_INTERRUPT,
206 .handler = omap_mpu_timer1_interrupt 206 .handler = omap_mpu_timer1_interrupt,
207}; 207};
208 208
209static __init void omap_init_mpu_timer(void) 209static __init void omap_init_mpu_timer(void)
@@ -261,7 +261,6 @@ unsigned long long sched_clock(void)
261 * so with HZ = 100, TVR = 327.68. 261 * so with HZ = 100, TVR = 327.68.
262 */ 262 */
263#define OMAP_32K_TIMER_TICK_PERIOD ((32768 / HZ) - 1) 263#define OMAP_32K_TIMER_TICK_PERIOD ((32768 / HZ) - 1)
264#define MAX_SKIP_JIFFIES 25
265#define TIMER_32K_SYNCHRONIZED 0xfffbc410 264#define TIMER_32K_SYNCHRONIZED 0xfffbc410
266 265
267#define JIFFIES_TO_HW_TICKS(nr_jiffies, clock_rate) \ 266#define JIFFIES_TO_HW_TICKS(nr_jiffies, clock_rate) \
@@ -347,14 +346,55 @@ static irqreturn_t omap_32k_timer_interrupt(int irq, void *dev_id,
347 return IRQ_HANDLED; 346 return IRQ_HANDLED;
348} 347}
349 348
349#ifdef CONFIG_NO_IDLE_HZ
350/*
351 * Programs the next timer interrupt needed. Called when dynamic tick is
352 * enabled, and to reprogram the ticks to skip from pm_idle. Note that
353 * we can keep the timer continuous, and don't need to set it to run in
354 * one-shot mode. This is because the timer will get reprogrammed again
355 * after next interrupt.
356 */
357void omap_32k_timer_reprogram(unsigned long next_tick)
358{
359 omap_32k_timer_start(JIFFIES_TO_HW_TICKS(next_tick, 32768) + 1);
360}
361
362static struct irqaction omap_32k_timer_irq;
363extern struct timer_update_handler timer_update;
364
365static int omap_32k_timer_enable_dyn_tick(void)
366{
367 /* No need to reprogram timer, just use the next interrupt */
368 return 0;
369}
370
371static int omap_32k_timer_disable_dyn_tick(void)
372{
373 omap_32k_timer_start(OMAP_32K_TIMER_TICK_PERIOD);
374 return 0;
375}
376
377static struct dyn_tick_timer omap_dyn_tick_timer = {
378 .enable = omap_32k_timer_enable_dyn_tick,
379 .disable = omap_32k_timer_disable_dyn_tick,
380 .reprogram = omap_32k_timer_reprogram,
381 .handler = omap_32k_timer_interrupt,
382};
383#endif /* CONFIG_NO_IDLE_HZ */
384
350static struct irqaction omap_32k_timer_irq = { 385static struct irqaction omap_32k_timer_irq = {
351 .name = "32KHz timer", 386 .name = "32KHz timer",
352 .flags = SA_INTERRUPT, 387 .flags = SA_INTERRUPT | SA_TIMER,
353 .handler = omap_32k_timer_interrupt 388 .handler = omap_32k_timer_interrupt,
354}; 389};
355 390
356static __init void omap_init_32k_timer(void) 391static __init void omap_init_32k_timer(void)
357{ 392{
393
394#ifdef CONFIG_NO_IDLE_HZ
395 omap_timer.dyn_tick = &omap_dyn_tick_timer;
396#endif
397
358 setup_irq(INT_OS_TIMER, &omap_32k_timer_irq); 398 setup_irq(INT_OS_TIMER, &omap_32k_timer_irq);
359 omap_timer.offset = omap_32k_timer_gettimeoffset; 399 omap_timer.offset = omap_32k_timer_gettimeoffset;
360 omap_32k_last_tick = omap_32k_sync_timer_read(); 400 omap_32k_last_tick = omap_32k_sync_timer_read();
diff --git a/arch/arm/mach-omap/usb.c b/arch/arm/mach-omap/usb.c
index 6e805d451d0e..7f37857b1a28 100644
--- a/arch/arm/mach-omap/usb.c
+++ b/arch/arm/mach-omap/usb.c
@@ -288,8 +288,8 @@ static void usb_release(struct device *dev)
288static struct resource udc_resources[] = { 288static struct resource udc_resources[] = {
289 /* order is significant! */ 289 /* order is significant! */
290 { /* registers */ 290 { /* registers */
291 .start = IO_ADDRESS(UDC_BASE), 291 .start = UDC_BASE,
292 .end = IO_ADDRESS(UDC_BASE + 0xff), 292 .end = UDC_BASE + 0xff,
293 .flags = IORESOURCE_MEM, 293 .flags = IORESOURCE_MEM,
294 }, { /* general IRQ */ 294 }, { /* general IRQ */
295 .start = IH2_BASE + 20, 295 .start = IH2_BASE + 20,
@@ -355,8 +355,8 @@ static struct platform_device ohci_device = {
355static struct resource otg_resources[] = { 355static struct resource otg_resources[] = {
356 /* order is significant! */ 356 /* order is significant! */
357 { 357 {
358 .start = IO_ADDRESS(OTG_BASE), 358 .start = OTG_BASE,
359 .end = IO_ADDRESS(OTG_BASE + 0xff), 359 .end = OTG_BASE + 0xff,
360 .flags = IORESOURCE_MEM, 360 .flags = IORESOURCE_MEM,
361 }, { 361 }, {
362 .start = IH2_BASE + 8, 362 .start = IH2_BASE + 8,
diff --git a/arch/arm/mach-pxa/time.c b/arch/arm/mach-pxa/time.c
index 473fb6173f72..6e5202154f91 100644
--- a/arch/arm/mach-pxa/time.c
+++ b/arch/arm/mach-pxa/time.c
@@ -105,8 +105,8 @@ pxa_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
105 105
106static struct irqaction pxa_timer_irq = { 106static struct irqaction pxa_timer_irq = {
107 .name = "PXA Timer Tick", 107 .name = "PXA Timer Tick",
108 .flags = SA_INTERRUPT, 108 .flags = SA_INTERRUPT | SA_TIMER,
109 .handler = pxa_timer_interrupt 109 .handler = pxa_timer_interrupt,
110}; 110};
111 111
112static void __init pxa_timer_init(void) 112static void __init pxa_timer_init(void)
diff --git a/arch/arm/mach-rpc/riscpc.c b/arch/arm/mach-rpc/riscpc.c
index 815c53225cd8..437106881436 100644
--- a/arch/arm/mach-rpc/riscpc.c
+++ b/arch/arm/mach-rpc/riscpc.c
@@ -32,10 +32,7 @@
32 32
33extern void rpc_init_irq(void); 33extern void rpc_init_irq(void);
34 34
35extern unsigned int vram_size; 35unsigned int vram_size;
36
37#if 0
38
39unsigned int memc_ctrl_reg; 36unsigned int memc_ctrl_reg;
40unsigned int number_mfm_drives; 37unsigned int number_mfm_drives;
41 38
@@ -63,8 +60,6 @@ static int __init parse_tag_acorn(const struct tag *tag)
63 60
64__tagtable(ATAG_ACORN, parse_tag_acorn); 61__tagtable(ATAG_ACORN, parse_tag_acorn);
65 62
66#endif
67
68static struct map_desc rpc_io_desc[] __initdata = { 63static struct map_desc rpc_io_desc[] __initdata = {
69 { SCREEN_BASE, SCREEN_START, 2*1048576, MT_DEVICE }, /* VRAM */ 64 { SCREEN_BASE, SCREEN_START, 2*1048576, MT_DEVICE }, /* VRAM */
70 { (u32)IO_BASE, IO_START, IO_SIZE , MT_DEVICE }, /* IO space */ 65 { (u32)IO_BASE, IO_START, IO_SIZE , MT_DEVICE }, /* IO space */
diff --git a/arch/arm/mach-s3c2410/Kconfig b/arch/arm/mach-s3c2410/Kconfig
index 534df0c6c770..d4d03d0daaec 100644
--- a/arch/arm/mach-s3c2410/Kconfig
+++ b/arch/arm/mach-s3c2410/Kconfig
@@ -154,6 +154,11 @@ config S3C2410_PM_CHECK_CHUNKSIZE
154 the CRC data block will take more memory, but wil identify any 154 the CRC data block will take more memory, but wil identify any
155 faults with better precision. 155 faults with better precision.
156 156
157config PM_SIMTEC
158 bool
159 depends on PM && (ARCH_BAST || MACH_VR1000)
160 default y
161
157config S3C2410_LOWLEVEL_UART_PORT 162config S3C2410_LOWLEVEL_UART_PORT
158 int "S3C2410 UART to use for low-level messages" 163 int "S3C2410 UART to use for low-level messages"
159 default 0 164 default 0
diff --git a/arch/arm/mach-s3c2410/Makefile b/arch/arm/mach-s3c2410/Makefile
index 7c379aad5d62..f99b689e4392 100644
--- a/arch/arm/mach-s3c2410/Makefile
+++ b/arch/arm/mach-s3c2410/Makefile
@@ -18,6 +18,7 @@ obj-$(CONFIG_S3C2410_DMA) += dma.o
18# Power Management support 18# Power Management support
19 19
20obj-$(CONFIG_PM) += pm.o sleep.o 20obj-$(CONFIG_PM) += pm.o sleep.o
21obj-$(CONFIG_PM_SIMTEC) += pm-simtec.o
21 22
22# S3C2440 support 23# S3C2440 support
23 24
diff --git a/arch/arm/mach-s3c2410/devs.c b/arch/arm/mach-s3c2410/devs.c
index 64792f678668..4664bd11adc1 100644
--- a/arch/arm/mach-s3c2410/devs.c
+++ b/arch/arm/mach-s3c2410/devs.c
@@ -96,8 +96,8 @@ struct platform_device s3c_device_lcd = {
96 .num_resources = ARRAY_SIZE(s3c_lcd_resource), 96 .num_resources = ARRAY_SIZE(s3c_lcd_resource),
97 .resource = s3c_lcd_resource, 97 .resource = s3c_lcd_resource,
98 .dev = { 98 .dev = {
99 .dma_mask = &s3c_device_lcd_dmamask, 99 .dma_mask = &s3c_device_lcd_dmamask,
100 .coherent_dma_mask = 0xffffffffUL 100 .coherent_dma_mask = 0xffffffffUL
101 } 101 }
102}; 102};
103 103
diff --git a/arch/arm/mach-s3c2410/irq.c b/arch/arm/mach-s3c2410/irq.c
index b668c48f4399..cf9f46d88061 100644
--- a/arch/arm/mach-s3c2410/irq.c
+++ b/arch/arm/mach-s3c2410/irq.c
@@ -40,8 +40,11 @@
40 * 04-Nov-2004 Ben Dooks 40 * 04-Nov-2004 Ben Dooks
41 * Fix standard IRQ wake for EINT0..4 and RTC 41 * Fix standard IRQ wake for EINT0..4 and RTC
42 * 42 *
43 * 22-Feb-2004 Ben Dooks 43 * 22-Feb-2005 Ben Dooks
44 * Fixed edge-triggering on ADC IRQ 44 * Fixed edge-triggering on ADC IRQ
45 *
46 * 28-Jun-2005 Ben Dooks
47 * Mark IRQ_LCD valid
45*/ 48*/
46 49
47#include <linux/init.h> 50#include <linux/init.h>
@@ -366,7 +369,6 @@ static struct irqchip s3c_irq_eint0t4 = {
366#define INTMSK_UART1 (1UL << (IRQ_UART1 - IRQ_EINT0)) 369#define INTMSK_UART1 (1UL << (IRQ_UART1 - IRQ_EINT0))
367#define INTMSK_UART2 (1UL << (IRQ_UART2 - IRQ_EINT0)) 370#define INTMSK_UART2 (1UL << (IRQ_UART2 - IRQ_EINT0))
368#define INTMSK_ADCPARENT (1UL << (IRQ_ADCPARENT - IRQ_EINT0)) 371#define INTMSK_ADCPARENT (1UL << (IRQ_ADCPARENT - IRQ_EINT0))
369#define INTMSK_LCD (1UL << (IRQ_LCD - IRQ_EINT0))
370 372
371static inline void 373static inline void
372s3c_irqsub_mask(unsigned int irqno, unsigned int parentbit, 374s3c_irqsub_mask(unsigned int irqno, unsigned int parentbit,
@@ -716,7 +718,6 @@ void __init s3c24xx_init_irq(void)
716 case IRQ_UART0: 718 case IRQ_UART0:
717 case IRQ_UART1: 719 case IRQ_UART1:
718 case IRQ_UART2: 720 case IRQ_UART2:
719 case IRQ_LCD:
720 case IRQ_ADCPARENT: 721 case IRQ_ADCPARENT:
721 set_irq_chip(irqno, &s3c_irq_level_chip); 722 set_irq_chip(irqno, &s3c_irq_level_chip);
722 set_irq_handler(irqno, do_level_IRQ); 723 set_irq_handler(irqno, do_level_IRQ);
diff --git a/arch/arm/mach-s3c2410/mach-bast.c b/arch/arm/mach-s3c2410/mach-bast.c
index 3bb97eb6e693..549bcb1f32c0 100644
--- a/arch/arm/mach-s3c2410/mach-bast.c
+++ b/arch/arm/mach-s3c2410/mach-bast.c
@@ -26,6 +26,8 @@
26 * 03-Mar-2005 BJD Ensured that bast-cpld.h is included 26 * 03-Mar-2005 BJD Ensured that bast-cpld.h is included
27 * 10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA 27 * 10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA
28 * 14-Mar-2006 BJD Updated for __iomem changes 28 * 14-Mar-2006 BJD Updated for __iomem changes
29 * 22-Jun-2006 BJD Added DM9000 platform information
30 * 28-Jun-2006 BJD Moved pm functionality out to common code
29*/ 31*/
30 32
31#include <linux/kernel.h> 33#include <linux/kernel.h>
@@ -35,6 +37,7 @@
35#include <linux/timer.h> 37#include <linux/timer.h>
36#include <linux/init.h> 38#include <linux/init.h>
37#include <linux/device.h> 39#include <linux/device.h>
40#include <linux/dm9000.h>
38 41
39#include <asm/mach/arch.h> 42#include <asm/mach/arch.h>
40#include <asm/mach/map.h> 43#include <asm/mach/map.h>
@@ -53,6 +56,7 @@
53#include <asm/arch/regs-serial.h> 56#include <asm/arch/regs-serial.h>
54#include <asm/arch/regs-gpio.h> 57#include <asm/arch/regs-gpio.h>
55#include <asm/arch/regs-mem.h> 58#include <asm/arch/regs-mem.h>
59#include <asm/arch/regs-lcd.h>
56#include <asm/arch/nand.h> 60#include <asm/arch/nand.h>
57 61
58#include <linux/mtd/mtd.h> 62#include <linux/mtd/mtd.h>
@@ -64,7 +68,6 @@
64#include "devs.h" 68#include "devs.h"
65#include "cpu.h" 69#include "cpu.h"
66#include "usb-simtec.h" 70#include "usb-simtec.h"
67#include "pm.h"
68 71
69#define COPYRIGHT ", (c) 2004-2005 Simtec Electronics" 72#define COPYRIGHT ", (c) 2004-2005 Simtec Electronics"
70 73
@@ -112,7 +115,6 @@ static struct map_desc bast_iodesc[] __initdata = {
112 { VA_C2(BAST_VA_ISAMEM), PA_CS2(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE }, 115 { VA_C2(BAST_VA_ISAMEM), PA_CS2(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE },
113 { VA_C2(BAST_VA_ASIXNET), PA_CS3(BAST_PA_ASIXNET), SZ_1M, MT_DEVICE }, 116 { VA_C2(BAST_VA_ASIXNET), PA_CS3(BAST_PA_ASIXNET), SZ_1M, MT_DEVICE },
114 { VA_C2(BAST_VA_SUPERIO), PA_CS2(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE }, 117 { VA_C2(BAST_VA_SUPERIO), PA_CS2(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE },
115 { VA_C2(BAST_VA_DM9000), PA_CS2(BAST_PA_DM9000), SZ_1M, MT_DEVICE },
116 { VA_C2(BAST_VA_IDEPRI), PA_CS3(BAST_PA_IDEPRI), SZ_1M, MT_DEVICE }, 118 { VA_C2(BAST_VA_IDEPRI), PA_CS3(BAST_PA_IDEPRI), SZ_1M, MT_DEVICE },
117 { VA_C2(BAST_VA_IDESEC), PA_CS3(BAST_PA_IDESEC), SZ_1M, MT_DEVICE }, 119 { VA_C2(BAST_VA_IDESEC), PA_CS3(BAST_PA_IDESEC), SZ_1M, MT_DEVICE },
118 { VA_C2(BAST_VA_IDEPRIAUX), PA_CS3(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, 120 { VA_C2(BAST_VA_IDEPRIAUX), PA_CS3(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE },
@@ -123,7 +125,6 @@ static struct map_desc bast_iodesc[] __initdata = {
123 { VA_C3(BAST_VA_ISAMEM), PA_CS3(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE }, 125 { VA_C3(BAST_VA_ISAMEM), PA_CS3(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE },
124 { VA_C3(BAST_VA_ASIXNET), PA_CS3(BAST_PA_ASIXNET), SZ_1M, MT_DEVICE }, 126 { VA_C3(BAST_VA_ASIXNET), PA_CS3(BAST_PA_ASIXNET), SZ_1M, MT_DEVICE },
125 { VA_C3(BAST_VA_SUPERIO), PA_CS3(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE }, 127 { VA_C3(BAST_VA_SUPERIO), PA_CS3(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE },
126 { VA_C3(BAST_VA_DM9000), PA_CS3(BAST_PA_DM9000), SZ_1M, MT_DEVICE },
127 { VA_C3(BAST_VA_IDEPRI), PA_CS3(BAST_PA_IDEPRI), SZ_1M, MT_DEVICE }, 128 { VA_C3(BAST_VA_IDEPRI), PA_CS3(BAST_PA_IDEPRI), SZ_1M, MT_DEVICE },
128 { VA_C3(BAST_VA_IDESEC), PA_CS3(BAST_PA_IDESEC), SZ_1M, MT_DEVICE }, 129 { VA_C3(BAST_VA_IDESEC), PA_CS3(BAST_PA_IDESEC), SZ_1M, MT_DEVICE },
129 { VA_C3(BAST_VA_IDEPRIAUX), PA_CS3(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, 130 { VA_C3(BAST_VA_IDEPRIAUX), PA_CS3(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE },
@@ -134,7 +135,6 @@ static struct map_desc bast_iodesc[] __initdata = {
134 { VA_C4(BAST_VA_ISAMEM), PA_CS4(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE }, 135 { VA_C4(BAST_VA_ISAMEM), PA_CS4(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE },
135 { VA_C4(BAST_VA_ASIXNET), PA_CS5(BAST_PA_ASIXNET), SZ_1M, MT_DEVICE }, 136 { VA_C4(BAST_VA_ASIXNET), PA_CS5(BAST_PA_ASIXNET), SZ_1M, MT_DEVICE },
136 { VA_C4(BAST_VA_SUPERIO), PA_CS4(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE }, 137 { VA_C4(BAST_VA_SUPERIO), PA_CS4(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE },
137 { VA_C4(BAST_VA_DM9000), PA_CS4(BAST_PA_DM9000), SZ_1M, MT_DEVICE },
138 { VA_C4(BAST_VA_IDEPRI), PA_CS5(BAST_PA_IDEPRI), SZ_1M, MT_DEVICE }, 138 { VA_C4(BAST_VA_IDEPRI), PA_CS5(BAST_PA_IDEPRI), SZ_1M, MT_DEVICE },
139 { VA_C4(BAST_VA_IDESEC), PA_CS5(BAST_PA_IDESEC), SZ_1M, MT_DEVICE }, 139 { VA_C4(BAST_VA_IDESEC), PA_CS5(BAST_PA_IDESEC), SZ_1M, MT_DEVICE },
140 { VA_C4(BAST_VA_IDEPRIAUX), PA_CS5(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, 140 { VA_C4(BAST_VA_IDEPRIAUX), PA_CS5(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE },
@@ -145,7 +145,6 @@ static struct map_desc bast_iodesc[] __initdata = {
145 { VA_C5(BAST_VA_ISAMEM), PA_CS5(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE }, 145 { VA_C5(BAST_VA_ISAMEM), PA_CS5(BAST_PA_ISAMEM), SZ_16M, MT_DEVICE },
146 { VA_C5(BAST_VA_ASIXNET), PA_CS5(BAST_PA_ASIXNET), SZ_1M, MT_DEVICE }, 146 { VA_C5(BAST_VA_ASIXNET), PA_CS5(BAST_PA_ASIXNET), SZ_1M, MT_DEVICE },
147 { VA_C5(BAST_VA_SUPERIO), PA_CS5(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE }, 147 { VA_C5(BAST_VA_SUPERIO), PA_CS5(BAST_PA_SUPERIO), SZ_1M, MT_DEVICE },
148 { VA_C5(BAST_VA_DM9000), PA_CS5(BAST_PA_DM9000), SZ_1M, MT_DEVICE },
149 { VA_C5(BAST_VA_IDEPRI), PA_CS5(BAST_PA_IDEPRI), SZ_1M, MT_DEVICE }, 148 { VA_C5(BAST_VA_IDEPRI), PA_CS5(BAST_PA_IDEPRI), SZ_1M, MT_DEVICE },
150 { VA_C5(BAST_VA_IDESEC), PA_CS5(BAST_PA_IDESEC), SZ_1M, MT_DEVICE }, 149 { VA_C5(BAST_VA_IDESEC), PA_CS5(BAST_PA_IDESEC), SZ_1M, MT_DEVICE },
151 { VA_C5(BAST_VA_IDEPRIAUX), PA_CS5(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, 150 { VA_C5(BAST_VA_IDEPRIAUX), PA_CS5(BAST_PA_IDEPRIAUX), SZ_1M, MT_DEVICE },
@@ -313,6 +312,45 @@ static struct s3c2410_platform_nand bast_nand_info = {
313 .select_chip = bast_nand_select, 312 .select_chip = bast_nand_select,
314}; 313};
315 314
315/* DM9000 */
316
317static struct resource bast_dm9k_resource[] = {
318 [0] = {
319 .start = S3C2410_CS5 + BAST_PA_DM9000,
320 .end = S3C2410_CS5 + BAST_PA_DM9000 + 3,
321 .flags = IORESOURCE_MEM
322 },
323 [1] = {
324 .start = S3C2410_CS5 + BAST_PA_DM9000 + 0x40,
325 .end = S3C2410_CS5 + BAST_PA_DM9000 + 0x40 + 0x3f,
326 .flags = IORESOURCE_MEM
327 },
328 [2] = {
329 .start = IRQ_DM9000,
330 .end = IRQ_DM9000,
331 .flags = IORESOURCE_IRQ
332 }
333
334};
335
336/* for the moment we limit ourselves to 16bit IO until some
337 * better IO routines can be written and tested
338*/
339
340struct dm9000_plat_data bast_dm9k_platdata = {
341 .flags = DM9000_PLATF_16BITONLY
342};
343
344static struct platform_device bast_device_dm9k = {
345 .name = "dm9000",
346 .id = 0,
347 .num_resources = ARRAY_SIZE(bast_dm9k_resource),
348 .resource = bast_dm9k_resource,
349 .dev = {
350 .platform_data = &bast_dm9k_platdata,
351 }
352};
353
316 354
317/* Standard BAST devices */ 355/* Standard BAST devices */
318 356
@@ -324,7 +362,8 @@ static struct platform_device *bast_devices[] __initdata = {
324 &s3c_device_iis, 362 &s3c_device_iis,
325 &s3c_device_rtc, 363 &s3c_device_rtc,
326 &s3c_device_nand, 364 &s3c_device_nand,
327 &bast_device_nor 365 &bast_device_nor,
366 &bast_device_dm9k,
328}; 367};
329 368
330static struct clk *bast_clocks[] = { 369static struct clk *bast_clocks[] = {
@@ -366,44 +405,13 @@ void __init bast_map_io(void)
366 usb_simtec_init(); 405 usb_simtec_init();
367} 406}
368 407
369void __init bast_init_irq(void)
370{
371 s3c24xx_init_irq();
372}
373
374#ifdef CONFIG_PM
375
376/* bast_init_machine
377 *
378 * enable the power management functions for the EB2410ITX
379*/
380
381static __init void bast_init_machine(void)
382{
383 unsigned long gstatus4;
384
385 printk(KERN_INFO "BAST Power Manangement" COPYRIGHT "\n");
386
387 gstatus4 = (__raw_readl(S3C2410_BANKCON7) & 0x3) << 30;
388 gstatus4 |= (__raw_readl(S3C2410_BANKCON6) & 0x3) << 28;
389 gstatus4 |= (__raw_readl(S3C2410_BANKSIZE) & S3C2410_BANKSIZE_MASK);
390
391 __raw_writel(gstatus4, S3C2410_GSTATUS4);
392
393 s3c2410_pm_init();
394}
395
396#else
397#define bast_init_machine NULL
398#endif
399
400 408
401MACHINE_START(BAST, "Simtec-BAST") 409MACHINE_START(BAST, "Simtec-BAST")
402 MAINTAINER("Ben Dooks <ben@simtec.co.uk>") 410 MAINTAINER("Ben Dooks <ben@simtec.co.uk>")
403 BOOT_MEM(S3C2410_SDRAM_PA, S3C2410_PA_UART, (u32)S3C24XX_VA_UART) 411 BOOT_MEM(S3C2410_SDRAM_PA, S3C2410_PA_UART, (u32)S3C24XX_VA_UART)
404 BOOT_PARAMS(S3C2410_SDRAM_PA + 0x100) 412 BOOT_PARAMS(S3C2410_SDRAM_PA + 0x100)
405 MAPIO(bast_map_io) 413
406 INITIRQ(bast_init_irq) 414 .map_io = bast_map_io,
407 .init_machine = bast_init_machine, 415 .init_irq = s3c24xx_init_irq,
408 .timer = &s3c24xx_timer, 416 .timer = &s3c24xx_timer,
409MACHINE_END 417MACHINE_END
diff --git a/arch/arm/mach-s3c2410/mach-vr1000.c b/arch/arm/mach-s3c2410/mach-vr1000.c
index 5512146b1ce4..1db2855e3e56 100644
--- a/arch/arm/mach-s3c2410/mach-vr1000.c
+++ b/arch/arm/mach-s3c2410/mach-vr1000.c
@@ -27,6 +27,7 @@
27 * 10-Feb-2005 BJD Added power-off capability 27 * 10-Feb-2005 BJD Added power-off capability
28 * 10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA 28 * 10-Mar-2005 LCVR Changed S3C2410_VA to S3C24XX_VA
29 * 14-Mar-2006 BJD void __iomem fixes 29 * 14-Mar-2006 BJD void __iomem fixes
30 * 22-Jun-2006 BJD Added DM9000 platform information
30*/ 31*/
31 32
32#include <linux/kernel.h> 33#include <linux/kernel.h>
@@ -35,6 +36,7 @@
35#include <linux/list.h> 36#include <linux/list.h>
36#include <linux/timer.h> 37#include <linux/timer.h>
37#include <linux/init.h> 38#include <linux/init.h>
39#include <linux/dm9000.h>
38 40
39#include <linux/serial.h> 41#include <linux/serial.h>
40#include <linux/tty.h> 42#include <linux/tty.h>
@@ -98,28 +100,24 @@ static struct map_desc vr1000_iodesc[] __initdata = {
98 * are only 8bit */ 100 * are only 8bit */
99 101
100 /* slow, byte */ 102 /* slow, byte */
101 { VA_C2(VR1000_VA_DM9000), PA_CS2(VR1000_PA_DM9000), SZ_1M, MT_DEVICE },
102 { VA_C2(VR1000_VA_IDEPRI), PA_CS3(VR1000_PA_IDEPRI), SZ_1M, MT_DEVICE }, 103 { VA_C2(VR1000_VA_IDEPRI), PA_CS3(VR1000_PA_IDEPRI), SZ_1M, MT_DEVICE },
103 { VA_C2(VR1000_VA_IDESEC), PA_CS3(VR1000_PA_IDESEC), SZ_1M, MT_DEVICE }, 104 { VA_C2(VR1000_VA_IDESEC), PA_CS3(VR1000_PA_IDESEC), SZ_1M, MT_DEVICE },
104 { VA_C2(VR1000_VA_IDEPRIAUX), PA_CS3(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, 105 { VA_C2(VR1000_VA_IDEPRIAUX), PA_CS3(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE },
105 { VA_C2(VR1000_VA_IDESECAUX), PA_CS3(VR1000_PA_IDESECAUX), SZ_1M, MT_DEVICE }, 106 { VA_C2(VR1000_VA_IDESECAUX), PA_CS3(VR1000_PA_IDESECAUX), SZ_1M, MT_DEVICE },
106 107
107 /* slow, word */ 108 /* slow, word */
108 { VA_C3(VR1000_VA_DM9000), PA_CS3(VR1000_PA_DM9000), SZ_1M, MT_DEVICE },
109 { VA_C3(VR1000_VA_IDEPRI), PA_CS3(VR1000_PA_IDEPRI), SZ_1M, MT_DEVICE }, 109 { VA_C3(VR1000_VA_IDEPRI), PA_CS3(VR1000_PA_IDEPRI), SZ_1M, MT_DEVICE },
110 { VA_C3(VR1000_VA_IDESEC), PA_CS3(VR1000_PA_IDESEC), SZ_1M, MT_DEVICE }, 110 { VA_C3(VR1000_VA_IDESEC), PA_CS3(VR1000_PA_IDESEC), SZ_1M, MT_DEVICE },
111 { VA_C3(VR1000_VA_IDEPRIAUX), PA_CS3(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, 111 { VA_C3(VR1000_VA_IDEPRIAUX), PA_CS3(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE },
112 { VA_C3(VR1000_VA_IDESECAUX), PA_CS3(VR1000_PA_IDESECAUX), SZ_1M, MT_DEVICE }, 112 { VA_C3(VR1000_VA_IDESECAUX), PA_CS3(VR1000_PA_IDESECAUX), SZ_1M, MT_DEVICE },
113 113
114 /* fast, byte */ 114 /* fast, byte */
115 { VA_C4(VR1000_VA_DM9000), PA_CS4(VR1000_PA_DM9000), SZ_1M, MT_DEVICE },
116 { VA_C4(VR1000_VA_IDEPRI), PA_CS5(VR1000_PA_IDEPRI), SZ_1M, MT_DEVICE }, 115 { VA_C4(VR1000_VA_IDEPRI), PA_CS5(VR1000_PA_IDEPRI), SZ_1M, MT_DEVICE },
117 { VA_C4(VR1000_VA_IDESEC), PA_CS5(VR1000_PA_IDESEC), SZ_1M, MT_DEVICE }, 116 { VA_C4(VR1000_VA_IDESEC), PA_CS5(VR1000_PA_IDESEC), SZ_1M, MT_DEVICE },
118 { VA_C4(VR1000_VA_IDEPRIAUX), PA_CS5(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, 117 { VA_C4(VR1000_VA_IDEPRIAUX), PA_CS5(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE },
119 { VA_C4(VR1000_VA_IDESECAUX), PA_CS5(VR1000_PA_IDESECAUX), SZ_1M, MT_DEVICE }, 118 { VA_C4(VR1000_VA_IDESECAUX), PA_CS5(VR1000_PA_IDESECAUX), SZ_1M, MT_DEVICE },
120 119
121 /* fast, word */ 120 /* fast, word */
122 { VA_C5(VR1000_VA_DM9000), PA_CS5(VR1000_PA_DM9000), SZ_1M, MT_DEVICE },
123 { VA_C5(VR1000_VA_IDEPRI), PA_CS5(VR1000_PA_IDEPRI), SZ_1M, MT_DEVICE }, 121 { VA_C5(VR1000_VA_IDEPRI), PA_CS5(VR1000_PA_IDEPRI), SZ_1M, MT_DEVICE },
124 { VA_C5(VR1000_VA_IDESEC), PA_CS5(VR1000_PA_IDESEC), SZ_1M, MT_DEVICE }, 122 { VA_C5(VR1000_VA_IDESEC), PA_CS5(VR1000_PA_IDESEC), SZ_1M, MT_DEVICE },
125 { VA_C5(VR1000_VA_IDEPRIAUX), PA_CS5(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE }, 123 { VA_C5(VR1000_VA_IDEPRIAUX), PA_CS5(VR1000_PA_IDEPRIAUX), SZ_1M, MT_DEVICE },
@@ -246,6 +244,74 @@ static struct platform_device vr1000_nor = {
246 .resource = vr1000_nor_resource, 244 .resource = vr1000_nor_resource,
247}; 245};
248 246
247/* DM9000 ethernet devices */
248
249static struct resource vr1000_dm9k0_resource[] = {
250 [0] = {
251 .start = S3C2410_CS5 + VR1000_PA_DM9000,
252 .end = S3C2410_CS5 + VR1000_PA_DM9000 + 3,
253 .flags = IORESOURCE_MEM
254 },
255 [1] = {
256 .start = S3C2410_CS5 + VR1000_PA_DM9000 + 0x40,
257 .end = S3C2410_CS5 + VR1000_PA_DM9000 + 0x7f,
258 .flags = IORESOURCE_MEM
259 },
260 [2] = {
261 .start = IRQ_VR1000_DM9000A,
262 .end = IRQ_VR1000_DM9000A,
263 .flags = IORESOURCE_IRQ
264 }
265
266};
267
268static struct resource vr1000_dm9k1_resource[] = {
269 [0] = {
270 .start = S3C2410_CS5 + VR1000_PA_DM9000 + 0x80,
271 .end = S3C2410_CS5 + VR1000_PA_DM9000 + 0x83,
272 .flags = IORESOURCE_MEM
273 },
274 [1] = {
275 .start = S3C2410_CS5 + VR1000_PA_DM9000 + 0xC0,
276 .end = S3C2410_CS5 + VR1000_PA_DM9000 + 0xFF,
277 .flags = IORESOURCE_MEM
278 },
279 [2] = {
280 .start = IRQ_VR1000_DM9000N,
281 .end = IRQ_VR1000_DM9000N,
282 .flags = IORESOURCE_IRQ
283 }
284};
285
286/* for the moment we limit ourselves to 16bit IO until some
287 * better IO routines can be written and tested
288*/
289
290struct dm9000_plat_data vr1000_dm9k_platdata = {
291 .flags = DM9000_PLATF_16BITONLY,
292};
293
294static struct platform_device vr1000_dm9k0 = {
295 .name = "dm9000",
296 .id = 0,
297 .num_resources = ARRAY_SIZE(vr1000_dm9k0_resource),
298 .resource = vr1000_dm9k0_resource,
299 .dev = {
300 .platform_data = &vr1000_dm9k_platdata,
301 }
302};
303
304static struct platform_device vr1000_dm9k1 = {
305 .name = "dm9000",
306 .id = 1,
307 .num_resources = ARRAY_SIZE(vr1000_dm9k1_resource),
308 .resource = vr1000_dm9k1_resource,
309 .dev = {
310 .platform_data = &vr1000_dm9k_platdata,
311 }
312};
313
314/* devices for this board */
249 315
250static struct platform_device *vr1000_devices[] __initdata = { 316static struct platform_device *vr1000_devices[] __initdata = {
251 &s3c_device_usb, 317 &s3c_device_usb,
@@ -253,8 +319,11 @@ static struct platform_device *vr1000_devices[] __initdata = {
253 &s3c_device_wdt, 319 &s3c_device_wdt,
254 &s3c_device_i2c, 320 &s3c_device_i2c,
255 &s3c_device_iis, 321 &s3c_device_iis,
322 &s3c_device_adc,
256 &serial_device, 323 &serial_device,
257 &vr1000_nor, 324 &vr1000_nor,
325 &vr1000_dm9k0,
326 &vr1000_dm9k1
258}; 327};
259 328
260static struct clk *vr1000_clocks[] = { 329static struct clk *vr1000_clocks[] = {
@@ -302,16 +371,12 @@ void __init vr1000_map_io(void)
302 usb_simtec_init(); 371 usb_simtec_init();
303} 372}
304 373
305void __init vr1000_init_irq(void)
306{
307 s3c24xx_init_irq();
308}
309 374
310MACHINE_START(VR1000, "Thorcom-VR1000") 375MACHINE_START(VR1000, "Thorcom-VR1000")
311 MAINTAINER("Ben Dooks <ben@simtec.co.uk>") 376 MAINTAINER("Ben Dooks <ben@simtec.co.uk>")
312 BOOT_MEM(S3C2410_SDRAM_PA, S3C2410_PA_UART, (u32)S3C24XX_VA_UART) 377 BOOT_MEM(S3C2410_SDRAM_PA, S3C2410_PA_UART, (u32)S3C24XX_VA_UART)
313 BOOT_PARAMS(S3C2410_SDRAM_PA + 0x100) 378 BOOT_PARAMS(S3C2410_SDRAM_PA + 0x100)
314 MAPIO(vr1000_map_io) 379 .map_io = vr1000_map_io,
315 INITIRQ(vr1000_init_irq) 380 .init_irq = s3c24xx_init_irq,
316 .timer = &s3c24xx_timer, 381 .timer = &s3c24xx_timer,
317MACHINE_END 382MACHINE_END
diff --git a/arch/arm/mach-s3c2410/pm-simtec.c b/arch/arm/mach-s3c2410/pm-simtec.c
new file mode 100644
index 000000000000..2cb798832223
--- /dev/null
+++ b/arch/arm/mach-s3c2410/pm-simtec.c
@@ -0,0 +1,65 @@
1/* linux/arch/arm/mach-s3c2410/pm-simtec.c
2 *
3 * Copyright (c) 2004 Simtec Electronics
4 * Ben Dooks <ben@simtec.co.uk>
5 *
6 * http://armlinux.simtec.co.uk/
7 *
8 * Power Management helpers for Simtec S3C24XX implementations
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
13*/
14
15#include <linux/kernel.h>
16#include <linux/types.h>
17#include <linux/interrupt.h>
18#include <linux/list.h>
19#include <linux/timer.h>
20#include <linux/init.h>
21#include <linux/device.h>
22
23#include <asm/mach/arch.h>
24#include <asm/mach/map.h>
25
26#include <asm/hardware.h>
27#include <asm/io.h>
28
29#include <asm/arch/map.h>
30#include <asm/arch/regs-serial.h>
31#include <asm/arch/regs-gpio.h>
32#include <asm/arch/regs-mem.h>
33
34#include <asm/mach-types.h>
35
36#include "pm.h"
37
38#define COPYRIGHT ", (c) 2005 Simtec Electronics"
39
40/* pm_simtec_init
41 *
42 * enable the power management functions
43*/
44
45static __init int pm_simtec_init(void)
46{
47 unsigned long gstatus4;
48
49 /* check which machine we are running on */
50
51 if (!machine_is_bast() && !machine_is_vr1000())
52 return 0;
53
54 printk(KERN_INFO "Simtec Board Power Manangement" COPYRIGHT "\n");
55
56 gstatus4 = (__raw_readl(S3C2410_BANKCON7) & 0x3) << 30;
57 gstatus4 |= (__raw_readl(S3C2410_BANKCON6) & 0x3) << 28;
58 gstatus4 |= (__raw_readl(S3C2410_BANKSIZE) & S3C2410_BANKSIZE_MASK);
59
60 __raw_writel(gstatus4, S3C2410_GSTATUS4);
61
62 return s3c2410_pm_init();
63}
64
65arch_initcall(pm_simtec_init);
diff --git a/arch/arm/mach-s3c2410/time.c b/arch/arm/mach-s3c2410/time.c
index 179f0e031af4..765a3a9ae032 100644
--- a/arch/arm/mach-s3c2410/time.c
+++ b/arch/arm/mach-s3c2410/time.c
@@ -137,8 +137,8 @@ s3c2410_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
137 137
138static struct irqaction s3c2410_timer_irq = { 138static struct irqaction s3c2410_timer_irq = {
139 .name = "S3C2410 Timer Tick", 139 .name = "S3C2410 Timer Tick",
140 .flags = SA_INTERRUPT, 140 .flags = SA_INTERRUPT | SA_TIMER,
141 .handler = s3c2410_timer_interrupt 141 .handler = s3c2410_timer_interrupt,
142}; 142};
143 143
144/* 144/*
diff --git a/arch/arm/mach-sa1100/h3600.c b/arch/arm/mach-sa1100/h3600.c
index 84c86543501a..65dbe991426d 100644
--- a/arch/arm/mach-sa1100/h3600.c
+++ b/arch/arm/mach-sa1100/h3600.c
@@ -727,7 +727,7 @@ static void h3800_IRQ_demux(unsigned int irq, struct irqdesc *desc, struct pt_re
727static struct irqaction h3800_irq = { 727static struct irqaction h3800_irq = {
728 .name = "h3800_asic", 728 .name = "h3800_asic",
729 .handler = h3800_IRQ_demux, 729 .handler = h3800_IRQ_demux,
730 .flags = SA_INTERRUPT, 730 .flags = SA_INTERRUPT | SA_TIMER,
731}; 731};
732 732
733u32 kpio_int_shadow = 0; 733u32 kpio_int_shadow = 0;
diff --git a/arch/arm/mach-sa1100/time.c b/arch/arm/mach-sa1100/time.c
index 19b0c0fd6377..0eeb3616ffea 100644
--- a/arch/arm/mach-sa1100/time.c
+++ b/arch/arm/mach-sa1100/time.c
@@ -99,8 +99,8 @@ sa1100_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
99 99
100static struct irqaction sa1100_timer_irq = { 100static struct irqaction sa1100_timer_irq = {
101 .name = "SA11xx Timer Tick", 101 .name = "SA11xx Timer Tick",
102 .flags = SA_INTERRUPT, 102 .flags = SA_INTERRUPT | SA_TIMER,
103 .handler = sa1100_timer_interrupt 103 .handler = sa1100_timer_interrupt,
104}; 104};
105 105
106static void __init sa1100_timer_init(void) 106static void __init sa1100_timer_init(void)
diff --git a/arch/arm/mach-shark/core.c b/arch/arm/mach-shark/core.c
index a9bc5d0dbd85..aa0e2f6e02f6 100644
--- a/arch/arm/mach-shark/core.c
+++ b/arch/arm/mach-shark/core.c
@@ -84,8 +84,8 @@ shark_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
84 84
85static struct irqaction shark_timer_irq = { 85static struct irqaction shark_timer_irq = {
86 .name = "Shark Timer Tick", 86 .name = "Shark Timer Tick",
87 .flags = SA_INTERRUPT, 87 .flags = SA_INTERRUPT | SA_TIMER,
88 .handler = shark_timer_interrupt 88 .handler = shark_timer_interrupt,
89}; 89};
90 90
91/* 91/*
diff --git a/arch/arm/mach-versatile/Makefile b/arch/arm/mach-versatile/Makefile
index 5d608837757a..ba81e70ed813 100644
--- a/arch/arm/mach-versatile/Makefile
+++ b/arch/arm/mach-versatile/Makefile
@@ -5,3 +5,4 @@
5obj-y := core.o clock.o 5obj-y := core.o clock.o
6obj-$(CONFIG_ARCH_VERSATILE_PB) += versatile_pb.o 6obj-$(CONFIG_ARCH_VERSATILE_PB) += versatile_pb.o
7obj-$(CONFIG_MACH_VERSATILE_AB) += versatile_ab.o 7obj-$(CONFIG_MACH_VERSATILE_AB) += versatile_ab.o
8obj-$(CONFIG_PCI) += pci.o
diff --git a/arch/arm/mach-versatile/core.c b/arch/arm/mach-versatile/core.c
index 302c2a7b9b63..f01c0f8a2bb3 100644
--- a/arch/arm/mach-versatile/core.c
+++ b/arch/arm/mach-versatile/core.c
@@ -33,6 +33,7 @@
33#include <asm/mach-types.h> 33#include <asm/mach-types.h>
34#include <asm/hardware/amba.h> 34#include <asm/hardware/amba.h>
35#include <asm/hardware/amba_clcd.h> 35#include <asm/hardware/amba_clcd.h>
36#include <asm/hardware/arm_timer.h>
36#include <asm/hardware/icst307.h> 37#include <asm/hardware/icst307.h>
37 38
38#include <asm/mach/arch.h> 39#include <asm/mach/arch.h>
@@ -196,11 +197,15 @@ static struct map_desc versatile_io_desc[] __initdata = {
196#ifdef CONFIG_DEBUG_LL 197#ifdef CONFIG_DEBUG_LL
197 { IO_ADDRESS(VERSATILE_UART0_BASE), VERSATILE_UART0_BASE, SZ_4K, MT_DEVICE }, 198 { IO_ADDRESS(VERSATILE_UART0_BASE), VERSATILE_UART0_BASE, SZ_4K, MT_DEVICE },
198#endif 199#endif
199#ifdef FIXME 200#ifdef CONFIG_PCI
200 { PCI_MEMORY_VADDR, PHYS_PCI_MEM_BASE, SZ_16M, MT_DEVICE }, 201 { IO_ADDRESS(VERSATILE_PCI_CORE_BASE), VERSATILE_PCI_CORE_BASE, SZ_4K, MT_DEVICE },
201 { PCI_CONFIG_VADDR, PHYS_PCI_CONFIG_BASE, SZ_16M, MT_DEVICE }, 202 { VERSATILE_PCI_VIRT_BASE, VERSATILE_PCI_BASE, VERSATILE_PCI_BASE_SIZE, MT_DEVICE },
202 { PCI_V3_VADDR, PHYS_PCI_V3_BASE, SZ_512K, MT_DEVICE }, 203 { VERSATILE_PCI_CFG_VIRT_BASE, VERSATILE_PCI_CFG_BASE, VERSATILE_PCI_CFG_BASE_SIZE, MT_DEVICE },
203 { PCI_IO_VADDR, PHYS_PCI_IO_BASE, SZ_64K, MT_DEVICE }, 204#if 0
205 { VERSATILE_PCI_VIRT_MEM_BASE0, VERSATILE_PCI_MEM_BASE0, SZ_16M, MT_DEVICE },
206 { VERSATILE_PCI_VIRT_MEM_BASE1, VERSATILE_PCI_MEM_BASE1, SZ_16M, MT_DEVICE },
207 { VERSATILE_PCI_VIRT_MEM_BASE2, VERSATILE_PCI_MEM_BASE2, SZ_16M, MT_DEVICE },
208#endif
204#endif 209#endif
205}; 210};
206 211
@@ -784,38 +789,25 @@ void __init versatile_init(void)
784 */ 789 */
785#define TIMER_INTERVAL (TICKS_PER_uSEC * mSEC_10) 790#define TIMER_INTERVAL (TICKS_PER_uSEC * mSEC_10)
786#if TIMER_INTERVAL >= 0x100000 791#if TIMER_INTERVAL >= 0x100000
787#define TIMER_RELOAD (TIMER_INTERVAL >> 8) /* Divide by 256 */ 792#define TIMER_RELOAD (TIMER_INTERVAL >> 8)
788#define TIMER_CTRL 0x88 /* Enable, Clock / 256 */ 793#define TIMER_DIVISOR (TIMER_CTRL_DIV256)
789#define TICKS2USECS(x) (256 * (x) / TICKS_PER_uSEC) 794#define TICKS2USECS(x) (256 * (x) / TICKS_PER_uSEC)
790#elif TIMER_INTERVAL >= 0x10000 795#elif TIMER_INTERVAL >= 0x10000
791#define TIMER_RELOAD (TIMER_INTERVAL >> 4) /* Divide by 16 */ 796#define TIMER_RELOAD (TIMER_INTERVAL >> 4) /* Divide by 16 */
792#define TIMER_CTRL 0x84 /* Enable, Clock / 16 */ 797#define TIMER_DIVISOR (TIMER_CTRL_DIV16)
793#define TICKS2USECS(x) (16 * (x) / TICKS_PER_uSEC) 798#define TICKS2USECS(x) (16 * (x) / TICKS_PER_uSEC)
794#else 799#else
795#define TIMER_RELOAD (TIMER_INTERVAL) 800#define TIMER_RELOAD (TIMER_INTERVAL)
796#define TIMER_CTRL 0x80 /* Enable */ 801#define TIMER_DIVISOR (TIMER_CTRL_DIV1)
797#define TICKS2USECS(x) ((x) / TICKS_PER_uSEC) 802#define TICKS2USECS(x) ((x) / TICKS_PER_uSEC)
798#endif 803#endif
799 804
800#define TIMER_CTRL_IE (1 << 5) /* Interrupt Enable */
801
802/*
803 * What does it look like?
804 */
805typedef struct TimerStruct {
806 unsigned long TimerLoad;
807 unsigned long TimerValue;
808 unsigned long TimerControl;
809 unsigned long TimerClear;
810} TimerStruct_t;
811
812/* 805/*
813 * Returns number of ms since last clock interrupt. Note that interrupts 806 * Returns number of ms since last clock interrupt. Note that interrupts
814 * will have been disabled by do_gettimeoffset() 807 * will have been disabled by do_gettimeoffset()
815 */ 808 */
816static unsigned long versatile_gettimeoffset(void) 809static unsigned long versatile_gettimeoffset(void)
817{ 810{
818 volatile TimerStruct_t *timer0 = (TimerStruct_t *)TIMER0_VA_BASE;
819 unsigned long ticks1, ticks2, status; 811 unsigned long ticks1, ticks2, status;
820 812
821 /* 813 /*
@@ -824,11 +816,11 @@ static unsigned long versatile_gettimeoffset(void)
824 * an interrupt. We get around this by ensuring that the 816 * an interrupt. We get around this by ensuring that the
825 * counter has not reloaded between our two reads. 817 * counter has not reloaded between our two reads.
826 */ 818 */
827 ticks2 = timer0->TimerValue & 0xffff; 819 ticks2 = readl(TIMER0_VA_BASE + TIMER_VALUE) & 0xffff;
828 do { 820 do {
829 ticks1 = ticks2; 821 ticks1 = ticks2;
830 status = __raw_readl(VA_IC_BASE + VIC_IRQ_RAW_STATUS); 822 status = __raw_readl(VA_IC_BASE + VIC_IRQ_RAW_STATUS);
831 ticks2 = timer0->TimerValue & 0xffff; 823 ticks2 = readl(TIMER0_VA_BASE + TIMER_VALUE) & 0xffff;
832 } while (ticks2 > ticks1); 824 } while (ticks2 > ticks1);
833 825
834 /* 826 /*
@@ -855,12 +847,10 @@ static unsigned long versatile_gettimeoffset(void)
855 */ 847 */
856static irqreturn_t versatile_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) 848static irqreturn_t versatile_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
857{ 849{
858 volatile TimerStruct_t *timer0 = (volatile TimerStruct_t *)TIMER0_VA_BASE;
859
860 write_seqlock(&xtime_lock); 850 write_seqlock(&xtime_lock);
861 851
862 // ...clear the interrupt 852 // ...clear the interrupt
863 timer0->TimerClear = 1; 853 writel(1, TIMER0_VA_BASE + TIMER_INTCLR);
864 854
865 timer_tick(regs); 855 timer_tick(regs);
866 856
@@ -871,8 +861,8 @@ static irqreturn_t versatile_timer_interrupt(int irq, void *dev_id, struct pt_re
871 861
872static struct irqaction versatile_timer_irq = { 862static struct irqaction versatile_timer_irq = {
873 .name = "Versatile Timer Tick", 863 .name = "Versatile Timer Tick",
874 .flags = SA_INTERRUPT, 864 .flags = SA_INTERRUPT | SA_TIMER,
875 .handler = versatile_timer_interrupt 865 .handler = versatile_timer_interrupt,
876}; 866};
877 867
878/* 868/*
@@ -880,31 +870,32 @@ static struct irqaction versatile_timer_irq = {
880 */ 870 */
881static void __init versatile_timer_init(void) 871static void __init versatile_timer_init(void)
882{ 872{
883 volatile TimerStruct_t *timer0 = (volatile TimerStruct_t *)TIMER0_VA_BASE; 873 u32 val;
884 volatile TimerStruct_t *timer1 = (volatile TimerStruct_t *)TIMER1_VA_BASE;
885 volatile TimerStruct_t *timer2 = (volatile TimerStruct_t *)TIMER2_VA_BASE;
886 volatile TimerStruct_t *timer3 = (volatile TimerStruct_t *)TIMER3_VA_BASE;
887 874
888 /* 875 /*
889 * set clock frequency: 876 * set clock frequency:
890 * VERSATILE_REFCLK is 32KHz 877 * VERSATILE_REFCLK is 32KHz
891 * VERSATILE_TIMCLK is 1MHz 878 * VERSATILE_TIMCLK is 1MHz
892 */ 879 */
893 *(volatile unsigned int *)IO_ADDRESS(VERSATILE_SCTL_BASE) |= 880 val = readl(IO_ADDRESS(VERSATILE_SCTL_BASE));
894 ((VERSATILE_TIMCLK << VERSATILE_TIMER1_EnSel) | (VERSATILE_TIMCLK << VERSATILE_TIMER2_EnSel) | 881 writel((VERSATILE_TIMCLK << VERSATILE_TIMER1_EnSel) |
895 (VERSATILE_TIMCLK << VERSATILE_TIMER3_EnSel) | (VERSATILE_TIMCLK << VERSATILE_TIMER4_EnSel)); 882 (VERSATILE_TIMCLK << VERSATILE_TIMER2_EnSel) |
883 (VERSATILE_TIMCLK << VERSATILE_TIMER3_EnSel) |
884 (VERSATILE_TIMCLK << VERSATILE_TIMER4_EnSel) | val,
885 IO_ADDRESS(VERSATILE_SCTL_BASE));
896 886
897 /* 887 /*
898 * Initialise to a known state (all timers off) 888 * Initialise to a known state (all timers off)
899 */ 889 */
900 timer0->TimerControl = 0; 890 writel(0, TIMER0_VA_BASE + TIMER_CTRL);
901 timer1->TimerControl = 0; 891 writel(0, TIMER1_VA_BASE + TIMER_CTRL);
902 timer2->TimerControl = 0; 892 writel(0, TIMER2_VA_BASE + TIMER_CTRL);
903 timer3->TimerControl = 0; 893 writel(0, TIMER3_VA_BASE + TIMER_CTRL);
904 894
905 timer0->TimerLoad = TIMER_RELOAD; 895 writel(TIMER_RELOAD, TIMER0_VA_BASE + TIMER_LOAD);
906 timer0->TimerValue = TIMER_RELOAD; 896 writel(TIMER_RELOAD, TIMER0_VA_BASE + TIMER_VALUE);
907 timer0->TimerControl = TIMER_CTRL | 0x40 | TIMER_CTRL_IE; /* periodic + IE */ 897 writel(TIMER_DIVISOR | TIMER_CTRL_ENABLE | TIMER_CTRL_PERIODIC |
898 TIMER_CTRL_IE, TIMER0_VA_BASE + TIMER_CTRL);
908 899
909 /* 900 /*
910 * Make irqs happen for the system timer 901 * Make irqs happen for the system timer
diff --git a/arch/arm/mach-versatile/pci.c b/arch/arm/mach-versatile/pci.c
new file mode 100644
index 000000000000..d1565e851f0e
--- /dev/null
+++ b/arch/arm/mach-versatile/pci.c
@@ -0,0 +1,360 @@
1/*
2 * linux/arch/arm/mach-versatile/pci.c
3 *
4 * (C) Copyright Koninklijke Philips Electronics NV 2004. All rights reserved.
5 * You can redistribute and/or modify this software under the terms of version 2
6 * of the GNU General Public License as published by the Free Software Foundation.
7 * THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED
8 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. See the GNU
9 * General Public License for more details.
10 * Koninklijke Philips Electronics nor its subsidiaries is obligated to provide any support for this software.
11 *
12 * ARM Versatile PCI driver.
13 *
14 * 14/04/2005 Initial version, colin.king@philips.com
15 *
16 */
17#include <linux/config.h>
18#include <linux/kernel.h>
19#include <linux/pci.h>
20#include <linux/ptrace.h>
21#include <linux/slab.h>
22#include <linux/ioport.h>
23#include <linux/interrupt.h>
24#include <linux/spinlock.h>
25#include <linux/init.h>
26
27#include <asm/hardware.h>
28#include <asm/io.h>
29#include <asm/irq.h>
30#include <asm/system.h>
31#include <asm/mach/pci.h>
32#include <asm/mach-types.h>
33
34/*
35 * these spaces are mapped using the following base registers:
36 *
37 * Usage Local Bus Memory Base/Map registers used
38 *
39 * Mem 50000000 - 5FFFFFFF LB_BASE0/LB_MAP0, non prefetch
40 * Mem 60000000 - 6FFFFFFF LB_BASE1/LB_MAP1, prefetch
41 * IO 44000000 - 4FFFFFFF LB_BASE2/LB_MAP2, IO
42 * Cfg 42000000 - 42FFFFFF PCI config
43 *
44 */
45#define SYS_PCICTL IO_ADDRESS(VERSATILE_SYS_PCICTL)
46#define PCI_IMAP0 IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x0)
47#define PCI_IMAP1 IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x4)
48#define PCI_IMAP2 IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x8)
49#define PCI_SMAP0 IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x10)
50#define PCI_SMAP1 IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x14)
51#define PCI_SMAP2 IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x18)
52#define PCI_SELFID IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0xc)
53
54#define DEVICE_ID_OFFSET 0x00
55#define CSR_OFFSET 0x04
56#define CLASS_ID_OFFSET 0x08
57
58#define VP_PCI_DEVICE_ID 0x030010ee
59#define VP_PCI_CLASS_ID 0x0b400000
60
61static unsigned long pci_slot_ignore = 0;
62
63static int __init versatile_pci_slot_ignore(char *str)
64{
65 int retval;
66 int slot;
67
68 while ((retval = get_option(&str,&slot))) {
69 if ((slot < 0) || (slot > 31)) {
70 printk("Illegal slot value: %d\n",slot);
71 } else {
72 pci_slot_ignore |= (1 << slot);
73 }
74 }
75 return 1;
76}
77
78__setup("pci_slot_ignore=", versatile_pci_slot_ignore);
79
80
81static unsigned long __pci_addr(struct pci_bus *bus,
82 unsigned int devfn, int offset)
83{
84 unsigned int busnr = bus->number;
85
86 /*
87 * Trap out illegal values
88 */
89 if (offset > 255)
90 BUG();
91 if (busnr > 255)
92 BUG();
93 if (devfn > 255)
94 BUG();
95
96 return (VERSATILE_PCI_CFG_VIRT_BASE | (busnr << 16) |
97 (PCI_SLOT(devfn) << 11) | (PCI_FUNC(devfn) << 8) | offset);
98}
99
100static int versatile_read_config(struct pci_bus *bus, unsigned int devfn, int where,
101 int size, u32 *val)
102{
103 unsigned long addr = __pci_addr(bus, devfn, where);
104 u32 v;
105 int slot = PCI_SLOT(devfn);
106
107 if (pci_slot_ignore & (1 << slot)) {
108 /* Ignore this slot */
109 switch (size) {
110 case 1:
111 v = 0xff;
112 break;
113 case 2:
114 v = 0xffff;
115 break;
116 default:
117 v = 0xffffffff;
118 }
119 } else {
120 switch (size) {
121 case 1:
122 addr &= ~3;
123 v = __raw_readb(addr);
124 break;
125
126 case 2:
127 v = __raw_readl(addr & ~3);
128 if (addr & 2) v >>= 16;
129 v &= 0xffff;
130 break;
131
132 default:
133 addr &= ~3;
134 v = __raw_readl(addr);
135 break;
136 }
137 }
138
139 *val = v;
140 return PCIBIOS_SUCCESSFUL;
141}
142
143static int versatile_write_config(struct pci_bus *bus, unsigned int devfn, int where,
144 int size, u32 val)
145{
146 unsigned long addr = __pci_addr(bus, devfn, where);
147 int slot = PCI_SLOT(devfn);
148
149 if (pci_slot_ignore & (1 << slot)) {
150 return PCIBIOS_SUCCESSFUL;
151 }
152
153 switch (size) {
154 case 1:
155 __raw_writeb((u8)val, addr);
156 break;
157
158 case 2:
159 __raw_writew((u16)val, addr);
160 break;
161
162 case 4:
163 __raw_writel(val, addr);
164 break;
165 }
166
167 return PCIBIOS_SUCCESSFUL;
168}
169
170static struct pci_ops pci_versatile_ops = {
171 .read = versatile_read_config,
172 .write = versatile_write_config,
173};
174
175static struct resource io_mem = {
176 .name = "PCI I/O space",
177 .start = VERSATILE_PCI_MEM_BASE0,
178 .end = VERSATILE_PCI_MEM_BASE0+VERSATILE_PCI_MEM_BASE0_SIZE-1,
179 .flags = IORESOURCE_IO,
180};
181
182static struct resource non_mem = {
183 .name = "PCI non-prefetchable",
184 .start = VERSATILE_PCI_MEM_BASE1,
185 .end = VERSATILE_PCI_MEM_BASE1+VERSATILE_PCI_MEM_BASE1_SIZE-1,
186 .flags = IORESOURCE_MEM,
187};
188
189static struct resource pre_mem = {
190 .name = "PCI prefetchable",
191 .start = VERSATILE_PCI_MEM_BASE2,
192 .end = VERSATILE_PCI_MEM_BASE2+VERSATILE_PCI_MEM_BASE2_SIZE-1,
193 .flags = IORESOURCE_MEM | IORESOURCE_PREFETCH,
194};
195
196static int __init pci_versatile_setup_resources(struct resource **resource)
197{
198 int ret = 0;
199
200 ret = request_resource(&iomem_resource, &io_mem);
201 if (ret) {
202 printk(KERN_ERR "PCI: unable to allocate I/O "
203 "memory region (%d)\n", ret);
204 goto out;
205 }
206 ret = request_resource(&iomem_resource, &non_mem);
207 if (ret) {
208 printk(KERN_ERR "PCI: unable to allocate non-prefetchable "
209 "memory region (%d)\n", ret);
210 goto release_io_mem;
211 }
212 ret = request_resource(&iomem_resource, &pre_mem);
213 if (ret) {
214 printk(KERN_ERR "PCI: unable to allocate prefetchable "
215 "memory region (%d)\n", ret);
216 goto release_non_mem;
217 }
218
219 /*
220 * bus->resource[0] is the IO resource for this bus
221 * bus->resource[1] is the mem resource for this bus
222 * bus->resource[2] is the prefetch mem resource for this bus
223 */
224 resource[0] = &io_mem;
225 resource[1] = &non_mem;
226 resource[2] = &pre_mem;
227
228 goto out;
229
230 release_non_mem:
231 release_resource(&non_mem);
232 release_io_mem:
233 release_resource(&io_mem);
234 out:
235 return ret;
236}
237
238int __init pci_versatile_setup(int nr, struct pci_sys_data *sys)
239{
240 int ret = 0;
241 int i;
242 int myslot = -1;
243 unsigned long val;
244
245 if (nr == 0) {
246 sys->mem_offset = 0;
247 ret = pci_versatile_setup_resources(sys->resource);
248 if (ret < 0) {
249 printk("pci_versatile_setup: resources... oops?\n");
250 goto out;
251 }
252 } else {
253 printk("pci_versatile_setup: resources... nr == 0??\n");
254 goto out;
255 }
256
257 __raw_writel(VERSATILE_PCI_MEM_BASE0 >> 28,PCI_IMAP0);
258 __raw_writel(VERSATILE_PCI_MEM_BASE1 >> 28,PCI_IMAP1);
259 __raw_writel(VERSATILE_PCI_MEM_BASE2 >> 28,PCI_IMAP2);
260
261 __raw_writel(1, SYS_PCICTL);
262
263 val = __raw_readl(SYS_PCICTL);
264 if (!(val & 1)) {
265 printk("Not plugged into PCI backplane!\n");
266 ret = -EIO;
267 goto out;
268 }
269
270 /*
271 * We need to discover the PCI core first to configure itself
272 * before the main PCI probing is performed
273 */
274 for (i=0; i<32; i++) {
275 if ((__raw_readl(VERSATILE_PCI_VIRT_BASE+(i<<11)+DEVICE_ID_OFFSET) == VP_PCI_DEVICE_ID) &&
276 (__raw_readl(VERSATILE_PCI_VIRT_BASE+(i<<11)+CLASS_ID_OFFSET) == VP_PCI_CLASS_ID)) {
277 myslot = i;
278
279 __raw_writel(myslot, PCI_SELFID);
280 val = __raw_readl(VERSATILE_PCI_CFG_VIRT_BASE+(myslot<<11)+CSR_OFFSET);
281 val |= (1<<2);
282 __raw_writel(val, VERSATILE_PCI_CFG_VIRT_BASE+(myslot<<11)+CSR_OFFSET);
283 break;
284 }
285 }
286
287 if (myslot == -1) {
288 printk("Cannot find PCI core!\n");
289 ret = -EIO;
290 } else {
291 printk("PCI core found (slot %d)\n",myslot);
292 /* Do not to map Versatile FPGA PCI device
293 into memory space as we are short of
294 mappable memory */
295 pci_slot_ignore |= (1 << myslot);
296 ret = 1;
297 }
298
299 out:
300 return ret;
301}
302
303
304struct pci_bus *pci_versatile_scan_bus(int nr, struct pci_sys_data *sys)
305{
306 return pci_scan_bus(sys->busnr, &pci_versatile_ops, sys);
307}
308
309/*
310 * V3_LB_BASE? - local bus address
311 * V3_LB_MAP? - pci bus address
312 */
313void __init pci_versatile_preinit(void)
314{
315}
316
317void __init pci_versatile_postinit(void)
318{
319}
320
321
322/*
323 * map the specified device/slot/pin to an IRQ. Different backplanes may need to modify this.
324 */
325static int __init versatile_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
326{
327 int irq;
328 int devslot = PCI_SLOT(dev->devfn);
329
330 /* slot, pin, irq
331 24 1 27
332 25 1 28 untested
333 26 1 29
334 27 1 30 untested
335 */
336
337 irq = 27 + ((slot + pin + 2) % 3); /* Fudged */
338
339 printk("map irq: slot %d, pin %d, devslot %d, irq: %d\n",slot,pin,devslot,irq);
340
341 return irq;
342}
343
344static struct hw_pci versatile_pci __initdata = {
345 .swizzle = NULL,
346 .map_irq = versatile_map_irq,
347 .nr_controllers = 1,
348 .setup = pci_versatile_setup,
349 .scan = pci_versatile_scan_bus,
350 .preinit = pci_versatile_preinit,
351 .postinit = pci_versatile_postinit,
352};
353
354static int __init versatile_pci_init(void)
355{
356 pci_common_init(&versatile_pci);
357 return 0;
358}
359
360subsys_initcall(versatile_pci_init);
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig
index 3fefb43c67f7..95606b4a3ba6 100644
--- a/arch/arm/mm/Kconfig
+++ b/arch/arm/mm/Kconfig
@@ -62,7 +62,7 @@ config CPU_ARM720T
62# ARM920T 62# ARM920T
63config CPU_ARM920T 63config CPU_ARM920T
64 bool "Support ARM920T processor" if !ARCH_S3C2410 64 bool "Support ARM920T processor" if !ARCH_S3C2410
65 depends on ARCH_INTEGRATOR || ARCH_S3C2410 || ARCH_IMX 65 depends on ARCH_INTEGRATOR || ARCH_S3C2410 || ARCH_IMX || ARCH_AAEC2000
66 default y if ARCH_S3C2410 66 default y if ARCH_S3C2410
67 select CPU_32v4 67 select CPU_32v4
68 select CPU_ABRT_EV4T 68 select CPU_ABRT_EV4T
diff --git a/arch/arm/mm/copypage-v6.c b/arch/arm/mm/copypage-v6.c
index a8c00236bd3d..27d041574ea7 100644
--- a/arch/arm/mm/copypage-v6.c
+++ b/arch/arm/mm/copypage-v6.c
@@ -30,8 +30,6 @@
30 30
31static DEFINE_SPINLOCK(v6_lock); 31static DEFINE_SPINLOCK(v6_lock);
32 32
33#define DCACHE_COLOUR(vaddr) ((vaddr & (SHMLBA - 1)) >> PAGE_SHIFT)
34
35/* 33/*
36 * Copy the user page. No aliasing to deal with so we can just 34 * Copy the user page. No aliasing to deal with so we can just
37 * attack the kernel's existing mapping of these pages. 35 * attack the kernel's existing mapping of these pages.
@@ -55,7 +53,7 @@ void v6_clear_user_page_nonaliasing(void *kaddr, unsigned long vaddr)
55 */ 53 */
56void v6_copy_user_page_aliasing(void *kto, const void *kfrom, unsigned long vaddr) 54void v6_copy_user_page_aliasing(void *kto, const void *kfrom, unsigned long vaddr)
57{ 55{
58 unsigned int offset = DCACHE_COLOUR(vaddr); 56 unsigned int offset = CACHE_COLOUR(vaddr);
59 unsigned long from, to; 57 unsigned long from, to;
60 58
61 /* 59 /*
@@ -95,7 +93,7 @@ void v6_copy_user_page_aliasing(void *kto, const void *kfrom, unsigned long vadd
95 */ 93 */
96void v6_clear_user_page_aliasing(void *kaddr, unsigned long vaddr) 94void v6_clear_user_page_aliasing(void *kaddr, unsigned long vaddr)
97{ 95{
98 unsigned int offset = DCACHE_COLOUR(vaddr); 96 unsigned int offset = CACHE_COLOUR(vaddr);
99 unsigned long to = to_address + (offset << PAGE_SHIFT); 97 unsigned long to = to_address + (offset << PAGE_SHIFT);
100 98
101 /* 99 /*
diff --git a/arch/arm/mm/fault-armv.c b/arch/arm/mm/fault-armv.c
index 01967ddeef53..be4ab3d73c91 100644
--- a/arch/arm/mm/fault-armv.c
+++ b/arch/arm/mm/fault-armv.c
@@ -77,9 +77,8 @@ no_pmd:
77} 77}
78 78
79static void 79static void
80make_coherent(struct vm_area_struct *vma, unsigned long addr, struct page *page, int dirty) 80make_coherent(struct address_space *mapping, struct vm_area_struct *vma, unsigned long addr, unsigned long pfn)
81{ 81{
82 struct address_space *mapping = page_mapping(page);
83 struct mm_struct *mm = vma->vm_mm; 82 struct mm_struct *mm = vma->vm_mm;
84 struct vm_area_struct *mpnt; 83 struct vm_area_struct *mpnt;
85 struct prio_tree_iter iter; 84 struct prio_tree_iter iter;
@@ -87,9 +86,6 @@ make_coherent(struct vm_area_struct *vma, unsigned long addr, struct page *page,
87 pgoff_t pgoff; 86 pgoff_t pgoff;
88 int aliases = 0; 87 int aliases = 0;
89 88
90 if (!mapping)
91 return;
92
93 pgoff = vma->vm_pgoff + ((addr - vma->vm_start) >> PAGE_SHIFT); 89 pgoff = vma->vm_pgoff + ((addr - vma->vm_start) >> PAGE_SHIFT);
94 90
95 /* 91 /*
@@ -115,9 +111,11 @@ make_coherent(struct vm_area_struct *vma, unsigned long addr, struct page *page,
115 if (aliases) 111 if (aliases)
116 adjust_pte(vma, addr); 112 adjust_pte(vma, addr);
117 else 113 else
118 flush_cache_page(vma, addr, page_to_pfn(page)); 114 flush_cache_page(vma, addr, pfn);
119} 115}
120 116
117void __flush_dcache_page(struct address_space *mapping, struct page *page);
118
121/* 119/*
122 * Take care of architecture specific things when placing a new PTE into 120 * Take care of architecture specific things when placing a new PTE into
123 * a page table, or changing an existing PTE. Basically, there are two 121 * a page table, or changing an existing PTE. Basically, there are two
@@ -134,29 +132,22 @@ make_coherent(struct vm_area_struct *vma, unsigned long addr, struct page *page,
134void update_mmu_cache(struct vm_area_struct *vma, unsigned long addr, pte_t pte) 132void update_mmu_cache(struct vm_area_struct *vma, unsigned long addr, pte_t pte)
135{ 133{
136 unsigned long pfn = pte_pfn(pte); 134 unsigned long pfn = pte_pfn(pte);
135 struct address_space *mapping;
137 struct page *page; 136 struct page *page;
138 137
139 if (!pfn_valid(pfn)) 138 if (!pfn_valid(pfn))
140 return; 139 return;
140
141 page = pfn_to_page(pfn); 141 page = pfn_to_page(pfn);
142 if (page_mapping(page)) { 142 mapping = page_mapping(page);
143 if (mapping) {
143 int dirty = test_and_clear_bit(PG_dcache_dirty, &page->flags); 144 int dirty = test_and_clear_bit(PG_dcache_dirty, &page->flags);
144 145
145 if (dirty) { 146 if (dirty)
146 /* 147 __flush_dcache_page(mapping, page);
147 * This is our first userspace mapping of this page.
148 * Ensure that the physical page is coherent with
149 * the kernel mapping.
150 *
151 * FIXME: only need to do this on VIVT and aliasing
152 * VIPT cache architectures. We can do that
153 * by choosing whether to set this bit...
154 */
155 __cpuc_flush_dcache_page(page_address(page));
156 }
157 148
158 if (cache_is_vivt()) 149 if (cache_is_vivt())
159 make_coherent(vma, addr, page, dirty); 150 make_coherent(mapping, vma, addr, pfn);
160 } 151 }
161} 152}
162 153
diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c
index e25b4fd8412c..65bfe84b6d67 100644
--- a/arch/arm/mm/fault.c
+++ b/arch/arm/mm/fault.c
@@ -372,49 +372,50 @@ do_bad(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
372static struct fsr_info { 372static struct fsr_info {
373 int (*fn)(unsigned long addr, unsigned int fsr, struct pt_regs *regs); 373 int (*fn)(unsigned long addr, unsigned int fsr, struct pt_regs *regs);
374 int sig; 374 int sig;
375 int code;
375 const char *name; 376 const char *name;
376} fsr_info[] = { 377} fsr_info[] = {
377 /* 378 /*
378 * The following are the standard ARMv3 and ARMv4 aborts. ARMv5 379 * The following are the standard ARMv3 and ARMv4 aborts. ARMv5
379 * defines these to be "precise" aborts. 380 * defines these to be "precise" aborts.
380 */ 381 */
381 { do_bad, SIGSEGV, "vector exception" }, 382 { do_bad, SIGSEGV, 0, "vector exception" },
382 { do_bad, SIGILL, "alignment exception" }, 383 { do_bad, SIGILL, BUS_ADRALN, "alignment exception" },
383 { do_bad, SIGKILL, "terminal exception" }, 384 { do_bad, SIGKILL, 0, "terminal exception" },
384 { do_bad, SIGILL, "alignment exception" }, 385 { do_bad, SIGILL, BUS_ADRALN, "alignment exception" },
385 { do_bad, SIGBUS, "external abort on linefetch" }, 386 { do_bad, SIGBUS, 0, "external abort on linefetch" },
386 { do_translation_fault, SIGSEGV, "section translation fault" }, 387 { do_translation_fault, SIGSEGV, SEGV_MAPERR, "section translation fault" },
387 { do_bad, SIGBUS, "external abort on linefetch" }, 388 { do_bad, SIGBUS, 0, "external abort on linefetch" },
388 { do_page_fault, SIGSEGV, "page translation fault" }, 389 { do_page_fault, SIGSEGV, SEGV_MAPERR, "page translation fault" },
389 { do_bad, SIGBUS, "external abort on non-linefetch" }, 390 { do_bad, SIGBUS, 0, "external abort on non-linefetch" },
390 { do_bad, SIGSEGV, "section domain fault" }, 391 { do_bad, SIGSEGV, SEGV_ACCERR, "section domain fault" },
391 { do_bad, SIGBUS, "external abort on non-linefetch" }, 392 { do_bad, SIGBUS, 0, "external abort on non-linefetch" },
392 { do_bad, SIGSEGV, "page domain fault" }, 393 { do_bad, SIGSEGV, SEGV_ACCERR, "page domain fault" },
393 { do_bad, SIGBUS, "external abort on translation" }, 394 { do_bad, SIGBUS, 0, "external abort on translation" },
394 { do_sect_fault, SIGSEGV, "section permission fault" }, 395 { do_sect_fault, SIGSEGV, SEGV_ACCERR, "section permission fault" },
395 { do_bad, SIGBUS, "external abort on translation" }, 396 { do_bad, SIGBUS, 0, "external abort on translation" },
396 { do_page_fault, SIGSEGV, "page permission fault" }, 397 { do_page_fault, SIGSEGV, SEGV_ACCERR, "page permission fault" },
397 /* 398 /*
398 * The following are "imprecise" aborts, which are signalled by bit 399 * The following are "imprecise" aborts, which are signalled by bit
399 * 10 of the FSR, and may not be recoverable. These are only 400 * 10 of the FSR, and may not be recoverable. These are only
400 * supported if the CPU abort handler supports bit 10. 401 * supported if the CPU abort handler supports bit 10.
401 */ 402 */
402 { do_bad, SIGBUS, "unknown 16" }, 403 { do_bad, SIGBUS, 0, "unknown 16" },
403 { do_bad, SIGBUS, "unknown 17" }, 404 { do_bad, SIGBUS, 0, "unknown 17" },
404 { do_bad, SIGBUS, "unknown 18" }, 405 { do_bad, SIGBUS, 0, "unknown 18" },
405 { do_bad, SIGBUS, "unknown 19" }, 406 { do_bad, SIGBUS, 0, "unknown 19" },
406 { do_bad, SIGBUS, "lock abort" }, /* xscale */ 407 { do_bad, SIGBUS, 0, "lock abort" }, /* xscale */
407 { do_bad, SIGBUS, "unknown 21" }, 408 { do_bad, SIGBUS, 0, "unknown 21" },
408 { do_bad, SIGBUS, "imprecise external abort" }, /* xscale */ 409 { do_bad, SIGBUS, BUS_OBJERR, "imprecise external abort" }, /* xscale */
409 { do_bad, SIGBUS, "unknown 23" }, 410 { do_bad, SIGBUS, 0, "unknown 23" },
410 { do_bad, SIGBUS, "dcache parity error" }, /* xscale */ 411 { do_bad, SIGBUS, 0, "dcache parity error" }, /* xscale */
411 { do_bad, SIGBUS, "unknown 25" }, 412 { do_bad, SIGBUS, 0, "unknown 25" },
412 { do_bad, SIGBUS, "unknown 26" }, 413 { do_bad, SIGBUS, 0, "unknown 26" },
413 { do_bad, SIGBUS, "unknown 27" }, 414 { do_bad, SIGBUS, 0, "unknown 27" },
414 { do_bad, SIGBUS, "unknown 28" }, 415 { do_bad, SIGBUS, 0, "unknown 28" },
415 { do_bad, SIGBUS, "unknown 29" }, 416 { do_bad, SIGBUS, 0, "unknown 29" },
416 { do_bad, SIGBUS, "unknown 30" }, 417 { do_bad, SIGBUS, 0, "unknown 30" },
417 { do_bad, SIGBUS, "unknown 31" } 418 { do_bad, SIGBUS, 0, "unknown 31" }
418}; 419};
419 420
420void __init 421void __init
@@ -435,15 +436,19 @@ asmlinkage void
435do_DataAbort(unsigned long addr, unsigned int fsr, struct pt_regs *regs) 436do_DataAbort(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
436{ 437{
437 const struct fsr_info *inf = fsr_info + (fsr & 15) + ((fsr & (1 << 10)) >> 6); 438 const struct fsr_info *inf = fsr_info + (fsr & 15) + ((fsr & (1 << 10)) >> 6);
439 struct siginfo info;
438 440
439 if (!inf->fn(addr, fsr, regs)) 441 if (!inf->fn(addr, fsr, regs))
440 return; 442 return;
441 443
442 printk(KERN_ALERT "Unhandled fault: %s (0x%03x) at 0x%08lx\n", 444 printk(KERN_ALERT "Unhandled fault: %s (0x%03x) at 0x%08lx\n",
443 inf->name, fsr, addr); 445 inf->name, fsr, addr);
444 force_sig(inf->sig, current); 446
445 show_pte(current->mm, addr); 447 info.si_signo = inf->sig;
446 die_if_kernel("Oops", regs, 0); 448 info.si_errno = 0;
449 info.si_code = inf->code;
450 info.si_addr = (void __user *)addr;
451 notify_die("", regs, &info, fsr, 0);
447} 452}
448 453
449asmlinkage void 454asmlinkage void
diff --git a/arch/arm/mm/flush.c b/arch/arm/mm/flush.c
index 4085ed983e46..191788fb18d1 100644
--- a/arch/arm/mm/flush.c
+++ b/arch/arm/mm/flush.c
@@ -37,13 +37,8 @@ static void flush_pfn_alias(unsigned long pfn, unsigned long vaddr)
37#define flush_pfn_alias(pfn,vaddr) do { } while (0) 37#define flush_pfn_alias(pfn,vaddr) do { } while (0)
38#endif 38#endif
39 39
40static void __flush_dcache_page(struct address_space *mapping, struct page *page) 40void __flush_dcache_page(struct address_space *mapping, struct page *page)
41{ 41{
42 struct mm_struct *mm = current->active_mm;
43 struct vm_area_struct *mpnt;
44 struct prio_tree_iter iter;
45 pgoff_t pgoff;
46
47 /* 42 /*
48 * Writeback any data associated with the kernel mapping of this 43 * Writeback any data associated with the kernel mapping of this
49 * page. This ensures that data in the physical page is mutually 44 * page. This ensures that data in the physical page is mutually
@@ -52,24 +47,21 @@ static void __flush_dcache_page(struct address_space *mapping, struct page *page
52 __cpuc_flush_dcache_page(page_address(page)); 47 __cpuc_flush_dcache_page(page_address(page));
53 48
54 /* 49 /*
55 * If there's no mapping pointer here, then this page isn't 50 * If this is a page cache page, and we have an aliasing VIPT cache,
56 * visible to userspace yet, so there are no cache lines 51 * we only need to do one flush - which would be at the relevant
57 * associated with any other aliases.
58 */
59 if (!mapping)
60 return;
61
62 /*
63 * This is a page cache page. If we have a VIPT cache, we
64 * only need to do one flush - which would be at the relevant
65 * userspace colour, which is congruent with page->index. 52 * userspace colour, which is congruent with page->index.
66 */ 53 */
67 if (cache_is_vipt()) { 54 if (mapping && cache_is_vipt_aliasing())
68 if (cache_is_vipt_aliasing()) 55 flush_pfn_alias(page_to_pfn(page),
69 flush_pfn_alias(page_to_pfn(page), 56 page->index << PAGE_CACHE_SHIFT);
70 page->index << PAGE_CACHE_SHIFT); 57}
71 return; 58
72 } 59static void __flush_dcache_aliases(struct address_space *mapping, struct page *page)
60{
61 struct mm_struct *mm = current->active_mm;
62 struct vm_area_struct *mpnt;
63 struct prio_tree_iter iter;
64 pgoff_t pgoff;
73 65
74 /* 66 /*
75 * There are possible user space mappings of this page: 67 * There are possible user space mappings of this page:
@@ -116,12 +108,12 @@ void flush_dcache_page(struct page *page)
116{ 108{
117 struct address_space *mapping = page_mapping(page); 109 struct address_space *mapping = page_mapping(page);
118 110
119 if (cache_is_vipt_nonaliasing())
120 return;
121
122 if (mapping && !mapping_mapped(mapping)) 111 if (mapping && !mapping_mapped(mapping))
123 set_bit(PG_dcache_dirty, &page->flags); 112 set_bit(PG_dcache_dirty, &page->flags);
124 else 113 else {
125 __flush_dcache_page(mapping, page); 114 __flush_dcache_page(mapping, page);
115 if (mapping && cache_is_vivt())
116 __flush_dcache_aliases(mapping, page);
117 }
126} 118}
127EXPORT_SYMBOL(flush_dcache_page); 119EXPORT_SYMBOL(flush_dcache_page);
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index 72a2b8cee319..edffa47a4b2a 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -93,14 +93,7 @@ struct node_info {
93}; 93};
94 94
95#define O_PFN_DOWN(x) ((x) >> PAGE_SHIFT) 95#define O_PFN_DOWN(x) ((x) >> PAGE_SHIFT)
96#define V_PFN_DOWN(x) O_PFN_DOWN(__pa(x))
97
98#define O_PFN_UP(x) (PAGE_ALIGN(x) >> PAGE_SHIFT) 96#define O_PFN_UP(x) (PAGE_ALIGN(x) >> PAGE_SHIFT)
99#define V_PFN_UP(x) O_PFN_UP(__pa(x))
100
101#define PFN_SIZE(x) ((x) >> PAGE_SHIFT)
102#define PFN_RANGE(s,e) PFN_SIZE(PAGE_ALIGN((unsigned long)(e)) - \
103 (((unsigned long)(s)) & PAGE_MASK))
104 97
105/* 98/*
106 * FIXME: We really want to avoid allocating the bootmap bitmap 99 * FIXME: We really want to avoid allocating the bootmap bitmap
@@ -113,7 +106,7 @@ find_bootmap_pfn(int node, struct meminfo *mi, unsigned int bootmap_pages)
113{ 106{
114 unsigned int start_pfn, bank, bootmap_pfn; 107 unsigned int start_pfn, bank, bootmap_pfn;
115 108
116 start_pfn = V_PFN_UP(&_end); 109 start_pfn = O_PFN_UP(__pa(&_end));
117 bootmap_pfn = 0; 110 bootmap_pfn = 0;
118 111
119 for (bank = 0; bank < mi->nr_banks; bank ++) { 112 for (bank = 0; bank < mi->nr_banks; bank ++) {
@@ -122,9 +115,9 @@ find_bootmap_pfn(int node, struct meminfo *mi, unsigned int bootmap_pages)
122 if (mi->bank[bank].node != node) 115 if (mi->bank[bank].node != node)
123 continue; 116 continue;
124 117
125 start = O_PFN_UP(mi->bank[bank].start); 118 start = mi->bank[bank].start >> PAGE_SHIFT;
126 end = O_PFN_DOWN(mi->bank[bank].size + 119 end = (mi->bank[bank].size +
127 mi->bank[bank].start); 120 mi->bank[bank].start) >> PAGE_SHIFT;
128 121
129 if (end < start_pfn) 122 if (end < start_pfn)
130 continue; 123 continue;
@@ -191,8 +184,8 @@ find_memend_and_nodes(struct meminfo *mi, struct node_info *np)
191 /* 184 /*
192 * Get the start and end pfns for this bank 185 * Get the start and end pfns for this bank
193 */ 186 */
194 start = O_PFN_UP(mi->bank[i].start); 187 start = mi->bank[i].start >> PAGE_SHIFT;
195 end = O_PFN_DOWN(mi->bank[i].start + mi->bank[i].size); 188 end = (mi->bank[i].start + mi->bank[i].size) >> PAGE_SHIFT;
196 189
197 if (np[node].start > start) 190 if (np[node].start > start)
198 np[node].start = start; 191 np[node].start = start;
@@ -444,7 +437,7 @@ void __init paging_init(struct meminfo *mi, struct machine_desc *mdesc)
444 memtable_init(mi); 437 memtable_init(mi);
445 if (mdesc->map_io) 438 if (mdesc->map_io)
446 mdesc->map_io(); 439 mdesc->map_io();
447 flush_tlb_all(); 440 local_flush_tlb_all();
448 441
449 /* 442 /*
450 * initialise the zones within each node 443 * initialise the zones within each node
@@ -529,6 +522,69 @@ static inline void free_area(unsigned long addr, unsigned long end, char *s)
529 printk(KERN_INFO "Freeing %s memory: %dK\n", s, size); 522 printk(KERN_INFO "Freeing %s memory: %dK\n", s, size);
530} 523}
531 524
525static inline void
526free_memmap(int node, unsigned long start_pfn, unsigned long end_pfn)
527{
528 struct page *start_pg, *end_pg;
529 unsigned long pg, pgend;
530
531 /*
532 * Convert start_pfn/end_pfn to a struct page pointer.
533 */
534 start_pg = pfn_to_page(start_pfn);
535 end_pg = pfn_to_page(end_pfn);
536
537 /*
538 * Convert to physical addresses, and
539 * round start upwards and end downwards.
540 */
541 pg = PAGE_ALIGN(__pa(start_pg));
542 pgend = __pa(end_pg) & PAGE_MASK;
543
544 /*
545 * If there are free pages between these,
546 * free the section of the memmap array.
547 */
548 if (pg < pgend)
549 free_bootmem_node(NODE_DATA(node), pg, pgend - pg);
550}
551
552/*
553 * The mem_map array can get very big. Free the unused area of the memory map.
554 */
555static void __init free_unused_memmap_node(int node, struct meminfo *mi)
556{
557 unsigned long bank_start, prev_bank_end = 0;
558 unsigned int i;
559
560 /*
561 * [FIXME] This relies on each bank being in address order. This
562 * may not be the case, especially if the user has provided the
563 * information on the command line.
564 */
565 for (i = 0; i < mi->nr_banks; i++) {
566 if (mi->bank[i].size == 0 || mi->bank[i].node != node)
567 continue;
568
569 bank_start = mi->bank[i].start >> PAGE_SHIFT;
570 if (bank_start < prev_bank_end) {
571 printk(KERN_ERR "MEM: unordered memory banks. "
572 "Not freeing memmap.\n");
573 break;
574 }
575
576 /*
577 * If we had a previous bank, and there is a space
578 * between the current bank and the previous, free it.
579 */
580 if (prev_bank_end && prev_bank_end != bank_start)
581 free_memmap(node, prev_bank_end, bank_start);
582
583 prev_bank_end = (mi->bank[i].start +
584 mi->bank[i].size) >> PAGE_SHIFT;
585 }
586}
587
532/* 588/*
533 * mem_init() marks the free areas in the mem_map and tells us how much 589 * mem_init() marks the free areas in the mem_map and tells us how much
534 * memory is free. This is done after various parts of the system have 590 * memory is free. This is done after various parts of the system have
@@ -547,16 +603,12 @@ void __init mem_init(void)
547 max_mapnr = virt_to_page(high_memory) - mem_map; 603 max_mapnr = virt_to_page(high_memory) - mem_map;
548#endif 604#endif
549 605
550 /*
551 * We may have non-contiguous memory.
552 */
553 if (meminfo.nr_banks != 1)
554 create_memmap_holes(&meminfo);
555
556 /* this will put all unused low memory onto the freelists */ 606 /* this will put all unused low memory onto the freelists */
557 for_each_online_node(node) { 607 for_each_online_node(node) {
558 pg_data_t *pgdat = NODE_DATA(node); 608 pg_data_t *pgdat = NODE_DATA(node);
559 609
610 free_unused_memmap_node(node, &meminfo);
611
560 if (pgdat->node_spanned_pages != 0) 612 if (pgdat->node_spanned_pages != 0)
561 totalram_pages += free_all_bootmem_node(pgdat); 613 totalram_pages += free_all_bootmem_node(pgdat);
562 } 614 }
diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c
index 00bb8fd37a59..7110e54182b1 100644
--- a/arch/arm/mm/ioremap.c
+++ b/arch/arm/mm/ioremap.c
@@ -170,3 +170,50 @@ void __iounmap(void __iomem *addr)
170 vfree((void *) (PAGE_MASK & (unsigned long) addr)); 170 vfree((void *) (PAGE_MASK & (unsigned long) addr));
171} 171}
172EXPORT_SYMBOL(__iounmap); 172EXPORT_SYMBOL(__iounmap);
173
174#ifdef __io
175void __iomem *ioport_map(unsigned long port, unsigned int nr)
176{
177 return __io(port);
178}
179EXPORT_SYMBOL(ioport_map);
180
181void ioport_unmap(void __iomem *addr)
182{
183}
184EXPORT_SYMBOL(ioport_unmap);
185#endif
186
187#ifdef CONFIG_PCI
188#include <linux/pci.h>
189#include <linux/ioport.h>
190
191void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
192{
193 unsigned long start = pci_resource_start(dev, bar);
194 unsigned long len = pci_resource_len(dev, bar);
195 unsigned long flags = pci_resource_flags(dev, bar);
196
197 if (!len || !start)
198 return NULL;
199 if (maxlen && len > maxlen)
200 len = maxlen;
201 if (flags & IORESOURCE_IO)
202 return ioport_map(start, len);
203 if (flags & IORESOURCE_MEM) {
204 if (flags & IORESOURCE_CACHEABLE)
205 return ioremap(start, len);
206 return ioremap_nocache(start, len);
207 }
208 return NULL;
209}
210EXPORT_SYMBOL(pci_iomap);
211
212void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
213{
214 if ((unsigned long)addr >= VMALLOC_START &&
215 (unsigned long)addr < VMALLOC_END)
216 iounmap(addr);
217}
218EXPORT_SYMBOL(pci_iounmap);
219#endif
diff --git a/arch/arm/mm/mm-armv.c b/arch/arm/mm/mm-armv.c
index 2c2b93d77d43..c3bd503b43a2 100644
--- a/arch/arm/mm/mm-armv.c
+++ b/arch/arm/mm/mm-armv.c
@@ -169,7 +169,14 @@ pgd_t *get_pgd_slow(struct mm_struct *mm)
169 169
170 memzero(new_pgd, FIRST_KERNEL_PGD_NR * sizeof(pgd_t)); 170 memzero(new_pgd, FIRST_KERNEL_PGD_NR * sizeof(pgd_t));
171 171
172 /*
173 * Copy over the kernel and IO PGD entries
174 */
172 init_pgd = pgd_offset_k(0); 175 init_pgd = pgd_offset_k(0);
176 memcpy(new_pgd + FIRST_KERNEL_PGD_NR, init_pgd + FIRST_KERNEL_PGD_NR,
177 (PTRS_PER_PGD - FIRST_KERNEL_PGD_NR) * sizeof(pgd_t));
178
179 clean_dcache_area(new_pgd, PTRS_PER_PGD * sizeof(pgd_t));
173 180
174 if (!vectors_high()) { 181 if (!vectors_high()) {
175 /* 182 /*
@@ -198,14 +205,6 @@ pgd_t *get_pgd_slow(struct mm_struct *mm)
198 spin_unlock(&mm->page_table_lock); 205 spin_unlock(&mm->page_table_lock);
199 } 206 }
200 207
201 /*
202 * Copy over the kernel and IO PGD entries
203 */
204 memcpy(new_pgd + FIRST_KERNEL_PGD_NR, init_pgd + FIRST_KERNEL_PGD_NR,
205 (PTRS_PER_PGD - FIRST_KERNEL_PGD_NR) * sizeof(pgd_t));
206
207 clean_dcache_area(new_pgd, PTRS_PER_PGD * sizeof(pgd_t));
208
209 return new_pgd; 208 return new_pgd;
210 209
211no_pte: 210no_pte:
@@ -683,7 +682,7 @@ void __init memtable_init(struct meminfo *mi)
683 } 682 }
684 683
685 flush_cache_all(); 684 flush_cache_all();
686 flush_tlb_all(); 685 local_flush_tlb_all();
687 686
688 top_pmd = pmd_off_k(0xffff0000); 687 top_pmd = pmd_off_k(0xffff0000);
689} 688}
@@ -698,75 +697,3 @@ void __init iotable_init(struct map_desc *io_desc, int nr)
698 for (i = 0; i < nr; i++) 697 for (i = 0; i < nr; i++)
699 create_mapping(io_desc + i); 698 create_mapping(io_desc + i);
700} 699}
701
702static inline void
703free_memmap(int node, unsigned long start_pfn, unsigned long end_pfn)
704{
705 struct page *start_pg, *end_pg;
706 unsigned long pg, pgend;
707
708 /*
709 * Convert start_pfn/end_pfn to a struct page pointer.
710 */
711 start_pg = pfn_to_page(start_pfn);
712 end_pg = pfn_to_page(end_pfn);
713
714 /*
715 * Convert to physical addresses, and
716 * round start upwards and end downwards.
717 */
718 pg = PAGE_ALIGN(__pa(start_pg));
719 pgend = __pa(end_pg) & PAGE_MASK;
720
721 /*
722 * If there are free pages between these,
723 * free the section of the memmap array.
724 */
725 if (pg < pgend)
726 free_bootmem_node(NODE_DATA(node), pg, pgend - pg);
727}
728
729static inline void free_unused_memmap_node(int node, struct meminfo *mi)
730{
731 unsigned long bank_start, prev_bank_end = 0;
732 unsigned int i;
733
734 /*
735 * [FIXME] This relies on each bank being in address order. This
736 * may not be the case, especially if the user has provided the
737 * information on the command line.
738 */
739 for (i = 0; i < mi->nr_banks; i++) {
740 if (mi->bank[i].size == 0 || mi->bank[i].node != node)
741 continue;
742
743 bank_start = mi->bank[i].start >> PAGE_SHIFT;
744 if (bank_start < prev_bank_end) {
745 printk(KERN_ERR "MEM: unordered memory banks. "
746 "Not freeing memmap.\n");
747 break;
748 }
749
750 /*
751 * If we had a previous bank, and there is a space
752 * between the current bank and the previous, free it.
753 */
754 if (prev_bank_end && prev_bank_end != bank_start)
755 free_memmap(node, prev_bank_end, bank_start);
756
757 prev_bank_end = PAGE_ALIGN(mi->bank[i].start +
758 mi->bank[i].size) >> PAGE_SHIFT;
759 }
760}
761
762/*
763 * The mem_map array can get very big. Free
764 * the unused area of the memory map.
765 */
766void __init create_memmap_holes(struct meminfo *mi)
767{
768 int node;
769
770 for_each_online_node(node)
771 free_unused_memmap_node(node, mi);
772}
diff --git a/arch/arm/mm/mmap.c b/arch/arm/mm/mmap.c
index 32c4b0e35b37..3de7f84b53c2 100644
--- a/arch/arm/mm/mmap.c
+++ b/arch/arm/mm/mmap.c
@@ -73,7 +73,12 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
73 (!vma || addr + len <= vma->vm_start)) 73 (!vma || addr + len <= vma->vm_start))
74 return addr; 74 return addr;
75 } 75 }
76 start_addr = addr = mm->free_area_cache; 76 if (len > mm->cached_hole_size) {
77 start_addr = addr = mm->free_area_cache;
78 } else {
79 start_addr = addr = TASK_UNMAPPED_BASE;
80 mm->cached_hole_size = 0;
81 }
77 82
78full_search: 83full_search:
79 if (do_align) 84 if (do_align)
@@ -90,6 +95,7 @@ full_search:
90 */ 95 */
91 if (start_addr != TASK_UNMAPPED_BASE) { 96 if (start_addr != TASK_UNMAPPED_BASE) {
92 start_addr = addr = TASK_UNMAPPED_BASE; 97 start_addr = addr = TASK_UNMAPPED_BASE;
98 mm->cached_hole_size = 0;
93 goto full_search; 99 goto full_search;
94 } 100 }
95 return -ENOMEM; 101 return -ENOMEM;
@@ -101,6 +107,8 @@ full_search:
101 mm->free_area_cache = addr + len; 107 mm->free_area_cache = addr + len;
102 return addr; 108 return addr;
103 } 109 }
110 if (addr + mm->cached_hole_size < vma->vm_start)
111 mm->cached_hole_size = vma->vm_start - addr;
104 addr = vma->vm_end; 112 addr = vma->vm_end;
105 if (do_align) 113 if (do_align)
106 addr = COLOUR_ALIGN(addr, pgoff); 114 addr = COLOUR_ALIGN(addr, pgoff);
diff --git a/arch/arm/mm/proc-arm1020.S b/arch/arm/mm/proc-arm1020.S
index 1f325231b9e4..5c0ae5260d1c 100644
--- a/arch/arm/mm/proc-arm1020.S
+++ b/arch/arm/mm/proc-arm1020.S
@@ -445,14 +445,14 @@ __arm1020_setup:
445 /* 445 /*
446 * R 446 * R
447 * .RVI ZFRS BLDP WCAM 447 * .RVI ZFRS BLDP WCAM
448 * .0.1 1001 ..11 0101 /* FIXME: why no V bit? */ 448 * .011 1001 ..11 0101
449 */ 449 */
450 .type arm1020_cr1_clear, #object 450 .type arm1020_cr1_clear, #object
451 .type arm1020_cr1_set, #object 451 .type arm1020_cr1_set, #object
452arm1020_cr1_clear: 452arm1020_cr1_clear:
453 .word 0x593f 453 .word 0x593f
454arm1020_cr1_set: 454arm1020_cr1_set:
455 .word 0x1935 455 .word 0x3935
456 456
457 __INITDATA 457 __INITDATA
458 458
diff --git a/arch/arm/mm/proc-arm1020e.S b/arch/arm/mm/proc-arm1020e.S
index 142a2c2d6f0b..d69389c4d4ba 100644
--- a/arch/arm/mm/proc-arm1020e.S
+++ b/arch/arm/mm/proc-arm1020e.S
@@ -427,14 +427,14 @@ __arm1020e_setup:
427 /* 427 /*
428 * R 428 * R
429 * .RVI ZFRS BLDP WCAM 429 * .RVI ZFRS BLDP WCAM
430 * .0.1 1001 ..11 0101 /* FIXME: why no V bit? */ 430 * .011 1001 ..11 0101
431 */ 431 */
432 .type arm1020e_cr1_clear, #object 432 .type arm1020e_cr1_clear, #object
433 .type arm1020e_cr1_set, #object 433 .type arm1020e_cr1_set, #object
434arm1020e_cr1_clear: 434arm1020e_cr1_clear:
435 .word 0x5f3f 435 .word 0x5f3f
436arm1020e_cr1_set: 436arm1020e_cr1_set:
437 .word 0x1935 437 .word 0x3935
438 438
439 __INITDATA 439 __INITDATA
440 440
diff --git a/arch/arm/mm/proc-v6.S b/arch/arm/mm/proc-v6.S
index 0aa73d414783..e3d8510f4340 100644
--- a/arch/arm/mm/proc-v6.S
+++ b/arch/arm/mm/proc-v6.S
@@ -132,8 +132,8 @@ ENTRY(cpu_v6_switch_mm)
132 * 100x 1 0 1 r/o no acc 132 * 100x 1 0 1 r/o no acc
133 * 10x0 1 0 1 r/o no acc 133 * 10x0 1 0 1 r/o no acc
134 * 1011 0 0 1 r/w no acc 134 * 1011 0 0 1 r/w no acc
135 * 110x 1 1 0 r/o r/o 135 * 110x 0 1 0 r/w r/o
136 * 11x0 1 1 0 r/o r/o 136 * 11x0 0 1 0 r/w r/o
137 * 1111 0 1 1 r/w r/w 137 * 1111 0 1 1 r/w r/w
138 */ 138 */
139ENTRY(cpu_v6_set_pte) 139ENTRY(cpu_v6_set_pte)
@@ -150,7 +150,7 @@ ENTRY(cpu_v6_set_pte)
150 tst r1, #L_PTE_USER 150 tst r1, #L_PTE_USER
151 orrne r2, r2, #AP1 | nG 151 orrne r2, r2, #AP1 | nG
152 tstne r2, #APX 152 tstne r2, #APX
153 eorne r2, r2, #AP0 153 bicne r2, r2, #APX | AP0
154 154
155 tst r1, #L_PTE_YOUNG 155 tst r1, #L_PTE_YOUNG
156 biceq r2, r2, #APX | AP1 | AP0 156 biceq r2, r2, #APX | AP1 | AP0
diff --git a/arch/arm/nwfpe/softfloat-macros b/arch/arm/nwfpe/softfloat-macros
index 5469989f2c5e..5a060f95a58f 100644
--- a/arch/arm/nwfpe/softfloat-macros
+++ b/arch/arm/nwfpe/softfloat-macros
@@ -563,8 +563,14 @@ static bits64 estimateDiv128To64( bits64 a0, bits64 a1, bits64 b )
563 bits64 rem0, rem1, term0, term1; 563 bits64 rem0, rem1, term0, term1;
564 bits64 z; 564 bits64 z;
565 if ( b <= a0 ) return LIT64( 0xFFFFFFFFFFFFFFFF ); 565 if ( b <= a0 ) return LIT64( 0xFFFFFFFFFFFFFFFF );
566 b0 = b>>32; 566 b0 = b>>32; /* hence b0 is 32 bits wide now */
567 z = ( b0<<32 <= a0 ) ? LIT64( 0xFFFFFFFF00000000 ) : ( a0 / b0 )<<32; 567 if ( b0<<32 <= a0 ) {
568 z = LIT64( 0xFFFFFFFF00000000 );
569 } else {
570 z = a0;
571 do_div( z, b0 );
572 z <<= 32;
573 }
568 mul64To128( b, z, &term0, &term1 ); 574 mul64To128( b, z, &term0, &term1 );
569 sub128( a0, a1, term0, term1, &rem0, &rem1 ); 575 sub128( a0, a1, term0, term1, &rem0, &rem1 );
570 while ( ( (sbits64) rem0 ) < 0 ) { 576 while ( ( (sbits64) rem0 ) < 0 ) {
@@ -573,7 +579,12 @@ static bits64 estimateDiv128To64( bits64 a0, bits64 a1, bits64 b )
573 add128( rem0, rem1, b0, b1, &rem0, &rem1 ); 579 add128( rem0, rem1, b0, b1, &rem0, &rem1 );
574 } 580 }
575 rem0 = ( rem0<<32 ) | ( rem1>>32 ); 581 rem0 = ( rem0<<32 ) | ( rem1>>32 );
576 z |= ( b0<<32 <= rem0 ) ? 0xFFFFFFFF : rem0 / b0; 582 if ( b0<<32 <= rem0 ) {
583 z |= 0xFFFFFFFF;
584 } else {
585 do_div( rem0, b0 );
586 z |= rem0;
587 }
577 return z; 588 return z;
578 589
579} 590}
@@ -601,6 +612,7 @@ static bits32 estimateSqrt32( int16 aExp, bits32 a )
601 }; 612 };
602 int8 index; 613 int8 index;
603 bits32 z; 614 bits32 z;
615 bits64 A;
604 616
605 index = ( a>>27 ) & 15; 617 index = ( a>>27 ) & 15;
606 if ( aExp & 1 ) { 618 if ( aExp & 1 ) {
@@ -614,7 +626,9 @@ static bits32 estimateSqrt32( int16 aExp, bits32 a )
614 z = ( 0x20000 <= z ) ? 0xFFFF8000 : ( z<<15 ); 626 z = ( 0x20000 <= z ) ? 0xFFFF8000 : ( z<<15 );
615 if ( z <= a ) return (bits32) ( ( (sbits32) a )>>1 ); 627 if ( z <= a ) return (bits32) ( ( (sbits32) a )>>1 );
616 } 628 }
617 return ( (bits32) ( ( ( (bits64) a )<<31 ) / z ) ) + ( z>>1 ); 629 A = ( (bits64) a )<<31;
630 do_div( A, z );
631 return ( (bits32) A ) + ( z>>1 );
618 632
619} 633}
620 634
diff --git a/arch/arm/nwfpe/softfloat.c b/arch/arm/nwfpe/softfloat.c
index 9d743ae29062..e038dd3be9b3 100644
--- a/arch/arm/nwfpe/softfloat.c
+++ b/arch/arm/nwfpe/softfloat.c
@@ -28,6 +28,8 @@ this code that are retained.
28=============================================================================== 28===============================================================================
29*/ 29*/
30 30
31#include <asm/div64.h>
32
31#include "fpa11.h" 33#include "fpa11.h"
32//#include "milieu.h" 34//#include "milieu.h"
33//#include "softfloat.h" 35//#include "softfloat.h"
@@ -1331,7 +1333,11 @@ float32 float32_div( float32 a, float32 b )
1331 aSig >>= 1; 1333 aSig >>= 1;
1332 ++zExp; 1334 ++zExp;
1333 } 1335 }
1334 zSig = ( ( (bits64) aSig )<<32 ) / bSig; 1336 {
1337 bits64 tmp = ( (bits64) aSig )<<32;
1338 do_div( tmp, bSig );
1339 zSig = tmp;
1340 }
1335 if ( ( zSig & 0x3F ) == 0 ) { 1341 if ( ( zSig & 0x3F ) == 0 ) {
1336 zSig |= ( ( (bits64) bSig ) * zSig != ( (bits64) aSig )<<32 ); 1342 zSig |= ( ( (bits64) bSig ) * zSig != ( (bits64) aSig )<<32 );
1337 } 1343 }
@@ -1397,7 +1403,9 @@ float32 float32_rem( float32 a, float32 b )
1397 q = ( bSig <= aSig ); 1403 q = ( bSig <= aSig );
1398 if ( q ) aSig -= bSig; 1404 if ( q ) aSig -= bSig;
1399 if ( 0 < expDiff ) { 1405 if ( 0 < expDiff ) {
1400 q = ( ( (bits64) aSig )<<32 ) / bSig; 1406 bits64 tmp = ( (bits64) aSig )<<32;
1407 do_div( tmp, bSig );
1408 q = tmp;
1401 q >>= 32 - expDiff; 1409 q >>= 32 - expDiff;
1402 bSig >>= 2; 1410 bSig >>= 2;
1403 aSig = ( ( aSig>>1 )<<( expDiff - 1 ) ) - bSig * q; 1411 aSig = ( ( aSig>>1 )<<( expDiff - 1 ) ) - bSig * q;
diff --git a/arch/arm/oprofile/Makefile b/arch/arm/oprofile/Makefile
index ba1a6e9f2b28..8ffb523e6c77 100644
--- a/arch/arm/oprofile/Makefile
+++ b/arch/arm/oprofile/Makefile
@@ -6,6 +6,6 @@ DRIVER_OBJS = $(addprefix ../../../drivers/oprofile/, \
6 oprofilefs.o oprofile_stats.o \ 6 oprofilefs.o oprofile_stats.o \
7 timer_int.o ) 7 timer_int.o )
8 8
9oprofile-y := $(DRIVER_OBJS) init.o 9oprofile-y := $(DRIVER_OBJS) init.o backtrace.o
10oprofile-$(CONFIG_CPU_XSCALE) += common.o op_model_xscale.o 10oprofile-$(CONFIG_CPU_XSCALE) += common.o op_model_xscale.o
11 11
diff --git a/arch/arm/oprofile/backtrace.c b/arch/arm/oprofile/backtrace.c
new file mode 100644
index 000000000000..ec58d3e2eb8b
--- /dev/null
+++ b/arch/arm/oprofile/backtrace.c
@@ -0,0 +1,144 @@
1/*
2 * Arm specific backtracing code for oprofile
3 *
4 * Copyright 2005 Openedhand Ltd.
5 *
6 * Author: Richard Purdie <rpurdie@openedhand.com>
7 *
8 * Based on i386 oprofile backtrace code by John Levon, David Smith
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
13 *
14 */
15
16#include <linux/oprofile.h>
17#include <linux/sched.h>
18#include <linux/mm.h>
19#include <asm/ptrace.h>
20#include <asm/uaccess.h>
21
22
23/*
24 * The registers we're interested in are at the end of the variable
25 * length saved register structure. The fp points at the end of this
26 * structure so the address of this struct is:
27 * (struct frame_tail *)(xxx->fp)-1
28 */
29struct frame_tail {
30 struct frame_tail *fp;
31 unsigned long sp;
32 unsigned long lr;
33} __attribute__((packed));
34
35
36#ifdef CONFIG_FRAME_POINTER
37static struct frame_tail* kernel_backtrace(struct frame_tail *tail)
38{
39 oprofile_add_trace(tail->lr);
40
41 /* frame pointers should strictly progress back up the stack
42 * (towards higher addresses) */
43 if (tail >= tail->fp)
44 return NULL;
45
46 return tail->fp-1;
47}
48#endif
49
50static struct frame_tail* user_backtrace(struct frame_tail *tail)
51{
52 struct frame_tail buftail;
53
54 /* hardware pte might not be valid due to dirty/accessed bit emulation
55 * so we use copy_from_user and benefit from exception fixups */
56 if (copy_from_user(&buftail, tail, sizeof(struct frame_tail)))
57 return NULL;
58
59 oprofile_add_trace(buftail.lr);
60
61 /* frame pointers should strictly progress back up the stack
62 * (towards higher addresses) */
63 if (tail >= buftail.fp)
64 return NULL;
65
66 return buftail.fp-1;
67}
68
69/* Compare two addresses and see if they're on the same page */
70#define CMP_ADDR_EQUAL(x,y,offset) ((((unsigned long) x) >> PAGE_SHIFT) \
71 == ((((unsigned long) y) + offset) >> PAGE_SHIFT))
72
73/* check that the page(s) containing the frame tail are present */
74static int pages_present(struct frame_tail *tail)
75{
76 struct mm_struct * mm = current->mm;
77
78 if (!check_user_page_readable(mm, (unsigned long)tail))
79 return 0;
80
81 if (CMP_ADDR_EQUAL(tail, tail, 8))
82 return 1;
83
84 if (!check_user_page_readable(mm, ((unsigned long)tail) + 8))
85 return 0;
86
87 return 1;
88}
89
90/*
91 * | | /\ Higher addresses
92 * | |
93 * --------------- stack base (address of current_thread_info)
94 * | thread info |
95 * . .
96 * | stack |
97 * --------------- saved regs->ARM_fp value if valid (frame_tail address)
98 * . .
99 * --------------- struct pt_regs stored on stack (struct pt_regs *)
100 * | |
101 * . .
102 * | |
103 * --------------- %esp
104 * | |
105 * | | \/ Lower addresses
106 *
107 * Thus, &pt_regs <-> stack base restricts the valid(ish) fp values
108 */
109static int valid_kernel_stack(struct frame_tail *tail, struct pt_regs *regs)
110{
111 unsigned long tailaddr = (unsigned long)tail;
112 unsigned long stack = (unsigned long)regs;
113 unsigned long stack_base = (stack & ~(THREAD_SIZE - 1)) + THREAD_SIZE;
114
115 return (tailaddr > stack) && (tailaddr < stack_base);
116}
117
118void arm_backtrace(struct pt_regs const *regs, unsigned int depth)
119{
120 struct frame_tail *tail;
121 unsigned long last_address = 0;
122
123 tail = ((struct frame_tail *) regs->ARM_fp) - 1;
124
125 if (!user_mode(regs)) {
126
127#ifdef CONFIG_FRAME_POINTER
128 while (depth-- && tail && valid_kernel_stack(tail, regs)) {
129 tail = kernel_backtrace(tail);
130 }
131#endif
132 return;
133 }
134
135 while (depth-- && tail && !((unsigned long) tail & 3)) {
136 if ((!CMP_ADDR_EQUAL(last_address, tail, 0)
137 || !CMP_ADDR_EQUAL(last_address, tail, 8))
138 && !pages_present(tail))
139 return;
140 last_address = (unsigned long) tail;
141 tail = user_backtrace(tail);
142 }
143}
144
diff --git a/arch/arm/oprofile/init.c b/arch/arm/oprofile/init.c
index cce3d3015eb7..d315a3a86c86 100644
--- a/arch/arm/oprofile/init.c
+++ b/arch/arm/oprofile/init.c
@@ -20,6 +20,8 @@ int __init oprofile_arch_init(struct oprofile_operations *ops)
20 ret = pmu_init(ops, &op_xscale_spec); 20 ret = pmu_init(ops, &op_xscale_spec);
21#endif 21#endif
22 22
23 ops->backtrace = arm_backtrace;
24
23 return ret; 25 return ret;
24} 26}
25 27
diff --git a/arch/arm/oprofile/op_arm_model.h b/arch/arm/oprofile/op_arm_model.h
index 2d4caf4781ad..2148d07484b7 100644
--- a/arch/arm/oprofile/op_arm_model.h
+++ b/arch/arm/oprofile/op_arm_model.h
@@ -24,6 +24,8 @@ struct op_arm_model_spec {
24extern struct op_arm_model_spec op_xscale_spec; 24extern struct op_arm_model_spec op_xscale_spec;
25#endif 25#endif
26 26
27extern void arm_backtrace(struct pt_regs * const regs, unsigned int depth);
28
27extern int __init pmu_init(struct oprofile_operations *ops, struct op_arm_model_spec *spec); 29extern int __init pmu_init(struct oprofile_operations *ops, struct op_arm_model_spec *spec);
28extern void pmu_exit(void); 30extern void pmu_exit(void);
29#endif /* OP_ARM_MODEL_H */ 31#endif /* OP_ARM_MODEL_H */
diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types
index 30c1dfbb052f..6d3a79e5fef8 100644
--- a/arch/arm/tools/mach-types
+++ b/arch/arm/tools/mach-types
@@ -6,7 +6,7 @@
6# To add an entry into this database, please see Documentation/arm/README, 6# To add an entry into this database, please see Documentation/arm/README,
7# or contact rmk@arm.linux.org.uk 7# or contact rmk@arm.linux.org.uk
8# 8#
9# Last update: Thu Mar 24 14:34:50 2005 9# Last update: Thu Jun 23 20:19:33 2005
10# 10#
11# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number 11# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
12# 12#
@@ -243,7 +243,7 @@ yoho ARCH_YOHO YOHO 231
243jasper ARCH_JASPER JASPER 232 243jasper ARCH_JASPER JASPER 232
244dsc25 ARCH_DSC25 DSC25 233 244dsc25 ARCH_DSC25 DSC25 233
245omap_innovator MACH_OMAP_INNOVATOR OMAP_INNOVATOR 234 245omap_innovator MACH_OMAP_INNOVATOR OMAP_INNOVATOR 234
246ramses ARCH_RAMSES RAMSES 235 246mnci ARCH_RAMSES RAMSES 235
247s28x ARCH_S28X S28X 236 247s28x ARCH_S28X S28X 236
248mport3 ARCH_MPORT3 MPORT3 237 248mport3 ARCH_MPORT3 MPORT3 237
249pxa_eagle250 ARCH_PXA_EAGLE250 PXA_EAGLE250 238 249pxa_eagle250 ARCH_PXA_EAGLE250 PXA_EAGLE250 238
@@ -323,7 +323,7 @@ nimbra29x ARCH_NIMBRA29X NIMBRA29X 311
323nimbra210 ARCH_NIMBRA210 NIMBRA210 312 323nimbra210 ARCH_NIMBRA210 NIMBRA210 312
324hhp_d95xx ARCH_HHP_D95XX HHP_D95XX 313 324hhp_d95xx ARCH_HHP_D95XX HHP_D95XX 313
325labarm ARCH_LABARM LABARM 314 325labarm ARCH_LABARM LABARM 314
326m825xx ARCH_M825XX M825XX 315 326comcerto ARCH_M825XX M825XX 315
327m7100 SA1100_M7100 M7100 316 327m7100 SA1100_M7100 M7100 316
328nipc2 ARCH_NIPC2 NIPC2 317 328nipc2 ARCH_NIPC2 NIPC2 317
329fu7202 ARCH_FU7202 FU7202 318 329fu7202 ARCH_FU7202 FU7202 318
@@ -724,3 +724,66 @@ lpc22xx MACH_LPC22XX LPC22XX 715
724omap_comet3 MACH_COMET3 COMET3 716 724omap_comet3 MACH_COMET3 COMET3 716
725omap_comet4 MACH_COMET4 COMET4 717 725omap_comet4 MACH_COMET4 COMET4 717
726csb625 MACH_CSB625 CSB625 718 726csb625 MACH_CSB625 CSB625 718
727fortunet2 MACH_FORTUNET2 FORTUNET2 719
728s5h2200 MACH_S5H2200 S5H2200 720
729optorm920 MACH_OPTORM920 OPTORM920 721
730adsbitsyxb MACH_ADSBITSYXB ADSBITSYXB 722
731adssphere MACH_ADSSPHERE ADSSPHERE 723
732adsportal MACH_ADSPORTAL ADSPORTAL 724
733ln2410sbc MACH_LN2410SBC LN2410SBC 725
734cb3rufc MACH_CB3RUFC CB3RUFC 726
735mp2usb MACH_MP2USB MP2USB 727
736ntnp425c MACH_NTNP425C NTNP425C 728
737colibri MACH_COLIBRI COLIBRI 729
738pcm7220 MACH_PCM7220 PCM7220 730
739gateway7001 MACH_GATEWAY7001 GATEWAY7001 731
740pcm027 MACH_PCM027 PCM027 732
741cmpxa MACH_CMPXA CMPXA 733
742anubis MACH_ANUBIS ANUBIS 734
743ite8152 MACH_ITE8152 ITE8152 735
744lpc3xxx MACH_LPC3XXX LPC3XXX 736
745puppeteer MACH_PUPPETEER PUPPETEER 737
746vt001 MACH_MACH_VADATECH MACH_VADATECH 738
747e570 MACH_E570 E570 739
748x50 MACH_X50 X50 740
749recon MACH_RECON RECON 741
750xboardgp8 MACH_XBOARDGP8 XBOARDGP8 742
751fpic2 MACH_FPIC2 FPIC2 743
752akita MACH_AKITA AKITA 744
753a81 MACH_A81 A81 745
754svm_sc25x MACH_SVM_SC25X SVM_SC25X 746
755vt020 MACH_VADATECH020 VADATECH020 747
756tli MACH_TLI TLI 748
757edb9315lc MACH_EDB9315LC EDB9315LC 749
758passec MACH_PASSEC PASSEC 750
759ds_tiger MACH_DS_TIGER DS_TIGER 751
760e310 MACH_E310 E310 752
761e330 MACH_E330 E330 753
762rt3000 MACH_RT3000 RT3000 754
763nokia770 MACH_NOKIA770 NOKIA770 755
764pnx0106 MACH_PNX0106 PNX0106 756
765hx21xx MACH_HX21XX HX21XX 757
766faraday MACH_FARADAY FARADAY 758
767sbc9312 MACH_SBC9312 SBC9312 759
768batman MACH_BATMAN BATMAN 760
769jpd201 MACH_JPD201 JPD201 761
770mipsa MACH_MIPSA MIPSA 762
771kacom MACH_KACOM KACOM 763
772swarcocpu MACH_SWARCOCPU SWARCOCPU 764
773swarcodsl MACH_SWARCODSL SWARCODSL 765
774blueangel MACH_BLUEANGEL BLUEANGEL 766
775hairygrama MACH_HAIRYGRAMA HAIRYGRAMA 767
776banff MACH_BANFF BANFF 768
777carmeva MACH_CARMEVA CARMEVA 769
778sam255 MACH_SAM255 SAM255 770
779ppm10 MACH_PPM10 PPM10 771
780edb9315a MACH_EDB9315A EDB9315A 772
781sunset MACH_SUNSET SUNSET 773
782stargate2 MACH_STARGATE2 STARGATE2 774
783intelmote2 MACH_INTELMOTE2 INTELMOTE2 775
784trizeps4 MACH_TRIZEPS4 TRIZEPS4 776
785mainstone2 MACH_MAINSTONE2 MAINSTONE2 777
786ez_ixp42x MACH_EZ_IXP42X EZ_IXP42X 778
787tapwave_zodiac MACH_TAPWAVE_ZODIAC TAPWAVE_ZODIAC 779
788universalmeter MACH_UNIVERSALMETER UNIVERSALMETER 780
789hicoarm9 MACH_HICOARM9 HICOARM9 781
diff --git a/arch/arm/vfp/vfp.h b/arch/arm/vfp/vfp.h
index 55a02bc994a3..4b97950984e9 100644
--- a/arch/arm/vfp/vfp.h
+++ b/arch/arm/vfp/vfp.h
@@ -117,7 +117,13 @@ static inline u64 vfp_estimate_div128to64(u64 nh, u64 nl, u64 m)
117 if (nh >= m) 117 if (nh >= m)
118 return ~0ULL; 118 return ~0ULL;
119 mh = m >> 32; 119 mh = m >> 32;
120 z = (mh << 32 <= nh) ? 0xffffffff00000000ULL : (nh / mh) << 32; 120 if (mh << 32 <= nh) {
121 z = 0xffffffff00000000ULL;
122 } else {
123 z = nh;
124 do_div(z, mh);
125 z <<= 32;
126 }
121 mul64to128(&termh, &terml, m, z); 127 mul64to128(&termh, &terml, m, z);
122 sub128(&remh, &reml, nh, nl, termh, terml); 128 sub128(&remh, &reml, nh, nl, termh, terml);
123 ml = m << 32; 129 ml = m << 32;
@@ -126,7 +132,12 @@ static inline u64 vfp_estimate_div128to64(u64 nh, u64 nl, u64 m)
126 add128(&remh, &reml, remh, reml, mh, ml); 132 add128(&remh, &reml, remh, reml, mh, ml);
127 } 133 }
128 remh = (remh << 32) | (reml >> 32); 134 remh = (remh << 32) | (reml >> 32);
129 z |= (mh << 32 <= remh) ? 0xffffffff : remh / mh; 135 if (mh << 32 <= remh) {
136 z |= 0xffffffff;
137 } else {
138 do_div(remh, mh);
139 z |= remh;
140 }
130 return z; 141 return z;
131} 142}
132 143
diff --git a/arch/arm/vfp/vfpdouble.c b/arch/arm/vfp/vfpdouble.c
index fa3053e84db5..b801cd66b6ea 100644
--- a/arch/arm/vfp/vfpdouble.c
+++ b/arch/arm/vfp/vfpdouble.c
@@ -32,6 +32,8 @@
32 */ 32 */
33#include <linux/kernel.h> 33#include <linux/kernel.h>
34#include <linux/bitops.h> 34#include <linux/bitops.h>
35
36#include <asm/div64.h>
35#include <asm/ptrace.h> 37#include <asm/ptrace.h>
36#include <asm/vfp.h> 38#include <asm/vfp.h>
37 39
diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c
index 3aeedd2afc70..22f3da4e0829 100644
--- a/arch/arm/vfp/vfpmodule.c
+++ b/arch/arm/vfp/vfpmodule.c
@@ -89,7 +89,7 @@ void vfp_raise_sigfpe(unsigned int sicode, struct pt_regs *regs)
89 current->thread.error_code = 0; 89 current->thread.error_code = 0;
90 current->thread.trap_no = 6; 90 current->thread.trap_no = 6;
91 91
92 force_sig_info(SIGFPE, &info, current); 92 send_sig_info(SIGFPE, &info, current);
93} 93}
94 94
95static void vfp_panic(char *reason) 95static void vfp_panic(char *reason)
diff --git a/arch/arm/vfp/vfpsingle.c b/arch/arm/vfp/vfpsingle.c
index 6849fe35cb2e..14dd696ddeb1 100644
--- a/arch/arm/vfp/vfpsingle.c
+++ b/arch/arm/vfp/vfpsingle.c
@@ -32,6 +32,8 @@
32 */ 32 */
33#include <linux/kernel.h> 33#include <linux/kernel.h>
34#include <linux/bitops.h> 34#include <linux/bitops.h>
35
36#include <asm/div64.h>
35#include <asm/ptrace.h> 37#include <asm/ptrace.h>
36#include <asm/vfp.h> 38#include <asm/vfp.h>
37 39
@@ -303,7 +305,11 @@ u32 vfp_estimate_sqrt_significand(u32 exponent, u32 significand)
303 if (z <= a) 305 if (z <= a)
304 return (s32)a >> 1; 306 return (s32)a >> 1;
305 } 307 }
306 return (u32)(((u64)a << 31) / z) + (z >> 1); 308 {
309 u64 v = (u64)a << 31;
310 do_div(v, z);
311 return v + (z >> 1);
312 }
307} 313}
308 314
309static u32 vfp_single_fsqrt(int sd, int unused, s32 m, u32 fpscr) 315static u32 vfp_single_fsqrt(int sd, int unused, s32 m, u32 fpscr)
@@ -1107,7 +1113,11 @@ static u32 vfp_single_fdiv(int sd, int sn, s32 m, u32 fpscr)
1107 vsn.significand >>= 1; 1113 vsn.significand >>= 1;
1108 vsd.exponent++; 1114 vsd.exponent++;
1109 } 1115 }
1110 vsd.significand = ((u64)vsn.significand << 32) / vsm.significand; 1116 {
1117 u64 significand = (u64)vsn.significand << 32;
1118 do_div(significand, vsm.significand);
1119 vsd.significand = significand;
1120 }
1111 if ((vsd.significand & 0x3f) == 0) 1121 if ((vsd.significand & 0x3f) == 0)
1112 vsd.significand |= ((u64)vsm.significand * vsd.significand != (u64)vsn.significand << 32); 1122 vsd.significand |= ((u64)vsm.significand * vsd.significand != (u64)vsn.significand << 32);
1113 1123