[edk2-devel] [edk2-platforms][PATCH V1 04/11] Platform/ARM/Morello: Add ConfigurationManager for Morello SoC

Khasim Mohammed khasim.mohammed at arm.com
Wed Dec 8 03:02:26 UTC 2021


Hi Chandni,

One input,

On Sat, Dec 4, 2021 at 04:31 AM, chandni cherukuri wrote:

> 
> This patch implements the configuration manager for Morello
> SoC platform. It enables support for generating the following
> ACPI tables for Morello SoC Platform:
> 1. FADT
> 2. DSDT
> 3. GTDT
> 4. MADT
> 5. SPCR
> 6. DBG2
> 7. PPTT
> 
> Signed-off-by: Chandni Cherukuri <chandni.cherukuri at arm.com>
> ---
> Platform/ARM/Morello/ConfigurationManager/ConfigurationManagerSoc.dsc.inc
> | 16 ++
> Platform/ARM/Morello/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerDxeSoc.inf
> | 72 +++++++++
> Platform/ARM/Morello/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerSoc.h
> | 97 ++++++++++++
> Platform/ARM/Morello/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerSoc.c
> | 161 ++++++++++++++++++++
> Platform/ARM/Morello/ConfigurationManager/ConfigurationManagerDxe/AslTables/DsdtSoc.asl
> | 41 +++++
> 5 files changed, 387 insertions(+)
> 
> diff --git
> a/Platform/ARM/Morello/ConfigurationManager/ConfigurationManagerSoc.dsc.inc
> b/Platform/ARM/Morello/ConfigurationManager/ConfigurationManagerSoc.dsc.inc
> 
> new file mode 100644
> index 000000000000..f7e58185696e
> --- /dev/null
> +++
> b/Platform/ARM/Morello/ConfigurationManager/ConfigurationManagerSoc.dsc.inc
> 

I think there is no need for this separate .dsc.inc file, can you please refer to the N1SDP implementation, I had received a suggestion from Pierre after which I had removed a similar file in N1SDP patch set.

