[PATCH 2/5] pci: Skip configuring invalid P2P bridge devices
Stefan Roese
sr at denx.de
Fri Oct 8 07:52:49 CEST 2021
On 07.10.21 14:50, Pali Rohár wrote:
> 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 at kernel.org>
Reviewed-by: Stefan Roese <sr at denx.de>
Thanks,
Stefan
> ---
> drivers/pci/pci-uclass.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c
> index 044babee164f..5da3515f5f25 100644
> --- a/drivers/pci/pci-uclass.c
> +++ b/drivers/pci/pci-uclass.c
> @@ -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),
>
Viele Grüße,
Stefan
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de
More information about the U-Boot
mailing list