From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f65.google.com (mail-wm1-f65.google.com [209.85.128.65]) by mx.groups.io with SMTP id smtpd.web10.3656.1587637638388284702 for ; Thu, 23 Apr 2020 03:27:18 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@nuviainc-com.20150623.gappssmtp.com header.s=20150623 header.b=VZYOKCiZ; spf=pass (domain: nuviainc.com, ip: 209.85.128.65, mailfrom: leif@nuviainc.com) Received: by mail-wm1-f65.google.com with SMTP id e26so5850133wmk.5 for ; Thu, 23 Apr 2020 03:27:18 -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:user-agent; bh=fwGux22lvYghs2i4LoOGfGns/zV02JlUPIsE7dKqe3w=; b=VZYOKCiZPOk3enpYLd2YOVstcWnnRnj7Lvpy9ngyBkJLaLSRHg2WSi2FVsUOFK3J0b rYtVT8EcX9YioQRxq1efl4W1g1LUePDBLu3VPZ7jBDtFecQVcbMoCHImj/rN+vCTPN2v CZu1TPk+tcAnf4uMYhR9LhFD81UpV/8Nk9lj2cMyVFmggQ12RleBG5hXeNp7KCsoAjT7 y3HMnTvpHf3klVXPZEMfddGy8PEG/z4gw/z3vjQa1e/rUBfojV7pAC4W0/RFVN4qX2oJ RsZ6DTMiWyu7skpmnhZ3gi9Pz+KphhXI4I5xNgYPl+QvaS74l7wY83KliPVU1DUwPkud IR0A== 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:user-agent; bh=fwGux22lvYghs2i4LoOGfGns/zV02JlUPIsE7dKqe3w=; b=mZ0XU0KXT3DbS4uonubaONea0uPkqwQIRE6mUtYoaD8OWioVQCKwM7TJWDuYyH4JXM pP0565+JE87Zq3l75WdEfX3et8m/sa1GNJGeEhUtSmqKBTzhxvCYZdRwbKu/IHTN3iJ8 wN1dlFPSDCBADlherq01Ml7uShMIuRVDWtZKw0eV6h06yD50FZO6HAaST2r0LwuEveaq 8qxq45dctU/ejB7fTqAcPVN5FsFQSFSwWvtfiUWv85k1VeaQAJKdDonmFyMfWWd8ke4C qUAB2/fGHhoe4kzO2lbUBxFZwtSM485xPq/9/0AJ9Pvv/r2Xu4hz0GkvDFjL5QwaLH2u xSqw== X-Gm-Message-State: AGi0PuZokOWRf0WE825H0QHF3C84y8y2s2CuzLAGpKxh3Ej0fd15B+IA amINMFP4XRcTPYOAYxdY522IGQ== X-Google-Smtp-Source: APiQypL3xiH6SH1Uc1e2K8FCRHslkDTCoTtjHmQCpgg9F5vuXoS3niKAP9luhM8ELNh7ZnmS/SGS7Q== X-Received: by 2002:a1c:2002:: with SMTP id g2mr3275525wmg.109.1587637636803; Thu, 23 Apr 2020 03:27:16 -0700 (PDT) Return-Path: Received: from vanye ([2001:470:1f09:12f0:b26e:bfff:fea9:f1b8]) by smtp.gmail.com with ESMTPSA id s17sm2805840wmc.48.2020.04.23.03.27.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Apr 2020 03:27:16 -0700 (PDT) Date: Thu, 23 Apr 2020 11:27:14 +0100 From: "Leif Lindholm" To: Pankaj Bansal Cc: Meenakshi Aggarwal , Michael D Kinney , devel@edk2.groups.io, Varun Sethi , Samer El-Haj-Mahmoud , Jon Nettleton , Ard Biesheuvel Subject: Re: [PATCH edk2-platforms v3 16/24] Silicon/NXP: Add Chassis2 Package Message-ID: <20200423102714.GW14075@vanye> References: <20200415121342.9246-1-pankaj.bansal@oss.nxp.com> <20200415121342.9246-17-pankaj.bansal@oss.nxp.com> MIME-Version: 1.0 In-Reply-To: <20200415121342.9246-17-pankaj.bansal@oss.nxp.com> User-Agent: Mutt/1.10.1 (2018-07-13) Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Wed, Apr 15, 2020 at 17:43:34 +0530, Pankaj Bansal wrote: > From: Pankaj Bansal > > A Chassis is a base framework used for building SoCs. > We can think of Chassis/Soc/Platform(a.k.a Borad) in Object model terms. > Chassis is base. Soc is based on some Chassis. > Platform is based on some Soc. > > SOCs that are designed around same chassis, reuse most of the components. > > Therefore, add the package for Chassis2. LS1043A and LS1046A SOCs belong > to Chassis2. > > Signed-off-by: Pankaj Bansal > --- > > Notes: > - in patch description Oops -> Object model > - Sorted includes alphabetically > - removed direct calls to SwapMmio** APIs and used GetMmioOperations** > > Silicon/NXP/Chassis2/Chassis2.dec | 23 +++++ > Silicon/NXP/NxpQoriqLs.dec | 4 + > Silicon/NXP/Chassis2/Chassis2.dsc.inc | 10 ++ > Silicon/NXP/Chassis2/Library/ChassisLib/ChassisLib.inf | 34 +++++++ > Silicon/NXP/Chassis2/Include/Chassis.h | 34 +++++++ > Silicon/NXP/Include/Library/ChassisLib.h | 51 ++++++++++ > Silicon/NXP/Chassis2/Library/ChassisLib/ChassisLib.c | 97 ++++++++++++++++++++ > 7 files changed, 253 insertions(+) > > diff --git a/Silicon/NXP/Chassis2/Chassis2.dec b/Silicon/NXP/Chassis2/Chassis2.dec > new file mode 100644 > index 000000000000..a0048bd784ea > --- /dev/null > +++ b/Silicon/NXP/Chassis2/Chassis2.dec > @@ -0,0 +1,23 @@ > +# @file > +# NXP Layerscape processor package. > +# > +# Copyright 2020 NXP > +# > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +# > +# > + > +[Defines] > + DEC_SPECIFICATION = 1.27 > + PACKAGE_VERSION = 0.1 > + > +################################################################################ > +# > +# Include Section - list of Include Paths that are provided by this package. > +# Comments are used for Keywords and Module Types. > +# > +# > +################################################################################ > +[Includes.common] > + Include # Root include for the package > + > diff --git a/Silicon/NXP/NxpQoriqLs.dec b/Silicon/NXP/NxpQoriqLs.dec > index 2ac047a89274..3e79f502c127 100644 > --- a/Silicon/NXP/NxpQoriqLs.dec > +++ b/Silicon/NXP/NxpQoriqLs.dec > @@ -14,6 +14,9 @@ > Include > > [LibraryClasses] > + ## @libraryclass Provides Chassis specific functions to other modules > + ChassisLib|Include/Library/ChassisLib.h > + > ## @libraryclass Provides services to read/write to I2c devices > I2cLib|Include/Library/I2cLib.h > > @@ -29,4 +32,5 @@ > > [PcdsFeatureFlag] > gNxpQoriqLsTokenSpaceGuid.PcdI2cErratumA009203|FALSE|BOOLEAN|0x00000315 > + gNxpQoriqLsTokenSpaceGuid.PcdDcfgBigEndian|FALSE|BOOLEAN|0x00000316 > > diff --git a/Silicon/NXP/Chassis2/Chassis2.dsc.inc b/Silicon/NXP/Chassis2/Chassis2.dsc.inc > new file mode 100644 > index 000000000000..db8e5a92eacb > --- /dev/null > +++ b/Silicon/NXP/Chassis2/Chassis2.dsc.inc > @@ -0,0 +1,10 @@ > +# @file > +# > +# Copyright 2020 NXP > +# > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +# > +# > + > +[LibraryClasses.common] > + ChassisLib|Silicon/NXP/Chassis2/Library/ChassisLib/ChassisLib.inf > diff --git a/Silicon/NXP/Chassis2/Library/ChassisLib/ChassisLib.inf b/Silicon/NXP/Chassis2/Library/ChassisLib/ChassisLib.inf > new file mode 100644 > index 000000000000..2bb16af53134 > --- /dev/null > +++ b/Silicon/NXP/Chassis2/Library/ChassisLib/ChassisLib.inf > @@ -0,0 +1,34 @@ > +# @file > +# > +# Copyright 2020 NXP > +# > +# SPDX-License-Identifier: BSD-2-Clause > +# > +# > + > +[Defines] > + INF_VERSION = 1.27 > + BASE_NAME = Chassis2Lib > + FILE_GUID = fae0d077-5fc2-494f-b8e1-c51a3023ee3e > + MODULE_TYPE = BASE > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = ChassisLib > + > +[Packages] > + ArmPkg/ArmPkg.dec > + MdePkg/MdePkg.dec > + Silicon/NXP/Chassis2/Chassis2.dec > + Silicon/NXP/NxpQoriqLs.dec > + > +[LibraryClasses] > + IoAccessLib > + IoLib > + PcdLib > + SerialPortLib > + > +[Sources.common] > + ChassisLib.c > + > +[FeaturePcd] > + gNxpQoriqLsTokenSpaceGuid.PcdDcfgBigEndian > + > diff --git a/Silicon/NXP/Chassis2/Include/Chassis.h b/Silicon/NXP/Chassis2/Include/Chassis.h > new file mode 100644 > index 000000000000..72bd97efd004 > --- /dev/null > +++ b/Silicon/NXP/Chassis2/Include/Chassis.h > @@ -0,0 +1,34 @@ > +/** @file > + > + Copyright 2020 NXP > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > +#ifndef CHASSIS_H__ > +#define CHASSIS_H__ > + > +#define NXP_LAYERSCAPE_CHASSIS2_DCFG_ADDRESS 0x1EE0000 > + > +/* SMMU Defintions */ > +#define SMMU_BASE_ADDR 0x09000000 > +#define SMMU_REG_SCR0 (SMMU_BASE_ADDR + 0x0) > +#define SMMU_REG_SACR (SMMU_BASE_ADDR + 0x10) > +#define SMMU_REG_NSCR0 (SMMU_BASE_ADDR + 0x400) > + > +#define SCR0_USFCFG_MASK 0x00000400 > +#define SCR0_CLIENTPD_MASK 0x00000001 > +#define SACR_PAGESIZE_MASK 0x00010000 > + > +/** > + The Device Configuration Unit provides general purpose configuration and > + status for the device. These registers only support 32-bit accesses. > +**/ > +#pragma pack(1) > +typedef struct { > + UINT8 Reserved0[0x100 - 0x0]; > + UINT32 RcwSr[16]; // Reset Control Word Status Register > +} NXP_LAYERSCAPE_CHASSIS2_DEVICE_CONFIG; > +#pragma pack() > + > +#endif // CHASSIS_H__ > diff --git a/Silicon/NXP/Include/Library/ChassisLib.h b/Silicon/NXP/Include/Library/ChassisLib.h > new file mode 100644 > index 000000000000..89992a4b6fd5 > --- /dev/null > +++ b/Silicon/NXP/Include/Library/ChassisLib.h > @@ -0,0 +1,51 @@ > +/** @file > + Chassis Lib to provide Chessis specific functionality to all SOCs in > + a Chassis. > + > + Copyright 2020 NXP > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > +**/ > + > +#ifndef CHASSIS_LIB_H__ > +#define CHASSIS_LIB_H__ > + > +#include > + > +/** > + Read Dcfg register > + > + @param Address The MMIO register to read. > + > + @return The value read. > +**/ > +UINT32 > +EFIAPI > +DcfgRead32 ( > + IN UINTN Address > + ); > + > +/** > + Write Dcfg register > + > + @param Address The MMIO register to write. > + @param Value The value to write to the MMIO register. > + > + @return Value. > +**/ > +UINT32 > +EFIAPI > +DcfgWrite32 ( > + IN UINTN Address, > + IN UINT32 Value > + ); > + > +/** > + Function to initialize Chassis Specific functions > + **/ > +VOID > +ChassisInit ( > + VOID > + ); > + > +#endif // CHASSIS_LIB_H__ > diff --git a/Silicon/NXP/Chassis2/Library/ChassisLib/ChassisLib.c b/Silicon/NXP/Chassis2/Library/ChassisLib/ChassisLib.c > new file mode 100644 > index 000000000000..b3bb25029dd2 > --- /dev/null > +++ b/Silicon/NXP/Chassis2/Library/ChassisLib/ChassisLib.c > @@ -0,0 +1,97 @@ > +/** @file > + Chassis specific functions common to all SOCs based on a specific Chessis > + > + Copyright 2020 NXP > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#include > +#include > +#include > +#include > +#include > +#include > + > +/** > + Read Dcfg register > + > + @param Address The MMIO register to read. > + > + @return The value read. > +**/ > +UINT32 > +EFIAPI > +DcfgRead32 ( > + IN UINTN Address > + ) > +{ > + MMIO_OPERATIONS_32 *DcfgOps; > + > + DcfgOps = GetMmioOperations32 (FeaturePcdGet (PcdDcfgBigEndian)); > + > + return DcfgOps->Read32 (Address); > +} The intended usage model for IoAccessLib is to retrieve the function pointer struct once and then always refer to it. Since this is a library, we could have a CONSTRUCTOR function (specified in the .inf) and do something like: STATIC MMIO_OPERATIONS mDcfgOps; /** Read Dcfg register @param Address The MMIO register to read. @return The value read. **/ UINT32 EFIAPI DcfgRead32 ( IN UINTN Address ) { return mDcfgOps->Read32 (Address); } /** Write Dcfg register @param Address The MMIO register to write. @param Value The value to write to the MMIO register. @return Value. **/ UINT32 EFIAPI DcfgWrite32 ( IN UINTN Address, IN UINT32 Value ) { return mDcfgOps->Write32 (Address, Value); } ... /** The constructor function initializes the IoAccessLib function pointer structure. @retval RETURN_SUCCESS The constructor always returns EFI_SUCCESS. **/ EFI_STATUS EFIAPI ChassisLibConstructor ( VOID ) { mDcfgOps = GetMmioOperations (FeaturePcdGet (PcdDcfgBigEndian)); return EFI_SUCCESS; } / Leif > + > +/** > + Write Dcfg register > + > + @param Address The MMIO register to write. > + @param Value The value to write to the MMIO register. > + > + @return Value. > +**/ > +UINT32 > +EFIAPI > +DcfgWrite32 ( > + IN UINTN Address, > + IN UINT32 Value > + ) > +{ > + MMIO_OPERATIONS_32 *DcfgOps; > + > + DcfgOps = GetMmioOperations32 (FeaturePcdGet (PcdDcfgBigEndian)); > + > + return DcfgOps->Write32 (Address, Value); > +} > + > +/* > + * Setup SMMU in bypass mode > + * and also set its pagesize > + */ > +STATIC > +VOID > +SmmuInit ( > + VOID > + ) > +{ > + UINT32 Value; > + > + /* set pagesize as 64K and ssmu-500 in bypass mode */ > + Value = (MmioRead32 ((UINTN)SMMU_REG_SACR) | SACR_PAGESIZE_MASK); > + MmioWrite32 ((UINTN)SMMU_REG_SACR, Value); > + > + Value = (MmioRead32 ((UINTN)SMMU_REG_SCR0) | SCR0_CLIENTPD_MASK); > + Value &= ~SCR0_USFCFG_MASK; > + MmioWrite32 ((UINTN)SMMU_REG_SCR0, Value); > + > + Value = (MmioRead32 ((UINTN)SMMU_REG_NSCR0) | SCR0_CLIENTPD_MASK); > + Value &= ~SCR0_USFCFG_MASK; > + MmioWrite32 ((UINTN)SMMU_REG_NSCR0, Value); > +} > + > +/** > + Function to initialize Chassis Specific functions > + **/ > +VOID > +ChassisInit ( > + VOID > + ) > +{ > + // > + // Early init serial Port to get board information. > + // > + SerialPortInitialize (); > + > + SmmuInit (); > +} > -- > 2.17.1 >