--- /dev/null
+Porting UEFI to a ARM platform\r
+------------------------------\r
+1. Create the new platform directory under ArmPlatformPkg\r
+\r
+2. Create its DSC and FDF files into this new directory. These files can be copied from ArmVExpress-CTA9x4.dsc and ArmVExpress-CTA9x4.fdf; and adapted following the requirement of your platform. \r
+\r
+3. Set up the PCDs required by ArmPlatformPkg in your FDF or DSC files \r
+\r
+PCD Description\r
+gArmTokenSpaceGuid.PcdSecureFdBaseAddress : Base address of your Secure Firmware \r
+gArmTokenSpaceGuid.PcdSecureFdSize : Size in byte of your Secure Firmware gEmbeddedTokenSpaceGuid.\r
+PcdEmbeddedFdBaseAddress : Base Address of your Non-Secure Firmware gEmbeddedTokenSpaceGuid.\r
+PcdEmbeddedFdSize : Size in bytes of your Non-Secure Firmware \r
+gArmTokenSpaceGuid.PcdL2x0ControllerBase : Base Address of your L2x0 controller \r
+gArmTokenSpaceGuid.PcdGicDistributorBase : Base address of the Distributor of your General Interrupt Controller gArmTokenSpaceGuid.\r
+PcdGicInterruptInterfaceBase : Base address of the Interface of your General Interrupt Controller gArmVExpressTokenSpaceGuid.\r
+PcdCPUCoresSecStackBase : Top of Secure Stack for Secure World gArmVExpressTokenSpaceGuid.\r
+PcdCPUCoreSecStackSize : Size of the stack for each of the 4 CPU cores gArmVExpressTokenSpaceGuid.\r
+PcdCPUCoresSecMonStackBase : Top of Stack for Monitor World gArmVExpressTokenSpaceGuid.\r
+PcdCPUCoreSecMonStackSize : Size of the stack for each of the 4 CPU cores gArmVExpressTokenSpaceGuid.\r
+PcdCPUCoresNonSecStackBase : Top of SEC Stack for Normal World gArmVExpressTokenSpaceGuid.\r
+PcdCPUCoresNonSecStackSize : Size of the stack for each of the 4 CPU Cores gArmVExpressTokenSpaceGuid.\r
+PcdPeiServicePtrAddr : Cached value of PeiServicesTable \r
+\r
+4. Implement 'ArmPlatformLib' for your platform following the interface defined by ArmPlatformPkg\Include\Library\ArmPlatformLib.h.\r
+\r
+Functions to implement:\r
+\r
+VOID ArmPlatformIsMemoryInitialized(VOID);\r
+VOID ArmPlatformInitializeBootMemory(VOID);\r
+VOID ArmPlatformInitializeSystemMemory(VOID);\r
+VOID ArmPlatformBootRemapping(VOID);\r
+UINTN ArmPlatformTrustzoneSupported(VOID);\r
+VOID ArmPlatformTrustzoneInit(VOID);\r
+VOID ArmPlatformGetPeiMemory (\r
+ OUT UINTN* PeiMemoryBase,\r
+ OUT UINTN* PeiMemorySize);\r
+VOID ArmPlatformGetVirtualMemoryMap (\r
+ OUT ARM_MEMORY_REGION_DESCRIPTOR** VirtualMemoryMap);\r
+VOID ArmPlatformGetEfiMemoryMap (\r
+ OUT ARM_SYSTEM_MEMORY_REGION_DESCRIPTOR** EfiMemoryMap)\r