Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/alpha Clean up all of the _PMAP_MAY_USE_PROM_CONSOL...



details:   https://anonhg.NetBSD.org/src/rev/5c4a9c7ac55f
branches:  trunk
changeset: 938134:5c4a9c7ac55f
user:      thorpej <thorpej%NetBSD.org@localhost>
date:      Thu Sep 03 02:09:09 2020 +0000

description:
Clean up all of the _PMAP_MAY_USE_PROM_CONSOLE crapola, centralizing the
logic in prom.c, and rename it _PROM_MAY_USE_PROM_CONSOLE in a few places
it's still needed.

diffstat:

 sys/arch/alpha/alpha/locore.s   |   9 +++-
 sys/arch/alpha/alpha/machdep.c  |  56 ++++++------------------------
 sys/arch/alpha/alpha/pmap.c     |  36 +------------------
 sys/arch/alpha/alpha/prom.c     |  74 +++++++++++++++++++++++++++++++---------
 sys/arch/alpha/alpha/promcons.c |  14 +++---
 sys/arch/alpha/include/alpha.h  |   4 +-
 sys/arch/alpha/include/pmap.h   |  14 +-------
 sys/arch/alpha/include/prom.h   |  15 +++++++-
 8 files changed, 103 insertions(+), 119 deletions(-)

diffs (truncated from 572 to 300 lines):

diff -r e002f588f3e3 -r 5c4a9c7ac55f sys/arch/alpha/alpha/locore.s
--- a/sys/arch/alpha/alpha/locore.s     Thu Sep 03 02:05:03 2020 +0000
+++ b/sys/arch/alpha/alpha/locore.s     Thu Sep 03 02:09:09 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.s,v 1.125 2020/06/30 16:20:00 maxv Exp $ */
+/* $NetBSD: locore.s,v 1.126 2020/09/03 02:09:09 thorpej Exp $ */
 
 /*-
  * Copyright (c) 1999, 2000, 2019 The NetBSD Foundation, Inc.
@@ -67,7 +67,7 @@
 
 #include <machine/asm.h>
 
-__KERNEL_RCSID(0, "$NetBSD: locore.s,v 1.125 2020/06/30 16:20:00 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: locore.s,v 1.126 2020/09/03 02:09:09 thorpej Exp $");
 
 #include "assym.h"
 
@@ -126,6 +126,7 @@
  *
  * All arguments are passed to alpha_init().
  */
+IMPORT(prom_mapped, 4)
 NESTED_NOPROFILE(locorestart,1,0,ra,0,0)
        br      pv,1f
 1:     LDGP(pv)
@@ -157,6 +158,10 @@
        ldq     a0, L_MD_PCBPADDR(a0)           /* phys addr of PCB */
        SWITCH_CONTEXT
 
+       /* PROM is no longer mapped. */
+       lda     t0, prom_mapped
+       stl     zero, 0(t0)
+
        /*
         * We've switched to a new page table base, so invalidate the TLB
         * and I-stream.  This happens automatically everywhere but here.
diff -r e002f588f3e3 -r 5c4a9c7ac55f sys/arch/alpha/alpha/machdep.c
--- a/sys/arch/alpha/alpha/machdep.c    Thu Sep 03 02:05:03 2020 +0000
+++ b/sys/arch/alpha/alpha/machdep.c    Thu Sep 03 02:09:09 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.362 2020/09/02 17:40:23 riastradh Exp $ */
+/* $NetBSD: machdep.c,v 1.363 2020/09/03 02:09:09 thorpej Exp $ */
 
 /*-
  * Copyright (c) 1998, 1999, 2000, 2019 The NetBSD Foundation, Inc.
@@ -67,7 +67,7 @@
 
 #include <sys/cdefs.h>                 /* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.362 2020/09/02 17:40:23 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.363 2020/09/03 02:09:09 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -299,7 +299,7 @@
                            uimin(sizeof v1p->booted_kernel,
                              sizeof bootinfo.booted_kernel));
                        /* booted dev not provided in bootinfo */
