soc/intel: Fill DIMM serial number from SPD
Fill the DIMM serial number field for SMBIOS from the saved SPD data that is returned by FSP. BUG=b:132970635 TEST=This was tested on sarien to ensure that SMBIOS type 17 filled the serial number from the DIMM: Handle 0x000B, DMI type 17, 40 bytes Memory Device Locator: DIMM-A Serial Number: 41164beb Change-Id: I85438bd1d581095ea3482dcf077a7f3389f1cd47 Signed-off-by: Duncan Laurie <dlaurie@google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/32853 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Lijian Zhao <lijian.zhao@intel.com>
This commit is contained in:
committed by
Duncan Laurie
parent
9beb52a17c
commit
46340d076a
@@ -90,6 +90,7 @@ void save_lpddr4_dimm_info_part_num(const char *dram_part_num)
|
|||||||
src_dimm->DimmId,
|
src_dimm->DimmId,
|
||||||
dram_part_num,
|
dram_part_num,
|
||||||
strlen(dram_part_num),
|
strlen(dram_part_num),
|
||||||
|
NULL, /* SPD not available */
|
||||||
memory_info_hob->DataWidth);
|
memory_info_hob->DataWidth);
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
@@ -96,6 +96,7 @@ void save_lpddr4_dimm_info_part_num(const char *dram_part_num)
|
|||||||
src_dimm->DimmId,
|
src_dimm->DimmId,
|
||||||
dram_part_num,
|
dram_part_num,
|
||||||
strlen(dram_part_num),
|
strlen(dram_part_num),
|
||||||
|
src_dimm->SpdSave + SPD_SAVE_OFFSET_SERIAL,
|
||||||
memory_info_hob->DataWidth);
|
memory_info_hob->DataWidth);
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
@@ -111,6 +111,7 @@ static void save_dimm_info(void)
|
|||||||
src_dimm->DimmId,
|
src_dimm->DimmId,
|
||||||
dram_part_num,
|
dram_part_num,
|
||||||
dram_part_num_len,
|
dram_part_num_len,
|
||||||
|
src_dimm->SpdSave + SPD_SAVE_OFFSET_SERIAL,
|
||||||
memory_info_hob->DataWidth);
|
memory_info_hob->DataWidth);
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
@@ -22,7 +22,7 @@
|
|||||||
void dimm_info_fill(struct dimm_info *dimm, u32 dimm_capacity, u8 ddr_type,
|
void dimm_info_fill(struct dimm_info *dimm, u32 dimm_capacity, u8 ddr_type,
|
||||||
u32 frequency, u8 rank_per_dimm, u8 channel_id, u8 dimm_id,
|
u32 frequency, u8 rank_per_dimm, u8 channel_id, u8 dimm_id,
|
||||||
const char *module_part_num, size_t module_part_number_size,
|
const char *module_part_num, size_t module_part_number_size,
|
||||||
u16 data_width)
|
const u8 *module_serial_num, u16 data_width)
|
||||||
{
|
{
|
||||||
dimm->dimm_size = dimm_capacity;
|
dimm->dimm_size = dimm_capacity;
|
||||||
dimm->ddr_type = ddr_type;
|
dimm->ddr_type = ddr_type;
|
||||||
@@ -34,6 +34,9 @@ void dimm_info_fill(struct dimm_info *dimm, u32 dimm_capacity, u8 ddr_type,
|
|||||||
module_part_num,
|
module_part_num,
|
||||||
min(sizeof(dimm->module_part_number),
|
min(sizeof(dimm->module_part_number),
|
||||||
module_part_number_size));
|
module_part_number_size));
|
||||||
|
if (module_serial_num)
|
||||||
|
memcpy(dimm->serial, module_serial_num,
|
||||||
|
DIMM_INFO_SERIAL_SIZE);
|
||||||
switch (data_width) {
|
switch (data_width) {
|
||||||
case 8:
|
case 8:
|
||||||
dimm->bus_width = MEMORY_BUS_WIDTH_8;
|
dimm->bus_width = MEMORY_BUS_WIDTH_8;
|
||||||
|
@@ -19,10 +19,13 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <memory_info.h>
|
#include <memory_info.h>
|
||||||
|
|
||||||
|
/* Offset info DIMM_INFO SpdSave for start of serial number */
|
||||||
|
#define SPD_SAVE_OFFSET_SERIAL 5
|
||||||
|
|
||||||
/* Fill the SMBIOS memory information from FSP MEM_INFO_DATA_HOB in CBMEM.*/
|
/* Fill the SMBIOS memory information from FSP MEM_INFO_DATA_HOB in CBMEM.*/
|
||||||
void dimm_info_fill(struct dimm_info *dimm, u32 dimm_capacity, u8 ddr_type,
|
void dimm_info_fill(struct dimm_info *dimm, u32 dimm_capacity, u8 ddr_type,
|
||||||
u32 frequency, u8 rank_per_dimm, u8 channel_id, u8 dimm_id,
|
u32 frequency, u8 rank_per_dimm, u8 channel_id, u8 dimm_id,
|
||||||
const char *module_part_num, size_t module_part_number_size,
|
const char *module_part_num, size_t module_part_number_size,
|
||||||
u16 data_width);
|
const u8 *module_serial_num, u16 data_width);
|
||||||
|
|
||||||
#endif /* _COMMON_SMBIOS_H_ */
|
#endif /* _COMMON_SMBIOS_H_ */
|
||||||
|
@@ -96,6 +96,7 @@ static void save_dimm_info(void)
|
|||||||
src_dimm->DimmId,
|
src_dimm->DimmId,
|
||||||
(const char *)src_dimm->ModulePartNum,
|
(const char *)src_dimm->ModulePartNum,
|
||||||
sizeof(src_dimm->ModulePartNum),
|
sizeof(src_dimm->ModulePartNum),
|
||||||
|
src_dimm->SpdSave + SPD_SAVE_OFFSET_SERIAL,
|
||||||
memory_info_hob->DataWidth);
|
memory_info_hob->DataWidth);
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
@@ -126,6 +126,7 @@ static void save_dimm_info(void)
|
|||||||
src_dimm->DimmId,
|
src_dimm->DimmId,
|
||||||
(const char *)src_dimm->ModulePartNum,
|
(const char *)src_dimm->ModulePartNum,
|
||||||
sizeof(src_dimm->ModulePartNum),
|
sizeof(src_dimm->ModulePartNum),
|
||||||
|
src_dimm->SpdSave + SPD_SAVE_OFFSET_SERIAL,
|
||||||
memory_info_hob->DataWidth);
|
memory_info_hob->DataWidth);
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user