From nobody Thu May 2 00:29:51 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+69523+1787277+3901457@groups.io; helo=mail02.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+69523+1787277+3901457@groups.io ARC-Seal: i=1; a=rsa-sha256; t=1609725456; cv=none; d=zohomail.com; s=zohoarc; b=geBs9tfJvGaQ+rqCLW1lYlj8zxGOYCnGDZfAH6HA6UeO2AozcwZOqvFX1AB5KMQD6tzWmjqxvuXohGWCWEnoAzGgh7CUyTaCpPZD6lsM7xdmAhfG/bm8X+VrKaGaONvXDayVZnWXOTNDTO8B/q2Om6YRYVaNZsCoHheX2E+/Xc4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1609725456; h=Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:Message-ID:Reply-To:References:Sender:Subject:To; bh=oMp1EZMrXd9K82FqoHnVGgfmt6krFxcx36oteOCat8s=; b=aQuIjCuOekTUG6fKjOHfo2PuKKK3zLhT3d4/TThHyPsUPtxbLnHMvrMGI9FyH4qypjUT1equ2oouCSLKZBZm7XLHV5r0BOh07jObcqaPW4N2D60k6SaFtOP5dc/aQvnSyg58V9NKjkEPeIt2LZIuL7oEHQXE7j67dG1lG94WxM8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+69523+1787277+3901457@groups.io Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 160972545695181.93004400701534; Sun, 3 Jan 2021 17:57:36 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id LSSAYY1788612xx13VgIyJ6F; Sun, 03 Jan 2021 17:57:36 -0800 X-Received: from mail-pl1-f194.google.com (mail-pl1-f194.google.com [209.85.214.194]) by mx.groups.io with SMTP id smtpd.web09.9317.1609226780874820569 for ; Mon, 28 Dec 2020 23:26:20 -0800 X-Received: by mail-pl1-f194.google.com with SMTP id y8so6810856plp.8 for ; Mon, 28 Dec 2020 23:26:20 -0800 (PST) X-Gm-Message-State: iYzMYw464VpxNZSX9S4JnDvEx1787277AA= X-Google-Smtp-Source: ABdhPJzfpIfD4uAwQrBMSXLKDRoJejoR5k8Q0qZY2d1PMT4ovqDMEzMVWec0Rq96tLkpwyDFfsFFXQ== X-Received: by 2002:a17:902:be02:b029:da:c6c9:c9db with SMTP id r2-20020a170902be02b02900dac6c9c9dbmr40875470pls.69.1609226779235; Mon, 28 Dec 2020 23:26:19 -0800 (PST) X-Received: from embedded-PC.puresoft.int ([125.63.92.170]) by smtp.gmail.com with ESMTPSA id l11sm41320243pgt.79.2020.12.28.23.26.12 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 28 Dec 2020 23:26:18 -0800 (PST) From: "Vikas Singh via groups.io" To: devel@edk2.groups.io Cc: sami.mujawar@arm.com, leif@nuviainc.com, meenakshi.aggarwal@nxp.com, paul.yang@arm.com, augustine.philips@arm.com, samer.el-haj-mahmoud@arm.com, v.sethi@nxp.com, arokia.samy@puresoftware.com, kuldip.dwivedi@puresoftware.com, ard.biesheuvel@arm.com, vikas.singh@nxp.com Subject: [edk2-devel] [PATCH v0] Platform/NXP: Add Dynamic Acpi for layerscape platforms Date: Tue, 29 Dec 2020 12:55:58 +0530 Message-Id: <1609226758-19867-2-git-send-email-vikas.singh@puresoftware.com> In-Reply-To: <1609226758-19867-1-git-send-email-vikas.singh@puresoftware.com> References: <1609226758-19867-1-git-send-email-vikas.singh@puresoftware.com> Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,vikas.singh@puresoftware.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1609725456; bh=NWn/1BZFR/8DXlXWBDVSTNUxjAtRcKzGKU55Vq/t/cs=; h=Cc:Date:From:Reply-To:Subject:To; b=lryr+SbkxZ1ul+VqRwKW8nvg5ElkkdMo3zs+Xq98KqDPjnHyXNGvqntX7nPCAcMeMf5 yDQr7wQk1GzllA/fKFEoTcXtq+cboHe0z6nP45gZxGnAVzTNMWCvp5XYN+ZDfkq/oLTjt oxHnZjU97TxbGUi4JofSejFii4oe/FmCd3s= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" These changes intend to add - Common Configuration Manager (CM) for all fsl platforms. - Platform headers consumed by CM for LX2160ARDB. - 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/ConfigurationManagerD= xe/ConfigurationManager.c create mode 100644 Platform/NXP/ConfigurationManager/ConfigurationManagerD= xe/ConfigurationManager.h create mode 100644 Platform/NXP/ConfigurationManager/ConfigurationManagerD= xe/ConfigurationManagerDxe.inf create mode 100644 Platform/NXP/ConfigurationManager/Include/PlatformAcpiT= ableGenerator.h create mode 100755 Platform/NXP/Env.cshrc create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.a= sl create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.= asl create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAc= piDsdtLib.inf create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAc= piDsdtLib/RawDsdtGenerator.c create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAc= piLib.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/P= latform/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 =3D ConfigurationManager + PACKAGE_GUID =3D 0222b1b1-247f-404e-bdc3-baab65f2ddd3 + +##########################################################################= ###### +# +# Include Section - list of Include Paths that are provided by this packag= e. +# 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_D= RIVER DXE_SAL_DRIVER UEFI_DRIVER UEFI_APPLICATION +# +##########################################################################= ###### +[Includes] + . + 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/ConfigurationM= anagerDxe.inf { + + *_*_*_PLATFORM_FLAGS =3D -I$(PACKAGES_PATH)/Platform/NXP/$(DYNAMIC_ACP= I_PLATFORM)/Include + } diff --git a/Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/Conf= igurationManager.c b/Platform/NXP/ConfigurationManager/ConfigurationManager= Dxe/ConfigurationManager.c new file mode 100644 index 0000000..6e8a4c4 --- /dev/null +++ b/Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/Configurati= onManager.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 =3D { + /// 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_ADDR= ESS_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 =3D This->PlatRepoInfo; + + Svr =3D SocGetSvr (); + if (SVR_SOC_VER(Svr) =3D=3D SVR_LX2160A) { + PlatformRepo->FslBoardRevision =3D SVR_MAJOR(Svr); + DEBUG ((DEBUG_INFO, "Fsl : SoC LX2160A Rev =3D 0x%x\n", PlatformRepo->= FslBoardRevision)); + } else { + DEBUG ((DEBUG_INFO, "Fsl : SoC Unknown Rev =3D 0x%x\n", PlatformRepo->= FslBoardRevision)); + } + + return EFI_SUCCESS; +} + +/** Return PCI Configuration Info. + @param [in] This Pointer to the Configuration Manager Pro= tocol. + @param [in] CmObjectId The Object ID of the CM object requested + @param [in] Token A unique token for identifying the reque= sted + CM_ARM_PCI_INFO object. + @param [in, out] CmObject Pointer to the Configuration Manager Obj= ect + descriptor describing the requested Obje= ct. + @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 =3D=3D NULL) || (CmObject =3D=3D NULL)) { + ASSERT (This !=3D NULL); + ASSERT (CmObject !=3D NULL); + return EFI_INVALID_PARAMETER; + } + + PlatformRepo =3D This->PlatRepoInfo; + + TotalObjCount =3D ARRAY_SIZE (PlatformRepo->PciConfigInfo); + + for (ObjIndex =3D 0; ObjIndex < TotalObjCount; ObjIndex++) { + if (Token =3D=3D (CM_OBJECT_TOKEN)&PlatformRepo->PciConfigInfo[ObjInde= x]) + { + CmObject->ObjectId =3D CmObjectId; + CmObject->Size =3D sizeof (PlatformRepo->PciConfigInfo[ObjIndex]); + CmObject->Data =3D (VOID*)&PlatformRepo->PciConfigInfo[ObjIndex]; + CmObject->Count =3D 1; + return EFI_SUCCESS; + } + } + + return EFI_NOT_FOUND; +} + +/** Return GIC CPU Interface Info. + @param [in] This Pointer to the Configuration Manager Pro= tocol. + @param [in] CmObjectId The Object ID of the CM object requested + @param [in] Token A unique token for identifying the reque= sted + CM_ARM_GICC_INFO object. + @param [in, out] CmObject Pointer to the Configuration Manager Obj= ect + descriptor describing the requested Obje= ct. + @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 =3D=3D NULL) || (CmObject =3D=3D NULL)) { + ASSERT (This !=3D NULL); + ASSERT (CmObject !=3D NULL); + return EFI_INVALID_PARAMETER; + } + + PlatformRepo =3D This->PlatRepoInfo; + + if (Token !=3D (CM_OBJECT_TOKEN)&PlatformRepo->GicCInfo) { + return EFI_NOT_FOUND; + } + + CmObject->ObjectId =3D CmObjectId; + CmObject->Size =3D sizeof (PlatformRepo->GicCInfo); + CmObject->Data =3D (VOID*)&PlatformRepo->GicCInfo; + CmObject->Count =3D sizeof (PlatformRepo->GicCInfo) / + sizeof (PlatformRepo->GicCInfo[0]); + return EFI_SUCCESS; +} + +/** Return a GT Block timer frame info list. + @param [in] This Pointer to the Configuration Manager Proto= col. + @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 fou= nd. + **/ +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 =3D=3D NULL) || (CmObject =3D=3D NULL)) { + ASSERT (This !=3D NULL); + ASSERT (CmObject !=3D NULL); + return EFI_INVALID_PARAMETER; + } + + PlatformRepo =3D This->PlatRepoInfo; + + if (Token !=3D (CM_OBJECT_TOKEN)&PlatformRepo->GTBlock0TimerInfo) { + return EFI_NOT_FOUND; + } + + CmObject->ObjectId =3D CmObjectId; + CmObject->Size =3D sizeof (PlatformRepo->GTBlock0TimerInfo); + CmObject->Data =3D (VOID*)&PlatformRepo->GTBlock0TimerInfo; + CmObject->Count =3D sizeof (PlatformRepo->GTBlock0TimerInfo) / + sizeof (PlatformRepo->GTBlock0TimerInfo[0]); + return EFI_SUCCESS; +} + +/** Return a standard namespace object. + + @param [in] This Pointer to the Configuration Manager Protoc= ol. + @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 fou= nd. +**/ +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 =3D EFI_SUCCESS; + if ((This =3D=3D NULL) || (CmObject =3D=3D NULL)) { + ASSERT (This !=3D NULL); + ASSERT (CmObject !=3D NULL); + return EFI_INVALID_PARAMETER; + } + PlatformRepo =3D This->PlatRepoInfo; + + switch (GET_CM_OBJECT_ID (CmObjectId)) { + HANDLE_CM_OBJECT ( + EStdObjCfgMgrInfo, + CmObjectId, + PlatformRepo->CmInfo, + 1 + ); + + case EStdObjAcpiTableList: + CmObject->ObjectId =3D CmObjectId; + TableCount =3D sizeof (PlatformRepo->CmAcpiTableList) / + sizeof (PlatformRepo->CmAcpiTableList[0]); + CmObject->Data =3D (VOID*)&PlatformRepo->CmAcpiTableList; + CmObject->Size =3D sizeof (PlatformRepo->CmAcpiTableList); + CmObject->Count =3D TableCount; + DEBUG (( + DEBUG_INFO, + "EStdObjAcpiTableList: Ptr =3D 0x%p. Size =3D %d, Count =3D %d\n", + CmObject->Data, + CmObject->Size, + CmObject->Count + )); + break; + + default: { + Status =3D EFI_NOT_FOUND; + DEBUG (( + DEBUG_ERROR, + "ERROR: Object 0x%x. Status =3D %r\n", + CmObjectId, + Status + )); + break; + } + } + + return Status; +} + +/** Return an ARM namespace object. + + @param [in] This Pointer to the Configuration Manager Protoc= ol. + @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 fou= nd. +**/ +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 =3D EFI_SUCCESS; + if ((This =3D=3D NULL) || (CmObject =3D=3D NULL)) { + ASSERT (This !=3D NULL); + ASSERT (CmObject !=3D NULL); + return EFI_INVALID_PARAMETER; + } + PlatformRepo =3D 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])) + ); + HANDLE_CM_OBJECT_REF_BY_TOKEN ( + EArmObjGTBlockTimerFrameInfo, + CmObjectId, + PlatformRepo->GTBlock0TimerInfo, + (sizeof (PlatformRepo->GTBlock0TimerInfo) / + sizeof (PlatformRepo->GTBlock0TimerInfo[0])), + 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])), + Token, + GetPciConfigInfo + ); + HANDLE_CM_OBJECT ( + EArmObjSerialConsolePortInfo, + CmObjectId, + PlatformRepo->SpcrSerialPort, + 1 + ); + default: { + Status =3D EFI_NOT_FOUND; + DEBUG (( + DEBUG_INFO, + "INFO: Object 0x%x. Status =3D %r\n", + CmObjectId, + Status + )); + break; + } + }//switch + + return Status; +} + +/** Return an OEM namespace object. + + @param [in] This Pointer to the Configuration Manager Protoc= ol. + @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 fou= nd. +**/ +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 =3D EFI_SUCCESS; + if ((This =3D=3D NULL) || (CmObject =3D=3D NULL)) { + ASSERT (This !=3D NULL); + ASSERT (CmObject !=3D NULL); + return EFI_INVALID_PARAMETER; + } + + switch (GET_CM_OBJECT_ID (CmObjectId)) { + default: { + Status =3D EFI_NOT_FOUND; + DEBUG (( + DEBUG_ERROR, + "ERROR: Object 0x%x. Status =3D %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 Protoc= ol. + @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 fou= nd. +**/ +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 =3D=3D NULL) || (CmObject =3D=3D NULL)) { + ASSERT (This !=3D NULL); + ASSERT (CmObject !=3D NULL); + return EFI_INVALID_PARAMETER; + } + + switch (GET_CM_NAMESPACE_ID (CmObjectId)) { + case EObjNameSpaceStandard: + Status =3D GetStandardNameSpaceObject (This, CmObjectId, Token, CmOb= ject); + break; + case EObjNameSpaceArm: + Status =3D GetArmNameSpaceObject (This, CmObjectId, Token, CmObject); + break; + case EObjNameSpaceOem: + Status =3D GetOemNameSpaceObject (This, CmObjectId, Token, CmObject); + break; + default: { + Status =3D EFI_INVALID_PARAMETER; + DEBUG (( + DEBUG_ERROR, + "ERROR: Unknown Namespace Object =3D 0x%x. Status =3D %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 Protoc= ol. + @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 =3D { + 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 =3D 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 =3D %r\n", + Status + )); + goto error_handler; + } + + Status =3D InitializePlatformRepository ( + &FslConfigManagerProtocol + ); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "ERROR: Failed to initialize the Platform Configuration Repository."= \ + " Status =3D %r\n", + Status + )); + } + +error_handler: + return Status; +} diff --git a/Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/Conf= igurationManager.h b/Platform/NXP/ConfigurationManager/ConfigurationManager= Dxe/ConfigurationManager.h new file mode 100644 index 0000000..cf09ef9 --- /dev/null +++ b/Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/Configurati= onManager.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 =3D CmObjectId; \ + CmObject->Size =3D sizeof (Object); \ + CmObject->Data =3D (VOID*)&Object; \ + CmObject->Count =3D ObjectCount; \ + DEBUG (( \ + DEBUG_INFO, \ + #CmObjectId ": Ptr =3D 0x%p, Size =3D %d, Count =3D %d\n", = \ + CmObject->Data, \ + CmObject->Size, \ + CmObject->Count \ + )); \ + break; \ + } + +/** A helper macro for returning configuration manager objects + referenced by token +*/ +#define HANDLE_CM_OBJECT_REF_BY_TOKEN( = \ + ObjId, = \ + CmObjectId, = \ + Object, = \ + ObjectCount, = \ + Token, = \ + HandlerProc = \ + ) = \ + case ObjId: { = \ + CmObject->ObjectId =3D CmObjectId; = \ + if (Token =3D=3D CM_NULL_TOKEN) { = \ + CmObject->Size =3D sizeof (Object); = \ + CmObject->Data =3D (VOID*)&Object; = \ + CmObject->Count =3D ObjectCount; = \ + DEBUG (( = \ + DEBUG_INFO, = \ + #CmObjectId ": Ptr =3D 0x%p, Size =3D %d, Count =3D %d\n", = \ + CmObject->Data, = \ + CmObject->Size, = \ + CmObject->Count = \ + )); = \ + } else { = \ + Status =3D HandlerProc (This, CmObjectId, Token, CmObject); = \ + DEBUG (( = \ + DEBUG_INFO, = \ + #CmObjectId ": Token =3D 0x%p, Ptr =3D 0x%p, Size =3D %d, Count = =3D %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( = \ + ObjId, = \ + CmObjectId, = \ + Token, = \ + HandlerProc = \ + ) = \ + case ObjId: { = \ + CmObject->ObjectId =3D CmObjectId; = \ + if (Token =3D=3D CM_NULL_TOKEN) { = \ + Status =3D EFI_INVALID_PARAMETER; = \ + DEBUG (( = \ + DEBUG_ERROR, = \ + #ObjId ": CM_NULL_TOKEN value is not allowed when searching" = \ + " the entire platform repository.\n" = \ + )); = \ + } else { = \ + Status =3D HandlerProc (This, CmObjectId, Token, CmObject); = \ + DEBUG (( = \ + DEBUG_INFO, = \ + #ObjId ": Token =3D 0x%p, Ptr =3D 0x%p, Size =3D %d, Count =3D %d\= n", \ + (VOID*)Token, = \ + CmObject->Data, = \ + CmObject->Size, = \ + CmObject->Count = \ + )); = \ + } = \ + break; = \ + } + +/** The number of ACPI tables to install +*/ +#define PLAT_ACPI_TABLE_COUNT 6 + +/** 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_TABL= E_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_C= OUNT]; + + /// Serial port information for serial port console redirection port + CM_ARM_SERIAL_PORT_INFO SpcrSerialPort; + + /// Fsl Board Revision + UINT32 FslBoardRevision; +} EDKII_PLATFORM_REPOSITORY_INFO; + +/* + * 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_IN= TERRUPT_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_SEC= URE_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_SEC= URE_TIMER + +#define GT_BLOCK_FRAME_RES_BASE MAX_UINT64 + +#endif // CONFIGURATION_MANAGER_H__ diff --git a/Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/Conf= igurationManagerDxe.inf b/Platform/NXP/ConfigurationManager/ConfigurationMa= nagerDxe/ConfigurationManagerDxe.inf new file mode 100644 index 0000000..03fe104 --- /dev/null +++ b/Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/Configurati= onManagerDxe.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 =3D 0x0001001B + BASE_NAME =3D ConfigurationManagerDxe + FILE_GUID =3D A97F70AC-3BB4-4596-B4D2-9F948EC12D17 + MODULE_TYPE =3D DXE_DRIVER + VERSION_STRING =3D 1.0 + ENTRY_POINT =3D ConfigurationManagerDxeInitialize + +# +# The following information is for reference only and not required by the = build tools. +# +# VALID_ARCHITECTURES =3D 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/PlatformAcpiTableGen= erator.h b/Platform/NXP/ConfigurationManager/Include/PlatformAcpiTableGener= ator.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 =3D 0x0000, ///< Reserved + EPlatAcpiTableIdDsdt, + EPlatAcpiTableIdMax +} EPLAT_ACPI_TABLE_ID; + +#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 @@ -0,0 +1,73 @@ +# @file. +# +# Copyright 2020 NXP +# Copyright 2020 Puresoftware Ltd +# +# This program and the accompanying materials are licensed and made avail= able under +# the terms and conditions of the BSD License which accompanies this dist= ribution. +# 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 IM= PLIED. +# + +unset GCC_UTILITY GCC_VERSION MajorVersion MinorVersion + +if [ X"$CROSS_COMPILE_64" !=3D X"" ]; then + ARM64_PREFIX=3D"$CROSS_COMPILE_64" +elif [ X"$CROSS_COMPILE" !=3D X"" ]; then + ARM64_PREFIX=3D"$CROSS_COMPILE" +else + ARM64_PREFIX=3D"aarch64-linux-gnu-" +fi + +GCC_UTILITY=3D"${ARM64_PREFIX}gcc" +CheckGcc=3D`which $GCC_UTILITY >/dev/null 2>&1` +if [ "$?" -eq 0 ];then + GCC_VERSION=3D`$GCC_UTILITY -v 2>&1 | tail -n 1 | awk '{print $3}'` + MajorVersion=3D`echo $GCC_VERSION | cut -d . -f 1` + MinorVersion=3D`echo $GCC_VERSION | cut -d . -f 2` + GCC_ARCH_PREFIX=3D + + case $MajorVersion in + 4) + case $MinorVersion in + 9) + GCC_ARCH_PREFIX=3D"GCC49_AARCH64_PREFIX" + ;; + *) + NOTSUPPORTED=3D1 + ;; + esac + ;; + 5) + case $MinorVersion in + 4) + GCC_ARCH_PREFIX=3D"GCC5_AARCH64_PREFIX" + ;; + *) + GCC_ARCH_PREFIX=3D"GCC5_AARCH64_PREFIX" + echo "Warning: ${GCC_UTILITY} version ($MajorVersion.$MinorVersion= ) has not been tested, please use at own risk." + ;; + esac + ;; + *) + GCC_ARCH_PREFIX=3D"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=3D"$GCC_ARCH_PREFIX" + export "$GCC_ARCH_PREFIX=3D$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=3D`dirname \`dirname "$PWD"\`` diff --git a/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl b/Pl= atform/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 =3D=3D "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/P= latform/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/PlatformAcpiDsdtL= ib.inf b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.i= nf 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 =3D 0x00010019 + BASE_NAME =3D PlatformAcpiDsdtLib + FILE_GUID =3D 0b1768cf-13fa-4ecf-b640-338a636d1abb + VERSION_STRING =3D 1.0 + MODULE_TYPE =3D DXE_DRIVER + LIBRARY_CLASS =3D NULL|DXE_DRIVER + CONSTRUCTOR =3D AcpiDsdtLibConstructor + DESTRUCTOR =3D 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 + +[LibraryClasses] + BaseLib + +[Pcd] + +[Protocols] + +[Guids] + diff --git a/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtL= ib/RawDsdtGenerator.c b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Platfo= rmAcpiDsdtLib/RawDsdtGenerator.c new file mode 100644 index 0000000..75ea2b7 --- /dev/null +++ b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib/RawD= sdtGenerator.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 !=3D NULL); + ASSERT (AcpiTableInfo !=3D NULL); + ASSERT (CfgMgrProtocol !=3D NULL); + ASSERT (Table !=3D NULL); + ASSERT (AcpiTableInfo->TableGeneratorId =3D=3D This->GeneratorID); + + if (AcpiTableInfo->AcpiTableData =3D=3D NULL) { + // Add the dsdt aml code here, Currently NULL place holder. + *Table =3D (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 =3D { + // 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 =3D RegisterAcpiTableGenerator (&RawDsdtGenerator); + DEBUG ((DEBUG_INFO, "OEM: Register DSDT Generator. Status =3D %r\n", Sta= tus)); + 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 =3D DeregisterAcpiTableGenerator (&RawDsdtGenerator); + DEBUG ((DEBUG_INFO, "OEM: Deregister DSDT Generator. Status =3D %r\n", S= tatus)); + 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_ + +#include + +/** 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/L= X2160aRdbPkg/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_ + +#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_PL01= 1_UART \ + } = \ + +#endif diff --git a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec b/Platform/NXP/LX= 2160aRdbPkg/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 + . # Root include for the package + Include + AcpiTablesInclude + Platform/NXP/ConfigurationManager/Include diff --git a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc b/Platform/NXP/LX= 2160aRdbPkg/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 =3D FALSE DEFINE NETWORK_ISCSI_ENABLE =3D FALSE =20 + # This flag controls the dynamic acpi generation + # + DEFINE DYNAMIC_ACPI_ENABLE =3D TRUE + !include Silicon/NXP/NxpQoriqLs.dsc.inc !include Silicon/NXP/LX2160A/LX2160A.dsc.inc =20 +!if $(DYNAMIC_ACPI_ENABLE) =3D=3D TRUE + !include DynamicTablesPkg/DynamicTables.dsc.inc + !include Platform/NXP/ConfigurationManager/ConfigurationManager.dsc.inc +!endif + [LibraryClasses.common] ArmPlatformLib|Platform/NXP/LX2160aRdbPkg/Library/ArmPlatformLib/ArmPlat= formLib.inf RealTimeClockLib|EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualReal= TimeClockLib.inf @@ -64,6 +74,26 @@ MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf =20 # + # Dynamic Table Factory + !if $(DYNAMIC_ACPI_ENABLE) =3D=3D TRUE + DynamicTablesPkg/Drivers/DynamicTableFactoryDxe/DynamicTableFactoryDxe= .inf { + + NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/AcpiFadtLibA= rm.inf + NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiGtdtLibArm/AcpiGtdtLibA= rm.inf + NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/AcpiMadtLibA= rm.inf + NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiMcfgLibArm/AcpiMcfgLibA= rm.inf + NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/AcpiSpcrLibA= rm.inf + NULL|Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdt= Lib.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/LX= 2160aRdbPkg/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 =3D TRUE INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf =20 # + # Acpi Support + # + INF MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf + INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf + + !if $(DYNAMIC_ACPI_ENABLE) =3D=3D TRUE + INF Platform/NXP/ConfigurationManager/ConfigurationManagerDxe/Configur= ationManagerDxe.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 BS= D License +# which accompanies this distribution. The full text of the license may b= e 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 IMP= LIED. +# + +# source environment file +source Env.cshrc + +# Global Defaults +ARCH=3DAARCH64 +TARGET_TOOLS=3D`echo $GCC_ARCH_PREFIX | cut -d _ -f 1` +BASE_DIR=3D../../.. + +[ -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 !=3D "clean" ]]; then + echo "Error ! Either clean or emplty" + print_usage_banner + exit +fi + +# Check for input arguments +if [[ $1 =3D=3D "" || $2 =3D=3D "" || $3 =3D=3D "" ]]; then + echo "Error !" + print_usage_banner + exit +fi + +# Check for input arguments +if [[ $1 !=3D "LS1043" && $1 !=3D "LS1046" && $1 !=3D "LS2088" && $1 !=3D = "LX2160" && $1 !=3D "LS1028" ]]; then + echo "Error ! Incorrect Soc Type specified." + print_usage_banner + exit +fi + +# Check for input arguments +if [[ $2 !=3D "RDB" && $2 !=3D "QDS" && $2 !=3D "FRWY" ]]; then + echo "Error ! Incorrect Board Type specified." + print_usage_banner + exit +fi + +# Check for input arguments +if [[ $3 !=3D "RELEASE" ]]; then + if [[ $3 !=3D "DEBUG" ]]; then + echo "Error ! Incorrect build target specified." + print_usage_banner + exit + fi +fi + +# Set Package drirectory +if [[ $2 =3D=3D "RDB" ]]; then + PKG=3D"aRdbPkg" + if [[ $2 =3D=3D "QDS" ]]; then + PKG=3D"aQdsPkg" + fi +elif [[ $2 =3D=3D "FRWY" ]]; then + PKG=3D"aFrwyPkg" +fi + +echo ".........................................." +echo "Welcome to $1$PKG UEFI Build environment" +echo ".........................................." + +if [[ $4 =3D=3D "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=3D`pwd`/BaseTools +source edksetup.sh BaseTools + +export DYNAMIC_ACPI_PLATFORM=3D$1$PKG +export DYNAMIC_ACPI_INC=3D"$1A" + +build -p "$PACKAGES_PATH/Platform/NXP/$1$PKG/$1$PKG.dsc" -a $ARCH -t $TARG= ET_TOOLS -b $3 --=20 2.7.4 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#69523): https://edk2.groups.io/g/devel/message/69523 Mute This Topic: https://groups.io/mt/79415929/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-