aboutsummaryrefslogtreecommitdiff
path: root/src/security/vboot/common.c
diff options
context:
space:
mode:
authorYu-Ping Wu <yupingso@chromium.org>2019-11-14 15:42:25 +0800
committerPatrick Georgi <pgeorgi@google.com>2019-11-20 13:26:17 +0000
commitaeb652a4a04226f467eb8e850b2096d772c6e31e (patch)
treeb213b06ebc949fa800c139587156464b5c126804 /src/security/vboot/common.c
parentea544574d06e8a149c447b35c5e8fba96e61152a (diff)
security/vboot: Remove selected_region from struct vboot_working_data
Since we already have pre-RAM cache for FMAP (CB:36657), calling load_firmware() multiple times is no longer a problem. This patch replaces vboot_get_selected_region() usage with vboot_locate_firmware(), which locates the firmware by reading from the CBMEM cache. In addition, returning false from vboot_is_slot_selected() implies the recovery path was requested, i.e., vb2_shared_data.recovery_reason was set. Therefore, we simply remove the vboot_is_slot_selected() check from vboot_check_recovery_request(). BRANCH=none BUG=chromium:1021452 TEST=emerge-kukui coreboot Change-Id: I27cb1a2175beb189053fc3e44b17b60aba474bb0 Signed-off-by: Yu-Ping Wu <yupingso@chromium.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/36845 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Julius Werner <jwerner@chromium.org>
Diffstat (limited to 'src/security/vboot/common.c')
-rw-r--r--src/security/vboot/common.c42
1 files changed, 9 insertions, 33 deletions
diff --git a/src/security/vboot/common.c b/src/security/vboot/common.c
index 3f57602cb1..bad01ff57f 100644
--- a/src/security/vboot/common.c
+++ b/src/security/vboot/common.c
@@ -16,6 +16,7 @@
#include <assert.h>
#include <cbmem.h>
#include <console/console.h>
+#include <fmap.h>
#include <stdint.h>
#include <string.h>
#include <symbols.h>
@@ -83,42 +84,17 @@ struct vb2_context *vboot_get_context(void)
return *vboot_ctx_ptr;
}
-int vboot_get_selected_region(struct region *region)
+int vboot_locate_firmware(const struct vb2_context *ctx,
+ struct region_device *fw)
{
- const struct selected_region *reg =
- &vboot_get_working_data()->selected_region;
+ const char *name;
- if (reg == NULL)
- return -1;
+ if (vboot_is_firmware_slot_a(ctx))
+ name = "FW_MAIN_A";
+ else
+ name = "FW_MAIN_B";
- if (reg->offset == 0 && reg->size == 0)
- return -1;
-
- region->offset = reg->offset;
- region->size = reg->size;
-
- return 0;
-}
-
-void vboot_set_selected_region(const struct region *region)
-{
- struct selected_region *reg =
- &vboot_get_working_data()->selected_region;
-
- assert(reg != NULL);
-
- reg->offset = region_offset(region);
- reg->size = region_sz(region);
-}
-
-int vboot_is_slot_selected(void)
-{
- struct selected_region *reg =
- &vboot_get_working_data()->selected_region;
-
- assert(reg != NULL);
-
- return reg->size > 0;
+ return fmap_locate_area_as_rdev(name, fw);
}
#if CONFIG(VBOOT_STARTS_IN_BOOTBLOCK)