diff options
author | Hyok S. Choi <hyok.choi@samsung.com> | 2006-06-28 09:10:01 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2006-06-28 12:59:56 -0400 |
commit | d090dddaba7c8da6401bb259340dce05ca32f564 (patch) | |
tree | c35d9e22dc09d40144b4a672962269ff60c9ad07 /arch/arm/mm/proc-sa1100.S | |
parent | a4f7e76367f7775ecf534a37b4623c83d9d7ba74 (diff) |
[ARM] nommu: Initial uCLinux support for MMU-based CPUs
In noMMU mode, various of functions which are defined in mm/proc-*.S
is not valid or needed to be avoided. i.g. switch_mm is not needed,
just returns and this makes the I & D caches are valid which shows
great improvement of performance including task switching and IPC.
Signed-off-by: Hyok S. Choi <hyok.choi@samsung.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mm/proc-sa1100.S')
-rw-r--r-- | arch/arm/mm/proc-sa1100.S | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/arch/arm/mm/proc-sa1100.S b/arch/arm/mm/proc-sa1100.S index 777ad99c1439..0a2107ad4c32 100644 --- a/arch/arm/mm/proc-sa1100.S +++ b/arch/arm/mm/proc-sa1100.S | |||
@@ -2,6 +2,7 @@ | |||
2 | * linux/arch/arm/mm/proc-sa1100.S | 2 | * linux/arch/arm/mm/proc-sa1100.S |
3 | * | 3 | * |
4 | * Copyright (C) 1997-2002 Russell King | 4 | * Copyright (C) 1997-2002 Russell King |
5 | * hacked for non-paged-MM by Hyok S. Choi, 2003. | ||
5 | * | 6 | * |
6 | * This program is free software; you can redistribute it and/or modify | 7 | * 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 | * it under the terms of the GNU General Public License version 2 as |
@@ -77,7 +78,9 @@ ENTRY(cpu_sa1100_reset) | |||
77 | mov ip, #0 | 78 | mov ip, #0 |
78 | mcr p15, 0, ip, c7, c7, 0 @ invalidate I,D caches | 79 | mcr p15, 0, ip, c7, c7, 0 @ invalidate I,D caches |
79 | mcr p15, 0, ip, c7, c10, 4 @ drain WB | 80 | mcr p15, 0, ip, c7, c10, 4 @ drain WB |
81 | #ifdef CONFIG_MMU | ||
80 | mcr p15, 0, ip, c8, c7, 0 @ invalidate I & D TLBs | 82 | mcr p15, 0, ip, c8, c7, 0 @ invalidate I & D TLBs |
83 | #endif | ||
81 | mrc p15, 0, ip, c1, c0, 0 @ ctrl register | 84 | mrc p15, 0, ip, c1, c0, 0 @ ctrl register |
82 | bic ip, ip, #0x000f @ ............wcam | 85 | bic ip, ip, #0x000f @ ............wcam |
83 | bic ip, ip, #0x1100 @ ...i...s........ | 86 | bic ip, ip, #0x1100 @ ...i...s........ |
@@ -142,12 +145,16 @@ ENTRY(cpu_sa1100_dcache_clean_area) | |||
142 | */ | 145 | */ |
143 | .align 5 | 146 | .align 5 |
144 | ENTRY(cpu_sa1100_switch_mm) | 147 | ENTRY(cpu_sa1100_switch_mm) |
148 | #ifdef CONFIG_MMU | ||
145 | str lr, [sp, #-4]! | 149 | str lr, [sp, #-4]! |
146 | bl v4wb_flush_kern_cache_all @ clears IP | 150 | bl v4wb_flush_kern_cache_all @ clears IP |
147 | mcr p15, 0, ip, c9, c0, 0 @ invalidate RB | 151 | mcr p15, 0, ip, c9, c0, 0 @ invalidate RB |
148 | mcr p15, 0, r0, c2, c0, 0 @ load page table pointer | 152 | mcr p15, 0, r0, c2, c0, 0 @ load page table pointer |
149 | mcr p15, 0, ip, c8, c7, 0 @ invalidate I & D TLBs | 153 | mcr p15, 0, ip, c8, c7, 0 @ invalidate I & D TLBs |
150 | ldr pc, [sp], #4 | 154 | ldr pc, [sp], #4 |
155 | #else | ||
156 | mov pc, lr | ||
157 | #endif | ||
151 | 158 | ||
152 | /* | 159 | /* |
153 | * cpu_sa1100_set_pte(ptep, pte) | 160 | * cpu_sa1100_set_pte(ptep, pte) |
@@ -156,6 +163,7 @@ ENTRY(cpu_sa1100_switch_mm) | |||
156 | */ | 163 | */ |
157 | .align 5 | 164 | .align 5 |
158 | ENTRY(cpu_sa1100_set_pte) | 165 | ENTRY(cpu_sa1100_set_pte) |
166 | #ifdef CONFIG_MMU | ||
159 | str r1, [r0], #-2048 @ linux version | 167 | str r1, [r0], #-2048 @ linux version |
160 | 168 | ||
161 | eor r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY | 169 | eor r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY |
@@ -177,6 +185,7 @@ ENTRY(cpu_sa1100_set_pte) | |||
177 | mov r0, r0 | 185 | mov r0, r0 |
178 | mcr p15, 0, r0, c7, c10, 1 @ clean D entry | 186 | mcr p15, 0, r0, c7, c10, 1 @ clean D entry |
179 | mcr p15, 0, r0, c7, c10, 4 @ drain WB | 187 | mcr p15, 0, r0, c7, c10, 4 @ drain WB |
188 | #endif | ||
180 | mov pc, lr | 189 | mov pc, lr |
181 | 190 | ||
182 | __INIT | 191 | __INIT |
@@ -186,7 +195,9 @@ __sa1100_setup: | |||
186 | mov r0, #0 | 195 | mov r0, #0 |
187 | mcr p15, 0, r0, c7, c7 @ invalidate I,D caches on v4 | 196 | mcr p15, 0, r0, c7, c7 @ invalidate I,D caches on v4 |
188 | mcr p15, 0, r0, c7, c10, 4 @ drain write buffer on v4 | 197 | mcr p15, 0, r0, c7, c10, 4 @ drain write buffer on v4 |
198 | #ifdef CONFIG_MMU | ||
189 | mcr p15, 0, r0, c8, c7 @ invalidate I,D TLBs on v4 | 199 | mcr p15, 0, r0, c8, c7 @ invalidate I,D TLBs on v4 |
200 | #endif | ||
190 | mrc p15, 0, r0, c1, c0 @ get control register v4 | 201 | mrc p15, 0, r0, c1, c0 @ get control register v4 |
191 | ldr r5, sa1100_cr1_clear | 202 | ldr r5, sa1100_cr1_clear |
192 | bic r0, r0, r5 | 203 | bic r0, r0, r5 |