On Wed, Nov 28, 2018 at 08:31:27PM +0530, Meenakshi Aggarwal wrote:
> Add support of IfcLib, it will be used to perform
> any operation on IFC controller.

Expand acronym.

> 
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Meenakshi Aggarwal <meenakshi.aggar...@nxp.com>
> ---
>  Silicon/NXP/Include/Library/IfcLib.h  |  26 +++++
>  Silicon/NXP/Library/IfcLib/IfcLib.c   | 150 +++++++++++++++++++++++++++
>  Silicon/NXP/Library/IfcLib/IfcLib.h   | 190 
> ++++++++++++++++++++++++++++++++++
>  Silicon/NXP/Library/IfcLib/IfcLib.inf |  38 +++++++

Names Ifc -> NxpIfc please.

>  Silicon/NXP/NxpQoriqLs.dec            |   1 +
>  5 files changed, 405 insertions(+)
>  create mode 100644 Silicon/NXP/Include/Library/IfcLib.h
>  create mode 100644 Silicon/NXP/Library/IfcLib/IfcLib.c
>  create mode 100644 Silicon/NXP/Library/IfcLib/IfcLib.h
>  create mode 100644 Silicon/NXP/Library/IfcLib/IfcLib.inf
> 
> diff --git a/Silicon/NXP/Include/Library/IfcLib.h 
> b/Silicon/NXP/Include/Library/IfcLib.h
> new file mode 100644
> index 0000000..8d2c151
> --- /dev/null
> +++ b/Silicon/NXP/Include/Library/IfcLib.h
> @@ -0,0 +1,26 @@
> +/** @IfcLib.h
> +
> +  The integrated flash controller (IFC) is used to interface with external 
> asynchronous
> +  NAND flash, asynchronous NOR flash, SRAM, generic ASIC memories and EPROM.
> +
> +  Copyright 2018 NXP
> +
> +  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.
> +
> +**/
> +
> +#ifndef __IFC_LIB_H__
> +#define __IFC_LIB_H__

Header guard NXP_ (and/or QORIQ_) prefix.

> +
> +VOID
> +IfcInit (
> +  VOID
> +  );
> +
> +#endif //__IFC_LIB_H__
> diff --git a/Silicon/NXP/Library/IfcLib/IfcLib.c 
> b/Silicon/NXP/Library/IfcLib/IfcLib.c
> new file mode 100644
> index 0000000..8cf02ae
> --- /dev/null
> +++ b/Silicon/NXP/Library/IfcLib/IfcLib.c
> @@ -0,0 +1,150 @@
> +/** @IfcLib.c
> +
> +  The integrated flash controller (IFC) is used to interface with external 
> asynchronous/
> +  synchronous NAND flash, asynchronous NOR flash, SRAM, generic ASIC memory 
> and
> +  EPROM.
> +  It has eight chip-selects, to which a maximum of eight flash devices can 
> be attached,
> +  although only one of these can be accessed at any given time.
> +
> +  Copyright 2018 NXP
> +
> +  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.
> +
> +**/
> +
> +#include <Library/IoAccessLib.h>
> +#include "IfcLib.h"
> +
> +STATIC MMIO_OPERATIONS_32 *mMmioOps;
> +
> +STATIC UINT8 mNandCS;
> +STATIC UINT8 mNorCS;
> +STATIC UINT8 mFpgaCS;
> +
> +VOID

Local only?
If so, STATIC please.

> +SetTimings (
> +  IN  UINT8        CS,
> +  IN  IFC_TIMINGS  IfcTimings
> +  )
> +{
> +  IFC_REGS*        IfcRegs;
> +
> +  IfcRegs = (IFC_REGS*)PcdGet64 (PcdIfcBaseAddr);
> +
> +  // Configure Extended chip select property registers
> +  mMmioOps->Write ((UINTN)&IfcRegs->CsprCs[CS].CsprExt, IfcTimings.CsprExt);
> +
> +  // Configure Fpga timing registers
> +  mMmioOps->Write ((UINTN)&IfcRegs->FtimCs[CS].Ftim[IFC_FTIM0], 
> IfcTimings.Ftim[0]);
> +  mMmioOps->Write ((UINTN)&IfcRegs->FtimCs[CS].Ftim[IFC_FTIM1], 
> IfcTimings.Ftim[1]);
> +  mMmioOps->Write ((UINTN)&IfcRegs->FtimCs[CS].Ftim[IFC_FTIM2], 
> IfcTimings.Ftim[2]);
> +  mMmioOps->Write ((UINTN)&IfcRegs->FtimCs[CS].Ftim[IFC_FTIM3], 
> IfcTimings.Ftim[3]);
> +
> +  // Configure chip select option registers
> +  mMmioOps->Write ((UINTN)&IfcRegs->CsprCs[CS].Cspr, IfcTimings.Cspr);
> +
> +  // Configure address mask registers
> +  mMmioOps->Write ((UINTN)&IfcRegs->AmaskCs[CS].Amask, IfcTimings.Amask);
> +
> +  // Configure chip select property registers
> +  mMmioOps->Write ((UINTN)&IfcRegs->CsorCs[CS].Csor, IfcTimings.Csor);
> +
> +  return;
> +}
> +
> +VOID

Local only?
If so, STATIC please.

> +NandInit(
> +  VOID
> +  )
> +{
> +  IFC_REGS*       IfcRegs;
> +  IFC_TIMINGS     NandIfcTimings;
> +
> +  IfcRegs = (IFC_REGS*)PcdGet64 (PcdIfcBaseAddr);
> +
> +  // Get Nand Flash Timings
> +  GetIfcNandFlashTimings (&NandIfcTimings);
> +
> +  // Validate chip select
> +  if (NandIfcTimings.CS < IFC_CS_MAX) {
> +    mNandCS = NandIfcTimings.CS;
> +
> +    // clear event registers
> +    mMmioOps->Write ((UINTN)&IfcRegs->IfcNand.PgrdcmplEvtStat, ~0U);
> +
> +    mMmioOps->Write ((UINTN)&IfcRegs->IfcNand.NandEvterStat, ~0U);
> +
> +    // Enable error and event for any detected errors
> +    mMmioOps->Write ((UINTN)&IfcRegs->IfcNand.NandEvterEn,
> +      IFC_NAND_EVTER_EN_OPC_EN |

Indentation should be to function name, not struct name.
(Please address throughout.)

> +      IFC_NAND_EVTER_EN_PGRDCMPL_EN |
> +      IFC_NAND_EVTER_EN_FTOER_EN |
> +      IFC_NAND_EVTER_EN_WPER_EN);
> +    mMmioOps->Write ((UINTN)&IfcRegs->IfcNand.Ncfgr, 0x0);
> +
> +    SetTimings (mNandCS, NandIfcTimings);
> +  }
> +
> +  return;
> +}
> +
> +VOID

Local only?
If so, STATIC please.

> +FpgaInit (
> +  VOID
> +  )
> +{
> +  IFC_TIMINGS     FpgaIfcTimings;
> +
> +  // Get Fpga Flash Timings
> +  GetIfcFpgaTimings (&FpgaIfcTimings);
> +
> +  // Validate chip select
> +  if (FpgaIfcTimings.CS < IFC_CS_MAX) {
> +    mFpgaCS = FpgaIfcTimings.CS;
> +    SetTimings (mFpgaCS, FpgaIfcTimings);
> +  }
> +
> +  return;
> +}
> +
> +VOID
> +NorInit (
> +  VOID
> +  )
> +{
> +  IFC_TIMINGS     NorIfcTimings;
> +
> +  // Get NOR Flash Timings
> +  GetIfcNorFlashTimings (&NorIfcTimings);
> +
> +  // Validate chip select
> +  if (NorIfcTimings.CS < IFC_CS_MAX) {
> +    mNorCS = NorIfcTimings.CS;
> +    SetTimings (mNorCS, NorIfcTimings);
> +  }
> +
> +  return;
> +}
> +
> +//
> +// IFC has NOR , NAND and FPGA
> +//
> +VOID
> +IfcInit (
> +  VOID
> +  )
> +{
> +  mMmioOps = GetMmioOperations32 (FixedPcdGetBool (PcdIfcBigEndian));
> +
> +  NorInit();
> +  NandInit();
> +  FpgaInit();
> +
> +  return;
> +}
> diff --git a/Silicon/NXP/Library/IfcLib/IfcLib.h 
> b/Silicon/NXP/Library/IfcLib/IfcLib.h
> new file mode 100644
> index 0000000..38ce247
> --- /dev/null
> +++ b/Silicon/NXP/Library/IfcLib/IfcLib.h
> @@ -0,0 +1,190 @@
> +/** @IfcLib.h
> +
> +  The integrated flash controller (IFC) is used to interface with external 
> asynchronous/
> +  synchronous NAND flash, asynchronous NOR flash, SRAM, generic ASIC memory 
> and
> +  EPROM.
> +  It has eight chip-selects, to which a maximum of eight flash devices can 
> be attached,
> +  although only one of these can be accessed at any given time.
> +
> +  Copyright 2017 NXP
> +
> +  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.
> +
> +**/
> +
> +#ifndef __IFC_LIB_H__
> +#define __IFC_LIB_H__

NXP_ and/or QORIQ_ prefix?

