[edk2,edk2-platforms,v2,6/6] Platform/ARM/Sgi: add initial support for ARM SGI platform

Message ID 1523558863-5427-7-git-send-email-thomas.abraham@arm.com
State New
Headers show
Series
  • Untitled series #10616
Related show

Commit Message

Thomas Abraham April 12, 2018, 6:47 p.m.
From: Vishwanatha HG <vishwanatha.hg@arm.com>


Add the initial support for ARM's System Guidance for Infrastructure
(SGI) platforms. SGI-575 is the supported platform in this initial
implementation and can be extented to include support for upcoming
SGI platforms as well.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by:  Vishwanatha HG <vishwanatha.hg@arm.com>

Signed-off-by: Thomas Abraham <thomas.abraham@arm.com>

---
 Platform/ARM/SgiPkg/SgiPlatform.dec |  36 ++++
 Platform/ARM/SgiPkg/SgiPlatform.dsc | 243 +++++++++++++++++++++++++++
 Platform/ARM/SgiPkg/SgiPlatform.fdf | 320 ++++++++++++++++++++++++++++++++++++
 3 files changed, 599 insertions(+)
 create mode 100644 Platform/ARM/SgiPkg/SgiPlatform.dec
 create mode 100644 Platform/ARM/SgiPkg/SgiPlatform.dsc
 create mode 100644 Platform/ARM/SgiPkg/SgiPlatform.fdf

-- 
2.7.4

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

Comments

Ard Biesheuvel April 16, 2018, 6:35 a.m. | #1
On 12 April 2018 at 20:47, Thomas Abraham <thomas.abraham@arm.com> wrote:
> From: Vishwanatha HG <vishwanatha.hg@arm.com>

>

> Add the initial support for ARM's System Guidance for Infrastructure

> (SGI) platforms. SGI-575 is the supported platform in this initial

> implementation and can be extented to include support for upcoming

> SGI platforms as well.

>

> Contributed-under: TianoCore Contribution Agreement 1.1

> Signed-off-by:  Vishwanatha HG <vishwanatha.hg@arm.com>

> Signed-off-by: Thomas Abraham <thomas.abraham@arm.com>

> ---

>  Platform/ARM/SgiPkg/SgiPlatform.dec |  36 ++++

>  Platform/ARM/SgiPkg/SgiPlatform.dsc | 243 +++++++++++++++++++++++++++

>  Platform/ARM/SgiPkg/SgiPlatform.fdf | 320 ++++++++++++++++++++++++++++++++++++

>  3 files changed, 599 insertions(+)

>  create mode 100644 Platform/ARM/SgiPkg/SgiPlatform.dec

>  create mode 100644 Platform/ARM/SgiPkg/SgiPlatform.dsc

>  create mode 100644 Platform/ARM/SgiPkg/SgiPlatform.fdf

>

> diff --git a/Platform/ARM/SgiPkg/SgiPlatform.dec b/Platform/ARM/SgiPkg/SgiPlatform.dec

> new file mode 100644

> index 0000000..b446aa6

> --- /dev/null

> +++ b/Platform/ARM/SgiPkg/SgiPlatform.dec

> @@ -0,0 +1,36 @@

> +#

> +#  Copyright (c) 2018, ARM Limited. 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]

> +  DEC_SPECIFICATION              = 0x00010005


0x0001001A

> +  PACKAGE_NAME                   = SgiPkg

> +  PACKAGE_GUID                   = e6e0f26c-0df9-4f6c-a382-37ded896c6e9

> +  PACKAGE_VERSION                = 0.1

> +

> +################################################################################

> +#

> +# Include Section - list of Include Paths that are provided by this package.

> +#                   Comments are used for Keywords and Module Types.

> +#

> +# Supported Module Types:

> +#  BASE SEC PEI_CORE PEIM DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SMM_DRIVER DXE_SAL_DRIVER UEFI_DRIVER UEFI_APPLICATION

> +#

> +################################################################################

> +[Includes.common]

> +  Include                        # Root include for the package

> +

> +[Guids.common]

> +  gArmSgiTokenSpaceGuid    =  { 0x577d6941, 0xaea1, 0x40b4, { 0x90, 0x93, 0x2a, 0x86, 0x61, 0x72, 0x5a, 0x57 } }

> +

> +[PcdsFeatureFlag.common]

> +  # Set this PCD to TRUE to enable virtio support.

> +  gArmSgiTokenSpaceGuid.PcdVirtioSupported|TRUE|BOOLEAN|0x00000001

> diff --git a/Platform/ARM/SgiPkg/SgiPlatform.dsc b/Platform/ARM/SgiPkg/SgiPlatform.dsc

> new file mode 100644

> index 0000000..4f01cb0

> --- /dev/null

> +++ b/Platform/ARM/SgiPkg/SgiPlatform.dsc

> @@ -0,0 +1,243 @@

> +#

> +#  Copyright (c) 2018, ARM Limited. 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 Section - statements that will be processed to create a Makefile.

> +#

> +################################################################################

> +[Defines]

> +  PLATFORM_NAME                  = arm_sgi_platform


Please use camel case here like we do everywhere else

> +  PLATFORM_GUID                  = 3a6b2eae-0275-4b6e-a5d1-bd2ba1ce1fae

> +  PLATFORM_VERSION               = 0.1

> +  DSC_SPECIFICATION              = 0x00010005


0x0001001B

> +  OUTPUT_DIRECTORY               = Build/$(PLATFORM_NAME)

> +  SUPPORTED_ARCHITECTURES        = AARCH64|ARM

> +  BUILD_TARGETS                  = DEBUG|RELEASE


Please add NOOPT here as well

> +  SKUID_IDENTIFIER               = DEFAULT

> +  FLASH_DEFINITION               = edk2-platforms/Platform/ARM/SgiPkg/SgiPlatform.fdf


Please drop the edk2-platforms prefix

> +

> +[LibraryClasses.common]

> +  ArmPlatformLib|edk2-platforms/Platform/ARM/SgiPkg/Library/PlatformLib/PlatformLib.inf


and here

> +  ArmHvcLib|ArmPkg/Library/ArmHvcLib/ArmHvcLib.inf

> +

> +!include edk2-platforms/Platform/ARM/VExpressPkg/ArmVExpress.dsc.inc


and here

> +

> +  # ARM Base Library

> +  ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf

> +  ArmMmuLib|ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf

> +  ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf

> +

> +  BasePathLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf

> +

> +  ArmPlatformSysConfigLib|Platform/ARM/VExpressPkg/Library/ArmVExpressSysConfigLib/ArmVExpressSysConfigLib.inf

> +  NorFlashPlatformLib|edk2-platforms/Platform/ARM/SgiPkg/Library/NorFlashLib/NorFlashLib.inf


and here

> +  EfiResetSystemLib|ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.inf

> +

> +  TimerLib|ArmPkg/Library/ArmArchTimerLib/ArmArchTimerLib.inf

> +

> +  # Virtio Support

> +  VirtioLib|OvmfPkg/Library/VirtioLib/VirtioLib.inf

> +  VirtioMmioDeviceLib|OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceLib.inf

> +  FileExplorerLib|MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf

> +

> +[LibraryClasses.common.SEC]

> +  PrePiLib|EmbeddedPkg/Library/PrePiLib/PrePiLib.inf

> +  ExtractGuidedSectionLib|EmbeddedPkg/Library/PrePiExtractGuidedSectionLib/PrePiExtractGuidedSectionLib.inf

> +  LzmaDecompressLib|IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf

> +  MemoryAllocationLib|EmbeddedPkg/Library/PrePiMemoryAllocationLib/PrePiMemoryAllocationLib.inf

> +  HobLib|EmbeddedPkg/Library/PrePiHobLib/PrePiHobLib.inf

> +  PrePiHobListPointerLib|ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf

> +  PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf

> +  PlatformPeiLib|ArmPlatformPkg/PlatformPei/PlatformPeiLib.inf

> +  MemoryInitPeiLib|ArmPlatformPkg/MemoryInitPei/MemoryInitPeiLib.inf

> +

> +[LibraryClasses.common.UEFI_DRIVER, LibraryClasses.common.UEFI_APPLICATION, LibraryClasses.common.DXE_RUNTIME_DRIVER, LibraryClasses.common.DXE_DRIVER]

> +  PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf

> +

> +[BuildOptions]

> +  *_*_*_PLATFORM_FLAGS = -I$(WORKSPACE)/ArmPlatformPkg/ArmVExpressPkg/Include -I$(WORKSPACE)/edk2-platforms/Platform/ARM/SgiPkg/Include

> +


Do we really need these? Modules should declare their package
dependencies, and additional includes like this one should be avoided
if we can

> +################################################################################

> +#

> +# Pcd Section - list of all EDK II PCD Entries defined by this Platform

> +#

> +################################################################################

> +

> +[PcdsFeatureFlag.common]

> +  ## If TRUE, Graphics Output Protocol will be installed on virtual handle created by ConsplitterDxe.

> +  #  It could be set FALSE to save size.

> +  gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|FALSE

> +  gEfiMdeModulePkgTokenSpaceGuid.PcdTurnOffUsbLegacySupport|TRUE

> +  gArmSgiTokenSpaceGuid.PcdVirtioSupported|TRUE

> +

> +[PcdsFixedAtBuild.common]

> +  #

> +  # NV Storage PCDs. Use base of 0x08000000 for NOR0, 0xC0000000 for NOR 1

> +  #

> +  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase|0x0BFC0000

> +  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize|0x00010000

> +  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|0x0BFD0000

> +  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize|0x00010000

> +  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|0x0BFE0000

> +  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize|0x00010000

> +

> +  # System Memory (1GB - 16MB of Trusted DRAM at the top of the 32bit address space)

> +  gArmTokenSpaceGuid.PcdSystemMemoryBase|0x80000000

> +  gArmTokenSpaceGuid.PcdSystemMemorySize|0x7F000000

> +

> +  gArmTokenSpaceGuid.PcdGicDistributorBase|0x30000000

> +  gArmTokenSpaceGuid.PcdGicRedistributorsBase|0x300C0000

> +

> +  gArmTokenSpaceGuid.PcdVFPEnabled|1

> +

> +  #

