diff mbox series

[edk2,v3,5/6] ArmPlatformPkg/ArmJunoPkg: remove PCI host bridge driver

Message ID 20170404123010.11722-6-ard.biesheuvel@linaro.org
State Superseded
Headers show
Series Juno cleanup -- EDK2 edition | expand

Commit Message

Ard Biesheuvel April 4, 2017, 12:30 p.m. UTC
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

---
 ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.c                   | 199 ------
 ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.h                   | 324 ---------
 ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeDxe.inf              |  76 --
 ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeResourceAllocation.c | 642 -----------------
 ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciRootBridge.c                   | 748 --------------------
 ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.c                     | 170 -----
 ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.h                     | 111 ---
 7 files changed, 2270 deletions(-)

-- 
2.9.3

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Comments

Leif Lindholm April 5, 2017, 1:18 p.m. UTC | #1
On Tue, Apr 04, 2017 at 01:30:09PM +0100, Ard Biesheuvel wrote:

Should this not have come kind of commit message?

> Contributed-under: TianoCore Contribution Agreement 1.0

> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

> ---

>  ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.c                   | 199 ------

>  ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.h                   | 324 ---------

>  ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeDxe.inf              |  76 --

>  ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeResourceAllocation.c | 642 -----------------

>  ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciRootBridge.c                   | 748 --------------------

>  ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.c                     | 170 -----

>  ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.h                     | 111 ---

>  7 files changed, 2270 deletions(-)

> 

> diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.c b/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.c

> deleted file mode 100644

> index e1a6b749e4e6..000000000000

> --- a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.c

> +++ /dev/null

> @@ -1,199 +0,0 @@

> -/** @file

> -*  Pci Host Bridge support for the Xpress-RICH3 PCIe Root Complex

> -*

> -*  Copyright (c) 2011-2015, ARM Ltd. All rights reserved.

> -*

> -*  This program and the accompanying materials

> -*  are licensed and made available under the terms and conditions of the BSD License

> -*  which accompanies this distribution.  The full text of the license may be found at

> -*  http://opensource.org/licenses/bsd-license.php

> -*

> -*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> -*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> -*

> -**/

> -

> -#include "PciHostBridge.h"

> -

> -#include <Guid/EventGroup.h>

> -

> -/**

> - * PCI Root Bridge Description

> - */

> -typedef struct {

> -  UINT32  AcpiUid;

> -  UINT64  MemAllocAttributes;

> -} PCI_ROOT_BRIDGE_DESC;

> -

> -PCI_ROOT_BRIDGE_DESC PciRbDescriptions = {

> -    0,                                  // AcpiUid

> -    PCI_MEMORY_ALLOCATION_ATTRIBUTES    // MemAllocAttributes

> -};

> -

> -/**

> - * Template for PCI Host Bridge Instance

> - **/

> -STATIC CONST PCI_HOST_BRIDGE_INSTANCE

> -gPciHostBridgeInstanceTemplate = {

> -  PCI_HOST_BRIDGE_SIGNATURE,      //Signature

> -  NULL,                           // Handle

> -  NULL,                           // ImageHandle

> -  NULL,                           // RootBridge

> -  TRUE,                           // CanRestarted

> -  NULL,                           // CpuIo

> -  NULL,                           // Metronome

> -  {                               // ResAlloc

> -    PciHbRaNotifyPhase,           //   ResAlloc.NotifyPhase

> -    PciHbRaGetNextRootBridge,     //   ResAlloc.GetNextRootBridge

> -    PciHbRaGetAllocAttributes,    //   ResAlloc.GetAllocAttributes

> -    PciHbRaStartBusEnumeration,   //   ResAlloc.StartBusEnumeration

> -    PciHbRaSetBusNumbers,         //   ResAlloc.SetBusNumbers

> -    PciHbRaSubmitResources,       //   ResAlloc.SubmitResources

> -    PciHbRaGetProposedResources,  //   ResAlloc.GetProposedResources

> -    PciHbRaPreprocessController   //   ResAlloc.PreprocessController

> -  }

> -};

> -PCI_HOST_BRIDGE_INSTANCE* gpPciHostBridgeInstance;

> -

> -EFI_STATUS

> -HostBridgeConstructor (

> -  IN OUT PCI_HOST_BRIDGE_INSTANCE** Instance,

> -  IN  EFI_HANDLE                    ImageHandle

> -  )

> -{

> -  EFI_STATUS                  Status;

> -  PCI_HOST_BRIDGE_INSTANCE*   HostBridge;

> -

> -  PCI_TRACE ("HostBridgeConstructor()");

> -

> -  if (Instance == NULL) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  HostBridge = AllocateCopyPool (sizeof (PCI_HOST_BRIDGE_INSTANCE), &gPciHostBridgeInstanceTemplate);

> -  if (HostBridge == NULL) {

> -    PCI_TRACE ("HostBridgeConstructor(): FAIL to allocate resources");

> -    return EFI_OUT_OF_RESOURCES;

> -  }

> -

> -  // It will also create a device handle for the PCI Host Bridge (as HostBridge->Handle == NULL)

> -  Status = gBS->InstallMultipleProtocolInterfaces (

> -                    &HostBridge->Handle,

> -                    &gEfiPciHostBridgeResourceAllocationProtocolGuid, &HostBridge->ResAlloc,

> -                    NULL

> -                    );

> -  if (EFI_ERROR (Status)) {

> -    PCI_TRACE ("HostBridgeConstructor(): FAIL to install resource allocator");

> -    FreePool (HostBridge);

> -    return EFI_DEVICE_ERROR;

> -  } else {

> -    PCI_TRACE ("HostBridgeConstructor(): SUCCEED to install resource allocator");

> -  }

> -

> -  Status = gBS->LocateProtocol (&gEfiCpuIo2ProtocolGuid, NULL, (VOID **)(&(HostBridge->CpuIo)));

> -  ASSERT_EFI_ERROR (Status);

> -

> -  Status = gBS->LocateProtocol (&gEfiMetronomeArchProtocolGuid, NULL, (VOID **)(&(HostBridge->Metronome)));

> -  ASSERT_EFI_ERROR (Status);

> -

> -  HostBridge->ImageHandle = ImageHandle;

> -

> -  *Instance = HostBridge;

> -  return EFI_SUCCESS;

> -}

> -

> -EFI_STATUS

> -HostBridgeDestructor (

> -  IN PCI_HOST_BRIDGE_INSTANCE* HostBridge

> -  )

> -{

> -  EFI_STATUS Status;

> -

> -  Status = gBS->UninstallMultipleProtocolInterfaces (

> -                      HostBridge->Handle,

> -                      &gEfiPciHostBridgeResourceAllocationProtocolGuid, &HostBridge->ResAlloc,

> -                      NULL

> -                      );

> -

> -  if (HostBridge->RootBridge) {

> -    PciRbDestructor (HostBridge->RootBridge);

> -  }

> -

> -  FreePool (HostBridge);

> -

> -  return Status;

> -}

> -

> -/**

> -  Entry point of this driver

> -

> -  @param ImageHandle     Handle of driver image

> -  @param SystemTable     Point to EFI_SYSTEM_TABLE

> -

> -  @retval EFI_OUT_OF_RESOURCES  Can not allocate memory resource

> -  @retval EFI_DEVICE_ERROR      Can not install the protocol instance

> -  @retval EFI_SUCCESS           Success to initialize the Pci host bridge.

> -**/

> -EFI_STATUS

> -EFIAPI

> -PciHostBridgeEntryPoint (

> -  IN EFI_HANDLE        ImageHandle,

> -  IN EFI_SYSTEM_TABLE  *SystemTable

> -  )

> -{

> -  EFI_STATUS                  Status;

> -

> -  PCI_TRACE ("PciHostBridgeEntryPoint()");

> -

> -  // Creation of the PCI Host Bridge Instance

> -  Status = HostBridgeConstructor (&gpPciHostBridgeInstance, ImageHandle);

> -  if (EFI_ERROR (Status)) {

> -    PCI_TRACE ("PciHostBridgeEntryPoint(): ERROR: Fail to construct PCI Host Bridge.");

> -    return Status;

> -  }

> -

> -  // Creation of the PCIe Root Bridge

> -  Status = PciRbConstructor (gpPciHostBridgeInstance, PciRbDescriptions.AcpiUid, PciRbDescriptions.MemAllocAttributes);

> -  if (EFI_ERROR (Status)) {

> -    PCI_TRACE ("PciHostBridgeEntryPoint(): ERROR: Fail to construct PCI Root Bridge.");

> -    return Status;

> -  }

> -  ASSERT (gpPciHostBridgeInstance->RootBridge->Signature == PCI_ROOT_BRIDGE_SIGNATURE);

> -

> -  // PCI 32bit Memory Space

> -  Status = gDS->AddMemorySpace (

> -    EfiGcdMemoryTypeMemoryMappedIo,

> -    PCI_MEM32_BASE,

> -    PCI_MEM32_SIZE,

> -    0

> -  );

> -

> -  // PCI 64bit Memory Space

> -  Status = gDS->AddMemorySpace (

> -    EfiGcdMemoryTypeMemoryMappedIo,

> -    PCI_MEM64_BASE,

> -    PCI_MEM64_SIZE,

> -    0

> -  );

> -

> -  return EFI_SUCCESS;

> -}

> -

> -EFI_STATUS

> -EFIAPI

> -PciHostBridgeUnload (

> -  IN EFI_HANDLE  ImageHandle

> -  )

> -{

> -  EFI_STATUS Status;

> -

> -  // Free Reserved memory space in GCD

> -  gDS->RemoveMemorySpace (PCI_MEM32_BASE, PCI_MEM32_SIZE);

> -  gDS->RemoveMemorySpace (PCI_MEM64_BASE, PCI_MEM64_SIZE);

> -

> -  // Free the allocated memory

> -  Status = HostBridgeDestructor (gpPciHostBridgeInstance);

> -  ASSERT_EFI_ERROR (Status);

> -

> -  return Status;

> -}

> diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.h b/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.h

> deleted file mode 100644

> index e53f4fa3a8d8..000000000000

> --- a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.h

> +++ /dev/null

> @@ -1,324 +0,0 @@

> -/** @file

> -*  Header containing the structure specific to the Xpress-RICH3 PCIe Root Complex

> -*

> -*  Copyright (c) 2011-2015, ARM Ltd. All rights reserved.

> -*

> -*  This program and the accompanying materials

> -*  are licensed and made available under the terms and conditions of the BSD License

> -*  which accompanies this distribution.  The full text of the license may be found at

> -*  http://opensource.org/licenses/bsd-license.php

> -*

> -*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> -*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> -*

> -**/

> -

> -#ifndef __PCIHOSTBRIDGE_H

> -#define __PCIHOSTBRIDGE_H

> -

> -#include <PiDxe.h>

> -

> -#include "XPressRich3.h"

> -

> -#include <IndustryStandard/Pci.h>

> -#include <IndustryStandard/Acpi.h>

> -

> -#include <Library/BaseLib.h>

> -#include <Library/BaseMemoryLib.h>

> -#include <Library/DebugLib.h>

> -#include <Library/DxeServicesTableLib.h>

> -#include <Library/IoLib.h>

> -#include <Library/MemoryAllocationLib.h>

> -#include <Library/PcdLib.h>

> -#include <Library/UefiBootServicesTableLib.h>

> -

> -#include <Protocol/PciHostBridgeResourceAllocation.h>

> -#include <Protocol/PciRootBridgeIo.h>

> -#include <Protocol/PciIo.h>

> -#include <Protocol/DevicePath.h>

> -#include <Protocol/CpuIo2.h>

> -#include <Protocol/Metronome.h>

> -

> -#define PCI_TRACE(txt)  DEBUG((EFI_D_VERBOSE, "ARM_PCI: " txt "\n"))

> -

> -#define PCIE_ROOTPORT_WRITE32(Add, Val) { UINT32 Value = (UINT32)(Val); CpuIo->Mem.Write (CpuIo,EfiCpuIoWidthUint32,(UINT64)(PcdGet64 (PcdPcieRootPortBaseAddress)+(Add)),1,&Value); }

> -#define PCIE_ROOTPORT_READ32(Add, Val) { CpuIo->Mem.Read (CpuIo,EfiCpuIoWidthUint32,(UINT64)(PcdGet64 (PcdPcieRootPortBaseAddress)+(Add)),1,&Val); }

> -

> -#define PCIE_CONTROL_WRITE32(Add, Val) { UINT32 Value = (UINT32)(Val); CpuIo->Mem.Write (CpuIo,EfiCpuIoWidthUint32,(UINT64)(PcdGet64 (PcdPcieControlBaseAddress)+(Add)),1,&Value); }

> -#define PCIE_CONTROL_READ32(Add, Val) { CpuIo->Mem.Read (CpuIo,EfiCpuIoWidthUint32,(UINT64)(PcdGet64 (PcdPcieControlBaseAddress)+(Add)),1,&Val); }

> -

> -/**

> - * PCI Root Bridge Device Path (ACPI Device Node + End Node)

> - */

> -typedef struct {

> -  ACPI_HID_DEVICE_PATH          Acpi;

> -  EFI_DEVICE_PATH_PROTOCOL      End;

> -} EFI_PCI_ROOT_BRIDGE_DEVICE_PATH;

> -

> -typedef enum {

> -  ResTypeIo = 0,

> -  ResTypeMem32,

> -  ResTypePMem32,

> -  ResTypeMem64,

> -  ResTypePMem64,

> -  ResTypeMax

> -} PCI_RESOURCE_TYPE;

> -

> -#define ACPI_SPECFLAG_PREFETCHABLE      0x06

> -#define EFI_RESOURCE_NONEXISTENT        0xFFFFFFFFFFFFFFFFULL

> -#define EFI_RESOURCE_LESS               0xFFFFFFFFFFFFFFFEULL

> -

> -typedef struct {

> -  UINT64  Base;

> -  UINT64  Length;

> -  UINT64  Alignment;

> -} PCI_RESOURCE_ALLOC;

> -

> -typedef struct _PCI_HOST_BRIDGE_INSTANCE PCI_HOST_BRIDGE_INSTANCE;

> -

> -/**

> - * PCI Root Bridge Instance structure

> - **/

> -typedef struct {

> -  UINTN                            Signature;

> -  EFI_HANDLE                       Handle;

> -  PCI_HOST_BRIDGE_INSTANCE        *HostBridge;

> -  //

> -  // Set Type of memory allocation (could be EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM

> -  // and EFI_PCI_HOST_BRIDGE_MEM64_DECODE).

> -  //

> -  UINT64                           MemAllocAttributes;

> -  PCI_RESOURCE_ALLOC               ResAlloc[ResTypeMax];

> -  UINTN                            BusStart;

> -  UINTN                            BusLength;

> -  UINT64                           Supports;

> -  UINT64                           Attributes;

> -  EFI_PCI_ROOT_BRIDGE_DEVICE_PATH  DevicePath;

> -  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  Io;

> -} PCI_ROOT_BRIDGE_INSTANCE;

> -

> -/**

> - * PCI Host Bridge Instance structure

> - **/

> -struct _PCI_HOST_BRIDGE_INSTANCE {

> -  UINTN                                             Signature;

> -  EFI_HANDLE                                        Handle;

> -  EFI_HANDLE                                        ImageHandle;

> -  PCI_ROOT_BRIDGE_INSTANCE                         *RootBridge;

> -  //

> -  // The enumeration cannot be restarted after the process goes into the non initial

> -  // enumeration phase.

> -  //

> -  BOOLEAN                                           CanRestarted;

> -  EFI_CPU_IO2_PROTOCOL                             *CpuIo;

> -  EFI_METRONOME_ARCH_PROTOCOL                      *Metronome;

> -  EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  ResAlloc;

> -};

> -

> -#define PCI_HOST_BRIDGE_SIGNATURE                   SIGNATURE_32 ('e', 'h', 's', 't')

> -#define PCI_ROOT_BRIDGE_SIGNATURE                   SIGNATURE_32 ('e', '2', 'p', 'b')

> -#define INSTANCE_FROM_RESOURCE_ALLOCATION_THIS(a)   CR (a, PCI_HOST_BRIDGE_INSTANCE, ResAlloc, PCI_HOST_BRIDGE_SIGNATURE)

> -#define INSTANCE_FROM_ROOT_BRIDGE_IO_THIS(a)        CR (a, PCI_ROOT_BRIDGE_INSTANCE, Io, PCI_ROOT_BRIDGE_SIGNATURE)

> -

> -/**

> - * PCI Host Bridge Resource Allocator Functions

> - **/

> -EFI_STATUS PciHbRaNotifyPhase (

> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,

> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE     Phase

> -  );

> -

> -EFI_STATUS PciHbRaGetNextRootBridge (

> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

> -  IN OUT EFI_HANDLE                                    *RootBridgeHandle

> -  );

> -

> -EFI_STATUS PciHbRaGetAllocAttributes (

> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

> -  IN  EFI_HANDLE                                        RootBridgeHandle,

> -  OUT UINT64                                           *Attributes

> -  );

> -

> -EFI_STATUS PciHbRaStartBusEnumeration (

> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

> -  IN  EFI_HANDLE                                        RootBridgeHandle,

> -  OUT VOID                                            **Configuration

> -  );

> -

> -EFI_STATUS PciHbRaSetBusNumbers (

> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

> -  IN EFI_HANDLE                                         RootBridgeHandle,

> -  IN VOID                                              *Configuration

> -  );

> -

> -EFI_STATUS PciHbRaSubmitResources (

> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

> -  IN EFI_HANDLE                                         RootBridgeHandle,

> -  IN VOID                                              *Configuration

> -  );

> -

> -EFI_STATUS PciHbRaGetProposedResources (

> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

> -  IN  EFI_HANDLE                                        RootBridgeHandle,

> -  OUT VOID                                            **Configuration

> -  );

> -

> -EFI_STATUS PciHbRaPreprocessController (

> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

> -  IN  EFI_HANDLE                                        RootBridgeHandle,

> -  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS       PciAddress,

> -  IN  EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE      Phase

> -  );

> -

> -

> -/**

> - * PCI Root Bridge

> - **/

> -EFI_STATUS PciRbPollMem (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,

> -  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

> -  IN  UINT64                                   Address,

> -  IN  UINT64                                   Mask,

> -  IN  UINT64                                   Value,

> -  IN  UINT64                                   Delay,

> -  OUT UINT64                                   *Result

> -  );

> -

> -EFI_STATUS PciRbPollIo (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,

> -  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

> -  IN  UINT64                                   Address,

> -  IN  UINT64                                   Mask,

> -  IN  UINT64                                   Value,

> -  IN  UINT64                                   Delay,

> -  OUT UINT64                                   *Result

> -  );

> -

> -EFI_STATUS PciRbMemRead (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

> -  IN     UINT64                                   Address,

> -  IN     UINTN                                    Count,

> -  IN OUT VOID                                     *Buffer

> -  );

> -

> -EFI_STATUS PciRbMemWrite (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

> -  IN     UINT64                                   Address,

> -  IN     UINTN                                    Count,

> -  IN OUT VOID                                     *Buffer

> -  );

> -

> -EFI_STATUS PciRbIoRead (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

> -  IN     UINT64                                   Address,

> -  IN     UINTN                                    Count,

> -  IN OUT VOID                                     *Buffer

> -  );

> -

> -EFI_STATUS PciRbIoWrite (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

> -  IN     UINT64                                   Address,

> -  IN     UINTN                                    Count,

> -  IN OUT VOID                                     *Buffer

> -  );

> -

> -EFI_STATUS PciRbPciRead (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

> -  IN     UINT64                                   Address,

> -  IN     UINTN                                    Count,

> -  IN OUT VOID                                     *Buffer

> -  );

> -

> -EFI_STATUS PciRbPciWrite (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

> -  IN     UINT64                                   Address,

> -  IN     UINTN                                    Count,

> -  IN OUT VOID                                     *Buffer

> -  );

> -

> -EFI_STATUS PciRbCopyMem (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

> -  IN     UINT64                                   DestAddress,

> -  IN     UINT64                                   SrcAddress,

> -  IN     UINTN                                    Count

> -  );

> -

> -EFI_STATUS PciRbMap (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL                *This,

> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION  Operation,

> -  IN     VOID                                       *HostAddress,

> -  IN OUT UINTN                                      *NumberOfBytes,

> -  OUT    EFI_PHYSICAL_ADDRESS                       *DeviceAddress,

> -  OUT    VOID                                       **Mapping

> -  );

> -

> -EFI_STATUS PciRbUnMap (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,

> -  IN  VOID                                     *Mapping

> -  );

> -

> -EFI_STATUS PciRbAllocateBuffer (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

> -  IN     EFI_ALLOCATE_TYPE                        Type,

> -  IN     EFI_MEMORY_TYPE                          MemoryType,

> -  IN     UINTN                                    Pages,

> -  IN OUT VOID                                     **HostAddress,

> -  IN     UINT64                                   Attributes

> -  );

> -

> -EFI_STATUS PciRbFreeBuffer (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,

> -  IN  UINTN                                    Pages,

> -  IN  VOID                                     *HostAddress

> -  );

> -

> -EFI_STATUS PciRbFlush (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *This

> -  );

> -

> -EFI_STATUS PciRbSetAttributes (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

> -  IN     UINT64                                   Attributes,

> -  IN OUT UINT64                                   *ResourceBase,

> -  IN OUT UINT64                                   *ResourceLength

> -  );

> -

> -EFI_STATUS PciRbGetAttributes (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,

> -  OUT UINT64                                   *Supports,

> -  OUT UINT64                                   *Attributes

> -  );

> -

> -EFI_STATUS PciRbConfiguration (

> -  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL          *This,

> -  OUT VOID                                     **Resources

> -  );

> -

> -/**

> - * PCI Root Bridge Functions

> - **/

> -EFI_STATUS

> -PciRbConstructor (

> -  IN  PCI_HOST_BRIDGE_INSTANCE *HostBridge,

> -  IN  UINT32 PciAcpiUid,

> -  IN  UINT64 MemAllocAttributes

> -  );

> -

> -EFI_STATUS

> -PciRbDestructor (

> -  IN  PCI_ROOT_BRIDGE_INSTANCE* RootBridge

> -  );

> -

> -EFI_STATUS

> -HWPciRbInit (

> -  IN  EFI_CPU_IO2_PROTOCOL *CpuIo

> -  );

> -

> -#endif

> diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeDxe.inf b/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeDxe.inf

> deleted file mode 100644

> index de28c805ae6e..000000000000

> --- a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeDxe.inf

> +++ /dev/null

> @@ -1,76 +0,0 @@

> -#/** @file

> -#  INF file for the Xpress-RICH3 PCIe Root Complex

> -#

> -#  Copyright (c) 2011-2015, ARM Ltd. All rights reserved.

> -#

> -#  This program and the accompanying materials

> -#  are licensed and made available under the terms and conditions of the BSD License

> -#  which accompanies this distribution.  The full text of the license may be found at

> -#  http://opensource.org/licenses/bsd-license.php

> -#

> -#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> -#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> -#

> -#**/

> -

> -[Defines]

> -  INF_VERSION                    = 0x00010005

> -  BASE_NAME                      = PciHostBridge

> -  FILE_GUID                      = C62F4B20-681E-11DF-8F0D-0002A5D5C51B

> -  MODULE_TYPE                    = DXE_DRIVER

> -  VERSION_STRING                 = 1.0

> -

> -  ENTRY_POINT                    = PciHostBridgeEntryPoint

> -  UNLOAD_IMAGE                   = PciHostBridgeUnload

> -

> -[Packages]

> -  MdePkg/MdePkg.dec

> -  ArmPkg/ArmPkg.dec

> -  EmbeddedPkg/EmbeddedPkg.dec

> -  ArmPlatformPkg/ArmPlatformPkg.dec

> -  ArmPlatformPkg/ArmJunoPkg/ArmJuno.dec

> -

> -[LibraryClasses]

> -  UefiDriverEntryPoint

> -  UefiBootServicesTableLib

> -  MemoryAllocationLib

> -  DxeServicesTableLib

> -  CacheMaintenanceLib

> -  DmaLib

> -

> -[Sources]

> -  PciHostBridge.c

> -  PciHostBridgeResourceAllocation.c

> -  PciRootBridge.c

> -  XPressRich3.c

> -

> -[Protocols]

> -  gEfiPciHostBridgeResourceAllocationProtocolGuid # Produced

> -  gEfiPciRootBridgeIoProtocolGuid                 # Produced

> -  gEfiDevicePathProtocolGuid                      # Produced

> -  gEfiCpuIo2ProtocolGuid                          # Consumed

> -  gEfiMetronomeArchProtocolGuid                   # Consumed

> -

> -[FeaturePcd]

> -  gArmJunoTokenSpaceGuid.PcdPciMaxPayloadFixup

> -

> -[Pcd.common]

> -  gArmTokenSpaceGuid.PcdSystemMemoryBase

> -  gArmTokenSpaceGuid.PcdSystemMemorySize

> -

> -  gArmTokenSpaceGuid.PcdPciBusMin

> -  gArmTokenSpaceGuid.PcdPciBusMax

> -  gArmTokenSpaceGuid.PcdPciIoBase

> -  gArmTokenSpaceGuid.PcdPciIoSize

> -  gArmTokenSpaceGuid.PcdPciMmio32Base

> -  gArmTokenSpaceGuid.PcdPciMmio32Size

> -  gArmTokenSpaceGuid.PcdPciMmio64Base

> -  gArmTokenSpaceGuid.PcdPciMmio64Size

> -

> -  gArmJunoTokenSpaceGuid.PcdPcieControlBaseAddress

> -  gArmJunoTokenSpaceGuid.PcdPcieRootPortBaseAddress

> -  gArmJunoTokenSpaceGuid.PcdPciConfigurationSpaceBaseAddress

> -  gArmJunoTokenSpaceGuid.PcdPciConfigurationSpaceSize

> -

> -[Depex]

> -  gEfiCpuIo2ProtocolGuid AND gEfiMetronomeArchProtocolGuid

> diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeResourceAllocation.c b/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeResourceAllocation.c

> deleted file mode 100644

> index de60db718408..000000000000

> --- a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeResourceAllocation.c

> +++ /dev/null

> @@ -1,642 +0,0 @@

> -/** @file

> -*  Implementation of the Pci Host Bridge Resource Allocation for the Xpress-RICH3 PCIe Root Complex

> -*

> -*  Copyright (c) 2011-2015, ARM Ltd. All rights reserved.

> -*

> -*  This program and the accompanying materials

> -*  are licensed and made available under the terms and conditions of the BSD License

> -*  which accompanies this distribution.  The full text of the license may be found at

> -*  http://opensource.org/licenses/bsd-license.php

> -*

> -*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> -*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> -*

> -**/

> -

> -#include "PciHostBridge.h"

> -

> -EFI_STATUS

> -PciHbRaNotifyPhase (

> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,

> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE     Phase

> -  )

> -{

> -  PCI_HOST_BRIDGE_INSTANCE    *HostBridgeInstance;

> -  PCI_ROOT_BRIDGE_INSTANCE    *RootBridgeInstance;

> -  EFI_STATUS                  Status;

> -  EFI_PHYSICAL_ADDRESS        BaseAddress;

> -  UINT64                      AddrLen;

> -  UINTN                       BitsOfAlignment;

> -

> -  HostBridgeInstance = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);

> -

> -  PCI_TRACE ("PciHbRaNotifyPhase()");

> -

> -  // Check RootBridge Signature

> -  ASSERT (HostBridgeInstance->RootBridge->Signature == PCI_ROOT_BRIDGE_SIGNATURE);

> -

> -  // The enumeration cannot be restarted after the process has been further than the first phase

> -  if (Phase == EfiPciHostBridgeBeginEnumeration) {

> -    if (!HostBridgeInstance->CanRestarted) {

> -      return EFI_NOT_READY;

> -    }

> -  } else {

> -    HostBridgeInstance->CanRestarted = FALSE;

> -  }

> -

> -  switch (Phase) {

> -  case EfiPciHostBridgeBeginEnumeration:

> -    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeBeginEnumeration)");

> -    // Resets the host bridge PCI apertures and internal data structures

> -    Status = HWPciRbInit (HostBridgeInstance->CpuIo);

> -    if (EFI_ERROR (Status)) {

> -      return Status;

> -    }

> -    break;

> -

> -  case EfiPciHostBridgeBeginBusAllocation:

> -    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeBeginBusAllocation)");

> -    // The bus allocation phase is about to begin

> -    break;

> -

> -  case EfiPciHostBridgeEndBusAllocation:

> -    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeEndBusAllocation)");

> -    // The bus allocation and bus programming phase is complete. All the PCI-to-PCI bridges have been given and written back

> -    // a bus number range into their configuration

> -    break;

> -

> -  case EfiPciHostBridgeBeginResourceAllocation:

> -    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeBeginResourceAllocation)");

> -    // The resource allocation phase is about to begin.

> -    break;

> -

> -  case EfiPciHostBridgeAllocateResources:

> -    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeAllocateResources)");

> -    // Allocates resources per previously submitted requests for all the PCI root bridges. The resources have been submitted to

> -    // PciHbRaSubmitResources() before.

> -

> -    RootBridgeInstance = HostBridgeInstance->RootBridge;

> -    if (RootBridgeInstance->ResAlloc[ResTypeIo].Length != 0) {

> -      BitsOfAlignment = HighBitSet64 (RootBridgeInstance->ResAlloc[ResTypeIo].Alignment) + 1;     // Get the number of '1' in Alignment

> -      AddrLen = RootBridgeInstance->ResAlloc[ResTypeIo].Length;

> -

> -      Status = gDS->AllocateIoSpace (

> -                  EfiGcdAllocateAnySearchBottomUp,

> -                  EfiGcdIoTypeIo,

> -                  BitsOfAlignment,

> -                  AddrLen,

> -                  &BaseAddress,

> -                  HostBridgeInstance->ImageHandle,

> -                  NULL

> -               );

> -      // If error then ResAlloc[n].Base ==0

> -      if (!EFI_ERROR (Status)) {

> -        RootBridgeInstance->ResAlloc[ResTypeIo].Base   = (UINTN)BaseAddress;

> -      }

> -    }

> -

> -    if (RootBridgeInstance->ResAlloc[ResTypeMem32].Length != 0) {

> -      BitsOfAlignment = HighBitSet64 (RootBridgeInstance->ResAlloc[ResTypeMem32].Alignment) + 1;  // Get the number of '1' in Alignment

> -      AddrLen = RootBridgeInstance->ResAlloc[ResTypeMem32].Length;

> -

> -      // Top of the 32bit PCI Memory space

> -      BaseAddress = FixedPcdGet64 (PcdPciMmio32Base) + FixedPcdGet64 (PcdPciMmio32Size);

> -

> -      Status = gDS->AllocateMemorySpace (

> -                  EfiGcdAllocateMaxAddressSearchTopDown,

> -                  EfiGcdMemoryTypeMemoryMappedIo,

> -                  BitsOfAlignment,

> -                  AddrLen,

> -                  &BaseAddress,

> -                  HostBridgeInstance->ImageHandle,

> -                  NULL

> -               );

> -

> -      // Ensure the allocation is in the 32bit PCI memory space

> -      if (!EFI_ERROR (Status) && (BaseAddress >= FixedPcdGet64 (PcdPciMmio32Base))) {

> -        RootBridgeInstance->ResAlloc[ResTypeMem32].Base   = (UINTN)BaseAddress;

> -      }

> -    }

> -    if (RootBridgeInstance->ResAlloc[ResTypePMem32].Length != 0) {

> -      BitsOfAlignment = HighBitSet64 (RootBridgeInstance->ResAlloc[ResTypePMem32].Alignment) + 1;  // Get the number of '1' in Alignment

> -      AddrLen = RootBridgeInstance->ResAlloc[ResTypePMem32].Length;

> -

> -      // Top of the 32bit PCI Memory space

> -      BaseAddress = FixedPcdGet64 (PcdPciMmio32Base) + FixedPcdGet64 (PcdPciMmio32Size);

> -

> -      Status = gDS->AllocateMemorySpace (

> -                  EfiGcdAllocateMaxAddressSearchTopDown,

> -                  EfiGcdMemoryTypeMemoryMappedIo,

> -                  BitsOfAlignment,

> -                  AddrLen,

> -                  &BaseAddress,

> -                  HostBridgeInstance->ImageHandle,

> -                  NULL

> -               );

> -

> -      // Ensure the allocation is in the 32bit PCI memory space

> -      if (!EFI_ERROR (Status) && (BaseAddress >= FixedPcdGet64 (PcdPciMmio32Base))) {

> -        RootBridgeInstance->ResAlloc[ResTypePMem32].Base = (UINTN)BaseAddress;

> -      }

> -    }

> -    if (RootBridgeInstance->ResAlloc[ResTypeMem64].Length != 0) {

> -      BitsOfAlignment = HighBitSet64 (RootBridgeInstance->ResAlloc[ResTypeMem64].Alignment) + 1;  // Get the number of '1' in Alignment

> -      AddrLen = RootBridgeInstance->ResAlloc[ResTypeMem64].Length;

> -

> -      // Top of the 64bit PCI Memory space

> -      BaseAddress = FixedPcdGet64 (PcdPciMmio64Base) + FixedPcdGet64 (PcdPciMmio64Size);

> -

> -      Status = gDS->AllocateMemorySpace (

> -                  EfiGcdAllocateMaxAddressSearchTopDown,

> -                  EfiGcdMemoryTypeMemoryMappedIo,

> -                  BitsOfAlignment,

> -                  AddrLen,

> -                  &BaseAddress,

> -                  HostBridgeInstance->ImageHandle,

> -                  NULL

> -               );

> -

> -      // Ensure the allocation is in the 64bit PCI memory space

> -      if (!EFI_ERROR (Status) && (BaseAddress >= FixedPcdGet64 (PcdPciMmio64Base))) {

> -        RootBridgeInstance->ResAlloc[ResTypeMem64].Base   = (UINTN)BaseAddress;

> -      }

> -    }

> -    if (RootBridgeInstance->ResAlloc[ResTypePMem64].Length != 0) {

> -      BitsOfAlignment = HighBitSet64 (RootBridgeInstance->ResAlloc[ResTypePMem64].Alignment) + 1;  //Get the number of '1' in Alignment

> -      AddrLen = RootBridgeInstance->ResAlloc[ResTypePMem64].Length;

> -

> -      // Top of the 64bit PCI Memory space

> -      BaseAddress = FixedPcdGet64 (PcdPciMmio64Base) + FixedPcdGet64 (PcdPciMmio64Size);

> -

> -      Status = gDS->AllocateMemorySpace (

> -                  EfiGcdAllocateMaxAddressSearchTopDown,

> -                  EfiGcdMemoryTypeMemoryMappedIo,

> -                  BitsOfAlignment,

> -                  AddrLen,

> -                  &BaseAddress,

> -                  HostBridgeInstance->ImageHandle,

> -                  NULL

> -               );

> -

> -      // Ensure the allocation is in the 64bit PCI memory space

> -      if (!EFI_ERROR (Status) && (BaseAddress >= FixedPcdGet64 (PcdPciMmio64Base))) {

> -        RootBridgeInstance->ResAlloc[ResTypePMem64].Base   = (UINTN)BaseAddress;

> -      }

> -    }

> -

> -    break;

> -

> -  case EfiPciHostBridgeSetResources:

> -    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeSetResources)");

> -    // Programs the host bridge hardware to decode previously allocated resources (proposed resources)

> -    // for all the PCI root bridges. The PCI bus driver will now program the resources

> -    break;

> -

> -  case EfiPciHostBridgeFreeResources:

> -    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeFreeResources)");

> -    // Deallocates resources that were previously allocated for all the PCI root bridges and resets the

> -    // I/O and memory apertures to their initial state.*/

> -    break;

> -

> -  case EfiPciHostBridgeEndResourceAllocation:

> -    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeEndResourceAllocation)");

> -    break;

> -

> -  case EfiPciHostBridgeEndEnumeration:

> -    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeEndEnumeration)");

> -    break;

> -

> -  default:

