diff options
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/Kconfig | 6 | ||||
-rw-r--r-- | arch/arm/boot/compressed/head-xscale.S | 7 | ||||
-rw-r--r-- | arch/arm/configs/badge4_defconfig | 29 | ||||
-rw-r--r-- | arch/arm/configs/h3600_defconfig | 24 | ||||
-rw-r--r-- | arch/arm/configs/hackkit_defconfig | 22 | ||||
-rw-r--r-- | arch/arm/kernel/entry-armv.S | 16 | ||||
-rw-r--r-- | arch/arm/kernel/traps.c | 49 | ||||
-rw-r--r-- | arch/arm/lib/io-writesw-armv4.S | 6 | ||||
-rw-r--r-- | arch/arm/mach-integrator/integrator_cp.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-pxa/lubbock.c | 30 | ||||
-rw-r--r-- | arch/arm/mach-pxa/mainstone.c | 40 | ||||
-rw-r--r-- | arch/arm/mach-pxa/pm.c | 32 | ||||
-rw-r--r-- | arch/arm/mach-pxa/pxa25x.c | 33 | ||||
-rw-r--r-- | arch/arm/mach-pxa/pxa27x.c | 36 | ||||
-rw-r--r-- | arch/arm/mach-s3c2410/dma.c | 4 | ||||
-rw-r--r-- | arch/arm/mach-sa1100/Kconfig | 2 | ||||
-rw-r--r-- | arch/arm/mach-versatile/core.c | 2 | ||||
-rw-r--r-- | arch/arm/mm/Kconfig | 15 | ||||
-rw-r--r-- | arch/arm/mm/Makefile | 2 | ||||
-rw-r--r-- | arch/arm/mm/copypage-xscale.S | 113 | ||||
-rw-r--r-- | arch/arm/mm/copypage-xscale.c | 131 | ||||
-rw-r--r-- | arch/arm/mm/minicache.c | 73 |
22 files changed, 420 insertions, 253 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index bf397a9f8ac2..475950c8a831 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -497,7 +497,7 @@ source "drivers/cpufreq/Kconfig" | |||
497 | 497 | ||
498 | config CPU_FREQ_SA1100 | 498 | config CPU_FREQ_SA1100 |
499 | bool | 499 | bool |
500 | depends on CPU_FREQ && (SA1100_LART || SA1100_PLEB) | 500 | depends on CPU_FREQ && (SA1100_H3100 || SA1100_H3600 || SA1100_H3800 || SA1100_LART || SA1100_PLEB || SA1100_BADGE4 || SA1100_HACKKIT) |
501 | default y | 501 | default y |
502 | 502 | ||
503 | config CPU_FREQ_SA1110 | 503 | config CPU_FREQ_SA1110 |
@@ -689,7 +689,9 @@ source "drivers/block/Kconfig" | |||
689 | 689 | ||
690 | source "drivers/acorn/block/Kconfig" | 690 | source "drivers/acorn/block/Kconfig" |
691 | 691 | ||
692 | if ARCH_CLPS7500 || ARCH_IOP3XX || ARCH_IXP4XX || ARCH_L7200 || ARCH_LH7A40X || ARCH_PXA || ARCH_RPC || ARCH_S3C2410 || ARCH_SA1100 || ARCH_SHARK || FOOTBRIDGE | 692 | if PCMCIA || ARCH_CLPS7500 || ARCH_IOP3XX || ARCH_IXP4XX \ |
693 | || ARCH_L7200 || ARCH_LH7A40X || ARCH_PXA || ARCH_RPC \ | ||
694 | || ARCH_S3C2410 || ARCH_SA1100 || ARCH_SHARK || FOOTBRIDGE | ||
693 | source "drivers/ide/Kconfig" | 695 | source "drivers/ide/Kconfig" |
694 | endif | 696 | endif |
695 | 697 | ||
diff --git a/arch/arm/boot/compressed/head-xscale.S b/arch/arm/boot/compressed/head-xscale.S index 665bd2c20743..d3fe2533907e 100644 --- a/arch/arm/boot/compressed/head-xscale.S +++ b/arch/arm/boot/compressed/head-xscale.S | |||
@@ -47,3 +47,10 @@ __XScale_start: | |||
47 | orr r7, r7, #(MACH_TYPE_GTWX5715 & 0xff00) | 47 | orr r7, r7, #(MACH_TYPE_GTWX5715 & 0xff00) |
48 | #endif | 48 | #endif |
49 | 49 | ||
50 | #ifdef CONFIG_ARCH_IXP2000 | ||
51 | mov r1, #-1 | ||
52 | mov r0, #0xd6000000 | ||
53 | str r1, [r0, #0x14] | ||
54 | str r1, [r0, #0x18] | ||
55 | #endif | ||
56 | |||
diff --git a/arch/arm/configs/badge4_defconfig b/arch/arm/configs/badge4_defconfig index 2b4059d2f8e4..5d92af975d87 100644 --- a/arch/arm/configs/badge4_defconfig +++ b/arch/arm/configs/badge4_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.12-rc1-bk2 | 3 | # Linux kernel version: 2.6.12-rc6-git3 |
4 | # Sat Mar 26 21:32:26 2005 | 4 | # Thu Jun 9 19:00:50 2005 |
5 | # | 5 | # |
6 | CONFIG_ARM=y | 6 | CONFIG_ARM=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -16,6 +16,7 @@ CONFIG_GENERIC_IOMAP=y | |||
16 | CONFIG_EXPERIMENTAL=y | 16 | CONFIG_EXPERIMENTAL=y |
17 | CONFIG_CLEAN_COMPILE=y | 17 | CONFIG_CLEAN_COMPILE=y |
18 | CONFIG_BROKEN_ON_SMP=y | 18 | CONFIG_BROKEN_ON_SMP=y |
19 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
19 | 20 | ||
20 | # | 21 | # |
21 | # General setup | 22 | # General setup |
@@ -34,6 +35,8 @@ CONFIG_EMBEDDED=y | |||
34 | CONFIG_KALLSYMS=y | 35 | CONFIG_KALLSYMS=y |
35 | # CONFIG_KALLSYMS_ALL is not set | 36 | # CONFIG_KALLSYMS_ALL is not set |
36 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 37 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
38 | CONFIG_PRINTK=y | ||
39 | CONFIG_BUG=y | ||
37 | CONFIG_BASE_FULL=y | 40 | CONFIG_BASE_FULL=y |
38 | CONFIG_FUTEX=y | 41 | CONFIG_FUTEX=y |
39 | CONFIG_EPOLL=y | 42 | CONFIG_EPOLL=y |
@@ -109,7 +112,6 @@ CONFIG_CPU_ABRT_EV4=y | |||
109 | CONFIG_CPU_CACHE_V4WB=y | 112 | CONFIG_CPU_CACHE_V4WB=y |
110 | CONFIG_CPU_CACHE_VIVT=y | 113 | CONFIG_CPU_CACHE_VIVT=y |
111 | CONFIG_CPU_TLB_V4WB=y | 114 | CONFIG_CPU_TLB_V4WB=y |
112 | CONFIG_CPU_MINICACHE=y | ||
113 | 115 | ||
114 | # | 116 | # |
115 | # Processor Features | 117 | # Processor Features |
@@ -122,6 +124,7 @@ CONFIG_FORCE_MAX_ZONEORDER=9 | |||
122 | # Bus support | 124 | # Bus support |
123 | # | 125 | # |
124 | CONFIG_ISA=y | 126 | CONFIG_ISA=y |
127 | CONFIG_ISA_DMA_API=y | ||
125 | 128 | ||
126 | # | 129 | # |
127 | # PCCARD (PCMCIA/CardBus) support | 130 | # PCCARD (PCMCIA/CardBus) support |
@@ -131,6 +134,7 @@ CONFIG_ISA=y | |||
131 | # | 134 | # |
132 | # Kernel Features | 135 | # Kernel Features |
133 | # | 136 | # |
137 | # CONFIG_SMP is not set | ||
134 | # CONFIG_PREEMPT is not set | 138 | # CONFIG_PREEMPT is not set |
135 | CONFIG_DISCONTIGMEM=y | 139 | CONFIG_DISCONTIGMEM=y |
136 | # CONFIG_LEDS is not set | 140 | # CONFIG_LEDS is not set |
@@ -152,12 +156,14 @@ CONFIG_CPU_FREQ_TABLE=y | |||
152 | # CONFIG_CPU_FREQ_DEBUG is not set | 156 | # CONFIG_CPU_FREQ_DEBUG is not set |
153 | CONFIG_CPU_FREQ_STAT=y | 157 | CONFIG_CPU_FREQ_STAT=y |
154 | # CONFIG_CPU_FREQ_STAT_DETAILS is not set | 158 | # CONFIG_CPU_FREQ_STAT_DETAILS is not set |
155 | CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y | 159 | # CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set |
156 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set | 160 | CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y |
157 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | 161 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y |
158 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set | 162 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set |
159 | # CONFIG_CPU_FREQ_GOV_USERSPACE is not set | 163 | CONFIG_CPU_FREQ_GOV_USERSPACE=y |
160 | # CONFIG_CPU_FREQ_GOV_ONDEMAND is not set | 164 | # CONFIG_CPU_FREQ_GOV_ONDEMAND is not set |
165 | # CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set | ||
166 | CONFIG_CPU_FREQ_SA1100=y | ||
161 | 167 | ||
162 | # | 168 | # |
163 | # Floating point emulation | 169 | # Floating point emulation |
@@ -294,7 +300,6 @@ CONFIG_PARPORT_NOT_PC=y | |||
294 | # | 300 | # |
295 | # Block devices | 301 | # Block devices |
296 | # | 302 | # |
297 | # CONFIG_BLK_DEV_FD is not set | ||
298 | # CONFIG_BLK_DEV_XD is not set | 303 | # CONFIG_BLK_DEV_XD is not set |
299 | # CONFIG_PARIDE is not set | 304 | # CONFIG_PARIDE is not set |
300 | # CONFIG_BLK_DEV_COW_COMMON is not set | 305 | # CONFIG_BLK_DEV_COW_COMMON is not set |
@@ -428,7 +433,6 @@ CONFIG_NET=y | |||
428 | # | 433 | # |
429 | CONFIG_PACKET=y | 434 | CONFIG_PACKET=y |
430 | # CONFIG_PACKET_MMAP is not set | 435 | # CONFIG_PACKET_MMAP is not set |
431 | # CONFIG_NETLINK_DEV is not set | ||
432 | CONFIG_UNIX=y | 436 | CONFIG_UNIX=y |
433 | # CONFIG_NET_KEY is not set | 437 | # CONFIG_NET_KEY is not set |
434 | CONFIG_INET=y | 438 | CONFIG_INET=y |
@@ -526,6 +530,7 @@ CONFIG_IRDA_ULTRA=y | |||
526 | # CONFIG_SMC_IRCC_FIR is not set | 530 | # CONFIG_SMC_IRCC_FIR is not set |
527 | # CONFIG_ALI_FIR is not set | 531 | # CONFIG_ALI_FIR is not set |
528 | CONFIG_SA1100_FIR=y | 532 | CONFIG_SA1100_FIR=y |
533 | # CONFIG_VIA_FIR is not set | ||
529 | CONFIG_BT=m | 534 | CONFIG_BT=m |
530 | CONFIG_BT_L2CAP=m | 535 | CONFIG_BT_L2CAP=m |
531 | # CONFIG_BT_SCO is not set | 536 | # CONFIG_BT_SCO is not set |
@@ -618,7 +623,6 @@ CONFIG_NET_WIRELESS=y | |||
618 | # | 623 | # |
619 | # CONFIG_SERIO is not set | 624 | # CONFIG_SERIO is not set |
620 | # CONFIG_GAMEPORT is not set | 625 | # CONFIG_GAMEPORT is not set |
621 | CONFIG_SOUND_GAMEPORT=y | ||
622 | 626 | ||
623 | # | 627 | # |
624 | # Character devices | 628 | # Character devices |
@@ -687,7 +691,6 @@ CONFIG_RTC=m | |||
687 | # | 691 | # |
688 | # TPM devices | 692 | # TPM devices |
689 | # | 693 | # |
690 | # CONFIG_TCG_TPM is not set | ||
691 | 694 | ||
692 | # | 695 | # |
693 | # I2C support | 696 | # I2C support |
@@ -736,6 +739,7 @@ CONFIG_I2C_ELEKTOR=m | |||
736 | # CONFIG_SENSORS_LM85 is not set | 739 | # CONFIG_SENSORS_LM85 is not set |
737 | # CONFIG_SENSORS_LM87 is not set | 740 | # CONFIG_SENSORS_LM87 is not set |
738 | # CONFIG_SENSORS_LM90 is not set | 741 | # CONFIG_SENSORS_LM90 is not set |
742 | # CONFIG_SENSORS_LM92 is not set | ||
739 | # CONFIG_SENSORS_MAX1619 is not set | 743 | # CONFIG_SENSORS_MAX1619 is not set |
740 | # CONFIG_SENSORS_PC87360 is not set | 744 | # CONFIG_SENSORS_PC87360 is not set |
741 | # CONFIG_SENSORS_SMSC47B397 is not set | 745 | # CONFIG_SENSORS_SMSC47B397 is not set |
@@ -747,6 +751,7 @@ CONFIG_I2C_ELEKTOR=m | |||
747 | # | 751 | # |
748 | # Other I2C Chip support | 752 | # Other I2C Chip support |
749 | # | 753 | # |
754 | # CONFIG_SENSORS_DS1337 is not set | ||
750 | # CONFIG_SENSORS_EEPROM is not set | 755 | # CONFIG_SENSORS_EEPROM is not set |
751 | # CONFIG_SENSORS_PCF8574 is not set | 756 | # CONFIG_SENSORS_PCF8574 is not set |
752 | # CONFIG_SENSORS_PCF8591 is not set | 757 | # CONFIG_SENSORS_PCF8591 is not set |
@@ -871,7 +876,6 @@ CONFIG_USB_PRINTER=m | |||
871 | # | 876 | # |
872 | CONFIG_USB_STORAGE=y | 877 | CONFIG_USB_STORAGE=y |
873 | CONFIG_USB_STORAGE_DEBUG=y | 878 | CONFIG_USB_STORAGE_DEBUG=y |
874 | # CONFIG_USB_STORAGE_RW_DETECT is not set | ||
875 | # CONFIG_USB_STORAGE_DATAFAB is not set | 879 | # CONFIG_USB_STORAGE_DATAFAB is not set |
876 | # CONFIG_USB_STORAGE_FREECOM is not set | 880 | # CONFIG_USB_STORAGE_FREECOM is not set |
877 | # CONFIG_USB_STORAGE_ISD200 is not set | 881 | # CONFIG_USB_STORAGE_ISD200 is not set |
@@ -954,9 +958,11 @@ CONFIG_USB_USS720=m | |||
954 | # | 958 | # |
955 | CONFIG_USB_SERIAL=m | 959 | CONFIG_USB_SERIAL=m |
956 | CONFIG_USB_SERIAL_GENERIC=y | 960 | CONFIG_USB_SERIAL_GENERIC=y |
961 | # CONFIG_USB_SERIAL_AIRPRIME is not set | ||
957 | CONFIG_USB_SERIAL_BELKIN=m | 962 | CONFIG_USB_SERIAL_BELKIN=m |
958 | CONFIG_USB_SERIAL_WHITEHEAT=m | 963 | CONFIG_USB_SERIAL_WHITEHEAT=m |
959 | CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m | 964 | CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m |
965 | # CONFIG_USB_SERIAL_CP2101 is not set | ||
960 | # CONFIG_USB_SERIAL_CYPRESS_M8 is not set | 966 | # CONFIG_USB_SERIAL_CYPRESS_M8 is not set |
961 | CONFIG_USB_SERIAL_EMPEG=m | 967 | CONFIG_USB_SERIAL_EMPEG=m |
962 | CONFIG_USB_SERIAL_FTDI_SIO=m | 968 | CONFIG_USB_SERIAL_FTDI_SIO=m |
@@ -985,6 +991,7 @@ CONFIG_USB_SERIAL_KEYSPAN=m | |||
985 | # CONFIG_USB_SERIAL_KOBIL_SCT is not set | 991 | # CONFIG_USB_SERIAL_KOBIL_SCT is not set |
986 | CONFIG_USB_SERIAL_MCT_U232=m | 992 | CONFIG_USB_SERIAL_MCT_U232=m |
987 | CONFIG_USB_SERIAL_PL2303=m | 993 | CONFIG_USB_SERIAL_PL2303=m |
994 | # CONFIG_USB_SERIAL_HP4X is not set | ||
988 | # CONFIG_USB_SERIAL_SAFE is not set | 995 | # CONFIG_USB_SERIAL_SAFE is not set |
989 | # CONFIG_USB_SERIAL_TI is not set | 996 | # CONFIG_USB_SERIAL_TI is not set |
990 | CONFIG_USB_SERIAL_CYBERJACK=m | 997 | CONFIG_USB_SERIAL_CYBERJACK=m |
diff --git a/arch/arm/configs/h3600_defconfig b/arch/arm/configs/h3600_defconfig index b4e297dd54b2..b9de07de80fe 100644 --- a/arch/arm/configs/h3600_defconfig +++ b/arch/arm/configs/h3600_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.12-rc1-bk2 | 3 | # Linux kernel version: 2.6.12-rc4 |
4 | # Mon Mar 28 00:02:26 2005 | 4 | # Thu Jun 9 01:59:03 2005 |
5 | # | 5 | # |
6 | CONFIG_ARM=y | 6 | CONFIG_ARM=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -16,6 +16,7 @@ CONFIG_GENERIC_IOMAP=y | |||
16 | CONFIG_EXPERIMENTAL=y | 16 | CONFIG_EXPERIMENTAL=y |
17 | CONFIG_CLEAN_COMPILE=y | 17 | CONFIG_CLEAN_COMPILE=y |
18 | CONFIG_BROKEN_ON_SMP=y | 18 | CONFIG_BROKEN_ON_SMP=y |
19 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
19 | 20 | ||
20 | # | 21 | # |
21 | # General setup | 22 | # General setup |
@@ -33,6 +34,8 @@ CONFIG_KOBJECT_UEVENT=y | |||
33 | # CONFIG_EMBEDDED is not set | 34 | # CONFIG_EMBEDDED is not set |
34 | CONFIG_KALLSYMS=y | 35 | CONFIG_KALLSYMS=y |
35 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 36 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
37 | CONFIG_PRINTK=y | ||
38 | CONFIG_BUG=y | ||
36 | CONFIG_BASE_FULL=y | 39 | CONFIG_BASE_FULL=y |
37 | CONFIG_FUTEX=y | 40 | CONFIG_FUTEX=y |
38 | CONFIG_EPOLL=y | 41 | CONFIG_EPOLL=y |
@@ -120,6 +123,7 @@ CONFIG_CPU_MINICACHE=y | |||
120 | # Bus support | 123 | # Bus support |
121 | # | 124 | # |
122 | CONFIG_ISA=y | 125 | CONFIG_ISA=y |
126 | CONFIG_ISA_DMA_API=y | ||
123 | 127 | ||
124 | # | 128 | # |
125 | # PCCARD (PCMCIA/CardBus) support | 129 | # PCCARD (PCMCIA/CardBus) support |
@@ -138,6 +142,7 @@ CONFIG_PCMCIA_SA1100=y | |||
138 | # | 142 | # |
139 | # Kernel Features | 143 | # Kernel Features |
140 | # | 144 | # |
145 | # CONFIG_SMP is not set | ||
141 | # CONFIG_PREEMPT is not set | 146 | # CONFIG_PREEMPT is not set |
142 | CONFIG_DISCONTIGMEM=y | 147 | CONFIG_DISCONTIGMEM=y |
143 | # CONFIG_LEDS is not set | 148 | # CONFIG_LEDS is not set |
@@ -159,12 +164,13 @@ CONFIG_CPU_FREQ_TABLE=y | |||
159 | # CONFIG_CPU_FREQ_DEBUG is not set | 164 | # CONFIG_CPU_FREQ_DEBUG is not set |
160 | CONFIG_CPU_FREQ_STAT=y | 165 | CONFIG_CPU_FREQ_STAT=y |
161 | # CONFIG_CPU_FREQ_STAT_DETAILS is not set | 166 | # CONFIG_CPU_FREQ_STAT_DETAILS is not set |
162 | CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y | 167 | # CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set |
163 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set | 168 | CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y |
164 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | 169 | # CONFIG_CPU_FREQ_GOV_PERFORMANCE is not set |
165 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set | 170 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set |
166 | # CONFIG_CPU_FREQ_GOV_USERSPACE is not set | 171 | CONFIG_CPU_FREQ_GOV_USERSPACE=y |
167 | # CONFIG_CPU_FREQ_GOV_ONDEMAND is not set | 172 | # CONFIG_CPU_FREQ_GOV_ONDEMAND is not set |
173 | CONFIG_CPU_FREQ_SA1100=y | ||
168 | 174 | ||
169 | # | 175 | # |
170 | # Floating point emulation | 176 | # Floating point emulation |
@@ -298,7 +304,6 @@ CONFIG_MTD_SA1100=y | |||
298 | # | 304 | # |
299 | # Block devices | 305 | # Block devices |
300 | # | 306 | # |
301 | # CONFIG_BLK_DEV_FD is not set | ||
302 | # CONFIG_BLK_DEV_XD is not set | 307 | # CONFIG_BLK_DEV_XD is not set |
303 | # CONFIG_BLK_DEV_COW_COMMON is not set | 308 | # CONFIG_BLK_DEV_COW_COMMON is not set |
304 | CONFIG_BLK_DEV_LOOP=m | 309 | CONFIG_BLK_DEV_LOOP=m |
@@ -379,7 +384,6 @@ CONFIG_NET=y | |||
379 | # Networking options | 384 | # Networking options |
380 | # | 385 | # |
381 | # CONFIG_PACKET is not set | 386 | # CONFIG_PACKET is not set |
382 | # CONFIG_NETLINK_DEV is not set | ||
383 | CONFIG_UNIX=y | 387 | CONFIG_UNIX=y |
384 | # CONFIG_NET_KEY is not set | 388 | # CONFIG_NET_KEY is not set |
385 | CONFIG_INET=y | 389 | CONFIG_INET=y |
@@ -476,6 +480,7 @@ CONFIG_IRCOMM=m | |||
476 | # CONFIG_SMC_IRCC_FIR is not set | 480 | # CONFIG_SMC_IRCC_FIR is not set |
477 | # CONFIG_ALI_FIR is not set | 481 | # CONFIG_ALI_FIR is not set |
478 | CONFIG_SA1100_FIR=m | 482 | CONFIG_SA1100_FIR=m |
483 | # CONFIG_VIA_FIR is not set | ||
479 | # CONFIG_BT is not set | 484 | # CONFIG_BT is not set |
480 | CONFIG_NETDEVICES=y | 485 | CONFIG_NETDEVICES=y |
481 | # CONFIG_DUMMY is not set | 486 | # CONFIG_DUMMY is not set |
@@ -647,7 +652,6 @@ CONFIG_LEGACY_PTY_COUNT=256 | |||
647 | # | 652 | # |
648 | # TPM devices | 653 | # TPM devices |
649 | # | 654 | # |
650 | # CONFIG_TCG_TPM is not set | ||
651 | 655 | ||
652 | # | 656 | # |
653 | # I2C support | 657 | # I2C support |
@@ -676,9 +680,11 @@ CONFIG_FB_CFB_FILLRECT=y | |||
676 | CONFIG_FB_CFB_COPYAREA=y | 680 | CONFIG_FB_CFB_COPYAREA=y |
677 | CONFIG_FB_CFB_IMAGEBLIT=y | 681 | CONFIG_FB_CFB_IMAGEBLIT=y |
678 | CONFIG_FB_SOFT_CURSOR=y | 682 | CONFIG_FB_SOFT_CURSOR=y |
683 | # CONFIG_FB_MACMODES is not set | ||
679 | # CONFIG_FB_MODE_HELPERS is not set | 684 | # CONFIG_FB_MODE_HELPERS is not set |
680 | # CONFIG_FB_TILEBLITTING is not set | 685 | # CONFIG_FB_TILEBLITTING is not set |
681 | CONFIG_FB_SA1100=y | 686 | CONFIG_FB_SA1100=y |
687 | # CONFIG_FB_S1D13XXX is not set | ||
682 | # CONFIG_FB_VIRTUAL is not set | 688 | # CONFIG_FB_VIRTUAL is not set |
683 | 689 | ||
684 | # | 690 | # |
diff --git a/arch/arm/configs/hackkit_defconfig b/arch/arm/configs/hackkit_defconfig index 6987c8c5ddb4..fb41a36a5a68 100644 --- a/arch/arm/configs/hackkit_defconfig +++ b/arch/arm/configs/hackkit_defconfig | |||
@@ -1,7 +1,7 @@ | |||
1 | # | 1 | # |
2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
3 | # Linux kernel version: 2.6.12-rc1-bk2 | 3 | # Linux kernel version: 2.6.12-rc6-git3 |
4 | # Mon Mar 28 00:22:34 2005 | 4 | # Thu Jun 9 20:58:58 2005 |
5 | # | 5 | # |
6 | CONFIG_ARM=y | 6 | CONFIG_ARM=y |
7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
@@ -16,6 +16,7 @@ CONFIG_GENERIC_IOMAP=y | |||
16 | CONFIG_EXPERIMENTAL=y | 16 | CONFIG_EXPERIMENTAL=y |
17 | CONFIG_CLEAN_COMPILE=y | 17 | CONFIG_CLEAN_COMPILE=y |
18 | CONFIG_BROKEN_ON_SMP=y | 18 | CONFIG_BROKEN_ON_SMP=y |
19 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
19 | 20 | ||
20 | # | 21 | # |
21 | # General setup | 22 | # General setup |
@@ -34,6 +35,8 @@ CONFIG_KOBJECT_UEVENT=y | |||
34 | CONFIG_KALLSYMS=y | 35 | CONFIG_KALLSYMS=y |
35 | # CONFIG_KALLSYMS_ALL is not set | 36 | # CONFIG_KALLSYMS_ALL is not set |
36 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 37 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
38 | CONFIG_PRINTK=y | ||
39 | CONFIG_BUG=y | ||
37 | CONFIG_BASE_FULL=y | 40 | CONFIG_BASE_FULL=y |
38 | CONFIG_FUTEX=y | 41 | CONFIG_FUTEX=y |
39 | CONFIG_EPOLL=y | 42 | CONFIG_EPOLL=y |
@@ -109,7 +112,6 @@ CONFIG_CPU_ABRT_EV4=y | |||
109 | CONFIG_CPU_CACHE_V4WB=y | 112 | CONFIG_CPU_CACHE_V4WB=y |
110 | CONFIG_CPU_CACHE_VIVT=y | 113 | CONFIG_CPU_CACHE_VIVT=y |
111 | CONFIG_CPU_TLB_V4WB=y | 114 | CONFIG_CPU_TLB_V4WB=y |
112 | CONFIG_CPU_MINICACHE=y | ||
113 | 115 | ||
114 | # | 116 | # |
115 | # Processor Features | 117 | # Processor Features |
@@ -119,6 +121,7 @@ CONFIG_CPU_MINICACHE=y | |||
119 | # Bus support | 121 | # Bus support |
120 | # | 122 | # |
121 | CONFIG_ISA=y | 123 | CONFIG_ISA=y |
124 | CONFIG_ISA_DMA_API=y | ||
122 | 125 | ||
123 | # | 126 | # |
124 | # PCCARD (PCMCIA/CardBus) support | 127 | # PCCARD (PCMCIA/CardBus) support |
@@ -128,6 +131,7 @@ CONFIG_ISA=y | |||
128 | # | 131 | # |
129 | # Kernel Features | 132 | # Kernel Features |
130 | # | 133 | # |
134 | # CONFIG_SMP is not set | ||
131 | # CONFIG_PREEMPT is not set | 135 | # CONFIG_PREEMPT is not set |
132 | CONFIG_DISCONTIGMEM=y | 136 | CONFIG_DISCONTIGMEM=y |
133 | CONFIG_LEDS=y | 137 | CONFIG_LEDS=y |
@@ -151,12 +155,14 @@ CONFIG_CPU_FREQ_TABLE=y | |||
151 | # CONFIG_CPU_FREQ_DEBUG is not set | 155 | # CONFIG_CPU_FREQ_DEBUG is not set |
152 | CONFIG_CPU_FREQ_STAT=y | 156 | CONFIG_CPU_FREQ_STAT=y |
153 | # CONFIG_CPU_FREQ_STAT_DETAILS is not set | 157 | # CONFIG_CPU_FREQ_STAT_DETAILS is not set |
154 | CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y | 158 | # CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set |
155 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set | 159 | CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y |
156 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | 160 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y |
157 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set | 161 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set |
158 | # CONFIG_CPU_FREQ_GOV_USERSPACE is not set | 162 | CONFIG_CPU_FREQ_GOV_USERSPACE=y |
159 | # CONFIG_CPU_FREQ_GOV_ONDEMAND is not set | 163 | # CONFIG_CPU_FREQ_GOV_ONDEMAND is not set |
164 | # CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set | ||
165 | CONFIG_CPU_FREQ_SA1100=y | ||
160 | 166 | ||
161 | # | 167 | # |
162 | # Floating point emulation | 168 | # Floating point emulation |
@@ -280,7 +286,6 @@ CONFIG_MTD_CFI_UTIL=y | |||
280 | # | 286 | # |
281 | # Block devices | 287 | # Block devices |
282 | # | 288 | # |
283 | # CONFIG_BLK_DEV_FD is not set | ||
284 | # CONFIG_BLK_DEV_XD is not set | 289 | # CONFIG_BLK_DEV_XD is not set |
285 | # CONFIG_BLK_DEV_COW_COMMON is not set | 290 | # CONFIG_BLK_DEV_COW_COMMON is not set |
286 | # CONFIG_BLK_DEV_LOOP is not set | 291 | # CONFIG_BLK_DEV_LOOP is not set |
@@ -338,7 +343,6 @@ CONFIG_NET=y | |||
338 | # | 343 | # |
339 | CONFIG_PACKET=y | 344 | CONFIG_PACKET=y |
340 | # CONFIG_PACKET_MMAP is not set | 345 | # CONFIG_PACKET_MMAP is not set |
341 | # CONFIG_NETLINK_DEV is not set | ||
342 | CONFIG_UNIX=y | 346 | CONFIG_UNIX=y |
343 | # CONFIG_NET_KEY is not set | 347 | # CONFIG_NET_KEY is not set |
344 | CONFIG_INET=y | 348 | CONFIG_INET=y |
@@ -484,7 +488,6 @@ CONFIG_SERIO=y | |||
484 | CONFIG_SERIO_SERPORT=y | 488 | CONFIG_SERIO_SERPORT=y |
485 | # CONFIG_SERIO_RAW is not set | 489 | # CONFIG_SERIO_RAW is not set |
486 | # CONFIG_GAMEPORT is not set | 490 | # CONFIG_GAMEPORT is not set |
487 | CONFIG_SOUND_GAMEPORT=y | ||
488 | 491 | ||
489 | # | 492 | # |
490 | # Character devices | 493 | # Character devices |
@@ -533,7 +536,6 @@ CONFIG_LEGACY_PTY_COUNT=256 | |||
533 | # | 536 | # |
534 | # TPM devices | 537 | # TPM devices |
535 | # | 538 | # |
536 | # CONFIG_TCG_TPM is not set | ||
537 | 539 | ||
538 | # | 540 | # |
539 | # I2C support | 541 | # I2C support |
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index 78cf84cdc2ae..39a6c1b0b9a3 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
@@ -308,7 +308,7 @@ __pabt_svc: | |||
308 | str r1, [sp] @ save the "real" r0 copied | 308 | str r1, [sp] @ save the "real" r0 copied |
309 | @ from the exception stack | 309 | @ from the exception stack |
310 | 310 | ||
311 | #if __LINUX_ARM_ARCH__ < 6 | 311 | #if __LINUX_ARM_ARCH__ < 6 && !defined(CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG) |
312 | @ make sure our user space atomic helper is aborted | 312 | @ make sure our user space atomic helper is aborted |
313 | cmp r2, #VIRT_OFFSET | 313 | cmp r2, #VIRT_OFFSET |
314 | bichs r3, r3, #PSR_Z_BIT | 314 | bichs r3, r3, #PSR_Z_BIT |
@@ -648,11 +648,17 @@ __kuser_helper_start: | |||
648 | 648 | ||
649 | __kuser_cmpxchg: @ 0xffff0fc0 | 649 | __kuser_cmpxchg: @ 0xffff0fc0 |
650 | 650 | ||
651 | #if __LINUX_ARM_ARCH__ < 6 | 651 | #if defined(CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG) |
652 | 652 | ||
653 | #ifdef CONFIG_SMP /* sanity check */ | 653 | /* |
654 | #error "CONFIG_SMP on a machine supporting pre-ARMv6 processors?" | 654 | * Poor you. No fast solution possible... |
655 | #endif | 655 | * The kernel itself must perform the operation. |
656 | * A special ghost syscall is used for that (see traps.c). | ||
657 | */ | ||
658 | swi #0x9ffff0 | ||
659 | mov pc, lr | ||
660 | |||
661 | #elif __LINUX_ARM_ARCH__ < 6 | ||
656 | 662 | ||
657 | /* | 663 | /* |
658 | * Theory of operation: | 664 | * Theory of operation: |
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c index 14df16b983f4..45d2a032d890 100644 --- a/arch/arm/kernel/traps.c +++ b/arch/arm/kernel/traps.c | |||
@@ -464,6 +464,55 @@ asmlinkage int arm_syscall(int no, struct pt_regs *regs) | |||
464 | #endif | 464 | #endif |
465 | return 0; | 465 | return 0; |
466 | 466 | ||
467 | #ifdef CONFIG_NEEDS_SYSCALL_FOR_CMPXCHG | ||
468 | /* | ||
469 | * Atomically store r1 in *r2 if *r2 is equal to r0 for user space. | ||
470 | * Return zero in r0 if *MEM was changed or non-zero if no exchange | ||
471 | * happened. Also set the user C flag accordingly. | ||
472 | * If access permissions have to be fixed up then non-zero is | ||
473 | * returned and the operation has to be re-attempted. | ||
474 | * | ||
475 | * *NOTE*: This is a ghost syscall private to the kernel. Only the | ||
476 | * __kuser_cmpxchg code in entry-armv.S should be aware of its | ||
477 | * existence. Don't ever use this from user code. | ||
478 | */ | ||
479 | case 0xfff0: | ||
480 | { | ||
481 | extern void do_DataAbort(unsigned long addr, unsigned int fsr, | ||
482 | struct pt_regs *regs); | ||
483 | unsigned long val; | ||
484 | unsigned long addr = regs->ARM_r2; | ||
485 | struct mm_struct *mm = current->mm; | ||
486 | pgd_t *pgd; pmd_t *pmd; pte_t *pte; | ||
487 | |||
488 | regs->ARM_cpsr &= ~PSR_C_BIT; | ||
489 | spin_lock(&mm->page_table_lock); | ||
490 | pgd = pgd_offset(mm, addr); | ||
491 | if (!pgd_present(*pgd)) | ||
492 | goto bad_access; | ||
493 | pmd = pmd_offset(pgd, addr); | ||
494 | if (!pmd_present(*pmd)) | ||
495 | goto bad_access; | ||
496 | pte = pte_offset_map(pmd, addr); | ||
497 | if (!pte_present(*pte) || !pte_write(*pte)) | ||
498 | goto bad_access; | ||
499 | val = *(unsigned long *)addr; | ||
500 | val -= regs->ARM_r0; | ||
501 | if (val == 0) { | ||
502 | *(unsigned long *)addr = regs->ARM_r1; | ||
503 | regs->ARM_cpsr |= PSR_C_BIT; | ||
504 | } | ||
505 | spin_unlock(&mm->page_table_lock); | ||
506 | return val; | ||
507 | |||
508 | bad_access: | ||
509 | spin_unlock(&mm->page_table_lock); | ||
510 | /* simulate a read access fault */ | ||
511 | do_DataAbort(addr, 15 + (1 << 11), regs); | ||
512 | return -1; | ||
513 | } | ||
514 | #endif | ||
515 | |||
467 | default: | 516 | default: |
468 | /* Calls 9f00xx..9f07ff are defined to return -ENOSYS | 517 | /* Calls 9f00xx..9f07ff are defined to return -ENOSYS |
469 | if not implemented, rather than raising SIGILL. This | 518 | if not implemented, rather than raising SIGILL. This |
diff --git a/arch/arm/lib/io-writesw-armv4.S b/arch/arm/lib/io-writesw-armv4.S index 6d1d7c27806e..5e240e452af6 100644 --- a/arch/arm/lib/io-writesw-armv4.S +++ b/arch/arm/lib/io-writesw-armv4.S | |||
@@ -87,9 +87,9 @@ ENTRY(__raw_writesw) | |||
87 | subs r2, r2, #2 | 87 | subs r2, r2, #2 |
88 | orr ip, ip, r3, push_hbyte1 | 88 | orr ip, ip, r3, push_hbyte1 |
89 | strh ip, [r0] | 89 | strh ip, [r0] |
90 | bpl 2b | 90 | bpl 1b |
91 | 91 | ||
92 | 3: tst r2, #1 | 92 | tst r2, #1 |
93 | 2: movne ip, r3, lsr #8 | 93 | 3: movne ip, r3, lsr #8 |
94 | strneh ip, [r0] | 94 | strneh ip, [r0] |
95 | mov pc, lr | 95 | mov pc, lr |
diff --git a/arch/arm/mach-integrator/integrator_cp.c b/arch/arm/mach-integrator/integrator_cp.c index 3b948e8c2751..e0a01eef0993 100644 --- a/arch/arm/mach-integrator/integrator_cp.c +++ b/arch/arm/mach-integrator/integrator_cp.c | |||
@@ -83,7 +83,6 @@ static struct map_desc intcp_io_desc[] __initdata = { | |||
83 | { IO_ADDRESS(INTEGRATOR_UART1_BASE), INTEGRATOR_UART1_BASE, SZ_4K, MT_DEVICE }, | 83 | { IO_ADDRESS(INTEGRATOR_UART1_BASE), INTEGRATOR_UART1_BASE, SZ_4K, MT_DEVICE }, |
84 | { IO_ADDRESS(INTEGRATOR_DBG_BASE), INTEGRATOR_DBG_BASE, SZ_4K, MT_DEVICE }, | 84 | { IO_ADDRESS(INTEGRATOR_DBG_BASE), INTEGRATOR_DBG_BASE, SZ_4K, MT_DEVICE }, |
85 | { IO_ADDRESS(INTEGRATOR_GPIO_BASE), INTEGRATOR_GPIO_BASE, SZ_4K, MT_DEVICE }, | 85 | { IO_ADDRESS(INTEGRATOR_GPIO_BASE), INTEGRATOR_GPIO_BASE, SZ_4K, MT_DEVICE }, |
86 | { 0xfc900000, 0xc9000000, SZ_4K, MT_DEVICE }, | ||
87 | { 0xfca00000, 0xca000000, SZ_4K, MT_DEVICE }, | 86 | { 0xfca00000, 0xca000000, SZ_4K, MT_DEVICE }, |
88 | { 0xfcb00000, 0xcb000000, SZ_4K, MT_DEVICE }, | 87 | { 0xfcb00000, 0xcb000000, SZ_4K, MT_DEVICE }, |
89 | }; | 88 | }; |
diff --git a/arch/arm/mach-pxa/lubbock.c b/arch/arm/mach-pxa/lubbock.c index dd012d6e2f5c..f2c9e0d2b24b 100644 --- a/arch/arm/mach-pxa/lubbock.c +++ b/arch/arm/mach-pxa/lubbock.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
17 | #include <linux/device.h> | 17 | #include <linux/device.h> |
18 | #include <linux/sysdev.h> | ||
18 | #include <linux/major.h> | 19 | #include <linux/major.h> |
19 | #include <linux/fb.h> | 20 | #include <linux/fb.h> |
20 | #include <linux/interrupt.h> | 21 | #include <linux/interrupt.h> |
@@ -106,6 +107,35 @@ static void __init lubbock_init_irq(void) | |||
106 | set_irq_type(IRQ_GPIO(0), IRQT_FALLING); | 107 | set_irq_type(IRQ_GPIO(0), IRQT_FALLING); |
107 | } | 108 | } |
108 | 109 | ||
110 | #ifdef CONFIG_PM | ||
111 | |||
112 | static int lubbock_irq_resume(struct sys_device *dev) | ||
113 | { | ||
114 | LUB_IRQ_MASK_EN = lubbock_irq_enabled; | ||
115 | return 0; | ||
116 | } | ||
117 | |||
118 | static struct sysdev_class lubbock_irq_sysclass = { | ||
119 | set_kset_name("cpld_irq"), | ||
120 | .resume = lubbock_irq_resume, | ||
121 | }; | ||
122 | |||
123 | static struct sys_device lubbock_irq_device = { | ||
124 | .cls = &lubbock_irq_sysclass, | ||
125 | }; | ||
126 | |||
127 | static int __init lubbock_irq_device_init(void) | ||
128 | { | ||
129 | int ret = sysdev_class_register(&lubbock_irq_sysclass); | ||
130 | if (ret == 0) | ||
131 | ret = sysdev_register(&lubbock_irq_device); | ||
132 | return ret; | ||
133 | } | ||
134 | |||
135 | device_initcall(lubbock_irq_device_init); | ||
136 | |||
137 | #endif | ||
138 | |||
109 | static int lubbock_udc_is_connected(void) | 139 | static int lubbock_udc_is_connected(void) |
110 | { | 140 | { |
111 | return (LUB_MISC_RD & (1 << 9)) == 0; | 141 | return (LUB_MISC_RD & (1 << 9)) == 0; |
diff --git a/arch/arm/mach-pxa/mainstone.c b/arch/arm/mach-pxa/mainstone.c index 3f952237ae3d..9896afca751f 100644 --- a/arch/arm/mach-pxa/mainstone.c +++ b/arch/arm/mach-pxa/mainstone.c | |||
@@ -15,6 +15,7 @@ | |||
15 | 15 | ||
16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
17 | #include <linux/device.h> | 17 | #include <linux/device.h> |
18 | #include <linux/sysdev.h> | ||
18 | #include <linux/interrupt.h> | 19 | #include <linux/interrupt.h> |
19 | #include <linux/sched.h> | 20 | #include <linux/sched.h> |
20 | #include <linux/bitops.h> | 21 | #include <linux/bitops.h> |
@@ -62,7 +63,6 @@ static struct irqchip mainstone_irq_chip = { | |||
62 | .unmask = mainstone_unmask_irq, | 63 | .unmask = mainstone_unmask_irq, |
63 | }; | 64 | }; |
64 | 65 | ||
65 | |||
66 | static void mainstone_irq_handler(unsigned int irq, struct irqdesc *desc, | 66 | static void mainstone_irq_handler(unsigned int irq, struct irqdesc *desc, |
67 | struct pt_regs *regs) | 67 | struct pt_regs *regs) |
68 | { | 68 | { |
@@ -100,6 +100,35 @@ static void __init mainstone_init_irq(void) | |||
100 | set_irq_type(IRQ_GPIO(0), IRQT_FALLING); | 100 | set_irq_type(IRQ_GPIO(0), IRQT_FALLING); |
101 | } | 101 | } |
102 | 102 | ||
103 | #ifdef CONFIG_PM | ||
104 | |||
105 | static int mainstone_irq_resume(struct sys_device *dev) | ||
106 | { | ||
107 | MST_INTMSKENA = mainstone_irq_enabled; | ||
108 | return 0; | ||
109 | } | ||
110 | |||
111 | static struct sysdev_class mainstone_irq_sysclass = { | ||
112 | set_kset_name("cpld_irq"), | ||
113 | .resume = mainstone_irq_resume, | ||
114 | }; | ||
115 | |||
116 | static struct sys_device mainstone_irq_device = { | ||
117 | .cls = &mainstone_irq_sysclass, | ||
118 | }; | ||
119 | |||
120 | static int __init mainstone_irq_device_init(void) | ||
121 | { | ||
122 | int ret = sysdev_class_register(&mainstone_irq_sysclass); | ||
123 | if (ret == 0) | ||
124 | ret = sysdev_register(&mainstone_irq_device); | ||
125 | return ret; | ||
126 | } | ||
127 | |||
128 | device_initcall(mainstone_irq_device_init); | ||
129 | |||
130 | #endif | ||
131 | |||
103 | 132 | ||
104 | static struct resource smc91x_resources[] = { | 133 | static struct resource smc91x_resources[] = { |
105 | [0] = { | 134 | [0] = { |
@@ -304,6 +333,15 @@ static void __init mainstone_map_io(void) | |||
304 | PWER = 0xC0000002; | 333 | PWER = 0xC0000002; |
305 | PRER = 0x00000002; | 334 | PRER = 0x00000002; |
306 | PFER = 0x00000002; | 335 | PFER = 0x00000002; |
336 | /* for use I SRAM as framebuffer. */ | ||
337 | PSLR |= 0xF04; | ||
338 | PCFR = 0x66; | ||
339 | /* For Keypad wakeup. */ | ||
340 | KPC &=~KPC_ASACT; | ||
341 | KPC |=KPC_AS; | ||
342 | PKWR = 0x000FD000; | ||
343 | /* Need read PKWR back after set it. */ | ||
344 | PKWR; | ||
307 | } | 345 | } |
308 | 346 | ||
309 | MACHINE_START(MAINSTONE, "Intel HCDDBBVA0 Development Platform (aka Mainstone)") | 347 | MACHINE_START(MAINSTONE, "Intel HCDDBBVA0 Development Platform (aka Mainstone)") |
diff --git a/arch/arm/mach-pxa/pm.c b/arch/arm/mach-pxa/pm.c index 82a4bf34c251..9799fe80df23 100644 --- a/arch/arm/mach-pxa/pm.c +++ b/arch/arm/mach-pxa/pm.c | |||
@@ -29,9 +29,6 @@ | |||
29 | */ | 29 | */ |
30 | #undef DEBUG | 30 | #undef DEBUG |
31 | 31 | ||
32 | extern void pxa_cpu_suspend(void); | ||
33 | extern void pxa_cpu_resume(void); | ||
34 | |||
35 | #define SAVE(x) sleep_save[SLEEP_SAVE_##x] = x | 32 | #define SAVE(x) sleep_save[SLEEP_SAVE_##x] = x |
36 | #define RESTORE(x) x = sleep_save[SLEEP_SAVE_##x] | 33 | #define RESTORE(x) x = sleep_save[SLEEP_SAVE_##x] |
37 | 34 | ||
@@ -63,6 +60,12 @@ enum { SLEEP_SAVE_START = 0, | |||
63 | SLEEP_SAVE_ICMR, | 60 | SLEEP_SAVE_ICMR, |
64 | SLEEP_SAVE_CKEN, | 61 | SLEEP_SAVE_CKEN, |
65 | 62 | ||
63 | #ifdef CONFIG_PXA27x | ||
64 | SLEEP_SAVE_MDREFR, | ||
65 | SLEEP_SAVE_PWER, SLEEP_SAVE_PCFR, SLEEP_SAVE_PRER, | ||
66 | SLEEP_SAVE_PFER, SLEEP_SAVE_PKWR, | ||
67 | #endif | ||
68 | |||
66 | SLEEP_SAVE_CKSUM, | 69 | SLEEP_SAVE_CKSUM, |
67 | 70 | ||
68 | SLEEP_SAVE_SIZE | 71 | SLEEP_SAVE_SIZE |
@@ -75,9 +78,7 @@ static int pxa_pm_enter(suspend_state_t state) | |||
75 | unsigned long checksum = 0; | 78 | unsigned long checksum = 0; |
76 | struct timespec delta, rtc; | 79 | struct timespec delta, rtc; |
77 | int i; | 80 | int i; |
78 | 81 | extern void pxa_cpu_pm_enter(suspend_state_t state); | |
79 | if (state != PM_SUSPEND_MEM) | ||
80 | return -EINVAL; | ||
81 | 82 | ||
82 | #ifdef CONFIG_IWMMXT | 83 | #ifdef CONFIG_IWMMXT |
83 | /* force any iWMMXt context to ram **/ | 84 | /* force any iWMMXt context to ram **/ |
@@ -100,16 +101,17 @@ static int pxa_pm_enter(suspend_state_t state) | |||
100 | SAVE(GAFR2_L); SAVE(GAFR2_U); | 101 | SAVE(GAFR2_L); SAVE(GAFR2_U); |
101 | 102 | ||
102 | #ifdef CONFIG_PXA27x | 103 | #ifdef CONFIG_PXA27x |
104 | SAVE(MDREFR); | ||
103 | SAVE(GPLR3); SAVE(GPDR3); SAVE(GRER3); SAVE(GFER3); SAVE(PGSR3); | 105 | SAVE(GPLR3); SAVE(GPDR3); SAVE(GRER3); SAVE(GFER3); SAVE(PGSR3); |
104 | SAVE(GAFR3_L); SAVE(GAFR3_U); | 106 | SAVE(GAFR3_L); SAVE(GAFR3_U); |
107 | SAVE(PWER); SAVE(PCFR); SAVE(PRER); | ||
108 | SAVE(PFER); SAVE(PKWR); | ||
105 | #endif | 109 | #endif |
106 | 110 | ||
107 | SAVE(ICMR); | 111 | SAVE(ICMR); |
108 | ICMR = 0; | 112 | ICMR = 0; |
109 | 113 | ||
110 | SAVE(CKEN); | 114 | SAVE(CKEN); |
111 | CKEN = 0; | ||
112 | |||
113 | SAVE(PSTR); | 115 | SAVE(PSTR); |
114 | 116 | ||
115 | /* Note: wake up source are set up in each machine specific files */ | 117 | /* Note: wake up source are set up in each machine specific files */ |
@@ -123,16 +125,13 @@ static int pxa_pm_enter(suspend_state_t state) | |||
123 | /* Clear sleep reset status */ | 125 | /* Clear sleep reset status */ |
124 | RCSR = RCSR_SMR; | 126 | RCSR = RCSR_SMR; |
125 | 127 | ||
126 | /* set resume return address */ | ||
127 | PSPR = virt_to_phys(pxa_cpu_resume); | ||
128 | |||
129 | /* before sleeping, calculate and save a checksum */ | 128 | /* before sleeping, calculate and save a checksum */ |
130 | for (i = 0; i < SLEEP_SAVE_SIZE - 1; i++) | 129 | for (i = 0; i < SLEEP_SAVE_SIZE - 1; i++) |
131 | checksum += sleep_save[i]; | 130 | checksum += sleep_save[i]; |
132 | sleep_save[SLEEP_SAVE_CKSUM] = checksum; | 131 | sleep_save[SLEEP_SAVE_CKSUM] = checksum; |
133 | 132 | ||
134 | /* *** go zzz *** */ | 133 | /* *** go zzz *** */ |
135 | pxa_cpu_suspend(); | 134 | pxa_cpu_pm_enter(state); |
136 | 135 | ||
137 | /* after sleeping, validate the checksum */ | 136 | /* after sleeping, validate the checksum */ |
138 | checksum = 0; | 137 | checksum = 0; |
@@ -145,7 +144,7 @@ static int pxa_pm_enter(suspend_state_t state) | |||
145 | LUB_HEXLED = 0xbadbadc5; | 144 | LUB_HEXLED = 0xbadbadc5; |
146 | #endif | 145 | #endif |
147 | while (1) | 146 | while (1) |
148 | pxa_cpu_suspend(); | 147 | pxa_cpu_pm_enter(state); |
149 | } | 148 | } |
150 | 149 | ||
151 | /* ensure not to come back here if it wasn't intended */ | 150 | /* ensure not to come back here if it wasn't intended */ |
@@ -162,8 +161,11 @@ static int pxa_pm_enter(suspend_state_t state) | |||
162 | RESTORE(PGSR0); RESTORE(PGSR1); RESTORE(PGSR2); | 161 | RESTORE(PGSR0); RESTORE(PGSR1); RESTORE(PGSR2); |
163 | 162 | ||
164 | #ifdef CONFIG_PXA27x | 163 | #ifdef CONFIG_PXA27x |
164 | RESTORE(MDREFR); | ||
165 | RESTORE(GAFR3_L); RESTORE(GAFR3_U); RESTORE_GPLEVEL(3); | 165 | RESTORE(GAFR3_L); RESTORE(GAFR3_U); RESTORE_GPLEVEL(3); |
166 | RESTORE(GPDR3); RESTORE(GRER3); RESTORE(GFER3); RESTORE(PGSR3); | 166 | RESTORE(GPDR3); RESTORE(GRER3); RESTORE(GFER3); RESTORE(PGSR3); |
167 | RESTORE(PWER); RESTORE(PCFR); RESTORE(PRER); | ||
168 | RESTORE(PFER); RESTORE(PKWR); | ||
167 | #endif | 169 | #endif |
168 | 170 | ||
169 | PSSR = PSSR_RDH | PSSR_PH; | 171 | PSSR = PSSR_RDH | PSSR_PH; |
@@ -197,7 +199,9 @@ unsigned long sleep_phys_sp(void *sp) | |||
197 | */ | 199 | */ |
198 | static int pxa_pm_prepare(suspend_state_t state) | 200 | static int pxa_pm_prepare(suspend_state_t state) |
199 | { | 201 | { |
200 | return 0; | 202 | extern int pxa_cpu_pm_prepare(suspend_state_t state); |
203 | |||
204 | return pxa_cpu_pm_prepare(state); | ||
201 | } | 205 | } |
202 | 206 | ||
203 | /* | 207 | /* |
diff --git a/arch/arm/mach-pxa/pxa25x.c b/arch/arm/mach-pxa/pxa25x.c index e887b7175ef3..7869c3b4e62f 100644 --- a/arch/arm/mach-pxa/pxa25x.c +++ b/arch/arm/mach-pxa/pxa25x.c | |||
@@ -16,6 +16,7 @@ | |||
16 | * initialization stuff for PXA machines which can be overridden later if | 16 | * initialization stuff for PXA machines which can be overridden later if |
17 | * need be. | 17 | * need be. |
18 | */ | 18 | */ |
19 | #include <linux/config.h> | ||
19 | #include <linux/module.h> | 20 | #include <linux/module.h> |
20 | #include <linux/kernel.h> | 21 | #include <linux/kernel.h> |
21 | #include <linux/init.h> | 22 | #include <linux/init.h> |
@@ -102,3 +103,35 @@ unsigned int get_lcdclk_frequency_10khz(void) | |||
102 | } | 103 | } |
103 | 104 | ||
104 | EXPORT_SYMBOL(get_lcdclk_frequency_10khz); | 105 | EXPORT_SYMBOL(get_lcdclk_frequency_10khz); |
106 | |||
107 | #ifdef CONFIG_PM | ||
108 | |||
109 | int pxa_cpu_pm_prepare(suspend_state_t state) | ||
110 | { | ||
111 | switch (state) { | ||
112 | case PM_SUSPEND_MEM: | ||
113 | break; | ||
114 | default: | ||
115 | return -EINVAL; | ||
116 | } | ||
117 | |||
118 | return 0; | ||
119 | } | ||
120 | |||
121 | void pxa_cpu_pm_enter(suspend_state_t state) | ||
122 | { | ||
123 | extern void pxa_cpu_suspend(unsigned int); | ||
124 | extern void pxa_cpu_resume(void); | ||
125 | |||
126 | CKEN = 0; | ||
127 | |||
128 | switch (state) { | ||
129 | case PM_SUSPEND_MEM: | ||
130 | /* set resume return address */ | ||
131 | PSPR = virt_to_phys(pxa_cpu_resume); | ||
132 | pxa_cpu_suspend(3); | ||
133 | break; | ||
134 | } | ||
135 | } | ||
136 | |||
137 | #endif | ||
diff --git a/arch/arm/mach-pxa/pxa27x.c b/arch/arm/mach-pxa/pxa27x.c index 7e863afefb53..893964fb9659 100644 --- a/arch/arm/mach-pxa/pxa27x.c +++ b/arch/arm/mach-pxa/pxa27x.c | |||
@@ -120,6 +120,42 @@ EXPORT_SYMBOL(get_clk_frequency_khz); | |||
120 | EXPORT_SYMBOL(get_memclk_frequency_10khz); | 120 | EXPORT_SYMBOL(get_memclk_frequency_10khz); |
121 | EXPORT_SYMBOL(get_lcdclk_frequency_10khz); | 121 | EXPORT_SYMBOL(get_lcdclk_frequency_10khz); |
122 | 122 | ||
123 | #ifdef CONFIG_PM | ||
124 | |||
125 | int pxa_cpu_pm_prepare(suspend_state_t state) | ||
126 | { | ||
127 | switch (state) { | ||
128 | case PM_SUSPEND_MEM: | ||
129 | return 0; | ||
130 | default: | ||
131 | return -EINVAL; | ||
132 | } | ||
133 | } | ||
134 | |||
135 | void pxa_cpu_pm_enter(suspend_state_t state) | ||
136 | { | ||
137 | extern void pxa_cpu_standby(void); | ||
138 | extern void pxa_cpu_suspend(unsigned int); | ||
139 | extern void pxa_cpu_resume(void); | ||
140 | |||
141 | CKEN = CKEN22_MEMC | CKEN9_OSTIMER; | ||
142 | |||
143 | /* ensure voltage-change sequencer not initiated, which hangs */ | ||
144 | PCFR &= ~PCFR_FVC; | ||
145 | |||
146 | /* Clear edge-detect status register. */ | ||
147 | PEDR = 0xDF12FE1B; | ||
148 | |||
149 | switch (state) { | ||
150 | case PM_SUSPEND_MEM: | ||
151 | /* set resume return address */ | ||
152 | PSPR = virt_to_phys(pxa_cpu_resume); | ||
153 | pxa_cpu_suspend(3); | ||
154 | break; | ||
155 | } | ||
156 | } | ||
157 | |||
158 | #endif | ||
123 | 159 | ||
124 | /* | 160 | /* |
125 | * device registration specific to PXA27x. | 161 | * device registration specific to PXA27x. |
diff --git a/arch/arm/mach-s3c2410/dma.c b/arch/arm/mach-s3c2410/dma.c index bc229fab86d4..c7c28890d406 100644 --- a/arch/arm/mach-s3c2410/dma.c +++ b/arch/arm/mach-s3c2410/dma.c | |||
@@ -785,6 +785,10 @@ int s3c2410_dma_free(dmach_t channel, s3c2410_dma_client_t *client) | |||
785 | chan->client = NULL; | 785 | chan->client = NULL; |
786 | chan->in_use = 0; | 786 | chan->in_use = 0; |
787 | 787 | ||
788 | if (chan->irq_claimed) | ||
789 | free_irq(chan->irq, (void *)chan); | ||
790 | chan->irq_claimed = 0; | ||
791 | |||
788 | local_irq_restore(flags); | 792 | local_irq_restore(flags); |
789 | 793 | ||
790 | return 0; | 794 | return 0; |
diff --git a/arch/arm/mach-sa1100/Kconfig b/arch/arm/mach-sa1100/Kconfig index 50cde576dadf..6923316b3d0d 100644 --- a/arch/arm/mach-sa1100/Kconfig +++ b/arch/arm/mach-sa1100/Kconfig | |||
@@ -150,7 +150,7 @@ config SA1100_SSP | |||
150 | 150 | ||
151 | config H3600_SLEEVE | 151 | config H3600_SLEEVE |
152 | tristate "Compaq iPAQ Handheld sleeve support" | 152 | tristate "Compaq iPAQ Handheld sleeve support" |
153 | depends on SA1100_H3600 | 153 | depends on SA1100_H3100 || SA1100_H3600 |
154 | help | 154 | help |
155 | Choose this option to enable support for extension packs (sleeves) | 155 | Choose this option to enable support for extension packs (sleeves) |
156 | for the Compaq iPAQ H3XXX series of handheld computers. This option | 156 | for the Compaq iPAQ H3XXX series of handheld computers. This option |
diff --git a/arch/arm/mach-versatile/core.c b/arch/arm/mach-versatile/core.c index 554e1bd30d6e..302c2a7b9b63 100644 --- a/arch/arm/mach-versatile/core.c +++ b/arch/arm/mach-versatile/core.c | |||
@@ -543,7 +543,7 @@ static void versatile_clcd_enable(struct clcd_fb *fb) | |||
543 | val |= SYS_CLCD_MODE_5551; | 543 | val |= SYS_CLCD_MODE_5551; |
544 | break; | 544 | break; |
545 | case 6: | 545 | case 6: |
546 | val |= SYS_CLCD_MODE_565_BLSB; | 546 | val |= SYS_CLCD_MODE_565_RLSB; |
547 | break; | 547 | break; |
548 | case 8: | 548 | case 8: |
549 | val |= SYS_CLCD_MODE_888; | 549 | val |= SYS_CLCD_MODE_888; |
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig index 48bac7da8c70..3fefb43c67f7 100644 --- a/arch/arm/mm/Kconfig +++ b/arch/arm/mm/Kconfig | |||
@@ -228,7 +228,6 @@ config CPU_SA1100 | |||
228 | select CPU_CACHE_V4WB | 228 | select CPU_CACHE_V4WB |
229 | select CPU_CACHE_VIVT | 229 | select CPU_CACHE_VIVT |
230 | select CPU_TLB_V4WB | 230 | select CPU_TLB_V4WB |
231 | select CPU_MINICACHE | ||
232 | 231 | ||
233 | # XScale | 232 | # XScale |
234 | config CPU_XSCALE | 233 | config CPU_XSCALE |
@@ -239,7 +238,6 @@ config CPU_XSCALE | |||
239 | select CPU_ABRT_EV5T | 238 | select CPU_ABRT_EV5T |
240 | select CPU_CACHE_VIVT | 239 | select CPU_CACHE_VIVT |
241 | select CPU_TLB_V4WBI | 240 | select CPU_TLB_V4WBI |
242 | select CPU_MINICACHE | ||
243 | 241 | ||
244 | # ARMv6 | 242 | # ARMv6 |
245 | config CPU_V6 | 243 | config CPU_V6 |
@@ -345,11 +343,6 @@ config CPU_TLB_V4WBI | |||
345 | config CPU_TLB_V6 | 343 | config CPU_TLB_V6 |
346 | bool | 344 | bool |
347 | 345 | ||
348 | config CPU_MINICACHE | ||
349 | bool | ||
350 | help | ||
351 | Processor has a minicache. | ||
352 | |||
353 | comment "Processor Features" | 346 | comment "Processor Features" |
354 | 347 | ||
355 | config ARM_THUMB | 348 | config ARM_THUMB |
@@ -429,3 +422,11 @@ config HAS_TLS_REG | |||
429 | assume directly accessing that register and always obtain the | 422 | assume directly accessing that register and always obtain the |
430 | expected value only on ARMv7 and above. | 423 | expected value only on ARMv7 and above. |
431 | 424 | ||
425 | config NEEDS_SYSCALL_FOR_CMPXCHG | ||
426 | bool | ||
427 | default y if SMP && (CPU_32v5 || CPU_32v4 || CPU_32v3) | ||
428 | help | ||
429 | SMP on a pre-ARMv6 processor? Well OK then. | ||
430 | Forget about fast user space cmpxchg support. | ||
431 | It is just not possible. | ||
432 | |||
diff --git a/arch/arm/mm/Makefile b/arch/arm/mm/Makefile index ccf316c11e02..59f47d4c2dfe 100644 --- a/arch/arm/mm/Makefile +++ b/arch/arm/mm/Makefile | |||
@@ -31,8 +31,6 @@ obj-$(CONFIG_CPU_COPY_V6) += copypage-v6.o mmu.o | |||
31 | obj-$(CONFIG_CPU_SA1100) += copypage-v4mc.o | 31 | obj-$(CONFIG_CPU_SA1100) += copypage-v4mc.o |
32 | obj-$(CONFIG_CPU_XSCALE) += copypage-xscale.o | 32 | obj-$(CONFIG_CPU_XSCALE) += copypage-xscale.o |
33 | 33 | ||
34 | obj-$(CONFIG_CPU_MINICACHE) += minicache.o | ||
35 | |||
36 | obj-$(CONFIG_CPU_TLB_V3) += tlb-v3.o | 34 | obj-$(CONFIG_CPU_TLB_V3) += tlb-v3.o |
37 | obj-$(CONFIG_CPU_TLB_V4WT) += tlb-v4.o | 35 | obj-$(CONFIG_CPU_TLB_V4WT) += tlb-v4.o |
38 | obj-$(CONFIG_CPU_TLB_V4WB) += tlb-v4wb.o | 36 | obj-$(CONFIG_CPU_TLB_V4WB) += tlb-v4wb.o |
diff --git a/arch/arm/mm/copypage-xscale.S b/arch/arm/mm/copypage-xscale.S deleted file mode 100644 index bb277316ef52..000000000000 --- a/arch/arm/mm/copypage-xscale.S +++ /dev/null | |||
@@ -1,113 +0,0 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/lib/copypage-xscale.S | ||
3 | * | ||
4 | * Copyright (C) 2001 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 | #include <linux/linkage.h> | ||
11 | #include <linux/init.h> | ||
12 | #include <asm/constants.h> | ||
13 | |||
14 | /* | ||
15 | * General note: | ||
16 | * We don't really want write-allocate cache behaviour for these functions | ||
17 | * since that will just eat through 8K of the cache. | ||
18 | */ | ||
19 | |||
20 | .text | ||
21 | .align 5 | ||
22 | /* | ||
23 | * XScale optimised copy_user_page | ||
24 | * r0 = destination | ||
25 | * r1 = source | ||
26 | * r2 = virtual user address of ultimate destination page | ||
27 | * | ||
28 | * The source page may have some clean entries in the cache already, but we | ||
29 | * can safely ignore them - break_cow() will flush them out of the cache | ||
30 | * if we eventually end up using our copied page. | ||
31 | * | ||
32 | * What we could do is use the mini-cache to buffer reads from the source | ||
33 | * page. We rely on the mini-cache being smaller than one page, so we'll | ||
34 | * cycle through the complete cache anyway. | ||
35 | */ | ||
36 | ENTRY(xscale_mc_copy_user_page) | ||
37 | stmfd sp!, {r4, r5, lr} | ||
38 | mov r5, r0 | ||
39 | mov r0, r1 | ||
40 | bl map_page_minicache | ||
41 | mov r1, r5 | ||
42 | mov lr, #PAGE_SZ/64-1 | ||
43 | |||
44 | /* | ||
45 | * Strangely enough, best performance is achieved | ||
46 | * when prefetching destination as well. (NP) | ||
47 | */ | ||
48 | pld [r0, #0] | ||
49 | pld [r0, #32] | ||
50 | pld [r1, #0] | ||
51 | pld [r1, #32] | ||
52 | |||
53 | 1: pld [r0, #64] | ||
54 | pld [r0, #96] | ||
55 | pld [r1, #64] | ||
56 | pld [r1, #96] | ||
57 | |||
58 | 2: ldrd r2, [r0], #8 | ||
59 | ldrd r4, [r0], #8 | ||
60 | mov ip, r1 | ||
61 | strd r2, [r1], #8 | ||
62 | ldrd r2, [r0], #8 | ||
63 | strd r4, [r1], #8 | ||
64 | ldrd r4, [r0], #8 | ||
65 | strd r2, [r1], #8 | ||
66 | strd r4, [r1], #8 | ||
67 | mcr p15, 0, ip, c7, c10, 1 @ clean D line | ||
68 | ldrd r2, [r0], #8 | ||
69 | mcr p15, 0, ip, c7, c6, 1 @ invalidate D line | ||
70 | ldrd r4, [r0], #8 | ||
71 | mov ip, r1 | ||
72 | strd r2, [r1], #8 | ||
73 | ldrd r2, [r0], #8 | ||
74 | strd r4, [r1], #8 | ||
75 | ldrd r4, [r0], #8 | ||
76 | strd r2, [r1], #8 | ||
77 | strd r4, [r1], #8 | ||
78 | mcr p15, 0, ip, c7, c10, 1 @ clean D line | ||
79 | subs lr, lr, #1 | ||
80 | mcr p15, 0, ip, c7, c6, 1 @ invalidate D line | ||
81 | bgt 1b | ||
82 | beq 2b | ||
83 | |||
84 | ldmfd sp!, {r4, r5, pc} | ||
85 | |||
86 | .align 5 | ||
87 | /* | ||
88 | * XScale optimised clear_user_page | ||
89 | * r0 = destination | ||
90 | * r1 = virtual user address of ultimate destination page | ||
91 | */ | ||
92 | ENTRY(xscale_mc_clear_user_page) | ||
93 | mov r1, #PAGE_SZ/32 | ||
94 | mov r2, #0 | ||
95 | mov r3, #0 | ||
96 | 1: mov ip, r0 | ||
97 | strd r2, [r0], #8 | ||
98 | strd r2, [r0], #8 | ||
99 | strd r2, [r0], #8 | ||
100 | strd r2, [r0], #8 | ||
101 | mcr p15, 0, ip, c7, c10, 1 @ clean D line | ||
102 | subs r1, r1, #1 | ||
103 | mcr p15, 0, ip, c7, c6, 1 @ invalidate D line | ||
104 | bne 1b | ||
105 | mov pc, lr | ||
106 | |||
107 | __INITDATA | ||
108 | |||
109 | .type xscale_mc_user_fns, #object | ||
110 | ENTRY(xscale_mc_user_fns) | ||
111 | .long xscale_mc_clear_user_page | ||
112 | .long xscale_mc_copy_user_page | ||
113 | .size xscale_mc_user_fns, . - xscale_mc_user_fns | ||
diff --git a/arch/arm/mm/copypage-xscale.c b/arch/arm/mm/copypage-xscale.c new file mode 100644 index 000000000000..42a6ee255ce0 --- /dev/null +++ b/arch/arm/mm/copypage-xscale.c | |||
@@ -0,0 +1,131 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/lib/copypage-xscale.S | ||
3 | * | ||
4 | * Copyright (C) 1995-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 | * This handles the mini data cache, as found on SA11x0 and XScale | ||
11 | * processors. When we copy a user page page, we map it in such a way | ||
12 | * that accesses to this page will not touch the main data cache, but | ||
13 | * will be cached in the mini data cache. This prevents us thrashing | ||
14 | * the main data cache on page faults. | ||
15 | */ | ||
16 | #include <linux/init.h> | ||
17 | #include <linux/mm.h> | ||
18 | |||
19 | #include <asm/page.h> | ||
20 | #include <asm/pgtable.h> | ||
21 | #include <asm/tlbflush.h> | ||
22 | |||
23 | /* | ||
24 | * 0xffff8000 to 0xffffffff is reserved for any ARM architecture | ||
25 | * specific hacks for copying pages efficiently. | ||
26 | */ | ||
27 | #define COPYPAGE_MINICACHE 0xffff8000 | ||
28 | |||
29 | #define minicache_pgprot __pgprot(L_PTE_PRESENT | L_PTE_YOUNG | \ | ||
30 | L_PTE_CACHEABLE) | ||
31 | |||
32 | #define TOP_PTE(x) pte_offset_kernel(top_pmd, x) | ||
33 | |||
34 | static DEFINE_SPINLOCK(minicache_lock); | ||
35 | |||
36 | /* | ||
37 | * XScale mini-dcache optimised copy_user_page | ||
38 | * | ||
39 | * We flush the destination cache lines just before we write the data into the | ||
40 | * corresponding address. Since the Dcache is read-allocate, this removes the | ||
41 | * Dcache aliasing issue. The writes will be forwarded to the write buffer, | ||
42 | * and merged as appropriate. | ||
43 | */ | ||
44 | static void __attribute__((naked)) | ||
45 | mc_copy_user_page(void *from, void *to) | ||
46 | { | ||
47 | /* | ||
48 | * Strangely enough, best performance is achieved | ||
49 | * when prefetching destination as well. (NP) | ||
50 | */ | ||
51 | asm volatile( | ||
52 | "stmfd sp!, {r4, r5, lr} \n\ | ||
53 | mov lr, %2 \n\ | ||
54 | pld [r0, #0] \n\ | ||
55 | pld [r0, #32] \n\ | ||
56 | pld [r1, #0] \n\ | ||
57 | pld [r1, #32] \n\ | ||
58 | 1: pld [r0, #64] \n\ | ||
59 | pld [r0, #96] \n\ | ||
60 | pld [r1, #64] \n\ | ||
61 | pld [r1, #96] \n\ | ||
62 | 2: ldrd r2, [r0], #8 \n\ | ||
63 | ldrd r4, [r0], #8 \n\ | ||
64 | mov ip, r1 \n\ | ||
65 | strd r2, [r1], #8 \n\ | ||
66 | ldrd r2, [r0], #8 \n\ | ||
67 | strd r4, [r1], #8 \n\ | ||
68 | ldrd r4, [r0], #8 \n\ | ||
69 | strd r2, [r1], #8 \n\ | ||
70 | strd r4, [r1], #8 \n\ | ||
71 | mcr p15, 0, ip, c7, c10, 1 @ clean D line\n\ | ||
72 | ldrd r2, [r0], #8 \n\ | ||
73 | mcr p15, 0, ip, c7, c6, 1 @ invalidate D line\n\ | ||
74 | ldrd r4, [r0], #8 \n\ | ||
75 | mov ip, r1 \n\ | ||
76 | strd r2, [r1], #8 \n\ | ||
77 | ldrd r2, [r0], #8 \n\ | ||
78 | strd r4, [r1], #8 \n\ | ||
79 | ldrd r4, [r0], #8 \n\ | ||
80 | strd r2, [r1], #8 \n\ | ||
81 | strd r4, [r1], #8 \n\ | ||
82 | mcr p15, 0, ip, c7, c10, 1 @ clean D line\n\ | ||
83 | subs lr, lr, #1 \n\ | ||
84 | mcr p15, 0, ip, c7, c6, 1 @ invalidate D line\n\ | ||
85 | bgt 1b \n\ | ||
86 | beq 2b \n\ | ||
87 | ldmfd sp!, {r4, r5, pc} " | ||
88 | : | ||
89 | : "r" (from), "r" (to), "I" (PAGE_SIZE / 64 - 1)); | ||
90 | } | ||
91 | |||
92 | void xscale_mc_copy_user_page(void *kto, const void *kfrom, unsigned long vaddr) | ||
93 | { | ||
94 | spin_lock(&minicache_lock); | ||
95 | |||
96 | set_pte(TOP_PTE(COPYPAGE_MINICACHE), pfn_pte(__pa(kfrom) >> PAGE_SHIFT, minicache_pgprot)); | ||
97 | flush_tlb_kernel_page(COPYPAGE_MINICACHE); | ||
98 | |||
99 | mc_copy_user_page((void *)COPYPAGE_MINICACHE, kto); | ||
100 | |||
101 | spin_unlock(&minicache_lock); | ||
102 | } | ||
103 | |||
104 | /* | ||
105 | * XScale optimised clear_user_page | ||
106 | */ | ||
107 | void __attribute__((naked)) | ||
108 | xscale_mc_clear_user_page(void *kaddr, unsigned long vaddr) | ||
109 | { | ||
110 | asm volatile( | ||
111 | "mov r1, %0 \n\ | ||
112 | mov r2, #0 \n\ | ||
113 | mov r3, #0 \n\ | ||
114 | 1: mov ip, r0 \n\ | ||
115 | strd r2, [r0], #8 \n\ | ||
116 | strd r2, [r0], #8 \n\ | ||
117 | strd r2, [r0], #8 \n\ | ||
118 | strd r2, [r0], #8 \n\ | ||
119 | mcr p15, 0, ip, c7, c10, 1 @ clean D line\n\ | ||
120 | subs r1, r1, #1 \n\ | ||
121 | mcr p15, 0, ip, c7, c6, 1 @ invalidate D line\n\ | ||
122 | bne 1b \n\ | ||
123 | mov pc, lr" | ||
124 | : | ||
125 | : "I" (PAGE_SIZE / 32)); | ||
126 | } | ||
127 | |||
128 | struct cpu_user_fns xscale_mc_user_fns __initdata = { | ||
129 | .cpu_clear_user_page = xscale_mc_clear_user_page, | ||
130 | .cpu_copy_user_page = xscale_mc_copy_user_page, | ||
131 | }; | ||
diff --git a/arch/arm/mm/minicache.c b/arch/arm/mm/minicache.c deleted file mode 100644 index dedf2ab01b2a..000000000000 --- a/arch/arm/mm/minicache.c +++ /dev/null | |||
@@ -1,73 +0,0 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mm/minicache.c | ||
3 | * | ||
4 | * Copyright (C) 2001 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 | * This handles the mini data cache, as found on SA11x0 and XScale | ||
11 | * processors. When we copy a user page page, we map it in such a way | ||
12 | * that accesses to this page will not touch the main data cache, but | ||
13 | * will be cached in the mini data cache. This prevents us thrashing | ||
14 | * the main data cache on page faults. | ||
15 | */ | ||
16 | #include <linux/init.h> | ||
17 | #include <linux/mm.h> | ||
18 | |||
19 | #include <asm/page.h> | ||
20 | #include <asm/pgtable.h> | ||
21 | #include <asm/tlbflush.h> | ||
22 | |||
23 | /* | ||
24 | * 0xffff8000 to 0xffffffff is reserved for any ARM architecture | ||
25 | * specific hacks for copying pages efficiently. | ||
26 | */ | ||
27 | #define minicache_address (0xffff8000) | ||
28 | #define minicache_pgprot __pgprot(L_PTE_PRESENT | L_PTE_YOUNG | \ | ||
29 | L_PTE_CACHEABLE) | ||
30 | |||
31 | static pte_t *minicache_pte; | ||
32 | |||
33 | /* | ||
34 | * Note that this is intended to be called only from the copy_user_page | ||
35 | * asm code; anything else will require special locking to prevent the | ||
36 | * mini-cache space being re-used. (Note: probably preempt unsafe). | ||
37 | * | ||
38 | * We rely on the fact that the minicache is 2K, and we'll be pushing | ||
39 | * 4K of data through it, so we don't actually have to specifically | ||
40 | * flush the minicache when we change the mapping. | ||
41 | * | ||
42 | * Note also: assert(PAGE_OFFSET <= virt < high_memory). | ||
43 | * Unsafe: preempt, kmap. | ||
44 | */ | ||
45 | unsigned long map_page_minicache(unsigned long virt) | ||
46 | { | ||
47 | set_pte(minicache_pte, pfn_pte(__pa(virt) >> PAGE_SHIFT, minicache_pgprot)); | ||
48 | flush_tlb_kernel_page(minicache_address); | ||
49 | |||
50 | return minicache_address; | ||
51 | } | ||
52 | |||
53 | static int __init minicache_init(void) | ||
54 | { | ||
55 | pgd_t *pgd; | ||
56 | pmd_t *pmd; | ||
57 | |||
58 | spin_lock(&init_mm.page_table_lock); | ||
59 | |||
60 | pgd = pgd_offset_k(minicache_address); | ||
61 | pmd = pmd_alloc(&init_mm, pgd, minicache_address); | ||
62 | if (!pmd) | ||
63 | BUG(); | ||
64 | minicache_pte = pte_alloc_kernel(&init_mm, pmd, minicache_address); | ||
65 | if (!minicache_pte) | ||
66 | BUG(); | ||
67 | |||
68 | spin_unlock(&init_mm.page_table_lock); | ||
69 | |||
70 | return 0; | ||
71 | } | ||
72 | |||
73 | core_initcall(minicache_init); | ||