> +  # ARM PrimeCell

> +  #

> +

> +  ## PL011 - Serial Terminal

> +  gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase|0x7FF80000

> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate|115200

> +  gArmPlatformTokenSpaceGuid.PL011UartInteger|4

> +  gArmPlatformTokenSpaceGuid.PL011UartFractional|0

> +

> +  ## PL011 - Serial Debug UART

> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgRegisterBase|0x7FF80000

> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartClkInHz|7372800

> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartBaudRate|115200

> +  gArmPlatformTokenSpaceGuid.PL011UartInterrupt|147

> +

> +  ## PL031 RealTimeClock

> +  gArmPlatformTokenSpaceGuid.PcdPL031RtcBase|0x1C170000

> +

> +!ifdef EDK2_ENABLE_SMSC_91X

> +  # Ethernet (SMSC 91C111)

> +  gEmbeddedTokenSpaceGuid.PcdLan9118DxeBaseAddress|0x18000000

> +!endif

> +

> +  # List of Device Paths that support BootMonFs

> +  gArmBootMonFsTokenSpaceGuid.PcdBootMonFsSupportedDevicePaths|L"VenHw(E7223039-5836-41E1-B542-D7EC736C5E59)"

> +

> +  #

> +  # ARM OS Loader

> +  #

> +  gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|3

> +

> +  #

> +  # ARM Architectural Timer Frequency

> +  #

> +  gArmTokenSpaceGuid.PcdArmArchTimerFreqInHz|100000000

> +  gEmbeddedTokenSpaceGuid.PcdMetronomeTickPeriod|1000

> +  gEmbeddedTokenSpaceGuid.PcdTimerPeriod|1000

> +

> +  #

> +  # ARM Cores and Clusters

> +  # Set initial minimum supported value needed for a initial initialization

> +  #

> +  gArmPlatformTokenSpaceGuid.PcdCoreCount|2

> +  gArmPlatformTokenSpaceGuid.PcdClusterCount|1

> +

> +[PcdsPatchableInModule]

> +  # Console Resolution (Full HD)

> +  gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution|1920

> +  gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution|1080

> +

> +

> +################################################################################

> +#

> +# Components Section - list of all EDK II Modules needed by this Platform

> +#

> +################################################################################

> +[Components.common]

> +  #

> +  # PEI Phase modules

> +  #

> +  ArmPlatformPkg/PrePi/PeiMPCore.inf {

> +    <LibraryClasses>

> +    DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf

> +  }

> +

> +  #

> +  # DXE

> +  #

> +  MdeModulePkg/Core/Dxe/DxeMain.inf {

> +    <LibraryClasses>

> +      PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf

> +      NULL|MdeModulePkg/Library/DxeCrc32GuidedSectionExtractLib/DxeCrc32GuidedSectionExtractLib.inf

> +  }

> +

> +  #

> +  # Architectural Protocols

> +  #

> +  ArmPkg/Drivers/CpuDxe/CpuDxe.inf

> +  MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf

> +  MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf

> +  MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf

> +  MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf

> +  EmbeddedPkg/ResetRuntimeDxe/ResetRuntimeDxe.inf

> +  EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf

> +  EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf

> +

> +  MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf

> +  MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf

> +  MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf

> +  MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf

> +  MdeModulePkg/Universal/SerialDxe/SerialDxe.inf

> +  MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf

> +  MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf

> +

> +  #

> +  # ACPI Support

> +  #

> +  MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf

> +  MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf

> +  edk2-platforms/Platform/ARM/SgiPkg/AcpiTables/Sgi575/AcpiTables.inf

> +  MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf

> +

> +  ArmPkg/Drivers/ArmGic/ArmGicDxe.inf

> +  ArmPkg/Drivers/TimerDxe/TimerDxe.inf

> +  ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdogDxe.inf

> +

> +  ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe.inf

> +  OvmfPkg/VirtioBlkDxe/VirtioBlk.inf

> +

> +  #

> +  # Semi-hosting filesystem

> +  #

> +  ArmPkg/Filesystem/SemihostFs/SemihostFs.inf

> +

> +  #

> +  # platform driver

> +  #

> +  edk2-platforms/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf

> +

> +  #

> +  # FAT filesystem + GPT/MBR partitioning

> +  #

> +  MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf

> +  MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf

> +  MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf

> +

> +  #

> +  # Bds

> +  #

> +  MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf

> +  MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf

> +  MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf

> +  MdeModulePkg/Universal/BdsDxe/BdsDxe.inf

> +  MdeModulePkg/Application/UiApp/UiApp.inf {

> +    <LibraryClasses>

> +      NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf

> +      NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf

> +      NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf

> +      PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf

> +  }

> diff --git a/Platform/ARM/SgiPkg/SgiPlatform.fdf b/Platform/ARM/SgiPkg/SgiPlatform.fdf

> new file mode 100644

> index 0000000..05a6582

> --- /dev/null

> +++ b/Platform/ARM/SgiPkg/SgiPlatform.fdf

> @@ -0,0 +1,320 @@

> +#

> +#  Copyright (c) 2018, ARM Limited. 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.

> +#

> +

> +################################################################################

> +#

> +# FD Section

> +# The [FD] Section is made up of the definition statements and a

> +# description of what goes into  the Flash Device Image.  Each FD section

> +# defines one flash "device" image.  A flash device image may be one of

> +# the following: Removable media bootable image (like a boot floppy

> +# image,) an Option ROM image (that would be "flashed" into an add-in

> +# card,) a System "Flash"  image (that would be burned into a system's

> +# flash) or an Update ("Capsule") image that will be used to update and

> +# existing system flash.

> +#

> +################################################################################

> +

> +[FD.BL33_AP_UEFI]

> +BaseAddress   = 0xE0000000|gArmTokenSpaceGuid.PcdFdBaseAddress  # The base address of the Firmware in NOR Flash.

> +Size          = 0x000F0000|gArmTokenSpaceGuid.PcdFdSize         # The size in bytes of the FLASH Device

> +ErasePolarity = 1

> +

> +# This one is tricky, it must be: BlockSize * NumBlocks = Size

> +BlockSize     = 0x00001000

> +NumBlocks     = 0xF0

> +

> +################################################################################

> +#

> +# Following are lists of FD Region layout which correspond to the locations of different

> +# images within the flash device.

> +#

> +# Regions must be defined in ascending order and may not overlap.

> +#

> +# A Layout Region start with a eight digit hex offset (leading "0x" required) followed by

> +# the pipe "|" character, followed by the size of the region, also in hex with the leading

> +# "0x" characters. Like:

> +# Offset|Size

> +# PcdOffsetCName|PcdSizeCName

> +# RegionType <FV, DATA, or FILE>

> +#

> +################################################################################

> +

> +0x00000000|0x000F0000

> +gArmTokenSpaceGuid.PcdFvBaseAddress|gArmTokenSpaceGuid.PcdFvSize

> +FV = FVMAIN_COMPACT

> +

> +################################################################################

> +#

> +# FV Section

> +#

> +# [FV] section is used to define what components or modules are placed within a flash

> +# device file.  This section also defines order the components and modules are positioned

> +# within the image.  The [FV] section consists of define statements, set statements and

> +# module statements.

> +#

> +################################################################################

> +

> +[FV.FvMain]

> +BlockSize          = 0x40

> +NumBlocks          = 0         # This FV gets compressed so make it just big enough

> +FvAlignment        = 8         # FV alignment and FV attributes setting.

> +ERASE_POLARITY     = 1

> +MEMORY_MAPPED      = TRUE

> +STICKY_WRITE       = TRUE

> +LOCK_CAP           = TRUE

> +LOCK_STATUS        = TRUE

> +WRITE_DISABLED_CAP = TRUE

> +WRITE_ENABLED_CAP  = TRUE

> +WRITE_STATUS       = TRUE

> +WRITE_LOCK_CAP     = TRUE

> +WRITE_LOCK_STATUS  = TRUE

> +READ_DISABLED_CAP  = TRUE

> +READ_ENABLED_CAP   = TRUE

> +READ_STATUS        = TRUE

> +READ_LOCK_CAP      = TRUE

> +READ_LOCK_STATUS   = TRUE

> +

> +  INF MdeModulePkg/Core/Dxe/DxeMain.inf

> +

> +  #

> +  # PI DXE Drivers producing Architectural Protocols (EFI Services)

> +  #

> +  INF ArmPkg/Drivers/CpuDxe/CpuDxe.inf

> +  INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf

> +  INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf

> +  INF MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf

> +  INF MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf

> +  INF EmbeddedPkg/ResetRuntimeDxe/ResetRuntimeDxe.inf

> +  INF EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf

> +  INF EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf

> +  INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf

> +  INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf

> +

> +  #

> +  # ACPI Support

> +  #

> +  INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf

> +  INF RuleOverride=ACPITABLE edk2-platforms/Platform/ARM/SgiPkg/AcpiTables/Sgi575/AcpiTables.inf

> +  INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf

> +

> +  #

> +  # Multiple Console IO support

> +  #

> +  INF MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf

> +  INF MdeModulePkg/Universal/SerialDxe/SerialDxe.inf

> +

> +  INF ArmPkg/Drivers/ArmGic/ArmGicDxe.inf

> +  INF ArmPkg/Drivers/TimerDxe/TimerDxe.inf

> +  INF ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdogDxe.inf

> +

> +  # NOR Flash driver

> +  INF ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe.inf

> +  INF OvmfPkg/VirtioBlkDxe/VirtioBlk.inf

> +

> +  # Semi-hosting filesystem

> +  INF ArmPkg/Filesystem/SemihostFs/SemihostFs.inf

> +  # Versatile Express FileSystem

> +  INF Platform/ARM/Drivers/BootMonFs/BootMonFs.inf

> +

> +  INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf

> +

> +  #

> +  # FAT filesystem + GPT/MBR partitioning

> +  #

> +  INF MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf

> +  INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf

> +  INF FatBinPkg/EnhancedFatDxe/Fat.inf

> +  INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf

> +

> +  # FV FileSystem

> +  INF MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystemDxe.inf

> +

> +  #

> +  # Networking stack

> +  #

> +  INF MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf

