summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Zhang <jonzhang@fb.com>2020-05-28 13:35:44 -0700
committerPatrick Georgi <pgeorgi@google.com>2020-06-02 07:18:40 +0000
commit9b110bf97ae1da0eb60e76df6957fae044d71554 (patch)
tree83c8560c48e9c6db9201bdc647637ff0c98f0751
parenta9117ed49645a9e87c61398680711bb8fa1230e4 (diff)
downloadcoreboot-9b110bf97ae1da0eb60e76df6957fae044d71554.tar.xz
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 <jonzhang@fb.com> Change-Id: Icd7cbd9c3fb2a6b02fc417ad45d7d22ca6795457 Reviewed-on: https://review.coreboot.org/c/coreboot/+/41732 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Hung-Te Lin <hungte@chromium.org>
-rw-r--r--src/drivers/vpd/vpd.c8
-rw-r--r--src/drivers/vpd/vpd.h7
2 files changed, 10 insertions, 5 deletions
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
};
/*