> -    DEBUG ((EFI_D_INFO, "PciHbRaNotifyPhase(Phase:%d)\n", Phase));

> -    ASSERT (0);

> -  }

> -

> -  return EFI_SUCCESS;

> -}

> -

> -/**

> - * PciHbRaGetNextRootBridge() returns the next root bridge attached to the 'This' PCI Host Bridge.

> - * As we have only got one PCI Root Bridge in this PCI interface, we return either this root bridge

> - * if it the first time we call this function (*RootBridgeHandle == NULL) or we return EFI_NOT_FOUND

> - **/

> -EFI_STATUS

> -PciHbRaGetNextRootBridge (

> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

> -  IN OUT EFI_HANDLE                                    *RootBridgeHandle

> -  )

> -{

> -  PCI_HOST_BRIDGE_INSTANCE              *HostBridgeInstance;

> -

> -  PCI_TRACE ("PciHbRaGetNextRootBridge()");

> -

> -  HostBridgeInstance = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);

> -  ASSERT (HostBridgeInstance->RootBridge != NULL);

> -

> -  //Check RootBridge Signature

> -  ASSERT (HostBridgeInstance->RootBridge->Signature == PCI_ROOT_BRIDGE_SIGNATURE);

> -

> -  if (*RootBridgeHandle == NULL) {

> -    *RootBridgeHandle = HostBridgeInstance->RootBridge->Handle;

> -    return EFI_SUCCESS;

> -  } else if (*RootBridgeHandle == HostBridgeInstance->RootBridge->Handle) {

> -    return EFI_NOT_FOUND;

> -  } else {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -}

> -

> -/** PciHbRaGetAllocAttributes() returns the resource allocation attributes supported by this PCI Root Bridge.

> - *  A PCI Root bridge could support these types :

> - *      - EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM : does not support separate windows for nonprefetchable and prefetchable memory.

> - *      - EFI_PCI_HOST_BRIDGE_MEM64_DECODE : supports 64-bit memory windows

> - **/

> -EFI_STATUS

> -PciHbRaGetAllocAttributes (

> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

> -  IN  EFI_HANDLE                                        RootBridgeHandle,

> -  OUT UINT64                                           *Attributes

> -  )

> -{

> -  PCI_HOST_BRIDGE_INSTANCE    *HostBridgeInstance;

> -

> -  PCI_TRACE ("PciHbRaGetAllocAttributes()");

> -

> -  HostBridgeInstance = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);

> -

> -  // Check if the RootBridgeHandle is the one managed by this PCI Host Bridge

> -  ASSERT (HostBridgeInstance->RootBridge != NULL);

> -  if (HostBridgeInstance->RootBridge->Handle != RootBridgeHandle) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  *Attributes = HostBridgeInstance->RootBridge->MemAllocAttributes;

> -  return EFI_SUCCESS;

> -}

> -

> -EFI_STATUS

> -PciHbRaStartBusEnumeration (

> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

> -  IN  EFI_HANDLE                                        RootBridgeHandle,

> -  OUT VOID                                            **Configuration

> -  )

> -{

> -  VOID    *Buffer;

> -  UINT8   *Ptr;

> -  PCI_HOST_BRIDGE_INSTANCE    *HostBridgeInstance;

> -

> -  // Fill an ACPI descriptor table with the Bus Number Range. This information will be used by the PCI Bus driver

> -  // to set bus numbers to PCI-to-PCI bridge.

> -  PCI_TRACE ("PciHbRaStartBusEnumeration()");

> -

> -  HostBridgeInstance = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);

> -

> -  Buffer = AllocateZeroPool (sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) + sizeof (EFI_ACPI_END_TAG_DESCRIPTOR));

> -  if (Buffer == NULL) {

> -    return EFI_OUT_OF_RESOURCES;

> -  }

> -

> -  Ptr = (UINT8 *)Buffer;

> -

> -  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->Desc = ACPI_ADDRESS_SPACE_DESCRIPTOR;    // QWORD Address space Descriptor

> -  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->Len  = 0x2B;    // Length of this descriptor in bytes not including the first two fields

> -  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->ResType = ACPI_ADDRESS_SPACE_TYPE_BUS;  // Resource Type Bus Number Range

> -  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->GenFlag = 0;

> -  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->SpecificFlag = 0;

> -  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->AddrSpaceGranularity = 0;

> -  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->AddrRangeMin = HostBridgeInstance->RootBridge->BusStart;   // Bus Start

> -  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->AddrRangeMax = 0;    // Bus Max

> -  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->AddrTranslationOffset = 0;

> -  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->AddrLen = FixedPcdGet32 (PcdPciBusMax) - FixedPcdGet32 (PcdPciBusMin) + 1;

> -

> -  Ptr = Ptr + sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR);

> -  ((EFI_ACPI_END_TAG_DESCRIPTOR *)Ptr)->Desc = ACPI_END_TAG_DESCRIPTOR;

> -  ((EFI_ACPI_END_TAG_DESCRIPTOR *)Ptr)->Checksum = 0x0;

> -

> -  *Configuration = Buffer;

> -  return EFI_SUCCESS;

> -}

> -

> -EFI_STATUS

> -PciHbRaSetBusNumbers (

> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

> -  IN EFI_HANDLE                                         RootBridgeHandle,

> -  IN VOID                                              *Configuration

> -  )

> -{

> -  PCI_HOST_BRIDGE_INSTANCE    *HostBridgeInstance;

> -  UINT8                       *Ptr;

> -  UINTN                       BusStart;

> -  UINTN                       BusEnd;

> -  UINTN                       BusLen;

> -

> -  PCI_TRACE ("PciHbRaSetBusNumbers()");

> -

> -  Ptr = Configuration;

> -  if (*Ptr != ACPI_ADDRESS_SPACE_DESCRIPTOR) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  // Check if the passed ACPI descriptor table define a Bus Number Range

> -  if (((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->ResType != ACPI_ADDRESS_SPACE_TYPE_BUS) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  // Check if the Configuration only passed one ACPI Descriptor (+ End Descriptor)

> -  if (*((UINT8*)(Ptr + sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR))) != ACPI_END_TAG_DESCRIPTOR) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  HostBridgeInstance = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);

> -  ASSERT (HostBridgeInstance->RootBridge != NULL);

> -  if (HostBridgeInstance->RootBridge->Handle != RootBridgeHandle) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  BusStart = (UINTN)((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->AddrRangeMin;

> -  BusLen = (UINTN)((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->AddrLen;

> -  BusEnd = BusStart + BusLen - 1;

> -

> -  ASSERT (BusStart <= BusEnd); // We should at least have PCI_BUS_ROOT and PCI_SWITCH_BUS

> -  ASSERT ((BusStart >= HostBridgeInstance->RootBridge->BusStart) && (BusLen <= HostBridgeInstance->RootBridge->BusLength));

> -

> -  HostBridgeInstance->RootBridge->BusStart  = BusStart;

> -  HostBridgeInstance->RootBridge->BusLength = BusLen;

> -

> -  return EFI_SUCCESS;

> -}

> -

> -/**

> - * This function is used to submit all the I/O and memory resources that are required by the specified

> - * PCI root bridge.

> - **/

> -EFI_STATUS

> -PciHbRaSubmitResources (

> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

> -  IN EFI_HANDLE                                         RootBridgeHandle,

> -  IN VOID                                              *Configuration

> -  )

> -{

> -  PCI_HOST_BRIDGE_INSTANCE            *HostBridgeInstance;

> -  PCI_ROOT_BRIDGE_INSTANCE            *RootBridgeInstance;

> -  UINT8                               *Ptr;

> -  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *Desc;

> -  PCI_RESOURCE_TYPE                   ResType;

> -

> -  PCI_TRACE ("PciHbRaSubmitResources()");

> -

> -  HostBridgeInstance = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);

> -

> -  if (Configuration == NULL) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  // Check if the ACPI Descriptor tables is conformed

> -  Ptr = (UINT8 *)Configuration;

> -  while (*Ptr == ACPI_ADDRESS_SPACE_DESCRIPTOR) { // QWORD Address Space descriptor

> -    Ptr += sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) ;

> -  }

> -  if (*Ptr != ACPI_END_TAG_DESCRIPTOR) { // End tag

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  // Check the RootBridgeHandle

> -  RootBridgeInstance = HostBridgeInstance->RootBridge;

> -  ASSERT (RootBridgeInstance != NULL);

> -  if (RootBridgeHandle != HostBridgeInstance->RootBridge->Handle) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  Ptr = (UINT8 *)Configuration;

> -  while ( *Ptr == ACPI_ADDRESS_SPACE_DESCRIPTOR) { // While the entry is an ACPI Descriptor Table

> -    Desc = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr;

> -

> -    // Check if the description is valid

> -    if (Desc->AddrLen > 0xffffffff) {

> -      return EFI_INVALID_PARAMETER;

> -    }

> -

> -    if ((Desc->AddrRangeMax >= 0xffffffff) || (Desc->AddrRangeMax != (GetPowerOfTwo64 (Desc->AddrRangeMax + 1) - 1))) {

> -      return EFI_INVALID_PARAMETER;

> -    }

> -

> -    switch (Desc->ResType) {

> -    case ACPI_ADDRESS_SPACE_TYPE_MEM:

> -      // Check invalid Address Space Granularity

> -      if ((Desc->AddrSpaceGranularity != 32) && (Desc->AddrSpaceGranularity != 64)) {

> -        return EFI_INVALID_PARAMETER;

> -      }

> -

> -      // check the memory resource request is supported by PCI root bridge

> -      if (RootBridgeInstance->MemAllocAttributes == EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM && Desc->SpecificFlag == 0x06) {

> -        return EFI_INVALID_PARAMETER;

> -      }

> -

> -      if (Desc->AddrSpaceGranularity == 32) {

> -        if (Desc->SpecificFlag == ACPI_SPECFLAG_PREFETCHABLE) {

> -          ResType = ResTypePMem32;

> -        } else {

> -          ResType = ResTypeMem32;

> -        }

> -      } else {

> -        if (Desc->SpecificFlag == ACPI_SPECFLAG_PREFETCHABLE) {

> -          ResType = ResTypePMem64;

> -        } else {

> -          ResType = ResTypeMem64;

> -        }

> -      }

> -      RootBridgeInstance->ResAlloc[ResType].Length = Desc->AddrLen;

> -      RootBridgeInstance->ResAlloc[ResType].Alignment = Desc->AddrRangeMax;

> -      RootBridgeInstance->ResAlloc[ResType].Base = Desc->AddrRangeMin;

> -      break;

> -    case ACPI_ADDRESS_SPACE_TYPE_IO:

> -      RootBridgeInstance->ResAlloc[ResTypeIo].Length = Desc->AddrLen;

> -      RootBridgeInstance->ResAlloc[ResTypeIo].Alignment = Desc->AddrRangeMax;

> -      RootBridgeInstance->ResAlloc[ResTypeIo].Base = 0;

> -      break;

> -    default:

> -      ASSERT (0); // Could be the case Desc->ResType == ACPI_ADDRESS_SPACE_TYPE_BUS

> -      break;

> -    }

> -    Ptr += sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR);

> -  }

> -

> -  return EFI_SUCCESS;

> -}

> -

> -/** Returns the proposed resource settings for the specified PCI root bridge. The resources have been submitted by

> -  * PciHbRaSubmitResources() before

> -  **/

> -EFI_STATUS

> -PciHbRaGetProposedResources (

> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

> -  IN  EFI_HANDLE                                        RootBridgeHandle,

> -  OUT VOID                                            **Configuration

> -  )

> -{

> -  PCI_HOST_BRIDGE_INSTANCE            *HostBridgeInstance;

> -  PCI_ROOT_BRIDGE_INSTANCE            *RootBridgeInstance;

> -  UINT32                              i;

> -  UINT32                              ResAllocCount;

> -  VOID                                *Buffer;

> -  UINT8                               *Ptr;

> -  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *Desc;

> -

> -  PCI_TRACE ("PciHbRaGetProposedResources()");

> -

> -  HostBridgeInstance = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);

> -

> -  // Check the RootBridgeHandle

> -  RootBridgeInstance = HostBridgeInstance->RootBridge;

> -  ASSERT (RootBridgeInstance != NULL);

> -  if (RootBridgeHandle != HostBridgeInstance->RootBridge->Handle) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  // Count the number of Resource Allocated for this Root Bridge

> -  ResAllocCount = 0;

> -  for (i = 0; i < ResTypeMax; i++) {

> -    if (RootBridgeInstance->ResAlloc[i].Length != 0)  ResAllocCount++;

> -  }

> -

> -  if (ResAllocCount ==  0) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  Buffer = AllocateZeroPool (ResAllocCount * sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) + sizeof (EFI_ACPI_END_TAG_DESCRIPTOR));

> -  if (Buffer == NULL) {

> -    return EFI_OUT_OF_RESOURCES;

> -  }

> -

> -  Ptr = Buffer;

> -  for (i = 0; i < ResTypeMax; i++) {

> -    if (RootBridgeInstance->ResAlloc[i].Length != 0) {    // Base != 0 if the resource has been allocated

> -      Desc = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr;

> -

> -      Desc->Desc = ACPI_ADDRESS_SPACE_DESCRIPTOR;

> -      Desc->Len  = 0x2B;

> -      Desc->GenFlag = 0;

> -      Desc->AddrRangeMax = 0;

> -

> -      switch (i) {

> -      case ResTypeIo:

> -        Desc->ResType = ACPI_ADDRESS_SPACE_TYPE_IO;

> -        Desc->SpecificFlag = 0;

> -        Desc->AddrSpaceGranularity = 0;

> -        break;

> -      case ResTypeMem32:

> -        Desc->ResType = ACPI_ADDRESS_SPACE_TYPE_MEM;

> -        Desc->SpecificFlag = 0;

> -        Desc->AddrSpaceGranularity = 32;

> -        break;

> -      case ResTypePMem32:

> -        Desc->ResType = ACPI_ADDRESS_SPACE_TYPE_MEM;

> -        Desc->SpecificFlag = ACPI_SPECFLAG_PREFETCHABLE;

> -        Desc->AddrSpaceGranularity = 32;

> -        break;

> -      case ResTypeMem64:

> -        Desc->ResType = ACPI_ADDRESS_SPACE_TYPE_MEM;

> -        Desc->SpecificFlag = 0;

> -        Desc->AddrSpaceGranularity = 64;

> -        break;

> -      case ResTypePMem64:

> -        Desc->ResType = ACPI_ADDRESS_SPACE_TYPE_MEM;

> -        Desc->SpecificFlag = ACPI_SPECFLAG_PREFETCHABLE;

> -        Desc->AddrSpaceGranularity = 64;

> -        break;

> -      }

> -      Desc->AddrRangeMin = RootBridgeInstance->ResAlloc[i].Base;

> -      Desc->AddrTranslationOffset = (RootBridgeInstance->ResAlloc[i].Base != 0) ? EFI_RESOURCE_SATISFIED : EFI_RESOURCE_LESS;

> -      Desc->AddrLen = RootBridgeInstance->ResAlloc[i].Length;

> -      Ptr += sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR);

> -    }

> -  }

> -

> -  ((EFI_ACPI_END_TAG_DESCRIPTOR *)Ptr)->Desc = ACPI_END_TAG_DESCRIPTOR;

> -  ((EFI_ACPI_END_TAG_DESCRIPTOR *)Ptr)->Checksum = 0x0;

> -

> -  *Configuration = Buffer;

> -  return EFI_SUCCESS;

> -}

> -

> -EFI_STATUS

> -PciHbRaPreprocessController (

> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

> -  IN  EFI_HANDLE                                        RootBridgeHandle,

> -  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS       PciAddress,

> -  IN  EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE      Phase

> -  )

> -{

> -  PCI_HOST_BRIDGE_INSTANCE*   HostBridge;

> -  PCI_ROOT_BRIDGE_INSTANCE*   RootBridge;

> -  UINT32                      CapabilityPtr;

> -  UINT32                      CapabilityEntry;

> -  UINT16                      CapabilityID;

> -  UINT32                      DeviceCapability;

> -

> -  PCI_TRACE ("PciHbRaPreprocessController()");

> -

> -  if (FeaturePcdGet (PcdPciMaxPayloadFixup)) {

> -    // Do Max payload fixup for every devices

> -    if (Phase == EfiPciBeforeResourceCollection) {

> -      // Get RootBridge Instance from Host Bridge Instance

> -      HostBridge = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);

> -      RootBridge = HostBridge->RootBridge;

> -

> -      // Get the first PCI Capability

> -      CapabilityPtr = PCI_CAPBILITY_POINTER_OFFSET;

> -      RootBridge->Io.Pci.Read (

> -          &RootBridge->Io,

> -          EfiPciWidthUint8,

> -          EFI_PCI_ADDRESS (PciAddress.Bus, PciAddress.Device, PciAddress.Function, CapabilityPtr),

> -          1,

> -          &CapabilityPtr

> -      );

> -      CapabilityPtr &= 0x1FF;

> -

> -      // Get Pci Express Capability

> -      while (CapabilityPtr != 0) {

> -        RootBridge->Io.Pci.Read (

> -            &RootBridge->Io,

> -            EfiPciWidthUint16,

> -            EFI_PCI_ADDRESS (PciAddress.Bus, PciAddress.Device, PciAddress.Function, CapabilityPtr),

> -            1,

> -            &CapabilityEntry

> -            );

> -

> -        CapabilityID = (UINT8)CapabilityEntry;

> -

> -        // Is PCIe capability ?

> -        if (CapabilityID == EFI_PCI_CAPABILITY_ID_PCIEXP) {

> -          // Get PCIe Device Capabilities

> -          RootBridge->Io.Pci.Read (

> -              &RootBridge->Io,

> -              EfiPciWidthUint32,

> -              EFI_PCI_ADDRESS (PciAddress.Bus, PciAddress.Device, PciAddress.Function, CapabilityPtr + 0x8),

> -              1,

> -              &DeviceCapability

> -              );

> -

> -          // Force the Max Payload to 128 Bytes (128 Bytes Max Payload Size = 0)

> -          DeviceCapability &= ~ ((UINT32)(0x7 << 5 ));

> -          // Max Read Request Size to 128 Bytes (128 Bytes Max Read Request Size = 0)

> -          DeviceCapability &= ~ ((UINT32)(0x7 << 12));

> -          // Enable all error reporting

> -          DeviceCapability |= 0xF;

> -

> -          RootBridge->Io.Pci.Write (

> -              &RootBridge->Io,

> -              EfiPciWidthUint32,

> -              EFI_PCI_ADDRESS (PciAddress.Bus, PciAddress.Device, PciAddress.Function, CapabilityPtr + 0x8),

> -              1,

> -              &DeviceCapability

> -              );

> -

> -          return EFI_SUCCESS;

> -        }

> -        CapabilityPtr = (CapabilityEntry >> 8) & 0xFF;

> -      }

> -    }

> -  }

> -

> -  return EFI_SUCCESS;

> -}

> diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciRootBridge.c b/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciRootBridge.c

> deleted file mode 100644

> index 72d09156c066..000000000000

> --- a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciRootBridge.c

> +++ /dev/null

> @@ -1,748 +0,0 @@

> -/** @file

> -*  Implementation of the PCI Root Bridge Protocol for XPress-RICH3 PCIe Root Complex

> -*

> -*  Copyright (c) 2011-2015, ARM Ltd. All rights reserved.

> -*

> -*  This program and the accompanying materials

> -*  are licensed and made available under the terms and conditions of the BSD License

> -*  which accompanies this distribution.  The full text of the license may be found at

> -*  http://opensource.org/licenses/bsd-license.php

> -*

> -*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> -*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> -*

> -**/

> -

> -#include "PciHostBridge.h"

> -

> -#include <Library/DevicePathLib.h>

> -#include <Library/DmaLib.h>

> -

> -#define CPUIO_FROM_ROOT_BRIDGE_INSTANCE(Instance) (Instance->HostBridge->CpuIo)

> -#define METRONOME_FROM_ROOT_BRIDGE_INSTANCE(Instance) (Instance->HostBridge->Metronome)

> -

> -/**

> - * PCI Root Bridge Instance Templates

> - */

> -STATIC CONST EFI_PCI_ROOT_BRIDGE_DEVICE_PATH  gDevicePathTemplate = {

> -    {

> -      { ACPI_DEVICE_PATH,

> -        ACPI_DP,

> -        { (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)),

> -          (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) }

> -      },

> -      EISA_PNP_ID (0x0A03),

> -      0

> -    },

> -    {

> -      END_DEVICE_PATH_TYPE,

> -      END_ENTIRE_DEVICE_PATH_SUBTYPE,

> -      { END_DEVICE_PATH_LENGTH, 0 }

> -    }

> -};

> -

> -STATIC CONST EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL gIoTemplate = {

> -    0,

> -    PciRbPollMem,

> -    PciRbPollIo,

> -    {

> -      PciRbMemRead,

> -      PciRbMemWrite

> -    },

> -    {

> -      PciRbIoRead,

> -      PciRbIoWrite

> -    },

> -    {

> -      PciRbPciRead,

> -      PciRbPciWrite

> -    },

> -    PciRbCopyMem,

> -    PciRbMap,

> -    PciRbUnMap,

> -    PciRbAllocateBuffer,

> -    PciRbFreeBuffer,

> -    PciRbFlush,

> -    PciRbGetAttributes,

> -    PciRbSetAttributes,

> -    PciRbConfiguration,

> -    0

> -  };

> -

> -typedef struct {

> -    EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR     SpaceDesp[ResTypeMax+1];

> -    EFI_ACPI_END_TAG_DESCRIPTOR           EndDesp;

> -} RESOURCE_CONFIGURATION;

> -

> -

> -RESOURCE_CONFIGURATION Configuration = {

> -   {{ACPI_ADDRESS_SPACE_DESCRIPTOR, 0x2B, ACPI_ADDRESS_SPACE_TYPE_IO , 0, 0, 0, 0, 0, 0, 0},

> -    {ACPI_ADDRESS_SPACE_DESCRIPTOR, 0x2B, ACPI_ADDRESS_SPACE_TYPE_MEM, 0, 0, 32, 0, 0, 0, 0},

> -    {ACPI_ADDRESS_SPACE_DESCRIPTOR, 0x2B, ACPI_ADDRESS_SPACE_TYPE_MEM, 0, 6, 32, 0, 0, 0, 0},

> -    {ACPI_ADDRESS_SPACE_DESCRIPTOR, 0x2B, ACPI_ADDRESS_SPACE_TYPE_MEM, 0, 0, 64, 0, 0, 0, 0},

> -    {ACPI_ADDRESS_SPACE_DESCRIPTOR, 0x2B, ACPI_ADDRESS_SPACE_TYPE_MEM, 0, 6, 64, 0, 0, 0, 0},

> -    {ACPI_ADDRESS_SPACE_DESCRIPTOR, 0x2B, ACPI_ADDRESS_SPACE_TYPE_BUS, 0, 0, 0, 0, 255, 0, 255}},

> -    {ACPI_END_TAG_DESCRIPTOR, 0}

> -};

> -

> -

> -EFI_STATUS

> -PciRbPollMem (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,

> -  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

> -  IN  UINT64                                   Address,

> -  IN  UINT64                                   Mask,

> -  IN  UINT64                                   Value,

> -  IN  UINT64                                   Delay,

> -  OUT UINT64                                   *Result

> -  )

> -{

> -  EFI_STATUS                      Status;

> -  UINT64                          NumberOfTicks;

> -  UINT32                          Remainder;

> -  PCI_ROOT_BRIDGE_INSTANCE        *RootBridgeInstance;

> -  EFI_METRONOME_ARCH_PROTOCOL     *Metronome;

> -

> -  PCI_TRACE ("PciRbPollMem()");

> -

> -  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);

> -  Metronome = METRONOME_FROM_ROOT_BRIDGE_INSTANCE (RootBridgeInstance);

> -

> -  if (Result == NULL) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  if (Width > EfiPciWidthUint64) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  // No matter what, always do a single poll.

> -  Status = This->Mem.Read (This, Width, Address, 1, Result);

> -  if (EFI_ERROR (Status)) {

> -    return Status;

> -  }

> -  if ((*Result & Mask) == Value) {

> -    return EFI_SUCCESS;

> -  }

> -

> -  if (Delay == 0) {

> -    return EFI_SUCCESS;

> -  }

> -

> -  NumberOfTicks = DivU64x32Remainder (Delay, (UINT32) Metronome->TickPeriod, &Remainder);

> -  if (Remainder != 0) {

> -    NumberOfTicks += 1;

> -  }

> -  NumberOfTicks += 1;

> -

> -  while (NumberOfTicks) {

> -    Metronome->WaitForTick (Metronome, 1);

> -

> -    Status = This->Mem.Read (This, Width, Address, 1, Result);

> -    if (EFI_ERROR (Status)) {

> -      return Status;

> -    }

> -

> -    if ((*Result & Mask) == Value) {

> -      return EFI_SUCCESS;

> -    }

> -

> -    NumberOfTicks -= 1;

> -  }

> -

> -  return EFI_TIMEOUT;

> -}

> -

> -EFI_STATUS

> -PciRbPollIo (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,

> -  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

> -  IN  UINT64                                   Address,

> -  IN  UINT64                                   Mask,

> -  IN  UINT64                                   Value,

> -  IN  UINT64                                   Delay,

> -  OUT UINT64                                   *Result

> -  )

> -{

> -  EFI_STATUS                      Status;

> -  UINT64                          NumberOfTicks;

> -  UINT32                          Remainder;

> -  PCI_ROOT_BRIDGE_INSTANCE        *RootBridgeInstance;

> -  EFI_METRONOME_ARCH_PROTOCOL     *Metronome;

> -

> -  PCI_TRACE ("PciRbPollIo()");

> -

> -  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);

> -  Metronome = METRONOME_FROM_ROOT_BRIDGE_INSTANCE (RootBridgeInstance);

> -

> -  if (Result == NULL) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  if (Width > EfiPciWidthUint64) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  // No matter what, always do a single poll.

> -  Status = This->Io.Read (This, Width, Address, 1, Result);

> -  if (EFI_ERROR (Status)) {

> -    return Status;

> -  }

> -  if ((*Result & Mask) == Value) {

> -    return EFI_SUCCESS;

> -  }

> -

> -  if (Delay == 0) {

> -    return EFI_SUCCESS;

> -  }

> -

> -  NumberOfTicks = DivU64x32Remainder (Delay, (UINT32) Metronome->TickPeriod, &Remainder);

> -  if (Remainder != 0) {

> -    NumberOfTicks += 1;

> -  }

> -  NumberOfTicks += 1;

> -

> -  while (NumberOfTicks) {

> -    Metronome->WaitForTick (Metronome, 1);

> -

> -    Status = This->Io.Read (This, Width, Address, 1, Result);

> -    if (EFI_ERROR (Status)) {

> -        return Status;

> -    }

> -

> -    if ((*Result & Mask) == Value) {

> -        return EFI_SUCCESS;

> -    }

> -

> -    NumberOfTicks -= 1;

> -  }

> -

> -  return EFI_TIMEOUT;

> -}

> -

> -EFI_STATUS

> -PciRbMemRead (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

> -  IN     UINT64                                   Address,

> -  IN     UINTN                                    Count,

> -  IN OUT VOID                                     *Buffer

> -  )

> -{

> -  PCI_ROOT_BRIDGE_INSTANCE    *RootBridgeInstance;

> -  EFI_CPU_IO2_PROTOCOL        *CpuIo;

> -

> -  PCI_TRACE ("PciRbMemRead()");

> -

> -  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);

> -  CpuIo = CPUIO_FROM_ROOT_BRIDGE_INSTANCE (RootBridgeInstance);

> -

> -  if (Buffer == NULL) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  if (Width >= EfiPciWidthMaximum) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  if (((Address < PCI_MEM32_BASE) || (Address > (PCI_MEM32_BASE + PCI_MEM32_SIZE))) &&

> -      ((Address < PCI_MEM64_BASE) || (Address > (PCI_MEM64_BASE + PCI_MEM64_SIZE)))) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  return CpuIo->Mem.Read (CpuIo, (EFI_CPU_IO_PROTOCOL_WIDTH)Width, Address, Count, Buffer);

> -}

> -

> -EFI_STATUS

> -PciRbMemWrite (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

> -  IN     UINT64                                   Address,

> -  IN     UINTN                                    Count,

> -  IN OUT VOID                                     *Buffer

> -  )

> -{

> -  PCI_ROOT_BRIDGE_INSTANCE    *RootBridgeInstance;

> -  EFI_CPU_IO2_PROTOCOL        *CpuIo;

> -

> -  PCI_TRACE ("PciRbMemWrite()");

> -

> -  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);

> -  CpuIo = CPUIO_FROM_ROOT_BRIDGE_INSTANCE (RootBridgeInstance);

> -

> -  if (Buffer == NULL) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  if (Width >= EfiPciWidthMaximum) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  if (((Address < PCI_MEM32_BASE) || (Address > (PCI_MEM32_BASE + PCI_MEM32_SIZE))) &&

> -      ((Address < PCI_MEM64_BASE) || (Address > (PCI_MEM64_BASE + PCI_MEM64_SIZE)))) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  return CpuIo->Mem.Write (CpuIo, (EFI_CPU_IO_PROTOCOL_WIDTH)Width, Address, Count, Buffer);

> -}

> -

> -EFI_STATUS

> -PciRbIoRead (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

> -  IN     UINT64                                   Address,

> -  IN     UINTN                                    Count,

> -  IN OUT VOID                                     *Buffer

> -  )

> -{

> -  PCI_TRACE ("PciRbIoRead()");

> -

> -  if (Buffer == NULL) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  if (Width >= EfiPciWidthMaximum) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  // IO currently unsupported

> -  return EFI_INVALID_PARAMETER;

> -}

> -

> -EFI_STATUS

> -PciRbIoWrite (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

> -  IN     UINT64                                   Address,

> -  IN     UINTN                                    Count,

> -  IN OUT VOID                                     *Buffer

> -  )

> -{

> -  PCI_TRACE ("PciRbIoWrite()");

> -

> -  if (Buffer == NULL) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  if (Width >= EfiPciWidthMaximum) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  // IO currently unsupported

> -  return EFI_INVALID_PARAMETER;

> -}

> -

> -EFI_STATUS

> -PciRbPciRead (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

> -  IN     UINT64                                   EfiAddress,

> -  IN     UINTN                                    Count,

> -  IN OUT VOID                                     *Buffer

> -  )

> -{

> -  UINT32                      Offset;

> -  PCI_ROOT_BRIDGE_INSTANCE    *RootBridgeInstance;

> -  EFI_CPU_IO2_PROTOCOL        *CpuIo;

> -  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *EfiPciAddress;

> -  UINT64                      Address;

> -

> -  EfiPciAddress  = (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *)&EfiAddress;

> -  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);

> -  CpuIo = CPUIO_FROM_ROOT_BRIDGE_INSTANCE (RootBridgeInstance);

> -

> -  if (Buffer == NULL) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  if (Width >= EfiPciWidthMaximum) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  if (EfiPciAddress->ExtendedRegister) {

> -    Offset = EfiPciAddress->ExtendedRegister;

> -  } else {

> -    Offset = EfiPciAddress->Register;

> -  }

> -

> -  // The UEFI PCI enumerator scans for devices at all possible addresses,

> -  // and ignores some PCI rules - this results in some hardware being

> -  // detected multiple times. We work around this by faking absent

> -  // devices

> -  if ((EfiPciAddress->Bus == 0) && ((EfiPciAddress->Device != 0) || (EfiPciAddress->Function != 0))) {

> -    *((UINT32 *)Buffer) = 0xffffffff;

> -    return EFI_SUCCESS;

> -  }

> -  if ((EfiPciAddress->Bus == 1) && ((EfiPciAddress->Device != 0) || (EfiPciAddress->Function != 0))) {

> -    *((UINT32 *)Buffer) = 0xffffffff;

> -    return EFI_SUCCESS;

> -  }

> -

> -  // Work around incorrect class ID in the root bridge

> -  if ((EfiPciAddress->Bus == 0) && (EfiPciAddress->Device == 0) && (EfiPciAddress->Function == 0) && (Offset == 8)) {

> -    *((UINT32 *)Buffer) = 0x06040001;

> -    return EFI_SUCCESS;

> -   }

> -

> -  Address = PCI_ECAM_BASE + ((EfiPciAddress->Bus << 20) |

> -                         (EfiPciAddress->Device << 15) |

> -                         (EfiPciAddress->Function << 12) | Offset);

> -

> -  if ((Address < PCI_ECAM_BASE) || (Address > PCI_ECAM_BASE + PCI_ECAM_SIZE)) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  return CpuIo->Mem.Read (CpuIo, (EFI_CPU_IO_PROTOCOL_WIDTH)Width, Address, Count, Buffer);

> -}

> -

> -EFI_STATUS

> -PciRbPciWrite (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

> -  IN     UINT64                                   EfiAddress,

> -  IN     UINTN                                    Count,

> -  IN OUT VOID                                     *Buffer

> -  )

> -{

> -  UINT32                      Offset;

> -  PCI_ROOT_BRIDGE_INSTANCE    *RootBridgeInstance;

> -  EFI_CPU_IO2_PROTOCOL        *CpuIo;

> -  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *EfiPciAddress;

> -  UINT64                      Address;

> -

> -  EfiPciAddress  = (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *)&EfiAddress;

> -  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);

> -  CpuIo = CPUIO_FROM_ROOT_BRIDGE_INSTANCE (RootBridgeInstance);

> -

> -  if (Buffer == NULL) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  if (Width >= EfiPciWidthMaximum) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  if (EfiPciAddress->ExtendedRegister)

> -    Offset = EfiPciAddress->ExtendedRegister;

> -  else

> -    Offset = EfiPciAddress->Register;

> -

> -  Address = PCI_ECAM_BASE + ((EfiPciAddress->Bus << 20) |

> -                         (EfiPciAddress->Device << 15) |

> -                         (EfiPciAddress->Function << 12) | Offset);

> -

> -  if (Address < PCI_ECAM_BASE || Address > PCI_ECAM_BASE + PCI_ECAM_SIZE) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  return CpuIo->Mem.Write (CpuIo, (EFI_CPU_IO_PROTOCOL_WIDTH)Width, Address, Count, Buffer);

> -}

> -

> -EFI_STATUS

> -PciRbCopyMem (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

> -  IN     UINT64                                   DestAddress,

> -  IN     UINT64                                   SrcAddress,

> -  IN     UINTN                                    Count

> -  )

> -{

> -  EFI_STATUS  Status;

> -  BOOLEAN     Direction;

> -  UINTN       Stride;

> -  UINTN       Index;

> -  UINT64      Result;

> -

> -  PCI_TRACE ("PciRbCopyMem()");

> -

> -  if (Width > EfiPciWidthUint64) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  if (DestAddress == SrcAddress) {

> -    return EFI_SUCCESS;

> -  }

> -

> -  Stride = (UINTN)(1 << Width);

> -

> -  Direction = TRUE;

> -  if ((DestAddress > SrcAddress) && (DestAddress < (SrcAddress + Count * Stride))) {

> -    Direction   = FALSE;

> -    SrcAddress  = SrcAddress  + (Count-1) * Stride;

> -    DestAddress = DestAddress + (Count-1) * Stride;

> -  }

> -

> -  for (Index = 0; Index < Count; Index++) {

> -    Status = PciRbMemRead (

> -               This,

> -               Width,

> -               SrcAddress,

> -               1,

> -               &Result

> -               );

> -    if (EFI_ERROR (Status)) {

> -      return Status;

> -    }

> -    Status = PciRbMemWrite (

> -               This,

> -               Width,

> -               DestAddress,

> -               1,

> -               &Result

> -               );

> -    if (EFI_ERROR (Status)) {

> -      return Status;

> -    }

> -    if (Direction) {

> -      SrcAddress  += Stride;

> -      DestAddress += Stride;

> -    } else {

> -      SrcAddress  -= Stride;

> -      DestAddress -= Stride;

> -    }

> -  }

> -  return EFI_SUCCESS;

> -}