> +  INF MdeModulePkg/Universal/Network/ArpDxe/ArpDxe.inf

> +  INF MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Dxe.inf

> +  INF MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Dxe.inf

> +  INF MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf

> +  INF MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigDxe.inf

> +  INF MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Dxe.inf

> +  INF MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Dxe.inf

> +  INF MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf

> +  INF MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf

> +  INF MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf

> +

> +!ifdef EDK2_ENABLE_SMSC_91X

> +  INF EmbeddedPkg/Drivers/Lan91xDxe/Lan91xDxe.inf

> +!endif

> +

> +  #

> +  # UEFI applications

> +  #

> +  INF  ShellPkg/Application/Shell/Shell.inf

> +

> +  #

> +  # platform driver

> +  #

> +  INF edk2-platforms/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf

> +

> +  #

> +  # Bds

> +  #

> +  INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf

> +  INF MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf

> +  INF MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf

> +  INF MdeModulePkg/Universal/BdsDxe/BdsDxe.inf

> +  INF MdeModulePkg/Application/UiApp/UiApp.inf

> +

> +[FV.FVMAIN_COMPACT]

> +FvAlignment        = 8

> +ERASE_POLARITY     = 1

> +MEMORY_MAPPED      = TRUE

> +STICKY_WRITE       = TRUE

> +LOCK_CAP           = TRUE

> +LOCK_STATUS        = TRUE

> +WRITE_DISABLED_CAP = TRUE

> +WRITE_ENABLED_CAP  = TRUE

> +WRITE_STATUS       = TRUE

> +WRITE_LOCK_CAP     = TRUE

> +WRITE_LOCK_STATUS  = TRUE

> +READ_DISABLED_CAP  = TRUE

> +READ_ENABLED_CAP   = TRUE

> +READ_STATUS        = TRUE

> +READ_LOCK_CAP      = TRUE

> +READ_LOCK_STATUS   = TRUE

> +

> +  INF ArmPlatformPkg/PrePi/PeiMPCore.inf

> +

> +  FILE FV_IMAGE = 9E21FD93-9C72-4c15-8C4B-E77F1DB2D792 {

> +    SECTION GUIDED EE4E5898-3914-4259-9D6E-DC7BD79403CF PROCESSING_REQUIRED = TRUE {

> +      SECTION FV_IMAGE = FVMAIN

> +    }

> +  }

> +

> +

> +################################################################################

> +#

> +# Rules are use with the [FV] section's module INF type to define

> +# how an FFS file is created for a given INF file. The following Rule are the default

> +# rules for the different module type. User can add the customized rules to define the

> +# content of the FFS file.

> +#

> +################################################################################

> +

> +

> +############################################################################

> +# Example of a DXE_DRIVER FFS file with a Checksum encapsulation section   #

> +############################################################################

> +#

> +#[Rule.Common.DXE_DRIVER]

> +#  FILE DRIVER = $(NAMED_GUID) {

> +#    DXE_DEPEX    DXE_DEPEX               Optional $(INF_OUTPUT)/$(MODULE_NAME).depex

> +#    COMPRESS PI_STD {

> +#      GUIDED {

> +#        PE32     PE32                    $(INF_OUTPUT)/$(MODULE_NAME).efi

> +#        UI       STRING="$(MODULE_NAME)" Optional

> +#        VERSION  STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)

> +#      }

> +#    }

> +#  }

> +#

> +############################################################################

> +

> +#

> +# These SEC rules are used for ArmPlatformPkg/PrePi module.

> +# ArmPlatformPkg/PrePi is declared as a SEC module to make GenFv patch the

> +# UEFI Firmware to jump to ArmPlatformPkg/PrePi entrypoint

> +#

> +

> +[Rule.Common.SEC]

> +  FILE SEC = $(NAMED_GUID) RELOCS_STRIPPED FIXED {

> +    TE  TE Align = Auto                 $(INF_OUTPUT)/$(MODULE_NAME).efi

> +  }

> +

> +[Rule.Common.PEI_CORE]

> +  FILE PEI_CORE = $(NAMED_GUID) {

> +    TE     TE                           $(INF_OUTPUT)/$(MODULE_NAME).efi

> +    UI     STRING ="$(MODULE_NAME)" Optional

> +  }

> +

> +[Rule.Common.PEIM]

> +  FILE PEIM = $(NAMED_GUID) {

> +     PEI_DEPEX PEI_DEPEX Optional       $(INF_OUTPUT)/$(MODULE_NAME).depex

> +     TE       TE                        $(INF_OUTPUT)/$(MODULE_NAME).efi

> +     UI       STRING="$(MODULE_NAME)" Optional

> +  }

> +

> +[Rule.Common.PEIM.TIANOCOMPRESSED]

> +  FILE PEIM = $(NAMED_GUID) DEBUG_MYTOOLS_IA32 {

> +    PEI_DEPEX PEI_DEPEX Optional        $(INF_OUTPUT)/$(MODULE_NAME).depex

> +    GUIDED A31280AD-481E-41B6-95E8-127F4C984779 PROCESSING_REQUIRED = TRUE {

> +      PE32      PE32                    $(INF_OUTPUT)/$(MODULE_NAME).efi

> +      UI        STRING="$(MODULE_NAME)" Optional

> +    }

> +  }

> +

> +[Rule.Common.DXE_CORE]

> +  FILE DXE_CORE = $(NAMED_GUID) {

> +    PE32     PE32                       $(INF_OUTPUT)/$(MODULE_NAME).efi

> +    UI       STRING="$(MODULE_NAME)" Optional

> +  }

> +

> +[Rule.Common.UEFI_DRIVER]

> +  FILE DRIVER = $(NAMED_GUID) {

> +    DXE_DEPEX    DXE_DEPEX              Optional $(INF_OUTPUT)/$(MODULE_NAME).depex

> +    PE32         PE32                   $(INF_OUTPUT)/$(MODULE_NAME).efi

> +    UI           STRING="$(MODULE_NAME)" Optional

> +  }

> +

> +[Rule.Common.DXE_DRIVER]

> +  FILE DRIVER = $(NAMED_GUID) {

> +    DXE_DEPEX    DXE_DEPEX              Optional $(INF_OUTPUT)/$(MODULE_NAME).depex

> +    PE32         PE32                   $(INF_OUTPUT)/$(MODULE_NAME).efi

> +    UI           STRING="$(MODULE_NAME)" Optional

> +  }

> +

> +[Rule.Common.DXE_RUNTIME_DRIVER]

> +  FILE DRIVER = $(NAMED_GUID) {

> +    DXE_DEPEX    DXE_DEPEX              Optional $(INF_OUTPUT)/$(MODULE_NAME).depex

> +    PE32         PE32                   $(INF_OUTPUT)/$(MODULE_NAME).efi

> +    UI           STRING="$(MODULE_NAME)" Optional

> +  }

> +

> +[Rule.Common.UEFI_APPLICATION]

> +  FILE APPLICATION = $(NAMED_GUID) {

> +    UI     STRING ="$(MODULE_NAME)" Optional

> +    PE32   PE32                         $(INF_OUTPUT)/$(MODULE_NAME).efi

> +  }

> +

> +[Rule.Common.UEFI_DRIVER.BINARY]

> +  FILE DRIVER = $(NAMED_GUID) {

> +    DXE_DEPEX DXE_DEPEX Optional      |.depex

> +    PE32      PE32                    |.efi

> +    UI        STRING="$(MODULE_NAME)" Optional

> +    VERSION   STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)

> +  }

> +

> +[Rule.Common.UEFI_APPLICATION.BINARY]

> +  FILE APPLICATION = $(NAMED_GUID) {

> +    PE32      PE32                    |.efi

> +    UI        STRING="$(MODULE_NAME)" Optional

> +    VERSION   STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)

> +  }

> +

> +[Rule.Common.USER_DEFINED.ACPITABLE]

> +  FILE FREEFORM = $(NAMED_GUID) {

> +    RAW ACPI               |.acpi

> +    RAW ASL                |.aml

> +  }

> --

> 2.7.4

>

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Ard Biesheuvel April 16, 2018, 10:44 a.m. | #2
On 12 April 2018 at 20:47, Thomas Abraham <thomas.abraham@arm.com> wrote:
> From: Vishwanatha HG <vishwanatha.hg@arm.com>

>

> Add the initial support for ARM's System Guidance for Infrastructure

> (SGI) platforms. SGI-575 is the supported platform in this initial

> implementation and can be extented to include support for upcoming

> SGI platforms as well.

>

> Contributed-under: TianoCore Contribution Agreement 1.1

> Signed-off-by:  Vishwanatha HG <vishwanatha.hg@arm.com>

> Signed-off-by: Thomas Abraham <thomas.abraham@arm.com>

> ---

>  Platform/ARM/SgiPkg/SgiPlatform.dec |  36 ++++

>  Platform/ARM/SgiPkg/SgiPlatform.dsc | 243 +++++++++++++++++++++++++++

>  Platform/ARM/SgiPkg/SgiPlatform.fdf | 320 ++++++++++++++++++++++++++++++++++++

>  3 files changed, 599 insertions(+)

>  create mode 100644 Platform/ARM/SgiPkg/SgiPlatform.dec

>  create mode 100644 Platform/ARM/SgiPkg/SgiPlatform.dsc

>  create mode 100644 Platform/ARM/SgiPkg/SgiPlatform.fdf

>

> diff --git a/Platform/ARM/SgiPkg/SgiPlatform.dec b/Platform/ARM/SgiPkg/SgiPlatform.dec

> new file mode 100644

> index 0000000..b446aa6

> --- /dev/null

> +++ b/Platform/ARM/SgiPkg/SgiPlatform.dec

> @@ -0,0 +1,36 @@

> +#

> +#  Copyright (c) 2018, ARM Limited. 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]

> +  DEC_SPECIFICATION              = 0x00010005

> +  PACKAGE_NAME                   = SgiPkg

> +  PACKAGE_GUID                   = e6e0f26c-0df9-4f6c-a382-37ded896c6e9

> +  PACKAGE_VERSION                = 0.1

> +

> +################################################################################

> +#

> +# Include Section - list of Include Paths that are provided by this package.

> +#                   Comments are used for Keywords and Module Types.

