| /* SPDX-License-Identifier: GPL-2.0-only */ |
| |
| #include <string.h> |
| #include <fsp/api.h> |
| #include <soc/ramstage.h> |
| #include <smbios.h> |
| #include <spd.h> |
| |
| #include "bmcinfo.h" |
| |
| void mainboard_silicon_init_params(FSPS_UPD *params) |
| { |
| /* Disable eMMC */ |
| params->FspsConfig.PcdEnableEmmc = 0; |
| |
| if (bmcinfo_disable_nic1()) |
| params->FspsConfig.PcdEnableGbE = 2; // disable lan 1 only |
| } |
| |
| /* Override smbios_mainboard_serial_number to retrieve it from BMC */ |
| const char *smbios_mainboard_serial_number(void) |
| { |
| const char *bmc_serial = bmcinfo_serial(); |
| if (bmc_serial) |
| return bmc_serial; |
| return CONFIG_MAINBOARD_SERIAL_NUMBER; |
| } |
| |
| /* Override smbios_system_set_uuid */ |
| void smbios_system_set_uuid(u8 *uuid) |
| { |
| const u8 *bmc_uuid = bmcinfo_uuid(); |
| if (bmc_uuid) |
| memcpy(uuid, bmc_uuid, 16); |
| /* leave all zero */ |
| } |
| |
| /* Override smbios_mainboard_version */ |
| const char *smbios_mainboard_version(void) |
| { |
| const int hwRev = bmcinfo_hwrev(); |
| switch (hwRev) { |
| case 0: |
| return "Z0"; |
| case 1: |
| return "A0"; |
| case 2: |
| return "A1"; |
| } |
| return ""; |
| } |
| |
| /* Override smbios_mainboard_features_flags */ |
| u8 smbios_mainboard_feature_flags(void) |
| { |
| return 0xc; |
| } |
| |
| /* Override smbios_mainboard_location_in_chassis */ |
| const char *smbios_mainboard_location_in_chassis(void) |
| { |
| static char location[4] = "n/a"; |
| int slot = bmcinfo_slot(); |
| if (slot >= 0) |
| snprintf(location, 4, "N%d", slot); |
| return location; |
| } |
| |
| /* Override smbios_mainboard_board_type */ |
| smbios_board_type smbios_mainboard_board_type(void) |
| { |
| return SMBIOS_BOARD_TYPE_SERVER_BLADE; |
| } |
| |
| smbios_enclosure_type smbios_mainboard_enclosure_type(void) |
| { |
| return SMBIOS_ENCLOSURE_MULTI_SYSTEM_CHASSIS; |
| } |
| |
| /* Add any mainboard specific information for dimm */ |
| void mainboard_add_dimm_info( |
| struct memory_info *mem_info, |
| int channel, int dimm, int index) |
| { |
| /* Mainboard only has DDR4 DIMM slots */ |
| mem_info->dimm[index].mod_type = SPD_UDIMM; |
| } |