From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sourav Poddar Date: Mon, 7 Oct 2013 18:00:54 +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> <520237B1.2050801@ti.com> <520264D6.8080604@ti.com> <5252A8D5.90905@ti.com> Message-ID: <5252A97E.5040301@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 On Monday 07 October 2013 05:59 PM, Jagan Teki wrote: > On Mon, Oct 7, 2013 at 5:58 PM, Sourav Poddar wrote: >> On Monday 07 October 2013 05:51 PM, Jagan Teki wrote: >>> On Wed, Aug 7, 2013 at 8:46 PM, Sourav Poddar >>> wrote: >>>> On Wednesday 07 August 2013 08:35 PM, Jagan Teki wrote: >>>>> On Wed, Aug 7, 2013 at 5:34 PM, Sourav Poddar >>>>> wrote: >>>>>> 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, please give me some time I will look at these and let u know >>>>> early next week. >>>>> >>>> Thanks!! >>> You still see this issue. >>> >> Please ignore this mail thread. This was due to some ip limitation. > OK.. Thread ends! > Anyways, we have move much ahead and there is already a v6 which I posted :)