|
@@ -163,9 +163,16 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
|
|
struct resource *res, unsigned int pos)
|
|
struct resource *res, unsigned int pos)
|
|
{
|
|
{
|
|
u32 l, sz, mask;
|
|
u32 l, sz, mask;
|
|
|
|
+ u16 orig_cmd;
|
|
|
|
|
|
mask = type ? PCI_ROM_ADDRESS_MASK : ~0;
|
|
mask = type ? PCI_ROM_ADDRESS_MASK : ~0;
|
|
|
|
|
|
|
|
+ if (!dev->mmio_always_on) {
|
|
|
|
+ pci_read_config_word(dev, PCI_COMMAND, &orig_cmd);
|
|
|
|
+ pci_write_config_word(dev, PCI_COMMAND,
|
|
|
|
+ orig_cmd & ~(PCI_COMMAND_MEMORY | PCI_COMMAND_IO));
|
|
|
|
+ }
|
|
|
|
+
|
|
res->name = pci_name(dev);
|
|
res->name = pci_name(dev);
|
|
|
|
|
|
pci_read_config_dword(dev, pos, &l);
|
|
pci_read_config_dword(dev, pos, &l);
|
|
@@ -173,6 +180,9 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
|
|
pci_read_config_dword(dev, pos, &sz);
|
|
pci_read_config_dword(dev, pos, &sz);
|
|
pci_write_config_dword(dev, pos, l);
|
|
pci_write_config_dword(dev, pos, l);
|
|
|
|
|
|
|
|
+ if (!dev->mmio_always_on)
|
|
|
|
+ pci_write_config_word(dev, PCI_COMMAND, orig_cmd);
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* All bits set in sz means the device isn't working properly.
|
|
* All bits set in sz means the device isn't working properly.
|
|
* If the BAR isn't implemented, all bits must be 0. If it's a
|
|
* If the BAR isn't implemented, all bits must be 0. If it's a
|