Fast read adds a dummy byte in tx buffer if the transfer type is SPI_TRANSFER_FLASH_READ_CMD. The dummy byte should be ignored when calculating read address. This is done by adding a bool variable dummy in struct spi_transfer to indicate whether this transfer includes the dummy byte.
Signed-off-by: Zhao, Gang <gang.zhao...@gmail.com> --- .../464-spi-ath79-fix-fast-flash-read.patch | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 target/linux/ar71xx/patches-3.14/464-spi-ath79-fix-fast-flash-read.patch diff --git a/target/linux/ar71xx/patches-3.14/464-spi-ath79-fix-fast-flash-read.patch b/target/linux/ar71xx/patches-3.14/464-spi-ath79-fix-fast-flash-read.patch new file mode 100644 index 0000000..9c7b93e --- /dev/null +++ b/target/linux/ar71xx/patches-3.14/464-spi-ath79-fix-fast-flash-read.patch @@ -0,0 +1,34 @@ +--- a/drivers/mtd/devices/m25p80.c ++++ b/drivers/mtd/devices/m25p80.c +@@ -530,6 +530,8 @@ static int m25p80_read(struct mtd_info * + if (dummy < 0) { + dev_err(&flash->spi->dev, "No valid read command supported\n"); + return -EINVAL; ++ } else if (dummy == 1) { ++ t[0].dummy = true; + } + + t[0].type = SPI_TRANSFER_FLASH_READ_CMD; +--- a/drivers/spi/spi-ath79.c ++++ b/drivers/spi/spi-ath79.c +@@ -262,6 +262,10 @@ static int ath79_spi_do_read_flash_cmd(s + sp->read_addr = 0; + + len = t->len - 1; ++ ++ if (t->dummy) ++ len -= 1; ++ + p = t->tx_buf; + + while (len--) { +--- a/include/linux/spi/spi.h ++++ b/include/linux/spi/spi.h +@@ -598,6 +598,7 @@ struct spi_transfer { + u16 delay_usecs; + u32 speed_hz; + enum spi_transfer_type type; ++ bool dummy; + + struct list_head transfer_list; + }; -- 1.9.3 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel