[U-Boot] [EXT] Re: [PATCH v2] mtd: spi: Improve spi_nor_write_data() implementation
Vignesh Raghavendra
vigneshr at ti.com
Fri May 17 14:34:39 UTC 2019
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.gao at 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:
>>>
More information about the U-Boot
mailing list