summaryrefslogtreecommitdiff
path: root/src/drivers/spi
diff options
context:
space:
mode:
authorRizwan Qureshi <rizwan.qureshi@intel.com>2018-10-26 16:54:42 +0530
committerPatrick Georgi <pgeorgi@google.com>2019-01-21 13:25:46 +0000
commit6d4c1f5f43cd1ca0324b9199af9e4a65966dc301 (patch)
tree62894ce63cc0738c4c304cecbf2dc1834f9c629e /src/drivers/spi
parentf9f50936446e8e441238ecfe12ce0fc9e04d491a (diff)
lib/boot_device: Add API for write protect a region
Add API that should be implemented by the boot media drivers for write-protecting a subregion. Change-Id: I4c9376e2c2c7a4852f13c65824c6cd64a1c6ac0a Signed-off-by: Rizwan Qureshi <rizwan.qureshi@intel.com> Reviewed-on: https://review.coreboot.org/c/28724 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Patrick Rudolph <siro@das-labor.org>
Diffstat (limited to 'src/drivers/spi')
-rw-r--r--src/drivers/spi/boot_device_rw_nommap.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/drivers/spi/boot_device_rw_nommap.c b/src/drivers/spi/boot_device_rw_nommap.c
index 64d81c5b00..d01d778ca4 100644
--- a/src/drivers/spi/boot_device_rw_nommap.c
+++ b/src/drivers/spi/boot_device_rw_nommap.c
@@ -108,3 +108,46 @@ const struct spi_flash *boot_device_spi_flash(void)
return car_get_var_ptr(&sfg);
}
+
+int boot_device_wp_region(struct region_device *rd,
+ const enum bootdev_prot_type type)
+{
+ uint32_t ctrlr_pr;
+
+ /* Ensure boot device has been initialized at least once. */
+ boot_device_init();
+
+ const struct spi_flash *boot_dev = boot_device_spi_flash();
+
+ if (boot_dev == NULL)
+ return -1;
+
+ if (type == MEDIA_WP) {
+ if (spi_flash_is_write_protected(boot_dev,
+ region_device_region(rd)) != 1) {
+ return spi_flash_set_write_protected(boot_dev,
+ region_device_region(rd), true,
+ SPI_WRITE_PROTECTION_REBOOT);
+ }
+
+ /* Already write protected */
+ return 0;
+ }
+
+ switch (type) {
+ case CTRLR_WP:
+ ctrlr_pr = WRITE_PROTECT;
+ break;
+ case CTRLR_RP:
+ ctrlr_pr = READ_PROTECT;
+ break;
+ case CTRLR_RWP:
+ ctrlr_pr = READ_WRITE_PROTECT;
+ break;
+ default:
+ return -1;
+ }
+
+ return spi_flash_ctrlr_protect_region(boot_dev,
+ region_device_region(rd), ctrlr_pr);
+}