[pci] Handle non-zero starting bus in ECAM allocations

The base address provided in the PCI ECAM allocation within the ACPI
MCFG table is the base address for the segment as a whole, not for the
starting bus within that allocation.  On machines that provide ECAM
allocations with a non-zero starting bus number (observed with an AWS
EC2 m7a.large instance), this will result in iPXE accessing the wrong
memory addresses within the ECAM region.

Fix by adding the appropriate starting bus offset to the base address.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
pull/1073/head
Michael Brown 2023-11-02 15:05:15 +00:00
parent f883203132
commit 74ec00a9f3
1 changed files with 1 additions and 0 deletions

View File

@ -150,6 +150,7 @@ static int ecam_access ( struct pci_device *pci ) {
/* Map configuration space for this allocation */
base = le64_to_cpu ( ecam.alloc.base );
base += ( ecam.alloc.start * ECAM_SIZE * PCI_BUSDEVFN ( 0, 1, 0, 0 ) );
len = ( ecam.range.count * ECAM_SIZE );
ecam.regs = ioremap ( base, len );
if ( ! ecam.regs ) {