diff options
-rw-r--r-- | Documentation/arm/README | 7 | ||||
-rw-r--r-- | MAINTAINERS | 5 | ||||
-rw-r--r-- | arch/arm/kernel/entry-armv.S | 15 | ||||
-rw-r--r-- | arch/arm/kernel/setup.c | 10 | ||||
-rw-r--r-- | arch/arm/mach-ixp2000/uengine.c | 11 | ||||
-rw-r--r-- | arch/arm/mach-ixp4xx/common-pci.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-pxa/Kconfig | 9 | ||||
-rw-r--r-- | arch/arm/mach-pxa/Makefile | 1 | ||||
-rw-r--r-- | arch/arm/mach-pxa/pm.c | 16 | ||||
-rw-r--r-- | arch/arm/mach-pxa/tosa.c | 162 | ||||
-rw-r--r-- | include/asm-arm/arch-iop3xx/iop331.h | 2 | ||||
-rw-r--r-- | include/asm-arm/arch-pxa/pm.h | 12 | ||||
-rw-r--r-- | include/asm-arm/arch-pxa/tosa.h | 166 | ||||
-rw-r--r-- | include/asm-arm/mmu_context.h | 1 |
14 files changed, 391 insertions, 28 deletions
diff --git a/Documentation/arm/README b/Documentation/arm/README index a6f718e90a86..5ed6f3530b86 100644 --- a/Documentation/arm/README +++ b/Documentation/arm/README | |||
@@ -8,10 +8,9 @@ Compilation of kernel | |||
8 | --------------------- | 8 | --------------------- |
9 | 9 | ||
10 | In order to compile ARM Linux, you will need a compiler capable of | 10 | In order to compile ARM Linux, you will need a compiler capable of |
11 | generating ARM ELF code with GNU extensions. GCC 2.95.1, EGCS | 11 | generating ARM ELF code with GNU extensions. GCC 3.3 is known to be |
12 | 1.1.2, and GCC 3.3 are known to be good compilers. Fortunately, you | 12 | a good compiler. Fortunately, you needn't guess. The kernel will report |
13 | needn't guess. The kernel will report an error if your compiler is | 13 | an error if your compiler is a recognized offender. |
14 | a recognized offender. | ||
15 | 14 | ||
16 | To build ARM Linux natively, you shouldn't have to alter the ARCH = line | 15 | To build ARM Linux natively, you shouldn't have to alter the ARCH = line |
17 | in the top level Makefile. However, if you don't have the ARM Linux ELF | 16 | in the top level Makefile. However, if you don't have the ARM Linux ELF |
diff --git a/MAINTAINERS b/MAINTAINERS index f08a1434b217..d57c491212b1 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -297,6 +297,11 @@ P: Richard Purdie | |||
297 | M: rpurdie@rpsys.net | 297 | M: rpurdie@rpsys.net |
298 | S: Maintained | 298 | S: Maintained |
299 | 299 | ||
300 | ARM/TOSA MACHINE SUPPORT | ||
301 | P: Dirk Opfer | ||
302 | M: dirk@opfer-online.de | ||
303 | S: Maintained | ||
304 | |||
300 | ARM/PLEB SUPPORT | 305 | ARM/PLEB SUPPORT |
301 | P: Peter Chubb | 306 | P: Peter Chubb |
302 | M: pleb@gelato.unsw.edu.au | 307 | M: pleb@gelato.unsw.edu.au |
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index be439cab92c6..a511ec5b11a3 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
@@ -785,7 +785,7 @@ __kuser_helper_end: | |||
785 | * SP points to a minimal amount of processor-private memory, the address | 785 | * SP points to a minimal amount of processor-private memory, the address |
786 | * of which is copied into r0 for the mode specific abort handler. | 786 | * of which is copied into r0 for the mode specific abort handler. |
787 | */ | 787 | */ |
788 | .macro vector_stub, name, correction=0 | 788 | .macro vector_stub, name, mode, correction=0 |
789 | .align 5 | 789 | .align 5 |
790 | 790 | ||
791 | vector_\name: | 791 | vector_\name: |
@@ -805,15 +805,14 @@ vector_\name: | |||
805 | @ Prepare for SVC32 mode. IRQs remain disabled. | 805 | @ Prepare for SVC32 mode. IRQs remain disabled. |
806 | @ | 806 | @ |
807 | mrs r0, cpsr | 807 | mrs r0, cpsr |
808 | bic r0, r0, #MODE_MASK | 808 | eor r0, r0, #(\mode ^ SVC_MODE) |
809 | orr r0, r0, #SVC_MODE | ||
810 | msr spsr_cxsf, r0 | 809 | msr spsr_cxsf, r0 |
811 | 810 | ||
812 | @ | 811 | @ |
813 | @ the branch table must immediately follow this code | 812 | @ the branch table must immediately follow this code |
814 | @ | 813 | @ |
815 | mov r0, sp | ||
816 | and lr, lr, #0x0f | 814 | and lr, lr, #0x0f |
815 | mov r0, sp | ||
817 | ldr lr, [pc, lr, lsl #2] | 816 | ldr lr, [pc, lr, lsl #2] |
818 | movs pc, lr @ branch to handler in SVC mode | 817 | movs pc, lr @ branch to handler in SVC mode |
819 | .endm | 818 | .endm |
@@ -823,7 +822,7 @@ __stubs_start: | |||
823 | /* | 822 | /* |
824 | * Interrupt dispatcher | 823 | * Interrupt dispatcher |
825 | */ | 824 | */ |
826 | vector_stub irq, 4 | 825 | vector_stub irq, IRQ_MODE, 4 |
827 | 826 | ||
828 | .long __irq_usr @ 0 (USR_26 / USR_32) | 827 | .long __irq_usr @ 0 (USR_26 / USR_32) |
829 | .long __irq_invalid @ 1 (FIQ_26 / FIQ_32) | 828 | .long __irq_invalid @ 1 (FIQ_26 / FIQ_32) |
@@ -846,7 +845,7 @@ __stubs_start: | |||
846 | * Data abort dispatcher | 845 | * Data abort dispatcher |
847 | * Enter in ABT mode, spsr = USR CPSR, lr = USR PC | 846 | * Enter in ABT mode, spsr = USR CPSR, lr = USR PC |
848 | */ | 847 | */ |
849 | vector_stub dabt, 8 | 848 | vector_stub dabt, ABT_MODE, 8 |
850 | 849 | ||
851 | .long __dabt_usr @ 0 (USR_26 / USR_32) | 850 | .long __dabt_usr @ 0 (USR_26 / USR_32) |
852 | .long __dabt_invalid @ 1 (FIQ_26 / FIQ_32) | 851 | .long __dabt_invalid @ 1 (FIQ_26 / FIQ_32) |
@@ -869,7 +868,7 @@ __stubs_start: | |||
869 | * Prefetch abort dispatcher | 868 | * Prefetch abort dispatcher |
870 | * Enter in ABT mode, spsr = USR CPSR, lr = USR PC | 869 | * Enter in ABT mode, spsr = USR CPSR, lr = USR PC |
871 | */ | 870 | */ |
872 | vector_stub pabt, 4 | 871 | vector_stub pabt, ABT_MODE, 4 |
873 | 872 | ||
874 | .long __pabt_usr @ 0 (USR_26 / USR_32) | 873 | .long __pabt_usr @ 0 (USR_26 / USR_32) |
875 | .long __pabt_invalid @ 1 (FIQ_26 / FIQ_32) | 874 | .long __pabt_invalid @ 1 (FIQ_26 / FIQ_32) |
@@ -892,7 +891,7 @@ __stubs_start: | |||
892 | * Undef instr entry dispatcher | 891 | * Undef instr entry dispatcher |
893 | * Enter in UND mode, spsr = SVC/USR CPSR, lr = SVC/USR PC | 892 | * Enter in UND mode, spsr = SVC/USR CPSR, lr = SVC/USR PC |
894 | */ | 893 | */ |
895 | vector_stub und | 894 | vector_stub und, UND_MODE |
896 | 895 | ||
897 | .long __und_usr @ 0 (USR_26 / USR_32) | 896 | .long __und_usr @ 0 (USR_26 / USR_32) |
898 | .long __und_invalid @ 1 (FIQ_26 / FIQ_32) | 897 | .long __und_invalid @ 1 (FIQ_26 / FIQ_32) |
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index c9b69771f92e..85774165e9fd 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c | |||
@@ -338,7 +338,8 @@ void cpu_init(void) | |||
338 | BUG(); | 338 | BUG(); |
339 | } | 339 | } |
340 | 340 | ||
341 | dump_cpu_info(cpu); | 341 | if (system_state == SYSTEM_BOOTING) |
342 | dump_cpu_info(cpu); | ||
342 | 343 | ||
343 | /* | 344 | /* |
344 | * setup stacks for re-entrant exception handlers | 345 | * setup stacks for re-entrant exception handlers |
@@ -838,7 +839,12 @@ static int c_show(struct seq_file *m, void *v) | |||
838 | 839 | ||
839 | #if defined(CONFIG_SMP) | 840 | #if defined(CONFIG_SMP) |
840 | for_each_online_cpu(i) { | 841 | for_each_online_cpu(i) { |
841 | seq_printf(m, "Processor\t: %d\n", i); | 842 | /* |
843 | * glibc reads /proc/cpuinfo to determine the number of | ||
844 | * online processors, looking for lines beginning with | ||
845 | * "processor". Give glibc what it expects. | ||
846 | */ | ||
847 | seq_printf(m, "processor\t: %d\n", i); | ||
842 | seq_printf(m, "BogoMIPS\t: %lu.%02lu\n\n", | 848 | seq_printf(m, "BogoMIPS\t: %lu.%02lu\n\n", |
843 | per_cpu(cpu_data, i).loops_per_jiffy / (500000UL/HZ), | 849 | per_cpu(cpu_data, i).loops_per_jiffy / (500000UL/HZ), |
844 | (per_cpu(cpu_data, i).loops_per_jiffy / (5000UL/HZ)) % 100); | 850 | (per_cpu(cpu_data, i).loops_per_jiffy / (5000UL/HZ)) % 100); |
diff --git a/arch/arm/mach-ixp2000/uengine.c b/arch/arm/mach-ixp2000/uengine.c index 43e234349d4a..ec4e007a22ef 100644 --- a/arch/arm/mach-ixp2000/uengine.c +++ b/arch/arm/mach-ixp2000/uengine.c | |||
@@ -91,8 +91,8 @@ EXPORT_SYMBOL(ixp2000_uengine_csr_write); | |||
91 | 91 | ||
92 | void ixp2000_uengine_reset(u32 uengine_mask) | 92 | void ixp2000_uengine_reset(u32 uengine_mask) |
93 | { | 93 | { |
94 | ixp2000_reg_write(IXP2000_RESET1, uengine_mask & ixp2000_uengine_mask); | 94 | ixp2000_reg_wrb(IXP2000_RESET1, uengine_mask & ixp2000_uengine_mask); |
95 | ixp2000_reg_write(IXP2000_RESET1, 0); | 95 | ixp2000_reg_wrb(IXP2000_RESET1, 0); |
96 | } | 96 | } |
97 | EXPORT_SYMBOL(ixp2000_uengine_reset); | 97 | EXPORT_SYMBOL(ixp2000_uengine_reset); |
98 | 98 | ||
@@ -452,21 +452,20 @@ static int __init ixp2000_uengine_init(void) | |||
452 | /* | 452 | /* |
453 | * Reset microengines. | 453 | * Reset microengines. |
454 | */ | 454 | */ |
455 | ixp2000_reg_write(IXP2000_RESET1, ixp2000_uengine_mask); | 455 | ixp2000_uengine_reset(ixp2000_uengine_mask); |
456 | ixp2000_reg_write(IXP2000_RESET1, 0); | ||
457 | 456 | ||
458 | /* | 457 | /* |
459 | * Synchronise timestamp counters across all microengines. | 458 | * Synchronise timestamp counters across all microengines. |
460 | */ | 459 | */ |
461 | value = ixp2000_reg_read(IXP2000_MISC_CONTROL); | 460 | value = ixp2000_reg_read(IXP2000_MISC_CONTROL); |
462 | ixp2000_reg_write(IXP2000_MISC_CONTROL, value & ~0x80); | 461 | ixp2000_reg_wrb(IXP2000_MISC_CONTROL, value & ~0x80); |
463 | for (uengine = 0; uengine < 32; uengine++) { | 462 | for (uengine = 0; uengine < 32; uengine++) { |
464 | if (ixp2000_uengine_mask & (1 << uengine)) { | 463 | if (ixp2000_uengine_mask & (1 << uengine)) { |
465 | ixp2000_uengine_csr_write(uengine, TIMESTAMP_LOW, 0); | 464 | ixp2000_uengine_csr_write(uengine, TIMESTAMP_LOW, 0); |
466 | ixp2000_uengine_csr_write(uengine, TIMESTAMP_HIGH, 0); | 465 | ixp2000_uengine_csr_write(uengine, TIMESTAMP_HIGH, 0); |
467 | } | 466 | } |
468 | } | 467 | } |
469 | ixp2000_reg_write(IXP2000_MISC_CONTROL, value | 0x80); | 468 | ixp2000_reg_wrb(IXP2000_MISC_CONTROL, value | 0x80); |
470 | 469 | ||
471 | return 0; | 470 | return 0; |
472 | } | 471 | } |
diff --git a/arch/arm/mach-ixp4xx/common-pci.c b/arch/arm/mach-ixp4xx/common-pci.c index 2b544363c078..9795da270e3a 100644 --- a/arch/arm/mach-ixp4xx/common-pci.c +++ b/arch/arm/mach-ixp4xx/common-pci.c | |||
@@ -427,7 +427,7 @@ void __init ixp4xx_pci_preinit(void) | |||
427 | #ifdef __ARMEB__ | 427 | #ifdef __ARMEB__ |
428 | *PCI_CSR = PCI_CSR_IC | PCI_CSR_ABE | PCI_CSR_PDS | PCI_CSR_ADS; | 428 | *PCI_CSR = PCI_CSR_IC | PCI_CSR_ABE | PCI_CSR_PDS | PCI_CSR_ADS; |
429 | #else | 429 | #else |
430 | *PCI_CSR = PCI_CSR_IC; | 430 | *PCI_CSR = PCI_CSR_IC | PCI_CSR_ABE; |
431 | #endif | 431 | #endif |
432 | 432 | ||
433 | pr_debug("DONE\n"); | 433 | pr_debug("DONE\n"); |
diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig index 3e5f69bb5ac4..b380a438e68f 100644 --- a/arch/arm/mach-pxa/Kconfig +++ b/arch/arm/mach-pxa/Kconfig | |||
@@ -27,7 +27,8 @@ config PXA_SHARPSL | |||
27 | Say Y here if you intend to run this kernel on a | 27 | Say Y here if you intend to run this kernel on a |
28 | Sharp Zaurus SL-5600 (Poodle), SL-C700 (Corgi), | 28 | Sharp Zaurus SL-5600 (Poodle), SL-C700 (Corgi), |
29 | SL-C750 (Shepherd), SL-C760 (Husky), SL-C1000 (Akita), | 29 | SL-C750 (Shepherd), SL-C760 (Husky), SL-C1000 (Akita), |
30 | SL-C3000 (Spitz) or SL-C3100 (Borzoi) handheld computer. | 30 | SL-C3000 (Spitz), SL-C3100 (Borzoi) or SL-C6000x (Tosa) |
31 | handheld computer. | ||
31 | 32 | ||
32 | endchoice | 33 | endchoice |
33 | 34 | ||
@@ -37,7 +38,7 @@ choice | |||
37 | prompt "Select target Sharp Zaurus device range" | 38 | prompt "Select target Sharp Zaurus device range" |
38 | 39 | ||
39 | config PXA_SHARPSL_25x | 40 | config PXA_SHARPSL_25x |
40 | bool "Sharp PXA25x models (SL-5600 and SL-C7xx)" | 41 | bool "Sharp PXA25x models (SL-5600, SL-C7xx and SL-C6000x)" |
41 | select PXA25x | 42 | select PXA25x |
42 | 43 | ||
43 | config PXA_SHARPSL_27x | 44 | config PXA_SHARPSL_27x |
@@ -80,6 +81,10 @@ config MACH_BORZOI | |||
80 | depends PXA_SHARPSL_27x | 81 | depends PXA_SHARPSL_27x |
81 | select PXA_SHARP_Cxx00 | 82 | select PXA_SHARP_Cxx00 |
82 | 83 | ||
84 | config MACH_TOSA | ||
85 | bool "Enable Sharp SL-6000x (Tosa) Support" | ||
86 | depends PXA_SHARPSL | ||
87 | |||
83 | config PXA25x | 88 | config PXA25x |
84 | bool | 89 | bool |
85 | help | 90 | help |
diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile index f609a0f232cb..8bc72d07cea8 100644 --- a/arch/arm/mach-pxa/Makefile +++ b/arch/arm/mach-pxa/Makefile | |||
@@ -14,6 +14,7 @@ obj-$(CONFIG_ARCH_PXA_IDP) += idp.o | |||
14 | obj-$(CONFIG_PXA_SHARP_C7xx) += corgi.o corgi_ssp.o corgi_lcd.o ssp.o | 14 | obj-$(CONFIG_PXA_SHARP_C7xx) += corgi.o corgi_ssp.o corgi_lcd.o ssp.o |
15 | obj-$(CONFIG_PXA_SHARP_Cxx00) += spitz.o corgi_ssp.o corgi_lcd.o ssp.o | 15 | obj-$(CONFIG_PXA_SHARP_Cxx00) += spitz.o corgi_ssp.o corgi_lcd.o ssp.o |
16 | obj-$(CONFIG_MACH_POODLE) += poodle.o | 16 | obj-$(CONFIG_MACH_POODLE) += poodle.o |
17 | obj-$(CONFIG_MACH_TOSA) += tosa.o | ||
17 | 18 | ||
18 | # Support for blinky lights | 19 | # Support for blinky lights |
19 | led-y := leds.o | 20 | led-y := leds.o |
diff --git a/arch/arm/mach-pxa/pm.c b/arch/arm/mach-pxa/pm.c index ac4dd4336160..f74b9af112dc 100644 --- a/arch/arm/mach-pxa/pm.c +++ b/arch/arm/mach-pxa/pm.c | |||
@@ -12,6 +12,7 @@ | |||
12 | */ | 12 | */ |
13 | #include <linux/config.h> | 13 | #include <linux/config.h> |
14 | #include <linux/init.h> | 14 | #include <linux/init.h> |
15 | #include <linux/module.h> | ||
15 | #include <linux/suspend.h> | 16 | #include <linux/suspend.h> |
16 | #include <linux/errno.h> | 17 | #include <linux/errno.h> |
17 | #include <linux/time.h> | 18 | #include <linux/time.h> |
@@ -19,6 +20,7 @@ | |||
19 | #include <asm/hardware.h> | 20 | #include <asm/hardware.h> |
20 | #include <asm/memory.h> | 21 | #include <asm/memory.h> |
21 | #include <asm/system.h> | 22 | #include <asm/system.h> |
23 | #include <asm/arch/pm.h> | ||
22 | #include <asm/arch/pxa-regs.h> | 24 | #include <asm/arch/pxa-regs.h> |
23 | #include <asm/arch/lubbock.h> | 25 | #include <asm/arch/lubbock.h> |
24 | #include <asm/mach/time.h> | 26 | #include <asm/mach/time.h> |
@@ -72,7 +74,7 @@ enum { SLEEP_SAVE_START = 0, | |||
72 | }; | 74 | }; |
73 | 75 | ||
74 | 76 | ||
75 | static int pxa_pm_enter(suspend_state_t state) | 77 | int pxa_pm_enter(suspend_state_t state) |
76 | { | 78 | { |
77 | unsigned long sleep_save[SLEEP_SAVE_SIZE]; | 79 | unsigned long sleep_save[SLEEP_SAVE_SIZE]; |
78 | unsigned long checksum = 0; | 80 | unsigned long checksum = 0; |
@@ -191,6 +193,8 @@ static int pxa_pm_enter(suspend_state_t state) | |||
191 | return 0; | 193 | return 0; |
192 | } | 194 | } |
193 | 195 | ||
196 | EXPORT_SYMBOL_GPL(pxa_pm_enter); | ||
197 | |||
194 | unsigned long sleep_phys_sp(void *sp) | 198 | unsigned long sleep_phys_sp(void *sp) |
195 | { | 199 | { |
196 | return virt_to_phys(sp); | 200 | return virt_to_phys(sp); |
@@ -199,21 +203,25 @@ unsigned long sleep_phys_sp(void *sp) | |||
199 | /* | 203 | /* |
200 | * Called after processes are frozen, but before we shut down devices. | 204 | * Called after processes are frozen, but before we shut down devices. |
201 | */ | 205 | */ |
202 | static int pxa_pm_prepare(suspend_state_t state) | 206 | int pxa_pm_prepare(suspend_state_t state) |
203 | { | 207 | { |
204 | extern int pxa_cpu_pm_prepare(suspend_state_t state); | 208 | extern int pxa_cpu_pm_prepare(suspend_state_t state); |
205 | 209 | ||
206 | return pxa_cpu_pm_prepare(state); | 210 | return pxa_cpu_pm_prepare(state); |
207 | } | 211 | } |
208 | 212 | ||
213 | EXPORT_SYMBOL_GPL(pxa_pm_prepare); | ||
214 | |||
209 | /* | 215 | /* |
210 | * Called after devices are re-setup, but before processes are thawed. | 216 | * Called after devices are re-setup, but before processes are thawed. |
211 | */ | 217 | */ |
212 | static int pxa_pm_finish(suspend_state_t state) | 218 | int pxa_pm_finish(suspend_state_t state) |
213 | { | 219 | { |
214 | return 0; | 220 | return 0; |
215 | } | 221 | } |
216 | 222 | ||
223 | EXPORT_SYMBOL_GPL(pxa_pm_finish); | ||
224 | |||
217 | /* | 225 | /* |
218 | * Set to PM_DISK_FIRMWARE so we can quickly veto suspend-to-disk. | 226 | * Set to PM_DISK_FIRMWARE so we can quickly veto suspend-to-disk. |
219 | */ | 227 | */ |
@@ -230,4 +238,4 @@ static int __init pxa_pm_init(void) | |||
230 | return 0; | 238 | return 0; |
231 | } | 239 | } |
232 | 240 | ||
233 | late_initcall(pxa_pm_init); | 241 | device_initcall(pxa_pm_init); |
diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c new file mode 100644 index 000000000000..400609f8b6a8 --- /dev/null +++ b/arch/arm/mach-pxa/tosa.c | |||
@@ -0,0 +1,162 @@ | |||
1 | /* | ||
2 | * Support for Sharp SL-C6000x PDAs | ||
3 | * Model: (Tosa) | ||
4 | * | ||
5 | * Copyright (c) 2005 Dirk Opfer | ||
6 | * | ||
7 | * Based on code written by Sharp/Lineo for 2.4 kernels | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License version 2 as | ||
11 | * published by the Free Software Foundation. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #include <linux/kernel.h> | ||
16 | #include <linux/init.h> | ||
17 | #include <linux/device.h> | ||
18 | #include <linux/major.h> | ||
19 | #include <linux/fs.h> | ||
20 | #include <linux/interrupt.h> | ||
21 | #include <linux/mmc/host.h> | ||
22 | |||
23 | #include <asm/setup.h> | ||
24 | #include <asm/memory.h> | ||
25 | #include <asm/mach-types.h> | ||
26 | #include <asm/hardware.h> | ||
27 | #include <asm/irq.h> | ||
28 | #include <asm/arch/irda.h> | ||
29 | #include <asm/arch/mmc.h> | ||
30 | #include <asm/arch/udc.h> | ||
31 | |||
32 | #include <asm/mach/arch.h> | ||
33 | #include <asm/mach/map.h> | ||
34 | #include <asm/mach/irq.h> | ||
35 | |||
36 | #include <asm/arch/pxa-regs.h> | ||
37 | #include <asm/arch/irq.h> | ||
38 | #include <asm/arch/tosa.h> | ||
39 | |||
40 | #include <asm/hardware/scoop.h> | ||
41 | #include <asm/mach/sharpsl_param.h> | ||
42 | |||
43 | #include "generic.h" | ||
44 | |||
45 | |||
46 | /* | ||
47 | * SCOOP Device | ||
48 | */ | ||
49 | static struct resource tosa_scoop_resources[] = { | ||
50 | [0] = { | ||
51 | .start = TOSA_CF_PHYS, | ||
52 | .end = TOSA_CF_PHYS + 0xfff, | ||
53 | .flags = IORESOURCE_MEM, | ||
54 | }, | ||
55 | }; | ||
56 | |||
57 | static struct scoop_config tosa_scoop_setup = { | ||
58 | .io_dir = TOSA_SCOOP_IO_DIR, | ||
59 | .io_out = TOSA_SCOOP_IO_OUT, | ||
60 | |||
61 | }; | ||
62 | |||
63 | struct platform_device tosascoop_device = { | ||
64 | .name = "sharp-scoop", | ||
65 | .id = 0, | ||
66 | .dev = { | ||
67 | .platform_data = &tosa_scoop_setup, | ||
68 | }, | ||
69 | .num_resources = ARRAY_SIZE(tosa_scoop_resources), | ||
70 | .resource = tosa_scoop_resources, | ||
71 | }; | ||
72 | |||
73 | |||
74 | /* | ||
75 | * SCOOP Device Jacket | ||
76 | */ | ||
77 | static struct resource tosa_scoop_jc_resources[] = { | ||
78 | [0] = { | ||
79 | .start = TOSA_SCOOP_PHYS + 0x40, | ||
80 | .end = TOSA_SCOOP_PHYS + 0xfff, | ||
81 | .flags = IORESOURCE_MEM, | ||
82 | }, | ||
83 | }; | ||
84 | |||
85 | static struct scoop_config tosa_scoop_jc_setup = { | ||
86 | .io_dir = TOSA_SCOOP_JC_IO_DIR, | ||
87 | .io_out = TOSA_SCOOP_JC_IO_OUT, | ||
88 | }; | ||
89 | |||
90 | struct platform_device tosascoop_jc_device = { | ||
91 | .name = "sharp-scoop", | ||
92 | .id = 1, | ||
93 | .dev = { | ||
94 | .platform_data = &tosa_scoop_jc_setup, | ||
95 | .parent = &tosascoop_device.dev, | ||
96 | }, | ||
97 | .num_resources = ARRAY_SIZE(tosa_scoop_jc_resources), | ||
98 | .resource = tosa_scoop_jc_resources, | ||
99 | }; | ||
100 | |||
101 | static struct scoop_pcmcia_dev tosa_pcmcia_scoop[] = { | ||
102 | { | ||
103 | .dev = &tosascoop_device.dev, | ||
104 | .irq = TOSA_IRQ_GPIO_CF_IRQ, | ||
105 | .cd_irq = TOSA_IRQ_GPIO_CF_CD, | ||
106 | .cd_irq_str = "PCMCIA0 CD", | ||
107 | },{ | ||
108 | .dev = &tosascoop_jc_device.dev, | ||
109 | .irq = TOSA_IRQ_GPIO_JC_CF_IRQ, | ||
110 | .cd_irq = -1, | ||
111 | }, | ||
112 | }; | ||
113 | |||
114 | |||
115 | static struct platform_device *devices[] __initdata = { | ||
116 | &tosascoop_device, | ||
117 | &tosascoop_jc_device, | ||
118 | }; | ||
119 | |||
120 | static void __init tosa_init(void) | ||
121 | { | ||
122 | pxa_gpio_mode(TOSA_GPIO_ON_RESET | GPIO_IN); | ||
123 | pxa_gpio_mode(TOSA_GPIO_TC6393_INT | GPIO_IN); | ||
124 | |||
125 | /* setup sleep mode values */ | ||
126 | PWER = 0x00000002; | ||
127 | PFER = 0x00000000; | ||
128 | PRER = 0x00000002; | ||
129 | PGSR0 = 0x00000000; | ||
130 | PGSR1 = 0x00FF0002; | ||
131 | PGSR2 = 0x00014000; | ||
132 | PCFR |= PCFR_OPDE; | ||
133 | |||
134 | // enable batt_fault | ||
135 | PMCR = 0x01; | ||
136 | |||
137 | platform_add_devices(devices, ARRAY_SIZE(devices)); | ||
138 | |||
139 | scoop_num = 2; | ||
140 | scoop_devs = &tosa_pcmcia_scoop[0]; | ||
141 | } | ||
142 | |||
143 | static void __init fixup_tosa(struct machine_desc *desc, | ||
144 | struct tag *tags, char **cmdline, struct meminfo *mi) | ||
145 | { | ||
146 | sharpsl_save_param(); | ||
147 | mi->nr_banks=1; | ||
148 | mi->bank[0].start = 0xa0000000; | ||
149 | mi->bank[0].node = 0; | ||
150 | mi->bank[0].size = (64*1024*1024); | ||
151 | } | ||
152 | |||
153 | MACHINE_START(TOSA, "SHARP Tosa") | ||
154 | .phys_ram = 0xa0000000, | ||
155 | .phys_io = 0x40000000, | ||
156 | .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc, | ||
157 | .fixup = fixup_tosa, | ||
158 | .map_io = pxa_map_io, | ||
159 | .init_irq = pxa_init_irq, | ||
160 | .init_machine = tosa_init, | ||
161 | .timer = &pxa_timer, | ||
162 | MACHINE_END | ||
diff --git a/include/asm-arm/arch-iop3xx/iop331.h b/include/asm-arm/arch-iop3xx/iop331.h index 96adffd8bad2..fbf0cc11bdd9 100644 --- a/include/asm-arm/arch-iop3xx/iop331.h +++ b/include/asm-arm/arch-iop3xx/iop331.h | |||
@@ -42,7 +42,7 @@ | |||
42 | 42 | ||
43 | /* this can be 128M if OMWTVR1 is set */ | 43 | /* this can be 128M if OMWTVR1 is set */ |
44 | #define IOP331_PCI_MEM_WINDOW_SIZE 0x04000000 /* 64M outbound window */ | 44 | #define IOP331_PCI_MEM_WINDOW_SIZE 0x04000000 /* 64M outbound window */ |
45 | //#define IOP331_PCI_MEM_WINDOW_SIZE (~*IOP331_IALR1 + 1) | 45 | /* #define IOP331_PCI_MEM_WINDOW_SIZE (~*IOP331_IALR1 + 1) */ |
46 | #define IOP331_PCI_LOWER_MEM_PA 0x80000000 | 46 | #define IOP331_PCI_LOWER_MEM_PA 0x80000000 |
47 | #define IOP331_PCI_LOWER_MEM_BA (*IOP331_OMWTVR0) | 47 | #define IOP331_PCI_LOWER_MEM_BA (*IOP331_OMWTVR0) |
48 | #define IOP331_PCI_UPPER_MEM_PA (IOP331_PCI_LOWER_MEM_PA + IOP331_PCI_MEM_WINDOW_SIZE - 1) | 48 | #define IOP331_PCI_UPPER_MEM_PA (IOP331_PCI_LOWER_MEM_PA + IOP331_PCI_MEM_WINDOW_SIZE - 1) |
diff --git a/include/asm-arm/arch-pxa/pm.h b/include/asm-arm/arch-pxa/pm.h new file mode 100644 index 000000000000..7a8a1cdf430d --- /dev/null +++ b/include/asm-arm/arch-pxa/pm.h | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005 Richard Purdie | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | * | ||
8 | */ | ||
9 | |||
10 | extern int pxa_pm_prepare(suspend_state_t state); | ||
11 | extern int pxa_pm_enter(suspend_state_t state); | ||
12 | extern int pxa_pm_finish(suspend_state_t state); | ||
diff --git a/include/asm-arm/arch-pxa/tosa.h b/include/asm-arm/arch-pxa/tosa.h new file mode 100644 index 000000000000..c3364a2c4758 --- /dev/null +++ b/include/asm-arm/arch-pxa/tosa.h | |||
@@ -0,0 +1,166 @@ | |||
1 | /* | ||
2 | * Hardware specific definitions for Sharp SL-C6000x series of PDAs | ||
3 | * | ||
4 | * Copyright (c) 2005 Dirk Opfer | ||
5 | * | ||
6 | * Based on Sharp's 2.4 kernel patches | ||
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 | #ifndef _ASM_ARCH_TOSA_H_ | ||
14 | #define _ASM_ARCH_TOSA_H_ 1 | ||
15 | |||
16 | /* TOSA Chip selects */ | ||
17 | #define TOSA_LCDC_PHYS PXA_CS4_PHYS | ||
18 | /* Internel Scoop */ | ||
19 | #define TOSA_CF_PHYS (PXA_CS2_PHYS + 0x00800000) | ||
20 | /* Jacket Scoop */ | ||
21 | #define TOSA_SCOOP_PHYS (PXA_CS5_PHYS + 0x00800000) | ||
22 | |||
23 | /* | ||
24 | * SCOOP2 internal GPIOs | ||
25 | */ | ||
26 | #define TOSA_SCOOP_PXA_VCORE1 SCOOP_GPCR_PA11 | ||
27 | #define TOSA_SCOOP_TC6393_REST_IN SCOOP_GPCR_PA12 | ||
28 | #define TOSA_SCOOP_IR_POWERDWN SCOOP_GPCR_PA13 | ||
29 | #define TOSA_SCOOP_SD_WP SCOOP_GPCR_PA14 | ||
30 | #define TOSA_SCOOP_PWR_ON SCOOP_GPCR_PA15 | ||
31 | #define TOSA_SCOOP_AUD_PWR_ON SCOOP_GPCR_PA16 | ||
32 | #define TOSA_SCOOP_BT_RESET SCOOP_GPCR_PA17 | ||
33 | #define TOSA_SCOOP_BT_PWR_EN SCOOP_GPCR_PA18 | ||
34 | #define TOSA_SCOOP_AC_IN_OL SCOOP_GPCR_PA19 | ||
35 | |||
36 | /* GPIO Direction 1 : output mode / 0:input mode */ | ||
37 | #define TOSA_SCOOP_IO_DIR ( TOSA_SCOOP_PXA_VCORE1 | TOSA_SCOOP_TC6393_REST_IN | \ | ||
38 | TOSA_SCOOP_IR_POWERDWN | TOSA_SCOOP_PWR_ON | TOSA_SCOOP_AUD_PWR_ON |\ | ||
39 | TOSA_SCOOP_BT_RESET | TOSA_SCOOP_BT_PWR_EN ) | ||
40 | /* GPIO out put level when init 1: Hi */ | ||
41 | #define TOSA_SCOOP_IO_OUT ( TOSA_SCOOP_TC6393_REST_IN ) | ||
42 | |||
43 | /* | ||
44 | * SCOOP2 jacket GPIOs | ||
45 | */ | ||
46 | #define TOSA_SCOOP_JC_BT_LED SCOOP_GPCR_PA11 | ||
47 | #define TOSA_SCOOP_JC_NOTE_LED SCOOP_GPCR_PA12 | ||
48 | #define TOSA_SCOOP_JC_CHRG_ERR_LED SCOOP_GPCR_PA13 | ||
49 | #define TOSA_SCOOP_JC_USB_PULLUP SCOOP_GPCR_PA14 | ||
50 | #define TOSA_SCOOP_JC_TC6393_SUSPEND SCOOP_GPCR_PA15 | ||
51 | #define TOSA_SCOOP_JC_TC3693_L3V_ON SCOOP_GPCR_PA16 | ||
52 | #define TOSA_SCOOP_JC_WLAN_DETECT SCOOP_GPCR_PA17 | ||
53 | #define TOSA_SCOOP_JC_WLAN_LED SCOOP_GPCR_PA18 | ||
54 | #define TOSA_SCOOP_JC_CARD_LIMIT_SEL SCOOP_GPCR_PA19 | ||
55 | |||
56 | /* GPIO Direction 1 : output mode / 0:input mode */ | ||
57 | #define TOSA_SCOOP_JC_IO_DIR ( TOSA_SCOOP_JC_BT_LED | TOSA_SCOOP_JC_NOTE_LED | \ | ||
58 | TOSA_SCOOP_JC_CHRG_ERR_LED | TOSA_SCOOP_JC_USB_PULLUP | \ | ||
59 | TOSA_SCOOP_JC_TC6393_SUSPEND | TOSA_SCOOP_JC_TC3693_L3V_ON | \ | ||
60 | TOSA_SCOOP_JC_WLAN_LED | TOSA_SCOOP_JC_CARD_LIMIT_SEL ) | ||
61 | /* GPIO out put level when init 1: Hi */ | ||
62 | #define TOSA_SCOOP_JC_IO_OUT ( 0 ) | ||
63 | |||
64 | /* | ||
65 | * Timing Generator | ||
66 | */ | ||
67 | #define TG_PNLCTL 0x00 | ||
68 | #define TG_TPOSCTL 0x01 | ||
69 | #define TG_DUTYCTL 0x02 | ||
70 | #define TG_GPOSR 0x03 | ||
71 | #define TG_GPODR1 0x04 | ||
72 | #define TG_GPODR2 0x05 | ||
73 | #define TG_PINICTL 0x06 | ||
74 | #define TG_HPOSCTL 0x07 | ||
75 | |||
76 | /* | ||
77 | * LED | ||
78 | */ | ||
79 | #define TOSA_SCOOP_LED_BLUE TOSA_SCOOP_GPCR_PA11 | ||
80 | #define TOSA_SCOOP_LED_GREEN TOSA_SCOOP_GPCR_PA12 | ||
81 | #define TOSA_SCOOP_LED_ORANGE TOSA_SCOOP_GPCR_PA13 | ||
82 | #define TOSA_SCOOP_LED_WLAN TOSA_SCOOP_GPCR_PA18 | ||
83 | |||
84 | |||
85 | /* | ||
86 | * PXA GPIOs | ||
87 | */ | ||
88 | #define TOSA_GPIO_POWERON (0) | ||
89 | #define TOSA_GPIO_RESET (1) | ||
90 | #define TOSA_GPIO_AC_IN (2) | ||
91 | #define TOSA_GPIO_RECORD_BTN (3) | ||
92 | #define TOSA_GPIO_SYNC (4) /* Cradle SYNC Button */ | ||
93 | #define TOSA_GPIO_USB_IN (5) | ||
94 | #define TOSA_GPIO_JACKET_DETECT (7) | ||
95 | #define TOSA_GPIO_nSD_DETECT (9) | ||
96 | #define TOSA_GPIO_nSD_INT (10) | ||
97 | #define TOSA_GPIO_TC6393_CLK (11) | ||
98 | #define TOSA_GPIO_BAT1_CRG (12) | ||
99 | #define TOSA_GPIO_CF_CD (13) | ||
100 | #define TOSA_GPIO_BAT0_CRG (14) | ||
101 | #define TOSA_GPIO_TC6393_INT (15) | ||
102 | #define TOSA_GPIO_BAT0_LOW (17) | ||
103 | #define TOSA_GPIO_TC6393_RDY (18) | ||
104 | #define TOSA_GPIO_ON_RESET (19) | ||
105 | #define TOSA_GPIO_EAR_IN (20) | ||
106 | #define TOSA_GPIO_CF_IRQ (21) /* CF slot0 Ready */ | ||
107 | #define TOSA_GPIO_ON_KEY (22) | ||
108 | #define TOSA_GPIO_VGA_LINE (27) | ||
109 | #define TOSA_GPIO_TP_INT (32) /* Touch Panel pen down interrupt */ | ||
110 | #define TOSA_GPIO_JC_CF_IRQ (36) /* CF slot1 Ready */ | ||
111 | #define TOSA_GPIO_BAT_LOCKED (38) /* Battery locked */ | ||
112 | #define TOSA_GPIO_TG_SPI_SCLK (81) | ||
113 | #define TOSA_GPIO_TG_SPI_CS (82) | ||
114 | #define TOSA_GPIO_TG_SPI_MOSI (83) | ||
115 | #define TOSA_GPIO_BAT1_LOW (84) | ||
116 | |||
117 | #define TOSA_GPIO_HP_IN GPIO_EAR_IN | ||
118 | |||
119 | #define TOSA_GPIO_MAIN_BAT_LOW GPIO_BAT0_LOW | ||
120 | |||
121 | #define TOSA_KEY_STROBE_NUM (11) | ||
122 | #define TOSA_KEY_SENSE_NUM (7) | ||
123 | |||
124 | #define TOSA_GPIO_HIGH_STROBE_BIT (0xfc000000) | ||
125 | #define TOSA_GPIO_LOW_STROBE_BIT (0x0000001f) | ||
126 | #define TOSA_GPIO_ALL_SENSE_BIT (0x00000fe0) | ||
127 | #define TOSA_GPIO_ALL_SENSE_RSHIFT (5) | ||
128 | #define TOSA_GPIO_STROBE_BIT(a) GPIO_bit(58+(a)) | ||
129 | #define TOSA_GPIO_SENSE_BIT(a) GPIO_bit(69+(a)) | ||
130 | #define TOSA_GAFR_HIGH_STROBE_BIT (0xfff00000) | ||
131 | #define TOSA_GAFR_LOW_STROBE_BIT (0x000003ff) | ||
132 | #define TOSA_GAFR_ALL_SENSE_BIT (0x00fffc00) | ||
133 | #define TOSA_GPIO_KEY_SENSE(a) (69+(a)) | ||
134 | #define TOSA_GPIO_KEY_STROBE(a) (58+(a)) | ||
135 | |||
136 | /* | ||
137 | * Interrupts | ||
138 | */ | ||
139 | #define TOSA_IRQ_GPIO_WAKEUP IRQ_GPIO(TOSA_GPIO_WAKEUP) | ||
140 | #define TOSA_IRQ_GPIO_AC_IN IRQ_GPIO(TOSA_GPIO_AC_IN) | ||
141 | #define TOSA_IRQ_GPIO_RECORD_BTN IRQ_GPIO(TOSA_GPIO_RECORD_BTN) | ||
142 | #define TOSA_IRQ_GPIO_SYNC IRQ_GPIO(TOSA_GPIO_SYNC) | ||
143 | #define TOSA_IRQ_GPIO_USB_IN IRQ_GPIO(TOSA_GPIO_USB_IN) | ||
144 | #define TOSA_IRQ_GPIO_JACKET_DETECT IRQ_GPIO(TOSA_GPIO_JACKET_DETECT) | ||
145 | #define TOSA_IRQ_GPIO_nSD_INT IRQ_GPIO(TOSA_GPIO_nSD_INT) | ||
146 | #define TOSA_IRQ_GPIO_nSD_DETECT IRQ_GPIO(TOSA_GPIO_nSD_DETECT) | ||
147 | #define TOSA_IRQ_GPIO_BAT1_CRG IRQ_GPIO(TOSA_GPIO_BAT1_CRG) | ||
148 | #define TOSA_IRQ_GPIO_CF_CD IRQ_GPIO(TOSA_GPIO_CF_CD) | ||
149 | #define TOSA_IRQ_GPIO_BAT0_CRG IRQ_GPIO(TOSA_GPIO_BAT0_CRG) | ||
150 | #define TOSA_IRQ_GPIO_TC6393_INT IRQ_GPIO(TOSA_GPIO_TC6393_INT) | ||
151 | #define TOSA_IRQ_GPIO_BAT0_LOW IRQ_GPIO(TOSA_GPIO_BAT0_LOW) | ||
152 | #define TOSA_IRQ_GPIO_EAR_IN IRQ_GPIO(TOSA_GPIO_EAR_IN) | ||
153 | #define TOSA_IRQ_GPIO_CF_IRQ IRQ_GPIO(TOSA_GPIO_CF_IRQ) | ||
154 | #define TOSA_IRQ_GPIO_ON_KEY IRQ_GPIO(TOSA_GPIO_ON_KEY) | ||
155 | #define TOSA_IRQ_GPIO_VGA_LINE IRQ_GPIO(TOSA_GPIO_VGA_LINE) | ||
156 | #define TOSA_IRQ_GPIO_TP_INT IRQ_GPIO(TOSA_GPIO_TP_INT) | ||
157 | #define TOSA_IRQ_GPIO_JC_CF_IRQ IRQ_GPIO(TOSA_GPIO_JC_CF_IRQ) | ||
158 | #define TOSA_IRQ_GPIO_BAT_LOCKED IRQ_GPIO(TOSA_GPIO_BAT_LOCKED) | ||
159 | #define TOSA_IRQ_GPIO_BAT1_LOW IRQ_GPIO(TOSA_GPIO_BAT1_LOW) | ||
160 | #define TOSA_IRQ_GPIO_KEY_SENSE(a) IRQ_GPIO(69+(a)) | ||
161 | |||
162 | #define TOSA_IRQ_GPIO_MAIN_BAT_LOW IRQ_GPIO(TOSA_GPIO_MAIN_BAT_LOW) | ||
163 | |||
164 | extern struct platform_device tosascoop_jc_device; | ||
165 | extern struct platform_device tosascoop_device; | ||
166 | #endif /* _ASM_ARCH_TOSA_H_ */ | ||
diff --git a/include/asm-arm/mmu_context.h b/include/asm-arm/mmu_context.h index 57b8def83d41..3d4b810d8c38 100644 --- a/include/asm-arm/mmu_context.h +++ b/include/asm-arm/mmu_context.h | |||
@@ -13,6 +13,7 @@ | |||
13 | #ifndef __ASM_ARM_MMU_CONTEXT_H | 13 | #ifndef __ASM_ARM_MMU_CONTEXT_H |
14 | #define __ASM_ARM_MMU_CONTEXT_H | 14 | #define __ASM_ARM_MMU_CONTEXT_H |
15 | 15 | ||
16 | #include <asm/cacheflush.h> | ||
16 | #include <asm/proc-fns.h> | 17 | #include <asm/proc-fns.h> |
17 | 18 | ||
18 | #if __LINUX_ARM_ARCH__ >= 6 | 19 | #if __LINUX_ARM_ARCH__ >= 6 |