-                       init_prom_interface((struct rpb *)
+                       init_prom_interface(ptb, (struct rpb *)
                            ALPHA_PHYS_TO_K0SEG(bootinfo.hwrpb_phys));
                        prom_getenv(PROM_E_BOOTED_DEV, bootinfo.booted_dev,
                            sizeof bootinfo.booted_dev);
@@ -316,7 +316,7 @@
                bootinfo.esym = (u_long)_end;
                bootinfo.hwrpb_phys = ((struct rpb *)HWRPB_ADDR)->rpb_phys;
                bootinfo.hwrpb_size = ((struct rpb *)HWRPB_ADDR)->rpb_size;
-               init_prom_interface((struct rpb *)HWRPB_ADDR);
+               init_prom_interface(ptb, (struct rpb *)HWRPB_ADDR);
                prom_getenv(PROM_E_BOOTED_OSFLAGS, bootinfo.boot_flags,
                    sizeof bootinfo.boot_flags);
                prom_getenv(PROM_E_BOOTED_FILE, bootinfo.booted_kernel,
@@ -375,17 +375,10 @@
        uvm_md_init();
 
        /*
-        * Find out what hardware we're on, and do basic initialization.
+        * cputype has been initialized in init_prom_interface().
+        * Perform basic platform initialization using this info.
         */
-       cputype = hwrpb->rpb_type;
-       if (cputype < 0) {
-               /*
-                * At least some white-box systems have SRM which
-                * reports a systype that's the negative of their
-                * blue-box counterpart.
-                */
-               cputype = -cputype;
-       }
+       KASSERT(prom_interface_initialized);
        c = platform_lookup(cputype);
        if (c == NULL) {
                platform_not_supported();
@@ -416,12 +409,7 @@
 #endif
 
        /* NO MORE FIRMWARE ACCESS ALLOWED */
-#ifdef _PMAP_MAY_USE_PROM_CONSOLE
-       /*
-        * XXX (unless _PMAP_MAY_USE_PROM_CONSOLE is defined and
-        * XXX pmap_uses_prom_console() evaluates to non-zero.)
-        */
-#endif
+       /* XXX Unless prom_uses_prom_console() evaluates to non-zero.) */
 
        /*
         * Find the beginning and end of the kernel (and leave a
@@ -507,14 +495,12 @@
                 * software use.  We must determine if this cluster
                 * holds the kernel.
                 */
-#ifdef _PMAP_MAY_USE_PROM_CONSOLE
+
                /*
                 * XXX If the kernel uses the PROM console, we only use the
                 * XXX memory after the kernel in the first system segment,
                 * XXX to avoid clobbering prom mapping, data, etc.
                 */
-           if (!pmap_uses_prom_console() || physmem == 0) {
-#endif /* _PMAP_MAY_USE_PROM_CONSOLE */
                physmem += memc->mddt_pg_cnt;
                pfn0 = memc->mddt_pfn;
                pfn1 = memc->mddt_pfn + memc->mddt_pg_cnt;
@@ -526,10 +512,7 @@
 #if 0
                        printf("Cluster %d contains kernel\n", i);
 #endif
-#ifdef _PMAP_MAY_USE_PROM_CONSOLE
-                   if (!pmap_uses_prom_console()) {
-#endif /* _PMAP_MAY_USE_PROM_CONSOLE */
-                       if (pfn0 < kernstartpfn) {
+                       if (pfn0 < kernstartpfn && !prom_uses_prom_console()) {
                                /*
                                 * There is a chunk before the kernel.
                                 */
@@ -540,9 +523,6 @@
                                uvm_page_physload(pfn0, kernstartpfn,
                                    pfn0, kernstartpfn, VM_FREELIST_DEFAULT);
                        }
-#ifdef _PMAP_MAY_USE_PROM_CONSOLE
-                   }
-#endif /* _PMAP_MAY_USE_PROM_CONSOLE */
                        if (kernendpfn < pfn1) {
                                /*
                                 * There is a chunk after the kernel.
@@ -565,9 +545,6 @@
                        uvm_page_physload(pfn0, pfn1, pfn0, pfn1,
                            VM_FREELIST_DEFAULT);
                }
-#ifdef _PMAP_MAY_USE_PROM_CONSOLE
-           }
-#endif /* _PMAP_MAY_USE_PROM_CONSOLE */
        }
 
        /*
@@ -813,9 +790,9 @@
         * Everything related to console initialization is done
         * in alpha_init().
         */
-#if defined(DIAGNOSTIC) && defined(_PMAP_MAY_USE_PROM_CONSOLE)
+#if defined(DIAGNOSTIC) && defined(_PROM_MAY_USE_PROM_CONSOLE)
        printf("consinit: %susing prom console\n",
-           pmap_uses_prom_console() ? "" : "not ");
+           prom_uses_prom_console() ? "" : "not ");
 #endif
 }
 
@@ -965,15 +942,6 @@
        printf("\n");
        printf("%ld byte page size, %d processor%s.\n",
            hwrpb->rpb_page_size, ncpus, ncpus == 1 ? "" : "s");
-#if 0
-       /* this isn't defined for any systems that we run on? */
-       printf("serial number 0x%lx 0x%lx\n",
-           ((long *)hwrpb->rpb_ssn)[0], ((long *)hwrpb->rpb_ssn)[1]);
-
-       /* and these aren't particularly useful! */
-       printf("variation: 0x%lx, revision 0x%lx\n",
-           hwrpb->rpb_variation, *(long *)hwrpb->rpb_revision);
-#endif
 }
 
 int    waittime = -1;
diff -r e002f588f3e3 -r 5c4a9c7ac55f sys/arch/alpha/alpha/pmap.c
--- a/sys/arch/alpha/alpha/pmap.c       Thu Sep 03 02:05:03 2020 +0000
+++ b/sys/arch/alpha/alpha/pmap.c       Thu Sep 03 02:09:09 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.c,v 1.270 2020/09/03 02:05:03 thorpej Exp $ */
+/* $NetBSD: pmap.c,v 1.271 2020/09/03 02:09:09 thorpej Exp $ */
 
 /*-
  * Copyright (c) 1998, 1999, 2000, 2001, 2007, 2008, 2020
@@ -135,7 +135,7 @@
 
 #include <sys/cdefs.h>                 /* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.270 2020/09/03 02:05:03 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.271 2020/09/03 02:09:09 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -150,7 +150,7 @@
 
 #include <uvm/uvm.h>
 
-#if defined(_PMAP_MAY_USE_PROM_CONSOLE) || defined(MULTIPROCESSOR)
+#if defined(MULTIPROCESSOR)
 #include <machine/rpb.h>
 #endif
 
@@ -1287,27 +1287,6 @@
        kernel_lev1map[l1pte_index(VPTBASE)] = pte;
        VPT = (pt_entry_t *)VPTBASE;
 
-#ifdef _PMAP_MAY_USE_PROM_CONSOLE
-    {
-       extern pt_entry_t prom_pte;                     /* XXX */
-       extern int prom_mapped;                         /* XXX */
-
-       if (pmap_uses_prom_console()) {
-               /*
-                * XXX Save old PTE so we can remap the PROM, if
-                * XXX necessary.
-                */
-               prom_pte = *(pt_entry_t *)ptaddr & ~PG_ASM;
-       }
-       prom_mapped = 0;
-
-       /*
-        * Actually, this code lies.  The prom is still mapped, and will
-        * remain so until the context switch after alpha_init() returns.
-        */
-    }
-#endif
-
        /*
         * Set up level 2 page table.
         */
@@ -1392,15 +1371,6 @@
        pmap_init_cpu(ci);
 }
 
