diff options
-rw-r--r-- | board/cr50/usb_spi.c | 20 | ||||
-rw-r--r-- | board/cr50/usb_spi_board.h | 11 |
2 files changed, 31 insertions, 0 deletions
diff --git a/board/cr50/usb_spi.c b/board/cr50/usb_spi.c index 6876272297..4aede92f19 100644 --- a/board/cr50/usb_spi.c +++ b/board/cr50/usb_spi.c @@ -683,6 +683,26 @@ int usb_spi_sha256_start(struct sha256_ctx *ctx) return EC_SUCCESS; } +int usb_spi_read_buffer(void *buf, unsigned int offset, size_t bytes) +{ + uint8_t *p = buf; + + while (bytes) { + const int this_chunk = MIN(bytes, SPI_HASH_CHUNK_SIZE); + + /* Read the data */ + if (spi_read_chunk(p, offset, this_chunk) != EC_SUCCESS) { + CPRINTS("%s: read error at 0x%x", __func__, offset); + return VENDOR_RC_READ_FLASH_FAIL; + } + + bytes -= this_chunk; + offset += this_chunk; + p += this_chunk; + } + return EC_SUCCESS; +} + int usb_spi_sha256_update(struct sha256_ctx *ctx, uint32_t offset, uint32_t size) { diff --git a/board/cr50/usb_spi_board.h b/board/cr50/usb_spi_board.h index 1c40f0814d..7549b98f7f 100644 --- a/board/cr50/usb_spi_board.h +++ b/board/cr50/usb_spi_board.h @@ -9,3 +9,14 @@ int usb_spi_sha256_update(struct sha256_ctx *ctx, uint32_t offset, uint32_t size); void usb_spi_sha256_final(struct sha256_ctx *ctx, void *digest, size_t digest_size); + +/** + * Returns the content of SPI flash + * + * @param buf Buffer to write flash contents + * @param offset Flash offset to start reading from + * @param bytes Number of bytes to read. + * + * @return EC_SUCCESS, or non-zero if any error. + */ +int usb_spi_read_buffer(void *buf, unsigned int offset, size_t bytes); |