mb/ocp/deltalake: Use VPD data to configure FSP UPD at romstage

Read VPD variable 'fsp_log_enable' to decide enabling FSP log or not.
With VPD_RW_THEN_RO, VPD_RW takes precedence over VPD_RO, and
would be set to enabled if both places cannot find it.

Tested=On OCP Delta Lake, use vpd to create and set fsp_log_enable
and verified the results are expected.

Change-Id: I0b3463acedd90e8e17f7e4eedc2fab63644f87e1
Signed-off-by: Johnny Lin <johnny_lin@wiwynn.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/42903
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Christian Walter <christian.walter@9elements.com>
Reviewed-by: insomniac <insomniac@slackware.it>
diff --git a/src/mainboard/ocp/deltalake/romstage.c b/src/mainboard/ocp/deltalake/romstage.c
index 3389e6e..9ce06ad 100644
--- a/src/mainboard/ocp/deltalake/romstage.c
+++ b/src/mainboard/ocp/deltalake/romstage.c
@@ -2,11 +2,32 @@
 
 #include <console/console.h>
 #include <drivers/ipmi/ipmi_kcs.h>
+#include <drivers/vpd/vpd.h>
 #include <fsp/api.h>
 #include <FspmUpd.h>
 #include <soc/romstage.h>
 
 #include "ipmi.h"
+#include "vpd.h"
+
+/*
+ * Search from VPD_RW first then VPD_RO for UPD config variables,
+ * overwrites them from VPD if it's found.
+ */
+static void mainboard_config_upd(FSPM_UPD *mupd)
+{
+	uint8_t val;
+
+	/* Send FSP log message to SOL */
+	if (vpd_get_bool(FSP_LOG, VPD_RW_THEN_RO, &val))
+		mupd->FspmConfig.SerialIoUartDebugEnable = val;
+	else {
+		printk(BIOS_INFO, "Not able to get VPD %s, default set "
+			"SerialIoUartDebugEnable to 1\n", FSP_LOG);
+		mupd->FspmConfig.SerialIoUartDebugEnable = 1;
+	}
+	mupd->FspmConfig.SerialIoUartDebugIoBase = 0x2f8;
+}
 
 /* Update bifurcation settings according to different Configs */
 static void oem_update_iio(FSPM_UPD *mupd)
@@ -53,9 +74,6 @@
 
 static void mainboard_config_iio(FSPM_UPD *mupd)
 {
-	/* Send FSP log message to SOL */
-	mupd->FspmConfig.SerialIoUartDebugEnable = 1;
-	mupd->FspmConfig.SerialIoUartDebugIoBase = 0x2f8;
 	oem_update_iio(mupd);
 }
 
@@ -68,4 +86,5 @@
 
 	mainboard_config_gpios(mupd);
 	mainboard_config_iio(mupd);
+	mainboard_config_upd(mupd);
 }
diff --git a/src/mainboard/ocp/deltalake/vpd.h b/src/mainboard/ocp/deltalake/vpd.h
index 65aae72..9e17bb9 100644
--- a/src/mainboard/ocp/deltalake/vpd.h
+++ b/src/mainboard/ocp/deltalake/vpd.h
@@ -11,4 +11,7 @@
 /* Default countdown is 15 minutes. */
 #define DEFAULT_COUNTDOWN 9000
 
+/* Define the VPD keys for UPD variables that can be overwritten */
+#define FSP_LOG "fsp_log_enable" /* 1 or 0: enable or disable FSP SOL log */
+
 #endif