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-arm1020.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-arm1020.S')
-rw-r--r-- | arch/arm/mm/proc-arm1020.S | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/arch/arm/mm/proc-arm1020.S b/arch/arm/mm/proc-arm1020.S index 959588884fa5..b9abbafca812 100644 --- a/arch/arm/mm/proc-arm1020.S +++ b/arch/arm/mm/proc-arm1020.S | |||
@@ -3,6 +3,7 @@ | |||
3 | * | 3 | * |
4 | * Copyright (C) 2000 ARM Limited | 4 | * Copyright (C) 2000 ARM Limited |
5 | * Copyright (C) 2000 Deep Blue Solutions Ltd. | 5 | * Copyright (C) 2000 Deep Blue Solutions Ltd. |
6 | * hacked for non-paged-MM by Hyok S. Choi, 2003. | ||
6 | * | 7 | * |
7 | * This program is free software; you can redistribute it and/or modify | 8 | * This program is free software; you can redistribute it and/or modify |
8 | * it under the terms of the GNU General Public License as published by | 9 | * it under the terms of the GNU General Public License as published by |
@@ -101,7 +102,9 @@ ENTRY(cpu_arm1020_reset) | |||
101 | mov ip, #0 | 102 | mov ip, #0 |
102 | mcr p15, 0, ip, c7, c7, 0 @ invalidate I,D caches | 103 | mcr p15, 0, ip, c7, c7, 0 @ invalidate I,D caches |
103 | mcr p15, 0, ip, c7, c10, 4 @ drain WB | 104 | mcr p15, 0, ip, c7, c10, 4 @ drain WB |
105 | #ifdef CONFIG_MMU | ||
104 | mcr p15, 0, ip, c8, c7, 0 @ invalidate I & D TLBs | 106 | mcr p15, 0, ip, c8, c7, 0 @ invalidate I & D TLBs |
107 | #endif | ||
105 | mrc p15, 0, ip, c1, c0, 0 @ ctrl register | 108 | mrc p15, 0, ip, c1, c0, 0 @ ctrl register |
106 | bic ip, ip, #0x000f @ ............wcam | 109 | bic ip, ip, #0x000f @ ............wcam |
107 | bic ip, ip, #0x1100 @ ...i...s........ | 110 | bic ip, ip, #0x1100 @ ...i...s........ |
@@ -359,6 +362,7 @@ ENTRY(cpu_arm1020_dcache_clean_area) | |||
359 | */ | 362 | */ |
360 | .align 5 | 363 | .align 5 |
361 | ENTRY(cpu_arm1020_switch_mm) | 364 | ENTRY(cpu_arm1020_switch_mm) |
365 | #ifdef CONFIG_MMU | ||
362 | #ifndef CONFIG_CPU_DCACHE_DISABLE | 366 | #ifndef CONFIG_CPU_DCACHE_DISABLE |
363 | mcr p15, 0, r3, c7, c10, 4 | 367 | mcr p15, 0, r3, c7, c10, 4 |
364 | mov r1, #0xF @ 16 segments | 368 | mov r1, #0xF @ 16 segments |
@@ -383,6 +387,7 @@ ENTRY(cpu_arm1020_switch_mm) | |||
383 | mcr p15, 0, r1, c7, c10, 4 @ drain WB | 387 | mcr p15, 0, r1, c7, c10, 4 @ drain WB |
384 | mcr p15, 0, r0, c2, c0, 0 @ load page table pointer | 388 | mcr p15, 0, r0, c2, c0, 0 @ load page table pointer |
385 | mcr p15, 0, r1, c8, c7, 0 @ invalidate I & D TLBs | 389 | mcr p15, 0, r1, c8, c7, 0 @ invalidate I & D TLBs |
390 | #endif /* CONFIG_MMU */ | ||
386 | mov pc, lr | 391 | mov pc, lr |
387 | 392 | ||
388 | /* | 393 | /* |
@@ -392,6 +397,7 @@ ENTRY(cpu_arm1020_switch_mm) | |||
392 | */ | 397 | */ |
393 | .align 5 | 398 | .align 5 |
394 | ENTRY(cpu_arm1020_set_pte) | 399 | ENTRY(cpu_arm1020_set_pte) |
400 | #ifdef CONFIG_MMU | ||
395 | str r1, [r0], #-2048 @ linux version | 401 | str r1, [r0], #-2048 @ linux version |
396 | 402 | ||
397 | eor r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY | 403 | eor r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY |
@@ -421,6 +427,7 @@ ENTRY(cpu_arm1020_set_pte) | |||
421 | mcr p15, 0, r0, c7, c10, 1 @ clean D entry | 427 | mcr p15, 0, r0, c7, c10, 1 @ clean D entry |
422 | #endif | 428 | #endif |
423 | mcr p15, 0, r0, c7, c10, 4 @ drain WB | 429 | mcr p15, 0, r0, c7, c10, 4 @ drain WB |
430 | #endif /* CONFIG_MMU */ | ||
424 | mov pc, lr | 431 | mov pc, lr |
425 | 432 | ||
426 | __INIT | 433 | __INIT |
@@ -430,7 +437,9 @@ __arm1020_setup: | |||
430 | mov r0, #0 | 437 | mov r0, #0 |
431 | mcr p15, 0, r0, c7, c7 @ invalidate I,D caches on v4 | 438 | mcr p15, 0, r0, c7, c7 @ invalidate I,D caches on v4 |
432 | mcr p15, 0, r0, c7, c10, 4 @ drain write buffer on v4 | 439 | mcr p15, 0, r0, c7, c10, 4 @ drain write buffer on v4 |
440 | #ifdef CONFIG_MMU | ||
433 | mcr p15, 0, r0, c8, c7 @ invalidate I,D TLBs on v4 | 441 | mcr p15, 0, r0, c8, c7 @ invalidate I,D TLBs on v4 |
442 | #endif | ||
434 | mrc p15, 0, r0, c1, c0 @ get control register v4 | 443 | mrc p15, 0, r0, c1, c0 @ get control register v4 |
435 | ldr r5, arm1020_cr1_clear | 444 | ldr r5, arm1020_cr1_clear |
436 | bic r0, r0, r5 | 445 | bic r0, r0, r5 |