blob: 1f8e97fba99fa201ca4474084028337b2dde7c39 [file] [log] [blame]
Patrick Georgi02363b52020-05-05 20:48:50 +02001/* This file is part of the coreboot project. */
Patrick Georgiac959032020-05-05 22:49:26 +02002/* SPDX-License-Identifier: GPL-2.0-or-later */
Arthur Heymans0bf87de2017-11-04 06:15:05 +01003
Arthur Heymans0bf87de2017-11-04 06:15:05 +01004#include <stdint.h>
5#include "x4x.h"
6
7const struct dll_setting default_ddr2_667_ctrl[7] = {
8 /* tap pi db delay coarse*/
9 {13, 0, 1, 0, 0, 0}, /* clkset0 */
10 {4, 1, 0, 0, 0, 0}, /* ctrl0 */
11 {13, 0, 1, 0, 0, 0}, /* clkset1 */
12 {4, 5, 0, 0, 0, 0}, /* cmd */
13 {4, 1, 0, 0, 0, 0}, /* ctrl1 */
14 {4, 1, 0, 0, 0, 0}, /* ctrl2 */
15 {4, 1, 0, 0, 0, 0}, /* ctrl3 */
16};
17
Arthur Heymans276049f2017-11-05 05:56:34 +010018const struct dll_setting default_ddr2_667_dqs[TOTAL_BYTELANES] = {
Arthur Heymans0bf87de2017-11-04 06:15:05 +010019 {1, 5, 1, 1, 1, 0},
20 {1, 6, 1, 1, 1, 0},
21 {2, 0, 1, 1, 1, 0},
22 {2, 1, 1, 1, 1, 0},
23 {2, 1, 1, 1, 1, 0},
24 {14, 6, 1, 0, 0, 0},
25 {14, 3, 1, 0, 0, 0},
26 {14, 0, 1, 0, 0, 0},
27};
28
Arthur Heymans276049f2017-11-05 05:56:34 +010029const struct dll_setting default_ddr2_667_dq[TOTAL_BYTELANES] = {
Arthur Heymans0bf87de2017-11-04 06:15:05 +010030 {9, 0, 0, 0, 1, 0},
31 {9, 1, 0, 0, 1, 0},
32 {9, 2, 0, 0, 1, 0},
33 {9, 2, 0, 0, 1, 0},
34 {9, 1, 0, 0, 1, 0},
35 {6, 4, 0, 0, 1, 0},
36 {6, 2, 0, 0, 1, 0},
37 {5, 4, 0, 0, 1, 0}
38};
39
40const struct dll_setting default_ddr2_800_ctrl[7] = {
41 /* tap pi db delay coarse */
42 {11, 5, 1, 0, 0, 0},
43 {0, 5, 1, 1, 0, 0},
44 {11, 5, 1, 0, 0, 0},
45 {1, 4, 1, 1, 0, 0},
46 {0, 5, 1, 1, 0, 0},
47 {0, 5, 1, 1, 0, 0},
48 {0, 5, 1, 1, 0, 0},
49};
50
Arthur Heymans276049f2017-11-05 05:56:34 +010051const struct dll_setting default_ddr2_800_dqs[TOTAL_BYTELANES] = {
Arthur Heymans0bf87de2017-11-04 06:15:05 +010052 {2, 5, 1, 1, 1, 0},
53 {2, 6, 1, 1, 1, 0},
54 {3, 0, 1, 1, 1, 0},
55 {3, 0, 1, 1, 1, 0},
56 {3, 3, 1, 1, 1, 0},
57 {2, 0, 1, 1, 1, 0},
58 {1, 3, 1, 1, 1, 0},
59 {0, 3, 1, 1, 1, 0},
60};
61
Arthur Heymans276049f2017-11-05 05:56:34 +010062const struct dll_setting default_ddr2_800_dq[TOTAL_BYTELANES] = {
Arthur Heymans0bf87de2017-11-04 06:15:05 +010063 {9, 3, 0, 0, 1, 0},
64 {9, 4, 0, 0, 1, 0},
65 {9, 5, 0, 0, 1, 0},
66 {9, 6, 0, 0, 1, 0},
67 {10, 0, 0, 0, 1, 0},
68 {8, 1, 0, 0, 1, 0},
69 {7, 5, 0, 0, 1, 0},
70 {6, 2, 0, 0, 1, 0}
71};
72
73const struct dll_setting default_ddr3_800_ctrl[2][7] = {
74 { /* 1N */
75 /* tap pi db(2) delay coarse */
76 {8, 2, 0, 0, 0, 0},
77 {8, 4, 0, 0, 0, 0},
78 {9, 5, 0, 0, 0, 0},
79 {6, 1, 0, 0, 0, 0},
80 {8, 4, 0, 0, 0, 0},
81 {10, 0, 0, 0, 0, 0},
82 {10, 0, 0, 0, 0, 0}, },
83 { /* 2N */
84 {2, 2, 1, 1, 0, 0},
85 {2, 4, 1, 1, 0, 0},
86 {3, 5, 0, 0, 0, 0},
87 {3, 2, 1, 1, 0, 0},
88 {2, 4, 1, 1, 0, 0},
89 {3, 6, 0, 0, 0, 0},
90 {3, 6, 0, 0, 0, 0}, }
91};
92
Arthur Heymans276049f2017-11-05 05:56:34 +010093const struct dll_setting default_ddr3_800_dqs[2][TOTAL_BYTELANES] = {
Arthur Heymans0bf87de2017-11-04 06:15:05 +010094 { /* 1N */
95 {12, 0, 1, 0, 0, 0},
96 {1, 1, 1, 1, 1, 0},
97 {2, 4, 1, 1, 1, 0},
98 {3, 5, 0, 0, 1, 0},
99 {4, 3, 0, 0, 1, 0},
100 {5, 2, 0, 0, 1, 0},
101 {6, 1, 0, 0, 1, 0},
102 {6, 4, 0, 0, 1, 0}, },
103 { /* 2N */
104 {5, 6, 0, 0, 0, 0},
105 {8, 0, 0, 0, 0, 0},
106 {9, 4, 0, 0, 0, 0},
107 {10, 4, 1, 0, 0, 0},
108 {11, 3, 1, 0, 0, 0},
109 {12, 1, 1, 0, 0, 0},
110 {0, 1, 1, 1, 1, 0},
111 {0, 3, 1, 1, 1, 0}, }
112};
113
Arthur Heymans276049f2017-11-05 05:56:34 +0100114const struct dll_setting default_ddr3_800_dq[2][TOTAL_BYTELANES] = {
Arthur Heymans0bf87de2017-11-04 06:15:05 +0100115 { /* 1N */
116 {4, 1, 0, 0, 1, 0},
117 {6, 4, 0, 0, 1, 0},
118 {8, 1, 0, 0, 1, 0},
119 {8, 6, 0, 0, 1, 0},
120 {9, 5, 0, 0, 1, 0},
121 {10, 2, 0, 0, 1, 0},
122 {10, 6, 1, 0, 1, 0},
123 {11, 4, 1, 0, 1, 0} },
124 { /* 2N */
125 {11, 0, 1, 0, 0, 0},
126 {0, 3, 1, 1, 1, 0},
127 {2, 1, 1, 1, 1, 0},
128 {2, 5, 1, 1, 1, 0},
129 {3, 5, 0, 0, 1, 0},
130 {4, 2, 0, 0, 1, 0},
131 {4, 6, 0, 0, 1, 0},
132 {5, 4, 0, 0, 1, 0}, }
133};
134
135const struct dll_setting default_ddr3_1067_ctrl[2][7] = {
136 { /* 1N */
137 {8, 5, 0, 0, 0, 0},
138 {7, 6, 0, 0, 0, 0},
139 {10, 2, 1, 0, 0, 0},
140 {4, 4, 0, 0, 0, 0},
141 {7, 6, 0, 0, 0, 0},
142 {9, 2, 1, 0, 0, 0},
143 {9, 2, 1, 0, 0, 0}, },
144 { /* 2N */
145 {1, 5, 1, 1, 0, 0},
146 {0, 6, 1, 1, 0, 0},
147 {3, 2, 0, 0, 0, 0},
148 {2, 6, 1, 1, 0, 0},
149 {0, 6, 1, 1, 0, 0},
150 {2, 2, 1, 1, 0, 0},
151 {2, 2, 1, 1, 0, 0}, }
152};
153
Arthur Heymans276049f2017-11-05 05:56:34 +0100154const struct dll_setting default_ddr3_1067_dqs[2][TOTAL_BYTELANES] = {
Arthur Heymans0bf87de2017-11-04 06:15:05 +0100155 { /* 1N */
156 {2, 5, 1, 1, 1, 0},
157 {5, 1, 0, 0, 1, 0},
158 {6, 6, 0, 0, 1, 0},
159 {8, 0, 0, 0, 1, 0},
160 {8, 6, 0, 0, 1, 0},
161 {9, 6, 1, 0, 1, 0},
162 {10, 6, 1, 0, 1, 0},
163 {0, 1, 1, 1, 0, 1}, },
164 { /* 2N */
165 {6, 4, 0, 0, 0, 0},
166 {9, 1, 1, 0, 0, 0},
167 {10, 6, 1, 0, 0, 0},
168 {1, 0, 1, 1, 1, 0},
169 {1, 6, 1, 1, 1, 0},
170 {2, 5, 1, 1, 1, 0},
171 {3, 5, 0, 0, 1, 0},
172 {4, 1, 0, 0, 1, 0},
173 }
174};
175
Arthur Heymans276049f2017-11-05 05:56:34 +0100176const struct dll_setting default_ddr3_1067_dq[2][TOTAL_BYTELANES] = {
Arthur Heymans0bf87de2017-11-04 06:15:05 +0100177 { /* 1N */
178 {6, 5, 0, 0, 1, 0},
179 {9, 3, 1, 0, 1, 0},
180 {0, 2, 1, 1, 0, 1},
181 {1, 0, 1, 1, 0, 1},
182 {2, 0, 1, 1, 0, 1},
183 {2, 5, 1, 1, 0, 1},
184 {3, 2, 0, 0, 0, 1},
185 {4, 1, 0, 0, 0, 1}, },
186 { /* 2N */
187 {10, 5, 1, 0, 0, 0},
188 {2, 3, 1, 1, 1, 0},
189 {4, 1, 0, 0, 1, 0},
190 {5, 0, 0, 0, 1, 0},
191 {6, 0, 0, 0, 1, 0},
192 {6, 5, 0, 0, 1, 0},
193 {7, 2, 0, 0, 1, 0},
194 {8, 1, 0, 0, 1, 0},
195 }
196};
197
198const struct dll_setting default_ddr3_1333_ctrl[2][7] = {
199 { /* 1N */
200 {8, 5, 0, 0, 0, 0},
201 {9, 0, 1, 0, 0, 0},
202 {10, 2, 1, 0, 0, 0},
203 {0, 0, 1, 1, 0, 0},
204 {9, 0, 1, 0, 0, 0},
205 {10, 4, 1, 0, 0, 0},
206 {10, 4, 1, 0, 0, 0}, },
207 { /* 2N */
208 {1, 6, 1, 1, 0, 0},
209 {2, 2, 1, 1, 0, 0},
210 {4, 2, 0, 0, 0, 0},
211 {3, 1, 1, 1, 0, 0},
212 {2, 2, 1, 1, 0, 0},
213 {4, 5, 0, 0, 0, 0},
214 {4, 5, 0, 0, 0, 0}, }
215};
216
Arthur Heymans276049f2017-11-05 05:56:34 +0100217const struct dll_setting default_ddr3_1333_dqs[2][TOTAL_BYTELANES] = {
Arthur Heymans0bf87de2017-11-04 06:15:05 +0100218 { /* 1N */
219 {2, 4, 1, 1, 1, 0},
220 {5, 1, 0, 0, 1, 0},
221 {6, 6, 0, 0, 1, 0},
222 {8, 0, 0, 0, 1, 0},
223 {8, 6, 0, 0, 1, 0},
224 {9, 5, 1, 0, 1, 0},
225 {10, 6, 1, 0, 1, 0},
226 {0, 1, 1, 1, 0, 1}, },
227 { /* 2N */
228 {10, 4, 0, 0, 0, 0},
229 {0, 3, 1, 1, 1, 0},
230 {3, 2, 1, 1, 1, 0},
231 {5, 0, 0, 0, 1, 0},
232 {6, 1, 0, 0, 1, 0},
233 {7, 4, 0, 0, 1, 0},
234 {9, 2, 0, 0, 1, 0},
235 {9, 6, 0, 0, 1, 0}, }
236};
237
Arthur Heymans276049f2017-11-05 05:56:34 +0100238const struct dll_setting default_ddr3_1333_dq[2][TOTAL_BYTELANES] = {
Arthur Heymans0bf87de2017-11-04 06:15:05 +0100239 { /* 1N */
240 {6, 5, 0, 0, 1, 0},
241 {9, 3, 1, 0, 1, 0},
242 {0, 2, 1, 1, 0, 1},
243 {1, 0, 1, 1, 0, 1},
244 {2, 0, 1, 1, 0, 1},
245 {2, 5, 1, 1, 0, 1},
246 {3, 2, 0, 0, 0, 1},
247 {4, 1, 0, 0, 0, 1}, },
248 { /* 2N */
249 {1, 3, 1, 1, 1, 0},
250 {5, 6, 0, 0, 1, 0},
251 {8, 5, 0, 0, 1, 0},
252 {10, 2, 0, 0, 1, 0},
253 {11, 1, 0, 0, 1, 0},
254 {12, 3, 1, 0, 1, 0},
255 {13, 6, 1, 0, 1, 0},
256 {0, 3, 1, 1, 0, 1}, }
257};
Arthur Heymansf1287262017-12-25 18:30:01 +0100258
259const u8 ddr3_emrs1_rtt_nom_config[16][4] = { /* [Config][Rank] */
260 {0x00, 0x00, 0x00, 0x00}, /* NC_NC */
261 {0x11, 0x00, 0x00, 0x00}, /* 8S_NC */
262 {0x11, 0x11, 0x00, 0x00}, /* 8D_NC */
263 {0x11, 0x00, 0x00, 0x00}, /* 16S_NC */
264 {0x00, 0x00, 0x11, 0x00}, /* NC_8S */
265 {0x81, 0x00, 0x81, 0x00}, /* 8S_8S */
266 {0x81, 0x81, 0x81, 0x00}, /* 8D_8S */
267 {0x81, 0x00, 0x81, 0x00}, /* 16S_8S */
268 {0x00, 0x00, 0x11, 0x11}, /* NC_8D */
269 {0x81, 0x00, 0x81, 0x81}, /* 8S_8D */
270 {0x81, 0x81, 0x81, 0x81}, /* 8D_8D */
271 {0x81, 0x00, 0x81, 0x81}, /* 16S_8D */
272 {0x00, 0x00, 0x11, 0x00}, /* NC_16S */
273 {0x81, 0x00, 0x81, 0x00}, /* 8S_16S */
274 {0x81, 0x81, 0x81, 0x00}, /* 8D_16S */
275 {0x81, 0x00, 0x81, 0x00}, /* 16S_16S */
276};
Arthur Heymans3fa103a2017-05-25 19:54:49 +0200277
Arthur Heymans0d284952017-05-25 19:55:52 +0200278const u8 post_jedec_tab[3][4][2]= /* [FSB][DDR freq][17:13 or 12:8] */
279{ /* FSB DDR */
280 {{0x3, 0x5}, /* 800 667 */
281 {0x3, 0x4}, /* 800 800 */
282 },
283 {{0x4, 0x8}, /* 1067 667 */
284 {0x4, 0x6}, /* 1067 800 */
285 {0x3, 0x5}, /* 1067 1066 */
286 },
287 {{0x5, 0x9}, /* 1333 667 */
288 {0x4, 0x7}, /* 1333 800 */
289 {0x4, 0x7}, /* 1333 1066 */
290 {0x4, 0x7} /* 1333 1333 */
291 },
292};
293
294
Arthur Heymans3fa103a2017-05-25 19:54:49 +0200295const u32 ddr3_c2_tab[2][3][6][2] = { /* [n-mode][ddr3 freq][CAS][reg] */
296 /* 115h[15:0] 117h[23:0] */
297 { /* 1N mode */
298 { /* DDR3 800MHz */
299 {0x0189, 0x000aaa}, /* CAS = 5 */
300 {0x0189, 0x101aaa}, /* CAS = 6 */
301 },
302 { /* DDR3 1067MHz */
303 {0x0000, 0x000000}, /* CAS = 5 - Not supported */
304 {0x0089, 0x000bbb}, /* CAS = 6 */
305 {0x0099, 0x101bbb}, /* CAS = 7 */
306 {0x0099, 0x202bbb} /* CAS = 8 */
307 },{ /* DDR3 1333 */
308 {0x0000, 0x000000}, /* CAS = 5 - Not supported */
309 {0x0000, 0x000000}, /* CAS = 6 - Not supported */
310 {0x0000, 0x000000}, /* CAS = 7 - Not supported */
311 {0x129a, 0x0078dc}, /* CAS = 8 */
312 {0x028a, 0x0078dc}, /* CAS = 9 */
313 {0x028a, 0x1088dc}, /* CAS = 10 */
314 },
315 },
316 { /* 2N mode */
317 { /* DDR3 800MHz */
318 {0x0189, 0x000aaa}, /* CAS = 5 */
319 {0x0189, 0x101aaa}, /* CAS = 6 */
320 {0x0000, 0x000000}, /* CAS = 7 - Not supported */
Elyes HAOUAS3d450002018-08-09 18:55:58 +0200321 {0x0000, 0x000000} /* CAS = 8 - Not supported */
Arthur Heymans3fa103a2017-05-25 19:54:49 +0200322 },
323 { /* DDR3 1067 */
324 {0x0000, 0x000000}, /* CAS = 5 - Not supported */
325 {0x0089, 0x000bbb}, /* CAS = 6 */
326 {0x0099, 0x101bbb}, /* CAS = 7 */
327 {0x0099, 0x202bbb} /* CAS = 8 */
328 },{ /* DDR3 1333MHz */
329 {0x0000, 0x000000}, /* CAS = 5 - Not supported */
330 {0x0000, 0x000000}, /* CAS = 6 - Not supported */
331 {0x0000, 0x000000}, /* CAS = 7 - Not supported */
332 {0x019a, 0x0078dc}, /* CAS = 8 */
333 {0x019a, 0x1088dc}, /* CAS = 9 */
334 {0x019a, 0x2098dc}, /* CAS = 10 */
335 },
336 }
337};
338
339const u8 ddr3_c2_x264[3][6] = { /* [freq][cas] */
340 /* DDR3 800MHz */
341 {0x78, /* CAS = 5 */
342 0x89}, /* CAS = 6 */
343 /* DDR3 1066 */
344 {0x00, /* CAS = 5 - Not supported */
345 0xff, /* CAS = 6 */
346 0x8a, /* CAS = 7 */
347 0x9a}, /* CAS = 8 */
348 /* DDR3 1333 */
349 {0x00, /* CAS = 5 - Not supported */
350 0x00, /* CAS = 6 - Not supported */
351 0xff, /* CAS = 7 - Not supported */
352 0xff, /* CAS = 8 */
353 0xff, /* CAS = 9 */
354 0xff}, /* CAS = 10 */
355};
356
357const u16 ddr3_c2_x23c[3][6]={ /* [freq][cas] */
358 /* DDR3 800MHz */
359 {0x9bbb, /* CAS = 5 */
360 0x8bbb}, /* CAS = 6 */
361 /* DDR3 1066MHz */
362 {0x0000, /* CAS = 5 - Not supported */
363 0x9baa, /* CAS = 6 */
364 0x8caa, /* CAS = 7 */
365 0x7daa}, /* CAS = 8 */
366
367 /* DDR3 1333MHz */
368 {0x0000, /* CAS = 5 - Not supported */
369 0x0000, /* CAS = 6 - Not supported */
370 0x0000, /* CAS = 7 - Not supported */
371 0xaecb, /* CAS = 8 */
372 0x9fcb, /* CAS = 9 */
373 0x8fcb}, /* CAS = 10 */
374};