aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/brcm63xx/patches-4.4/000-4.8-05-mtd-nxp-spifi-return-amount-of-data-transferred-or-e.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/brcm63xx/patches-4.4/000-4.8-05-mtd-nxp-spifi-return-amount-of-data-transferred-or-e.patch')
-rw-r--r--target/linux/brcm63xx/patches-4.4/000-4.8-05-mtd-nxp-spifi-return-amount-of-data-transferred-or-e.patch51
1 files changed, 51 insertions, 0 deletions
diff --git a/target/linux/brcm63xx/patches-4.4/000-4.8-05-mtd-nxp-spifi-return-amount-of-data-transferred-or-e.patch b/target/linux/brcm63xx/patches-4.4/000-4.8-05-mtd-nxp-spifi-return-amount-of-data-transferred-or-e.patch
new file mode 100644
index 0000000000..0458148399
--- /dev/null
+++ b/target/linux/brcm63xx/patches-4.4/000-4.8-05-mtd-nxp-spifi-return-amount-of-data-transferred-or-e.patch
@@ -0,0 +1,51 @@
+From bc418cd2652f47a327e27f978caa3d85f9558b09 Mon Sep 17 00:00:00 2001
+From: Brian Norris <computersforpeace@gmail.com>
+Date: Thu, 5 May 2016 17:31:51 -0700
+Subject: [PATCH 05/10] mtd: nxp-spifi: return amount of data transferred or
+ error in read/write
+
+Add checking of SPI transfer errors and return them from read/write
+functions. Also return the amount of data transferred.
+
+Signed-off-by: Brian Norris <computersforpeace@gmail.com>
+---
+ drivers/mtd/spi-nor/nxp-spifi.c | 13 +++++++++----
+ 1 file changed, 9 insertions(+), 4 deletions(-)
+
+--- a/drivers/mtd/spi-nor/nxp-spifi.c
++++ b/drivers/mtd/spi-nor/nxp-spifi.c
+@@ -185,7 +185,7 @@ static ssize_t nxp_spifi_read(struct spi
+ memcpy_fromio(buf, spifi->flash_base + from, len);
+ *retlen += len;
+
+- return 0;
++ return len;
+ }
+
+ static ssize_t nxp_spifi_write(struct spi_nor *nor, loff_t to, size_t len,
+@@ -194,6 +194,7 @@ static ssize_t nxp_spifi_write(struct sp
+ struct nxp_spifi *spifi = nor->priv;
+ u32 cmd;
+ int ret;
++ size_t i;
+
+ ret = nxp_spifi_set_memory_mode_off(spifi);
+ if (ret)
+@@ -209,10 +210,14 @@ static ssize_t nxp_spifi_write(struct sp
+ SPIFI_CMD_FRAMEFORM(spifi->nor.addr_width + 1);
+ writel(cmd, spifi->io_base + SPIFI_CMD);
+
+- while (len--)
+- writeb(*buf++, spifi->io_base + SPIFI_DATA);
++ for (i = 0; i < len; i++)
++ writeb(buf[i], spifi->io_base + SPIFI_DATA);
+
+- return nxp_spifi_wait_for_cmd(spifi);
++ ret = nxp_spifi_wait_for_cmd(spifi);
++ if (ret)
++ return ret;
++
++ return len;
+ }
+
+ static int nxp_spifi_erase(struct spi_nor *nor, loff_t offs)