-#ifdef _PMAP_MAY_USE_PROM_CONSOLE
-int
-pmap_uses_prom_console(void)
-{
-
-       return (cputype == ST_DEC_21000);
-}
-#endif /* _PMAP_MAY_USE_PROM_CONSOLE */
-
 /*
  * pmap_virtual_space:         [ INTERFACE ]
  *
diff -r e002f588f3e3 -r 5c4a9c7ac55f sys/arch/alpha/alpha/prom.c
--- a/sys/arch/alpha/alpha/prom.c       Thu Sep 03 02:05:03 2020 +0000
+++ b/sys/arch/alpha/alpha/prom.c       Thu Sep 03 02:09:09 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: prom.c,v 1.53 2020/08/30 16:26:56 thorpej Exp $ */
+/* $NetBSD: prom.c,v 1.54 2020/09/03 02:09:09 thorpej Exp $ */
 
 /*
  * Copyright (c) 1992, 1994, 1995, 1996 Carnegie Mellon University
@@ -27,7 +27,7 @@
 
 #include <sys/cdefs.h>                 /* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: prom.c,v 1.53 2020/08/30 16:26:56 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: prom.c,v 1.54 2020/09/03 02:09:09 thorpej Exp $");
 
 #include "opt_multiprocessor.h"
 
@@ -54,17 +54,18 @@
        .cn_pri = 1
 };
 
-struct rpb     *hwrpb;
+struct rpb     *hwrpb __read_mostly;
 int            alpha_console;
 
 extern struct prom_vec prom_dispatch_v;
 
-static int     prom_is_qemu;           /* XXX */
+bool           prom_interface_initialized;
+int            prom_mapped = 1;        /* Is PROM still mapped? */
+static bool    prom_is_qemu;           /* XXX */
 
 static kmutex_t        prom_lock;
 
-#ifdef _PMAP_MAY_USE_PROM_CONSOLE
-int            prom_mapped = 1;        /* Is PROM still mapped? */
+#ifdef _PROM_MAY_USE_PROM_CONSOLE
 
 pt_entry_t     prom_pte, saved_pte[1]; /* XXX */
 
@@ -80,7 +81,31 @@
 
        return ((pt_entry_t *)ALPHA_PHYS_TO_K0SEG(apcb->apcb_ptbr << PGSHIFT));
 }



Home | Main Index | Thread Index | Old Index