aboutsummaryrefslogtreecommitdiffstats
path: root/arch/metag
diff options
context:
space:
mode:
authorJames Hogan <james.hogan@imgtec.com>2013-03-08 10:27:49 -0500
committerJames Hogan <james.hogan@imgtec.com>2013-03-15 09:21:18 -0400
commit4d8edbfefb630559220939ad5a3bdd8a75190cc3 (patch)
tree1e66e9ee78da18e95c536cc2a772c8c4b67c6a01 /arch/metag
parent9e7129630329d50b8e8c3403bb71c85a7c3cbe35 (diff)
metag: cachepart: take into account small cache bits
The CORE_CONFIG2 register has bits to indicate that the data or code cache is small, i.e. that the size described in the field should be divided by 64. Take this into account in get_icache_size() and get_dcache_size(). Signed-off-by: James Hogan <james.hogan@imgtec.com>
Diffstat (limited to 'arch/metag')
-rw-r--r--arch/metag/kernel/cachepart.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/arch/metag/kernel/cachepart.c b/arch/metag/kernel/cachepart.c
index 3a589dfb966b..c737edb5b2d5 100644
--- a/arch/metag/kernel/cachepart.c
+++ b/arch/metag/kernel/cachepart.c
@@ -24,15 +24,21 @@
24unsigned int get_dcache_size(void) 24unsigned int get_dcache_size(void)
25{ 25{
26 unsigned int config2 = metag_in32(METAC_CORE_CONFIG2); 26 unsigned int config2 = metag_in32(METAC_CORE_CONFIG2);
27 return 0x1000 << ((config2 & METAC_CORECFG2_DCSZ_BITS) 27 unsigned int sz = 0x1000 << ((config2 & METAC_CORECFG2_DCSZ_BITS)
28 >> METAC_CORECFG2_DCSZ_S); 28 >> METAC_CORECFG2_DCSZ_S);
29 if (config2 & METAC_CORECFG2_DCSMALL_BIT)
30 sz >>= 6;
31 return sz;
29} 32}
30 33
31unsigned int get_icache_size(void) 34unsigned int get_icache_size(void)
32{ 35{
33 unsigned int config2 = metag_in32(METAC_CORE_CONFIG2); 36 unsigned int config2 = metag_in32(METAC_CORE_CONFIG2);
34 return 0x1000 << ((config2 & METAC_CORE_C2ICSZ_BITS) 37 unsigned int sz = 0x1000 << ((config2 & METAC_CORE_C2ICSZ_BITS)
35 >> METAC_CORE_C2ICSZ_S); 38 >> METAC_CORE_C2ICSZ_S);
39 if (config2 & METAC_CORECFG2_ICSMALL_BIT)
40 sz >>= 6;
41 return sz;
36} 42}
37 43
38unsigned int get_global_dcache_size(void) 44unsigned int get_global_dcache_size(void)