PCI: Rely on config space header type, not class code
authorHonghui Zhang <honghui.zhang@mediatek.com>
Tue, 16 Oct 2018 10:44:43 +0000 (18:44 +0800)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 30 Jan 2019 16:57:08 +0000 (10:57 -0600)
commitb2fb5cc574695a32361a6c1878816b3d6563aa0f
treeaeda430e417de11a73fa8bdee765253a1a296ff4
parent01b37f851ca150554496fd6e79c6d9a67992a2c0
PCI: Rely on config space header type, not class code

The PCI configuration space header type tells us whether the device is a
bridge, a CardBus bridge, or a normal device, and defines the layout of the
rest of the header (PCI r3.0 sec 6.1, PCIe r4.0 sec 7.5.1.1.9).

When we rely on the header format, e.g., when we're dealing with bridge
windows, we should check the header type, not the class code.  The class
code is loosely related to the header type, but is often incorrect and the
spec doesn't actually require it to be related to the header format.

Suggested-by: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Honghui Zhang <honghui.zhang@mediatek.com>
[bhelgaas: changelog, keep the PCI_CLASS_BRIDGE_HOST check]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/pci.c
drivers/pci/probe.c
drivers/pci/setup-bus.c