blob: 897148ccc6e91da100c2b0636a745d90abc5e7d1 [file] [log] [blame]
Frank Vibrans2b4c8312011-02-14 18:30:54 +00001/* $NoKeywords:$ */
2/**
3 * @file
4 *
5 * mt.h
6 *
7 * Common Technology
8 *
9 * @xrefitem bom "File Content Label" "Release Content"
10 * @e project: AGESA
11 * @e sub-project: (Mem)
12 * @e \$Revision: 37555 $ @e \$Date: 2010-09-08 02:17:18 +0800 (Wed, 08 Sep 2010) $
13 *
14 **/
15/*
16 *****************************************************************************
17 *
18 * Copyright (c) 2011, Advanced Micro Devices, Inc.
19 * All rights reserved.
Edward O'Callaghane963b382014-07-06 19:27:14 +100020 *
Frank Vibrans2b4c8312011-02-14 18:30:54 +000021 * Redistribution and use in source and binary forms, with or without
22 * modification, are permitted provided that the following conditions are met:
23 * * Redistributions of source code must retain the above copyright
24 * notice, this list of conditions and the following disclaimer.
25 * * Redistributions in binary form must reproduce the above copyright
26 * notice, this list of conditions and the following disclaimer in the
27 * documentation and/or other materials provided with the distribution.
Edward O'Callaghane963b382014-07-06 19:27:14 +100028 * * Neither the name of Advanced Micro Devices, Inc. nor the names of
29 * its contributors may be used to endorse or promote products derived
Frank Vibrans2b4c8312011-02-14 18:30:54 +000030 * from this software without specific prior written permission.
Edward O'Callaghane963b382014-07-06 19:27:14 +100031 *
Frank Vibrans2b4c8312011-02-14 18:30:54 +000032 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
33 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
34 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
35 * DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY
36 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
37 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
38 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
39 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
40 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
41 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Edward O'Callaghane963b382014-07-06 19:27:14 +100042 *
Frank Vibrans2b4c8312011-02-14 18:30:54 +000043 * ***************************************************************************
44 *
45 */
46
47#ifndef _MT_H_
48#define _MT_H_
49
50/*----------------------------------------------------------------------------
51 * Mixed (DEFINITIONS AND MACROS / TYPEDEFS, STRUCTURES, ENUMS)
52 *
53 *----------------------------------------------------------------------------
54 */
55
56/*-----------------------------------------------------------------------------
57 * DEFINITIONS AND MACROS
58 *
59 *-----------------------------------------------------------------------------
60 */
61
62#define FIRST_PASS 1
63#define SECOND_PASS 2
64#define BIGPAGE_X8_RJ16 0x80
65#define BIGPAGE_X8 0x800000
66#define DQS_FAIL 1
67#define DQS_PASS 0
68#define DQS_WRITE_DIR 1
69#define DQS_READ_DIR 0
70#define MIN_DQS_WNDW 3
71#define ST_UNSTEADY 0
72#define ST_STEADY 1
73#define ST_GROSS_SWEEP 2
74#define ST_FINE_SWEEP 3
75#define ST_FINISH 4
76#define NIBBLE_0 0
77#define NIBBLE_1 1
78
79#define MAX_BYTELANES_PER_CHANNEL (8 + 1) ///< Max Bytelanes per channel
80
81#define MAX_FILTER_DLY_DDR2 0x20
82#define MAX_FILTER_DLY_DDR3 0x28
83
84#define NEW_RECEIVER_START_VALUE 0x4
85#define NEW_RECEIVER_STEP_1 4
86#define NEW_RECEIVER_STEP_2 7
87
88#define NEW_RECEIVER_FINAL_OFFSETVALUE 5
89
90#define DBG_PRINT_STAGE 18 // "Stage"
91#define DBG_PRINT_0_TO_64 23 // "0...64"
92#define DBG_SPACES_4 21 // 4 spaces
93#define DBG_POS_NEW_LINE 11 // New Line for POS training
94#define DBG_WR_DLY 24 // "Write Delay: "
95#define DBG_B_L_R_W_M 22 // " Bytelane Left Right Width Middle"
96#define DBG_RX_EN_NEW_LINE 25 // New Line for Rx En
97#define DBG_RX_EN_STAGE1 6 // "Receiver Enable Training Stage 1:"
98#define DBG_RX_EN_STAGE2 7 // "Receiver Enable Training Stage 2:"
99#define DBG_RX_EN_STAGE3 8 // "Receiver Enable Training Stage 3:"
100#define DBG_DLY_PER_BL 9 // "Dly per BL -"
101#define DBG_A_B_DLY 10 // "ALL BLs have Dly:"
102#define DBG_RCVR_PRT_VALUE 0x0010F // PORT for RX EN training to print a value
103#define DBG_RX_POS_PRT_VALUE 0x0011F // PORT for POS training to print a value
104
105#define DONE_FILTER 0 ///< optimized receiver enable training glitch search complete
106#define START_FILTER 1 ///< optimized receiver enable training start glitch filter search
107#define FILTER_FIRST_STAGE_COUNT 4 ///< optimized receiver enable training glitch filter first stage count
108#define FILTER_SECOND_STAGE_COUNT 7 ///< optimized receiver enable training glitch second stage count
109#define FILTER_OFFSET_VALUE 0x1C ///< optimized receiver enable training glitch filter offset value int preamble
110#define FILTER_WINDOW_SIZE 0x28 ///< optimized receiver enable training glitch filter search window size
111#define FILTER_MAX_REC_EN_DLY_VALUE 0x1FF ///< optimized receiver enable glitch filter max receiver value
112#define FILTER_NEW_RECEIVER_START_VALUE 0x0 ///< optimized receiver enable glitch filter Start value
113
114/*----------------------------------------------------------------------------
115 * TYPEDEFS, STRUCTURES, ENUMS
116 *
117 *----------------------------------------------------------------------------
118 */
119/// List for Technology specific functions that are supported
120typedef enum {
121 WlTrainingPrepareLrdimm, ///< Technology specific tasks to prepare LRDIMMs for Training
122 LrdimmControlRegInit, ///< Technology specific tasks to send control words to initialize an LRDIMM
123 LrdimmFreqChgCtrlWrd, ///< Technology specific tasks to send control words to reprogram LRDIMM's register
124 LrdimmSendAllMRCmds, ///< Technology specific tasks to send all MR commands
125 LrdimmRankMultiplication, ///< Determine Rank Multiplication to be used
126 LrdimmBuf2DramTrain, ///< Perform buffer to DRAM training for LRDIMMs
127 LrdimmSyncTrainedDlys, ///< Copy trained delay of the first rank of a QR LRDIMM to the third rank
128
129 NumberOfTechHooks ///< Size of list
130} TECHNOLOGY_SPECIFIC_FUNC_INDEX;
131
132/// Structure for Technology block.
133typedef struct _MEM_TECH_BLOCK {
134 MEM_NB_BLOCK *NBPtr; ///< point to northbridge block.
135 MEM_PARAMETER_STRUCT *RefPtr; ///< point to parameter list.
136
137 /* Temporary storage */
138 UINT32 HwcrLo; ///< value of HWCR.
139 UINT32 CR4reg; ///< CR4 register value.
140 UINT8 DramEcc; ///< value of Dram ECC bit.
141 UINT8 *TestBufPtr; ///< point to buffer to store read-back data.
142 UINT8 *PatternBufPtr; ///< point to pattern buffer.
143 UINT16 PatternLength; ///< the length of pattern buffer in cache lines.
144 UINT8 Direction; ///< direction during training.
145 UINT8 ChipSel; ///< chip select number.
146 UINT16 MaxDlyForMaxRdLat; ///< Largest possible value for Receiver enable delay.
147 UINT16 PrevSpeed; ///< Previous MemClk frequency
148 TRAINING_TYPE TrainingType; ///< Type of training currently being done
149 UINT8 TargetDIMM; ///< Target DIMM to being trained
150 INT16 WLCriticalDelay; ///< Minimum WL Dly of all byte lanes and all DIMMs
151 UINT8 Bytelane; ///< Bytelane being trained
152 UINT8 TrnNibble; ///< Nibble being trained
153
154
155 UINT8 Pass; ///< current pass of training.
156 UINT16 DqsRdWrPosSaved; ///< for position training byte lane saved flag
157 UINT16 DqsRcvEnSaved; ///< for TrainRcvrEn UINT8 lane saved flag
158 UINT16 DqsRcvEnSavedS1; ///< for TrainRcvrEn UINT8 lane saved flag
159 UINT16 DqsRcvEnFirstPassVal; ///< for TrainRcvrEn UINT8 lane saved flag
160 BOOLEAN GetFirstPassVal; ///< If the first passing value has been found.
161 BOOLEAN RevertPassVal; ///< Flag to restart training during training process when glitch is found.
162 UINT8 MaxFilterDly; ///< Maximum filter delay value for RcvrTraining.
163 UINT16 RcvrEnDlyOpt[MAX_BYTELANES_PER_CHANNEL]; ///< Receiver Enable delay for optimized filter
164 UINT16 MaxRcvrEnDlyBlOpt[MAX_BYTELANES_PER_CHANNEL]; ///< Max Receiver Enable delay for optimized filter
165 UINT16 RcvrEnDlyLimitOpt[MAX_BYTELANES_PER_CHANNEL]; ///< Receiver Enable delay Limit for optimized filter
166 UINT16 FilterStatusOpt[MAX_BYTELANES_PER_CHANNEL]; ///< Filter status to indicate if a ByteLane is "DONE", "SKIP" or "CONTINUE"
167 UINT16 FilterCountOpt; ///< Filter count to indicate the total number of ByteLanes completed
168 BOOLEAN DqsRcvEnSavedOpt[MAX_BYTELANES_PER_CHANNEL]; ///< for optimized TrainRcvrEn lane saved flag
169 UINT16 DqsRcvEnFirstPassValOpt[MAX_BYTELANES_PER_CHANNEL]; ///< for TrainRcvrEn UINT8 lane saved flag for optimized
170 BOOLEAN GetFirstPassValOpt[MAX_BYTELANES_PER_CHANNEL]; ///< If the first passing value has been found for optimized.
171 BOOLEAN RevertPassValOpt[MAX_BYTELANES_PER_CHANNEL]; ///< Flag to restart training during training process when glitch is found for optimized.
172 UINT8 MaxFilterDlyBlOpt[MAX_BYTELANES_PER_CHANNEL]; ///< Maximum filter delay value for RcvrTraining for optimized.
173 BOOLEAN IncBy1ForNextCountOpt[MAX_BYTELANES_PER_CHANNEL]; ///< Used to determine when to increment by 1 in second stage of opt. rec. en. training
174 UINT8 FilterSidePassCountOpt[MAX_BYTELANES_PER_CHANNEL]; ///< Indicates that previous side passed
175 UINT16 DiffSeedGrossSeedPreGross[MAX_BYTELANES_PER_CHANNEL]; ///< Gross difference between GrossSeed and SeedPreGross for HwRxEn Training.
176 UINT16 PrevPassRcvEnDly[MAX_BYTELANES_PER_CHANNEL]; ///< Receiver Enable Delay value from the previous pass
177 BOOLEAN SmallDqsPosWindow; ///< Status flag to record small DQS position window event
178 UINT8 WlNibbleDly[MAX_BYTELANES_PER_CHANNEL]; ///< Nibble based trainig results for Nibble 0 of Write Levelization
179 UINT16 WlNibble0Seed[MAX_BYTELANES_PER_CHANNEL]; ///< Nibble based trainig seed value for Nibble 0 Write Levelization
180 UINT8 RxEnNibbleDly[MAX_BYTELANES_PER_CHANNEL]; ///< Nibble based trainig results for Nibble 0 of Rx En training
181
182 /* PUBLIC functions */
183 VOID (*SendAllMRCmds) (struct _MEM_TECH_BLOCK *TechPtr, UINT8 ChipSel); ///< Send MRS command.
184 VOID (*FreqChgCtrlWrd) (struct _MEM_TECH_BLOCK *TechPtr); ///< Frequency change control word.
185 BOOLEAN (*SetDramMode) (struct _MEM_TECH_BLOCK *TechPtr); ///< Set dram mode (DDR2 or DDR3).
186 BOOLEAN (*DimmPresence) (struct _MEM_TECH_BLOCK *TechPtr); ///< determines if DIMMs present.
187 BOOLEAN (*SpdCalcWidth) (struct _MEM_TECH_BLOCK *TechPtr); ///< check the symmetry of DIMM pairs.
188 BOOLEAN (*SpdGetTargetSpeed) (struct _MEM_TECH_BLOCK *TechPtr); ///< get supported frequency.
189 BOOLEAN (*AutoCycTiming) (struct _MEM_TECH_BLOCK *TechPtr); ///< configure timing based on spd data.
190 BOOLEAN (*SpdSetBanks) (struct _MEM_TECH_BLOCK *TechPtr); ///< set bank address.
191 BOOLEAN (*SetDqsEccTmgs) (struct _MEM_TECH_BLOCK *TechPtr); ///< DQS training.
192 VOID (*GetCSIntLvAddr) (UINT8 BankEnc, UINT8 *LowBit, UINT8 *HiBit); ///< Get Chip select interleave address.
193 VOID (*AdjustTwrwr) (struct _MEM_TECH_BLOCK *TechPtr); ///< Adjust Twrwr for certain dimm technology.
194 VOID (*AdjustTwrrd) (struct _MEM_TECH_BLOCK *TechPtr); ///< Adjust Twrrd for certain dimm technology.
195 INT8 (*GetLD) (struct _MEM_TECH_BLOCK *TechPtr); ///< Get LD value for certain dimm technology.
196 VOID (*DramInit) (struct _MEM_TECH_BLOCK *TechPtr); ///< dram initialization.
197
198 /* PRIVATE functions */
199 VOID (*InitDQSPos4RcvrEn) (struct _MEM_TECH_BLOCK *TechPtr); ///< Initialize training register before training.
200 VOID (*SetRcvrEnDly) (struct _MEM_TECH_BLOCK *TechPtr, UINT8 Receiver, UINT16 RcvEnDly); ///< Set receiver enable delay register value.
201 VOID (*LoadRcvrEnDly) (struct _MEM_TECH_BLOCK *TechPtr, UINT8 Receiver); ///< Load receiver enable delay register value.
202 BOOLEAN (*SaveRcvrEnDly) (struct _MEM_TECH_BLOCK *TechPtr, UINT8 Receiver, UINT16 RcvEnDly, UINT16 cmpResultRank0, UINT16 cmpResultRank1); ///< Save receiver enable delay register value.
203 BOOLEAN (*SaveRcvrEnDlyFilter) (struct _MEM_TECH_BLOCK *TechPtr, UINT8 Receiver, UINT16 RcvEnDly, UINT16 cmpResultRank0, UINT16 cmpResultRank1); ///< saves passing DqsRcvEnDly values to the stack.
204 VOID (*ResetDCTWrPtr) (struct _MEM_TECH_BLOCK *TechPtr, UINT8 Receiver); ///< resets the DCT input buffer write pointer.
205 UINT16 (*Compare1ClPattern) (struct _MEM_TECH_BLOCK *TechPtr, UINT8 Buffer[], UINT8 Pattern[]); ///< Compare training pattern of 1 cache line.
206 VOID (*SkipChipSelPass1) (struct _MEM_TECH_BLOCK *TechPtr, UINT8 *ChipSel); ///< skips odd chip select if training at 800MT or above.
207 VOID (*SkipChipSelPass2) (struct _MEM_TECH_BLOCK *TechPtr, UINT8 *ChipSel); ///< skips odd chip select if training at 800MT or above.
208 UINT16 (*CompareTestPatternFilter) (struct _MEM_TECH_BLOCK *TechPtr, UINT8 Buffer[], UINT8 Pattern[], UINT16 ByteCount); ///< compare training pattern with filter.
Frank Vibransccad9512011-05-05 16:49:11 +0000209 UINT8 (*MaxByteLanes) (VOID); ///< return maximum number of bytelanes.
Frank Vibrans2b4c8312011-02-14 18:30:54 +0000210 VOID (*SetDQSDelayCSR) (struct _MEM_TECH_BLOCK *TechPtr, UINT8 ByteLane, UINT8 Dly); ///< Set CSR.
211 VOID (*DQSWindowSave) (struct _MEM_TECH_BLOCK *TechPtr, UINT8 ByteLane, UINT8 DlyMin, UINT8 DlyMax); ///< programs the trained DQS delay for the specified byte lane and stores its DQS window for reference.
212 BOOLEAN (*FindMaxDlyForMaxRdLat) (struct _MEM_TECH_BLOCK *TechPtr, UINT8 *ChipSel); ///< Find maximum receiver enable delay value.
Frank Vibransccad9512011-05-05 16:49:11 +0000213 UINT8 (*DlyTableWidth) (VOID); ///< return the width of the delay tables (eg. RcvEnDlys, WrDqsDlys,...) in number of bytes.
Frank Vibrans2b4c8312011-02-14 18:30:54 +0000214 UINT16 (*Compare1ClPatternOpt) (struct _MEM_TECH_BLOCK *TechPtr, UINT8 Buffer[], UINT8 Pattern[], UINT8 Side, UINT8 Receiver, BOOLEAN Side1En); ///< Compare training pattern of 1 cache line.
215 VOID (*LoadRcvrEnDlyOpt) (struct _MEM_TECH_BLOCK *TechPtr, UINT8 Receiver); ///< Load receiver enable delay register value.
216 VOID (*SetRcvrEnDlyOpt) (struct _MEM_TECH_BLOCK *TechPtr, UINT8 Receiver, UINT16 RcvEnDly); ///< Set receiver enable delay register value.
217 BOOLEAN (*CheckRcvrEnDlyLimitOpt) (struct _MEM_TECH_BLOCK *TechPtr); ///< Find limit for all bytelanes
218 UINT16 (*GetMaxValueOpt) (struct _MEM_TECH_BLOCK *TechPtr); ///< Returns the max value of all bytelanes
219 VOID (*InitializeVariablesOpt) (struct _MEM_TECH_BLOCK *TechPtr); ///< Initialized variables for optimized training
220 BOOLEAN (*SetSweepErrorOpt)(struct _MEM_TECH_BLOCK *TechPtr, UINT8 Receiver, UINT8 DCT, BOOLEAN ErrorCheck); ///< records any errors generated from optimized sweep
221 VOID (*LoadInitialRcvrEnDlyOpt) (struct _MEM_TECH_BLOCK *TechPtr, UINT8 Receiver); ///< Load the starting value for receiver DQS training.
222 BOOLEAN (*GetDimmSpdBuffer) (struct _MEM_TECH_BLOCK *TechPtr, UINT8 **SpdBuffer, UINT8 Dimm); ///< Gets pointer to spd buffer for a dimm on the current channel, if present
223
224 /* Technology Specific Hooks */
225 BOOLEAN (*(TechnologySpecificHook[NumberOfTechHooks])) (struct _MEM_TECH_BLOCK *TechPtr, VOID *OptParam); ///< Technology specific functions
226} MEM_TECH_BLOCK;
227
228/*----------------------------------------------------------------------------
229 * FUNCTIONS PROTOTYPE
230 *
231 *----------------------------------------------------------------------------
232 */
233
234VOID
235MemTDimmByteTrainInit (
236 IN OUT MEM_TECH_BLOCK *TechPtr
237 );
238
239BOOLEAN
240MemTTrainMaxLatency (
241 IN OUT MEM_TECH_BLOCK *TechPtr
242 );
243
244BOOLEAN
245MemTSetDQSEccTmgs (
246 IN OUT MEM_TECH_BLOCK *TechPtr
247 );
248
249BOOLEAN
250MemTSetDQSEccTmgsRDdr3 (
251 IN OUT MEM_TECH_BLOCK *TechPtr
252 );
253
254BOOLEAN
255MemTTrainRcvrEnSwPass1 (
256 IN OUT MEM_TECH_BLOCK *TechPtr
257 );
258
259BOOLEAN
260MemTTrainDQSEdgeDetectSw (
261 IN OUT MEM_TECH_BLOCK *TechPtr
262 );
263BOOLEAN
264MemTDramInitSw3 (
265 IN OUT MEM_TECH_BLOCK *TechPtr
266 );
267VOID
268MemTDramInitHw (
269 IN OUT MEM_TECH_BLOCK *TechPtr
270 );
271BOOLEAN
272MemTFeatDef (
273 IN OUT MEM_TECH_BLOCK *TechPtr
274 );
275BOOLEAN
276MemTSaveRcvrEnDlyByteFilter (
277 IN OUT MEM_TECH_BLOCK *TechPtr,
278 IN UINT8 Receiver,
279 IN UINT16 RcvEnDly,
280 IN UINT16 CmpResultRank0,
281 IN UINT16 CmpResultRank1
282 );
283
284BOOLEAN
285MemTSaveRcvrEnDlyByteFilterOpt (
286 IN OUT MEM_TECH_BLOCK *TechPtr,
287 IN UINT8 Receiver,
288 IN UINT16 RcvEnDly,
289 IN UINT16 CmpResultRank0,
290 IN UINT16 CmpResultRank1
291 );
292
293BOOLEAN
294MemTNewRevTrainingSupport (
295 IN OUT MEM_TECH_BLOCK *TechPtr
296 );
297
298BOOLEAN
299MemTTrainOptRcvrEnSwPass1 (
300 IN OUT MEM_TECH_BLOCK *TechPtr
301 );
302
303BOOLEAN
304MemTWriteLevelizationHw3Pass1 (
305 IN OUT MEM_TECH_BLOCK *TechPtr
306 );
307
308BOOLEAN
309MemTWriteLevelizationHw3Pass2 (
310 IN OUT MEM_TECH_BLOCK *TechPtr
311 );
312
313BOOLEAN
314MemTPreparePhyAssistedTraining (
315 IN OUT MEM_TECH_BLOCK *TechPtr
316 );
317
318BOOLEAN
319MemTExitPhyAssistedTraining (
320 IN OUT MEM_TECH_BLOCK *TechPtr
321 );
322
323BOOLEAN
324MemTDqsTrainRcvrEnHwPass1 (
325 IN OUT MEM_TECH_BLOCK *TechPtr
326 );
327
328BOOLEAN
329MemTDqsTrainRcvrEnHwPass2 (
330 IN OUT MEM_TECH_BLOCK *TechPtr
331 );
332
333VOID
334MemRecTSetWrDatRdDqs (
335 IN OUT MEM_TECH_BLOCK *TechPtr,
336 IN UINT8 WrDatDly
337 );
338
339VOID
340MemRecTTrainDQSPosSw (
341 IN OUT MEM_TECH_BLOCK *TechPtr
342 );
343
344VOID
345MemRecTTrainRcvrEnSw (
346 IN OUT MEM_TECH_BLOCK *TechPtr
347 );
348
349VOID
350MemRecTTrainRcvrEnHw (
351 IN OUT MEM_TECH_BLOCK *TechPtr
352 );
353
354VOID
355MemRecTBeginTraining (
356 IN OUT MEM_TECH_BLOCK *TechPtr
357 );
358
359VOID
360MemRecTEndTraining (
361 IN OUT MEM_TECH_BLOCK *TechPtr
362 );
363
364BOOLEAN
365MemTSetSweepErrorOptByte (
366 IN OUT MEM_TECH_BLOCK *TechPtr,
367 IN UINT8 Receiver,
368 IN UINT8 Dct,
369 IN BOOLEAN ErrorCheck
370 );
371
372VOID
373MemTInitializeVariablesOptByte (
374 IN OUT MEM_TECH_BLOCK *TechPtr
375 );
376
377UINT16
378MemTGetMaxValueOptByte (
379 IN OUT MEM_TECH_BLOCK *TechPtr
380 );
381
382BOOLEAN
383MemTCheckRcvrEnDlyLimitOptByte (
384 IN OUT MEM_TECH_BLOCK *TechPtr
385 );
386
387VOID
388MemTMarkTrainFail (
389 IN OUT MEM_TECH_BLOCK *TechPtr
390);
391
392VOID
393MemTBeginTraining (
394 IN OUT MEM_TECH_BLOCK *TechPtr
395 );
396
397VOID
398MemTEndTraining (
399 IN OUT MEM_TECH_BLOCK *TechPtr
400 );
401
402VOID
403MemTSetDQSDelayAllCSR (
404 IN OUT MEM_TECH_BLOCK *TechPtr,
405 IN UINT8 Dly
406 );
407
408BOOLEAN
409MemTExitPhyAssistedTrainingClient3 (
410 IN OUT MEM_TECH_BLOCK *TechPtr
411 );
412
413BOOLEAN
414MemTFindMaxRcvrEnDlyRdDqsDlyByte (
415 IN OUT MEM_TECH_BLOCK *TechPtr,
416 OUT UINT8 *ChipSel
417 );
418
419VOID
420MemTSendCtlWord3 (
421 IN OUT MEM_TECH_BLOCK *TechPtr,
422 IN UINT8 CmdNum,
423 IN UINT8 Value
424 );
425
426VOID
427MemTCommonTechInit (
428 IN OUT MEM_TECH_BLOCK *TechPtr
429 );
430
431BOOLEAN
432MemTLrdimmConstructor3 (
433 IN OUT MEM_TECH_BLOCK *TechPtr
434 );
435#endif /* _MT_H_ */