PCI: revert broken device warning
This reverts c519a5a7da
. That change added a warning about devices that
didn't respond correctly when sizing BARs, which helped diagnose broken
devices. But the test wasn't specific enough, so it also complained about
working devices with zero-size BARs, e.g.,
https://bugzilla.kernel.org/show_bug.cgi?id=15822
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:
parent
4352aa5bbf
commit
45aa23b4cb
|
@ -174,19 +174,14 @@ 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 (!sz)
|
|
||||||
goto fail; /* BAR not implemented */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 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 it's a memory BAR or a ROM, bit 0 must be clear; if it's
|
* If the BAR isn't implemented, all bits must be 0. If it's a
|
||||||
* an io BAR, bit 1 must be clear.
|
* memory BAR or a ROM, bit 0 must be clear; if it's an io BAR, bit
|
||||||
|
* 1 must be clear.
|
||||||
*/
|
*/
|
||||||
if (sz == 0xffffffff) {
|
if (!sz || sz == 0xffffffff)
|
||||||
dev_err(&dev->dev, "reg %x: invalid size %#x; broken device?\n",
|
|
||||||
pos, sz);
|
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* I don't know how l can have all bits set. Copied from old code.
|
* I don't know how l can have all bits set. Copied from old code.
|
||||||
|
@ -249,17 +244,13 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
|
||||||
pos, res);
|
pos, res);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
u32 size = pci_size(l, sz, mask);
|
sz = pci_size(l, sz, mask);
|
||||||
|
|
||||||
if (!size) {
|
if (!sz)
|
||||||
dev_err(&dev->dev, "reg %x: invalid size "
|
|
||||||
"(l %#x sz %#x mask %#x); broken device?",
|
|
||||||
pos, l, sz, mask);
|
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
|
||||||
|
|
||||||
res->start = l;
|
res->start = l;
|
||||||
res->end = l + size;
|
res->end = l + sz;
|
||||||
|
|
||||||
dev_printk(KERN_DEBUG, &dev->dev, "reg %x: %pR\n", pos, res);
|
dev_printk(KERN_DEBUG, &dev->dev, "reg %x: %pR\n", pos, res);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue