Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 12 Jun 2015 12:27:10 +0000 (UTC)
From:      Marcel Moolenaar <marcel@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r284315 - head/sys/dev/proto
Message-ID:  <201506121227.t5CCRAGI063792@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: marcel
Date: Fri Jun 12 12:27:10 2015
New Revision: 284315
URL: https://svnweb.freebsd.org/changeset/base/284315

Log:
  We need to handle 64-bit BARs ourselves to avoid that the
  PCI infrastructure instantiates a non-existent resource.
  This has BARs suddenly show up with pciconf(8) under
  VMware as well.  Now that we read the BAR ourselves, ask
  for the correct resource type.

Modified:
  head/sys/dev/proto/proto_bus_pci.c

Modified: head/sys/dev/proto/proto_bus_pci.c
==============================================================================
--- head/sys/dev/proto/proto_bus_pci.c	Fri Jun 12 11:52:32 2015	(r284314)
+++ head/sys/dev/proto/proto_bus_pci.c	Fri Jun 12 12:27:10 2015	(r284315)
@@ -82,6 +82,7 @@ proto_pci_attach(device_t dev)
 {
 	struct proto_softc *sc;
 	struct resource *res;
+	uint32_t val;
 	int bar, rid, type;
 
 	sc = device_get_softc(dev);
@@ -91,15 +92,17 @@ proto_pci_attach(device_t dev)
 
 	for (bar = 0; bar < PCIR_MAX_BAR_0; bar++) {
 		rid = PCIR_BAR(bar);
-		type = SYS_RES_MEMORY;
+		val = pci_read_config(dev, rid, 4);
+		type = (PCI_BAR_IO(val)) ? SYS_RES_IOPORT : SYS_RES_MEMORY;
 		res = bus_alloc_resource_any(dev, type, &rid, RF_ACTIVE);
-		if (res == NULL) {
-			type = SYS_RES_IOPORT;
-			res = bus_alloc_resource_any(dev, type, &rid,
-			    RF_ACTIVE);
-		}
-		if (res != NULL)
-			proto_add_resource(sc, type, rid, res);
+		if (res == NULL)
+			continue;
+		proto_add_resource(sc, type, rid, res);
+		if (type == SYS_RES_IOPORT)
+			continue;
+		/* Skip over adjacent BAR for 64-bit memory BARs. */
+		if ((val & PCIM_BAR_MEM_TYPE) == PCIM_BAR_MEM_64)
+			bar++;
 	}
 
 	rid = 0;



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