Home | History | Annotate | Download | only in ArmPlatformPkg
      1 #
      2 #  Copyright (c) 2011-2015, ARM Limited. All rights reserved.
      3 #
      4 #  This program and the accompanying materials
      5 #  are licensed and made available under the terms and conditions of the BSD License
      6 #  which accompanies this distribution.  The full text of the license may be found at
      7 #  http://opensource.org/licenses/bsd-license.php
      8 #
      9 #  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     10 #  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     11 #
     12 
     13 ################################################################################
     14 #
     15 # FD Section
     16 # The [FD] Section is made up of the definition statements and a
     17 # description of what goes into  the Flash Device Image.  Each FD section
     18 # defines one flash "device" image.  A flash device image may be one of
     19 # the following: Removable media bootable image (like a boot floppy
     20 # image,) an Option ROM image (that would be "flashed" into an add-in
     21 # card,) a System "Flash"  image (that would be burned into a system's
     22 # flash) or an Update ("Capsule") image that will be used to update and
     23 # existing system flash.
     24 #
     25 ################################################################################
     26 
     27 [FD.Sec_ArmPlatform_EFI]
     28 BaseAddress   = 0xEC000000|gArmTokenSpaceGuid.PcdSecureFdBaseAddress  #The base address of the Secure FLASH Device.
     29 Size          = 0x00020000|gArmTokenSpaceGuid.PcdSecureFdSize         #The size in bytes of the Secure FLASH Device
     30 ErasePolarity = 1
     31 BlockSize     = 0x00002000
     32 NumBlocks     = 0x10
     33 
     34 ################################################################################
     35 #
     36 # Following are lists of FD Region layout which correspond to the locations of different
     37 # images within the flash device.
     38 #
     39 # Regions must be defined in ascending order and may not overlap.
     40 #
     41 # A Layout Region start with a eight digit hex offset (leading "0x" required) followed by
     42 # the pipe "|" character, followed by the size of the region, also in hex with the leading
     43 # "0x" characters. Like:
     44 # Offset|Size
     45 # PcdOffsetCName|PcdSizeCName
     46 # RegionType <FV, DATA, or FILE>
     47 #
     48 ################################################################################
     49 
     50 0x00000000|0x00020000
     51 gArmTokenSpaceGuid.PcdSecureFvBaseAddress|gArmTokenSpaceGuid.PcdSecureFvSize
     52 FV = FVMAIN_SEC
     53 
     54 
     55 [FD.ArmPlatform_EFI]
     56 BaseAddress   = 0xEC200000|gArmTokenSpaceGuid.PcdFdBaseAddress  # The base address of the Firmware in NOR Flash.
     57 Size          = 0x00200000|gArmTokenSpaceGuid.PcdFdSize         # The size in bytes of the FLASH Device
     58 ErasePolarity = 1
     59 
     60 # This one is tricky, it must be: BlockSize * NumBlocks = Size
     61 BlockSize     = 0x00001000
     62 NumBlocks     = 0x200
     63 
     64 ################################################################################
     65 #
     66 # Following are lists of FD Region layout which correspond to the locations of different
     67 # images within the flash device.
     68 #
     69 # Regions must be defined in ascending order and may not overlap.
     70 #
     71 # A Layout Region start with a eight digit hex offset (leading "0x" required) followed by
     72 # the pipe "|" character, followed by the size of the region, also in hex with the leading
     73 # "0x" characters. Like:
     74 # Offset|Size
     75 # PcdOffsetCName|PcdSizeCName
     76 # RegionType <FV, DATA, or FILE>
     77 #
     78 ################################################################################
     79 
     80 0x00000000|0x00200000
     81 gArmTokenSpaceGuid.PcdFvBaseAddress|gArmTokenSpaceGuid.PcdFvSize
     82 FV = FVMAIN_COMPACT
     83 
     84 
     85 ################################################################################
     86 #
     87 # FV Section
     88 #
     89 # [FV] section is used to define what components or modules are placed within a flash
     90 # device file.  This section also defines order the components and modules are positioned
     91 # within the image.  The [FV] section consists of define statements, set statements and
     92 # module statements.
     93 #
     94 ################################################################################
     95 
     96 [FV.FVMAIN_SEC]
     97 FvAlignment        = 8
     98 ERASE_POLARITY     = 1
     99 MEMORY_MAPPED      = TRUE
    100 STICKY_WRITE       = TRUE
    101 LOCK_CAP           = TRUE
    102 LOCK_STATUS        = TRUE
    103 WRITE_DISABLED_CAP = TRUE
    104 WRITE_ENABLED_CAP  = TRUE
    105 WRITE_STATUS       = TRUE
    106 WRITE_LOCK_CAP     = TRUE
    107 WRITE_LOCK_STATUS  = TRUE
    108 READ_DISABLED_CAP  = TRUE
    109 READ_ENABLED_CAP   = TRUE
    110 READ_STATUS        = TRUE
    111 READ_LOCK_CAP      = TRUE
    112 READ_LOCK_STATUS   = TRUE
    113 
    114   INF ArmPlatformPkg/Sec/Sec.inf
    115 
    116 
    117 [FV.FvMain]
    118 BlockSize          = 0x40
    119 NumBlocks          = 0         # This FV gets compressed so make it just big enough
    120 FvAlignment        = 8         # FV alignment and FV attributes setting.
    121 ERASE_POLARITY     = 1
    122 MEMORY_MAPPED      = TRUE
    123 STICKY_WRITE       = TRUE
    124 LOCK_CAP           = TRUE
    125 LOCK_STATUS        = TRUE
    126 WRITE_DISABLED_CAP = TRUE
    127 WRITE_ENABLED_CAP  = TRUE
    128 WRITE_STATUS       = TRUE
    129 WRITE_LOCK_CAP     = TRUE
    130 WRITE_LOCK_STATUS  = TRUE
    131 READ_DISABLED_CAP  = TRUE
    132 READ_ENABLED_CAP   = TRUE
    133 READ_STATUS        = TRUE
    134 READ_LOCK_CAP      = TRUE
    135 READ_LOCK_STATUS   = TRUE
    136 FvNameGuid         = 8fa66cd0-f773-4f26-8f9f-5e54d0804c68
    137 
    138   INF MdeModulePkg/Core/Dxe/DxeMain.inf
    139 
    140   #
    141   # PI DXE Drivers producing Architectural Protocols (EFI Services)
    142   #
    143   INF ArmPkg/Drivers/CpuDxe/CpuDxe.inf
    144   INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
    145   INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
    146   INF MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf
    147   INF MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
    148   INF MdeModulePkg/Universal/Variable/EmuRuntimeDxe/EmuVariableRuntimeDxe.inf
    149   INF EmbeddedPkg/EmbeddedMonotonicCounter/EmbeddedMonotonicCounter.inf
    150   INF EmbeddedPkg/ResetRuntimeDxe/ResetRuntimeDxe.inf
    151   INF EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf
    152   INF EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf
    153 
    154   # Simple TextIn/TextOut for UEFI Terminal
    155   INF EmbeddedPkg/SimpleTextInOutSerial/SimpleTextInOutSerial.inf
    156 
    157   #
    158   # Semi-hosting filesystem (Required the Hardware Debugger to be connected)
    159   #
    160   INF ArmPkg/Filesystem/SemihostFs/SemihostFs.inf
    161 
    162   #
    163   # FAT filesystem + GPT/MBR partitioning
    164   #
    165   INF MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
    166   INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
    167   INF FatBinPkg/EnhancedFatDxe/Fat.inf
    168   INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
    169 
    170   #
    171   # UEFI application (Shell Embedded Boot Loader)
    172   #
    173   INF EmbeddedPkg/Ebl/Ebl.inf
    174 
    175   #
    176   # Bds
    177   #
    178   INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
    179   INF ArmPlatformPkg/Bds/Bds.inf
    180 
    181   # Legacy Linux Loader
    182   INF ArmPkg/Application/LinuxLoader/LinuxLoader.inf
    183 
    184 [FV.FVMAIN_COMPACT]
    185 FvAlignment        = 8
    186 ERASE_POLARITY     = 1
    187 MEMORY_MAPPED      = TRUE
    188 STICKY_WRITE       = TRUE
    189 LOCK_CAP           = TRUE
    190 LOCK_STATUS        = TRUE
    191 WRITE_DISABLED_CAP = TRUE
    192 WRITE_ENABLED_CAP  = TRUE
    193 WRITE_STATUS       = TRUE
    194 WRITE_LOCK_CAP     = TRUE
    195 WRITE_LOCK_STATUS  = TRUE
    196 READ_DISABLED_CAP  = TRUE
    197 READ_ENABLED_CAP   = TRUE
    198 READ_STATUS        = TRUE
    199 READ_LOCK_CAP      = TRUE
    200 READ_LOCK_STATUS   = TRUE
    201 
    202   INF ArmPlatformPkg/PrePeiCore/PrePeiCoreUniCore.inf
    203   INF MdeModulePkg/Core/Pei/PeiMain.inf
    204   INF ArmPlatformPkg/PlatformPei/PlatformPeim.inf
    205   INF ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.inf
    206   INF ArmPkg/Drivers/CpuPei/CpuPei.inf
    207   INF MdeModulePkg/Universal/PCD/Pei/Pcd.inf
    208   INF IntelFrameworkModulePkg/Universal/StatusCode/Pei/StatusCodePei.inf
    209   INF MdeModulePkg/Universal/Variable/Pei/VariablePei.inf
    210   INF MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf
    211 
    212   FILE FV_IMAGE = 9E21FD93-9C72-4c15-8C4B-E77F1DB2D792 {
    213     SECTION GUIDED EE4E5898-3914-4259-9D6E-DC7BD79403CF PROCESSING_REQUIRED = TRUE {
    214       SECTION FV_IMAGE = FVMAIN
    215     }
    216   }
    217 
    218 
    219 ################################################################################
    220 #
    221 # Rules are use with the [FV] section's module INF type to define
    222 # how an FFS file is created for a given INF file. The following Rule are the default
    223 # rules for the different module type. User can add the customized rules to define the
    224 # content of the FFS file.
    225 #
    226 ################################################################################
    227 
    228 
    229 ############################################################################
    230 # Example of a DXE_DRIVER FFS file with a Checksum encapsulation section   #
    231 ############################################################################
    232 #
    233 #[Rule.Common.DXE_DRIVER]
    234 #  FILE DRIVER = $(NAMED_GUID) {
    235 #    DXE_DEPEX    DXE_DEPEX               Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
    236 #    COMPRESS PI_STD {
    237 #      GUIDED {
    238 #        PE32     PE32                    $(INF_OUTPUT)/$(MODULE_NAME).efi
    239 #        UI       STRING="$(MODULE_NAME)" Optional
    240 #        VERSION  STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
    241 #      }
    242 #    }
    243 #  }
    244 #
    245 ############################################################################
    246 
    247 [Rule.ARM.SEC]
    248   FILE SEC = $(NAMED_GUID) RELOCS_STRIPPED {
    249     TE  TE    Align = 32                $(INF_OUTPUT)/$(MODULE_NAME).efi
    250   }
    251 
    252 # The AArch64 Vector Table requires a 2K alignment that is not supported by the FDF specification.
    253 # It is the reason 4K is used instead of 2K for the module alignment.
    254 [Rule.AARCH64.SEC]
    255   FILE SEC = $(NAMED_GUID) RELOCS_STRIPPED {
    256     TE  TE    Align = 4K                $(INF_OUTPUT)/$(MODULE_NAME).efi
    257   }
    258 
    259 [Rule.Common.PEI_CORE]
    260   FILE PEI_CORE = $(NAMED_GUID) {
    261     TE     TE                           $(INF_OUTPUT)/$(MODULE_NAME).efi
    262     UI     STRING ="$(MODULE_NAME)" Optional
    263   }
    264 
    265 [Rule.Common.PEIM]
    266   FILE PEIM = $(NAMED_GUID) {
    267      PEI_DEPEX PEI_DEPEX Optional       $(INF_OUTPUT)/$(MODULE_NAME).depex
    268      TE       TE                        $(INF_OUTPUT)/$(MODULE_NAME).efi
    269      UI       STRING="$(MODULE_NAME)" Optional
    270   }
    271 
    272 [Rule.Common.PEIM.TIANOCOMPRESSED]
    273   FILE PEIM = $(NAMED_GUID) DEBUG_MYTOOLS_IA32 {
    274     PEI_DEPEX PEI_DEPEX Optional        $(INF_OUTPUT)/$(MODULE_NAME).depex
    275     GUIDED A31280AD-481E-41B6-95E8-127F4C984779 PROCESSING_REQUIRED = TRUE {
    276       PE32      PE32                    $(INF_OUTPUT)/$(MODULE_NAME).efi
    277       UI        STRING="$(MODULE_NAME)" Optional
    278     }
    279   }
    280 
    281 [Rule.Common.DXE_CORE]
    282   FILE DXE_CORE = $(NAMED_GUID) {
    283     PE32     PE32                       $(INF_OUTPUT)/$(MODULE_NAME).efi
    284     UI       STRING="$(MODULE_NAME)" Optional
    285   }
    286 
    287 [Rule.Common.UEFI_DRIVER]
    288   FILE DRIVER = $(NAMED_GUID) {
    289     DXE_DEPEX    DXE_DEPEX              Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
    290     PE32         PE32                   $(INF_OUTPUT)/$(MODULE_NAME).efi
    291     UI           STRING="$(MODULE_NAME)" Optional
    292   }
    293 
    294 [Rule.Common.UEFI_DRIVER.BINARY]
    295   FILE DRIVER = $(NAMED_GUID) {
    296     DXE_DEPEX DXE_DEPEX Optional      |.depex
    297     PE32      PE32                    |.efi
    298     UI        STRING="$(MODULE_NAME)" Optional
    299     VERSION   STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
    300   }
    301 
    302 [Rule.Common.DXE_DRIVER]
    303   FILE DRIVER = $(NAMED_GUID) {
    304     DXE_DEPEX    DXE_DEPEX              Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
    305     PE32         PE32                   $(INF_OUTPUT)/$(MODULE_NAME).efi
    306     UI           STRING="$(MODULE_NAME)" Optional
    307   }
    308 
    309 [Rule.Common.DXE_RUNTIME_DRIVER]
    310   FILE DRIVER = $(NAMED_GUID) {
    311     DXE_DEPEX    DXE_DEPEX              Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
    312     PE32         PE32                   $(INF_OUTPUT)/$(MODULE_NAME).efi
    313     UI           STRING="$(MODULE_NAME)" Optional
    314   }
    315 
    316 [Rule.Common.UEFI_APPLICATION]
    317   FILE APPLICATION = $(NAMED_GUID) {
    318     UI     STRING ="$(MODULE_NAME)" Optional
    319     PE32   PE32                         $(INF_OUTPUT)/$(MODULE_NAME).efi
    320   }
    321