> +
> +#include <Ifc.h>
> +#include <Uefi.h>
> +
> +#define IFC_NAND_RESERVED_SIZE      FixedPcdGet32 (PcdIfcNandReservedSize)
> +
> +typedef enum {
> +  IFC_FTIM0 = 0,
> +  IFC_FTIM1,
> +  IFC_FTIM2,
> +  IFC_FTIM3,

CamelCase member names please, throughout.

> +} IFC_FTIMS;
> +
> +typedef struct {
> +  UINT32 CsprExt;
> +  UINT32 Cspr;
> +  UINT32 Res;
> +} IFC_CSPR;
> +
> +typedef struct {
> +  UINT32 Amask;

AddressMask?

> +  UINT32 Res[0x2];

Is this "Reserved"?
If so, please write out in full.
Also please drop the hex prefix.
Apples throughout.

> +} IFC_AMASK;
> +
> +typedef struct {
> +  UINT32 Csor;
> +  UINT32 CsorExt;
> +  UINT32 Res;
> +} IFC_CSOR;
> +
> +typedef struct {
> +  UINT32 Ftim[4];
> +  UINT32 Res[0x8];
> +}IFC_FTIM ;
> +
> +typedef struct {
> +  UINT32 Ncfgr;
> +  UINT32 Res1[0x4];
> +  UINT32 NandFcr0;
> +  UINT32 NandFcr1;
> +  UINT32 Res2[0x8];
> +  UINT32 Row0;
> +  UINT32 Res3;
> +  UINT32 Col0;
> +  UINT32 Res4;
> +  UINT32 Row1;
> +  UINT32 Res5;
> +  UINT32 Col1;
> +  UINT32 Res6;
> +  UINT32 Row2;
> +  UINT32 Res7;
> +  UINT32 Col2;
> +  UINT32 Res8;
> +  UINT32 Row3;
> +  UINT32 Res9;
> +  UINT32 Col3;
> +  UINT32 Res10[0x24];
> +  UINT32 NandFbcr;
> +  UINT32 Res11;
> +  UINT32 NandFir0;
> +  UINT32 NandFir1;
> +  UINT32 nandFir2;
> +  UINT32 Res12[0x10];
> +  UINT32 NandCsel;
> +  UINT32 Res13;
> +  UINT32 NandSeqStrt;
> +  UINT32 Res14;
> +  UINT32 NandEvterStat;
> +  UINT32 Res15;
> +  UINT32 PgrdcmplEvtStat;
> +  UINT32 Res16[0x2];
> +  UINT32 NandEvterEn;
> +  UINT32 Res17[0x2];
> +  UINT32 NandEvterIntrEn;
> +  UINT32 Res18[0x2];
> +  UINT32 NandErattr0;
> +  UINT32 NandErattr1;
> +  UINT32 Res19[0x10];
> +  UINT32 NandFsr;
> +  UINT32 Res20;
> +  UINT32 NandEccstat[4];
> +  UINT32 Res21[0x20];
> +  UINT32 NanNdcr;
> +  UINT32 Res22[0x2];
> +  UINT32 NandAutobootTrgr;
> +  UINT32 Res23;
> +  UINT32 NandMdr;
> +  UINT32 Res24[0x5C];
> +} IFC_NAND;
> +
> +/*
> + * IFC controller NOR Machine registers
> + */
> +typedef struct {
> +  UINT32 NorEvterStat;
> +  UINT32 Res1[0x2];
> +  UINT32 NorEvterEn;
> +  UINT32 Res2[0x2];
> +  UINT32 NorEvterIntrEn;
> +  UINT32 Res3[0x2];
> +  UINT32 NorErattr0;
> +  UINT32 NorErattr1;
> +  UINT32 NorErattr2;
> +  UINT32 Res4[0x4];
> +  UINT32 NorCr;
> +  UINT32 Res5[0xEF];
> +} IFC_NOR;
> +
> +/*
> + * IFC controller GPCM Machine registers
> + */
> +typedef struct  {

extra space

> +  UINT32 GpcmEvterStat;
> +  UINT32 Res1[0x2];
> +  UINT32 GpcmEvterEn;
> +  UINT32 Res2[0x2];
> +  UINT32 gpcmEvterIntrEn;
> +  UINT32 Res3[0x2];
> +  UINT32 GpcmErattr0;
> +  UINT32 GpcmErattr1;
> +  UINT32 GcmErattr2;
> +  UINT32 GpcmStat;
> +} IFC_GPCM;
> +
> +/*
> + * IFC Controller Registers
> + */
> +typedef struct {
> +  UINT32      IfcRev;
> +  UINT32      Res1[0x2];
> +  IFC_CSPR    CsprCs[IFC_BANK_COUNT];
> +  UINT8       Res2[IFC_CSPR_REG_LEN - IFC_CSPR_USED_LEN];
> +  IFC_AMASK   AmaskCs[IFC_BANK_COUNT];
> +  UINT8       Res3[IFC_AMASK_REG_LEN - IFC_AMASK_USED_LEN];
> +  IFC_CSOR    CsorCs[IFC_BANK_COUNT];
> +  UINT8       Res4[IFC_CSOR_REG_LEN - IFC_CSOR_USED_LEN];
> +  IFC_FTIM    FtimCs[IFC_BANK_COUNT];
> +  UINT8       Res5[IFC_FTIM_REG_LEN - IFC_FTIM_USED_LEN];
> +  UINT32      RbStat;
> +  UINT32      RbMap;
> +  UINT32      WpMap;
> +  UINT32      IfcGcr;
> +  UINT32      Res7[0x2];
> +  UINT32      CmEvter_stat;
> +  UINT32      Res8[0x2];
> +  UINT32      CmEvterEn;
> +  UINT32      Res9[0x2];
> +  UINT32      CmEvterIntrEn;
> +  UINT32      Res10[0x2];
> +  UINT32      CmErattr0;
> +  UINT32      CmErattr1;
> +  UINT32      Res11[0x2];
> +  UINT32      IfcCcr;
> +  UINT32      IfcCsr;
> +  UINT32      DdrCcrLow;
> +  UINT32      Res12[IFC_NAND_RESERVED_SIZE];
> +  IFC_NAND    IfcNand;
> +  IFC_NOR     IfcNor;
> +  IFC_GPCM    IfcGpcm;
> +} IFC_REGS;
> +
> +extern VOID GetIfcNorFlashTimings (IFC_TIMINGS * NorIfcTimings);
> +
> +extern VOID GetIfcFpgaTimings (IFC_TIMINGS  *FpgaIfcTimings);
> +
> +extern VOID GetIfcNandFlashTimings (IFC_TIMINGS * NandIfcTimings);

