summaryrefslogtreecommitdiff
path: root/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/AArch64
diff options
context:
space:
mode:
authorOlivier Martin <Olivier.Martin@arm.com>2015-07-08 16:20:30 +0000
committeroliviermartin <oliviermartin@Edk2>2015-07-08 16:20:30 +0000
commit51dc120608129b652a1fdbb3f0d9c9a7f8a4b748 (patch)
tree43b69efff9a4db062216e6c9f58a5aa3af4c094b /ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/AArch64
parent41a55ffe795c7507def0dbe61ae87c9633c13833 (diff)
downloadedk2-platforms-51dc120608129b652a1fdbb3f0d9c9a7f8a4b748.tar.xz
Revert "ArmPlatformPkg/ArmVExpressDxe: Change FDT default file names."
This reverts commit SVN rev17862. The former commit was breaking the build when DTB_DIR is defined. It has been the patch would be reverted for the time being. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin <Olivier.Martin@arm.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17889 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/AArch64')
-rw-r--r--ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/AArch64/ArmFvpDxeAArch64.c65
1 files changed, 47 insertions, 18 deletions
diff --git a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/AArch64/ArmFvpDxeAArch64.c b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/AArch64/ArmFvpDxeAArch64.c
index 1e990d140d..c368957dcd 100644
--- a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/AArch64/ArmFvpDxeAArch64.c
+++ b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/AArch64/ArmFvpDxeAArch64.c
@@ -22,10 +22,14 @@
// model or hardware platforms).
//
CONST ARM_VEXPRESS_PLATFORM ArmVExpressPlatforms[] = {
- { ARM_FVP_VEXPRESS_AEMv8x4, FixedPcdGetPtr (PcdFdtFvpVExpressAEMv8x4), L"rtsm_ve-aemv8a.dtb" },
- { ARM_FVP_BASE, FixedPcdGetPtr (PcdFdtFvpBaseAEMv8x4), L"fvp-base.dtb" },
- { ARM_FVP_FOUNDATION, FixedPcdGetPtr (PcdFdtFvpFoundation), L"fvp-foundation.dtb" },
- { ARM_FVP_VEXPRESS_UNKNOWN, &gZeroGuid }
+ { ARM_FVP_VEXPRESS_AEMv8x4, FixedPcdGetPtr (PcdFdtFvpVExpressAEMv8x4), L"rtsm_ve-aemv8a.dtb" },
+ { ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2, FixedPcdGetPtr (PcdFdtFvpBaseAEMv8x4GicV2), L"fvp-base-gicv2-psci.dtb" },
+ { ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2_LEGACY, FixedPcdGetPtr (PcdFdtFvpBaseAEMv8x4GicV2Legacy), L"fvp-base-gicv2legacy-psci.dtb" },
+ { ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV3, FixedPcdGetPtr (PcdFdtFvpBaseAEMv8x4GicV3), L"fvp-base-gicv3-psci.dtb" },
+ { ARM_FVP_FOUNDATION_GICV2, FixedPcdGetPtr (PcdFdtFvpFoundationGicV2), L"fvp-foundation-gicv2-psci.dtb" },
+ { ARM_FVP_FOUNDATION_GICV2_LEGACY, FixedPcdGetPtr (PcdFdtFvpFoundationGicV2Legacy), L"fvp-foundation-gicv2legacy-psci.dtb" },
+ { ARM_FVP_FOUNDATION_GICV3, FixedPcdGetPtr (PcdFdtFvpFoundationGicV3), L"fvp-foundation-gicv3-psci.dtb" },
+ { ARM_FVP_VEXPRESS_UNKNOWN }
};
/**
@@ -45,9 +49,11 @@ ArmVExpressGetPlatform (
OUT CONST ARM_VEXPRESS_PLATFORM** Platform
)
{
- EFI_STATUS Status;
- UINT32 SysId;
- UINT32 FvpSysId;
+ EFI_STATUS Status;
+ UINT32 SysId;
+ UINT32 FvpSysId;
+ UINT32 VariantSysId;
+ ARM_GIC_ARCH_REVISION GicRevision;
ASSERT (Platform != NULL);
@@ -55,23 +61,46 @@ ArmVExpressGetPlatform (
SysId = MmioRead32 (ARM_VE_SYS_ID_REG);
if (SysId != ARM_RTSM_SYS_ID) {
- //
- // Keep only the HBI board number and the platform type fields of the
- // system id register to identify if we are running on the FVP base or
- // foundation model.
- //
- FvpSysId = SysId & (ARM_FVP_SYS_ID_HBI_MASK |
- ARM_FVP_SYS_ID_PLAT_MASK );
+ // Remove the GIC variant to identify if we are running on the FVP Base or
+ // Foundation models
+ FvpSysId = SysId & (ARM_FVP_SYS_ID_HBI_MASK |
+ ARM_FVP_SYS_ID_PLAT_MASK );
+ // Extract the variant from the SysId
+ VariantSysId = SysId & ARM_FVP_SYS_ID_VARIANT_MASK;
if (FvpSysId == ARM_FVP_BASE_BOARD_SYS_ID) {
- Status = ArmVExpressGetPlatformFromId (ARM_FVP_BASE, Platform);
+ if (VariantSysId == ARM_FVP_GIC_VE_MMAP) {
+ // FVP Base Model with legacy GIC memory map
+ Status = ArmVExpressGetPlatformFromId (ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2_LEGACY, Platform);
+ } else {
+ GicRevision = ArmGicGetSupportedArchRevision ();
+
+ if (GicRevision == ARM_GIC_ARCH_REVISION_2) {
+ // FVP Base Model with GICv2 support
+ Status = ArmVExpressGetPlatformFromId (ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2, Platform);
+ } else {
+ // FVP Base Model with GICv3 support
+ Status = ArmVExpressGetPlatformFromId (ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV3, Platform);
+ }
+ }
} else if (FvpSysId == ARM_FVP_FOUNDATION_BOARD_SYS_ID) {
- Status = ArmVExpressGetPlatformFromId (ARM_FVP_FOUNDATION, Platform);
+ if (VariantSysId == ARM_FVP_GIC_VE_MMAP) {
+ // FVP Foundation Model with legacy GIC memory map
+ Status = ArmVExpressGetPlatformFromId (ARM_FVP_FOUNDATION_GICV2_LEGACY, Platform);
+ } else {
+ GicRevision = ArmGicGetSupportedArchRevision ();
+
+ if (GicRevision == ARM_GIC_ARCH_REVISION_2) {
+ // FVP Foundation Model with GICv2
+ Status = ArmVExpressGetPlatformFromId (ARM_FVP_FOUNDATION_GICV2, Platform);
+ } else {
+ // FVP Foundation Model with GICv3
+ Status = ArmVExpressGetPlatformFromId (ARM_FVP_FOUNDATION_GICV3, Platform);
+ }
+ }
}
} else {
- //
// FVP Versatile Express AEMv8
- //
Status = ArmVExpressGetPlatformFromId (ARM_FVP_VEXPRESS_AEMv8x4, Platform);
}