Module Name: src
Committed By: msaitoh
Date: Tue Jan 29 05:09:35 UTC 2019
Modified Files:
src/sys/dev/pci: pciconf.c
Log Message:
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.
To generate a diff of this commit:
cvs rdiff -u -r1.37 -r1.38 src/sys/dev/pci/pciconf.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/pci/pciconf.c
diff -u src/sys/dev/pci/pciconf.c:1.37 src/sys/dev/pci/pciconf.c:1.38
--- src/sys/dev/pci/pciconf.c:1.37 Fri Sep 5 05:29:16 2014
+++ src/sys/dev/pci/pciconf.c Tue Jan 29 05:09:35 2019
@@ -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 @@ configure_bridge(pciconf_dev_t *pd)
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 @@ configure_bridge(pciconf_dev_t *pd)
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 @@ configure_bridge(pciconf_dev_t *pd)
/*
* 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,