From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sourav Poddar Date: Wed, 7 Aug 2013 17:34:01 +0530 Subject: [U-Boot] [PATCHv2 5/8] drivers: mtd: spi: Modify read/write command for sfl256s flash. In-Reply-To: References: <1374569979-28660-1-git-send-email-sourav.poddar@ti.com> <1374569979-28660-6-git-send-email-sourav.poddar@ti.com> <51EE91CA.6070709@ti.com> <51F8B47C.6060302@ti.com> <5201E1B1.9020206@ti.com> Message-ID: <520237B1.2050801@ti.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Jagan, On Wednesday 07 August 2013 05:21 PM, Jagan Teki wrote: > Hi, > > On Wed, Aug 7, 2013 at 11:27 AM, Sourav Poddar wrote: >> Hi Jagan, >> >> On Wednesday 31 July 2013 12:23 PM, Sourav Poddar wrote: >>> Hi Jagan, >>> On Tuesday 23 July 2013 07:53 PM, Sourav Poddar wrote: >>>> + jagan, >>>> >>>> On Tuesday 23 July 2013 02:29 PM, Sourav Poddar wrote: >>>>> Reading using the already supported read command is causing regression >>>>> after 4k bytes, as a result doing a page by page read. Its happening, >>>>> because >>>>> ti qpsi controller CS will get de asserted after 4096 bytes. >>>>> >>>>> Signed-off-by: Sourav Poddar >>>>> --- >>>>> drivers/mtd/spi/spi_flash.c | 32 +++++++++++++++++++++++++++++++- >>>>> 1 files changed, 31 insertions(+), 1 deletions(-) >>>>> >>>>> diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c >>>>> index 6a6fe37..5f8db7b 100644 >>>>> --- a/drivers/mtd/spi/spi_flash.c >>>>> +++ b/drivers/mtd/spi/spi_flash.c >>>>> @@ -303,6 +303,36 @@ int spi_flash_cmd_read_fast(struct spi_flash >>>>> *flash, u32 offset, >>>>> else >>>>> read_len = remain_len; >>>>> >>>>> +#ifdef CONFIG_TI_QSPI >>>>> + unsigned long page_addr, byte_addr, page_size; >>>>> + size_t chunk_len, actual; >>>>> + int ret = 0; >>>>> + >>>>> + page_size = flash->page_size; >>>>> + page_addr = offset / page_size; >>>>> + byte_addr = offset % page_size; >>>>> + >>>>> + for (actual = 0; actual< read_len; actual += chunk_len) { >>>>> + chunk_len = min(read_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; >>>>> + } >>>>> + >>>>> + byte_addr += chunk_len; >>>>> + if (byte_addr == page_size) { >>>>> + page_addr++; >>>>> + byte_addr = 0; >>>>> + } >>>>> + } >>>>> +#else >>>>> spi_flash_addr(offset, cmd); >>>>> >>>>> ret = spi_flash_read_common(flash, cmd, sizeof(cmd), >>>>> @@ -311,7 +341,7 @@ int spi_flash_cmd_read_fast(struct spi_flash *flash, >>>>> u32 offset, >>>>> debug("SF: read failed\n"); >>>>> break; >>>>> } >>>>> - >>>>> +#endif >>>>> offset += read_len; >>>>> len -= read_len; >>>>> data += read_len; >>>> Elaborating a bit more on this, >>>> There is a constrain on our hardware, which goes like this.. >>>> >>>> As soon as the words transfered is 4096 bytes, the CS gets deasserted >>>> automatically. >>>> As a result of this bottleneck, I am not able to use the current use read >>>> api in mtd framework. >>>> This requires me to send the read command every time in range upto 4096 >>>> bytes only. >>>> >>>> To overcome this, I have updated the mtd read based on TI_QSPI config as >>>> done above. >>>> >>>> [Jagan]: >>>> Do you have any suggestion of dealing this in a better way? >>>> I don't see a way to get around this apart from updating mtd read >>>> depending on TI_QSPI config. >>>> >>> Any inputs on this? >>> >> Any suggestions on the patch? >> >> _______________________________________________ >> U-Boot mailing list >> U-Boot at lists.denx.de >> http://lists.denx.de/mailman/listinfo/u-boot > Yes, this part is pretty much working as with other s25fl. > Can you point me the respective controller driver for this. > Thanks for the response. This is the link to uboot patches which I submitted to uboot mailing list. http://patchwork.ozlabs.org/patch/260989/ http://patchwork.ozlabs.org/patch/260990/ http://patchwork.ozlabs.org/patch/260991/ http://patchwork.ozlabs.org/patch/260992/ http://patchwork.ozlabs.org/patch/260994/ http://patchwork.ozlabs.org/patch/260993/ http://patchwork.ozlabs.org/patch/260996/ http://patchwork.ozlabs.org/patch/260995/ Above are the links to uboot patches containing all def configs and uboot ti qspi driver. As communicated earlier, there is a limitation in our qspi controller driver, wherein after every 4096 bytes CS gets de asserted. So, I had to modify the above read framework to do a page read. Need better way to handle this limitation, so that the above patch series can get upstreamed. > Does linux support this ti_qspi, please point the defconfig if you have. > Patches for linux is under review and still not mainlined. https://patchwork.kernel.org/patch/2838342/ Thanks, Sourav > -- > Thanks, > Jagan.