> +#

> +# Supported Module Types:

> +#  BASE SEC PEI_CORE PEIM DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SMM_DRIVER DXE_SAL_DRIVER UEFI_DRIVER UEFI_APPLICATION

> +#

> +################################################################################

> +[Includes.common]

> +  Include                        # Root include for the package

> +

> +[Guids.common]

> +  gArmSgiTokenSpaceGuid    =  { 0x577d6941, 0xaea1, 0x40b4, { 0x90, 0x93, 0x2a, 0x86, 0x61, 0x72, 0x5a, 0x57 } }

> +

> +[PcdsFeatureFlag.common]

> +  # Set this PCD to TRUE to enable virtio support.

> +  gArmSgiTokenSpaceGuid.PcdVirtioSupported|TRUE|BOOLEAN|0x00000001

> diff --git a/Platform/ARM/SgiPkg/SgiPlatform.dsc b/Platform/ARM/SgiPkg/SgiPlatform.dsc

> new file mode 100644

> index 0000000..4f01cb0

> --- /dev/null

> +++ b/Platform/ARM/SgiPkg/SgiPlatform.dsc

> @@ -0,0 +1,243 @@

> +#

> +#  Copyright (c) 2018, ARM Limited. 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 Section - statements that will be processed to create a Makefile.

> +#

> +################################################################################

> +[Defines]

> +  PLATFORM_NAME                  = arm_sgi_platform

> +  PLATFORM_GUID                  = 3a6b2eae-0275-4b6e-a5d1-bd2ba1ce1fae

> +  PLATFORM_VERSION               = 0.1

> +  DSC_SPECIFICATION              = 0x00010005

> +  OUTPUT_DIRECTORY               = Build/$(PLATFORM_NAME)

> +  SUPPORTED_ARCHITECTURES        = AARCH64|ARM

> +  BUILD_TARGETS                  = DEBUG|RELEASE

> +  SKUID_IDENTIFIER               = DEFAULT

> +  FLASH_DEFINITION               = edk2-platforms/Platform/ARM/SgiPkg/SgiPlatform.fdf

> +

> +[LibraryClasses.common]

> +  ArmPlatformLib|edk2-platforms/Platform/ARM/SgiPkg/Library/PlatformLib/PlatformLib.inf

> +  ArmHvcLib|ArmPkg/Library/ArmHvcLib/ArmHvcLib.inf

> +

> +!include edk2-platforms/Platform/ARM/VExpressPkg/ArmVExpress.dsc.inc

> +

> +  # ARM Base Library

> +  ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf

> +  ArmMmuLib|ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf

> +  ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf

> +

> +  BasePathLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf

> +

> +  ArmPlatformSysConfigLib|Platform/ARM/VExpressPkg/Library/ArmVExpressSysConfigLib/ArmVExpressSysConfigLib.inf

> +  NorFlashPlatformLib|edk2-platforms/Platform/ARM/SgiPkg/Library/NorFlashLib/NorFlashLib.inf

> +  EfiResetSystemLib|ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.inf

> +

> +  TimerLib|ArmPkg/Library/ArmArchTimerLib/ArmArchTimerLib.inf

> +

> +  # Virtio Support

> +  VirtioLib|OvmfPkg/Library/VirtioLib/VirtioLib.inf

> +  VirtioMmioDeviceLib|OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceLib.inf

> +  FileExplorerLib|MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf

> +

> +[LibraryClasses.common.SEC]

> +  PrePiLib|EmbeddedPkg/Library/PrePiLib/PrePiLib.inf

> +  ExtractGuidedSectionLib|EmbeddedPkg/Library/PrePiExtractGuidedSectionLib/PrePiExtractGuidedSectionLib.inf

> +  LzmaDecompressLib|IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf

> +  MemoryAllocationLib|EmbeddedPkg/Library/PrePiMemoryAllocationLib/PrePiMemoryAllocationLib.inf

> +  HobLib|EmbeddedPkg/Library/PrePiHobLib/PrePiHobLib.inf

> +  PrePiHobListPointerLib|ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf

> +  PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf

> +  PlatformPeiLib|ArmPlatformPkg/PlatformPei/PlatformPeiLib.inf

> +  MemoryInitPeiLib|ArmPlatformPkg/MemoryInitPei/MemoryInitPeiLib.inf

> +

> +[LibraryClasses.common.UEFI_DRIVER, LibraryClasses.common.UEFI_APPLICATION, LibraryClasses.common.DXE_RUNTIME_DRIVER, LibraryClasses.common.DXE_DRIVER]

> +  PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf

> +

> +[BuildOptions]

> +  *_*_*_PLATFORM_FLAGS = -I$(WORKSPACE)/ArmPlatformPkg/ArmVExpressPkg/Include -I$(WORKSPACE)/edk2-platforms/Platform/ARM/SgiPkg/Include

> +

> +################################################################################

> +#

> +# Pcd Section - list of all EDK II PCD Entries defined by this Platform

> +#

> +################################################################################

> +

> +[PcdsFeatureFlag.common]

> +  ## If TRUE, Graphics Output Protocol will be installed on virtual handle created by ConsplitterDxe.

> +  #  It could be set FALSE to save size.

> +  gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|FALSE

> +  gEfiMdeModulePkgTokenSpaceGuid.PcdTurnOffUsbLegacySupport|TRUE

> +  gArmSgiTokenSpaceGuid.PcdVirtioSupported|TRUE

> +

> +[PcdsFixedAtBuild.common]

> +  #

> +  # NV Storage PCDs. Use base of 0x08000000 for NOR0, 0xC0000000 for NOR 1

> +  #

> +  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase|0x0BFC0000

> +  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize|0x00010000

> +  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|0x0BFD0000

> +  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize|0x00010000

> +  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|0x0BFE0000

> +  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize|0x00010000

> +

> +  # System Memory (1GB - 16MB of Trusted DRAM at the top of the 32bit address space)

> +  gArmTokenSpaceGuid.PcdSystemMemoryBase|0x80000000

> +  gArmTokenSpaceGuid.PcdSystemMemorySize|0x7F000000

> +

> +  gArmTokenSpaceGuid.PcdGicDistributorBase|0x30000000

> +  gArmTokenSpaceGuid.PcdGicRedistributorsBase|0x300C0000

> +

> +  gArmTokenSpaceGuid.PcdVFPEnabled|1

> +

> +  #

> +  # ARM PrimeCell

> +  #

> +

> +  ## PL011 - Serial Terminal

> +  gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase|0x7FF80000

> +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate|115200

> +  gArmPlatformTokenSpaceGuid.PL011UartInteger|4

> +  gArmPlatformTokenSpaceGuid.PL011UartFractional|0

> +

> +  ## PL011 - Serial Debug UART

> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgRegisterBase|0x7FF80000

> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartClkInHz|7372800

> +  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartBaudRate|115200

> +  gArmPlatformTokenSpaceGuid.PL011UartInterrupt|147

> +

> +  ## PL031 RealTimeClock

> +  gArmPlatformTokenSpaceGuid.PcdPL031RtcBase|0x1C170000

> +

> +!ifdef EDK2_ENABLE_SMSC_91X

> +  # Ethernet (SMSC 91C111)

> +  gEmbeddedTokenSpaceGuid.PcdLan9118DxeBaseAddress|0x18000000

> +!endif

> +

> +  # List of Device Paths that support BootMonFs

> +  gArmBootMonFsTokenSpaceGuid.PcdBootMonFsSupportedDevicePaths|L"VenHw(E7223039-5836-41E1-B542-D7EC736C5E59)"

> +

> +  #

> +  # ARM OS Loader

> +  #

> +  gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|3

> +

> +  #

> +  # ARM Architectural Timer Frequency

> +  #

> +  gArmTokenSpaceGuid.PcdArmArchTimerFreqInHz|100000000

> +  gEmbeddedTokenSpaceGuid.PcdMetronomeTickPeriod|1000

> +  gEmbeddedTokenSpaceGuid.PcdTimerPeriod|1000

> +

> +  #

> +  # ARM Cores and Clusters

> +  # Set initial minimum supported value needed for a initial initialization

> +  #

> +  gArmPlatformTokenSpaceGuid.PcdCoreCount|2

> +  gArmPlatformTokenSpaceGuid.PcdClusterCount|1

> +

> +[PcdsPatchableInModule]

> +  # Console Resolution (Full HD)

> +  gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution|1920

> +  gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution|1080

> +

> +

> +################################################################################

> +#

> +# Components Section - list of all EDK II Modules needed by this Platform

> +#

> +################################################################################

> +[Components.common]

> +  #

> +  # PEI Phase modules

> +  #

> +  ArmPlatformPkg/PrePi/PeiMPCore.inf {


Apologies for missing this before: please use PrePeiCore not PrePi.
PrePi is a misguided optimization that skips the entire PEI phase,
making ARM platforms deviate from other UEFI systems in ways that make
it more difficult later on to reuse generic modules for things like
capsule update etc.


> +    <LibraryClasses>

> +    DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf

> +  }

> +

> +  #

> +  # DXE

> +  #

> +  MdeModulePkg/Core/Dxe/DxeMain.inf {

> +    <LibraryClasses>

> +      PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf

> +      NULL|MdeModulePkg/Library/DxeCrc32GuidedSectionExtractLib/DxeCrc32GuidedSectionExtractLib.inf

> +  }

> +

> +  #

> +  # Architectural Protocols

> +  #

> +  ArmPkg/Drivers/CpuDxe/CpuDxe.inf

> +  MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf

> +  MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf

> +  MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf

> +  MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf

> +  EmbeddedPkg/ResetRuntimeDxe/ResetRuntimeDxe.inf

> +  EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf

> +  EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf

> +

> +  MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf

> +  MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf

> +  MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf

> +  MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf

> +  MdeModulePkg/Universal/SerialDxe/SerialDxe.inf

> +  MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf

> +  MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf

> +

> +  #

> +  # ACPI Support

> +  #

> +  MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf

> +  MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf

> +  edk2-platforms/Platform/ARM/SgiPkg/AcpiTables/Sgi575/AcpiTables.inf

> +  MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf

> +

> +  ArmPkg/Drivers/ArmGic/ArmGicDxe.inf

