diff options
author | Vineet Gupta <vgupta@synopsys.com> | 2013-06-15 00:51:51 -0400 |
---|---|---|
committer | Vineet Gupta <vgupta@synopsys.com> | 2013-06-22 04:16:43 -0400 |
commit | 30499186602afa1d62c2e5d354d02214a0ee00b7 (patch) | |
tree | d0e928b54b995702822c70a32b3479625ff30c1f /arch/arc/mm | |
parent | 6546415226f2fc3ab0a820464774e02a1679f90a (diff) |
ARC: cache detection code bitrot
* Number of (i|d)cache ways can be retrieved from BCRs and hence no need
to cross check with with built-in constants
* Use of IS_ENABLED() to check for a Kconfig option
* is_not_cache_aligned() not used anymore
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Diffstat (limited to 'arch/arc/mm')
-rw-r--r-- | arch/arc/mm/cache_arc700.c | 31 |
1 files changed, 10 insertions, 21 deletions
diff --git a/arch/arc/mm/cache_arc700.c b/arch/arc/mm/cache_arc700.c index e9c7a66817ca..0a56682e0c94 100644 --- a/arch/arc/mm/cache_arc700.c +++ b/arch/arc/mm/cache_arc700.c | |||
@@ -144,8 +144,8 @@ void __cpuinit read_decode_cache_bcr(void) | |||
144 | p_ic = &cpuinfo_arc700[cpu].icache; | 144 | p_ic = &cpuinfo_arc700[cpu].icache; |
145 | READ_BCR(ARC_REG_IC_BCR, ibcr); | 145 | READ_BCR(ARC_REG_IC_BCR, ibcr); |
146 | 146 | ||
147 | if (ibcr.config == 0x3) | 147 | BUG_ON(ibcr.config != 3); |
148 | p_ic->assoc = 2; | 148 | p_ic->assoc = 2; /* Fixed to 2w set assoc */ |
149 | p_ic->line_len = 8 << ibcr.line_len; | 149 | p_ic->line_len = 8 << ibcr.line_len; |
150 | p_ic->sz = 0x200 << ibcr.sz; | 150 | p_ic->sz = 0x200 << ibcr.sz; |
151 | p_ic->ver = ibcr.ver; | 151 | p_ic->ver = ibcr.ver; |
@@ -153,8 +153,8 @@ void __cpuinit read_decode_cache_bcr(void) | |||
153 | p_dc = &cpuinfo_arc700[cpu].dcache; | 153 | p_dc = &cpuinfo_arc700[cpu].dcache; |
154 | READ_BCR(ARC_REG_DC_BCR, dbcr); | 154 | READ_BCR(ARC_REG_DC_BCR, dbcr); |
155 | 155 | ||
156 | if (dbcr.config == 0x2) | 156 | BUG_ON(dbcr.config != 2); |
157 | p_dc->assoc = 4; | 157 | p_dc->assoc = 4; /* Fixed to 4w set assoc */ |
158 | p_dc->line_len = 16 << dbcr.line_len; | 158 | p_dc->line_len = 16 << dbcr.line_len; |
159 | p_dc->sz = 0x200 << dbcr.sz; | 159 | p_dc->sz = 0x200 << dbcr.sz; |
160 | p_dc->ver = dbcr.ver; | 160 | p_dc->ver = dbcr.ver; |
@@ -182,20 +182,11 @@ void __cpuinit arc_cache_init(void) | |||
182 | 182 | ||
183 | #ifdef CONFIG_ARC_HAS_ICACHE | 183 | #ifdef CONFIG_ARC_HAS_ICACHE |
184 | /* 1. Confirm some of I-cache params which Linux assumes */ | 184 | /* 1. Confirm some of I-cache params which Linux assumes */ |
185 | if ((ic->assoc != ARC_ICACHE_WAYS) || | 185 | if (ic->line_len != ARC_ICACHE_LINE_LEN) |
186 | (ic->line_len != ARC_ICACHE_LINE_LEN)) { | ||
187 | panic("Cache H/W doesn't match kernel Config"); | 186 | panic("Cache H/W doesn't match kernel Config"); |
188 | } | ||
189 | #if (CONFIG_ARC_MMU_VER > 2) | ||
190 | if (ic->ver != 3) { | ||
191 | if (running_on_hw) | ||
192 | panic("Cache ver doesn't match MMU ver\n"); | ||
193 | 187 | ||
194 | /* For ISS - suggest the toggles to use */ | 188 | if (ic->ver != CONFIG_ARC_MMU_VER) |
195 | pr_err("Use -prop=icache_version=3,-prop=dcache_version=3\n"); | 189 | panic("Cache ver doesn't match MMU ver\n"); |
196 | |||
197 | } | ||
198 | #endif | ||
199 | #endif | 190 | #endif |
200 | 191 | ||
201 | /* Enable/disable I-Cache */ | 192 | /* Enable/disable I-Cache */ |
@@ -214,14 +205,12 @@ chk_dc: | |||
214 | return; | 205 | return; |
215 | 206 | ||
216 | #ifdef CONFIG_ARC_HAS_DCACHE | 207 | #ifdef CONFIG_ARC_HAS_DCACHE |
217 | if ((dc->assoc != ARC_DCACHE_WAYS) || | 208 | if (dc->line_len != ARC_DCACHE_LINE_LEN) |
218 | (dc->line_len != ARC_DCACHE_LINE_LEN)) { | ||
219 | panic("Cache H/W doesn't match kernel Config"); | 209 | panic("Cache H/W doesn't match kernel Config"); |
220 | } | ||
221 | |||
222 | dcache_does_alias = (dc->sz / ARC_DCACHE_WAYS) > PAGE_SIZE; | ||
223 | 210 | ||
224 | /* check for D-Cache aliasing */ | 211 | /* check for D-Cache aliasing */ |
212 | dcache_does_alias = (dc->sz / dc->assoc) > PAGE_SIZE; | ||
213 | |||
225 | if (dcache_does_alias && !cache_is_vipt_aliasing()) | 214 | if (dcache_does_alias && !cache_is_vipt_aliasing()) |
226 | panic("Enable CONFIG_ARC_CACHE_VIPT_ALIASING\n"); | 215 | panic("Enable CONFIG_ARC_CACHE_VIPT_ALIASING\n"); |
227 | else if (!dcache_does_alias && cache_is_vipt_aliasing()) | 216 | else if (!dcache_does_alias && cache_is_vipt_aliasing()) |