AGESA F15: AMD family15 AGESA code
[coreboot.git] / src / vendorcode / amd / agesa / f15 / Proc / Mem / ma.h
1 /* $NoKeywords:$ */
2 /**
3  * @file
4  *
5  * ma.h
6  *
7  * ARDK common 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 _MA_H_
47 #define _MA_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 MAX_CS_PER_CHANNEL      8   ///< Max CS per channel
63 /*----------------------------------------------------------------------------
64  *                         TYPEDEFS, STRUCTURES, ENUMS
65  *
66  *----------------------------------------------------------------------------
67  */
68
69 /** MARDK Structure*/
70 typedef struct {
71   UINT16   Speed;                  ///< Dram speed in MHz
72   UINT8    Loads;                  ///< Number of Data Loads
73   UINT32   AddrTmg;                ///< Address Timing value
74   UINT32   Odc;                    ///< Output Driver Compensation Value
75 } PSCFG_ENTRY;
76
77 /** MARDK Structure*/
78 typedef struct {
79   UINT16   Speed;                  ///< Dram speed in MHz
80   UINT8    Loads;                  ///< Number of Data Loads
81   UINT32   AddrTmg;                ///< Address Timing value
82   UINT32   Odc;                    ///< Output Driver Compensation Value
83   UINT8    Dimms;                  ///< Number of Dimms
84 } ADV_PSCFG_ENTRY;
85
86 /** MARDK Structure for RDIMMs*/
87 typedef struct {
88   UINT16   Speed;                  ///< Dram speed in MHz
89   UINT16   DIMMRankType;         ///< Bitmap of Ranks   //Bit0-3:DIMM0(1:SR, 2:DR, 4:QR, 0:No Dimm, 0xF:Any), Bit4-7:DIMM1, Bit8-11:DIMM2, Bit12-16:DIMM3
90   UINT32   AddrTmg;                ///< Address Timing value
91   UINT16   RC2RC8;                   ///< RC2 and RC8 value  //High byte: 1st pair value, Low byte: 2nd pair value
92   UINT8    Dimms;                  ///< Number of Dimms
93 } ADV_R_PSCFG_ENTRY;
94
95 /** MARDK Structure*/
96 typedef struct {
97   UINT16   DIMMRankType;         ///< Bitmap of Ranks   //Bit0-3:DIMM0(1:SR, 2:DR, 4:QR, 0:No Dimm, 0xF:Any), Bit4-7:DIMM1, Bit8-11:DIMM2, Bit12-16:DIMM3
98   UINT32   PhyRODTCSLow;          ///< Fn2_9C 180
99   UINT32   PhyRODTCSHigh;         ///< Fn2_9C 181
100   UINT32   PhyWODTCSLow;          ///< Fn2_9C 182
101   UINT32   PhyWODTCSHigh;         ///< Fn2_9C 183
102   UINT8    Dimms;                  ///< Number of Dimms
103 } ADV_PSCFG_ODT_ENTRY;
104
105 /** MARDK Structure for Write Levelization ODT*/
106 typedef struct {
107   UINT16   DIMMRankType;         ///< Bitmap of Ranks   //Bit0-3:DIMM0(1:SR, 2:DR, 4:QR, 0:No Dimm, 0xF:Any), Bit4-7:DIMM1, Bit8-11:DIMM2, Bit12-16:DIMM3
108   UINT8    PhyWrLvOdt[MAX_CS_PER_CHANNEL/2];            ///< WrLvOdt (Fn2_9C_0x08[11:8]) Value for each Dimm
109   UINT8    Dimms;                ///< Number of Dimms
110 } ADV_R_PSCFG_WL_ODT_ENTRY;
111
112 /*----------------------------------------------------------------------------
113  *                           FUNCTIONS PROTOTYPE
114  *
115  *----------------------------------------------------------------------------
116  */
117
118 AGESA_STATUS
119 MemAGetPsCfgDef (
120   IN OUT   MEM_DATA_STRUCT *MemData,
121   IN       UINT8 SocketID,
122   IN OUT   CH_DEF_STRUCT *CurrentChannel
123   );
124
125 AGESA_STATUS
126 MemAGetPsCfgRDr2 (
127   IN OUT   MEM_DATA_STRUCT *MemData,
128   IN       UINT8 SocketID,
129   IN OUT   CH_DEF_STRUCT *CurrentChannel
130   );
131
132 AGESA_STATUS
133 MemAGetPsCfgRDr3 (
134   IN OUT   MEM_DATA_STRUCT *MemData,
135   IN       UINT8 SocketID,
136   IN OUT   CH_DEF_STRUCT *CurrentChannel
137   );
138
139 AGESA_STATUS
140 MemAGetPsCfgUDr3 (
141   IN OUT   MEM_DATA_STRUCT *MemData,
142   IN       UINT8 SocketID,
143   IN OUT   CH_DEF_STRUCT *CurrentChannel
144   );
145
146 AGESA_STATUS
147 MemAGetPsCfgSDA2 (
148   IN OUT   MEM_DATA_STRUCT *MemData,
149   IN       UINT8 SocketID,
150   IN OUT   CH_DEF_STRUCT *CurrentChannel
151   );
152
153 AGESA_STATUS
154 MemAGetPsCfgSDA3 (
155   IN OUT   MEM_DATA_STRUCT *MemData,
156   IN       UINT8 SocketID,
157   IN OUT   CH_DEF_STRUCT *CurrentChannel
158   );
159
160 AGESA_STATUS
161 MemAGetPsCfgSNi3 (
162   IN OUT   MEM_DATA_STRUCT *MemData,
163   IN       UINT8 SocketID,
164   IN OUT   CH_DEF_STRUCT *CurrentChannel
165   );
166
167 AGESA_STATUS
168 MemAGetPsCfgUNi3 (
169   IN OUT   MEM_DATA_STRUCT *MemData,
170   IN       UINT8 SocketID,
171   IN OUT   CH_DEF_STRUCT *CurrentChannel
172   );
173
174 AGESA_STATUS
175 MemAGetPsCfgSRb3 (
176   IN OUT   MEM_DATA_STRUCT *MemData,
177   IN       UINT8 SocketID,
178   IN OUT   CH_DEF_STRUCT *CurrentChannel
179   );
180
181 AGESA_STATUS
182 MemAGetPsCfgURb3 (
183   IN OUT   MEM_DATA_STRUCT *MemData,
184   IN       UINT8 SocketID,
185   IN OUT   CH_DEF_STRUCT *CurrentChannel
186   );
187
188 AGESA_STATUS
189 MemAGetPsCfgSPh3 (
190   IN OUT   MEM_DATA_STRUCT *MemData,
191   IN       UINT8 SocketID,
192   IN OUT   CH_DEF_STRUCT *CurrentChannel
193   );
194
195 AGESA_STATUS
196 MemAGetPsCfgUPh3 (
197   IN OUT   MEM_DATA_STRUCT *MemData,
198   IN       UINT8 SocketID,
199   IN OUT   CH_DEF_STRUCT *CurrentChannel
200   );
201
202 AGESA_STATUS
203 MemAGetPsCfgUDA3 (
204   IN OUT   MEM_DATA_STRUCT *MemData,
205   IN       UINT8 SocketID,
206   IN OUT   CH_DEF_STRUCT *CurrentChannel
207   );
208
209 AGESA_STATUS
210 MemAGetPsCfgRHy3 (
211   IN OUT   MEM_DATA_STRUCT *MemData,
212   IN       UINT8 SocketID,
213   IN OUT   CH_DEF_STRUCT *CurrentChannel
214   );
215
216 AGESA_STATUS
217 MemAGetPsCfgUHy3 (
218   IN OUT   MEM_DATA_STRUCT *MemData,
219   IN       UINT8 SocketID,
220   IN OUT   CH_DEF_STRUCT *CurrentChannel
221   );
222
223 AGESA_STATUS
224 MemAGetPsCfgRC32_3 (
225   IN OUT   MEM_DATA_STRUCT *MemData,
226   IN       UINT8 SocketID,
227   IN OUT   CH_DEF_STRUCT *CurrentChannel
228   );
229
230 AGESA_STATUS
231 MemAGetPsCfgUC32_3 (
232   IN OUT   MEM_DATA_STRUCT *MemData,
233   IN       UINT8 SocketID,
234   IN OUT   CH_DEF_STRUCT *CurrentChannel
235   );
236
237 AGESA_STATUS
238 MemAGetPsCfgSLN3 (
239   IN OUT   MEM_DATA_STRUCT *MemData,
240   IN       UINT8 SocketID,
241   IN OUT   CH_DEF_STRUCT *CurrentChannel
242   );
243
244 AGESA_STATUS
245 MemAGetPsCfgULN3 (
246   IN OUT   MEM_DATA_STRUCT *MemData,
247   IN       UINT8 SocketID,
248   IN OUT   CH_DEF_STRUCT *CurrentChannel
249   );
250
251 AGESA_STATUS
252 MemAGetPsCfgSON3 (
253   IN OUT   MEM_DATA_STRUCT *MemData,
254   IN       UINT8 SocketID,
255   IN OUT   CH_DEF_STRUCT *CurrentChannel
256   );
257
258 AGESA_STATUS
259 MemAGetPsCfgUON3 (
260   IN OUT   MEM_DATA_STRUCT *MemData,
261   IN       UINT8 SocketID,
262   IN OUT   CH_DEF_STRUCT *CurrentChannel
263   );
264
265 AGESA_STATUS
266 MemAGetPsCfgROr3 (
267   IN OUT   MEM_DATA_STRUCT *MemData,
268   IN       UINT8 SocketID,
269   IN OUT   CH_DEF_STRUCT *CurrentChannel
270   );
271
272 AGESA_STATUS
273 MemAGetPsCfgUOr3 (
274   IN OUT   MEM_DATA_STRUCT *MemData,
275   IN       UINT8 SocketID,
276   IN OUT   CH_DEF_STRUCT *CurrentChannel
277   );
278
279 UINT16
280 MemAGetPsRankType (
281   IN       CH_DEF_STRUCT *CurrentChannel
282   );
283
284 AGESA_STATUS
285 MemRecNGetPsCfgDef (
286   IN OUT   MEM_DATA_STRUCT *MemData,
287   IN       UINT8 SocketID,
288   IN OUT   CH_DEF_STRUCT *CurrentChannel
289   );
290
291 UINT16
292 MemRecNGetPsRankType (
293   IN       CH_DEF_STRUCT *CurrentChannel
294   );
295
296 AGESA_STATUS
297 MemRecNGetPsCfgUDIMM3Nb (
298   IN OUT   MEM_DATA_STRUCT *MemData,
299   IN       UINT8 SocketID,
300   IN OUT   CH_DEF_STRUCT *CurrentChannel
301   );
302
303 AGESA_STATUS
304 MemRecNGetPsCfgSODIMM3Nb (
305   IN OUT   MEM_DATA_STRUCT *MemData,
306   IN       UINT8 SocketID,
307   IN OUT   CH_DEF_STRUCT *CurrentChannel
308   );
309
310 AGESA_STATUS
311 MemRecNGetPsCfgRDIMM3Nb (
312   IN OUT   MEM_DATA_STRUCT *MemData,
313   IN       UINT8 SocketID,
314   IN OUT   CH_DEF_STRUCT *CurrentChannel
315   );
316
317 #endif  /* _MA_H_ */