From 7730ad6e5d754e4d536a1fe610379697b66e5323 Mon Sep 17 00:00:00 2001 From: Laszlo Ersek Date: Tue, 14 Jul 2015 12:01:48 +0000 Subject: OvmfPkg: PlatformBdsLib: refine PCI host bridge assertion The ASSERT() in SetPciIntLine() assumes that Device 0 on "the" root bus corresponds to the PCI host bridge (00:00). This used to be true, but because we're going to have extra root buses (with nonzero bus numbers), soon this assumption may no longer hold. Check for the zero root bus number explicitly. Cc: Jordan Justen Cc: Gabriel Somlo Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek Acked-by: Gabriel Somlo Regression-tested-by: Gabriel Somlo Reviewed-by: Jordan Justen git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17953 6f19259b-4bc3-4df7-8a09-765794883524 --- OvmfPkg/Library/PlatformBdsLib/BdsPlatform.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'OvmfPkg') diff --git a/OvmfPkg/Library/PlatformBdsLib/BdsPlatform.c b/OvmfPkg/Library/PlatformBdsLib/BdsPlatform.c index fdae6b1cdc..243db44de7 100644 --- a/OvmfPkg/Library/PlatformBdsLib/BdsPlatform.c +++ b/OvmfPkg/Library/PlatformBdsLib/BdsPlatform.c @@ -754,6 +754,7 @@ SetPciIntLine ( UINTN Idx; UINT8 IrqLine; EFI_STATUS Status; + UINT32 RootBusNumber; Status = EFI_SUCCESS; @@ -763,6 +764,13 @@ SetPciIntLine ( ASSERT (DevPathNode != NULL); DevPath = DevPathNode; + RootBusNumber = 0; + if (DevicePathType (DevPathNode) == ACPI_DEVICE_PATH && + DevicePathSubType (DevPathNode) == ACPI_DP && + ((ACPI_HID_DEVICE_PATH *)DevPathNode)->HID == EISA_PNP_ID(0x0A03)) { + RootBusNumber = ((ACPI_HID_DEVICE_PATH *)DevPathNode)->UID; + } + // // Compute index into PciHostIrqs[] table by walking // the device path and adding up all device numbers @@ -794,7 +802,7 @@ SetPciIntLine ( if (EFI_ERROR (Status)) { return Status; } - if (RootSlot == 0) { + if (RootBusNumber == 0 && RootSlot == 0) { DEBUG(( EFI_D_ERROR, "%a: PCI host bridge (00:00.0) should have no interrupts!\n", -- cgit v1.2.3