From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-oi1-f170.google.com (mail-oi1-f170.google.com [209.85.167.170]) by mx.groups.io with SMTP id smtpd.web09.415.1610772369492481573 for ; Fri, 15 Jan 2021 20:46:09 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@puresoftware.com header.s=google header.b=dElZPyrS; spf=pass (domain: puresoftware.com, ip: 209.85.167.170, mailfrom: vikas.singh@puresoftware.com) Received: by mail-oi1-f170.google.com with SMTP id q25so11862264oij.10 for ; Fri, 15 Jan 2021 20:46:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=puresoftware.com; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=XZUTZ9BFx8qPjaVSrmPP8fXhVRhmHWMESM2v2cfzO4g=; b=dElZPyrSmS+BMr7DFFM9gK2Kvt+1dRgYqfjRnJ0RGOhVebF9v9nYb5fYT94MqKFGvF GrRT6HQ0U1iZud7SVyK3qcAFgTtl1wGJ1puV64IYRZfWC/NHcMka7GjahFsBnHGOW9Tc x8OkYNwmIPhKdkku++3wbCjzd2UC5IIXwl/lg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=XZUTZ9BFx8qPjaVSrmPP8fXhVRhmHWMESM2v2cfzO4g=; b=CcylGdoJ7US5kkWkOqC0eAH0YzWSArFv6Tb8JFwEeIOKVHCnY7+qwV6vwsBN6JbkKX EsPoPpczMCVfQokQTKKTVujJzpUpWqtwWv8LHEUXhkPwn4mrLuKmmz/qPjK7Zyfpuzw9 nMSzi8re8rAT29XKlEeQNhNLPPoqQeJIqMhLjeS9Tf5WVn4zSj+8FgVsZEjGgHvmwgWh H3Yiq1ZpQgcaa3ymNIOC0u7hIOdEei+y0BCTFhdh/uvAzUbzm35WDMtDhMEHl3ql7r7v /oVtbWpdz4ACL+Ml6601YRWqAiH6VJMn9d3Obp1BvjiRVXx2J/DgDY1zwR1K5oLxj4gX 6WKg== X-Gm-Message-State: AOAM5309y0wLN3RNHHloVcNfM6C0FCwIgg8+Atpg1iQqSLAvj8bmQfCu xN03jvnBJfcW7WQQ6P6ZxAJu+AlWU9o8iylzu1w66w== X-Google-Smtp-Source: ABdhPJwsWwm533n+mPOSRjHFpcV0hmESg81V0PEyRNmRdveZ/h1K9k3zEuwjEw7hp5o5euPXtXY2Yjie6M2mFy4y9Zo= X-Received: by 2002:a05:6808:a0c:: with SMTP id n12mr7670897oij.70.1610772368081; Fri, 15 Jan 2021 20:46:08 -0800 (PST) MIME-Version: 1.0 References: <1609226758-19867-1-git-send-email-vikas.singh@puresoftware.com> <1609226758-19867-2-git-send-email-vikas.singh@puresoftware.com> <20210110032612.GK1664@vanye> In-Reply-To: <20210110032612.GK1664@vanye> From: Vikas Singh Date: Sat, 16 Jan 2021 10:15:41 +0530 Message-ID: Subject: Re: [PATCH v0] Platform/NXP: Add Dynamic Acpi for layerscape platforms To: Leif Lindholm Cc: devel@edk2.groups.io, Sami Mujawar , meenakshi.aggarwal@nxp.com, Paul Yang , Augustine Philips , samer.el-haj-mahmoud@arm.com, Varun Sethi , Arokia Samy , Kuldip Dwivedi , ard.biesheuvel@arm.com, Vikas Singh Content-Type: text/plain; charset="UTF-8" On Sun, Jan 10, 2021 at 8:56 AM Leif Lindholm wrote: > > On Tue, Dec 29, 2020 at 12:55:58 +0530, Vikas Singh wrote: > > These changes intend to add > > Hopefully they actually do. > > > - Common Configuration Manager (CM) for all fsl platforms. > > - Platform headers consumed by CM for LX2160ARDB. > > - Clk dsdt properties for LX2160ARDB. > > This sounds like (at least) three patches. > Leif, I plan to disintegrate the complete changes into 2 patch set's and will be sharing this series early next week. set1: Add Common Configuration Manager (CM) for all fsl platforms and headers consumed by CM for LX2160ARDB. set2: Add platform specific DSDT generator and Clk dsdt properties for LX2160ARDB. > > > > Signed-off-by: Vikas Singh > > --- > > .../ConfigurationManager/ConfigurationManager.dec | 24 + > > .../ConfigurationManager.dsc.inc | 21 + > > .../ConfigurationManagerDxe/ConfigurationManager.c | 709 +++++++++++++++++++++ > > .../ConfigurationManagerDxe/ConfigurationManager.h | 229 +++++++ > > .../ConfigurationManagerDxe.inf | 52 ++ > > .../Include/PlatformAcpiTableGenerator.h | 20 + > > Platform/NXP/Env.cshrc | 73 +++ > > .../LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl | 40 ++ > > .../LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl | 15 + > > .../AcpiTablesInclude/PlatformAcpiDsdtLib.inf | 39 ++ > > .../PlatformAcpiDsdtLib/RawDsdtGenerator.c | 146 +++++ > > .../AcpiTablesInclude/PlatformAcpiLib.h | 24 + > > Platform/NXP/LX2160aRdbPkg/Include/Platform.h | 244 +++++++ > > Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec | 6 +- > > Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc | 30 + > > Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf | 12 + > > Platform/NXP/build.sh | 121 ++++ > > 17 files changed, 1804 insertions(+), 1 deletion(-) > > create mode 100644 Platform/NXP/ConfigurationManager/ConfigurationManager.dec > > create mode 100644 Platform/NXP/ConfigurationManager/ConfigurationManager.dsc.inc > > create mode 100644 Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.c > > create mode 100644 Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.h > > create mode 100644 Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerDxe.inf > > create mode 100644 Platform/NXP/ConfigurationManager/Include/PlatformAcpiTableGenerator.h > > create mode 100755 Platform/NXP/Env.cshrc > > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl > > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl > > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf > > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib/RawDsdtGenerator.c > > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiLib.h > > create mode 100644 Platform/NXP/LX2160aRdbPkg/Include/Platform.h > > create mode 100755 Platform/NXP/build.sh > > > > diff --git a/Platform/NXP/ConfigurationManager/ConfigurationManager.dec b/Platform/NXP/ConfigurationManager/ConfigurationManager.dec > > new file mode 100644 > > index 0000000..8de2d7f > > --- /dev/null > > +++ b/Platform/NXP/ConfigurationManager/ConfigurationManager.dec > > @@ -0,0 +1,24 @@ > > +# ConfigurationManager.dec > > +# > > +# Copyright 2020 NXP > > +# Copyright 2020 Puresoftware Ltd > > +# > > +# SPDX-License-Identifier: BSD-2-Clause-Patent > > +# > > + > > +[Defines] > > + PACKAGE_NAME = ConfigurationManager > > If it has a .dec, should it be ConfigurationManagerPkg? > Yes, I will update this. > > + PACKAGE_GUID = 0222b1b1-247f-404e-bdc3-baab65f2ddd3 > > + > > +################################################################################ > > +# > > +# Include Section - list of Include Paths that are provided by this package. > > +# Comments are used for Keywords and Module Types. > > +# > > +# Supported Module Types: > > +# BASE SEC PEI_CORE PEIM DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SMM_DRIVER DXE_SAL_DRIVER UEFI_DRIVER UEFI_APPLICATION > > +# > > +################################################################################ > > +[Includes] > > + . > > No. > Why should I need to depend on ConfigurationManagerPkg to include a > header file in the same location as my source file? > Why would this be needed anyway? > Yes, agreed. Will correct this in next series. > > + Include > > diff --git a/Platform/NXP/ConfigurationManager/ConfigurationManager.dsc.inc b/Platform/NXP/ConfigurationManager/ConfigurationManager.dsc.inc > > new file mode 100644 > > index 0000000..8e6aed0 > > --- /dev/null > > +++ b/Platform/NXP/ConfigurationManager/ConfigurationManager.dsc.inc > > @@ -0,0 +1,21 @@ > > +## @file > > +# dsc include file for Configuration Manager > > +# > > +# Copyright 2020 NXP > > +# Copyright 2020 Puresoftware Ltd > > +# > > +# SPDX-License-Identifier: BSD-2-Clause-Patent > > +## > > + > > +[Defines] > > + > > +[BuildOptions] > > + > > +[LibraryClasses.common] > > + > > +[Components.common] > > + # Configuration Manager > > + Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerDxe.inf { > > + > > + *_*_*_PLATFORM_FLAGS = -I$(PACKAGES_PATH)/Platform/NXP/$(DYNAMIC_ACPI_PLATFORM)/Include > > This is not how PACKAGES_PATH works. It is a path, containing multiple > ':'-separated directories. From looking at other platforms, > $(WORKSPACE) might do what you want. > > But still, this is a .dsc.inc - it is always included from somewhere > else. Does that platform not set up its own include paths? > Agreed. Will correct this. > > + } > > diff --git a/Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.c b/Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.c > > new file mode 100644 > > index 0000000..6e8a4c4 > > --- /dev/null > > +++ b/Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.c > > @@ -0,0 +1,709 @@ > > +/** @file > > + Configuration Manager Dxe > > + > > + Copyright 2020 NXP > > + Copyright 2020 Puresoftware Ltd > > + > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > + @par Glossary: > > + - Cm or CM - Configuration Manager > > + - Obj or OBJ - Object > > +**/ > > + > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > + > > +/** The platform specific headers > > +*/ > > +#include "ConfigurationManager.h" > > +#include > > + > > +/** The platform configuration repository information. > > +*/ > > +STATIC > > +EDKII_PLATFORM_REPOSITORY_INFO FslPlatformRepositoryInfo = { > > + /// Configuration Manager information > > + { CONFIGURATION_MANAGER_REVISION, CFG_MGR_OEM_ID }, > > + > > + // ACPI Table List > > + { > > + // FADT Table > > + { > > + EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE, > > + EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_REVISION, > > + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdFadt), > > + NULL, > > + CFG_MGR_TABLE_ID > > + }, > > + > > + // GTDT Table > > + { > > + EFI_ACPI_6_2_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE, > > + EFI_ACPI_6_2_GENERIC_TIMER_DESCRIPTION_TABLE_REVISION, > > + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdGtdt), > > + NULL, > > + CFG_MGR_TABLE_ID > > + }, > > + > > + // MADT Table > > + { > > + EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, > > + EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION, > > + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdMadt), > > + NULL, > > + CFG_MGR_TABLE_ID > > + }, > > + > > + // PCI MCFG Table > > + { > > + EFI_ACPI_6_2_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE, > > + EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_SPACE_ACCESS_TABLE_REVISION, > > + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdMcfg), > > + NULL, > > + CFG_MGR_TABLE_ID > > + }, > > + > > + // SPCR Table > > + { > > + EFI_ACPI_6_2_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE, > > + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_REVISION, > > + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdSpcr), > > + NULL, > > + CFG_MGR_TABLE_ID > > + }, > > + > > + // DSDT (OEM) Table > > + { > > + EFI_ACPI_6_2_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE, > > + 0, > > + CREATE_OEM_ACPI_TABLE_GEN_ID (EPlatAcpiTableIdDsdt), > > + NULL, > > + CFG_MGR_TABLE_ID > > + } > > + > > + }, > > + > > + // Boot architecture information > > + { EFI_ACPI_6_2_ARM_PSCI_COMPLIANT }, // BootArchFlags > > + > > + // Power management profile information > > + { EFI_ACPI_6_2_PM_PROFILE_ENTERPRISE_SERVER }, // PowerManagement Profile > > + > > + // Generic Timer Info > > + { > > + // The physical base address for the counter control frame > > + TIMER_BASE_ADDRESS, > > + // The physical base address for the counter read frame > > + TIMER_READ_BASE_ADDRESS, > > + // The secure PL1 timer interrupt > > + TIMER_SEC_IT, > > + // The secure PL1 timer flags > > + GTDT_GTIMER_FLAGS, > > + // The non-secure PL1 timer interrupt > > + TIMER_NON_SEC_IT, > > + // The non-secure PL1 timer flags > > + GTDT_GTIMER_FLAGS, > > + // The virtual timer interrupt > > + TIMER_VIRT_IT, > > + // The virtual timer flags > > + GTDT_GTIMER_FLAGS, > > + // The non-secure PL2 timer interrupt > > + TIMER_HYP_IT, > > + // The non-secure PL2 timer flags > > + GTDT_GTIMER_FLAGS > > + }, > > + > > + // Generic Timer Block Information > > + PLAT_TIMER_BLOCK_INFO, > > + > > + // GTDT Frames > > + PLAT_TIMER_FRAME_INFO, > > + > > + // Watchdog info > > + PLAT_WATCHDOG_INFO, > > + > > + // GIC CPU Interface information > > + PLAT_GIC_CPU_INTERFACE, > > + > > + // GIC Distributor Info > > + PLAT_GIC_DISTRIBUTOR_INFO, > > + > > + // GIC Redistributor > > + PLAT_GIC_REDISTRIBUTOR_INFO, > > + > > + // GIC ITS > > + PLAT_GIC_ITS_INFO, > > + > > + // MCFG Info > > + PLAT_MCFG_INFO, > > + > > + // SPCR Info > > + PLAT_SPCR_INFO, > > + > > + 2.0 // fsl board revision > > +}; > > + > > +/** Initialize the platform configuration repository. > > + > > + @param [in] This Pointer to the Configuration Manager Protocol. > > + > > + @retval EFI_SUCCESS Success > > +**/ > > +STATIC > > +EFI_STATUS > > +EFIAPI > > +InitializePlatformRepository ( > > + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This > > + ) > > +{ > > + EDKII_PLATFORM_REPOSITORY_INFO * PlatformRepo; > > + UINT32 Svr; > > + > > + PlatformRepo = This->PlatRepoInfo; > > + > > + Svr = SocGetSvr (); > > + if (SVR_SOC_VER(Svr) == SVR_LX2160A) { > > + PlatformRepo->FslBoardRevision = SVR_MAJOR(Svr); > > + DEBUG ((DEBUG_INFO, "Fsl : SoC LX2160A Rev = 0x%x\n", PlatformRepo->FslBoardRevision)); > > + } else { > > + DEBUG ((DEBUG_INFO, "Fsl : SoC Unknown Rev = 0x%x\n", PlatformRepo->FslBoardRevision)); > > + } > > + > > + return EFI_SUCCESS; > > +} > > + > > +/** Return PCI Configuration Info. > > + @param [in] This Pointer to the Configuration Manager Protocol. > > + @param [in] CmObjectId The Object ID of the CM object requested > > + @param [in] Token A unique token for identifying the requested > > + CM_ARM_PCI_INFO object. > > + @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 > > +GetPciConfigInfo ( > > + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, > > + IN CONST CM_OBJECT_ID CmObjectId, > > + IN CONST CM_OBJECT_TOKEN Token, > > + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject > > + ) > > +{ > > + EDKII_PLATFORM_REPOSITORY_INFO * PlatformRepo; > > + UINT32 TotalObjCount; > > + UINT32 ObjIndex; > > + > > + if ((This == NULL) || (CmObject == NULL)) { > > + ASSERT (This != NULL); > > + ASSERT (CmObject != NULL); > > + return EFI_INVALID_PARAMETER; > > + } > > + > > + PlatformRepo = This->PlatRepoInfo; > > + > > + TotalObjCount = ARRAY_SIZE (PlatformRepo->PciConfigInfo); > > + > > + for (ObjIndex = 0; ObjIndex < TotalObjCount; ObjIndex++) { > > + if (Token == (CM_OBJECT_TOKEN)&PlatformRepo->PciConfigInfo[ObjIndex]) > > + { > > + CmObject->ObjectId = CmObjectId; > > + CmObject->Size = sizeof (PlatformRepo->PciConfigInfo[ObjIndex]); > > + CmObject->Data = (VOID*)&PlatformRepo->PciConfigInfo[ObjIndex]; > > + CmObject->Count = 1; > > + return EFI_SUCCESS; > > + } > > + } > > + > > + return EFI_NOT_FOUND; > > +} > > + > > +/** Return GIC CPU Interface Info. > > + @param [in] This Pointer to the Configuration Manager Protocol. > > + @param [in] CmObjectId The Object ID of the CM object requested > > + @param [in] Token A unique token for identifying the requested > > + CM_ARM_GICC_INFO object. > > + @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 > > +GetGicCInfo ( > > + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, > > + IN CONST CM_OBJECT_ID CmObjectId, > > + IN CONST CM_OBJECT_TOKEN Token, > > + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject > > + ) > > +{ > > + EDKII_PLATFORM_REPOSITORY_INFO * PlatformRepo; > > + > > + if ((This == NULL) || (CmObject == NULL)) { > > + ASSERT (This != NULL); > > + ASSERT (CmObject != NULL); > > + return EFI_INVALID_PARAMETER; > > + } > > + > > + PlatformRepo = This->PlatRepoInfo; > > + > > + if (Token != (CM_OBJECT_TOKEN)&PlatformRepo->GicCInfo) { > > + return EFI_NOT_FOUND; > > + } > > + > > + CmObject->ObjectId = CmObjectId; > > + CmObject->Size = sizeof (PlatformRepo->GicCInfo); > > + CmObject->Data = (VOID*)&PlatformRepo->GicCInfo; > > + CmObject->Count = sizeof (PlatformRepo->GicCInfo) / > > + sizeof (PlatformRepo->GicCInfo[0]); > > Use ARRAY_SIZE macro. > Yes, will update. > > + return EFI_SUCCESS; > > +} > > + > > +/** Return a GT Block timer frame info list. > > + @param [in] This Pointer to the Configuration Manager Protocol. > > + @param [in] CmObjectId The Configuration Manager Object ID. > > + @param [in] Token A token for identifying the object > > + @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 > > +GetGTBlockTimerFrameInfo ( > > + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, > > + IN CONST CM_OBJECT_ID CmObjectId, > > + IN CONST CM_OBJECT_TOKEN Token, > > + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject > > + ) > > +{ > > + EDKII_PLATFORM_REPOSITORY_INFO * PlatformRepo; > > + > > + if ((This == NULL) || (CmObject == NULL)) { > > + ASSERT (This != NULL); > > + ASSERT (CmObject != NULL); > > + return EFI_INVALID_PARAMETER; > > + } > > + > > + PlatformRepo = This->PlatRepoInfo; > > + > > + if (Token != (CM_OBJECT_TOKEN)&PlatformRepo->GTBlock0TimerInfo) { > > + return EFI_NOT_FOUND; > > + } > > + > > + CmObject->ObjectId = CmObjectId; > > + CmObject->Size = sizeof (PlatformRepo->GTBlock0TimerInfo); > > + CmObject->Data = (VOID*)&PlatformRepo->GTBlock0TimerInfo; > > + CmObject->Count = sizeof (PlatformRepo->GTBlock0TimerInfo) / > > + sizeof (PlatformRepo->GTBlock0TimerInfo[0]); > > Use ARRAY_SIZE macro. > Yes, will update. > > + return EFI_SUCCESS; > > +} > > + > > +/** Return a 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 > > +GetStandardNameSpaceObject ( > > + 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_PLATFORM_REPOSITORY_INFO * PlatformRepo; > > + UINT32 TableCount; > > + > > + Status = EFI_SUCCESS; > > + if ((This == NULL) || (CmObject == NULL)) { > > + ASSERT (This != NULL); > > + ASSERT (CmObject != NULL); > > + return EFI_INVALID_PARAMETER; > > + } > > + PlatformRepo = This->PlatRepoInfo; > > + > > + switch (GET_CM_OBJECT_ID (CmObjectId)) { > > + HANDLE_CM_OBJECT ( > > + EStdObjCfgMgrInfo, > > + CmObjectId, > > + PlatformRepo->CmInfo, > > + 1 > > + ); > > + > > + case EStdObjAcpiTableList: > > + CmObject->ObjectId = CmObjectId; > > + TableCount = sizeof (PlatformRepo->CmAcpiTableList) / > > + sizeof (PlatformRepo->CmAcpiTableList[0]); > > Use ARRAY_SIZE macro. > Yes, will update. > > + CmObject->Data = (VOID*)&PlatformRepo->CmAcpiTableList; > > + CmObject->Size = sizeof (PlatformRepo->CmAcpiTableList); > > + CmObject->Count = TableCount; > > + DEBUG (( > > + DEBUG_INFO, > > + "EStdObjAcpiTableList: Ptr = 0x%p. Size = %d, Count = %d\n", > > + CmObject->Data, > > + CmObject->Size, > > + CmObject->Count > > + )); > > + break; > > + > > + default: { > > + Status = EFI_NOT_FOUND; > > + DEBUG (( > > + DEBUG_ERROR, > > + "ERROR: Object 0x%x. Status = %r\n", > > + CmObjectId, > > + Status > > + )); > > + break; > > + } > > + } > > + > > + return Status; > > +} > > + > > +/** Return an 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 > > +GetArmNameSpaceObject ( > > + 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_PLATFORM_REPOSITORY_INFO * PlatformRepo; > > + > > + Status = EFI_SUCCESS; > > + if ((This == NULL) || (CmObject == NULL)) { > > + ASSERT (This != NULL); > > + ASSERT (CmObject != NULL); > > + return EFI_INVALID_PARAMETER; > > + } > > + PlatformRepo = This->PlatRepoInfo; > > + > > + switch (GET_CM_OBJECT_ID (CmObjectId)) { > > + HANDLE_CM_OBJECT ( > > + EArmObjBootArchInfo, > > + CmObjectId, > > + PlatformRepo->BootArchInfo, > > + 1 > > + ); > > + HANDLE_CM_OBJECT ( > > + EArmObjPowerManagementProfileInfo, > > + CmObjectId, > > + PlatformRepo->PmProfileInfo, > > + 1 > > + ); > > + HANDLE_CM_OBJECT ( > > + EArmObjGenericTimerInfo, > > + CmObjectId, > > + PlatformRepo->GenericTimerInfo, > > + 1 > > + ); > > + HANDLE_CM_OBJECT ( > > + EArmObjPlatformGenericWatchdogInfo, > > + CmObjectId, > > + PlatformRepo->Watchdog, > > + PLAT_WATCHDOG_COUNT > > + ); > > + HANDLE_CM_OBJECT ( > > + EArmObjPlatformGTBlockInfo, > > + CmObjectId, > > + PlatformRepo->GTBlockInfo, > > + (sizeof (PlatformRepo->GTBlockInfo) / > > + sizeof (PlatformRepo->GTBlockInfo[0])) > > Use ARRAY_SIZE macro. > Yes, will update. > > + ); > > + HANDLE_CM_OBJECT_REF_BY_TOKEN ( > > + EArmObjGTBlockTimerFrameInfo, > > + CmObjectId, > > + PlatformRepo->GTBlock0TimerInfo, > > + (sizeof (PlatformRepo->GTBlock0TimerInfo) / > > + sizeof (PlatformRepo->GTBlock0TimerInfo[0])), > > Use ARRAY_SIZE macro. > Yes, will update. > > + Token, > > + GetGTBlockTimerFrameInfo > > + ); > > + HANDLE_CM_OBJECT_REF_BY_TOKEN ( > > + EArmObjGicCInfo, > > + CmObjectId, > > + PlatformRepo->GicCInfo, > > + ARRAY_SIZE (PlatformRepo->GicCInfo), > > + Token, > > + GetGicCInfo > > + ); > > + HANDLE_CM_OBJECT ( > > + EArmObjGicDInfo, > > + CmObjectId, > > + PlatformRepo->GicDInfo, > > + 1 > > + ); > > + HANDLE_CM_OBJECT ( > > + EArmObjGicRedistributorInfo, > > + CmObjectId, > > + PlatformRepo->GicRedistInfo, > > + PLAT_GIC_REDISTRIBUTOR_COUNT > > + ); > > + HANDLE_CM_OBJECT ( > > + EArmObjGicItsInfo, > > + CmObjectId, > > + PlatformRepo->GicItsInfo, > > + PLAT_GIC_ITS_COUNT > > + ); > > + HANDLE_CM_OBJECT_REF_BY_TOKEN ( > > + EArmObjPciConfigSpaceInfo, > > + CmObjectId, > > + PlatformRepo->PciConfigInfo, > > + (sizeof (PlatformRepo->PciConfigInfo) / > > + sizeof (PlatformRepo->PciConfigInfo[0])), > > Use ARRAY_SIZE macro. > Yes, will update. > > + Token, > > + GetPciConfigInfo > > + ); > > + HANDLE_CM_OBJECT ( > > + EArmObjSerialConsolePortInfo, > > + CmObjectId, > > + PlatformRepo->SpcrSerialPort, > > + 1 > > + ); > > + default: { > > + Status = EFI_NOT_FOUND; > > + DEBUG (( > > + DEBUG_INFO, > > + "INFO: Object 0x%x. Status = %r\n", > > + CmObjectId, > > + Status > > + )); > > + break; > > + } > > + }//switch > > + > > + return Status; > > +} > > + > > +/** Return an OEM 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 > > +GetOemNameSpaceObject ( > > + 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; > > + > > + Status = EFI_SUCCESS; > > + if ((This == NULL) || (CmObject == NULL)) { > > + ASSERT (This != NULL); > > + ASSERT (CmObject != NULL); > > + return EFI_INVALID_PARAMETER; > > + } > > + > > + switch (GET_CM_OBJECT_ID (CmObjectId)) { > > + default: { > > + Status = EFI_NOT_FOUND; > > + DEBUG (( > > + DEBUG_ERROR, > > + "ERROR: Object 0x%x. Status = %r\n", > > + CmObjectId, > > + Status > > + )); > > + break; > > + } > > + } > > + > > + return Status; > > +} > > + > > +/** The GetObject function defines the interface implemented by the > > + Configuration Manager Protocol for returning the Configuration > > + Manager Objects. > > + > > + @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 > > +FslPlatformGetObject ( > > + 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; > > + > > + if ((This == NULL) || (CmObject == NULL)) { > > + ASSERT (This != NULL); > > + ASSERT (CmObject != NULL); > > + return EFI_INVALID_PARAMETER; > > + } > > + > > + switch (GET_CM_NAMESPACE_ID (CmObjectId)) { > > + case EObjNameSpaceStandard: > > + Status = GetStandardNameSpaceObject (This, CmObjectId, Token, CmObject); > > + break; > > + case EObjNameSpaceArm: > > + Status = GetArmNameSpaceObject (This, CmObjectId, Token, CmObject); > > + break; > > + case EObjNameSpaceOem: > > + Status = GetOemNameSpaceObject (This, CmObjectId, Token, CmObject); > > + break; > > + default: { > > + Status = EFI_INVALID_PARAMETER; > > + DEBUG (( > > + DEBUG_ERROR, > > + "ERROR: Unknown Namespace Object = 0x%x. Status = %r\n", > > + CmObjectId, > > + Status > > + )); > > + break; > > + } > > + } > > + > > + return Status; > > +} > > + > > +/** The SetObject function defines the interface implemented by the > > + Configuration Manager Protocol for updating the Configuration > > + Manager Objects. > > + > > + @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] CmObject Pointer to the Configuration Manager Object > > + descriptor describing the Object. > > + > > + @retval EFI_UNSUPPORTED This operation is not supported. > > +**/ > > +EFI_STATUS > > +EFIAPI > > +FslPlatformSetObject ( > > + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, > > + IN CONST CM_OBJECT_ID CmObjectId, > > + IN CONST CM_OBJECT_TOKEN Token OPTIONAL, > > + IN CM_OBJ_DESCRIPTOR * CONST CmObject > > + ) > > +{ > > + return EFI_UNSUPPORTED; > > +} > > + > > +/** A structure describing the configuration manager protocol interface. > > +*/ > > +STATIC > > +CONST > > +EDKII_CONFIGURATION_MANAGER_PROTOCOL FslConfigManagerProtocol = { > > + CREATE_REVISION (1, 0), > > + FslPlatformGetObject, > > + FslPlatformSetObject, > > + &FslPlatformRepositoryInfo > > +}; > > + > > +/** > > + Entrypoint of Configuration Manager Dxe. > > + > > + @param ImageHandle > > + @param SystemTable > > + > > + @return EFI_SUCCESS > > + @return EFI_LOAD_ERROR > > + @return EFI_OUT_OF_RESOURCES > > + > > +**/ > > +EFI_STATUS > > +EFIAPI > > +ConfigurationManagerDxeInitialize ( > > + IN EFI_HANDLE ImageHandle, > > + IN EFI_SYSTEM_TABLE * SystemTable > > + ) > > +{ > > + EFI_STATUS Status; > > + > > + Status = gBS->InstallProtocolInterface ( > > + &ImageHandle, > > + &gEdkiiConfigurationManagerProtocolGuid, > > + EFI_NATIVE_INTERFACE, > > + (VOID*)&FslConfigManagerProtocol > > + ); > > + if (EFI_ERROR (Status)) { > > + DEBUG (( > > + DEBUG_ERROR, > > + "ERROR: Failed to get Install Configuration Manager Protocol." \ > > + " Status = %r\n", > > + Status > > + )); > > + goto error_handler; > > + } > > + > > + Status = InitializePlatformRepository ( > > + &FslConfigManagerProtocol > > + ); > > + if (EFI_ERROR (Status)) { > > + DEBUG (( > > + DEBUG_ERROR, > > + "ERROR: Failed to initialize the Platform Configuration Repository." \ > > + " Status = %r\n", > > + Status > > + )); > > + } > > + > > +error_handler: > > + return Status; > > +} > > diff --git a/Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.h b/Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.h > > new file mode 100644 > > index 0000000..cf09ef9 > > --- /dev/null > > +++ b/Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.h > > @@ -0,0 +1,229 @@ > > +/** @file > > + Configuration Manager headers > > + > > + Copyright 2020 NXP > > + Copyright 2020 Puresoftware Ltd > > + > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > + @par Glossary: > > + - Cm or CM - Configuration Manager > > + - Obj or OBJ - Object > > +**/ > > + > > +#ifndef CONFIGURATION_MANAGER_H__ > > +#define CONFIGURATION_MANAGER_H__ > > + > > +#include > > +#include > > + > > +/** The configuration manager version > > +*/ > > +#define CONFIGURATION_MANAGER_REVISION CREATE_REVISION (0, 0) > > + > > +/** The OEM ID > > +*/ > > +#define CFG_MGR_OEM_ID { 'N', 'X', 'P', ' ', ' ', ' ' } > > + > > +/** A helper macro for populating the GIC CPU information > > + */ > > +#define GICC_ENTRY( \ > > + CPUInterfaceNumber, \ > > + Mpidr, \ > > + PmuIrq, \ > > + VGicIrq, \ > > + EnergyEfficiency \ > > + ) { \ > > + CPUInterfaceNumber, /* UINT32 CPUInterfaceNumber */ \ > > + CPUInterfaceNumber, /* UINT32 AcpiProcessorUid */ \ > > + EFI_ACPI_6_2_GIC_ENABLED, /* UINT32 Flags */ \ > > + 0, /* UINT32 ParkingProtocolVersion */ \ > > + PmuIrq, /* UINT32 PerformanceInterruptGsiv */ \ > > + 0, /* UINT64 ParkedAddress */ \ > > + GICC_BASE, /* UINT64 PhysicalBaseAddress */ \ > > + GICV_BASE, /* UINT64 GICV */ \ > > + GICH_BASE, /* UINT64 GICH */ \ > > + VGicIrq, /* UINT32 VGICMaintenanceInterrupt */ \ > > + 0, /* UINT64 GICRBaseAddress */ \ > > + Mpidr, /* UINT64 MPIDR */ \ > > + EnergyEfficiency /* UINT8 ProcessorPowerEfficiency */ \ > > +} > > + > > +/** A helper macro for returning configuration manager objects > > +*/ > > +#define HANDLE_CM_OBJECT(ObjId, CmObjectId, Object, ObjectCount) \ > > + case ObjId: { \ > > + CmObject->ObjectId = CmObjectId; \ > > + CmObject->Size = sizeof (Object); \ > > + CmObject->Data = (VOID*)&Object; \ > > + CmObject->Count = ObjectCount; \ > > + DEBUG (( \ > > + DEBUG_INFO, \ > > + #CmObjectId ": Ptr = 0x%p, Size = %d, Count = %d\n", \ > > + CmObject->Data, \ > > + CmObject->Size, \ > > + CmObject->Count \ > > + )); \ > > + break; \ > > + } > > This is code obfuscation. Please don't invent your own programming > languages. In C, the case, the start bracket, the break and the end > bracket always go inline. > The rest would be better as a static helper function than a macro. > Leif, changes are in accordance with : https://raw.githubusercontent.com/tianocore-docs/Docs/master/Specifications/CCS_2_1_Draft.pdf and in reference to : https://github.com/tianocore/edk2-platforms/blob/master/Platform/ARM/JunoPkg/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManager.h#L94 These macros are in simpleset form. However i will try to move some of the logic to a static function, but this will again lead to duplicacy. > > + > > +/** A helper macro for returning configuration manager objects > > + referenced by token > > +*/ > > +#define HANDLE_CM_OBJECT_REF_BY_TOKEN( \ > > See comment above. > > > + ObjId, \ > > + CmObjectId, \ > > + Object, \ > > + ObjectCount, \ > > + Token, \ > > + HandlerProc \ > > + ) \ > > + case ObjId: { \ > > + CmObject->ObjectId = CmObjectId; \ > > + if (Token == CM_NULL_TOKEN) { \ > > + CmObject->Size = sizeof (Object); \ > > + CmObject->Data = (VOID*)&Object; \ > > + CmObject->Count = ObjectCount; \ > > + DEBUG (( \ > > + DEBUG_INFO, \ > > + #CmObjectId ": Ptr = 0x%p, Size = %d, Count = %d\n", \ > > + CmObject->Data, \ > > + CmObject->Size, \ > > + CmObject->Count \ > > + )); \ > > + } else { \ > > + Status = HandlerProc (This, CmObjectId, Token, CmObject); \ > > + DEBUG (( \ > > + DEBUG_INFO, \ > > + #CmObjectId ": Token = 0x%p, Ptr = 0x%p, Size = %d, Count = %d\n", \ > > + (VOID*)Token, \ > > + CmObject->Data, \ > > + CmObject->Size, \ > > + CmObject->Count \ > > + )); \ > > + } \ > > + break; \ > > + } > > + > > +/** A helper macro for returning configuration manager objects referenced > > + by token when the entire platform repository is in scope and the > > + CM_NULL_TOKEN value is not allowed. > > +*/ > > +#define HANDLE_CM_OBJECT_SEARCH_PLAT_REPO( \ > > See comment above. > > > + ObjId, \ > > + CmObjectId, \ > > + Token, \ > > + HandlerProc \ > > + ) \ > > + case ObjId: { \ > > + CmObject->ObjectId = CmObjectId; \ > > + if (Token == CM_NULL_TOKEN) { \ > > + Status = EFI_INVALID_PARAMETER; \ > > + DEBUG (( \ > > + DEBUG_ERROR, \ > > + #ObjId ": CM_NULL_TOKEN value is not allowed when searching" \ > > + " the entire platform repository.\n" \ > > + )); \ > > + } else { \ > > + Status = HandlerProc (This, CmObjectId, Token, CmObject); \ > > + DEBUG (( \ > > + DEBUG_INFO, \ > > + #ObjId ": Token = 0x%p, Ptr = 0x%p, Size = %d, Count = %d\n", \ > > + (VOID*)Token, \ > > + CmObject->Data, \ > > + CmObject->Size, \ > > + CmObject->Count \ > > + )); \ > > + } \ > > + break; \ > > + } > > + > > +/** The number of ACPI tables to install > > +*/ > > +#define PLAT_ACPI_TABLE_COUNT 6 > > This feels suboptimal. > Could this be calculated at run- or compile time? > Leif, I plan to chnage like this : PLAT_ACPI_TABLE_COUNT = CM_MANDATORY_TBLS + OEM_ACPI_TBLS Here CM_MANDATORY_TBLS must be known to CM upfront and is fixed as per thr CM's implementation (min tables needed to boot any os). OEM_ACPI_TBLS should be coming form platforms headers only. Unfortunately this can not be done at runtime /compile time. > > + > > +/** A structure describing the platform configuration > > + manager repository information > > +*/ > > +typedef struct PlatformRepositoryInfo { > > + /// Configuration Manager Information > > + CM_STD_OBJ_CONFIGURATION_MANAGER_INFO CmInfo; > > + > > + /// List of ACPI tables > > + CM_STD_OBJ_ACPI_TABLE_INFO CmAcpiTableList[PLAT_ACPI_TABLE_COUNT]; > > + > > + /// Boot architecture information > > + CM_ARM_BOOT_ARCH_INFO BootArchInfo; > > + > > + /// Power management profile information > > + CM_ARM_POWER_MANAGEMENT_PROFILE_INFO PmProfileInfo; > > + > > + /// Generic timer information > > + CM_ARM_GENERIC_TIMER_INFO GenericTimerInfo; > > + > > + /// Generic timer block information > > + CM_ARM_GTBLOCK_INFO GTBlockInfo[PLAT_GTBLOCK_COUNT]; > > + > > + /// Generic timer frame information > > + CM_ARM_GTBLOCK_TIMER_FRAME_INFO GTBlock0TimerInfo[PLAT_GTFRAME_COUNT]; > > + > > + /// Watchdog information > > + CM_ARM_GENERIC_WATCHDOG_INFO Watchdog; > > + > > + /// GIC CPU interface information > > + CM_ARM_GICC_INFO GicCInfo[PLAT_CPU_COUNT]; > > + > > + /// GIC distributor information > > + CM_ARM_GICD_INFO GicDInfo; > > + > > + /// GIC Redistributor information > > + CM_ARM_GIC_REDIST_INFO GicRedistInfo; > > + > > + /// GIC ITS information > > + CM_ARM_GIC_ITS_INFO GicItsInfo; > > + > > + /// PCI configuration space information > > + CM_ARM_PCI_CONFIG_SPACE_INFO PciConfigInfo[PLAT_PCI_CONFG_COUNT]; > > + > > + /// Serial port information for serial port console redirection port > > + CM_ARM_SERIAL_PORT_INFO SpcrSerialPort; > > + > > + /// Fsl Board Revision > > + UINT32 FslBoardRevision; > > +} EDKII_PLATFORM_REPOSITORY_INFO; > > Please don't use EDKII prefix for platform-scpecific code. > Yes, will update this. > > + > > +/* > > + * GTDT_GTIMER_FLAGS > > + * IT trigger (Level/Edge- Bit 0) and Polarity (Low/High) Bit 1 > > + * Set bit-0 is 0 (Level trigger), Bit 1 1 (Active low) > > + */ > > +#define GTDT_GTIMER_FLAGS (EFI_ACPI_6_1_GTDT_TIMER_FLAG_TIMER_INTERRUPT_POLARITY) > > + > > +/* > > + * Timer Frame IT High Level triggered > > + * IT trigger (Level/Edge- Bit 0) and Polarity (Low/High) Bit 1 > > + * Set bit-0 is 0 (Level trigger), Bit 1 0 (Active High) > > + */ > > +#define GTDT_FRAME_FLAGS 0 > > + > > +/* > > + * Timer frame status > > + * Access - Secure or non secure <-- Bit 0 > > + * State - Save (meaning always on) or Lose Context <-- Bit 1 > > + * Set Bit 0 1 as Secure and Bit 1 zero as lose context > > +*/ > > +#define GTDT_FRAME_COMMON_FLAGS EFI_ACPI_6_1_GTDT_GT_BLOCK_COMMON_FLAG_SECURE_TIMER > > + > > +/* > > + * Watchdog flags > > + * IT trigger (Level/Edge- Bit 0), Polarity (Low/High) Bit 1, Secured Bit 2 > > + * Set Level trigger (Bit 0 as 0) > > + * Active High (Bit 1 as 0) > > + * Non secure (Bit 2 as 0) > > + */ > > +#define SBSA_WATCHDOG_FLAGS 0 > > +#define SBSA_SEC_WATCHDOG_FLAGS EFI_ACPI_6_1_GTDT_GT_BLOCK_COMMON_FLAG_SECURE_TIMER > > + > > +#define GT_BLOCK_FRAME_RES_BASE MAX_UINT64 > > + > > +#endif // CONFIGURATION_MANAGER_H__ > > diff --git a/Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerDxe.inf b/Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerDxe.inf > > new file mode 100644 > > index 0000000..03fe104 > > --- /dev/null > > +++ b/Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerDxe.inf > > @@ -0,0 +1,52 @@ > > +## @file > > +# Configuration Manager Dxe > > +# > > +# Copyright 2020 NXP > > +# Copyright 2020 Puresoftware Ltd > > +# > > +# SPDX-License-Identifier: BSD-2-Clause-Patent > > +## > > + > > +[Defines] > > + INF_VERSION = 0x0001001B > > + BASE_NAME = ConfigurationManagerDxe > > + FILE_GUID = A97F70AC-3BB4-4596-B4D2-9F948EC12D17 > > + 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 = ARM AARCH64 > > +# > > + > > +[Sources] > > + ConfigurationManager.c > > + > > +[Packages] > > + ArmPkg/ArmPkg.dec > > + ArmPlatformPkg/ArmPlatformPkg.dec > > + DynamicTablesPkg/DynamicTablesPkg.dec > > + EmbeddedPkg/EmbeddedPkg.dec > > + MdeModulePkg/MdeModulePkg.dec > > + MdePkg/MdePkg.dec > > + Platform/NXP/ConfigurationManager/ConfigurationManager.dec > > + Silicon/NXP/NxpQoriqLs.dec > > + > > +[LibraryClasses] > > + ArmPlatformLib > > + PrintLib > > + UefiBootServicesTableLib > > + UefiDriverEntryPoint > > + UefiRuntimeServicesTableLib > > + > > +[Protocols] > > + gEdkiiConfigurationManagerProtocolGuid > > + > > +[FixedPcd] > > + > > +[Pcd] > > + > > +[Depex] > > + TRUE > > diff --git a/Platform/NXP/ConfigurationManager/Include/PlatformAcpiTableGenerator.h b/Platform/NXP/ConfigurationManager/Include/PlatformAcpiTableGenerator.h > > new file mode 100644 > > index 0000000..da3c571 > > --- /dev/null > > +++ b/Platform/NXP/ConfigurationManager/Include/PlatformAcpiTableGenerator.h > > @@ -0,0 +1,20 @@ > > +/** @file > > + Acpi Table generator headers > > + > > + Copyright 2020 NXP > > + Copyright 2020 Puresoftware Ltd > > + > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#ifndef PLATFORM_ACPI_TABLE_GENERATOR_H_ > > +#define PLATFORM_ACPI_TABLE_GENERATOR_H_ > > + > > +typedef enum PlatAcpiTableId { > > + EPlatAcpiTableIdReserved = 0x0000, ///< Reserved > > + EPlatAcpiTableIdDsdt, > > + EPlatAcpiTableIdMax > > +} EPLAT_ACPI_TABLE_ID; > > Where does the EPlat prefix come from? What does it stand for? > Leif, this will be corrected. e.g: EPlatAcpiTableIdReserved -> PlatAcpiTableIdReserved These Id's will be used by OEM/platforms defined generators etc. > > + > > +#endif > > diff --git a/Platform/NXP/Env.cshrc b/Platform/NXP/Env.cshrc > > new file mode 100755 > > index 0000000..a0f151b > > --- /dev/null > > +++ b/Platform/NXP/Env.cshrc > > I am nearly 100% convinced the below would only execute correctly in a > bash shell, which is where it is called from - why does it claim to be > for csh? > Yes, i plan to modify this Env.cshrc --> Env.sh > > @@ -0,0 +1,73 @@ > > +# @file. > > +# > > +# Copyright 2020 NXP > > +# Copyright 2020 Puresoftware Ltd > > +# > > +# 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. > > +# > > Please use SPDX tag here as well. > Yes, I will correct this. > > + > > +unset GCC_UTILITY GCC_VERSION MajorVersion MinorVersion > > + > > +if [ X"$CROSS_COMPILE_64" != X"" ]; then > > + ARM64_PREFIX="$CROSS_COMPILE_64" > > +elif [ X"$CROSS_COMPILE" != X"" ]; then > > + ARM64_PREFIX="$CROSS_COMPILE" > > +else > > + ARM64_PREFIX="aarch64-linux-gnu-" > > +fi > > + > > +GCC_UTILITY="${ARM64_PREFIX}gcc" > > +CheckGcc=`which $GCC_UTILITY >/dev/null 2>&1` > > +if [ "$?" -eq 0 ];then > > + GCC_VERSION=`$GCC_UTILITY -v 2>&1 | tail -n 1 | awk '{print $3}'` > > + MajorVersion=`echo $GCC_VERSION | cut -d . -f 1` > > + MinorVersion=`echo $GCC_VERSION | cut -d . -f 2` > > + GCC_ARCH_PREFIX= > > + > > + case $MajorVersion in > > + 4) > > + case $MinorVersion in > > + 9) > > + GCC_ARCH_PREFIX="GCC49_AARCH64_PREFIX" > > + ;; > > + *) > > + NOTSUPPORTED=1 > > + ;; > > + esac > > + ;; > > + 5) > > + case $MinorVersion in > > + 4) > > + GCC_ARCH_PREFIX="GCC5_AARCH64_PREFIX" > > + ;; > > + *) > > + GCC_ARCH_PREFIX="GCC5_AARCH64_PREFIX" > > + echo "Warning: ${GCC_UTILITY} version ($MajorVersion.$MinorVersion) has not been tested, please use at own risk." > > + ;; > > + esac > > + ;; > > + *) > > + GCC_ARCH_PREFIX="GCC5_AARCH64_PREFIX" > > + echo "Warning: ${GCC_UTILITY} version ($MajorVersion.$MinorVersion) has not been tested, please use at own risk." > > + ;; > > + esac > > + > > + [ -n "$GCC_ARCH_PREFIX" ] && { > > + export GCC_ARCH_PREFIX="$GCC_ARCH_PREFIX" > > + export "$GCC_ARCH_PREFIX=$ARM64_PREFIX" > > + } > > + > > + unset ARCH > > +else > > + echo "Error: ${GCC_UTILITY} not found. Please check PATH variable." > > + unset GCC_UTILITY GCC_VERSION MajorVersion MinorVersion > > +fi > > + > > +# Export edk2-platforms path > > +export PACKAGES_PATH=`dirname \`dirname "$PWD"\`` > > diff --git a/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl > > new file mode 100644 > > index 0000000..1008476 > > --- /dev/null > > +++ b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl > > @@ -0,0 +1,40 @@ > > +/** @file > > + Differentiated System Description Table Fields (DSDT) > > + > > + Copyright 2020 NXP > > + Copyright 2020 Puresoftware Ltd > > + > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +Scope(_SB) > > +{ > > + Device(PCLK) { > > + Name(_HID, "NXP0017") > > + Name(CLK, 0) > > + Name(AVBL, 0) > > + OperationRegion(RCWS, SystemMemory, DCFG_BASE, DCFG_LEN) > > + Method(_REG,2) { > > + if (Arg0 == "RCWS") { > > + Store(Arg1, AVBL) > > + } > > + } > > + Field (RCWS, ByteAcc, NoLock, Preserve) { > > + offset(0x100), > > + PCFG, 2, > > + PRAT, 6, > > + offset(0x124), > > + RESV, 4, > > + SFRQ, 10 > > + } > > + > > + Method(_INI, 0, NotSerialized) { > > + Store(SFRQ, Local0) > > + Multiply(Local0, 500000, Local0) > > + Multiply(Local0, PRAT, Local0) > > + Divide(Local0, 6, , Local0) > > + Store(Local0, CLK) > > + } > > + } > > +} // end of device PCLK > > diff --git a/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl > > new file mode 100644 > > index 0000000..e4f04ce > > --- /dev/null > > +++ b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl > > @@ -0,0 +1,15 @@ > > +/** @file > > + Differentiated System Description Table Fields (DSDT) > > + > > + Copyright 2020 NXP > > + Copyright 2020 Puresoftware Ltd. > > + > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include "Platform.h" > > + > > +DefinitionBlock("DsdtTable.aml", "DSDT", 2, "NXP ", "LX2160 ", EFI_ACPI_ARM_OEM_REVISION) { > > + include ("Clk.asl") > > +} > > diff --git a/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf > > new file mode 100644 > > index 0000000..f2d8ea5 > > --- /dev/null > > +++ b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf > > @@ -0,0 +1,39 @@ > > +## @file > > +# Raw Table Generator > > +# > > +# Copyright 2020 NXP > > +# Copyright 2020 Puresoftware Ltd > > +# > > +# SPDX-License-Identifier: BSD-2-Clause-Patent > > +## > > + > > +[Defines] > > + INF_VERSION = 0x00010019 > > + BASE_NAME = PlatformAcpiDsdtLib > > + FILE_GUID = 0b1768cf-13fa-4ecf-b640-338a636d1abb > > + VERSION_STRING = 1.0 > > + MODULE_TYPE = DXE_DRIVER > > + LIBRARY_CLASS = NULL|DXE_DRIVER > > + CONSTRUCTOR = AcpiDsdtLibConstructor > > + DESTRUCTOR = AcpiDsdtLibDestructor > > + > > +[Sources] > > + PlatformAcpiDsdtLib/RawDsdtGenerator.c > > + Dsdt/Dsdt.asl > > + > > +[Packages] > > + MdePkg/MdePkg.dec > > + MdeModulePkg/MdeModulePkg.dec > > + EmbeddedPkg/EmbeddedPkg.dec > > + DynamicTablesPkg/DynamicTablesPkg.dec > > + Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec > > Please sort alphabetically. > Yes, I will correct this. > > + > > +[LibraryClasses] > > + BaseLib > > + > > +[Pcd] > > + > > +[Protocols] > > + > > +[Guids] > > + > > diff --git a/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib/RawDsdtGenerator.c b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib/RawDsdtGenerator.c > > new file mode 100644 > > index 0000000..75ea2b7 > > --- /dev/null > > +++ b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib/RawDsdtGenerator.c > > @@ -0,0 +1,146 @@ > > +/** @file > > + Raw DSDT Table Generator > > + > > + Copyright 2020 NXP > > + Copyright 2020 Puresoftware Ltd. > > + > > + SPDX-License-Identifier: BSD-2-Clause-Patent > > + > > +**/ > > + > > +#include > > +#include > > +#include > > + > > +// Module specific include files. > > +#include > > +#include > > +#include > > +#include > > +#include > > + > > +#include "PlatformAcpiLib.h" > > + > > +/** Construct the ACPI table using the ACPI table data provided. > > + > > + This function invokes the Configuration Manager protocol interface > > + to get the required hardware information for generating the ACPI > > + table. > > + > > + If this function allocates any resources then they must be freed > > + in the FreeXXXXTableResources function. > > + > > + @param [in] This Pointer to the table generator. > > + @param [in] AcpiTableInfo Pointer to the ACPI Table Info. > > + @param [in] CfgMgrProtocol Pointer to the Configuration Manager > > + Protocol Interface. > > + @param [out] Table Pointer to the constructed ACPI Table. > > + > > + @retval EFI_SUCCESS Table generated successfully. > > + @retval EFI_INVALID_PARAMETER A parameter is invalid. > > +**/ > > +STATIC > > +EFI_STATUS > > +EFIAPI > > +BuildRawDsdtTable ( > > + IN CONST ACPI_TABLE_GENERATOR * CONST This, > > + IN CONST CM_STD_OBJ_ACPI_TABLE_INFO * CONST AcpiTableInfo, > > + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST CfgMgrProtocol, > > + OUT EFI_ACPI_DESCRIPTION_HEADER ** CONST Table > > + ) > > +{ > > + ASSERT (This != NULL); > > + ASSERT (AcpiTableInfo != NULL); > > + ASSERT (CfgMgrProtocol != NULL); > > + ASSERT (Table != NULL); > > + ASSERT (AcpiTableInfo->TableGeneratorId == This->GeneratorID); > > + > > + if (AcpiTableInfo->AcpiTableData == NULL) { > > + // Add the dsdt aml code here, Currently NULL place holder. > > + *Table = (EFI_ACPI_DESCRIPTION_HEADER *)&dsdt_aml_code; > > + } > > + > > + return EFI_SUCCESS; > > +} > > + > > +/** This macro defines the Raw Generator revision. > > +*/ > > +#define DSDT_GENERATOR_REVISION CREATE_REVISION (1, 0) > > + > > +/** The interface for the Raw Table Generator. > > +*/ > > +STATIC > > +CONST > > +ACPI_TABLE_GENERATOR RawDsdtGenerator = { > > + // Generator ID > > + CREATE_OEM_ACPI_TABLE_GEN_ID (EPlatAcpiTableIdDsdt), > > + // Generator Description > > + L"ACPI.OEM.RAW.DSDT.GENERATOR", > > + // ACPI Table Signature - Unused > > + 0, > > + // ACPI Table Revision - Unused > > + 0, > > + // Minimum ACPI Table Revision - Unused > > + 0, > > + // Creator ID > > + TABLE_GENERATOR_CREATOR_ID_ARM, > > + // Creator Revision > > + DSDT_GENERATOR_REVISION, > > + // Build Table function > > + BuildRawDsdtTable, > > + // No additional resources are allocated by the generator. > > + // Hence the Free Resource function is not required. > > + NULL, > > + // Extended build function not needed > > + NULL, > > + // Extended build function not implemented by the generator. > > + // Hence extended free resource function is not required. > > + NULL > > +}; > > + > > +/** Register the Generator with the ACPI Table Factory. > > + > > + @param [in] ImageHandle The handle to the image. > > + @param [in] SystemTable Pointer to the System Table. > > + > > + @retval EFI_SUCCESS The Generator is registered. > > + @retval EFI_INVALID_PARAMETER A parameter is invalid. > > + @retval EFI_ALREADY_STARTED The Generator for the Table ID > > + is already registered. > > +**/ > > +EFI_STATUS > > +EFIAPI > > +AcpiDsdtLibConstructor ( > > + IN CONST EFI_HANDLE ImageHandle, > > + IN EFI_SYSTEM_TABLE * CONST SystemTable > > + ) > > +{ > > + EFI_STATUS Status; > > + Status = RegisterAcpiTableGenerator (&RawDsdtGenerator); > > + DEBUG ((DEBUG_INFO, "OEM: Register DSDT Generator. Status = %r\n", Status)); > > + ASSERT_EFI_ERROR (Status); > > + return Status; > > +} > > + > > +/** Deregister the Generator from the ACPI Table Factory. > > + > > + @param [in] ImageHandle The handle to the image. > > + @param [in] SystemTable Pointer to the System Table. > > + > > + @retval EFI_SUCCESS The Generator is deregistered. > > + @retval EFI_INVALID_PARAMETER A parameter is invalid. > > + @retval EFI_NOT_FOUND The Generator is not registered. > > +**/ > > +EFI_STATUS > > +EFIAPI > > +AcpiDsdtLibDestructor ( > > + IN CONST EFI_HANDLE ImageHandle, > > + IN EFI_SYSTEM_TABLE * CONST SystemTable > > + ) > > +{ > > + EFI_STATUS Status; > > + Status = DeregisterAcpiTableGenerator (&RawDsdtGenerator); > > + DEBUG ((DEBUG_INFO, "OEM: Deregister DSDT Generator. Status = %r\n", Status)); > > + ASSERT_EFI_ERROR (Status); > > + return Status; > > +} > > diff --git a/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiLib.h b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiLib.h > > new file mode 100644 > > index 0000000..1747245 > > --- /dev/null > > +++ b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiLib.h > > @@ -0,0 +1,24 @@ > > +/** @file > > + * Acpi lib headers > > + * > > + * Copyright 2020 NXP > > + * Copyright 2020 Puresoftware Ltd > > + * > > + * SPDX-License-Identifier: BSD-2-Clause-Patent > > + * > > +**/ > > + > > + > > +#ifndef _LX2160ARDB_PLATFORM_ACPI_LIB_H_ > > +#define _LX2160ARDB_PLATFORM_ACPI_LIB_H_ > > Please don't use leading _ in macros. > Yes, I will correct this. I intend to replace "_LX2160ARDB_PLATFORM_ACPI_LIB_H_" with "LX2160ARDB_PLATFORM_ACPI_LIB_H" throughout by patch. > > + > > +#include > > This header does not appear needed by this file. > Will correct it. > > + > > +/** C array containing the compiled AML template. > > + These symbols are defined in the auto generated C file > > + containing the AML bytecode array. > > +*/ > > +extern CHAR8 dsdt_aml_code[]; > > + > > +#endif > > + > > diff --git a/Platform/NXP/LX2160aRdbPkg/Include/Platform.h b/Platform/NXP/LX2160aRdbPkg/Include/Platform.h > > new file mode 100644 > > index 0000000..e2a6faa > > --- /dev/null > > +++ b/Platform/NXP/LX2160aRdbPkg/Include/Platform.h > > @@ -0,0 +1,244 @@ > > +/** @file > > + * Platform headers > > + * > > + * Copyright 2020 NXP > > + * Copyright 2020 Puresoftware Ltd > > + * > > + * SPDX-License-Identifier: BSD-2-Clause-Patent > > + * > > +**/ > > + > > + > > +#ifndef _LX2160ARDB_PLATFORM_H_ > > +#define _LX2160ARDB_PLATFORM_H_ > > Please don't use leading _ in macros. > > > + > > +#define EFI_ACPI_ARM_OEM_REVISION 0x00000000 > > + > > +// Soc defines > > +#define SVR_SOC_VER(svr) (((svr) >> 8) & 0xFFFFFE) > > +#define SVR_MAJOR(svr) (((svr) >> 4) & 0xf) > > +#define SVR_MINOR(svr) (((svr) >> 0) & 0xf) > > + > > +#define SVR_LX2160A 0x873600 > > + > > +// PCLK > > +#define DCFG_BASE 0x1E00000 > > +#define DCFG_LEN 0x1FFFF > > + > > +// Gic > > +#define GIC_VERSION 3 > > +#define GICD_BASE 0x6000000 > > +#define GICI_BASE 0x6020000 > > +#define GICR_BASE 0x06200000 > > +#define GICR_LEN 0x200000 > > +#define GICC_BASE 0x0c0c0000 > > +#define GICH_BASE 0x0c0d0000 > > +#define GICV_BASE 0x0c0e0000 > > + > > +// UART > > +#define UART0_BASE 0x21C0000 > > +#define UART1_BASE 0x21D0000 > > +#define UART2_BASE 0x21E0000 > > +#define UART3_BASE 0x21F0000 > > +#define UART0_IT 64 > > +#define UART1_IT 65 > > +#define UART2_IT 104 > > +#define UART3_IT 105 > > +#define UART_LEN 0x10000 > > +#define SPCR_FLOW_CONTROL_NONE 0 > > + > > +// Timer > > +#define TIMER_BLOCK_COUNT 1 > > +#define TIMER_FRAME_COUNT 4 > > +#define TIMER_WATCHDOG_COUNT 1 > > +#define TIMER_BASE_ADDRESS 0x23E0000 // a.k.a CNTControlBase > > +#define TIMER_READ_BASE_ADDRESS 0x23F0000 // a.k.a CNTReadBase > > +#define TIMER_GT_BLOCK_0_ADDRESS 0x2890000 // a.k.a CNTCTLBase (Secure) > > +#define TIMER_GT_BASE_0_ADDRESS 0x28A0000 // a.k.a CNTBase0 > > +#define TIMER_GT_BASE_1_ADDRESS 0x28B0000 // a.k.a CNTBase1 > > +#define TIMER_GT_BASE_2_ADDRESS 0x28C0000 // a.k.a CNTBase2 > > +#define TIMER_GT_BASE_3_ADDRESS 0x28D0000 // a.k.a CNTBase3 > > +#define TIMER_GT_BASE_0_EL0_ADDRESS 0x28E0000 // a.k.a CNTBase0EL0 > > +#define TIMER_GT_BASE_2_EL0_ADDRESS 0x28F0000 // a.k.a CNTBase2EL0 > > +#define TIMER_WDT0_REFRESH_BASE 0x2390000 > > +#define TIMER_WDT0_CONTROL_BASE 0x23A0000 > > +#define TIMER_SEC_IT 29 > > +#define TIMER_NON_SEC_IT 30 > > +#define TIMER_VIRT_IT 27 > > +#define TIMER_HYP_IT 26 > > +#define TIMER_FRAME0_IT 78 > > +#define TIMER_FRAME1_IT 79 > > +#define TIMER_FRAME2_IT 92 > > +#define TIMER_FRAME3_IT 93 > > +#define TIMER_WDT0_IT 91 > > + > > +#define DEFAULT_PLAT_FREQ 700000000 > > + > > +// Mcfg > > +#define LX2160A_PCI_SEG0_CONFIG_BASE 0x9000000000 > > +#define LX2160A_PCI_SEG0 0x2 > > +#define LX2160A_PCI_SEG_BUSNUM_MIN 0x0 > > +#define LX2160A_PCI_SEG_BUSNUM_MAX 0xff > > +#define LX2160A_PCI_SEG1_CONFIG_BASE 0xA000000000 > > +#define LX2160A_PCI_SEG1 0x4 > > + > > +// Platform specific info needed by Configuration Manager > > + > > +#define CFG_MGR_TABLE_ID SIGNATURE_64 ('L','X','2','1','6','0',' ',' ') > > + > > +#define PLAT_PCI_SEG0_CONFIG_BASE LX2160A_PCI_SEG0_CONFIG_BASE > > +#define PLAT_PCI_SEG0 LX2160A_PCI_SEG0 > > +#define PLAT_PCI_SEG_BUSNUM_MIN LX2160A_PCI_SEG_BUSNUM_MIN > > +#define PLAT_PCI_SEG_BUSNUM_MAX LX2160A_PCI_SEG_BUSNUM_MAX > > +#define PLAT_PCI_SEG1_CONFIG_BASE LX2160A_PCI_SEG1_CONFIG_BASE > > +#define PLAT_PCI_SEG1 LX2160A_PCI_SEG1 > > + > > +#define PLAT_GIC_VERSION GIC_VERSION > > +#define PLAT_GICD_BASE GICD_BASE > > +#define PLAT_GICI_BASE GICI_BASE > > +#define PLAT_GICR_BASE GICR_BASE > > +#define PLAT_GICR_LEN GICR_LEN > > +#define PLAT_GICC_BASE GICC_BASE > > +#define PLAT_GICH_BASE GICH_BASE > > +#define PLAT_GICV_BASE GICV_BASE > > + > > +#define PLAT_CPU_COUNT 16 > > +#define PLAT_GTBLOCK_COUNT 1 > > +#define PLAT_GTFRAME_COUNT 4 > > +#define PLAT_PCI_CONFG_COUNT 2 > > + > > +#define PLAT_WATCHDOG_COUNT 1 > > +#define PLAT_GIC_REDISTRIBUTOR_COUNT 1 > > +#define PLAT_GIC_ITS_COUNT 1 > > + > > +/* GIC CPU Interface information > > + GIC_ENTRY (CPUInterfaceNumber, Mpidr, PmuIrq, VGicIrq, EnergyEfficiency) > > + */ > > +#define PLAT_GIC_CPU_INTERFACE { \ > > + GICC_ENTRY (0, GET_MPID (0, 0), 23, 0x19, 0), \ > > + GICC_ENTRY (1, GET_MPID (0, 1), 23, 0x19, 0), \ > > + GICC_ENTRY (2, GET_MPID (1, 0), 23, 0x19, 0), \ > > + GICC_ENTRY (3, GET_MPID (1, 1), 23, 0x19, 0), \ > > + GICC_ENTRY (4, GET_MPID (2, 0), 23, 0x19, 0), \ > > + GICC_ENTRY (5, GET_MPID (2, 1), 23, 0x19, 0), \ > > + GICC_ENTRY (6, GET_MPID (3, 0), 23, 0x19, 0), \ > > + GICC_ENTRY (7, GET_MPID (3, 1), 23, 0x19, 0), \ > > + GICC_ENTRY (8, GET_MPID (4, 0), 23, 0x19, 0), \ > > + GICC_ENTRY (9, GET_MPID (4, 1), 23, 0x19, 0), \ > > + GICC_ENTRY (10, GET_MPID (5, 0), 23, 0x19, 0), \ > > + GICC_ENTRY (11, GET_MPID (5, 1), 23, 0x19, 0), \ > > + GICC_ENTRY (12, GET_MPID (6, 0), 23, 0x19, 0), \ > > + GICC_ENTRY (13, GET_MPID (6, 1), 23, 0x19, 0), \ > > + GICC_ENTRY (14, GET_MPID (7, 0), 23, 0x19, 0), \ > > + GICC_ENTRY (15, GET_MPID (7, 1), 23, 0x19, 0) \ > > +} > > + > > +// watchdogs > > +#define PLAT_WATCHDOG_INFO \ > > + { \ > > + TIMER_WDT0_CONTROL_BASE, \ > > + TIMER_WDT0_REFRESH_BASE, \ > > + TIMER_WDT0_IT, \ > > + SBSA_WATCHDOG_FLAGS \ > > + } \ > > + > > +#define PLAT_TIMER_BLOCK_INFO \ > > + { \ > > + { \ > > + TIMER_GT_BLOCK_0_ADDRESS, \ > > + PLAT_GTFRAME_COUNT, \ > > + (CM_OBJECT_TOKEN)((UINT8*)&FslPlatformRepositoryInfo + \ > > + OFFSET_OF (EDKII_PLATFORM_REPOSITORY_INFO, GTBlock0TimerInfo)) \ > > + } \ > > + } \ > > + > > +#define PLAT_TIMER_FRAME_INFO \ > > + { \ > > + { \ > > + 0, /* UINT8 GTFrameNumber */ \ > > + TIMER_GT_BASE_0_ADDRESS, /* UINT64 CntBaseX */ \ > > + TIMER_GT_BASE_0_EL0_ADDRESS, /* UINT64 CntEL0BaseX */ \ > > + TIMER_FRAME0_IT, /* UINT32 GTxPhysicalTimerGSIV */ \ > > + GTDT_FRAME_FLAGS, /* UINT32 GTxPhysicalTimerFlags */ \ > > + TIMER_FRAME0_IT, /* UINT32 GTxVirtualTimerGSIV */ \ > > + GTDT_FRAME_FLAGS, /* UINT32 GTxVirtualTimerFlags */ \ > > + 0 /* UINT32 GTxCommonFlags */ \ > > + }, /* Gtdt.Frames[0] */ \ > > + { \ > > + 1, /* UINT8 GTFrameNumber */ \ > > + TIMER_GT_BASE_1_ADDRESS, /* UINT64 CntBaseX */ \ > > + GT_BLOCK_FRAME_RES_BASE, /* UINT64 CntEL0BaseX */ \ > > + TIMER_FRAME1_IT, /* UINT32 GTxPhysicalTimerGSIV */ \ > > + GTDT_FRAME_FLAGS, /* UINT32 GTxPhysicalTimerFlags */ \ > > + 0, /* UINT32 GTxVirtualTimerGSIV */ \ > > + 0, /* UINT32 GTxVirtualTimerFlags */ \ > > + GTDT_FRAME_COMMON_FLAGS /* UINT32 GTxCommonFlags */ \ > > + }, /* Gtdt.Frames[1] */ \ > > + { \ > > + 2, /* UINT8 GTFrameNumber */ \ > > + TIMER_GT_BASE_2_ADDRESS, /* UINT64 CntBaseX */ \ > > + TIMER_GT_BASE_2_EL0_ADDRESS, /* UINT64 CntEL0BaseX */ \ > > + TIMER_FRAME2_IT, /* UINT32 GTxPhysicalTimerGSIV */ \ > > + GTDT_FRAME_FLAGS, /* UINT32 GTxPhysicalTimerFlags */ \ > > + 0, /* UINT32 GTxVirtualTimerGSIV */ \ > > + 0, /* UINT32 GTxVirtualTimerFlags */ \ > > + GTDT_FRAME_COMMON_FLAGS /* UINT32 GTxCommonFlags */ \ > > + },/* Gtdt.Frames[2] */ \ > > + { \ > > + 3, /* UINT8 GTFrameNumber */ \ > > + TIMER_GT_BASE_3_ADDRESS, /* UINT64 CntBaseX */ \ > > + GT_BLOCK_FRAME_RES_BASE, /* UINT64 CntEL0BaseX */ \ > > + TIMER_FRAME3_IT, /* UINT32 GTxPhysicalTimerGSIV */ \ > > + GTDT_FRAME_FLAGS, /* UINT32 GTxPhysicalTimerFlags */ \ > > + 0, /* UINT32 GTxVirtualTimerGSIV */ \ > > + 0, /* UINT32 GTxVirtualTimerFlags */ \ > > + GTDT_FRAME_COMMON_FLAGS /* UINT32 GTxCommonFlags */ \ > > + }, /* Gtdt.Frames[3] */ \ > > + } \ > > + > > +#define PLAT_GIC_DISTRIBUTOR_INFO \ > > + { \ > > + PLAT_GICD_BASE, /* UINT64 PhysicalBaseAddress */ \ > > + 0, /* UINT32 SystemVectorBase */ \ > > + PLAT_GIC_VERSION /* UINT8 GicVersion */ \ > > + } \ > > + > > +#define PLAT_GIC_REDISTRIBUTOR_INFO \ > > + { \ > > + PLAT_GICR_BASE, /* UINT64 DiscoveryRangeBaseAddress */ \ > > + PLAT_GICR_LEN /* UINT32 DiscoveryRangeLength */ \ > > + } \ > > + > > +#define PLAT_GIC_ITS_INFO \ > > + { \ > > + 0, /* UINT32 GIC ITS ID */ \ > > + PLAT_GICI_BASE, /* UINT64 The 64-bit physical address for ITS */ \ > > + 0 /* UINT32 Populate the GIC ITS affinity in SRAT. */ \ > > + } \ > > + > > +#define PLAT_MCFG_INFO \ > > + { \ > > + { \ > > + PLAT_PCI_SEG0_CONFIG_BASE, \ > > + PLAT_PCI_SEG0, \ > > + PLAT_PCI_SEG_BUSNUM_MIN, \ > > + PLAT_PCI_SEG_BUSNUM_MAX, \ > > + }, \ > > + { \ > > + PLAT_PCI_SEG1_CONFIG_BASE, \ > > + PLAT_PCI_SEG1, \ > > + PLAT_PCI_SEG_BUSNUM_MIN, \ > > + PLAT_PCI_SEG_BUSNUM_MAX, \ > > + } \ > > + } \ > > + > > +#define PLAT_SPCR_INFO \ > > + { \ > > + UART0_BASE, \ > > + UART0_IT, \ > > + 115200, \ > > + 0, \ > > + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_INTERFACE_TYPE_ARM_PL011_UART \ > > + } \ > > + > > +#endif > > diff --git a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec > > index 03996b0..3d5385c 100644 > > --- a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec > > +++ b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec > > @@ -2,6 +2,7 @@ > > # LX2160a board package. > > # > > # Copyright 2018, 2020 NXP > > +# Copyright 2020 Puresoftware Ltd > > # > > # SPDX-License-Identifier: BSD-2-Clause-Patent > > # > > @@ -20,4 +21,7 @@ > > # > > ################################################################################ > > [Includes.common] > > - Include # Root include for the package > > Don't delete this... > Will correct it. > > + . # Root include for the package > > No. Find another way, if this indeed has any effect at all. > > > + Include > > ...only to add it again. > > > + AcpiTablesInclude > > + Platform/NXP/ConfigurationManager/Include > > diff --git a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc > > index 7132b3e..a8d7787 100644 > > --- a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc > > +++ b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc > > @@ -3,6 +3,7 @@ > > # LX2160ARDB Board package. > > # > > # Copyright 2018-2020 NXP > > +# Copyright 2020 Puresoftware Ltd > > # > > # SPDX-License-Identifier: BSD-2-Clause-Patent > > # > > @@ -29,9 +30,18 @@ > > DEFINE NETWORK_HTTP_BOOT_ENABLE = FALSE > > DEFINE NETWORK_ISCSI_ENABLE = FALSE > > > > + # This flag controls the dynamic acpi generation > > + # > > + DEFINE DYNAMIC_ACPI_ENABLE = TRUE > > + > > !include Silicon/NXP/NxpQoriqLs.dsc.inc > > !include Silicon/NXP/LX2160A/LX2160A.dsc.inc > > > > +!if $(DYNAMIC_ACPI_ENABLE) == TRUE > > + !include DynamicTablesPkg/DynamicTables.dsc.inc > > + !include Platform/NXP/ConfigurationManager/ConfigurationManager.dsc.inc > > +!endif > > + > > [LibraryClasses.common] > > ArmPlatformLib|Platform/NXP/LX2160aRdbPkg/Library/ArmPlatformLib/ArmPlatformLib.inf > > RealTimeClockLib|EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.inf > > @@ -64,6 +74,26 @@ > > MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf > > > > # > > + # Dynamic Table Factory > > + !if $(DYNAMIC_ACPI_ENABLE) == TRUE > > + DynamicTablesPkg/Drivers/DynamicTableFactoryDxe/DynamicTableFactoryDxe.inf { > > + > > + NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/AcpiFadtLibArm.inf > > + NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiGtdtLibArm/AcpiGtdtLibArm.inf > > + NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/AcpiMadtLibArm.inf > > + NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiMcfgLibArm/AcpiMcfgLibArm.inf > > + NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/AcpiSpcrLibArm.inf > > + NULL|Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf > > + } > > + !endif > > + > > + # > > + # Acpi Support > > + # > > + MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf > > + MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf > > + > > + # > > # Networking stack > > # > > !include NetworkPkg/Network.dsc.inc > > diff --git a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf > > index 111c845..6622360 100644 > > --- a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf > > +++ b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf > > @@ -3,6 +3,7 @@ > > # FLASH layout file for LX2160a board. > > # > > # Copyright 2018-2020 NXP > > +# Copyright 2020 Puresoftware Ltd > > # > > # SPDX-License-Identifier: BSD-2-Clause-Patent > > # > > @@ -103,6 +104,17 @@ READ_LOCK_STATUS = TRUE > > INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf > > > > # > > + # Acpi Support > > + # > > + INF MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf > > + INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf > > + > > + !if $(DYNAMIC_ACPI_ENABLE) == TRUE > > + INF Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/ConfigurationManagerDxe.inf > > + !include DynamicTablesPkg/DynamicTables.fdf.inc > > + !endif > > + > > + # > > # Multiple Console IO support > > # > > INF MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf > > diff --git a/Platform/NXP/build.sh b/Platform/NXP/build.sh > > new file mode 100755 > > index 0000000..676c7fd > > --- /dev/null > > +++ b/Platform/NXP/build.sh > > @@ -0,0 +1,121 @@ > > +#!/bin/bash > > +# UEFI build script for NXP Layer Scape SoCs > > +# > > +# Copyright 2020 NXP > > +# Copyright 2020 Puresoftware Ltd > > +# > > +# 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. > > Please use SPDX tag instead. > > On the whole, I'm not a fan of custom build scripts, since they > inevitably (like this one) start making unreliable assumptions about > directory layout etc. > > There are build instructions in the top-level Readme.md. All that this > script does should be possible to describe as an addition in > Platform/NXP/Readme.md. > Yes, will update the Platform/NXP/Readme.md > / > Leif > > > +# > > + > > +# source environment file > > +source Env.cshrc > > + > > +# Global Defaults > > +ARCH=AARCH64 > > +TARGET_TOOLS=`echo $GCC_ARCH_PREFIX | cut -d _ -f 1` > > +BASE_DIR=../../.. > > + > > +[ -z "$TARGET_TOOLS" ] && { > > + echo "TARGET_TOOLS not found. Please run \"source Env.cshrc\" ." > > + exit 1 > > +} > > + > > +print_usage_banner() > > +{ > > + echo "" > > + echo "This shell script expects:" > > + echo " Arg 1 (mandatory): SoC Type (can be LS1043 / LS1046 / LS2088 / LX2160 / LS1028)." > > + echo " Arg 2 (mandatory): Board Type (can be RDB / QDS /FRWY)." > > + echo " Arg 3 (mandatory): Build candidate (can be RELEASE or DEBUG). By > > + default we build the RELEASE candidate." > > + echo " Arg 4 (optional): clean - To do a 'make clean' operation." > > +} > > + > > +# Check for total num of input arguments > > +if [[ "$#" -gt 4 ]]; then > > + echo "Illegal number of parameters" > > + print_usage_banner > > + exit > > +fi > > + > > +# Check for third parameter to be clean only > > +if [[ "$4" && $4 != "clean" ]]; then > > + echo "Error ! Either clean or emplty" > > + print_usage_banner > > + exit > > +fi > > + > > +# Check for input arguments > > +if [[ $1 == "" || $2 == "" || $3 == "" ]]; then > > + echo "Error !" > > + print_usage_banner > > + exit > > +fi > > + > > +# Check for input arguments > > +if [[ $1 != "LS1043" && $1 != "LS1046" && $1 != "LS2088" && $1 != "LX2160" && $1 != "LS1028" ]]; then > > + echo "Error ! Incorrect Soc Type specified." > > + print_usage_banner > > + exit > > +fi > > + > > +# Check for input arguments > > +if [[ $2 != "RDB" && $2 != "QDS" && $2 != "FRWY" ]]; then > > + echo "Error ! Incorrect Board Type specified." > > + print_usage_banner > > + exit > > +fi > > + > > +# Check for input arguments > > +if [[ $3 != "RELEASE" ]]; then > > + if [[ $3 != "DEBUG" ]]; then > > + echo "Error ! Incorrect build target specified." > > + print_usage_banner > > + exit > > + fi > > +fi > > + > > +# Set Package drirectory > > +if [[ $2 == "RDB" ]]; then > > + PKG="aRdbPkg" > > + if [[ $2 == "QDS" ]]; then > > + PKG="aQdsPkg" > > + fi > > +elif [[ $2 == "FRWY" ]]; then > > + PKG="aFrwyPkg" > > +fi > > + > > +echo ".........................................." > > +echo "Welcome to $1$PKG UEFI Build environment" > > +echo ".........................................." > > + > > +if [[ $4 == "clean" ]]; then > > + echo "Cleaning up the build directory '$BASE_DIR/Build/$1$PKG/'.." > > + rm -rf $BASE_DIR/Build/$1$PKG/* > > + exit > > +fi > > + > > +# Clean-up > > +set -e > > +shopt -s nocasematch > > + > > +# > > +# Setup workspace now > > +# > > +echo Initializing workspace > > +cd $BASE_DIR > > + > > +# Use the BaseTools in edk2 > > +export EDK_TOOLS_PATH=`pwd`/BaseTools > > +source edksetup.sh BaseTools > > + > > +export DYNAMIC_ACPI_PLATFORM=$1$PKG > > +export DYNAMIC_ACPI_INC="$1A" > > + > > +build -p "$PACKAGES_PATH/Platform/NXP/$1$PKG/$1$PKG.dsc" -a $ARCH -t $TARGET_TOOLS -b $3 > > -- > > 2.7.4 > >