diff options
author | Jonas Gorski <jonas.gorski@gmail.com> | 2017-02-07 12:01:46 +0100 |
---|---|---|
committer | Jonas Gorski <jonas.gorski@gmail.com> | 2017-06-04 10:40:00 +0200 |
commit | 2a2b16210bbc8c5881286d2ff742f3bdf1a7fd9c (patch) | |
tree | 0ff5bf45a97c1f307913cff42583bbd92c7233fd /target/linux/brcm63xx/patches-4.4/000-4.8-09-mtd-spi-nor-add-read-loop.patch | |
parent | f62e02cf20c23b55e998edf6874c1a5de3a88c6d (diff) | |
download | upstream-2a2b16210bbc8c5881286d2ff742f3bdf1a7fd9c.tar.gz upstream-2a2b16210bbc8c5881286d2ff742f3bdf1a7fd9c.tar.bz2 upstream-2a2b16210bbc8c5881286d2ff742f3bdf1a7fd9c.zip |
brcm63xx: backport upstream solution for SPI message size limits
Backport upstream solution for working around SPI controller maximum
message sizes.
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
Diffstat (limited to 'target/linux/brcm63xx/patches-4.4/000-4.8-09-mtd-spi-nor-add-read-loop.patch')
-rw-r--r-- | target/linux/brcm63xx/patches-4.4/000-4.8-09-mtd-spi-nor-add-read-loop.patch | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/target/linux/brcm63xx/patches-4.4/000-4.8-09-mtd-spi-nor-add-read-loop.patch b/target/linux/brcm63xx/patches-4.4/000-4.8-09-mtd-spi-nor-add-read-loop.patch new file mode 100644 index 0000000000..662c73ada9 --- /dev/null +++ b/target/linux/brcm63xx/patches-4.4/000-4.8-09-mtd-spi-nor-add-read-loop.patch @@ -0,0 +1,54 @@ +From 26f9bcad29a6c240881bd4efc90f16a9990dd6c2 Mon Sep 17 00:00:00 2001 +From: Michal Suchanek <hramrach@gmail.com> +Date: Thu, 5 May 2016 17:31:55 -0700 +Subject: [PATCH 09/10] mtd: spi-nor: add read loop + +mtdblock and ubi do not handle the situation when read returns less data +than requested. Loop in spi-nor until buffer is filled or an error is +returned. + +Signed-off-by: Michal Suchanek <hramrach@gmail.com> +Signed-off-by: Brian Norris <computersforpeace@gmail.com> +Tested-by Cyrille Pitchen <cyrille.pitchen@atmel.com> +Acked-by: Michal Suchanek <hramrach@gmail.com> +Tested-by: Michal Suchanek <hramrach@gmail.com> +--- + drivers/mtd/spi-nor/spi-nor.c | 25 +++++++++++++++++++------ + 1 file changed, 19 insertions(+), 6 deletions(-) + +--- a/drivers/mtd/spi-nor/spi-nor.c ++++ b/drivers/mtd/spi-nor/spi-nor.c +@@ -890,14 +890,27 @@ static int spi_nor_read(struct mtd_info + if (ret) + return ret; + +- ret = nor->read(nor, from, len, buf); ++ while (len) { ++ ret = nor->read(nor, from, len, buf); ++ if (ret == 0) { ++ /* We shouldn't see 0-length reads */ ++ ret = -EIO; ++ goto read_err; ++ } ++ if (ret < 0) ++ goto read_err; + +- spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_READ); +- if (ret < 0) +- return ret; ++ WARN_ON(ret > len); ++ *retlen += ret; ++ buf += ret; ++ from += ret; ++ len -= ret; ++ } ++ ret = 0; + +- *retlen += ret; +- return 0; ++read_err: ++ spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_READ); ++ return ret; + } + + static int sst_write(struct mtd_info *mtd, loff_t to, size_t len, |