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>
diff --git a/src/drivers/vpd/vpd.c b/src/drivers/vpd/vpd.c
index f5ac81e..c332a6e 100644
--- a/src/drivers/vpd/vpd.c
+++ b/src/drivers/vpd/vpd.c
@@ -209,10 +209,14 @@
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)