aboutsummaryrefslogtreecommitdiff
path: root/src/vendorcode/amd/agesa/f16kb/Proc/Mem/mnpmu.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/vendorcode/amd/agesa/f16kb/Proc/Mem/mnpmu.h')
-rw-r--r--src/vendorcode/amd/agesa/f16kb/Proc/Mem/mnpmu.h242
1 files changed, 242 insertions, 0 deletions
diff --git a/src/vendorcode/amd/agesa/f16kb/Proc/Mem/mnpmu.h b/src/vendorcode/amd/agesa/f16kb/Proc/Mem/mnpmu.h
new file mode 100644
index 0000000000..2f26c62d10
--- /dev/null
+++ b/src/vendorcode/amd/agesa/f16kb/Proc/Mem/mnpmu.h
@@ -0,0 +1,242 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * mnpmu.h
+ *
+ * Definitions for PMU support
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: (Mem)
+ * @e \$Revision: 84150 $ @e \$Date: 2012-12-12 15:46:25 -0600 (Wed, 12 Dec 2012) $
+ *
+ **/
+/*****************************************************************************
+ *
+ * Copyright (c) 2008 - 2013, Advanced Micro Devices, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of Advanced Micro Devices, Inc. nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ***************************************************************************
+ *
+ */
+
+#ifndef _MNPMU_H_
+#define _MNPMU_H_
+
+/*----------------------------------------------------------------------------
+ * Mixed (DEFINITIONS AND MACROS / TYPEDEFS, STRUCTURES, ENUMS)
+ *
+ *----------------------------------------------------------------------------
+ */
+
+/// PMU Firmware Set
+/// PMU firmware can be fragmented. This structure is a set of all fragmented firmware for one run.
+typedef struct {
+ UINT16 SramBaseAddr; ///< SRAM base address
+ UINT16 *ImagePtr; ///< Pointer to firmware image
+ UINT16 ImageSize; ///< Size of firmware image
+} PMU_FIRMWARE_SET;
+
+/*-----------------------------------------------------------------------------
+ * DEFINITIONS AND MACROS
+ *
+ *-----------------------------------------------------------------------------
+ */
+
+//
+// Upstream mailbox 1 messages
+//
+#define USMSG_DEVINIT 0x00 ///< PMU has completed DevInit
+#define USMSG_TRAINWRLVL 0x01 ///< PMU has completed TSTAGE_WrLvl
+#define USMSG_TRAINRXEN 0x02 ///< PMU has completed TSTAGE_RxEn
+#define USMSG_TRAINRDDQS1D 0x03 ///< PMU has completed TSTAGE_TrainRdDqs1D
+#define USMSG_TRAINWRDQ1D 0x04 ///< PMU has completed TSTAGE_TrainWrDq1D
+#define USMSG_TRAINRD2D 0x05 ///< PMU has completed TSTAGE_TrainRd2D
+#define USMSG_TRAINWR2D 0x06 ///< PMU has completed TSTAGE_TrainWr2D
+#define USMSG_PMUQEMPTY 0x07 ///< PMU has completed all of its SequenceCtl tasks and is in a powergated idle state
+#define USMSG_US2MSGRDY 0x08 ///< PMU is ready to stream a message through US mailbox 2
+#define USMSG_FAIL 0xFF ///< PMU has encountered an error which requires requester to abort waiting for remaining pending upstream messages
+
+/*----------------------------------------------------------------------------
+ * TYPEDEFS, STRUCTURES, ENUMS
+ *
+ *----------------------------------------------------------------------------
+ */
+/// Fields on PMU SRAM
+typedef enum {
+ PmuSRAMRangeStart = RegIdLimit, ///< -------------------------- Start of PMU SRAM range
+
+ // DDR3 SRAM message block
+ PmuRevision, ///< Revision Table revision
+ PmuCpuId, ///< CpuId 32-bit CPUID
+ PmuCpuIdHi, ///< CpuId 32-bit CPUID
+ PmuDramType, ///< DramType
+ PmuModuleType, ///< ModuleType
+ PmuRawCard0, ///< RawCard0
+ PmuRawCard1, ///< RawCard1
+ PmuRawCard2, ///< RawCard2
+ PmuRawCard3, ///< RawCard3
+ PmuChipSelect, ///< ChipSelect Specifies which chipselects are present and should be trained. Bit 0 is chip select 0, Bit 1 is
+ ///< chip,select 1, etc. IF Gddr5Mode then ChipSelect[7:1] are ignored.
+ PmuAddrMirror, ///< AddrMirror For each chipselect, specifies which chipselects have address mirroring (BA0 swapped with BA1,
+ ///< A3,swapped with A4, A5 swapped with A6, A7 swapped with A8). This field is used in Ddr3Mode.
+ PmuDimm0Cols, ///< Dimm0Cols Number of device column address bits for Dimm0.
+ PmuDimm1Cols, ///< Dimm1Cols Number of device column address bits for Dimm1.
+ PmuDimm2Cols, ///< Dimm2Cols Number of device column address bits for Dimm2.
+ PmuDimm3Cols, ///< Dimm3Cols Number of device column address bits for Dimm3.
+ PmuDimm0Banks, ///< Dimm0Banks Number of device bank address bits for Dimm0.
+ PmuDimm1Banks, ///< Dimm1Banks Number of device bank address bits for Dimm1.
+ PmuDimm2Banks, ///< Dimm2Banks Number of device bank address bits for Dimm2.
+ PmuDimm3Banks, ///< Dimm3Banks Number of device bank address bits for Dimm3.
+ PmuDimm0Rows, ///< Dimm0Rows Number of device row address bits for Dimm0.
+ PmuDimm1Rows, ///< Dimm1Rows Number of device row address bits for Dimm1.
+ PmuDimm2Rows, ///< Dimm2Rows Number of device row address bits for Dimm2.
+ PmuDimm3Rows, ///< Dimm3Rows Number of device row address bits for Dimm3.
+ PmuPerRankTiming, ///< PerRankTiming 1=The channel is configured to use four timing sources for four independent chipselects. 0=The
+ ///< channel,is configured to use four timing sources for four pairs of chipselects (logical DIMMs).
+ PmuCurrentTemp, ///< CurrentTemp 11-bit temperature in degrees C, with -49C offset, in 0.125C increments, unsigned. See
+ ///< D18F5xA8_x383[GblMaxTemp] in,TN BKDG
+ PmuSequenceCtl, ///< SequenceCtl PMU Sequence Control Word
+ ///< [0] 1=DevInit
+ ///< [1] 1=RxEnDly,Training
+ ///< [2] 1=1D,Rd-Dqs Training
+ ///< [3] 1=1D,Wr-Dq Training
+ ///< [4] 1=2D,Read Training
+ ///< [5] 1=2D,Write Training
+ ///< [15:6] Reserved
+ PmuHdtCtl, ///< HdtCtl
+ PmuCkeSetup, ///< CkeSetup
+ PmuCsOdtSetup, ///< CsOdtSetup
+ PmuAddrCmdSetup, ///< AddrCmdSetup
+ PmuSlowAccessMode, ///< SlowAccessMode SlowAccessMode
+ PmutRP, ///< tRP In units of memclocks. See D18F2x200_dct[3:0]_mp[1:0][Trp] for definition.
+ PmutMRD, ///< tMRD In units of memclocks. See D18F2x220_dct[3:0][Tmrd] for definition.
+ PmutRFC, ///< tRFC In units of memclocks. The maximum value for all DIMMs. See D18F2x208_dct[3:0][Trfc].
+ PmuMR0, ///< MR0
+ PmuMR1, ///< MR1
+ PmuMR2, ///< MR2
+ PmuCD_R_W, ///< CD_R_W Command delay, read to write, any chip select to any other chipselect. Units are memclocks, unsigned integer.
+ PmuCD_R_R, ///< CD_R_R Command delay, read to read, any chip select to any other chipselect. Units are memclocks, unsigned integer.
+ PmuCD_W_W, ///< CD_W_W Command delay, write to write, any chip select to any other chipselect. Units are memclocks, unsigned integer.
+ PmuCD_W_R, ///< CD_W_R Command delay, write to read, any chip select to any other chipselect. Units are memclocks, unsigned integer.
+ PmuCD_R_R_SD, ///< CD_R_R_SD Command delay, read to read, any chip select to another chipselect of same DIMM. Units are memclocks, unsigned integer.
+ PmuCD_W_W_SD, ///< CD_W_W_SD Command delay, write to write, any chip select to another chipselect of same DIMM. Units are memclocks, unsigned integer.
+ PmuTrdrdban_Phy, ///< Trdrdban_Phy In memclocks.
+
+ // GDDR5 SRAM message block
+ PmuCh0Dis, ///< Ch0Dis 1=Disable the lower 32-bits. Used for GDDR5 mode only.
+ PmuCh1Dis, ///< Ch1Dis 1=Disable the upper 32-bits. Used for GDDR5 mode only.
+ PmuInitACTerm, ///< InitACTerm 1=Addr/Cmd term is ZQ. Addr/Cmd term is ZQ/2. Used during DevInit1, for GDDR5 mode only.
+ PmuMR3, ///< MR3
+ PmuMR4, ///< MR4
+ PmuMR5, ///< MR5
+ PmuMR6, ///< MR6
+ PmuMR7, ///< MR7
+ PmuMR8, ///< MR8
+ PmuMR15, ///< MR15
+ PmuMRnum, ///< MRnum SendMrs Specifies the MR number for a single MRS command. Write data is one of MR0 to MR15 in this table.
+ ///< is, chip select 1, etc..IF Gddr5Mode then ChipSelect[7:1] are ignored.
+
+ PmuSRAMRangeEnd ///< -------------------------- Start of PMU SRAM range
+} REG_BF_NAME;
+
+/// PMU SRAM field location
+typedef struct {
+ UINT32 LoBit: 6; ///< Low bit of the bit field
+ UINT32 HiBit: 6; ///< High bit of the bit field
+ UINT32 RegOffset: 10; ///< Register that the bit field is on
+ UINT32 Reserved: 9; ///< Reserved
+ UINT32 Linked: 1; ///< 1: The bit field has high bits defined in the very next Bf identifier
+ ///< 0: The bit field has no further extension
+} PMU_SRAM_ADDR;
+
+/**
+ PMU_SRAM (TableName, BfIndex, RegOffset, Hi, Lo)
+
+ @param[in] TableName
+ @param[in] BfIndex
+ @param[in] RegOffset
+ @param[in] Hi
+ @param[in] Lo
+
+ @return PMU_SRAM Encrypted PMU SRAM field location
+--*/
+#define PMU_SRAM(TableName, BfIndex, RegOffset, Hi, Lo) \
+ TableName[BfIndex] = ( \
+ ((UINT32) RegOffset << 12) | ( \
+ (Hi > Lo) ? (\
+ (((UINT32) Hi << 6) | (UINT32) Lo) \
+ ) : ( \
+ (((UINT32) Lo << 6) | (UINT32) Hi) \
+ ) \
+ ) \
+ )
+
+/*----------------------------------------------------------------------------
+ * FUNCTIONS PROTOTYPE
+ *
+ *----------------------------------------------------------------------------
+ */
+VOID
+MemNPmuResetNb (
+ IN OUT MEM_NB_BLOCK *NBPtr
+ );
+
+VOID
+MemNLoadPmuFirmwareNb (
+ IN OUT MEM_NB_BLOCK *NBPtr,
+ IN PMU_FIRMWARE_SET *FirmwareSet,
+ IN UINT16 NumberOfEntries
+ );
+
+VOID
+MemNStartPmuNb (
+ IN OUT MEM_NB_BLOCK *NBPtr
+ );
+
+BOOLEAN
+MemNPendOnPmuCompletionNb (
+ IN OUT MEM_NB_BLOCK *NBPtr
+ );
+
+UINT32
+MemNCalcMR0 (
+ IN OUT MEM_NB_BLOCK *NBPtr
+ );
+
+UINT32
+MemNCalcMR1 (
+ IN OUT MEM_NB_BLOCK *NBPtr,
+ IN UINT8 ChipSel
+ );
+
+UINT32
+MemNCalcMR2 (
+ IN OUT MEM_NB_BLOCK *NBPtr,
+ IN UINT8 ChipSel
+ );
+
+#endif /* _MNPMU_H_ */
+