summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNico Huber <nico.huber@secunet.com>2017-05-09 16:03:24 +0200
committerStefan Reinauer <stefan.reinauer@coreboot.org>2017-06-06 17:41:40 +0200
commite7947df4621ba27c6c41eccb1a98ec414db1082b (patch)
tree821bc61280c05140a963084658be1b565a911ba9
parentc272a87f5c2e3a5173b24c0544297bbcb550c40f (diff)
fsp1_1: Verify FSP_IMAGE_ID/_REV against headers
FSP_IMAGE_ID and FSP_IMAGE_REV are defined in `FspUpdVpd.h`. Check against these to avoid mismatching definitions in coreboot and the FSP blob. Change-Id: Ic86229e7f0c2d0525b8a79add292c6c81a349aa6 Signed-off-by: Nico Huber <nico.huber@secunet.com> Reviewed-on: https://review.coreboot.org/19635 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
-rw-r--r--src/drivers/intel/fsp1_1/Kconfig7
-rw-r--r--src/drivers/intel/fsp1_1/fsp_util.c17
-rw-r--r--src/drivers/intel/fsp1_1/include/fsp/util.h1
-rw-r--r--src/soc/intel/quark/Kconfig8
4 files changed, 8 insertions, 25 deletions
diff --git a/src/drivers/intel/fsp1_1/Kconfig b/src/drivers/intel/fsp1_1/Kconfig
index 13137ca831..1b3061c2d4 100644
--- a/src/drivers/intel/fsp1_1/Kconfig
+++ b/src/drivers/intel/fsp1_1/Kconfig
@@ -50,13 +50,6 @@ config FSP_FILE
help
The path and filename of the Intel FSP binary for this platform.
-config FSP_IMAGE_ID_STRING
- string "8 byte platform string identifying the FSP platform"
- default "$XXXFSP$"
- help
- 8 ASCII character byte signature string that will help match the FSP
- binary to a supported hardware configuration.
-
config FSP_LOC
hex "Intel FSP Binary location in CBFS"
default 0xffee0000
diff --git a/src/drivers/intel/fsp1_1/fsp_util.c b/src/drivers/intel/fsp1_1/fsp_util.c
index 0d09483f10..8b23c4a388 100644
--- a/src/drivers/intel/fsp1_1/fsp_util.c
+++ b/src/drivers/intel/fsp1_1/fsp_util.c
@@ -32,14 +32,8 @@ FSP_INFO_HEADER *find_fsp(uintptr_t fsp_base_address)
EFI_RAW_SECTION *rs;
u32 u32;
} fsp_ptr;
- static const union {
- char str_id[8];
- u32 int_id[2];
- } fsp_id = {
- .str_id = CONFIG_FSP_IMAGE_ID_STRING
- };
- u32 *image_id;
+ u64 *image_id;
/* Get the FSP binary base address in CBFS */
fsp_ptr.u32 = fsp_base_address;
@@ -79,11 +73,14 @@ FSP_INFO_HEADER *find_fsp(uintptr_t fsp_base_address)
return (FSP_INFO_HEADER *)ERROR_INFO_HEAD_SIG_MISMATCH;
/* Verify the FSP ID */
- image_id = (u32 *)&fsp_ptr.fih->ImageId[0];
- if ((image_id[0] != fsp_id.int_id[0])
- || (image_id[1] != fsp_id.int_id[1]))
+ image_id = (u64 *)&fsp_ptr.fih->ImageId[0];
+ if (*image_id != FSP_IMAGE_ID)
return (FSP_INFO_HEADER *)ERROR_FSP_SIG_MISMATCH;
+ /* Verify the FSP Revision */
+ if (fsp_ptr.fih->ImageRevision != FSP_IMAGE_REV)
+ return (FSP_INFO_HEADER *)ERROR_FSP_REV_MISMATCH;
+
return fsp_ptr.fih;
}
diff --git a/src/drivers/intel/fsp1_1/include/fsp/util.h b/src/drivers/intel/fsp1_1/include/fsp/util.h
index 32ac99ee28..8f552560d5 100644
--- a/src/drivers/intel/fsp1_1/include/fsp/util.h
+++ b/src/drivers/intel/fsp1_1/include/fsp/util.h
@@ -87,6 +87,7 @@ int fsp_relocate(struct prog *fsp_relocd, const struct region_device *fsp_src);
#define ERROR_IMAGEBASE_MISMATCH 4
#define ERROR_INFO_HEAD_SIG_MISMATCH 5
#define ERROR_FSP_SIG_MISMATCH 6
+#define ERROR_FSP_REV_MISMATCH 7
#if ENV_RAMSTAGE
extern void *FspHobListPtr;
diff --git a/src/soc/intel/quark/Kconfig b/src/soc/intel/quark/Kconfig
index cb0a1bcec9..e392202736 100644
--- a/src/soc/intel/quark/Kconfig
+++ b/src/soc/intel/quark/Kconfig
@@ -222,14 +222,6 @@ config FSP_FILE
help
The path and filename of the Intel FSP binary for this platform.
-config FSP_IMAGE_ID_STRING
- string "8 byte platform string identifying the FSP platform"
- default "QUK-FSP0"
- depends on PLATFORM_USES_FSP1_1
- help
- 8 ASCII character byte signature string that will help match the FSP
- binary to a supported hardware configuration.
-
config FSP_LOC
hex
default 0xfff80000