> -

> -EFI_STATUS

> -PciRbMap (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL                *This,

> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION  Operation,

> -  IN     VOID                                       *HostAddress,

> -  IN OUT UINTN                                      *NumberOfBytes,

> -  OUT    EFI_PHYSICAL_ADDRESS                       *DeviceAddress,

> -  OUT    VOID                                       **Mapping

> -  )

> -{

> -  DMA_MAP_OPERATION   DmaOperation;

> -

> -  PCI_TRACE ("PciRbMap()");

> -

> -  if (Operation == EfiPciOperationBusMasterRead ||

> -      Operation == EfiPciOperationBusMasterRead64) {

> -    DmaOperation = MapOperationBusMasterRead;

> -  } else if (Operation == EfiPciOperationBusMasterWrite ||

> -             Operation == EfiPciOperationBusMasterWrite64) {

> -    DmaOperation = MapOperationBusMasterWrite;

> -  } else if (Operation == EfiPciOperationBusMasterCommonBuffer ||

> -             Operation == EfiPciOperationBusMasterCommonBuffer64) {

> -    DmaOperation = MapOperationBusMasterCommonBuffer;

> -  } else {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -  return DmaMap (DmaOperation, HostAddress, NumberOfBytes, DeviceAddress, Mapping);

> -}

> -

> -EFI_STATUS

> -PciRbUnMap (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,

> -  IN  VOID                                     *Mapping

> -  )

> -{

> -  PCI_TRACE ("PciRbUnMap()");

> -  return DmaUnmap (Mapping);

> -}

> -

> -EFI_STATUS

> -PciRbAllocateBuffer (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

> -  IN     EFI_ALLOCATE_TYPE                        Type,

> -  IN     EFI_MEMORY_TYPE                          MemoryType,

> -  IN     UINTN                                    Pages,

> -  IN OUT VOID                                     **HostAddress,

> -  IN     UINT64                                   Attributes

> -  )

> -{

> -  PCI_TRACE ("PciRbAllocateBuffer()");

> -

> -  if (Attributes & EFI_PCI_ATTRIBUTE_INVALID_FOR_ALLOCATE_BUFFER) {

> -    return EFI_UNSUPPORTED;

> -  }

> -

> -  return DmaAllocateBuffer (MemoryType, Pages, HostAddress);

> -}

> -

> -EFI_STATUS

> -PciRbFreeBuffer (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,

> -  IN  UINTN                                    Pages,

> -  IN  VOID                                     *HostAddress

> -  )

> -{

> -  PCI_TRACE ("PciRbFreeBuffer()");

> -  return DmaFreeBuffer (Pages, HostAddress);

> -}

> -

> -EFI_STATUS

> -PciRbFlush (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *This

> -  )

> -{

> -  PCI_TRACE ("PciRbFlush()");

> -

> -  //TODO: Not supported yet

> -

> -  return EFI_SUCCESS;

> -}

> -

> -EFI_STATUS

> -PciRbSetAttributes (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

> -  IN     UINT64                                   Attributes,

> -  IN OUT UINT64                                   *ResourceBase,

> -  IN OUT UINT64                                   *ResourceLength

> -  )

> -{

> -  PCI_ROOT_BRIDGE_INSTANCE    *RootBridgeInstance;

> -

> -  PCI_TRACE ("PciRbSetAttributes()");

> -

> -  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);

> -

> -  if (Attributes) {

> -    if ((Attributes & (~(RootBridgeInstance->Supports))) != 0) {

> -      return EFI_UNSUPPORTED;

> -    }

> -  }

> -

> -  //TODO: Cannot allowed to change attributes

> -  if (Attributes & ~RootBridgeInstance->Attributes) {

> -    return EFI_UNSUPPORTED;

> -  }

> -

> -  return EFI_SUCCESS;

> -}

> -

> -EFI_STATUS

> -PciRbGetAttributes (

> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,

> -  OUT UINT64                                   *Supported,

> -  OUT UINT64                                   *Attributes

> -  )

> -{

> -  PCI_ROOT_BRIDGE_INSTANCE    *RootBridgeInstance;

> -

> -  PCI_TRACE ("PciRbGetAttributes()");

> -

> -  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);

> -

> -  if (Attributes == NULL && Supported == NULL) {

> -    return EFI_INVALID_PARAMETER;

> -  }

> -

> -  // Set the return value for Supported and Attributes

> -  if (Supported) {

> -    *Supported  = RootBridgeInstance->Supports;

> -  }

> -

> -  if (Attributes) {

> -    *Attributes = RootBridgeInstance->Attributes;

> -  }

> -

> -  return EFI_SUCCESS;

> -}

> -

> -EFI_STATUS

> -PciRbConfiguration (

> -  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL          *This,

> -  OUT VOID                                     **Resources

> -  )

> -{

> -  PCI_ROOT_BRIDGE_INSTANCE              *RootBridge;

> -  UINTN                                 Index;

> -

> -  PCI_TRACE ("PciRbConfiguration()");

> -

> -  RootBridge = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);

> -

> -  for (Index = 0; Index < ResTypeMax; Index++) {

> -    //if (ResAlloc[Index].Length != 0) => Resource allocated

> -    if (RootBridge->ResAlloc[Index].Length != 0) {

> -      Configuration.SpaceDesp[Index].AddrRangeMin = RootBridge->ResAlloc[Index].Base;

> -      Configuration.SpaceDesp[Index].AddrRangeMax = RootBridge->ResAlloc[Index].Base + RootBridge->ResAlloc[Index].Length - 1;

> -      Configuration.SpaceDesp[Index].AddrLen      = RootBridge->ResAlloc[Index].Length;

> -    }

> -  }

> -

> -  // Set up Configuration for the bus

> -  Configuration.SpaceDesp[Index].AddrRangeMin = RootBridge->BusStart;

> -  Configuration.SpaceDesp[Index].AddrLen      = RootBridge->BusLength;

> -

> -  *Resources = &Configuration;

> -  return EFI_SUCCESS;

> -}

> -

> -EFI_STATUS

> -PciRbConstructor (

> -  IN  PCI_HOST_BRIDGE_INSTANCE *HostBridge,

> -  IN  UINT32 PciAcpiUid,

> -  IN  UINT64 MemAllocAttributes

> -  )

> -{

> -  PCI_ROOT_BRIDGE_INSTANCE* RootBridge;

> -  EFI_STATUS Status;

> -

> -  PCI_TRACE ("PciRbConstructor()");

> -

> -  // Allocate Memory for the Instance from a Template

> -  RootBridge = AllocateZeroPool (sizeof (PCI_ROOT_BRIDGE_INSTANCE));

> -  if (RootBridge == NULL) {

> -    PCI_TRACE ("PciRbConstructor(): ERROR: Out of Resources");

> -    return EFI_OUT_OF_RESOURCES;

> -  }

> -  RootBridge->Signature = PCI_ROOT_BRIDGE_SIGNATURE;

> -  CopyMem (&(RootBridge->DevicePath), &gDevicePathTemplate, sizeof (EFI_PCI_ROOT_BRIDGE_DEVICE_PATH));

> -  CopyMem (&(RootBridge->Io), &gIoTemplate, sizeof (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL));

> -

> -  // Set Parent Handle

> -  RootBridge->Io.ParentHandle = HostBridge->Handle;

> -

> -  // Attach the Root Bridge to the PCI Host Bridge Instance

> -  RootBridge->HostBridge = HostBridge;

> -

> -  // Set Device Path for this Root Bridge

> -  RootBridge->DevicePath.Acpi.UID = PciAcpiUid;

> -

> -  RootBridge->BusStart  = FixedPcdGet32 (PcdPciBusMin);

> -  RootBridge->BusLength = FixedPcdGet32 (PcdPciBusMax) - FixedPcdGet32 (PcdPciBusMin) + 1;

> -

> -  // PCI Attributes

> -  RootBridge->Supports = 0;

> -  RootBridge->Attributes = 0;

> -

> -  // Install Protocol Instances. It will also generate a device handle for the PCI Root Bridge

> -  Status = gBS->InstallMultipleProtocolInterfaces (

> -                      &RootBridge->Handle,

> -                      &gEfiDevicePathProtocolGuid, &RootBridge->DevicePath,

> -                      &gEfiPciRootBridgeIoProtocolGuid, &RootBridge->Io,

> -                      NULL

> -                      );

> -  ASSERT (RootBridge->Signature == PCI_ROOT_BRIDGE_SIGNATURE);

> -  if (EFI_ERROR (Status)) {

> -    PCI_TRACE ("PciRbConstructor(): ERROR: Fail to install Protocol Interfaces");

> -    FreePool (RootBridge);

> -    return EFI_DEVICE_ERROR;

> -  }

> -

> -  HostBridge->RootBridge = RootBridge;

> -  return EFI_SUCCESS;

> -}

> -

> -EFI_STATUS

> -PciRbDestructor (

> -  IN  PCI_ROOT_BRIDGE_INSTANCE* RootBridge

> -  )

> -{

> -  EFI_STATUS Status;

> -

> -  Status = gBS->UninstallMultipleProtocolInterfaces (

> -                        RootBridge->Handle,

> -                        &gEfiDevicePathProtocolGuid, &RootBridge->DevicePath,

> -                        &gEfiPciRootBridgeIoProtocolGuid, &RootBridge->Io,

> -                        NULL

> -                        );

> -

> -  FreePool (RootBridge);

> -

> -  return Status;

> -}

> diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.c b/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.c

> deleted file mode 100644

> index 57e9e9df54a9..000000000000

> --- a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.c

> +++ /dev/null

> @@ -1,170 +0,0 @@

> -/** @file

> -*  Initialize the XPress-RICH3 PCIe Root complex

> -*

> -*  Copyright (c) 2011-2015, ARM Ltd. All rights reserved.

> -*

> -*  This program and the accompanying materials

> -*  are licensed and made available under the terms and conditions of the BSD License

> -*  which accompanies this distribution.  The full text of the license may be found at

> -*  http://opensource.org/licenses/bsd-license.php

> -*

> -*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> -*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> -*

> -**/

> -

> -#include "PciHostBridge.h"

> -

> -#include <Protocol/Cpu.h>

> -

> -#include "ArmPlatform.h"

> -

> -EFI_CPU_ARCH_PROTOCOL   *mCpu;

> -

> -#define PCI_BRIDGE_REVISION_ID                        1

> -#define CLASS_CODE_REGISTER(Class, SubClass, ProgIf)  ((Class << 16) | (SubClass << 8) | ProgIf)

> -#define PLDA_BRIDGE_CCR                               CLASS_CODE_REGISTER(PCI_CLASS_BRIDGE, \

> -                                                                          PCI_CLASS_BRIDGE_P2P, \

> -                                                                          PCI_IF_BRIDGE_P2P)

> -

> -STATIC

> -VOID

> -SetTranslationAddressEntry (

> -  IN  EFI_CPU_IO2_PROTOCOL *CpuIo,

> -  IN UINTN                  Entry,

> -  IN UINT64                 SourceAddress,

> -  IN UINT64                 TranslatedAddress,

> -  IN UINT64                 TranslationSize,

> -  IN UINT64                 TranslationParameter

> -  )

> -{

> -  UINTN Log2Size = HighBitSet64 (TranslationSize);

> -

> -  // Ensure the size is a power of two. Restriction form the AXI Translation logic

> -  // Othwerwise we increase the translation size

> -  if (TranslationSize != (1ULL << Log2Size)) {

> -    DEBUG ((EFI_D_WARN, "PCI: The size 0x%lX of the region 0x%lx has been increased to "

> -                        "be a power of two for the AXI translation table.\n",

> -                        TranslationSize, SourceAddress));

> -    Log2Size++;

> -  }

> -

> -  PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_SRC_ADDR_LOW_SIZE,

> -      (UINT32)SourceAddress | ((Log2Size - 1) << 1) | 0x1);

> -  PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_SRC_ADDR_HI, SourceAddress >> 32);

> -

> -  PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_TRSL_ADDR_LOW, (UINT32)TranslatedAddress);

> -  PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_TRSL_ADDR_HI, TranslatedAddress >> 32);

> -

> -  PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_TRSL_PARAM, TranslationParameter);

> -}

> -

> -EFI_STATUS

> -HWPciRbInit (

> -  IN  EFI_CPU_IO2_PROTOCOL *CpuIo

> -  )

> -{

> -  UINT32 Value;

> -  UINT32 Index;

> -  UINTN  TranslationTable;

> -

> -  PCI_TRACE ("VExpressPciRbInit()");

> -

> -  PCI_TRACE ("PCIe Setting up Address Translation");

> -

> -  // The Juno PIO window is 8M, so we need full 32-bit PIO decoding.

> -  PCIE_ROOTPORT_WRITE32 (PCIE_BAR_WIN, PCIE_BAR_WIN_SUPPORT_IO | PCIE_BAR_WIN_SUPPORT_IO32 |

> -                         PCIE_BAR_WIN_SUPPORT_MEM | PCIE_BAR_WIN_SUPPORT_MEM64);

> -

> -  // Setup the PCI Configuration Registers

> -  // Offset 0a: SubClass       04 PCI-PCI Bridge

> -  // Offset 0b: BaseClass      06 Bridge Device

> -  // The Class Code register is a 24 bit and can be configured by setting up the PCIE_PCI_IDS

> -  // Refer [1] Chapter 13

> -  PCIE_ROOTPORT_WRITE32 (PCIE_PCI_IDS + PCIE_PCI_IDS_CLASSCODE_OFFSET, ((PLDA_BRIDGE_CCR << 8) | PCI_BRIDGE_REVISION_ID));

> -

> -  //

> -  // PCIE Window 0 -> AXI4 Master 0 Address Translations

> -  //

> -  TranslationTable = VEXPRESS_ATR_PCIE_WIN0;

> -

> -  // MSI Support

> -  SetTranslationAddressEntry (CpuIo, TranslationTable, ARM_JUNO_GIV2M_MSI_BASE, ARM_JUNO_GIV2M_MSI_BASE,

> -      ARM_JUNO_GIV2M_MSI_SZ, PCI_ATR_TRSLID_AXIDEVICE);

> -  TranslationTable += PCI_ATR_ENTRY_SIZE;

> -

> -  // System Memory Support

> -  SetTranslationAddressEntry (CpuIo, TranslationTable, PcdGet64 (PcdSystemMemoryBase), PcdGet64 (PcdSystemMemoryBase),

> -      PcdGet64 (PcdSystemMemorySize), PCI_ATR_TRSLID_AXIMEMORY);

> -  TranslationTable += PCI_ATR_ENTRY_SIZE;

> -  SetTranslationAddressEntry (CpuIo, TranslationTable, ARM_JUNO_EXTRA_SYSTEM_MEMORY_BASE, ARM_JUNO_EXTRA_SYSTEM_MEMORY_BASE,

> -      ARM_JUNO_EXTRA_SYSTEM_MEMORY_SZ, PCI_ATR_TRSLID_AXIMEMORY);

> -

> -  //

> -  // AXI4 Slave 1 -> PCIE Window 0 Address Translations

> -  //

> -  TranslationTable = VEXPRESS_ATR_AXI4_SLV1;

> -

> -  // PCI ECAM Support

> -  SetTranslationAddressEntry (CpuIo, TranslationTable, PCI_ECAM_BASE, PCI_ECAM_BASE, PCI_ECAM_SIZE, PCI_ATR_TRSLID_PCIE_CONF);

> -  TranslationTable += PCI_ATR_ENTRY_SIZE;

> -

> -  // PCI IO Support, the PIO space is translated from the arm MMIO PCI_IO_BASE address to the PIO base address of 0

> -  // AKA, PIO addresses used by endpoints are generally in the range of 0-64K.

> -  SetTranslationAddressEntry (CpuIo, TranslationTable, PCI_IO_BASE, 0, PCI_IO_SIZE, PCI_ATR_TRSLID_PCIE_IO);

> -  TranslationTable += PCI_ATR_ENTRY_SIZE;

> -

> -  // PCI MEM32 Support

> -  SetTranslationAddressEntry (CpuIo, TranslationTable, PCI_MEM32_BASE, PCI_MEM32_BASE, PCI_MEM32_SIZE, PCI_ATR_TRSLID_PCIE_MEMORY);

> -  TranslationTable += PCI_ATR_ENTRY_SIZE;

> -

> -  // PCI MEM64 Support

> -  SetTranslationAddressEntry (CpuIo, TranslationTable, PCI_MEM64_BASE, PCI_MEM64_BASE, PCI_MEM64_SIZE, PCI_ATR_TRSLID_PCIE_MEMORY);

> -

> -  // Add credits

> -  PCIE_ROOTPORT_WRITE32 (PCIE_VC_CRED, 0x00f0b818);

> -  PCIE_ROOTPORT_WRITE32 (PCIE_VC_CRED + 4, 0x1);

> -

> -  // Allow ECRC

> -  PCIE_ROOTPORT_WRITE32 (PCIE_PEX_SPC2, 0x6006);

> -

> -  // Reset controller

> -  PCIE_CONTROL_WRITE32 (PCIE_CONTROL_RST_CTL, PCIE_CONTROL_RST_CTL_RCPHY_REL);

> -

> -  // Wait for reset

> -  for (Index = 0; Index < 1000; Index++) {

> -    gBS->Stall (1000);

> -    PCIE_CONTROL_READ32 (PCIE_CONTROL_RST_STS, Value);

> -    if ((Value & PCIE_CONTROL_RST_STS_RCPHYPLL_OUT) == PCIE_CONTROL_RST_STS_RCPHYPLL_OUT) {

> -      break;

> -    }

> -  }

> -

> -  // Check for reset

> -  if (!(Value & PCIE_CONTROL_RST_STS_RCPHYPLL_OUT)) {

> -    DEBUG ((EFI_D_ERROR, "PCIe failed to come out of reset: %x.\n", Value));

> -    return EFI_NOT_READY;

> -  }

> -

> -  gBS->Stall (1000);

> -  PCI_TRACE ("Checking link Status...");

> -

> -  // Wait for Link Up

> -  for (Index = 0; Index < 1000; Index++) {

> -    gBS->Stall (1000);

> -    PCIE_ROOTPORT_READ32 (VEXPRESS_BASIC_STATUS, Value);

> -    if (Value & LINK_UP) {

> -      break;

> -    }

> -  }

> -

> -  // Check for link up

> -  if (!(Value & LINK_UP)) {

> -    DEBUG ((EFI_D_ERROR, "PCIe link not up: %x.\n", Value));

> -    return EFI_NOT_READY;

> -  }

> -

> -  PCIE_ROOTPORT_WRITE32 (PCIE_IMASK_LOCAL, PCIE_INT_MSI | PCIE_INT_INTx);

> -

> -  return EFI_SUCCESS;

> -}

> diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.h b/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.h

> deleted file mode 100644

> index a0c11a70567d..000000000000

> --- a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.h

> +++ /dev/null

> @@ -1,111 +0,0 @@

> -/** @file

> -*  Header containing the Xpress-RICH3 PCIe Root Complex specific values

> -*

> -*  Copyright (c) 2011-2015, ARM Ltd. All rights reserved.

> -*

> -*  This program and the accompanying materials

> -*  are licensed and made available under the terms and conditions of the BSD License

> -*  which accompanies this distribution.  The full text of the license may be found at

> -*  http://opensource.org/licenses/bsd-license.php

> -*

> -*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

> -*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

> -*

> -**/

> -

> -#ifndef __XPRESS_RICH3_H__

> -#define __XPRESS_RICH3_H__

> -

> -#include <Protocol/CpuIo2.h>

> -#include <Library/PcdLib.h>

> -

> -#define PCI_ECAM_BASE       FixedPcdGet64 (PcdPciConfigurationSpaceBaseAddress)

> -#define PCI_ECAM_SIZE       FixedPcdGet64 (PcdPciConfigurationSpaceSize)

> -#define PCI_IO_BASE         FixedPcdGet64 (PcdPciIoBase)

> -#define PCI_IO_SIZE         FixedPcdGet64 (PcdPciIoSize)

> -#define PCI_MEM32_BASE      FixedPcdGet64 (PcdPciMmio32Base)

> -#define PCI_MEM32_SIZE      FixedPcdGet64 (PcdPciMmio32Size)

> -#define PCI_MEM64_BASE      FixedPcdGet64 (PcdPciMmio64Base)

> -#define PCI_MEM64_SIZE      FixedPcdGet64 (PcdPciMmio64Size)

> -

> -/*

> - * Bridge Internal Registers

> - */

> -

> -// PCIe Available Credit Settings

> -#define PCIE_VC_CRED                            0x090

> -// PCIe PCI Standard Configuration Identification Settings registers

> -#define PCIE_PCI_IDS                            0x098

> -#define PCIE_PCI_IDS_CLASSCODE_OFFSET           0x4

> -// PCIe Specific 2 Capabilities Settings

> -#define PCIE_PEX_SPC2                           0x0d8

> -// PCIe Windows Settings register

> -#define PCIE_BAR_WIN                            0x0FC

> -// Local Processor Interrupt Mask

> -#define PCIE_IMASK_LOCAL                        0x180

> -

> -#define PCIE_BAR_WIN_SUPPORT_IO                 BIT0

> -#define PCIE_BAR_WIN_SUPPORT_IO32               BIT1

> -#define PCIE_BAR_WIN_SUPPORT_MEM                BIT2

> -#define PCIE_BAR_WIN_SUPPORT_MEM64              BIT3

> -

> -#define PCIE_INT_MSI                            BIT28

> -#define PCIE_INT_A                              BIT24

> -#define PCIE_INT_B                              BIT25

> -#define PCIE_INT_C                              BIT26

> -#define PCIE_INT_D                              BIT27

> -#define PCIE_INT_INTx                           (PCIE_INT_A | PCIE_INT_B |\

> -                                                 PCIE_INT_C | PCIE_INT_D)

> -

> -/*

> - * PCIe Control Registers

> - */

> -#define PCIE_CONTROL_RST_CTL     0x1004

> -#define PCIE_CONTROL_RST_STS     0x1008

> -

> -/*

> - * PCI Express Address Translation registers

> - * All are offsets from PcdPcieControlBaseAddress

> - */

> -#define VEXPRESS_ATR_PCIE_WIN0    0x600

> -#define VEXPRESS_ATR_AXI4_SLV0    0x800

> -#define VEXPRESS_ATR_AXI4_SLV1    0x820

> -

> -#define PCI_ATR_ENTRY_SIZE           0x20

> -#define PCI_ATR_SRC_ADDR_LOW_SIZE    0

> -#define PCI_ATR_SRC_ADDR_HI          0x4

> -#define PCI_ATR_TRSL_ADDR_LOW        0x8

> -#define PCI_ATR_TRSL_ADDR_HI         0xc

> -#define PCI_ATR_TRSL_PARAM           0x10

> -

> -#define PCI_ATR_TRSLID_AXIDEVICE     0x420004

> -#define PCI_ATR_TRSLID_AXIMEMORY     0x4e0004

> -#define PCI_ATR_TRSLID_PCIE_CONF     0x000001

> -#define PCI_ATR_TRSLID_PCIE_IO       0x020000

> -#define PCI_ATR_TRSLID_PCIE_MEMORY   0x000000

> -

> -#define PCIE_CONTROL_RST_CTL_RC_REL        (1 << 1)

> -#define PCIE_CONTROL_RST_CTL_PHY_REL       (1 << 0)

> -#define PCIE_CONTROL_RST_CTL_RCPHY_REL     (PCIE_CONTROL_RST_CTL_RC_REL | PCIE_CONTROL_RST_CTL_PHY_REL)

> -

> -#define PCIE_CONTROL_RST_STS_RC_ST         (1 << 2)

> -#define PCIE_CONTROL_RST_STS_PHY_ST        (1 << 1)

> -#define PCIE_CONTROL_RST_STS_PLL_ST        (1 << 0)

> -#define PCIE_CONTROL_RST_STS_RCPHYPLL_OUT  (PCIE_CONTROL_RST_STS_RC_ST | PCIE_CONTROL_RST_STS_PHY_ST | PCIE_CONTROL_RST_STS_PLL_ST)

> -

> -#define VEXPRESS_BASIC_STATUS       0x18

> -#define LINK_UP                     0xff

> -

> -/*

> - * Initialize Versatile Express PCIe Host Bridge

> - */

> -EFI_STATUS

> -VExpressPciRbInit (

> -  IN EFI_CPU_IO2_PROTOCOL *CpuIo

> -  );

> -

> -// Does not support neither EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM

> -// nor EFI_PCI_HOST_BRIDGE_MEM64_DECODE

> -#define PCI_MEMORY_ALLOCATION_ATTRIBUTES    0

> -

> -#endif

> -- 

> 2.9.3

> 

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Ard Biesheuvel April 5, 2017, 1:20 p.m. UTC | #2
On 5 April 2017 at 14:18, Leif Lindholm <leif.lindholm@linaro.org> wrote:
> On Tue, Apr 04, 2017 at 01:30:09PM +0100, Ard Biesheuvel wrote:

>

> Should this not have come kind of commit message?

>


Oops, sorry about that. I'm pretty sure I added one at some point, but
it got lost along the way.

>> Contributed-under: TianoCore Contribution Agreement 1.0

>> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

>> ---

>>  ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.c                   | 199 ------

>>  ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.h                   | 324 ---------

>>  ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeDxe.inf              |  76 --

>>  ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeResourceAllocation.c | 642 -----------------

>>  ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciRootBridge.c                   | 748 --------------------

>>  ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.c                     | 170 -----

>>  ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.h                     | 111 ---

>>  7 files changed, 2270 deletions(-)

>>

>> diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.c b/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.c

>> deleted file mode 100644

>> index e1a6b749e4e6..000000000000

>> --- a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.c

>> +++ /dev/null

>> @@ -1,199 +0,0 @@

>> -/** @file

>> -*  Pci Host Bridge support for the Xpress-RICH3 PCIe Root Complex

>> -*

>> -*  Copyright (c) 2011-2015, ARM Ltd. All rights reserved.

>> -*

>> -*  This program and the accompanying materials

>> -*  are licensed and made available under the terms and conditions of the BSD License

>> -*  which accompanies this distribution.  The full text of the license may be found at

>> -*  http://opensource.org/licenses/bsd-license.php

>> -*

>> -*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

>> -*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

>> -*

>> -**/

>> -

>> -#include "PciHostBridge.h"

>> -

>> -#include <Guid/EventGroup.h>

>> -

>> -/**

>> - * PCI Root Bridge Description

>> - */

>> -typedef struct {

>> -  UINT32  AcpiUid;

>> -  UINT64  MemAllocAttributes;

>> -} PCI_ROOT_BRIDGE_DESC;

>> -

>> -PCI_ROOT_BRIDGE_DESC PciRbDescriptions = {

>> -    0,                                  // AcpiUid

>> -    PCI_MEMORY_ALLOCATION_ATTRIBUTES    // MemAllocAttributes

>> -};

>> -

>> -/**

>> - * Template for PCI Host Bridge Instance

>> - **/

>> -STATIC CONST PCI_HOST_BRIDGE_INSTANCE

>> -gPciHostBridgeInstanceTemplate = {

>> -  PCI_HOST_BRIDGE_SIGNATURE,      //Signature

>> -  NULL,                           // Handle

>> -  NULL,                           // ImageHandle

>> -  NULL,                           // RootBridge

>> -  TRUE,                           // CanRestarted

>> -  NULL,                           // CpuIo

>> -  NULL,                           // Metronome

>> -  {                               // ResAlloc

>> -    PciHbRaNotifyPhase,           //   ResAlloc.NotifyPhase

>> -    PciHbRaGetNextRootBridge,     //   ResAlloc.GetNextRootBridge

>> -    PciHbRaGetAllocAttributes,    //   ResAlloc.GetAllocAttributes

>> -    PciHbRaStartBusEnumeration,   //   ResAlloc.StartBusEnumeration

>> -    PciHbRaSetBusNumbers,         //   ResAlloc.SetBusNumbers

>> -    PciHbRaSubmitResources,       //   ResAlloc.SubmitResources

>> -    PciHbRaGetProposedResources,  //   ResAlloc.GetProposedResources

>> -    PciHbRaPreprocessController   //   ResAlloc.PreprocessController

>> -  }

>> -};

>> -PCI_HOST_BRIDGE_INSTANCE* gpPciHostBridgeInstance;

>> -

>> -EFI_STATUS

>> -HostBridgeConstructor (

>> -  IN OUT PCI_HOST_BRIDGE_INSTANCE** Instance,

>> -  IN  EFI_HANDLE                    ImageHandle

>> -  )

>> -{

>> -  EFI_STATUS                  Status;

>> -  PCI_HOST_BRIDGE_INSTANCE*   HostBridge;

>> -

>> -  PCI_TRACE ("HostBridgeConstructor()");

>> -

>> -  if (Instance == NULL) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  HostBridge = AllocateCopyPool (sizeof (PCI_HOST_BRIDGE_INSTANCE), &gPciHostBridgeInstanceTemplate);

>> -  if (HostBridge == NULL) {

>> -    PCI_TRACE ("HostBridgeConstructor(): FAIL to allocate resources");

>> -    return EFI_OUT_OF_RESOURCES;

>> -  }

>> -

>> -  // It will also create a device handle for the PCI Host Bridge (as HostBridge->Handle == NULL)

>> -  Status = gBS->InstallMultipleProtocolInterfaces (

>> -                    &HostBridge->Handle,

>> -                    &gEfiPciHostBridgeResourceAllocationProtocolGuid, &HostBridge->ResAlloc,

>> -                    NULL

>> -                    );

>> -  if (EFI_ERROR (Status)) {

>> -    PCI_TRACE ("HostBridgeConstructor(): FAIL to install resource allocator");

>> -    FreePool (HostBridge);

>> -    return EFI_DEVICE_ERROR;

>> -  } else {

>> -    PCI_TRACE ("HostBridgeConstructor(): SUCCEED to install resource allocator");

>> -  }

>> -

>> -  Status = gBS->LocateProtocol (&gEfiCpuIo2ProtocolGuid, NULL, (VOID **)(&(HostBridge->CpuIo)));

>> -  ASSERT_EFI_ERROR (Status);

>> -

>> -  Status = gBS->LocateProtocol (&gEfiMetronomeArchProtocolGuid, NULL, (VOID **)(&(HostBridge->Metronome)));

>> -  ASSERT_EFI_ERROR (Status);

>> -

>> -  HostBridge->ImageHandle = ImageHandle;

>> -

>> -  *Instance = HostBridge;

>> -  return EFI_SUCCESS;

>> -}

>> -

>> -EFI_STATUS

>> -HostBridgeDestructor (

>> -  IN PCI_HOST_BRIDGE_INSTANCE* HostBridge

>> -  )

>> -{

>> -  EFI_STATUS Status;

>> -

>> -  Status = gBS->UninstallMultipleProtocolInterfaces (

>> -                      HostBridge->Handle,

>> -                      &gEfiPciHostBridgeResourceAllocationProtocolGuid, &HostBridge->ResAlloc,

>> -                      NULL

>> -                      );

>> -

>> -  if (HostBridge->RootBridge) {

>> -    PciRbDestructor (HostBridge->RootBridge);

>> -  }

>> -

>> -  FreePool (HostBridge);

>> -

>> -  return Status;

>> -}

>> -

>> -/**

>> -  Entry point of this driver

>> -

>> -  @param ImageHandle     Handle of driver image

>> -  @param SystemTable     Point to EFI_SYSTEM_TABLE

>> -

>> -  @retval EFI_OUT_OF_RESOURCES  Can not allocate memory resource

>> -  @retval EFI_DEVICE_ERROR      Can not install the protocol instance

>> -  @retval EFI_SUCCESS           Success to initialize the Pci host bridge.

>> -**/

>> -EFI_STATUS

>> -EFIAPI

>> -PciHostBridgeEntryPoint (

>> -  IN EFI_HANDLE        ImageHandle,

>> -  IN EFI_SYSTEM_TABLE  *SystemTable

>> -  )

>> -{

>> -  EFI_STATUS                  Status;

>> -

>> -  PCI_TRACE ("PciHostBridgeEntryPoint()");

>> -

>> -  // Creation of the PCI Host Bridge Instance

>> -  Status = HostBridgeConstructor (&gpPciHostBridgeInstance, ImageHandle);

>> -  if (EFI_ERROR (Status)) {

>> -    PCI_TRACE ("PciHostBridgeEntryPoint(): ERROR: Fail to construct PCI Host Bridge.");

>> -    return Status;

>> -  }

>> -

>> -  // Creation of the PCIe Root Bridge

>> -  Status = PciRbConstructor (gpPciHostBridgeInstance, PciRbDescriptions.AcpiUid, PciRbDescriptions.MemAllocAttributes);

>> -  if (EFI_ERROR (Status)) {

>> -    PCI_TRACE ("PciHostBridgeEntryPoint(): ERROR: Fail to construct PCI Root Bridge.");

>> -    return Status;

>> -  }

>> -  ASSERT (gpPciHostBridgeInstance->RootBridge->Signature == PCI_ROOT_BRIDGE_SIGNATURE);

>> -

>> -  // PCI 32bit Memory Space

>> -  Status = gDS->AddMemorySpace (

>> -    EfiGcdMemoryTypeMemoryMappedIo,

>> -    PCI_MEM32_BASE,

>> -    PCI_MEM32_SIZE,

>> -    0

>> -  );

>> -

>> -  // PCI 64bit Memory Space

>> -  Status = gDS->AddMemorySpace (

>> -    EfiGcdMemoryTypeMemoryMappedIo,

>> -    PCI_MEM64_BASE,

>> -    PCI_MEM64_SIZE,

>> -    0

>> -  );

>> -

>> -  return EFI_SUCCESS;

>> -}

>> -

>> -EFI_STATUS

>> -EFIAPI

>> -PciHostBridgeUnload (

>> -  IN EFI_HANDLE  ImageHandle

>> -  )

>> -{

>> -  EFI_STATUS Status;

>> -

>> -  // Free Reserved memory space in GCD

>> -  gDS->RemoveMemorySpace (PCI_MEM32_BASE, PCI_MEM32_SIZE);

>> -  gDS->RemoveMemorySpace (PCI_MEM64_BASE, PCI_MEM64_SIZE);

>> -

>> -  // Free the allocated memory

>> -  Status = HostBridgeDestructor (gpPciHostBridgeInstance);

>> -  ASSERT_EFI_ERROR (Status);

>> -

>> -  return Status;

>> -}

>> diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.h b/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.h

>> deleted file mode 100644

>> index e53f4fa3a8d8..000000000000

>> --- a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.h

>> +++ /dev/null

>> @@ -1,324 +0,0 @@

>> -/** @file

>> -*  Header containing the structure specific to the Xpress-RICH3 PCIe Root Complex

>> -*

>> -*  Copyright (c) 2011-2015, ARM Ltd. All rights reserved.

>> -*

>> -*  This program and the accompanying materials

>> -*  are licensed and made available under the terms and conditions of the BSD License

>> -*  which accompanies this distribution.  The full text of the license may be found at

>> -*  http://opensource.org/licenses/bsd-license.php

>> -*

>> -*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

>> -*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

>> -*

>> -**/

>> -

>> -#ifndef __PCIHOSTBRIDGE_H

>> -#define __PCIHOSTBRIDGE_H

>> -

>> -#include <PiDxe.h>

>> -

>> -#include "XPressRich3.h"

>> -

>> -#include <IndustryStandard/Pci.h>

>> -#include <IndustryStandard/Acpi.h>

>> -

>> -#include <Library/BaseLib.h>

>> -#include <Library/BaseMemoryLib.h>

>> -#include <Library/DebugLib.h>

>> -#include <Library/DxeServicesTableLib.h>

>> -#include <Library/IoLib.h>

>> -#include <Library/MemoryAllocationLib.h>

>> -#include <Library/PcdLib.h>

>> -#include <Library/UefiBootServicesTableLib.h>

>> -

>> -#include <Protocol/PciHostBridgeResourceAllocation.h>

