Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/mvme68k/mvme68k Make absolutely sure page tables ar...
details: https://anonhg.NetBSD.org/src/rev/91ea448a4581
branches: trunk
changeset: 512871:91ea448a4581
user: scw <scw%NetBSD.org@localhost>
date: Wed Jul 18 17:18:53 2001 +0000
description:
Make absolutely sure page tables are not cacheable on 040/060 cpus.
(Not strictly required for the 040, but mandatory for the 060).
Also revamp cache enable/disable functions for the benefit of
bus_dmamem_map().
diffstat:
sys/arch/mvme68k/mvme68k/pmap.c | 60 ++++++++--------------------------------
1 files changed, 13 insertions(+), 47 deletions(-)
diffs (135 lines):
diff -r 6252a56f1bd9 -r 91ea448a4581 sys/arch/mvme68k/mvme68k/pmap.c
--- a/sys/arch/mvme68k/mvme68k/pmap.c Wed Jul 18 17:13:15 2001 +0000
+++ b/sys/arch/mvme68k/mvme68k/pmap.c Wed Jul 18 17:18:53 2001 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.c,v 1.63 2001/07/07 07:51:39 scw Exp $ */
+/* $NetBSD: pmap.c,v 1.64 2001/07/18 17:18:53 scw Exp $ */
/*-
* Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -146,7 +146,6 @@
#include <machine/cpu.h>
#include <m68k/cacheops.h>
-
#ifdef DEBUG
#define PDB_FOLLOW 0x0001
#define PDB_INIT 0x0002
@@ -2419,7 +2418,11 @@
#ifdef DEBUG
if (dowriteback && dokwriteback)
#endif
- pmap_changebit((paddr_t)pmap->pm_stpa, PG_CI, ~PG_CCB);
+ {
+ if (pmap_changebit((paddr_t)pmap->pm_stpa,
+ PG_CI, ~PG_CCB))
+ DCIS();
+ }
pmap->pm_stfree = protostfree;
}
#endif
@@ -2560,7 +2563,8 @@
pmap == pmap_kernel() ? "Kernel" : "User",
va, ptpa, pte, *pte);
#endif
- pmap_changebit(ptpa, PG_CI, ~PG_CCB);
+ if (pmap_changebit(ptpa, PG_CI, ~PG_CCB))
+ DCIS();
}
#endif
/*
@@ -2619,7 +2623,6 @@
("enter: stab %p refcnt %d\n",
pmap->pm_stab, pmap->pm_sref));
}
-#if 0
/*
* Flush stale TLB info.
*/
@@ -2627,7 +2630,6 @@
TBIAS();
else
TBIAU();
-#endif
pmap->pm_ptpages++;
splx(s);
}
@@ -2688,27 +2690,12 @@
struct pmap *pm;
vaddr_t va;
{
- pt_entry_t *pte;
if (!pmap_ste_v(pm, va))
return;
- pte = pmap_pte(pm, va);
-
- if ( pmap_pte_ci(pte) ) {
-#if defined(M68040) || defined(M68060)
-#if defined(M68020) || defined(M68030)
- if (mmutype == MMU_68040)
-#endif
- {
- paddr_t pa = pmap_pte_pa(pte);
- DCFP(pa);
- ICPP(pa);
- }
-#endif
- *pte &= ~PG_CI;
- TBIS(va);
- }
+ if (pmap_changebit(pmap_pte_pa(pmap_pte(pm, va)), PG_CCB, ~PG_CI))
+ DCIS();
}
void
@@ -2716,27 +2703,12 @@
struct pmap *pm;
vaddr_t va;
{
- pt_entry_t *pte;
if (!pmap_ste_v(pm, va))
return;
- pte = pmap_pte(pm, va);
-
- if ( ! pmap_pte_ci(pte) ) {
-#if defined(M68040) || defined(M68060)
-#if defined(M68020) || defined(M68030)
- if (mmutype == MMU_68040)
-#endif
- {
- paddr_t pa = pmap_pte_pa(pte);
- DCFP(pa);
- ICPP(pa);
- }
-#endif
- *pte |= PG_CI;
- TBIS(va);
- }
+ if (pmap_changebit(pmap_pte_pa(pmap_pte(pm, va)), PG_CI, ~PG_CCB))
+ DCIS();
}
int
@@ -2744,17 +2716,11 @@
struct pmap *pm;
vaddr_t va;
{
- pt_entry_t *pte;
if (!pmap_ste_v(pm, va))
return (0);
- pte = pmap_pte(pm, va);
-
- if (pmap_pte_ci(pte))
- return (0);
- else
- return (1);
+ return ((pmap_pte_ci(pmap_pte(pm, va)) == 0) ? 1 : 0);
}
#ifdef DEBUG
Home |
Main Index |
Thread Index |
Old Index