]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Revert "MdeModulePkg: Fix a PciBusDxe hot plug bug"
authorRuiyu Ni <ruiyu.ni@intel.com>
Tue, 3 Nov 2015 02:33:05 +0000 (02:33 +0000)
committerniruiyu <niruiyu@Edk2>
Tue, 3 Nov 2015 02:33:05 +0000 (02:33 +0000)
Leif suggested to split the big patch to smaller ones.

This reverts commit 73b7f115c653c807b9d0be97bf516871d8aff7ba.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Reviewed-by: Feng Tian <feng.tian@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18717 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h
MdeModulePkg/Bus/Pci/PciBusDxe/PciLib.c
MdeModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c

index a6ade26e3a09786970dc0a46fc0684d8e3c76a0a..f7aea4fd80c8423723e4c3db7bf54f5442f1bdfd 100644 (file)
@@ -324,81 +324,6 @@ PciSearchDevice (
   return EFI_SUCCESS;\r
 }\r
 \r
-/**\r
-  Dump the PPB padding resource information.\r
-\r
-  @param PciIoDevice     PCI IO instance.\r
-  @param ResourceType    The desired resource type to dump.\r
-                         PciBarTypeUnknown means to dump all types of resources.\r
-**/\r
-VOID\r
-DumpPpbPaddingResource (\r
-  IN PCI_IO_DEVICE                    *PciIoDevice,\r
-  IN PCI_BAR_TYPE                     ResourceType\r
-  )\r
-{\r
-  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor;\r
-  PCI_BAR_TYPE                      Type;\r
-\r
-  if (PciIoDevice->ResourcePaddingDescriptors == NULL) {\r
-    return;\r
-  }\r
-\r
-  if (ResourceType == PciBarTypeIo16 || ResourceType == PciBarTypeIo32) {\r
-    ResourceType = PciBarTypeIo;\r
-  }\r
-\r
-  for (Descriptor = PciIoDevice->ResourcePaddingDescriptors; Descriptor->Desc != ACPI_END_TAG_DESCRIPTOR; Descriptor++) {\r
-\r
-    Type = PciBarTypeUnknown;\r
-    if (Descriptor->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR && Descriptor->ResType == ACPI_ADDRESS_SPACE_TYPE_IO) {\r
-      Type = PciBarTypeIo;\r
-    } else if (Descriptor->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR && Descriptor->ResType == ACPI_ADDRESS_SPACE_TYPE_MEM) {\r
-\r
-      if (Descriptor->AddrSpaceGranularity == 32) {\r
-        //\r
-        // prefechable\r
-        //\r
-        if (Descriptor->SpecificFlag == EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_CACHEABLE_PREFETCHABLE) {\r
-          Type = PciBarTypePMem32;\r
-        }\r
-\r
-        //\r
-        // Non-prefechable\r
-        //\r
-        if (Descriptor->SpecificFlag == 0) {\r
-          Type = PciBarTypeMem32;\r
-        }\r
-      }\r
-\r
-      if (Descriptor->AddrSpaceGranularity == 64) {\r
-        //\r
-        // prefechable\r
-        //\r
-        if (Descriptor->SpecificFlag == EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_CACHEABLE_PREFETCHABLE) {\r
-          Type = PciBarTypePMem64;\r
-        }\r
-\r
-        //\r
-        // Non-prefechable\r
-        //\r
-        if (Descriptor->SpecificFlag == 0) {\r
-          Type = PciBarTypeMem64;\r
-        }\r
-      }\r
-    }\r
-\r
-    if ((Type != PciBarTypeUnknown) && ((ResourceType == PciBarTypeUnknown) || (ResourceType == Type))) {\r
-      DEBUG ((\r
-        EFI_D_INFO,\r
-        "   Padding: Type = %s; Alignment = 0x%lx;\tLength = 0x%lx\n",\r
-        mBarTypeStr[Type], Descriptor->AddrRangeMax, Descriptor->AddrLen\r
-        ));\r
-    }\r
-  }\r
-\r
-}\r
-\r
 /**\r
   Dump the PCI BAR information.\r
 \r
@@ -661,10 +586,7 @@ GatherPpbInfo (
 \r
   GetResourcePaddingPpb (PciIoDevice);\r
 \r
-  DEBUG_CODE (\r
-    DumpPpbPaddingResource (PciIoDevice, PciBarTypeUnknown);\r
-    DumpPciBars (PciIoDevice);\r
-  );\r
+  DEBUG_CODE (DumpPciBars (PciIoDevice););\r
 \r
   return PciIoDevice;\r
 }\r
index 4d7b3b754a2a25aae5a4658bc560f0f5f4a7e420..a4489b895fc49dd478710b4df7ddf907ce7554df 100644 (file)
@@ -460,17 +460,4 @@ ResetAllPpbBusNumber (
   IN UINT8                              StartBusNumber\r
   );\r
 \r
-/**\r
-  Dump the PPB padding resource information.\r
-\r
-  @param PciIoDevice     PCI IO instance.\r
-  @param ResourceType    The desired resource type to dump.\r
-                         PciBarTypeUnknown means to dump all types of resources.\r
-**/\r
-VOID\r
-DumpPpbPaddingResource (\r
-  IN PCI_IO_DEVICE                    *PciIoDevice,\r
-  IN PCI_BAR_TYPE                     ResourceType\r
-  );\r
-\r
 #endif\r
