summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorbrooks <brooks@FreeBSD.org>2014-01-29 22:01:42 +0000
committerbrooks <brooks@FreeBSD.org>2014-01-29 22:01:42 +0000
commitf3a850110aaff00dc60263ac71eac8e4f136df13 (patch)
tree47f0b79587a7a46bd868711dd80f185625f8b63b /sys
parenta98111a09d5c21f9bb9ee942f66c68546661a99c (diff)
downloadFreeBSD-src-f3a850110aaff00dc60263ac71eac8e4f136df13.zip
FreeBSD-src-f3a850110aaff00dc60263ac71eac8e4f136df13.tar.gz
MFC r256937:
MFP4: Change 231031 by brooks@brooks_zenith on 2013/07/11 16:22:08 Turn the unused and uncompilable MIPS_DISABLE_L1_CACHE define in cache.c into an option and when set force I- and D-cache line sizes to 0 (the latter part might be better as a tunable). Fix some casts in an #if 0'd bit of code which attempts to disable L1 cache ops when the cache is coherent. Sponsored by: DARPA/AFRL
Diffstat (limited to 'sys')
-rw-r--r--sys/conf/options.mips5
-rw-r--r--sys/mips/mips/cache.c52
-rw-r--r--sys/mips/mips/cpu.c8
3 files changed, 34 insertions, 31 deletions
diff --git a/sys/conf/options.mips b/sys/conf/options.mips
index 93e9a73..911e74b 100644
--- a/sys/conf/options.mips
+++ b/sys/conf/options.mips
@@ -71,6 +71,11 @@ TICK_USE_MALTA_RTC opt_global.h
MAXMEM opt_global.h
#
+# Manual override of cache config
+#
+MIPS_DISABLE_L1_CACHE opt_global.h
+
+#
# Options that control the Cavium Simple Executive.
#
OCTEON_MODEL opt_cvmx.h
diff --git a/sys/mips/mips/cache.c b/sys/mips/mips/cache.c
index 9423179..1a1d374 100644
--- a/sys/mips/mips/cache.c
+++ b/sys/mips/mips/cache.c
@@ -116,11 +116,9 @@ mips_config_cache(struct mips_cpuinfo * cpuinfo)
#ifdef MIPS_DISABLE_L1_CACHE
case 0:
- mips_cache_ops.mco_icache_sync_all = cache_noop;
- mips_cache_ops.mco_icache_sync_range =
- (void (*)(vaddr_t, vsize_t))cache_noop;
- mips_cache_ops.mco_icache_sync_range_index =
- (void (*)(vaddr_t, vsize_t))cache_noop;
+ mips_cache_ops.mco_icache_sync_all = (void (*)(void))cache_noop;
+ mips_cache_ops.mco_icache_sync_range = cache_noop;
+ mips_cache_ops.mco_icache_sync_range_index = cache_noop;
break;
#endif
default:
@@ -193,20 +191,16 @@ mips_config_cache(struct mips_cpuinfo * cpuinfo)
#endif
#ifdef MIPS_DISABLE_L1_CACHE
case 0:
- mips_cache_ops.mco_pdcache_wbinv_all = cache_noop;
- mips_cache_ops.mco_intern_pdcache_wbinv_all = cache_noop;
- mips_cache_ops.mco_pdcache_wbinv_range =
- (void (*)(vaddr_t, vsize_t))cache_noop;
- mips_cache_ops.mco_pdcache_wbinv_range_index =
- (void (*)(vaddr_t, vsize_t))cache_noop;
+ mips_cache_ops.mco_pdcache_wbinv_all =
+ mips_cache_ops.mco_intern_pdcache_wbinv_all =
+ (void (*)(void))cache_noop;
+ mips_cache_ops.mco_pdcache_wbinv_range = cache_noop;
+ mips_cache_ops.mco_pdcache_wbinv_range_index = cache_noop;
mips_cache_ops.mco_intern_pdcache_wbinv_range_index =
- (void (*)(vaddr_t, vsize_t))cache_noop;
- mips_cache_ops.mco_pdcache_inv_range =
- (void (*)(vaddr_t, vsize_t))cache_noop;
- mips_cache_ops.mco_pdcache_wb_range =
- (void (*)(vaddr_t, vsize_t))cache_noop;
- mips_cache_ops.mco_intern_pdcache_wb_range =
- (void (*)(vaddr_t, vsize_t))cache_noop;
+ cache_noop;
+ mips_cache_ops.mco_pdcache_inv_range = cache_noop;
+ mips_cache_ops.mco_pdcache_wb_range = cache_noop;
+ mips_cache_ops.mco_intern_pdcache_wb_range = cache_noop;
break;
#endif
default:
@@ -222,26 +216,22 @@ mips_config_cache(struct mips_cpuinfo * cpuinfo)
#ifdef CACHE_DEBUG
printf(" Dcache is coherent\n");
#endif
- mips_cache_ops.mco_pdcache_wbinv_all = cache_noop;
- mips_cache_ops.mco_pdcache_wbinv_range =
- (void (*)(vaddr_t, vsize_t))cache_noop;
- mips_cache_ops.mco_pdcache_wbinv_range_index =
- (void (*)(vaddr_t, vsize_t))cache_noop;
- mips_cache_ops.mco_pdcache_inv_range =
- (void (*)(vaddr_t, vsize_t))cache_noop;
- mips_cache_ops.mco_pdcache_wb_range =
- (void (*)(vaddr_t, vsize_t))cache_noop;
+ mips_cache_ops.mco_pdcache_wbinv_all =
+ (void (*)(void))cache_noop;
+ mips_cache_ops.mco_pdcache_wbinv_range = cache_noop;
+ mips_cache_ops.mco_pdcache_wbinv_range_index = cache_noop;
+ mips_cache_ops.mco_pdcache_inv_range = cache_noop;
+ mips_cache_ops.mco_pdcache_wb_range = cache_noop;
}
if (mips_cpu_flags & CPU_MIPS_I_D_CACHE_COHERENT) {
#ifdef CACHE_DEBUG
printf(" Icache is coherent against Dcache\n");
#endif
mips_cache_ops.mco_intern_pdcache_wbinv_all =
- cache_noop;
+ (void (*)(void))cache_noop;
mips_cache_ops.mco_intern_pdcache_wbinv_range_index =
- (void (*)(vaddr_t, vsize_t))cache_noop;
- mips_cache_ops.mco_intern_pdcache_wb_range =
- (void (*)(vaddr_t, vsize_t))cache_noop;
+ cache_noop;
+ mips_cache_ops.mco_intern_pdcache_wb_range = cache_noop;
}
#endif
diff --git a/sys/mips/mips/cpu.c b/sys/mips/mips/cpu.c
index b5d5271..c31cd5b 100644
--- a/sys/mips/mips/cpu.c
+++ b/sys/mips/mips/cpu.c
@@ -128,6 +128,9 @@ mips_get_identity(struct mips_cpuinfo *cpuinfo)
#endif
/* L1 instruction cache. */
+#ifdef MIPS_DISABLE_L1_CACHE
+ cpuinfo->l1.ic_linesize = 0;
+#else
tmp = (cfg1 & MIPS_CONFIG1_IL_MASK) >> MIPS_CONFIG1_IL_SHIFT;
if (tmp != 0) {
cpuinfo->l1.ic_linesize = 1 << (tmp + 1);
@@ -135,8 +138,12 @@ mips_get_identity(struct mips_cpuinfo *cpuinfo)
cpuinfo->l1.ic_nsets =
1 << (((cfg1 & MIPS_CONFIG1_IS_MASK) >> MIPS_CONFIG1_IS_SHIFT) + 6);
}
+#endif
/* L1 data cache. */
+#ifdef MIPS_DISABLE_L1_CACHE
+ cpuinfo->l1.dc_linesize = 0;
+#else
#ifndef CPU_CNMIPS
tmp = (cfg1 & MIPS_CONFIG1_DL_MASK) >> MIPS_CONFIG1_DL_SHIFT;
if (tmp != 0) {
@@ -173,6 +180,7 @@ mips_get_identity(struct mips_cpuinfo *cpuinfo)
/* All Octeon models use 128 byte line size. */
cpuinfo->l1.dc_linesize = 128;
#endif
+#endif
cpuinfo->l1.ic_size = cpuinfo->l1.ic_linesize
* cpuinfo->l1.ic_nsets * cpuinfo->l1.ic_nways;
OpenPOWER on IntegriCloud