Marco Chen would like Marco Chen to review this change.

View Change

soc/intel/tigerlake: Allow mainboard to override DRAM part number

In order to support mainboards that do not store DRAM part number in
the traditional way i.e. within the CBFS SPD for soldered memory, this
change provides a runtime callback to allow mainboards to provide DRAM
part number from a custom location e.g. external EEPROM on volteer /
dedede.

For other boards it should be a NOP since the weak implementation of
mainboard_get_dram_part_num does nothing.

BUG=b:152019429

Change-Id: If940a76d36a7645a7441ba418aa7aec9af9f6319
Signed-off-by: Marco Chen <marcochen@google.com>
---
M src/soc/intel/tigerlake/include/soc/romstage.h
M src/soc/intel/tigerlake/romstage/romstage.c
2 files changed, 17 insertions(+), 0 deletions(-)

git pull ssh://review.coreboot.org:29418/coreboot refs/changes/60/39860/1
diff --git a/src/soc/intel/tigerlake/include/soc/romstage.h b/src/soc/intel/tigerlake/include/soc/romstage.h
index 1672e8b..9c8758a 100644
--- a/src/soc/intel/tigerlake/include/soc/romstage.h
+++ b/src/soc/intel/tigerlake/include/soc/romstage.h
@@ -17,6 +17,8 @@

#include <fsp/api.h>

+/* Provide a callback to allow mainboard to override the DRAM part number. */
+void mainboard_get_dram_part_num(const char **part_num, size_t *len);
void mainboard_memory_init_params(FSPM_UPD *mupd);
void systemagent_early_init(void);
void pch_init(void);
diff --git a/src/soc/intel/tigerlake/romstage/romstage.c b/src/soc/intel/tigerlake/romstage/romstage.c
index f78ea29..1ad6847 100644
--- a/src/soc/intel/tigerlake/romstage/romstage.c
+++ b/src/soc/intel/tigerlake/romstage/romstage.c
@@ -33,6 +33,11 @@
0x8d, 0x09, 0x11, 0xcf, 0x8b, 0x9f, 0x03, 0x23 \
}

+void __weak mainboard_get_dram_part_num(const char **part_num, size_t *len)
+{
+ /* Default weak implementation, no need to override part number. */
+}
+
/* Save the DIMM information for SMBIOS table 17 */
static void save_dimm_info(void)
{
@@ -47,6 +52,8 @@
const uint8_t smbios_memory_info_guid[16] =
FSP_SMBIOS_MEMORY_INFO_GUID;
const uint8_t *serial_num;
+ const char *dram_part_num;
+ size_t dram_part_num_len;

/* Locate the memory info HOB, presence validated by raminit */
meminfo_hob = fsp_find_extension_hob_by_guid(
@@ -86,6 +93,14 @@
if (src_dimm->Status != DIMM_PRESENT)
continue;

+ dram_part_num_len = sizeof(src_dimm->ModulePartNum);
+ dram_part_num = (const char *)
+ &src_dimm->ModulePartNum[0];
+
+ /* Allow mainboard to override DRAM part number. */
+ mainboard_get_dram_part_num(&dram_part_num,
+ &dram_part_num_len);
+
u8 memProfNum = meminfo_hob->MemoryProfile;
serial_num = src_dimm->SpdSave +
SPD_SAVE_OFFSET_SERIAL;

To view, visit change 39860. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: If940a76d36a7645a7441ba418aa7aec9af9f6319
Gerrit-Change-Number: 39860
Gerrit-PatchSet: 1
Gerrit-Owner: Marco Chen <marcochen@google.com>
Gerrit-Reviewer: Marco Chen <marcochen@chromium.org>
Gerrit-MessageType: newchange