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