new file mode 100644
GIT binary patch
literal 10368
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
VnYaXpw5|!qB_>{w6=slS=Kthj<*xt$
literal 0
HcmV?d00001
new file mode 100644
GIT binary patch
literal 10835
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
STUUjn3Fcvt6>2-n)c*k~k?$Y?
literal 0
HcmV?d00001
new file mode 100644
GIT binary patch
literal 7673
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
literal 0
HcmV?d00001
new file mode 100644
GIT binary patch
literal 8140
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
literal 0
HcmV?d00001
@@ -35,6 +35,7 @@
DEFINE EDK2_SKIP_PEICORE=1
!endif
+ DT_SUPPORT = FALSE
!include OpenPlatformPkg/Platforms/ARM/VExpress/ArmVExpress.dsc.inc
@@ -174,13 +175,8 @@
gEmbeddedTokenSpaceGuid.PcdPrePiCpuMemorySize|36
[PcdsDynamicDefault.common]
- #
- # The size of a dynamic PCD of the (VOID*) type can not be increased at run
- # time from its size at build time. Set the "PcdFdtDevicePaths" PCD to a 128
- # character "empty" string, to allow to be able to set FDT text device paths
- # up to 128 characters long.
- #
- gEmbeddedTokenSpaceGuid.PcdFdtDevicePaths|L" "
+ # embedded DTB to use -- default to a GICv3 Foundation model
+ gEmbeddedTokenSpaceGuid.PcdDtPlatformDefaultDtbSectionIndex|1
################################################################################
#
@@ -262,7 +258,13 @@
#
# ACPI Support
#
- MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf
+ MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf {
+!if $(DT_SUPPORT) == TRUE
+ <LibraryClasses>
+ NULL|EmbeddedPkg/Library/PlatformHasAcpiLib/PlatformHasAcpiLib.inf
+!endif
+ }
+
MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf
OpenPlatformPkg/Platforms/ARM/VExpress/AcpiTables/AcpiTables.inf
@@ -316,10 +318,9 @@
NULL|MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManagerUiLib.inf
}
+!if $(DT_SUPPORT) == TRUE
#
# FDT installation
#
- EmbeddedPkg/Drivers/FdtPlatformDxe/FdtPlatformDxe.inf {
- <LibraryClasses>
- BdsLib|ArmPkg/Library/BdsLib/BdsLib.inf
- }
+ EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf
+!endif
@@ -170,35 +170,18 @@ FvNameGuid = 87940482-fc81-41c3-87e6-399cf85ac8a0
# FV Filesystem
INF MdeModulePkg/Universal/FvSimpleFileSystemDxe/FvSimpleFileSystemDxe.inf
+!if $(DT_SUPPORT) == TRUE
#
# FDT installation
#
- # The UEFI driver is at the end of the list of the driver to be dispatched
- # after the device drivers (eg: Ethernet) to ensure we have support for them.
- INF EmbeddedPkg/Drivers/FdtPlatformDxe/FdtPlatformDxe.inf
-
-!ifdef $(DTB_DIR)
- #
- # Embed flattened device tree (FDT) images for all known
- # variants of this platform
- #
- FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2) {
- $(DTB_DIR)/fvp-base-gicv2-psci.dtb
- }
- FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2Legacy) {
- $(DTB_DIR)/fvp-base-gicv2legacy-psci.dtb
- }
- FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV3) {
- $(DTB_DIR)/fvp-base-gicv3-psci.dtb
- }
- FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2) {
- $(DTB_DIR)/fvp-foundation-gicv2-psci.dtb
- }
- FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2Legacy) {
- $(DTB_DIR)/fvp-foundation-gicv2legacy-psci.dtb
- }
- FILE RAW = PCD (gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV3) {
- $(DTB_DIR)/fvp-foundation-gicv3-psci.dtb
+ INF EmbeddedPkg/Drivers/DtPlatformDxe/DtPlatformDxe.inf
+
+ # builtin device tree binaries -- order matches ARM_VEXPRESS_PLATFORM_ID
+ FILE FREEFORM = 25462CDA-221F-47DF-AC1D-259CFAA4E326 {
+ SECTION RAW = OpenPlatformPkg/Platforms/ARM/Binary/DeviceTree/fvp-base-gicv2-psci.dtb
+ SECTION RAW = OpenPlatformPkg/Platforms/ARM/Binary/DeviceTree/fvp-base-gicv3-psci.dtb
+ SECTION RAW = OpenPlatformPkg/Platforms/ARM/Binary/DeviceTree/fvp-foundation-gicv2-psci.dtb
+ SECTION RAW = OpenPlatformPkg/Platforms/ARM/Binary/DeviceTree/fvp-foundation-gicv3-psci.dtb
}
!endif
Replace the elaborate but awkward FdtPlatformDxe with the new DtPlatformDxe, which supports embedded DTBs only. This is sufficient for virtually all use cases, and if it is not, there are various way to override the device tree binary presented to the OS. As a bonus, this driver makes ACPI and DT mutually exclusive - this can be configured via the setup screen. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- Platforms/ARM/Binary/DeviceTree/fvp-base-gicv2-psci.dtb | Bin 0 -> 10368 bytes Platforms/ARM/Binary/DeviceTree/fvp-base-gicv3-psci.dtb | Bin 0 -> 10835 bytes Platforms/ARM/Binary/DeviceTree/fvp-foundation-gicv2-psci.dtb | Bin 0 -> 7673 bytes Platforms/ARM/Binary/DeviceTree/fvp-foundation-gicv3-psci.dtb | Bin 0 -> 8140 bytes Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc | 25 +++++++------- Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.fdf | 35 +++++--------------- 6 files changed, 22 insertions(+), 38 deletions(-)