Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 45aa23b4 authored by Bjorn Helgaas's avatar Bjorn Helgaas Committed by Jesse Barnes
Browse files

PCI: revert broken device warning

This reverts c519a5a7.  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: default avatarBjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
parent 4352aa5b
Loading
Loading
Loading
Loading
+7 −16
Original line number Diff line number Diff line
@@ -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_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.
	 * If it's a memory BAR or a ROM, bit 0 must be clear; if it's
	 * an io BAR, bit 1 must be clear.
	 * If the BAR isn't implemented, all bits must be 0.  If it's a
	 * memory BAR or a ROM, bit 0 must be clear; if it's an io BAR, bit
	 * 1 must be clear.
	 */
	if (sz == 0xffffffff) {
		dev_err(&dev->dev, "reg %x: invalid size %#x; broken device?\n",
			pos, sz);
	if (!sz || sz == 0xffffffff)
		goto fail;
	}

	/*
	 * 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);
		}
	} else {
		u32 size = pci_size(l, sz, mask);
		sz = pci_size(l, sz, mask);

		if (!size) {
			dev_err(&dev->dev, "reg %x: invalid size "
			        "(l %#x sz %#x mask %#x); broken device?",
				pos, l, sz, mask);
		if (!sz)
			goto fail;
		}

		res->start = l;
		res->end = l + size;
		res->end = l + sz;

		dev_printk(KERN_DEBUG, &dev->dev, "reg %x: %pR\n", pos, res);
	}