From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2607:f8b0:4864:20::12b; helo=mail-it1-x12b.google.com; envelope-from=ard.biesheuvel@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-it1-x12b.google.com (mail-it1-x12b.google.com [IPv6:2607:f8b0:4864:20::12b]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 42DE321198CB5 for ; Fri, 14 Dec 2018 07:39:57 -0800 (PST) Received: by mail-it1-x12b.google.com with SMTP id i145so9423505ita.4 for ; Fri, 14 Dec 2018 07:39:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=DmsBrKTntk7tGdYcVs1IZheETnvQK0jr9MZm6BCoPtQ=; b=Yl32Jg6Rxs11dvUBtt+c9fzftz1x5ZtVYINXrrBkYvOOIUp45euhHjeUPU8H+QWvj5 WNvPbyIkyE8SZ2UyAmSdC7/aCoRRt20Spq3cExBOLB5Bq2DQqr9iHhBsDm3sfEWdEBqF ns/CgTbTIB5V0pEeDJjJNtahyXGHWCHuC3HGA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=DmsBrKTntk7tGdYcVs1IZheETnvQK0jr9MZm6BCoPtQ=; b=ajcDITQoGmEjGhZOURIOUXU/gs5kOKkFVGpOzintxW/3+WW//l6YOr8te3BNRZvDe8 RbCG3db6xJu8YJ/LxfoWowyExCZaBaLNQgt8/41FvrP3KqNC8aw2vDmvfh/w2kQEW70x LWGY5jBMWGxbKLyjix+SDDG+N7tDHoyV6KFGmGHfzU6PAShHfD8hAVuaAWn6m5d6uTgz t9fARHqc+AbqGlyj/xGDAIianSV/OctW6lWTy1MgWHBS0RLbaAu4jXQP50rQ95H5eB6a AZEirW4c80wmuYMtMZgzOH4JoFM6zEuMbVdLQfYDAdEGJsOqWpatJ6ym0juCAn/4GH+4 u3Vg== X-Gm-Message-State: AA+aEWbyHCaiWABHBwhJcQYyRuNLrlyP4IGCgWNGQkOnp0pHuZwPA1fw Nf6sYr8Znfu+CepDPW6j1YnjnbQVXC0WwLQSZc3vQBAroTg= X-Google-Smtp-Source: AFSGD/X+v3apEZzFbGFYIauJI8IlT3LZDtAqRpl3dunNKzNq3vKni+j4z4SofOfyAAyk5OYzJD7l/YPF4dwoMdEgkGo= X-Received: by 2002:a05:660c:4b:: with SMTP id p11mr3652927itk.71.1544801995870; Fri, 14 Dec 2018 07:39:55 -0800 (PST) MIME-Version: 1.0 References: <20181210123853.4864-1-pete@akeo.ie> <20181210123853.4864-17-pete@akeo.ie> In-Reply-To: <20181210123853.4864-17-pete@akeo.ie> From: Ard Biesheuvel Date: Fri, 14 Dec 2018 16:39:44 +0100 Message-ID: To: Pete Batard Cc: "edk2-devel@lists.01.org" Subject: Re: [PATCH v2 edk2-platforms 16/20] Platform/Broadcom/RPi3: Add Raspberry Pi 3 Platform X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Dec 2018 15:39:57 -0000 Content-Type: text/plain; charset="UTF-8" On Mon, 10 Dec 2018 at 13:39, Pete Batard wrote: > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Pete Batard > --- > Platform/Broadcom/Bcm283x/RaspberryPiPkg.dec | 63 ++ > Platform/Broadcom/Bcm283x/RaspberryPiPkg.dsc | 636 ++++++++++++++++++++ > Platform/Broadcom/Bcm283x/RaspberryPiPkg.fdf | 450 ++++++++++++++ > Platform/Broadcom/Bcm283x/Readme.md | 263 ++++++++ > 4 files changed, 1412 insertions(+) > This looks fine as well. In general, please screen the code for the cosmetic stuff I mentioned. I haven't looked at the SD/MMC drivers yet, and I don't have the bandwidth (or the energy) to do a deep review of those. The NV storage driver I will have a more careful look at, but not today - hopefully by the end of next week, I tried running PatchCheck.py but it doesn't seem to run on my system (I have never used it in anger myself), but it should help you spot many of the issues I brought up. > diff --git a/Platform/Broadcom/Bcm283x/RaspberryPiPkg.dec b/Platform/Broadcom/Bcm283x/RaspberryPiPkg.dec > new file mode 100644 > index 000000000000..51f2f07aab8a > --- /dev/null > +++ b/Platform/Broadcom/Bcm283x/RaspberryPiPkg.dec > @@ -0,0 +1,63 @@ > +## @file > +# > +# Copyright (c) 2016, Linaro, Ltd. All rights reserved. > +# Copyright (c) 2017 - 2018, Andrei Warkentin > +# > +# 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 = 0x0001001A > + PACKAGE_NAME = RaspberryPiPkg > + PACKAGE_GUID = DFA0CA8B-F3AC-4607-96AC-46FA04B84DCC > + PACKAGE_VERSION = 0.1 > + > +[Includes] > + Include > + > +[Protocols] > + gRaspberryPiFirmwareProtocolGuid = { 0x0ACA9535, 0x7AD0, 0x4286, { 0xB0, 0x2E, 0x87, 0xFA, 0x7E, 0x2A, 0x57, 0x11 } } > + gRaspberryPiConfigAppliedProtocolGuid = { 0x0ACA4444, 0x7AD0, 0x4286, { 0xB0, 0x2E, 0x87, 0xFA, 0x7E, 0x2A, 0x57, 0x11 } } > + gRaspberryPiMmcHostProtocolGuid = { 0x3e591c00, 0x9e4a, 0x11df, {0x92, 0x44, 0x00, 0x02, 0xA5, 0xF5, 0xF5, 0x1B } } > + gExtendedTextOutputProtocolGuid = { 0x387477ff, 0xffc7, 0xffd2, {0x8e, 0x39, 0x0, 0xff, 0xc9, 0x69, 0x72, 0x3b } } > + > +[Guids] > + gRaspberryPiTokenSpaceGuid = {0xCD7CC258, 0x31DB, 0x11E6, {0x9F, 0xD3, 0x63, 0xB0, 0xB8, 0xEE, 0xD6, 0xB5}} > + gRaspberryPiFdtFileGuid = {0xDF5DA223, 0x1D27, 0x47C3, { 0x8D, 0x1B, 0x9A, 0x41, 0xB5, 0x5A, 0x18, 0xBC}} > + gRaspberryPiEventResetGuid = {0xCD7CC258, 0x31DB, 0x11E6, {0x9F, 0xD3, 0x63, 0xB4, 0xB4, 0xE4, 0xD4, 0xB4}} > + gConfigDxeFormSetGuid = {0xCD7CC258, 0x31DB, 0x22E6, {0x9F, 0x22, 0x63, 0xB0, 0xB8, 0xEE, 0xD6, 0xB5}} > + > +[PcdsFixedAtBuild.common] > + gRaspberryPiTokenSpaceGuid.PcdFdtBaseAddress|0x10000|UINT32|0x00000001 > + gRaspberryPiTokenSpaceGuid.PcdFirmwareBlockSize|0x0|UINT32|0x00000002 > + gRaspberryPiTokenSpaceGuid.PcdNvStorageEventLogBase|0x0|UINT32|0x00000003 > + gRaspberryPiTokenSpaceGuid.PcdNvStorageEventLogSize|0x0|UINT32|0x00000004 > + gRaspberryPiTokenSpaceGuid.PcdNvStorageVariableBase|0x0|UINT32|0x00000005 > + gRaspberryPiTokenSpaceGuid.PcdNvStorageFtwSpareBase|0x0|UINT32|0x00000006 > + gRaspberryPiTokenSpaceGuid.PcdNvStorageFtwWorkingBase|0x0|UINT32|0x00000007 > + gRaspberryPiTokenSpaceGuid.PcdBootEpochSeconds|0x0|UINT64|0x00000008 > + > +[PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx] > + gRaspberryPiTokenSpaceGuid.PcdHypEnable|0|UINT32|0x00000009 > + gRaspberryPiTokenSpaceGuid.PcdHypLogMask|0|UINT32|0x0000000a > + gRaspberryPiTokenSpaceGuid.PcdHypWindowsDebugHook|0|UINT32|0x0000000b > + gRaspberryPiTokenSpaceGuid.PcdHypWin2000Mask|0|UINT32|0x0000000c > + gRaspberryPiTokenSpaceGuid.PcdCpuClock|0|UINT32|0x0000000d > + gRaspberryPiTokenSpaceGuid.PcdSdIsArasan|0|UINT32|0x0000000e > + gRaspberryPiTokenSpaceGuid.PcdMmcForce1Bit|0|UINT32|0x0000000f > + gRaspberryPiTokenSpaceGuid.PcdMmcForceDefaultSpeed|0|UINT32|0x00000010 > + gRaspberryPiTokenSpaceGuid.PcdMmcSdDefaultSpeedMHz|0|UINT32|0x00000011 > + gRaspberryPiTokenSpaceGuid.PcdMmcSdHighSpeedMHz|0|UINT32|0x00000012 > + gRaspberryPiTokenSpaceGuid.PcdMmcDisableMulti|0|UINT32|0x00000013 > + gRaspberryPiTokenSpaceGuid.PcdDebugEnableJTAG|0|UINT32|0x00000014 > + gRaspberryPiTokenSpaceGuid.PcdDebugShowUEFIExit|0|UINT32|0x00000015 > + gRaspberryPiTokenSpaceGuid.PcdDisplayEnableVModes|0|UINT32|0x00000017 > + gRaspberryPiTokenSpaceGuid.PcdDisplayEnableSShot|0|UINT32|0x00000018 > diff --git a/Platform/Broadcom/Bcm283x/RaspberryPiPkg.dsc b/Platform/Broadcom/Bcm283x/RaspberryPiPkg.dsc > new file mode 100644 > index 000000000000..8610fae0b92f > --- /dev/null > +++ b/Platform/Broadcom/Bcm283x/RaspberryPiPkg.dsc > @@ -0,0 +1,636 @@ > +# @file > +# > +# Copyright (c) 2011-2015, ARM Limited. All rights reserved. > +# Copyright (c) 2014, Linaro Limited. All rights reserved. > +# Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved. > +# Copyright (c) 2017 - 2018, Andrei Warkentin > +# > +# 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 = RaspberryPi > + PLATFORM_GUID = 5d30c4fc-93cf-40c9-8486-3badc0410816 > + PLATFORM_VERSION = 0.3 > + DSC_SPECIFICATION = 0x00010005 > + OUTPUT_DIRECTORY = Build/RaspberryPiPkg > + SUPPORTED_ARCHITECTURES = AARCH64 > + BUILD_TARGETS = DEBUG|RELEASE > + SKUID_IDENTIFIER = DEFAULT > + FLASH_DEFINITION = Platform/Broadcom/Bcm283x/RaspberryPiPkg.fdf > + > + # > + # Defines for default states. These can be changed on the command line. > + # -D FLAG=VALUE > + # > + DEFINE SECURE_BOOT_ENABLE = FALSE > + DEFINE DEBUG_PRINT_ERROR_LEVEL = 0x8000004F > + > +!ifndef BUILD_EPOCH > + DEFINE BUILD_EPOCH = 1546300800 > +!endif > +################################################################################ > +# > +# Library Class section - list of all Library Classes needed by this Platform. > +# > +################################################################################ > +[LibraryClasses.common] > +!if $(TARGET) == RELEASE > + DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf > +!else > + DebugLib|MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort.inf > +!endif > + DebugPrintErrorLevelLib|MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib.inf > + > + BaseLib|MdePkg/Library/BaseLib/BaseLib.inf > + SafeIntLib|MdePkg/Library/BaseSafeIntLib/BaseSafeIntLib.inf > + BmpSupportLib|MdeModulePkg/Library/BaseBmpSupportLib/BaseBmpSupportLib.inf > + SynchronizationLib|MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf > + PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf > + PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf > + PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf > + PeCoffLib|MdePkg/Library/BasePeCoffLib/BasePeCoffLib.inf > + IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf > + UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf > + CpuLib|MdePkg/Library/BaseCpuLib/BaseCpuLib.inf > + > + UefiLib|MdePkg/Library/UefiLib/UefiLib.inf > + HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf > + UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf > + DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf > + UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf > + DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf > + DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf > + UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf > + UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf > + HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf > + UefiHiiServicesLib|MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesLib.inf > + SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf > + > + UefiRuntimeLib|MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf > + OrderedCollectionLib|MdePkg/Library/BaseOrderedCollectionRedBlackTreeLib/BaseOrderedCollectionRedBlackTreeLib.inf > + > + # > + # Ramdisk Requirements > + # > + FileExplorerLib|MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf > + > + # Allow dynamic PCDs > + # > + PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf > + > + # use the accelerated BaseMemoryLibOptDxe by default, overrides for SEC/PEI below > + BaseMemoryLib|MdePkg/Library/BaseMemoryLibOptDxe/BaseMemoryLibOptDxe.inf > + > + # Networking Requirements > + NetLib|MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf > + DpcLib|MdeModulePkg/Library/DxeDpcLib/DxeDpcLib.inf > + UdpIoLib|MdeModulePkg/Library/DxeUdpIoLib/DxeUdpIoLib.inf > + IpIoLib|MdeModulePkg/Library/DxeIpIoLib/DxeIpIoLib.inf > + > + # > + # It is not possible to prevent the ARM compiler from inserting calls to intrinsic functions. > + # This library provides the instrinsic functions such a compiler may generate calls to. > + # > + NULL|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf > + > + # Add support for GCC stack protector > + NULL|MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf > + > + # ARM Architectural Libraries > + CacheMaintenanceLib|ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.inf > + DefaultExceptionHandlerLib|ArmPkg/Library/DefaultExceptionHandlerLib/DefaultExceptionHandlerLib.inf > + CpuExceptionHandlerLib|ArmPkg/Library/ArmExceptionLib/ArmExceptionLib.inf > + ArmDisassemblerLib|ArmPkg/Library/ArmDisassemblerLib/ArmDisassemblerLib.inf > + DmaLib|EmbeddedPkg/Library/NonCoherentDmaLib/NonCoherentDmaLib.inf > + TimeBaseLib|EmbeddedPkg/Library/TimeBaseLib/TimeBaseLib.inf > + ArmPlatformStackLib|ArmPlatformPkg/Library/ArmPlatformStackLib/ArmPlatformStackLib.inf > + ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf > + ArmHvcLib|ArmPkg/Library/ArmHvcLib/ArmHvcLib.inf > + ArmGenericTimerCounterLib|ArmPkg/Library/ArmGenericTimerPhyCounterLib/ArmGenericTimerPhyCounterLib.inf > + > + PciCf8Lib|MdePkg/Library/BasePciCf8Lib/BasePciCf8Lib.inf > + PciLib|MdePkg/Library/BasePciLibCf8/BasePciLibCf8.inf > + PlatformHookLib|MdeModulePkg/Library/BasePlatformHookLibNull/BasePlatformHookLibNull.inf > + SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf > + > + # > + # Uncomment (and comment out the next line) For RealView Debugger. The Standard IO window > + # in the debugger will show load and unload commands for symbols. You can cut and paste this > + # into the command window to load symbols. We should be able to use a script to do this, but > + # the version of RVD I have does not support scripts accessing system memory. > + # > + #PeCoffExtraActionLib|ArmPkg/Library/RvdPeCoffExtraActionLib/RvdPeCoffExtraActionLib.inf > + PeCoffExtraActionLib|ArmPkg/Library/DebugPeCoffExtraActionLib/DebugPeCoffExtraActionLib.inf > + #PeCoffExtraActionLib|MdePkg/Library/BasePeCoffExtraActionLibNull/BasePeCoffExtraActionLibNull.inf > + > + DebugAgentLib|MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.inf > + DebugAgentTimerLib|EmbeddedPkg/Library/DebugAgentTimerLibNull/DebugAgentTimerLibNull.inf > + > + # Flattened Device Tree (FDT) access library > + FdtLib|EmbeddedPkg/Library/FdtLib/FdtLib.inf > + > + # USB Libraries > + UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf > + > + # > + # Secure Boot dependencies > + # > +!if $(SECURE_BOOT_ENABLE) == TRUE > + IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf > + OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf > + TpmMeasurementLib|SecurityPkg/Library/DxeTpmMeasurementLib/DxeTpmMeasurementLib.inf > + AuthVariableLib|SecurityPkg/Library/AuthVariableLib/AuthVariableLib.inf > + BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf > + > + # re-use the UserPhysicalPresent() dummy implementation from the ovmf tree > + PlatformSecureLib|OvmfPkg/Library/PlatformSecureLib/PlatformSecureLib.inf > +!else > + TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.inf > + AuthVariableLib|MdeModulePkg/Library/AuthVariableLibNull/AuthVariableLibNull.inf > +!endif > + VarCheckLib|MdeModulePkg/Library/VarCheckLib/VarCheckLib.inf > + GpioLib|Platform/Broadcom/Bcm283x/Library/GpioLib/GpioLib.inf > + > +[LibraryClasses.common.SEC] > + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf > + BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf > + MemoryInitPeiLib|Platform/Broadcom/Bcm283x/Library/MemoryInitPeiLib/MemoryInitPeiLib.inf > + PlatformPeiLib|ArmPlatformPkg/PlatformPei/PlatformPeiLib.inf > + ExtractGuidedSectionLib|EmbeddedPkg/Library/PrePiExtractGuidedSectionLib/PrePiExtractGuidedSectionLib.inf > + LzmaDecompressLib|MdeModulePkg/Library/LzmaCustomDecompressLib/LzmaCustomDecompressLib.inf > + PrePiLib|EmbeddedPkg/Library/PrePiLib/PrePiLib.inf > + HobLib|EmbeddedPkg/Library/PrePiHobLib/PrePiHobLib.inf > + PrePiHobListPointerLib|ArmPlatformPkg/Library/PrePiHobListPointerLib/PrePiHobListPointerLib.inf > + MemoryAllocationLib|EmbeddedPkg/Library/PrePiMemoryAllocationLib/PrePiMemoryAllocationLib.inf > + > +[LibraryClasses.common.DXE_CORE] > + HobLib|MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf > + MemoryAllocationLib|MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationLib.inf > + DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf > + ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf > + ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf > + UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf > + PerformanceLib|MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.inf > + > +[LibraryClasses.common.DXE_DRIVER] > + ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf > + SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf > + PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf > + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf > + > +[LibraryClasses.common.UEFI_APPLICATION] > + UefiDecompressLib|IntelFrameworkModulePkg/Library/BaseUefiTianoCustomDecompressLib/BaseUefiTianoCustomDecompressLib.inf > + PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf > + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf > + HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf > + ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf > + FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf > + ReportStatusCodeLib|MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf > + > +[LibraryClasses.common.UEFI_DRIVER] > + ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf > + UefiDecompressLib|IntelFrameworkModulePkg/Library/BaseUefiTianoCustomDecompressLib/BaseUefiTianoCustomDecompressLib.inf > + ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf > + PerformanceLib|MdeModulePkg/Library/DxePerformanceLib/DxePerformanceLib.inf > + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf > + > +[LibraryClasses.common.DXE_RUNTIME_DRIVER] > + MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf > + ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf > + CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf > + EfiResetSystemLib|Platform/Broadcom/Bcm283x/Library/ResetLib/ResetLib.inf > + ArmSmcLib|ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf > + > +!if $(SECURE_BOOT_ENABLE) == TRUE > + BaseCryptLib|CryptoPkg/Library/BaseCryptLib/RuntimeCryptLib.inf > +!endif > + > +################################################################################################### > +# BuildOptions Section - Define the module specific tool chain flags that should be used as > +# the default flags for a module. These flags are appended to any > +# standard flags that are defined by the build process. > +################################################################################################### > + > +[BuildOptions] > + GCC:RELEASE_*_*_CC_FLAGS = -DMDEPKG_NDEBUG -DNDEBUG > + > +[BuildOptions.common.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] > + # Use the Vector Table location in CpuDxe. We will not copy the Vector Table at PcdCpuVectorBaseAddress > + gArmTokenSpaceGuid.PcdRelocateVectorTable|FALSE > + > + gEmbeddedTokenSpaceGuid.PcdPrePiProduceMemoryTypeInformationHob|TRUE > + gEfiMdeModulePkgTokenSpaceGuid.PcdTurnOffUsbLegacySupport|TRUE > + > + ## If TRUE, Graphics Output Protocol will be installed on virtual handle created by ConsplitterDxe. > + # It could be set FALSE to save size. > + gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|TRUE > + gEfiMdeModulePkgTokenSpaceGuid.PcdConOutUgaSupport|FALSE > + > +[PcdsFixedAtBuild.common] > + gEfiMdePkgTokenSpaceGuid.PcdMaximumUnicodeStringLength|1000000 > + gEfiMdePkgTokenSpaceGuid.PcdMaximumAsciiStringLength|1000000 > + gEfiMdePkgTokenSpaceGuid.PcdMaximumLinkedListLength|1000000 > + gEfiMdePkgTokenSpaceGuid.PcdSpinLockTimeout|10000000 > + gEfiMdePkgTokenSpaceGuid.PcdDebugClearMemoryValue|0xAF > + gEfiMdePkgTokenSpaceGuid.PcdPerformanceLibraryPropertyMask|1 > + gEfiMdePkgTokenSpaceGuid.PcdPostCodePropertyMask|0 > + gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|320 > + > + # DEBUG_ASSERT_ENABLED 0x01 > + # DEBUG_PRINT_ENABLED 0x02 > + # DEBUG_CODE_ENABLED 0x04 > + # CLEAR_MEMORY_ENABLED 0x08 > + # ASSERT_BREAKPOINT_ENABLED 0x10 > + # ASSERT_DEADLOOP_ENABLED 0x20 > +!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 (pool) > + # DEBUG_PAGE 0x00000020 // Alloc & Free (page) > + # DEBUG_INFO 0x00000040 // Informational debug messages > + # DEBUG_DISPATCH 0x00000080 // PEI/DXE/SMM Dispatchers > + # DEBUG_VARIABLE 0x00000100 // Variable > + # DEBUG_BM 0x00000400 // Boot Manager > + # DEBUG_BLKIO 0x00001000 // BlkIo Driver > + # DEBUG_NET 0x00004000 // SNP Driver > + # DEBUG_UNDI 0x00010000 // UNDI Driver > + # DEBUG_LOADFILE 0x00020000 // LoadFile > + # DEBUG_EVENT 0x00080000 // Event messages > + # DEBUG_GCD 0x00100000 // Global Coherency Database changes > + # DEBUG_CACHE 0x00200000 // Memory range cachability changes > + # DEBUG_VERBOSE 0x00400000 // Detailed debug messages that may > + # // significantly impact boot performance > + # DEBUG_ERROR 0x80000000 // Error > + gEfiMdePkgTokenSpaceGuid.PcdDebugPrintErrorLevel|$(DEBUG_PRINT_ERROR_LEVEL) > + > + gEfiMdePkgTokenSpaceGuid.PcdReportStatusCodePropertyMask|0x07 > + > + # > + # Optional feature to help prevent EFI memory map fragments > + # Turned on and off via: PcdPrePiProduceMemoryTypeInformationHob > + # Values are in EFI Pages (4K). DXE Core will make sure that > + # at least this much of each type of memory can be allocated > + # from a single memory range. This way you only end up with > + # maximum of two fragments for each type in the memory map > + # (the memory used, and the free memory that was prereserved > + # but not used). > + # > + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiACPIReclaimMemory|0 > + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiACPIMemoryNVS|0 > + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiReservedMemoryType|0 > +!if $(SECURE_BOOT_ENABLE) == TRUE > + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesData|600 > + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesCode|400 > + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiBootServicesCode|1500 > +!else > + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesData|300 > + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesCode|150 > + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiBootServicesCode|1000 > +!endif > + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiBootServicesData|12000 > + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderCode|20 > + gEmbeddedTokenSpaceGuid.PcdMemoryTypeEfiLoaderData|0 > + > + gEmbeddedTokenSpaceGuid.PcdDmaDeviceOffset|0xc0000000 > + > +!if $(SECURE_BOOT_ENABLE) == TRUE > + # override the default values from SecurityPkg to ensure images from all sources are verified in secure boot > + gEfiSecurityPkgTokenSpaceGuid.PcdOptionRomImageVerificationPolicy|0x04 > + gEfiSecurityPkgTokenSpaceGuid.PcdFixedMediaImageVerificationPolicy|0x04 > + gEfiSecurityPkgTokenSpaceGuid.PcdRemovableMediaImageVerificationPolicy|0x04 > +!endif > + > + gEmbeddedTokenSpaceGuid.PcdInterruptBaseAddress|0x40000000 > + gArmTokenSpaceGuid.PcdArmArchTimerSecIntrNum|0x0 > + gArmTokenSpaceGuid.PcdArmArchTimerIntrNum|0x1 > + gArmTokenSpaceGuid.PcdArmArchTimerVirtIntrNum|0x2 > + gArmTokenSpaceGuid.PcdArmArchTimerHypIntrNum|0x3 > + > +[LibraryClasses.common] > + ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf > + ArmMmuLib|ArmPkg/Library/ArmMmuLib/ArmMmuBaseLib.inf > + ArmPlatformLib|Platform/Broadcom/Bcm283x/Library/RaspberryPiPlatformLib/RaspberryPiPlatformLib.inf > + TimerLib|ArmPkg/Library/ArmArchTimerLib/ArmArchTimerLib.inf > + CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf > + UefiBootManagerLib|MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf > + BootLogoLib|MdeModulePkg/Library/BootLogoLib/BootLogoLib.inf > + PlatformBootManagerLib|Platform/Broadcom/Bcm283x/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf > + CustomizedDisplayLib|MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf > + FileExplorerLib|MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf > + > +[LibraryClasses.common.UEFI_DRIVER] > + UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf > + > + > +################################################################################ > +# > +# Pcd Section - list of all EDK II PCD Entries defined by this Platform > +# > +################################################################################ > + > +[PcdsFeatureFlag.common] > + gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|TRUE > + gEfiMdeModulePkgTokenSpaceGuid.PcdConOutUgaSupport|FALSE > + gEfiMdeModulePkgTokenSpaceGuid.PcdInstallAcpiSdtProtocol|TRUE > + > +[PcdsFixedAtBuild.common] > + gArmPlatformTokenSpaceGuid.PcdCoreCount|4 > + gArmTokenSpaceGuid.PcdVFPEnabled|1 > + > + gArmPlatformTokenSpaceGuid.PcdCPUCorePrimaryStackSize|0x4000 > + gEfiMdeModulePkgTokenSpaceGuid.PcdMaxVariableSize|0x2000 > + gEfiMdeModulePkgTokenSpaceGuid.PcdMaxAuthVariableSize|0x2800 > + > + # Size of the region used by UEFI in permanent memory (Reserved 64MB) > + gArmPlatformTokenSpaceGuid.PcdSystemMemoryUefiRegionSize|0x04000000 > + # > + # This matches PcdFvBaseAddress, since everything less is ATF, and > + # will be reserved away. > + # > + gArmTokenSpaceGuid.PcdSystemMemoryBase|0x00400000 > + gArmTokenSpaceGuid.PcdSystemMemorySize|0x3FC00000 > + > + ## NS16550 compatible UART > + gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase|0x3f215040 > + gEfiMdeModulePkgTokenSpaceGuid.PcdSerialUseMmio|TRUE > + gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterStride|4 > + gEfiMdeModulePkgTokenSpaceGuid.PcdSerialClockRate|500000000 > + gEfiMdeModulePkgTokenSpaceGuid.PcdSerialFifoControl|0x27 > + gEfiMdeModulePkgTokenSpaceGuid.PcdSerialExtendedTxFifoSize|8 > + gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate|115200 > + > + ## Default Terminal Type > + ## 0-PCANSI, 1-VT100, 2-VT00+, 3-UTF8, 4-TTYTERM > + gEfiMdePkgTokenSpaceGuid.PcdDefaultTerminalType|4 > + > + gEfiMdeModulePkgTokenSpaceGuid.PcdResetOnMemoryTypeInformationChange|FALSE > + gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile|{ 0x21, 0xaa, 0x2c, 0x46, 0x14, 0x76, 0x03, 0x45, 0x83, 0x6e, 0x8a, 0xb6, 0xf4, 0x66, 0x23, 0x31 } > + gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdShellFile|{ 0x83, 0xA5, 0x04, 0x7C, 0x3E, 0x9E, 0x1C, 0x4F, 0xAD, 0x65, 0xE0, 0x52, 0x68, 0xD0, 0xB4, 0xD1 } > + > + gEfiMdeModulePkgTokenSpaceGuid.PcdFirmwareVendor|L"Raspberry Pi 3 64-bit UEFI" > + > + # > + # Build timestamp. This is used if RtcEpochSeconds NVRAM > + # variable is not present. > + # > + gRaspberryPiTokenSpaceGuid.PcdBootEpochSeconds|$(BUILD_EPOCH) > + gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack|TRUE > + > +[PcdsDynamicHii.common.DEFAULT] > + > + # > + # Clock overrides. > + # > + > + gRaspberryPiTokenSpaceGuid.PcdCpuClock|L"CpuClock"|gConfigDxeFormSetGuid|0x0|0 > + > + # > + # SD-related. > + # > + > + gRaspberryPiTokenSpaceGuid.PcdSdIsArasan|L"SdIsArasan"|gConfigDxeFormSetGuid|0x0|0 > + gRaspberryPiTokenSpaceGuid.PcdMmcForce1Bit|L"MmcForce1Bit"|gConfigDxeFormSetGuid|0x0|0 > + gRaspberryPiTokenSpaceGuid.PcdMmcForceDefaultSpeed|L"MmcForceDefaultSpeed"|gConfigDxeFormSetGuid|0x0|0 > + gRaspberryPiTokenSpaceGuid.PcdMmcSdDefaultSpeedMHz|L"MmcSdDefaultSpeedMHz"|gConfigDxeFormSetGuid|0x0|25 > + gRaspberryPiTokenSpaceGuid.PcdMmcSdHighSpeedMHz|L"MmcSdHighSpeedMHz"|gConfigDxeFormSetGuid|0x0|50 > + gRaspberryPiTokenSpaceGuid.PcdMmcDisableMulti|L"MmcDisableMulti"|gConfigDxeFormSetGuid|0x0|0 > + > + # > + # Debug-related. > + # > + > + gRaspberryPiTokenSpaceGuid.PcdDebugEnableJTAG|L"DebugEnableJTAG"|gConfigDxeFormSetGuid|0x0|0 > + gRaspberryPiTokenSpaceGuid.PcdDebugShowUEFIExit|L"DebugShowUEFIExit"|gConfigDxeFormSetGuid|0x0|0 > + > + # > + # Display-related. > + # > + gRaspberryPiTokenSpaceGuid.PcdDisplayEnableVModes|L"DisplayEnableVModes"|gConfigDxeFormSetGuid|0x0|0 > + gRaspberryPiTokenSpaceGuid.PcdDisplayEnableSShot|L"DisplayEnableSShot"|gConfigDxeFormSetGuid|0x0|1 > + > + # > + # Common UEFI ones. > + # > + > + gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut|L"Timeout"|gEfiGlobalVariableGuid|0x0|5 > + # > + # This is silly, but by pointing SetupConXXX and ConXXX PCDs to > + # the same variables, I can use the graphical configuration to > + # change the mode used by ConSplitter. > + # > + gEfiMdeModulePkgTokenSpaceGuid.PcdSetupConOutColumn|L"Columns"|gRaspberryPiTokenSpaceGuid|0x0|80 > + gEfiMdeModulePkgTokenSpaceGuid.PcdConOutColumn|L"Columns"|gRaspberryPiTokenSpaceGuid|0x0|80 > + gEfiMdeModulePkgTokenSpaceGuid.PcdSetupConOutRow|L"Rows"|gRaspberryPiTokenSpaceGuid|0x0|25 > + gEfiMdeModulePkgTokenSpaceGuid.PcdConOutRow|L"Rows"|gRaspberryPiTokenSpaceGuid|0x0|25 > + > +[PcdsDynamicDefault.common] > + # > + # Set video resolution for boot options and for text setup. > + # > + gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution|0 > + gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution|0 > + gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoHorizontalResolution|640 > + gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoVerticalResolution|480 > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0 > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|0 > + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|0 > + > +################################################################################ > +# > +# Components Section - list of all EDK II Modules needed by this Platform > +# > +################################################################################ > +[Components.common] > + # > + # PEI Phase modules > + # > + ArmPlatformPkg/PrePi/PeiUniCore.inf > + > + # > + # DXE > + # > + MdeModulePkg/Core/Dxe/DxeMain.inf { > + > + NULL|MdeModulePkg/Library/DxeCrc32GuidedSectionExtractLib/DxeCrc32GuidedSectionExtractLib.inf > + } > + MdeModulePkg/Universal/PCD/Dxe/Pcd.inf { > + > + PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf > + } > + > + # > + # Architectural Protocols > + # > + ArmPkg/Drivers/CpuDxe/CpuDxe.inf > + MdeModulePkg/Core/RuntimeDxe/RuntimeDxe.inf > + Platform/Broadcom/Bcm283x/Drivers/VarBlockServiceDxe/VarBlockServiceDxe.inf > + MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf > + MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf { > + > + NULL|MdeModulePkg/Library/VarCheckUefiLib/VarCheckUefiLib.inf > + DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf > + } > +!if $(SECURE_BOOT_ENABLE) == TRUE > + MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf { > + > + NULL|SecurityPkg/Library/DxeImageVerificationLib/DxeImageVerificationLib.inf > + } > + SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.inf > +!else > + MdeModulePkg/Universal/SecurityStubDxe/SecurityStubDxe.inf > +!endif > + MdeModulePkg/Universal/CapsuleRuntimeDxe/CapsuleRuntimeDxe.inf > + MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf > + EmbeddedPkg/ResetRuntimeDxe/ResetRuntimeDxe.inf > + EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf { > + > + RealTimeClockLib|Platform/Broadcom/Bcm283x/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.inf > + } > + EmbeddedPkg/MetronomeDxe/MetronomeDxe.inf > + > + MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf > + MdeModulePkg/Universal/Console/ConSplitterDxe/ConSplitterDxe.inf > + Platform/Broadcom/Bcm283x/Drivers/GraphicsConsoleDxe/GraphicsConsoleDxe.inf > + MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf > + MdeModulePkg/Universal/SerialDxe/SerialDxe.inf > + Platform/Broadcom/Bcm283x/Drivers/DisplayDxe/DisplayDxe.inf > + > + MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf > + > + UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf > + Platform/Broadcom/Bcm283x/Drivers/Bcm2836InterruptDxe/Bcm2836InterruptDxe.inf > + Platform/Broadcom/Bcm283x/Drivers/RpiFirmwareDxe/RpiFirmwareDxe.inf > + Platform/Broadcom/Bcm283x/Drivers/RpiFdtDxe/RpiFdtDxe.inf > + Platform/Broadcom/Bcm283x/Drivers/ConfigDxe/ConfigDxe.inf > + ArmPkg/Drivers/TimerDxe/TimerDxe.inf > + MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf > + MdeModulePkg/Universal/EbcDxe/EbcDxe.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 > + > + # > + # ACPI Support > + # > + MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf > + MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf > + MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf > + Platform/Broadcom/Bcm283x/AcpiTables/AcpiTables.inf > + > + # > + # SMBIOS Support > + # > + Platform/Broadcom/Bcm283x/Drivers/PlatformSmbiosDxe/PlatformSmbiosDxe.inf > + MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf > + > + # > + # Bds > + # > + MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf > + MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf > + MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf > + MdeModulePkg/Universal/DriverHealthManagerDxe/DriverHealthManagerDxe.inf > + MdeModulePkg/Universal/BdsDxe/BdsDxe.inf > + Platform/Broadcom/Bcm283x/Drivers/Logo/LogoDxe.inf > + MdeModulePkg/Application/UiApp/UiApp.inf { > + > + NULL|MdeModulePkg/Library/DeviceManagerUiLib/DeviceManagerUiLib.inf > + NULL|MdeModulePkg/Library/BootManagerUiLib/BootManagerUiLib.inf > + NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf > + } > + > + # > + # SCSI Bus and Disk Driver > + # > + MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf > + MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf > + > + # > + # USB Support > + # > + Platform/Broadcom/Bcm283x/Drivers/DwUsbHostDxe/DwUsbHostDxe.inf > + MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf > + MdeModulePkg/Bus/Usb/UsbKbDxe/UsbKbDxe.inf > + MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf > + OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772b.inf > + > + # > + # SD/MMC support > + # > + Platform/Broadcom/Bcm283x/Drivers/SdHostDxe/SdHostDxe.inf > + Platform/Broadcom/Bcm283x/Drivers/ArasanMmcHostDxe/ArasanMmcHostDxe.inf > + Platform/Broadcom/Bcm283x/Drivers/PiMmcDxe/MmcDxe.inf > + > + # > + # Networking stack > + # > + MdeModulePkg/Universal/Network/DpcDxe/DpcDxe.inf > + MdeModulePkg/Universal/Network/ArpDxe/ArpDxe.inf > + MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Dxe.inf > + MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Dxe.inf > + MdeModulePkg/Universal/Network/MnpDxe/MnpDxe.inf > + MdeModulePkg/Universal/Network/VlanConfigDxe/VlanConfigDxe.inf > + MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Dxe.inf > + MdeModulePkg/Universal/Network/Tcp4Dxe/Tcp4Dxe.inf > + MdeModulePkg/Universal/Network/Udp4Dxe/Udp4Dxe.inf > + MdeModulePkg/Universal/Network/UefiPxeBcDxe/UefiPxeBcDxe.inf > + MdeModulePkg/Universal/Network/IScsiDxe/IScsiDxe.inf > + > + # > + # UEFI application (Shell Embedded Boot Loader) > + # > + ShellPkg/Application/Shell/Shell.inf { > + > + 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/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 > + > + > + gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0xFF > + gEfiShellPkgTokenSpaceGuid.PcdShellLibAutoInitialize|FALSE > + gEfiMdePkgTokenSpaceGuid.PcdUefiLibMaxPrintBufferSize|8000 > + gEfiShellPkgTokenSpaceGuid.PcdShellFileOperationSize|0x200000 > + } > diff --git a/Platform/Broadcom/Bcm283x/RaspberryPiPkg.fdf b/Platform/Broadcom/Bcm283x/RaspberryPiPkg.fdf > new file mode 100644 > index 000000000000..4da8849b3646 > --- /dev/null > +++ b/Platform/Broadcom/Bcm283x/RaspberryPiPkg.fdf > @@ -0,0 +1,450 @@ > +## @file > +# > +# Copyright (c) 2011-2015, ARM Limited. All rights reserved. > +# Copyright (c) 2014, Linaro Limited. All rights reserved. > +# Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved. > +# Copyright (c) 2017 - 2018, Andrei Warkentin > +# > +# 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.RPI_EFI] > +BaseAddress = 0x00000000|gArmTokenSpaceGuid.PcdFdBaseAddress > +Size = 0x00200000|gArmTokenSpaceGuid.PcdFdSize > +ErasePolarity = 1 > + > +BlockSize = 0x00001000|gRaspberryPiTokenSpaceGuid.PcdFirmwareBlockSize > +NumBlocks = 0x200 > + > +################################################################################ > +# > +# 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 > +# > +################################################################################ > + > +# > +# ATF primary boot image > +# > +0x00000000|0x00010000 > +FILE = Platform/Broadcom/Bcm283x/Binary/bl1.bin > + > +# > +# DTB. > +# > +0x00010000|0x00010000 > +DATA = { 0x00 } > + > +# > +# ATF secondary boot image in FIP format (BL2 + BL31) > +# > +0x00020000|0x00010000 > +FILE = Platform/Broadcom/Bcm283x/Binary/fip.bin > + > +# > +# UEFI image > +# > +0x00030000|0x001b0000 > +gArmTokenSpaceGuid.PcdFvBaseAddress|gArmTokenSpaceGuid.PcdFvSize > +FV = FVMAIN_COMPACT > + > +# > +# Variables (0x20000 overall). > +# > +# 0x001e0000 - 0x001edfff EFI_FIRMWARE_VOLUME_HEADER > +# 0x001ee000 - 0x001eefff Event log > +# 0x001ef000 - 0x001effff EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER- > +# 0x001f0000 - 0x001fffff Data > +# > + > +# NV_VARIABLE_STORE > +0x001e0000|0x0000e000 > +gRaspberryPiTokenSpaceGuid.PcdNvStorageVariableBase|gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize > + > +DATA = { > + ## This is the EFI_FIRMWARE_VOLUME_HEADER > + # ZeroVector [] > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + # FileSystemGuid: gEfiSystemNvDataFvGuid = > + # { 0xFFF12B8D, 0x7696, 0x4C8B, > + # { 0xA9, 0x85, 0x27, 0x47, 0x07, 0x5B, 0x4F, 0x50 }} > + 0x8D, 0x2B, 0xF1, 0xFF, 0x96, 0x76, 0x8B, 0x4C, > + 0xA9, 0x85, 0x27, 0x47, 0x07, 0x5B, 0x4F, 0x50, > + # FvLength: 0x20000 > + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, > + # Signature "_FVH" # Attributes > + 0x5f, 0x46, 0x56, 0x48, 0xff, 0xfe, 0x04, 0x00, > + # HeaderLength > + 0x48, 0x00, > + # CheckSum > + 0x19, 0xF9, > + # ExtHeaderOffset #Reserved #Revision > + 0x00, 0x00, 0x00, 0x02, > + # Blockmap[0]: 0x20 Blocks * 0x1000 Bytes / Block > + 0x20, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, > + # Blockmap[1]: End > + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, > + ## This is the VARIABLE_STORE_HEADER > + # It is compatible with SECURE_BOOT_ENABLE == FALSE as well. > + # Signature: gEfiAuthenticatedVariableGuid = > + # { 0xaaf32c78, 0x947b, 0x439a, > + # { 0xa1, 0x80, 0x2e, 0x14, 0x4e, 0xc3, 0x77, 0x92 }} > + 0x78, 0x2c, 0xf3, 0xaa, 0x7b, 0x94, 0x9a, 0x43, > + 0xa1, 0x80, 0x2e, 0x14, 0x4e, 0xc3, 0x77, 0x92, > + # Size: 0xe000 (gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableSize) - > + # 0x48 (size of EFI_FIRMWARE_VOLUME_HEADER) = 0xdfb8 > + # This can speed up the Variable Dispatch a bit. > + 0xB8, 0xDF, 0x00, 0x00, > + # FORMATTED: 0x5A #HEALTHY: 0xFE #Reserved: UINT16 #Reserved1: UINT32 > + 0x5A, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 > +} > + > +# NV_EVENT_LOG > +0x001ee000|0x00001000 > +gRaspberryPiTokenSpaceGuid.PcdNvStorageEventLogBase|gRaspberryPiTokenSpaceGuid.PcdNvStorageEventLogSize > + > +# NV_FTW_WORKING header > +0x001ef000|0x00001000 > +gRaspberryPiTokenSpaceGuid.PcdNvStorageFtwWorkingBase|gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize > + > +DATA = { > + # EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER->Signature = gEdkiiWorkingBlockSignatureGuid = > + # { 0x9e58292b, 0x7c68, 0x497d, { 0xa0, 0xce, 0x65, 0x0, 0xfd, 0x9f, 0x1b, 0x95 }} > + 0x2b, 0x29, 0x58, 0x9e, 0x68, 0x7c, 0x7d, 0x49, > + 0xa0, 0xce, 0x65, 0x0, 0xfd, 0x9f, 0x1b, 0x95, > + # Crc:UINT32 #WorkingBlockValid:1, WorkingBlockInvalid:1, Reserved > + 0x2c, 0xaf, 0x2c, 0x64, 0xFE, 0xFF, 0xFF, 0xFF, > + # WriteQueueSize: UINT64 > + 0xE0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 > +} > + > +# NV_FTW_WORKING data > +0x001f0000|0x00010000 > +gRaspberryPiTokenSpaceGuid.PcdNvStorageFtwSpareBase|gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize > + > +################################################################################ > +# > +# 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] > +FvNameGuid = 9a15aa37-d555-4a4e-b541-86391ff68164 > +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 > + > + INF MdeModulePkg/Core/Dxe/DxeMain.inf > + INF MdeModulePkg/Universal/PCD/Dxe/Pcd.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 Platform/Broadcom/Bcm283x/Drivers/VarBlockServiceDxe/VarBlockServiceDxe.inf > + INF MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWriteDxe.inf > + INF MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf > +!if $(SECURE_BOOT_ENABLE) == TRUE > + INF SecurityPkg/VariableAuthenticated/SecureBootConfigDxe/SecureBootConfigDxe.inf > +!endif > + INF MdeModulePkg/Universal/MonotonicCounterRuntimeDxe/MonotonicCounterRuntimeDxe.inf > + INF EmbeddedPkg/ResetRuntimeDxe/ResetRuntimeDxe.inf > + INF EmbeddedPkg/RealTimeClockRuntimeDxe/RealTimeClockRuntimeDxe.inf > + INF EmbeddedPkg/MetronomeDxe/MetronomeDxe.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 Platform/Broadcom/Bcm283x/Drivers/GraphicsConsoleDxe/GraphicsConsoleDxe.inf > + INF MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf > + INF MdeModulePkg/Universal/SerialDxe/SerialDxe.inf > + INF Platform/Broadcom/Bcm283x/Drivers/DisplayDxe/DisplayDxe.inf > + > + INF UefiCpuPkg/CpuIo2Dxe/CpuIo2Dxe.inf > + INF Platform/Broadcom/Bcm283x/Drivers/Bcm2836InterruptDxe/Bcm2836InterruptDxe.inf > + INF Platform/Broadcom/Bcm283x/Drivers/RpiFirmwareDxe/RpiFirmwareDxe.inf > + INF Platform/Broadcom/Bcm283x/Drivers/RpiFdtDxe/RpiFdtDxe.inf > + INF Platform/Broadcom/Bcm283x/Drivers/ConfigDxe/ConfigDxe.inf > + INF ArmPkg/Drivers/TimerDxe/TimerDxe.inf > + INF MdeModulePkg/Universal/WatchdogTimerDxe/WatchdogTimer.inf > + INF MdeModulePkg/Universal/EbcDxe/EbcDxe.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 > + > + # > + # UEFI application (Shell Embedded Boot Loader) > + # > + INF ShellPkg/Application/Shell/Shell.inf > + > + # > + # ACPI Support > + # > + INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf > + INF MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf > + INF MdeModulePkg/Universal/Acpi/BootGraphicsResourceTableDxe/BootGraphicsResourceTableDxe.inf > + INF RuleOverride = ACPITABLE Platform/Broadcom/Bcm283x/AcpiTables/AcpiTables.inf > + > + # > + # SMBIOS Support > + # > + INF Platform/Broadcom/Bcm283x/Drivers/PlatformSmbiosDxe/PlatformSmbiosDxe.inf > + INF MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf > + > + # > + # Bds > + # > + INF MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf > + INF MdeModulePkg/Universal/DisplayEngineDxe/DisplayEngineDxe.inf > + INF MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf > + INF MdeModulePkg/Universal/DriverHealthManagerDxe/DriverHealthManagerDxe.inf > + INF MdeModulePkg/Universal/BdsDxe/BdsDxe.inf > + INF MdeModulePkg/Application/UiApp/UiApp.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 > + > + # > + # SCSI Bus and Disk Driver > + # > + INF MdeModulePkg/Bus/Scsi/ScsiBusDxe/ScsiBusDxe.inf > + INF MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf > + > + # > + # USB Support > + # > + INF Platform/Broadcom/Bcm283x/Drivers/DwUsbHostDxe/DwUsbHostDxe.inf > + INF MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf > + INF MdeModulePkg/Bus/Usb/UsbKbDxe/UsbKbDxe.inf > + INF MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf > + INF OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772b.inf > + > + # > + # SD/MMC support > + # > + INF Platform/Broadcom/Bcm283x/Drivers/SdHostDxe/SdHostDxe.inf > + INF Platform/Broadcom/Bcm283x/Drivers/ArasanMmcHostDxe/ArasanMmcHostDxe.inf > + INF Platform/Broadcom/Bcm283x/Drivers/PiMmcDxe/MmcDxe.inf > + > + # > + # Pi logo (splash screen) > + # > + INF Platform/Broadcom/Bcm283x/Drivers/Logo/LogoDxe.inf > + > + # > + # FDT (GUID matches mRaspberryPiFfsFileGuid in RaspberryPiPlatformDxe) > + # > + FILE FREEFORM = DF5DA223-1D27-47C3-8D1B-9A41B55A18BC { > + SECTION RAW = Platform/Broadcom/Bcm283x/DeviceTree/bcm2710-rpi-3-b.dtb > + } > + > +[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/PeiUniCore.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) > +# } > +# } > +# } > +# > +############################################################################ > + > +[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 > + RAW ACPI Optional |.acpi > + RAW ASL Optional |.aml > + } > + > +[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 > + } > diff --git a/Platform/Broadcom/Bcm283x/Readme.md b/Platform/Broadcom/Bcm283x/Readme.md > new file mode 100644 > index 000000000000..a2633434c7bf > --- /dev/null > +++ b/Platform/Broadcom/Bcm283x/Readme.md > @@ -0,0 +1,263 @@ > +Raspberry Pi (Broadcom BCM283x) EDK2 Platform Support > +===================================================== > + > +# Summary > + > +This is a port of 64-bit Tiano Core UEFI firmware for the Raspberry Pi 3/3B+ platforms, > +based on [Ard Bisheuvel's 64-bit](http://www.workofard.com/2017/02/uefi-on-the-pi/) > +and [Microsoft's 32-bit](https://github.com/ms-iot/RPi-UEFI/tree/ms-iot/Pi3BoardPkg) > +implementations, as maintained by [Andrei Warkentin](https://github.com/andreiw/RaspberryPiPkg). > + > +This is meant as a generally useful 64-bit ATF + UEFI implementation for the Raspberry > +Pi 3/3B+ which should be good enough for most kind of UEFI development, as well as for > +running consummer Operating Systems in such as Linux or Windows. > + > +Raspberry Pi is a trademark of the [Raspberry Pi Foundation](http://www.raspberrypi.org). > + > +# Status > + > +This firmware, that has been validated to compile against the current > +[edk2](https://github.com/tianocore/edk2)/[edk2-platforms](https://github.com/tianocore/edk2-platforms), > +should be able to boot Linux (SUSE, Ubuntu), NetBSD, FreeBSD as well as Windows 10 ARM64 > +(full GUI version). > + > +It also provides support for ATF ([Arm Trusted Platform](https://github.com/ARM-software/arm-trusted-firmware)). > + > +HDMI and the mini-UART serial port can be used for output devices, with mirrored output. > +USB keyboards and the mini-UART serial port can be used as input. > + > +The boot order is currently hardcoded, first to the USB ports and then to the uSD card. > +If there no bootable media media is found, the UEFI Shell is launched. > +Esc enters platform setup. F1 boots the UEFI Shell. > + > +# Building > + > +(These instructions were validated against the latest edk2 / edk2-platforms / > +edk2-non-osi as of 2018.12.06, on a Debian 9.6 x64 system). > + > +You may need to install the relevant compilation tools. Especially you should have the > +ACPI Source Language (ASL) compiler, `nasm` as well as a native compiler installed. > +On a Debian system, you can get these prerequisites installed with: > +``` > +sudo apt-get install build-essential acpica-tools nasm uuid-dev > +``` > + > +**IMPORTANT:** Do not be tempted to install Debian's ARM64 GCC cross compiler package, > +as this currently results in GCC 6.x being installed, which is known to create issues. > +Instead, you should stick with GCC 5.5, such as the one provided by Linaro, as per the > +instructions below. > + > +You can then build the firmware as follows: > + > +``` > +mkdir ~/workspace > +cd ~/workspace > +git clone https://github.com/tianocore/edk2.git > +# The following is only needed once, after you cloned edk2 > +make -C edk2/BaseTools > +# You may also have to issue git submodule init/update in edk2 if you want to enable Secure Boot > +git clone https://github.com/tianocore/edk2-platforms.git > +git clone https://github.com/tianocore/edk2-non-osi.git > +# You *MUST* use a GCC5 toolchain (*NOT* GCC6 or later), such as the one from > +# https://releases.linaro.org/components/toolchain/binaries/5.5-2017.10/aarch64-linux-gnu/ > +# GCC6 and later toolchains may result in Synchronous Exceptions. You have been warned! > +wget https://releases.linaro.org/components/toolchain/binaries/5.5-2017.10/aarch64-linux-gnu/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz > +tar -xJvf gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz > +# If you have multiple AARCH64 toolchains, make sure the GCC5 one comes first in your path > +export PATH=$PWD/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin:$PATH > +export GCC5_AARCH64_PREFIX=aarch64-linux-gnu- > +export WORKSPACE=$PWD > +export PACKAGES_PATH=$WORKSPACE/edk2:$WORKSPACE/edk2-platforms:$WORKSPACE/edk2-non-osi > +. edk2/edksetup.sh > +build -a AARCH64 -t GCC5 -p edk2-platforms/Platform/Broadcom/Bcm283x/RaspberryPiPkg.dsc -b RELEASE -DBUILD_EPOCH=`date +%s` > +``` > + > +# Booting the firmware > + > +1. Format a uSD card as FAT32 > +2. Copy the generated `RPI_EFI.fd` firmware onto the partition > +3. Download and copy the following files from https://github.com/raspberrypi/firmware/tree/master/boot > + - `bootcode.bin` > + - `fixup.dat` > + - `start.elf` > +4. Create a `config.txt` with the following content: > + ``` > + arm_control=0x200 > + enable_uart=1 > + armstub=RPI_EFI.fd > + disable_commandline_tags=1 > + ``` > +5. Insert the uSD card and power up the Pi. > + > +Note that if you have a model 3+ or a model 3 where you enabled USB boot through OTP > +(see [here](https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/msd.md)) > +you may also be able to boot from a FAT32 USB driver rather than uSD. > + > +# Notes > + > +## ARM Trusted Firmware (ATF) > + > +The ATF binaries being used were compiled from the latest ATF source. > + > +For more details on the ATF compilation, see the [README](./Binary/README.md) in the `Binary/` directory. > + > +## Custom Device Tree > + > +The default Device Tree included in the firmware is the one for a Raspberry Pi 3 Model B (not B+). > +If you want to use a different Device Tree, to boot a Pi 3 Model B+ for instance (for which a > +DTB is also provided under `DeviceTree/`), you should copy the relevant `.dtb` into the root of > +the SD or USB, and then edit your `config.txt` so that it looks like: > + > +``` > +(...) > +disable_commandline_tags=2 > +device_tree_address=0x10000 > +device_tree_end=0x20000 > +device_tree=bcm2710-rpi-3-b-plus.dtb > +``` > + > +Note: the address range **must** be `[0x10000:0x20000]`. > +`dtoverlay` and `dtparam` parameters are also supported **when** providing a Device Tree`. > + > +## Custom `bootargs` > + > +This firmware will honor the command line passed by the GPU via `cmdline.txt`. > + > +Note, that the ultimate contents of `/chosen/bootargs` are a combination of several pieces: > +- Original `/chosen/bootargs` if using the internal DTB. Seems to be completely discarded by GPU when booting with a custom device tree. > +- GPU-passed hardware configuration. This one is always present. > +- Additional boot options passed via `cmdline.txt`. > + > +# Tested Platforms > + > +## Ubuntu > + > +[Ubuntu 18.04 LTS](http://releases.ubuntu.com/18.04/) has been tested and confirmed to work, > +on a Raspberry 3 Model B, including the installation process. Note however that network > +installation and networking may not work on the Model B+, due to the `lan78xx` Linux driver > +still requiring some support. > + > +Below are the steps you can follow to install Ubuntu LTS onto SD/USB: > +* Download the latest Ubuntu LTS ARM64 [`mini.iso`](http://ports.ubuntu.com/ubuntu-ports/dists/bionic/main/installer-arm64/current/images/netboot/mini.iso). > +* Partition the media as MBR and create a ~200 MB FAT32 partition on it with MBR type `0x0c`. > + Note: Do not be tempted to use GPT partition scheme or `0xef` (EFI System Partition) for the > + type, as none of these are supported by the Raspberry Pi's internal boot rom. > +* Extract the full content of the ISO onto the partition you created. > +* Also extract the GRUB EFI bootloader `bootaa64.efi` from `/boot/grub/efi.img` to `/boot/grub/`. > + Note: Do not be tempted to copy this file to another directory (such as `/efi/boot/`) as GRUB looks for its > + modules and configuration data in the same directory as the EFI loader and also, the installation > + process will create a `bootaa64.efi` into `/efi/boot/`. > +* If needed, copy the UEFI firmware files (`RPI_EFI.fd`, `bootcode.bin`, `fixup.dat` and `start.elf`) > + onto the FAT partition. > +* Boot the pi and let it go into the UEFI shell. > +* Navigate to `fs0:` then `/boot/grub/` and launch the GRUB efi loader. > +* Follow the Ubuntu installation process. > + > +Note: Because Ubuntu operates in quiet mode by default (no boot messages), you may think the system is frozen > +on first reboot after installation. However, if you wait long enough you **will** get to a login prompt. > + > +Once Linux is running, if desired, you can disable quiet boot, as well as force the display > +of the GRUB selector, by editing `/etc/default/grub` and changing: > +* `GRUB_TIMEOUT_STYLE=hidden` → `GRUB_TIMEOUT_STYLE=menu` > +* `GRUB_CMDLINE_LINUX_DEFAULT="splash quiet"` → `GRUB_CMDLINE_LINUX_DEFAULT=""` > + > +Then, to have your changes applied run `update-grub` and reboot. > + > +## Other Linux distributions > + > +* Debian ARM64 does not currently work, most likely due to missing required module support > + in its kernel. However its installation process works, so it may be possible to get it > + running with a custom kernel. > + > +* OpenSUSE Leap 42.3 has been reported to work on Raspberry 3 Model B. > + > +* Other ARM64 Linux releases, that support UEFI boot and have the required hardware support > + for Pi hardware are expected to run, though their installation process might require some > + cajoling. > + > +## Windows > + > +Windows 10 1809 for ARM64 (build 17763) has been tested and confirmed to work (after replacing > +`C:\Windows\System32\Drivers\WppRecorder.sys` with an older version, since the one from 1809 > +appears to be buggy across all archs, and results in a similar BSOD when trying to run Windows > +To Go on x64 with native drivers for instance). > + > +Windows 10 1803 for ARM64 and earlier do not work due to the presence of a hardware ASSERT check > +in the Windows kernel, that was removed in later versions. > + > +You probably want to look at https://www.worproject.ml/ as well as the > +[Windows thread in the original RaspberryPiPkg](https://github.com/andreiw/RaspberryPiPkg/issues/12) > +for installation details. > + > +## Other platforms > + > +Details you may need to run other platforms, including FreeBSD, is provided in the > +[Readme from the original RaspberryPiPkg](https://github.com/andreiw/RaspberryPiPkg). > + > +# Limitations > + > +## HDMI > + > +The UEFI HDMI video support relies on the VC (that's the GPU) > +firmware to correctly detect and configure the attached screen. > +Some screens are slow, and this detection may not occur fast > +enough. Finally, you may wish to be able to boot your Pi > +headless, yet be able to attach a display to it later for > +debugging. > + > +To accommodate these issues, the following extra lines > +are recommended for your `config.txt`: > +- `hdmi_force_hotplug=1` to allow plugging in video after system is booted. > +- `hdmi_group=1` and `hdmi_mode=4` to force a specific mode, both to accommodate > + late-plugged screens or buggy/slow screens. See [official documentation](https://www.raspberrypi.org/documentation/configuration/config-txt/video.md) > + to make sense of these parameters (example above sets up 720p 60Hz). > + > +## NVRAM > + > +The Raspberry Pi has no NVRAM. > + > +NVRAM is emulated, with the non-volatile store backed by the UEFI image itself. This means > +that any changes made in UEFI proper will be persisted, but changes made in HLOS will not. > +It would be nice to implement ATF-assisted warm reboot, to allow persisting HLOS > +NVRAM changes. > + > +## RTC > + > +The Rasberry Pi has no RTC. > + > +`RtcEpochSeconds` NVRAM variable is used to store the boot time > +This should allow you to set whatever date/time you > +want using the Shell date and time commands. While in UEFI > +or HLOS, the time will tick forward. `RtcEpochSeconds` > +is not updated on reboots. > + > +## uSD > + > +UEFI supports both the Arasan SDHCI and the Broadcom SDHost controllers to access the uSD slot. > +You can use either. The other controller gets routed to the SDIO card. The choice made will > +impact ACPI OSes booted (e.g. Windows 10). Arasan, being an SDIO controller, is usually used > +with the WiFi adapter where available. SDHost cannot be used with SDIO. In UEFI setup screen: > +- go to `Device Manager` > +- go to `Raspberry Pi Configuration` > +- go to `Chipset` > +- configure `Boot uSD Routing` > + > +Known issues: > +- Arasan HS/4bit support is missing. > +- No 8 bit mode support for (e)MMC (irrelevant for the Pi 3). > +- Hacky (e)MMC support (no HS). > +- No card removal/replacement detection, tons of timeouts and slow down during boot without an uSD card present. > + > +## USB > + > +- USB1 BBB mass storage devices untested (USB2 and USB3 devices are fine). > +- USB1 CBI mass storage devices don't work (e.g. HP FD-05PUB floppy). > + > +## ACPI > + > +ACPI should match the MS-IoT one. Both Arasan and SDHost SD controllers are exposed. > + > +## Missing Functionality > + > +- Network booting via onboard NIC. > +- Ability to switch UART use to PL011. > -- > 2.17.0.windows.1 >