From 9b110bf97ae1da0eb60e76df6957fae044d71554 Mon Sep 17 00:00:00 2001 From: Jonathan Zhang Date: Thu, 28 May 2020 13:35:44 -0700 Subject: drivers/vpd: add VPD region VPD_RW_THEN_RO This change is based on the concept that system user's (overwrite) settings are held in VPD_RW region, while system owner's (default) settings are held in VPD_RO region. Add VPD_RW_THEN_RO region type, so that VPD_RW region is searched first to get overwrite setting, otherwise VPD_RO region is searched to get default setting. Signed-off-by: Jonathan Zhang Change-Id: Icd7cbd9c3fb2a6b02fc417ad45d7d22ca6795457 Reviewed-on: https://review.coreboot.org/c/coreboot/+/41732 Tested-by: build bot (Jenkins) Reviewed-by: Hung-Te Lin --- src/drivers/vpd/vpd.c | 8 ++++++-- src/drivers/vpd/vpd.h | 7 ++++--- 2 files changed, 10 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/drivers/vpd/vpd.c b/src/drivers/vpd/vpd.c index f5ac81ebfd..c332a6e94c 100644 --- a/src/drivers/vpd/vpd.c +++ b/src/drivers/vpd/vpd.c @@ -209,10 +209,14 @@ const void *vpd_find(const char *key, int *size, enum vpd_region region) init_vpd_rdevs(); - if (region != VPD_RW) + if (region == VPD_RW_THEN_RO) + vpd_find_in(&rw_vpd, &arg); + + if (!arg.matched && (region == VPD_RO || region == VPD_RO_THEN_RW || + region == VPD_RW_THEN_RO)) vpd_find_in(&ro_vpd, &arg); - if (!arg.matched && region != VPD_RO) + if (!arg.matched && (region == VPD_RW || region == VPD_RO_THEN_RW)) vpd_find_in(&rw_vpd, &arg); if (!arg.matched) diff --git a/src/drivers/vpd/vpd.h b/src/drivers/vpd/vpd.h index df7711af90..25e0aed4ee 100644 --- a/src/drivers/vpd/vpd.h +++ b/src/drivers/vpd/vpd.h @@ -8,9 +8,10 @@ #define GOOGLE_VPD_2_0_OFFSET 0x600 enum vpd_region { - VPD_RO_THEN_RW = 0, - VPD_RO = 1, - VPD_RW = 2 + VPD_RO, + VPD_RW, + VPD_RO_THEN_RW, + VPD_RW_THEN_RO }; /* -- cgit v1.2.3