* Query Regarding NOR flash page size calculation s25fl512s @ 2018-08-31 4:57 Yogesh Gaur 2018-09-17 10:05 ` Yogesh Narayan Gaur 0 siblings, 1 reply; 4+ messages in thread From: Yogesh Gaur @ 2018-08-31 4:57 UTC (permalink / raw) To: linux-mtd Hi All, I have query and concern regarding page_size calculation for the underlying NOR flashes. I have spansion, ‘s25fl512s’ flash connected on my target. With SFDP param reading, page_size for this flash is assigned as 0x200 using below routine. /* Page size: this field specifies 'N' so the page size = 2^N bytes. */ params->page_size = bfpt.dwords[BFPT_DWORD(11)]; params->page_size &= BFPT_DWORD11_PAGE_SIZE_MASK; params->page_size >>= BFPT_DWORD11_PAGE_SIZE_SHIFT; params->page_size = 1U << params->page_size; As per the BG of S25FS512S_512_M flash and SFDP header info table above calculation are correct. But final value of the page_size for this flash is depends on the configuration register CR3V[4], page buffer wrap, it can be either of 256 byte (0) or 512 byte (1). For my case, this value is 0 and page_size becomes 0x100 bytes but with SFDP header read, value for this is being assigned as 0x200. Due to this, I am getting data corruption. Please suggest, how can we check and proceed in these case. I guess this is specific to spansion family of flashes. IMO, for this flash we need to add flag SPI_NOR_SKIP_SFDP for entry of this flash, s25fl512s. Regards, Yogesh ^ permalink raw reply [flat|nested] 4+ messages in thread
* RE: Query Regarding NOR flash page size calculation s25fl512s 2018-08-31 4:57 Query Regarding NOR flash page size calculation s25fl512s Yogesh Gaur @ 2018-09-17 10:05 ` Yogesh Narayan Gaur 2018-09-17 11:41 ` Boris Brezillon 0 siblings, 1 reply; 4+ messages in thread From: Yogesh Narayan Gaur @ 2018-09-17 10:05 UTC (permalink / raw) To: Yogesh Gaur, linux-mtd@lists.infradead.org, Cyrille Pitchen, Boris Brezillon Hi All, Please suggest how can we work for this flash, s25fl512s? Passing flag SPI_NOR_SKIP_SFDP would going to break functionality of 1-2-2/1-4-4 protocol mode, as only through SFDP parameter read we get information for the dummy cycles, mode bits etc for this flash. But, page_size value is getting populated wrongly for case when value of CR3V[4] is 0 for this flash. -- Regards Yogesh Gaur > -----Original Message----- > From: linux-mtd [mailto:linux-mtd-bounces@lists.infradead.org] On Behalf Of > Yogesh Gaur > Sent: Friday, August 31, 2018 10:28 AM > To: linux-mtd@lists.infradead.org > Subject: Query Regarding NOR flash page size calculation s25fl512s > > Hi All, > > I have query and concern regarding page_size calculation for the underlying > NOR flashes. > > I have spansion, ‘s25fl512s’ flash connected on my target. > > With SFDP param reading, page_size for this flash is assigned as 0x200 using > below routine. > /* Page size: this field specifies 'N' so the page size = 2^N bytes. */ > params->page_size = bfpt.dwords[BFPT_DWORD(11)]; > params->page_size &= BFPT_DWORD11_PAGE_SIZE_MASK; > params->page_size >>= BFPT_DWORD11_PAGE_SIZE_SHIFT; > params->page_size = 1U << params->page_size; > > As per the BG of S25FS512S_512_M flash and SFDP header info table above > calculation are correct. > > But final value of the page_size for this flash is depends on the configuration > register CR3V[4], page buffer wrap, it can be either of > 256 byte (0) or 512 byte (1). > > For my case, this value is 0 and page_size becomes 0x100 bytes but with SFDP > header read, value for this is being assigned as 0x200. > Due to this, I am getting data corruption. > > Please suggest, how can we check and proceed in these case. I guess this is > specific to spansion family of flashes. > > IMO, for this flash we need to add flag SPI_NOR_SKIP_SFDP for entry of this > flash, s25fl512s. > > > Regards, > Yogesh > > ______________________________________________________ > Linux MTD discussion mailing list > https://emea01.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.infr > adead.org%2Fmailman%2Flistinfo%2Flinux- > mtd%2F&data=02%7C01%7Cyogeshnarayan.gaur%40nxp.com%7Cebe34d2 > 48bd54e4c399508d60efe5805%7C686ea1d3bc2b4c6fa92cd99c5c301635%7C0% > 7C0%7C636712882907344494&sdata=m%2BtwKRbzFEYc2hqxUiloYT5SKGq > eAkscVVPk7AkOaHM%3D&reserved=0 ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Query Regarding NOR flash page size calculation s25fl512s 2018-09-17 10:05 ` Yogesh Narayan Gaur @ 2018-09-17 11:41 ` Boris Brezillon 2018-09-18 10:19 ` Cyrille Pitchen 0 siblings, 1 reply; 4+ messages in thread From: Boris Brezillon @ 2018-09-17 11:41 UTC (permalink / raw) To: Yogesh Narayan Gaur Cc: Yogesh Gaur, linux-mtd@lists.infradead.org, Cyrille Pitchen, Marek Vasut Hi Yogesh, On Mon, 17 Sep 2018 10:05:27 +0000 Yogesh Narayan Gaur <yogeshnarayan.gaur@nxp.com> wrote: > Hi All, > > Please suggest how can we work for this flash, s25fl512s? > Passing flag SPI_NOR_SKIP_SFDP would going to break functionality of 1-2-2/1-4-4 protocol mode, as only through SFDP parameter read we get information for the dummy cycles, mode bits etc for this flash. > > But, page_size value is getting populated wrongly for case when value of CR3V[4] is 0 for this flash. > > -- > Regards > Yogesh Gaur > > > -----Original Message----- > > From: linux-mtd [mailto:linux-mtd-bounces@lists.infradead.org] On Behalf Of > > Yogesh Gaur > > Sent: Friday, August 31, 2018 10:28 AM > > To: linux-mtd@lists.infradead.org > > Subject: Query Regarding NOR flash page size calculation s25fl512s > > > > Hi All, > > > > I have query and concern regarding page_size calculation for the underlying > > NOR flashes. > > > > I have spansion, ‘s25fl512s’ flash connected on my target. > > > > With SFDP param reading, page_size for this flash is assigned as 0x200 using > > below routine. > > /* Page size: this field specifies 'N' so the page size = 2^N bytes. */ > > params->page_size = bfpt.dwords[BFPT_DWORD(11)]; > > params->page_size &= BFPT_DWORD11_PAGE_SIZE_MASK; > > params->page_size >>= BFPT_DWORD11_PAGE_SIZE_SHIFT; > > params->page_size = 1U << params->page_size; > > > > As per the BG of S25FS512S_512_M flash and SFDP header info table above > > calculation are correct. > > > > But final value of the page_size for this flash is depends on the configuration > > register CR3V[4], page buffer wrap, it can be either of > > 256 byte (0) or 512 byte (1). > > > > For my case, this value is 0 and page_size becomes 0x100 bytes but with SFDP > > header read, value for this is being assigned as 0x200. > > Due to this, I am getting data corruption. > > > > Please suggest, how can we check and proceed in these case. I guess this is > > specific to spansion family of flashes. I guess we need some kind of ->fixup() hook that the core would call after SFDP has been parsed, so that vendors can adjust SPI NOR params. Marek, Cyrille, any opinion on that? Thanks, Boris ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Query Regarding NOR flash page size calculation s25fl512s 2018-09-17 11:41 ` Boris Brezillon @ 2018-09-18 10:19 ` Cyrille Pitchen 0 siblings, 0 replies; 4+ messages in thread From: Cyrille Pitchen @ 2018-09-18 10:19 UTC (permalink / raw) To: Boris Brezillon, Yogesh Narayan Gaur Cc: Marek Vasut, Yogesh Gaur, Cyrille Pitchen, linux-mtd@lists.infradead.org Hi all, Le 17/09/2018 à 13:41, Boris Brezillon a écrit : > Hi Yogesh, > > On Mon, 17 Sep 2018 10:05:27 +0000 > Yogesh Narayan Gaur <yogeshnarayan.gaur@nxp.com> wrote: > >> Hi All, >> >> Please suggest how can we work for this flash, s25fl512s? >> Passing flag SPI_NOR_SKIP_SFDP would going to break functionality of 1-2-2/1-4-4 protocol mode, as only through SFDP parameter read we get information for the dummy cycles, mode bits etc for this flash. >> >> But, page_size value is getting populated wrongly for case when value of CR3V[4] is 0 for this flash. >> >> -- >> Regards >> Yogesh Gaur >> >>> -----Original Message----- >>> From: linux-mtd [mailto:linux-mtd-bounces@lists.infradead.org] On Behalf Of >>> Yogesh Gaur >>> Sent: Friday, August 31, 2018 10:28 AM >>> To: linux-mtd@lists.infradead.org >>> Subject: Query Regarding NOR flash page size calculation s25fl512s >>> >>> Hi All, >>> >>> I have query and concern regarding page_size calculation for the underlying >>> NOR flashes. >>> >>> I have spansion, ‘s25fl512s’ flash connected on my target. >>> >>> With SFDP param reading, page_size for this flash is assigned as 0x200 using >>> below routine. >>> /* Page size: this field specifies 'N' so the page size = 2^N bytes. */ >>> params->page_size = bfpt.dwords[BFPT_DWORD(11)]; >>> params->page_size &= BFPT_DWORD11_PAGE_SIZE_MASK; >>> params->page_size >>= BFPT_DWORD11_PAGE_SIZE_SHIFT; >>> params->page_size = 1U << params->page_size; >>> >>> As per the BG of S25FS512S_512_M flash and SFDP header info table above >>> calculation are correct. >>> >>> But final value of the page_size for this flash is depends on the configuration >>> register CR3V[4], page buffer wrap, it can be either of >>> 256 byte (0) or 512 byte (1). >>> >>> For my case, this value is 0 and page_size becomes 0x100 bytes but with SFDP >>> header read, value for this is being assigned as 0x200. >>> Due to this, I am getting data corruption. >>> >>> Please suggest, how can we check and proceed in these case. I guess this is >>> specific to spansion family of flashes. > > I guess we need some kind of ->fixup() hook that the core would call > after SFDP has been parsed, so that vendors can adjust SPI NOR params. > > Marek, Cyrille, any opinion on that? > just few info that might be useful: 1 - Cypress S25FL512S: JEDEC ID: 01 02 20 4D 00 80 5th byte: 00 - uniform 256-kB sectors 6th byte: 80 - Family ID - FL-S Family - no Configuration Register 3 - page size is always 512 bytes - SFDP compliant 2 - Cypress S25FS512S: JEDEC ID: 01 02 20 4D 00 81 5th byte: 00 - uniform 256-kB sectors 6th byte: 81 - Family ID - S25FS512S - has both Volatile and Non-Volatile Configuration Register 3 (Volatile CR3 reset value is Non-Volatile CR3 value), with bit4 Page Buffer Wrap. based on the datasheet the factory setting for CR3NV[4] is 0, hence 256-byte page size but SFDP table claims the page size is 512 byte... joy and happiness... - page size depends on CR3V[4]: 0 -> 256 bytes, 1 -> 512 bytes - SFDP compliant Then few suggestions: First, change the "s25fl512s" entry to use the INFO6() macro instead INFO(). Then create a new entry for "s25fs512s" entry also using INFO6() Finally either: A - you add the SPI_NOR_SKIP_SFDP flag on the new "s25fs512s" entry (clearly not my preferred solution). B - set some ->fixup() hook, ass suggested by Boris, to the new "s25fs512s" entry only. Solution A would introduce a regression for those already using the S25FS512S memory part with the current "s25fl512s" entry in spi_nor_ids[]. Best regards, Cyrille > Thanks, > > Boris > > ______________________________________________________ > Linux MTD discussion mailing list > http://lists.infradead.org/mailman/listinfo/linux-mtd/ > ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-09-18 10:19 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-08-31 4:57 Query Regarding NOR flash page size calculation s25fl512s Yogesh Gaur 2018-09-17 10:05 ` Yogesh Narayan Gaur 2018-09-17 11:41 ` Boris Brezillon 2018-09-18 10:19 ` Cyrille Pitchen
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox