mb/ocp/monolake: Override SMBIOS data with IPMI read FRU data
SMBIOS type 1 data fields are overwritten by FRU product info area data, SMBIOS type 2 fields are overwritten by FRU board info area data. Tested on OCP Mono Lake. Change-Id: I58cbe95055dea053b115e99f354f40d5902c6a35 Signed-off-by: Johnny Lin <johnny_lin@wiwynn.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/37445 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: David Hendricks <david.hendricks@gmail.com>
This commit is contained in:
parent
8ac46b937c
commit
93ac30d189
|
@ -60,4 +60,6 @@ config FMDFILE
|
||||||
config IPMI_KCS_REGISTER_SPACING
|
config IPMI_KCS_REGISTER_SPACING
|
||||||
default 4
|
default 4
|
||||||
|
|
||||||
|
config IPMI_FRU_SINGLE_RW_SZ
|
||||||
|
default 16
|
||||||
endif # BOARD_OCP_MONOLAKE
|
endif # BOARD_OCP_MONOLAKE
|
||||||
|
|
|
@ -30,6 +30,9 @@
|
||||||
#define VPD_LEN 10
|
#define VPD_LEN 10
|
||||||
/* Default countdown is 15 minutes. */
|
/* Default countdown is 15 minutes. */
|
||||||
#define DEFAULT_COUNTDOWN 9000
|
#define DEFAULT_COUNTDOWN 9000
|
||||||
|
#define FRU_DEVICE_ID 0
|
||||||
|
|
||||||
|
static struct fru_info_str fru_strings;
|
||||||
|
|
||||||
static void init_frb2_wdt(void)
|
static void init_frb2_wdt(void)
|
||||||
{
|
{
|
||||||
|
@ -76,6 +79,7 @@ static void mainboard_enable(struct device *dev)
|
||||||
clear_ipmi_flags(&rsp);
|
clear_ipmi_flags(&rsp);
|
||||||
system_reset();
|
system_reset();
|
||||||
}
|
}
|
||||||
|
read_fru_areas(BMC_KCS_BASE, FRU_DEVICE_ID, 0, &fru_strings);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct chip_operations mainboard_ops = {
|
struct chip_operations mainboard_ops = {
|
||||||
|
@ -101,3 +105,86 @@ void smbios_system_set_uuid(u8 *uuid)
|
||||||
{
|
{
|
||||||
ipmi_get_system_guid(BMC_KCS_BASE, uuid);
|
ipmi_get_system_guid(BMC_KCS_BASE, uuid);
|
||||||
}
|
}
|
||||||
|
/* Override SMBIOS type 1 data. */
|
||||||
|
const char *smbios_system_manufacturer(void)
|
||||||
|
{
|
||||||
|
if (fru_strings.prod_info.manufacturer != NULL)
|
||||||
|
return (const char *)fru_strings.prod_info.manufacturer;
|
||||||
|
else
|
||||||
|
return CONFIG_MAINBOARD_SMBIOS_MANUFACTURER;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *smbios_system_product_name(void)
|
||||||
|
{
|
||||||
|
char *prod_name_partnumber;
|
||||||
|
/* Concatenates IPMI FRU Product Info product name
|
||||||
|
* and product part number. */
|
||||||
|
if (fru_strings.prod_info.product_name != NULL) {
|
||||||
|
if (fru_strings.prod_info.product_partnumber != NULL) {
|
||||||
|
/* Append a space after product_name. */
|
||||||
|
prod_name_partnumber = strconcat(fru_strings.prod_info.product_name,
|
||||||
|
" ");
|
||||||
|
if (!prod_name_partnumber)
|
||||||
|
return (const char *)fru_strings.prod_info.product_name;
|
||||||
|
|
||||||
|
prod_name_partnumber = strconcat(prod_name_partnumber,
|
||||||
|
fru_strings.prod_info.product_partnumber);
|
||||||
|
if (!prod_name_partnumber)
|
||||||
|
return (const char *)fru_strings.prod_info.product_name;
|
||||||
|
|
||||||
|
return (const char *)prod_name_partnumber;
|
||||||
|
} else {
|
||||||
|
return (const char *)fru_strings.prod_info.product_name;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return CONFIG_MAINBOARD_SMBIOS_PRODUCT_NAME;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *smbios_system_serial_number(void)
|
||||||
|
{
|
||||||
|
if (fru_strings.prod_info.serial_number != NULL)
|
||||||
|
return (const char *)fru_strings.prod_info.serial_number;
|
||||||
|
else
|
||||||
|
return CONFIG_MAINBOARD_SERIAL_NUMBER;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *smbios_system_version(void)
|
||||||
|
{
|
||||||
|
if (fru_strings.prod_info.product_version != NULL)
|
||||||
|
return (const char *)fru_strings.prod_info.product_version;
|
||||||
|
else
|
||||||
|
return CONFIG_MAINBOARD_SERIAL_NUMBER;
|
||||||
|
}
|
||||||
|
/* Override SMBIOS type 2 data. */
|
||||||
|
const char *smbios_mainboard_version(void)
|
||||||
|
{
|
||||||
|
if (fru_strings.board_info.part_number != NULL)
|
||||||
|
return (const char *)fru_strings.board_info.part_number;
|
||||||
|
else
|
||||||
|
return CONFIG_MAINBOARD_VERSION;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *smbios_mainboard_manufacturer(void)
|
||||||
|
{
|
||||||
|
if (fru_strings.board_info.manufacturer != NULL)
|
||||||
|
return (const char *)fru_strings.board_info.manufacturer;
|
||||||
|
else
|
||||||
|
return CONFIG_MAINBOARD_SMBIOS_MANUFACTURER;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *smbios_mainboard_product_name(void)
|
||||||
|
{
|
||||||
|
if (fru_strings.board_info.product_name != NULL)
|
||||||
|
return (const char *)fru_strings.board_info.product_name;
|
||||||
|
else
|
||||||
|
return CONFIG_MAINBOARD_SMBIOS_PRODUCT_NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *smbios_mainboard_serial_number(void)
|
||||||
|
{
|
||||||
|
if (fru_strings.board_info.serial_number != NULL)
|
||||||
|
return (const char *)fru_strings.board_info.serial_number;
|
||||||
|
else
|
||||||
|
return CONFIG_MAINBOARD_SERIAL_NUMBER;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue