aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pci')
-rw-r--r--drivers/pci/probe.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index cf57fe79450a..b50386dc72e0 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -156,6 +156,8 @@ static inline unsigned long decode_bar(struct pci_dev *dev, u32 bar)
156 return flags; 156 return flags;
157} 157}
158 158
159#define PCI_COMMAND_DECODE_ENABLE (PCI_COMMAND_MEMORY | PCI_COMMAND_IO)
160
159/** 161/**
160 * pci_read_base - read a PCI BAR 162 * pci_read_base - read a PCI BAR
161 * @dev: the PCI device 163 * @dev: the PCI device
@@ -178,8 +180,10 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
178 /* No printks while decoding is disabled! */ 180 /* No printks while decoding is disabled! */
179 if (!dev->mmio_always_on) { 181 if (!dev->mmio_always_on) {
180 pci_read_config_word(dev, PCI_COMMAND, &orig_cmd); 182 pci_read_config_word(dev, PCI_COMMAND, &orig_cmd);
181 pci_write_config_word(dev, PCI_COMMAND, 183 if (orig_cmd & PCI_COMMAND_DECODE_ENABLE) {
182 orig_cmd & ~(PCI_COMMAND_MEMORY | PCI_COMMAND_IO)); 184 pci_write_config_word(dev, PCI_COMMAND,
185 orig_cmd & ~PCI_COMMAND_DECODE_ENABLE);
186 }
183 } 187 }
184 188
185 res->name = pci_name(dev); 189 res->name = pci_name(dev);
@@ -293,7 +297,8 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
293fail: 297fail:
294 res->flags = 0; 298 res->flags = 0;
295out: 299out:
296 if (!dev->mmio_always_on) 300 if (!dev->mmio_always_on &&
301 (orig_cmd & PCI_COMMAND_DECODE_ENABLE))
297 pci_write_config_word(dev, PCI_COMMAND, orig_cmd); 302 pci_write_config_word(dev, PCI_COMMAND, orig_cmd);
298 303
299 if (bar_too_big) 304 if (bar_too_big)