blob: fbd3d475001ad9ae15a14a2c66f72dad97cfc408 [file] [log] [blame]
David Hendricks6638f872015-11-04 14:52:02 -08001/*
2 * Copyright 2015, Google Inc.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met:
8 *
9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above
12 * copyright notice, this list of conditions and the following
13 * disclaimer in the documentation and/or other materials provided
14 * with the distribution.
15 * * Neither the name of Google Inc. nor the names of its
16 * contributors may be used to endorse or promote products derived
17 * from this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#include "lib/nonspd.h"
33
David Hendricks0fa54152016-03-16 15:08:56 -070034const struct nonspd_mem_info elpida_lpddr3_edfa164a2ma_jd_f = {
David Hendricks6638f872015-11-04 14:52:02 -080035 .dram_type = SPD_DRAM_TYPE_LPDDR3,
36 .module_type.ddr3_type = DDR3_MODULE_TYPE_UNDEFINED,
37
38 .module_size_mbits = 8192,
39 .num_ranks = 2,
40 .device_width = 32,
41 .ddr_freq = { DDR_333, DDR_400, DDR_533, DDR_667, DDR_800, DDR_933 },
42
43 .module_mfg_id = { .msb = 0x2c, .lsb = 0x80 },
44 .dram_mfg_id = { .msb = 0x2c, .lsb = 0x80 },
45
46 .part_num =
47 { 'E', 'D', 'F', 'A', '1', '6', '4', 'A', '2', 'M', 'A', '-',
48 'J', 'D', '-', 'F',},
49};
50
David Hendricks0fa54152016-03-16 15:08:56 -070051const struct nonspd_mem_info elpida_lpddr3_f8132a3ma_gd_f = {
David Hendricks6638f872015-11-04 14:52:02 -080052 .dram_type = SPD_DRAM_TYPE_LPDDR3,
53 .module_type.ddr3_type = DDR3_MODULE_TYPE_UNDEFINED,
54
55 .module_size_mbits = 8192,
56 .num_ranks = 2,
57 .device_width = 32,
58 .ddr_freq = { DDR_333, DDR_400, DDR_533, DDR_667, DDR_800 },
59
60 .module_mfg_id = { .msb = 0x2c, .lsb = 0x80 },
61 .dram_mfg_id = { .msb = 0x2c, .lsb = 0x80 },
62
63 .part_num =
64 { 'F', '8', '1', '3', '2', 'A', '3', 'M', 'A', '-', 'G', 'D',
65 '-', 'F',},
66};
67
David Hendricks0fa54152016-03-16 15:08:56 -070068const struct nonspd_mem_info elpida_lpddr3_fa232a2ma_gc_f = {
David Hendricks6638f872015-11-04 14:52:02 -080069 .dram_type = SPD_DRAM_TYPE_LPDDR3,
70 .module_type.ddr3_type = DDR3_MODULE_TYPE_UNDEFINED,
71
72 .module_size_mbits = 16384,
73 .num_ranks = 2,
74 .device_width = 32,
75 .ddr_freq = { DDR_333, DDR_400, DDR_533, DDR_667, DDR_800 },
76
77 .module_mfg_id = { .msb = 0x2c, .lsb = 0x80 },
78 .dram_mfg_id = { .msb = 0x2c, .lsb = 0x80 },
79
80 .part_num =
81 { 'F', 'A', '2', '3', '2', 'A', '2', 'M', 'A', '-', 'G', 'C',
82 '-', 'F',},
83};
84
David Hendricks0fa54152016-03-16 15:08:56 -070085const struct nonspd_mem_info hynix_ddr3l_h5tc4g63afr_pba = {
David Hendricks6638f872015-11-04 14:52:02 -080086 .dram_type = SPD_DRAM_TYPE_DDR3,
87 .module_type.ddr3_type = DDR3_MODULE_TYPE_SO_DIMM,
88
89 .module_size_mbits = 4096,
90 .num_ranks = 1,
91 .device_width = 16,
92 .ddr_freq = { DDR_333, DDR_400, DDR_533, DDR_667, DDR_800 },
93
94 .module_mfg_id = { .msb = 0xad, .lsb = 0x80 },
95 .dram_mfg_id = { .msb = 0xad, .lsb = 0x80 },
96
97 .serial_num = { 0, 0, 0, 0 },
98 .part_num =
99 { 'H', '5', 'T', 'C', '4', 'G', '6', '3', 'A', 'F', 'R', '-',
100 'P', 'B', 'A'},
101};
102
David Hendricks0fa54152016-03-16 15:08:56 -0700103const struct nonspd_mem_info hynix_ddr3l_h5tc4g63cfr_pba = {
David Hendricks6638f872015-11-04 14:52:02 -0800104 .dram_type = SPD_DRAM_TYPE_DDR3,
105 .module_type.ddr3_type = DDR3_MODULE_TYPE_SO_DIMM,
106
107 .module_size_mbits = 4096,
108 .num_ranks = 1,
109 .device_width = 16,
110 .ddr_freq = { DDR_333, DDR_400, DDR_533, DDR_667, DDR_800 },
111
112 .module_mfg_id = { .msb = 0xad, .lsb = 0x80 },
113 .dram_mfg_id = { .msb = 0xad, .lsb = 0x80 },
114
115 .serial_num = { 0, 0, 0, 0 },
116 .part_num =
117 { 'H', '5', 'T', 'C', '4', 'G', '6', '3', 'C', 'F', 'R', '-',
118 'P', 'B', 'A'},
119};
120
David Hendricks0fa54152016-03-16 15:08:56 -0700121const struct nonspd_mem_info hynix_lpddr3_h9ccnnn8gtmlar_nud = {
David Hendricks6638f872015-11-04 14:52:02 -0800122 .dram_type = SPD_DRAM_TYPE_LPDDR3,
123 .module_type.ddr3_type = DDR3_MODULE_TYPE_SO_DIMM,
124
125 .module_size_mbits = 8192,
126 .num_ranks = 1,
127 .device_width = 32,
128 .ddr_freq = { DDR_333, DDR_400, DDR_533, DDR_667, DDR_800 },
129
130 .module_mfg_id = { .msb = 0xad, .lsb = 0x80 },
131 .dram_mfg_id = { .msb = 0xad, .lsb = 0x80 },
132
133 .part_num =
134 { 'H', '9', 'C', 'C', 'N', 'N', 'N', '8', 'G', 'T', 'M', 'L',
135 'A', 'R', '-', 'N', 'U', 'D',},
136};
137
Milton Chiang5664fe32016-11-29 14:59:49 +0800138const struct nonspd_mem_info hynix_lpddr3_h9ccnnnbjtalar_nud = {
139 .dram_type = SPD_DRAM_TYPE_LPDDR3,
140 .module_type.ddr3_type = DDR3_MODULE_TYPE_SO_DIMM,
141
142 .module_size_mbits = 16384,
143 .num_ranks = 2,
144 .device_width = 32,
145 .ddr_freq = { DDR_333, DDR_400, DDR_533, DDR_667, DDR_800 },
146
147 .module_mfg_id = { .msb = 0xad, .lsb = 0x80 },
148 .dram_mfg_id = { .msb = 0xad, .lsb = 0x80 },
149
150 .part_num =
151 { 'H', '9', 'C', 'C', 'N', 'N', 'N', 'B', 'J', 'T', 'A', 'L',
152 'A', 'R', '-', 'N', 'U', 'D',},
153};
154
David Hendricks0fa54152016-03-16 15:08:56 -0700155const struct nonspd_mem_info hynix_lpddr3_h9ccnnnbjtmlar_nud = {
David Hendricks6638f872015-11-04 14:52:02 -0800156 .dram_type = SPD_DRAM_TYPE_LPDDR3,
157 .module_type.ddr3_type = DDR3_MODULE_TYPE_SO_DIMM,
158
159 .module_size_mbits = 16384,
160 .num_ranks = 2,
161 .device_width = 32,
162 .ddr_freq = { DDR_333, DDR_400, DDR_533, DDR_667, DDR_800 },
163
164 .module_mfg_id = { .msb = 0xad, .lsb = 0x80 },
165 .dram_mfg_id = { .msb = 0xad, .lsb = 0x80 },
166
167 .part_num =
168 { 'H', '9', 'C', 'C', 'N', 'N', 'N', 'B', 'J', 'T', 'M', 'L',
169 'A', 'R', '-', 'N', 'U', 'D',},
170};
171
David Hendricks0fa54152016-03-16 15:08:56 -0700172const struct nonspd_mem_info hynix_ddr3l_h5tc8g63amr_pba = {
David Hendricks6638f872015-11-04 14:52:02 -0800173 .dram_type = SPD_DRAM_TYPE_DDR3,
174 .module_type.ddr3_type = DDR3_MODULE_TYPE_SO_DIMM,
175 .module_size_mbits = 8192,
176 .num_ranks = 2,
177 .device_width = 16,
178 .ddr_freq = { DDR_333, DDR_400, DDR_533, DDR_667, DDR_800 },
179
180 .module_mfg_id = { .msb = 0xad, .lsb = 0x80 },
181 .dram_mfg_id = { .msb = 0xad, .lsb = 0x80 },
182
183 .serial_num = { 0, 0, 0, 0 },
184 .part_num =
185 { 'H', '5', 'T', 'C', '8', 'G', '6', '3', 'A', 'M', 'R', '-',
186 'P', 'B', 'A' },
187};
188
David Hendricks0fa54152016-03-16 15:08:56 -0700189const struct nonspd_mem_info hynix_lpddr3_h9ccnnnbptblbr_nud = {
Loop Wu2a7e0fc2016-01-20 14:39:46 +0800190 .dram_type = SPD_DRAM_TYPE_LPDDR3,
191 .module_type.ddr3_type = DDR3_MODULE_TYPE_SO_DIMM,
192
193 .module_size_mbits = 16384,
194 .num_ranks = 2,
195 .device_width = 32,
196 .ddr_freq = { DDR_667, DDR_800, DDR_933 },
197
198 .module_mfg_id = { .msb = 0xad, .lsb = 0x80 },
199 .dram_mfg_id = { .msb = 0xad, .lsb = 0x80 },
200
201 .part_num =
202 { 'H', '9', 'C', 'C', 'N', 'N', 'N', 'B', 'P', 'T', 'B', 'L',
203 'B', 'R', '-', 'N', 'U', 'D',},
204};
205
Milton Chiang1bcd0e62016-04-12 16:38:25 +0800206const struct nonspd_mem_info hynix_lpddr3_h9ccnnnbltblar_nud = {
207 .dram_type = SPD_DRAM_TYPE_LPDDR3,
208 .module_type.ddr3_type = DDR3_MODULE_TYPE_SO_DIMM,
209
210 .module_size_mbits = 16384,
211 .num_ranks = 2,
212 .device_width = 32,
213 .ddr_freq = { DDR_667, DDR_800, DDR_933 },
214
215 .module_mfg_id = { .msb = 0xad, .lsb = 0x80 },
216 .dram_mfg_id = { .msb = 0xad, .lsb = 0x80 },
217
218 .part_num =
219 { 'H', '9', 'C', 'C', 'N', 'N', 'N', 'B', 'L', 'T', 'B', 'L',
220 'A', 'R', '-', 'N', 'U', 'D',},
221};
222
Kevin Chiu55250dd2016-11-08 17:21:23 +0800223const struct nonspd_mem_info hynix_lpddr4_h9hcnnn8kumlhr = {
224 .dram_type = SPD_DRAM_TYPE_LPDDR4,
225
226 .module_size_mbits = 8192,
227 .num_ranks = 1,
228 .device_width = 32,
229 .ddr_freq = { DDR_667, DDR_800, DDR_933, DDR_1067, DDR_1400},
230
231 .module_mfg_id = { .msb = 0xad, .lsb = 0x80 },
232 .dram_mfg_id = { .msb = 0xad, .lsb = 0x80 },
233
234 .part_num =
235 { 'H', '9', 'H', 'C', 'N', 'N', 'N', '8', 'K', 'U', 'M', 'L',
236 'H', 'R',},
237};
238
239const struct nonspd_mem_info hynix_lpddr4_h9hcnnnbpumlhr = {
240 .dram_type = SPD_DRAM_TYPE_LPDDR4,
241
242 .module_size_mbits = 16384,
243 .num_ranks = 2,
244 .device_width = 32,
245 .ddr_freq = { DDR_667, DDR_800, DDR_933, DDR_1067, DDR_1400},
246
247 .module_mfg_id = { .msb = 0xad, .lsb = 0x80 },
248 .dram_mfg_id = { .msb = 0xad, .lsb = 0x80 },
249
250 .part_num =
251 { 'H', '9', 'H', 'C', 'N', 'N', 'N', 'B', 'P', 'U', 'M', 'L',
252 'H', 'R',},
253};
254
David Hendricks6638f872015-11-04 14:52:02 -0800255const struct nonspd_mem_info micron_mt41k256m16ha = {
256 .dram_type = SPD_DRAM_TYPE_DDR3,
257 .module_type.ddr3_type = DDR3_MODULE_TYPE_UNDEFINED,
258
259 .module_size_mbits = 4096,
260 .num_ranks = 1,
261 .device_width = 16,
262 .ddr_freq = { DDR_533, DDR_667, DDR_800 },
263
264 .module_mfg_id = { .msb = 0x2c, .lsb = 0x00 },
265 .dram_mfg_id = { .msb = 0x2c, .lsb = 0x00 },
266
267 .serial_num = { 0, 0, 0, 0 },
268 .part_num = { 'M', 'T', '4', '1', 'K', '2', '5', '6', 'M',
269 '1', '6', 'H', 'A', '-', '1', '2', '5' },
270};
271
Milton Chiang5664fe32016-11-29 14:59:49 +0800272const struct nonspd_mem_info micron_mt52l256m32d1pf = {
273 .dram_type = SPD_DRAM_TYPE_DDR3,
274 .module_type.ddr3_type = DDR3_MODULE_TYPE_UNDEFINED,
275
276 .module_size_mbits = 8192,
277 .num_ranks = 1,
278 .device_width = 32,
279 .ddr_freq = { DDR_800, DDR_933, DDR_1067 },
280
281 .module_mfg_id = { .msb = 0x2c, .lsb = 0x00 },
282 .dram_mfg_id = { .msb = 0x2c, .lsb = 0x00 },
283
284 .serial_num = { 0, 0, 0, 0 },
285 .part_num = { 'M', 'T', '5', '2', 'L', '2', '5', '6', 'M',
286 '3', '2', 'D', '1', 'P', 'F', '-', '0', '9',
287 '3', 'W', 'T', ':', 'B' },
288};
289
290const struct nonspd_mem_info micron_mt52l512m32d2pf = {
291 .dram_type = SPD_DRAM_TYPE_DDR3,
292 .module_type.ddr3_type = DDR3_MODULE_TYPE_UNDEFINED,
293
294 .module_size_mbits = 16384,
295 .num_ranks = 2,
296 .device_width = 32,
297 .ddr_freq = { DDR_800, DDR_933, DDR_1067 },
298
299 .module_mfg_id = { .msb = 0x2c, .lsb = 0x00 },
300 .dram_mfg_id = { .msb = 0x2c, .lsb = 0x00 },
301
302 .serial_num = { 0, 0, 0, 0 },
303 .part_num = { 'M', 'T', '5', '2', 'L', '5', '1', '2', 'M',
304 '3', '2', 'D', '2', 'P', 'F', '-', '0', '9',
305 '3', 'W', 'T', ':', 'B' },
306};
307
David Hendricks97303242015-11-11 14:41:40 -0800308const struct nonspd_mem_info nanya_ddr3l_nt5cc256m16dp_di = {
309 .dram_type = SPD_DRAM_TYPE_DDR3,
310 .module_type.ddr3_type = DDR3_MODULE_TYPE_UNDEFINED,
311
312 .module_size_mbits = 4096,
313 .num_ranks = 1,
314 .device_width = 16,
315 /* CL = 11, CWL = 8, min = 1.25ns, max <1.5ns */
316 .ddr_freq = { DDR_667, DDR_800 },
317 .module_mfg_id = { .msb = 0x0b, .lsb = 0x03 },
318 .dram_mfg_id = { .msb = 0x0b, .lsb = 0x03 },
319
320 .serial_num = { 0, 0, 0, 0 },
321 .part_num = { 'N', 'T', '5', 'C', 'C', '2', '5', '6',
322 'M', '1', '6', 'D', 'P', '-', 'D', 'I' },
323};
324
David Hendricks6638f872015-11-04 14:52:02 -0800325const struct nonspd_mem_info samsung_k4b4g1646d = {
326 .dram_type = SPD_DRAM_TYPE_DDR3,
327 .module_type.ddr3_type = DDR3_MODULE_TYPE_UNDEFINED,
328
329 .module_size_mbits = 4096,
330 .num_ranks = 1,
331 .device_width = 16,
332 .ddr_freq = { DDR_400, DDR_533, DDR_667, DDR_800 },
333
334 .module_mfg_id = { .msb = 0xce, .lsb = 0x00 },
335 .dram_mfg_id = { .msb = 0xce, .lsb = 0x00 },
336
337 .serial_num = { 0, 0, 0, 0 },
338 .part_num =
339 { 'K', '4', 'B', '4', 'G', '1', '6', '4', '6', 'D',
340 '-', 'B', 'Y', 'K', '0' },
341};
342
343const struct nonspd_mem_info samsung_k4b4g1646e = {
344 .dram_type = SPD_DRAM_TYPE_DDR3,
345 .module_type.ddr3_type = DDR3_MODULE_TYPE_UNDEFINED,
346
347 .module_size_mbits = 4096,
348 .num_ranks = 1,
349 .device_width = 16,
350 .ddr_freq = { DDR_400, DDR_533, DDR_667, DDR_800 },
351
352 .module_mfg_id = { .msb = 0xce, .lsb = 0x00 },
353 .dram_mfg_id = { .msb = 0xce, .lsb = 0x00 },
354
355 .serial_num = { 0, 0, 0, 0 },
356 .part_num =
357 { 'K', '4', 'B', '4', 'G', '1', '6', '4', '6', 'E',
358 '-', 'B', 'Y', 'K', '0' },
359};
360
David Hendricks0fa54152016-03-16 15:08:56 -0700361const struct nonspd_mem_info samsung_ddr3l_k4b4g1646d_byk0 = {
David Hendricks6638f872015-11-04 14:52:02 -0800362 .dram_type = SPD_DRAM_TYPE_DDR3,
363 .module_type.ddr3_type = DDR3_MODULE_TYPE_SO_DIMM,
364
365 .module_size_mbits = 4096,
366 .num_ranks = 1,
367 .device_width = 16,
368 .ddr_freq = { DDR_400, DDR_533, DDR_667, DDR_800 },
369
370 .module_mfg_id = { .msb = 0xce, .lsb = 0x00 },
371 .dram_mfg_id = { .msb = 0xce, .lsb = 0x00 },
372
373 .serial_num = { 0, 0, 0, 0 },
374 .part_num =
375 { 'K', '4', 'B', '4', 'G', '1', '6', '4', '6', 'D', '-',
376 'B', 'Y', 'K', '0' },
377};
378
David Hendricks0fa54152016-03-16 15:08:56 -0700379const struct nonspd_mem_info samsung_ddr3l_k4b4g1646q_hyk0 = {
David Hendricks6638f872015-11-04 14:52:02 -0800380 .dram_type = SPD_DRAM_TYPE_DDR3,
381 .module_type.ddr3_type = DDR3_MODULE_TYPE_SO_DIMM,
382
383 .module_size_mbits = 4096,
384 .num_ranks = 1,
385 .device_width = 16,
386 .ddr_freq = { DDR_400, DDR_533, DDR_667, DDR_800 },
387
388 .module_mfg_id = { .msb = 0xce, .lsb = 0x00 },
389 .dram_mfg_id = { .msb = 0xce, .lsb = 0x00 },
390
391 .serial_num = { 0, 0, 0, 0 },
392 .part_num =
393 { 'K', '4', 'B', '4', 'G', '1', '6', '4', '6', 'Q', '-',
394 'H', 'Y', 'K', '0' },
395};
396
David Hendricks0fa54152016-03-16 15:08:56 -0700397const struct nonspd_mem_info samsung_ddr3l_k4b8g1646q_myk0 = {
David Hendricks6638f872015-11-04 14:52:02 -0800398 .dram_type = SPD_DRAM_TYPE_DDR3,
399 .module_type.ddr3_type = DDR3_MODULE_TYPE_SO_DIMM,
400 .module_size_mbits = 8192,
401 .num_ranks = 2,
402 .device_width = 16,
403 .ddr_freq = { DDR_333, DDR_400, DDR_533, DDR_667, DDR_800 },
404
405 .module_mfg_id = { .msb = 0xce, .lsb = 0x00 },
406 .dram_mfg_id = { .msb = 0xce, .lsb = 0x00 },
407
408 .serial_num = { 0, 0, 0, 0 },
409 .part_num =
410 { 'K', '4', 'B', '8', 'G', '1', '6', '4', '6', 'Q', '-',
411 'M', 'Y', 'K', '0' },
412};
413
David Hendricks0fa54152016-03-16 15:08:56 -0700414const struct nonspd_mem_info samsung_lpddr3_k3qf2f20em_agce = {
David Hendricks6638f872015-11-04 14:52:02 -0800415 .dram_type = SPD_DRAM_TYPE_LPDDR3,
416 .module_type.ddr3_type = DDR3_MODULE_TYPE_SO_DIMM,
417
418 .module_size_mbits = 8192,
419 .num_ranks = 2,
420 .device_width = 32,
421 .ddr_freq = { DDR_400, DDR_533, DDR_667, DDR_800 },
422
423 .module_mfg_id = { .msb = 0xce, .lsb = 0x00 },
424 .dram_mfg_id = { .msb = 0xce, .lsb = 0x00 },
425
426 .part_num =
427 { 'K', '3', 'Q', 'F', '2', 'F', '2', '0', 'E', 'M', '-',
428 'A', 'G', 'C', 'E' },
429};
430
Vincent Palatin90af8e62016-05-20 12:12:49 -0700431const struct nonspd_mem_info samsung_lpddr3_k4e6e304eb_egce = {
432 .dram_type = SPD_DRAM_TYPE_LPDDR3,
433 .module_type.ddr3_type = DDR3_MODULE_TYPE_SO_DIMM,
434
435 .module_size_mbits = 16384,
436 .num_ranks = 2,
437 .device_width = 32,
438 .ddr_freq = { DDR_400, DDR_533, DDR_667, DDR_800, DDR_933},
439
440 .module_mfg_id = { .msb = 0xce, .lsb = 0x00 },
441 .dram_mfg_id = { .msb = 0xce, .lsb = 0x00 },
442
443 .part_num =
444 { 'K', '4', 'E', '6', 'E', '3', '0', '4', 'E', 'B', '-',
445 'E', 'G', 'C', 'E' },
446};
447
David Hendricks0fa54152016-03-16 15:08:56 -0700448const struct nonspd_mem_info samsung_lpddr3_k4e6e304ee_egce = {
David Hendricks6638f872015-11-04 14:52:02 -0800449 .dram_type = SPD_DRAM_TYPE_LPDDR3,
450 .module_type.ddr3_type = DDR3_MODULE_TYPE_SO_DIMM,
451
452 .module_size_mbits = 16384,
453 .num_ranks = 2,
454 .device_width = 32,
455 .ddr_freq = { DDR_400, DDR_533, DDR_667, DDR_800, DDR_933},
456
457 .module_mfg_id = { .msb = 0xce, .lsb = 0x00 },
458 .dram_mfg_id = { .msb = 0xce, .lsb = 0x00 },
459
460 .part_num =
461 { 'K', '4', 'E', '6', 'E', '3', '0', '4', 'E', 'E', '-',
462 'E', 'G', 'C', 'E' },
463};
464
Milton Chiang1bcd0e62016-04-12 16:38:25 +0800465const struct nonspd_mem_info samsung_lpddr3_k4e6e304eb_egcf = {
466 .dram_type = SPD_DRAM_TYPE_LPDDR3,
467 .module_type.ddr3_type = DDR3_MODULE_TYPE_SO_DIMM,
468
469 .module_size_mbits = 16384,
470 .num_ranks = 2,
471 .device_width = 32,
472 .ddr_freq = { DDR_400, DDR_533, DDR_667, DDR_800, DDR_933},
473
474 .module_mfg_id = { .msb = 0xce, .lsb = 0x00 },
475 .dram_mfg_id = { .msb = 0xce, .lsb = 0x00 },
476
477 .part_num =
478 { 'K', '4', 'E', '6', 'E', '3', '0', '4', 'E', 'B', '-',
479 'E', 'G', 'C', 'F' },
480};
481
David Hendricks0fa54152016-03-16 15:08:56 -0700482const struct nonspd_mem_info samsung_lpddr3_k4e8e304ed_egcc = {
David Hendricks6638f872015-11-04 14:52:02 -0800483 .dram_type = SPD_DRAM_TYPE_DDR3,
484 .module_type.ddr3_type = DDR3_MODULE_TYPE_SO_DIMM,
485
486 .module_size_mbits = 8192,
487 .num_ranks = 2,
488 .device_width = 32,
489 .ddr_freq = { DDR_533 },
490
491 .module_mfg_id = { .msb = 0xce, .lsb = 0x00 },
492 .dram_mfg_id = { .msb = 0xce, .lsb = 0x00 },
493
494 .serial_num = { 0, 0, 0, 0 },
495 .part_num =
496 { 'K', '4', 'E', '8', 'E', '3', '0', '4', 'E', 'D', '-',
497 'E', 'G', 'C', 'C' },
498};
499
David Hendricks0fa54152016-03-16 15:08:56 -0700500const struct nonspd_mem_info samsung_lpddr3_k4e8e304ee_egce = {
David Hendricks6638f872015-11-04 14:52:02 -0800501 .dram_type = SPD_DRAM_TYPE_LPDDR3,
502 .module_type.ddr3_type = DDR3_MODULE_TYPE_SO_DIMM,
503
504 .module_size_mbits = 8192,
505 .num_ranks = 2,
506 .device_width = 32,
507 .ddr_freq = { DDR_400, DDR_533, DDR_667, DDR_800, DDR_933 },
508
509 .module_mfg_id = { .msb = 0xce, .lsb = 0x00 },
510 .dram_mfg_id = { .msb = 0xce, .lsb = 0x00 },
511
512 .part_num =
513 { 'K', '4', 'E', '8', 'E', '3', '0', '4', 'E', 'E', '-',
514 'E', 'G', 'C', 'E' },
515};
Vincent Palatin90af8e62016-05-20 12:12:49 -0700516
517const struct nonspd_mem_info samsung_lpddr3_k4e8e324eb_egcf = {
518 .dram_type = SPD_DRAM_TYPE_LPDDR3,
519 .module_type.ddr3_type = DDR3_MODULE_TYPE_SO_DIMM,
520
521 .module_size_mbits = 8192,
522 .num_ranks = 2,
523 .device_width = 32,
524 .ddr_freq = { DDR_400, DDR_533, DDR_667, DDR_800, DDR_933 },
525
526 .module_mfg_id = { .msb = 0xce, .lsb = 0x00 },
527 .dram_mfg_id = { .msb = 0xce, .lsb = 0x00 },
528
529 .part_num =
530 { 'K', '4', 'E', '8', 'E', '3', '2', '4', 'E', 'B', '-',
531 'E', 'G', 'C', 'F' },
532};
Ravi Sarawadi7ef277d2016-08-16 17:04:00 -0700533
Loop Wue0fa3212016-12-01 16:25:41 +0800534const struct nonspd_mem_info micron_lpddr3_mt52l256m32d1pf_107wtb = {
535 .dram_type = SPD_DRAM_TYPE_LPDDR3,
536 .module_type.ddr3_type = DDR3_MODULE_TYPE_SO_DIMM,
537
538 .module_size_mbits = 8192,
539 .num_ranks = 1,
540 .device_width = 32,
541 .ddr_freq = { DDR_667, DDR_800, DDR_933 },
542
543 .module_mfg_id = { .msb = 0x2c, .lsb = 0x00 },
544 .dram_mfg_id = { .msb = 0x2c, .lsb = 0x00 },
545
546 .part_num =
547 { 'M', 'T', '5', '2', 'L', '2', '5', '6', 'M', '3', '2', 'D',
548 '1', 'P', 'F', '-', '1', '0', '7', 'W', 'T', ':', 'B' },
549};
550
jiazi Yang5e3d5942017-04-05 22:30:45 -0400551const struct nonspd_mem_info micron_lpddr3_mt52l256m64d2pp_107wtb = {
552 .dram_type = SPD_DRAM_TYPE_LPDDR3,
553 .module_type.ddr3_type = DDR3_MODULE_TYPE_SO_DIMM,
554
555 .module_size_mbits = 8192,
556 .num_ranks = 1,
557 .device_width = 32,
558 .ddr_freq = { DDR_667, DDR_800, DDR_933 },
559
560 .module_mfg_id = { .msb = 0x2c, .lsb = 0x00 },
561 .dram_mfg_id = { .msb = 0x2c, .lsb = 0x00 },
562
563 .part_num =
564 { 'M', 'T', '5', '2', 'L', '2', '5', '6', 'M', '6', '4', 'D',
565 '2', 'P', 'P', '-', '1', '0', '7', 'W', 'T', ':', 'B' },
566};
567
Loop Wue0fa3212016-12-01 16:25:41 +0800568const struct nonspd_mem_info micron_lpddr3_mt52l512m32d2pf_107wtb = {
569 .dram_type = SPD_DRAM_TYPE_LPDDR3,
570 .module_type.ddr3_type = DDR3_MODULE_TYPE_SO_DIMM,
571
572 .module_size_mbits = 16384,
573 .num_ranks = 2,
574 .device_width = 32,
575 .ddr_freq = { DDR_667, DDR_800, DDR_933 },
576
577 .module_mfg_id = { .msb = 0x2c, .lsb = 0x00 },
578 .dram_mfg_id = { .msb = 0x2c, .lsb = 0x00 },
579
580 .part_num =
581 { 'M', 'T', '5', '2', 'L', '5', '1', '2', 'M', '3', '2', 'D',
582 '2', 'P', 'F', '-', '1', '0', '7', 'W', 'T', ':', 'B' },
583};
584
Ravi Sarawadi7ef277d2016-08-16 17:04:00 -0700585static const struct nonspd_mem_info micron_lpddr4_mt53b256m32d1np = {
586 .dram_type = SPD_DRAM_TYPE_LPDDR4,
587
588 .module_size_mbits = 8192,
589 .num_ranks = 1,
590 .device_width = 32,
591 .ddr_freq = { DDR_667, DDR_800, DDR_933, DDR_1067, DDR_1400},
592
593 .module_mfg_id = { .msb = 0x2c, .lsb = 0x00 },
594 .dram_mfg_id = { .msb = 0x2c, .lsb = 0x00 },
595
596 .part_num =
597 { 'M', 'T', '5', '3', 'B', '2', '5', '6', 'M', '3', '2', 'D',
598 '1', 'N', 'P'},
599};
600
601static const struct nonspd_mem_info micron_lpddr4_mt53b512m32d2np = {
602 .dram_type = SPD_DRAM_TYPE_LPDDR4,
603
604 .module_size_mbits = 16384,
605 .num_ranks = 2,
606 .device_width = 32,
607 .ddr_freq = { DDR_667, DDR_800, DDR_933, DDR_1067, DDR_1400},
608
609 .module_mfg_id = { .msb = 0x2c, .lsb = 0x00 },
610 .dram_mfg_id = { .msb = 0x2c, .lsb = 0x00 },
611
612 .part_num =
613 { 'M', 'T', '5', '3', 'B', '5', '1', '2', 'M', '3', '2', 'D',
614 '2', 'N', 'P'},
615};
616
617static const struct nonspd_mem_info samsung_lpddr4_k4f6e304hb_mgcj = {
618 .dram_type = SPD_DRAM_TYPE_LPDDR4,
619
620 .module_size_mbits = 16384,
621 .num_ranks = 2,
622 .device_width = 32,
623 .ddr_freq = { DDR_667, DDR_800, DDR_933, DDR_1067, DDR_1400},
624
625 .module_mfg_id = { .msb = 0xce, .lsb = 0x00 },
626 .dram_mfg_id = { .msb = 0xce, .lsb = 0x00 },
627
628 .part_num =
629 { 'K', '4', 'F', '6', 'E', '3', '0', '4', 'H', 'B', '-',
630 'M', 'G', 'C', 'J' },
631};
632
633static const struct nonspd_mem_info samsung_lpddr4_k4f8e304hb_mgcj = {
634 .dram_type = SPD_DRAM_TYPE_LPDDR4,
635
636 .module_size_mbits = 8192,
637 .num_ranks = 1,
638 .device_width = 32,
639 .ddr_freq = { DDR_667, DDR_800, DDR_933, DDR_1067, DDR_1400},
640
641 .module_mfg_id = { .msb = 0xce, .lsb = 0x00 },
642 .dram_mfg_id = { .msb = 0xce, .lsb = 0x00 },
643
644 .part_num =
645 { 'K', '4', 'F', '8', 'E', '3', '0', '4', 'H', 'B', '-',
646 'M', 'G', 'C', 'J' },
647};
648
649static const struct nonspd_mem_info samsung_lpddr4_k4f6e304hb_mgch = {
650 .dram_type = SPD_DRAM_TYPE_LPDDR4,
651
652 .module_size_mbits = 8192,
653 .num_ranks = 1,
654 .device_width = 32,
655 .ddr_freq = { DDR_667, DDR_800, DDR_933, DDR_1067, DDR_1400},
656
657 .module_mfg_id = { .msb = 0xce, .lsb = 0x00 },
658 .dram_mfg_id = { .msb = 0xce, .lsb = 0x00 },
659
660 .part_num =
661 { 'K', '4', 'F', '6', 'E', '3', '0', '4', 'H', 'B', '-',
662 'M', 'G', 'C', 'H' },
663};
664
665static const struct nonspd_mem_info *nospdmemory[] = {
666 &elpida_lpddr3_edfa164a2ma_jd_f,
667 &elpida_lpddr3_f8132a3ma_gd_f,
668 &elpida_lpddr3_fa232a2ma_gc_f,
669 &hynix_ddr3l_h5tc4g63afr_pba,
670 &hynix_ddr3l_h5tc4g63cfr_pba,
671 &hynix_lpddr3_h9ccnnn8gtmlar_nud,
Milton Chiang5664fe32016-11-29 14:59:49 +0800672 &hynix_lpddr3_h9ccnnnbjtalar_nud,
Ravi Sarawadi7ef277d2016-08-16 17:04:00 -0700673 &hynix_lpddr3_h9ccnnnbjtmlar_nud,
674 &hynix_ddr3l_h5tc8g63amr_pba,
675 &hynix_lpddr3_h9ccnnnbptblbr_nud,
676 &hynix_lpddr3_h9ccnnnbltblar_nud,
Kevin Chiu55250dd2016-11-08 17:21:23 +0800677 &hynix_lpddr4_h9hcnnn8kumlhr,
678 &hynix_lpddr4_h9hcnnnbpumlhr,
Loop Wue0fa3212016-12-01 16:25:41 +0800679 &micron_lpddr3_mt52l256m32d1pf_107wtb,
jiazi Yang5e3d5942017-04-05 22:30:45 -0400680 &micron_lpddr3_mt52l256m64d2pp_107wtb,
Loop Wue0fa3212016-12-01 16:25:41 +0800681 &micron_lpddr3_mt52l512m32d2pf_107wtb,
Ravi Sarawadi7ef277d2016-08-16 17:04:00 -0700682 &micron_lpddr4_mt53b256m32d1np,
683 &micron_lpddr4_mt53b512m32d2np,
684 &micron_mt41k256m16ha,
Milton Chiang5664fe32016-11-29 14:59:49 +0800685 &micron_mt52l256m32d1pf,
686 &micron_mt52l512m32d2pf,
Ravi Sarawadi7ef277d2016-08-16 17:04:00 -0700687 &nanya_ddr3l_nt5cc256m16dp_di,
688 &samsung_k4b4g1646d,
689 &samsung_k4b4g1646e,
690 &samsung_ddr3l_k4b4g1646d_byk0,
691 &samsung_ddr3l_k4b4g1646q_hyk0,
692 &samsung_ddr3l_k4b8g1646q_myk0,
693 &samsung_lpddr3_k3qf2f20em_agce,
694 &samsung_lpddr3_k4e6e304eb_egce,
695 &samsung_lpddr3_k4e6e304ee_egce,
696 &samsung_lpddr3_k4e6e304eb_egcf,
697 &samsung_lpddr3_k4e8e304ed_egcc,
698 &samsung_lpddr3_k4e8e304ee_egce,
699 &samsung_lpddr3_k4e8e324eb_egcf,
700 &samsung_lpddr4_k4f6e304hb_mgch,
701 &samsung_lpddr4_k4f6e304hb_mgcj,
702 &samsung_lpddr4_k4f8e304hb_mgcj,
703};
704
705int spd_set_nonspd_info(struct platform_intf *intf,
706 const struct nonspd_mem_info **info)
707{
708 int dimm = 0, index;
709 struct smbios_table table;
710
711 if (smbios_find_table(intf, SMBIOS_TYPE_MEMORY, dimm, &table,
712 SMBIOS_LEGACY_ENTRY_BASE,
713 SMBIOS_LEGACY_ENTRY_LEN) < 0) {
714 lprintf(LOG_ERR, "%s: SMBIOS Memory info table missing\n"
715 , __func__);
716 return -1;
717 }
718
719 for (index = 0; index < ARRAY_SIZE(nospdmemory); index++) {
720 if (!strncmp(table.string[table.data.mem_device.part_number],
721 nospdmemory[index]->part_num,
722 sizeof(nospdmemory[index]->part_num))) {
723 *info = nospdmemory[index];
724 break;
725 }
726 }
727
728 if (index == ARRAY_SIZE(nospdmemory)) {
729 lprintf(LOG_ERR, "%s: non SPD info missing\n", __func__);
730 return -1;
731 }
732
733 return 0;
734}