svn commit: r190386 - in head/sys: amd64/pci i386/pci

John Baldwin jhb at FreeBSD.org
Tue Mar 24 11:10:27 PDT 2009


Author: jhb
Date: Tue Mar 24 18:10:22 2009
New Revision: 190386
URL: http://svn.freebsd.org/changeset/base/190386

Log:
  Fall back to using configuration type 1 accesses for PCI config requests if
  the requested PCI bus falls outside of the bus range given in the ACPI
  MCFG table.  Several BIOSes seem to not include all of the PCI busses in
  systems in their MCFG tables.  It maybe that the BIOS is simply buggy and
  does support all the busses, but it is more conservative to just fall back
  to the old method unless it is certain that memory accesses will work.

Modified:
  head/sys/amd64/pci/pci_cfgreg.c
  head/sys/i386/pci/pci_cfgreg.c

Modified: head/sys/amd64/pci/pci_cfgreg.c
==============================================================================
--- head/sys/amd64/pci/pci_cfgreg.c	Tue Mar 24 18:02:35 2009	(r190385)
+++ head/sys/amd64/pci/pci_cfgreg.c	Tue Mar 24 18:10:22 2009	(r190386)
@@ -119,6 +119,7 @@ pci_docfgregread(int bus, int slot, int 
 {
 
 	if (cfgmech == CFGMECH_PCIE &&
+	    (bus >= pcie_minbus && bus <= pcie_maxbus) &&
 	    (bus != 0 || !(1 << slot & pcie_badslots)))
 		return (pciereg_cfgread(bus, slot, func, reg, bytes));
 	else
@@ -158,6 +159,7 @@ pci_cfgregwrite(int bus, int slot, int f
 {
 
 	if (cfgmech == CFGMECH_PCIE &&
+	    (bus >= pcie_minbus && bus <= pcie_maxbus) &&
 	    (bus != 0 || !(1 << slot & pcie_badslots)))
 		pciereg_cfgwrite(bus, slot, func, reg, data, bytes);
 	else

Modified: head/sys/i386/pci/pci_cfgreg.c
==============================================================================
--- head/sys/i386/pci/pci_cfgreg.c	Tue Mar 24 18:02:35 2009	(r190385)
+++ head/sys/i386/pci/pci_cfgreg.c	Tue Mar 24 18:10:22 2009	(r190386)
@@ -206,6 +206,7 @@ pci_docfgregread(int bus, int slot, int 
 {
 
 	if (cfgmech == CFGMECH_PCIE &&
+	    (bus >= pcie_minbus && bus <= pcie_maxbus) &&
 	    (bus != 0 || !(1 << slot & pcie_badslots)))
 		return (pciereg_cfgread(bus, slot, func, reg, bytes));
 	else
@@ -240,6 +241,7 @@ pci_cfgregwrite(int bus, int slot, int f
 {
 
 	if (cfgmech == CFGMECH_PCIE &&
+	    (bus >= pcie_minbus && bus <= pcie_maxbus) &&
 	    (bus != 0 || !(1 << slot & pcie_badslots)))
 		pciereg_cfgwrite(bus, slot, func, reg, data, bytes);
 	else


More information about the svn-src-head mailing list