Ard,
At first glance of this patch, I immediately checked the PI spec SubResources() 
description,
it says when a root bridge doesn't require any resource, "a zero-length 
resource request
must explicitly be submitted."
"zero-length resource" can be interpreted in two ways:
1. only END descriptor
2. MEM resource with 0-length, plus IO resource with 0-length, plus END 
descriptor

I believe that both ways should be accepted by PciHostBridge driver.
But without your patch, the zero descriptor cannot be accepted by PciHostBridge 
driver.
I think it fails in the check:

case ACPI_ADDRESS_SPACE_TYPE_MEM /* 0 */:
  if (Descriptor->AddrSpaceGranularity != 32 && 
Descriptor->AddrSpaceGranularity != 64) {
    return EFI_INVALID_PARAMETER;
  }

I agree with your patch.

Reviewed-by: Ruiyu Ni <ruiyu...@intel.com>



Regards,
Ray

>-----Original Message-----
>From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of Ard 
>Biesheuvel
>Sent: Thursday, April 28, 2016 11:51 PM
>To: edk2-devel@lists.01.org; Tian, Feng <feng.t...@intel.com>; Zeng, Star 
><star.z...@intel.com>
>Cc: leif.lindh...@linaro.org; Ard Biesheuvel <ard.biesheu...@linaro.org>
>Subject: [edk2] [PATCH] MdeModulePkg/PciBusDxe: don't create bogus descriptor 
>if no resources needed
>
>If the current PCI configuration requires no resources to be allocated at
>all (i.e., unpopulated bus), the PCI enumeration code creates a single
>ACPI_ADDRESS_SPACE_DESCRIPTOR memory descriptor with all fields cleared.
>This is rejected by the SubmitResources() implementation of the generic
>PciHostBridgeDxe in the following way:
>
>  PciHostBridge: SubmitResources for PcieRoot(0x0)
>   Mem: Granularity/SpecificFlag = 0 / 00
>        Length/Alignment = 0x0 / 0x0
>  PciBus: HostBridge->SubmitResources() - Invalid Parameter
>
>  ASSERT_EFI_ERROR (Status = Invalid Parameter)
>  ASSERT [PciBusDxe] .../PciBusDxe/PciLib.c(561): !EFI_ERROR (Status)
>
>So instead, create the empty configuration as a single entry of type
>EFI_ACPI_END_TAG_DESCRIPTOR.
>
>Contributed-under: TianoCore Contribution Agreement 1.0
>Signed-off-by: Ard Biesheuvel <ard.biesheu...@linaro.org>
>---
> MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumerator.c | 7 ++-----
> 1 file changed, 2 insertions(+), 5 deletions(-)
>
>diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumerator.c 
>b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumerator.c
>index 597c0834e0f5..469a2ddb8ac0 100644
>--- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumerator.c
>+++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumerator.c
>@@ -1307,15 +1307,12 @@ ConstructAcpiResourceRequestor (
>     //
>     // If there is no resource request
>     //
>-    Configuration = AllocateZeroPool (sizeof 
>(EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) + sizeof
>(EFI_ACPI_END_TAG_DESCRIPTOR));
>+    Configuration = AllocateZeroPool (sizeof (EFI_ACPI_END_TAG_DESCRIPTOR));
>     if (Configuration == NULL) {
>       return EFI_OUT_OF_RESOURCES;
>     }
>
>-    Ptr               = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) (Configuration);
>-    Ptr->Desc         = ACPI_ADDRESS_SPACE_DESCRIPTOR;
>-
>-    PtrEnd            = (EFI_ACPI_END_TAG_DESCRIPTOR *) (Ptr + 1);
>+    PtrEnd            = (EFI_ACPI_END_TAG_DESCRIPTOR *) (Configuration);
>     PtrEnd->Desc      = ACPI_END_TAG_DESCRIPTOR;
>     PtrEnd->Checksum  = 0;
>   }
>--
>2.7.4
>
>_______________________________________________
>edk2-devel mailing list
>edk2-devel@lists.01.org
>https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to