]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmPlatformPkg/ArmVExpressDxe: Change FDT default file names.
authorOlivier Martin <Olivier.Martin@arm.com>
Tue, 7 Jul 2015 15:45:36 +0000 (15:45 +0000)
committeroliviermartin <oliviermartin@Edk2>
Tue, 7 Jul 2015 15:45:36 +0000 (15:45 +0000)
On the FVP base and foundation models, the default file name
used to retrieve the FDT depended on the values assigned to
model parameters (GIC related model parameters).

Now, in addition to the fallback "fdt.dtb" file name (used for legacy
 reason), only one default file name is used :
- "fvp-base.dtb" for the base model.
- "fvp-foundation.dtb" for the foundation model.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Olivier Martin <Olivier.Martin@arm.com>
Reviewed-by: Ronald Cron <Ronald.Cron@arm.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17862 6f19259b-4bc3-4df7-8a09-765794883524

ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/AArch64/ArmFvpDxeAArch64.c
ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmFvpDxe.c
ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmFvpDxe.inf
ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmHwDxe.c
ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmHwDxe.inf
ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmVExpressInternal.h
ArmPlatformPkg/ArmVExpressPkg/ArmVExpressPkg.dec

index c368957dcd3d5bc4674042c93751ffa2ff305f61..1e990d140ddb9848f34c4cd32243b95cc745e618 100644 (file)
 // model or hardware platforms).\r
 //\r
 CONST ARM_VEXPRESS_PLATFORM ArmVExpressPlatforms[] = {\r
-  { ARM_FVP_VEXPRESS_AEMv8x4,                  FixedPcdGetPtr (PcdFdtFvpVExpressAEMv8x4),        L"rtsm_ve-aemv8a.dtb"                  },\r
-  { ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2,        FixedPcdGetPtr (PcdFdtFvpBaseAEMv8x4GicV2),       L"fvp-base-gicv2-psci.dtb"             },\r
-  { ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2_LEGACY, FixedPcdGetPtr (PcdFdtFvpBaseAEMv8x4GicV2Legacy), L"fvp-base-gicv2legacy-psci.dtb"       },\r
-  { ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV3,        FixedPcdGetPtr (PcdFdtFvpBaseAEMv8x4GicV3),       L"fvp-base-gicv3-psci.dtb"             },\r
-  { ARM_FVP_FOUNDATION_GICV2,                  FixedPcdGetPtr (PcdFdtFvpFoundationGicV2),        L"fvp-foundation-gicv2-psci.dtb"       },\r
-  { ARM_FVP_FOUNDATION_GICV2_LEGACY,           FixedPcdGetPtr (PcdFdtFvpFoundationGicV2Legacy),  L"fvp-foundation-gicv2legacy-psci.dtb" },\r
-  { ARM_FVP_FOUNDATION_GICV3,                  FixedPcdGetPtr (PcdFdtFvpFoundationGicV3),        L"fvp-foundation-gicv3-psci.dtb"       },\r
-  { ARM_FVP_VEXPRESS_UNKNOWN }\r
+  { ARM_FVP_VEXPRESS_AEMv8x4, FixedPcdGetPtr (PcdFdtFvpVExpressAEMv8x4), L"rtsm_ve-aemv8a.dtb" },\r
+  { ARM_FVP_BASE, FixedPcdGetPtr (PcdFdtFvpBaseAEMv8x4), L"fvp-base.dtb" },\r
+  { ARM_FVP_FOUNDATION, FixedPcdGetPtr (PcdFdtFvpFoundation), L"fvp-foundation.dtb" },\r
+  { ARM_FVP_VEXPRESS_UNKNOWN, &gZeroGuid }\r
 };\r
 \r
 /**\r
@@ -49,11 +45,9 @@ ArmVExpressGetPlatform (
   OUT CONST ARM_VEXPRESS_PLATFORM** Platform\r
   )\r
 {\r
-  EFI_STATUS            Status;\r
-  UINT32                SysId;\r
-  UINT32                FvpSysId;\r
-  UINT32                VariantSysId;\r
-  ARM_GIC_ARCH_REVISION GicRevision;\r
+  EFI_STATUS  Status;\r
+  UINT32      SysId;\r
+  UINT32      FvpSysId;\r
 \r
   ASSERT (Platform != NULL);\r
 \r
@@ -61,46 +55,23 @@ ArmVExpressGetPlatform (
 \r
   SysId = MmioRead32 (ARM_VE_SYS_ID_REG);\r
   if (SysId != ARM_RTSM_SYS_ID) {\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
+    // Keep only the HBI board number and the platform type fields of the\r
+    // system id register to identify if we are running on the FVP base or\r
+    // foundation model.\r
+    //\r
+    FvpSysId = SysId & (ARM_FVP_SYS_ID_HBI_MASK |\r
+                        ARM_FVP_SYS_ID_PLAT_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
+      Status = ArmVExpressGetPlatformFromId (ARM_FVP_BASE, Platform);\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
+      Status = ArmVExpressGetPlatformFromId (ARM_FVP_FOUNDATION, Platform);\r
     }\r
   } else {\r
+    //\r
     // FVP Versatile Express AEMv8\r
+    //\r
     Status = ArmVExpressGetPlatformFromId (ARM_FVP_VEXPRESS_AEMv8x4, Platform);\r
   }\r
 \r
index 8c42814a04dc0f4b43eea013a6f7bf3fef2a4153..cbd526e60c3bf34913154afec715ca4cf63e0a53 100644 (file)
@@ -24,6 +24,7 @@
 #include <Protocol/FirmwareVolume2.h>\r
 \r
 #define ARM_FVP_BASE_VIRTIO_BLOCK_BASE    0x1c130000\r
+STATIC CONST CHAR16 *mFdtFallbackName = L"fdt.dtb";\r
 \r
 #pragma pack(1)\r
 typedef struct {\r
@@ -155,16 +156,20 @@ ArmFvpInitialise (
   IN EFI_SYSTEM_TABLE   *SystemTable\r
   )\r
 {\r
-  CONST ARM_VEXPRESS_PLATFORM* Platform;\r
   EFI_STATUS                   Status;\r
-  CHAR16                       *TextDevicePath;\r
+  CONST ARM_VEXPRESS_PLATFORM  *Platform;\r
+  BOOLEAN                      NeedFallback;\r
+  UINTN                        TextDevicePathBaseSize;\r
   UINTN                        TextDevicePathSize;\r
+  CHAR16                       *TextDevicePath;\r
   VOID                         *Buffer;\r
   EFI_DEVICE_PATH              *FdtDevicePath;\r
 \r
-  Status = gBS->InstallProtocolInterface (&ImageHandle,\r
-                 &gEfiDevicePathProtocolGuid, EFI_NATIVE_INTERFACE,\r
-                 &mVirtioBlockDevicePath);\r
+  Status = gBS->InstallProtocolInterface (\r
+                  &ImageHandle,\r
+                  &gEfiDevicePathProtocolGuid, EFI_NATIVE_INTERFACE,\r
+                  &mVirtioBlockDevicePath\r
+                  );\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
@@ -180,13 +185,32 @@ ArmFvpInitialise (
       }\r
       FreePool (FdtDevicePath);\r
     } else {\r
-      TextDevicePathSize  = StrSize ((CHAR16*)PcdGetPtr (PcdFvpFdtDevicePathsBase)) - sizeof (CHAR16);\r
-      TextDevicePathSize += StrSize (Platform->FdtName);\r
+      //\r
+      // In the case of the FVP base and foundation platforms, two default\r
+      // text device paths for the FDT are defined. The first one, like every\r
+      // other platform, ends with a file name that identifies the platform. The\r
+      // second one ends with the fallback file name "fdt.dtb" for historical\r
+      // backward compatibility reasons.\r
+      //\r
+      NeedFallback = (Platform->Id == ARM_FVP_BASE) ||\r
+                     (Platform->Id == ARM_FVP_FOUNDATION);\r
+\r
+      TextDevicePathBaseSize = StrSize ((CHAR16*)PcdGetPtr (PcdFvpFdtDevicePathsBase)) - sizeof (CHAR16);\r
+      TextDevicePathSize = TextDevicePathBaseSize + StrSize (Platform->FdtName);\r
+      if (NeedFallback) {\r
+        TextDevicePathSize += TextDevicePathBaseSize + StrSize (mFdtFallbackName);\r
+      }\r
 \r
       TextDevicePath = AllocatePool (TextDevicePathSize);\r
       if (TextDevicePath != NULL) {\r
         StrCpy (TextDevicePath, ((CHAR16*)PcdGetPtr (PcdFvpFdtDevicePathsBase)));\r
         StrCat (TextDevicePath, Platform->FdtName);\r
+\r
+        if (NeedFallback) {\r
+          StrCat (TextDevicePath, L";");\r
+          StrCat (TextDevicePath, ((CHAR16*)PcdGetPtr (PcdFvpFdtDevicePathsBase)));\r
+          StrCat (TextDevicePath, mFdtFallbackName);\r
+        }\r
       }\r
     }\r
     if (TextDevicePath != NULL) {\r
@@ -198,6 +222,11 @@ ArmFvpInitialise (
           ));\r
       }\r
       FreePool (TextDevicePath);\r
+    } else {\r
+        DEBUG ((\r
+          EFI_D_ERROR,\r
+          "ArmFvpDxe: Setting of FDT device path in PcdFdtDevicePaths failed - %r\n", EFI_OUT_OF_RESOURCES\r
+          ));\r
     }\r
   }\r
 \r
index 327c5101ddb5f6a037f0e4b73c14f08bf96a7871..4b9b57bc0489445917daad02bb9c4c1f218dff66 100644 (file)
@@ -32,6 +32,7 @@
 \r
 [Packages]\r
   MdePkg/MdePkg.dec\r
+  MdeModulePkg/MdeModulePkg.dec\r
   ArmPkg/ArmPkg.dec\r
   ArmPlatformPkg/ArmPlatformPkg.dec\r
   ArmPlatformPkg/ArmVExpressPkg/ArmVExpressPkg.dec\r
@@ -54,6 +55,9 @@
 [LibraryClasses.AARCH64]\r
   ArmGicLib\r
 \r
+[Guids]\r
+  gZeroGuid\r
+\r
 [Protocols]\r
   gEfiFirmwareVolume2ProtocolGuid\r
   gEfiDevicePathProtocolGuid\r
 \r
 [FixedPcd.AARCH64]\r
   gArmVExpressTokenSpaceGuid.PcdFdtFvpVExpressAEMv8x4\r
-  gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2\r
-  gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2Legacy\r
-  gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV3\r
-  gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2\r
-  gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2Legacy\r
-  gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV3\r
+  gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4\r
+  gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundation\r
 \r
 [Pcd]\r
   gEmbeddedTokenSpaceGuid.PcdFdtDevicePaths\r
index 351c73312dc49cf25a93895774ba84f72ccfa708..1f18197c7c462bff84fc93f1abfb56b7ec7c4592 100644 (file)
@@ -19,7 +19,6 @@ CONST EFI_GUID ArmHwA9x4Guid = { 0x2fd21cf6, 0xe6e8, 0x4ff2, { 0xa9, 0xca, 0x3b,
 CONST EFI_GUID ArmHwA15x2A7x3Guid = { 0xd5e606eb, 0x83df, 0x4e90, { 0x81, 0xe8, 0xc3, 0xdb, 0x2f, 0x77, 0x17, 0x9a } };\r
 CONST EFI_GUID ArmHwA15Guid = { 0x6b8947c2, 0x4287, 0x4d91, { 0x8f, 0xe0, 0xa3, 0x81, 0xea, 0x5b, 0x56, 0x8f } };\r
 CONST EFI_GUID ArmHwA5Guid = { 0xa2cc7663, 0x4d7c, 0x448a, { 0xaa, 0xb5, 0x4c, 0x03, 0x4b, 0x6f, 0xda, 0xb7 } };\r
-CONST EFI_GUID NullGuid = { 0x0, 0x0, 0x0, { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } };\r
 \r
 //\r
 // Description of the four hardware platforms :\r
@@ -34,7 +33,7 @@ CONST ARM_VEXPRESS_PLATFORM ArmVExpressPlatforms[] = {
   { ARM_HW_A15x2_A7x3, &ArmHwA15x2A7x3Guid, L"ca15a7" },\r
   { ARM_HW_A15, &ArmHwA15Guid, L"ca15a7" },\r
   { ARM_HW_A5, &ArmHwA5Guid, L"ca5s" },\r
-  { ARM_FVP_VEXPRESS_UNKNOWN, &NullGuid, NULL }\r
+  { ARM_FVP_VEXPRESS_UNKNOWN, &gZeroGuid, NULL }\r
 };\r
 \r
 /**\r
index 1a007627ad3f277b12f717b7d862c69844997633..14035e478b3576d4fd7b49ebd968ab055be133b3 100644 (file)
@@ -29,6 +29,7 @@
   ArmPlatformPkg/ArmPlatformPkg.dec\r
   EmbeddedPkg/EmbeddedPkg.dec\r
   MdePkg/MdePkg.dec\r
+  MdeModulePkg/MdeModulePkg.dec\r
 \r
 [LibraryClasses]\r
   ArmShellCmdRunAxfLib\r
@@ -36,5 +37,8 @@
   MemoryAllocationLib\r
   UefiDriverEntryPoint\r
 \r
+[Guids]\r
+  gZeroGuid\r
+\r
 [Protocols]\r
   gEfiDevicePathProtocolGuid\r
index e123eea2d28b3490cb408778d625d777ede1b1a4..678878859014a191c665a18060b21e0cbc63099c 100644 (file)
@@ -24,6 +24,8 @@
 #include <Library/UefiBootServicesTableLib.h>\r
 #include <Library/UefiLib.h>\r
 \r
+#include <Guid/ZeroGuid.h>\r
+\r
 #include <VExpressMotherBoard.h>\r
 \r
 // This 'enum' is needed as variations based on existing platform exist\r
@@ -36,12 +38,8 @@ typedef enum {
   ARM_FVP_VEXPRESS_A15x1_A7x1,\r
   ARM_FVP_VEXPRESS_A15x4_A7x4,\r
   ARM_FVP_VEXPRESS_AEMv8x4,\r
-  ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2,\r
-  ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2_LEGACY,\r
-  ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV3,\r
-  ARM_FVP_FOUNDATION_GICV2,\r
-  ARM_FVP_FOUNDATION_GICV2_LEGACY,\r
-  ARM_FVP_FOUNDATION_GICV3,\r
+  ARM_FVP_BASE,\r
+  ARM_FVP_FOUNDATION,\r
   ARM_HW_A9x4,\r
   ARM_HW_A15x2_A7x3,\r
   ARM_HW_A15,\r
index d375ed3b9772920fadfb9c29388181abd66525ad..dba08dbae5a0fb670ea2fc9b29f9189032986e0f 100644 (file)
@@ -73,9 +73,5 @@
 \r
   # AArch64 FVP platforms\r
   gArmVExpressTokenSpaceGuid.PcdFdtFvpVExpressAEMv8x4|{ 0xa8, 0x95, 0x5f, 0xf6, 0x32, 0x7b, 0xf3, 0x16, 0x12, 0x32, 0x45, 0x50, 0xbd, 0x54, 0xca, 0xe5 }|VOID*|0x00000010\r
-  gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2|{ 0x66, 0xcf, 0x57, 0xa4, 0xac, 0x7e, 0x7f, 0x3d, 0x21, 0x88, 0x3a, 0x58, 0x3c, 0x27, 0xd7, 0xe8 }|VOID*|0x00000011\r
-  gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2Legacy|{ 0x8b, 0xcb, 0xe0, 0x14, 0xd1, 0x46, 0x79, 0xae, 0x7f, 0x20, 0xcf, 0x84, 0x22, 0xc7, 0x94, 0x4a }|VOID*|0x00000012\r
-  gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV3|{ 0x4d, 0x03, 0xb8, 0x77, 0x63, 0x25, 0x0a, 0x7f, 0xe9, 0x72, 0xfa, 0x68, 0x74, 0xc7, 0x5e, 0xb5 }|VOID*|0x00000013\r
-  gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2|{ 0x36, 0x4f, 0x61, 0x92, 0x86, 0xb1, 0xa2, 0x16, 0x32, 0x65, 0x35, 0x3f, 0x01, 0xf3, 0x3b, 0x64 }|VOID*|0x00000014\r
-  gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2Legacy|{ 0xf6, 0xcb, 0x9d, 0x86, 0x38, 0x74, 0x8a, 0xb0, 0xfe, 0x40, 0x08, 0x0f, 0x3f, 0xb3, 0x50, 0x7c }|VOID*|0x00000015\r
-  gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV3|{ 0x51, 0xd0, 0x75, 0x6b, 0x9d, 0x35, 0x1b, 0x1b, 0xa6, 0xc6, 0xab, 0xa0, 0x90, 0xf9, 0xf0, 0x0a }|VOID*|0x00000016\r
+  gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4|{ 0x66, 0xcf, 0x57, 0xa4, 0xac, 0x7e, 0x7f, 0x3d, 0x21, 0x88, 0x3a, 0x58, 0x3c, 0x27, 0xd7, 0xe8 }|VOID*|0x00000011\r
+  gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundation|{ 0x36, 0x4f, 0x61, 0x92, 0x86, 0xb1, 0xa2, 0x16, 0x32, 0x65, 0x35, 0x3f, 0x01, 0xf3, 0x3b, 0x64 }|VOID*|0x00000014\r