coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
spd.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #include <device/dram/spd.h>
4 #include <spd.h>
5 
6 const char *spd_manufacturer_name(const uint16_t mod_id)
7 {
8  switch (mod_id) {
9  case 0x9b85:
10  return "Crucial";
11  case 0x4304:
12  return "Ramaxel";
13  case 0x4f01:
14  return "Transcend";
15  case 0x9801:
16  return "Kingston";
17  case 0x987f:
18  case 0xad00:
19  return "Hynix";
20  case 0x9e02:
21  return "Corsair";
22  case 0xb004:
23  return "OCZ";
24  case 0xad80:
25  return "Hynix/Hyundai";
26  case 0x3486:
27  return "Super Talent";
28  case 0xcd04:
29  return "GSkill";
30  case 0xce80:
31  case 0xce00:
32  return "Samsung";
33  case 0xfe02:
34  return "Elpida";
35  case 0x2c80:
36  case 0x2c00:
37  return "Micron";
38  default:
39  return NULL;
40  }
41 }
42 
44 {
45  info->form_factor = MEMORY_FORMFACTOR_UNKNOWN;
46  info->type_detail = MEMORY_TYPE_DETAIL_UNKNOWN;
47 }
48 
50  struct spd_info *info)
51 {
52  switch (module_type) {
53  case DDR2_SPD_RDIMM:
55  info->form_factor = MEMORY_FORMFACTOR_RIMM;
56  info->type_detail = MEMORY_TYPE_DETAIL_REGISTERED;
57  break;
58  case DDR2_SPD_UDIMM:
60  info->form_factor = MEMORY_FORMFACTOR_DIMM;
61  info->type_detail = MEMORY_TYPE_DETAIL_UNBUFFERED;
62  break;
64  info->form_factor = MEMORY_FORMFACTOR_DIMM;
65  info->type_detail = MEMORY_TYPE_DETAIL_UNKNOWN;
66  break;
67  case DDR2_SPD_SODIMM:
68  info->form_factor = MEMORY_FORMFACTOR_SODIMM;
69  info->type_detail = MEMORY_TYPE_DETAIL_UNKNOWN;
70  break;
71  default:
73  break;
74  }
75 }
76 
78  struct spd_info *info)
79 {
80  switch (module_type) {
81  case DDR3_SPD_RDIMM:
83  info->form_factor = MEMORY_FORMFACTOR_RIMM;
84  info->type_detail = MEMORY_TYPE_DETAIL_REGISTERED;
85  break;
86  case DDR3_SPD_UDIMM:
88  info->form_factor = MEMORY_FORMFACTOR_DIMM;
89  info->type_detail = MEMORY_TYPE_DETAIL_UNBUFFERED;
90  break;
92  info->form_factor = MEMORY_FORMFACTOR_DIMM;
93  info->type_detail = MEMORY_TYPE_DETAIL_UNKNOWN;
94  break;
95  case DDR3_SPD_SODIMM:
97  info->form_factor = MEMORY_FORMFACTOR_SODIMM;
98  info->type_detail = MEMORY_TYPE_DETAIL_UNKNOWN;
99  break;
100  default:
102  break;
103  }
104 }
105 
107  struct spd_info *info)
108 {
109  switch (module_type) {
110  case DDR4_SPD_RDIMM:
111  case DDR4_SPD_MINI_RDIMM:
112  info->form_factor = MEMORY_FORMFACTOR_RIMM;
113  info->type_detail = MEMORY_TYPE_DETAIL_REGISTERED;
114  break;
115  case DDR4_SPD_UDIMM:
116  case DDR4_SPD_MINI_UDIMM:
117  info->form_factor = MEMORY_FORMFACTOR_DIMM;
118  info->type_detail = MEMORY_TYPE_DETAIL_UNBUFFERED;
119  break;
120  case DDR4_SPD_SODIMM:
122  info->form_factor = MEMORY_FORMFACTOR_SODIMM;
123  info->type_detail = MEMORY_TYPE_DETAIL_UNKNOWN;
124  break;
125  default:
127  break;
128  }
129 }
130 
132  struct spd_info *info)
133 {
134  switch (module_type) {
135  case DDR5_SPD_RDIMM:
136  case DDR5_SPD_MINI_RDIMM:
137  info->form_factor = MEMORY_FORMFACTOR_RIMM;
138  info->type_detail = MEMORY_TYPE_DETAIL_REGISTERED;
139  break;
140  case DDR5_SPD_UDIMM:
141  case DDR5_SPD_MINI_UDIMM:
142  info->form_factor = MEMORY_FORMFACTOR_DIMM;
143  info->type_detail = MEMORY_TYPE_DETAIL_UNBUFFERED;
144  break;
145  case DDR5_SPD_SODIMM:
147  info->form_factor = MEMORY_FORMFACTOR_SODIMM;
148  info->type_detail = MEMORY_TYPE_DETAIL_UNKNOWN;
149  break;
150  case DDR5_SPD_2DPC:
152  info->type_detail = MEMORY_TYPE_DETAIL_UNKNOWN;
153  break;
154  default:
156  break;
157  }
158 }
159 
161  struct spd_info *info)
162 {
163  switch (module_type) {
164  case LPX_SPD_NONDIMM:
165  info->form_factor = MEMORY_FORMFACTOR_ROC;
166  info->type_detail = MEMORY_TYPE_DETAIL_UNKNOWN;
167  break;
168  default:
170  break;
171  }
172 }
173 
175 {
176  switch (memory_type) {
177  case MEMORY_TYPE_DDR2:
179  break;
180  case MEMORY_TYPE_DDR3:
182  break;
183  case MEMORY_TYPE_DDR4:
185  break;
186  case MEMORY_TYPE_DDR5:
188  break;
189  case MEMORY_TYPE_LPDDR3:
190  case MEMORY_TYPE_LPDDR4:
191  case MEMORY_TYPE_LPDDR5:
193  break;
194  default:
196  break;
197  }
198 }
199 
201 {
202  return SPD_UNDEFINED;
203 }
204 
206  smbios_memory_form_factor form_factor)
207 {
208  uint8_t module_type;
209 
210  switch (form_factor) {
212  return DDR2_SPD_UDIMM;
214  return DDR2_SPD_RDIMM;
216  module_type = (memory_type == MEMORY_TYPE_DDR2) ? DDR2_SPD_SODIMM
217  : DDR3_SPD_SODIMM;
218  return module_type;
219  default:
221  }
222 }
223 
225 {
226  switch (form_factor) {
228  return LPX_SPD_NONDIMM;
229  default:
231  }
232 }
233 
235  smbios_memory_form_factor form_factor)
236 {
237  uint8_t module_type;
238 
239  switch (memory_type) {
240  case MEMORY_TYPE_DDR2:
241  case MEMORY_TYPE_DDR3:
242  case MEMORY_TYPE_DDR4:
243  case MEMORY_TYPE_DDR5:
244  module_type = convert_ddrx_form_factor_to_module_type(memory_type, form_factor);
245  break;
246  case MEMORY_TYPE_LPDDR3:
247  case MEMORY_TYPE_LPDDR4:
248  case MEMORY_TYPE_LPDDR5:
249  module_type = convert_lpx_form_factor_to_module_type(form_factor);
250  break;
251  default:
253  break;
254  }
255 
256  return module_type;
257 }
static void convert_ddr5_module_type_to_spd_info(enum ddr5_module_type module_type, struct spd_info *info)
Definition: spd.c:131
uint8_t convert_form_factor_to_module_type(smbios_memory_type memory_type, smbios_memory_form_factor form_factor)
Definition: spd.c:234
static void convert_ddr4_module_type_to_spd_info(enum ddr4_module_type module_type, struct spd_info *info)
Definition: spd.c:106
static uint8_t convert_default_form_factor_to_module_type(void)
Definition: spd.c:200
const char * spd_manufacturer_name(const uint16_t mod_id)
Definition: spd.c:6
static void convert_default_module_type_to_spd_info(struct spd_info *info)
Definition: spd.c:43
static void convert_lpx_module_type_to_spd_info(enum lpx_module_type module_type, struct spd_info *info)
Definition: spd.c:160
static void convert_ddr2_module_type_to_spd_info(enum ddr2_module_type module_type, struct spd_info *info)
Definition: spd.c:49
static uint8_t convert_ddrx_form_factor_to_module_type(smbios_memory_type memory_type, smbios_memory_form_factor form_factor)
Definition: spd.c:205
static void convert_ddr3_module_type_to_spd_info(enum ddr3_module_type module_type, struct spd_info *info)
Definition: spd.c:77
static uint8_t convert_lpx_form_factor_to_module_type(smbios_memory_form_factor form_factor)
Definition: spd.c:224
void get_spd_info(smbios_memory_type memory_type, uint8_t module_type, struct spd_info *info)
Definition: spd.c:174
static struct smmstore_params_info info
Definition: ramstage.c:12
memory_type
Definition: variants.h:25
#define MEMORY_TYPE_DETAIL_REGISTERED
Definition: smbios.h:115
#define MEMORY_TYPE_DETAIL_UNBUFFERED
Definition: smbios.h:116
smbios_memory_type
Definition: smbios.h:164
@ MEMORY_TYPE_LPDDR5
Definition: smbios.h:196
@ MEMORY_TYPE_DDR3
Definition: smbios.h:185
@ MEMORY_TYPE_DDR4
Definition: smbios.h:187
@ MEMORY_TYPE_DDR5
Definition: smbios.h:195
@ MEMORY_TYPE_DDR2
Definition: smbios.h:183
@ MEMORY_TYPE_LPDDR4
Definition: smbios.h:191
@ MEMORY_TYPE_LPDDR3
Definition: smbios.h:190
smbios_memory_form_factor
Definition: smbios.h:145
@ MEMORY_FORMFACTOR_UNKNOWN
Definition: smbios.h:147
@ MEMORY_FORMFACTOR_PROPRIETARY_CARD
Definition: smbios.h:153
@ MEMORY_FORMFACTOR_DIMM
Definition: smbios.h:154
@ MEMORY_FORMFACTOR_SODIMM
Definition: smbios.h:158
@ MEMORY_FORMFACTOR_RIMM
Definition: smbios.h:157
@ MEMORY_FORMFACTOR_ROC
Definition: smbios.h:156
#define MEMORY_TYPE_DETAIL_UNKNOWN
Definition: smbios.h:104
#define SPD_UNDEFINED
Definition: spd.h:200
ddr5_module_type
Definition: spd.h:245
@ DDR5_SPD_72B_SO_UDIMM
Definition: spd.h:252
@ DDR5_SPD_MINI_UDIMM
Definition: spd.h:251
@ DDR5_SPD_2DPC
Definition: spd.h:258
@ DDR5_SPD_MINI_RDIMM
Definition: spd.h:250
@ DDR5_SPD_RDIMM
Definition: spd.h:246
@ DDR5_SPD_SODIMM
Definition: spd.h:248
@ DDR5_SPD_UDIMM
Definition: spd.h:247
ddr4_module_type
Definition: spd.h:232
@ DDR4_SPD_RDIMM
Definition: spd.h:233
@ DDR4_SPD_SODIMM
Definition: spd.h:235
@ DDR4_SPD_72B_SO_UDIMM
Definition: spd.h:240
@ DDR4_SPD_MINI_UDIMM
Definition: spd.h:238
@ DDR4_SPD_UDIMM
Definition: spd.h:234
@ DDR4_SPD_MINI_RDIMM
Definition: spd.h:237
ddr3_module_type
Definition: spd.h:216
@ DDR3_SPD_UDIMM
Definition: spd.h:218
@ DDR3_SPD_72B_SO_UDIMM
Definition: spd.h:224
@ DDR3_SPD_MICRO_DIMM
Definition: spd.h:220
@ DDR3_SPD_MINI_UDIMM
Definition: spd.h:222
@ DDR3_SPD_RDIMM
Definition: spd.h:217
@ DDR3_SPD_MINI_RDIMM
Definition: spd.h:221
@ DDR3_SPD_SODIMM
Definition: spd.h:219
ddr2_module_type
Definition: spd.h:205
@ DDR2_SPD_RDIMM
Definition: spd.h:206
@ DDR2_SPD_MINI_UDIMM
Definition: spd.h:213
@ DDR2_SPD_MICRO_DIMM
Definition: spd.h:211
@ DDR2_SPD_MINI_RDIMM
Definition: spd.h:212
@ DDR2_SPD_UDIMM
Definition: spd.h:207
@ DDR2_SPD_SODIMM
Definition: spd.h:208
lpx_module_type
Definition: spd.h:261
@ LPX_SPD_NONDIMM
Definition: spd.h:263
#define NULL
Definition: stddef.h:19
unsigned short uint16_t
Definition: stdint.h:11
unsigned char uint8_t
Definition: stdint.h:8
Definition: spd.h:11