diff --git a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/AArch64/ArmFvpDxeAArch64.c b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/AArch64/ArmFvpDxeAArch64.c deleted file mode 100644 index c368957dcd..0000000000 --- a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/AArch64/ArmFvpDxeAArch64.c +++ /dev/null @@ -1,113 +0,0 @@ -/** @file - - Copyright (c) 2014-2015, ARM Ltd. All rights reserved. - - 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. - -**/ - -#include "ArmVExpressInternal.h" -#include - -// -// Description of the AARCH64 model platforms : -// Platform ids are defined in ArmVExpressInternal.h for -// all "ArmVExpress-like" platforms (AARCH64 or ARM architecture, -// model or hardware platforms). -// -CONST ARM_VEXPRESS_PLATFORM ArmVExpressPlatforms[] = { - { 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 } -}; - -/** - Get information about the VExpress platform the firmware is running on. - - @param[out] Platform Address where the pointer to the platform information - (type ARM_VEXPRESS_PLATFORM*) should be stored. - The returned pointer does not point to an allocated - memory area. - - @retval EFI_SUCCESS The platform information was returned. - @retval EFI_NOT_FOUND The platform was not recognised. - -**/ -EFI_STATUS -ArmVExpressGetPlatform ( - OUT CONST ARM_VEXPRESS_PLATFORM** Platform - ) -{ - EFI_STATUS Status; - UINT32 SysId; - UINT32 FvpSysId; - UINT32 VariantSysId; - ARM_GIC_ARCH_REVISION GicRevision; - - ASSERT (Platform != NULL); - - Status = EFI_NOT_FOUND; - - SysId = MmioRead32 (ARM_VE_SYS_ID_REG); - if (SysId != ARM_RTSM_SYS_ID) { - // 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) { - 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) { - 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); - } - - if (EFI_ERROR (Status)) { - DEBUG ((EFI_D_ERROR, "Unsupported AArch64 RTSM (SysId:0x%X).\n", SysId)); - ASSERT_EFI_ERROR (Status); - } - - return Status; -} diff --git a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmFvpDxe.c b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmFvpDxe.c index 8c42814a04..7827c50d8b 100644 --- a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmFvpDxe.c +++ b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmFvpDxe.c @@ -12,16 +12,15 @@ **/ -#include "ArmVExpressInternal.h" - #include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include + +#include #define ARM_FVP_BASE_VIRTIO_BLOCK_BASE 0x1c130000 @@ -55,95 +54,6 @@ VIRTIO_BLK_DEVICE_PATH mVirtioBlockDevicePath = } }; -STATIC -EFI_STATUS -InternalFindFdtByGuid ( - IN OUT EFI_DEVICE_PATH **FdtDevicePath, - IN CONST EFI_GUID *FdtGuid - ) -{ - MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FileDevicePath; - EFI_HANDLE *HandleBuffer; - UINTN HandleCount; - UINTN Index; - EFI_FIRMWARE_VOLUME2_PROTOCOL *FvProtocol; - EFI_GUID NameGuid; - UINTN Size; - VOID *Key; - EFI_FV_FILETYPE FileType; - EFI_FV_FILE_ATTRIBUTES Attributes; - EFI_DEVICE_PATH *FvDevicePath; - EFI_STATUS Status; - - if (FdtGuid == NULL) { - return EFI_NOT_FOUND; - } - - EfiInitializeFwVolDevicepathNode (&FileDevicePath, FdtGuid); - - HandleBuffer = NULL; - Status = gBS->LocateHandleBuffer ( - ByProtocol, - &gEfiFirmwareVolume2ProtocolGuid, - NULL, - &HandleCount, - &HandleBuffer - ); - if (EFI_ERROR (Status)) { - return Status; - } - - for (Index = 0; Index < HandleCount; Index++) { - Status = gBS->HandleProtocol ( - HandleBuffer[Index], - &gEfiFirmwareVolume2ProtocolGuid, - (VOID **) &FvProtocol - ); - if (EFI_ERROR (Status)) { - return Status; - } - - // Allocate Key - Key = AllocatePool (FvProtocol->KeySize); - ASSERT (Key != NULL); - ZeroMem (Key, FvProtocol->KeySize); - - do { - FileType = EFI_FV_FILETYPE_RAW; - Status = FvProtocol->GetNextFile (FvProtocol, Key, &FileType, &NameGuid, &Attributes, &Size); - if (Status == EFI_NOT_FOUND) { - break; - } - if (EFI_ERROR (Status)) { - return Status; - } - - // - // Check whether this file is the one we are looking for. If so, - // create a device path for it and return it to the caller. - // - if (CompareGuid (&NameGuid, FdtGuid)) { - Status = gBS->HandleProtocol (HandleBuffer[Index], &gEfiDevicePathProtocolGuid, (VOID **)&FvDevicePath); - if (!EFI_ERROR (Status)) { - *FdtDevicePath = AppendDevicePathNode (FvDevicePath, - (EFI_DEVICE_PATH_PROTOCOL *)&FileDevicePath); - } - goto Done; - } - } while (TRUE); - FreePool (Key); - } - - if (Index == HandleCount) { - Status = EFI_NOT_FOUND; - } - return Status; - -Done: - FreePool (Key); - return Status; -} - /** * Generic UEFI Entrypoint for 'ArmFvpDxe' driver * See UEFI specification for the details of the parameters @@ -155,12 +65,7 @@ ArmFvpInitialise ( IN EFI_SYSTEM_TABLE *SystemTable ) { - CONST ARM_VEXPRESS_PLATFORM* Platform; EFI_STATUS Status; - CHAR16 *TextDevicePath; - UINTN TextDevicePathSize; - VOID *Buffer; - EFI_DEVICE_PATH *FdtDevicePath; Status = gBS->InstallProtocolInterface (&ImageHandle, &gEfiDevicePathProtocolGuid, EFI_NATIVE_INTERFACE, @@ -169,38 +74,6 @@ ArmFvpInitialise ( return Status; } - Status = ArmVExpressGetPlatform (&Platform); - if (!EFI_ERROR (Status)) { - FdtDevicePath = NULL; - Status = InternalFindFdtByGuid (&FdtDevicePath, Platform->FdtGuid); - if (!EFI_ERROR (Status)) { - TextDevicePath = ConvertDevicePathToText (FdtDevicePath, FALSE, FALSE); - if (TextDevicePath != NULL) { - TextDevicePathSize = StrSize (TextDevicePath); - } - FreePool (FdtDevicePath); - } else { - TextDevicePathSize = StrSize ((CHAR16*)PcdGetPtr (PcdFvpFdtDevicePathsBase)) - sizeof (CHAR16); - TextDevicePathSize += StrSize (Platform->FdtName); - - TextDevicePath = AllocatePool (TextDevicePathSize); - if (TextDevicePath != NULL) { - StrCpy (TextDevicePath, ((CHAR16*)PcdGetPtr (PcdFvpFdtDevicePathsBase))); - StrCat (TextDevicePath, Platform->FdtName); - } - } - if (TextDevicePath != NULL) { - Buffer = PcdSetPtr (PcdFdtDevicePaths, &TextDevicePathSize, TextDevicePath); - if (Buffer == NULL) { - DEBUG (( - EFI_D_ERROR, - "ArmFvpDxe: Setting of FDT device path in PcdFdtDevicePaths failed - %r\n", EFI_BUFFER_TOO_SMALL - )); - } - FreePool (TextDevicePath); - } - } - // Declare the Virtio BlockIo device Status = VirtioMmioInstallDevice (ARM_FVP_BASE_VIRTIO_BLOCK_BASE, ImageHandle); if (EFI_ERROR (Status)) { diff --git a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmFvpDxe.inf b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmFvpDxe.inf index 2a8c8388a3..a0dd9cba19 100644 --- a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmFvpDxe.inf +++ b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmFvpDxe.inf @@ -22,50 +22,17 @@ [Sources.common] ArmFvpDxe.c - ArmVExpressCommon.c - -[Sources.AARCH64] - AArch64/ArmFvpDxeAArch64.c [Packages] MdePkg/MdePkg.dec ArmPkg/ArmPkg.dec ArmPlatformPkg/ArmPlatformPkg.dec - ArmPlatformPkg/ArmVExpressPkg/ArmVExpressPkg.dec - EmbeddedPkg/EmbeddedPkg.dec OvmfPkg/OvmfPkg.dec [LibraryClasses] - PcdLib ArmShellCmdRunAxfLib - ArmLib - ArmPlatformLib BaseMemoryLib - DxeServicesTableLib - MemoryAllocationLib UefiDriverEntryPoint UefiBootServicesTableLib VirtioMmioDeviceLib - DevicePathLib -[LibraryClasses.AARCH64] - ArmGicLib - -[Protocols] - gEfiFirmwareVolume2ProtocolGuid - gEfiDevicePathProtocolGuid - -[FixedPcd] - gArmVExpressTokenSpaceGuid.PcdFvpFdtDevicePathsBase - -[FixedPcd.AARCH64] - gArmVExpressTokenSpaceGuid.PcdFdtFvpVExpressAEMv8x4 - gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2 - gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2Legacy - gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV3 - gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2 - gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2Legacy - gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV3 - -[Pcd] - gEmbeddedTokenSpaceGuid.PcdFdtDevicePaths diff --git a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmVExpressCommon.c b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmVExpressCommon.c deleted file mode 100644 index e1cac7fb37..0000000000 --- a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmVExpressCommon.c +++ /dev/null @@ -1,48 +0,0 @@ -/** @file - - Copyright (c) 2014, ARM Ltd. All rights reserved. - - 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. - -**/ - -#include "ArmVExpressInternal.h" - -/** - Get information about the VExpress platform the firmware is running on given its Id. - - @param[in] PlatformId Id of the VExpress platform. - @param[out] Platform Address where the pointer to the platform information - (type ARM_VEXPRESS_PLATFORM*) should be stored. - The returned pointer does not point to an allocated - memory area. - - @retval EFI_SUCCESS The platform information was returned. - @retval EFI_NOT_FOUND The platform was not recognised. - -**/ -EFI_STATUS -ArmVExpressGetPlatformFromId ( - IN CONST ARM_VEXPRESS_PLATFORM_ID PlatformId, - OUT CONST ARM_VEXPRESS_PLATFORM** Platform - ) -{ - UINTN Index; - - ASSERT (Platform != NULL); - - for (Index = 0; ArmVExpressPlatforms[Index].Id != ARM_FVP_VEXPRESS_UNKNOWN; Index++) { - if (ArmVExpressPlatforms[Index].Id == PlatformId) { - *Platform = &ArmVExpressPlatforms[Index]; - return EFI_SUCCESS; - } - } - - return EFI_NOT_FOUND; -} diff --git a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmVExpressInternal.h b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmVExpressInternal.h deleted file mode 100644 index e123eea2d2..0000000000 --- a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressDxe/ArmVExpressInternal.h +++ /dev/null @@ -1,99 +0,0 @@ -/** @file - - Copyright (c) 2014-2015, ARM Ltd. All rights reserved. - - 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. - -**/ - -#ifndef __ARM_VEXPRESS_INTERNAL_H__ -#define __ARM_VEXPRESS_INTERNAL_H__ - -#include - -#include -#include -#include -#include -#include -#include - -#include - -// This 'enum' is needed as variations based on existing platform exist -typedef enum { - ARM_FVP_VEXPRESS_UNKNOWN = 0, - ARM_FVP_VEXPRESS_A9x4, - ARM_FVP_VEXPRESS_A15x1, - ARM_FVP_VEXPRESS_A15x2, - ARM_FVP_VEXPRESS_A15x4, - ARM_FVP_VEXPRESS_A15x1_A7x1, - ARM_FVP_VEXPRESS_A15x4_A7x4, - ARM_FVP_VEXPRESS_AEMv8x4, - ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2, - ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2_LEGACY, - ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV3, - ARM_FVP_FOUNDATION_GICV2, - ARM_FVP_FOUNDATION_GICV2_LEGACY, - ARM_FVP_FOUNDATION_GICV3, - ARM_HW_A9x4, - ARM_HW_A15x2_A7x3, - ARM_HW_A15, - ARM_HW_A5 -} ARM_VEXPRESS_PLATFORM_ID; - -typedef struct { - ARM_VEXPRESS_PLATFORM_ID Id; - - // Flattened Device Tree (FDT) File - CONST EFI_GUID *FdtGuid; /// Name of the FDT when present into the FV - CONST CHAR16 *FdtName; /// Name of the FDT when present into a File System -} ARM_VEXPRESS_PLATFORM; - -// Array that contains the list of the VExpress based platform supported by this DXE driver -extern CONST ARM_VEXPRESS_PLATFORM ArmVExpressPlatforms[]; - -/** - Get information about the VExpress platform the firmware is running on given its Id. - - @param[in] PlatformId Id of the VExpress platform. - @param[out] Platform Address where the pointer to the platform information - (type ARM_VEXPRESS_PLATFORM*) should be stored. - The returned pointer does not point to an allocated - memory area. - - @retval EFI_SUCCESS The platform information was returned. - @retval EFI_NOT_FOUND The platform was not recognised. - -**/ -EFI_STATUS -ArmVExpressGetPlatformFromId ( - IN CONST ARM_VEXPRESS_PLATFORM_ID PlatformId, - OUT CONST ARM_VEXPRESS_PLATFORM** Platform - ); - -/** - - Get information about the VExpress platform the firmware is running on. - - @param[out] Platform Address where the pointer to the platform information - (type ARM_VEXPRESS_PLATFORM*) should be stored. - The returned pointer does not point to an allocated - memory area. - - @retval EFI_SUCCESS The platform information was returned. - @retval EFI_NOT_FOUND The platform was not recognised. - -**/ -EFI_STATUS -ArmVExpressGetPlatform ( - OUT CONST ARM_VEXPRESS_PLATFORM** Platform - ); - -#endif // __ARM_VEXPRESS_INTERNAL_H__ diff --git a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressPkg.dec b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressPkg.dec index 39f0465415..3814513c22 100644 --- a/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressPkg.dec +++ b/ArmPlatformPkg/ArmVExpressPkg/ArmVExpressPkg.dec @@ -51,21 +51,3 @@ # Device path of block device on which Fastboot will flash partitions # gArmVExpressTokenSpaceGuid.PcdAndroidFastbootNvmDevicePath|""|VOID*|0x00000004 - - # FVP platforms : install FDT from SemiHosting - gArmVExpressTokenSpaceGuid.PcdFvpFdtDevicePathsBase|L"VenHw(C5B9C74A-6D72-4719-99AB-C59F199091EB)/"|VOID*|0x00000005 - # HW platforms : install FDT from NOR Flash - gArmVExpressTokenSpaceGuid.PcdHwFdtDevicePathsBase|L"VenHw(E7223039-5836-41E1-B542-D7EC736C5E59)/"|VOID*|0x00000006 - - # - # ARM Versatile Express FDT Guids - # - - # AArch64 FVP platforms - gArmVExpressTokenSpaceGuid.PcdFdtFvpVExpressAEMv8x4|{ 0xa8, 0x95, 0x5f, 0xf6, 0x32, 0x7b, 0xf3, 0x16, 0x12, 0x32, 0x45, 0x50, 0xbd, 0x54, 0xca, 0xe5 }|VOID*|0x00000010 - gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2|{ 0x66, 0xcf, 0x57, 0xa4, 0xac, 0x7e, 0x7f, 0x3d, 0x21, 0x88, 0x3a, 0x58, 0x3c, 0x27, 0xd7, 0xe8 }|VOID*|0x00000011 - gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV2Legacy|{ 0x8b, 0xcb, 0xe0, 0x14, 0xd1, 0x46, 0x79, 0xae, 0x7f, 0x20, 0xcf, 0x84, 0x22, 0xc7, 0x94, 0x4a }|VOID*|0x00000012 - gArmVExpressTokenSpaceGuid.PcdFdtFvpBaseAEMv8x4GicV3|{ 0x4d, 0x03, 0xb8, 0x77, 0x63, 0x25, 0x0a, 0x7f, 0xe9, 0x72, 0xfa, 0x68, 0x74, 0xc7, 0x5e, 0xb5 }|VOID*|0x00000013 - gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2|{ 0x36, 0x4f, 0x61, 0x92, 0x86, 0xb1, 0xa2, 0x16, 0x32, 0x65, 0x35, 0x3f, 0x01, 0xf3, 0x3b, 0x64 }|VOID*|0x00000014 - gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV2Legacy|{ 0xf6, 0xcb, 0x9d, 0x86, 0x38, 0x74, 0x8a, 0xb0, 0xfe, 0x40, 0x08, 0x0f, 0x3f, 0xb3, 0x50, 0x7c }|VOID*|0x00000015 - gArmVExpressTokenSpaceGuid.PcdFdtFvpFoundationGicV3|{ 0x51, 0xd0, 0x75, 0x6b, 0x9d, 0x35, 0x1b, 0x1b, 0xa6, 0xc6, 0xab, 0xa0, 0x90, 0xf9, 0xf0, 0x0a }|VOID*|0x00000016