mb/facebook/monolith: Use serial number and UUID from VPD

The serial number and UUID returned by DMI are retrieved from VPD.

The solution supports a 16 character "serial_number" and a 36 character
"UUID" string.

BUG=N/A
TEST=tested on monolith

Change-Id: I0b6ce769cfa81a1e248a35f6149b7d1bbcf1f836
Signed-off-by: Wim Vervoorn <wvervoorn@eltan.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/38753
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Frans Hendriks <fhendriks@eltan.com>
This commit is contained in:
Wim Vervoorn 2020-02-04 13:21:41 +01:00 committed by Patrick Georgi
parent 2e7c2cef15
commit 5bf7b1ac69
1 changed files with 34 additions and 0 deletions

View File

@ -14,7 +14,14 @@
* GNU General Public License for more details. * GNU General Public License for more details.
*/ */
#include <stdint.h>
#include <console/console.h>
#include <drivers/vpd/vpd.h>
#include <lib.h>
#include <smbios.h>
#include <soc/ramstage.h> #include <soc/ramstage.h>
#include <uuid.h>
#include "gpio.h" #include "gpio.h"
void mainboard_silicon_init_params(FSP_SIL_UPD *params) void mainboard_silicon_init_params(FSP_SIL_UPD *params)
@ -24,3 +31,30 @@ void mainboard_silicon_init_params(FSP_SIL_UPD *params)
gpio_configure_pads(gpio_table, ARRAY_SIZE(gpio_table)); gpio_configure_pads(gpio_table, ARRAY_SIZE(gpio_table));
params->CdClock = 3; params->CdClock = 3;
} }
#define VPD_KEY_SERIAL "serial_number"
#define VPD_KEY_UUID "UUID"
#define VPD_SERIAL_LEN 17
const char *smbios_system_serial_number(void)
{
static char serial[VPD_SERIAL_LEN];
if (vpd_gets(VPD_KEY_SERIAL, serial, VPD_SERIAL_LEN, VPD_RO))
return serial;
printk(BIOS_ERR, "serial_number could not be read or invalid.\n");
return "";
}
void smbios_system_set_uuid(u8 *uuid)
{
static char vpd_uuid_string[UUID_STRLEN+1];
if (vpd_gets(VPD_KEY_UUID, vpd_uuid_string, UUID_STRLEN+1, VPD_RO))
if (!parse_uuid(uuid, vpd_uuid_string))
return;
memset(uuid, 0, UUID_LEN);
printk(BIOS_ERR, "UUID could not be read or invalid.\n");
}