summaryrefslogtreecommitdiffstats
path: root/sys/dev/sym
diff options
context:
space:
mode:
authorscottl <scottl@FreeBSD.org>2013-08-12 23:30:01 +0000
committerscottl <scottl@FreeBSD.org>2013-08-12 23:30:01 +0000
commit28bd1409da1e9911c4152b06c5c7b89235e2b17a (patch)
tree34ad11c71aadd28f5ff680b63e3f0fd70956bed5 /sys/dev/sym
parentc8a53736fe9139a202d17ed7f95389d33326cb61 (diff)
downloadFreeBSD-src-28bd1409da1e9911c4152b06c5c7b89235e2b17a.zip
FreeBSD-src-28bd1409da1e9911c4152b06c5c7b89235e2b17a.tar.gz
Update PCI drivers to no longer look at the MEMIO-enabled bit in the PCI
command register. The lazy BAR allocation code in FreeBSD sometimes disables this bit when it detects a range conflict, and will re-enable it on demand when a driver allocates the BAR. Thus, the bit is no longer a reliable indication of capability, and should not be checked. This results in the elimination of a lot of code from drivers, and also gives the opportunity to simplify a lot of drivers to use a helper API to set the busmaster enable bit. This changes fixes some recent reports of disk controllers and their associated drives/enclosures disappearing during boot. Submitted by: jhb Reviewed by: jfv, marius, achadd, achim MFC after: 1 day
Diffstat (limited to 'sys/dev/sym')
-rw-r--r--sys/dev/sym/sym_hipd.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/sys/dev/sym/sym_hipd.c b/sys/dev/sym/sym_hipd.c
index 8dc7361..3ace75b 100644
--- a/sys/dev/sym/sym_hipd.c
+++ b/sys/dev/sym/sym_hipd.c
@@ -8528,11 +8528,9 @@ sym_pci_attach(device_t dev)
/*
* Alloc/get/map/retrieve everything that deals with MMIO.
*/
- if ((command & PCIM_CMD_MEMEN) != 0) {
- int regs_id = SYM_PCI_MMIO;
- np->mmio_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
- &regs_id, RF_ACTIVE);
- }
+ i = SYM_PCI_MMIO;
+ np->mmio_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &i,
+ RF_ACTIVE);
if (!np->mmio_res) {
device_printf(dev, "failed to allocate MMIO resources\n");
goto attach_failed;
@@ -8555,11 +8553,8 @@ sym_pci_attach(device_t dev)
* User want us to use normal IO with PCI.
* Alloc/get/map/retrieve everything that deals with IO.
*/
- if ((command & PCI_COMMAND_IO_ENABLE) != 0) {
- int regs_id = SYM_PCI_IO;
- np->io_res = bus_alloc_resource_any(dev, SYS_RES_IOPORT,
- &regs_id, RF_ACTIVE);
- }
+ i = SYM_PCI_IO;
+ np->io_res = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &i, RF_ACTIVE);
if (!np->io_res) {
device_printf(dev, "failed to allocate IO resources\n");
goto attach_failed;
@@ -8571,8 +8566,7 @@ sym_pci_attach(device_t dev)
* If the chip has RAM.
* Alloc/get/map/retrieve the corresponding resources.
*/
- if ((np->features & (FE_RAM|FE_RAM8K)) &&
- (command & PCIM_CMD_MEMEN) != 0) {
+ if (np->features & (FE_RAM|FE_RAM8K)) {
int regs_id = SYM_PCI_RAM;
if (np->features & FE_64BIT)
regs_id = SYM_PCI_RAM64;
OpenPOWER on IntegriCloud