// model or hardware platforms).\r
//\r
CONST ARM_VEXPRESS_PLATFORM ArmVExpressPlatforms[] = {\r
- { ARM_FVP_VEXPRESS_AEMv8x4, FixedPcdGetPtr(PcdFdtFvpVExpressAEMv8x4), L"rtsm_ve-aemv8a.dtb" },
- { ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2, FixedPcdGetPtr(PcdFdtFvpBaseAEMv8x4GicV2), L"fvp-base-gicv2-psci.dtb" },
- { ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2_LEGACY, FixedPcdGetPtr(PcdFdtFvpBaseAEMv8x4GicV2Legacy), L"fvp-base-gicv2legacy-psci.dtb" },
- { ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV3, FixedPcdGetPtr(PcdFdtFvpBaseAEMv8x4GicV3), L"fvp-base-gicv3-psci.dtb" },
- { ARM_FVP_FOUNDATION_GICV2, FixedPcdGetPtr(PcdFdtFvpFoundationGicV2), L"fvp-foundation-gicv2-psci.dtb" },
- { ARM_FVP_FOUNDATION_GICV2_LEGACY, FixedPcdGetPtr(PcdFdtFvpFoundationGicV2Legacy), L"fvp-foundation-gicv2legacy-psci.dtb" },
- { ARM_FVP_FOUNDATION_GICV3, FixedPcdGetPtr(PcdFdtFvpFoundationGicV3), L"fvp-foundation-gicv3-psci.dtb" },
- { ARM_FVP_VEXPRESS_UNKNOWN }
+ { ARM_FVP_VEXPRESS_AEMv8x4, FixedPcdGetPtr (PcdFdtFvpVExpressAEMv8x4), L"rtsm_ve-aemv8a.dtb" },\r
+ { ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2, FixedPcdGetPtr (PcdFdtFvpBaseAEMv8x4GicV2), L"fvp-base-gicv2-psci.dtb" },\r
+ { ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2_LEGACY, FixedPcdGetPtr (PcdFdtFvpBaseAEMv8x4GicV2Legacy), L"fvp-base-gicv2legacy-psci.dtb" },\r
+ { ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV3, FixedPcdGetPtr (PcdFdtFvpBaseAEMv8x4GicV3), L"fvp-base-gicv3-psci.dtb" },\r
+ { ARM_FVP_FOUNDATION_GICV2, FixedPcdGetPtr (PcdFdtFvpFoundationGicV2), L"fvp-foundation-gicv2-psci.dtb" },\r
+ { ARM_FVP_FOUNDATION_GICV2_LEGACY, FixedPcdGetPtr (PcdFdtFvpFoundationGicV2Legacy), L"fvp-foundation-gicv2legacy-psci.dtb" },\r
+ { ARM_FVP_FOUNDATION_GICV3, FixedPcdGetPtr (PcdFdtFvpFoundationGicV3), L"fvp-foundation-gicv3-psci.dtb" },\r
+ { ARM_FVP_VEXPRESS_UNKNOWN }\r
};\r
\r
/**\r
// model or hardware platforms).\r
//\r
CONST ARM_VEXPRESS_PLATFORM ArmVExpressPlatforms[] = {\r
- { ARM_FVP_VEXPRESS_A9x4, FixedPcdGetPtr(PcdFdtVExpressFvpA9x4), L"rtsm_ve-cortex_a9x4.dtb" },
- { ARM_FVP_VEXPRESS_A15x1, FixedPcdGetPtr(PcdFdtVExpressFvpA15x1), L"rtsm_ve-cortex_a15x1.dtb" },
- { ARM_FVP_VEXPRESS_A15x2, FixedPcdGetPtr(PcdFdtVExpressFvpA15x2), L"rtsm_ve-cortex_a15x2.dtb" },
- { ARM_FVP_VEXPRESS_A15x4, FixedPcdGetPtr(PcdFdtVExpressFvpA15x4), L"rtsm_ve-cortex_a15x4.dtb" },
- { ARM_FVP_VEXPRESS_UNKNOWN, }
+ { ARM_FVP_VEXPRESS_A9x4, FixedPcdGetPtr (PcdFdtVExpressFvpA9x4), L"rtsm_ve-cortex_a9x4.dtb" },\r
+ { ARM_FVP_VEXPRESS_A15x1, FixedPcdGetPtr (PcdFdtVExpressFvpA15x1), L"rtsm_ve-cortex_a15x1.dtb" },\r
+ { ARM_FVP_VEXPRESS_A15x2, FixedPcdGetPtr (PcdFdtVExpressFvpA15x2), L"rtsm_ve-cortex_a15x2.dtb" },\r
+ { ARM_FVP_VEXPRESS_A15x4, FixedPcdGetPtr (PcdFdtVExpressFvpA15x4), L"rtsm_ve-cortex_a15x4.dtb" },\r
+ { ARM_FVP_VEXPRESS_UNKNOWN, }\r
};\r
\r
/**\r
\r
#include "ArmVExpressInternal.h"\r
\r
-#include <PiDxe.h>
-#include <Library/BaseMemoryLib.h>
+#include <PiDxe.h>\r
+#include <Library/BaseMemoryLib.h>\r
#include <Library/VirtioMmioDeviceLib.h>\r
#include <Library/ArmShellCmdLib.h>\r
#include <Library/MemoryAllocationLib.h>\r
-#include <Library/DevicePathLib.h>
-
-#include <Protocol/FirmwareVolume2.h>
+#include <Library/DevicePathLib.h>\r
+\r
+#include <Protocol/FirmwareVolume2.h>\r
\r
#define ARM_FVP_BASE_VIRTIO_BLOCK_BASE 0x1c130000\r
\r
}\r
};\r
\r
-STATIC
-EFI_STATUS
-InternalFindFdtByGuid (
- IN OUT EFI_DEVICE_PATH **FdtDevicePath,
- IN CONST EFI_GUID *FdtGuid
- )
-{
- MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FileDevicePath;
- EFI_HANDLE *HandleBuffer;
- UINTN HandleCount;
- UINTN Index;
- EFI_FIRMWARE_VOLUME2_PROTOCOL *FvProtocol;
- EFI_GUID NameGuid;
- UINTN Size;
- VOID *Key;
- EFI_FV_FILETYPE FileType;
- EFI_FV_FILE_ATTRIBUTES Attributes;
- EFI_DEVICE_PATH *FvDevicePath;
- EFI_STATUS Status;
-
- if (FdtGuid == NULL) {
- return EFI_NOT_FOUND;
- }
-
- EfiInitializeFwVolDevicepathNode (&FileDevicePath, FdtGuid);
-
- HandleBuffer = NULL;
- Status = gBS->LocateHandleBuffer (
- ByProtocol,
- &gEfiFirmwareVolume2ProtocolGuid,
- NULL,
- &HandleCount,
- &HandleBuffer
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- for (Index = 0; Index < HandleCount; Index++) {
- Status = gBS->HandleProtocol (
- HandleBuffer[Index],
- &gEfiFirmwareVolume2ProtocolGuid,
- (VOID **) &FvProtocol
- );
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- // Allocate Key
- Key = AllocatePool (FvProtocol->KeySize);
- ASSERT (Key != NULL);
- ZeroMem (Key, FvProtocol->KeySize);
-
- do {
- FileType = EFI_FV_FILETYPE_RAW;
- Status = FvProtocol->GetNextFile (FvProtocol, Key, &FileType, &NameGuid, &Attributes, &Size);
- if (Status == EFI_NOT_FOUND) {
- break;
- }
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- //
- // Check whether this file is the one we are looking for. If so,
- // create a device path for it and return it to the caller.
- //
- if (CompareGuid (&NameGuid, FdtGuid)) {
- Status = gBS->HandleProtocol (HandleBuffer[Index], &gEfiDevicePathProtocolGuid, (VOID **)&FvDevicePath);
- if (!EFI_ERROR (Status)) {
- *FdtDevicePath = AppendDevicePathNode (FvDevicePath,
- (EFI_DEVICE_PATH_PROTOCOL *)&FileDevicePath);
- }
- goto Done;
- }
- } while (TRUE);
- FreePool (Key);
- }
-
- if (Index == HandleCount) {
- Status = EFI_NOT_FOUND;
- }
- return Status;
-
-Done:
- FreePool (Key);
- return Status;
-}
-
+STATIC\r
+EFI_STATUS\r
+InternalFindFdtByGuid (\r
+ IN OUT EFI_DEVICE_PATH **FdtDevicePath,\r
+ IN CONST EFI_GUID *FdtGuid\r
+ )\r
+{\r
+ MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FileDevicePath;\r
+ EFI_HANDLE *HandleBuffer;\r
+ UINTN HandleCount;\r
+ UINTN Index;\r
+ EFI_FIRMWARE_VOLUME2_PROTOCOL *FvProtocol;\r
+ EFI_GUID NameGuid;\r
+ UINTN Size;\r
+ VOID *Key;\r
+ EFI_FV_FILETYPE FileType;\r
+ EFI_FV_FILE_ATTRIBUTES Attributes;\r
+ EFI_DEVICE_PATH *FvDevicePath;\r
+ EFI_STATUS Status;\r
+\r
+ if (FdtGuid == NULL) {\r
+ return EFI_NOT_FOUND;\r
+ }\r
+\r
+ EfiInitializeFwVolDevicepathNode (&FileDevicePath, FdtGuid);\r
+\r
+ HandleBuffer = NULL;\r
+ Status = gBS->LocateHandleBuffer (\r
+ ByProtocol,\r
+ &gEfiFirmwareVolume2ProtocolGuid,\r
+ NULL,\r
+ &HandleCount,\r
+ &HandleBuffer\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ for (Index = 0; Index < HandleCount; Index++) {\r
+ Status = gBS->HandleProtocol (\r
+ HandleBuffer[Index],\r
+ &gEfiFirmwareVolume2ProtocolGuid,\r
+ (VOID **) &FvProtocol\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ // Allocate Key\r
+ Key = AllocatePool (FvProtocol->KeySize);\r
+ ASSERT (Key != NULL);\r
+ ZeroMem (Key, FvProtocol->KeySize);\r
+\r
+ do {\r
+ FileType = EFI_FV_FILETYPE_RAW;\r
+ Status = FvProtocol->GetNextFile (FvProtocol, Key, &FileType, &NameGuid, &Attributes, &Size);\r
+ if (Status == EFI_NOT_FOUND) {\r
+ break;\r
+ }\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ //\r
+ // Check whether this file is the one we are looking for. If so,\r
+ // create a device path for it and return it to the caller.\r
+ //\r
+ if (CompareGuid (&NameGuid, FdtGuid)) {\r
+ Status = gBS->HandleProtocol (HandleBuffer[Index], &gEfiDevicePathProtocolGuid, (VOID **)&FvDevicePath);\r
+ if (!EFI_ERROR (Status)) {\r
+ *FdtDevicePath = AppendDevicePathNode (FvDevicePath,\r
+ (EFI_DEVICE_PATH_PROTOCOL *)&FileDevicePath);\r
+ }\r
+ goto Done;\r
+ }\r
+ } while (TRUE);\r
+ FreePool (Key);\r
+ }\r
+\r
+ if (Index == HandleCount) {\r
+ Status = EFI_NOT_FOUND;\r
+ }\r
+ return Status;\r
+\r
+Done:\r
+ FreePool (Key);\r
+ return Status;\r
+}\r
+\r
/**\r
* Generic UEFI Entrypoint for 'ArmFvpDxe' driver\r
* See UEFI specification for the details of the parameters\r
CHAR16 *TextDevicePath;\r
UINTN TextDevicePathSize;\r
VOID *Buffer;\r
- EFI_DEVICE_PATH *FdtDevicePath;
+ EFI_DEVICE_PATH *FdtDevicePath;\r
\r
Status = gBS->InstallProtocolInterface (&ImageHandle,\r
&gEfiDevicePathProtocolGuid, EFI_NATIVE_INTERFACE,\r
\r
Status = ArmVExpressGetPlatform (&Platform);\r
if (!EFI_ERROR (Status)) {\r
- FdtDevicePath = NULL;
- Status = InternalFindFdtByGuid (&FdtDevicePath, Platform->FdtGuid);
- if (!EFI_ERROR (Status)) {
- TextDevicePath = ConvertDevicePathToText (FdtDevicePath, FALSE, FALSE);
- if (TextDevicePath != NULL) {
- TextDevicePathSize = StrSize (TextDevicePath);
- }
- FreePool (FdtDevicePath);
- } else {
- TextDevicePathSize = StrSize ((CHAR16*)PcdGetPtr (PcdFvpFdtDevicePathsBase)) - sizeof (CHAR16);
- TextDevicePathSize += StrSize (Platform->FdtName);
-
- TextDevicePath = AllocatePool (TextDevicePathSize);
- if (TextDevicePath != NULL) {
- StrCpy (TextDevicePath, ((CHAR16*)PcdGetPtr (PcdFvpFdtDevicePathsBase)));
- StrCat (TextDevicePath, Platform->FdtName);
- }
- }
+ FdtDevicePath = NULL;\r
+ Status = InternalFindFdtByGuid (&FdtDevicePath, Platform->FdtGuid);\r
+ if (!EFI_ERROR (Status)) {\r
+ TextDevicePath = ConvertDevicePathToText (FdtDevicePath, FALSE, FALSE);\r
+ if (TextDevicePath != NULL) {\r
+ TextDevicePathSize = StrSize (TextDevicePath);\r
+ }\r
+ FreePool (FdtDevicePath);\r
+ } else {\r
+ TextDevicePathSize = StrSize ((CHAR16*)PcdGetPtr (PcdFvpFdtDevicePathsBase)) - sizeof (CHAR16);\r
+ TextDevicePathSize += StrSize (Platform->FdtName);\r
+\r
+ TextDevicePath = AllocatePool (TextDevicePathSize);\r
+ if (TextDevicePath != NULL) {\r
+ StrCpy (TextDevicePath, ((CHAR16*)PcdGetPtr (PcdFvpFdtDevicePathsBase)));\r
+ StrCat (TextDevicePath, Platform->FdtName);\r
+ }\r
+ }\r
if (TextDevicePath != NULL) {\r
Buffer = PcdSetPtr (PcdFdtDevicePaths, &TextDevicePathSize, TextDevicePath);\r
if (Buffer == NULL) {\r
UefiDriverEntryPoint\r
UefiBootServicesTableLib\r
VirtioMmioDeviceLib\r
- DevicePathLib
+ DevicePathLib\r
\r
[LibraryClasses.AARCH64]\r
ArmGicLib\r
\r
-[Protocols]
- gEfiFirmwareVolume2ProtocolGuid
- gEfiDevicePathProtocolGuid
-
+[Protocols]\r
+ gEfiFirmwareVolume2ProtocolGuid\r
+ gEfiDevicePathProtocolGuid\r
+\r
[FixedPcd]\r
gArmVExpressTokenSpaceGuid.PcdFvpFdtDevicePathsBase\r
\r
-[FixedPcd.ARM]
- gArmVExpressTokenSpaceGuid.PcdFdtVExpressFvpA9x4
- gArmVExpressTokenSpaceGuid.PcdFdtVExpressFvpA15x1
- gArmVExpressTokenSpaceGuid.PcdFdtVExpressFvpA15x2
- gArmVExpressTokenSpaceGuid.PcdFdtVExpressFvpA15x4
-
-[FixedPcd.AARCH64]
- gArmVExpressTokenSpaceGuid.PcdFdtFvpVExpressAEMv8x4
- gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2
- gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2Legacy
- gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV3
- gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2
- gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2Legacy
- gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV3
-
+[FixedPcd.ARM]\r
+ gArmVExpressTokenSpaceGuid.PcdFdtVExpressFvpA9x4\r
+ gArmVExpressTokenSpaceGuid.PcdFdtVExpressFvpA15x1\r
+ gArmVExpressTokenSpaceGuid.PcdFdtVExpressFvpA15x2\r
+ gArmVExpressTokenSpaceGuid.PcdFdtVExpressFvpA15x4\r
+\r
+[FixedPcd.AARCH64]\r
+ gArmVExpressTokenSpaceGuid.PcdFdtFvpVExpressAEMv8x4\r
+ gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2\r
+ gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2Legacy\r
+ gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV3\r
+ gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2\r
+ gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2Legacy\r
+ gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV3\r
+\r
[Pcd]\r
gEmbeddedTokenSpaceGuid.PcdFdtDevicePaths\r
ARM_VEXPRESS_PLATFORM_ID Id;\r
\r
// Flattened Device Tree (FDT) File\r
- CONST EFI_GUID *FdtGuid; /// Name of the FDT when present into the FV
- CONST CHAR16 *FdtName; /// Name of the FDT when present into a File System
+ CONST EFI_GUID *FdtGuid; /// Name of the FDT when present into the FV\r
+ CONST CHAR16 *FdtName; /// Name of the FDT when present into a File System\r
} ARM_VEXPRESS_PLATFORM;\r
\r
// Array that contains the list of the VExpress based platform supported by this DXE driver\r
# ARM Versatile Express FDT Guids\r
#\r
# FVP platforms\r
- gArmVExpressTokenSpaceGuid.PcdFdtVExpressFvpA9x4|{ 0x12, 0x7b, 0xdf, 0xa1, 0x60, 0x11, 0xcf, 0x16, 0xb8, 0xc6, 0x98, 0xde, 0xdf, 0xe2, 0xce, 0xae }|VOID*|0x00000007
- gArmVExpressTokenSpaceGuid.PcdFdtVExpressFvpA15x1|{ 0xe5, 0x1b, 0xc0, 0x96, 0xeb, 0xd7, 0x1a, 0x42, 0xc8, 0xe8, 0x6a, 0xfd, 0x5a, 0x86, 0x1d, 0x84 }|VOID*|0x00000008
- gArmVExpressTokenSpaceGuid.PcdFdtVExpressFvpA15x2|{ 0x84, 0x43, 0x70, 0x4d, 0x19, 0xf1, 0x29, 0xe3, 0xef, 0xcd, 0xa5, 0x9b, 0x3d, 0x0a, 0x5a, 0x5f }|VOID*|0x00000009
- gArmVExpressTokenSpaceGuid.PcdFdtVExpressFvpA15x4|{ 0x72, 0x3b, 0x28, 0x27, 0x90, 0x2f, 0xca, 0x4d, 0x9a, 0xb5, 0x98, 0x48, 0xfb, 0xc2, 0xd4, 0xed }|VOID*|0x0000000A
+ gArmVExpressTokenSpaceGuid.PcdFdtVExpressFvpA9x4|{ 0x12, 0x7b, 0xdf, 0xa1, 0x60, 0x11, 0xcf, 0x16, 0xb8, 0xc6, 0x98, 0xde, 0xdf, 0xe2, 0xce, 0xae }|VOID*|0x00000007\r
+ gArmVExpressTokenSpaceGuid.PcdFdtVExpressFvpA15x1|{ 0xe5, 0x1b, 0xc0, 0x96, 0xeb, 0xd7, 0x1a, 0x42, 0xc8, 0xe8, 0x6a, 0xfd, 0x5a, 0x86, 0x1d, 0x84 }|VOID*|0x00000008\r
+ gArmVExpressTokenSpaceGuid.PcdFdtVExpressFvpA15x2|{ 0x84, 0x43, 0x70, 0x4d, 0x19, 0xf1, 0x29, 0xe3, 0xef, 0xcd, 0xa5, 0x9b, 0x3d, 0x0a, 0x5a, 0x5f }|VOID*|0x00000009\r
+ gArmVExpressTokenSpaceGuid.PcdFdtVExpressFvpA15x4|{ 0x72, 0x3b, 0x28, 0x27, 0x90, 0x2f, 0xca, 0x4d, 0x9a, 0xb5, 0x98, 0x48, 0xfb, 0xc2, 0xd4, 0xed }|VOID*|0x0000000A\r
# HW platforms\r
gArmVExpressTokenSpaceGuid.PcdFdtVExpressHwA9x4|{ 0xf6, 0x1c, 0xd2, 0x2f, 0xe8, 0xe6, 0xf2, 0x4f, 0xa9, 0xca, 0x3b, 0x9f, 0x00, 0xe9, 0x28, 0x89 }|VOID*|0x0000000B\r
gArmVExpressTokenSpaceGuid.PcdFdtVExpressHwA15x2A7x3|{ 0xeb, 0x06, e6, 0xd5, 0xdf, 0x83, 0x90, 0x4e, 0x81, 0xe8, 0xc3, 0xdb, 0x2f, 0x77, 0x17, 0x9a }|VOID*|0x0000000C\r
gArmVExpressTokenSpaceGuid.PcdFdtVExpressHwA15|{ 0xc2, 0x47, 0x89, 0x6b, 0x87, 0x42, 0x91, 0x4d, 0x8f, 0xe0, 0xa3, 0x81, 0xea, 0x5b, 0x56, 0x8f }|VOID*|0x0000000D\r
gArmVExpressTokenSpaceGuid.PcdFdtVExpressHwA5|{ 0x63, 0x76, 0xcc, 0xa2, 0x7c, 0x4d, 0x8a, 0x44, 0xaa, 0xb5, 0x4c, 0x03, 0x4b, 0x6f, 0xda, 0xb7 }|VOID*|0x0000000E\r
-
- # AArch64 FVP platforms
- gArmVExpressTokenSpaceGuid.PcdFdtFvpVExpressAEMv8x4|{ 0xa8, 0x95, 0x5f, 0xf6, 0x32, 0x7b, 0xf3, 0x16, 0x12, 0x32, 0x45, 0x50, 0xbd, 0x54, 0xca, 0xe5 }|VOID*|0x00000010
- gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2|{ 0x66, 0xcf, 0x57, 0xa4, 0xac, 0x7e, 0x7f, 0x3d, 0x21, 0x88, 0x3a, 0x58, 0x3c, 0x27, 0xd7, 0xe8 }|VOID*|0x00000011
- gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2Legacy|{ 0x8b, 0xcb, 0xe0, 0x14, 0xd1, 0x46, 0x79, 0xae, 0x7f, 0x20, 0xcf, 0x84, 0x22, 0xc7, 0x94, 0x4a }|VOID*|0x00000012
- gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV3|{ 0x4d, 0x03, 0xb8, 0x77, 0x63, 0x25, 0x0a, 0x7f, 0xe9, 0x72, 0xfa, 0x68, 0x74, 0xc7, 0x5e, 0xb5 }|VOID*|0x00000013
- gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2|{ 0x36, 0x4f, 0x61, 0x92, 0x86, 0xb1, 0xa2, 0x16, 0x32, 0x65, 0x35, 0x3f, 0x01, 0xf3, 0x3b, 0x64 }|VOID*|0x00000014
- gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2Legacy|{ 0xf6, 0xcb, 0x9d, 0x86, 0x38, 0x74, 0x8a, 0xb0, 0xfe, 0x40, 0x08, 0x0f, 0x3f, 0xb3, 0x50, 0x7c }|VOID*|0x00000015
- gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV3|{ 0x51, 0xd0, 0x75, 0x6b, 0x9d, 0x35, 0x1b, 0x1b, 0xa6, 0xc6, 0xab, 0xa0, 0x90, 0xf9, 0xf0, 0x0a }|VOID*|0x00000016
+\r
+ # AArch64 FVP platforms\r
+ gArmVExpressTokenSpaceGuid.PcdFdtFvpVExpressAEMv8x4|{ 0xa8, 0x95, 0x5f, 0xf6, 0x32, 0x7b, 0xf3, 0x16, 0x12, 0x32, 0x45, 0x50, 0xbd, 0x54, 0xca, 0xe5 }|VOID*|0x00000010\r
+ gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2|{ 0x66, 0xcf, 0x57, 0xa4, 0xac, 0x7e, 0x7f, 0x3d, 0x21, 0x88, 0x3a, 0x58, 0x3c, 0x27, 0xd7, 0xe8 }|VOID*|0x00000011\r
+ gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2Legacy|{ 0x8b, 0xcb, 0xe0, 0x14, 0xd1, 0x46, 0x79, 0xae, 0x7f, 0x20, 0xcf, 0x84, 0x22, 0xc7, 0x94, 0x4a }|VOID*|0x00000012\r
+ gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV3|{ 0x4d, 0x03, 0xb8, 0x77, 0x63, 0x25, 0x0a, 0x7f, 0xe9, 0x72, 0xfa, 0x68, 0x74, 0xc7, 0x5e, 0xb5 }|VOID*|0x00000013\r
+ gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2|{ 0x36, 0x4f, 0x61, 0x92, 0x86, 0xb1, 0xa2, 0x16, 0x32, 0x65, 0x35, 0x3f, 0x01, 0xf3, 0x3b, 0x64 }|VOID*|0x00000014\r
+ gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2Legacy|{ 0xf6, 0xcb, 0x9d, 0x86, 0x38, 0x74, 0x8a, 0xb0, 0xfe, 0x40, 0x08, 0x0f, 0x3f, 0xb3, 0x50, 0x7c }|VOID*|0x00000015\r
+ gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV3|{ 0x51, 0xd0, 0x75, 0x6b, 0x9d, 0x35, 0x1b, 0x1b, 0xa6, 0xc6, 0xab, 0xa0, 0x90, 0xf9, 0xf0, 0x0a }|VOID*|0x00000016\r