REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2335
This patch is to check the PCI Memory Base Address Register is valid or not. *** a\NetworkPkg\SnpDxe\Snp.c 2019-11-11 16:53:40.773300500 +0530 --- b\NetworkPkg\SnpDxe\Snp.c 2019-11-03 18:46:02.000000000 +0530 *************** SimpleNetworkDriverStart ( *** 266,272 **** UINT8 BarIndex; PXE_STATFLAGS InitStatFlags; EFI_PCI_IO_PROTOCOL *PciIo; ! EFI_ACPI_QWORD_ADDRESS_SPACE_DESCRIPTOR *BarDesc = NULL; BOOLEAN FoundIoBar; BOOLEAN FoundMemoryBar; --- 266,272 ---- UINT8 BarIndex; PXE_STATFLAGS InitStatFlags; EFI_PCI_IO_PROTOCOL *PciIo; ! EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *BarDesc; BOOLEAN FoundIoBar; BOOLEAN FoundMemoryBar; *************** SimpleNetworkDriverStart ( *** 481,494 **** } else if (EFI_ERROR (Status)) { goto Error_DeleteSNP; } ! //PXE boot fails with cards having non-continuous BAR. ! // From UEFI Spec, GetBarAttributes can have only descriptors of type ACPI_QWORD_ADDRESS_SPACE_DESCRIPTOR ! // and ACPI_END_TAG_DESCRIPTOR. ! if( BarDesc->Header.Header.Byte != ACPI_QWORD_ADDRESS_SPACE_DESCRIPTOR ) { ! FreePool (BarDesc); ! continue; ! } ! if ((!FoundMemoryBar) && (BarDesc->ResType == ACPI_ADDRESS_SPACE_TYPE_MEM)) { Snp->MemoryBarIndex = BarIndex; FoundMemoryBar = TRUE; --- 481,487 ---- } else if (EFI_ERROR (Status)) { goto Error_DeleteSNP; } ! if ((!FoundMemoryBar) && (BarDesc->ResType == ACPI_ADDRESS_SPACE_TYPE_MEM)) { Snp->MemoryBarIndex = BarIndex; FoundMemoryBar = TRUE; -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#51732): https://edk2.groups.io/g/devel/message/51732 Mute This Topic: https://groups.io/mt/66429976/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-