layerscape: make uImage with zImage for 32-bit kernel
[openwrt/openwrt.git] / target / linux / layerscape / patches-4.4 / 1092-mtd-fsl-quadspi-return-amount-of-data-read-written-o.patch
1 From 99768b3062501b05810fb62545279da3a4371ca0 Mon Sep 17 00:00:00 2001
2 From: Michal Suchanek <hramrach@gmail.com>
3 Date: Wed, 2 Dec 2015 10:38:19 +0000
4 Subject: [PATCH 092/113] mtd: fsl-quadspi: return amount of data read/written
5 or error
6
7 Return amount of data read/written or error as read(2)/write(2) does.
8
9 Signed-off-by: Michal Suchanek <hramrach@gmail.com>
10 Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@freescale.com>
11 ---
12 drivers/mtd/spi-nor/fsl-quadspi.c | 18 +++++++++++-------
13 1 file changed, 11 insertions(+), 7 deletions(-)
14
15 --- a/drivers/mtd/spi-nor/fsl-quadspi.c
16 +++ b/drivers/mtd/spi-nor/fsl-quadspi.c
17 @@ -618,7 +618,7 @@ static inline void fsl_qspi_invalid(stru
18 qspi_writel(q, reg, q->iobase + QUADSPI_MCR);
19 }
20
21 -static int fsl_qspi_nor_write(struct fsl_qspi *q, struct spi_nor *nor,
22 +static ssize_t fsl_qspi_nor_write(struct fsl_qspi *q, struct spi_nor *nor,
23 u8 opcode, unsigned int to, u32 *txbuf,
24 unsigned count, size_t *retlen)
25 {
26 @@ -647,8 +647,11 @@ static int fsl_qspi_nor_write(struct fsl
27 /* Trigger it */
28 ret = fsl_qspi_runcmd(q, opcode, to, count);
29
30 - if (ret == 0 && retlen)
31 - *retlen += count;
32 + if (ret == 0) {
33 + if (retlen)
34 + *retlen += count;
35 + return count;
36 + }
37
38 return ret;
39 }
40 @@ -860,6 +863,8 @@ static int fsl_qspi_write_reg(struct spi
41 } else if (len > 0) {
42 ret = fsl_qspi_nor_write(q, nor, opcode, 0,
43 (u32 *)buf, len, NULL);
44 + if (ret > 0)
45 + return 0;
46 } else {
47 dev_err(q->dev, "invalid cmd %d\n", opcode);
48 ret = -EINVAL;
49 @@ -873,12 +878,12 @@ static ssize_t fsl_qspi_write(struct spi
50 {
51 struct fsl_qspi *q = nor->priv;
52
53 - fsl_qspi_nor_write(q, nor, nor->program_opcode, to,
54 + ssize_t ret = fsl_qspi_nor_write(q, nor, nor->program_opcode, to,
55 (u32 *)buf, len, retlen);
56
57 /* invalid the data in the AHB buffer. */
58 fsl_qspi_invalid(q);
59 - return 0;
60 + return ret;
61 }
62
63 static ssize_t fsl_qspi_read(struct spi_nor *nor, loff_t from,
64 @@ -924,8 +929,7 @@ static ssize_t fsl_qspi_read(struct spi_
65 memcpy(buf, q->ahb_addr + q->chip_base_addr + from - q->memmap_offs,
66 len);
67
68 - *retlen += len;
69 - return 0;
70 + return len;
71 }
72
73 static int fsl_qspi_erase(struct spi_nor *nor, loff_t offs)