From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) by mx.groups.io with SMTP id smtpd.web10.1051.1623706671749984801 for ; Mon, 14 Jun 2021 14:37:52 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@nuviainc-com.20150623.gappssmtp.com header.s=20150623 header.b=W4Sf/NAS; spf=pass (domain: nuviainc.com, ip: 209.85.128.46, mailfrom: leif@nuviainc.com) Received: by mail-wm1-f46.google.com with SMTP id h11-20020a05600c350bb02901b59c28e8b4so346137wmq.1 for ; Mon, 14 Jun 2021 14:37:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nuviainc-com.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=fvx9UjqiWAGUjNj70kHb39ex2wXR0mQ90V7em+WQbTg=; b=W4Sf/NAS8JqfUem0wGZdJTqSpcqwj97iX7cXJFndHZXuSX5GNtvXXrijwG2zUd/YSH 1qqt8Jzgv05MDy61GXZ7ikMI8bVLy21BxnOeOVYLzFlH4GE+sOpYjWg0dy7u3yTPYctq fjHWAiKIymzWCCuV40tKJIy+BSZlgNzGoOwkRUW/oj9QTGeO2PkR9pOJqe48fOwN0ToO 2MR3K2/vKk2Lly9JA6ftr4lpIiYvARFIU66iFLsB3tTbz02rNx1UqQL8UDcDAeQB5+tH c0X5ioLyuE9FyjrIAo8MBOHLJZhK0yIoT5haYQHnr5UmgK3OWIXzOS3xB+Y8qoKZoE0T mvgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=fvx9UjqiWAGUjNj70kHb39ex2wXR0mQ90V7em+WQbTg=; b=NEDCQukqHGkwdIQnTTdsxI4ivc58/tDSQoAAUylGpQ5cd3C7REHpZRH5Neb/b6Ntn3 cmfcwvV0py76Ilf7uwJ7J+Y6MgnA4Nf/8/DZhun3npPbMug1m5j/toTmudWcDRdAedfZ aL3P5lOm2IcLe8A6O2/fM0QygGP489n7amL8MbOC92rl6baMbUaWeDhsRhmLY+D/0ZW/ GsoaqG013Z0bz4mj6fsQlf+o/6GqI9xg3bQcyZPOd57i+6hHceAETm0w4mLgCdo6X/0R Jm93VtG3GDrXBQq8ZfC6kVNEnZkYNzUBcxpretrUukW3ytCJ96B3MXNdK7es6IghtjnC ZEhw== X-Gm-Message-State: AOAM5311W7EnVTUQtCp02tveWrIfQXbaxm2huhfLSg/PrkUuofTuXahM +QMzfb+nPIC864CoB8hENimYlQ== X-Google-Smtp-Source: ABdhPJwvxVDCpdOmrVdERb/bgsJil+lNYAgeozg2BcoUfAHkijOp0fUgZJV5AL8WtDHcen+GtASrlA== X-Received: by 2002:a05:600c:c9:: with SMTP id u9mr18258575wmm.156.1623706670097; Mon, 14 Jun 2021 14:37:50 -0700 (PDT) Return-Path: Received: from leviathan (cpc1-cmbg19-2-0-cust915.5-4.cable.virginm.net. [82.27.183.148]) by smtp.gmail.com with ESMTPSA id o20sm513630wms.3.2021.06.14.14.37.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Jun 2021 14:37:49 -0700 (PDT) Date: Mon, 14 Jun 2021 22:37:47 +0100 From: "Leif Lindholm" To: Vikas Singh Cc: devel@edk2.groups.io, sami.mujawar@arm.com, meenakshi.aggarwal@nxp.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, Sunny.Wang@arm.com Subject: Re: [PATCH V1 4/4] Platform/NXP/LS1046aFrwyPkg: Add OEM specific DSDT generator Message-ID: <20210614213747.dw7c6yt2yrukctiw@leviathan> References: <20210611155200.15535-1-vikas.singh@puresoftware.com> <20210611155200.15535-5-vikas.singh@puresoftware.com> MIME-Version: 1.0 In-Reply-To: <20210611155200.15535-5-vikas.singh@puresoftware.com> Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Fri, Jun 11, 2021 at 21:22:00 +0530, Vikas Singh wrote: > This patch adds platform specific DSDT generator > and Clk dsdt properties for LS1046AFRWY platform. > > Signed-off-by: Vikas Singh > --- > Platform/NXP/LS1046aFrwyPkg/AcpiTablesInclude/Dsdt/Clk.asl | 60 +++++++++ > Platform/NXP/LS1046aFrwyPkg/AcpiTablesInclude/Dsdt/Dsdt.asl | 15 +++ > Platform/NXP/LS1046aFrwyPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf | 39 ++++++ > Platform/NXP/LS1046aFrwyPkg/AcpiTablesInclude/PlatformAcpiDsdtLib/RawDsdtGenerator.c | 138 ++++++++++++++++++++ > Platform/NXP/LS1046aFrwyPkg/AcpiTablesInclude/PlatformAcpiLib.h | 23 ++++ > Platform/NXP/LS1046aFrwyPkg/Include/Platform.h | 6 +- > Platform/NXP/LS1046aFrwyPkg/LS1046aFrwyPkg.dsc | 1 + > 7 files changed, 281 insertions(+), 1 deletion(-) > > diff --git a/Platform/NXP/LS1046aFrwyPkg/AcpiTablesInclude/Dsdt/Clk.asl b/Platform/NXP/LS1046aFrwyPkg/AcpiTablesInclude/Dsdt/Clk.asl > new file mode 100644 > index 0000000000..58541c3019 > --- /dev/null > +++ b/Platform/NXP/LS1046aFrwyPkg/AcpiTablesInclude/Dsdt/Clk.asl > @@ -0,0 +1,60 @@ > +/** @file > +* DSDT : Dynamic Clock ACPI Information > +* > +* Copyright 2021 NXP > +* Copyright 2021 Puresoftware Ltd. > +* > +* SPDX-License-Identifier: BSD-2-Clause-Patent > +* > +**/ > + > +Scope(_SB) > +{ > + Device(PCLK) { > + Name(_HID, "NXP0017") > + Name(CLK, 0) // Maximum Platform Clock (Hz) > + Name(CCLK, 0) // Maximum CPU Core Clock (MHz) > + Name(AVBL, 0) > + OperationRegion(RCWS, SystemMemory, DCFG_BASE, DCFG_LEN) > + Method(_REG,2) { > + if (Arg0 == "RCWS") { > + Store(Arg1, AVBL) > + } > + } > + Field (RCWS, ByteAcc, NoLock, Preserve) { > + /* The below table provides the func of diff bits in 512 bits RCW data: > + SYS_PLL_CFG : 0-1 bits > + SYS_PLL_RAT : 2-6 bits > + SYSCLK_FREQ : 472-481 bits etc. > + Refer LS1046ARM for more info. > + For LS1046 RCWSRs are read as RCW[0:31] . > + */ > + offset(0x100), > + RESV, 1, > + PRAT, 5, > + PCFG, 2, > + offset(0x103), > + CPRT, 6, // Cluster Group PLL Multiplier ratio > + offset(0x13B), > + HFRQ, 8, // Higher 8 bits of SYSCLK_FREQ > + RESX, 6, > + LFRQ, 2 // Lower bits of SYSCLK_FREQ > + } > + > + Method(_INI, 0, NotSerialized) { > + /* Calculating Platform Clock */ > + Local0 = (HFRQ<<2 | LFRQ) // Concatinating LFRQ at end of HFRQ > + Multiply(Local0, 500000, Local0) > + Multiply(Local0, PRAT, Local0) > + Divide(Local0, 3, , Local0) > + Store(Local0, CLK) > + > + /* Calculating Maximum Core Clock */ > + Local0 = (HFRQ<<2 | LFRQ) // Concatinating LFRQ at end of HFRQ > + Multiply(Local0, 500000, Local0) > + Divide(Local0, 3, , Local0) > + Divide(Local0, 1000000, , Local0) //Just the MHz part of SYSCLK. > + Multiply(Local0, CPRT, CCLK) // PLL_Ratio * SYSCLK, Max freq of cluster > + } > + } // end of device PCLK > +} > diff --git a/Platform/NXP/LS1046aFrwyPkg/AcpiTablesInclude/Dsdt/Dsdt.asl b/Platform/NXP/LS1046aFrwyPkg/AcpiTablesInclude/Dsdt/Dsdt.asl > new file mode 100644 > index 0000000000..19f3f1c0e8 > --- /dev/null > +++ b/Platform/NXP/LS1046aFrwyPkg/AcpiTablesInclude/Dsdt/Dsdt.asl > @@ -0,0 +1,15 @@ > +/** @file > + Differentiated System Description Table Fields (DSDT) > + > + Copyright 2021 NXP > + Copyright 2021 Puresoftware Ltd. > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#include "Platform.h" > + > +DefinitionBlock("DsdtTable.aml", "DSDT", 2, "NXP ", "LS1046 ", EFI_ACPI_ARM_OEM_REVISION) { > + include ("Clk.asl") > +} > diff --git a/Platform/NXP/LS1046aFrwyPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf b/Platform/NXP/LS1046aFrwyPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf > new file mode 100644 > index 0000000000..ed5f9dd442 > --- /dev/null > +++ b/Platform/NXP/LS1046aFrwyPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf > @@ -0,0 +1,39 @@ > +## @file > +# Raw Table Generator > +# > +# Copyright 2021 NXP > +# Copyright 2021 Puresoftware Ltd > +# > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +## > + > +[Defines] > + INF_VERSION = 0x00010019 > + BASE_NAME = PlatformAcpiDsdtLib > + FILE_GUID = A97F70AC-3BB4-4596-B4D2-9F948EC12D17 > + 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] > + DynamicTablesPkg/DynamicTablesPkg.dec > + EmbeddedPkg/EmbeddedPkg.dec > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + Platform/NXP/LS1046aFrwyPkg/LS1046aFrwyPkg.dec > + Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerPkg.dec > + > +[LibraryClasses] > + BaseLib > + > +[Pcd] > + > +[Protocols] > + > +[Guids] > diff --git a/Platform/NXP/LS1046aFrwyPkg/AcpiTablesInclude/PlatformAcpiDsdtLib/RawDsdtGenerator.c b/Platform/NXP/LS1046aFrwyPkg/AcpiTablesInclude/PlatformAcpiDsdtLib/RawDsdtGenerator.c > new file mode 100644 > index 0000000000..7d886396ca > --- /dev/null > +++ b/Platform/NXP/LS1046aFrwyPkg/AcpiTablesInclude/PlatformAcpiDsdtLib/RawDsdtGenerator.c > @@ -0,0 +1,138 @@ > +/** @file > + Raw DSDT Table Generator > + > + Copyright 2021 NXP > + Copyright 2021 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. > + *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 (PlatAcpiTableIdDsdt), > + // 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/LS1046aFrwyPkg/AcpiTablesInclude/PlatformAcpiLib.h b/Platform/NXP/LS1046aFrwyPkg/AcpiTablesInclude/PlatformAcpiLib.h > new file mode 100644 > index 0000000000..e5f907a7d4 > --- /dev/null > +++ b/Platform/NXP/LS1046aFrwyPkg/AcpiTablesInclude/PlatformAcpiLib.h > @@ -0,0 +1,23 @@ > +/** @file > + * Acpi lib headers > + * > + * Copyright 2021 NXP > + * Copyright 2021 Puresoftware Ltd > + * > + * SPDX-License-Identifier: BSD-2-Clause-Patent > + * > +**/ > + > + > +#ifndef LS1046AFRWY_PLATFORM_ACPI_LIB_H > +#define LS1046AFRWY_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/LS1046aFrwyPkg/Include/Platform.h b/Platform/NXP/LS1046aFrwyPkg/Include/Platform.h > index 19e879ec6d..b21e875f20 100644 > --- a/Platform/NXP/LS1046aFrwyPkg/Include/Platform.h > +++ b/Platform/NXP/LS1046aFrwyPkg/Include/Platform.h > @@ -20,6 +20,10 @@ > #define SVR_MAJOR(svr) (((svr) >> 4) & 0xf) > #define SVR_MINOR(svr) (((svr) >> 0) & 0xf) > > +// PCLK : Dynamic Clock > +#define DCFG_BASE 0x1EE0000 /* Device configuration data Base Address */ > +#define DCFG_LEN 0xFFF /* Device configuration data length */ > + > > // Gic > #define GIC_VERSION 2 > #define GICD_BASE 0x1410000 > @@ -62,7 +66,7 @@ > #define CFG_MGR_TABLE_ID SIGNATURE_64 ('L','S','1','0','4','6',' ',' ') > > // Specify the OEM defined tables > -#define OEM_ACPI_TABLES 0 > +#define OEM_ACPI_TABLES 1 // Added DSDT Drop the comment. With that: Reviewed-by: Leif Lindholm > > #define PLAT_PCI_SEG0 LS1046A_PCI_SEG0 > #define PLAT_PCI_SEG1_CONFIG_BASE LS1046A_PCI_SEG1_CONFIG_BASE > diff --git a/Platform/NXP/LS1046aFrwyPkg/LS1046aFrwyPkg.dsc b/Platform/NXP/LS1046aFrwyPkg/LS1046aFrwyPkg.dsc > index 20111e6037..7041d15da5 100755 > --- a/Platform/NXP/LS1046aFrwyPkg/LS1046aFrwyPkg.dsc > +++ b/Platform/NXP/LS1046aFrwyPkg/LS1046aFrwyPkg.dsc > @@ -65,6 +65,7 @@ > 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/LS1046aFrwyPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf > } > !endif > > -- > 2.25.1 >