Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 24 Mar 2009 18:10:22 +0000 (UTC)
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r190386 - in head/sys: amd64/pci i386/pci
Message-ID:  <200903241810.n2OIAM9t053162@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200903241810.n2OIAM9t053162>