Reviewed-By: Olivier Martin <[email protected]> > -----Original Message----- > From: Laszlo Ersek [mailto:[email protected]] > Sent: 14 February 2015 22:02 > To: [email protected]; [email protected]; Peter Maydell; Ard > Biesheuvel; Drew Jones; Wei Huang; Donald Dutile; Wei Liu > Subject: [edk2] [PATCH 18/27] ArmVirtualizationPkg/PciHostBridgeDxe: > skip 0 AddrLen in SubmitResources() > > According to Volume 5 of the PI spec, 10.8.2 PCI Host Bridge Resource > Allocation Protocol, SubmitResources(), > > It is considered an error if no resource requests are submitted for a > PCI root bridge. If a PCI root bridge does not require any resources, > a > zero-length resource request must explicitly be submitted. > > Under MdeModulePkg/Bus/Pci/PciBusDxe/, we have: > > PciHostBridgeResourceAllocator() [PciLib.c] > ConstructAcpiResourceRequestor(..., &AcpiConfig) [PciEnumerator.c] > PciResAlloc->SubmitResources(..., &AcpiConfig) > ASSERT_EFI_ERROR () > > If ConstructAcpiResourceRequestor() finds no resources to request (for > example because no PCI devices are on the root bridge), it places a > zero-length EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR followed by an > EFI_ACPI_END_TAG_DESCRIPTOR in "AcpiConfig"; satisfying the PI spec. > > However, PciHostBridgeDxe's SubmitResources() function does not expect > such input; the following part of the code rejects it: > > switch (Ptr->ResType) { > > case 0: > > // > // Check invalid Address Sapce Granularity > // > if (Ptr->AddrSpaceGranularity != 32) { > return EFI_INVALID_PARAMETER; > } > > Skip EFI_ACPI_ADDRESS_SPACE_DESCRIPTORs with zero AddrLen early. Also, > allow PciHostBridgeResourceAllocator() to proceed to the > AllocateResources > phase by setting "ResourceSubmited" to TRUE. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Laszlo Ersek <[email protected]> > --- > ArmPlatformPkg/ArmVirtualizationPkg/PciHostBridgeDxe/PciHostBridge.c | > 11 ++++++++--- > 1 file changed, 8 insertions(+), 3 deletions(-) > > diff --git > a/ArmPlatformPkg/ArmVirtualizationPkg/PciHostBridgeDxe/PciHostBridge.c > b/ArmPlatformPkg/ArmVirtualizationPkg/PciHostBridgeDxe/PciHostBridge.c > index 9f3406c..96391eb 100644 > --- > a/ArmPlatformPkg/ArmVirtualizationPkg/PciHostBridgeDxe/PciHostBridge.c > +++ > b/ArmPlatformPkg/ArmVirtualizationPkg/PciHostBridgeDxe/PciHostBridge.c > @@ -922,12 +922,19 @@ SubmitResources( > while (List != &HostBridgeInstance->Head) { > RootBridgeInstance = DRIVER_INSTANCE_FROM_LIST_ENTRY (List); > if (RootBridgeHandle == RootBridgeInstance->Handle) { > - while ( *Temp == 0x8A) { > + for (; > + *Temp == 0x8A; > + Temp += sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) > + ) { > Ptr = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Temp ; > > // > // Check Address Length > // > + if (Ptr->AddrLen == 0) { > + HostBridgeInstance->ResourceSubmited = TRUE; > + continue; > + } > if (Ptr->AddrLen > 0xffffffff) { > return EFI_INVALID_PARAMETER; > } > @@ -995,8 +1002,6 @@ SubmitResources( > default: > break; > }; > - > - Temp += sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) ; > } > > return EFI_SUCCESS; > -- > 1.8.3.1 > > > > ----------------------------------------------------------------------- > ------- > Dive into the World of Parallel Programming. The Go Parallel Website, > sponsored by Intel and developed in partnership with Slashdot Media, is > your > hub for all things parallel software development, from weekly thought > leadership blogs to news, videos, case studies, tutorials and more. > Take a > look and join the conversation now. http://goparallel.sourceforge.net/ > _______________________________________________ > edk2-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/edk2-devel
------------------------------------------------------------------------------ Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server from Actuate! Instantly Supercharge Your Business Reports and Dashboards with Interactivity, Sharing, Native Excel Exports, App Integration & more Get technology previously reserved for billion-dollar corporations, FREE http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk _______________________________________________ edk2-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/edk2-devel
