AGESA F15: AMD family15 AGESA code
[coreboot.git] / src / vendorcode / amd / agesa / f15 / Proc / Mem / Tech / mttEdgeDetect.h
1 /* $NoKeywords:$ */
2 /**
3  * @file
4  *
5  * mttEdgeDetect.h
6  *
7  * Technology Common Training Header file
8  *
9  * @xrefitem bom "File Content Label" "Release Content"
10  * @e project: AGESA
11  * @e sub-project: (Mem)
12  * @e \$Revision: 44324 $ @e \$Date: 2010-12-22 02:16:51 -0700 (Wed, 22 Dec 2010) $
13  *
14  **/
15 /*****************************************************************************
16   *
17  * Copyright (C) 2012 Advanced Micro Devices, Inc.
18  * All rights reserved.
19  *
20  * Redistribution and use in source and binary forms, with or without
21  * modification, are permitted provided that the following conditions are met:
22  *     * Redistributions of source code must retain the above copyright
23  *       notice, this list of conditions and the following disclaimer.
24  *     * Redistributions in binary form must reproduce the above copyright
25  *       notice, this list of conditions and the following disclaimer in the
26  *       documentation and/or other materials provided with the distribution.
27  *     * Neither the name of Advanced Micro Devices, Inc. nor the names of
28  *       its contributors may be used to endorse or promote products derived
29  *       from this software without specific prior written permission.
30  *
31  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
32  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
33  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
34  * DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY
35  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
36  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
37  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
38  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
39  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
40  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
41   *
42   * ***************************************************************************
43   *
44  */
45
46 #ifndef _MTTEDGEDETECT_H_
47 #define _MTTEDGEDETECT_H_
48
49 /*----------------------------------------------------------------------------
50  *   Mixed (DEFINITIONS AND MACROS / TYPEDEFS, STRUCTURES, ENUMS)
51  *
52  *----------------------------------------------------------------------------
53  */
54
55 /*-----------------------------------------------------------------------------
56  *                         DEFINITIONS AND MACROS
57  *
58  *-----------------------------------------------------------------------------
59  */
60
61
62 #define SCAN_LEFT       0            ///<  Scan Down
63 #define SCAN_RIGHT      1            ///<  Scan Up
64 #define LEFT_EDGE       0            ///<  searching for the left edge
65 #define RIGHT_EDGE      1            ///<  searching for the right edge
66
67 #define SweepStages     4
68 #define TRN_DELAY_MAX   31           ///<  Max Virtual delay value for DQS Position Training
69
70 /*----------------------------------------------------------------------------
71  *                         TYPEDEFS, STRUCTURES, ENUMS
72  *
73  *----------------------------------------------------------------------------
74  */
75
76 /**
77  *  Sweep Table Structure. ROM based table defining parameters for DQS position
78  *  training delay sweep.
79 */
80 typedef struct {
81   INT8    BeginDelay;          ///<  Starting Delay Value
82   INT8    EndDelay;            ///<  Ending Delay Value
83   BOOLEAN ScanDir;             ///<  Scan Direction.  0 = down, 1 = up
84   INT8    Step;                ///<  Amount to increment delay value
85   UINT16  EndResult;           ///<  Result value to stop sweeping (to compare with failure mask)
86   BOOLEAN MinMax;              ///<  Flag indicating lower (left edge) or higher(right edge)
87 } DQS_POS_SWEEP_TABLE;
88
89 /**
90  * Sweep Information Struct - Used to track data through the DQS Delay Sweep
91  *
92 */
93 typedef struct _SWEEP_INFO {
94   BOOLEAN Error;                               ///< Indicates an Error has been found
95   UINT32  TestAddrRJ16[MAX_CS_PER_CHANNEL];    ///< System address of chipselects RJ 16 bits (Addr[47:16])
96   BOOLEAN CsAddrValid[MAX_CS_PER_CHANNEL];     ///< Indicates which chipselects to test
97   INT8    BeginDelay;                          ///< Beginning Delay value (Virtual)
98   INT8    EndDelay;                            ///< Ending Delay value (Virtual)
99   INT8    Step;                                ///< Amount to Inc or Dec Virtual Delay value
100   BOOLEAN Edge;                                ///< Left or right edge (0 = LEFT, 1= RIGHT)
101   UINT16  EndResult;                           ///< Result value that will stop a Dqs Sweep
102   UINT16  InsertionDelayMsk;                   ///< Mask of Byte Lanes that should use ins. dly. comparison
103   UINT16  LaneMsk;                             ///< Mask indicating byte lanes to update
104   UINT16  ResultFound;                         ///< Mask indicating byte lanes where desired result was found on a sweep
105   INT8    *TrnDelays;                          ///< Delay Values for each byte (Virtual).  Points into the delay values
106 } SWEEP_INFO;                                  ///< stored in the CH_DEF_STRUCT.
107
108 /*----------------------------------------------------------------------------
109  *                           FUNCTIONS PROTOTYPE
110  *
111  *----------------------------------------------------------------------------
112  */
113
114
115
116 #endif  /* _MTTEDGEDETECT_H_ */
117
118