Index: sys/dev/pci/pci.c =================================================================== --- sys/dev/pci/pci.c +++ sys/dev/pci/pci.c @@ -2900,6 +2900,14 @@ { struct pci_devinfo *dinfo; int ln2range; + pci_addr_t map; + uint16_t cmd; + + /* Clear the MEMEN or PORTEN bit */ + map = pm->pm_value; + cmd = pci_read_config(dev, PCIR_COMMAND, 2); + pci_write_config(dev, PCIR_COMMAND, + cmd & ~(PCI_BAR_MEM(map) ? PCIM_CMD_MEMEN : PCIM_CMD_PORTEN), 2); /* The device ROM BAR is always a 32-bit memory BAR. */ dinfo = device_get_ivars(dev); @@ -2914,6 +2922,9 @@ if (ln2range == 64) pm->pm_value |= (pci_addr_t)pci_read_config(dev, pm->pm_reg + 4, 4) << 32; + + /* Restore the original value of PCIR_COMMAND */ + pci_write_config(dev, PCIR_COMMAND, cmd, 2); } struct pci_map *