> 
> @@ -0,0 +1,16 @@
> +## @file
> +# dsc include file for Configuration Manager
> +#
> +# Copyright (c) 2021, ARM Limited. All rights reserved.<BR>
> +#
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> +#
> +##
> +
> +[Defines]
> +
> +[BuildOptions]
> +
> +[Components.common]
> + # Configuration Manager
> +
> Platform/ARM/Morello/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerDxeSoc.inf
> 
> diff --git
> a/Platform/ARM/Morello/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerDxeSoc.inf
> b/Platform/ARM/Morello/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerDxeSoc.inf
> 
> new file mode 100644
> index 000000000000..6f9199a6fda2
> --- /dev/null
> +++
> b/Platform/ARM/Morello/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerDxeSoc.inf
> 
> @@ -0,0 +1,72 @@
> +## @file
> +# Configuration Manager Dxe
> +#
> +# Copyright (c) 2021, ARM Limited. All rights reserved.<BR>
> +#
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> +##
> +
> +[Defines]
> + INF_VERSION = 0x0001001B
> + BASE_NAME = ConfigurationManagerDxe
> + FILE_GUID = BF8FBCEE-AD95-466B-9185-50A1BB651DDA
> + MODULE_TYPE = DXE_DRIVER
> + VERSION_STRING = 1.0
> + ENTRY_POINT = ConfigurationManagerDxeInitialize
> +
> +#
> +# The following information is for reference only and not required by the
> build tools.
> +#
> +# VALID_ARCHITECTURES = AARCH64
> +#
> +
> +[Sources]
> + AslTables/DsdtSoc.asl
> + ConfigurationManager.c
> + ConfigurationManager.h
> + ConfigurationManagerSoc.c
> + ConfigurationManagerSoc.h
> + Platform.h
> +
> +[Packages]
> + ArmPkg/ArmPkg.dec
> + ArmPlatformPkg/ArmPlatformPkg.dec
> + DynamicTablesPkg/DynamicTablesPkg.dec
> + MdeModulePkg/MdeModulePkg.dec
> + MdePkg/MdePkg.dec
> + Platform/ARM/Morello/MorelloPlatform.dec
> +
> +[LibraryClasses]
> + UefiDriverEntryPoint
> +
> +[Protocols]
> + gEdkiiConfigurationManagerProtocolGuid
> +
> +[FixedPcd]
> + ## PL011 Serial Debug UART
> + gArmPlatformTokenSpaceGuid.PcdSerialDbgRegisterBase
> + gArmPlatformTokenSpaceGuid.PcdSerialDbgUartBaudRate
> + gArmPlatformTokenSpaceGuid.PcdSerialDbgUartClkInHz
> +
> + gArmPlatformTokenSpaceGuid.PL011UartClkInHz
> + gArmPlatformTokenSpaceGuid.PL011UartInterrupt
> +
> + gArmTokenSpaceGuid.PcdArmArchTimerHypIntrNum
> + gArmTokenSpaceGuid.PcdArmArchTimerIntrNum
> + gArmTokenSpaceGuid.PcdArmArchTimerSecIntrNum
> + gArmTokenSpaceGuid.PcdArmArchTimerVirtIntrNum
> +
> + # SBSA Generic Watchdog
> + gArmTokenSpaceGuid.PcdGenericWatchdogControlBase
> + gArmTokenSpaceGuid.PcdGenericWatchdogEl2IntrNum
> + gArmTokenSpaceGuid.PcdGenericWatchdogRefreshBase
> +
> + gArmTokenSpaceGuid.PcdGicDistributorBase
> + gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase
> + gArmTokenSpaceGuid.PcdGicRedistributorsBase
> +
> + gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase
> + gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate
> +
> +[Depex]
> + TRUE
> diff --git
> a/Platform/ARM/Morello/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerSoc.h
> b/Platform/ARM/Morello/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerSoc.h
> 
> new file mode 100644
> index 000000000000..8a521b83c8dc
> --- /dev/null
> +++
> b/Platform/ARM/Morello/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerSoc.h
> 
> @@ -0,0 +1,97 @@
> +/** @file
> +
> + Copyright (c) 2021, ARM Limited. All rights reserved.<BR>
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> + @par Glossary:
> + - Cm or CM - Configuration Manager
> + - Obj or OBJ - Object
> +**/
> +
> +#ifndef SOC_CONFIGURATION_MANAGER_H_
> +#define SOC_CONFIGURATION_MANAGER_H_
> +
> +#include "ConfigurationManager.h"
> +
> +/** The number of ACPI tables to install
> +*/
> +#define PLAT_ACPI_TABLE_COUNT 7
> +
> +/** A helper macro for mapping a reference token
> +*/
> +#define REFERENCE_TOKEN_SOC(Field) \
> + (CM_OBJECT_TOKEN)((UINT8*)&MorelloSocRepositoryInfo + \
> + OFFSET_OF (EDKII_SOC_PLATFORM_REPOSITORY_INFO, Field))
> +
> +/** C array containing the compiled AML template.
> + These symbols are defined in the auto generated C file
> + containing the AML bytecode array.
> +*/
> +extern CHAR8 dsdtsoc_aml_code[];
> +
> +/** A structure describing the SoC Platform specific information
> +*/
> +typedef struct SocPlatformRepositoryInfo {
> + /// List of ACPI tables
> + CM_STD_OBJ_ACPI_TABLE_INFO CmAcpiTableList[PLAT_ACPI_TABLE_COUNT];
> +} EDKII_SOC_PLATFORM_REPOSITORY_INFO;
> +
> +/** A structure describing the platform configuration
> + manager repository information
> +*/
> +typedef struct PlatformRepositoryInfo {
> + /// Common information
> + EDKII_COMMON_PLATFORM_REPOSITORY_INFO *CommonPlatRepoInfo;
> +
> + /// SoC Platform specific information
> + EDKII_SOC_PLATFORM_REPOSITORY_INFO *SocPlatRepoInfo;
> +} EDKII_PLATFORM_REPOSITORY_INFO;
> +
> +extern EDKII_COMMON_PLATFORM_REPOSITORY_INFO CommonPlatformInfo;
> +
> +/** Return platform specific ARM namespace object.
> +
> + @param [in] This Pointer to the Configuration Manager Protocol.
> + @param [in] CmObjectId The Configuration Manager Object ID.
> + @param [in] Token An optional token identifying the object. If
> + unused this must be CM_NULL_TOKEN.
> + @param [in, out] CmObject Pointer to the Configuration Manager Object
> + descriptor describing the requested Object.
> +
> + @retval EFI_SUCCESS Success.
> + @retval EFI_INVALID_PARAMETER A parameter is invalid.
> + @retval EFI_NOT_FOUND The required object information is not found.
> +**/
> +EFI_STATUS
> +EFIAPI
> +GetArmNameSpaceObjectPlat (
> + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST This,
> + IN CONST CM_OBJECT_ID CmObjectId,
> + IN CONST CM_OBJECT_TOKEN Token OPTIONAL,
> + IN OUT CM_OBJ_DESCRIPTOR *CONST CmObject
> + );
> +
> +/** Return platform specific standard namespace object.
> +
> + @param [in] This Pointer to the Configuration Manager Protocol.
> + @param [in] CmObjectId The Configuration Manager Object ID.
> + @param [in] Token An optional token identifying the object. If
> + unused this must be CM_NULL_TOKEN.
> + @param [in, out] CmObject Pointer to the Configuration Manager Object
> + descriptor describing the requested Object.
> +
> + @retval EFI_SUCCESS Success.
> + @retval EFI_INVALID_PARAMETER A parameter is invalid.
> + @retval EFI_NOT_FOUND The required object information is not found.
> +**/
> +EFI_STATUS
> +EFIAPI
> +GetStandardNameSpaceObjectPlat (
> + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST This,
> + IN CONST CM_OBJECT_ID CmObjectId,
> + IN CONST CM_OBJECT_TOKEN Token OPTIONAL,
> + IN OUT CM_OBJ_DESCRIPTOR *CONST CmObject
> + );
> +
> +#endif // SOC_CONFIGURATION_MANAGER_H_
> diff --git
> a/Platform/ARM/Morello/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerSoc.c
> b/Platform/ARM/Morello/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerSoc.c
> 
> new file mode 100644
> index 000000000000..7ca8ae212a61
> --- /dev/null
> +++
> b/Platform/ARM/Morello/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerSoc.c
> 
> @@ -0,0 +1,161 @@
> +/** @file
> + Configuration Manager Dxe
> +
> + Copyright (c) 2021, ARM Limited. All rights reserved.<BR>
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> + @par Glossary:
> + - Cm or CM - Configuration Manager
> + - Obj or OBJ - Object
> +**/
> +
> +#include <IndustryStandard/DebugPort2Table.h>
> +#include <IndustryStandard/IoRemappingTable.h>
> +#include <IndustryStandard/MemoryMappedConfigurationSpaceAccessTable.h>
> +#include <IndustryStandard/SerialPortConsoleRedirectionTable.h>
> +#include <Library/DebugLib.h>
> +#include <Library/UefiBootServicesTableLib.h>
> +#include <Protocol/ConfigurationManagerProtocol.h>
> +
> +#include "ConfigurationManagerSoc.h"
> +#include "Platform.h"
> +
> +EDKII_SOC_PLATFORM_REPOSITORY_INFO MorelloSocRepositoryInfo = {
> + // ACPI Table List
> + {
> + // FADT Table
> + {
> + EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,
> + EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TABLE_REVISION,
> + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdFadt),
> + NULL
> + },
> + // GTDT Table
> + {
> + EFI_ACPI_6_3_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE,
> + EFI_ACPI_6_3_GENERIC_TIMER_DESCRIPTION_TABLE_REVISION,
> + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdGtdt),
> + NULL
> + },
> + // MADT Table
> + {
> + EFI_ACPI_6_3_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE,
> + EFI_ACPI_6_3_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION,
> + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdMadt),
> + NULL
> + },
> + // SPCR Table
> + {
> + EFI_ACPI_6_3_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE,
> + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_REVISION,
> + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdSpcr),
> + NULL
> + },
> + // DSDT Table
> + {
> + EFI_ACPI_6_3_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
> + 0, // Unused
> + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdDsdt),
> + (EFI_ACPI_DESCRIPTION_HEADER *)dsdtsoc_aml_code
> + },
> + // DBG2 Table
> + {
> + EFI_ACPI_6_3_DEBUG_PORT_2_TABLE_SIGNATURE,
> + EFI_ACPI_DBG2_DEBUG_DEVICE_INFORMATION_STRUCT_REVISION,
> + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdDbg2),
> + NULL
> + },
> + // PPTT Table
> + {
> + EFI_ACPI_6_3_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_STRUCTURE_SIGNATURE,
> + EFI_ACPI_6_3_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_REVISION,
> + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdPptt),
> + NULL
> + },
> + },
> +};
> +
> +EDKII_PLATFORM_REPOSITORY_INFO MorelloRepositoryInfo = {
> + &CommonPlatformInfo,
> + &MorelloSocRepositoryInfo
> +};
> +
> +/** Return platform specific ARM namespace object.
> +
> + @param [in] This Pointer to the Configuration Manager Protocol.
> + @param [in] CmObjectId The Configuration Manager Object ID.
> + @param [in] Token An optional token identifying the object. If
> + unused this must be CM_NULL_TOKEN.
> + @param [in, out] CmObject Pointer to the Configuration Manager Object
> + descriptor describing the requested Object.
> +
> + @retval EFI_SUCCESS Success.
> + @retval EFI_INVALID_PARAMETER A parameter is invalid.
> + @retval EFI_NOT_FOUND The required object information is not found.
> +**/
> +EFI_STATUS
> +EFIAPI
> +GetArmNameSpaceObjectPlat (
> + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST This,
> + IN CONST CM_OBJECT_ID CmObjectId,
> + IN CONST CM_OBJECT_TOKEN Token OPTIONAL,
> + IN OUT CM_OBJ_DESCRIPTOR *CONST CmObject
> + )
> +{
> + return EFI_NOT_FOUND;
> +}
> +
> +/** Return platform specific standard namespace object.
> +
> + @param [in] This Pointer to the Configuration Manager Protocol.
> + @param [in] CmObjectId The Configuration Manager Object ID.
> + @param [in] Token An optional token identifying the object. If
> + unused this must be CM_NULL_TOKEN.
> + @param [in, out] CmObject Pointer to the Configuration Manager Object
> + descriptor describing the requested Object.
> +
> + @retval EFI_SUCCESS Success.
> + @retval EFI_INVALID_PARAMETER A parameter is invalid.
> + @retval EFI_NOT_FOUND The required object information is not found.
> +**/
> +EFI_STATUS
> +EFIAPI
> +GetStandardNameSpaceObjectPlat (
> + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST This,
> + IN CONST CM_OBJECT_ID CmObjectId,
> + IN CONST CM_OBJECT_TOKEN Token OPTIONAL,
> + IN OUT CM_OBJ_DESCRIPTOR *CONST CmObject
> + )
> +{
> + EFI_STATUS Status;
> + EDKII_SOC_PLATFORM_REPOSITORY_INFO *PlatformRepo;
> +
> + if ((This == NULL) || (CmObject == NULL)) {
> + ASSERT (This != NULL);
> + ASSERT (CmObject != NULL);
> + return EFI_INVALID_PARAMETER;
> + }
> +
> + Status = EFI_NOT_FOUND;
> + PlatformRepo = This->PlatRepoInfo->SocPlatRepoInfo;
> +
> + switch (GET_CM_OBJECT_ID (CmObjectId)) {
> + case EStdObjAcpiTableList:
> + Status = HandleCmObject (
> + CmObjectId,
> + PlatformRepo->CmAcpiTableList,
> + sizeof (PlatformRepo->CmAcpiTableList),
> + ARRAY_SIZE (PlatformRepo->CmAcpiTableList),
> + CmObject
> + );
> + break;
> +
> + default:
> + {
> + break;
> + }
> + }
> +
> + return Status;
> +}
> diff --git
> a/Platform/ARM/Morello/ConfigurationManager/ConfigurationManagerDxe/AslTables/DsdtSoc.asl
> b/Platform/ARM/Morello/ConfigurationManager/ConfigurationManagerDxe/AslTables/DsdtSoc.asl
> 
> new file mode 100644
> index 000000000000..806e170515b7
> --- /dev/null
> +++
> b/Platform/ARM/Morello/ConfigurationManager/ConfigurationManagerDxe/AslTables/DsdtSoc.asl
> 
> @@ -0,0 +1,41 @@
> +/** @file
> + Differentiated System Description Table Fields (DSDT)
> +
> + Copyright (c) 2021, ARM Ltd. All rights reserved.<BR>
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> + @par Reference(s):
> + - ACPI for Arm Components 1.0, Platform Design Document
> +
> +**/
> +
> +#include "ConfigurationManager.h"
> +
> +DefinitionBlock("Dsdt.aml", "DSDT", 1, "ARMLTD", "MORELLO",
> CFG_MGR_OEM_REVISION) {
> + Scope(_SB) {
> + Device(CP00) { // Cluster 0, Cpu 0
> + Name(_HID, "ACPI0007")
> + Name(_UID, 0)
> + Name(_STA, 0xF)
> + }
> +
> + Device(CP01) { // Cluster 0, Cpu 1
> + Name(_HID, "ACPI0007")
> + Name(_UID, 1)
> + Name(_STA, 0xF)
> + }
> +
> + Device(CP02) { // Cluster 1, Cpu 0
> + Name(_HID, "ACPI0007")
> + Name(_UID, 2)
> + Name(_STA, 0xF)
> + }
> +
> + Device(CP03) { // Cluster 1, Cpu 1
> + Name(_HID, "ACPI0007")
> + Name(_UID, 3)
> + Name(_STA, 0xF)
> + }
> + } // Scope(_SB)
> +}
> --
> 2.17.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#84487): https://edk2.groups.io/g/devel/message/84487
Mute This Topic: https://groups.io/mt/87497018/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/edk2-devel-archive/attachments/20211207/a8d7c42c/attachment.htm>


More information about the edk2-devel-archive mailing list