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