Nico Huber has submitted this change and it was merged. ( https://review.coreboot.org/25149 )
Change subject: linux_spi: Reduce maximum read chunksize ......................................................................
linux_spi: Reduce maximum read chunksize
It turned out that older kernels use a single buffer of `bufsiz` bytes for combined input and output data. So we have to account for the read command + max 4 address bytes.
Change-Id: Ide50db38af1004fde09a70b15938e77f5e1285ac Signed-off-by: Nico Huber nico.huber@secunet.com Tested-by: Julian von Mendel git@jinvent.de Reviewed-on: https://review.coreboot.org/25149 Tested-by: build bot (Jenkins) no-reply@coreboot.org Reviewed-by: Julian von Mendel git@jinvent.de Reviewed-by: David Hendricks david.hendricks@gmail.com --- M linux_spi.c 1 file changed, 3 insertions(+), 2 deletions(-)
Approvals: build bot (Jenkins): Verified David Hendricks: Looks good to me, approved Julian von Mendel: Looks good to me, but someone else must approve
diff --git a/linux_spi.c b/linux_spi.c index 1d3605a..714e612 100644 --- a/linux_spi.c +++ b/linux_spi.c @@ -221,8 +221,9 @@
static int linux_spi_read(struct flashctx *flash, uint8_t *buf, unsigned int start, unsigned int len) { - /* Read buffer is fully utilized for data. */ - return spi_read_chunked(flash, buf, start, len, max_kernel_buf_size); + /* Older kernels use a single buffer for combined input and output + data. So account for longest possible command + address, too. */ + return spi_read_chunked(flash, buf, start, len, max_kernel_buf_size - 5); }
static int linux_spi_write_256(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len)