index f4b6ebfc0d30ffe8ada9712e846a726045353808..3e275e34ecebe4c998d18cf05184e373120494c6 100644 (file)
@@ -188,21 +188,19 @@ DumpBridgeResource (
       BridgeResource->PciDev->PciBar[BridgeResource->Bar].BaseAddress,\r
       BridgeResource->Length, BridgeResource->Alignment\r
       ));\r
-    for ( Link = GetFirstNode (&BridgeResource->ChildList)\r
-        ; !IsNull (&BridgeResource->ChildList, Link)\r
-        ; Link = GetNextNode (&BridgeResource->ChildList, Link)\r
+    for ( Link = BridgeResource->ChildList.ForwardLink\r
+        ; Link != &BridgeResource->ChildList\r
+        ; Link = Link->ForwardLink\r
         ) {\r
       Resource = RESOURCE_NODE_FROM_LINK (Link);\r
       if (Resource->ResourceUsage == PciResUsageTypical) {\r
         Bar = Resource->Virtual ? Resource->PciDev->VfPciBar : Resource->PciDev->PciBar;\r
         DEBUG ((\r
-          EFI_D_INFO, "   Base = 0x%lx;\tLength = 0x%lx;\tAlignment = 0x%lx;\tOwner = %s [%02x|%02x|%02x:",\r
+          EFI_D_INFO, " Base = 0x%lx;\tLength = 0x%lx;\tAlignment = 0x%lx;\tOwner = %s ",\r
           Bar[Resource->Bar].BaseAddress, Resource->Length, Resource->Alignment,\r
           IS_PCI_BRIDGE (&Resource->PciDev->Pci)     ? L"PPB" :\r
           IS_CARDBUS_BRIDGE (&Resource->PciDev->Pci) ? L"P2C" :\r
-                                                       L"PCI",\r
-          Resource->PciDev->BusNumber, Resource->PciDev->DeviceNumber,\r
-          Resource->PciDev->FunctionNumber\r
+                                                       L"PCI"\r
           ));\r
 \r
         if ((!IS_PCI_BRIDGE (&Resource->PciDev->Pci) && !IS_CARDBUS_BRIDGE (&Resource->PciDev->Pci)) ||\r
@@ -212,20 +210,24 @@ DumpBridgeResource (
           //\r
           // The resource requirement comes from the device itself.\r
           //\r
-          DEBUG ((EFI_D_INFO, "%02x]", Bar[Resource->Bar].Offset));\r
+          DEBUG ((\r
+            EFI_D_INFO, " [%02x|%02x|%02x:%02x]\n",\r
+            Resource->PciDev->BusNumber, Resource->PciDev->DeviceNumber,\r
+            Resource->PciDev->FunctionNumber, Bar[Resource->Bar].Offset\r
+            ));\r
         } else {\r
           //\r
           // The resource requirement comes from the subordinate devices.\r
           //\r
-          DEBUG ((EFI_D_INFO, "**]"));\r
+          DEBUG ((\r
+            EFI_D_INFO, " [%02x|%02x|%02x:**]\n",\r
+            Resource->PciDev->BusNumber, Resource->PciDev->DeviceNumber,\r
+            Resource->PciDev->FunctionNumber\r
+            ));\r
         }\r
       } else {\r
-        DEBUG ((EFI_D_INFO, "   Base = Padding;\tLength = 0x%lx;\tAlignment = 0x%lx", Resource->Length, Resource->Alignment));\r
+        DEBUG ((EFI_D_INFO, " Padding:Length = 0x%lx;\tAlignment = 0x%lx\n", Resource->Length, Resource->Alignment));\r
       }\r
-      if (BridgeResource->ResType != Resource->ResType) {\r
-        DEBUG ((EFI_D_INFO, "; Type = %s", mBarTypeStr[MIN (Resource->ResType, PciBarTypeMaxType)]));\r
-      }\r
-      DEBUG ((EFI_D_INFO, "\n"));\r
     }\r
   }\r
 }\r
