aboutsummaryrefslogtreecommitdiff
path: root/src/drivers/intel/fsp1_1/fsp_relocate.c
diff options
context:
space:
mode:
authorJulius Werner <jwerner@chromium.org>2021-01-11 16:44:06 -0800
committerJulius Werner <jwerner@chromium.org>2021-03-17 00:13:59 +0000
commit535846763825f9bc4531b9322b1b61f3973cd6f8 (patch)
treef403f851438c5bc1cf71470e9e52db4475880265 /src/drivers/intel/fsp1_1/fsp_relocate.c
parent965846fcd0657bead026056e9bdc3625a534552e (diff)
prog_loaders: Remove prog_locate()
This patch rewrites the last few users of prog_locate() to access CBFS APIs directly and removes the call. This eliminates the double-meaning of prog_rdev() (referring to both the boot medium where the program is stored before loading, and the memory area where it is loaded after) and makes sure that programs are always located and loaded in a single operation. This makes CBFS verification easier to implement and secure because it avoids leaking a raw rdev of unverified data outside the CBFS core code. Signed-off-by: Julius Werner <jwerner@chromium.org> Change-Id: I7a5525f66e1d5f3a632e8f6f0ed9e116e3cebfcf Reviewed-on: https://review.coreboot.org/c/coreboot/+/49337 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Diffstat (limited to 'src/drivers/intel/fsp1_1/fsp_relocate.c')
-rw-r--r--src/drivers/intel/fsp1_1/fsp_relocate.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/src/drivers/intel/fsp1_1/fsp_relocate.c b/src/drivers/intel/fsp1_1/fsp_relocate.c
index d078f5998d..7aaba82e6b 100644
--- a/src/drivers/intel/fsp1_1/fsp_relocate.c
+++ b/src/drivers/intel/fsp1_1/fsp_relocate.c
@@ -1,29 +1,24 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#include <console/console.h>
+#include <cbfs.h>
#include <cbmem.h>
#include <commonlib/fsp.h>
#include <fsp/util.h>
-int fsp_relocate(struct prog *fsp_relocd, const struct region_device *fsp_src)
+int fsp_relocate(struct prog *fsp_relocd)
{
- void *new_loc;
void *fih;
ssize_t fih_offset;
- size_t size = region_device_sz(fsp_src);
-
- new_loc = cbmem_add(CBMEM_ID_REFCODE, size);
+ size_t size;
+ void *new_loc = cbfs_cbmem_alloc(prog_name(fsp_relocd),
+ CBMEM_ID_REFCODE, &size);
if (new_loc == NULL) {
printk(BIOS_ERR, "ERROR: Unable to load FSP into memory.\n");
return -1;
}
- if (rdev_readat(fsp_src, new_loc, 0, size) != size) {
- printk(BIOS_ERR, "ERROR: Can't read FSP's region device.\n");
- return -1;
- }
-
fih_offset = fsp1_1_relocate((uintptr_t)new_loc, new_loc, size);
if (fih_offset <= 0) {