Please move these function declarations to the (first) patch that adds
implementations of these functions.

> +
> +#endif //__IFC_LIB_H__
> diff --git a/Silicon/NXP/Library/IfcLib/IfcLib.inf 
> b/Silicon/NXP/Library/IfcLib/IfcLib.inf
> new file mode 100644
> index 0000000..989eb44
> --- /dev/null
> +++ b/Silicon/NXP/Library/IfcLib/IfcLib.inf
> @@ -0,0 +1,38 @@
> +#  IfcLib.inf
> +#
> +#  Component description file for IFC Library
> +#
> +#  Copyright 2018 NXP
> +#
> +#  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.
> +#
> +
> +[Defines]
> +  INF_VERSION                    = 0x0001001A
> +  BASE_NAME                      = IfcLib

Nxp

> +  FILE_GUID                      = a465d76c-0785-4ee7-bd72-767983d575a2
> +  MODULE_TYPE                    = BASE
> +  VERSION_STRING                 = 1.0
> +  LIBRARY_CLASS                  = IfcLib

Nxp

/
    Leif

> +
> +[Sources.common]
> +  IfcLib.c
> +
> +[Packages]
> +  MdePkg/MdePkg.dec
> +  Silicon/NXP/NxpQoriqLs.dec
> +
> +[LibraryClasses]
> +  BoardLib
> +  IoAccessLib
> +
> +[FixedPcd]
> +  gNxpQoriqLsTokenSpaceGuid.PcdIfcBaseAddr
> +  gNxpQoriqLsTokenSpaceGuid.PcdIfcBigEndian
> +  gNxpQoriqLsTokenSpaceGuid.PcdIfcNandReservedSize
> diff --git a/Silicon/NXP/NxpQoriqLs.dec b/Silicon/NXP/NxpQoriqLs.dec
> index df64ad6..bd89da4 100644
> --- a/Silicon/NXP/NxpQoriqLs.dec
> +++ b/Silicon/NXP/NxpQoriqLs.dec
> @@ -77,6 +77,7 @@
>    gNxpQoriqLsTokenSpaceGuid.PcdCcsrBaseAddr|0x0|UINT64|0x00000128
>    gNxpQoriqLsTokenSpaceGuid.PcdCcsrSize|0x0|UINT64|0x00000129
>    gNxpQoriqLsTokenSpaceGuid.PcdDramMemSize|0x0|UINT64|0x0000012A
> +  gNxpQoriqLsTokenSpaceGuid.PcdIfcBaseAddr|0x0|UINT64|0x0000012B
>  
>    #
>    # IFC PCDs
> -- 
> 1.9.1
> 
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to