Home | History | Annotate | Download | only in Documentation
      1 Porting UEFI to a ARM platform :
      2 --------------------------------
      3 1. Create the new platform directory under ArmPlatformPkg
      4 
      5 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. 
      6 
      7 3. Set up the PCDs required by ArmPlatformPkg in your FDF or DSC files 
      8 
      9 4. Implement 'ArmPlatformLib' for your platform following the interface defined by ArmPlatformPkg\Include\Library\ArmPlatformLib.h.
     10 
     11 
     12 PCDs	Description :
     13 -------------------
     14 
     15 # Firmware Device / Volume
     16 gArmTokenSpaceGuid.PcdSecureFdBaseAddress       : Base address of your Secure Firmware Device 
     17 gArmTokenSpaceGuid.PcdSecureFdSize              : Size in byte of your Secure Firmware Device.
     18 gArmTokenSpaceGuid.PcdFdBaseAddress       : Base Address of your Non-Secure/Normal World Firmware Device.
     19 gArmTokenSpaceGuid.PcdFdSize              : Size in bytes of your Non-Secure/Normal World Firmware Device 
     20 
     21 # Stacks
     22 gArmPlatformTokenSpaceGuid.PcdCPUCoresSecStackBase             : Base of Secure Stack for Secure World
     23 gArmPlatformTokenSpaceGuid.PcdCPUCoreSecPrimaryStackSize       : Size of the stack for the Primary Core in Secure World
     24 gArmPlatformTokenSpaceGuid.PcdCPUCoreSecSecondaryStackSize     : Size of the stack for the Secondary Cores in Secure World
     25 gArmPlatformTokenSpaceGuid.PcdCPUCoresSecMonStackBase          : Base of Stack for Monitor World
     26 gArmPlatformTokenSpaceGuid.PcdCPUCoreSecMonStackSize           : Size of the stack for each cores
     27 gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase                : Base of SEC Stack for Normal World
     28 gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize          : Size of the stack for the Primary Core
     29 gArmPlatformTokenSpaceGuid.PcdCPUCoreSecondaryStackSize        : Size of the stack for the Secondary Core
     30 
     31 # CPU / Architectural controllers
     32 gArmTokenSpaceGuid.PcdGicDistributorBase        : Base address of the Distributor of your General Interrupt Controller
     33 gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase : Base address of the Interface of your General Interrupt Controller
     34 
     35 # Memory Regions
     36 gArmPlatformTokenSpaceGuid.PcdSystemMemoryUefiRegionSize  : Size of the region reserve for PI & UEFI
     37 gArmTokenSpaceGuid.PcdSystemMemoryBase                    : Base Address of the System Memory (DRAM)
     38 gArmTokenSpaceGuid.PcdSystemMemorySize                    : Size of the System Memory (DRAM)
     39 
     40 # Features
     41 gArmPlatformTokenSpaceGuid.PcdSystemMemoryInitializeInSec : TRUE if System Memory initialized by the SEC phase
     42 gArmPlatformTokenSpaceGuid.PcdSendSgiToBringUpSecondaryCores : TRUE if the PrePi or PrePeiCore modules have to send an SGI to resume the excution of the secondary cores 
     43 
     44 # Boot Manager
     45 gArmPlatformTokenSpaceGuid.PcdDefaultBootDescription      : Description of the Default Boot Entry
     46 gArmPlatformTokenSpaceGuid.PcdDefaultBootDevicePath       : DevicePath of the Default Boot Entry
     47 gArmPlatformTokenSpaceGuid.PcdDefaultBootArgument         : Argument for the Default Boot Entry
     48 gArmPlatformTokenSpaceGuid.PcdDefaultBootType             : Define the binary type of the Default Boot Entry (0=EFI application, 1=Linux kernel with ATAG support, 2=Linux Kernel with FDT support)  
     49 gArmPlatformTokenSpaceGuid.PcdPlatformBootTimeOut         : Timeout before booting on the Device Boot entry (by default the auto boot is skipped)
     50 gArmPlatformTokenSpaceGuid.PcdDefaultConInPaths           : List of Device Path use for the Console Input
     51 gArmPlatformTokenSpaceGuid.PcdDefaultConOutPaths          : List of Device Path use for the Console Output
     52 
     53 
     54 FAQ :
     55 -----
     56 # When to use PrePi or PrePeiCore ?
     57 - PrePi: when the memory has already been initialized by the first stage boot loader
     58     Boot sequence: PlatformFirmware/PrePi/Dxe/Bds
     59     Example: Beagle Board
     60 
     61 - PrePeiCore: when the firmware is started from XIP memory and in Secure world. The PeiCore shadows the firmware itself in System Memory (DRAM)
     62     Boot sequence: Sec/PrePiCore/PeiCore/Dxe/Bds
     63     Example: ARM Versatile Express
     64 
     65 See:
     66 - ArmPlatformPkg/Documentation/ARM-EDK2-Overview.png
     67 - ArmPlatformPkg/Documentation/ArmPlatformLib-Full-Boot.png
     68 - ArmPlatformPkg/Documentation/ArmPlatformLib-2nd-Stage.png
     69 
     70 # What is the PcdStandalone
     71 gArmPlatformTokenSpaceGuid.PcdStandalone=FALSE is used on ARM Development Platforms during the development stage.
     72 To avoid to reflash the NOR Flash after each build, the SEC (in NOR Flash) intializes thd DRAM and wait until the Normal World firmware is copied into the DRAM.
     73 Copying the firmware in DRAM is much faster than reflashing the NOR Flash. It is also more convenient to debug the firmware form DRAM than NOR Flash (eg: use of software breakpoint)
     74  
     75