On Wed, Nov 28, 2018 at 08:31:28PM +0530, Meenakshi Aggarwal wrote: > FpgaLib export FPGA_READ and FPGA_WRITE function and > provide a function to print Board personality. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Meenakshi Aggarwal <meenakshi.aggar...@nxp.com> > --- > Silicon/NXP/Include/Library/FpgaLib.h | 97 +++++++++++++++++++++ > Silicon/NXP/Library/FpgaLib/FpgaLib.c | 145 > ++++++++++++++++++++++++++++++++ > Silicon/NXP/Library/FpgaLib/FpgaLib.inf | 34 ++++++++
Moving this library up to a more "generic" level than in previous submission (which is a good thing!), could you add Nxp/Qoriq in file/directory/library names? > 3 files changed, 276 insertions(+) > create mode 100644 Silicon/NXP/Include/Library/FpgaLib.h > create mode 100644 Silicon/NXP/Library/FpgaLib/FpgaLib.c > create mode 100644 Silicon/NXP/Library/FpgaLib/FpgaLib.inf > > diff --git a/Silicon/NXP/Include/Library/FpgaLib.h > b/Silicon/NXP/Include/Library/FpgaLib.h > new file mode 100644 > index 0000000..847689c > --- /dev/null > +++ b/Silicon/NXP/Include/Library/FpgaLib.h > @@ -0,0 +1,97 @@ > +/** FpgaLib.h > +* Header defining the 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 > +* 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 __LS1_FPGA_H__ > +#define __LS1_FPGA_H__ NXP/QORIQ in include guard? > + > +/* > + * FPGA register set of board. > + */ > +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 2 */ > + 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 ( Nxp/Qoriq in function names? > + 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) NXP/QORIQ and Nxp/Qoriq on the above too. > + > +#endif Include guard comment, please. > diff --git a/Silicon/NXP/Library/FpgaLib/FpgaLib.c > b/Silicon/NXP/Library/FpgaLib/FpgaLib.c > new file mode 100644 > index 0000000..93e9a90 > --- /dev/null > +++ b/Silicon/NXP/Library/FpgaLib/FpgaLib.c > @@ -0,0 +1,145 @@ > +/** @FpgaLib.c > + Fpga Library 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 > + 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 <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)); > + if (PcdGetBool (PcdSerdes2Enabled)) { > + DEBUG ((DEBUG_INFO, "SD2_CLK1 = %a, SD2_CLK2 = %a\n", > + SERDES_FREQ1, SERDES_FREQ1)); > + } > + > + return; > +} > diff --git a/Silicon/NXP/Library/FpgaLib/FpgaLib.inf > b/Silicon/NXP/Library/FpgaLib/FpgaLib.inf > new file mode 100644 > index 0000000..c6c23ad > --- /dev/null > +++ b/Silicon/NXP/Library/FpgaLib/FpgaLib.inf > @@ -0,0 +1,34 @@ > +# @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 > +# 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 = 0x0001000A 1A / Leif > + BASE_NAME = FpgaLib > + FILE_GUID = 5962d040-8b8a-11df-9a71-0002a5d5c51b > + MODULE_TYPE = BASE > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = FpgaLib > + > +[Sources.common] > + FpgaLib.c > + > +[Packages] > + MdePkg/MdePkg.dec > + Platform/NXP/LS1043aRdbPkg/LS1043aRdbPkg.dec > + Silicon/NXP/NxpQoriqLs.dec > + > +[LibraryClasses] > + BaseLib > + IoLib > + > +[Pcd] > + gNxpQoriqLsTokenSpaceGuid.PcdSerdes2Enabled > -- > 1.9.1 > _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel