Re: [U-Boot] [EXT] Re: [PATCH v2] mtd: spi: Improve spi_nor_write_data() implementation
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 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, ); >>> - if (ret) >>> - return ret; >>> + op.data.nbytes = len < UINT_MAX ? len : UINT_MAX; >>> + ret = spi_mem_adjust_op_size(nor->spi, ); >>> + if (ret) >>> + return ret; >>> >>> - ret = spi_mem_exec_op(nor->spi, ); >>> - if (ret) >>> - return ret; >>> + ret = spi_mem_exec_op(nor->spi, ); >>> + 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
Re: [U-Boot] [EXT] Re: [PATCH v2] mtd: spi: Improve spi_nor_write_data() implementation
> -Original Message- > From: Vignesh Raghavendra > Sent: Wednesday, April 17, 2019 6:18 PM > To: Rajat Srivastava ; u-boot@lists.denx.de; > tr...@konsulko.com; marek.va...@gmail.com; > marek.vasut+rene...@gmail.com; ja...@openedev.com > Cc: Ashish Kumar > Subject: [EXT] Re: [PATCH v2] mtd: spi: Improve spi_nor_write_data() > implementation > > WARNING: This email was created outside of NXP. DO NOT CLICK links or > attachments unless you recognize the sender and know the content is safe. > > > > On 16/04/19 5:29 PM, Rajat Srivastava wrote: > > Maximum write size in a single write operation in > > spi_nor_write_data() function can be equal to slave tx buffer, which > > is adjusted in spi_mem_adjust_op_size() and write operation gets > > fragmented. > > > > Previously data write for the above fragmentation didn't incorporate > > write enable and status checks. > > It was sent to flash at page offsets only. > > > > Signed-off-by: Rajat Srivastava > > --- > > Changes in v2: > > Incorporating review comments given by Vignesh. > > [PATCH v1]: > > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatc > > > hwork.ozlabs.org%2Fpatch%2F1078183%2Fdata=02%7C01%7Cashish. > kumar% > > > 40nxp.com%7C774c432160da4264b0a308d6c332e381%7C686ea1d3bc2b4c6 > fa92cd99 > > > c5c301635%7C0%7C0%7C636911020672697602sdata=EK3zMXmkMdl > cft04mh8GK > > EkX6G8JpImEk7YK1SH%2FxQ8%3Dreserved=0 > > Changes look good as such, but I cannot seem to apply these patch locally as > mbox for testing. Looking at mail source, it seems to be sent in binary format > instead of plain text. Could you resend in plain text? Hi Vignesh Is this taken care now, plain text version was posted here http://patchwork.ozlabs.org/patch/1090121/ 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, ); > > - if (ret) > > - return ret; > > + op.data.nbytes = len < UINT_MAX ? len : UINT_MAX; > > + ret = spi_mem_adjust_op_size(nor->spi, ); > > + if (ret) > > + return ret; > > > > - ret = spi_mem_exec_op(nor->spi, ); > > - if (ret) > > - return ret; > > + ret = spi_mem_exec_op(nor->spi, ); > > + 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
Re: [U-Boot] [EXT] Re: [PATCH v2] mtd: spi: Improve spi_nor_write_data() implementation
> -Original Message- > From: Vignesh Raghavendra > Sent: Wednesday, April 17, 2019 6:18 PM > To: Rajat Srivastava ; u-boot@lists.denx.de; > tr...@konsulko.com; marek.va...@gmail.com; > marek.vasut+rene...@gmail.com; ja...@openedev.com > Cc: Ashish Kumar > Subject: [EXT] Re: [PATCH v2] mtd: spi: Improve spi_nor_write_data() > implementation > > WARNING: This email was created outside of NXP. DO NOT CLICK links or > attachments unless you recognize the sender and know the content is safe. > > > > On 16/04/19 5:29 PM, Rajat Srivastava wrote: > > Maximum write size in a single write operation in > > spi_nor_write_data() function can be equal to slave tx buffer, which > > is adjusted in spi_mem_adjust_op_size() and write operation gets > > fragmented. > > > > Previously data write for the above fragmentation didn't incorporate > > write enable and status checks. > > It was sent to flash at page offsets only. > > > > Signed-off-by: Rajat Srivastava > > --- > > Changes in v2: > > Incorporating review comments given by Vignesh. > > [PATCH v1]: > > > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatc > > > hwork.ozlabs.org%2Fpatch%2F1078183%2Fdata=02%7C01%7Crajat.sri > vast > > > ava%40nxp.com%7C774c432160da4264b0a308d6c332e381%7C686ea1d3bc2b > 4c6fa92 > > > cd99c5c301635%7C0%7C0%7C636911020672017024sdata=Kl3XDugF05y > g4UiLk > > rrBptYDm2TFTZMFhIMOEF9Znjw%3Dreserved=0 > > Changes look good as such, but I cannot seem to apply these patch locally as > mbox for testing. Looking at mail source, it seems to be sent in binary format > instead of plain text. Could you resend in plain text? This looks like an issue with using outlook.office365.com as smtp server, since the the patch is getting corrupt even when I am sending it again. I'm working with IT team here to resolve this. Regards Rajat > > > > > 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, ); > > - if (ret) > > - return ret; > > + op.data.nbytes = len < UINT_MAX ? len : UINT_MAX; > > + ret = spi_mem_adjust_op_size(nor->spi, ); > > + if (ret) > > + return ret; > > > > - ret = spi_mem_exec_op(nor->spi, ); > > - if (ret) > > - return ret; > > + ret = spi_mem_exec_op(nor->spi, ); > > + 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