pci: Skip configuring invalid P2P bridge devices
Function dm_pci_hose_probe_bus() expects that bus is valid PCI device with Bridge header type (0x01). So add check before touching PCI config space to prevent misconfiguring some non-standard device. Signed-off-by: Pali Rohár <pali@kernel.org> Reviewed-by: Stefan Roese <sr@denx.de>
This commit is contained in:
parent
b9caab8b47
commit
63ae80dd98
@ -627,6 +627,7 @@ int pci_generic_mmap_read_config(
|
||||
|
||||
int dm_pci_hose_probe_bus(struct udevice *bus)
|
||||
{
|
||||
u8 header_type;
|
||||
int sub_bus;
|
||||
int ret;
|
||||
int ea_pos;
|
||||
@ -634,6 +635,14 @@ int dm_pci_hose_probe_bus(struct udevice *bus)
|
||||
|
||||
debug("%s\n", __func__);
|
||||
|
||||
dm_pci_read_config8(bus, PCI_HEADER_TYPE, &header_type);
|
||||
header_type &= 0x7f;
|
||||
if (header_type != PCI_HEADER_TYPE_BRIDGE) {
|
||||
debug("%s: Skipping PCI device %d with Non-Bridge Header Type 0x%x\n",
|
||||
__func__, PCI_DEV(dm_pci_get_bdf(bus)), header_type);
|
||||
return log_msg_ret("probe", -EINVAL);
|
||||
}
|
||||
|
||||
ea_pos = dm_pci_find_capability(bus, PCI_CAP_ID_EA);
|
||||
if (ea_pos) {
|
||||
dm_pci_read_config8(bus, ea_pos + sizeof(u32) + sizeof(u8),
|
||||
|
Loading…
Reference in New Issue
Block a user