[edk2-devel] [PATCH v1 01/10] Silicon/Phytium: Added PlatformLib to FT2000/4

贾玲 jialing at phytium.com.cn
Thu Feb 18 02:47:28 UTC 2021


Hi Leif,

Thank you for your reply.  I'm glad to hear from you!

I received a total of ten replies, and the contents of the reply seems to be quoted from the original. Is there any problems with our code submission? Please advise us what to do next. Thank you very much!

Best Regards,

Ling


> -----原始邮件-----
> 发件人: "Leif Lindholm" <leif at nuviainc.com>
> 发送时间: 2021-02-10 23:24:45 (星期三)
> 收件人: "Ling Jia" <jialing at phytium.com.cn>
> 抄送: devel at edk2.groups.io
> 主题: Re: [PATCH v1 01/10] Silicon/Phytium: Added PlatformLib to FT2000/4
> 
> On Fri, Feb 05, 2021 at 18:06:21 +0800, Ling Jia wrote:
> > The PlatformLib supported the system
> > library for FT2000/4 chip.
> > Platform/Phytium: Added the dsc and fdf files of DurianPkg.
> > 
> > Signed-off-by: Ling Jia <jialing at phytium.com.cn>
> > ---
> >  Silicon/Phytium/PhytiumCommonPkg/PhytiumCommonPkg.dec                           |  41 +++
> >  Silicon/Phytium/PhytiumCommonPkg/PhytiumCommonPkg.dsc.inc                       | 345 ++++++++++++++++++++
> >  Platform/Phytium/DurianPkg/DurianPkg.dsc                                        | 278 ++++++++++++++++
> >  Platform/Phytium/DurianPkg/DurianPkg.fdf                                        | 199 +++++++++++
> >  Silicon/Phytium/FT2000-4Pkg/Library/PlatformLib/PlatformLib.inf                 |  55 ++++
> >  Silicon/Phytium/PhytiumCommonPkg/Include/SystemServiceInterface.h               | 112 +++++++
> >  Silicon/Phytium/FT2000-4Pkg/Library/PlatformLib/PlatformLib.c                   | 137 ++++++++
> >  Silicon/Phytium/FT2000-4Pkg/Library/PlatformLib/PlatformLibMem.c                | 156 +++++++++
> >  Silicon/Phytium/FT2000-4Pkg/Library/PlatformLib/AArch64/PhytiumPlatformHelper.S |  76 +++++
> >  Silicon/Phytium/PhytiumCommonPkg/PhytiumCommonPkg.fdf.inc                       | 119 +++++++
> >  10 files changed, 1518 insertions(+)
> > 
> > diff --git a/Silicon/Phytium/PhytiumCommonPkg/PhytiumCommonPkg.dec b/Silicon/Phytium/PhytiumCommonPkg/PhytiumCommonPkg.dec
> > new file mode 100644
> > index 000000000000..48f430c88de6
> > --- /dev/null
> > +++ b/Silicon/Phytium/PhytiumCommonPkg/PhytiumCommonPkg.dec
> > @@ -0,0 +1,41 @@
> > +## @file
> > +# This package provides common Phytium silicon modules.
> > +#
> > +# Copyright (C) 2020, Phytium Technology Co,Ltd. All rights reserved.
> > +#
> > +# SPDX-License-Identifier:BSD-2-Clause-Patent
> > +#
> > +##
> > +
> > +[Defines]
> > +  DEC_SPECIFICATION              = 0x0001001b
> > +  PACKAGE_NAME                   = PhytiumCommnonPkg
> > +  PACKAGE_GUID                   = b34af0b4-3e7c-11eb-a9d0-0738806d2dec
> > +  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]
> > +  Include             # Root include for the package
> > +
> > +[Guids.common]
> > +  gPhytiumPlatformTokenSpaceGuid = { 0x8c3abed4, 0x1fc8, 0x46d3, { 0xb4, 0x17, 0xa3, 0x22, 0x38, 0x14, 0xde, 0x76 } }
> > +
> > +[PcdsFixedAtBuild.common]
> > +  gPhytiumPlatformTokenSpaceGuid.PcdSystemIoBase|0x0|UINT64|0x00000000
> > +  gPhytiumPlatformTokenSpaceGuid.PcdSystemIoSize|0x0|UINT64|0x00000001
> > +
> > +  #
> > +  # PCI configuration address space
> > +  #
> > +  gPhytiumPlatformTokenSpaceGuid.PcdPciConfigBase|0x0|UINT64|0x00000002
> > +  gPhytiumPlatformTokenSpaceGuid.PcdPciConfigSize|0x0|UINT64|0x00000003
> > +
> > +[Protocols]
> > diff --git a/Silicon/Phytium/PhytiumCommonPkg/PhytiumCommonPkg.dsc.inc b/Silicon/Phytium/PhytiumCommonPkg/PhytiumCommonPkg.dsc.inc
> > new file mode 100644
> > index 000000000000..121fe0e7c549
> > --- /dev/null
> > +++ b/Silicon/Phytium/PhytiumCommonPkg/PhytiumCommonPkg.dsc.inc
> > @@ -0,0 +1,345 @@
> > +## @file
> > +# This package provides common open source Phytium silicon modules.
> > +#
> > +# Copyright (C) 2020, Phytium Technology Co, Ltd. All rights reserved.
> > +#
> > +# SPDX-License-Identifier:BSD-2-Clause-Patent
> > +#
> > +##
> > +
> > +
> > +[LibraryClasses.common]
> > +  #
> > +  # ARM Architectural Libraries
> > +  #
> > +  ArmDisassemblerLib|ArmPkg/Library/ArmDisassemblerLib/ArmDisassemblerLib.inf
> > +  ArmGicLib|ArmPkg/Drivers/ArmGic/ArmGicLib.inf
> > +  ArmGicArchLib|ArmPkg/Library/ArmGicArchLib/ArmGicArchLib.inf
> > +  ArmPlatformStackLib|ArmPlatformPkg/Library/ArmPlatformStackLib/ArmPlatformStackLib.inf
> > +  ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf
> > +  ArmGenericTimerCounterLib|ArmPkg/Library/ArmGenericTimerPhyCounterLib/ArmGenericTimerPhyCounterLib.inf
> > +  ArmMmuLib|ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf
> > +  ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf
> > +
> > +  AcpiLib|EmbeddedPkg/Library/AcpiLib/AcpiLib.inf
> > +  AuthVariableLib|MdeModulePkg/Library/AuthVariableLibNull/AuthVariableLibNull.inf
> > +
> > +  BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
> > +  BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf
> > +  BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
> > +  BootLogoLib|MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf
> > +  BmpSupportLib|MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLib.inf
> > +
> > +  CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
> > +  CpuLib|MdePkg/Library/BaseCpuLib/BaseCpuLib.inf
> > +  CpuExceptionHandlerLib|ArmPkg/Library/ArmExceptionLib/ArmExceptionLib.inf
> > +  CacheMaintenanceLib|ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.inf
> > +  CustomizedDisplayLib|MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf
> > +  !if $(TARGET) == RELEASE
> > +    DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
> > +  !else
> > +    DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf
> > +  !endif
> > +
> > +  DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
> > +  DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf
> > +  DebugPrintErrorLevelLib|MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib.inf
> > +  DefaultExceptionHandlerLib|ArmPkg/Library/DefaultExceptionHandlerLib/DefaultExceptionHandlerLib.inf
> > +  DebugAgentLib|MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.inf
> > +  DebugAgentTimerLib|EmbeddedPkg/Library/DebugAgentTimerLibNull/DebugAgentTimerLibNull.inf
> > +  DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
> > +
> > +  FdtLib|EmbeddedPkg/Library/FdtLib/FdtLib.inf
> > +  FileExplorerLib|MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf
> > +  FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf
> > +
> > +  HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
> > +  HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf
> > +  HandleParsingLib|ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.inf
> > +
> > +  IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
> > +  IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf
> > +
> > +  OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
> > +
> > +  PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
> > +  PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
> > +  PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf
> > +  PeCoffLib|MdePkg/Library/BasePeCoffLib/BasePeCoffLib.inf
> > +  PeCoffExtraActionLib|MdePkg/Library/BasePeCoffExtraActionLibNull/BasePeCoffExtraActionLibNull.inf
> > +  PlatformPeiLib|ArmPlatformPkg/PlatformPei/PlatformPeiLib.inf
> > +  PlatformSecureLib|SecurityPkg/Library/PlatformSecureLibNull/PlatformSecureLibNull.inf
> > +  PlatformBootManagerLib|ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
> > +  PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
> > +
> > +  RngLib|MdePkg/Library/BaseRngLibTimerLib/BaseRngLibTimerLib.inf
> > +  ReportStatusCodeLib|MdePkg/Library/BaseReportStatusCodeLibNull/BaseReportStatusCodeLibNull.inf
> > +
> > +  SynchronizationLib|MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf
> > +  ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
> > +  SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
> > +  ShellCommandLib|ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.inf
> > +  SafeIntLib|MdePkg/Library/BaseSafeIntLib/BaseSafeIntLib.inf
> > +
> > +  TimerLib|ArmPkg/Library/ArmArchTimerLib/ArmArchTimerLib.inf
> > +  TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.inf
> > +
> > +  UefiLib|MdePkg/Library/UefiLib/UefiLib.inf
> > +  UefiRuntimeLib|MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf
> > +  UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf
> > +  UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf
> > +  UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
> > +  UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
> > +  UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
> > +  UefiHiiServicesLib|MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesLib.inf
> > +  UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
> > +
> > +  VarCheckLib|MdeModulePkg/Library/VarCheckLib/VarCheckLib.inf
> > +  VariablePolicyHelperLib|MdeModulePkg/Library/VariablePolicyHelperLib/VariablePolicyHelperLib.inf
> > +
> > +  #
> > +  # Scsi Requirements
> > +  #
> > +  UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf
> > +
> > +  #
> > +  # USB Requirements
> > +  #
> > +  UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf
> > +
> > +  #
> > +  # Networking Requirements
> > +  #
> > +  DpcLib|NetworkPkg/Library/DxeDpcLib/DxeDpcLib.inf
> > +  IpIoLib|NetworkPkg/Library/DxeIpIoLib/DxeIpIoLib.inf
> > +  NetLib|NetworkPkg/Library/DxeNetLib/DxeNetLib.inf
> > +  UdpIoLib|NetworkPkg/Library/DxeUdpIoLib/DxeUdpIoLib.inf
> > +  HttpLib|NetworkPkg/Library/DxeHttpLib/DxeHttpLib.inf
> > +
> > +[LibraryClasses.common.SEC]
> > +  ArmGicArchLib|ArmPkg/Library/ArmGicArchSecLib/ArmGicArchSecLib.inf
> > +  DebugAgentLib|ArmPkg/Library/DebugAgentSymbolsBaseLib/DebugAgentSymbolsBaseLib.inf
> > +  ExtractGuidedSectionLib|EmbeddedPkg/Library/PrePiExtractGuidedSectionLib/PrePiExtractGuidedSectionLib.inf
> > +  LzmaDecompressLib|MdeModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf
> > +  MemoryAllocationLib|EmbeddedPkg/Library/PrePiMemoryAllocationLib/PrePiMemoryAllocationLib.inf
> > +  HobLib|EmbeddedPkg/Library/PrePiHobLib/PrePiHobLib.inf
> > +  PrePiLib|EmbeddedPkg/Library/PrePiLib/PrePiLib.inf
> > +  PrePiHobListPointerLib|ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf
> > +  PerformanceLib|MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.inf
> > +
> > +[LibraryClasses.common.SEC, LibraryClasses.common.PEIM]
> > +  MemoryInitPeiLib|ArmPlatformPkg/MemoryInitPei/MemoryInitPeiLib.inf
> > +
> > +[LibraryClasses.common.DXE_CORE]
> > +  DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf
> > +  DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
> > +  ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf
> > +  HobLib|MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf
> > +  MemoryAllocationLib|MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationLib.inf
> > +  PerformanceLib|MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.inf
> > +
> > +[LibraryClasses.common.DXE_DRIVER]
> > +  DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
> > +  MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
> > +  SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf
> > +  PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
> > +  VariablePolicyLib|MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLib.inf
> > +
> > +[LibraryClasses.common.UEFI_APPLICATION]
> > +  DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
> > +  HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf
> > +  MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
> > +
> > +  #
> > +  # UiApp dependencies
> > +  #
> > +  FileExplorerLib|MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf
> > +  PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
> > +
> > +[LibraryClasses.common.UEFI_DRIVER]
> > +  ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf
> > +  PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf
> > +  DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
> > +  MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
> > +
> > +[LibraryClasses.common.DXE_RUNTIME_DRIVER]
> > +  !if $(SECURE_BOOT_ENABLE) == TRUE
> > +    BaseCryptLib|CryptoPkg/Library/BaseCryptLib/RuntimeCryptLib.inf
> > +  !endif
> > +
> > +  CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
> > +
> > +  !if $(TARGET) != RELEASE
> > +    DebugLib|MdePkg/Library/DxeRuntimeDebugLibSerialPort/DxeRuntimeDebugLibSerialPort.inf
> > +  !endif
> > +
> > +  HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
> > +  MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
> > +  ReportStatusCodeLib|MdeModulePkg/Library/RuntimeDxeReportStatusCodeLib/RuntimeDxeReportStatusCodeLib.inf
> > +  VariablePolicyLib|MdeModulePkg/Library/VariablePolicyLib/VariablePolicyLibRuntimeDxe.inf
> > +
> > +[LibraryClasses.AARCH64.DXE_RUNTIME_DRIVER]
> > +  EfiResetSystemLib|ArmPkg/Library/ArmPsciResetSystemLib/ArmPsciResetSystemLib.inf
> > +
> > +[LibraryClasses.ARM, LibraryClasses.AARCH64]
> > +  NULL|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf
> > +
> > +  #
> > +  # Add support for GCC stack protector
> > +  #
> > +  NULL|MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.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]
> > +  RVCT:RELEASE_*_*_CC_FLAGS  = -DMDEPKG_NDEBUG
> > +  GCC:RELEASE_*_*_CC_FLAGS  = -DMDEPKG_NDEBUG
> > +
> > +[BuildOptions.AARCH64.EDKII.DXE_RUNTIME_DRIVER]
> > +  GCC:*_*_AARCH64_DLINK_FLAGS = -z common-page-size=0x10000
> > +
> > +################################################################################
> > +#
> > +# Pcd Section - list of all EDK II PCD Entries defined by this Platform
> > +#
> > +################################################################################
> > +
> > +[PcdsFeatureFlag.common]
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|TRUE
> > +  gArmTokenSpaceGuid.PcdArmGicV3WithV2Legacy|FALSE
> > +  gEfiMdePkgTokenSpaceGuid.PcdComponentNameDisable|FALSE
> > +  gEfiMdePkgTokenSpaceGuid.PcdDriverDiagnosticsDisable|TRUE
> > +  gEfiMdePkgTokenSpaceGuid.PcdComponentName2Disable|TRUE
> > +  gEfiMdePkgTokenSpaceGuid.PcdDriverDiagnostics2Disable|TRUE
> > +
> > +  gEmbeddedTokenSpaceGuid.PcdPrePiProduceMemoryTypeInformationHob|TRUE
> > +
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdTurnOffUsbLegacySupport|TRUE
> > +
> > +  # Use the Vector Table location in CpuDxe. We will not copy the Vector Table at PcdCpuVectorBaseAddress
> > +  gArmTokenSpaceGuid.PcdRelocateVectorTable|FALSE
> > +
> > +  gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultLangDeprecate|TRUE
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdInstallAcpiSdtProtocol|TRUE
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdPciBusHotplugDeviceSupport|FALSE
> > +
> > +[PcdsFixedAtBuild.common]
> > +  gEfiMdePkgTokenSpaceGuid.PcdMaximumUnicodeStringLength|1000000
> > +  gEfiMdePkgTokenSpaceGuid.PcdMaximumAsciiStringLength|1000000
> > +  gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|1000000
> > +  gEfiMdePkgTokenSpaceGuid.PcdSpinLockTimeout|10000000
> > +  gEfiMdePkgTokenSpaceGuid.PcdDebugClearMemoryValue|0xAF
> > +  gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask|0
> > +  gEfiMdePkgTokenSpaceGuid.PcdPostCodePropertyMask|0
> > +  gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|320
> > +  gEfiNetworkPkgTokenSpaceGuid.PcdAllowHttpConnections|TRUE
> > +
> > +!if $(TARGET) == RELEASE
> > +  gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x21
> > +!else
> > +  gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x2f
> > +!endif
> > +
> > +  #  DEBUG_INIT      0x00000001  // Initialization
> > +  #  DEBUG_WARN      0x00000002  // Warnings
> > +  #  DEBUG_LOAD      0x00000004  // Load events
> > +  #  DEBUG_FS        0x00000008  // EFI File system
> > +  #  DEBUG_POOL      0x00000010  // Alloc & Free's
> > +  #  DEBUG_PAGE      0x00000020  // Alloc & Free's
> > +  #  DEBUG_INFO      0x00000040  // Verbose
> > +  #  DEBUG_DISPATCH  0x00000080  // PEI/DXE Dispatchers
> > +  #  DEBUG_VARIABLE  0x00000100  // Variable
> > +  #  DEBUG_BM        0x00000400  // Boot Manager
> > +  #  DEBUG_BLKIO     0x00001000  // BlkIo Driver
> > +  #  DEBUG_NET       0x00004000  // SNI Driver
> > +  #  DEBUG_UNDI      0x00010000  // UNDI Driver
> > +  #  DEBUG_LOADFILE  0x00020000  // UNDI Driver
> > +  #  DEBUG_EVENT     0x00080000  // Event messages
> > +  #  DEBUG_GCD       0x00100000  // Global Coherency Database changes
> > +  #  DEBUG_CACHE     0x00200000  // Memory range cachability changes
> > +  #  DEBUG_ERROR     0x80000000  // Error
> > +  gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|0x80000046
> > +
> > +  gEfiMdePkgTokenSpaceGuid.PcdReportStatusCodePropertyMask|0x07
> > +
> > +  gEmbeddedTokenSpaceGuid.PcdTimerPeriod|200000
> > +
> > +  gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiACPIReclaimMemory|0
> > +  gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiACPIMemoryNVS|0
> > +  gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiReservedMemoryType|0
> > +  gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesData|80
> > +  gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesCode|65
> > +  gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiBootServicesCode|400
> > +  gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiBootServicesData|20000
> > +  gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderCode|20
> > +  gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderData|0
> > +
> > +  gEfiShellPkgTokenSpaceGuid.PcdShellLibAutoInitialize|FALSE
> > +
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationChange|FALSE
> > +
> > +!if $(SECURE_BOOT_ENABLE) == TRUE
> > +  gEfiSecurityPkgTokenSpaceGuid.PcdOptionRomImageVerificationPolicy|0x04
> > +  gEfiSecurityPkgTokenSpaceGuid.PcdFixedMediaImageVerificationPolicy|0x04
> > +  gEfiSecurityPkgTokenSpaceGuid.PcdRemovableMediaImageVerificationPolicy|0x04
> > +!endif
> > +
> > +!if $(SECURE_BOOT_ENABLE) == TRUE
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize|0x10000
> > +!else
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize|0x4000
> > +!endif
> > +
> > +  # Default platform supported RFC 4646 languages: English & French & Chinese Simplified.
> > +  # Default Value of PlatformLangCodes Variable.
> > +  gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultPlatformLangCodes|"en-US;zh-Hans"
> > +
> > +  # Default current RFC 4646 language: Chinese Simplified.
> > +  # Default Value of PlatformLang Variable.
> > +  gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultPlatformLang|"en-US"
> > +  gEfiMdePkgTokenSpaceGuid.PcdDefaultTerminalType|4
> > +
> > +  #
> > +  # ACPI Table Version
> > +  #
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiExposedTableVersions|0x20
> > +
> > +  gArmPlatformTokenSpaceGuid.PL011UartInterrupt|67
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdSrIovSupport|FALSE
> > +
> > +[PcdsDynamicDefault.common.DEFAULT]
> > +  ## This PCD defines the video horizontal resolution.
> > +  #  This PCD could be set to 0 then video resolution could be at highest resolution.
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution|640
> > +  ## This PCD defines the video vertical resolution.
> > +  #  This PCD could be set to 0 then video resolution could be at highest resolution.
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution|480
> > +
> > +  ## This PCD defines the Console output row and the default value is 80 according to UEFI spec.
> > +  #  This PCD could be set to 0 then console output could be at max column and max row.
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdConOutColumn|128
> > +  ## This PCD defines the Console output column and the default value is 25 according to UEFI spec.
> > +  #  This PCD could be set to 0 then console output could be at max column and max row.
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdConOutRow|40
> > +
> > +  ## Specify the video horizontal resolution of text setup.
> > +  # @Prompt Video Horizontal Resolution of Text Setup
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoHorizontalResolution|640
> > +
> > +  ## Specify the video vertical resolution of text setup.
> > +  # @Prompt Video Vertical Resolution of Text Setup
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoVerticalResolution|480
> > +
> > +  ## Specify the console output column of text setup.
> > +  # @Prompt Console Output Column of Text Setup
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdSetupConOutColumn|128
> > +  ## Specify the console output row of text setup.
> > +  # @Prompt Console Output Row of Text Setup
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdSetupConOutRow|40
> > +
> > +  ## The number of seconds that the firmware will wait before initiating the original default boot selection.
> > +  #  A value of 0 indicates that the default boot selection is to be initiated immediately on boot.
> > +  #  The value of 0xFFFF then firmware will wait for user input before booting.
> > +  # @Prompt Boot Timeout (s)
> > +  gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|5
> > diff --git a/Platform/Phytium/DurianPkg/DurianPkg.dsc b/Platform/Phytium/DurianPkg/DurianPkg.dsc
> > new file mode 100644
> > index 000000000000..55eafa2e3a83
> > --- /dev/null
> > +++ b/Platform/Phytium/DurianPkg/DurianPkg.dsc
> > @@ -0,0 +1,278 @@
> > +## @file
> > +# This package provides common open source Phytium Platform modules.
> > +#
> > +# Copyright (C) 2020, Phytium Technology Co, Ltd. All rights reserved.
> > +#
> > +# SPDX-License-Identifier:BSD-2-Clause-Patent
> > +#
> > +##
> > +
> > +################################################################################
> > +#
> > +# Defines Section - statements that will be processed to create a Makefile.
> > +#
> > +################################################################################
> > +[Defines]
> > +  PLATFORM_NAME                  = DurianPkg
> > +  PLATFORM_GUID                  = 8f7ac876-3e7c-11eb-86cb-33f68535d613
> > +  PLATFORM_VERSION               = 0.1
> > +  DSC_SPECIFICATION              = 0x0001001c
> > +  OUTPUT_DIRECTORY               = Build/$(PLATFORM_NAME)
> > +  SUPPORTED_ARCHITECTURES        = AARCH64
> > +  BUILD_TARGETS                  = DEBUG|RELEASE|NOOPT
> > +  SKUID_IDENTIFIER               = DEFAULT
> > +  FLASH_DEFINITION               = Platform/Phytium/DurianPkg/DurianPkg.fdf
> > +
> > +!include Silicon/Phytium/PhytiumCommonPkg/PhytiumCommonPkg.dsc.inc
> > +
> > +[LibraryClasses.common]
> > +  # Phytium Platform library
> > +  ArmPlatformLib|Silicon/Phytium/FT2000-4Pkg/Library/PlatformLib/PlatformLib.inf
> > +
> > +  # PL011 UART Driver and Dependency Libraries
> > +  SerialPortLib|ArmPlatformPkg/Library/PL011SerialPortLib/PL011SerialPortLib.inf
> > +  PL011UartClockLib|ArmPlatformPkg/Library/PL011UartClockLib/PL011UartClockLib.inf
> > +  PL011UartLib|ArmPlatformPkg/Library/PL011UartLib/PL011UartLib.inf
> > +
> > +[LibraryClasses.common.DXE_DRIVER]
> > +
> > +
> > +################################################################################
> > +#
> > +# Pcd Section - list of all EDK II PCD Entries defined by this Platform
> > +#
> > +################################################################################
> > +[PcdsFixedAtBuild.common]
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVendor|L"Durian Platform"
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVersionString|L"V1.0"
> > +
> > +  gArmTokenSpaceGuid.PcdVFPEnabled|1
> > +  gArmTokenSpaceGuid.PcdArmPrimaryCoreMask|0x101
> > +  gArmTokenSpaceGuid.PcdArmPrimaryCore|0x0
> > +  gArmPlatformTokenSpaceGuid.PcdCoreCount|4
> > +
> > +  #
> > +  # NV Storage PCDs.
> > +  #
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0xe00000
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize|0x00010000
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase64|0xe10000
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize|0x00010000
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase64|0xe20000
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize|0x00010000
> > +
> > +  # Size of the region used by UEFI in permanent memory (Reserved 64MB)
> > +  gArmPlatformTokenSpaceGuid.PcdSystemMemoryUefiRegionSize|0x04000000
> > +
> > +  #
> > +  # PL011 - Serial Terminal
> > +  #
> > +  gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase|0x28001000
> > +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultReceiveFifoDepth|0
> > +  gArmPlatformTokenSpaceGuid.PL011UartClkInHz|48000000
> > +  gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate|115200
> > +
> > +  #
> > +  # ARM General Interrupt Controller
> > +  #
> > +  gArmTokenSpaceGuid.PcdGicDistributorBase|0x29900000
> > +  gArmTokenSpaceGuid.PcdGicRedistributorsBase|0x29980000
> > +  gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase|0x29c00000
> > +
> > +  # System IO space
> > +  gPhytiumPlatformTokenSpaceGuid.PcdSystemIoBase|0x0
> > +  gPhytiumPlatformTokenSpaceGuid.PcdSystemIoSize|0x40000000
> > +
> > +  #
> > +  # System Memory (2GB ~ 4GB - 64MB), the top 64MB is reserved for
> > +  # PBF(the processor basic firmware, Mainly deals the initialization
> > +  # of the chip).
> > +  #
> > +  gArmTokenSpaceGuid.PcdSystemMemoryBase|0x80000000
> > +  gArmTokenSpaceGuid.PcdSystemMemorySize|0x7B000000
> > +
> > +  # Stack Size
> > +  gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize|0x4000
> > +
> > +################################################################################
> > +#
> > +# Components Section - list of all EDK II Modules needed by this Platform
> > +#
> > +################################################################################
> > +[Components.common]
> > +  #
> > +  # PCD database
> > +  #
> > +  MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
> > +
> > +  ShellPkg/DynamicCommand/TftpDynamicCommand/TftpDynamicCommand.inf
> > +  ShellPkg/Application/Shell/Shell.inf {
> > +    <LibraryClasses>
> > +      ShellCommandLib|ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.inf
> > +      NULL|ShellPkg/Library/UefiShellLevel2CommandsLib/UefiShellLevel2CommandsLib.inf
> > +      NULL|ShellPkg/Library/UefiShellLevel1CommandsLib/UefiShellLevel1CommandsLib.inf
> > +      NULL|ShellPkg/Library/UefiShellLevel3CommandsLib/UefiShellLevel3CommandsLib.inf
> > +      NULL|ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.inf
> > +      NULL|ShellPkg/Library/UefiShellAcpiViewCommandLib/UefiShellAcpiViewCommandLib.inf
> > +      NULL|ShellPkg/Library/UefiShellDebug1CommandsLib/UefiShellDebug1CommandsLib.inf
> > +      NULL|ShellPkg/Library/UefiShellInstall1CommandsLib/UefiShellInstall1CommandsLib.inf
> > +      NULL|ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.inf
> > +      HandleParsingLib|ShellPkg/Library/UefiHandleParsingLib/UefiHandleParsingLib.inf
> > +      PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
> > +      BcfgCommandLib|ShellPkg/Library/UefiShellBcfgCommandLib/UefiShellBcfgCommandLib.inf
> 
> Due to upstream changes in edk2, you now also need to add
>          OrderedCollectionLib|MdePkg/Library/BaseOrderedCollectionRedBlackTreeLib/BaseOrderedCollectionRedBlackTreeLib.inf
> in this location.
> 
> With this:
> Reviewed-by: Leif Lindholm <leif at nuviainc.com>
> 
> /
>     Leif
> 
> > +  }
> > +
> > +  ArmPlatformPkg/PrePi/PeiMPCore.inf {
> > +    <LibraryClasses>
> > +      ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf
> > +  }
> > +
> > +  #
> > +  # Dxe core entry
> > +  #
> > +  MdeModulePkg/Core/Dxe/DxeMain.inf {
> > +    <LibraryClasses>
> > +      PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
> > +      NULL|MdeModulePkg/Library/DxeCrc32GuidedSectionExtractLib/DxeCrc32GuidedSectionExtractLib.inf
> > +  }
> > +
> > +  #
> > +  # DXE driver
> > +  #
> > +  MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
> > +  MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
> > +  MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf {
> > +    <LibraryClasses>
> > +      NULL|MdeModulePkg/Library/VarCheckUefiLib/VarCheckUefiLib.inf
> > +  }
> > +  MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf
> > +
> > +  #
> > +  # Common Arm Timer and Gic Components
> > +  #
> > +  ArmPkg/Drivers/CpuDxe/CpuDxe.inf
> > +  ArmPkg/Drivers/ArmGic/ArmGicDxe.inf
> > +  EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf
> > +  ArmPkg/Drivers/TimerDxe/TimerDxe.inf
> > +
> > +  #
> > +  # security system
> > +  #
> > +  MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf {
> > +    <LibraryClasses>
> > +      NULL|SecurityPkg/Library/DxeImageVerificationLib/DxeImageVerificationLib.inf
> > +  }
> > +
> > +  #
> > +  # network,  mod for https boot.
> > +  #
> > +  NetworkPkg/SnpDxe/SnpDxe.inf
> > +  NetworkPkg/DpcDxe/DpcDxe.inf
> > +  NetworkPkg/MnpDxe/MnpDxe.inf
> > +  NetworkPkg/ArpDxe/ArpDxe.inf
> > +  NetworkPkg/Dhcp4Dxe/Dhcp4Dxe.inf
> > +  NetworkPkg/Ip4Dxe/Ip4Dxe.inf
> > +  NetworkPkg/Mtftp4Dxe/Mtftp4Dxe.inf
> > +  NetworkPkg/Udp4Dxe/Udp4Dxe.inf
> > +  NetworkPkg/VlanConfigDxe/VlanConfigDxe.inf
> > +
> > +  NetworkPkg/Ip6Dxe/Ip6Dxe.inf
> > +  NetworkPkg/Udp6Dxe/Udp6Dxe.inf
> > +  NetworkPkg/Dhcp6Dxe/Dhcp6Dxe.inf
> > +  NetworkPkg/Mtftp6Dxe/Mtftp6Dxe.inf
> > +  NetworkPkg/TcpDxe/TcpDxe.inf
> > +
> > +  NetworkPkg/UefiPxeBcDxe/UefiPxeBcDxe.inf
> > +
> > +  NetworkPkg/DnsDxe/DnsDxe.inf
> > +  NetworkPkg/HttpUtilitiesDxe/HttpUtilitiesDxe.inf
> > +  NetworkPkg/HttpDxe/HttpDxe.inf
> > +
> > +  #
> > +  # FV Filesystem
> > +  #
> > +  MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystemDxe.inf
> > +
> > +  #
> > +  # Common Console Components
> > +  # ConIn,ConOut,StdErr
> > +  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
> > +
> > +  SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.inf
> > +
> > +  #
> > +  # Hii database init
> > +  #
> > +  MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.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
> > +  FatPkg/EnhancedFatDxe/Fat.inf
> > +
> > +  #
> > +  # Generic Watchdog Timer
> > +  #
> > +  ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdogDxe.inf
> > +
> > +  #
> > +  # Usb Support
> > +  #
> > +  MdeModulePkg/Bus/Pci/UhciDxe/UhciDxe.inf
> > +  MdeModulePkg/Bus/Pci/EhciDxe/EhciDxe.inf
> > +  MdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf
> > +  MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf
> > +  MdeModulePkg/Bus/Usb/UsbKbDxe/UsbKbDxe.inf
> > +  MdeModulePkg/Bus/Usb/UsbMouseDxe/UsbMouseDxe.inf
> > +  MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf
> > +
> > +  #
> > +  # IDE/AHCI Support
> > +  #
> > +  MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf
> > +  MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
> > +  MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf
> > +  MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf
> > +  MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
> > +
> > +  #
> > +  # PCI Support
> > +  #
> > +  ArmPkg/Drivers/ArmPciCpuIo2Dxe/ArmPciCpuIo2Dxe.inf
> > +  MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceDxe.inf
> > +
> > +  #
> > +  # The following 2 module perform the same work except one operate variable.
> > +  # Only one of both should be put into fdf.
> > +  #
> > +  MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf
> > +
> > +  #
> > +  # NVME Support
> > +  #
> > +  MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf
> > +
> > +
> > +  #
> > +  # Bds
> > +  #
> > +  MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
> > +  MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
> > +  MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
> > +  MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
> > +  MdeModulePkg/Universal/DriverSampleDxe/DriverSampleDxe.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
> > +  }
> > +  MdeModulePkg/Application/BootManagerMenuApp/BootManagerMenuApp.inf
> > +
> > diff --git a/Platform/Phytium/DurianPkg/DurianPkg.fdf b/Platform/Phytium/DurianPkg/DurianPkg.fdf
> > new file mode 100644
> > index 000000000000..6470d53532df
> > --- /dev/null
> > +++ b/Platform/Phytium/DurianPkg/DurianPkg.fdf
> > @@ -0,0 +1,199 @@
> > +## @file
> > +# This package provides common open source Phytium Platform modules.
> > +#
> > +# Copyright (C) 2020, Phytium Technology Co, Ltd. All rights reserved.
> > +#
> > +# SPDX-License-Identifier:BSD-2-Clause-Patent
> > +#
> > +##
> > +
> > +################################################################################
> > +#
> > +# 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.PHYTIUM]
> > +BaseAddress   = 0x88000000|gArmTokenSpaceGuid.PcdFdBaseAddress
> > +Size          = 0x01000000|gArmTokenSpaceGuid.PcdFdSize
> > +ErasePolarity = 1
> > +
> > +# This one is tricky, it must be: BlockSize * NumBlocks = Size
> > +BlockSize     = 0x10000
> > +NumBlocks     = 0x100
> > +
> > +################################################################################
> > +#
> > +# 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|0x200000
> > +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        = 16         # 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
> > +
> > +  APRIORI DXE {
> > +    INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
> > +  }
> > +
> > +  INF MdeModulePkg/Core/Dxe/DxeMain.inf
> > +  INF MdeModulePkg/Universal/PCD/Dxe/Pcd.inf
> > +
> > +  #
> > +  # PI DXE Drivers producing Architectural Protocols (EFI Services)
> > +  #
> > +  INF MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf
> > +  INF MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf
> > +  INF EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf
> > +
> > +  INF MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf
> > +  INF MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf
> > +
> > +  INF ArmPkg/Drivers/ArmGic/ArmGicDxe.inf
> > +  INF ArmPkg/Drivers/CpuDxe/CpuDxe.inf
> > +  INF ArmPkg/Drivers/TimerDxe/TimerDxe.inf
> > +  INF ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdogDxe.inf
> > +
> > +  #
> > +  # Variable services
> > +  #
> > +  INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf
> > +  INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf
> > +
> > +  INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf
> > +
> > +  #
> > +  # Multiple Console IO support
> > +  #
> > +  INF MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf
> > +  INF MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf
> > +  INF MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsoleDxe.inf
> > +  INF MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf
> > +  INF MdeModulePkg/Universal/SerialDxe/SerialDxe.inf
> > +
> > +  #
> > +  # FAT filesystem + GPT/MBR partitioning
> > +  #
> > +  INF MdeModulePkg/Universal/Disk/DiskIoDxe/DiskIoDxe.inf
> > +  INF MdeModulePkg/Universal/Disk/PartitionDxe/PartitionDxe.inf
> > +  INF FatPkg/EnhancedFatDxe/Fat.inf
> > +  INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
> > +
> > +  #
> > +  # SATA Controller
> > +  #
> > +  INF MdeModulePkg/Bus/Pci/SataControllerDxe/SataControllerDxe.inf
> > +  INF MdeModulePkg/Bus/Ata/AtaBusDxe/AtaBusDxe.inf
> > +  INF MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf
> > +  INF MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf
> > +  INF MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AtaAtapiPassThru.inf
> > +
> > +  #
> > +  # NVMe boot devices
> > +  #
> > +  INF MdeModulePkg/Bus/Pci/NvmExpressDxe/NvmExpressDxe.inf
> > +
> > +  #
> > +  # NetWork
> > +  #
> > +  INF NetworkPkg/SnpDxe/SnpDxe.inf
> > +  INF NetworkPkg/DpcDxe/DpcDxe.inf
> > +  INF NetworkPkg/MnpDxe/MnpDxe.inf
> > +  INF NetworkPkg/ArpDxe/ArpDxe.inf
> > +  INF NetworkPkg/Dhcp4Dxe/Dhcp4Dxe.inf
> > +  INF NetworkPkg/Ip4Dxe/Ip4Dxe.inf
> > +  INF NetworkPkg/Mtftp4Dxe/Mtftp4Dxe.inf
> > +  INF NetworkPkg/Udp4Dxe/Udp4Dxe.inf
> > +  INF NetworkPkg/VlanConfigDxe/VlanConfigDxe.inf
> > +
> > +  #
> > +  # UEFI applications
> > +  #
> > +  INF ShellPkg/Application/Shell/Shell.inf
> > +
> > +  #
> > +  # Bds
> > +  #
> > +  INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
> > +  INF MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf
> > +  INF MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
> > +  INF MdeModulePkg/Universal/DriverSampleDxe/DriverSampleDxe.inf
> > +  INF MdeModulePkg/Universal/BdsDxe/BdsDxe.inf
> > +  INF MdeModulePkg/Application/UiApp/UiApp.inf
> > +
> > +[FV.FVMAIN_COMPACT]
> > +FvAlignment        = 16
> > +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
> > +    }
> > +  }
> > +
> > +!include Silicon/Phytium/PhytiumCommonPkg/PhytiumCommonPkg.fdf.inc
> > diff --git a/Silicon/Phytium/FT2000-4Pkg/Library/PlatformLib/PlatformLib.inf b/Silicon/Phytium/FT2000-4Pkg/Library/PlatformLib/PlatformLib.inf
> > new file mode 100644
> > index 000000000000..40c070767a96
> > --- /dev/null
> > +++ b/Silicon/Phytium/FT2000-4Pkg/Library/PlatformLib/PlatformLib.inf
> > @@ -0,0 +1,55 @@
> > +#/** @file
> > +#  Library for Phytium Platform.
> > +#
> > +#  Copyright (C) 2020, Phytium Technology Co, Ltd. All rights reserved.<BR>
> > +#
> > +#  SPDX-License-Identifier: BSD-2-Clause-Patent
> > +#
> > +#**/
> > +
> > +[Defines]
> > +  INF_VERSION                    = 0x0001001b
> > +  BASE_NAME                      = PlatformLib
> > +  FILE_GUID                      = fac08f56-40fe-11eb-a2a3-27b46864b1f3
> > +  MODULE_TYPE                    = BASE
> > +  VERSION_STRING                 = 1.0
> > +  LIBRARY_CLASS                  = ArmPlatformLib
> > +
> > +[Packages]
> > +  ArmPkg/ArmPkg.dec
> > +  ArmPlatformPkg/ArmPlatformPkg.dec
> > +  MdePkg/MdePkg.dec
> > +  MdeModulePkg/MdeModulePkg.dec
> > +  Silicon/Phytium/PhytiumCommonPkg/PhytiumCommonPkg.dec
> > +
> > +[LibraryClasses]
> > +  ArmSmcLib
> > +  HobLib
> > +
> > +[Sources.common]
> > +  PlatformLib.c
> > +  PlatformLibMem.c
> > +
> > +[Sources.AARCH64]
> > +  AArch64/PhytiumPlatformHelper.S
> > +
> > +[Guids]
> > +
> > +[FixedPcd]
> > +  gPhytiumPlatformTokenSpaceGuid.PcdSystemIoBase
> > +  gPhytiumPlatformTokenSpaceGuid.PcdSystemIoSize
> > +  gPhytiumPlatformTokenSpaceGuid.PcdPciConfigBase
> > +  gPhytiumPlatformTokenSpaceGuid.PcdPciConfigSize
> > +  gArmTokenSpaceGuid.PcdPciBusMin
> > +  gArmTokenSpaceGuid.PcdPciBusMax
> > +  gArmTokenSpaceGuid.PcdPciIoBase
> > +  gArmTokenSpaceGuid.PcdPciIoSize
> > +  gArmTokenSpaceGuid.PcdPciIoTranslation
> > +  gArmTokenSpaceGuid.PcdPciMmio32Base
> > +  gArmTokenSpaceGuid.PcdPciMmio32Size
> > +  gArmTokenSpaceGuid.PcdPciMmio32Translation
> > +  gArmTokenSpaceGuid.PcdPciMmio64Base
> > +  gArmTokenSpaceGuid.PcdPciMmio64Size
> > +
> > +[Pcd]
> > +  gArmPlatformTokenSpaceGuid.PcdCoreCount
> > diff --git a/Silicon/Phytium/PhytiumCommonPkg/Include/SystemServiceInterface.h b/Silicon/Phytium/PhytiumCommonPkg/Include/SystemServiceInterface.h
> > new file mode 100644
> > index 000000000000..c4395153a3de
> > --- /dev/null
> > +++ b/Silicon/Phytium/PhytiumCommonPkg/Include/SystemServiceInterface.h
> > @@ -0,0 +1,112 @@
> > +/** @file
> > +
> > +  Copyright (C) 2020, Phytium Technology Co Ltd. All rights reserved.<BR>
> > +
> > +  SPDX-License-Identifier: BSD-2-Clause-Patent
> > +
> > +**/
> > +
> > +#ifndef SYSTEM_SERVICE_INTERFACE_H_
> > +#define SYSTEM_SERVICE_INTERFACE_H_
> > +
> > +/* SMC function IDs for OEM Service queries */
> > +#define PHYTIUM_OEM_SVC_PSSI_VERSION   0x8200ff03
> > +#define PHYTIUM_OEM_SVC_PBF_VERSION    0x82000001
> > +#define PHYTIUM_OEM_SVC_CPU_VERSION    0xc2000002
> > +#define PHYTIUM_OEM_SVC_CPU_MAPS       0xc2000003
> > +#define PHYTIUM_OEM_SVC_CPU_CONF       0xc2000004
> > +#define PHYTIUM_OEM_SVC_MEM_REGIONS    0xc2000005
> > +#define PHYTIUM_OEM_SVC_MCU_DIMMS      0xc2000006
> > +#define PHYTIUM_OEM_SVC_PCI_CONTROLLER 0xc2000007
> > +#define PHYTIUM_OEM_SVC_HOST_BRIDGE    0xc2000008
> > +#define PHYTIUM_OEM_SVC_GET_FLASH_CMD  0xC200000C
> > +
> > +#define PHYTIUM_IOBASE_MASK           0xfffffff
> > +#define PHYTIUM_MEMIO32_MASK          0xffffffff
> > +#define PHYTIUM_MEMIO64_MASK          0xffffffffff
> > +
> > +#pragma pack(1)
> > +
> > +typedef struct {
> > +  UINT64     CpuMapCount;
> > +  UINT64     CpuMap[1];
> > +} PHYTIUM_CPU_MAP_INFO;
> > +
> > +
> > +typedef struct {
> > +  UINT64     CpuFreq;             // Hz
> > +  UINT64     CpuL3CacheSize;      // Byte
> > +  UINT64     CpuL3CacheLineSize;  // Byte
> > +} PHYTIUM_CPU_COURE_INFO;
> > +
> > +typedef struct {
> > +  UINT64    CupVersion;       //cpu version
> > +  PHYTIUM_CPU_COURE_INFO CpuCoreInfo;    //cpu core info
> > +  PHYTIUM_CPU_MAP_INFO   CpuMapInfo;     //cpu map info
> > +}PHYTIUM_CPU_INFO;
> > +
> > +typedef struct {
> > +  UINT64     MemSize;    // MB
> > +  UINT64     MemDramId;
> > +  UINT64     MemModuleId;
> > +  UINT64     MemSerial;
> > +  UINT64     MemSlotNumber;
> > +  UINT64     MemFeatures;
> > +} MCU_DIMM;
> > +
> > +#define MCU_DIMM_MAXCOUNT 2
> > +
> > +typedef struct {
> > +  UINT64     MemFreq;    // MHz
> > +  UINT64     MemDimmCount;
> > +  MCU_DIMM   McuDimm[1];
> > +} MCU_DIMMS;
> > +
> > +typedef struct {
> > +  UINT64     MemStart;
> > +  UINT64     MemSize;
> > +  UINT64     MemNodeId;
> > +} MEMORY_BLOCK;
> > +
> > +typedef struct {
> > +  UINT64       MemBlockCount;
> > +  MEMORY_BLOCK MemBlock[1];
> > +} MEMORY_INFO;
> > +
> > +typedef struct {
> > +  UINT8    PciLane;
> > +  UINT8    PciSpeed;
> > +  UINT8    Reserved[6];
> > +} PCI_BLOCK;
> > +
> > +typedef struct {
> > +  UINT64       PciCount;
> > +  PCI_BLOCK    PciBlock[1];
> > +} PHYTIUM_PCI_CONTROLLER;
> > +
> > +typedef struct {
> > +  UINT8    BusStart;
> > +  UINT8    BusEnd;
> > +  UINT8    Reserved[6];
> > +  UINT64   PciConfigBase;
> > +  UINT64   IoBase;
> > +  UINT64   IoSize;
> > +  UINT64   Mem32Base;
> > +  UINT64   Mem32Size;
> > +  UINT64   Mem64Base;
> > +  UINT64   Mem64Size;
> > +  UINT16   IntA;
> > +  UINT16   IntB;
> > +  UINT16   IntC;
> > +  UINT16   IntD;
> > +} PCI_HOST_BLOCK;
> > +
> > +typedef struct {
> > +  UINT64          PciHostCount;
> > +  PCI_HOST_BLOCK  PciHostBlock[1];
> > +} PHYTIUM_PCI_HOST_BRIDGE;
> > +
> > +#pragma pack ()
> > +
> > +
> > +#endif // SYSTEM_SERVICE_INTERFACE_H_
> > diff --git a/Silicon/Phytium/FT2000-4Pkg/Library/PlatformLib/PlatformLib.c b/Silicon/Phytium/FT2000-4Pkg/Library/PlatformLib/PlatformLib.c
> > new file mode 100644
> > index 000000000000..6a8d22657489
> > --- /dev/null
> > +++ b/Silicon/Phytium/FT2000-4Pkg/Library/PlatformLib/PlatformLib.c
> > @@ -0,0 +1,137 @@
> > +/** @file
> > +  Library for Phytium platform.
> > +
> > +  Copyright (C) 2020, Phytium Technology Co Ltd. All rights reserved.<BR>
> > +
> > +  SPDX-License-Identifier: BSD-2-Clause-Patent
> > +
> > +**/
> > +
> > +#include <Library/ArmPlatformLib.h>
> > +#include <Library/DebugLib.h>
> > +#include <Library/IoLib.h>
> > +#include <Library/PcdLib.h>
> > +#include <Ppi/ArmMpCoreInfo.h>
> > +
> > +ARM_CORE_INFO mPhytiumMpCoreInfoTable[] = {
> > +  {
> > +    0x0, 0x0,              // Cluster 0, Core 0
> > +
> > +    // MP Core MailBox Set/Get/Clear Addresses and Clear Value
> > +    (EFI_PHYSICAL_ADDRESS)0,
> > +    (EFI_PHYSICAL_ADDRESS)0,
> > +    (EFI_PHYSICAL_ADDRESS)0,
> > +    (UINT64)0xFFFFFFFF
> > +  }
> > +};
> > +
> > +/*
> > +  This function geted the current Boot Mode.
> > +
> > +  This function returns the boot reason on the platform.
> > +
> > +  @return   Return the current Boot Mode of the platform.
> > +
> > +*/
> > +EFI_BOOT_MODE
> > +ArmPlatformGetBootMode (
> > +  VOID
> > +  )
> > +{
> > +  return BOOT_WITH_FULL_CONFIGURATION;
> > +}
> > +
> > +
> > +/**
> > +  Initialize controllers that must setup in the normal world.
> > +
> > +  This function is called by the ArmPlatformPkg/Pei or ArmPlatformPkg/Pei/PlatformPeim
> > +  in the PEI phase.
> > +
> > +  @retval      EFI_SUCCESS    ArmPlatformInitialize() is executed successfully.
> > +
> > +**/
> > +RETURN_STATUS
> > +ArmPlatformInitialize (
> > +  IN  UINTN                     MpId
> > +  )
> > +{
> > +  return RETURN_SUCCESS;
> > +}
> > +
> > +
> > +/**
> > +  This function Inited the system (or sometimes called permanent) memory.
> > +
> > +  This memory is generally represented by the DRAM.
> > +
> > +  @param[in]   None.
> > +
> > +  @retval      None.
> > +
> > +**/
> > +VOID
> > +ArmPlatformInitializeSystemMemory (
> > +  VOID
> > +  )
> > +{
> > +  // Nothing to do here
> > +}
> > +
> > +
> > +/**
> > +  This function geted the information of core.
> > +
> > +  @param[out]  CoreCount      The count of CoreInfoTable.
> > +  @param[out]  ArmCoreTable   The pointer of CoreInfoTable.
> > +
> > +  @retval      EFI_SUCCESS    PrePeiCoreGetMpCoreInfo() is executed successfully.
> > +
> > +**/
> > +EFI_STATUS
> > +PrePeiCoreGetMpCoreInfo (
> > +  OUT UINTN                   *CoreCount,
> > +  OUT ARM_CORE_INFO           **ArmCoreTable
> > +  )
> > +{
> > +  *CoreCount    = PcdGet32 (PcdCoreCount);
> > +  *ArmCoreTable = mPhytiumMpCoreInfoTable;
> > +
> > +  return EFI_SUCCESS;
> > +}
> > +
> > +//
> > +// Needs to be declared in the file. Otherwise gArmMpCoreInfoPpiGuid is
> > +// undefined in the contect of PrePeiCore
> > +//
> > +EFI_GUID mArmMpCoreInfoPpiGuid = ARM_MP_CORE_INFO_PPI_GUID;
> > +ARM_MP_CORE_INFO_PPI mMpCoreInfoPpi = { PrePeiCoreGetMpCoreInfo };
> > +
> > +EFI_PEI_PPI_DESCRIPTOR gPlatformPpiTable[] =
> > +{
> > +  {
> > +    EFI_PEI_PPI_DESCRIPTOR_PPI,
> > +    &mArmMpCoreInfoPpiGuid,
> > +    &mMpCoreInfoPpi
> > +  }
> > +};
> > +
> > +
> > +/**
> > +  This function geted the information of Ppitable.
> > +
> > +  @param[out]  PpiListSize      The size of Ppitable.
> > +  @param[out]  PpiList          The pointer of Ppitable.
> > +
> > +  @retval      None.
> > +
> > +**/
> > +VOID
> > +ArmPlatformGetPlatformPpiList (
> > +  OUT UINTN                   *PpiListSize,
> > +  OUT EFI_PEI_PPI_DESCRIPTOR  **PpiList
> > +  )
> > +{
> > +  *PpiListSize = sizeof (gPlatformPpiTable);
> > +  *PpiList = gPlatformPpiTable;
> > +}
> > diff --git a/Silicon/Phytium/FT2000-4Pkg/Library/PlatformLib/PlatformLibMem.c b/Silicon/Phytium/FT2000-4Pkg/Library/PlatformLib/PlatformLibMem.c
> > new file mode 100644
> > index 000000000000..7e54cb6e744f
> > --- /dev/null
> > +++ b/Silicon/Phytium/FT2000-4Pkg/Library/PlatformLib/PlatformLibMem.c
> > @@ -0,0 +1,156 @@
> > +/** @file
> > +  Library of memory map for Phytium platform.
> > +
> > +  Copyright (C) 2020, Phytium Technology Co Ltd. All rights reserved.<BR>
> > +
> > +  SPDX-License-Identifier: BSD-2-Clause-Patent
> > +
> > +**/
> > +
> > +#include <Library/ArmPlatformLib.h>
> > +#include <Library/DebugLib.h>
> > +#include <Library/HobLib.h>
> > +#include <Library/PcdLib.h>
> > +#include <Library/MemoryAllocationLib.h>
> > +#include <Library/ArmSmcLib.h>
> > +#include <SystemServiceInterface.h>
> > +
> > +// Number of Virtual Memory Map Descriptors
> > +#define MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS 32
> > +
> > +// DDR attributes
> > +#define DDR_ATTRIBUTES_CACHED      ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK
> > +#define DDR_ATTRIBUTES_UNCACHED    ARM_MEMORY_REGION_ATTRIBUTE_UNCACHED_UNBUFFERED
> > +
> > +/**
> > +  Return the Virtual Memory Map of your platform
> > +
> > +  This Virtual Memory Map is used by MemoryInitPei Module to initialize the MMU on your platform.
> > +
> > +  @param[out]  VirtualMemoryMap  Array of ARM_MEMORY_REGION_DESCRIPTOR describing a Physical-to-
> > +                                 Virtual Memory mapping. This array must be ended by a zero-filled
> > +                                 entry
> > +**/
> > +VOID
> > +ArmPlatformGetVirtualMemoryMap (
> > +  IN ARM_MEMORY_REGION_DESCRIPTOR** VirtualMemoryMap
> > +  )
> > +{
> > +  ARM_MEMORY_REGION_ATTRIBUTES  CacheAttributes;
> > +  ARM_MEMORY_REGION_DESCRIPTOR  *VirtualMemoryTable;
> > +  EFI_RESOURCE_ATTRIBUTE_TYPE   ResourceAttributes;
> > +  MEMORY_BLOCK                  *MemBlock;
> > +  MEMORY_INFO                   *MemInfo;
> > +  ARM_SMC_ARGS                  ArmSmcArgs;
> > +  UINT32                        MemBlockCnt;
> > +  UINT32                        Index1;
> > +  UINT32                        Index2;
> > +
> > +  MemBlock = NULL;
> > +  MemInfo  = NULL;
> > +  MemBlockCnt = 0;
> > +  Index1      = 0;
> > +  Index2      = 0;
> > +  CacheAttributes = ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK;
> > +
> > +  ASSERT (VirtualMemoryMap != NULL);
> > +  VirtualMemoryTable = (ARM_MEMORY_REGION_DESCRIPTOR*)AllocatePages \
> > +                         (EFI_SIZE_TO_PAGES (sizeof (ARM_MEMORY_REGION_DESCRIPTOR) * \
> > +                         MAX_VIRTUAL_MEMORY_MAP_DESCRIPTORS));
> > +  if (VirtualMemoryTable == NULL) {
> > +    return;
> > +  }
> > +
> > +  ResourceAttributes =
> > +    EFI_RESOURCE_ATTRIBUTE_PRESENT |
> > +    EFI_RESOURCE_ATTRIBUTE_INITIALIZED |
> > +    EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |
> > +    EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE |
> > +    EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |
> > +    EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE |
> > +    EFI_RESOURCE_ATTRIBUTE_TESTED;
> > +
> > +  MemInfo = AllocatePages (1);
> > +  ASSERT (MemInfo != NULL);
> > +
> > +  ArmSmcArgs.Arg0 = PHYTIUM_OEM_SVC_MEM_REGIONS;
> > +  ArmSmcArgs.Arg1 = (UINTN) MemInfo;
> > +  ArmSmcArgs.Arg2 = EFI_PAGE_SIZE;
> > +  ArmCallSmc (&ArmSmcArgs);
> > +  if (ArmSmcArgs.Arg0 == 0) {
> > +    MemBlockCnt = MemInfo->MemBlockCount;
> > +    MemBlock = MemInfo->MemBlock;
> > +  } else {
> > +    ASSERT (FALSE);
> > +  }
> > +
> > +  //Soc Io Space
> > +  VirtualMemoryTable[Index1].PhysicalBase   = PcdGet64 (PcdSystemIoBase);
> > +  VirtualMemoryTable[Index1].VirtualBase    = PcdGet64 (PcdSystemIoBase);
> > +  VirtualMemoryTable[Index1].Length         = PcdGet64 (PcdSystemIoSize);
> > +  VirtualMemoryTable[Index1].Attributes     = ARM_MEMORY_REGION_ATTRIBUTE_DEVICE;
> > +
> > +  //
> > +  // PCI Configuration Space
> > +  //
> > +  VirtualMemoryTable[++Index1].PhysicalBase  = PcdGet64 (PcdPciConfigBase);
> > +  VirtualMemoryTable[Index1].VirtualBase     = PcdGet64 (PcdPciConfigBase);
> > +  VirtualMemoryTable[Index1].Length          = PcdGet64 (PcdPciConfigSize);
> > +  VirtualMemoryTable[Index1].Attributes      = ARM_MEMORY_REGION_ATTRIBUTE_DEVICE;
> > +
> > +  //
> > +  // PCI Memory Space
> > +  //
> > +  VirtualMemoryTable[++Index1].PhysicalBase  = PcdGet64 (PcdPciIoBase) + PcdGet64 (PcdPciIoTranslation);
> > +  VirtualMemoryTable[Index1].VirtualBase     = PcdGet64 (PcdPciIoBase) + PcdGet64 (PcdPciIoTranslation);
> > +  VirtualMemoryTable[Index1].Length          = PcdGet64 (PcdPciIoSize);
> > +  VirtualMemoryTable[Index1].Attributes      = ARM_MEMORY_REGION_ATTRIBUTE_DEVICE;
> > +
> > +  //
> > +  // PCI Memory Space
> > +  //
> > +  VirtualMemoryTable[++Index1].PhysicalBase  = PcdGet32 (PcdPciMmio32Base);
> > +  VirtualMemoryTable[Index1].VirtualBase     = PcdGet32 (PcdPciMmio32Base);
> > +  VirtualMemoryTable[Index1].Length          = PcdGet32 (PcdPciMmio32Size);
> > +  VirtualMemoryTable[Index1].Attributes      = ARM_MEMORY_REGION_ATTRIBUTE_DEVICE;
> > +
> > +  //
> > +  // 64-bit PCI Memory Space
> > +  //
> > +  VirtualMemoryTable[++Index1].PhysicalBase  = PcdGet64 (PcdPciMmio64Base);
> > +  VirtualMemoryTable[Index1].VirtualBase     = PcdGet64 (PcdPciMmio64Base);
> > +  VirtualMemoryTable[Index1].Length          = PcdGet64 (PcdPciMmio64Size);
> > +  VirtualMemoryTable[Index1].Attributes      = ARM_MEMORY_REGION_ATTRIBUTE_DEVICE;
> > +
> > +  //DDR
> > +  for (Index2 = 0; Index2 < MemBlockCnt; Index2++) {
> > +    VirtualMemoryTable[++Index1].PhysicalBase = MemBlock->MemStart;
> > +    VirtualMemoryTable[Index1].VirtualBase    = MemBlock->MemStart;
> > +    VirtualMemoryTable[Index1].Length         = MemBlock->MemSize;
> > +    VirtualMemoryTable[Index1].Attributes     = CacheAttributes;
> > +
> > +    BuildResourceDescriptorHob (
> > +      EFI_RESOURCE_SYSTEM_MEMORY,
> > +      ResourceAttributes,
> > +      MemBlock->MemStart,
> > +      MemBlock->MemSize
> > +      );
> > +
> > +    MemBlock++;
> > +  }
> > +
> > +  // End of Table
> > +  VirtualMemoryTable[++Index1].PhysicalBase = 0;
> > +  VirtualMemoryTable[Index1].VirtualBase    = 0;
> > +  VirtualMemoryTable[Index1].Length         = 0;
> > +  VirtualMemoryTable[Index1].Attributes     = (ARM_MEMORY_REGION_ATTRIBUTES)0;
> > +
> > +
> > +  for (Index2 = 0; Index2 < Index1; Index2++) {
> > +    DEBUG ((DEBUG_ERROR, "PhysicalBase %12lx VirtualBase %12lx Length %12lx Attributes %12lx\n",\
> > +      VirtualMemoryTable[Index2].PhysicalBase, VirtualMemoryTable[Index2].VirtualBase, \
> > +      VirtualMemoryTable[Index2].Length, VirtualMemoryTable[Index2].Attributes));
> > +  }
> > +
> > +  *VirtualMemoryMap = VirtualMemoryTable;
> > +}
> > diff --git a/Silicon/Phytium/FT2000-4Pkg/Library/PlatformLib/AArch64/PhytiumPlatformHelper.S b/Silicon/Phytium/FT2000-4Pkg/Library/PlatformLib/AArch64/PhytiumPlatformHelper.S
> > new file mode 100644
> > index 000000000000..cce23b786197
> > --- /dev/null
> > +++ b/Silicon/Phytium/FT2000-4Pkg/Library/PlatformLib/AArch64/PhytiumPlatformHelper.S
> > @@ -0,0 +1,76 @@
> > +#
> > +#  Copyright (c) 2011-2013, 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.
> > +#
> > +#
> > +
> > +#include <AsmMacroIoLibV8.h>
> > +#include <Base.h>
> > +#include <Library/ArmLib.h>
> > +#include <Library/PcdLib.h>
> > +#include <AutoGen.h>
> > +
> > +.text
> > +.align 2
> > +
> > +GCC_ASM_EXPORT(ArmPlatformPeiBootAction)
> > +GCC_ASM_EXPORT(ArmPlatformIsPrimaryCore)
> > +GCC_ASM_EXPORT(ArmPlatformGetPrimaryCoreMpId)
> > +GCC_ASM_EXPORT(ArmPlatformGetCorePosition)
> > +
> > +PrimaryCoreMpid:  .word    0x0
> > +
> > +
> > +ASM_PFX(ArmPlatformPeiBootAction):
> > +  // Save MPIDR_EL1[23:0] in a variable.
> > +  mov   x20, x30
> > +  bl    ASM_PFX(ArmReadMpidr)
> > +  lsl   w0, w0, #8
> > +  lsr   w0, w0, #8
> > +  ldr   x1, =PrimaryCoreMpid
> > +  str   w0, [x1]
> > +  ret   x20
> > +
> > +//UINTN
> > +//ArmPlatformGetPrimaryCoreMpId (
> > +//  VOID
> > +//  );
> > +ASM_PFX(ArmPlatformGetPrimaryCoreMpId):
> > +  ldr   x0, =PrimaryCoreMpid
> > +  ldr   w0, [x0]
> > +  ret
> > +
> > +//UINTN
> > +//ArmPlatformIsPrimaryCore (
> > +//  IN UINTN MpId
> > +//  );
> > +ASM_PFX(ArmPlatformIsPrimaryCore):
> > +  mov   x20, x30
> > +  bl    ASM_PFX(ArmReadMpidr)
> > +  lsl   w0, w0, #8
> > +  lsr   w0, w0, #8
> > +  ldr   x1, =PrimaryCoreMpid
> > +  ldr   w1, [x1]
> > +  cmp   w0, w1
> > +  cset  x0, eq
> > +  ret   x20
> > +
> > +//UINTN
> > +//ArmPlatformGetCorePosition (
> > +//  IN UINTN MpId
> > +//  );
> > +// With this function: CorePos = (ClusterId * 4) + CoreId
> > +ASM_PFX(ArmPlatformGetCorePosition):
> > +  and   x1, x0, #ARM_CORE_MASK
> > +  and   x0, x0, #ARM_CLUSTER_MASK
> > +  add   x0, x1, x0, LSR #6
> > +  ret
> > +
> > +ASM_FUNCTION_REMOVE_IF_UNREFERENCED
> > diff --git a/Silicon/Phytium/PhytiumCommonPkg/PhytiumCommonPkg.fdf.inc b/Silicon/Phytium/PhytiumCommonPkg/PhytiumCommonPkg.fdf.inc
> > new file mode 100644
> > index 000000000000..641266c6012f
> > --- /dev/null
> > +++ b/Silicon/Phytium/PhytiumCommonPkg/PhytiumCommonPkg.fdf.inc
> > @@ -0,0 +1,119 @@
> > +## @file
> > +# This package provides common open source Phytium silicon modules.
> > +#
> > +# Copyright (C) 2020, Phytium Technology Co, Ltd. All rights reserved.
> > +#
> > +# SPDX-License-Identifier:BSD-2-Clause-Patent
> > +#
> > +##
> > +
> > +############################################################################
> > +# 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)
> > +#      }
> > +#    }
> > +#  }
> > +#
> > +############################################################################
> > +
> > +[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) FIXED {
> > +    TE     TE Align = Auto              $(INF_OUTPUT)/$(MODULE_NAME).efi
> > +    UI     STRING ="$(MODULE_NAME)" Optional
> > +  }
> > +
> > +[Rule.Common.PEIM]
> > +  FILE PEIM = $(NAMED_GUID) FIXED {
> > +     PEI_DEPEX PEI_DEPEX Optional       $(INF_OUTPUT)/$(MODULE_NAME).depex
> > +     TE       TE Align = Auto           $(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.BIOSINFO]
> > +  FILE FREEFORM = $(NAMED_GUID) {
> > +    RAW BIN Align = 16 $(INF_OUTPUT)/$(MODULE_NAME).acpi
> > +  }
> > +
> > +[Rule.Common.UEFI_APPLICATION.UI]
> > +  FILE APPLICATION = $(NAMED_GUID) {
> > +    PE32      PE32                     $(INF_OUTPUT)/$(MODULE_NAME).efi
> > +    UI        STRING="Enter Setup"
> > +    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.25.1
> > 







-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#71778): https://edk2.groups.io/g/devel/message/71778
Mute This Topic: https://groups.io/mt/80534127/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-






More information about the edk2-devel-archive mailing list