Hi Leif,

> -----Original Message-----
> From: Leif Lindholm [mailto:[email protected]]
> Sent: Thursday, April 19, 2018 8:14 PM
> To: Meenakshi Aggarwal <[email protected]>
> Cc: [email protected]; [email protected]; Udit Kumar
> <[email protected]>; Varun Sethi <[email protected]>; Vabhav Sharma
> <[email protected]>
> Subject: Re: [PATCH edk2-platforms 22/39] Platform/NXP: LS1046 RDB Board
> FPGA library
> 
> On Fri, Feb 16, 2018 at 02:20:18PM +0530, Meenakshi wrote:
> > From: Meenakshi Aggarwal <[email protected]>
> >
> > Library to provide functions for accessing FPGA on LS1046ARDB board.
> >
> > Contributed-under: TianoCore Contribution Agreement 1.1
> > Signed-off-by: Vabhav <[email protected]>
> > Signed-off-by: Meenakshi Aggarwal <[email protected]>
> 
> I compare this one to LS1043aRdbPkg/Library/FpgaLib, and the differences in
> the .c file are
> --- Platform/NXP/LS1043aRdbPkg/Library/FpgaLib/FpgaLib.c 2018-04-18
> 15:13:08.507949763 +0100
> +++ Platform/NXP/LS1046aRdbPkg/Library/FpgaLib/FpgaLib.c 2018-04-18
> +++ 15:13:08.531949605 +0100
> @@ -1,5 +1,5 @@
>  /** @FpgaLib.c
> -  Fpga Library for LS1043A-RDB board, containing functions to
> +  Fpga Library for LS1046A-RDB board, containing functions to
>    program and read the Fpga registers.
> 
>    FPGA is connected to IFC Controller and so MMIO APIs are used @@ -137,6
> +137,8 @@
>    Sd1RefClkSel = FPGA_READ(Sd1RefClkSel);
>    DEBUG((DEBUG_INFO, "SD1_CLK1 = %a, SD1_CLK2 = %a\n",
>                Sd1RefClkSel ? SERDES_FREQ2 : SERDES_FREQ1, SERDES_FREQ1));
> +  DEBUG((DEBUG_INFO, "SD2_CLK1 = %a, SD2_CLK2 = %a\n",
> +              SERDES_FREQ1, SERDES_FREQ1));
> 
>    return;
>  }
> 
> Could these two libraries be merged into a single LS104xx variant?
> 
> The LS2088a one seems to have substantial differences, so that makes sense to
> keep separate.
> 
We were planning to keep this library common for both LS1046 and LS1043,
But as this is board specific library, and in case, same soc be used on any 
other board,
then there will be changes in common library which might not be significant for 
other.

Also, FPGA_REG_SET structure is different for both, luckily here the new struct 
members
are added in the end of structure, but we cannot be sure about same in future 
boards.

So we decided to keep board specific stuff separate.

> No other comments on this patch.
> 
> /
>     Leif
> 
> > ---
> >  .../NXP/LS1046aRdbPkg/Include/Library/FpgaLib.h    |  97 ++++++++++++++
> >  .../NXP/LS1046aRdbPkg/Library/FpgaLib/FpgaLib.c    | 144
> +++++++++++++++++++++
> >  .../NXP/LS1046aRdbPkg/Library/FpgaLib/FpgaLib.inf  |  32 +++++
> >  3 files changed, 273 insertions(+)
> >  create mode 100644
> > Platform/NXP/LS1046aRdbPkg/Include/Library/FpgaLib.h
> >  create mode 100644
> > Platform/NXP/LS1046aRdbPkg/Library/FpgaLib/FpgaLib.c
> >  create mode 100644
> > Platform/NXP/LS1046aRdbPkg/Library/FpgaLib/FpgaLib.inf
> >
> > diff --git a/Platform/NXP/LS1046aRdbPkg/Include/Library/FpgaLib.h
> > b/Platform/NXP/LS1046aRdbPkg/Include/Library/FpgaLib.h
> > new file mode 100644
> > index 0000000..c8f7411
> > --- /dev/null
> > +++ b/Platform/NXP/LS1046aRdbPkg/Include/Library/FpgaLib.h
> > @@ -0,0 +1,97 @@
> > +/** FpgaLib.h
> > +*  Header defining the LS1046a Fpga specific constants (Base
> > +addresses, sizes, flags)
> > +*
> > +*  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
> > +*
> > +https://emea01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fope
> > +nsource.org%2Flicenses%2Fbsd-
> license.php&data=02%7C01%7Cmeenakshi.agg
> >
> +arwal%40nxp.com%7C5d08c304527946a5bf8908d5a6040dc0%7C686ea1d3bc
> 2b4c6f
> >
> +a92cd99c5c301635%7C0%7C0%7C636597458708526882&sdata=%2FFRG6Itp%
> 2B23zi
> > +FZzr8QqfiGX7IImR8L6QjjTL2R%2Fgpw%3D&reserved=0
> > +*
> > +*  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 __LS1046A_FPGA_H__
> > +#define __LS1046A_FPGA_H__
> > +
> > +/**
> > +   FPGA register set of LS1046ARDB board-specific.
> > + **/
> > +typedef struct {
> > +  UINT8  FpgaVersionMajor; // 0x0 - FPGA Major Revision Register
> > +  UINT8  FpgaVersionMinor; // 0x1 - FPGA Minor Revision Register
> > +  UINT8  PcbaVersion;      // 0x2 - PCBA Revision Register
> > +  UINT8  SystemReset;      // 0x3 - system reset register
> > +  UINT8  SoftMuxOn;        // 0x4 - Switch Control Enable Register
> > +  UINT8  RcwSource1;       // 0x5 - Reset config word 1
> > +  UINT8  RcwSource2;       // 0x6 - Reset config word 1
> > +  UINT8  Vbank;            // 0x7 - Flash bank selection Control
> > +  UINT8  SysclkSelect;     // 0x8 - System clock selection Control
> > +  UINT8  UartSel;          // 0x9 - Uart selection Control
> > +  UINT8  Sd1RefClkSel;     // 0xA - Serdes1 reference clock selection 
> > Control
> > +  UINT8  TdmClkMuxSel;     // 0xB - TDM Clock Mux selection Control
> > +  UINT8  SdhcSpiCsSel;     // 0xC - SDHC/SPI Chip select selection Control
> > +  UINT8  StatusLed;        // 0xD - Status Led
> > +  UINT8  GlobalReset;      // 0xE - Global reset
> > +  UINT8  SdEmmc;           // 0xF - SD or EMMC Interface Control Regsiter
> > +  UINT8  VddEn;            // 0x10 - VDD Voltage Control Enable Register
> > +  UINT8  VddSel;           // 0x11 - VDD Voltage Control Register
> > +} FPGA_REG_SET;
> > +
> > +/**
> > +   Function to read FPGA register.
> > +**/
> > +UINT8
> > +FpgaRead (
> > +  UINTN  Reg
> > +  );
> > +
> > +/**
> > +   Function to write FPGA register.
> > +**/
> > +VOID
> > +FpgaWrite (
> > +  UINTN  Reg,
> > +  UINT8  Value
> > +  );
> > +
> > +/**
> > +   Function to read FPGA revision.
> > +**/
> > +VOID
> > +FpgaRevBit (
> > +  UINT8  *Value
> > +  );
> > +
> > +/**
> > +   Function to initialize FPGA timings.
> > +**/
> > +VOID
> > +FpgaInit (
> > +  VOID
> > +  );
> > +
> > +/**
> > +   Function to print board personality.
> > +**/
> > +VOID
> > +PrintBoardPersonality (
> > +  VOID
> > +  );
> > +
> > +#define FPGA_BASE_PHYS          0x7fb00000
> > +
> > +#define SRC_VBANK               0x25
> > +#define SRC_NAND                0x106
> > +#define SRC_QSPI                0x44
> > +#define SRC_SD                  0x40
> > +
> > +#define SERDES_FREQ1            "100.00 MHz"
> > +#define SERDES_FREQ2            "156.25 MHz"
> > +
> > +#define FPGA_READ(Reg)          FpgaRead (OFFSET_OF (FPGA_REG_SET, Reg))
> > +#define FPGA_WRITE(Reg, Value)  FpgaWrite (OFFSET_OF (FPGA_REG_SET,
> > +Reg), Value)
> > +
> > +#endif
> > diff --git a/Platform/NXP/LS1046aRdbPkg/Library/FpgaLib/FpgaLib.c
> > b/Platform/NXP/LS1046aRdbPkg/Library/FpgaLib/FpgaLib.c
> > new file mode 100644
> > index 0000000..90cc1ea
> > --- /dev/null
> > +++ b/Platform/NXP/LS1046aRdbPkg/Library/FpgaLib/FpgaLib.c
> > @@ -0,0 +1,144 @@
> > +/** @FpgaLib.c
> > +  Fpga Library for LS1046A-RDB board, containing functions to
> > +  program and read the Fpga registers.
> > +
> > +  FPGA is connected to IFC Controller and so MMIO APIs are used  to
> > + read/write FPGA registers
> > +
> > +  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
> > +
> > + https://emea01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fop
> > + ensource.org%2Flicenses%2Fbsd-
> license.php&data=02%7C01%7Cmeenakshi.a
> > +
> ggarwal%40nxp.com%7C5d08c304527946a5bf8908d5a6040dc0%7C686ea1d3b
> c2b4
> > +
> c6fa92cd99c5c301635%7C0%7C0%7C636597458708526882&sdata=%2FFRG6It
> p%2B
> > + 23ziFZzr8QqfiGX7IImR8L6QjjTL2R%2Fgpw%3D&reserved=0
> > +
> > +  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 <Base.h>
> > +#include <Library/BaseLib.h>
> > +#include <Library/DebugLib.h>
> > +#include <Library/FpgaLib.h>
> > +#include <Library/IoLib.h>
> > +
> > +/**
> > +   Function to read FPGA register.
> > +
> > +   @param  Reg  Register offset of FPGA to read.
> > +
> > +**/
> > +UINT8
> > +FpgaRead (
> > +  IN  UINTN  Reg
> > +  )
> > +{
> > +  VOID       *Base;
> > +
> > +  Base = (VOID *)FPGA_BASE_PHYS;
> > +
> > +  return MmioRead8 ((UINTN)(Base + Reg)); }
> > +
> > +/**
> > +   Function to write FPGA register.
> > +
> > +   @param  Reg   Register offset of FPGA to write.
> > +   @param  Value Value to be written.
> > +
> > +**/
> > +VOID
> > +FpgaWrite (
> > +  IN  UINTN  Reg,
> > +  IN  UINT8  Value
> > +  )
> > +{
> > +  VOID       *Base;
> > +
> > +  Base = (VOID *)FPGA_BASE_PHYS;
> > +
> > +  MmioWrite8 ((UINTN)(Base + Reg), Value); }
> > +
> > +/**
> > +   Function to reverse the number.
> > +
> > +   @param  *Value  pointer to number to reverse.
> > +
> > +   @retval *Value  reversed value.
> > +
> > +**/
> > +VOID
> > +FpgaRevBit (
> > +  OUT UINT8  *Value
> > +  )
> > +{
> > +  UINT8      Rev;
> > +  UINT8      Val;
> > +  UINTN      Index;
> > +
> > +  Val = *Value;
> > +  Rev = Val & 1;
> > +  for (Index = 1; Index <= 7; Index++) {
> > +    Val >>= 1;
> > +    Rev <<= 1;
> > +    Rev |= Val & 1;
> > +  }
> > +
> > +  *Value = Rev;
> > +}
> > +
> > +/**
> > +   Function to print board personality.
> > +
> > +**/
> > +VOID
> > +PrintBoardPersonality (
> > +  VOID
> > +  )
> > +{
> > +  UINT8  RcwSrc1;
> > +  UINT8  RcwSrc2;
> > +  UINT32 RcwSrc;
> > +  UINT32 Sd1RefClkSel;
> > +
> > +  RcwSrc1 = FPGA_READ(RcwSource1);
> > +  RcwSrc2 = FPGA_READ(RcwSource2);
> > +  FpgaRevBit (&RcwSrc1);
> > +  RcwSrc = RcwSrc1;
> > +  RcwSrc = (RcwSrc << 1) | RcwSrc2;
> > +
> > +  switch (RcwSrc) {
> > +    case SRC_VBANK:
> > +      DEBUG ((DEBUG_INFO, "vBank: %d\n", FPGA_READ(Vbank)));
> > +      break;
> > +    case SRC_NAND:
> > +      DEBUG ((DEBUG_INFO, "NAND\n"));
> > +      break;
> > +    case SRC_QSPI:
> > +      DEBUG ((DEBUG_INFO, "QSPI vBank %d\n", FPGA_READ(Vbank)));
> > +      break;
> > +    case SRC_SD:
> > +      DEBUG ((DEBUG_INFO, "SD\n"));
> > +      break;
> > +    default:
> > +      DEBUG ((DEBUG_INFO, "Invalid setting of SW5\n"));
> > +      break;
> > +  }
> > +
> > +  DEBUG ((DEBUG_INFO, "FPGA:  V%x.%x\nPCBA:  V%x.0\n",
> > +              FPGA_READ(FpgaVersionMajor),
> > +              FPGA_READ(FpgaVersionMinor),
> > +              FPGA_READ(PcbaVersion)));
> > +
> > +  DEBUG ((DEBUG_INFO, "SERDES Reference Clocks:\n"));
> > +
> > +  Sd1RefClkSel = FPGA_READ(Sd1RefClkSel);  DEBUG((DEBUG_INFO,
> > + "SD1_CLK1 = %a, SD1_CLK2 = %a\n",
> > +              Sd1RefClkSel ? SERDES_FREQ2 : SERDES_FREQ1,
> > + SERDES_FREQ1));  DEBUG((DEBUG_INFO, "SD2_CLK1 = %a, SD2_CLK2 =
> %a\n",
> > +              SERDES_FREQ1, SERDES_FREQ1));
> > +
> > +  return;
> > +}
> > diff --git a/Platform/NXP/LS1046aRdbPkg/Library/FpgaLib/FpgaLib.inf
> > b/Platform/NXP/LS1046aRdbPkg/Library/FpgaLib/FpgaLib.inf
> > new file mode 100644
> > index 0000000..afc41e3
> > --- /dev/null
> > +++ b/Platform/NXP/LS1046aRdbPkg/Library/FpgaLib/FpgaLib.inf
> > @@ -0,0 +1,32 @@
> > +#  @FpgaLib.inf
> > +#
> > +#  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 #
> > +https://emea01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fope
> > +nsource.org%2Flicenses%2Fbsd-
> license.php&data=02%7C01%7Cmeenakshi.agg
> >
> +arwal%40nxp.com%7C5d08c304527946a5bf8908d5a6040dc0%7C686ea1d3bc
> 2b4c6f
> >
> +a92cd99c5c301635%7C0%7C0%7C636597458708526882&sdata=%2FFRG6Itp%
> 2B23zi
> > +FZzr8QqfiGX7IImR8L6QjjTL2R%2Fgpw%3D&reserved=0
> > +#
> > +#  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                    = 0x0001000A
> > +  BASE_NAME                      = FpgaLib
> > +  FILE_GUID                      = 6e06ebbf-3a1d-47be-b4f6-1d82f2a9ac73
> > +  MODULE_TYPE                    = BASE
> > +  VERSION_STRING                 = 1.0
> > +  LIBRARY_CLASS                  = FpgaLib
> > +
> > +[Sources.common]
> > +  FpgaLib.c
> > +
> > +[Packages]
> > +  MdePkg/MdePkg.dec
> > +  Platform/NXP/LS1046aRdbPkg/LS1046aRdbPkg.dec
> > +  Silicon/NXP/NxpQoriqLs.dec
> > +
> > +[LibraryClasses]
> > +  BaseLib
> > +  IoLib
> > --
> > 1.9.1
> >
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to