diff options
author | Lijian Zhao <lijian.zhao@intel.com> | 2019-04-11 00:45:10 -0700 |
---|---|---|
committer | Duncan Laurie <dlaurie@chromium.org> | 2019-04-19 01:39:03 +0000 |
commit | 10ea93c3341dcae75b29e7dd049a948260d0f190 (patch) | |
tree | dcf93304550b7d7266fd47f2695b0bafbd6f241a /src/arch/x86 | |
parent | 83ad5a998dbd950aa62788a125d0332a8b450f91 (diff) |
smbios: Add type 17 device/bank locator override
Current SMBIOS type 17 device and bank locator string is like
"Channel-x-Dimm-x" and "Bank-x", x is deciminal number. Give silicon or
mainboard vendor a chance to replace with something matches with
silkscreen.
Signed-off-by: Lijian Zhao <lijian.zhao@intel.com>
Change-Id: I54f7282244cb25a05780a3cdb9d1f5405c600513
Reviewed-on: https://review.coreboot.org/c/coreboot/+/32279
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
Diffstat (limited to 'src/arch/x86')
-rw-r--r-- | src/arch/x86/smbios.c | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/src/arch/x86/smbios.c b/src/arch/x86/smbios.c index 44ff578e35..d71c0d5ff9 100644 --- a/src/arch/x86/smbios.c +++ b/src/arch/x86/smbios.c @@ -203,6 +203,19 @@ void smbios_fill_dimm_manufacturer_from_id(uint16_t mod_id, } } } +/* this function will fill the corresponding locator */ +void __weak smbios_fill_dimm_locator(const struct dimm_info *dimm, + struct smbios_type17 *t) +{ + char locator[40]; + + snprintf(locator, sizeof(locator), "Channel-%d-DIMM-%d", + dimm->channel_num, dimm->dimm_num); + t->device_locator = smbios_add_string(t->eos, locator); + + snprintf(locator, sizeof(locator), "BANK %d", dimm->bank_locator); + t->bank_locator = smbios_add_string(t->eos, locator); +} static void trim_trailing_whitespace(char *buffer, size_t buffer_size) { @@ -280,7 +293,6 @@ static int create_smbios_type17_for_dimm(struct dimm_info *dimm, unsigned long *current, int *handle) { struct smbios_type17 *t = (struct smbios_type17 *)*current; - char locator[40]; memset(t, 0, sizeof(struct smbios_type17)); t->memory_type = dimm->ddr_type; @@ -316,13 +328,7 @@ static int create_smbios_type17_for_dimm(struct dimm_info *dimm, smbios_fill_dimm_manufacturer_from_id(dimm->mod_id, t); smbios_fill_dimm_serial_number(dimm, t); - - snprintf(locator, sizeof(locator), "Channel-%d-DIMM-%d", - dimm->channel_num, dimm->dimm_num); - t->device_locator = smbios_add_string(t->eos, locator); - - snprintf(locator, sizeof(locator), "BANK %d", dimm->bank_locator); - t->bank_locator = smbios_add_string(t->eos, locator); + smbios_fill_dimm_locator(dimm, t); /* put '\0' in the end of data */ dimm->module_part_number[DIMM_INFO_PART_NUMBER_SIZE - 1] = '\0'; |