summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorPaul Burton <paul.burton@mips.com>2017-06-02 15:17:25 -0700
committerPaul Burton <paul.burton@mips.com>2018-06-24 09:27:27 -0700
commitd1c5872ce1042d10d44e54b6e8e8f5b7c2e76541 (patch)
treee1063f11a9919d4b9b047cbd07aba424dc09d4b1 /arch
parent8fd2d6ea66272f849943269c7ea771ce85fd8fb1 (diff)
downloadlinux-d1c5872ce1042d10d44e54b6e8e8f5b7c2e76541.tar.gz
linux-d1c5872ce1042d10d44e54b6e8e8f5b7c2e76541.tar.bz2
linux-d1c5872ce1042d10d44e54b6e8e8f5b7c2e76541.zip
MIPS: Set MIPS_IC_SNOOPS_REMOTE for systems with CM
In systems that include a MIPS Coherency Manager, the icache always fills from a cache which is coherent across all CPUs. In I6400 & I6500 systems the icache fills from the dcache which is coherent across all CPUs. In all other CM-based systems the icache fills from the L2 cache which is shared between all cores. This means that an icache will always see stores from remote CPUs without needing to write them back any further than that L2, which is what the cpu_icache_snoops_remote_store feature is used to test. In order for it to return 1 without needing a per-platform override (which is what Malta has relied upon so far) set the MIPS_IC_SNOOPS_REMOTE flag when a CM is present. Signed-off-by: Paul Burton <paul.burton@mips.com> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/16200/
Diffstat (limited to 'arch')
-rw-r--r--arch/mips/mm/c-r4k.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c
index b83ecfb2fbfc..1b4b583fab08 100644
--- a/arch/mips/mm/c-r4k.c
+++ b/arch/mips/mm/c-r4k.c
@@ -1505,6 +1505,14 @@ static void probe_pcache(void)
if (c->dcache.flags & MIPS_CACHE_PINDEX)
c->dcache.flags &= ~MIPS_CACHE_ALIASES;
+ /*
+ * In systems with CM the icache fills from L2 or closer caches, and
+ * thus sees remote stores without needing to write them back any
+ * further than that.
+ */
+ if (mips_cm_present())
+ c->icache.flags |= MIPS_IC_SNOOPS_REMOTE;
+
switch (current_cpu_type()) {
case CPU_20KC:
/*