drivers/vpd: Add support to read device serial from VPD
Add functions to read the system and mainboard serial numbers from VPD tables stored in flash. Remove board-specific implementations for google/drallion and google/sarien and select the new Kconfig instead. Test: build/boot google/akemi with RO_VPD region persisted from stock Google firmware, verify system/mainboard serial numbers present via dmidecode. Change-Id: I14ae07cd8b764e1e22d58577c7cc697ca1496bd5 Signed-off-by: Matt DeVillier <matt.devillier@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/49050 Reviewed-by: Angel Pons <th3fanbus@gmail.com> Reviewed-by: Michael Niewöhner <foss@mniewoehner.de> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
1717231b74
commit
8bdb006db5
|
@ -19,3 +19,8 @@ config VPD_FMAP_SIZE
|
|||
default 0x4000
|
||||
help
|
||||
Size in bytes of the FMAP region created to store VPD tables.
|
||||
|
||||
config SMBIOS_SERIAL_FROM_VPD
|
||||
bool "Load device serial from VPD"
|
||||
depends on VPD && GENERATE_SMBIOS_TABLES
|
||||
default n
|
||||
|
|
|
@ -5,3 +5,4 @@ verstage-$(CONFIG_VPD) += vpd_decode.c vpd.c
|
|||
romstage-$(CONFIG_VPD) += vpd_decode.c vpd.c
|
||||
postcar-$(CONFIG_VPD) += vpd_decode.c vpd.c
|
||||
ramstage-$(CONFIG_VPD) += vpd_decode.c vpd.c
|
||||
ramstage-$(CONFIG_SMBIOS_SERIAL_FROM_VPD) += vpd_serial.c
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
/* SPDX-License-Identifier: BSD-3-Clause */
|
||||
|
||||
#include <smbios.h>
|
||||
|
||||
#include "vpd.h"
|
||||
#include "vpd_tables.h"
|
||||
|
||||
#define VPD_KEY_SYSTEM_SERIAL "serial_number"
|
||||
#define VPD_KEY_MAINBOARD_SERIAL "mlb_serial_number"
|
||||
#define VPD_SERIAL_LEN 64
|
||||
|
||||
const char *smbios_system_serial_number(void)
|
||||
{
|
||||
static char serial[VPD_SERIAL_LEN];
|
||||
if (vpd_gets(VPD_KEY_SYSTEM_SERIAL, serial, VPD_SERIAL_LEN, VPD_RO))
|
||||
return serial;
|
||||
return "";
|
||||
}
|
||||
|
||||
const char *smbios_mainboard_serial_number(void)
|
||||
{
|
||||
static char serial[VPD_SERIAL_LEN];
|
||||
if (vpd_gets(VPD_KEY_MAINBOARD_SERIAL, serial, VPD_SERIAL_LEN, VPD_RO))
|
||||
return serial;
|
||||
return "";
|
||||
}
|
|
@ -16,6 +16,7 @@ config BOARD_GOOGLE_BASEBOARD_DRALLION
|
|||
select MAINBOARD_HAS_CHROMEOS
|
||||
select MAINBOARD_HAS_I2C_TPM_CR50
|
||||
select MAINBOARD_HAS_TPM2
|
||||
select SMBIOS_SERIAL_FROM_VPD if VPD
|
||||
select SOC_INTEL_COMETLAKE_1
|
||||
select SOC_INTEL_COMMON_BLOCK_HDA_VERB
|
||||
select SOC_INTEL_COMMON_BLOCK_SMM_ESPI_DISABLE
|
||||
|
|
|
@ -2,33 +2,12 @@
|
|||
|
||||
#include <acpi/acpi.h>
|
||||
#include <boardid.h>
|
||||
#include <drivers/vpd/vpd.h>
|
||||
#include <smbios.h>
|
||||
#include <soc/gpio.h>
|
||||
#include <soc/ramstage.h>
|
||||
#include <variant/gpio.h>
|
||||
#include <vendorcode/google/chromeos/chromeos.h>
|
||||
|
||||
#define VPD_KEY_SYSTEM_SERIAL "serial_number"
|
||||
#define VPD_KEY_MAINBOARD_SERIAL "mlb_serial_number"
|
||||
#define VPD_SERIAL_LEN 64
|
||||
|
||||
const char *smbios_system_serial_number(void)
|
||||
{
|
||||
static char serial[VPD_SERIAL_LEN];
|
||||
if (vpd_gets(VPD_KEY_SYSTEM_SERIAL, serial, VPD_SERIAL_LEN, VPD_RO))
|
||||
return serial;
|
||||
return "";
|
||||
}
|
||||
|
||||
const char *smbios_mainboard_serial_number(void)
|
||||
{
|
||||
static char serial[VPD_SERIAL_LEN];
|
||||
if (vpd_gets(VPD_KEY_MAINBOARD_SERIAL, serial, VPD_SERIAL_LEN, VPD_RO))
|
||||
return serial;
|
||||
return "";
|
||||
}
|
||||
|
||||
/* mainboard silk screen shows DIMM-A and DIMM-B */
|
||||
void smbios_fill_dimm_locator(const struct dimm_info *dimm,
|
||||
struct smbios_type17 *t)
|
||||
|
|
|
@ -16,6 +16,7 @@ config BOARD_GOOGLE_BASEBOARD_SARIEN
|
|||
select MAINBOARD_HAS_CHROMEOS
|
||||
select MAINBOARD_HAS_I2C_TPM_CR50
|
||||
select MAINBOARD_HAS_TPM2
|
||||
select SMBIOS_SERIAL_FROM_VPD if VPD
|
||||
select SOC_INTEL_WHISKEYLAKE
|
||||
select SOC_INTEL_COMMON_BLOCK_HDA_VERB
|
||||
select SOC_INTEL_COMMON_BLOCK_SMM_ESPI_DISABLE
|
||||
|
|
|
@ -2,33 +2,12 @@
|
|||
|
||||
#include <acpi/acpi.h>
|
||||
#include <boardid.h>
|
||||
#include <drivers/vpd/vpd.h>
|
||||
#include <smbios.h>
|
||||
#include <soc/gpio.h>
|
||||
#include <variant/gpio.h>
|
||||
#include <vendorcode/google/chromeos/chromeos.h>
|
||||
|
||||
#if CONFIG(GENERATE_SMBIOS_TABLES)
|
||||
#define VPD_KEY_SYSTEM_SERIAL "serial_number"
|
||||
#define VPD_KEY_MAINBOARD_SERIAL "mlb_serial_number"
|
||||
#define VPD_SERIAL_LEN 64
|
||||
|
||||
const char *smbios_system_serial_number(void)
|
||||
{
|
||||
static char serial[VPD_SERIAL_LEN];
|
||||
if (vpd_gets(VPD_KEY_SYSTEM_SERIAL, serial, VPD_SERIAL_LEN, VPD_RO))
|
||||
return serial;
|
||||
return "";
|
||||
}
|
||||
|
||||
const char *smbios_mainboard_serial_number(void)
|
||||
{
|
||||
static char serial[VPD_SERIAL_LEN];
|
||||
if (vpd_gets(VPD_KEY_MAINBOARD_SERIAL, serial, VPD_SERIAL_LEN, VPD_RO))
|
||||
return serial;
|
||||
return "";
|
||||
}
|
||||
|
||||
/* mainboard silk screen shows DIMM-A and DIMM-B */
|
||||
void smbios_fill_dimm_locator(const struct dimm_info *dimm,
|
||||
struct smbios_type17 *t)
|
||||
|
|
Loading…
Reference in New Issue