Hi Ashish, > Hi Vignesh >
> Is this taken care now, plain text version was posted here > http://patchwork.ozlabs.org/patch/1090121/ > A similar patch[1] was proposed in meantime which has been merged to mainline U-Boot. So this issue must now be resolved. Let me know if the issue still persists. [1] commit 60e2bf46784ebbd30ff29b3d3c7c97e56b11e86a Author: Weijie Gao <weijie....@mediatek.com> Date: Fri Apr 26 17:22:19 2019 +0800 mtd: spi-nor: fix page program issue when using spi-mem driver > Regards > Ashish > >> >>> >>> drivers/mtd/spi/spi-nor-core.c | 28 ++++++++++------------------ >>> 1 file changed, 10 insertions(+), 18 deletions(-) >>> >>> diff --git a/drivers/mtd/spi/spi-nor-core.c >>> b/drivers/mtd/spi/spi-nor-core.c index c4e2f6a08f..8e754d445d 100644 >>> --- a/drivers/mtd/spi/spi-nor-core.c >>> +++ b/drivers/mtd/spi/spi-nor-core.c >>> @@ -116,7 +116,6 @@ static ssize_t spi_nor_write_data(struct spi_nor >> *nor, loff_t to, size_t len, >>> SPI_MEM_OP_ADDR(nor->addr_width, to, 1), >>> SPI_MEM_OP_NO_DUMMY, >>> SPI_MEM_OP_DATA_OUT(len, buf, 1)); >>> - size_t remaining = len; >>> int ret; >>> >>> /* get transfer protocols. */ >>> @@ -127,22 +126,19 @@ static ssize_t spi_nor_write_data(struct spi_nor >> *nor, loff_t to, size_t len, >>> if (nor->program_opcode == SPINOR_OP_AAI_WP && nor- >>> sst_write_second) >>> op.addr.nbytes = 0; >>> >>> - while (remaining) { >>> - op.data.nbytes = remaining < UINT_MAX ? remaining : UINT_MAX; >>> - ret = spi_mem_adjust_op_size(nor->spi, &op); >>> - if (ret) >>> - return ret; >>> + op.data.nbytes = len < UINT_MAX ? len : UINT_MAX; >>> + ret = spi_mem_adjust_op_size(nor->spi, &op); >>> + if (ret) >>> + return ret; >>> >>> - ret = spi_mem_exec_op(nor->spi, &op); >>> - if (ret) >>> - return ret; >>> + ret = spi_mem_exec_op(nor->spi, &op); >>> + if (ret) >>> + return ret; >>> >>> - op.addr.val += op.data.nbytes; >>> - remaining -= op.data.nbytes; >>> - op.data.buf.out += op.data.nbytes; >>> - } >>> + op.addr.val += op.data.nbytes; >>> + op.data.buf.out += op.data.nbytes; >>> >>> - return len; >>> + return op.data.nbytes; >>> } >>> >>> /* >>> @@ -1101,10 +1097,6 @@ static int spi_nor_write(struct mtd_info *mtd, >> loff_t to, size_t len, >>> goto write_err; >>> *retlen += written; >>> i += written; >>> - if (written != page_remain) { >>> - ret = -EIO; >>> - goto write_err; >>> - } >>> } >>> >>> write_err: >>> _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot