diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2003-10-08 13:26:13 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2003-10-08 13:26:13 +0000 |
commit | 3f433ec6540d8e98e87668df9241c189e3b3a280 (patch) | |
tree | 71ee31a1a7c22ea5d908209df42e254fc62cc8e2 /sys/arch/mvme88k | |
parent | a540b24b08f25df7ee9e28e5f909e4d941f5b502 (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.c | 9 |
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); |