summaryrefslogtreecommitdiff
path: root/src/soc/intel/cannonlake/fsp_params.c
diff options
context:
space:
mode:
authorFurquan Shaikh <furquan@google.com>2019-03-19 20:34:11 -0700
committerFurquan Shaikh <furquan@google.com>2019-03-20 13:49:54 +0000
commit4dfd8d690d17a484eef83006a843d561dd7ca13d (patch)
tree41ec1290d9c22adff76323b8a2087211fa99e8ab /src/soc/intel/cannonlake/fsp_params.c
parent52d79fbc6e1243a7ecaf34835893476c5a303271 (diff)
downloadcoreboot-4dfd8d690d17a484eef83006a843d561dd7ca13d.tar.xz
soc/intel/cannonlake: Fix return values for get_param_value
Commit 41483c9 (soc/intel/cannonlake: Add required FSP UPD changes for CML) changed the enum values for PCH_SERIAL_IO_MODE so that 0 is invalid and valid values start from 1. However, get_param_value was not updated to correctly subtract 1 before returning any value. This change adds a macro PCH_SERIAL_IO_INDEX to apply the subtract 1 operation on any value that get_param_value needs to return. BUG=b:128946016 TEST=Verified that hatch boots successfully. Change-Id: I4e32fcd1efe4a535251f0ec58662a2dc5f70e8b0 Signed-off-by: Furquan Shaikh <furquan@google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/31974 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-by: Rizwan Qureshi <rizwan.qureshi@intel.com> Reviewed-by: Maulik V Vaghela <maulik.v.vaghela@intel.com> Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Diffstat (limited to 'src/soc/intel/cannonlake/fsp_params.c')
-rw-r--r--src/soc/intel/cannonlake/fsp_params.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/soc/intel/cannonlake/fsp_params.c b/src/soc/intel/cannonlake/fsp_params.c
index e3a2310d5c..77d82d64f8 100644
--- a/src/soc/intel/cannonlake/fsp_params.c
+++ b/src/soc/intel/cannonlake/fsp_params.c
@@ -40,22 +40,28 @@ static const int serial_io_dev[] = {
PCH_DEVFN_UART2
};
+/*
+ * Given an enum for PCH_SERIAL_IO_MODE, 1 needs to be subtracted to get the FSP
+ * UPD expected value for Serial IO since valid enum index starts from 1.
+ */
+#define PCH_SERIAL_IO_INDEX(x) ((x) - 1)
+
static uint8_t get_param_value(const config_t *config, uint32_t dev_offset)
{
struct device *dev;
dev = dev_find_slot(0, serial_io_dev[dev_offset]);
if (!dev || !dev->enabled)
- return PchSerialIoDisabled;
+ return PCH_SERIAL_IO_INDEX(PchSerialIoDisabled);
if ((config->SerialIoDevMode[dev_offset] >= PchSerialIoMax) ||
(config->SerialIoDevMode[dev_offset] == PchSerialIoNotInitialized))
- return PchSerialIoPci;
+ return PCH_SERIAL_IO_INDEX(PchSerialIoPci);
/*
* Correct Enum index starts from 1, so subtract 1 while returning value
*/
- return config->SerialIoDevMode[dev_offset] - 1;
+ return PCH_SERIAL_IO_INDEX(config->SerialIoDevMode[dev_offset]);
}
#if IS_ENABLED(CONFIG_SOC_INTEL_COMETLAKE)