>> -#include <Protocol/PciRootBridgeIo.h>

>> -#include <Protocol/PciIo.h>

>> -#include <Protocol/DevicePath.h>

>> -#include <Protocol/CpuIo2.h>

>> -#include <Protocol/Metronome.h>

>> -

>> -#define PCI_TRACE(txt)  DEBUG((EFI_D_VERBOSE, "ARM_PCI: " txt "\n"))

>> -

>> -#define PCIE_ROOTPORT_WRITE32(Add, Val) { UINT32 Value = (UINT32)(Val); CpuIo->Mem.Write (CpuIo,EfiCpuIoWidthUint32,(UINT64)(PcdGet64 (PcdPcieRootPortBaseAddress)+(Add)),1,&Value); }

>> -#define PCIE_ROOTPORT_READ32(Add, Val) { CpuIo->Mem.Read (CpuIo,EfiCpuIoWidthUint32,(UINT64)(PcdGet64 (PcdPcieRootPortBaseAddress)+(Add)),1,&Val); }

>> -

>> -#define PCIE_CONTROL_WRITE32(Add, Val) { UINT32 Value = (UINT32)(Val); CpuIo->Mem.Write (CpuIo,EfiCpuIoWidthUint32,(UINT64)(PcdGet64 (PcdPcieControlBaseAddress)+(Add)),1,&Value); }

>> -#define PCIE_CONTROL_READ32(Add, Val) { CpuIo->Mem.Read (CpuIo,EfiCpuIoWidthUint32,(UINT64)(PcdGet64 (PcdPcieControlBaseAddress)+(Add)),1,&Val); }

>> -

>> -/**

>> - * PCI Root Bridge Device Path (ACPI Device Node + End Node)

>> - */

>> -typedef struct {

>> -  ACPI_HID_DEVICE_PATH          Acpi;

>> -  EFI_DEVICE_PATH_PROTOCOL      End;

>> -} EFI_PCI_ROOT_BRIDGE_DEVICE_PATH;

>> -

>> -typedef enum {

>> -  ResTypeIo = 0,

>> -  ResTypeMem32,

>> -  ResTypePMem32,

>> -  ResTypeMem64,

>> -  ResTypePMem64,

>> -  ResTypeMax

>> -} PCI_RESOURCE_TYPE;

>> -

>> -#define ACPI_SPECFLAG_PREFETCHABLE      0x06

>> -#define EFI_RESOURCE_NONEXISTENT        0xFFFFFFFFFFFFFFFFULL

>> -#define EFI_RESOURCE_LESS               0xFFFFFFFFFFFFFFFEULL

>> -

>> -typedef struct {

>> -  UINT64  Base;

>> -  UINT64  Length;

>> -  UINT64  Alignment;

>> -} PCI_RESOURCE_ALLOC;

>> -

>> -typedef struct _PCI_HOST_BRIDGE_INSTANCE PCI_HOST_BRIDGE_INSTANCE;

>> -

>> -/**

>> - * PCI Root Bridge Instance structure

>> - **/

>> -typedef struct {

>> -  UINTN                            Signature;

>> -  EFI_HANDLE                       Handle;

>> -  PCI_HOST_BRIDGE_INSTANCE        *HostBridge;

>> -  //

>> -  // Set Type of memory allocation (could be EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM

>> -  // and EFI_PCI_HOST_BRIDGE_MEM64_DECODE).

>> -  //

>> -  UINT64                           MemAllocAttributes;

>> -  PCI_RESOURCE_ALLOC               ResAlloc[ResTypeMax];

>> -  UINTN                            BusStart;

>> -  UINTN                            BusLength;

>> -  UINT64                           Supports;

>> -  UINT64                           Attributes;

>> -  EFI_PCI_ROOT_BRIDGE_DEVICE_PATH  DevicePath;

>> -  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  Io;

>> -} PCI_ROOT_BRIDGE_INSTANCE;

>> -

>> -/**

>> - * PCI Host Bridge Instance structure

>> - **/

>> -struct _PCI_HOST_BRIDGE_INSTANCE {

>> -  UINTN                                             Signature;

>> -  EFI_HANDLE                                        Handle;

>> -  EFI_HANDLE                                        ImageHandle;

>> -  PCI_ROOT_BRIDGE_INSTANCE                         *RootBridge;

>> -  //

>> -  // The enumeration cannot be restarted after the process goes into the non initial

>> -  // enumeration phase.

>> -  //

>> -  BOOLEAN                                           CanRestarted;

>> -  EFI_CPU_IO2_PROTOCOL                             *CpuIo;

>> -  EFI_METRONOME_ARCH_PROTOCOL                      *Metronome;

>> -  EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  ResAlloc;

>> -};

>> -

>> -#define PCI_HOST_BRIDGE_SIGNATURE                   SIGNATURE_32 ('e', 'h', 's', 't')

>> -#define PCI_ROOT_BRIDGE_SIGNATURE                   SIGNATURE_32 ('e', '2', 'p', 'b')

>> -#define INSTANCE_FROM_RESOURCE_ALLOCATION_THIS(a)   CR (a, PCI_HOST_BRIDGE_INSTANCE, ResAlloc, PCI_HOST_BRIDGE_SIGNATURE)

>> -#define INSTANCE_FROM_ROOT_BRIDGE_IO_THIS(a)        CR (a, PCI_ROOT_BRIDGE_INSTANCE, Io, PCI_ROOT_BRIDGE_SIGNATURE)

>> -

>> -/**

>> - * PCI Host Bridge Resource Allocator Functions

>> - **/

>> -EFI_STATUS PciHbRaNotifyPhase (

>> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,

>> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE     Phase

>> -  );

>> -

>> -EFI_STATUS PciHbRaGetNextRootBridge (

>> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

>> -  IN OUT EFI_HANDLE                                    *RootBridgeHandle

>> -  );

>> -

>> -EFI_STATUS PciHbRaGetAllocAttributes (

>> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

>> -  IN  EFI_HANDLE                                        RootBridgeHandle,

>> -  OUT UINT64                                           *Attributes

>> -  );

>> -

>> -EFI_STATUS PciHbRaStartBusEnumeration (

>> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

>> -  IN  EFI_HANDLE                                        RootBridgeHandle,

>> -  OUT VOID                                            **Configuration

>> -  );

>> -

>> -EFI_STATUS PciHbRaSetBusNumbers (

>> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

>> -  IN EFI_HANDLE                                         RootBridgeHandle,

>> -  IN VOID                                              *Configuration

>> -  );

>> -

>> -EFI_STATUS PciHbRaSubmitResources (

>> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

>> -  IN EFI_HANDLE                                         RootBridgeHandle,

>> -  IN VOID                                              *Configuration

>> -  );

>> -

>> -EFI_STATUS PciHbRaGetProposedResources (

>> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

>> -  IN  EFI_HANDLE                                        RootBridgeHandle,

>> -  OUT VOID                                            **Configuration

>> -  );

>> -

>> -EFI_STATUS PciHbRaPreprocessController (

>> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

>> -  IN  EFI_HANDLE                                        RootBridgeHandle,

>> -  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS       PciAddress,

>> -  IN  EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE      Phase

>> -  );

>> -

>> -

>> -/**

>> - * PCI Root Bridge

>> - **/

>> -EFI_STATUS PciRbPollMem (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,

>> -  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

>> -  IN  UINT64                                   Address,

>> -  IN  UINT64                                   Mask,

>> -  IN  UINT64                                   Value,

>> -  IN  UINT64                                   Delay,

>> -  OUT UINT64                                   *Result

>> -  );

>> -

>> -EFI_STATUS PciRbPollIo (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,

>> -  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

>> -  IN  UINT64                                   Address,

>> -  IN  UINT64                                   Mask,

>> -  IN  UINT64                                   Value,

>> -  IN  UINT64                                   Delay,

>> -  OUT UINT64                                   *Result

>> -  );

>> -

>> -EFI_STATUS PciRbMemRead (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

>> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

>> -  IN     UINT64                                   Address,

>> -  IN     UINTN                                    Count,

>> -  IN OUT VOID                                     *Buffer

>> -  );

>> -

>> -EFI_STATUS PciRbMemWrite (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

>> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

>> -  IN     UINT64                                   Address,

>> -  IN     UINTN                                    Count,

>> -  IN OUT VOID                                     *Buffer

>> -  );

>> -

>> -EFI_STATUS PciRbIoRead (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

>> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

>> -  IN     UINT64                                   Address,

>> -  IN     UINTN                                    Count,

>> -  IN OUT VOID                                     *Buffer

>> -  );

>> -

>> -EFI_STATUS PciRbIoWrite (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

>> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

>> -  IN     UINT64                                   Address,

>> -  IN     UINTN                                    Count,

>> -  IN OUT VOID                                     *Buffer

>> -  );

>> -

>> -EFI_STATUS PciRbPciRead (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

>> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

>> -  IN     UINT64                                   Address,

>> -  IN     UINTN                                    Count,

>> -  IN OUT VOID                                     *Buffer

>> -  );

>> -

>> -EFI_STATUS PciRbPciWrite (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

>> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

>> -  IN     UINT64                                   Address,

>> -  IN     UINTN                                    Count,

>> -  IN OUT VOID                                     *Buffer

>> -  );

>> -

>> -EFI_STATUS PciRbCopyMem (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

>> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

>> -  IN     UINT64                                   DestAddress,

>> -  IN     UINT64                                   SrcAddress,

>> -  IN     UINTN                                    Count

>> -  );

>> -

>> -EFI_STATUS PciRbMap (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL                *This,

>> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION  Operation,

>> -  IN     VOID                                       *HostAddress,

>> -  IN OUT UINTN                                      *NumberOfBytes,

>> -  OUT    EFI_PHYSICAL_ADDRESS                       *DeviceAddress,

>> -  OUT    VOID                                       **Mapping

>> -  );

>> -

>> -EFI_STATUS PciRbUnMap (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,

>> -  IN  VOID                                     *Mapping

>> -  );

>> -

>> -EFI_STATUS PciRbAllocateBuffer (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

>> -  IN     EFI_ALLOCATE_TYPE                        Type,

>> -  IN     EFI_MEMORY_TYPE                          MemoryType,

>> -  IN     UINTN                                    Pages,

>> -  IN OUT VOID                                     **HostAddress,

>> -  IN     UINT64                                   Attributes

>> -  );

>> -

>> -EFI_STATUS PciRbFreeBuffer (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,

>> -  IN  UINTN                                    Pages,

>> -  IN  VOID                                     *HostAddress

>> -  );

>> -

>> -EFI_STATUS PciRbFlush (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *This

>> -  );

>> -

>> -EFI_STATUS PciRbSetAttributes (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

>> -  IN     UINT64                                   Attributes,

>> -  IN OUT UINT64                                   *ResourceBase,

>> -  IN OUT UINT64                                   *ResourceLength

>> -  );

>> -

>> -EFI_STATUS PciRbGetAttributes (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,

>> -  OUT UINT64                                   *Supports,

>> -  OUT UINT64                                   *Attributes

>> -  );

>> -

>> -EFI_STATUS PciRbConfiguration (

>> -  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL          *This,

>> -  OUT VOID                                     **Resources

>> -  );

>> -

>> -/**

>> - * PCI Root Bridge Functions

>> - **/

>> -EFI_STATUS

>> -PciRbConstructor (

>> -  IN  PCI_HOST_BRIDGE_INSTANCE *HostBridge,

>> -  IN  UINT32 PciAcpiUid,

>> -  IN  UINT64 MemAllocAttributes

>> -  );

>> -

>> -EFI_STATUS

>> -PciRbDestructor (

>> -  IN  PCI_ROOT_BRIDGE_INSTANCE* RootBridge

>> -  );

>> -

>> -EFI_STATUS

>> -HWPciRbInit (

>> -  IN  EFI_CPU_IO2_PROTOCOL *CpuIo

>> -  );

>> -

>> -#endif

>> diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeDxe.inf b/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeDxe.inf

>> deleted file mode 100644

>> index de28c805ae6e..000000000000

>> --- a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeDxe.inf

>> +++ /dev/null

>> @@ -1,76 +0,0 @@

>> -#/** @file

>> -#  INF file for the Xpress-RICH3 PCIe Root Complex

>> -#

>> -#  Copyright (c) 2011-2015, ARM Ltd. All rights reserved.

>> -#

>> -#  This program and the accompanying materials

>> -#  are licensed and made available under the terms and conditions of the BSD License

>> -#  which accompanies this distribution.  The full text of the license may be found at

>> -#  http://opensource.org/licenses/bsd-license.php

>> -#

>> -#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

>> -#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

>> -#

>> -#**/

>> -

>> -[Defines]

>> -  INF_VERSION                    = 0x00010005

>> -  BASE_NAME                      = PciHostBridge

>> -  FILE_GUID                      = C62F4B20-681E-11DF-8F0D-0002A5D5C51B

>> -  MODULE_TYPE                    = DXE_DRIVER

>> -  VERSION_STRING                 = 1.0

>> -

>> -  ENTRY_POINT                    = PciHostBridgeEntryPoint

>> -  UNLOAD_IMAGE                   = PciHostBridgeUnload

>> -

>> -[Packages]

>> -  MdePkg/MdePkg.dec

>> -  ArmPkg/ArmPkg.dec

>> -  EmbeddedPkg/EmbeddedPkg.dec

>> -  ArmPlatformPkg/ArmPlatformPkg.dec

>> -  ArmPlatformPkg/ArmJunoPkg/ArmJuno.dec

>> -

>> -[LibraryClasses]

>> -  UefiDriverEntryPoint

>> -  UefiBootServicesTableLib

>> -  MemoryAllocationLib

>> -  DxeServicesTableLib

>> -  CacheMaintenanceLib

>> -  DmaLib

>> -

>> -[Sources]

>> -  PciHostBridge.c

>> -  PciHostBridgeResourceAllocation.c

>> -  PciRootBridge.c

>> -  XPressRich3.c

>> -

>> -[Protocols]

>> -  gEfiPciHostBridgeResourceAllocationProtocolGuid # Produced

>> -  gEfiPciRootBridgeIoProtocolGuid                 # Produced

>> -  gEfiDevicePathProtocolGuid                      # Produced

>> -  gEfiCpuIo2ProtocolGuid                          # Consumed

>> -  gEfiMetronomeArchProtocolGuid                   # Consumed

>> -

>> -[FeaturePcd]

>> -  gArmJunoTokenSpaceGuid.PcdPciMaxPayloadFixup

>> -

>> -[Pcd.common]

>> -  gArmTokenSpaceGuid.PcdSystemMemoryBase

>> -  gArmTokenSpaceGuid.PcdSystemMemorySize

>> -

>> -  gArmTokenSpaceGuid.PcdPciBusMin

>> -  gArmTokenSpaceGuid.PcdPciBusMax

>> -  gArmTokenSpaceGuid.PcdPciIoBase

>> -  gArmTokenSpaceGuid.PcdPciIoSize

>> -  gArmTokenSpaceGuid.PcdPciMmio32Base

>> -  gArmTokenSpaceGuid.PcdPciMmio32Size

>> -  gArmTokenSpaceGuid.PcdPciMmio64Base

>> -  gArmTokenSpaceGuid.PcdPciMmio64Size

>> -

>> -  gArmJunoTokenSpaceGuid.PcdPcieControlBaseAddress

>> -  gArmJunoTokenSpaceGuid.PcdPcieRootPortBaseAddress

>> -  gArmJunoTokenSpaceGuid.PcdPciConfigurationSpaceBaseAddress

>> -  gArmJunoTokenSpaceGuid.PcdPciConfigurationSpaceSize

>> -

>> -[Depex]

>> -  gEfiCpuIo2ProtocolGuid AND gEfiMetronomeArchProtocolGuid

>> diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeResourceAllocation.c b/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeResourceAllocation.c

>> deleted file mode 100644

>> index de60db718408..000000000000

>> --- a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeResourceAllocation.c

>> +++ /dev/null

>> @@ -1,642 +0,0 @@

>> -/** @file

>> -*  Implementation of the Pci Host Bridge Resource Allocation for the Xpress-RICH3 PCIe Root Complex

>> -*

>> -*  Copyright (c) 2011-2015, ARM Ltd. All rights reserved.

>> -*

>> -*  This program and the accompanying materials

>> -*  are licensed and made available under the terms and conditions of the BSD License

>> -*  which accompanies this distribution.  The full text of the license may be found at

>> -*  http://opensource.org/licenses/bsd-license.php

>> -*

>> -*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

>> -*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

>> -*

>> -**/

>> -

>> -#include "PciHostBridge.h"

>> -

>> -EFI_STATUS

>> -PciHbRaNotifyPhase (

>> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,

>> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE     Phase

>> -  )

>> -{

>> -  PCI_HOST_BRIDGE_INSTANCE    *HostBridgeInstance;

>> -  PCI_ROOT_BRIDGE_INSTANCE    *RootBridgeInstance;

>> -  EFI_STATUS                  Status;

>> -  EFI_PHYSICAL_ADDRESS        BaseAddress;

>> -  UINT64                      AddrLen;

>> -  UINTN                       BitsOfAlignment;

>> -

>> -  HostBridgeInstance = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);

>> -

>> -  PCI_TRACE ("PciHbRaNotifyPhase()");

>> -

>> -  // Check RootBridge Signature

>> -  ASSERT (HostBridgeInstance->RootBridge->Signature == PCI_ROOT_BRIDGE_SIGNATURE);

>> -

>> -  // The enumeration cannot be restarted after the process has been further than the first phase

>> -  if (Phase == EfiPciHostBridgeBeginEnumeration) {

>> -    if (!HostBridgeInstance->CanRestarted) {

>> -      return EFI_NOT_READY;

>> -    }

>> -  } else {

>> -    HostBridgeInstance->CanRestarted = FALSE;

>> -  }

>> -

>> -  switch (Phase) {

>> -  case EfiPciHostBridgeBeginEnumeration:

>> -    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeBeginEnumeration)");

>> -    // Resets the host bridge PCI apertures and internal data structures

>> -    Status = HWPciRbInit (HostBridgeInstance->CpuIo);

>> -    if (EFI_ERROR (Status)) {

>> -      return Status;

>> -    }

>> -    break;

>> -

>> -  case EfiPciHostBridgeBeginBusAllocation:

>> -    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeBeginBusAllocation)");

>> -    // The bus allocation phase is about to begin

>> -    break;

>> -

>> -  case EfiPciHostBridgeEndBusAllocation:

>> -    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeEndBusAllocation)");

>> -    // The bus allocation and bus programming phase is complete. All the PCI-to-PCI bridges have been given and written back

>> -    // a bus number range into their configuration

>> -    break;

>> -

>> -  case EfiPciHostBridgeBeginResourceAllocation:

>> -    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeBeginResourceAllocation)");

>> -    // The resource allocation phase is about to begin.

>> -    break;

>> -

>> -  case EfiPciHostBridgeAllocateResources:

>> -    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeAllocateResources)");

>> -    // Allocates resources per previously submitted requests for all the PCI root bridges. The resources have been submitted to

>> -    // PciHbRaSubmitResources() before.

>> -

>> -    RootBridgeInstance = HostBridgeInstance->RootBridge;

>> -    if (RootBridgeInstance->ResAlloc[ResTypeIo].Length != 0) {

>> -      BitsOfAlignment = HighBitSet64 (RootBridgeInstance->ResAlloc[ResTypeIo].Alignment) + 1;     // Get the number of '1' in Alignment

>> -      AddrLen = RootBridgeInstance->ResAlloc[ResTypeIo].Length;

>> -

>> -      Status = gDS->AllocateIoSpace (

>> -                  EfiGcdAllocateAnySearchBottomUp,

>> -                  EfiGcdIoTypeIo,

>> -                  BitsOfAlignment,

>> -                  AddrLen,

>> -                  &BaseAddress,

>> -                  HostBridgeInstance->ImageHandle,

>> -                  NULL

>> -               );

>> -      // If error then ResAlloc[n].Base ==0

>> -      if (!EFI_ERROR (Status)) {

>> -        RootBridgeInstance->ResAlloc[ResTypeIo].Base   = (UINTN)BaseAddress;

>> -      }

>> -    }

>> -

>> -    if (RootBridgeInstance->ResAlloc[ResTypeMem32].Length != 0) {

>> -      BitsOfAlignment = HighBitSet64 (RootBridgeInstance->ResAlloc[ResTypeMem32].Alignment) + 1;  // Get the number of '1' in Alignment

>> -      AddrLen = RootBridgeInstance->ResAlloc[ResTypeMem32].Length;

>> -

>> -      // Top of the 32bit PCI Memory space

>> -      BaseAddress = FixedPcdGet64 (PcdPciMmio32Base) + FixedPcdGet64 (PcdPciMmio32Size);

>> -

>> -      Status = gDS->AllocateMemorySpace (

>> -                  EfiGcdAllocateMaxAddressSearchTopDown,

>> -                  EfiGcdMemoryTypeMemoryMappedIo,

>> -                  BitsOfAlignment,

>> -                  AddrLen,

>> -                  &BaseAddress,

>> -                  HostBridgeInstance->ImageHandle,

>> -                  NULL

>> -               );

>> -

>> -      // Ensure the allocation is in the 32bit PCI memory space

>> -      if (!EFI_ERROR (Status) && (BaseAddress >= FixedPcdGet64 (PcdPciMmio32Base))) {

>> -        RootBridgeInstance->ResAlloc[ResTypeMem32].Base   = (UINTN)BaseAddress;

>> -      }

>> -    }

>> -    if (RootBridgeInstance->ResAlloc[ResTypePMem32].Length != 0) {

>> -      BitsOfAlignment = HighBitSet64 (RootBridgeInstance->ResAlloc[ResTypePMem32].Alignment) + 1;  // Get the number of '1' in Alignment

>> -      AddrLen = RootBridgeInstance->ResAlloc[ResTypePMem32].Length;

>> -

>> -      // Top of the 32bit PCI Memory space

>> -      BaseAddress = FixedPcdGet64 (PcdPciMmio32Base) + FixedPcdGet64 (PcdPciMmio32Size);

>> -

>> -      Status = gDS->AllocateMemorySpace (

>> -                  EfiGcdAllocateMaxAddressSearchTopDown,

>> -                  EfiGcdMemoryTypeMemoryMappedIo,

>> -                  BitsOfAlignment,

>> -                  AddrLen,

>> -                  &BaseAddress,

>> -                  HostBridgeInstance->ImageHandle,

>> -                  NULL

>> -               );

>> -

>> -      // Ensure the allocation is in the 32bit PCI memory space

>> -      if (!EFI_ERROR (Status) && (BaseAddress >= FixedPcdGet64 (PcdPciMmio32Base))) {

>> -        RootBridgeInstance->ResAlloc[ResTypePMem32].Base = (UINTN)BaseAddress;

>> -      }

>> -    }

>> -    if (RootBridgeInstance->ResAlloc[ResTypeMem64].Length != 0) {

>> -      BitsOfAlignment = HighBitSet64 (RootBridgeInstance->ResAlloc[ResTypeMem64].Alignment) + 1;  // Get the number of '1' in Alignment

>> -      AddrLen = RootBridgeInstance->ResAlloc[ResTypeMem64].Length;

>> -

>> -      // Top of the 64bit PCI Memory space

>> -      BaseAddress = FixedPcdGet64 (PcdPciMmio64Base) + FixedPcdGet64 (PcdPciMmio64Size);

>> -

>> -      Status = gDS->AllocateMemorySpace (

>> -                  EfiGcdAllocateMaxAddressSearchTopDown,

>> -                  EfiGcdMemoryTypeMemoryMappedIo,

>> -                  BitsOfAlignment,

>> -                  AddrLen,

>> -                  &BaseAddress,

>> -                  HostBridgeInstance->ImageHandle,

>> -                  NULL

>> -               );

>> -

>> -      // Ensure the allocation is in the 64bit PCI memory space

>> -      if (!EFI_ERROR (Status) && (BaseAddress >= FixedPcdGet64 (PcdPciMmio64Base))) {

>> -        RootBridgeInstance->ResAlloc[ResTypeMem64].Base   = (UINTN)BaseAddress;

>> -      }

>> -    }

>> -    if (RootBridgeInstance->ResAlloc[ResTypePMem64].Length != 0) {

>> -      BitsOfAlignment = HighBitSet64 (RootBridgeInstance->ResAlloc[ResTypePMem64].Alignment) + 1;  //Get the number of '1' in Alignment

>> -      AddrLen = RootBridgeInstance->ResAlloc[ResTypePMem64].Length;

>> -

>> -      // Top of the 64bit PCI Memory space

>> -      BaseAddress = FixedPcdGet64 (PcdPciMmio64Base) + FixedPcdGet64 (PcdPciMmio64Size);

>> -

>> -      Status = gDS->AllocateMemorySpace (

>> -                  EfiGcdAllocateMaxAddressSearchTopDown,

>> -                  EfiGcdMemoryTypeMemoryMappedIo,

>> -                  BitsOfAlignment,

>> -                  AddrLen,

>> -                  &BaseAddress,

>> -                  HostBridgeInstance->ImageHandle,

>> -                  NULL

>> -               );

>> -

>> -      // Ensure the allocation is in the 64bit PCI memory space

>> -      if (!EFI_ERROR (Status) && (BaseAddress >= FixedPcdGet64 (PcdPciMmio64Base))) {

>> -        RootBridgeInstance->ResAlloc[ResTypePMem64].Base   = (UINTN)BaseAddress;

>> -      }

>> -    }

>> -

>> -    break;

>> -

>> -  case EfiPciHostBridgeSetResources:

>> -    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeSetResources)");

>> -    // Programs the host bridge hardware to decode previously allocated resources (proposed resources)

>> -    // for all the PCI root bridges. The PCI bus driver will now program the resources

>> -    break;

>> -

>> -  case EfiPciHostBridgeFreeResources:

>> -    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeFreeResources)");

>> -    // Deallocates resources that were previously allocated for all the PCI root bridges and resets the

>> -    // I/O and memory apertures to their initial state.*/

>> -    break;

>> -

>> -  case EfiPciHostBridgeEndResourceAllocation:

>> -    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeEndResourceAllocation)");

>> -    break;

>> -

>> -  case EfiPciHostBridgeEndEnumeration:

>> -    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeEndEnumeration)");

>> -    break;

>> -

>> -  default:

>> -    DEBUG ((EFI_D_INFO, "PciHbRaNotifyPhase(Phase:%d)\n", Phase));

>> -    ASSERT (0);

>> -  }

>> -

>> -  return EFI_SUCCESS;

>> -}

>> -

>> -/**

>> - * PciHbRaGetNextRootBridge() returns the next root bridge attached to the 'This' PCI Host Bridge.

>> - * As we have only got one PCI Root Bridge in this PCI interface, we return either this root bridge

>> - * if it the first time we call this function (*RootBridgeHandle == NULL) or we return EFI_NOT_FOUND

>> - **/

>> -EFI_STATUS

>> -PciHbRaGetNextRootBridge (

>> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

>> -  IN OUT EFI_HANDLE                                    *RootBridgeHandle

>> -  )

>> -{

>> -  PCI_HOST_BRIDGE_INSTANCE              *HostBridgeInstance;

>> -

>> -  PCI_TRACE ("PciHbRaGetNextRootBridge()");

>> -

>> -  HostBridgeInstance = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);

>> -  ASSERT (HostBridgeInstance->RootBridge != NULL);

>> -

>> -  //Check RootBridge Signature

>> -  ASSERT (HostBridgeInstance->RootBridge->Signature == PCI_ROOT_BRIDGE_SIGNATURE);

>> -

>> -  if (*RootBridgeHandle == NULL) {

>> -    *RootBridgeHandle = HostBridgeInstance->RootBridge->Handle;

>> -    return EFI_SUCCESS;

>> -  } else if (*RootBridgeHandle == HostBridgeInstance->RootBridge->Handle) {

>> -    return EFI_NOT_FOUND;

>> -  } else {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -}

>> -

>> -/** PciHbRaGetAllocAttributes() returns the resource allocation attributes supported by this PCI Root Bridge.

>> - *  A PCI Root bridge could support these types :

>> - *      - EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM : does not support separate windows for nonprefetchable and prefetchable memory.

>> - *      - EFI_PCI_HOST_BRIDGE_MEM64_DECODE : supports 64-bit memory windows

>> - **/

>> -EFI_STATUS

>> -PciHbRaGetAllocAttributes (

>> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

>> -  IN  EFI_HANDLE                                        RootBridgeHandle,

>> -  OUT UINT64                                           *Attributes

>> -  )

>> -{

>> -  PCI_HOST_BRIDGE_INSTANCE    *HostBridgeInstance;

>> -

>> -  PCI_TRACE ("PciHbRaGetAllocAttributes()");

>> -

>> -  HostBridgeInstance = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);

>> -

>> -  // Check if the RootBridgeHandle is the one managed by this PCI Host Bridge

>> -  ASSERT (HostBridgeInstance->RootBridge != NULL);

>> -  if (HostBridgeInstance->RootBridge->Handle != RootBridgeHandle) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  *Attributes = HostBridgeInstance->RootBridge->MemAllocAttributes;

>> -  return EFI_SUCCESS;

>> -}

>> -

>> -EFI_STATUS

>> -PciHbRaStartBusEnumeration (

>> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

>> -  IN  EFI_HANDLE                                        RootBridgeHandle,

>> -  OUT VOID                                            **Configuration

>> -  )

>> -{

>> -  VOID    *Buffer;

>> -  UINT8   *Ptr;

>> -  PCI_HOST_BRIDGE_INSTANCE    *HostBridgeInstance;

>> -

>> -  // Fill an ACPI descriptor table with the Bus Number Range. This information will be used by the PCI Bus driver

>> -  // to set bus numbers to PCI-to-PCI bridge.

>> -  PCI_TRACE ("PciHbRaStartBusEnumeration()");

>> -

>> -  HostBridgeInstance = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);

>> -

>> -  Buffer = AllocateZeroPool (sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) + sizeof (EFI_ACPI_END_TAG_DESCRIPTOR));

>> -  if (Buffer == NULL) {

>> -    return EFI_OUT_OF_RESOURCES;

>> -  }

>> -

>> -  Ptr = (UINT8 *)Buffer;

>> -

>> -  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->Desc = ACPI_ADDRESS_SPACE_DESCRIPTOR;    // QWORD Address space Descriptor

>> -  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->Len  = 0x2B;    // Length of this descriptor in bytes not including the first two fields

>> -  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->ResType = ACPI_ADDRESS_SPACE_TYPE_BUS;  // Resource Type Bus Number Range

>> -  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->GenFlag = 0;

>> -  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->SpecificFlag = 0;

>> -  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->AddrSpaceGranularity = 0;

>> -  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->AddrRangeMin = HostBridgeInstance->RootBridge->BusStart;   // Bus Start

>> -  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->AddrRangeMax = 0;    // Bus Max

>> -  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->AddrTranslationOffset = 0;

>> -  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->AddrLen = FixedPcdGet32 (PcdPciBusMax) - FixedPcdGet32 (PcdPciBusMin) + 1;

>> -

>> -  Ptr = Ptr + sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR);

>> -  ((EFI_ACPI_END_TAG_DESCRIPTOR *)Ptr)->Desc = ACPI_END_TAG_DESCRIPTOR;

>> -  ((EFI_ACPI_END_TAG_DESCRIPTOR *)Ptr)->Checksum = 0x0;

>> -

>> -  *Configuration = Buffer;

>> -  return EFI_SUCCESS;

>> -}

>> -

>> -EFI_STATUS

>> -PciHbRaSetBusNumbers (

>> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

>> -  IN EFI_HANDLE                                         RootBridgeHandle,

>> -  IN VOID                                              *Configuration

>> -  )

