AGESA F15: AMD family15 AGESA code
[coreboot.git] / src / vendorcode / amd / agesa / f15 / Proc / CPU / Family / 0x10 / cpuF10MsrTables.c
1 /* $NoKeywords:$ */
2 /**
3  * @file
4  *
5  * AMD Family_10 DR, MSR tables with values as defined in BKDG
6  *
7  * @xrefitem bom "File Content Label" "Release Content"
8  * @e project:      AGESA
9  * @e sub-project:  CPU
10  * @e \$Revision: 56307 $   @e \$Date: 2011-07-11 15:13:07 -0600 (Mon, 11 Jul 2011) $
11  *
12  */
13 /*
14  ******************************************************************************
15  *
16  * Copyright (C) 2012 Advanced Micro Devices, Inc.
17  * All rights reserved.
18  *
19  * Redistribution and use in source and binary forms, with or without
20  * modification, are permitted provided that the following conditions are met:
21  *     * Redistributions of source code must retain the above copyright
22  *       notice, this list of conditions and the following disclaimer.
23  *     * Redistributions in binary form must reproduce the above copyright
24  *       notice, this list of conditions and the following disclaimer in the
25  *       documentation and/or other materials provided with the distribution.
26  *     * Neither the name of Advanced Micro Devices, Inc. nor the names of
27  *       its contributors may be used to endorse or promote products derived
28  *       from this software without specific prior written permission.
29  *
30  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
31  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
32  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
33  * DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY
34  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
35  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
36  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
37  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
38  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
39  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40  *
41  ******************************************************************************
42  */
43
44 /*----------------------------------------------------------------------------------------
45  *                             M O D U L E S    U S E D
46  *----------------------------------------------------------------------------------------
47  */
48 #include "AGESA.h"
49 #include "Ids.h"
50 #include "cpuRegisters.h"
51 #include "Table.h"
52 #include "Filecode.h"
53 CODE_GROUP (G1_PEICC)
54 RDATA_GROUP (G2_PEI)
55
56 #define FILECODE PROC_CPU_FAMILY_0X10_CPUF10MSRTABLES_FILECODE
57
58 /*----------------------------------------------------------------------------------------
59  *                   D E F I N I T I O N S    A N D    M A C R O S
60  *----------------------------------------------------------------------------------------
61  */
62
63 /*----------------------------------------------------------------------------------------
64  *                  T Y P E D E F S     A N D     S T R U C T U R E S
65  *----------------------------------------------------------------------------------------
66  */
67
68 /*----------------------------------------------------------------------------------------
69  *           P R O T O T Y P E S     O F     L O C A L     F U N C T I O N S
70  *----------------------------------------------------------------------------------------
71  */
72
73 /*----------------------------------------------------------------------------------------
74  *                          E X P O R T E D    F U N C T I O N S
75  *----------------------------------------------------------------------------------------
76  */
77 STATIC CONST MSR_TYPE_ENTRY_INITIALIZER ROMDATA F10MsrRegisters[] =
78 {
79 //  M S R    T a b l e s
80 // ----------------------
81
82 // MSR_TOM2 (0xC001001D)
83 // bits[63:0] - TOP_MEM2 = 0
84   {
85     MsrRegister,
86     {
87       AMD_FAMILY_10,                      // CpuFamily
88       AMD_F10_ALL                         // CpuRevision
89     },
90     {AMD_PF_ALL},                            // platformFeatures
91     {{
92       MSR_TOM2,                              // MSR Address
93       0x0000000000000000,                    // OR Mask
94       0xFFFFFFFFFFFFFFFF,                    // NAND Mask
95     }}
96   },
97 // MSR_SYS_CFG (0xC0010010)
98 // bit[21] = 1
99   {
100     MsrRegister,
101     {
102       AMD_FAMILY_10,                      // CpuFamily
103       AMD_F10_ALL                         // CpuRevision
104     },
105     {AMD_PF_ALL},                            // platformFeatures
106     {{
107       MSR_SYS_CFG,                           // MSR Address
108       (1 << 21),                             // OR Mask
109       (1 << 21),                             // NAND Mask
110     }}
111   },
112 // MSR_HWCR (0xC0010015)
113 // Do not set bit[24] = 1, it will be set in AmdInitPost.
114 // bit[4] = 1
115   {
116     MsrRegister,
117     {
118       AMD_FAMILY_10,                      // CpuFamily
119       AMD_F10_ALL                         // CpuRevision
120     },
121     {AMD_PF_ALL},                            // platformFeatures
122     {{
123       MSR_HWCR,                              // MSR Address
124       0x0000000000000010,                    // OR Mask
125       0x0000000000000010,                    // NAND Mask
126     }}
127   },
128 // MSR_MC4_CTL_MASK (0xC0010048)
129 // bit[10] = 1
130 // bits[22:19] = 1111b
131   {
132     MsrRegister,
133     {
134       AMD_FAMILY_10,                      // CpuFamily
135       AMD_F10_ALL                         // CpuRevision
136     },
137     {AMD_PF_ALL},                            // platformFeatures
138     {{
139       MSR_MC4_CTL_MASK,                      // MSR Address
140       0x0000000000780400,                    // OR Mask
141       0x0000000000780400,                    // NAND Mask
142     }}
143   },
144 // MSR_DC_CFG (0xC0011022)
145 // bits[35:34] = 01
146   {
147     MsrRegister,
148     {
149       AMD_FAMILY_10,                      // CpuFamily
150       AMD_F10_ALL                         // CpuRevision
151     },
152     {AMD_PF_MULTI_LINK},                     // platformFeatures
153     {{
154       MSR_DC_CFG,                            // MSR Address
155       0x0000000400000000,                    // OR Mask
156       0x0000000C00000000,                    // NAND Mask
157     }}
158   },
159 // MSR_NB_CFG (0xC001001F)
160 // bit[54] = 1
161 // bit[52:51] = 11b for Erratum #372
162   {
163     MsrRegister,
164     {
165       AMD_FAMILY_10,                      // CpuFamily
166       AMD_F10_ALL                         // CpuRevision
167     },
168     {AMD_PF_ALL},   // platformFeatures
169     {{
170       MSR_NB_CFG,                            // MSR Address
171       0x0058000000000000,                    // OR Mask
172       0x0058000000000000,                    // NAND Mask
173     }}
174   },
175 // MSR_LS_CFG (0xC0011020)
176 // bit[8] = 1 for Erratum #670
177   {
178     MsrRegister,
179     {
180       AMD_FAMILY_10,                      // CpuFamily
181       AMD_F10_ALL                         // CpuRevision
182     },
183     {AMD_PF_ALL},                           // platformFeatures
184     {{
185       MSR_LS_CFG,                           // MSR Address
186       (1 << 8),                             // OR Mask
187       (1 << 8),                             // NAND Mask
188     }}
189   },
190 // MSR_DC_CFG (0xC0011022)
191 // bit[24] = 1
192   {
193     MsrRegister,
194     {
195       AMD_FAMILY_10,                      // CpuFamily
196       AMD_F10_ALL                         // CpuRevision
197     },
198     {AMD_PF_ALL},                            // platformFeatures
199     {{
200       MSR_DC_CFG,                            // MSR Address
201       (1 << 24),                             // OR Mask
202       (1 << 24),                             // NAND Mask
203     }}
204   },
205 // MSR_CPUID_FEATS (0xC0011004)
206 // bit[28] = 1
207   {
208     MsrRegister,
209     {
210       AMD_FAMILY_10,                      // CpuFamily
211       AMD_F10_ALL                         // CpuRevision
212     },
213     { (AMD_PF_MULTI_CORE | AMD_PF_DUAL_CORE) },  // platformFeatures
214     {{
215       MSR_CPUID_FEATS,                       // MSR Address
216       (1 << 28),                             // OR Mask
217       (1 << 28),                             // NAND Mask
218     }}
219   },
220 // MSR_CPUID_EXT_FEATS (0xC0011005)
221 // bit[33] = 1
222   {
223     MsrRegister,
224     {
225       AMD_FAMILY_10,                      // CpuFamily
226       AMD_F10_ALL                         // CpuRevision
227     },
228     {AMD_PF_DUAL_CORE},                     // platformFeatures
229     {{
230       MSR_CPUID_EXT_FEATS,                   // MSR Address
231       0x0000000200000000,                    // OR Mask
232       0x0000000200000000,                    // NAND Mask
233     }}
234   },
235 // MSR_OSVW_ID_Length (0xC0010140)
236 // bit[15:0] = 4
237   {
238     MsrRegister,
239     {
240       AMD_FAMILY_10,                      // CpuFamily
241       AMD_F10_ALL                         // CpuRevision
242     },
243     {AMD_PF_ALL},                            // platformFeatures
244     {{
245       MSR_OSVW_ID_Length,                    // MSR Address
246       0x0000000000000004,                    // OR Mask
247       0x000000000000FFFF,                    // NAND Mask
248     }}
249   },
250 // MSR_OSVW_Status (0xC0010141)
251 // bit[3] = 1 for Erratum #383
252 // bit[2] = 1 for Erratum #415
253   {
254     MsrRegister,
255     {
256       AMD_FAMILY_10,                      // CpuFamily
257       AMD_F10_ALL                         // CpuRevision
258     },
259     {AMD_PF_ALL},                            // platformFeatures
260     {{
261       MSR_OSVW_Status,                       // MSR Address
262       0x000000000000000C,                    // OR Mask
263       0x000000000000000C,                    // NAND Mask
264     }}
265   },
266 // This MSR should be set after the code that most errata would be applied in
267 // MSR_MC0_CTL (0x00000400)
268 // bits[63:0]  = 0xFFFFFFFFFFFFFFFF
269   {
270     MsrRegister,
271     {
272       AMD_FAMILY_10,                      // CpuFamily
273       AMD_F10_ALL                         // CpuRevision
274     },
275     {AMD_PF_ALL},                            // platformFeatures
276     {{
277       MSR_MC0_CTL,                           // MSR Address
278       0xFFFFFFFFFFFFFFFF,                    // OR Mask
279       0xFFFFFFFFFFFFFFFF,                    // NAND Mask
280     }}
281   }
282 };
283
284 CONST REGISTER_TABLE ROMDATA F10MsrRegisterTable = {
285   AllCores,
286   (sizeof (F10MsrRegisters) / sizeof (TABLE_ENTRY_FIELDS)),
287   (TABLE_ENTRY_FIELDS *)F10MsrRegisters,
288 };
289