diff options
author | Jonathan Zhang <jonzhang@fb.com> | 2020-05-28 13:35:44 -0700 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2020-06-02 07:18:40 +0000 |
commit | 9b110bf97ae1da0eb60e76df6957fae044d71554 (patch) | |
tree | 83c8560c48e9c6db9201bdc647637ff0c98f0751 | |
parent | a9117ed49645a9e87c61398680711bb8fa1230e4 (diff) | |
download | coreboot-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.c | 8 | ||||
-rw-r--r-- | src/drivers/vpd/vpd.h | 7 |
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 }; /* |