summaryrefslogtreecommitdiff
path: root/sys/arch/mvme88k
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2003-10-08 13:26:13 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2003-10-08 13:26:13 +0000
commit3f433ec6540d8e98e87668df9241c189e3b3a280 (patch)
tree71ee31a1a7c22ea5d908209df42e254fc62cc8e2 /sys/arch/mvme88k
parenta540b24b08f25df7ee9e28e5f909e4d941f5b502 (diff)
Nivas had identified an 88200 specific bug, where flushes of a page or a
segment would sometimes not work correctly, and he added a brutal workaround leading to non-optimal, but safe, cache handling. The problem affects 88200 rev 7 and 9, and is believed to affect all 88200 revisions (although 88204 seems to be unaffected). Unfortunately, this problem not only affects cache flushes, but also tlb invalidations. So add a similar workaround in cmmu_flush_remote_tlb().
Diffstat (limited to 'sys/arch/mvme88k')
-rw-r--r--sys/arch/mvme88k/mvme88k/m8820x.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/sys/arch/mvme88k/mvme88k/m8820x.c b/sys/arch/mvme88k/mvme88k/m8820x.c
index e77974561b0..57a376f486f 100644
--- a/sys/arch/mvme88k/mvme88k/m8820x.c
+++ b/sys/arch/mvme88k/mvme88k/m8820x.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: m8820x.c,v 1.21 2003/10/05 20:35:26 miod Exp $ */
+/* $OpenBSD: m8820x.c,v 1.22 2003/10/08 13:26:12 miod Exp $ */
/*
* Copyright (c) 2001 Steve Murphree, Jr.
* Copyright (c) 1996 Nivas Madhur
@@ -1079,6 +1079,7 @@ m8820x_cmmu_flush_remote_tlb(unsigned cpu, unsigned kernel, vaddr_t vaddr,
CMMU_LOCK;
+#if !defined(BROKEN_MMU_MASK)
if (size > PAGE_SIZE) {
m8820x_cmmu_set(CMMU_SCR,
kernel ? CMMU_FLUSH_SUPER_ALL : CMMU_FLUSH_USER_ALL,
@@ -1094,6 +1095,12 @@ m8820x_cmmu_flush_remote_tlb(unsigned cpu, unsigned kernel, vaddr_t vaddr,
ADDR_VAL | ACCESS_VAL, cpu, 0,
kernel ? CMMU_ACS_SUPER : CMMU_ACS_USER, vaddr);
}
+#else
+ m8820x_cmmu_set(CMMU_SCR,
+ kernel ? CMMU_FLUSH_SUPER_ALL : CMMU_FLUSH_USER_ALL,
+ ACCESS_VAL, cpu, 0,
+ kernel ? CMMU_ACS_SUPER : CMMU_ACS_USER, 0);
+#endif
CMMU_UNLOCK;
splx(s);