Source-Changes-HG archive

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

[src/trunk]: src/sys/dev/pci Fix a bug that PCI bridge's prefetchable memory ...



details:   https://anonhg.NetBSD.org/src/rev/a6b230f1b494
branches:  trunk
changeset: 996343:a6b230f1b494
user:      msaitoh <msaitoh%NetBSD.org@localhost>
date:      Tue Jan 29 05:09:35 2019 +0000

description:
Fix a bug that PCI bridge's prefetchable memory area's configuration
didn't work correctly in pciconf.c::configure_bridge(). Note that this function
is only for "options PCI_NETBSD_CONFIGURE" machines.

diffstat:

 sys/dev/pci/pciconf.c |  10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)

diffs (46 lines):

diff -r bf45449f785f -r a6b230f1b494 sys/dev/pci/pciconf.c
--- a/sys/dev/pci/pciconf.c     Tue Jan 29 04:54:42 2019 +0000
+++ b/sys/dev/pci/pciconf.c     Tue Jan 29 05:09:35 2019 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: pciconf.c,v 1.37 2014/09/05 05:29:16 matt Exp $        */
+/*     $NetBSD: pciconf.c,v 1.38 2019/01/29 05:09:35 msaitoh Exp $     */
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -65,7 +65,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pciconf.c,v 1.37 2014/09/05 05:29:16 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pciconf.c,v 1.38 2019/01/29 05:09:35 msaitoh Exp $");
 
 #include "opt_pci.h"
 
@@ -855,6 +855,7 @@
        pciconf_bus_t   *pb;
        pcireg_t        io, iohigh, mem, cmd;
        int             rv;
+       bool            isprefetchmem64;
 
        pb = pd->ppb;
        /* Configure I/O base & limit*/
@@ -919,8 +920,9 @@
                mem_limit = 0x000000;
        }
        mem = pci_conf_read(pb->pc, pd->tag, PCI_BRIDGE_PREFETCHMEM_REG);
+       isprefetchmem64 = PCI_BRIDGE_PREFETCHMEM_64BITS(mem);
 #if ULONG_MAX > 0xffffffff
-       if (!PCI_BRIDGE_PREFETCHMEM_64BITS(mem) && mem_limit > 0xFFFFFFFFULL) {
+       if (!isprefetchmem64 && mem_limit > 0xFFFFFFFFULL) {
                printf("Bus %d bridge does not support 64-bit PMEM.  ",
                    pb->busno);
                printf("Disabling prefetchable-MEM accesses\n");
@@ -936,7 +938,7 @@
        /*
         * XXX -- 64-bit systems need a lot more than just this...
         */
-       if (PCI_BRIDGE_PREFETCHMEM_64BITS(mem)) {
+       if (isprefetchmem64) {
                mem_base  = (uint64_t) mem_base  >> 32;
                mem_limit = (uint64_t) mem_limit >> 32;
                pci_conf_write(pb->pc, pd->tag, PCI_BRIDGE_PREFETCHBASE32_REG,



Home | Main Index | Thread Index | Old Index