>> -{

>> -  PCI_HOST_BRIDGE_INSTANCE    *HostBridgeInstance;

>> -  UINT8                       *Ptr;

>> -  UINTN                       BusStart;

>> -  UINTN                       BusEnd;

>> -  UINTN                       BusLen;

>> -

>> -  PCI_TRACE ("PciHbRaSetBusNumbers()");

>> -

>> -  Ptr = Configuration;

>> -  if (*Ptr != ACPI_ADDRESS_SPACE_DESCRIPTOR) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  // Check if the passed ACPI descriptor table define a Bus Number Range

>> -  if (((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->ResType != ACPI_ADDRESS_SPACE_TYPE_BUS) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  // Check if the Configuration only passed one ACPI Descriptor (+ End Descriptor)

>> -  if (*((UINT8*)(Ptr + sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR))) != ACPI_END_TAG_DESCRIPTOR) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  HostBridgeInstance = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);

>> -  ASSERT (HostBridgeInstance->RootBridge != NULL);

>> -  if (HostBridgeInstance->RootBridge->Handle != RootBridgeHandle) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  BusStart = (UINTN)((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->AddrRangeMin;

>> -  BusLen = (UINTN)((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->AddrLen;

>> -  BusEnd = BusStart + BusLen - 1;

>> -

>> -  ASSERT (BusStart <= BusEnd); // We should at least have PCI_BUS_ROOT and PCI_SWITCH_BUS

>> -  ASSERT ((BusStart >= HostBridgeInstance->RootBridge->BusStart) && (BusLen <= HostBridgeInstance->RootBridge->BusLength));

>> -

>> -  HostBridgeInstance->RootBridge->BusStart  = BusStart;

>> -  HostBridgeInstance->RootBridge->BusLength = BusLen;

>> -

>> -  return EFI_SUCCESS;

>> -}

>> -

>> -/**

>> - * This function is used to submit all the I/O and memory resources that are required by the specified

>> - * PCI root bridge.

>> - **/

>> -EFI_STATUS

>> -PciHbRaSubmitResources (

>> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

>> -  IN EFI_HANDLE                                         RootBridgeHandle,

>> -  IN VOID                                              *Configuration

>> -  )

>> -{

>> -  PCI_HOST_BRIDGE_INSTANCE            *HostBridgeInstance;

>> -  PCI_ROOT_BRIDGE_INSTANCE            *RootBridgeInstance;

>> -  UINT8                               *Ptr;

>> -  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *Desc;

>> -  PCI_RESOURCE_TYPE                   ResType;

>> -

>> -  PCI_TRACE ("PciHbRaSubmitResources()");

>> -

>> -  HostBridgeInstance = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);

>> -

>> -  if (Configuration == NULL) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  // Check if the ACPI Descriptor tables is conformed

>> -  Ptr = (UINT8 *)Configuration;

>> -  while (*Ptr == ACPI_ADDRESS_SPACE_DESCRIPTOR) { // QWORD Address Space descriptor

>> -    Ptr += sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) ;

>> -  }

>> -  if (*Ptr != ACPI_END_TAG_DESCRIPTOR) { // End tag

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  // Check the RootBridgeHandle

>> -  RootBridgeInstance = HostBridgeInstance->RootBridge;

>> -  ASSERT (RootBridgeInstance != NULL);

>> -  if (RootBridgeHandle != HostBridgeInstance->RootBridge->Handle) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  Ptr = (UINT8 *)Configuration;

>> -  while ( *Ptr == ACPI_ADDRESS_SPACE_DESCRIPTOR) { // While the entry is an ACPI Descriptor Table

>> -    Desc = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr;

>> -

>> -    // Check if the description is valid

>> -    if (Desc->AddrLen > 0xffffffff) {

>> -      return EFI_INVALID_PARAMETER;

>> -    }

>> -

>> -    if ((Desc->AddrRangeMax >= 0xffffffff) || (Desc->AddrRangeMax != (GetPowerOfTwo64 (Desc->AddrRangeMax + 1) - 1))) {

>> -      return EFI_INVALID_PARAMETER;

>> -    }

>> -

>> -    switch (Desc->ResType) {

>> -    case ACPI_ADDRESS_SPACE_TYPE_MEM:

>> -      // Check invalid Address Space Granularity

>> -      if ((Desc->AddrSpaceGranularity != 32) && (Desc->AddrSpaceGranularity != 64)) {

>> -        return EFI_INVALID_PARAMETER;

>> -      }

>> -

>> -      // check the memory resource request is supported by PCI root bridge

>> -      if (RootBridgeInstance->MemAllocAttributes == EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM && Desc->SpecificFlag == 0x06) {

>> -        return EFI_INVALID_PARAMETER;

>> -      }

>> -

>> -      if (Desc->AddrSpaceGranularity == 32) {

>> -        if (Desc->SpecificFlag == ACPI_SPECFLAG_PREFETCHABLE) {

>> -          ResType = ResTypePMem32;

>> -        } else {

>> -          ResType = ResTypeMem32;

>> -        }

>> -      } else {

>> -        if (Desc->SpecificFlag == ACPI_SPECFLAG_PREFETCHABLE) {

>> -          ResType = ResTypePMem64;

>> -        } else {

>> -          ResType = ResTypeMem64;

>> -        }

>> -      }

>> -      RootBridgeInstance->ResAlloc[ResType].Length = Desc->AddrLen;

>> -      RootBridgeInstance->ResAlloc[ResType].Alignment = Desc->AddrRangeMax;

>> -      RootBridgeInstance->ResAlloc[ResType].Base = Desc->AddrRangeMin;

>> -      break;

>> -    case ACPI_ADDRESS_SPACE_TYPE_IO:

>> -      RootBridgeInstance->ResAlloc[ResTypeIo].Length = Desc->AddrLen;

>> -      RootBridgeInstance->ResAlloc[ResTypeIo].Alignment = Desc->AddrRangeMax;

>> -      RootBridgeInstance->ResAlloc[ResTypeIo].Base = 0;

>> -      break;

>> -    default:

>> -      ASSERT (0); // Could be the case Desc->ResType == ACPI_ADDRESS_SPACE_TYPE_BUS

>> -      break;

>> -    }

>> -    Ptr += sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR);

>> -  }

>> -

>> -  return EFI_SUCCESS;

>> -}

>> -

>> -/** Returns the proposed resource settings for the specified PCI root bridge. The resources have been submitted by

>> -  * PciHbRaSubmitResources() before

>> -  **/

>> -EFI_STATUS

>> -PciHbRaGetProposedResources (

>> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

>> -  IN  EFI_HANDLE                                        RootBridgeHandle,

>> -  OUT VOID                                            **Configuration

>> -  )

>> -{

>> -  PCI_HOST_BRIDGE_INSTANCE            *HostBridgeInstance;

>> -  PCI_ROOT_BRIDGE_INSTANCE            *RootBridgeInstance;

>> -  UINT32                              i;

>> -  UINT32                              ResAllocCount;

>> -  VOID                                *Buffer;

>> -  UINT8                               *Ptr;

>> -  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *Desc;

>> -

>> -  PCI_TRACE ("PciHbRaGetProposedResources()");

>> -

>> -  HostBridgeInstance = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);

>> -

>> -  // Check the RootBridgeHandle

>> -  RootBridgeInstance = HostBridgeInstance->RootBridge;

>> -  ASSERT (RootBridgeInstance != NULL);

>> -  if (RootBridgeHandle != HostBridgeInstance->RootBridge->Handle) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  // Count the number of Resource Allocated for this Root Bridge

>> -  ResAllocCount = 0;

>> -  for (i = 0; i < ResTypeMax; i++) {

>> -    if (RootBridgeInstance->ResAlloc[i].Length != 0)  ResAllocCount++;

>> -  }

>> -

>> -  if (ResAllocCount ==  0) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  Buffer = AllocateZeroPool (ResAllocCount * sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) + sizeof (EFI_ACPI_END_TAG_DESCRIPTOR));

>> -  if (Buffer == NULL) {

>> -    return EFI_OUT_OF_RESOURCES;

>> -  }

>> -

>> -  Ptr = Buffer;

>> -  for (i = 0; i < ResTypeMax; i++) {

>> -    if (RootBridgeInstance->ResAlloc[i].Length != 0) {    // Base != 0 if the resource has been allocated

>> -      Desc = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr;

>> -

>> -      Desc->Desc = ACPI_ADDRESS_SPACE_DESCRIPTOR;

>> -      Desc->Len  = 0x2B;

>> -      Desc->GenFlag = 0;

>> -      Desc->AddrRangeMax = 0;

>> -

>> -      switch (i) {

>> -      case ResTypeIo:

>> -        Desc->ResType = ACPI_ADDRESS_SPACE_TYPE_IO;

>> -        Desc->SpecificFlag = 0;

>> -        Desc->AddrSpaceGranularity = 0;

>> -        break;

>> -      case ResTypeMem32:

>> -        Desc->ResType = ACPI_ADDRESS_SPACE_TYPE_MEM;

>> -        Desc->SpecificFlag = 0;

>> -        Desc->AddrSpaceGranularity = 32;

>> -        break;

>> -      case ResTypePMem32:

>> -        Desc->ResType = ACPI_ADDRESS_SPACE_TYPE_MEM;

>> -        Desc->SpecificFlag = ACPI_SPECFLAG_PREFETCHABLE;

>> -        Desc->AddrSpaceGranularity = 32;

>> -        break;

>> -      case ResTypeMem64:

>> -        Desc->ResType = ACPI_ADDRESS_SPACE_TYPE_MEM;

>> -        Desc->SpecificFlag = 0;

>> -        Desc->AddrSpaceGranularity = 64;

>> -        break;

>> -      case ResTypePMem64:

>> -        Desc->ResType = ACPI_ADDRESS_SPACE_TYPE_MEM;

>> -        Desc->SpecificFlag = ACPI_SPECFLAG_PREFETCHABLE;

>> -        Desc->AddrSpaceGranularity = 64;

>> -        break;

>> -      }

>> -      Desc->AddrRangeMin = RootBridgeInstance->ResAlloc[i].Base;

>> -      Desc->AddrTranslationOffset = (RootBridgeInstance->ResAlloc[i].Base != 0) ? EFI_RESOURCE_SATISFIED : EFI_RESOURCE_LESS;

>> -      Desc->AddrLen = RootBridgeInstance->ResAlloc[i].Length;

>> -      Ptr += sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR);

>> -    }

>> -  }

>> -

>> -  ((EFI_ACPI_END_TAG_DESCRIPTOR *)Ptr)->Desc = ACPI_END_TAG_DESCRIPTOR;

>> -  ((EFI_ACPI_END_TAG_DESCRIPTOR *)Ptr)->Checksum = 0x0;

>> -

>> -  *Configuration = Buffer;

>> -  return EFI_SUCCESS;

>> -}

>> -

>> -EFI_STATUS

>> -PciHbRaPreprocessController (

>> -  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,

>> -  IN  EFI_HANDLE                                        RootBridgeHandle,

>> -  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS       PciAddress,

>> -  IN  EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE      Phase

>> -  )

>> -{

>> -  PCI_HOST_BRIDGE_INSTANCE*   HostBridge;

>> -  PCI_ROOT_BRIDGE_INSTANCE*   RootBridge;

>> -  UINT32                      CapabilityPtr;

>> -  UINT32                      CapabilityEntry;

>> -  UINT16                      CapabilityID;

>> -  UINT32                      DeviceCapability;

>> -

>> -  PCI_TRACE ("PciHbRaPreprocessController()");

>> -

>> -  if (FeaturePcdGet (PcdPciMaxPayloadFixup)) {

>> -    // Do Max payload fixup for every devices

>> -    if (Phase == EfiPciBeforeResourceCollection) {

>> -      // Get RootBridge Instance from Host Bridge Instance

>> -      HostBridge = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);

>> -      RootBridge = HostBridge->RootBridge;

>> -

>> -      // Get the first PCI Capability

>> -      CapabilityPtr = PCI_CAPBILITY_POINTER_OFFSET;

>> -      RootBridge->Io.Pci.Read (

>> -          &RootBridge->Io,

>> -          EfiPciWidthUint8,

>> -          EFI_PCI_ADDRESS (PciAddress.Bus, PciAddress.Device, PciAddress.Function, CapabilityPtr),

>> -          1,

>> -          &CapabilityPtr

>> -      );

>> -      CapabilityPtr &= 0x1FF;

>> -

>> -      // Get Pci Express Capability

>> -      while (CapabilityPtr != 0) {

>> -        RootBridge->Io.Pci.Read (

>> -            &RootBridge->Io,

>> -            EfiPciWidthUint16,

>> -            EFI_PCI_ADDRESS (PciAddress.Bus, PciAddress.Device, PciAddress.Function, CapabilityPtr),

>> -            1,

>> -            &CapabilityEntry

>> -            );

>> -

>> -        CapabilityID = (UINT8)CapabilityEntry;

>> -

>> -        // Is PCIe capability ?

>> -        if (CapabilityID == EFI_PCI_CAPABILITY_ID_PCIEXP) {

>> -          // Get PCIe Device Capabilities

>> -          RootBridge->Io.Pci.Read (

>> -              &RootBridge->Io,

>> -              EfiPciWidthUint32,

>> -              EFI_PCI_ADDRESS (PciAddress.Bus, PciAddress.Device, PciAddress.Function, CapabilityPtr + 0x8),

>> -              1,

>> -              &DeviceCapability

>> -              );

>> -

>> -          // Force the Max Payload to 128 Bytes (128 Bytes Max Payload Size = 0)

>> -          DeviceCapability &= ~ ((UINT32)(0x7 << 5 ));

>> -          // Max Read Request Size to 128 Bytes (128 Bytes Max Read Request Size = 0)

>> -          DeviceCapability &= ~ ((UINT32)(0x7 << 12));

>> -          // Enable all error reporting

>> -          DeviceCapability |= 0xF;

>> -

>> -          RootBridge->Io.Pci.Write (

>> -              &RootBridge->Io,

>> -              EfiPciWidthUint32,

>> -              EFI_PCI_ADDRESS (PciAddress.Bus, PciAddress.Device, PciAddress.Function, CapabilityPtr + 0x8),

>> -              1,

>> -              &DeviceCapability

>> -              );

>> -

>> -          return EFI_SUCCESS;

>> -        }

>> -        CapabilityPtr = (CapabilityEntry >> 8) & 0xFF;

>> -      }

>> -    }

>> -  }

>> -

>> -  return EFI_SUCCESS;

>> -}

>> diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciRootBridge.c b/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciRootBridge.c

>> deleted file mode 100644

>> index 72d09156c066..000000000000

>> --- a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciRootBridge.c

>> +++ /dev/null

>> @@ -1,748 +0,0 @@

>> -/** @file

>> -*  Implementation of the PCI Root Bridge Protocol for XPress-RICH3 PCIe Root Complex

>> -*

>> -*  Copyright (c) 2011-2015, ARM Ltd. All rights reserved.

>> -*

>> -*  This program and the accompanying materials

>> -*  are licensed and made available under the terms and conditions of the BSD License

>> -*  which accompanies this distribution.  The full text of the license may be found at

>> -*  http://opensource.org/licenses/bsd-license.php

>> -*

>> -*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

>> -*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

>> -*

>> -**/

>> -

>> -#include "PciHostBridge.h"

>> -

>> -#include <Library/DevicePathLib.h>

>> -#include <Library/DmaLib.h>

>> -

>> -#define CPUIO_FROM_ROOT_BRIDGE_INSTANCE(Instance) (Instance->HostBridge->CpuIo)

>> -#define METRONOME_FROM_ROOT_BRIDGE_INSTANCE(Instance) (Instance->HostBridge->Metronome)

>> -

>> -/**

>> - * PCI Root Bridge Instance Templates

>> - */

>> -STATIC CONST EFI_PCI_ROOT_BRIDGE_DEVICE_PATH  gDevicePathTemplate = {

>> -    {

>> -      { ACPI_DEVICE_PATH,

>> -        ACPI_DP,

>> -        { (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)),

>> -          (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) }

>> -      },

>> -      EISA_PNP_ID (0x0A03),

>> -      0

>> -    },

>> -    {

>> -      END_DEVICE_PATH_TYPE,

>> -      END_ENTIRE_DEVICE_PATH_SUBTYPE,

>> -      { END_DEVICE_PATH_LENGTH, 0 }

>> -    }

>> -};

>> -

>> -STATIC CONST EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL gIoTemplate = {

>> -    0,

>> -    PciRbPollMem,

>> -    PciRbPollIo,

>> -    {

>> -      PciRbMemRead,

>> -      PciRbMemWrite

>> -    },

>> -    {

>> -      PciRbIoRead,

>> -      PciRbIoWrite

>> -    },

>> -    {

>> -      PciRbPciRead,

>> -      PciRbPciWrite

>> -    },

>> -    PciRbCopyMem,

>> -    PciRbMap,

>> -    PciRbUnMap,

>> -    PciRbAllocateBuffer,

>> -    PciRbFreeBuffer,

>> -    PciRbFlush,

>> -    PciRbGetAttributes,

>> -    PciRbSetAttributes,

>> -    PciRbConfiguration,

>> -    0

>> -  };

>> -

>> -typedef struct {

>> -    EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR     SpaceDesp[ResTypeMax+1];

>> -    EFI_ACPI_END_TAG_DESCRIPTOR           EndDesp;

>> -} RESOURCE_CONFIGURATION;

>> -

>> -

>> -RESOURCE_CONFIGURATION Configuration = {

>> -   {{ACPI_ADDRESS_SPACE_DESCRIPTOR, 0x2B, ACPI_ADDRESS_SPACE_TYPE_IO , 0, 0, 0, 0, 0, 0, 0},

>> -    {ACPI_ADDRESS_SPACE_DESCRIPTOR, 0x2B, ACPI_ADDRESS_SPACE_TYPE_MEM, 0, 0, 32, 0, 0, 0, 0},

>> -    {ACPI_ADDRESS_SPACE_DESCRIPTOR, 0x2B, ACPI_ADDRESS_SPACE_TYPE_MEM, 0, 6, 32, 0, 0, 0, 0},

>> -    {ACPI_ADDRESS_SPACE_DESCRIPTOR, 0x2B, ACPI_ADDRESS_SPACE_TYPE_MEM, 0, 0, 64, 0, 0, 0, 0},

>> -    {ACPI_ADDRESS_SPACE_DESCRIPTOR, 0x2B, ACPI_ADDRESS_SPACE_TYPE_MEM, 0, 6, 64, 0, 0, 0, 0},

>> -    {ACPI_ADDRESS_SPACE_DESCRIPTOR, 0x2B, ACPI_ADDRESS_SPACE_TYPE_BUS, 0, 0, 0, 0, 255, 0, 255}},

>> -    {ACPI_END_TAG_DESCRIPTOR, 0}

>> -};

>> -

>> -

>> -EFI_STATUS

>> -PciRbPollMem (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,

>> -  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

>> -  IN  UINT64                                   Address,

>> -  IN  UINT64                                   Mask,

>> -  IN  UINT64                                   Value,

>> -  IN  UINT64                                   Delay,

>> -  OUT UINT64                                   *Result

>> -  )

>> -{

>> -  EFI_STATUS                      Status;

>> -  UINT64                          NumberOfTicks;

>> -  UINT32                          Remainder;

>> -  PCI_ROOT_BRIDGE_INSTANCE        *RootBridgeInstance;

>> -  EFI_METRONOME_ARCH_PROTOCOL     *Metronome;

>> -

>> -  PCI_TRACE ("PciRbPollMem()");

>> -

>> -  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);

>> -  Metronome = METRONOME_FROM_ROOT_BRIDGE_INSTANCE (RootBridgeInstance);

>> -

>> -  if (Result == NULL) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  if (Width > EfiPciWidthUint64) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  // No matter what, always do a single poll.

>> -  Status = This->Mem.Read (This, Width, Address, 1, Result);

>> -  if (EFI_ERROR (Status)) {

>> -    return Status;

>> -  }

>> -  if ((*Result & Mask) == Value) {

>> -    return EFI_SUCCESS;

>> -  }

>> -

>> -  if (Delay == 0) {

>> -    return EFI_SUCCESS;

>> -  }

>> -

>> -  NumberOfTicks = DivU64x32Remainder (Delay, (UINT32) Metronome->TickPeriod, &Remainder);

>> -  if (Remainder != 0) {

>> -    NumberOfTicks += 1;

>> -  }

>> -  NumberOfTicks += 1;

>> -

>> -  while (NumberOfTicks) {

>> -    Metronome->WaitForTick (Metronome, 1);

>> -

>> -    Status = This->Mem.Read (This, Width, Address, 1, Result);

>> -    if (EFI_ERROR (Status)) {

>> -      return Status;

>> -    }

>> -

>> -    if ((*Result & Mask) == Value) {

>> -      return EFI_SUCCESS;

>> -    }

>> -

>> -    NumberOfTicks -= 1;

>> -  }

>> -

>> -  return EFI_TIMEOUT;

>> -}

>> -

>> -EFI_STATUS

>> -PciRbPollIo (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,

>> -  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

>> -  IN  UINT64                                   Address,

>> -  IN  UINT64                                   Mask,

>> -  IN  UINT64                                   Value,

>> -  IN  UINT64                                   Delay,

>> -  OUT UINT64                                   *Result

>> -  )

>> -{

>> -  EFI_STATUS                      Status;

>> -  UINT64                          NumberOfTicks;

>> -  UINT32                          Remainder;

>> -  PCI_ROOT_BRIDGE_INSTANCE        *RootBridgeInstance;

>> -  EFI_METRONOME_ARCH_PROTOCOL     *Metronome;

>> -

>> -  PCI_TRACE ("PciRbPollIo()");

>> -

>> -  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);

>> -  Metronome = METRONOME_FROM_ROOT_BRIDGE_INSTANCE (RootBridgeInstance);

>> -

>> -  if (Result == NULL) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  if (Width > EfiPciWidthUint64) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  // No matter what, always do a single poll.

>> -  Status = This->Io.Read (This, Width, Address, 1, Result);

>> -  if (EFI_ERROR (Status)) {

>> -    return Status;

>> -  }

>> -  if ((*Result & Mask) == Value) {

>> -    return EFI_SUCCESS;

>> -  }

>> -

>> -  if (Delay == 0) {

>> -    return EFI_SUCCESS;

>> -  }

>> -

>> -  NumberOfTicks = DivU64x32Remainder (Delay, (UINT32) Metronome->TickPeriod, &Remainder);

>> -  if (Remainder != 0) {

>> -    NumberOfTicks += 1;

>> -  }

>> -  NumberOfTicks += 1;

>> -

>> -  while (NumberOfTicks) {

>> -    Metronome->WaitForTick (Metronome, 1);

>> -

>> -    Status = This->Io.Read (This, Width, Address, 1, Result);

>> -    if (EFI_ERROR (Status)) {

>> -        return Status;

>> -    }

>> -

>> -    if ((*Result & Mask) == Value) {

>> -        return EFI_SUCCESS;

>> -    }

>> -

>> -    NumberOfTicks -= 1;

>> -  }

>> -

>> -  return EFI_TIMEOUT;

>> -}

>> -

>> -EFI_STATUS

>> -PciRbMemRead (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

>> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

>> -  IN     UINT64                                   Address,

>> -  IN     UINTN                                    Count,

>> -  IN OUT VOID                                     *Buffer

>> -  )

>> -{

>> -  PCI_ROOT_BRIDGE_INSTANCE    *RootBridgeInstance;

>> -  EFI_CPU_IO2_PROTOCOL        *CpuIo;

>> -

>> -  PCI_TRACE ("PciRbMemRead()");

>> -

>> -  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);

>> -  CpuIo = CPUIO_FROM_ROOT_BRIDGE_INSTANCE (RootBridgeInstance);

>> -

>> -  if (Buffer == NULL) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  if (Width >= EfiPciWidthMaximum) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  if (((Address < PCI_MEM32_BASE) || (Address > (PCI_MEM32_BASE + PCI_MEM32_SIZE))) &&

>> -      ((Address < PCI_MEM64_BASE) || (Address > (PCI_MEM64_BASE + PCI_MEM64_SIZE)))) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  return CpuIo->Mem.Read (CpuIo, (EFI_CPU_IO_PROTOCOL_WIDTH)Width, Address, Count, Buffer);

>> -}

>> -

>> -EFI_STATUS

>> -PciRbMemWrite (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

>> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

>> -  IN     UINT64                                   Address,

>> -  IN     UINTN                                    Count,

>> -  IN OUT VOID                                     *Buffer

>> -  )

>> -{

>> -  PCI_ROOT_BRIDGE_INSTANCE    *RootBridgeInstance;

>> -  EFI_CPU_IO2_PROTOCOL        *CpuIo;

>> -

>> -  PCI_TRACE ("PciRbMemWrite()");

>> -

>> -  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);

>> -  CpuIo = CPUIO_FROM_ROOT_BRIDGE_INSTANCE (RootBridgeInstance);

>> -

>> -  if (Buffer == NULL) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  if (Width >= EfiPciWidthMaximum) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  if (((Address < PCI_MEM32_BASE) || (Address > (PCI_MEM32_BASE + PCI_MEM32_SIZE))) &&

>> -      ((Address < PCI_MEM64_BASE) || (Address > (PCI_MEM64_BASE + PCI_MEM64_SIZE)))) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  return CpuIo->Mem.Write (CpuIo, (EFI_CPU_IO_PROTOCOL_WIDTH)Width, Address, Count, Buffer);

>> -}

>> -

>> -EFI_STATUS

>> -PciRbIoRead (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

>> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

>> -  IN     UINT64                                   Address,

>> -  IN     UINTN                                    Count,

>> -  IN OUT VOID                                     *Buffer

>> -  )

>> -{

>> -  PCI_TRACE ("PciRbIoRead()");

>> -

>> -  if (Buffer == NULL) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  if (Width >= EfiPciWidthMaximum) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  // IO currently unsupported

>> -  return EFI_INVALID_PARAMETER;

>> -}

>> -

>> -EFI_STATUS

>> -PciRbIoWrite (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

>> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

>> -  IN     UINT64                                   Address,

>> -  IN     UINTN                                    Count,

>> -  IN OUT VOID                                     *Buffer

>> -  )

>> -{

>> -  PCI_TRACE ("PciRbIoWrite()");

>> -

>> -  if (Buffer == NULL) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  if (Width >= EfiPciWidthMaximum) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  // IO currently unsupported

>> -  return EFI_INVALID_PARAMETER;

>> -}

>> -

>> -EFI_STATUS

>> -PciRbPciRead (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

>> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

>> -  IN     UINT64                                   EfiAddress,

>> -  IN     UINTN                                    Count,

>> -  IN OUT VOID                                     *Buffer

>> -  )

>> -{

>> -  UINT32                      Offset;

>> -  PCI_ROOT_BRIDGE_INSTANCE    *RootBridgeInstance;

>> -  EFI_CPU_IO2_PROTOCOL        *CpuIo;

>> -  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *EfiPciAddress;

>> -  UINT64                      Address;

>> -

>> -  EfiPciAddress  = (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *)&EfiAddress;

>> -  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);

>> -  CpuIo = CPUIO_FROM_ROOT_BRIDGE_INSTANCE (RootBridgeInstance);

>> -

>> -  if (Buffer == NULL) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  if (Width >= EfiPciWidthMaximum) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  if (EfiPciAddress->ExtendedRegister) {

>> -    Offset = EfiPciAddress->ExtendedRegister;

>> -  } else {

>> -    Offset = EfiPciAddress->Register;

>> -  }

>> -

>> -  // The UEFI PCI enumerator scans for devices at all possible addresses,

>> -  // and ignores some PCI rules - this results in some hardware being

>> -  // detected multiple times. We work around this by faking absent

>> -  // devices

>> -  if ((EfiPciAddress->Bus == 0) && ((EfiPciAddress->Device != 0) || (EfiPciAddress->Function != 0))) {

>> -    *((UINT32 *)Buffer) = 0xffffffff;

>> -    return EFI_SUCCESS;

>> -  }

>> -  if ((EfiPciAddress->Bus == 1) && ((EfiPciAddress->Device != 0) || (EfiPciAddress->Function != 0))) {

>> -    *((UINT32 *)Buffer) = 0xffffffff;

>> -    return EFI_SUCCESS;

>> -  }

>> -

>> -  // Work around incorrect class ID in the root bridge

>> -  if ((EfiPciAddress->Bus == 0) && (EfiPciAddress->Device == 0) && (EfiPciAddress->Function == 0) && (Offset == 8)) {

>> -    *((UINT32 *)Buffer) = 0x06040001;

>> -    return EFI_SUCCESS;

>> -   }

>> -

>> -  Address = PCI_ECAM_BASE + ((EfiPciAddress->Bus << 20) |

>> -                         (EfiPciAddress->Device << 15) |

>> -                         (EfiPciAddress->Function << 12) | Offset);

>> -

>> -  if ((Address < PCI_ECAM_BASE) || (Address > PCI_ECAM_BASE + PCI_ECAM_SIZE)) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  return CpuIo->Mem.Read (CpuIo, (EFI_CPU_IO_PROTOCOL_WIDTH)Width, Address, Count, Buffer);

>> -}

>> -

>> -EFI_STATUS

>> -PciRbPciWrite (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

>> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

>> -  IN     UINT64                                   EfiAddress,

>> -  IN     UINTN                                    Count,

>> -  IN OUT VOID                                     *Buffer

>> -  )

>> -{

>> -  UINT32                      Offset;

>> -  PCI_ROOT_BRIDGE_INSTANCE    *RootBridgeInstance;

>> -  EFI_CPU_IO2_PROTOCOL        *CpuIo;

>> -  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *EfiPciAddress;

>> -  UINT64                      Address;

>> -

>> -  EfiPciAddress  = (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *)&EfiAddress;

>> -  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);

>> -  CpuIo = CPUIO_FROM_ROOT_BRIDGE_INSTANCE (RootBridgeInstance);

>> -

>> -  if (Buffer == NULL) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  if (Width >= EfiPciWidthMaximum) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  if (EfiPciAddress->ExtendedRegister)

>> -    Offset = EfiPciAddress->ExtendedRegister;

>> -  else

>> -    Offset = EfiPciAddress->Register;

>> -

>> -  Address = PCI_ECAM_BASE + ((EfiPciAddress->Bus << 20) |

>> -                         (EfiPciAddress->Device << 15) |

>> -                         (EfiPciAddress->Function << 12) | Offset);

>> -

>> -  if (Address < PCI_ECAM_BASE || Address > PCI_ECAM_BASE + PCI_ECAM_SIZE) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  return CpuIo->Mem.Write (CpuIo, (EFI_CPU_IO_PROTOCOL_WIDTH)Width, Address, Count, Buffer);

>> -}

>> -

>> -EFI_STATUS

>> -PciRbCopyMem (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

>> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,

>> -  IN     UINT64                                   DestAddress,

>> -  IN     UINT64                                   SrcAddress,

>> -  IN     UINTN                                    Count

>> -  )

>> -{

>> -  EFI_STATUS  Status;

>> -  BOOLEAN     Direction;

>> -  UINTN       Stride;

>> -  UINTN       Index;

>> -  UINT64      Result;

>> -

>> -  PCI_TRACE ("PciRbCopyMem()");

>> -

>> -  if (Width > EfiPciWidthUint64) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  if (DestAddress == SrcAddress) {

>> -    return EFI_SUCCESS;

>> -  }

>> -

>> -  Stride = (UINTN)(1 << Width);

>> -

>> -  Direction = TRUE;

>> -  if ((DestAddress > SrcAddress) && (DestAddress < (SrcAddress + Count * Stride))) {

>> -    Direction   = FALSE;

>> -    SrcAddress  = SrcAddress  + (Count-1) * Stride;

>> -    DestAddress = DestAddress + (Count-1) * Stride;

>> -  }

>> -

>> -  for (Index = 0; Index < Count; Index++) {

>> -    Status = PciRbMemRead (

>> -               This,

>> -               Width,

>> -               SrcAddress,

>> -               1,

>> -               &Result

>> -               );

>> -    if (EFI_ERROR (Status)) {

>> -      return Status;

>> -    }

>> -    Status = PciRbMemWrite (

>> -               This,

>> -               Width,

>> -               DestAddress,

>> -               1,

>> -               &Result

>> -               );

>> -    if (EFI_ERROR (Status)) {

>> -      return Status;

>> -    }

>> -    if (Direction) {

>> -      SrcAddress  += Stride;

>> -      DestAddress += Stride;

>> -    } else {

>> -      SrcAddress  -= Stride;

>> -      DestAddress -= Stride;

>> -    }

>> -  }

>> -  return EFI_SUCCESS;

>> -}

>> -

>> -EFI_STATUS

>> -PciRbMap (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL                *This,

>> -  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION  Operation,

>> -  IN     VOID                                       *HostAddress,

>> -  IN OUT UINTN                                      *NumberOfBytes,

>> -  OUT    EFI_PHYSICAL_ADDRESS                       *DeviceAddress,

>> -  OUT    VOID                                       **Mapping

>> -  )

>> -{

>> -  DMA_MAP_OPERATION   DmaOperation;

>> -

>> -  PCI_TRACE ("PciRbMap()");

>> -

>> -  if (Operation == EfiPciOperationBusMasterRead ||

>> -      Operation == EfiPciOperationBusMasterRead64) {

>> -    DmaOperation = MapOperationBusMasterRead;

>> -  } else if (Operation == EfiPciOperationBusMasterWrite ||

>> -             Operation == EfiPciOperationBusMasterWrite64) {

>> -    DmaOperation = MapOperationBusMasterWrite;

>> -  } else if (Operation == EfiPciOperationBusMasterCommonBuffer ||

>> -             Operation == EfiPciOperationBusMasterCommonBuffer64) {

>> -    DmaOperation = MapOperationBusMasterCommonBuffer;

>> -  } else {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -  return DmaMap (DmaOperation, HostAddress, NumberOfBytes, DeviceAddress, Mapping);

>> -}

>> -

>> -EFI_STATUS

>> -PciRbUnMap (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,

>> -  IN  VOID                                     *Mapping

>> -  )

>> -{

>> -  PCI_TRACE ("PciRbUnMap()");

>> -  return DmaUnmap (Mapping);

>> -}

>> -

>> -EFI_STATUS

>> -PciRbAllocateBuffer (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

>> -  IN     EFI_ALLOCATE_TYPE                        Type,

>> -  IN     EFI_MEMORY_TYPE                          MemoryType,

>> -  IN     UINTN                                    Pages,

>> -  IN OUT VOID                                     **HostAddress,

>> -  IN     UINT64                                   Attributes

>> -  )

>> -{

>> -  PCI_TRACE ("PciRbAllocateBuffer()");

>> -

>> -  if (Attributes & EFI_PCI_ATTRIBUTE_INVALID_FOR_ALLOCATE_BUFFER) {

>> -    return EFI_UNSUPPORTED;

>> -  }

>> -

>> -  return DmaAllocateBuffer (MemoryType, Pages, HostAddress);

>> -}

>> -

>> -EFI_STATUS

>> -PciRbFreeBuffer (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,

>> -  IN  UINTN                                    Pages,

>> -  IN  VOID                                     *HostAddress

>> -  )

>> -{

>> -  PCI_TRACE ("PciRbFreeBuffer()");

>> -  return DmaFreeBuffer (Pages, HostAddress);

>> -}

>> -

>> -EFI_STATUS

>> -PciRbFlush (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *This

>> -  )

>> -{

>> -  PCI_TRACE ("PciRbFlush()");

>> -

>> -  //TODO: Not supported yet

>> -

>> -  return EFI_SUCCESS;

>> -}

>> -

>> -EFI_STATUS

>> -PciRbSetAttributes (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,

>> -  IN     UINT64                                   Attributes,

>> -  IN OUT UINT64                                   *ResourceBase,

>> -  IN OUT UINT64                                   *ResourceLength

>> -  )

>> -{

>> -  PCI_ROOT_BRIDGE_INSTANCE    *RootBridgeInstance;

>> -

>> -  PCI_TRACE ("PciRbSetAttributes()");

>> -

>> -  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);

>> -

>> -  if (Attributes) {

>> -    if ((Attributes & (~(RootBridgeInstance->Supports))) != 0) {

>> -      return EFI_UNSUPPORTED;

>> -    }

>> -  }

>> -

>> -  //TODO: Cannot allowed to change attributes

>> -  if (Attributes & ~RootBridgeInstance->Attributes) {

>> -    return EFI_UNSUPPORTED;

>> -  }

>> -

>> -  return EFI_SUCCESS;

>> -}

>> -

>> -EFI_STATUS

>> -PciRbGetAttributes (

>> -  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,

>> -  OUT UINT64                                   *Supported,

>> -  OUT UINT64                                   *Attributes

>> -  )

>> -{

>> -  PCI_ROOT_BRIDGE_INSTANCE    *RootBridgeInstance;

>> -

>> -  PCI_TRACE ("PciRbGetAttributes()");

>> -

>> -  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);

>> -

>> -  if (Attributes == NULL && Supported == NULL) {

>> -    return EFI_INVALID_PARAMETER;

>> -  }

>> -

>> -  // Set the return value for Supported and Attributes

>> -  if (Supported) {

>> -    *Supported  = RootBridgeInstance->Supports;

>> -  }

>> -

>> -  if (Attributes) {

>> -    *Attributes = RootBridgeInstance->Attributes;

>> -  }

>> -

>> -  return EFI_SUCCESS;

>> -}

>> -

>> -EFI_STATUS

>> -PciRbConfiguration (

>> -  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL          *This,

>> -  OUT VOID                                     **Resources

>> -  )

>> -{

>> -  PCI_ROOT_BRIDGE_INSTANCE              *RootBridge;

>> -  UINTN                                 Index;

>> -

>> -  PCI_TRACE ("PciRbConfiguration()");

>> -

>> -  RootBridge = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);

>> -

>> -  for (Index = 0; Index < ResTypeMax; Index++) {

>> -    //if (ResAlloc[Index].Length != 0) => Resource allocated

>> -    if (RootBridge->ResAlloc[Index].Length != 0) {

>> -      Configuration.SpaceDesp[Index].AddrRangeMin = RootBridge->ResAlloc[Index].Base;

>> -      Configuration.SpaceDesp[Index].AddrRangeMax = RootBridge->ResAlloc[Index].Base + RootBridge->ResAlloc[Index].Length - 1;

>> -      Configuration.SpaceDesp[Index].AddrLen      = RootBridge->ResAlloc[Index].Length;

>> -    }

>> -  }

>> -

>> -  // Set up Configuration for the bus

>> -  Configuration.SpaceDesp[Index].AddrRangeMin = RootBridge->BusStart;

>> -  Configuration.SpaceDesp[Index].AddrLen      = RootBridge->BusLength;

>> -

>> -  *Resources = &Configuration;

>> -  return EFI_SUCCESS;

>> -}

>> -

>> -EFI_STATUS

>> -PciRbConstructor (

>> -  IN  PCI_HOST_BRIDGE_INSTANCE *HostBridge,

>> -  IN  UINT32 PciAcpiUid,

>> -  IN  UINT64 MemAllocAttributes

>> -  )

