**/\r
\r
#include "ArmVExpressInternal.h"\r
+#include <Library/ArmGicLib.h>\r
\r
//\r
-// Description of the two AARCH64 model platforms :\r
+// Description of the AARCH64 model platforms :\r
// just the platform id for the time being.\r
// Platform ids are defined in ArmVExpressInternal.h for\r
// all "ArmVExpress-like" platforms (AARCH64 or ARM architecture,\r
// model or hardware platforms).\r
//\r
CONST ARM_VEXPRESS_PLATFORM ArmVExpressPlatforms[] = {\r
- { ARM_FVP_VEXPRESS_AEMv8x4 },\r
- { ARM_FVP_BASE_AEMv8x4_AEMv8x4 },\r
- { ARM_FVP_FOUNDATION },\r
- { ARM_FVP_VEXPRESS_UNKNOWN }\r
+ { ARM_FVP_VEXPRESS_AEMv8x4, { 0x240d627e, 0xeb4d, 0x447d, { 0x86, 0x30, 0xf2, 0x12, 0x3b, 0xc3, 0x89, 0x3f } }, L"rtsm_ve-aemv8a.dtb" },\r
+ { ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2, { 0xfbed0b94, 0x3c81, 0x49e4, { 0xbd, 0xec, 0xd4, 0xf4, 0xa8, 0x47, 0xeb, 0x51 } }, L"fvp-base-gicv2-psci.dtb" },\r
+ { ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2_LEGACY, { 0x6d8dfd91, 0x431a, 0x4e6c, { 0x84, 0x5a, 0x15, 0xf1, 0xfc, 0x8d, 0x9b, 0xe2 } }, L"fvp-base-gicv2legacy-psci.dtb" },\r
+ { ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV3, { 0xa8ac2953, 0xc4bb, 0x4914, { 0x87, 0xf5, 0xc5, 0x97, 0x5d, 0x7b, 0x32, 0xd1 } }, L"fvp-base-gicv3-psci.dtb" },\r
+ { ARM_FVP_FOUNDATION_GICV2, { 0x4328cb83, 0x6e50, 0x4cb8, { 0xaa, 0x8c, 0xfb, 0x7a, 0xba, 0xba, 0x37, 0xd8 } }, L"fvp-foundation-gicv2-psci.dtb" },\r
+ { ARM_FVP_FOUNDATION_GICV2_LEGACY, { 0x6af00d18, 0x6dfe, 0x45ed, { 0xa6, 0xc4, 0xb4, 0x4d, 0x57, 0xfd, 0xd8, 0xf5 } }, L"fvp-foundation-gicv2legacy-psci.dtb" },\r
+ { ARM_FVP_FOUNDATION_GICV3, { 0x4a17b7fa, 0xf052, 0x4dc1, { 0x92, 0x79, 0x43, 0x80, 0x92, 0x41, 0xf9, 0x98 } }, L"fvp-foundation-gicv3-psci.dtb" },\r
+ { ARM_FVP_VEXPRESS_UNKNOWN, { 0x0, 0x0, 0x0, { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } } }\r
};\r
\r
/**\r
{\r
EFI_STATUS Status;\r
UINT32 SysId;\r
+ UINT32 FvpSysId;\r
+ UINT32 VariantSysId;\r
+ ARM_GIC_ARCH_REVISION GicRevision;\r
\r
ASSERT (Platform != NULL);\r
\r
\r
SysId = MmioRead32 (ARM_VE_SYS_ID_REG);\r
if (SysId != ARM_RTSM_SYS_ID) {\r
- // Take out the FVP GIC variant to reduce the permutations. The GIC driver\r
- // detects the version and does the right thing.\r
- SysId &= ~ARM_FVP_SYS_ID_VARIANT_MASK;\r
- if (SysId == (ARM_FVP_BASE_SYS_ID & ~ARM_FVP_SYS_ID_VARIANT_MASK)) {\r
- Status = ArmVExpressGetPlatformFromId (ARM_FVP_BASE_AEMv8x4_AEMv8x4, Platform);\r
- } else if (SysId == (ARM_FVP_FOUNDATION_SYS_ID & ~ARM_FVP_SYS_ID_VARIANT_MASK)) {\r
- Status = ArmVExpressGetPlatformFromId (ARM_FVP_FOUNDATION, Platform);\r
+ // Remove the GIC variant to identify if we are running on the FVP Base or\r
+ // Foundation models\r
+ FvpSysId = SysId & (ARM_FVP_SYS_ID_HBI_MASK |\r
+ ARM_FVP_SYS_ID_PLAT_MASK );\r
+ // Extract the variant from the SysId\r
+ VariantSysId = SysId & ARM_FVP_SYS_ID_VARIANT_MASK;\r
+\r
+ if (FvpSysId == ARM_FVP_BASE_BOARD_SYS_ID) {\r
+ if (VariantSysId == ARM_FVP_GIC_VE_MMAP) {\r
+ // FVP Base Model with legacy GIC memory map\r
+ Status = ArmVExpressGetPlatformFromId (ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2_LEGACY, Platform);\r
+ } else {\r
+ GicRevision = ArmGicGetSupportedArchRevision ();\r
+\r
+ if (GicRevision == ARM_GIC_ARCH_REVISION_2) {\r
+ // FVP Base Model with GICv2 support\r
+ Status = ArmVExpressGetPlatformFromId (ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2, Platform);\r
+ } else {\r
+ // FVP Base Model with GICv3 support\r
+ Status = ArmVExpressGetPlatformFromId (ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV3, Platform);\r
+ }\r
+ }\r
+ } else if (FvpSysId == ARM_FVP_FOUNDATION_BOARD_SYS_ID) {\r
+ if (VariantSysId == ARM_FVP_GIC_VE_MMAP) {\r
+ // FVP Foundation Model with legacy GIC memory map\r
+ Status = ArmVExpressGetPlatformFromId (ARM_FVP_FOUNDATION_GICV2_LEGACY, Platform);\r
+ } else {\r
+ GicRevision = ArmGicGetSupportedArchRevision ();\r
+\r
+ if (GicRevision == ARM_GIC_ARCH_REVISION_2) {\r
+ // FVP Foundation Model with GICv2\r
+ Status = ArmVExpressGetPlatformFromId (ARM_FVP_FOUNDATION_GICV2, Platform);\r
+ } else {\r
+ // FVP Foundation Model with GICv3\r
+ Status = ArmVExpressGetPlatformFromId (ARM_FVP_FOUNDATION_GICV3, Platform);\r
+ }\r
+ }\r
}\r
} else {\r
+ // FVP Versatile Express AEMv8\r
Status = ArmVExpressGetPlatformFromId (ARM_FVP_VEXPRESS_AEMv8x4, Platform);\r
}\r
\r