diff options
author | Hyok S. Choi <hyok.choi@samsung.com> | 2006-09-26 04:36:37 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2006-09-27 12:34:30 -0400 |
commit | f12d0d7c7786af39435ef6ae9defe47fb58f6091 (patch) | |
tree | 03361f2b925754f2acf4f311df2122f844d3d4fe /arch/arm/mm | |
parent | fefdaa06ccdde394be865ed76509be82813e425b (diff) |
[ARM] nommu: manage the CP15 things
All the current CP15 access codes in ARM arch can be categorized and
conditioned by the defines as follows:
Related operation Safe condition
a. any CP15 access !CPU_CP15
b. alignment trap CPU_CP15_MMU
c. D-cache(C-bit) CPU_CP15
d. I-cache CPU_CP15 && !( CPU_ARM610 || CPU_ARM710 ||
CPU_ARM720 || CPU_ARM740 ||
CPU_XSCALE || CPU_XSC3 )
e. alternate vector CPU_CP15 && !CPU_ARM740
f. TTB CPU_CP15_MMU
g. Domain CPU_CP15_MMU
h. FSR/FAR CPU_CP15_MMU
For example, alternate vector is supported if and only if
"CPU_CP15 && !CPU_ARM740" is satisfied.
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')
-rw-r--r-- | arch/arm/mm/Kconfig | 8 | ||||
-rw-r--r-- | arch/arm/mm/cache-v4.S | 10 |
2 files changed, 14 insertions, 4 deletions
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig index c7fb835c148c..0ac11ea84508 100644 --- a/arch/arm/mm/Kconfig +++ b/arch/arm/mm/Kconfig | |||
@@ -445,15 +445,15 @@ config CPU_BIG_ENDIAN | |||
445 | of your chipset/board/processor. | 445 | of your chipset/board/processor. |
446 | 446 | ||
447 | config CPU_ICACHE_DISABLE | 447 | config CPU_ICACHE_DISABLE |
448 | bool "Disable I-Cache" | 448 | bool "Disable I-Cache (I-bit)" |
449 | depends on CPU_ARM920T || CPU_ARM922T || CPU_ARM925T || CPU_ARM926T || CPU_ARM1020 || CPU_V6 | 449 | depends on CPU_CP15 && !(CPU_ARM610 || CPU_ARM710 || CPU_ARM720T || CPU_ARM740T || CPU_XSCALE || CPU_XSC3) |
450 | help | 450 | help |
451 | Say Y here to disable the processor instruction cache. Unless | 451 | Say Y here to disable the processor instruction cache. Unless |
452 | you have a reason not to or are unsure, say N. | 452 | you have a reason not to or are unsure, say N. |
453 | 453 | ||
454 | config CPU_DCACHE_DISABLE | 454 | config CPU_DCACHE_DISABLE |
455 | bool "Disable D-Cache" | 455 | bool "Disable D-Cache (C-bit)" |
456 | depends on CPU_ARM920T || CPU_ARM922T || CPU_ARM925T || CPU_ARM926T || CPU_ARM1020 || CPU_V6 | 456 | depends on CPU_CP15 |
457 | help | 457 | help |
458 | Say Y here to disable the processor data cache. Unless | 458 | Say Y here to disable the processor data cache. Unless |
459 | you have a reason not to or are unsure, say N. | 459 | you have a reason not to or are unsure, say N. |
diff --git a/arch/arm/mm/cache-v4.S b/arch/arm/mm/cache-v4.S index b8ad5d58ebe2..b2908063ed6a 100644 --- a/arch/arm/mm/cache-v4.S +++ b/arch/arm/mm/cache-v4.S | |||
@@ -29,9 +29,13 @@ ENTRY(v4_flush_user_cache_all) | |||
29 | * Clean and invalidate the entire cache. | 29 | * Clean and invalidate the entire cache. |
30 | */ | 30 | */ |
31 | ENTRY(v4_flush_kern_cache_all) | 31 | ENTRY(v4_flush_kern_cache_all) |
32 | #ifdef CPU_CP15 | ||
32 | mov r0, #0 | 33 | mov r0, #0 |
33 | mcr p15, 0, r0, c7, c7, 0 @ flush ID cache | 34 | mcr p15, 0, r0, c7, c7, 0 @ flush ID cache |
34 | mov pc, lr | 35 | mov pc, lr |
36 | #else | ||
37 | /* FALLTHROUGH */ | ||
38 | #endif | ||
35 | 39 | ||
36 | /* | 40 | /* |
37 | * flush_user_cache_range(start, end, flags) | 41 | * flush_user_cache_range(start, end, flags) |
@@ -44,9 +48,13 @@ ENTRY(v4_flush_kern_cache_all) | |||
44 | * - flags - vma_area_struct flags describing address space | 48 | * - flags - vma_area_struct flags describing address space |
45 | */ | 49 | */ |
46 | ENTRY(v4_flush_user_cache_range) | 50 | ENTRY(v4_flush_user_cache_range) |
51 | #ifdef CPU_CP15 | ||
47 | mov ip, #0 | 52 | mov ip, #0 |
48 | mcreq p15, 0, ip, c7, c7, 0 @ flush ID cache | 53 | mcreq p15, 0, ip, c7, c7, 0 @ flush ID cache |
49 | mov pc, lr | 54 | mov pc, lr |
55 | #else | ||
56 | /* FALLTHROUGH */ | ||
57 | #endif | ||
50 | 58 | ||
51 | /* | 59 | /* |
52 | * coherent_kern_range(start, end) | 60 | * coherent_kern_range(start, end) |
@@ -108,8 +116,10 @@ ENTRY(v4_dma_inv_range) | |||
108 | * - end - virtual end address | 116 | * - end - virtual end address |
109 | */ | 117 | */ |
110 | ENTRY(v4_dma_flush_range) | 118 | ENTRY(v4_dma_flush_range) |
119 | #ifdef CPU_CP15 | ||
111 | mov r0, #0 | 120 | mov r0, #0 |
112 | mcr p15, 0, r0, c7, c7, 0 @ flush ID cache | 121 | mcr p15, 0, r0, c7, c7, 0 @ flush ID cache |
122 | #endif | ||
113 | /* FALLTHROUGH */ | 123 | /* FALLTHROUGH */ |
114 | 124 | ||
115 | /* | 125 | /* |