@@ -233,61 +235,63 @@ DumpBridgeResource (
 /**\r
   Find the corresponding resource node for the Device in child list of BridgeResource.\r
   \r
-  @param[in]  Device          Pointer to PCI_IO_DEVICE.\r
-  @param[in]  BridgeResource  Pointer to PCI_RESOURCE_NODE.\r
-  @param[out] DeviceResources Pointer to a buffer to receive resources for the Device.\r
+  @param[in] Device         Pointer to PCI_IO_DEVICE.\r
+  @param[in] BridgeResource Pointer to PCI_RESOURCE_NODE.\r
   \r
-  @return Count of the resource descriptors returned.\r
+  @return !NULL  The corresponding resource node for the Device.\r
+  @return NULL   No corresponding resource node for the Device.\r
 **/\r
-UINTN\r
+PCI_RESOURCE_NODE *\r
 FindResourceNode (\r
-  IN  PCI_IO_DEVICE     *Device,\r
-  IN  PCI_RESOURCE_NODE *BridgeResource,\r
-  OUT PCI_RESOURCE_NODE **DeviceResources OPTIONAL\r
+  IN PCI_IO_DEVICE     *Device,\r
+  IN PCI_RESOURCE_NODE *BridgeResource\r
   )\r
 {\r
   LIST_ENTRY               *Link;\r
   PCI_RESOURCE_NODE        *Resource;\r
-  UINTN                    Count;\r
 \r
-  Count = 0;\r
   for ( Link = BridgeResource->ChildList.ForwardLink\r
       ; Link != &BridgeResource->ChildList\r
       ; Link = Link->ForwardLink\r
       ) {\r
     Resource = RESOURCE_NODE_FROM_LINK (Link);\r
     if (Resource->PciDev == Device) {\r
-      if (DeviceResources != NULL) {\r
-        DeviceResources[Count] = Resource;\r
-      }\r
-      Count++;\r
+      return Resource;\r
     }\r
   }\r
 \r
-  return Count;\r
+  return NULL;\r
 }\r
 \r
 /**\r
   Dump the resource map of all the devices under Bridge.\r
   \r
-  @param[in] Bridge        Bridge device instance.\r
-  @param[in] Resources     Resource descriptors for the bridge device.\r
-  @param[in] ResourceCount Count of resource descriptors.\r
+  @param[in] Bridge     Bridge device instance.\r
+  @param[in] IoNode     IO resource descriptor for the bridge device.\r
+  @param[in] Mem32Node  Mem32 resource descriptor for the bridge device.\r
+  @param[in] PMem32Node PMem32 resource descriptor for the bridge device.\r
+  @param[in] Mem64Node  Mem64 resource descriptor for the bridge device.\r
+  @param[in] PMem64Node PMem64 resource descriptor for the bridge device.\r
 **/\r
 VOID\r
 DumpResourceMap (\r
   IN PCI_IO_DEVICE     *Bridge,\r
-  IN PCI_RESOURCE_NODE **Resources,\r
-  IN UINTN             ResourceCount\r
+  IN PCI_RESOURCE_NODE *IoNode,\r
+  IN PCI_RESOURCE_NODE *Mem32Node,\r
+  IN PCI_RESOURCE_NODE *PMem32Node,\r
+  IN PCI_RESOURCE_NODE *Mem64Node,\r
+  IN PCI_RESOURCE_NODE *PMem64Node\r
   )\r
 {\r
-  EFI_STATUS           Status;\r
-  LIST_ENTRY           *Link;\r
-  PCI_IO_DEVICE        *Device;\r
-  UINTN                Index;\r
-  CHAR16               *Str;\r
-  PCI_RESOURCE_NODE    **ChildResources;\r
-  UINTN                ChildResourceCount;\r
+  EFI_STATUS                       Status;\r
+  LIST_ENTRY                       *Link;\r
+  PCI_IO_DEVICE                    *Device;\r
+  PCI_RESOURCE_NODE                *ChildIoNode;\r
+  PCI_RESOURCE_NODE                *ChildMem32Node;\r
+  PCI_RESOURCE_NODE                *ChildPMem32Node;\r
+  PCI_RESOURCE_NODE                *ChildMem64Node;\r
+  PCI_RESOURCE_NODE                *ChildPMem64Node;\r
+  CHAR16                           *Str;\r
 \r
   DEBUG ((EFI_D_INFO, "PciBus: Resource Map for "));\r
 \r
@@ -316,9 +320,11 @@ DumpResourceMap (
     }\r
   }\r
 \r
-  for (Index = 0; Index < ResourceCount; Index++) {\r
-    DumpBridgeResource (Resources[Index]);\r
-  }\r
+  DumpBridgeResource (IoNode);\r
+  DumpBridgeResource (Mem32Node);\r
+  DumpBridgeResource (PMem32Node);\r
+  DumpBridgeResource (Mem64Node);\r
+  DumpBridgeResource (PMem64Node);\r
   DEBUG ((EFI_D_INFO, "\n"));\r
 \r
   for ( Link = Bridge->ChildList.ForwardLink\r
@@ -328,19 +334,20 @@ DumpResourceMap (
     Device = PCI_IO_DEVICE_FROM_LINK (Link);\r
     if (IS_PCI_BRIDGE (&Device->Pci)) {\r
 \r
-      ChildResourceCount = 0;\r
-      for (Index = 0; Index < ResourceCount; Index++) {\r
-        ChildResourceCount += FindResourceNode (Device, Resources[Index], NULL);\r
-      }\r
-      ChildResources = AllocatePool (sizeof (PCI_RESOURCE_NODE *) * ChildResourceCount);\r
-      ASSERT (ChildResources != NULL);\r
-      ChildResourceCount = 0;\r
-      for (Index = 0; Index < ResourceCount; Index++) {\r
-        ChildResourceCount += FindResourceNode (Device, Resources[Index], &ChildResources[ChildResourceCount]);\r
-      }\r
-\r
-      DumpResourceMap (Device, ChildResources, ChildResourceCount);\r
-      FreePool (ChildResources);\r
+      ChildIoNode     = (IoNode     == NULL ? NULL : FindResourceNode (Device, IoNode));\r
+      ChildMem32Node  = (Mem32Node  == NULL ? NULL : FindResourceNode (Device, Mem32Node));\r
+      ChildPMem32Node = (PMem32Node == NULL ? NULL : FindResourceNode (Device, PMem32Node));\r
+      ChildMem64Node  = (Mem64Node  == NULL ? NULL : FindResourceNode (Device, Mem64Node));\r
+      ChildPMem64Node = (PMem64Node == NULL ? NULL : FindResourceNode (Device, PMem64Node));\r
+\r
+      DumpResourceMap (\r
+        Device,\r
+        ChildIoNode,\r
+        ChildMem32Node,\r
+        ChildPMem32Node,\r
+        ChildMem64Node,\r
+        ChildPMem64Node\r
+        );\r
     }\r
   }\r
 }\r
@@ -800,11 +807,11 @@ PciHostBridgeResourceAllocator (
     // Create the entire system resource map from the information collected by\r
     // enumerator. Several resource tree was created\r
     //\r
-    FindResourceNode (RootBridgeDev, &IoPool, &IoBridge);\r
-    FindResourceNode (RootBridgeDev, &Mem32Pool, &Mem32Bridge);\r
-    FindResourceNode (RootBridgeDev, &PMem32Pool, &PMem32Bridge);\r
-    FindResourceNode (RootBridgeDev, &Mem64Pool, &Mem64Bridge);\r
-    FindResourceNode (RootBridgeDev, &PMem64Pool, &PMem64Bridge);\r
+    IoBridge     = FindResourceNode (RootBridgeDev, &IoPool);\r
+    Mem32Bridge  = FindResourceNode (RootBridgeDev, &Mem32Pool);\r
+    PMem32Bridge = FindResourceNode (RootBridgeDev, &PMem32Pool);\r
+    Mem64Bridge  = FindResourceNode (RootBridgeDev, &Mem64Pool);\r
+    PMem64Bridge = FindResourceNode (RootBridgeDev, &PMem64Pool);\r
 \r
     ASSERT (IoBridge     != NULL);\r
     ASSERT (Mem32Bridge  != NULL);\r
@@ -862,13 +869,14 @@ PciHostBridgeResourceAllocator (
     // Dump the resource map for current root bridge\r
     //\r
     DEBUG_CODE (\r
-      PCI_RESOURCE_NODE *Resources[5];\r
-      Resources[0] = IoBridge;\r
-      Resources[1] = Mem32Bridge;\r
-      Resources[2] = PMem32Bridge;\r
-      Resources[3] = Mem64Bridge;\r
-      Resources[4] = PMem64Bridge;\r
-      DumpResourceMap (RootBridgeDev, Resources, sizeof (Resources) / sizeof (Resources[0]));\r
+      DumpResourceMap (\r
+        RootBridgeDev,\r
+        IoBridge,\r
+        Mem32Bridge,\r
+        PMem32Bridge,\r
+        Mem64Bridge,\r
+        PMem64Bridge\r
+        );\r
     );\r
 \r
     FreePool (AcpiConfig);\r
@@ -976,8 +984,7 @@ PciScanBus (
   UINT8                             Device;\r
   UINT8                             Func;\r
   UINT64                            Address;\r
-  UINT8                             SecondBus;\r
-  UINT8                             PaddedSubBus;\r
+  UINTN                             SecondBus;\r
   UINT16                            Register;\r
   UINTN                             HpIndex;\r
   PCI_IO_DEVICE                     *PciDevice;\r
@@ -1211,7 +1218,7 @@ PciScanBus (
 \r
           Status = PciScanBus (\r
                     PciDevice,\r
-                    SecondBus,\r
+                    (UINT8) (SecondBus),\r
                     SubBusNumber,\r
                     PaddedBusRange\r
                     );\r
@@ -1227,16 +1234,12 @@ PciScanBus (
           if ((Attributes == EfiPaddingPciRootBridge) &&\r
               (State & EFI_HPC_STATE_ENABLED) != 0    &&\r
               (State & EFI_HPC_STATE_INITIALIZED) != 0) {\r
-            *PaddedBusRange = (UINT8) ((UINT8) (BusRange) + *PaddedBusRange);\r
+            *PaddedBusRange = (UINT8) ((UINT8) (BusRange) +*PaddedBusRange);\r
           } else {\r
-            //\r
-            // Reserve the larger one between the actual occupied bus number and padded bus number\r
-            //\r
-            Status = PciAllocateBusNumber (PciDevice, StartBusNumber, (UINT8) (BusRange), &PaddedSubBus);\r
+            Status = PciAllocateBusNumber (PciDevice, *SubBusNumber, (UINT8) (BusRange), SubBusNumber);\r
             if (EFI_ERROR (Status)) {\r
               return Status;\r
             }\r
-            *SubBusNumber = MAX (PaddedSubBus, *SubBusNumber);\r
           }\r
         }\r
 \r
index b106abe0fa8075aeb81767ad742bc99dc829807d..d8d988cbfc270b223503d34aad5ef50bcb589bef 100644 (file)
@@ -196,7 +196,6 @@ CalculateApertureIo16 (
   PCI_RESOURCE_NODE       *Node;\r
   UINT64                  Offset;\r
   EFI_PCI_PLATFORM_POLICY PciPolicy;\r
-  UINT64                  PaddingAperture;\r
 \r
   if (!mPolicyDetermined) {\r
     //\r
@@ -229,27 +228,21 @@ CalculateApertureIo16 (
     mPolicyDetermined = TRUE;\r
   }\r
 \r
-  Aperture        = 0;\r
-  PaddingAperture = 0;\r
+  Aperture = 0;\r
 \r
   if (Bridge == NULL) {\r
     return ;\r
   }\r
 \r
+  CurrentLink = Bridge->ChildList.ForwardLink;\r
+\r
   //\r
   // Assume the bridge is aligned\r
   //\r
-  for ( CurrentLink = GetFirstNode (&Bridge->ChildList)\r
-      ; !IsNull (&Bridge->ChildList, CurrentLink)\r
-      ; CurrentLink = GetNextNode (&Bridge->ChildList, CurrentLink)\r
-      ) {\r
+  while (CurrentLink != &Bridge->ChildList) {\r
 \r
     Node = RESOURCE_NODE_FROM_LINK (CurrentLink);\r
-    if (Node->ResourceUsage == PciResUsagePadding) {\r
-      ASSERT (PaddingAperture == 0);\r
-      PaddingAperture = Node->Length;\r
-      continue;\r
-    }\r
+\r
     //\r
     // Consider the aperture alignment\r
     //\r
@@ -300,10 +293,13 @@ CalculateApertureIo16 (
     // Increment aperture by the length of node\r
     //\r
     Aperture += Node->Length;\r
+\r
+    CurrentLink = CurrentLink->ForwardLink;\r
   }\r
 \r
   //\r
-  // Adjust the aperture with the bridge's alignment\r
+  // At last, adjust the aperture with the bridge's\r
+  // alignment\r
   //\r
   Offset = Aperture & (Bridge->Alignment);\r
 \r
@@ -323,12 +319,6 @@ CalculateApertureIo16 (
       Bridge->Alignment = Node->Alignment;\r
     }\r
   }\r
-\r
-  //\r
-  // Hotplug controller needs padding resources.\r
-  // Use the larger one between the padding resource and actual occupied resource.\r
-  //\r
-  Bridge->Length = MAX (Bridge->Length, PaddingAperture);\r
 }\r
 \r
 /**\r
@@ -346,11 +336,10 @@ CalculateResourceAperture (
   UINT64            Aperture;\r
   LIST_ENTRY        *CurrentLink;\r
   PCI_RESOURCE_NODE *Node;\r
-  UINT64            PaddingAperture;\r
+\r
   UINT64            Offset;\r
 \r
-  Aperture        = 0;\r
-  PaddingAperture = 0;\r
+  Aperture = 0;\r
 \r
   if (Bridge == NULL) {\r
     return ;\r
@@ -362,20 +351,14 @@ CalculateResourceAperture (
     return ;\r
   }\r
 \r
+  CurrentLink = Bridge->ChildList.ForwardLink;\r
+\r
   //\r
   // Assume the bridge is aligned\r
   //\r
-  for ( CurrentLink = GetFirstNode (&Bridge->ChildList)\r
-      ; !IsNull (&Bridge->ChildList, CurrentLink)\r
-      ; CurrentLink = GetNextNode (&Bridge->ChildList, CurrentLink)\r
-      ) {\r
+  while (CurrentLink != &Bridge->ChildList) {\r
 \r
     Node = RESOURCE_NODE_FROM_LINK (CurrentLink);\r
-    if (Node->ResourceUsage == PciResUsagePadding) {\r
-      ASSERT (PaddingAperture == 0);\r
-      PaddingAperture = Node->Length;\r
-      continue;\r
-    }\r
 \r
     //\r
     // Apply padding resource if available\r
@@ -398,6 +381,11 @@ CalculateResourceAperture (
     // Increment aperture by the length of node\r
     //\r
     Aperture += Node->Length;\r
+\r
+    //\r
+    // Consider the aperture alignment\r
+    //\r
+    CurrentLink = CurrentLink->ForwardLink;\r
   }\r
 \r
   //\r
@@ -419,7 +407,7 @@ CalculateResourceAperture (
   }\r
 \r
   //\r
-  // Adjust the bridge's alignment to the first child's alignment\r
+  // At last, adjust the bridge's alignment to the first child's alignment\r
   // if the bridge has at least one child\r
   //\r
   CurrentLink = Bridge->ChildList.ForwardLink;\r
@@ -429,12 +417,6 @@ CalculateResourceAperture (
       Bridge->Alignment = Node->Alignment;\r
     }\r
   }\r
-\r
-  //\r
-  // Hotplug controller needs padding resources.\r
-  // Use the larger one between the padding resource and actual occupied resource.\r
-  //\r
-  Bridge->Length = MAX (Bridge->Length, PaddingAperture);\r
 }\r
 \r
 /**\r