>> -{

>> -  PCI_ROOT_BRIDGE_INSTANCE* RootBridge;

>> -  EFI_STATUS Status;

>> -

>> -  PCI_TRACE ("PciRbConstructor()");

>> -

>> -  // Allocate Memory for the Instance from a Template

>> -  RootBridge = AllocateZeroPool (sizeof (PCI_ROOT_BRIDGE_INSTANCE));

>> -  if (RootBridge == NULL) {

>> -    PCI_TRACE ("PciRbConstructor(): ERROR: Out of Resources");

>> -    return EFI_OUT_OF_RESOURCES;

>> -  }

>> -  RootBridge->Signature = PCI_ROOT_BRIDGE_SIGNATURE;

>> -  CopyMem (&(RootBridge->DevicePath), &gDevicePathTemplate, sizeof (EFI_PCI_ROOT_BRIDGE_DEVICE_PATH));

>> -  CopyMem (&(RootBridge->Io), &gIoTemplate, sizeof (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL));

>> -

>> -  // Set Parent Handle

>> -  RootBridge->Io.ParentHandle = HostBridge->Handle;

>> -

>> -  // Attach the Root Bridge to the PCI Host Bridge Instance

>> -  RootBridge->HostBridge = HostBridge;

>> -

>> -  // Set Device Path for this Root Bridge

>> -  RootBridge->DevicePath.Acpi.UID = PciAcpiUid;

>> -

>> -  RootBridge->BusStart  = FixedPcdGet32 (PcdPciBusMin);

>> -  RootBridge->BusLength = FixedPcdGet32 (PcdPciBusMax) - FixedPcdGet32 (PcdPciBusMin) + 1;

>> -

>> -  // PCI Attributes

>> -  RootBridge->Supports = 0;

>> -  RootBridge->Attributes = 0;

>> -

>> -  // Install Protocol Instances. It will also generate a device handle for the PCI Root Bridge

>> -  Status = gBS->InstallMultipleProtocolInterfaces (

>> -                      &RootBridge->Handle,

>> -                      &gEfiDevicePathProtocolGuid, &RootBridge->DevicePath,

>> -                      &gEfiPciRootBridgeIoProtocolGuid, &RootBridge->Io,

>> -                      NULL

>> -                      );

>> -  ASSERT (RootBridge->Signature == PCI_ROOT_BRIDGE_SIGNATURE);

>> -  if (EFI_ERROR (Status)) {

>> -    PCI_TRACE ("PciRbConstructor(): ERROR: Fail to install Protocol Interfaces");

>> -    FreePool (RootBridge);

>> -    return EFI_DEVICE_ERROR;

>> -  }

>> -

>> -  HostBridge->RootBridge = RootBridge;

>> -  return EFI_SUCCESS;

>> -}

>> -

>> -EFI_STATUS

>> -PciRbDestructor (

>> -  IN  PCI_ROOT_BRIDGE_INSTANCE* RootBridge

>> -  )

>> -{

>> -  EFI_STATUS Status;

>> -

>> -  Status = gBS->UninstallMultipleProtocolInterfaces (

>> -                        RootBridge->Handle,

>> -                        &gEfiDevicePathProtocolGuid, &RootBridge->DevicePath,

>> -                        &gEfiPciRootBridgeIoProtocolGuid, &RootBridge->Io,

>> -                        NULL

>> -                        );

>> -

>> -  FreePool (RootBridge);

>> -

>> -  return Status;

>> -}

>> diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.c b/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.c

>> deleted file mode 100644

>> index 57e9e9df54a9..000000000000

>> --- a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.c

>> +++ /dev/null

>> @@ -1,170 +0,0 @@

>> -/** @file

>> -*  Initialize the XPress-RICH3 PCIe Root complex

>> -*

>> -*  Copyright (c) 2011-2015, ARM Ltd. All rights reserved.

>> -*

>> -*  This program and the accompanying materials

>> -*  are licensed and made available under the terms and conditions of the BSD License

>> -*  which accompanies this distribution.  The full text of the license may be found at

>> -*  http://opensource.org/licenses/bsd-license.php

>> -*

>> -*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

>> -*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

>> -*

>> -**/

>> -

>> -#include "PciHostBridge.h"

>> -

>> -#include <Protocol/Cpu.h>

>> -

>> -#include "ArmPlatform.h"

>> -

>> -EFI_CPU_ARCH_PROTOCOL   *mCpu;

>> -

>> -#define PCI_BRIDGE_REVISION_ID                        1

>> -#define CLASS_CODE_REGISTER(Class, SubClass, ProgIf)  ((Class << 16) | (SubClass << 8) | ProgIf)

>> -#define PLDA_BRIDGE_CCR                               CLASS_CODE_REGISTER(PCI_CLASS_BRIDGE, \

>> -                                                                          PCI_CLASS_BRIDGE_P2P, \

>> -                                                                          PCI_IF_BRIDGE_P2P)

>> -

>> -STATIC

>> -VOID

>> -SetTranslationAddressEntry (

>> -  IN  EFI_CPU_IO2_PROTOCOL *CpuIo,

>> -  IN UINTN                  Entry,

>> -  IN UINT64                 SourceAddress,

>> -  IN UINT64                 TranslatedAddress,

>> -  IN UINT64                 TranslationSize,

>> -  IN UINT64                 TranslationParameter

>> -  )

>> -{

>> -  UINTN Log2Size = HighBitSet64 (TranslationSize);

>> -

>> -  // Ensure the size is a power of two. Restriction form the AXI Translation logic

>> -  // Othwerwise we increase the translation size

>> -  if (TranslationSize != (1ULL << Log2Size)) {

>> -    DEBUG ((EFI_D_WARN, "PCI: The size 0x%lX of the region 0x%lx has been increased to "

>> -                        "be a power of two for the AXI translation table.\n",

>> -                        TranslationSize, SourceAddress));

>> -    Log2Size++;

>> -  }

>> -

>> -  PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_SRC_ADDR_LOW_SIZE,

>> -      (UINT32)SourceAddress | ((Log2Size - 1) << 1) | 0x1);

>> -  PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_SRC_ADDR_HI, SourceAddress >> 32);

>> -

>> -  PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_TRSL_ADDR_LOW, (UINT32)TranslatedAddress);

>> -  PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_TRSL_ADDR_HI, TranslatedAddress >> 32);

>> -

>> -  PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_TRSL_PARAM, TranslationParameter);

>> -}

>> -

>> -EFI_STATUS

>> -HWPciRbInit (

>> -  IN  EFI_CPU_IO2_PROTOCOL *CpuIo

>> -  )

>> -{

>> -  UINT32 Value;

>> -  UINT32 Index;

>> -  UINTN  TranslationTable;

>> -

>> -  PCI_TRACE ("VExpressPciRbInit()");

>> -

>> -  PCI_TRACE ("PCIe Setting up Address Translation");

>> -

>> -  // The Juno PIO window is 8M, so we need full 32-bit PIO decoding.

>> -  PCIE_ROOTPORT_WRITE32 (PCIE_BAR_WIN, PCIE_BAR_WIN_SUPPORT_IO | PCIE_BAR_WIN_SUPPORT_IO32 |

>> -                         PCIE_BAR_WIN_SUPPORT_MEM | PCIE_BAR_WIN_SUPPORT_MEM64);

>> -

>> -  // Setup the PCI Configuration Registers

>> -  // Offset 0a: SubClass       04 PCI-PCI Bridge

>> -  // Offset 0b: BaseClass      06 Bridge Device

>> -  // The Class Code register is a 24 bit and can be configured by setting up the PCIE_PCI_IDS

>> -  // Refer [1] Chapter 13

>> -  PCIE_ROOTPORT_WRITE32 (PCIE_PCI_IDS + PCIE_PCI_IDS_CLASSCODE_OFFSET, ((PLDA_BRIDGE_CCR << 8) | PCI_BRIDGE_REVISION_ID));

>> -

>> -  //

>> -  // PCIE Window 0 -> AXI4 Master 0 Address Translations

>> -  //

>> -  TranslationTable = VEXPRESS_ATR_PCIE_WIN0;

>> -

>> -  // MSI Support

>> -  SetTranslationAddressEntry (CpuIo, TranslationTable, ARM_JUNO_GIV2M_MSI_BASE, ARM_JUNO_GIV2M_MSI_BASE,

>> -      ARM_JUNO_GIV2M_MSI_SZ, PCI_ATR_TRSLID_AXIDEVICE);

>> -  TranslationTable += PCI_ATR_ENTRY_SIZE;

>> -

>> -  // System Memory Support

>> -  SetTranslationAddressEntry (CpuIo, TranslationTable, PcdGet64 (PcdSystemMemoryBase), PcdGet64 (PcdSystemMemoryBase),

>> -      PcdGet64 (PcdSystemMemorySize), PCI_ATR_TRSLID_AXIMEMORY);

>> -  TranslationTable += PCI_ATR_ENTRY_SIZE;

>> -  SetTranslationAddressEntry (CpuIo, TranslationTable, ARM_JUNO_EXTRA_SYSTEM_MEMORY_BASE, ARM_JUNO_EXTRA_SYSTEM_MEMORY_BASE,

>> -      ARM_JUNO_EXTRA_SYSTEM_MEMORY_SZ, PCI_ATR_TRSLID_AXIMEMORY);

>> -

>> -  //

>> -  // AXI4 Slave 1 -> PCIE Window 0 Address Translations

>> -  //

>> -  TranslationTable = VEXPRESS_ATR_AXI4_SLV1;

>> -

>> -  // PCI ECAM Support

>> -  SetTranslationAddressEntry (CpuIo, TranslationTable, PCI_ECAM_BASE, PCI_ECAM_BASE, PCI_ECAM_SIZE, PCI_ATR_TRSLID_PCIE_CONF);

>> -  TranslationTable += PCI_ATR_ENTRY_SIZE;

>> -

>> -  // PCI IO Support, the PIO space is translated from the arm MMIO PCI_IO_BASE address to the PIO base address of 0

>> -  // AKA, PIO addresses used by endpoints are generally in the range of 0-64K.

>> -  SetTranslationAddressEntry (CpuIo, TranslationTable, PCI_IO_BASE, 0, PCI_IO_SIZE, PCI_ATR_TRSLID_PCIE_IO);

>> -  TranslationTable += PCI_ATR_ENTRY_SIZE;

>> -

>> -  // PCI MEM32 Support

>> -  SetTranslationAddressEntry (CpuIo, TranslationTable, PCI_MEM32_BASE, PCI_MEM32_BASE, PCI_MEM32_SIZE, PCI_ATR_TRSLID_PCIE_MEMORY);

>> -  TranslationTable += PCI_ATR_ENTRY_SIZE;

>> -

>> -  // PCI MEM64 Support

>> -  SetTranslationAddressEntry (CpuIo, TranslationTable, PCI_MEM64_BASE, PCI_MEM64_BASE, PCI_MEM64_SIZE, PCI_ATR_TRSLID_PCIE_MEMORY);

>> -

>> -  // Add credits

>> -  PCIE_ROOTPORT_WRITE32 (PCIE_VC_CRED, 0x00f0b818);

>> -  PCIE_ROOTPORT_WRITE32 (PCIE_VC_CRED + 4, 0x1);

>> -

>> -  // Allow ECRC

>> -  PCIE_ROOTPORT_WRITE32 (PCIE_PEX_SPC2, 0x6006);

>> -

>> -  // Reset controller

>> -  PCIE_CONTROL_WRITE32 (PCIE_CONTROL_RST_CTL, PCIE_CONTROL_RST_CTL_RCPHY_REL);

>> -

>> -  // Wait for reset

>> -  for (Index = 0; Index < 1000; Index++) {

>> -    gBS->Stall (1000);

>> -    PCIE_CONTROL_READ32 (PCIE_CONTROL_RST_STS, Value);

>> -    if ((Value & PCIE_CONTROL_RST_STS_RCPHYPLL_OUT) == PCIE_CONTROL_RST_STS_RCPHYPLL_OUT) {

>> -      break;

>> -    }

>> -  }

>> -

>> -  // Check for reset

>> -  if (!(Value & PCIE_CONTROL_RST_STS_RCPHYPLL_OUT)) {

>> -    DEBUG ((EFI_D_ERROR, "PCIe failed to come out of reset: %x.\n", Value));

>> -    return EFI_NOT_READY;

>> -  }

>> -

>> -  gBS->Stall (1000);

>> -  PCI_TRACE ("Checking link Status...");

>> -

>> -  // Wait for Link Up

>> -  for (Index = 0; Index < 1000; Index++) {

>> -    gBS->Stall (1000);

>> -    PCIE_ROOTPORT_READ32 (VEXPRESS_BASIC_STATUS, Value);

>> -    if (Value & LINK_UP) {

>> -      break;

>> -    }

>> -  }

>> -

>> -  // Check for link up

>> -  if (!(Value & LINK_UP)) {

>> -    DEBUG ((EFI_D_ERROR, "PCIe link not up: %x.\n", Value));

>> -    return EFI_NOT_READY;

>> -  }

>> -

>> -  PCIE_ROOTPORT_WRITE32 (PCIE_IMASK_LOCAL, PCIE_INT_MSI | PCIE_INT_INTx);

>> -

>> -  return EFI_SUCCESS;

>> -}

>> diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.h b/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.h

>> deleted file mode 100644

>> index a0c11a70567d..000000000000

>> --- a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.h

>> +++ /dev/null

>> @@ -1,111 +0,0 @@

>> -/** @file

>> -*  Header containing the Xpress-RICH3 PCIe Root Complex specific values

>> -*

>> -*  Copyright (c) 2011-2015, ARM Ltd. All rights reserved.

>> -*

>> -*  This program and the accompanying materials

>> -*  are licensed and made available under the terms and conditions of the BSD License

>> -*  which accompanies this distribution.  The full text of the license may be found at

>> -*  http://opensource.org/licenses/bsd-license.php

>> -*

>> -*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,

>> -*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

>> -*

>> -**/

>> -

>> -#ifndef __XPRESS_RICH3_H__

>> -#define __XPRESS_RICH3_H__

>> -

>> -#include <Protocol/CpuIo2.h>

>> -#include <Library/PcdLib.h>

>> -

>> -#define PCI_ECAM_BASE       FixedPcdGet64 (PcdPciConfigurationSpaceBaseAddress)

>> -#define PCI_ECAM_SIZE       FixedPcdGet64 (PcdPciConfigurationSpaceSize)

>> -#define PCI_IO_BASE         FixedPcdGet64 (PcdPciIoBase)

>> -#define PCI_IO_SIZE         FixedPcdGet64 (PcdPciIoSize)

>> -#define PCI_MEM32_BASE      FixedPcdGet64 (PcdPciMmio32Base)

>> -#define PCI_MEM32_SIZE      FixedPcdGet64 (PcdPciMmio32Size)

>> -#define PCI_MEM64_BASE      FixedPcdGet64 (PcdPciMmio64Base)

>> -#define PCI_MEM64_SIZE      FixedPcdGet64 (PcdPciMmio64Size)

>> -

>> -/*

>> - * Bridge Internal Registers

>> - */

>> -

>> -// PCIe Available Credit Settings

>> -#define PCIE_VC_CRED                            0x090

>> -// PCIe PCI Standard Configuration Identification Settings registers

>> -#define PCIE_PCI_IDS                            0x098

>> -#define PCIE_PCI_IDS_CLASSCODE_OFFSET           0x4

>> -// PCIe Specific 2 Capabilities Settings

>> -#define PCIE_PEX_SPC2                           0x0d8

>> -// PCIe Windows Settings register

>> -#define PCIE_BAR_WIN                            0x0FC

>> -// Local Processor Interrupt Mask

>> -#define PCIE_IMASK_LOCAL                        0x180

>> -

>> -#define PCIE_BAR_WIN_SUPPORT_IO                 BIT0

>> -#define PCIE_BAR_WIN_SUPPORT_IO32               BIT1

>> -#define PCIE_BAR_WIN_SUPPORT_MEM                BIT2

>> -#define PCIE_BAR_WIN_SUPPORT_MEM64              BIT3

>> -

>> -#define PCIE_INT_MSI                            BIT28

>> -#define PCIE_INT_A                              BIT24

>> -#define PCIE_INT_B                              BIT25

>> -#define PCIE_INT_C                              BIT26

>> -#define PCIE_INT_D                              BIT27

>> -#define PCIE_INT_INTx                           (PCIE_INT_A | PCIE_INT_B |\

>> -                                                 PCIE_INT_C | PCIE_INT_D)

>> -

>> -/*

>> - * PCIe Control Registers

>> - */

>> -#define PCIE_CONTROL_RST_CTL     0x1004

>> -#define PCIE_CONTROL_RST_STS     0x1008

>> -

>> -/*

>> - * PCI Express Address Translation registers

>> - * All are offsets from PcdPcieControlBaseAddress

>> - */

>> -#define VEXPRESS_ATR_PCIE_WIN0    0x600

>> -#define VEXPRESS_ATR_AXI4_SLV0    0x800

>> -#define VEXPRESS_ATR_AXI4_SLV1    0x820

>> -

>> -#define PCI_ATR_ENTRY_SIZE           0x20

>> -#define PCI_ATR_SRC_ADDR_LOW_SIZE    0

>> -#define PCI_ATR_SRC_ADDR_HI          0x4

>> -#define PCI_ATR_TRSL_ADDR_LOW        0x8

>> -#define PCI_ATR_TRSL_ADDR_HI         0xc

>> -#define PCI_ATR_TRSL_PARAM           0x10

>> -

>> -#define PCI_ATR_TRSLID_AXIDEVICE     0x420004

>> -#define PCI_ATR_TRSLID_AXIMEMORY     0x4e0004

>> -#define PCI_ATR_TRSLID_PCIE_CONF     0x000001

>> -#define PCI_ATR_TRSLID_PCIE_IO       0x020000

>> -#define PCI_ATR_TRSLID_PCIE_MEMORY   0x000000

>> -

>> -#define PCIE_CONTROL_RST_CTL_RC_REL        (1 << 1)

>> -#define PCIE_CONTROL_RST_CTL_PHY_REL       (1 << 0)

>> -#define PCIE_CONTROL_RST_CTL_RCPHY_REL     (PCIE_CONTROL_RST_CTL_RC_REL | PCIE_CONTROL_RST_CTL_PHY_REL)

>> -

>> -#define PCIE_CONTROL_RST_STS_RC_ST         (1 << 2)

>> -#define PCIE_CONTROL_RST_STS_PHY_ST        (1 << 1)

>> -#define PCIE_CONTROL_RST_STS_PLL_ST        (1 << 0)

>> -#define PCIE_CONTROL_RST_STS_RCPHYPLL_OUT  (PCIE_CONTROL_RST_STS_RC_ST | PCIE_CONTROL_RST_STS_PHY_ST | PCIE_CONTROL_RST_STS_PLL_ST)

>> -

>> -#define VEXPRESS_BASIC_STATUS       0x18

>> -#define LINK_UP                     0xff

>> -

>> -/*

>> - * Initialize Versatile Express PCIe Host Bridge

>> - */

>> -EFI_STATUS

>> -VExpressPciRbInit (

>> -  IN EFI_CPU_IO2_PROTOCOL *CpuIo

>> -  );

>> -

>> -// Does not support neither EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM

>> -// nor EFI_PCI_HOST_BRIDGE_MEM64_DECODE

>> -#define PCI_MEMORY_ALLOCATION_ATTRIBUTES    0

>> -

>> -#endif

>> --

>> 2.9.3

>>

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
diff mbox series

Patch

diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.c b/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.c
deleted file mode 100644
index e1a6b749e4e6..000000000000
--- a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.c
+++ /dev/null
@@ -1,199 +0,0 @@ 
-/** @file
-*  Pci Host Bridge support for the Xpress-RICH3 PCIe Root Complex
-*
-*  Copyright (c) 2011-2015, ARM Ltd. All rights reserved.
-*
-*  This program and the accompanying materials
-*  are licensed and made available under the terms and conditions of the BSD License
-*  which accompanies this distribution.  The full text of the license may be found at
-*  http://opensource.org/licenses/bsd-license.php
-*
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-
-#include "PciHostBridge.h"
-
-#include <Guid/EventGroup.h>
-
-/**
- * PCI Root Bridge Description
- */
-typedef struct {
-  UINT32  AcpiUid;
-  UINT64  MemAllocAttributes;
-} PCI_ROOT_BRIDGE_DESC;
-
-PCI_ROOT_BRIDGE_DESC PciRbDescriptions = {
-    0,                                  // AcpiUid
-    PCI_MEMORY_ALLOCATION_ATTRIBUTES    // MemAllocAttributes
-};
-
-/**
- * Template for PCI Host Bridge Instance
- **/
-STATIC CONST PCI_HOST_BRIDGE_INSTANCE
-gPciHostBridgeInstanceTemplate = {
-  PCI_HOST_BRIDGE_SIGNATURE,      //Signature
-  NULL,                           // Handle
-  NULL,                           // ImageHandle
-  NULL,                           // RootBridge
-  TRUE,                           // CanRestarted
-  NULL,                           // CpuIo
-  NULL,                           // Metronome
-  {                               // ResAlloc
-    PciHbRaNotifyPhase,           //   ResAlloc.NotifyPhase
-    PciHbRaGetNextRootBridge,     //   ResAlloc.GetNextRootBridge
-    PciHbRaGetAllocAttributes,    //   ResAlloc.GetAllocAttributes
-    PciHbRaStartBusEnumeration,   //   ResAlloc.StartBusEnumeration
-    PciHbRaSetBusNumbers,         //   ResAlloc.SetBusNumbers
-    PciHbRaSubmitResources,       //   ResAlloc.SubmitResources
-    PciHbRaGetProposedResources,  //   ResAlloc.GetProposedResources
-    PciHbRaPreprocessController   //   ResAlloc.PreprocessController
-  }
-};
-PCI_HOST_BRIDGE_INSTANCE* gpPciHostBridgeInstance;
-
-EFI_STATUS
-HostBridgeConstructor (
-  IN OUT PCI_HOST_BRIDGE_INSTANCE** Instance,
-  IN  EFI_HANDLE                    ImageHandle
-  )
-{
-  EFI_STATUS                  Status;
-  PCI_HOST_BRIDGE_INSTANCE*   HostBridge;
-
-  PCI_TRACE ("HostBridgeConstructor()");
-
-  if (Instance == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  HostBridge = AllocateCopyPool (sizeof (PCI_HOST_BRIDGE_INSTANCE), &gPciHostBridgeInstanceTemplate);
-  if (HostBridge == NULL) {
-    PCI_TRACE ("HostBridgeConstructor(): FAIL to allocate resources");
-    return EFI_OUT_OF_RESOURCES;
-  }
-
-  // It will also create a device handle for the PCI Host Bridge (as HostBridge->Handle == NULL)
-  Status = gBS->InstallMultipleProtocolInterfaces (
-                    &HostBridge->Handle,
-                    &gEfiPciHostBridgeResourceAllocationProtocolGuid, &HostBridge->ResAlloc,
-                    NULL
-                    );
-  if (EFI_ERROR (Status)) {
-    PCI_TRACE ("HostBridgeConstructor(): FAIL to install resource allocator");
-    FreePool (HostBridge);
-    return EFI_DEVICE_ERROR;
-  } else {
-    PCI_TRACE ("HostBridgeConstructor(): SUCCEED to install resource allocator");
-  }
-
-  Status = gBS->LocateProtocol (&gEfiCpuIo2ProtocolGuid, NULL, (VOID **)(&(HostBridge->CpuIo)));
-  ASSERT_EFI_ERROR (Status);
-
-  Status = gBS->LocateProtocol (&gEfiMetronomeArchProtocolGuid, NULL, (VOID **)(&(HostBridge->Metronome)));
-  ASSERT_EFI_ERROR (Status);
-
-  HostBridge->ImageHandle = ImageHandle;
-
-  *Instance = HostBridge;
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-HostBridgeDestructor (
-  IN PCI_HOST_BRIDGE_INSTANCE* HostBridge
-  )
-{
-  EFI_STATUS Status;
-
-  Status = gBS->UninstallMultipleProtocolInterfaces (
-                      HostBridge->Handle,
-                      &gEfiPciHostBridgeResourceAllocationProtocolGuid, &HostBridge->ResAlloc,
-                      NULL
-                      );
-
-  if (HostBridge->RootBridge) {
-    PciRbDestructor (HostBridge->RootBridge);
-  }
-
-  FreePool (HostBridge);
-
-  return Status;
-}
-
-/**
-  Entry point of this driver
-
-  @param ImageHandle     Handle of driver image
-  @param SystemTable     Point to EFI_SYSTEM_TABLE
-
-  @retval EFI_OUT_OF_RESOURCES  Can not allocate memory resource
-  @retval EFI_DEVICE_ERROR      Can not install the protocol instance
-  @retval EFI_SUCCESS           Success to initialize the Pci host bridge.
-**/
-EFI_STATUS
-EFIAPI
-PciHostBridgeEntryPoint (
-  IN EFI_HANDLE        ImageHandle,
-  IN EFI_SYSTEM_TABLE  *SystemTable
-  )
-{
-  EFI_STATUS                  Status;
-
-  PCI_TRACE ("PciHostBridgeEntryPoint()");
-
-  // Creation of the PCI Host Bridge Instance
-  Status = HostBridgeConstructor (&gpPciHostBridgeInstance, ImageHandle);
-  if (EFI_ERROR (Status)) {
-    PCI_TRACE ("PciHostBridgeEntryPoint(): ERROR: Fail to construct PCI Host Bridge.");
-    return Status;
-  }
-
-  // Creation of the PCIe Root Bridge
-  Status = PciRbConstructor (gpPciHostBridgeInstance, PciRbDescriptions.AcpiUid, PciRbDescriptions.MemAllocAttributes);
-  if (EFI_ERROR (Status)) {
-    PCI_TRACE ("PciHostBridgeEntryPoint(): ERROR: Fail to construct PCI Root Bridge.");
-    return Status;
-  }
-  ASSERT (gpPciHostBridgeInstance->RootBridge->Signature == PCI_ROOT_BRIDGE_SIGNATURE);
-
-  // PCI 32bit Memory Space
-  Status = gDS->AddMemorySpace (
-    EfiGcdMemoryTypeMemoryMappedIo,
-    PCI_MEM32_BASE,
-    PCI_MEM32_SIZE,
-    0
-  );
-
-  // PCI 64bit Memory Space
-  Status = gDS->AddMemorySpace (
-    EfiGcdMemoryTypeMemoryMappedIo,
-    PCI_MEM64_BASE,
-    PCI_MEM64_SIZE,
-    0
-  );
-
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-EFIAPI
-PciHostBridgeUnload (
-  IN EFI_HANDLE  ImageHandle
-  )
-{
-  EFI_STATUS Status;
-
-  // Free Reserved memory space in GCD
-  gDS->RemoveMemorySpace (PCI_MEM32_BASE, PCI_MEM32_SIZE);
-  gDS->RemoveMemorySpace (PCI_MEM64_BASE, PCI_MEM64_SIZE);
-
-  // Free the allocated memory
-  Status = HostBridgeDestructor (gpPciHostBridgeInstance);
-  ASSERT_EFI_ERROR (Status);
-
-  return Status;
-}
diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.h b/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.h
deleted file mode 100644
index e53f4fa3a8d8..000000000000
--- a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridge.h
+++ /dev/null
@@ -1,324 +0,0 @@ 
-/** @file
-*  Header containing the structure specific to the Xpress-RICH3 PCIe Root Complex
-*
-*  Copyright (c) 2011-2015, ARM Ltd. All rights reserved.
-*
-*  This program and the accompanying materials
-*  are licensed and made available under the terms and conditions of the BSD License
-*  which accompanies this distribution.  The full text of the license may be found at
-*  http://opensource.org/licenses/bsd-license.php
-*
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-
-#ifndef __PCIHOSTBRIDGE_H
-#define __PCIHOSTBRIDGE_H
-
-#include <PiDxe.h>
-
-#include "XPressRich3.h"
-
-#include <IndustryStandard/Pci.h>
-#include <IndustryStandard/Acpi.h>
-
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/DebugLib.h>
-#include <Library/DxeServicesTableLib.h>
-#include <Library/IoLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/PcdLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-
-#include <Protocol/PciHostBridgeResourceAllocation.h>
-#include <Protocol/PciRootBridgeIo.h>
-#include <Protocol/PciIo.h>
-#include <Protocol/DevicePath.h>
-#include <Protocol/CpuIo2.h>
-#include <Protocol/Metronome.h>
-
-#define PCI_TRACE(txt)  DEBUG((EFI_D_VERBOSE, "ARM_PCI: " txt "\n"))
-
-#define PCIE_ROOTPORT_WRITE32(Add, Val) { UINT32 Value = (UINT32)(Val); CpuIo->Mem.Write (CpuIo,EfiCpuIoWidthUint32,(UINT64)(PcdGet64 (PcdPcieRootPortBaseAddress)+(Add)),1,&Value); }
-#define PCIE_ROOTPORT_READ32(Add, Val) { CpuIo->Mem.Read (CpuIo,EfiCpuIoWidthUint32,(UINT64)(PcdGet64 (PcdPcieRootPortBaseAddress)+(Add)),1,&Val); }
-
-#define PCIE_CONTROL_WRITE32(Add, Val) { UINT32 Value = (UINT32)(Val); CpuIo->Mem.Write (CpuIo,EfiCpuIoWidthUint32,(UINT64)(PcdGet64 (PcdPcieControlBaseAddress)+(Add)),1,&Value); }
-#define PCIE_CONTROL_READ32(Add, Val) { CpuIo->Mem.Read (CpuIo,EfiCpuIoWidthUint32,(UINT64)(PcdGet64 (PcdPcieControlBaseAddress)+(Add)),1,&Val); }
-
-/**
- * PCI Root Bridge Device Path (ACPI Device Node + End Node)
- */
-typedef struct {
-  ACPI_HID_DEVICE_PATH          Acpi;
-  EFI_DEVICE_PATH_PROTOCOL      End;
-} EFI_PCI_ROOT_BRIDGE_DEVICE_PATH;
-
-typedef enum {
-  ResTypeIo = 0,
-  ResTypeMem32,
-  ResTypePMem32,
-  ResTypeMem64,
-  ResTypePMem64,
-  ResTypeMax
-} PCI_RESOURCE_TYPE;
-
-#define ACPI_SPECFLAG_PREFETCHABLE      0x06
-#define EFI_RESOURCE_NONEXISTENT        0xFFFFFFFFFFFFFFFFULL
-#define EFI_RESOURCE_LESS               0xFFFFFFFFFFFFFFFEULL
-
-typedef struct {
-  UINT64  Base;
-  UINT64  Length;
-  UINT64  Alignment;
-} PCI_RESOURCE_ALLOC;
-
-typedef struct _PCI_HOST_BRIDGE_INSTANCE PCI_HOST_BRIDGE_INSTANCE;
-
-/**
- * PCI Root Bridge Instance structure
- **/
-typedef struct {
-  UINTN                            Signature;
-  EFI_HANDLE                       Handle;
-  PCI_HOST_BRIDGE_INSTANCE        *HostBridge;
-  //
-  // Set Type of memory allocation (could be EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM
-  // and EFI_PCI_HOST_BRIDGE_MEM64_DECODE).
-  //
-  UINT64                           MemAllocAttributes;
-  PCI_RESOURCE_ALLOC               ResAlloc[ResTypeMax];
-  UINTN                            BusStart;
-  UINTN                            BusLength;
-  UINT64                           Supports;
-  UINT64                           Attributes;
-  EFI_PCI_ROOT_BRIDGE_DEVICE_PATH  DevicePath;
-  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  Io;
-} PCI_ROOT_BRIDGE_INSTANCE;
-
-/**
- * PCI Host Bridge Instance structure
- **/
-struct _PCI_HOST_BRIDGE_INSTANCE {
-  UINTN                                             Signature;
-  EFI_HANDLE                                        Handle;
-  EFI_HANDLE                                        ImageHandle;
-  PCI_ROOT_BRIDGE_INSTANCE                         *RootBridge;
-  //
-  // The enumeration cannot be restarted after the process goes into the non initial
-  // enumeration phase.
-  //
-  BOOLEAN                                           CanRestarted;
-  EFI_CPU_IO2_PROTOCOL                             *CpuIo;
-  EFI_METRONOME_ARCH_PROTOCOL                      *Metronome;
-  EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  ResAlloc;
-};
-
-#define PCI_HOST_BRIDGE_SIGNATURE                   SIGNATURE_32 ('e', 'h', 's', 't')
-#define PCI_ROOT_BRIDGE_SIGNATURE                   SIGNATURE_32 ('e', '2', 'p', 'b')
-#define INSTANCE_FROM_RESOURCE_ALLOCATION_THIS(a)   CR (a, PCI_HOST_BRIDGE_INSTANCE, ResAlloc, PCI_HOST_BRIDGE_SIGNATURE)
-#define INSTANCE_FROM_ROOT_BRIDGE_IO_THIS(a)        CR (a, PCI_ROOT_BRIDGE_INSTANCE, Io, PCI_ROOT_BRIDGE_SIGNATURE)
-
-/**
- * PCI Host Bridge Resource Allocator Functions
- **/
-EFI_STATUS PciHbRaNotifyPhase (
-  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
-  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE     Phase
-  );
-
-EFI_STATUS PciHbRaGetNextRootBridge (
-  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,
-  IN OUT EFI_HANDLE                                    *RootBridgeHandle
-  );
-
-EFI_STATUS PciHbRaGetAllocAttributes (
-  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,
-  IN  EFI_HANDLE                                        RootBridgeHandle,
-  OUT UINT64                                           *Attributes
-  );
-
-EFI_STATUS PciHbRaStartBusEnumeration (
-  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,
-  IN  EFI_HANDLE                                        RootBridgeHandle,
-  OUT VOID                                            **Configuration
-  );
-
-EFI_STATUS PciHbRaSetBusNumbers (
-  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,
-  IN EFI_HANDLE                                         RootBridgeHandle,
-  IN VOID                                              *Configuration
-  );
-
-EFI_STATUS PciHbRaSubmitResources (
-  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,
-  IN EFI_HANDLE                                         RootBridgeHandle,
-  IN VOID                                              *Configuration
-  );
-
-EFI_STATUS PciHbRaGetProposedResources (
-  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,
-  IN  EFI_HANDLE                                        RootBridgeHandle,
-  OUT VOID                                            **Configuration
-  );
-
-EFI_STATUS PciHbRaPreprocessController (
-  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,
-  IN  EFI_HANDLE                                        RootBridgeHandle,
-  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS       PciAddress,
-  IN  EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE      Phase
-  );
-
-
-/**
- * PCI Root Bridge
- **/
-EFI_STATUS PciRbPollMem (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,
-  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,
-  IN  UINT64                                   Address,
-  IN  UINT64                                   Mask,
-  IN  UINT64                                   Value,
-  IN  UINT64                                   Delay,
-  OUT UINT64                                   *Result
-  );
-
-EFI_STATUS PciRbPollIo (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,
-  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,
-  IN  UINT64                                   Address,
-  IN  UINT64                                   Mask,
-  IN  UINT64                                   Value,
-  IN  UINT64                                   Delay,
-  OUT UINT64                                   *Result
-  );
-
-EFI_STATUS PciRbMemRead (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,
-  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,
-  IN     UINT64                                   Address,
-  IN     UINTN                                    Count,
-  IN OUT VOID                                     *Buffer
-  );
-
-EFI_STATUS PciRbMemWrite (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,
-  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,
-  IN     UINT64                                   Address,
-  IN     UINTN                                    Count,
-  IN OUT VOID                                     *Buffer
-  );
-
-EFI_STATUS PciRbIoRead (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,
-  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,
-  IN     UINT64                                   Address,
-  IN     UINTN                                    Count,
-  IN OUT VOID                                     *Buffer
-  );
-
-EFI_STATUS PciRbIoWrite (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,
-  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,
-  IN     UINT64                                   Address,
-  IN     UINTN                                    Count,
-  IN OUT VOID                                     *Buffer
-  );
-
-EFI_STATUS PciRbPciRead (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,
-  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,
-  IN     UINT64                                   Address,
-  IN     UINTN                                    Count,
-  IN OUT VOID                                     *Buffer
-  );
-
-EFI_STATUS PciRbPciWrite (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,
-  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,
-  IN     UINT64                                   Address,
-  IN     UINTN                                    Count,
-  IN OUT VOID                                     *Buffer
-  );
-
-EFI_STATUS PciRbCopyMem (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,
-  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,
-  IN     UINT64                                   DestAddress,
-  IN     UINT64                                   SrcAddress,
-  IN     UINTN                                    Count
-  );
-
-EFI_STATUS PciRbMap (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL                *This,
-  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION  Operation,
-  IN     VOID                                       *HostAddress,
-  IN OUT UINTN                                      *NumberOfBytes,
-  OUT    EFI_PHYSICAL_ADDRESS                       *DeviceAddress,
-  OUT    VOID                                       **Mapping
-  );
-
-EFI_STATUS PciRbUnMap (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,
-  IN  VOID                                     *Mapping
-  );
-
-EFI_STATUS PciRbAllocateBuffer (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,
-  IN     EFI_ALLOCATE_TYPE                        Type,
-  IN     EFI_MEMORY_TYPE                          MemoryType,
-  IN     UINTN                                    Pages,
-  IN OUT VOID                                     **HostAddress,
-  IN     UINT64                                   Attributes
-  );
-
-EFI_STATUS PciRbFreeBuffer (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,
-  IN  UINTN                                    Pages,
-  IN  VOID                                     *HostAddress
-  );
-
-EFI_STATUS PciRbFlush (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *This
-  );
-
-EFI_STATUS PciRbSetAttributes (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,
-  IN     UINT64                                   Attributes,
-  IN OUT UINT64                                   *ResourceBase,
-  IN OUT UINT64                                   *ResourceLength
-  );
-
-EFI_STATUS PciRbGetAttributes (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,
-  OUT UINT64                                   *Supports,
-  OUT UINT64                                   *Attributes
-  );
-
-EFI_STATUS PciRbConfiguration (
-  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL          *This,
-  OUT VOID                                     **Resources
-  );
-
-/**
- * PCI Root Bridge Functions
- **/
-EFI_STATUS
-PciRbConstructor (
-  IN  PCI_HOST_BRIDGE_INSTANCE *HostBridge,
-  IN  UINT32 PciAcpiUid,
-  IN  UINT64 MemAllocAttributes
-  );
-
-EFI_STATUS
-PciRbDestructor (
-  IN  PCI_ROOT_BRIDGE_INSTANCE* RootBridge
-  );
-
-EFI_STATUS
-HWPciRbInit (
-  IN  EFI_CPU_IO2_PROTOCOL *CpuIo
-  );
-
-#endif
diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeDxe.inf b/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeDxe.inf
deleted file mode 100644
index de28c805ae6e..000000000000
--- a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeDxe.inf
+++ /dev/null
@@ -1,76 +0,0 @@ 
-#/** @file
-#  INF file for the Xpress-RICH3 PCIe Root Complex
-#
-#  Copyright (c) 2011-2015, ARM Ltd. All rights reserved.
-#
-#  This program and the accompanying materials
-#  are licensed and made available under the terms and conditions of the BSD License
-#  which accompanies this distribution.  The full text of the license may be found at
-#  http://opensource.org/licenses/bsd-license.php
-#
-#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-#**/
-
-[Defines]
-  INF_VERSION                    = 0x00010005
-  BASE_NAME                      = PciHostBridge
-  FILE_GUID                      = C62F4B20-681E-11DF-8F0D-0002A5D5C51B
-  MODULE_TYPE                    = DXE_DRIVER
-  VERSION_STRING                 = 1.0
-
-  ENTRY_POINT                    = PciHostBridgeEntryPoint
-  UNLOAD_IMAGE                   = PciHostBridgeUnload
-
-[Packages]
-  MdePkg/MdePkg.dec
-  ArmPkg/ArmPkg.dec
-  EmbeddedPkg/EmbeddedPkg.dec
-  ArmPlatformPkg/ArmPlatformPkg.dec
-  ArmPlatformPkg/ArmJunoPkg/ArmJuno.dec
-
-[LibraryClasses]
-  UefiDriverEntryPoint
-  UefiBootServicesTableLib
-  MemoryAllocationLib
-  DxeServicesTableLib
-  CacheMaintenanceLib
-  DmaLib
-
-[Sources]
-  PciHostBridge.c
-  PciHostBridgeResourceAllocation.c
-  PciRootBridge.c
-  XPressRich3.c
-
-[Protocols]
-  gEfiPciHostBridgeResourceAllocationProtocolGuid # Produced
-  gEfiPciRootBridgeIoProtocolGuid                 # Produced
-  gEfiDevicePathProtocolGuid                      # Produced
-  gEfiCpuIo2ProtocolGuid                          # Consumed
-  gEfiMetronomeArchProtocolGuid                   # Consumed
-
-[FeaturePcd]
-  gArmJunoTokenSpaceGuid.PcdPciMaxPayloadFixup
-
-[Pcd.common]
-  gArmTokenSpaceGuid.PcdSystemMemoryBase
-  gArmTokenSpaceGuid.PcdSystemMemorySize
-
-  gArmTokenSpaceGuid.PcdPciBusMin
-  gArmTokenSpaceGuid.PcdPciBusMax
-  gArmTokenSpaceGuid.PcdPciIoBase
-  gArmTokenSpaceGuid.PcdPciIoSize
-  gArmTokenSpaceGuid.PcdPciMmio32Base
-  gArmTokenSpaceGuid.PcdPciMmio32Size
-  gArmTokenSpaceGuid.PcdPciMmio64Base
-  gArmTokenSpaceGuid.PcdPciMmio64Size
-
-  gArmJunoTokenSpaceGuid.PcdPcieControlBaseAddress
-  gArmJunoTokenSpaceGuid.PcdPcieRootPortBaseAddress
-  gArmJunoTokenSpaceGuid.PcdPciConfigurationSpaceBaseAddress
-  gArmJunoTokenSpaceGuid.PcdPciConfigurationSpaceSize
-
-[Depex]
-  gEfiCpuIo2ProtocolGuid AND gEfiMetronomeArchProtocolGuid
diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeResourceAllocation.c b/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeResourceAllocation.c
deleted file mode 100644
index de60db718408..000000000000
--- a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciHostBridgeResourceAllocation.c
+++ /dev/null
@@ -1,642 +0,0 @@ 
-/** @file
-*  Implementation of the Pci Host Bridge Resource Allocation for the Xpress-RICH3 PCIe Root Complex
-*
-*  Copyright (c) 2011-2015, ARM Ltd. All rights reserved.
-*
-*  This program and the accompanying materials
-*  are licensed and made available under the terms and conditions of the BSD License
-*  which accompanies this distribution.  The full text of the license may be found at
-*  http://opensource.org/licenses/bsd-license.php
-*
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-
-#include "PciHostBridge.h"
-
-EFI_STATUS
-PciHbRaNotifyPhase (
-  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This,
-  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE     Phase
-  )
-{
-  PCI_HOST_BRIDGE_INSTANCE    *HostBridgeInstance;
-  PCI_ROOT_BRIDGE_INSTANCE    *RootBridgeInstance;
-  EFI_STATUS                  Status;
-  EFI_PHYSICAL_ADDRESS        BaseAddress;
-  UINT64                      AddrLen;
-  UINTN                       BitsOfAlignment;
-
-  HostBridgeInstance = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);
-
-  PCI_TRACE ("PciHbRaNotifyPhase()");
-
-  // Check RootBridge Signature
-  ASSERT (HostBridgeInstance->RootBridge->Signature == PCI_ROOT_BRIDGE_SIGNATURE);
-
-  // The enumeration cannot be restarted after the process has been further than the first phase
-  if (Phase == EfiPciHostBridgeBeginEnumeration) {
-    if (!HostBridgeInstance->CanRestarted) {
-      return EFI_NOT_READY;
-    }
-  } else {
-    HostBridgeInstance->CanRestarted = FALSE;
-  }
-
-  switch (Phase) {
-  case EfiPciHostBridgeBeginEnumeration:
-    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeBeginEnumeration)");
-    // Resets the host bridge PCI apertures and internal data structures
-    Status = HWPciRbInit (HostBridgeInstance->CpuIo);
-    if (EFI_ERROR (Status)) {
-      return Status;
-    }
-    break;
-
-  case EfiPciHostBridgeBeginBusAllocation:
-    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeBeginBusAllocation)");
-    // The bus allocation phase is about to begin
-    break;
-
-  case EfiPciHostBridgeEndBusAllocation:
-    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeEndBusAllocation)");
-    // The bus allocation and bus programming phase is complete. All the PCI-to-PCI bridges have been given and written back
-    // a bus number range into their configuration
-    break;
-
-  case EfiPciHostBridgeBeginResourceAllocation:
-    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeBeginResourceAllocation)");
-    // The resource allocation phase is about to begin.
-    break;
-
-  case EfiPciHostBridgeAllocateResources:
-    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeAllocateResources)");
-    // Allocates resources per previously submitted requests for all the PCI root bridges. The resources have been submitted to
-    // PciHbRaSubmitResources() before.
-
-    RootBridgeInstance = HostBridgeInstance->RootBridge;
-    if (RootBridgeInstance->ResAlloc[ResTypeIo].Length != 0) {
-      BitsOfAlignment = HighBitSet64 (RootBridgeInstance->ResAlloc[ResTypeIo].Alignment) + 1;     // Get the number of '1' in Alignment
-      AddrLen = RootBridgeInstance->ResAlloc[ResTypeIo].Length;
-
-      Status = gDS->AllocateIoSpace (
-                  EfiGcdAllocateAnySearchBottomUp,
-                  EfiGcdIoTypeIo,
-                  BitsOfAlignment,
-                  AddrLen,
-                  &BaseAddress,
-                  HostBridgeInstance->ImageHandle,
-                  NULL
-               );
-      // If error then ResAlloc[n].Base ==0
-      if (!EFI_ERROR (Status)) {
-        RootBridgeInstance->ResAlloc[ResTypeIo].Base   = (UINTN)BaseAddress;
-      }
-    }
-
-    if (RootBridgeInstance->ResAlloc[ResTypeMem32].Length != 0) {
-      BitsOfAlignment = HighBitSet64 (RootBridgeInstance->ResAlloc[ResTypeMem32].Alignment) + 1;  // Get the number of '1' in Alignment
-      AddrLen = RootBridgeInstance->ResAlloc[ResTypeMem32].Length;
-
-      // Top of the 32bit PCI Memory space
-      BaseAddress = FixedPcdGet64 (PcdPciMmio32Base) + FixedPcdGet64 (PcdPciMmio32Size);
-
-      Status = gDS->AllocateMemorySpace (
-                  EfiGcdAllocateMaxAddressSearchTopDown,
-                  EfiGcdMemoryTypeMemoryMappedIo,
-                  BitsOfAlignment,
-                  AddrLen,
-                  &BaseAddress,
-                  HostBridgeInstance->ImageHandle,
-                  NULL
-               );
-
-      // Ensure the allocation is in the 32bit PCI memory space
-      if (!EFI_ERROR (Status) && (BaseAddress >= FixedPcdGet64 (PcdPciMmio32Base))) {
-        RootBridgeInstance->ResAlloc[ResTypeMem32].Base   = (UINTN)BaseAddress;
-      }
-    }
-    if (RootBridgeInstance->ResAlloc[ResTypePMem32].Length != 0) {
-      BitsOfAlignment = HighBitSet64 (RootBridgeInstance->ResAlloc[ResTypePMem32].Alignment) + 1;  // Get the number of '1' in Alignment
-      AddrLen = RootBridgeInstance->ResAlloc[ResTypePMem32].Length;
-
-      // Top of the 32bit PCI Memory space
-      BaseAddress = FixedPcdGet64 (PcdPciMmio32Base) + FixedPcdGet64 (PcdPciMmio32Size);
-
-      Status = gDS->AllocateMemorySpace (
-                  EfiGcdAllocateMaxAddressSearchTopDown,
-                  EfiGcdMemoryTypeMemoryMappedIo,
-                  BitsOfAlignment,
-                  AddrLen,
-                  &BaseAddress,
-                  HostBridgeInstance->ImageHandle,
-                  NULL
-               );
-
-      // Ensure the allocation is in the 32bit PCI memory space
-      if (!EFI_ERROR (Status) && (BaseAddress >= FixedPcdGet64 (PcdPciMmio32Base))) {
-        RootBridgeInstance->ResAlloc[ResTypePMem32].Base = (UINTN)BaseAddress;
-      }
-    }
-    if (RootBridgeInstance->ResAlloc[ResTypeMem64].Length != 0) {
-      BitsOfAlignment = HighBitSet64 (RootBridgeInstance->ResAlloc[ResTypeMem64].Alignment) + 1;  // Get the number of '1' in Alignment
-      AddrLen = RootBridgeInstance->ResAlloc[ResTypeMem64].Length;
-
-      // Top of the 64bit PCI Memory space
-      BaseAddress = FixedPcdGet64 (PcdPciMmio64Base) + FixedPcdGet64 (PcdPciMmio64Size);
-
-      Status = gDS->AllocateMemorySpace (
-                  EfiGcdAllocateMaxAddressSearchTopDown,
-                  EfiGcdMemoryTypeMemoryMappedIo,
-                  BitsOfAlignment,
-                  AddrLen,
-                  &BaseAddress,
-                  HostBridgeInstance->ImageHandle,
-                  NULL
-               );
-
-      // Ensure the allocation is in the 64bit PCI memory space
-      if (!EFI_ERROR (Status) && (BaseAddress >= FixedPcdGet64 (PcdPciMmio64Base))) {
-        RootBridgeInstance->ResAlloc[ResTypeMem64].Base   = (UINTN)BaseAddress;
-      }
-    }
-    if (RootBridgeInstance->ResAlloc[ResTypePMem64].Length != 0) {
-      BitsOfAlignment = HighBitSet64 (RootBridgeInstance->ResAlloc[ResTypePMem64].Alignment) + 1;  //Get the number of '1' in Alignment
-      AddrLen = RootBridgeInstance->ResAlloc[ResTypePMem64].Length;
-
-      // Top of the 64bit PCI Memory space
-      BaseAddress = FixedPcdGet64 (PcdPciMmio64Base) + FixedPcdGet64 (PcdPciMmio64Size);
-
-      Status = gDS->AllocateMemorySpace (
-                  EfiGcdAllocateMaxAddressSearchTopDown,
-                  EfiGcdMemoryTypeMemoryMappedIo,
-                  BitsOfAlignment,
-                  AddrLen,
-                  &BaseAddress,
-                  HostBridgeInstance->ImageHandle,
-                  NULL
-               );
-
-      // Ensure the allocation is in the 64bit PCI memory space
-      if (!EFI_ERROR (Status) && (BaseAddress >= FixedPcdGet64 (PcdPciMmio64Base))) {
-        RootBridgeInstance->ResAlloc[ResTypePMem64].Base   = (UINTN)BaseAddress;
-      }
-    }
-
-    break;
-
-  case EfiPciHostBridgeSetResources:
-    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeSetResources)");
-    // Programs the host bridge hardware to decode previously allocated resources (proposed resources)
-    // for all the PCI root bridges. The PCI bus driver will now program the resources
-    break;
-
-  case EfiPciHostBridgeFreeResources:
-    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeFreeResources)");
-    // Deallocates resources that were previously allocated for all the PCI root bridges and resets the
-    // I/O and memory apertures to their initial state.*/
-    break;
-
-  case EfiPciHostBridgeEndResourceAllocation:
-    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeEndResourceAllocation)");
-    break;
-
-  case EfiPciHostBridgeEndEnumeration:
-    PCI_TRACE ("PciHbRaNotifyPhase(EfiPciHostBridgeEndEnumeration)");
-    break;
-
-  default:
-    DEBUG ((EFI_D_INFO, "PciHbRaNotifyPhase(Phase:%d)\n", Phase));
-    ASSERT (0);
-  }
-
-  return EFI_SUCCESS;
-}
-
-/**
- * PciHbRaGetNextRootBridge() returns the next root bridge attached to the 'This' PCI Host Bridge.
- * As we have only got one PCI Root Bridge in this PCI interface, we return either this root bridge
- * if it the first time we call this function (*RootBridgeHandle == NULL) or we return EFI_NOT_FOUND
- **/
-EFI_STATUS
-PciHbRaGetNextRootBridge (
-  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,
-  IN OUT EFI_HANDLE                                    *RootBridgeHandle
-  )
-{
-  PCI_HOST_BRIDGE_INSTANCE              *HostBridgeInstance;
-
-  PCI_TRACE ("PciHbRaGetNextRootBridge()");
-
-  HostBridgeInstance = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);
-  ASSERT (HostBridgeInstance->RootBridge != NULL);
-
-  //Check RootBridge Signature
-  ASSERT (HostBridgeInstance->RootBridge->Signature == PCI_ROOT_BRIDGE_SIGNATURE);
-
-  if (*RootBridgeHandle == NULL) {
-    *RootBridgeHandle = HostBridgeInstance->RootBridge->Handle;
-    return EFI_SUCCESS;
-  } else if (*RootBridgeHandle == HostBridgeInstance->RootBridge->Handle) {
-    return EFI_NOT_FOUND;
-  } else {
-    return EFI_INVALID_PARAMETER;
-  }
-}
-
-/** PciHbRaGetAllocAttributes() returns the resource allocation attributes supported by this PCI Root Bridge.
- *  A PCI Root bridge could support these types :
- *      - EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM : does not support separate windows for nonprefetchable and prefetchable memory.
- *      - EFI_PCI_HOST_BRIDGE_MEM64_DECODE : supports 64-bit memory windows
- **/
-EFI_STATUS
-PciHbRaGetAllocAttributes (
-  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,
-  IN  EFI_HANDLE                                        RootBridgeHandle,
-  OUT UINT64                                           *Attributes
-  )
-{
-  PCI_HOST_BRIDGE_INSTANCE    *HostBridgeInstance;
-
-  PCI_TRACE ("PciHbRaGetAllocAttributes()");
-
-  HostBridgeInstance = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);
-
-  // Check if the RootBridgeHandle is the one managed by this PCI Host Bridge
-  ASSERT (HostBridgeInstance->RootBridge != NULL);
-  if (HostBridgeInstance->RootBridge->Handle != RootBridgeHandle) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  *Attributes = HostBridgeInstance->RootBridge->MemAllocAttributes;
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-PciHbRaStartBusEnumeration (
-  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,
-  IN  EFI_HANDLE                                        RootBridgeHandle,
-  OUT VOID                                            **Configuration
-  )
-{
-  VOID    *Buffer;
-  UINT8   *Ptr;
-  PCI_HOST_BRIDGE_INSTANCE    *HostBridgeInstance;
-
-  // Fill an ACPI descriptor table with the Bus Number Range. This information will be used by the PCI Bus driver
-  // to set bus numbers to PCI-to-PCI bridge.
-  PCI_TRACE ("PciHbRaStartBusEnumeration()");
-
-  HostBridgeInstance = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);
-
-  Buffer = AllocateZeroPool (sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) + sizeof (EFI_ACPI_END_TAG_DESCRIPTOR));
-  if (Buffer == NULL) {
-    return EFI_OUT_OF_RESOURCES;
-  }
-
-  Ptr = (UINT8 *)Buffer;
-
-  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->Desc = ACPI_ADDRESS_SPACE_DESCRIPTOR;    // QWORD Address space Descriptor
-  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->Len  = 0x2B;    // Length of this descriptor in bytes not including the first two fields
-  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->ResType = ACPI_ADDRESS_SPACE_TYPE_BUS;  // Resource Type Bus Number Range
-  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->GenFlag = 0;
-  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->SpecificFlag = 0;
-  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->AddrSpaceGranularity = 0;
-  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->AddrRangeMin = HostBridgeInstance->RootBridge->BusStart;   // Bus Start
-  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->AddrRangeMax = 0;    // Bus Max
-  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->AddrTranslationOffset = 0;
-  ((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->AddrLen = FixedPcdGet32 (PcdPciBusMax) - FixedPcdGet32 (PcdPciBusMin) + 1;
-
-  Ptr = Ptr + sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR);
-  ((EFI_ACPI_END_TAG_DESCRIPTOR *)Ptr)->Desc = ACPI_END_TAG_DESCRIPTOR;
-  ((EFI_ACPI_END_TAG_DESCRIPTOR *)Ptr)->Checksum = 0x0;
-
-  *Configuration = Buffer;
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-PciHbRaSetBusNumbers (
-  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,
-  IN EFI_HANDLE                                         RootBridgeHandle,
-  IN VOID                                              *Configuration
-  )
-{
-  PCI_HOST_BRIDGE_INSTANCE    *HostBridgeInstance;
-  UINT8                       *Ptr;
-  UINTN                       BusStart;
-  UINTN                       BusEnd;
-  UINTN                       BusLen;
-
-  PCI_TRACE ("PciHbRaSetBusNumbers()");
-
-  Ptr = Configuration;
-  if (*Ptr != ACPI_ADDRESS_SPACE_DESCRIPTOR) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  // Check if the passed ACPI descriptor table define a Bus Number Range
-  if (((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->ResType != ACPI_ADDRESS_SPACE_TYPE_BUS) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  // Check if the Configuration only passed one ACPI Descriptor (+ End Descriptor)
-  if (*((UINT8*)(Ptr + sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR))) != ACPI_END_TAG_DESCRIPTOR) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  HostBridgeInstance = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);
-  ASSERT (HostBridgeInstance->RootBridge != NULL);
-  if (HostBridgeInstance->RootBridge->Handle != RootBridgeHandle) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  BusStart = (UINTN)((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->AddrRangeMin;
-  BusLen = (UINTN)((EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr)->AddrLen;
-  BusEnd = BusStart + BusLen - 1;
-
-  ASSERT (BusStart <= BusEnd); // We should at least have PCI_BUS_ROOT and PCI_SWITCH_BUS
-  ASSERT ((BusStart >= HostBridgeInstance->RootBridge->BusStart) && (BusLen <= HostBridgeInstance->RootBridge->BusLength));
-
-  HostBridgeInstance->RootBridge->BusStart  = BusStart;
-  HostBridgeInstance->RootBridge->BusLength = BusLen;
-
-  return EFI_SUCCESS;
-}
-
-/**
- * This function is used to submit all the I/O and memory resources that are required by the specified
- * PCI root bridge.
- **/
-EFI_STATUS
-PciHbRaSubmitResources (
-  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,
-  IN EFI_HANDLE                                         RootBridgeHandle,
-  IN VOID                                              *Configuration
-  )
-{
-  PCI_HOST_BRIDGE_INSTANCE            *HostBridgeInstance;
-  PCI_ROOT_BRIDGE_INSTANCE            *RootBridgeInstance;
-  UINT8                               *Ptr;
-  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *Desc;
-  PCI_RESOURCE_TYPE                   ResType;
-
-  PCI_TRACE ("PciHbRaSubmitResources()");
-
-  HostBridgeInstance = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);
-
-  if (Configuration == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  // Check if the ACPI Descriptor tables is conformed
-  Ptr = (UINT8 *)Configuration;
-  while (*Ptr == ACPI_ADDRESS_SPACE_DESCRIPTOR) { // QWORD Address Space descriptor
-    Ptr += sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) ;
-  }
-  if (*Ptr != ACPI_END_TAG_DESCRIPTOR) { // End tag
-    return EFI_INVALID_PARAMETER;
-  }
-
-  // Check the RootBridgeHandle
-  RootBridgeInstance = HostBridgeInstance->RootBridge;
-  ASSERT (RootBridgeInstance != NULL);
-  if (RootBridgeHandle != HostBridgeInstance->RootBridge->Handle) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  Ptr = (UINT8 *)Configuration;
-  while ( *Ptr == ACPI_ADDRESS_SPACE_DESCRIPTOR) { // While the entry is an ACPI Descriptor Table
-    Desc = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr;
-
-    // Check if the description is valid
-    if (Desc->AddrLen > 0xffffffff) {
-      return EFI_INVALID_PARAMETER;
-    }
-
-    if ((Desc->AddrRangeMax >= 0xffffffff) || (Desc->AddrRangeMax != (GetPowerOfTwo64 (Desc->AddrRangeMax + 1) - 1))) {
-      return EFI_INVALID_PARAMETER;
-    }
-
-    switch (Desc->ResType) {
-    case ACPI_ADDRESS_SPACE_TYPE_MEM:
-      // Check invalid Address Space Granularity
-      if ((Desc->AddrSpaceGranularity != 32) && (Desc->AddrSpaceGranularity != 64)) {
-        return EFI_INVALID_PARAMETER;
-      }
-
-      // check the memory resource request is supported by PCI root bridge
-      if (RootBridgeInstance->MemAllocAttributes == EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM && Desc->SpecificFlag == 0x06) {
-        return EFI_INVALID_PARAMETER;
-      }
-
-      if (Desc->AddrSpaceGranularity == 32) {
-        if (Desc->SpecificFlag == ACPI_SPECFLAG_PREFETCHABLE) {
-          ResType = ResTypePMem32;
-        } else {
-          ResType = ResTypeMem32;
-        }
-      } else {
-        if (Desc->SpecificFlag == ACPI_SPECFLAG_PREFETCHABLE) {
-          ResType = ResTypePMem64;
-        } else {
-          ResType = ResTypeMem64;
-        }
-      }
-      RootBridgeInstance->ResAlloc[ResType].Length = Desc->AddrLen;
-      RootBridgeInstance->ResAlloc[ResType].Alignment = Desc->AddrRangeMax;
-      RootBridgeInstance->ResAlloc[ResType].Base = Desc->AddrRangeMin;
-      break;
-    case ACPI_ADDRESS_SPACE_TYPE_IO:
-      RootBridgeInstance->ResAlloc[ResTypeIo].Length = Desc->AddrLen;
-      RootBridgeInstance->ResAlloc[ResTypeIo].Alignment = Desc->AddrRangeMax;
-      RootBridgeInstance->ResAlloc[ResTypeIo].Base = 0;
-      break;
-    default:
-      ASSERT (0); // Could be the case Desc->ResType == ACPI_ADDRESS_SPACE_TYPE_BUS
-      break;
-    }
-    Ptr += sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR);
-  }
-
-  return EFI_SUCCESS;
-}
-
-/** Returns the proposed resource settings for the specified PCI root bridge. The resources have been submitted by
-  * PciHbRaSubmitResources() before
-  **/
-EFI_STATUS
-PciHbRaGetProposedResources (
-  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,
-  IN  EFI_HANDLE                                        RootBridgeHandle,
-  OUT VOID                                            **Configuration
-  )
-{
-  PCI_HOST_BRIDGE_INSTANCE            *HostBridgeInstance;
-  PCI_ROOT_BRIDGE_INSTANCE            *RootBridgeInstance;
-  UINT32                              i;
-  UINT32                              ResAllocCount;
-  VOID                                *Buffer;
-  UINT8                               *Ptr;
-  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *Desc;
-
-  PCI_TRACE ("PciHbRaGetProposedResources()");
-
-  HostBridgeInstance = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);
-
-  // Check the RootBridgeHandle
-  RootBridgeInstance = HostBridgeInstance->RootBridge;
-  ASSERT (RootBridgeInstance != NULL);
-  if (RootBridgeHandle != HostBridgeInstance->RootBridge->Handle) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  // Count the number of Resource Allocated for this Root Bridge
-  ResAllocCount = 0;
-  for (i = 0; i < ResTypeMax; i++) {
-    if (RootBridgeInstance->ResAlloc[i].Length != 0)  ResAllocCount++;
-  }
-
-  if (ResAllocCount ==  0) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  Buffer = AllocateZeroPool (ResAllocCount * sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR) + sizeof (EFI_ACPI_END_TAG_DESCRIPTOR));
-  if (Buffer == NULL) {
-    return EFI_OUT_OF_RESOURCES;
-  }
-
-  Ptr = Buffer;
-  for (i = 0; i < ResTypeMax; i++) {
-    if (RootBridgeInstance->ResAlloc[i].Length != 0) {    // Base != 0 if the resource has been allocated
-      Desc = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *)Ptr;
-
-      Desc->Desc = ACPI_ADDRESS_SPACE_DESCRIPTOR;
-      Desc->Len  = 0x2B;
-      Desc->GenFlag = 0;
-      Desc->AddrRangeMax = 0;
-
-      switch (i) {
-      case ResTypeIo:
-        Desc->ResType = ACPI_ADDRESS_SPACE_TYPE_IO;
-        Desc->SpecificFlag = 0;
-        Desc->AddrSpaceGranularity = 0;
-        break;
-      case ResTypeMem32:
-        Desc->ResType = ACPI_ADDRESS_SPACE_TYPE_MEM;
-        Desc->SpecificFlag = 0;
-        Desc->AddrSpaceGranularity = 32;
-        break;
-      case ResTypePMem32:
-        Desc->ResType = ACPI_ADDRESS_SPACE_TYPE_MEM;
-        Desc->SpecificFlag = ACPI_SPECFLAG_PREFETCHABLE;
-        Desc->AddrSpaceGranularity = 32;
-        break;
-      case ResTypeMem64:
-        Desc->ResType = ACPI_ADDRESS_SPACE_TYPE_MEM;
-        Desc->SpecificFlag = 0;
-        Desc->AddrSpaceGranularity = 64;
-        break;
-      case ResTypePMem64:
-        Desc->ResType = ACPI_ADDRESS_SPACE_TYPE_MEM;
-        Desc->SpecificFlag = ACPI_SPECFLAG_PREFETCHABLE;
-        Desc->AddrSpaceGranularity = 64;
-        break;
-      }
-      Desc->AddrRangeMin = RootBridgeInstance->ResAlloc[i].Base;
-      Desc->AddrTranslationOffset = (RootBridgeInstance->ResAlloc[i].Base != 0) ? EFI_RESOURCE_SATISFIED : EFI_RESOURCE_LESS;
-      Desc->AddrLen = RootBridgeInstance->ResAlloc[i].Length;
-      Ptr += sizeof (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR);
-    }
-  }
-
-  ((EFI_ACPI_END_TAG_DESCRIPTOR *)Ptr)->Desc = ACPI_END_TAG_DESCRIPTOR;
-  ((EFI_ACPI_END_TAG_DESCRIPTOR *)Ptr)->Checksum = 0x0;
-
-  *Configuration = Buffer;
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-PciHbRaPreprocessController (
-  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL  *This,
-  IN  EFI_HANDLE                                        RootBridgeHandle,
-  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS       PciAddress,
-  IN  EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE      Phase
-  )
-{
-  PCI_HOST_BRIDGE_INSTANCE*   HostBridge;
-  PCI_ROOT_BRIDGE_INSTANCE*   RootBridge;
-  UINT32                      CapabilityPtr;
-  UINT32                      CapabilityEntry;
-  UINT16                      CapabilityID;
-  UINT32                      DeviceCapability;
-
-  PCI_TRACE ("PciHbRaPreprocessController()");
-
-  if (FeaturePcdGet (PcdPciMaxPayloadFixup)) {
-    // Do Max payload fixup for every devices
-    if (Phase == EfiPciBeforeResourceCollection) {
-      // Get RootBridge Instance from Host Bridge Instance
-      HostBridge = INSTANCE_FROM_RESOURCE_ALLOCATION_THIS (This);
-      RootBridge = HostBridge->RootBridge;
-
-      // Get the first PCI Capability
-      CapabilityPtr = PCI_CAPBILITY_POINTER_OFFSET;
-      RootBridge->Io.Pci.Read (
-          &RootBridge->Io,
-          EfiPciWidthUint8,
-          EFI_PCI_ADDRESS (PciAddress.Bus, PciAddress.Device, PciAddress.Function, CapabilityPtr),
-          1,
-          &CapabilityPtr
-      );
-      CapabilityPtr &= 0x1FF;
-
-      // Get Pci Express Capability
-      while (CapabilityPtr != 0) {
-        RootBridge->Io.Pci.Read (
-            &RootBridge->Io,
-            EfiPciWidthUint16,
-            EFI_PCI_ADDRESS (PciAddress.Bus, PciAddress.Device, PciAddress.Function, CapabilityPtr),
-            1,
-            &CapabilityEntry
-            );
-
-        CapabilityID = (UINT8)CapabilityEntry;
-
-        // Is PCIe capability ?
-        if (CapabilityID == EFI_PCI_CAPABILITY_ID_PCIEXP) {
-          // Get PCIe Device Capabilities
-          RootBridge->Io.Pci.Read (
-              &RootBridge->Io,
-              EfiPciWidthUint32,
-              EFI_PCI_ADDRESS (PciAddress.Bus, PciAddress.Device, PciAddress.Function, CapabilityPtr + 0x8),
-              1,
-              &DeviceCapability
-              );
-
-          // Force the Max Payload to 128 Bytes (128 Bytes Max Payload Size = 0)
-          DeviceCapability &= ~ ((UINT32)(0x7 << 5 ));
-          // Max Read Request Size to 128 Bytes (128 Bytes Max Read Request Size = 0)
-          DeviceCapability &= ~ ((UINT32)(0x7 << 12));
-          // Enable all error reporting
-          DeviceCapability |= 0xF;
-
-          RootBridge->Io.Pci.Write (
-              &RootBridge->Io,
-              EfiPciWidthUint32,
-              EFI_PCI_ADDRESS (PciAddress.Bus, PciAddress.Device, PciAddress.Function, CapabilityPtr + 0x8),
-              1,
-              &DeviceCapability
-              );
-
-          return EFI_SUCCESS;
-        }
-        CapabilityPtr = (CapabilityEntry >> 8) & 0xFF;
-      }
-    }
-  }
-
-  return EFI_SUCCESS;
-}
diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciRootBridge.c b/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciRootBridge.c
deleted file mode 100644
index 72d09156c066..000000000000
--- a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/PciRootBridge.c
+++ /dev/null
@@ -1,748 +0,0 @@ 
-/** @file
-*  Implementation of the PCI Root Bridge Protocol for XPress-RICH3 PCIe Root Complex
-*
-*  Copyright (c) 2011-2015, ARM Ltd. All rights reserved.
-*
-*  This program and the accompanying materials
-*  are licensed and made available under the terms and conditions of the BSD License
-*  which accompanies this distribution.  The full text of the license may be found at
-*  http://opensource.org/licenses/bsd-license.php
-*
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-
-#include "PciHostBridge.h"
-
-#include <Library/DevicePathLib.h>
-#include <Library/DmaLib.h>
-
-#define CPUIO_FROM_ROOT_BRIDGE_INSTANCE(Instance) (Instance->HostBridge->CpuIo)
-#define METRONOME_FROM_ROOT_BRIDGE_INSTANCE(Instance) (Instance->HostBridge->Metronome)
-
-/**
- * PCI Root Bridge Instance Templates
- */
-STATIC CONST EFI_PCI_ROOT_BRIDGE_DEVICE_PATH  gDevicePathTemplate = {
-    {
-      { ACPI_DEVICE_PATH,
-        ACPI_DP,
-        { (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)),
-          (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) }
-      },
-      EISA_PNP_ID (0x0A03),
-      0
-    },
-    {
-      END_DEVICE_PATH_TYPE,
-      END_ENTIRE_DEVICE_PATH_SUBTYPE,
-      { END_DEVICE_PATH_LENGTH, 0 }
-    }
-};
-
-STATIC CONST EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL gIoTemplate = {
-    0,
-    PciRbPollMem,
-    PciRbPollIo,
-    {
-      PciRbMemRead,
-      PciRbMemWrite
-    },
-    {
-      PciRbIoRead,
-      PciRbIoWrite
-    },
-    {
-      PciRbPciRead,
-      PciRbPciWrite
-    },
-    PciRbCopyMem,
-    PciRbMap,
-    PciRbUnMap,
-    PciRbAllocateBuffer,
-    PciRbFreeBuffer,
-    PciRbFlush,
-    PciRbGetAttributes,
-    PciRbSetAttributes,
-    PciRbConfiguration,
-    0
-  };
-
-typedef struct {
-    EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR     SpaceDesp[ResTypeMax+1];
-    EFI_ACPI_END_TAG_DESCRIPTOR           EndDesp;
-} RESOURCE_CONFIGURATION;
-
-
-RESOURCE_CONFIGURATION Configuration = {
-   {{ACPI_ADDRESS_SPACE_DESCRIPTOR, 0x2B, ACPI_ADDRESS_SPACE_TYPE_IO , 0, 0, 0, 0, 0, 0, 0},
-    {ACPI_ADDRESS_SPACE_DESCRIPTOR, 0x2B, ACPI_ADDRESS_SPACE_TYPE_MEM, 0, 0, 32, 0, 0, 0, 0},
-    {ACPI_ADDRESS_SPACE_DESCRIPTOR, 0x2B, ACPI_ADDRESS_SPACE_TYPE_MEM, 0, 6, 32, 0, 0, 0, 0},
-    {ACPI_ADDRESS_SPACE_DESCRIPTOR, 0x2B, ACPI_ADDRESS_SPACE_TYPE_MEM, 0, 0, 64, 0, 0, 0, 0},
-    {ACPI_ADDRESS_SPACE_DESCRIPTOR, 0x2B, ACPI_ADDRESS_SPACE_TYPE_MEM, 0, 6, 64, 0, 0, 0, 0},
-    {ACPI_ADDRESS_SPACE_DESCRIPTOR, 0x2B, ACPI_ADDRESS_SPACE_TYPE_BUS, 0, 0, 0, 0, 255, 0, 255}},
-    {ACPI_END_TAG_DESCRIPTOR, 0}
-};
-
-
-EFI_STATUS
-PciRbPollMem (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,
-  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,
-  IN  UINT64                                   Address,
-  IN  UINT64                                   Mask,
-  IN  UINT64                                   Value,
-  IN  UINT64                                   Delay,
-  OUT UINT64                                   *Result
-  )
-{
-  EFI_STATUS                      Status;
-  UINT64                          NumberOfTicks;
-  UINT32                          Remainder;
-  PCI_ROOT_BRIDGE_INSTANCE        *RootBridgeInstance;
-  EFI_METRONOME_ARCH_PROTOCOL     *Metronome;
-
-  PCI_TRACE ("PciRbPollMem()");
-
-  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);
-  Metronome = METRONOME_FROM_ROOT_BRIDGE_INSTANCE (RootBridgeInstance);
-
-  if (Result == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if (Width > EfiPciWidthUint64) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  // No matter what, always do a single poll.
-  Status = This->Mem.Read (This, Width, Address, 1, Result);
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-  if ((*Result & Mask) == Value) {
-    return EFI_SUCCESS;
-  }
-
-  if (Delay == 0) {
-    return EFI_SUCCESS;
-  }
-
-  NumberOfTicks = DivU64x32Remainder (Delay, (UINT32) Metronome->TickPeriod, &Remainder);
-  if (Remainder != 0) {
-    NumberOfTicks += 1;
-  }
-  NumberOfTicks += 1;
-
-  while (NumberOfTicks) {
-    Metronome->WaitForTick (Metronome, 1);
-
-    Status = This->Mem.Read (This, Width, Address, 1, Result);
-    if (EFI_ERROR (Status)) {
-      return Status;
-    }
-
-    if ((*Result & Mask) == Value) {
-      return EFI_SUCCESS;
-    }
-
-    NumberOfTicks -= 1;
-  }
-
-  return EFI_TIMEOUT;
-}
-
-EFI_STATUS
-PciRbPollIo (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,
-  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,
-  IN  UINT64                                   Address,
-  IN  UINT64                                   Mask,
-  IN  UINT64                                   Value,
-  IN  UINT64                                   Delay,
-  OUT UINT64                                   *Result
-  )
-{
-  EFI_STATUS                      Status;
-  UINT64                          NumberOfTicks;
-  UINT32                          Remainder;
-  PCI_ROOT_BRIDGE_INSTANCE        *RootBridgeInstance;
-  EFI_METRONOME_ARCH_PROTOCOL     *Metronome;
-
-  PCI_TRACE ("PciRbPollIo()");
-
-  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);
-  Metronome = METRONOME_FROM_ROOT_BRIDGE_INSTANCE (RootBridgeInstance);
-
-  if (Result == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if (Width > EfiPciWidthUint64) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  // No matter what, always do a single poll.
-  Status = This->Io.Read (This, Width, Address, 1, Result);
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-  if ((*Result & Mask) == Value) {
-    return EFI_SUCCESS;
-  }
-
-  if (Delay == 0) {
-    return EFI_SUCCESS;
-  }
-
-  NumberOfTicks = DivU64x32Remainder (Delay, (UINT32) Metronome->TickPeriod, &Remainder);
-  if (Remainder != 0) {
-    NumberOfTicks += 1;
-  }
-  NumberOfTicks += 1;
-
-  while (NumberOfTicks) {
-    Metronome->WaitForTick (Metronome, 1);
-
-    Status = This->Io.Read (This, Width, Address, 1, Result);
-    if (EFI_ERROR (Status)) {
-        return Status;
-    }
-
-    if ((*Result & Mask) == Value) {
-        return EFI_SUCCESS;
-    }
-
-    NumberOfTicks -= 1;
-  }
-
-  return EFI_TIMEOUT;
-}
-
-EFI_STATUS
-PciRbMemRead (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,
-  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,
-  IN     UINT64                                   Address,
-  IN     UINTN                                    Count,
-  IN OUT VOID                                     *Buffer
-  )
-{
-  PCI_ROOT_BRIDGE_INSTANCE    *RootBridgeInstance;
-  EFI_CPU_IO2_PROTOCOL        *CpuIo;
-
-  PCI_TRACE ("PciRbMemRead()");
-
-  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);
-  CpuIo = CPUIO_FROM_ROOT_BRIDGE_INSTANCE (RootBridgeInstance);
-
-  if (Buffer == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if (Width >= EfiPciWidthMaximum) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if (((Address < PCI_MEM32_BASE) || (Address > (PCI_MEM32_BASE + PCI_MEM32_SIZE))) &&
-      ((Address < PCI_MEM64_BASE) || (Address > (PCI_MEM64_BASE + PCI_MEM64_SIZE)))) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  return CpuIo->Mem.Read (CpuIo, (EFI_CPU_IO_PROTOCOL_WIDTH)Width, Address, Count, Buffer);
-}
-
-EFI_STATUS
-PciRbMemWrite (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,
-  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,
-  IN     UINT64                                   Address,
-  IN     UINTN                                    Count,
-  IN OUT VOID                                     *Buffer
-  )
-{
-  PCI_ROOT_BRIDGE_INSTANCE    *RootBridgeInstance;
-  EFI_CPU_IO2_PROTOCOL        *CpuIo;
-
-  PCI_TRACE ("PciRbMemWrite()");
-
-  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);
-  CpuIo = CPUIO_FROM_ROOT_BRIDGE_INSTANCE (RootBridgeInstance);
-
-  if (Buffer == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if (Width >= EfiPciWidthMaximum) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if (((Address < PCI_MEM32_BASE) || (Address > (PCI_MEM32_BASE + PCI_MEM32_SIZE))) &&
-      ((Address < PCI_MEM64_BASE) || (Address > (PCI_MEM64_BASE + PCI_MEM64_SIZE)))) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  return CpuIo->Mem.Write (CpuIo, (EFI_CPU_IO_PROTOCOL_WIDTH)Width, Address, Count, Buffer);
-}
-
-EFI_STATUS
-PciRbIoRead (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,
-  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,
-  IN     UINT64                                   Address,
-  IN     UINTN                                    Count,
-  IN OUT VOID                                     *Buffer
-  )
-{
-  PCI_TRACE ("PciRbIoRead()");
-
-  if (Buffer == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if (Width >= EfiPciWidthMaximum) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  // IO currently unsupported
-  return EFI_INVALID_PARAMETER;
-}
-
-EFI_STATUS
-PciRbIoWrite (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,
-  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,
-  IN     UINT64                                   Address,
-  IN     UINTN                                    Count,
-  IN OUT VOID                                     *Buffer
-  )
-{
-  PCI_TRACE ("PciRbIoWrite()");
-
-  if (Buffer == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if (Width >= EfiPciWidthMaximum) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  // IO currently unsupported
-  return EFI_INVALID_PARAMETER;
-}
-
-EFI_STATUS
-PciRbPciRead (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,
-  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,
-  IN     UINT64                                   EfiAddress,
-  IN     UINTN                                    Count,
-  IN OUT VOID                                     *Buffer
-  )
-{
-  UINT32                      Offset;
-  PCI_ROOT_BRIDGE_INSTANCE    *RootBridgeInstance;
-  EFI_CPU_IO2_PROTOCOL        *CpuIo;
-  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *EfiPciAddress;
-  UINT64                      Address;
-
-  EfiPciAddress  = (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *)&EfiAddress;
-  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);
-  CpuIo = CPUIO_FROM_ROOT_BRIDGE_INSTANCE (RootBridgeInstance);
-
-  if (Buffer == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if (Width >= EfiPciWidthMaximum) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if (EfiPciAddress->ExtendedRegister) {
-    Offset = EfiPciAddress->ExtendedRegister;
-  } else {
-    Offset = EfiPciAddress->Register;
-  }
-
-  // The UEFI PCI enumerator scans for devices at all possible addresses,
-  // and ignores some PCI rules - this results in some hardware being
-  // detected multiple times. We work around this by faking absent
-  // devices
-  if ((EfiPciAddress->Bus == 0) && ((EfiPciAddress->Device != 0) || (EfiPciAddress->Function != 0))) {
-    *((UINT32 *)Buffer) = 0xffffffff;
-    return EFI_SUCCESS;
-  }
-  if ((EfiPciAddress->Bus == 1) && ((EfiPciAddress->Device != 0) || (EfiPciAddress->Function != 0))) {
-    *((UINT32 *)Buffer) = 0xffffffff;
-    return EFI_SUCCESS;
-  }
-
-  // Work around incorrect class ID in the root bridge
-  if ((EfiPciAddress->Bus == 0) && (EfiPciAddress->Device == 0) && (EfiPciAddress->Function == 0) && (Offset == 8)) {
-    *((UINT32 *)Buffer) = 0x06040001;
-    return EFI_SUCCESS;
-   }
-
-  Address = PCI_ECAM_BASE + ((EfiPciAddress->Bus << 20) |
-                         (EfiPciAddress->Device << 15) |
-                         (EfiPciAddress->Function << 12) | Offset);
-
-  if ((Address < PCI_ECAM_BASE) || (Address > PCI_ECAM_BASE + PCI_ECAM_SIZE)) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  return CpuIo->Mem.Read (CpuIo, (EFI_CPU_IO_PROTOCOL_WIDTH)Width, Address, Count, Buffer);
-}
-
-EFI_STATUS
-PciRbPciWrite (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,
-  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,
-  IN     UINT64                                   EfiAddress,
-  IN     UINTN                                    Count,
-  IN OUT VOID                                     *Buffer
-  )
-{
-  UINT32                      Offset;
-  PCI_ROOT_BRIDGE_INSTANCE    *RootBridgeInstance;
-  EFI_CPU_IO2_PROTOCOL        *CpuIo;
-  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *EfiPciAddress;
-  UINT64                      Address;
-
-  EfiPciAddress  = (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS *)&EfiAddress;
-  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);
-  CpuIo = CPUIO_FROM_ROOT_BRIDGE_INSTANCE (RootBridgeInstance);
-
-  if (Buffer == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if (Width >= EfiPciWidthMaximum) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if (EfiPciAddress->ExtendedRegister)
-    Offset = EfiPciAddress->ExtendedRegister;
-  else
-    Offset = EfiPciAddress->Register;
-
-  Address = PCI_ECAM_BASE + ((EfiPciAddress->Bus << 20) |
-                         (EfiPciAddress->Device << 15) |
-                         (EfiPciAddress->Function << 12) | Offset);
-
-  if (Address < PCI_ECAM_BASE || Address > PCI_ECAM_BASE + PCI_ECAM_SIZE) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  return CpuIo->Mem.Write (CpuIo, (EFI_CPU_IO_PROTOCOL_WIDTH)Width, Address, Count, Buffer);
-}
-
-EFI_STATUS
-PciRbCopyMem (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,
-  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH    Width,
-  IN     UINT64                                   DestAddress,
-  IN     UINT64                                   SrcAddress,
-  IN     UINTN                                    Count
-  )
-{
-  EFI_STATUS  Status;
-  BOOLEAN     Direction;
-  UINTN       Stride;
-  UINTN       Index;
-  UINT64      Result;
-
-  PCI_TRACE ("PciRbCopyMem()");
-
-  if (Width > EfiPciWidthUint64) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  if (DestAddress == SrcAddress) {
-    return EFI_SUCCESS;
-  }
-
-  Stride = (UINTN)(1 << Width);
-
-  Direction = TRUE;
-  if ((DestAddress > SrcAddress) && (DestAddress < (SrcAddress + Count * Stride))) {
-    Direction   = FALSE;
-    SrcAddress  = SrcAddress  + (Count-1) * Stride;
-    DestAddress = DestAddress + (Count-1) * Stride;
-  }
-
-  for (Index = 0; Index < Count; Index++) {
-    Status = PciRbMemRead (
-               This,
-               Width,
-               SrcAddress,
-               1,
-               &Result
-               );
-    if (EFI_ERROR (Status)) {
-      return Status;
-    }
-    Status = PciRbMemWrite (
-               This,
-               Width,
-               DestAddress,
-               1,
-               &Result
-               );
-    if (EFI_ERROR (Status)) {
-      return Status;
-    }
-    if (Direction) {
-      SrcAddress  += Stride;
-      DestAddress += Stride;
-    } else {
-      SrcAddress  -= Stride;
-      DestAddress -= Stride;
-    }
-  }
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-PciRbMap (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL                *This,
-  IN     EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION  Operation,
-  IN     VOID                                       *HostAddress,
-  IN OUT UINTN                                      *NumberOfBytes,
-  OUT    EFI_PHYSICAL_ADDRESS                       *DeviceAddress,
-  OUT    VOID                                       **Mapping
-  )
-{
-  DMA_MAP_OPERATION   DmaOperation;
-
-  PCI_TRACE ("PciRbMap()");
-
-  if (Operation == EfiPciOperationBusMasterRead ||
-      Operation == EfiPciOperationBusMasterRead64) {
-    DmaOperation = MapOperationBusMasterRead;
-  } else if (Operation == EfiPciOperationBusMasterWrite ||
-             Operation == EfiPciOperationBusMasterWrite64) {
-    DmaOperation = MapOperationBusMasterWrite;
-  } else if (Operation == EfiPciOperationBusMasterCommonBuffer ||
-             Operation == EfiPciOperationBusMasterCommonBuffer64) {
-    DmaOperation = MapOperationBusMasterCommonBuffer;
-  } else {
-    return EFI_INVALID_PARAMETER;
-  }
-  return DmaMap (DmaOperation, HostAddress, NumberOfBytes, DeviceAddress, Mapping);
-}
-
-EFI_STATUS
-PciRbUnMap (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,
-  IN  VOID                                     *Mapping
-  )
-{
-  PCI_TRACE ("PciRbUnMap()");
-  return DmaUnmap (Mapping);
-}
-
-EFI_STATUS
-PciRbAllocateBuffer (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,
-  IN     EFI_ALLOCATE_TYPE                        Type,
-  IN     EFI_MEMORY_TYPE                          MemoryType,
-  IN     UINTN                                    Pages,
-  IN OUT VOID                                     **HostAddress,
-  IN     UINT64                                   Attributes
-  )
-{
-  PCI_TRACE ("PciRbAllocateBuffer()");
-
-  if (Attributes & EFI_PCI_ATTRIBUTE_INVALID_FOR_ALLOCATE_BUFFER) {
-    return EFI_UNSUPPORTED;
-  }
-
-  return DmaAllocateBuffer (MemoryType, Pages, HostAddress);
-}
-
-EFI_STATUS
-PciRbFreeBuffer (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,
-  IN  UINTN                                    Pages,
-  IN  VOID                                     *HostAddress
-  )
-{
-  PCI_TRACE ("PciRbFreeBuffer()");
-  return DmaFreeBuffer (Pages, HostAddress);
-}
-
-EFI_STATUS
-PciRbFlush (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL  *This
-  )
-{
-  PCI_TRACE ("PciRbFlush()");
-
-  //TODO: Not supported yet
-
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-PciRbSetAttributes (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL              *This,
-  IN     UINT64                                   Attributes,
-  IN OUT UINT64                                   *ResourceBase,
-  IN OUT UINT64                                   *ResourceLength
-  )
-{
-  PCI_ROOT_BRIDGE_INSTANCE    *RootBridgeInstance;
-
-  PCI_TRACE ("PciRbSetAttributes()");
-
-  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);
-
-  if (Attributes) {
-    if ((Attributes & (~(RootBridgeInstance->Supports))) != 0) {
-      return EFI_UNSUPPORTED;
-    }
-  }
-
-  //TODO: Cannot allowed to change attributes
-  if (Attributes & ~RootBridgeInstance->Attributes) {
-    return EFI_UNSUPPORTED;
-  }
-
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-PciRbGetAttributes (
-  IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL           *This,
-  OUT UINT64                                   *Supported,
-  OUT UINT64                                   *Attributes
-  )
-{
-  PCI_ROOT_BRIDGE_INSTANCE    *RootBridgeInstance;
-
-  PCI_TRACE ("PciRbGetAttributes()");
-
-  RootBridgeInstance = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);
-
-  if (Attributes == NULL && Supported == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  // Set the return value for Supported and Attributes
-  if (Supported) {
-    *Supported  = RootBridgeInstance->Supports;
-  }
-
-  if (Attributes) {
-    *Attributes = RootBridgeInstance->Attributes;
-  }
-
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-PciRbConfiguration (
-  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL          *This,
-  OUT VOID                                     **Resources
-  )
-{
-  PCI_ROOT_BRIDGE_INSTANCE              *RootBridge;
-  UINTN                                 Index;
-
-  PCI_TRACE ("PciRbConfiguration()");
-
-  RootBridge = INSTANCE_FROM_ROOT_BRIDGE_IO_THIS (This);
-
-  for (Index = 0; Index < ResTypeMax; Index++) {
-    //if (ResAlloc[Index].Length != 0) => Resource allocated
-    if (RootBridge->ResAlloc[Index].Length != 0) {
-      Configuration.SpaceDesp[Index].AddrRangeMin = RootBridge->ResAlloc[Index].Base;
-      Configuration.SpaceDesp[Index].AddrRangeMax = RootBridge->ResAlloc[Index].Base + RootBridge->ResAlloc[Index].Length - 1;
-      Configuration.SpaceDesp[Index].AddrLen      = RootBridge->ResAlloc[Index].Length;
-    }
-  }
-
-  // Set up Configuration for the bus
-  Configuration.SpaceDesp[Index].AddrRangeMin = RootBridge->BusStart;
-  Configuration.SpaceDesp[Index].AddrLen      = RootBridge->BusLength;
-
-  *Resources = &Configuration;
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-PciRbConstructor (
-  IN  PCI_HOST_BRIDGE_INSTANCE *HostBridge,
-  IN  UINT32 PciAcpiUid,
-  IN  UINT64 MemAllocAttributes
-  )
-{
-  PCI_ROOT_BRIDGE_INSTANCE* RootBridge;
-  EFI_STATUS Status;
-
-  PCI_TRACE ("PciRbConstructor()");
-
-  // Allocate Memory for the Instance from a Template
-  RootBridge = AllocateZeroPool (sizeof (PCI_ROOT_BRIDGE_INSTANCE));
-  if (RootBridge == NULL) {
-    PCI_TRACE ("PciRbConstructor(): ERROR: Out of Resources");
-    return EFI_OUT_OF_RESOURCES;
-  }
-  RootBridge->Signature = PCI_ROOT_BRIDGE_SIGNATURE;
-  CopyMem (&(RootBridge->DevicePath), &gDevicePathTemplate, sizeof (EFI_PCI_ROOT_BRIDGE_DEVICE_PATH));
-  CopyMem (&(RootBridge->Io), &gIoTemplate, sizeof (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL));
-
-  // Set Parent Handle
-  RootBridge->Io.ParentHandle = HostBridge->Handle;
-
-  // Attach the Root Bridge to the PCI Host Bridge Instance
-  RootBridge->HostBridge = HostBridge;
-
-  // Set Device Path for this Root Bridge
-  RootBridge->DevicePath.Acpi.UID = PciAcpiUid;
-
-  RootBridge->BusStart  = FixedPcdGet32 (PcdPciBusMin);
-  RootBridge->BusLength = FixedPcdGet32 (PcdPciBusMax) - FixedPcdGet32 (PcdPciBusMin) + 1;
-
-  // PCI Attributes
-  RootBridge->Supports = 0;
-  RootBridge->Attributes = 0;
-
-  // Install Protocol Instances. It will also generate a device handle for the PCI Root Bridge
-  Status = gBS->InstallMultipleProtocolInterfaces (
-                      &RootBridge->Handle,
-                      &gEfiDevicePathProtocolGuid, &RootBridge->DevicePath,
-                      &gEfiPciRootBridgeIoProtocolGuid, &RootBridge->Io,
-                      NULL
-                      );
-  ASSERT (RootBridge->Signature == PCI_ROOT_BRIDGE_SIGNATURE);
-  if (EFI_ERROR (Status)) {
-    PCI_TRACE ("PciRbConstructor(): ERROR: Fail to install Protocol Interfaces");
-    FreePool (RootBridge);
-    return EFI_DEVICE_ERROR;
-  }
-
-  HostBridge->RootBridge = RootBridge;
-  return EFI_SUCCESS;
-}
-
-EFI_STATUS
-PciRbDestructor (
-  IN  PCI_ROOT_BRIDGE_INSTANCE* RootBridge
-  )
-{
-  EFI_STATUS Status;
-
-  Status = gBS->UninstallMultipleProtocolInterfaces (
-                        RootBridge->Handle,
-                        &gEfiDevicePathProtocolGuid, &RootBridge->DevicePath,
-                        &gEfiPciRootBridgeIoProtocolGuid, &RootBridge->Io,
-                        NULL
-                        );
-
-  FreePool (RootBridge);
-
-  return Status;
-}
diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.c b/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.c
deleted file mode 100644
index 57e9e9df54a9..000000000000
--- a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.c
+++ /dev/null
@@ -1,170 +0,0 @@ 
-/** @file
-*  Initialize the XPress-RICH3 PCIe Root complex
-*
-*  Copyright (c) 2011-2015, ARM Ltd. All rights reserved.
-*
-*  This program and the accompanying materials
-*  are licensed and made available under the terms and conditions of the BSD License
-*  which accompanies this distribution.  The full text of the license may be found at
-*  http://opensource.org/licenses/bsd-license.php
-*
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-
-#include "PciHostBridge.h"
-
-#include <Protocol/Cpu.h>
-
-#include "ArmPlatform.h"
-
-EFI_CPU_ARCH_PROTOCOL   *mCpu;
-
-#define PCI_BRIDGE_REVISION_ID                        1
-#define CLASS_CODE_REGISTER(Class, SubClass, ProgIf)  ((Class << 16) | (SubClass << 8) | ProgIf)
-#define PLDA_BRIDGE_CCR                               CLASS_CODE_REGISTER(PCI_CLASS_BRIDGE, \
-                                                                          PCI_CLASS_BRIDGE_P2P, \
-                                                                          PCI_IF_BRIDGE_P2P)
-
-STATIC
-VOID
-SetTranslationAddressEntry (
-  IN  EFI_CPU_IO2_PROTOCOL *CpuIo,
-  IN UINTN                  Entry,
-  IN UINT64                 SourceAddress,
-  IN UINT64                 TranslatedAddress,
-  IN UINT64                 TranslationSize,
-  IN UINT64                 TranslationParameter
-  )
-{
-  UINTN Log2Size = HighBitSet64 (TranslationSize);
-
-  // Ensure the size is a power of two. Restriction form the AXI Translation logic
-  // Othwerwise we increase the translation size
-  if (TranslationSize != (1ULL << Log2Size)) {
-    DEBUG ((EFI_D_WARN, "PCI: The size 0x%lX of the region 0x%lx has been increased to "
-                        "be a power of two for the AXI translation table.\n",
-                        TranslationSize, SourceAddress));
-    Log2Size++;
-  }
-
-  PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_SRC_ADDR_LOW_SIZE,
-      (UINT32)SourceAddress | ((Log2Size - 1) << 1) | 0x1);
-  PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_SRC_ADDR_HI, SourceAddress >> 32);
-
-  PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_TRSL_ADDR_LOW, (UINT32)TranslatedAddress);
-  PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_TRSL_ADDR_HI, TranslatedAddress >> 32);
-
-  PCIE_ROOTPORT_WRITE32 (Entry + PCI_ATR_TRSL_PARAM, TranslationParameter);
-}
-
-EFI_STATUS
-HWPciRbInit (
-  IN  EFI_CPU_IO2_PROTOCOL *CpuIo
-  )
-{
-  UINT32 Value;
-  UINT32 Index;
-  UINTN  TranslationTable;
-
-  PCI_TRACE ("VExpressPciRbInit()");
-
-  PCI_TRACE ("PCIe Setting up Address Translation");
-
-  // The Juno PIO window is 8M, so we need full 32-bit PIO decoding.
-  PCIE_ROOTPORT_WRITE32 (PCIE_BAR_WIN, PCIE_BAR_WIN_SUPPORT_IO | PCIE_BAR_WIN_SUPPORT_IO32 |
-                         PCIE_BAR_WIN_SUPPORT_MEM | PCIE_BAR_WIN_SUPPORT_MEM64);
-
-  // Setup the PCI Configuration Registers
-  // Offset 0a: SubClass       04 PCI-PCI Bridge
-  // Offset 0b: BaseClass      06 Bridge Device
-  // The Class Code register is a 24 bit and can be configured by setting up the PCIE_PCI_IDS
-  // Refer [1] Chapter 13
-  PCIE_ROOTPORT_WRITE32 (PCIE_PCI_IDS + PCIE_PCI_IDS_CLASSCODE_OFFSET, ((PLDA_BRIDGE_CCR << 8) | PCI_BRIDGE_REVISION_ID));
-
-  //
-  // PCIE Window 0 -> AXI4 Master 0 Address Translations
-  //
-  TranslationTable = VEXPRESS_ATR_PCIE_WIN0;
-
-  // MSI Support
-  SetTranslationAddressEntry (CpuIo, TranslationTable, ARM_JUNO_GIV2M_MSI_BASE, ARM_JUNO_GIV2M_MSI_BASE,
-      ARM_JUNO_GIV2M_MSI_SZ, PCI_ATR_TRSLID_AXIDEVICE);
-  TranslationTable += PCI_ATR_ENTRY_SIZE;
-
-  // System Memory Support
-  SetTranslationAddressEntry (CpuIo, TranslationTable, PcdGet64 (PcdSystemMemoryBase), PcdGet64 (PcdSystemMemoryBase),
-      PcdGet64 (PcdSystemMemorySize), PCI_ATR_TRSLID_AXIMEMORY);
-  TranslationTable += PCI_ATR_ENTRY_SIZE;
-  SetTranslationAddressEntry (CpuIo, TranslationTable, ARM_JUNO_EXTRA_SYSTEM_MEMORY_BASE, ARM_JUNO_EXTRA_SYSTEM_MEMORY_BASE,
-      ARM_JUNO_EXTRA_SYSTEM_MEMORY_SZ, PCI_ATR_TRSLID_AXIMEMORY);
-
-  //
-  // AXI4 Slave 1 -> PCIE Window 0 Address Translations
-  //
-  TranslationTable = VEXPRESS_ATR_AXI4_SLV1;
-
-  // PCI ECAM Support
-  SetTranslationAddressEntry (CpuIo, TranslationTable, PCI_ECAM_BASE, PCI_ECAM_BASE, PCI_ECAM_SIZE, PCI_ATR_TRSLID_PCIE_CONF);
-  TranslationTable += PCI_ATR_ENTRY_SIZE;
-
-  // PCI IO Support, the PIO space is translated from the arm MMIO PCI_IO_BASE address to the PIO base address of 0
-  // AKA, PIO addresses used by endpoints are generally in the range of 0-64K.
-  SetTranslationAddressEntry (CpuIo, TranslationTable, PCI_IO_BASE, 0, PCI_IO_SIZE, PCI_ATR_TRSLID_PCIE_IO);
-  TranslationTable += PCI_ATR_ENTRY_SIZE;
-
-  // PCI MEM32 Support
-  SetTranslationAddressEntry (CpuIo, TranslationTable, PCI_MEM32_BASE, PCI_MEM32_BASE, PCI_MEM32_SIZE, PCI_ATR_TRSLID_PCIE_MEMORY);
-  TranslationTable += PCI_ATR_ENTRY_SIZE;
-
-  // PCI MEM64 Support
-  SetTranslationAddressEntry (CpuIo, TranslationTable, PCI_MEM64_BASE, PCI_MEM64_BASE, PCI_MEM64_SIZE, PCI_ATR_TRSLID_PCIE_MEMORY);
-
-  // Add credits
-  PCIE_ROOTPORT_WRITE32 (PCIE_VC_CRED, 0x00f0b818);
-  PCIE_ROOTPORT_WRITE32 (PCIE_VC_CRED + 4, 0x1);
-
-  // Allow ECRC
-  PCIE_ROOTPORT_WRITE32 (PCIE_PEX_SPC2, 0x6006);
-
-  // Reset controller
-  PCIE_CONTROL_WRITE32 (PCIE_CONTROL_RST_CTL, PCIE_CONTROL_RST_CTL_RCPHY_REL);
-
-  // Wait for reset
-  for (Index = 0; Index < 1000; Index++) {
-    gBS->Stall (1000);
-    PCIE_CONTROL_READ32 (PCIE_CONTROL_RST_STS, Value);
-    if ((Value & PCIE_CONTROL_RST_STS_RCPHYPLL_OUT) == PCIE_CONTROL_RST_STS_RCPHYPLL_OUT) {
-      break;
-    }
-  }
-
-  // Check for reset
-  if (!(Value & PCIE_CONTROL_RST_STS_RCPHYPLL_OUT)) {
-    DEBUG ((EFI_D_ERROR, "PCIe failed to come out of reset: %x.\n", Value));
-    return EFI_NOT_READY;
-  }
-
-  gBS->Stall (1000);
-  PCI_TRACE ("Checking link Status...");
-
-  // Wait for Link Up
-  for (Index = 0; Index < 1000; Index++) {
-    gBS->Stall (1000);
-    PCIE_ROOTPORT_READ32 (VEXPRESS_BASIC_STATUS, Value);
-    if (Value & LINK_UP) {
-      break;
-    }
-  }
-
-  // Check for link up
-  if (!(Value & LINK_UP)) {
-    DEBUG ((EFI_D_ERROR, "PCIe link not up: %x.\n", Value));
-    return EFI_NOT_READY;
-  }
-
-  PCIE_ROOTPORT_WRITE32 (PCIE_IMASK_LOCAL, PCIE_INT_MSI | PCIE_INT_INTx);
-
-  return EFI_SUCCESS;
-}
diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.h b/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.h
deleted file mode 100644
index a0c11a70567d..000000000000
--- a/ArmPlatformPkg/ArmJunoPkg/Drivers/PciHostBridgeDxe/XPressRich3.h
+++ /dev/null
@@ -1,111 +0,0 @@ 
-/** @file
-*  Header containing the Xpress-RICH3 PCIe Root Complex specific values
-*
-*  Copyright (c) 2011-2015, ARM Ltd. All rights reserved.
-*
-*  This program and the accompanying materials
-*  are licensed and made available under the terms and conditions of the BSD License
-*  which accompanies this distribution.  The full text of the license may be found at
-*  http://opensource.org/licenses/bsd-license.php
-*
-*  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-*  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-*
-**/
-
-#ifndef __XPRESS_RICH3_H__
-#define __XPRESS_RICH3_H__
-
-#include <Protocol/CpuIo2.h>
-#include <Library/PcdLib.h>
-
-#define PCI_ECAM_BASE       FixedPcdGet64 (PcdPciConfigurationSpaceBaseAddress)
-#define PCI_ECAM_SIZE       FixedPcdGet64 (PcdPciConfigurationSpaceSize)
-#define PCI_IO_BASE         FixedPcdGet64 (PcdPciIoBase)
-#define PCI_IO_SIZE         FixedPcdGet64 (PcdPciIoSize)
-#define PCI_MEM32_BASE      FixedPcdGet64 (PcdPciMmio32Base)
-#define PCI_MEM32_SIZE      FixedPcdGet64 (PcdPciMmio32Size)
-#define PCI_MEM64_BASE      FixedPcdGet64 (PcdPciMmio64Base)
-#define PCI_MEM64_SIZE      FixedPcdGet64 (PcdPciMmio64Size)
-
-/*
- * Bridge Internal Registers
- */
-
-// PCIe Available Credit Settings
-#define PCIE_VC_CRED                            0x090
-// PCIe PCI Standard Configuration Identification Settings registers
-#define PCIE_PCI_IDS                            0x098
-#define PCIE_PCI_IDS_CLASSCODE_OFFSET           0x4
-// PCIe Specific 2 Capabilities Settings
-#define PCIE_PEX_SPC2                           0x0d8
-// PCIe Windows Settings register
-#define PCIE_BAR_WIN                            0x0FC
-// Local Processor Interrupt Mask
-#define PCIE_IMASK_LOCAL                        0x180
-
-#define PCIE_BAR_WIN_SUPPORT_IO                 BIT0
-#define PCIE_BAR_WIN_SUPPORT_IO32               BIT1
-#define PCIE_BAR_WIN_SUPPORT_MEM                BIT2
-#define PCIE_BAR_WIN_SUPPORT_MEM64              BIT3
-
-#define PCIE_INT_MSI                            BIT28
-#define PCIE_INT_A                              BIT24
-#define PCIE_INT_B                              BIT25
-#define PCIE_INT_C                              BIT26
-#define PCIE_INT_D                              BIT27
-#define PCIE_INT_INTx                           (PCIE_INT_A | PCIE_INT_B |\
-                                                 PCIE_INT_C | PCIE_INT_D)
-
-/*
- * PCIe Control Registers
- */
-#define PCIE_CONTROL_RST_CTL     0x1004
-#define PCIE_CONTROL_RST_STS     0x1008
-
-/*
- * PCI Express Address Translation registers
- * All are offsets from PcdPcieControlBaseAddress
- */
-#define VEXPRESS_ATR_PCIE_WIN0    0x600
-#define VEXPRESS_ATR_AXI4_SLV0    0x800
-#define VEXPRESS_ATR_AXI4_SLV1    0x820
-
-#define PCI_ATR_ENTRY_SIZE           0x20
-#define PCI_ATR_SRC_ADDR_LOW_SIZE    0
-#define PCI_ATR_SRC_ADDR_HI          0x4
-#define PCI_ATR_TRSL_ADDR_LOW        0x8
-#define PCI_ATR_TRSL_ADDR_HI         0xc
-#define PCI_ATR_TRSL_PARAM           0x10
-
-#define PCI_ATR_TRSLID_AXIDEVICE     0x420004
-#define PCI_ATR_TRSLID_AXIMEMORY     0x4e0004
-#define PCI_ATR_TRSLID_PCIE_CONF     0x000001
-#define PCI_ATR_TRSLID_PCIE_IO       0x020000
-#define PCI_ATR_TRSLID_PCIE_MEMORY   0x000000
-
-#define PCIE_CONTROL_RST_CTL_RC_REL        (1 << 1)
-#define PCIE_CONTROL_RST_CTL_PHY_REL       (1 << 0)
-#define PCIE_CONTROL_RST_CTL_RCPHY_REL     (PCIE_CONTROL_RST_CTL_RC_REL | PCIE_CONTROL_RST_CTL_PHY_REL)
-
-#define PCIE_CONTROL_RST_STS_RC_ST         (1 << 2)
-#define PCIE_CONTROL_RST_STS_PHY_ST        (1 << 1)
-#define PCIE_CONTROL_RST_STS_PLL_ST        (1 << 0)
-#define PCIE_CONTROL_RST_STS_RCPHYPLL_OUT  (PCIE_CONTROL_RST_STS_RC_ST | PCIE_CONTROL_RST_STS_PHY_ST | PCIE_CONTROL_RST_STS_PLL_ST)
-
-#define VEXPRESS_BASIC_STATUS       0x18
-#define LINK_UP                     0xff
-
-/*
- * Initialize Versatile Express PCIe Host Bridge
- */
-EFI_STATUS
-VExpressPciRbInit (
-  IN EFI_CPU_IO2_PROTOCOL *CpuIo
-  );
-
-// Does not support neither EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM
-// nor EFI_PCI_HOST_BRIDGE_MEM64_DECODE
-#define PCI_MEMORY_ALLOCATION_ATTRIBUTES    0
-
-#endif