summaryrefslogtreecommitdiff
path: root/src/drivers/spi
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@chromium.org>2016-08-11 11:10:42 -0500
committerMartin Roth <martinroth@google.com>2016-08-19 03:08:17 +0200
commit504b8f2da211735e60b861106bf665a62091c36d (patch)
tree97eb99c3832b92211ec6270c9b18c292d5a727ba /src/drivers/spi
parentdcbccd6a1ef1ee70d6e96f01c55c8ed270f37716 (diff)
lib/cbfs_spi: provide boot_device_rw() support
Provide the RW boot device operations for the common cbfs SPI wrapper. The RW region_device is the same as the read-only one. As noted in the boot_device_rw() introduction patch the mmap() support should not be used in conjuction with writing as that results in incoherent operations. That's fine as the current mmap() support is only used in the cbfs layer which does not support writing, i.e. no cbfs regions would be written to with any previous or outstanding mmap() calls. BUG=chrome-os-partner:56151 Change-Id: I7cc7309a68ad23b30208ac961b1999a79626b307 Signed-off-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: https://review.coreboot.org/16199 Tested-by: build bot (Jenkins) Reviewed-by: Furquan Shaikh <furquan@google.com>
Diffstat (limited to 'src/drivers/spi')
-rw-r--r--src/drivers/spi/cbfs_spi.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/drivers/spi/cbfs_spi.c b/src/drivers/spi/cbfs_spi.c
index bbe9125dd5..1895b9df1e 100644
--- a/src/drivers/spi/cbfs_spi.c
+++ b/src/drivers/spi/cbfs_spi.c
@@ -34,10 +34,29 @@ static ssize_t spi_readat(const struct region_device *rd, void *b,
return size;
}
+static ssize_t spi_writeat(const struct region_device *rd, const void *b,
+ size_t offset, size_t size)
+{
+ if (spi_flash_info->write(spi_flash_info, offset, size, b))
+ return -1;
+ return size;
+}
+
+static ssize_t spi_eraseat(const struct region_device *rd,
+ size_t offset, size_t size)
+{
+ if (spi_flash_info->erase(spi_flash_info, offset, size))
+ return -1;
+ return size;
+}
+
+/* Provide all operations on the same device. */
static const struct region_device_ops spi_ops = {
.mmap = mmap_helper_rdev_mmap,
.munmap = mmap_helper_rdev_munmap,
.readat = spi_readat,
+ .writeat = spi_writeat,
+ .eraseat = spi_eraseat,
};
static struct mmap_helper_region_device mdev =
@@ -78,3 +97,9 @@ const struct region_device *boot_device_ro(void)
return &mdev.rdev;
}
+
+/* The read-only and read-write implementations are symmetric. */
+const struct region_device *boot_device_rw(void)
+{
+ return boot_device_ro();
+}