]> git.ipfire.org Git - thirdparty/ipxe.git/commit
[efi] Do not attempt to drive PCI bridge devices 878/head
authorMichael Brown <mcb30@ipxe.org>
Fri, 3 Feb 2023 16:10:31 +0000 (16:10 +0000)
committerMichael Brown <mcb30@ipxe.org>
Fri, 3 Feb 2023 16:10:31 +0000 (16:10 +0000)
commit4e456d992889569e2dbb0426f2438797ab06ca1f
tree5cab0370a5e6327d1aec3162a114f544b4291839
parentd405a0bd84e34d5c549d71145657add506079fb4
[efi] Do not attempt to drive PCI bridge devices

The "bridge" driver introduced in 3aa6b79 ("[pci] Add minimal PCI
bridge driver") is required only for BIOS builds using the ENA driver,
where experimentation shows that we cannot rely on the BIOS to fully
assign MMIO addresses.

Since the driver is a valid PCI driver, it will end up binding to all
PCI bridge devices even on a UEFI platform, where the firmware is
likely to have completed MMIO address assignment correctly.  This has
no impact on most systems since there is generally no UEFI driver for
PCI bridges: the enumeration of the whole PCI bus is handled by the
PciBusDxe driver bound to the root bridge.

Experimentation shows that at least one laptop will freeze at the
point that iPXE attempts to bind to the bridge device.  No deeper
investigation has been carried out to find the root cause.

Fix by causing efipci_supported() to return an error unless the
configuration space header type indicates a non-bridge device.

Reported-by: Marcel Petersen <mp@sbe.de>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/drivers/bus/pci.c
src/include/ipxe/pci.h
src/interface/efi/efi_pci.c