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

Reply via email to