vboot: Change VbExEc implementations to support RO update
This change will be used to support EC-RO software sync by allowing for
access to the readonly region of firmware. Currently only the writable
section is accessed by vboot using VB_SELECT_FIRMWARE_A and B.
For now only VB_SELECT_FIRMWARE_A and B are accepted as valid regions.
BUG=chrome-os-partner:48703
BRANCH=none
TEST=emerge-samus chromeos-u-boot
CQ-DEPEND=CL:319185,CL:319213,CL:320425
Change-Id: Ib2a4a9f314a00b576f27a56522fca1c75a104dae
Signed-off-by: Mary Ruthven <mruthven@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/320598
Reviewed-by: Randall Spangler <rspangler@chromium.org>
diff --git a/cros/vboot/ec.c b/cros/vboot/ec.c
index 2c4305e..974c1e0 100644
--- a/cros/vboot/ec.c
+++ b/cros/vboot/ec.c
@@ -119,12 +119,13 @@
return VBERROR_SUCCESS;
}
-VbError_t VbExEcHashRW(int devidx, const uint8_t **hash, int *hash_size)
+VbError_t VbExEcHashImage(int devidx, enum VbSelectFirmware_t select,
+ const uint8_t **hash, int *hash_size)
{
struct cros_ec_dev *mdev = board_get_cros_ec_dev();
static struct ec_response_vboot_hash resp __aligned(8);
- if (devidx != 0)
+ if (devidx != 0 || select == VB_SELECT_FIRMWARE_READONLY)
return VBERROR_UNKNOWN;
if (!mdev) {
@@ -189,12 +190,13 @@
return VBERROR_UNKNOWN;
}
-VbError_t VbExEcUpdateRW(int devidx, const uint8_t *image, int image_size)
+VbError_t VbExEcUpdateImage(int devidx, enum VbSelectFirmware_t select,
+ const uint8_t *image, int image_size)
{
struct cros_ec_dev *mdev = board_get_cros_ec_dev();
int rv;
- if (devidx != 0)
+ if (devidx != 0 || select == VB_SELECT_FIRMWARE_READONLY)
return VBERROR_UNKNOWN;
if (!mdev) {
@@ -212,9 +214,9 @@
return rv == 0 ? VBERROR_SUCCESS : VBERROR_UNKNOWN;
}
-VbError_t VbExEcProtectRW(int devidx)
+VbError_t VbExEcProtect(int devidx, enum VbSelectFirmware_t select)
{
- if (devidx != 0)
+ if (devidx != 0 || select == VB_SELECT_FIRMWARE_READONLY)
return VBERROR_UNKNOWN;
return ec_protect_rw(1);
@@ -234,8 +236,8 @@
return cros_ec_entering_mode(mdev, mode);
}
-VbError_t VbExEcGetExpectedRW(int devidx, enum VbSelectFirmware_t select,
- const uint8_t **image, int *image_size)
+VbError_t VbExEcGetExpectedImage(int devidx, enum VbSelectFirmware_t select,
+ const uint8_t **image, int *image_size)
{
struct fmap_firmware_entry *fw_entry;
struct twostop_fmap fmap;
@@ -247,7 +249,7 @@
*image = NULL;
*image_size = 0;
- if (devidx != 0)
+ if (devidx != 0 || select == VB_SELECT_FIRMWARE_READONLY)
return VBERROR_UNKNOWN;
cros_fdtdec_flashmap(gd->fdt_blob, &fmap);
@@ -305,15 +307,15 @@
return VBERROR_SUCCESS;
}
-VbError_t VbExEcGetExpectedRWHash(int devidx, enum VbSelectFirmware_t select,
- const uint8_t **hash, int *hash_size)
+VbError_t VbExEcGetExpectedImageHash(int devidx, enum VbSelectFirmware_t select,
+ const uint8_t **hash, int *hash_size)
{
struct twostop_fmap fmap;
struct fmap_entry *ec;
*hash = NULL;
- if (devidx != 0)
+ if (devidx != 0 || select == VB_SELECT_FIRMWARE_READONLY)
return VBERROR_UNKNOWN;
/* TODO: Decode the flashmap once and reuse throughout. */