From: Sourav Poddar <sourav.poddar@ti.com>
To: Jagan Teki <jagannadh.teki@gmail.com>
Cc: Rajendra nayak <rnayak@ti.com>,
jagannadha.sutradharudu-teki@xilinx.com,
Felipe Balbi <balbi@ti.com>,
u-boot@lists.denx.de, linux-mtd@lists.infradead.org,
Tom Rini <trini@ti.com>
Subject: Re: [U-Boot] U-boot: Erase/read/write issue with S25fl256S flash device
Date: Mon, 17 Jun 2013 12:41:23 +0530 [thread overview]
Message-ID: <51BEB69B.5010902@ti.com> (raw)
In-Reply-To: <CAD6G_RQPfQrwxkYZvB+hx6YVrMSNNYKSzCEB9_8t0SYCfwKt2g@mail.gmail.com>
On Monday 17 June 2013 12:35 PM, Jagan Teki wrote:
> On Mon, Jun 17, 2013 at 12:28 PM, Sourav Poddar<sourav.poddar@ti.com> wrote:
>> HI Jagan,
>>
>> On Monday 17 June 2013 12:17 PM, Jagan Teki wrote:
>>> Hi Sourav,
>>>
>>> On Mon, Jun 17, 2013 at 11:44 AM, Sourav Poddar<sourav.poddar@ti.com>
>>> wrote:
>>>> Hi Jagan,
>>>>
>>>> On Saturday 15 June 2013 09:47 PM, Jagan Teki wrote:
>>>>> On 14-06-2013 20:13, Sourav Poddar wrote:
>>>>>> Hi Jagan,
>>>>>> On Friday 14 June 2013 08:08 PM, Jagan Teki wrote:
>>>>>>> On 14-06-2013 20:03, Sourav Poddar wrote:
>>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> On Wednesday 12 June 2013 01:00 PM, Sourav Poddar wrote:
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> I am working on qspi flash device S25FL256S at u-boot level. I am
>>>>>>>>> trying to
>>>>>>>>> make use of the existing spi_flash.c framework available at u-boot
>>>>>>>>> for
>>>>>>>>> erasing/reading/writing
>>>>>>>>> into the flash device.
>>>>>>>>>
>>>>>>>>> There are several issues(mentioned below), which I faced while using
>>>>>>>>> S25FL256s flash device
>>>>>>>>> with my dra7xx board which has a qspi controller to which the above
>>>>>>>>> mentioned flash device is attached.
>>>>>>>>>
>>>>>>>>> 1. Erase (spi_flash_cmd_erase)
>>>>>>>>>
>>>>>>>>> Issuing a command something like this..
>>>>>>>>>
>>>>>>>>> sf erase 0x0 0x50000
>>>>>>>>> - erases only first 0x20000 bytes of flash device, anything above
>>>>>>>>> that is not erase. I need to
>>>>>>>>> issue separate commands after 0x20000 for every 0x10000 bytes.
>>>>>>>>>
>>>>>>>>> Am i missing anything here?
>>>>>>>>>
>>>>>>>>> 2. read
>>>>>>>>>
>>>>>>>>> sf read 81000000 0 0x10000
>>>>>>>>>
>>>>>>>>> Read is not happening properly. The last few byte along the 4k
>>>>>>>>> boundary always shows zero.
>>>>>>>>> Above 4k bytes, read is not happening.
>>>>>>>>>
>>>>>>>>> For ex:
>>>>>>>>> DRA752 EVM # md 81000f00
>>>>>>>>> 81000f00: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000f10: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000f20: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000f30: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000f40: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000f50: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000f60: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000f70: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000f80: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000f90: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000fa0: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000fb0: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000fc0: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000fd0: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000fe0: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000ff0: ffffffff ffffffff 00ffffff 00000000 ................
>>>>>>>>>
>>>>>>>>> In this dump, if you see 81000ff0 the last column shows 000000 which
>>>>>>>>> is
>>>>>>>>> not expected. and it happens along every 4k bytes.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> So, to get rid of the above issue, I switched to page read with the
>>>>>>>>> below patch[1],
>>>>>>>>> which is giving me the correct result.
>>>>>>>>> [1]:
>>>>>>>>> @@ -147,17 +153,40 @@ int spi_flash_read_common(struct spi_flash
>>>>>>>>> *flash, const u8 *cmd,
>>>>>>>>> int spi_flash_cmd_read_fast(struct spi_flash *flash, u32 offset,
>>>>>>>>> size_t len, void *data)
>>>>>>>>> {
>>>>>>>>> - u8 cmd[5];
>>>>>>>>> + unsigned long page_addr, byte_addr, page_size;
>>>>>>>>> + size_t chunk_len, actual;
>>>>>>>>> + int ret = 0;
>>>>>>>>> + u8 cmd[4];
>>>>>>>>>
>>>>>>>>> /* Handle memory-mapped SPI */
>>>>>>>>> if (flash->memory_map)
>>>>>>>>> memcpy(data, flash->memory_map + offset, len);
>>>>>>>>> + page_size = flash->page_size;
>>>>>>>>> + page_addr = offset / page_size;
>>>>>>>>> + byte_addr = offset % page_size;
>>>>>>>>> +
>>>>>>>>> + cmd[0] = CMD_READ_ARRAY_SLOW;
>>>>>>>>> + for (actual = 0; actual< len; actual += chunk_len) {
>>>>>>>>> + chunk_len = min(len - actual, page_size -
>>>>>>>>> byte_addr);
>>>>>>>>> +
>>>>>>>>> + cmd[1] = page_addr>> 8;
>>>>>>>>> + cmd[2] = page_addr;
>>>>>>>>> + cmd[3] = byte_addr;
>>>>>>>>> +
>>>>>>>>> + ret = spi_flash_read_common(flash, cmd, sizeof(cmd),
>>>>>>>>> data + actual, chunk_len);
>>>>>>>>> + if (ret< 0) {
>>>>>>>>> + debug("SF: read failed");
>>>>>>>>> + break;
>>>>>>>>> + }
>>>>>>>>>
>>>>>>>>> - cmd[0] = CMD_READ_ARRAY_FAST;
>>>>>>>>> - spi_flash_addr(offset, cmd);
>>>>>>>>> - cmd[4] = 0x00;
>>>>>>>>> + byte_addr += chunk_len;
>>>>>>>>> + if (byte_addr == page_size) {
>>>>>>>>> + page_addr++;
>>>>>>>>> + byte_addr = 0;
>>>>>>>>> + }
>>>>>>>>> + }
>>>>>>>>>
>>>>>>>>> - return spi_flash_read_common(flash, cmd, sizeof(cmd), data,
>>>>>>>>> len);
>>>>>>>>> + return ret;
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> Any idea about this?
>>>>>>>>>
>>>>>>>>> 3. write (spi_flash_cmd_write_multi)
>>>>>>>>> write not happening properly.
>>>>>>>>>
>>>>>>>>> observations: only able to write single page, anything after a page
>>>>>>>>> is
>>>>>>>>> not getting
>>>>>>>>> written.
>>>>>>>>> Workaround:
>>>>>>>>> I did a write disable latch at the end of every write cycle(page
>>>>>>>>> program) and enable it
>>>>>>>>> again for the next loop. With this, I see I get rid of the above
>>>>>>>>> issue.
>>>>>>>>>
>>>>>>>>> @@ -117,6 +117,12 @@ int spi_flash_cmd_write_multi(struct
>>>>>>>>> spi_flash
>>>>>>>>> *flash, u32 offset,
>>>>>>>>> if (ret)
>>>>>>>>> break;
>>>>>>>>>
>>>>>>>>> + ret = spi_flash_cmd_write_disable(flash);
>>>>>>>>> + if (ret< 0) {
>>>>>>>>> + printf("SF: disabling write failed\n");
>>>>>>>>> + break;
>>>>>>>>> + }
>>>>>>>>> +
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Have anyone seen the above mentioned issues regarding
>>>>>>>>> read/write/erase? OR is there any
>>>>>>>>> configurations that I might be missing ?
>>>>>>>>>
>>>>>>>> Any Input on this?
>>>>>>>
>>>>>>> Please wait, I am pushing some changes tonight or so.
>>>>>>>
>>>>>>> We will continue this thread, after testing your part with these new
>>>>>>> changes.
>>>>>>>
>>>>>>> I will intimate you once the push done.
>>>>>>>
>>>>>>> --
>>>>>>> Thanks,
>>>>>>> Jagan.
>>>>>>>
>>>>>>>
>>>>>> Thanks a lot for the reply.
>>>>>> Sure, will wait for your changes to go in.
>>>>>
>>>>> Will take some time go these changes on master.
>>>>>
>>>>> Please checkout master-work branch in u-boot-spi repo
>>>>> git://git.denx.de/u-boot-spi.git
>>>>>
>>>>> and try to test 256S parts, fyi: I tested the same part got the
>>>>> +ve result.
>>>>>
>>>> Tested the above tree on my board.
>>>> But, still the issues remain the same for me in all the three
>>>> cases(erase/read/write).
>>>>
>>>> Here is the short log of the read command..
>>>> DRA752 EVM # sf probe 0
>>>> SF: Detected S25FL256S_64K with page size 64 KiB, total 32 MiB
>>>> SF: Warning - Only lower 16MiB accessible, Full access #define
>>>> CONFIG_SPI_FLASH_BAR
>>>> DRA752 EVM # sf erase 0x0 0x10000
>>>> SF: 65536 bytes @ 0x0 Erased: OK
>>>> DRA752 EVM # mw.b 0x81000100 0xff 0x10000
>>>> DRA752 EVM # sf read 0x81003000 0x0 0x10000
>>>> SF: 65536 bytes @ 0x0 Read: OK
>>>> DRA752 EVM # cmp.b 0x81003000 0x81000100 0x10000
>>>> byte at 0x81003ffb (0x0) != byte at 0x810010fb (0xff)
>>>> Total of 4091 byte(s) were the same
>>>>
>>>>
>>>> Erase: not able to do with a single command, need to issue for every
>>>> 0x10000
>>>> bytes.
>>>>
>>>> Write: Need to disable latch after every write to make it properly work.
>>>>
>>>> Is it possible for you to give me basic commands which you might have
>>>> ran
>>>> to confirm
>>>> the read/write and erase ??
>>> I tested the same part - for me i couldn't see the issues with SL256S
>>>
>>> OK! can enable the log on poll function, spi_flash_cmd_wait_ready()
>>> make debug -> printf.
>>> Do the same test.! and send the log file.
>>>
>>> --
>>> Thanks,
>>> Jagan.
>> Here is the output log, no change..
>>
>>
>> DRA752 EVM # sf probe 0
>> SF: Detected S25FL256S_64K with page size 64 KiB, total 32 MiB
>> DRA752 EVM # sf erase 0x0 0x10000
>> SF: 65536 bytes @ 0x0 Erased: OK
>> DRA752 EVM # mw.b 0x81000100 0xff 0x10000
>> DRA752 EVM # sf read 0x81003000 0x0 0x10000
>> SF: 65536 bytes @ 0x0 Read: OK
>> DRA752 EVM # cmp.b 0x81003000 0x81000100 0x10000
>> byte at 0x81003ffb (0x0) != byte at 0x810010fb (0xff)
>> Total of 4091 byte(s) were the same
>> DRA752 EVM #
>>
>>
>> Code change: for above output.
>> --- a/drivers/mtd/spi/spi_flash.c
>> +++ b/drivers/mtd/spi/spi_flash.c
>> @@ -85,7 +85,7 @@ int spi_flash_cmd_wait_ready(struct spi_flash *flash,
>> unsigned long timeout)
>>
>> ret = spi_xfer(spi, 8,&cmd, NULL, SPI_XFER_BEGIN);
>> if (ret) {
>> - debug("SF: fail to read %s status register\n",
>> + printf("SF: fail to read %s status register\n",
>> cmd == CMD_READ_STATUS ? "read" : "flag");
>> return ret;
>> }
>> @@ -109,7 +109,7 @@ int spi_flash_cmd_wait_ready(struct spi_flash *flash,
>> unsigned long timeout)
>> return 0;
>>
>> /* Timed out */
>> - debug("SF: time out!\n");
>> + printf("SF: time out!\n");
>> return -1;
>> }
>>
> Ohh..
>
> - What if you erase the entire flash and read back, same result is it?
Yes.
> - please send the paths for config file for this board?
include/configs/dra7xx_evm.h
> --
> Thanks,
> Jagan.
WARNING: multiple messages have this Message-ID (diff)
From: Sourav Poddar <sourav.poddar@ti.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] U-boot: Erase/read/write issue with S25fl256S flash device
Date: Mon, 17 Jun 2013 12:41:23 +0530 [thread overview]
Message-ID: <51BEB69B.5010902@ti.com> (raw)
In-Reply-To: <CAD6G_RQPfQrwxkYZvB+hx6YVrMSNNYKSzCEB9_8t0SYCfwKt2g@mail.gmail.com>
On Monday 17 June 2013 12:35 PM, Jagan Teki wrote:
> On Mon, Jun 17, 2013 at 12:28 PM, Sourav Poddar<sourav.poddar@ti.com> wrote:
>> HI Jagan,
>>
>> On Monday 17 June 2013 12:17 PM, Jagan Teki wrote:
>>> Hi Sourav,
>>>
>>> On Mon, Jun 17, 2013 at 11:44 AM, Sourav Poddar<sourav.poddar@ti.com>
>>> wrote:
>>>> Hi Jagan,
>>>>
>>>> On Saturday 15 June 2013 09:47 PM, Jagan Teki wrote:
>>>>> On 14-06-2013 20:13, Sourav Poddar wrote:
>>>>>> Hi Jagan,
>>>>>> On Friday 14 June 2013 08:08 PM, Jagan Teki wrote:
>>>>>>> On 14-06-2013 20:03, Sourav Poddar wrote:
>>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> On Wednesday 12 June 2013 01:00 PM, Sourav Poddar wrote:
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> I am working on qspi flash device S25FL256S at u-boot level. I am
>>>>>>>>> trying to
>>>>>>>>> make use of the existing spi_flash.c framework available at u-boot
>>>>>>>>> for
>>>>>>>>> erasing/reading/writing
>>>>>>>>> into the flash device.
>>>>>>>>>
>>>>>>>>> There are several issues(mentioned below), which I faced while using
>>>>>>>>> S25FL256s flash device
>>>>>>>>> with my dra7xx board which has a qspi controller to which the above
>>>>>>>>> mentioned flash device is attached.
>>>>>>>>>
>>>>>>>>> 1. Erase (spi_flash_cmd_erase)
>>>>>>>>>
>>>>>>>>> Issuing a command something like this..
>>>>>>>>>
>>>>>>>>> sf erase 0x0 0x50000
>>>>>>>>> - erases only first 0x20000 bytes of flash device, anything above
>>>>>>>>> that is not erase. I need to
>>>>>>>>> issue separate commands after 0x20000 for every 0x10000 bytes.
>>>>>>>>>
>>>>>>>>> Am i missing anything here?
>>>>>>>>>
>>>>>>>>> 2. read
>>>>>>>>>
>>>>>>>>> sf read 81000000 0 0x10000
>>>>>>>>>
>>>>>>>>> Read is not happening properly. The last few byte along the 4k
>>>>>>>>> boundary always shows zero.
>>>>>>>>> Above 4k bytes, read is not happening.
>>>>>>>>>
>>>>>>>>> For ex:
>>>>>>>>> DRA752 EVM # md 81000f00
>>>>>>>>> 81000f00: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000f10: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000f20: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000f30: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000f40: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000f50: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000f60: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000f70: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000f80: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000f90: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000fa0: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000fb0: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000fc0: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000fd0: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000fe0: ffffffff ffffffff ffffffff ffffffff ................
>>>>>>>>> 81000ff0: ffffffff ffffffff 00ffffff 00000000 ................
>>>>>>>>>
>>>>>>>>> In this dump, if you see 81000ff0 the last column shows 000000 which
>>>>>>>>> is
>>>>>>>>> not expected. and it happens along every 4k bytes.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> So, to get rid of the above issue, I switched to page read with the
>>>>>>>>> below patch[1],
>>>>>>>>> which is giving me the correct result.
>>>>>>>>> [1]:
>>>>>>>>> @@ -147,17 +153,40 @@ int spi_flash_read_common(struct spi_flash
>>>>>>>>> *flash, const u8 *cmd,
>>>>>>>>> int spi_flash_cmd_read_fast(struct spi_flash *flash, u32 offset,
>>>>>>>>> size_t len, void *data)
>>>>>>>>> {
>>>>>>>>> - u8 cmd[5];
>>>>>>>>> + unsigned long page_addr, byte_addr, page_size;
>>>>>>>>> + size_t chunk_len, actual;
>>>>>>>>> + int ret = 0;
>>>>>>>>> + u8 cmd[4];
>>>>>>>>>
>>>>>>>>> /* Handle memory-mapped SPI */
>>>>>>>>> if (flash->memory_map)
>>>>>>>>> memcpy(data, flash->memory_map + offset, len);
>>>>>>>>> + page_size = flash->page_size;
>>>>>>>>> + page_addr = offset / page_size;
>>>>>>>>> + byte_addr = offset % page_size;
>>>>>>>>> +
>>>>>>>>> + cmd[0] = CMD_READ_ARRAY_SLOW;
>>>>>>>>> + for (actual = 0; actual< len; actual += chunk_len) {
>>>>>>>>> + chunk_len = min(len - actual, page_size -
>>>>>>>>> byte_addr);
>>>>>>>>> +
>>>>>>>>> + cmd[1] = page_addr>> 8;
>>>>>>>>> + cmd[2] = page_addr;
>>>>>>>>> + cmd[3] = byte_addr;
>>>>>>>>> +
>>>>>>>>> + ret = spi_flash_read_common(flash, cmd, sizeof(cmd),
>>>>>>>>> data + actual, chunk_len);
>>>>>>>>> + if (ret< 0) {
>>>>>>>>> + debug("SF: read failed");
>>>>>>>>> + break;
>>>>>>>>> + }
>>>>>>>>>
>>>>>>>>> - cmd[0] = CMD_READ_ARRAY_FAST;
>>>>>>>>> - spi_flash_addr(offset, cmd);
>>>>>>>>> - cmd[4] = 0x00;
>>>>>>>>> + byte_addr += chunk_len;
>>>>>>>>> + if (byte_addr == page_size) {
>>>>>>>>> + page_addr++;
>>>>>>>>> + byte_addr = 0;
>>>>>>>>> + }
>>>>>>>>> + }
>>>>>>>>>
>>>>>>>>> - return spi_flash_read_common(flash, cmd, sizeof(cmd), data,
>>>>>>>>> len);
>>>>>>>>> + return ret;
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> Any idea about this?
>>>>>>>>>
>>>>>>>>> 3. write (spi_flash_cmd_write_multi)
>>>>>>>>> write not happening properly.
>>>>>>>>>
>>>>>>>>> observations: only able to write single page, anything after a page
>>>>>>>>> is
>>>>>>>>> not getting
>>>>>>>>> written.
>>>>>>>>> Workaround:
>>>>>>>>> I did a write disable latch at the end of every write cycle(page
>>>>>>>>> program) and enable it
>>>>>>>>> again for the next loop. With this, I see I get rid of the above
>>>>>>>>> issue.
>>>>>>>>>
>>>>>>>>> @@ -117,6 +117,12 @@ int spi_flash_cmd_write_multi(struct
>>>>>>>>> spi_flash
>>>>>>>>> *flash, u32 offset,
>>>>>>>>> if (ret)
>>>>>>>>> break;
>>>>>>>>>
>>>>>>>>> + ret = spi_flash_cmd_write_disable(flash);
>>>>>>>>> + if (ret< 0) {
>>>>>>>>> + printf("SF: disabling write failed\n");
>>>>>>>>> + break;
>>>>>>>>> + }
>>>>>>>>> +
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Have anyone seen the above mentioned issues regarding
>>>>>>>>> read/write/erase? OR is there any
>>>>>>>>> configurations that I might be missing ?
>>>>>>>>>
>>>>>>>> Any Input on this?
>>>>>>>
>>>>>>> Please wait, I am pushing some changes tonight or so.
>>>>>>>
>>>>>>> We will continue this thread, after testing your part with these new
>>>>>>> changes.
>>>>>>>
>>>>>>> I will intimate you once the push done.
>>>>>>>
>>>>>>> --
>>>>>>> Thanks,
>>>>>>> Jagan.
>>>>>>>
>>>>>>>
>>>>>> Thanks a lot for the reply.
>>>>>> Sure, will wait for your changes to go in.
>>>>>
>>>>> Will take some time go these changes on master.
>>>>>
>>>>> Please checkout master-work branch in u-boot-spi repo
>>>>> git://git.denx.de/u-boot-spi.git
>>>>>
>>>>> and try to test 256S parts, fyi: I tested the same part got the
>>>>> +ve result.
>>>>>
>>>> Tested the above tree on my board.
>>>> But, still the issues remain the same for me in all the three
>>>> cases(erase/read/write).
>>>>
>>>> Here is the short log of the read command..
>>>> DRA752 EVM # sf probe 0
>>>> SF: Detected S25FL256S_64K with page size 64 KiB, total 32 MiB
>>>> SF: Warning - Only lower 16MiB accessible, Full access #define
>>>> CONFIG_SPI_FLASH_BAR
>>>> DRA752 EVM # sf erase 0x0 0x10000
>>>> SF: 65536 bytes @ 0x0 Erased: OK
>>>> DRA752 EVM # mw.b 0x81000100 0xff 0x10000
>>>> DRA752 EVM # sf read 0x81003000 0x0 0x10000
>>>> SF: 65536 bytes @ 0x0 Read: OK
>>>> DRA752 EVM # cmp.b 0x81003000 0x81000100 0x10000
>>>> byte at 0x81003ffb (0x0) != byte at 0x810010fb (0xff)
>>>> Total of 4091 byte(s) were the same
>>>>
>>>>
>>>> Erase: not able to do with a single command, need to issue for every
>>>> 0x10000
>>>> bytes.
>>>>
>>>> Write: Need to disable latch after every write to make it properly work.
>>>>
>>>> Is it possible for you to give me basic commands which you might have
>>>> ran
>>>> to confirm
>>>> the read/write and erase ??
>>> I tested the same part - for me i couldn't see the issues with SL256S
>>>
>>> OK! can enable the log on poll function, spi_flash_cmd_wait_ready()
>>> make debug -> printf.
>>> Do the same test.! and send the log file.
>>>
>>> --
>>> Thanks,
>>> Jagan.
>> Here is the output log, no change..
>>
>>
>> DRA752 EVM # sf probe 0
>> SF: Detected S25FL256S_64K with page size 64 KiB, total 32 MiB
>> DRA752 EVM # sf erase 0x0 0x10000
>> SF: 65536 bytes @ 0x0 Erased: OK
>> DRA752 EVM # mw.b 0x81000100 0xff 0x10000
>> DRA752 EVM # sf read 0x81003000 0x0 0x10000
>> SF: 65536 bytes @ 0x0 Read: OK
>> DRA752 EVM # cmp.b 0x81003000 0x81000100 0x10000
>> byte at 0x81003ffb (0x0) != byte at 0x810010fb (0xff)
>> Total of 4091 byte(s) were the same
>> DRA752 EVM #
>>
>>
>> Code change: for above output.
>> --- a/drivers/mtd/spi/spi_flash.c
>> +++ b/drivers/mtd/spi/spi_flash.c
>> @@ -85,7 +85,7 @@ int spi_flash_cmd_wait_ready(struct spi_flash *flash,
>> unsigned long timeout)
>>
>> ret = spi_xfer(spi, 8,&cmd, NULL, SPI_XFER_BEGIN);
>> if (ret) {
>> - debug("SF: fail to read %s status register\n",
>> + printf("SF: fail to read %s status register\n",
>> cmd == CMD_READ_STATUS ? "read" : "flag");
>> return ret;
>> }
>> @@ -109,7 +109,7 @@ int spi_flash_cmd_wait_ready(struct spi_flash *flash,
>> unsigned long timeout)
>> return 0;
>>
>> /* Timed out */
>> - debug("SF: time out!\n");
>> + printf("SF: time out!\n");
>> return -1;
>> }
>>
> Ohh..
>
> - What if you erase the entire flash and read back, same result is it?
Yes.
> - please send the paths for config file for this board?
include/configs/dra7xx_evm.h
> --
> Thanks,
> Jagan.
next prev parent reply other threads:[~2013-06-17 7:11 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-12 7:30 U-boot: Erase/read/write issue with S25fl256S flash device Sourav Poddar
2013-06-12 7:30 ` [U-Boot] " Sourav Poddar
2013-06-14 14:33 ` Sourav Poddar
2013-06-14 14:33 ` [U-Boot] " Sourav Poddar
2013-06-14 14:38 ` Jagan Teki
2013-06-14 14:38 ` Jagan Teki
2013-06-14 14:43 ` Sourav Poddar
2013-06-14 14:43 ` Sourav Poddar
2013-06-15 16:17 ` Jagan Teki
2013-06-15 16:17 ` Jagan Teki
2013-06-17 6:14 ` Sourav Poddar
2013-06-17 6:14 ` Sourav Poddar
2013-06-17 6:47 ` Jagan Teki
2013-06-17 6:47 ` Jagan Teki
2013-06-17 6:58 ` Sourav Poddar
2013-06-17 6:58 ` Sourav Poddar
2013-06-17 7:05 ` Jagan Teki
2013-06-17 7:05 ` Jagan Teki
2013-06-17 7:11 ` Sourav Poddar [this message]
2013-06-17 7:11 ` Sourav Poddar
2013-06-17 7:14 ` Jagan Teki
2013-06-17 7:14 ` Jagan Teki
2013-06-17 7:19 ` Sourav Poddar
2013-06-17 7:19 ` Sourav Poddar
2013-06-17 7:34 ` Jagan Teki
2013-06-17 7:34 ` Jagan Teki
2013-06-17 7:41 ` Sourav Poddar
2013-06-17 7:41 ` Sourav Poddar
2013-06-17 8:39 ` Jagan Teki
2013-06-17 8:39 ` Jagan Teki
2013-06-17 8:45 ` Sourav Poddar
2013-06-17 8:45 ` Sourav Poddar
2013-06-17 9:58 ` Jagan Teki
2013-06-17 9:58 ` Jagan Teki
2013-06-17 10:20 ` Sourav Poddar
2013-06-17 10:20 ` Sourav Poddar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51BEB69B.5010902@ti.com \
--to=sourav.poddar@ti.com \
--cc=balbi@ti.com \
--cc=jagannadh.teki@gmail.com \
--cc=jagannadha.sutradharudu-teki@xilinx.com \
--cc=linux-mtd@lists.infradead.org \
--cc=rnayak@ti.com \
--cc=trini@ti.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.