> +  ArmPkg/Drivers/TimerDxe/TimerDxe.inf

> +  ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdogDxe.inf

> +

> +  ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe.inf

> +  OvmfPkg/VirtioBlkDxe/VirtioBlk.inf

> +

> +  #

> +  # Semi-hosting filesystem

> +  #

> +  ArmPkg/Filesystem/SemihostFs/SemihostFs.inf

> +

> +  #

> +  # platform driver

> +  #

> +  edk2-platforms/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf

> +

> +  #

> +  # FAT filesystem + GPT/MBR partitioning

> +  #

> +  MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf

> +  MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf

> +  MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf

> +

> +  #

> +  # Bds

> +  #

> +  MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf

> +  MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf

> +  MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf

> +  MdeModulePkg/Universal/BdsDxe/BdsDxe.inf

> +  MdeModulePkg/Application/UiApp/UiApp.inf {

> +    <LibraryClasses>

> +      NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf

> +      NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf

> +      NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf

> +      PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf

> +  }

> diff --git a/Platform/ARM/SgiPkg/SgiPlatform.fdf b/Platform/ARM/SgiPkg/SgiPlatform.fdf

> new file mode 100644

> index 0000000..05a6582

> --- /dev/null

> +++ b/Platform/ARM/SgiPkg/SgiPlatform.fdf

> @@ -0,0 +1,320 @@

> +#

> +#  Copyright (c) 2018, ARM Limited. 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.

> +#

> +

> +################################################################################

> +#

> +# FD Section

> +# The [FD] Section is made up of the definition statements and a

> +# description of what goes into  the Flash Device Image.  Each FD section

> +# defines one flash "device" image.  A flash device image may be one of

> +# the following: Removable media bootable image (like a boot floppy

> +# image,) an Option ROM image (that would be "flashed" into an add-in

> +# card,) a System "Flash"  image (that would be burned into a system's

> +# flash) or an Update ("Capsule") image that will be used to update and

> +# existing system flash.

> +#

> +################################################################################

> +

> +[FD.BL33_AP_UEFI]

> +BaseAddress   = 0xE0000000|gArmTokenSpaceGuid.PcdFdBaseAddress  # The base address of the Firmware in NOR Flash.

> +Size          = 0x000F0000|gArmTokenSpaceGuid.PcdFdSize         # The size in bytes of the FLASH Device

> +ErasePolarity = 1

> +

> +# This one is tricky, it must be: BlockSize * NumBlocks = Size

> +BlockSize     = 0x00001000

> +NumBlocks     = 0xF0

> +

> +################################################################################

> +#

> +# Following are lists of FD Region layout which correspond to the locations of different

> +# images within the flash device.

> +#

> +# Regions must be defined in ascending order and may not overlap.

> +#

> +# A Layout Region start with a eight digit hex offset (leading "0x" required) followed by

> +# the pipe "|" character, followed by the size of the region, also in hex with the leading

> +# "0x" characters. Like:

> +# Offset|Size

> +# PcdOffsetCName|PcdSizeCName

> +# RegionType <FV, DATA, or FILE>

> +#

> +################################################################################

> +

> +0x00000000|0x000F0000

> +gArmTokenSpaceGuid.PcdFvBaseAddress|gArmTokenSpaceGuid.PcdFvSize

> +FV = FVMAIN_COMPACT

> +

> +################################################################################

> +#

> +# FV Section

> +#

> +# [FV] section is used to define what components or modules are placed within a flash

> +# device file.  This section also defines order the components and modules are positioned

> +# within the image.  The [FV] section consists of define statements, set statements and

> +# module statements.

> +#

> +################################################################################

> +

> +[FV.FvMain]

> +BlockSize          = 0x40

> +NumBlocks          = 0         # This FV gets compressed so make it just big enough

> +FvAlignment        = 8         # FV alignment and FV attributes setting.

> +ERASE_POLARITY     = 1

> +MEMORY_MAPPED      = TRUE

> +STICKY_WRITE       = TRUE

> +LOCK_CAP           = TRUE

> +LOCK_STATUS        = TRUE

> +WRITE_DISABLED_CAP = TRUE

> +WRITE_ENABLED_CAP  = TRUE

> +WRITE_STATUS       = TRUE

> +WRITE_LOCK_CAP     = TRUE

> +WRITE_LOCK_STATUS  = TRUE

> +READ_DISABLED_CAP  = TRUE

> +READ_ENABLED_CAP   = TRUE

> +READ_STATUS        = TRUE

> +READ_LOCK_CAP      = TRUE

> +READ_LOCK_STATUS   = TRUE

> +

> +  INF MdeModulePkg/Core/Dxe/DxeMain.inf

> +

> +  #

> +  # PI DXE Drivers producing Architectural Protocols (EFI Services)

> +  #

> +  INF ArmPkg/Drivers/CpuDxe/CpuDxe.inf

> +  INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf

> +  INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf

> +  INF MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf

> +  INF MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf

> +  INF EmbeddedPkg/ResetRuntimeDxe/ResetRuntimeDxe.inf

> +  INF EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf

> +  INF EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf

> +  INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf

> +  INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf

> +

> +  #

> +  # ACPI Support

> +  #

> +  INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf

> +  INF RuleOverride=ACPITABLE edk2-platforms/Platform/ARM/SgiPkg/AcpiTables/Sgi575/AcpiTables.inf

> +  INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf

> +

> +  #

> +  # Multiple Console IO support

> +  #

> +  INF MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf

> +  INF MdeModulePkg/Universal/SerialDxe/SerialDxe.inf

> +

> +  INF ArmPkg/Drivers/ArmGic/ArmGicDxe.inf

> +  INF ArmPkg/Drivers/TimerDxe/TimerDxe.inf

> +  INF ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdogDxe.inf

> +

> +  # NOR Flash driver

> +  INF ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe.inf

> +  INF OvmfPkg/VirtioBlkDxe/VirtioBlk.inf

> +

> +  # Semi-hosting filesystem

> +  INF ArmPkg/Filesystem/SemihostFs/SemihostFs.inf

> +  # Versatile Express FileSystem

> +  INF Platform/ARM/Drivers/BootMonFs/BootMonFs.inf

> +

> +  INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf

> +

> +  #

> +  # FAT filesystem + GPT/MBR partitioning

> +  #

> +  INF MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf

> +  INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf

> +  INF FatBinPkg/EnhancedFatDxe/Fat.inf

> +  INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf

> +

> +  # FV FileSystem

> +  INF MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystemDxe.inf

> +

> +  #

> +  # Networking stack

> +  #

> +  INF MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf

> +  INF MdeModulePkg/Universal/Network/ArpDxe/ArpDxe.inf

> +  INF MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Dxe.inf

> +  INF MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Dxe.inf

> +  INF MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf

> +  INF MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigDxe.inf

> +  INF MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Dxe.inf

> +  INF MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Dxe.inf

> +  INF MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf

> +  INF MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf

> +  INF MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf

> +

> +!ifdef EDK2_ENABLE_SMSC_91X

> +  INF EmbeddedPkg/Drivers/Lan91xDxe/Lan91xDxe.inf

> +!endif

> +

> +  #

> +  # UEFI applications

> +  #

> +  INF  ShellPkg/Application/Shell/Shell.inf

> +

> +  #

> +  # platform driver

> +  #

> +  INF edk2-platforms/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf

> +

> +  #

> +  # Bds

> +  #

> +  INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf

> +  INF MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf

> +  INF MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf

> +  INF MdeModulePkg/Universal/BdsDxe/BdsDxe.inf

> +  INF MdeModulePkg/Application/UiApp/UiApp.inf

> +

> +[FV.FVMAIN_COMPACT]

> +FvAlignment        = 8

> +ERASE_POLARITY     = 1

> +MEMORY_MAPPED      = TRUE

> +STICKY_WRITE       = TRUE

> +LOCK_CAP           = TRUE

> +LOCK_STATUS        = TRUE

> +WRITE_DISABLED_CAP = TRUE

> +WRITE_ENABLED_CAP  = TRUE

> +WRITE_STATUS       = TRUE

> +WRITE_LOCK_CAP     = TRUE

> +WRITE_LOCK_STATUS  = TRUE

> +READ_DISABLED_CAP  = TRUE

> +READ_ENABLED_CAP   = TRUE

> +READ_STATUS        = TRUE

> +READ_LOCK_CAP      = TRUE

> +READ_LOCK_STATUS   = TRUE

> +

> +  INF ArmPlatformPkg/PrePi/PeiMPCore.inf

> +

> +  FILE FV_IMAGE = 9E21FD93-9C72-4c15-8C4B-E77F1DB2D792 {

> +    SECTION GUIDED EE4E5898-3914-4259-9D6E-DC7BD79403CF PROCESSING_REQUIRED = TRUE {

> +      SECTION FV_IMAGE = FVMAIN

> +    }

> +  }

> +

> +

> +################################################################################

> +#

> +# Rules are use with the [FV] section's module INF type to define

> +# how an FFS file is created for a given INF file. The following Rule are the default

> +# rules for the different module type. User can add the customized rules to define the

> +# content of the FFS file.

> +#

> +################################################################################

> +

> +

> +############################################################################

> +# Example of a DXE_DRIVER FFS file with a Checksum encapsulation section   #

> +############################################################################

> +#

> +#[Rule.Common.DXE_DRIVER]

> +#  FILE DRIVER = $(NAMED_GUID) {

> +#    DXE_DEPEX    DXE_DEPEX               Optional $(INF_OUTPUT)/$(MODULE_NAME).depex

> +#    COMPRESS PI_STD {

> +#      GUIDED {

> +#        PE32     PE32                    $(INF_OUTPUT)/$(MODULE_NAME).efi

> +#        UI       STRING="$(MODULE_NAME)" Optional

> +#        VERSION  STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)

> +#      }

> +#    }

> +#  }

> +#

> +############################################################################

> +

> +#

> +# These SEC rules are used for ArmPlatformPkg/PrePi module.

> +# ArmPlatformPkg/PrePi is declared as a SEC module to make GenFv patch the

> +# UEFI Firmware to jump to ArmPlatformPkg/PrePi entrypoint

> +#

