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)