Hi, On 01/04/19 10:19 AM, Andrey Smirnov wrote: > Spi_nor_read() already has an appropriate loop around .read() callback > to handle the case when not all of the data requested was written in a > signle ->read() call. Drop extra code doing the same thing in > m25p80_read(). > Thanks for the patch series! But we are in the process of completely moving m25p80.c into spi-nor.c which should take care of this series. See[1][2], I plan to post the next version shortly. Let me know if something is missing. [1] https://patchwork.ozlabs.org/patch/982925/ [2] https://patchwork.ozlabs.org/patch/982922/ Regards Vignesh > Signed-off-by: Andrey Smirnov <andrew.smirnov@xxxxxxxxx> > Cc: Brian Norris <computersforpeace@xxxxxxxxx> > Cc: Boris Brezillon <boris.brezillon@xxxxxxxxxxx> > Cc: Marek Vasut <marek.vasut@xxxxxxxxx> > Cc: Chris Healy <cphealy@xxxxxxxxx> > Cc: linux-mtd@xxxxxxxxxxxxxxxxxxx > Cc: linux-kernel@xxxxxxxxxxxxxxx > --- > drivers/mtd/devices/m25p80.c | 22 +++++++--------------- > 1 file changed, 7 insertions(+), 15 deletions(-) > > diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c > index 651bab6d4e31..114f8ccea85b 100644 > --- a/drivers/mtd/devices/m25p80.c > +++ b/drivers/mtd/devices/m25p80.c > @@ -125,7 +125,6 @@ static ssize_t m25p80_read(struct spi_nor *nor, loff_t from, size_t len, > SPI_MEM_OP_ADDR(nor->addr_width, from, 1), > SPI_MEM_OP_DUMMY(nor->read_dummy, 1), > SPI_MEM_OP_DATA_IN(len, buf, 1)); > - size_t remaining = len; > int ret; > > /* get transfer protocols. */ > @@ -137,22 +136,15 @@ static ssize_t m25p80_read(struct spi_nor *nor, loff_t from, size_t len, > /* convert the dummy cycles to the number of bytes */ > op.dummy.nbytes = (nor->read_dummy * op.dummy.buswidth) / 8; > > - while (remaining) { > - op.data.nbytes = remaining < UINT_MAX ? remaining : UINT_MAX; > - ret = spi_mem_adjust_op_size(flash->spimem, &op); > - if (ret) > - return ret; > - > - ret = spi_mem_exec_op(flash->spimem, &op); > - if (ret) > - return ret; > + ret = spi_mem_adjust_op_size(flash->spimem, &op); > + if (ret) > + return ret; > > - op.addr.val += op.data.nbytes; > - remaining -= op.data.nbytes; > - op.data.buf.in += op.data.nbytes; > - } > + ret = spi_mem_exec_op(flash->spimem, &op); > + if (ret) > + return ret; > > - return len; > + return op.data.nbytes; > } > > /* > -- Regards Vignesh ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/