> +

> +[Rule.Common.SEC]

> +  FILE SEC = $(NAMED_GUID) RELOCS_STRIPPED FIXED {

> +    TE  TE Align = Auto                 $(INF_OUTPUT)/$(MODULE_NAME).efi

> +  }

> +

> +[Rule.Common.PEI_CORE]

> +  FILE PEI_CORE = $(NAMED_GUID) {

> +    TE     TE                           $(INF_OUTPUT)/$(MODULE_NAME).efi

> +    UI     STRING ="$(MODULE_NAME)" Optional

> +  }

> +

> +[Rule.Common.PEIM]

> +  FILE PEIM = $(NAMED_GUID) {

> +     PEI_DEPEX PEI_DEPEX Optional       $(INF_OUTPUT)/$(MODULE_NAME).depex

> +     TE       TE                        $(INF_OUTPUT)/$(MODULE_NAME).efi

> +     UI       STRING="$(MODULE_NAME)" Optional

> +  }

> +

> +[Rule.Common.PEIM.TIANOCOMPRESSED]

> +  FILE PEIM = $(NAMED_GUID) DEBUG_MYTOOLS_IA32 {

> +    PEI_DEPEX PEI_DEPEX Optional        $(INF_OUTPUT)/$(MODULE_NAME).depex

> +    GUIDED A31280AD-481E-41B6-95E8-127F4C984779 PROCESSING_REQUIRED = TRUE {

> +      PE32      PE32                    $(INF_OUTPUT)/$(MODULE_NAME).efi

> +      UI        STRING="$(MODULE_NAME)" Optional

> +    }

> +  }

> +

> +[Rule.Common.DXE_CORE]

> +  FILE DXE_CORE = $(NAMED_GUID) {

> +    PE32     PE32                       $(INF_OUTPUT)/$(MODULE_NAME).efi

> +    UI       STRING="$(MODULE_NAME)" Optional

> +  }

> +

> +[Rule.Common.UEFI_DRIVER]

> +  FILE DRIVER = $(NAMED_GUID) {

> +    DXE_DEPEX    DXE_DEPEX              Optional $(INF_OUTPUT)/$(MODULE_NAME).depex

> +    PE32         PE32                   $(INF_OUTPUT)/$(MODULE_NAME).efi

> +    UI           STRING="$(MODULE_NAME)" Optional

> +  }

> +

> +[Rule.Common.DXE_DRIVER]

> +  FILE DRIVER = $(NAMED_GUID) {

> +    DXE_DEPEX    DXE_DEPEX              Optional $(INF_OUTPUT)/$(MODULE_NAME).depex

> +    PE32         PE32                   $(INF_OUTPUT)/$(MODULE_NAME).efi

> +    UI           STRING="$(MODULE_NAME)" Optional

> +  }

> +

> +[Rule.Common.DXE_RUNTIME_DRIVER]

> +  FILE DRIVER = $(NAMED_GUID) {

> +    DXE_DEPEX    DXE_DEPEX              Optional $(INF_OUTPUT)/$(MODULE_NAME).depex

> +    PE32         PE32                   $(INF_OUTPUT)/$(MODULE_NAME).efi

> +    UI           STRING="$(MODULE_NAME)" Optional

> +  }

> +

> +[Rule.Common.UEFI_APPLICATION]

> +  FILE APPLICATION = $(NAMED_GUID) {

> +    UI     STRING ="$(MODULE_NAME)" Optional

> +    PE32   PE32                         $(INF_OUTPUT)/$(MODULE_NAME).efi

> +  }

> +

> +[Rule.Common.UEFI_DRIVER.BINARY]

> +  FILE DRIVER = $(NAMED_GUID) {

> +    DXE_DEPEX DXE_DEPEX Optional      |.depex

> +    PE32      PE32                    |.efi

> +    UI        STRING="$(MODULE_NAME)" Optional

> +    VERSION   STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)

> +  }

> +

> +[Rule.Common.UEFI_APPLICATION.BINARY]

> +  FILE APPLICATION = $(NAMED_GUID) {

> +    PE32      PE32                    |.efi

> +    UI        STRING="$(MODULE_NAME)" Optional

> +    VERSION   STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)

> +  }

> +

> +[Rule.Common.USER_DEFINED.ACPITABLE]

> +  FILE FREEFORM = $(NAMED_GUID) {

> +    RAW ACPI               |.acpi

> +    RAW ASL                |.aml

> +  }

> --

> 2.7.4

>

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel
Thomas Abraham May 9, 2018, 8:56 a.m. | #3
Hi Ard,

On Mon, Apr 16, 2018 at 4:14 PM, Ard Biesheuvel
<ard.biesheuvel@linaro.org> wrote:
> On 12 April 2018 at 20:47, Thomas Abraham <thomas.abraham@arm.com> wrote:

>> From: Vishwanatha HG <vishwanatha.hg@arm.com>

>>

>> Add the initial support for ARM's System Guidance for Infrastructure

>> (SGI) platforms. SGI-575 is the supported platform in this initial

>> implementation and can be extented to include support for upcoming

>> SGI platforms as well.

>>

>> Contributed-under: TianoCore Contribution Agreement 1.1

>> Signed-off-by:  Vishwanatha HG <vishwanatha.hg@arm.com>

>> Signed-off-by: Thomas Abraham <thomas.abraham@arm.com>

>> ---

>>  Platform/ARM/SgiPkg/SgiPlatform.dec |  36 ++++

>>  Platform/ARM/SgiPkg/SgiPlatform.dsc | 243 +++++++++++++++++++++++++++

>>  Platform/ARM/SgiPkg/SgiPlatform.fdf | 320 ++++++++++++++++++++++++++++++++++++

>>  3 files changed, 599 insertions(+)

>>  create mode 100644 Platform/ARM/SgiPkg/SgiPlatform.dec

>>  create mode 100644 Platform/ARM/SgiPkg/SgiPlatform.dsc

>>  create mode 100644 Platform/ARM/SgiPkg/SgiPlatform.fdf

>>


<snip>

>> +################################################################################

>> +#

>> +# Components Section - list of all EDK II Modules needed by this Platform

>> +#

>> +################################################################################

>> +[Components.common]

>> +  #

>> +  # PEI Phase modules

>> +  #

