diff options
author | Hyok S. Choi <hyok.choi@samsung.com> | 2006-09-26 04:38:05 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2006-09-27 12:39:17 -0400 |
commit | 43f5f0146ef5c3a3421ea53a0708fd37edcb8905 (patch) | |
tree | 9bc8d546aa0d801f28ef882937af929b0f4f22d3 | |
parent | b731c3118d87f26c8bf3f358ffbbc24450af50a6 (diff) |
[ARM] nommu: add ARM9TDMI core support
This patch adds ARM9TDMI core support which has no cache and no CP15
register(no memory control unit).
Signed-off-by: Hyok S. Choi <hyok.choi@samsung.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r-- | arch/arm/Makefile | 1 | ||||
-rw-r--r-- | arch/arm/mm/Kconfig | 13 | ||||
-rw-r--r-- | arch/arm/mm/Makefile | 1 | ||||
-rw-r--r-- | arch/arm/mm/proc-arm9tdmi.S | 134 | ||||
-rw-r--r-- | include/asm-arm/cacheflush.h | 3 | ||||
-rw-r--r-- | include/asm-arm/proc-fns.h | 8 |
6 files changed, 159 insertions, 1 deletions
diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 8ec4b46d2cbb..a29e64175f8f 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile | |||
@@ -58,6 +58,7 @@ tune-$(CONFIG_CPU_ARM710) :=-mtune=arm710 | |||
58 | tune-$(CONFIG_CPU_ARM7TDMI) :=-mtune=arm7tdmi | 58 | tune-$(CONFIG_CPU_ARM7TDMI) :=-mtune=arm7tdmi |
59 | tune-$(CONFIG_CPU_ARM720T) :=-mtune=arm7tdmi | 59 | tune-$(CONFIG_CPU_ARM720T) :=-mtune=arm7tdmi |
60 | tune-$(CONFIG_CPU_ARM740T) :=-mtune=arm7tdmi | 60 | tune-$(CONFIG_CPU_ARM740T) :=-mtune=arm7tdmi |
61 | tune-$(CONFIG_CPU_ARM9TDMI) :=-mtune=arm9tdmi | ||
61 | tune-$(CONFIG_CPU_ARM920T) :=-mtune=arm9tdmi | 62 | tune-$(CONFIG_CPU_ARM920T) :=-mtune=arm9tdmi |
62 | tune-$(CONFIG_CPU_ARM922T) :=-mtune=arm9tdmi | 63 | tune-$(CONFIG_CPU_ARM922T) :=-mtune=arm9tdmi |
63 | tune-$(CONFIG_CPU_ARM925T) :=-mtune=arm9tdmi | 64 | tune-$(CONFIG_CPU_ARM925T) :=-mtune=arm9tdmi |
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig index 87f9fece9606..ed9d32c2469e 100644 --- a/arch/arm/mm/Kconfig +++ b/arch/arm/mm/Kconfig | |||
@@ -90,6 +90,19 @@ config CPU_ARM740T | |||
90 | Say Y if you want support for the ARM740T processor. | 90 | Say Y if you want support for the ARM740T processor. |
91 | Otherwise, say N. | 91 | Otherwise, say N. |
92 | 92 | ||
93 | # ARM9TDMI | ||
94 | config CPU_ARM9TDMI | ||
95 | bool "Support ARM9TDMI processor" | ||
96 | select CPU_32v4T | ||
97 | select CPU_ABRT_EV4T | ||
98 | select CPU_CACHE_V4 | ||
99 | help | ||
100 | A 32-bit RISC microprocessor based on the ARM9 processor core | ||
101 | which has no memory control unit and cache. | ||
102 | |||
103 | Say Y if you want support for the ARM9TDMI processor. | ||
104 | Otherwise, say N. | ||
105 | |||
93 | # ARM920T | 106 | # ARM920T |
94 | config CPU_ARM920T | 107 | config CPU_ARM920T |
95 | bool "Support ARM920T processor" | 108 | bool "Support ARM920T processor" |
diff --git a/arch/arm/mm/Makefile b/arch/arm/mm/Makefile index d10db822d3b8..053957eebe24 100644 --- a/arch/arm/mm/Makefile +++ b/arch/arm/mm/Makefile | |||
@@ -49,6 +49,7 @@ obj-$(CONFIG_CPU_ARM710) += proc-arm6_7.o | |||
49 | obj-$(CONFIG_CPU_ARM7TDMI) += proc-arm7tdmi.o | 49 | obj-$(CONFIG_CPU_ARM7TDMI) += proc-arm7tdmi.o |
50 | obj-$(CONFIG_CPU_ARM720T) += proc-arm720.o | 50 | obj-$(CONFIG_CPU_ARM720T) += proc-arm720.o |
51 | obj-$(CONFIG_CPU_ARM740T) += proc-arm740.o | 51 | obj-$(CONFIG_CPU_ARM740T) += proc-arm740.o |
52 | obj-$(CONFIG_CPU_ARM9TDMI) += proc-arm9tdmi.o | ||
52 | obj-$(CONFIG_CPU_ARM920T) += proc-arm920.o | 53 | obj-$(CONFIG_CPU_ARM920T) += proc-arm920.o |
53 | obj-$(CONFIG_CPU_ARM922T) += proc-arm922.o | 54 | obj-$(CONFIG_CPU_ARM922T) += proc-arm922.o |
54 | obj-$(CONFIG_CPU_ARM925T) += proc-arm925.o | 55 | obj-$(CONFIG_CPU_ARM925T) += proc-arm925.o |
diff --git a/arch/arm/mm/proc-arm9tdmi.S b/arch/arm/mm/proc-arm9tdmi.S new file mode 100644 index 000000000000..95c90f13caa8 --- /dev/null +++ b/arch/arm/mm/proc-arm9tdmi.S | |||
@@ -0,0 +1,134 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/mm/proc-arm9tdmi.S: utility functions for ARM9TDMI | ||
3 | * | ||
4 | * Copyright (C) 2003-2006 Hyok S. Choi <hyok.choi@samsung.com> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | */ | ||
11 | #include <linux/linkage.h> | ||
12 | #include <linux/init.h> | ||
13 | #include <asm/assembler.h> | ||
14 | #include <asm/asm-offsets.h> | ||
15 | #include <asm/pgtable-hwdef.h> | ||
16 | #include <asm/pgtable.h> | ||
17 | #include <asm/procinfo.h> | ||
18 | #include <asm/ptrace.h> | ||
19 | |||
20 | .text | ||
21 | /* | ||
22 | * cpu_arm9tdmi_proc_init() | ||
23 | * cpu_arm9tdmi_do_idle() | ||
24 | * cpu_arm9tdmi_dcache_clean_area() | ||
25 | * cpu_arm9tdmi_switch_mm() | ||
26 | * | ||
27 | * These are not required. | ||
28 | */ | ||
29 | ENTRY(cpu_arm9tdmi_proc_init) | ||
30 | ENTRY(cpu_arm9tdmi_do_idle) | ||
31 | ENTRY(cpu_arm9tdmi_dcache_clean_area) | ||
32 | ENTRY(cpu_arm9tdmi_switch_mm) | ||
33 | mov pc, lr | ||
34 | |||
35 | /* | ||
36 | * cpu_arm9tdmi_proc_fin() | ||
37 | */ | ||
38 | ENTRY(cpu_arm9tdmi_proc_fin) | ||
39 | mov r0, #PSR_F_BIT | PSR_I_BIT | SVC_MODE | ||
40 | msr cpsr_c, r0 | ||
41 | mov pc, lr | ||
42 | |||
43 | /* | ||
44 | * Function: cpu_arm9tdmi_reset(loc) | ||
45 | * Params : loc(r0) address to jump to | ||
46 | * Purpose : Sets up everything for a reset and jump to the location for soft reset. | ||
47 | */ | ||
48 | ENTRY(cpu_arm9tdmi_reset) | ||
49 | mov pc, r0 | ||
50 | |||
51 | __INIT | ||
52 | |||
53 | .type __arm9tdmi_setup, #function | ||
54 | __arm9tdmi_setup: | ||
55 | mov pc, lr | ||
56 | .size __arm9tdmi_setup, . - __arm9tdmi_setup | ||
57 | |||
58 | __INITDATA | ||
59 | |||
60 | /* | ||
61 | * Purpose : Function pointers used to access above functions - all calls | ||
62 | * come through these | ||
63 | */ | ||
64 | .type arm9tdmi_processor_functions, #object | ||
65 | ENTRY(arm9tdmi_processor_functions) | ||
66 | .word v4t_early_abort | ||
67 | .word cpu_arm9tdmi_proc_init | ||
68 | .word cpu_arm9tdmi_proc_fin | ||
69 | .word cpu_arm9tdmi_reset | ||
70 | .word cpu_arm9tdmi_do_idle | ||
71 | .word cpu_arm9tdmi_dcache_clean_area | ||
72 | .word cpu_arm9tdmi_switch_mm | ||
73 | .word 0 @ cpu_*_set_pte | ||
74 | .size arm9tdmi_processor_functions, . - arm9tdmi_processor_functions | ||
75 | |||
76 | .section ".rodata" | ||
77 | |||
78 | .type cpu_arch_name, #object | ||
79 | cpu_arch_name: | ||
80 | .asciz "armv4t" | ||
81 | .size cpu_arch_name, . - cpu_arch_name | ||
82 | |||
83 | .type cpu_elf_name, #object | ||
84 | cpu_elf_name: | ||
85 | .asciz "v4" | ||
86 | .size cpu_elf_name, . - cpu_elf_name | ||
87 | |||
88 | .type cpu_arm9tdmi_name, #object | ||
89 | cpu_arm9tdmi_name: | ||
90 | .asciz "ARM9TDMI" | ||
91 | .size cpu_arm9tdmi_name, . - cpu_arm9tdmi_name | ||
92 | |||
93 | .type cpu_p2001_name, #object | ||
94 | cpu_p2001_name: | ||
95 | .asciz "P2001" | ||
96 | .size cpu_p2001_name, . - cpu_p2001_name | ||
97 | |||
98 | .align | ||
99 | |||
100 | .section ".proc.info.init", #alloc, #execinstr | ||
101 | |||
102 | .type __arm9tdmi_proc_info, #object | ||
103 | __arm9tdmi_proc_info: | ||
104 | .long 0x41009900 | ||
105 | .long 0xfff8ff00 | ||
106 | .long 0 | ||
107 | .long 0 | ||
108 | b __arm9tdmi_setup | ||
109 | .long cpu_arch_name | ||
110 | .long cpu_elf_name | ||
111 | .long HWCAP_SWP | HWCAP_THUMB | HWCAP_26BIT | ||
112 | .long cpu_arm9tdmi_name | ||
113 | .long arm9tdmi_processor_functions | ||
114 | .long 0 | ||
115 | .long 0 | ||
116 | .long v4_cache_fns | ||
117 | .size __arm9tdmi_proc_info, . - __arm9dmi_proc_info | ||
118 | |||
119 | .type __p2001_proc_info, #object | ||
120 | __p2001_proc_info: | ||
121 | .long 0x41029000 | ||
122 | .long 0xffffffff | ||
123 | .long 0 | ||
124 | .long 0 | ||
125 | b __arm9tdmi_setup | ||
126 | .long cpu_arch_name | ||
127 | .long cpu_elf_name | ||
128 | .long HWCAP_SWP | HWCAP_THUMB | HWCAP_26BIT | ||
129 | .long cpu_p2001_name | ||
130 | .long arm9tdmi_processor_functions | ||
131 | .long 0 | ||
132 | .long 0 | ||
133 | .long v4_cache_fns | ||
134 | .size __p2001_proc_info, . - __p2001_proc_info | ||
diff --git a/include/asm-arm/cacheflush.h b/include/asm-arm/cacheflush.h index 24924e64f883..77ff6fe86dbd 100644 --- a/include/asm-arm/cacheflush.h +++ b/include/asm-arm/cacheflush.h | |||
@@ -34,7 +34,8 @@ | |||
34 | # endif | 34 | # endif |
35 | #endif | 35 | #endif |
36 | 36 | ||
37 | #if defined(CONFIG_CPU_ARM720T) || defined(CONFIG_CPU_ARM7TDMI) | 37 | #if defined(CONFIG_CPU_ARM720T) || defined(CONFIG_CPU_ARM7TDMI) || \ |
38 | defined(CONFIG_CPU_ARM9TDMI) | ||
38 | # ifdef _CACHE | 39 | # ifdef _CACHE |
39 | # define MULTI_CACHE 1 | 40 | # define MULTI_CACHE 1 |
40 | # else | 41 | # else |
diff --git a/include/asm-arm/proc-fns.h b/include/asm-arm/proc-fns.h index 17dfc0de9658..7bb9dab310f5 100644 --- a/include/asm-arm/proc-fns.h +++ b/include/asm-arm/proc-fns.h | |||
@@ -65,6 +65,14 @@ | |||
65 | # define CPU_NAME cpu_arm740 | 65 | # define CPU_NAME cpu_arm740 |
66 | # endif | 66 | # endif |
67 | # endif | 67 | # endif |
68 | # ifdef CONFIG_CPU_ARM9TDMI | ||
69 | # ifdef CPU_NAME | ||
70 | # undef MULTI_CPU | ||
71 | # define MULTI_CPU | ||
72 | # else | ||
73 | # define CPU_NAME cpu_arm9tdmi | ||
74 | # endif | ||
75 | # endif | ||
68 | # ifdef CONFIG_CPU_ARM920T | 76 | # ifdef CONFIG_CPU_ARM920T |
69 | # ifdef CPU_NAME | 77 | # ifdef CPU_NAME |
70 | # undef MULTI_CPU | 78 | # undef MULTI_CPU |