1 From 8527843351169d999995d331bbdad75560ccafb2 Mon Sep 17 00:00:00 2001
2 From: Michal Suchanek <hramrach@gmail.com>
3 Date: Wed, 2 Dec 2015 10:38:20 +0000
4 Subject: [PATCH 093/113] mtd: spi-nor: check return value from read/write
6 SPI NOR hardware drivers now return useful value from their read/write
7 functions so check them.
9 Signed-off-by: Michal Suchanek <hramrach@gmail.com>
10 Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@freescale.com>
12 drivers/mtd/spi-nor/spi-nor.c | 50 +++++++++++++++++++++++++++++------------
13 1 file changed, 36 insertions(+), 14 deletions(-)
15 --- a/drivers/mtd/spi-nor/spi-nor.c
16 +++ b/drivers/mtd/spi-nor/spi-nor.c
17 @@ -924,7 +924,10 @@ static int spi_nor_read(struct mtd_info
18 ret = nor->read(nor, from, len, retlen, buf);
20 spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_READ);
28 static int sst_write(struct mtd_info *mtd, loff_t to, size_t len,
29 @@ -950,10 +953,14 @@ static int sst_write(struct mtd_info *mt
30 nor->program_opcode = SPINOR_OP_BP;
33 - nor->write(nor, to, 1, retlen, buf);
34 + ret = nor->write(nor, to, 1, retlen, buf);
37 + WARN(ret != 1, "While writing 1 byte written %i bytes\n",
39 ret = spi_nor_wait_till_ready(nor);
46 @@ -962,10 +969,14 @@ static int sst_write(struct mtd_info *mt
47 nor->program_opcode = SPINOR_OP_AAI_WP;
49 /* write two bytes. */
50 - nor->write(nor, to, 2, retlen, buf + actual);
51 + ret = nor->write(nor, to, 2, retlen, buf + actual);
54 + WARN(ret != 2, "While writing 2 bytes written %i bytes\n",
56 ret = spi_nor_wait_till_ready(nor);
61 nor->sst_write_second = true;
63 @@ -974,21 +985,24 @@ static int sst_write(struct mtd_info *mt
65 ret = spi_nor_wait_till_ready(nor);
70 /* Write out trailing byte if it exists. */
74 nor->program_opcode = SPINOR_OP_BP;
75 - nor->write(nor, to, 1, retlen, buf + actual);
77 + ret = nor->write(nor, to, 1, retlen, buf + actual);
80 + WARN(ret != 1, "While writing 1 byte written %i bytes\n",
82 ret = spi_nor_wait_till_ready(nor);
90 spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_WRITE);
93 @@ -1017,14 +1031,18 @@ static int spi_nor_write(struct mtd_info
95 /* do all the bytes fit onto one page? */
96 if (page_offset + len <= nor->page_size) {
97 - nor->write(nor, to, len, retlen, buf);
98 + ret = nor->write(nor, to, len, retlen, buf);
102 /* the size of data remaining on the first page */
103 page_size = nor->page_size - page_offset;
104 - nor->write(nor, to, page_size, retlen, buf);
105 + ret = nor->write(nor, to, page_size, retlen, buf);
109 /* write everything in nor->page_size chunks */
110 - for (i = page_size; i < len; i += page_size) {
111 + for (i = ret; i < len; ) {
113 if (page_size > nor->page_size)
114 page_size = nor->page_size;
115 @@ -1035,7 +1053,11 @@ static int spi_nor_write(struct mtd_info
119 - nor->write(nor, to + i, page_size, retlen, buf + i);
120 + ret = nor->write(nor, to + i, page_size, retlen,