>> +  ArmPlatformPkg/PrePi/PeiMPCore.inf {

>

> Apologies for missing this before: please use PrePeiCore not PrePi.

> PrePi is a misguided optimization that skips the entire PEI phase,

> making ARM platforms deviate from other UEFI systems in ways that make

> it more difficult later on to reuse generic modules for things like

> capsule update etc.


Thank you for your comments. All the changes you have suggested has
been included in the v3 version of this patchset. As you have
suggested, the use of PrePi has been dropped and switched to using
PrePeiCore. Apologies for taking a lot of time to revert back on your
comments.

Thanks,
Thomas.

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

Patch

diff --git a/Platform/ARM/SgiPkg/SgiPlatform.dec b/Platform/ARM/SgiPkg/SgiPlatform.dec
new file mode 100644
index 0000000..b446aa6
--- /dev/null
+++ b/Platform/ARM/SgiPkg/SgiPlatform.dec
@@ -0,0 +1,36 @@ 
+#
+#  Copyright (c) 2018, ARM Limited. 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]
+  DEC_SPECIFICATION              = 0x00010005
+  PACKAGE_NAME                   = SgiPkg
+  PACKAGE_GUID                   = e6e0f26c-0df9-4f6c-a382-37ded896c6e9
+  PACKAGE_VERSION                = 0.1
+
+################################################################################
+#
+# Include Section - list of Include Paths that are provided by this package.
+#                   Comments are used for Keywords and Module Types.
+#
+# Supported Module Types:
+#  BASE SEC PEI_CORE PEIM DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SMM_DRIVER DXE_SAL_DRIVER UEFI_DRIVER UEFI_APPLICATION
+#
+################################################################################
+[Includes.common]
+  Include                        # Root include for the package
+
+[Guids.common]
+  gArmSgiTokenSpaceGuid    =  { 0x577d6941, 0xaea1, 0x40b4, { 0x90, 0x93, 0x2a, 0x86, 0x61, 0x72, 0x5a, 0x57 } }
+
+[PcdsFeatureFlag.common]
+  # Set this PCD to TRUE to enable virtio support.
+  gArmSgiTokenSpaceGuid.PcdVirtioSupported|TRUE|BOOLEAN|0x00000001
diff --git a/Platform/ARM/SgiPkg/SgiPlatform.dsc b/Platform/ARM/SgiPkg/SgiPlatform.dsc
new file mode 100644
index 0000000..4f01cb0
--- /dev/null
+++ b/Platform/ARM/SgiPkg/SgiPlatform.dsc
@@ -0,0 +1,243 @@ 
+#
+#  Copyright (c) 2018, ARM Limited. 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 Section - statements that will be processed to create a Makefile.
+#
+################################################################################
+[Defines]
+  PLATFORM_NAME                  = arm_sgi_platform
+  PLATFORM_GUID                  = 3a6b2eae-0275-4b6e-a5d1-bd2ba1ce1fae
+  PLATFORM_VERSION               = 0.1
+  DSC_SPECIFICATION              = 0x00010005
+  OUTPUT_DIRECTORY               = Build/$(PLATFORM_NAME)
+  SUPPORTED_ARCHITECTURES        = AARCH64|ARM
+  BUILD_TARGETS                  = DEBUG|RELEASE
+  SKUID_IDENTIFIER               = DEFAULT
+  FLASH_DEFINITION               = edk2-platforms/Platform/ARM/SgiPkg/SgiPlatform.fdf
+
+[LibraryClasses.common]
+  ArmPlatformLib|edk2-platforms/Platform/ARM/SgiPkg/Library/PlatformLib/PlatformLib.inf
+  ArmHvcLib|ArmPkg/Library/ArmHvcLib/ArmHvcLib.inf
+
+!include edk2-platforms/Platform/ARM/VExpressPkg/ArmVExpress.dsc.inc
+
+  # ARM Base Library
+  ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf
+  ArmMmuLib|ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf
+  ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf
+
+  BasePathLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
+
+  ArmPlatformSysConfigLib|Platform/ARM/VExpressPkg/Library/ArmVExpressSysConfigLib/ArmVExpressSysConfigLib.inf
+  NorFlashPlatformLib|edk2-platforms/Platform/ARM/SgiPkg/Library/NorFlashLib/NorFlashLib.inf
+  EfiResetSystemLib|ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.inf
+
+  TimerLib|ArmPkg/Library/ArmArchTimerLib/ArmArchTimerLib.inf
+
+  # Virtio Support
+  VirtioLib|OvmfPkg/Library/VirtioLib/VirtioLib.inf
+  VirtioMmioDeviceLib|OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDeviceLib.inf
+  FileExplorerLib|MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf
+
+[LibraryClasses.common.SEC]
+  PrePiLib|EmbeddedPkg/Library/PrePiLib/PrePiLib.inf
+  ExtractGuidedSectionLib|EmbeddedPkg/Library/PrePiExtractGuidedSectionLib/PrePiExtractGuidedSectionLib.inf
+  LzmaDecompressLib|IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf
+  MemoryAllocationLib|EmbeddedPkg/Library/PrePiMemoryAllocationLib/PrePiMemoryAllocationLib.inf
+  HobLib|EmbeddedPkg/Library/PrePiHobLib/PrePiHobLib.inf
+  PrePiHobListPointerLib|ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf
+  PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf
+  PlatformPeiLib|ArmPlatformPkg/PlatformPei/PlatformPeiLib.inf
+  MemoryInitPeiLib|ArmPlatformPkg/MemoryInitPei/MemoryInitPeiLib.inf
+
+[LibraryClasses.common.UEFI_DRIVER, LibraryClasses.common.UEFI_APPLICATION, LibraryClasses.common.DXE_RUNTIME_DRIVER, LibraryClasses.common.DXE_DRIVER]
+  PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
+
+[BuildOptions]
+  *_*_*_PLATFORM_FLAGS = -I$(WORKSPACE)/ArmPlatformPkg/ArmVExpressPkg/Include -I$(WORKSPACE)/edk2-platforms/Platform/ARM/SgiPkg/Include
+
+################################################################################
+#
+# Pcd Section - list of all EDK II PCD Entries defined by this Platform
+#
+################################################################################
+
+[PcdsFeatureFlag.common]
+  ## If TRUE, Graphics Output Protocol will be installed on virtual handle created by ConsplitterDxe.
+  #  It could be set FALSE to save size.
+  gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|FALSE
+  gEfiMdeModulePkgTokenSpaceGuid.PcdTurnOffUsbLegacySupport|TRUE
+  gArmSgiTokenSpaceGuid.PcdVirtioSupported|TRUE
+
+[PcdsFixedAtBuild.common]
+  #
+  # NV Storage PCDs. Use base of 0x08000000 for NOR0, 0xC0000000 for NOR 1
+  #
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase|0x0BFC0000
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize|0x00010000
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|0x0BFD0000
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize|0x00010000
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|0x0BFE0000
+  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize|0x00010000
+
+  # System Memory (1GB - 16MB of Trusted DRAM at the top of the 32bit address space)
+  gArmTokenSpaceGuid.PcdSystemMemoryBase|0x80000000
+  gArmTokenSpaceGuid.PcdSystemMemorySize|0x7F000000
+
+  gArmTokenSpaceGuid.PcdGicDistributorBase|0x30000000
+  gArmTokenSpaceGuid.PcdGicRedistributorsBase|0x300C0000
+
+  gArmTokenSpaceGuid.PcdVFPEnabled|1
+
+  #
+  # ARM PrimeCell
+  #
+
+  ## PL011 - Serial Terminal
+  gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase|0x7FF80000
+  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate|115200
+  gArmPlatformTokenSpaceGuid.PL011UartInteger|4
+  gArmPlatformTokenSpaceGuid.PL011UartFractional|0
+
+  ## PL011 - Serial Debug UART
+  gArmPlatformTokenSpaceGuid.PcdSerialDbgRegisterBase|0x7FF80000
+  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartClkInHz|7372800
+  gArmPlatformTokenSpaceGuid.PcdSerialDbgUartBaudRate|115200
+  gArmPlatformTokenSpaceGuid.PL011UartInterrupt|147
+
+  ## PL031 RealTimeClock
+  gArmPlatformTokenSpaceGuid.PcdPL031RtcBase|0x1C170000
+
+!ifdef EDK2_ENABLE_SMSC_91X
+  # Ethernet (SMSC 91C111)
+  gEmbeddedTokenSpaceGuid.PcdLan9118DxeBaseAddress|0x18000000
+!endif
+
+  # List of Device Paths that support BootMonFs
+  gArmBootMonFsTokenSpaceGuid.PcdBootMonFsSupportedDevicePaths|L"VenHw(E7223039-5836-41E1-B542-D7EC736C5E59)"
+
+  #
+  # ARM OS Loader
+  #
+  gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|3
+
+  #
+  # ARM Architectural Timer Frequency
+  #
+  gArmTokenSpaceGuid.PcdArmArchTimerFreqInHz|100000000
+  gEmbeddedTokenSpaceGuid.PcdMetronomeTickPeriod|1000
+  gEmbeddedTokenSpaceGuid.PcdTimerPeriod|1000
+
+  #
+  # ARM Cores and Clusters
+  # Set initial minimum supported value needed for a initial initialization
+  #
+  gArmPlatformTokenSpaceGuid.PcdCoreCount|2
+  gArmPlatformTokenSpaceGuid.PcdClusterCount|1
+
+[PcdsPatchableInModule]
+  # Console Resolution (Full HD)
+  gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution|1920
+  gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution|1080
+
+
+################################################################################
+#
+# Components Section - list of all EDK II Modules needed by this Platform
+#
+################################################################################
+[Components.common]
+  #
+  # PEI Phase modules
+  #
+  ArmPlatformPkg/PrePi/PeiMPCore.inf {
+    <LibraryClasses>
+    DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
+  }
+
+  #
+  # DXE
+  #
+  MdeModulePkg/Core/Dxe/DxeMain.inf {
+    <LibraryClasses>
+      PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
+      NULL|MdeModulePkg/Library/DxeCrc32GuidedSectionExtractLib/DxeCrc32GuidedSectionExtractLib.inf
+  }
+
+  #
+  # Architectural Protocols
+  #
+  ArmPkg/Drivers/CpuDxe/CpuDxe.inf
+  MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
+  MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
+  MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
+  MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf
+  EmbeddedPkg/ResetRuntimeDxe/ResetRuntimeDxe.inf
+  EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf
+  EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf
+
+  MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf
+  MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf
+  MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf
+  MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
+  MdeModulePkg/Universal/SerialDxe/SerialDxe.inf
+  MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf
+  MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf
+
+  #
+  # ACPI Support
+  #
+  MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
+  MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf
+  edk2-platforms/Platform/ARM/SgiPkg/AcpiTables/Sgi575/AcpiTables.inf
+  MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
+
+  ArmPkg/Drivers/ArmGic/ArmGicDxe.inf
+  ArmPkg/Drivers/TimerDxe/TimerDxe.inf
+  ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdogDxe.inf
+
+  ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe.inf
+  OvmfPkg/VirtioBlkDxe/VirtioBlk.inf
+
+  #
+  # Semi-hosting filesystem
+  #
+  ArmPkg/Filesystem/SemihostFs/SemihostFs.inf
+
+  #
+  # platform driver
+  #
+  edk2-platforms/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf
+
+  #
+  # FAT filesystem + GPT/MBR partitioning
+  #
+  MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
+  MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
+  MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
+
+  #
+  # Bds
+  #
+  MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
+  MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
+  MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
+  MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
+  MdeModulePkg/Application/UiApp/UiApp.inf {
+    <LibraryClasses>
+      NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf
+      NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf
+      NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
+      PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
+  }
diff --git a/Platform/ARM/SgiPkg/SgiPlatform.fdf b/Platform/ARM/SgiPkg/SgiPlatform.fdf
new file mode 100644
index 0000000..05a6582
--- /dev/null
+++ b/Platform/ARM/SgiPkg/SgiPlatform.fdf
@@ -0,0 +1,320 @@ 
+#
+#  Copyright (c) 2018, ARM Limited. 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.
+#
+
+################################################################################
+#
+# FD Section
+# The [FD] Section is made up of the definition statements and a
+# description of what goes into  the Flash Device Image.  Each FD section
+# defines one flash "device" image.  A flash device image may be one of
+# the following: Removable media bootable image (like a boot floppy
+# image,) an Option ROM image (that would be "flashed" into an add-in
+# card,) a System "Flash"  image (that would be burned into a system's
+# flash) or an Update ("Capsule") image that will be used to update and
+# existing system flash.
+#
+################################################################################
+
+[FD.BL33_AP_UEFI]
+BaseAddress   = 0xE0000000|gArmTokenSpaceGuid.PcdFdBaseAddress  # The base address of the Firmware in NOR Flash.
+Size          = 0x000F0000|gArmTokenSpaceGuid.PcdFdSize         # The size in bytes of the FLASH Device
+ErasePolarity = 1
+
+# This one is tricky, it must be: BlockSize * NumBlocks = Size
+BlockSize     = 0x00001000
+NumBlocks     = 0xF0
+
+################################################################################
+#
+# Following are lists of FD Region layout which correspond to the locations of different
+# images within the flash device.
+#
+# Regions must be defined in ascending order and may not overlap.
+#
+# A Layout Region start with a eight digit hex offset (leading "0x" required) followed by
+# the pipe "|" character, followed by the size of the region, also in hex with the leading
+# "0x" characters. Like:
+# Offset|Size
+# PcdOffsetCName|PcdSizeCName
+# RegionType <FV, DATA, or FILE>
+#
+################################################################################
+
+0x00000000|0x000F0000
+gArmTokenSpaceGuid.PcdFvBaseAddress|gArmTokenSpaceGuid.PcdFvSize
+FV = FVMAIN_COMPACT
+
+################################################################################
+#
+# FV Section
+#
+# [FV] section is used to define what components or modules are placed within a flash
+# device file.  This section also defines order the components and modules are positioned
+# within the image.  The [FV] section consists of define statements, set statements and
+# module statements.
+#
+################################################################################
+
+[FV.FvMain]
+BlockSize          = 0x40
+NumBlocks          = 0         # This FV gets compressed so make it just big enough
+FvAlignment        = 8         # FV alignment and FV attributes setting.
+ERASE_POLARITY     = 1
+MEMORY_MAPPED      = TRUE
+STICKY_WRITE       = TRUE
+LOCK_CAP           = TRUE
+LOCK_STATUS        = TRUE
+WRITE_DISABLED_CAP = TRUE
+WRITE_ENABLED_CAP  = TRUE
+WRITE_STATUS       = TRUE
+WRITE_LOCK_CAP     = TRUE
+WRITE_LOCK_STATUS  = TRUE
+READ_DISABLED_CAP  = TRUE
+READ_ENABLED_CAP   = TRUE
+READ_STATUS        = TRUE
+READ_LOCK_CAP      = TRUE
+READ_LOCK_STATUS   = TRUE
+
+  INF MdeModulePkg/Core/Dxe/DxeMain.inf
+
+  #
+  # PI DXE Drivers producing Architectural Protocols (EFI Services)
+  #
+  INF ArmPkg/Drivers/CpuDxe/CpuDxe.inf
+  INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
+  INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
+  INF MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
+  INF MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf
+  INF EmbeddedPkg/ResetRuntimeDxe/ResetRuntimeDxe.inf
+  INF EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf
+  INF EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf
+  INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf
+  INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf
+
+  #
+  # ACPI Support
+  #
+  INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
+  INF RuleOverride=ACPITABLE edk2-platforms/Platform/ARM/SgiPkg/AcpiTables/Sgi575/AcpiTables.inf
+  INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
+
+  #
+  # Multiple Console IO support
+  #
+  INF MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
+  INF MdeModulePkg/Universal/SerialDxe/SerialDxe.inf
+
+  INF ArmPkg/Drivers/ArmGic/ArmGicDxe.inf
+  INF ArmPkg/Drivers/TimerDxe/TimerDxe.inf
+  INF ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdogDxe.inf
+
+  # NOR Flash driver
+  INF ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe.inf
+  INF OvmfPkg/VirtioBlkDxe/VirtioBlk.inf
+
+  # Semi-hosting filesystem
+  INF ArmPkg/Filesystem/SemihostFs/SemihostFs.inf
+  # Versatile Express FileSystem
+  INF Platform/ARM/Drivers/BootMonFs/BootMonFs.inf
+
+  INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
+
+  #
+  # FAT filesystem + GPT/MBR partitioning
+  #
+  INF MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
+  INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
+  INF FatBinPkg/EnhancedFatDxe/Fat.inf
+  INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
+
+  # FV FileSystem
+  INF MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystemDxe.inf
+
+  #
+  # Networking stack
+  #
+  INF MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf
+  INF MdeModulePkg/Universal/Network/ArpDxe/ArpDxe.inf
+  INF MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Dxe.inf
+  INF MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Dxe.inf
+  INF MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf
+  INF MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigDxe.inf
+  INF MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Dxe.inf
+  INF MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Dxe.inf
+  INF MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf
+  INF MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf
+  INF MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf
+
+!ifdef EDK2_ENABLE_SMSC_91X
+  INF EmbeddedPkg/Drivers/Lan91xDxe/Lan91xDxe.inf
+!endif
+
+  #
+  # UEFI applications
+  #
+  INF  ShellPkg/Application/Shell/Shell.inf
+
+  #
+  # platform driver
+  #
+  INF edk2-platforms/Platform/ARM/SgiPkg/Drivers/PlatformDxe/PlatformDxe.inf
+
+  #
+  # Bds
+  #
+  INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
+  INF MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
+  INF MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
+  INF MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
+  INF MdeModulePkg/Application/UiApp/UiApp.inf
+
+[FV.FVMAIN_COMPACT]
+FvAlignment        = 8
+ERASE_POLARITY     = 1
+MEMORY_MAPPED      = TRUE
+STICKY_WRITE       = TRUE
+LOCK_CAP           = TRUE
+LOCK_STATUS        = TRUE
+WRITE_DISABLED_CAP = TRUE
+WRITE_ENABLED_CAP  = TRUE
+WRITE_STATUS       = TRUE
+WRITE_LOCK_CAP     = TRUE
+WRITE_LOCK_STATUS  = TRUE
+READ_DISABLED_CAP  = TRUE
+READ_ENABLED_CAP   = TRUE
+READ_STATUS        = TRUE
+READ_LOCK_CAP      = TRUE
+READ_LOCK_STATUS   = TRUE
+
+  INF ArmPlatformPkg/PrePi/PeiMPCore.inf
+
+  FILE FV_IMAGE = 9E21FD93-9C72-4c15-8C4B-E77F1DB2D792 {
+    SECTION GUIDED EE4E5898-3914-4259-9D6E-DC7BD79403CF PROCESSING_REQUIRED = TRUE {
+      SECTION FV_IMAGE = FVMAIN
+    }
+  }
+
+
+################################################################################
+#
+# Rules are use with the [FV] section's module INF type to define
+# how an FFS file is created for a given INF file. The following Rule are the default
+# rules for the different module type. User can add the customized rules to define the
+# content of the FFS file.
+#
+################################################################################
+
+
+############################################################################
+# Example of a DXE_DRIVER FFS file with a Checksum encapsulation section   #
+############################################################################
+#
+#[Rule.Common.DXE_DRIVER]
+#  FILE DRIVER = $(NAMED_GUID) {
+#    DXE_DEPEX    DXE_DEPEX               Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
+#    COMPRESS PI_STD {
+#      GUIDED {
+#        PE32     PE32                    $(INF_OUTPUT)/$(MODULE_NAME).efi
+#        UI       STRING="$(MODULE_NAME)" Optional
+#        VERSION  STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
+#      }
+#    }
+#  }
+#
+############################################################################
+
+#
+# These SEC rules are used for ArmPlatformPkg/PrePi module.
+# ArmPlatformPkg/PrePi is declared as a SEC module to make GenFv patch the
+# UEFI Firmware to jump to ArmPlatformPkg/PrePi entrypoint
+#
+
+[Rule.Common.SEC]
+  FILE SEC = $(NAMED_GUID) RELOCS_STRIPPED FIXED {
+    TE  TE Align = Auto                 $(INF_OUTPUT)/$(MODULE_NAME).efi
+  }
+
+[Rule.Common.PEI_CORE]
+  FILE PEI_CORE = $(NAMED_GUID) {
+    TE     TE                           $(INF_OUTPUT)/$(MODULE_NAME).efi
+    UI     STRING ="$(MODULE_NAME)" Optional
+  }
+
+[Rule.Common.PEIM]
+  FILE PEIM = $(NAMED_GUID) {
+     PEI_DEPEX PEI_DEPEX Optional       $(INF_OUTPUT)/$(MODULE_NAME).depex
+     TE       TE                        $(INF_OUTPUT)/$(MODULE_NAME).efi
+     UI       STRING="$(MODULE_NAME)" Optional
+  }
+
+[Rule.Common.PEIM.TIANOCOMPRESSED]
+  FILE PEIM = $(NAMED_GUID) DEBUG_MYTOOLS_IA32 {
+    PEI_DEPEX PEI_DEPEX Optional        $(INF_OUTPUT)/$(MODULE_NAME).depex
+    GUIDED A31280AD-481E-41B6-95E8-127F4C984779 PROCESSING_REQUIRED = TRUE {
+      PE32      PE32                    $(INF_OUTPUT)/$(MODULE_NAME).efi
+      UI        STRING="$(MODULE_NAME)" Optional
+    }
+  }
+
+[Rule.Common.DXE_CORE]
+  FILE DXE_CORE = $(NAMED_GUID) {
+    PE32     PE32                       $(INF_OUTPUT)/$(MODULE_NAME).efi
+    UI       STRING="$(MODULE_NAME)" Optional
+  }
+
+[Rule.Common.UEFI_DRIVER]
+  FILE DRIVER = $(NAMED_GUID) {
+    DXE_DEPEX    DXE_DEPEX              Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
+    PE32         PE32                   $(INF_OUTPUT)/$(MODULE_NAME).efi
+    UI           STRING="$(MODULE_NAME)" Optional
+  }
+
+[Rule.Common.DXE_DRIVER]
+  FILE DRIVER = $(NAMED_GUID) {
+    DXE_DEPEX    DXE_DEPEX              Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
+    PE32         PE32                   $(INF_OUTPUT)/$(MODULE_NAME).efi
+    UI           STRING="$(MODULE_NAME)" Optional
+  }
+
+[Rule.Common.DXE_RUNTIME_DRIVER]
+  FILE DRIVER = $(NAMED_GUID) {
+    DXE_DEPEX    DXE_DEPEX              Optional $(INF_OUTPUT)/$(MODULE_NAME).depex
+    PE32         PE32                   $(INF_OUTPUT)/$(MODULE_NAME).efi
+    UI           STRING="$(MODULE_NAME)" Optional
+  }
+
+[Rule.Common.UEFI_APPLICATION]
+  FILE APPLICATION = $(NAMED_GUID) {
+    UI     STRING ="$(MODULE_NAME)" Optional
+    PE32   PE32                         $(INF_OUTPUT)/$(MODULE_NAME).efi
+  }
+
+[Rule.Common.UEFI_DRIVER.BINARY]
+  FILE DRIVER = $(NAMED_GUID) {
+    DXE_DEPEX DXE_DEPEX Optional      |.depex
+    PE32      PE32                    |.efi
+    UI        STRING="$(MODULE_NAME)" Optional
+    VERSION   STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
+  }
+
+[Rule.Common.UEFI_APPLICATION.BINARY]
+  FILE APPLICATION = $(NAMED_GUID) {
+    PE32      PE32                    |.efi
+    UI        STRING="$(MODULE_NAME)" Optional
+    VERSION   STRING="$(INF_VERSION)" Optional BUILD_NUM=$(BUILD_NUMBER)
+  }
+
+[Rule.Common.USER_DEFINED.ACPITABLE]
+  FILE FREEFORM = $(NAMED_GUID) {
+    RAW ACPI               |.acpi
+    RAW ASL                |.aml
+  }