| /* $NoKeywords:$ */ |
| /** |
| * @file |
| * |
| * mf2DRdWrTraining.h |
| * |
| * Common Definitions ot support 2D Read/Write Training |
| * |
| * @xrefitem bom "File Content Label" "Release Content" |
| * @e project: AGESA |
| * @e sub-project: (Mem/Feat/2DRdWrTraining) |
| * @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 _MFRDWR2DTRAINING_H_ |
| #define _MFRDWR2DTRAINING_H_ |
| |
| /*---------------------------------------------------------------------------- |
| * Mixed (DEFINITIONS AND MACROS / TYPEDEFS, STRUCTURES, ENUMS) |
| * |
| *---------------------------------------------------------------------------- |
| */ |
| #define MAX_2D_VREF_ENTRIES 0x20 ///< Maximum number of vref entries |
| #define MAX_RD_WR_DLY_ENTRIES 0x40 ///< Maximum number of RD/WR Delay Entries |
| #define VREF_ADDITIONAL_STEP_SIZE 0x0 ///< Vref Additional Step size |
| #define RDDQS_ADDITIONAL_STEP_SIZE 0x0 ///< RdDqs Additional Step size |
| #define MAX_2D_RD_SEED_COUNT 4 ///< Max Seed count |
| #define MAX_2D_RD_WR_CS_PER_CHANNEL 8 ///< Max CS per Rd Wr delay group |
| |
| #define EYERIM_PARALLEL_SAMPLING TRUE |
| #define EYERIM_BROADCAST_DELAYS TRUE |
| |
| /// Structure for RD DQS 2D training RDDQS delays. |
| typedef struct { |
| UINT32 PosRdWrDly; ///< Positive RdDQS Delay |
| UINT32 NegRdWrDly; ///< Negative RdDQS Delay |
| } RD_WR_2D; |
| |
| /// Structure for RD DQS 2D training Vref delays |
| typedef struct { |
| RD_WR_2D *Vref; ///< Pointer to Vref Entries |
| UINT16 Convolution[MAX_RD_WR_DLY_ENTRIES]; ///< Total number of passes in each mask |
| UINT8 PosHeight[MAX_RD_WR_DLY_ENTRIES / 2]; ///< Positive Vref height Height per Delay |
| UINT8 NegHeight[MAX_RD_WR_DLY_ENTRIES / 2]; ///< Negative Vref height Height per Delay |
| UINT8 HalfDiamondHeight; ///< Half of the Height per BL (height of pos/neg vref) |
| UINT8 MaxRdWrDly; ///< Max RdWrDly from convolution function |
| } VREF_RD_WR_2D; |
| |
| /// Structure for RD DQS 2D training Nibbles |
| typedef struct { |
| VREF_RD_WR_2D Lane[MAX_NUMBER_LANES]; ///< Bytelane or Nibble |
| UINT8 Vnom; ///< Nominal Vref value |
| UINT8 MaxRdWrSweep; ///< Maximum RdDqs or WrDat Sweep size |
| UINT8 SmallestPosMaxVrefperCS[MAX_2D_RD_WR_CS_PER_CHANNEL]; ///< Smallest Positive Max Vref per CS |
| UINT8 SmallestNegMaxVrefperCS[MAX_2D_RD_WR_CS_PER_CHANNEL]; ///< Smallest Negative Max Vref per CS |
| UINT8 DiamondLeft[MAX_2D_VREF_ENTRIES]; ///< Left edge of Diamond for shape display |
| UINT8 DiamondRight[MAX_2D_VREF_ENTRIES]; ///< Left edge of Diamond for shape display |
| UINT8 RdWrDly; ///< RdDQS or WrDat Dly setting |
| VOID* SavedData; ///< Algorithm-specific saved data |
| } MEM_RD_WR_2D_ENTRY; |
| |
| /// Structure used for RD WR 2D Eye Rim Search Algorithm |
| typedef struct { |
| VREF_RD_WR_2D LaneSaved[MAX_NUMBER_LANES]; ///< Bytelane or Nibble that was saved |
| INT8 xMin; ///< Minimum value for RdDqs delays |
| INT8 xMax; ///< Maximum value for RdDqs delays |
| INT8 yMin; ///< Minimum value for vref delays |
| INT8 yMax; ///< Maximum value for vref delays |
| BOOLEAN ParallelSampling; ///< Flag to indicate parallel sampling feature |
| BOOLEAN BroadcastDelays; ///< Flag to indicate if delays will be broadcast |
| UINT32 SampleCount; ///< Count of samples taken |
| UINT32 VrefUpdates; ///< Count of updates to Vref |
| UINT32 RdWrDlyUpdates; ///< Count of updates to RdWrDly |
| INT8 Dirs[2]; ///< List of directions to search for each axis |
| } MEM_RD_WR_2D_RIM_ENTRY; |
| |
| /*----------------------------------------------------------------------------- |
| * DEFINITIONS AND MACROS |
| * |
| *----------------------------------------------------------------------------- |
| */ |
| BOOLEAN |
| MemFAmdRdWr2DTraining ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| IN OUT VOID* OptParam |
| ); |
| |
| BOOLEAN |
| MemFCheckRdWr2DTrainingPerConfig ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| IN OUT VOID *OptParam |
| ); |
| |
| BOOLEAN |
| MemFRdWr2DProgramIntExtVrefSelect ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| IN OUT VOID *OptParam |
| ); |
| |
| BOOLEAN |
| MemFRdWr2DProgramVref ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| IN VOID *VrefPtr |
| ); |
| |
| BOOLEAN |
| MemFRdWr2DProgramDelays ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| IN VOID *Delay |
| ); |
| |
| VOID |
| MemFRdWr2DStoreResult ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| IN MEM_RD_WR_2D_ENTRY *Data, |
| IN UINT32 InPhaseResult[], |
| IN UINT32 PhaseResult180[] |
| ); |
| |
| BOOLEAN |
| MemFRdWr2DHeight ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| IN MEM_RD_WR_2D_ENTRY *Data |
| ); |
| |
| UINT8 |
| MemFGetRdWr2DWidth ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| IN MEM_RD_WR_2D_ENTRY *Data |
| ); |
| |
| BOOLEAN |
| MemFCheckRdWr2DDiamondMaskStep ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| IN MEM_RD_WR_2D_ENTRY *Data, |
| IN UINT8 Vref, |
| IN UINT8 Lane |
| ); |
| BOOLEAN |
| MemFRdWr2DApplyMask ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| IN MEM_RD_WR_2D_ENTRY *Data |
| ); |
| |
| BOOLEAN |
| MemFRdWr2DProcessConvolution ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| IN MEM_RD_WR_2D_ENTRY *Data |
| ); |
| |
| BOOLEAN |
| MemFRdWr2DProgramMaxDelays ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| IN MEM_RD_WR_2D_ENTRY *Data |
| ); |
| |
| BOOLEAN |
| MemFRdWr2DFindCsVrefMargin ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| IN MEM_RD_WR_2D_ENTRY *Data |
| ); |
| |
| BOOLEAN |
| MemFRdWr2DFinalVrefMargin ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| IN MEM_RD_WR_2D_ENTRY *Data |
| ); |
| |
| UINT8 |
| MemFRdWr2DGetMaxLanes ( |
| IN OUT MEM_NB_BLOCK *NBPtr |
| ); |
| |
| BOOLEAN |
| MemFRdWr2DTrainingInit ( |
| IN OUT MEM_NB_BLOCK *NBPtr |
| ); |
| |
| BOOLEAN |
| MemFRdWr2DEyeRimSearch ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| IN VOID *OptParam |
| ); |
| |
| VOID |
| MemFRdWr2DDisplaySearch ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| IN MEM_RD_WR_2D_ENTRY *Data |
| ); |
| |
| /******************************* |
| * Pattern Generation Functions |
| *******************************/ |
| BOOLEAN |
| MemFRdWr2DCompareInPhase ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| OUT VOID *Result |
| ); |
| |
| BOOLEAN |
| MemFRdWr2DCompare180Phase ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| OUT VOID *Result |
| ); |
| |
| BOOLEAN |
| MemFRdWr2DInitVictim ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| IN OUT VOID *OptParam |
| ); |
| |
| BOOLEAN |
| MemFRdWr2DInitVictimChipSel ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| IN OUT VOID *OptParam |
| ); |
| |
| BOOLEAN |
| MemFRdWr2DStartVictim ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| IN VOID *SeedCountPtr |
| ); |
| |
| BOOLEAN |
| MemFRdWr2DFinalizeVictim ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| IN OUT VOID *OptParam |
| ); |
| |
| BOOLEAN |
| MemFRdWr2DProgramDataPattern ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| IN VOID* PatternIndexPtr |
| ); |
| |
| #endif /* _MFRDWR2DTRAINING_H_ */ |