diff mbox series

[U-Boot,2/2] spi-nor: spi-nor-ids: Disable SPI_NOR_4B_OPCODES for n25q512* and n25q256*

Message ID 20190910170621.2064-2-vigneshr@ti.com
State Changes Requested
Delegated to: Jagannadha Sutradharudu Teki
Headers show
Series [U-Boot,1/2] spi-nor: spi-nor-ids: Merge "n25q512a" and "mt25qu512a" entries | expand

Commit Message

Raghavendra, Vignesh Sept. 10, 2019, 5:06 p.m. UTC
Not all variants of n25q256* and n25q512* support 4 Byte stateless
addressing opcodes and there is no easy way to discover at runtime
whether the flash supports this feature or not.
Therefore don't set SPI_NOR_4B_OPCODES for these flashes.

Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
For n25q512ax3:
Tested-by: Eugeniy Paltsev <paltsev@synopsys.com>
---
 drivers/mtd/spi/spi-nor-ids.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Simon Goldschmidt Sept. 10, 2019, 7:18 p.m. UTC | #1
Vignesh Raghavendra <vigneshr@ti.com> schrieb am Di., 10. Sep. 2019, 19:07:

> Not all variants of n25q256* and n25q512* support 4 Byte stateless
> addressing opcodes and there is no easy way to discover at runtime
> whether the flash supports this feature or not.
> Therefore don't set SPI_NOR_4B_OPCODES for these flashes.
>

I have one of those that supports 4 Byte opposes and would be glad if I
could use them. Is there any chance of flagging the devicetree or something
that enables them?

Regards,
Simon


> Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
> For n25q512ax3:
> Tested-by: Eugeniy Paltsev <paltsev@synopsys.com>
> ---
>  drivers/mtd/spi/spi-nor-ids.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/mtd/spi/spi-nor-ids.c b/drivers/mtd/spi/spi-nor-ids.c
> index f32a6c7d464b..5a7fe07c8309 100644
> --- a/drivers/mtd/spi/spi-nor-ids.c
> +++ b/drivers/mtd/spi/spi-nor-ids.c
> @@ -161,10 +161,10 @@ const struct flash_info spi_nor_ids[] = {
>         { INFO("n25q064a",    0x20bb17, 0, 64 * 1024,  128, SECT_4K |
> SPI_NOR_QUAD_READ) },
>         { INFO("n25q128a11",  0x20bb18, 0, 64 * 1024,  256, SECT_4K |
> SPI_NOR_QUAD_READ) },
>         { INFO("n25q128a13",  0x20ba18, 0, 64 * 1024,  256, SECT_4K |
> SPI_NOR_QUAD_READ) },
> -       { INFO("n25q256a",    0x20ba19, 0, 64 * 1024,  512, SECT_4K |
> SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
> +       { INFO("n25q256a",    0x20ba19, 0, 64 * 1024,  512, SECT_4K |
> SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
>         { INFO("n25q256ax1",  0x20bb19, 0, 64 * 1024,  512, SECT_4K |
> SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
> -       { INFO("mt25qu512a (n25q512a)",    0x20bb20, 0, 64 * 1024, 1024,
> SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
> -       { INFO("n25q512ax3",  0x20ba20, 0, 64 * 1024, 1024, SECT_4K |
> USE_FSR | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
> +       { INFO("mt25qu512a (n25q512a)",    0x20bb20, 0, 64 * 1024, 1024,
> SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) },
> +       { INFO("n25q512ax3",  0x20ba20, 0, 64 * 1024, 1024, SECT_4K |
> USE_FSR | SPI_NOR_QUAD_READ) },
>         { INFO("n25q00",      0x20ba21, 0, 64 * 1024, 2048, SECT_4K |
> USE_FSR | SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
>         { INFO("n25q00a",     0x20bb21, 0, 64 * 1024, 2048, SECT_4K |
> USE_FSR | SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
>         { INFO("mt25qu02g",   0x20bb22, 0, 64 * 1024, 4096, SECT_4K |
> USE_FSR | SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
> --
> 2.23.0
>
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> https://lists.denx.de/listinfo/u-boot
>
Ashish Kumar Sept. 11, 2019, 8:49 a.m. UTC | #2
> -----Original Message-----
> From: Vignesh Raghavendra <vigneshr@ti.com>
> Sent: Tuesday, September 10, 2019 10:36 PM
> To: Jagan Teki <jagan@openedev.com>
> Cc: Vignesh Raghavendra <vigneshr@ti.com>; u-boot@lists.denx.de; Tom
> Rini <trini@konsulko.com>; Eugeniy Paltsev
> <Eugeniy.Paltsev@synopsys.com>; Alexey.Brodkin@synopsys.com; Ashish
> Kumar <ashish.kumar@nxp.com>
> Subject: [EXT] [PATCH 2/2] spi-nor: spi-nor-ids: Disable
> SPI_NOR_4B_OPCODES for n25q512* and n25q256*
> 
> Caution: EXT Email
> 
> Not all variants of n25q256* and n25q512* support 4 Byte stateless
> addressing opcodes and there is no easy way to discover at runtime whether
> the flash supports this feature or not.
> Therefore don't set SPI_NOR_4B_OPCODES for these flashes.
Hi Vignesh, 

I think it will be good to keep it here and disable this for boards by using not set flag in config
Like
# SPI_NOR_4B_OPCODES is not set

Regards
Ashish 
> 
> Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com> For n25q512ax3:
> Tested-by: Eugeniy Paltsev <paltsev@synopsys.com>
> ---
>  drivers/mtd/spi/spi-nor-ids.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/mtd/spi/spi-nor-ids.c b/drivers/mtd/spi/spi-nor-ids.c
> index f32a6c7d464b..5a7fe07c8309 100644
> --- a/drivers/mtd/spi/spi-nor-ids.c
> +++ b/drivers/mtd/spi/spi-nor-ids.c
> @@ -161,10 +161,10 @@ const struct flash_info spi_nor_ids[] = {
>         { INFO("n25q064a",    0x20bb17, 0, 64 * 1024,  128, SECT_4K |
> SPI_NOR_QUAD_READ) },
>         { INFO("n25q128a11",  0x20bb18, 0, 64 * 1024,  256, SECT_4K |
> SPI_NOR_QUAD_READ) },
>         { INFO("n25q128a13",  0x20ba18, 0, 64 * 1024,  256, SECT_4K |
> SPI_NOR_QUAD_READ) },
> -       { INFO("n25q256a",    0x20ba19, 0, 64 * 1024,  512, SECT_4K |
> SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
> +       { INFO("n25q256a",    0x20ba19, 0, 64 * 1024,  512, SECT_4K |
> SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
>         { INFO("n25q256ax1",  0x20bb19, 0, 64 * 1024,  512, SECT_4K |
> SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
> -       { INFO("mt25qu512a (n25q512a)",    0x20bb20, 0, 64 * 1024, 1024,
> SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
> -       { INFO("n25q512ax3",  0x20ba20, 0, 64 * 1024, 1024, SECT_4K | USE_FSR |
> SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
> +       { INFO("mt25qu512a (n25q512a)",    0x20bb20, 0, 64 * 1024, 1024,
> SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) },
> +       { INFO("n25q512ax3",  0x20ba20, 0, 64 * 1024, 1024, SECT_4K |
> + USE_FSR | SPI_NOR_QUAD_READ) },
>         { INFO("n25q00",      0x20ba21, 0, 64 * 1024, 2048, SECT_4K | USE_FSR |
> SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
>         { INFO("n25q00a",     0x20bb21, 0, 64 * 1024, 2048, SECT_4K | USE_FSR |
> SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
>         { INFO("mt25qu02g",   0x20bb22, 0, 64 * 1024, 4096, SECT_4K | USE_FSR |
> SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
> --
> 2.23.0
Simon Goldschmidt Sept. 11, 2019, 9:41 a.m. UTC | #3
Ashish Kumar <ashish.kumar@nxp.com> schrieb am Mi., 11. Sep. 2019, 10:49:

>
>
> > -----Original Message-----
> > From: Vignesh Raghavendra <vigneshr@ti.com>
> > Sent: Tuesday, September 10, 2019 10:36 PM
> > To: Jagan Teki <jagan@openedev.com>
> > Cc: Vignesh Raghavendra <vigneshr@ti.com>; u-boot@lists.denx.de; Tom
> > Rini <trini@konsulko.com>; Eugeniy Paltsev
> > <Eugeniy.Paltsev@synopsys.com>; Alexey.Brodkin@synopsys.com; Ashish
> > Kumar <ashish.kumar@nxp.com>
> > Subject: [EXT] [PATCH 2/2] spi-nor: spi-nor-ids: Disable
> > SPI_NOR_4B_OPCODES for n25q512* and n25q256*
> >
> > Caution: EXT Email
> >
> > Not all variants of n25q256* and n25q512* support 4 Byte stateless
> > addressing opcodes and there is no easy way to discover at runtime
> whether
> > the flash supports this feature or not.
> > Therefore don't set SPI_NOR_4B_OPCODES for these flashes.
> Hi Vignesh,
>
> I think it will be good to keep it here and disable this for boards by
> using not set flag in config
> Like
> # SPI_NOR_4B_OPCODES is not set
>

I'd prefer to take this patch, as this is what Linux does. I think it's
better to have an opt-in option. That way, all chips work with the default
settings (even if that means some chips don't use 4 baste opcodes even if
they could).

Still, so we have such an op-in possibility to enable 4 byte opcodes on
these chips?

Regards,
Simon


> Regards
> Ashish
> >
> > Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com> For n25q512ax3:
> > Tested-by: Eugeniy Paltsev <paltsev@synopsys.com>
> > ---
> >  drivers/mtd/spi/spi-nor-ids.c | 6 +++---
> >  1 file changed, 3 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/mtd/spi/spi-nor-ids.c
> b/drivers/mtd/spi/spi-nor-ids.c
> > index f32a6c7d464b..5a7fe07c8309 100644
> > --- a/drivers/mtd/spi/spi-nor-ids.c
> > +++ b/drivers/mtd/spi/spi-nor-ids.c
> > @@ -161,10 +161,10 @@ const struct flash_info spi_nor_ids[] = {
> >         { INFO("n25q064a",    0x20bb17, 0, 64 * 1024,  128, SECT_4K |
> > SPI_NOR_QUAD_READ) },
> >         { INFO("n25q128a11",  0x20bb18, 0, 64 * 1024,  256, SECT_4K |
> > SPI_NOR_QUAD_READ) },
> >         { INFO("n25q128a13",  0x20ba18, 0, 64 * 1024,  256, SECT_4K |
> > SPI_NOR_QUAD_READ) },
> > -       { INFO("n25q256a",    0x20ba19, 0, 64 * 1024,  512, SECT_4K |
> > SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
> > +       { INFO("n25q256a",    0x20ba19, 0, 64 * 1024,  512, SECT_4K |
> > SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
> >         { INFO("n25q256ax1",  0x20bb19, 0, 64 * 1024,  512, SECT_4K |
> > SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
> > -       { INFO("mt25qu512a (n25q512a)",    0x20bb20, 0, 64 * 1024, 1024,
> > SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
> > -       { INFO("n25q512ax3",  0x20ba20, 0, 64 * 1024, 1024, SECT_4K |
> USE_FSR |
> > SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
> > +       { INFO("mt25qu512a (n25q512a)",    0x20bb20, 0, 64 * 1024, 1024,
> > SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) },
> > +       { INFO("n25q512ax3",  0x20ba20, 0, 64 * 1024, 1024, SECT_4K |
> > + USE_FSR | SPI_NOR_QUAD_READ) },
> >         { INFO("n25q00",      0x20ba21, 0, 64 * 1024, 2048, SECT_4K |
> USE_FSR |
> > SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
> >         { INFO("n25q00a",     0x20bb21, 0, 64 * 1024, 2048, SECT_4K |
> USE_FSR |
> > SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
> >         { INFO("mt25qu02g",   0x20bb22, 0, 64 * 1024, 4096, SECT_4K |
> USE_FSR |
> > SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
> > --
> > 2.23.0
>
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> https://lists.denx.de/listinfo/u-boot
>
Raghavendra, Vignesh Sept. 11, 2019, 10:07 a.m. UTC | #4
Hi Ashish, Simon,

On 11/09/19 3:11 PM, Simon Goldschmidt wrote:
> 
> 
> Ashish Kumar <ashish.kumar@nxp.com <mailto:ashish.kumar@nxp.com>>
> schrieb am Mi., 11. Sep. 2019, 10:49:
> 
> 
> 
>     > -----Original Message-----
>     > From: Vignesh Raghavendra <vigneshr@ti.com <mailto:vigneshr@ti.com>>
>     > Sent: Tuesday, September 10, 2019 10:36 PM
>     > To: Jagan Teki <jagan@openedev.com <mailto:jagan@openedev.com>>
>     > Cc: Vignesh Raghavendra <vigneshr@ti.com
>     <mailto:vigneshr@ti.com>>; u-boot@lists.denx.de
>     <mailto:u-boot@lists.denx.de>; Tom
>     > Rini <trini@konsulko.com <mailto:trini@konsulko.com>>; Eugeniy Paltsev
>     > <Eugeniy.Paltsev@synopsys.com
>     <mailto:Eugeniy.Paltsev@synopsys.com>>; Alexey.Brodkin@synopsys.com
>     <mailto:Alexey.Brodkin@synopsys.com>; Ashish
>     > Kumar <ashish.kumar@nxp.com <mailto:ashish.kumar@nxp.com>>
>     > Subject: [EXT] [PATCH 2/2] spi-nor: spi-nor-ids: Disable
>     > SPI_NOR_4B_OPCODES for n25q512* and n25q256*
>     >
>     > Caution: EXT Email
>     >
>     > Not all variants of n25q256* and n25q512* support 4 Byte stateless
>     > addressing opcodes and there is no easy way to discover at runtime
>     whether
>     > the flash supports this feature or not.
>     > Therefore don't set SPI_NOR_4B_OPCODES for these flashes.
>     Hi Vignesh,
> 
>     I think it will be good to keep it here and disable this for boards
>     by using not set flag in config
>     Like
>     # SPI_NOR_4B_OPCODES is not set
> 

SPI_NOR_4B_OPCODES is not a config option. Are you suggesting to add
one? config options don't scale well especially when same defconfig is
used for multiple boards that potentially have different flashes

> 
> I'd prefer to take this patch, as this is what Linux does. 

No, this is not what Linux does. There is no opt-in or opt-out option.
Decision to use 4 byte opcode is done at runtime based on flash that's
detected. Either based on info->flags for that part or by parsing SFDP
table. There is no config option of DT option to force 4 byte addressing

> I think it's better to have an opt-in option. That way, all chips work with the
> default settings (even if that means some chips don't use 4 baste
> opcodes even if they could).
> 

One solution would be to look at SFDP tables of two variants of flash
and see if there are any differences that can be used as a clue.

Simon,
Could you provide dump of SFDP tables and all the 6 bytes READ ID of the
flash that you have?

I have asked Eugeniy to provide dumps from his flash on the other
thread. Lets see if something stands out.

Regards
Vignesh

> Still, so we have such an op-in possibility to enable 4 byte opcodes on
> these chips?
> 
> Regards,
> Simon
> 
> 
>     Regards
>     Ashish
>     >
>     > Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com
>     <mailto:vigneshr@ti.com>> For n25q512ax3:
>     > Tested-by: Eugeniy Paltsev <paltsev@synopsys.com
>     <mailto:paltsev@synopsys.com>>
>     > ---
>     >  drivers/mtd/spi/spi-nor-ids.c | 6 +++---
>     >  1 file changed, 3 insertions(+), 3 deletions(-)
>     >
>     > diff --git a/drivers/mtd/spi/spi-nor-ids.c
>     b/drivers/mtd/spi/spi-nor-ids.c
>     > index f32a6c7d464b..5a7fe07c8309 100644
>     > --- a/drivers/mtd/spi/spi-nor-ids.c
>     > +++ b/drivers/mtd/spi/spi-nor-ids.c
>     > @@ -161,10 +161,10 @@ const struct flash_info spi_nor_ids[] = {
>     >         { INFO("n25q064a",    0x20bb17, 0, 64 * 1024,  128, SECT_4K |
>     > SPI_NOR_QUAD_READ) },
>     >         { INFO("n25q128a11",  0x20bb18, 0, 64 * 1024,  256, SECT_4K |
>     > SPI_NOR_QUAD_READ) },
>     >         { INFO("n25q128a13",  0x20ba18, 0, 64 * 1024,  256, SECT_4K |
>     > SPI_NOR_QUAD_READ) },
>     > -       { INFO("n25q256a",    0x20ba19, 0, 64 * 1024,  512, SECT_4K |
>     > SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
>     > +       { INFO("n25q256a",    0x20ba19, 0, 64 * 1024,  512, SECT_4K |
>     > SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
>     >         { INFO("n25q256ax1",  0x20bb19, 0, 64 * 1024,  512, SECT_4K |
>     > SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
>     > -       { INFO("mt25qu512a (n25q512a)",    0x20bb20, 0, 64 * 1024,
>     1024,
>     > SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
>     > -       { INFO("n25q512ax3",  0x20ba20, 0, 64 * 1024, 1024,
>     SECT_4K | USE_FSR |
>     > SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
>     > +       { INFO("mt25qu512a (n25q512a)",    0x20bb20, 0, 64 * 1024,
>     1024,
>     > SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) },
>     > +       { INFO("n25q512ax3",  0x20ba20, 0, 64 * 1024, 1024, SECT_4K |
>     > + USE_FSR | SPI_NOR_QUAD_READ) },
>     >         { INFO("n25q00",      0x20ba21, 0, 64 * 1024, 2048,
>     SECT_4K | USE_FSR |
>     > SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
>     >         { INFO("n25q00a",     0x20bb21, 0, 64 * 1024, 2048,
>     SECT_4K | USE_FSR |
>     > SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
>     >         { INFO("mt25qu02g",   0x20bb22, 0, 64 * 1024, 4096,
>     SECT_4K | USE_FSR |
>     > SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
>     > --
>     > 2.23.0
> 
>     _______________________________________________
>     U-Boot mailing list
>     U-Boot@lists.denx.de <mailto:U-Boot@lists.denx.de>
>     https://lists.denx.de/listinfo/u-boot
>
Ashish Kumar Sept. 23, 2019, 9:07 a.m. UTC | #5
> -----Original Message-----
> From: Vignesh Raghavendra <vigneshr@ti.com>
> Sent: Wednesday, September 11, 2019 3:37 PM
> To: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>; Ashish Kumar
> <ashish.kumar@nxp.com>
> Cc: Jagan Teki <jagan@openedev.com>; u-boot@lists.denx.de;
> Alexey.Brodkin@synopsys.com; Eugeniy Paltsev
> <Eugeniy.Paltsev@synopsys.com>; Tom Rini <trini@konsulko.com>
> Subject: Re: [U-Boot] [EXT] [PATCH 2/2] spi-nor: spi-nor-ids: Disable
> SPI_NOR_4B_OPCODES for n25q512* and n25q256*
> 
> Caution: EXT Email
> 
> Hi Ashish, Simon,
> 
> On 11/09/19 3:11 PM, Simon Goldschmidt wrote:
> >
> >
> > Ashish Kumar <ashish.kumar@nxp.com <mailto:ashish.kumar@nxp.com>>
> > schrieb am Mi., 11. Sep. 2019, 10:49:
> >
> >
> >
> >     > -----Original Message-----
> >     > From: Vignesh Raghavendra <vigneshr@ti.com
> <mailto:vigneshr@ti.com>>
> >     > Sent: Tuesday, September 10, 2019 10:36 PM
> >     > To: Jagan Teki <jagan@openedev.com
> <mailto:jagan@openedev.com>>
> >     > Cc: Vignesh Raghavendra <vigneshr@ti.com
> >     <mailto:vigneshr@ti.com>>; u-boot@lists.denx.de
> >     <mailto:u-boot@lists.denx.de>; Tom
> >     > Rini <trini@konsulko.com <mailto:trini@konsulko.com>>; Eugeniy
> Paltsev
> >     > <Eugeniy.Paltsev@synopsys.com
> >     <mailto:Eugeniy.Paltsev@synopsys.com>>;
> Alexey.Brodkin@synopsys.com
> >     <mailto:Alexey.Brodkin@synopsys.com>; Ashish
> >     > Kumar <ashish.kumar@nxp.com <mailto:ashish.kumar@nxp.com>>
> >     > Subject: [EXT] [PATCH 2/2] spi-nor: spi-nor-ids: Disable
> >     > SPI_NOR_4B_OPCODES for n25q512* and n25q256*
> >     >
> >     > Caution: EXT Email
> >     >
> >     > Not all variants of n25q256* and n25q512* support 4 Byte stateless
> >     > addressing opcodes and there is no easy way to discover at runtime
> >     whether
> >     > the flash supports this feature or not.
> >     > Therefore don't set SPI_NOR_4B_OPCODES for these flashes.
> >     Hi Vignesh,
> >
> >     I think it will be good to keep it here and disable this for boards
> >     by using not set flag in config
> >     Like
> >     # SPI_NOR_4B_OPCODES is not set
> >
> 
> SPI_NOR_4B_OPCODES is not a config option. Are you suggesting to add
> one? config options don't scale well especially when same defconfig is used
> for multiple boards that potentially have different flashes
> 
> >
> > I'd prefer to take this patch, as this is what Linux does.
> 
> No, this is not what Linux does. There is no opt-in or opt-out option.
> Decision to use 4 byte opcode is done at runtime based on flash that's
> detected. Either based on info->flags for that part or by parsing SFDP table.
> There is no config option of DT option to force 4 byte addressing
> 
> > I think it's better to have an opt-in option. That way, all chips work
> > with the default settings (even if that means some chips don't use 4
> > baste opcodes even if they could).
> >
> 
> One solution would be to look at SFDP tables of two variants of flash and see
> if there are any differences that can be used as a clue.
> 
> Simon,
> Could you provide dump of SFDP tables and all the 6 bytes READ ID of the
> flash that you have?
> 
> I have asked Eugeniy to provide dumps from his flash on the other thread.
> Lets see if something stands out.
Hi Vignesh, Eugeniy,

Could you please provide me dump for n25q512a which consists of all 6 JEDEC id bytes.
I had initiated mail chain with MICRON FAE, and they suggest that extended id may be different for
n25q512a  from mt25qu512a.

I have dumped JEDEC ID from mt25qu512a "20, bb, 20, 10, 44, 00" , the second last byte is supposed to be different as per FAE.

Bit 6 
device
Generation
1 = 2nd
generation

Regards
Ashish 
> 
> Regards
> Vignesh
> 
> > Still, so we have such an op-in possibility to enable 4 byte opcodes
> > on these chips?
> >
> > Regards,
> > Simon
> >
> >
> >     Regards
> >     Ashish
> >     >
> >     > Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com
> >     <mailto:vigneshr@ti.com>> For n25q512ax3:
> >     > Tested-by: Eugeniy Paltsev <paltsev@synopsys.com
> >     <mailto:paltsev@synopsys.com>>
> >     > ---
> >     >  drivers/mtd/spi/spi-nor-ids.c | 6 +++---
> >     >  1 file changed, 3 insertions(+), 3 deletions(-)
> >     >
> >     > diff --git a/drivers/mtd/spi/spi-nor-ids.c
> >     b/drivers/mtd/spi/spi-nor-ids.c
> >     > index f32a6c7d464b..5a7fe07c8309 100644
> >     > --- a/drivers/mtd/spi/spi-nor-ids.c
> >     > +++ b/drivers/mtd/spi/spi-nor-ids.c
> >     > @@ -161,10 +161,10 @@ const struct flash_info spi_nor_ids[] = {
> >     >         { INFO("n25q064a",    0x20bb17, 0, 64 * 1024,  128, SECT_4K |
> >     > SPI_NOR_QUAD_READ) },
> >     >         { INFO("n25q128a11",  0x20bb18, 0, 64 * 1024,  256, SECT_4K |
> >     > SPI_NOR_QUAD_READ) },
> >     >         { INFO("n25q128a13",  0x20ba18, 0, 64 * 1024,  256, SECT_4K |
> >     > SPI_NOR_QUAD_READ) },
> >     > -       { INFO("n25q256a",    0x20ba19, 0, 64 * 1024,  512, SECT_4K |
> >     > SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
> SPI_NOR_4B_OPCODES) },
> >     > +       { INFO("n25q256a",    0x20ba19, 0, 64 * 1024,  512, SECT_4K |
> >     > SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
> >     >         { INFO("n25q256ax1",  0x20bb19, 0, 64 * 1024,  512, SECT_4K |
> >     > SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
> >     > -       { INFO("mt25qu512a (n25q512a)",    0x20bb20, 0, 64 * 1024,
> >     1024,
> >     > SECT_4K | USE_FSR | SPI_NOR_QUAD_READ |
> SPI_NOR_4B_OPCODES) },
> >     > -       { INFO("n25q512ax3",  0x20ba20, 0, 64 * 1024, 1024,
> >     SECT_4K | USE_FSR |
> >     > SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
> >     > +       { INFO("mt25qu512a (n25q512a)",    0x20bb20, 0, 64 * 1024,
> >     1024,
> >     > SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) },
> >     > +       { INFO("n25q512ax3",  0x20ba20, 0, 64 * 1024, 1024, SECT_4K |
> >     > + USE_FSR | SPI_NOR_QUAD_READ) },
> >     >         { INFO("n25q00",      0x20ba21, 0, 64 * 1024, 2048,
> >     SECT_4K | USE_FSR |
> >     > SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
> >     >         { INFO("n25q00a",     0x20bb21, 0, 64 * 1024, 2048,
> >     SECT_4K | USE_FSR |
> >     > SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
> >     >         { INFO("mt25qu02g",   0x20bb22, 0, 64 * 1024, 4096,
> >     SECT_4K | USE_FSR |
> >     > SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
> >     > --
> >     > 2.23.0
> >
> >     _______________________________________________
> >     U-Boot mailing list
> >     U-Boot@lists.denx.de <mailto:U-Boot@lists.denx.de>
> >
> > https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flist
> > s.denx.de%2Flistinfo%2Fu-
> boot&amp;data=02%7C01%7Cashish.kumar%40nxp.co
> >
> m%7C5531cc6a339141ded6cc08d7369fbe9d%7C686ea1d3bc2b4c6fa92cd99c5c
> 30163
> >
> 5%7C0%7C0%7C637037932040085697&amp;sdata=1%2BbqG6OBWOLedplM1
> 19W7E%2Bgp
> > XlN1wasXZR3AJgzYaM%3D&amp;reserved=0
> >
> 
> --
> Regards
> Vignesh
Simon Goldschmidt Sept. 23, 2019, 9:30 a.m. UTC | #6
On Wed, Sep 11, 2019 at 12:06 PM Vignesh Raghavendra <vigneshr@ti.com> wrote:
>
> Hi Ashish, Simon,
>
> On 11/09/19 3:11 PM, Simon Goldschmidt wrote:
> >
> >
> > Ashish Kumar <ashish.kumar@nxp.com <mailto:ashish.kumar@nxp.com>>
> > schrieb am Mi., 11. Sep. 2019, 10:49:
> >
> >
> >
> >     > -----Original Message-----
> >     > From: Vignesh Raghavendra <vigneshr@ti.com <mailto:vigneshr@ti.com>>
> >     > Sent: Tuesday, September 10, 2019 10:36 PM
> >     > To: Jagan Teki <jagan@openedev.com <mailto:jagan@openedev.com>>
> >     > Cc: Vignesh Raghavendra <vigneshr@ti.com
> >     <mailto:vigneshr@ti.com>>; u-boot@lists.denx.de
> >     <mailto:u-boot@lists.denx.de>; Tom
> >     > Rini <trini@konsulko.com <mailto:trini@konsulko.com>>; Eugeniy Paltsev
> >     > <Eugeniy.Paltsev@synopsys.com
> >     <mailto:Eugeniy.Paltsev@synopsys.com>>; Alexey.Brodkin@synopsys.com
> >     <mailto:Alexey.Brodkin@synopsys.com>; Ashish
> >     > Kumar <ashish.kumar@nxp.com <mailto:ashish.kumar@nxp.com>>
> >     > Subject: [EXT] [PATCH 2/2] spi-nor: spi-nor-ids: Disable
> >     > SPI_NOR_4B_OPCODES for n25q512* and n25q256*
> >     >
> >     > Caution: EXT Email
> >     >
> >     > Not all variants of n25q256* and n25q512* support 4 Byte stateless
> >     > addressing opcodes and there is no easy way to discover at runtime
> >     whether
> >     > the flash supports this feature or not.
> >     > Therefore don't set SPI_NOR_4B_OPCODES for these flashes.
> >     Hi Vignesh,
> >
> >     I think it will be good to keep it here and disable this for boards
> >     by using not set flag in config
> >     Like
> >     # SPI_NOR_4B_OPCODES is not set
> >
>
> SPI_NOR_4B_OPCODES is not a config option. Are you suggesting to add
> one? config options don't scale well especially when same defconfig is
> used for multiple boards that potentially have different flashes
>
> >
> > I'd prefer to take this patch, as this is what Linux does.
>
> No, this is not what Linux does. There is no opt-in or opt-out option.
> Decision to use 4 byte opcode is done at runtime based on flash that's
> detected. Either based on info->flags for that part or by parsing SFDP
> table. There is no config option of DT option to force 4 byte addressing
>
> > I think it's better to have an opt-in option. That way, all chips work with the
> > default settings (even if that means some chips don't use 4 baste
> > opcodes even if they could).
> >
>
> One solution would be to look at SFDP tables of two variants of flash
> and see if there are any differences that can be used as a clue.
>
> Simon,
> Could you provide dump of SFDP tables and all the 6 bytes READ ID of the
> flash that you have?

I have a n251256a with JEDEC ID 20, ba, 19, 10, 44, 00.
According to the docs, it should support 4-byte opcodes.

How would I dump the SFDP tables?

Regards,
Simon

>
> I have asked Eugeniy to provide dumps from his flash on the other
> thread. Lets see if something stands out.
>
> Regards
> Vignesh
>
> > Still, so we have such an op-in possibility to enable 4 byte opcodes on
> > these chips?
> >
> > Regards,
> > Simon
> >
> >
> >     Regards
> >     Ashish
> >     >
> >     > Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com
> >     <mailto:vigneshr@ti.com>> For n25q512ax3:
> >     > Tested-by: Eugeniy Paltsev <paltsev@synopsys.com
> >     <mailto:paltsev@synopsys.com>>
> >     > ---
> >     >  drivers/mtd/spi/spi-nor-ids.c | 6 +++---
> >     >  1 file changed, 3 insertions(+), 3 deletions(-)
> >     >
> >     > diff --git a/drivers/mtd/spi/spi-nor-ids.c
> >     b/drivers/mtd/spi/spi-nor-ids.c
> >     > index f32a6c7d464b..5a7fe07c8309 100644
> >     > --- a/drivers/mtd/spi/spi-nor-ids.c
> >     > +++ b/drivers/mtd/spi/spi-nor-ids.c
> >     > @@ -161,10 +161,10 @@ const struct flash_info spi_nor_ids[] = {
> >     >         { INFO("n25q064a",    0x20bb17, 0, 64 * 1024,  128, SECT_4K |
> >     > SPI_NOR_QUAD_READ) },
> >     >         { INFO("n25q128a11",  0x20bb18, 0, 64 * 1024,  256, SECT_4K |
> >     > SPI_NOR_QUAD_READ) },
> >     >         { INFO("n25q128a13",  0x20ba18, 0, 64 * 1024,  256, SECT_4K |
> >     > SPI_NOR_QUAD_READ) },
> >     > -       { INFO("n25q256a",    0x20ba19, 0, 64 * 1024,  512, SECT_4K |
> >     > SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
> >     > +       { INFO("n25q256a",    0x20ba19, 0, 64 * 1024,  512, SECT_4K |
> >     > SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
> >     >         { INFO("n25q256ax1",  0x20bb19, 0, 64 * 1024,  512, SECT_4K |
> >     > SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
> >     > -       { INFO("mt25qu512a (n25q512a)",    0x20bb20, 0, 64 * 1024,
> >     1024,
> >     > SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
> >     > -       { INFO("n25q512ax3",  0x20ba20, 0, 64 * 1024, 1024,
> >     SECT_4K | USE_FSR |
> >     > SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
> >     > +       { INFO("mt25qu512a (n25q512a)",    0x20bb20, 0, 64 * 1024,
> >     1024,
> >     > SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) },
> >     > +       { INFO("n25q512ax3",  0x20ba20, 0, 64 * 1024, 1024, SECT_4K |
> >     > + USE_FSR | SPI_NOR_QUAD_READ) },
> >     >         { INFO("n25q00",      0x20ba21, 0, 64 * 1024, 2048,
> >     SECT_4K | USE_FSR |
> >     > SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
> >     >         { INFO("n25q00a",     0x20bb21, 0, 64 * 1024, 2048,
> >     SECT_4K | USE_FSR |
> >     > SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
> >     >         { INFO("mt25qu02g",   0x20bb22, 0, 64 * 1024, 4096,
> >     SECT_4K | USE_FSR |
> >     > SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
> >     > --
> >     > 2.23.0
> >
> >     _______________________________________________
> >     U-Boot mailing list
> >     U-Boot@lists.denx.de <mailto:U-Boot@lists.denx.de>
> >     https://lists.denx.de/listinfo/u-boot
> >
>
> --
> Regards
> Vignesh
Tudor Ambarus Sept. 23, 2019, 9:38 a.m. UTC | #7
Hi, Simon,

On 09/23/2019 12:30 PM, Simon Goldschmidt wrote:
> How would I dump the SFDP tables?

this should do it. Make sure SPI_FLASH_SFDP_SUPPORT is selected in menuconfig.

Cheers,
ta

diff --git a/drivers/mtd/spi/spi-nor-core.c b/drivers/mtd/spi/spi-nor-core.c
index 1acff745d1a2..7062f31226bf 100644
--- a/drivers/mtd/spi/spi-nor-core.c
+++ b/drivers/mtd/spi/spi-nor-core.c
@@ -1680,6 +1680,10 @@ static int spi_nor_parse_bfpt(struct spi_nor *nor,
        for (i = 0; i < BFPT_DWORD_MAX; i++)
                bfpt.dwords[i] = le32_to_cpu(bfpt.dwords[i]);

+       for (i = 0; i < BFPT_DWORD_MAX; i++)
+               dev_err(nor->dev, "bfpt.dwords[%d] = %08x\n", i,
+                       bfpt.dwords[i]);
+
Raghavendra, Vignesh Sept. 23, 2019, 10:37 a.m. UTC | #8
Hi Ashish,

On 23/09/19 2:37 PM, Ashish Kumar wrote:
> 
[...]
>> Lets see if something stands out.
> Hi Vignesh, Eugeniy,
> 
> Could you please provide me dump for n25q512a which consists of all 6 JEDEC id bytes.
> I had initiated mail chain with MICRON FAE, and they suggest that extended id may be different for
> n25q512a  from mt25qu512a.
> 
> I have dumped JEDEC ID from mt25qu512a "20, bb, 20, 10, 44, 00" , the second last byte is supposed to be different as per FAE.
> 
> Bit 6 
> device
> Generation
> 1 = 2nd
> generation
> 

Thats great! Thanks for getting that information!

From Eugeniy's debug dumps in other mail chain, I see JEDEC ID of that flash is:
 " 20 ba 20 10 00 00" (does not support 4 byte addressing opcodes)

So these variants can be differentiated quite easily. I will send out a series fixing those entries.

Regards
Vignesh

> Regards
> Ashish 
>>
>> Regards
>> Vignesh
>>
>>> Still, so we have such an op-in possibility to enable 4 byte opcodes
>>> on these chips?
>>>
>>> Regards,
>>> Simon
>>>
>>>
>>>     Regards
>>>     Ashish
>>>     >
>>>     > Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com
>>>     <mailto:vigneshr@ti.com>> For n25q512ax3:
>>>     > Tested-by: Eugeniy Paltsev <paltsev@synopsys.com
>>>     <mailto:paltsev@synopsys.com>>
>>>     > ---
>>>     >  drivers/mtd/spi/spi-nor-ids.c | 6 +++---
>>>     >  1 file changed, 3 insertions(+), 3 deletions(-)
>>>     >
>>>     > diff --git a/drivers/mtd/spi/spi-nor-ids.c
>>>     b/drivers/mtd/spi/spi-nor-ids.c
>>>     > index f32a6c7d464b..5a7fe07c8309 100644
>>>     > --- a/drivers/mtd/spi/spi-nor-ids.c
>>>     > +++ b/drivers/mtd/spi/spi-nor-ids.c
>>>     > @@ -161,10 +161,10 @@ const struct flash_info spi_nor_ids[] = {
>>>     >         { INFO("n25q064a",    0x20bb17, 0, 64 * 1024,  128, SECT_4K |
>>>     > SPI_NOR_QUAD_READ) },
>>>     >         { INFO("n25q128a11",  0x20bb18, 0, 64 * 1024,  256, SECT_4K |
>>>     > SPI_NOR_QUAD_READ) },
>>>     >         { INFO("n25q128a13",  0x20ba18, 0, 64 * 1024,  256, SECT_4K |
>>>     > SPI_NOR_QUAD_READ) },
>>>     > -       { INFO("n25q256a",    0x20ba19, 0, 64 * 1024,  512, SECT_4K |
>>>     > SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
>> SPI_NOR_4B_OPCODES) },
>>>     > +       { INFO("n25q256a",    0x20ba19, 0, 64 * 1024,  512, SECT_4K |
>>>     > SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
>>>     >         { INFO("n25q256ax1",  0x20bb19, 0, 64 * 1024,  512, SECT_4K |
>>>     > SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
>>>     > -       { INFO("mt25qu512a (n25q512a)",    0x20bb20, 0, 64 * 1024,
>>>     1024,
>>>     > SECT_4K | USE_FSR | SPI_NOR_QUAD_READ |
>> SPI_NOR_4B_OPCODES) },
>>>     > -       { INFO("n25q512ax3",  0x20ba20, 0, 64 * 1024, 1024,
>>>     SECT_4K | USE_FSR |
>>>     > SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
>>>     > +       { INFO("mt25qu512a (n25q512a)",    0x20bb20, 0, 64 * 1024,
>>>     1024,
>>>     > SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) },
>>>     > +       { INFO("n25q512ax3",  0x20ba20, 0, 64 * 1024, 1024, SECT_4K |
>>>     > + USE_FSR | SPI_NOR_QUAD_READ) },
>>>     >         { INFO("n25q00",      0x20ba21, 0, 64 * 1024, 2048,
>>>     SECT_4K | USE_FSR |
>>>     > SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
>>>     >         { INFO("n25q00a",     0x20bb21, 0, 64 * 1024, 2048,
>>>     SECT_4K | USE_FSR |
>>>     > SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
>>>     >         { INFO("mt25qu02g",   0x20bb22, 0, 64 * 1024, 4096,
>>>     SECT_4K | USE_FSR |
>>>     > SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
>>>     > --
>>>     > 2.23.0
>>>
>>>     _______________________________________________
>>>     U-Boot mailing list
>>>     U-Boot@lists.denx.de <mailto:U-Boot@lists.denx.de>
>>>
>>> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flist
>>> s.denx.de%2Flistinfo%2Fu-
>> boot&amp;data=02%7C01%7Cashish.kumar%40nxp.co
>>>
>> m%7C5531cc6a339141ded6cc08d7369fbe9d%7C686ea1d3bc2b4c6fa92cd99c5c
>> 30163
>>>
>> 5%7C0%7C0%7C637037932040085697&amp;sdata=1%2BbqG6OBWOLedplM1
>> 19W7E%2Bgp
>>> XlN1wasXZR3AJgzYaM%3D&amp;reserved=0
>>>
>>
>> --
>> Regards
>> Vignesh
Simon Goldschmidt Sept. 23, 2019, 10:49 a.m. UTC | #9
Hi ,

On Mon, Sep 23, 2019 at 11:38 AM <Tudor.Ambarus@microchip.com> wrote:
>
> Hi, Simon,
>
> On 09/23/2019 12:30 PM, Simon Goldschmidt wrote:
> > How would I dump the SFDP tables?
>
> this should do it. Make sure SPI_FLASH_SFDP_SUPPORT is selected in menuconfig.
>
> Cheers,
> ta
>
> diff --git a/drivers/mtd/spi/spi-nor-core.c b/drivers/mtd/spi/spi-nor-core.c
> index 1acff745d1a2..7062f31226bf 100644
> --- a/drivers/mtd/spi/spi-nor-core.c
> +++ b/drivers/mtd/spi/spi-nor-core.c
> @@ -1680,6 +1680,10 @@ static int spi_nor_parse_bfpt(struct spi_nor *nor,
>         for (i = 0; i < BFPT_DWORD_MAX; i++)
>                 bfpt.dwords[i] = le32_to_cpu(bfpt.dwords[i]);
>
> +       for (i = 0; i < BFPT_DWORD_MAX; i++)
> +               dev_err(nor->dev, "bfpt.dwords[%d] = %08x\n", i,
> +                       bfpt.dwords[i]);
> +

Unfortunately, that didn't work. It exits early when parsing the signature:
I get 0xffdddfdf instead of 0x50444653...

Regards,
Simon
Simon Goldschmidt Sept. 24, 2019, 9:26 a.m. UTC | #10
Hi,

On Mon, Sep 23, 2019 at 12:49 PM Simon Goldschmidt
<simon.k.r.goldschmidt@gmail.com> wrote:
>
> Hi ,
>
> On Mon, Sep 23, 2019 at 11:38 AM <Tudor.Ambarus@microchip.com> wrote:
> >
> > Hi, Simon,
> >
> > On 09/23/2019 12:30 PM, Simon Goldschmidt wrote:
> > > How would I dump the SFDP tables?
> >
> > this should do it. Make sure SPI_FLASH_SFDP_SUPPORT is selected in menuconfig.
> >
> > Cheers,
> > ta
> >
> > diff --git a/drivers/mtd/spi/spi-nor-core.c b/drivers/mtd/spi/spi-nor-core.c
> > index 1acff745d1a2..7062f31226bf 100644
> > --- a/drivers/mtd/spi/spi-nor-core.c
> > +++ b/drivers/mtd/spi/spi-nor-core.c
> > @@ -1680,6 +1680,10 @@ static int spi_nor_parse_bfpt(struct spi_nor *nor,
> >         for (i = 0; i < BFPT_DWORD_MAX; i++)
> >                 bfpt.dwords[i] = le32_to_cpu(bfpt.dwords[i]);
> >
> > +       for (i = 0; i < BFPT_DWORD_MAX; i++)
> > +               dev_err(nor->dev, "bfpt.dwords[%d] = %08x\n", i,
> > +                       bfpt.dwords[i]);
> > +
>
> Unfortunately, that didn't work. It exits early when parsing the signature:
> I get 0xffdddfdf instead of 0x50444653...

OK, so after setting cadence qspi driver back to 'spi-rx-bus-width = <1>'
(thanks Vignesh), here's the ID and SFDP dump for my n25q256a:

JEDEC id bytes: 20, ba, 19, 10, 44, 00

bfpt.dwords[0] = fffb20e5
bfpt.dwords[1] = 0fffffff
bfpt.dwords[2] = 6b27eb29
bfpt.dwords[3] = bb273b27
bfpt.dwords[4] = ffffffff
bfpt.dwords[5] = bb27ffff
bfpt.dwords[6] = eb29ffff
bfpt.dwords[7] = d810200c
bfpt.dwords[8] = 0000520f
bfpt.dwords[9] = 00994a24
bfpt.dwords[10] = d4038e8b
bfpt.dwords[11] = 382701ac
bfpt.dwords[12] = 757a757a
bfpt.dwords[13] = 5cd5bdfb
bfpt.dwords[14] = ff820f4a
bfpt.dwords[15] = 363dbd81

Regards,
Simon
Tudor Ambarus Sept. 24, 2019, 11:36 a.m. UTC | #11
Hi, Simon,

On 09/23/2019 12:30 PM, Simon Goldschmidt wrote:

cut

>>>     > Subject: [EXT] [PATCH 2/2] spi-nor: spi-nor-ids: Disable
>>>     > SPI_NOR_4B_OPCODES for n25q512* and n25q256*
>>>     >
>>>     > Caution: EXT Email
>>>     >
>>>     > Not all variants of n25q256* and n25q512* support 4 Byte stateless
>>>     > addressing opcodes and there is no easy way to discover at runtime
>>>     whether
>>>     > the flash supports this feature or not.
>>>     > Therefore don't set SPI_NOR_4B_OPCODES for these flashes.
>>>     Hi Vignesh,
>>>
>>>     I think it will be good to keep it here and disable this for boards
>>>     by using not set flag in config
>>>     Like
>>>     # SPI_NOR_4B_OPCODES is not set
>>>
>>
>> SPI_NOR_4B_OPCODES is not a config option. Are you suggesting to add
>> one? config options don't scale well especially when same defconfig is
>> used for multiple boards that potentially have different flashes
>>
>>>
>>> I'd prefer to take this patch, as this is what Linux does.
>>
>> No, this is not what Linux does. There is no opt-in or opt-out option.
>> Decision to use 4 byte opcode is done at runtime based on flash that's
>> detected. Either based on info->flags for that part or by parsing SFDP
>> table. There is no config option of DT option to force 4 byte addressing
>>
>>> I think it's better to have an opt-in option. That way, all chips work with the
>>> default settings (even if that means some chips don't use 4 baste
>>> opcodes even if they could).
>>>
>>
>> One solution would be to look at SFDP tables of two variants of flash
>> and see if there are any differences that can be used as a clue.
>>
>> Simon,
>> Could you provide dump of SFDP tables and all the 6 bytes READ ID of the
>> flash that you have?
> 
> I have a n251256a with JEDEC ID 20, ba, 19, 10, 44, 00.

Is this a n25q256a or a MT25QL256ABA? We want to check if there are n25q256a
flashes that have the 6th bit of the Extended Device Id set to one or not.
According to n25q256a datasheet the bit 6 is reserved (which probably translates
to being zero), while on MT25QL256ABA is set to one.

Cheers,
ta
Simon Goldschmidt Sept. 24, 2019, 11:45 a.m. UTC | #12
Hi Tudor,

On Tue, Sep 24, 2019 at 1:36 PM <Tudor.Ambarus@microchip.com> wrote:
>
> Hi, Simon,
>
> On 09/23/2019 12:30 PM, Simon Goldschmidt wrote:
>
> cut
>
> >>>     > Subject: [EXT] [PATCH 2/2] spi-nor: spi-nor-ids: Disable
> >>>     > SPI_NOR_4B_OPCODES for n25q512* and n25q256*
> >>>     >
> >>>     > Caution: EXT Email
> >>>     >
> >>>     > Not all variants of n25q256* and n25q512* support 4 Byte stateless
> >>>     > addressing opcodes and there is no easy way to discover at runtime
> >>>     whether
> >>>     > the flash supports this feature or not.
> >>>     > Therefore don't set SPI_NOR_4B_OPCODES for these flashes.
> >>>     Hi Vignesh,
> >>>
> >>>     I think it will be good to keep it here and disable this for boards
> >>>     by using not set flag in config
> >>>     Like
> >>>     # SPI_NOR_4B_OPCODES is not set
> >>>
> >>
> >> SPI_NOR_4B_OPCODES is not a config option. Are you suggesting to add
> >> one? config options don't scale well especially when same defconfig is
> >> used for multiple boards that potentially have different flashes
> >>
> >>>
> >>> I'd prefer to take this patch, as this is what Linux does.
> >>
> >> No, this is not what Linux does. There is no opt-in or opt-out option.
> >> Decision to use 4 byte opcode is done at runtime based on flash that's
> >> detected. Either based on info->flags for that part or by parsing SFDP
> >> table. There is no config option of DT option to force 4 byte addressing
> >>
> >>> I think it's better to have an opt-in option. That way, all chips work with the
> >>> default settings (even if that means some chips don't use 4 baste
> >>> opcodes even if they could).
> >>>
> >>
> >> One solution would be to look at SFDP tables of two variants of flash
> >> and see if there are any differences that can be used as a clue.
> >>
> >> Simon,
> >> Could you provide dump of SFDP tables and all the 6 bytes READ ID of the
> >> flash that you have?
> >
> > I have a n251256a with JEDEC ID 20, ba, 19, 10, 44, 00.
>
> Is this a n25q256a or a MT25QL256ABA? We want to check if there are n25q256a
> flashes that have the 6th bit of the Extended Device Id set to one or not.
> According to n25q256a datasheet the bit 6 is reserved (which probably translates
> to being zero), while on MT25QL256ABA is set to one.

Right, this really is a MT25QL256ABA, I guess. I'm not quite familiar with the
print on the housing, sorry. We had both and here, it's probably the MT, not
the nq.

I also wasn't really aware of the differences between those two, sorry.

Regards,
Simon

>
> Cheers,
> ta
>
Raghavendra, Vignesh Sept. 24, 2019, 11:53 a.m. UTC | #13
Simon,

On 24-Sep-19 5:15 PM, Simon Goldschmidt wrote:
> Hi Tudor,
> 
> On Tue, Sep 24, 2019 at 1:36 PM <Tudor.Ambarus@microchip.com> wrote:
>>
[...]

>>>>
>>>> Simon,
>>>> Could you provide dump of SFDP tables and all the 6 bytes READ ID of the
>>>> flash that you have?
>>>
>>> I have a n251256a with JEDEC ID 20, ba, 19, 10, 44, 00.
>>
>> Is this a n25q256a or a MT25QL256ABA? We want to check if there are n25q256a
>> flashes that have the 6th bit of the Extended Device Id set to one or not.
>> According to n25q256a datasheet the bit 6 is reserved (which probably translates
>> to being zero), while on MT25QL256ABA is set to one.
> 
> Right, this really is a MT25QL256ABA, I guess. I'm not quite familiar with the
> print on the housing, sorry. We had both and here, it's probably the MT, not
> the nq.
> 

But, do you have access to n25q variants? And does that support 4 Byte
addressing opcode? What does its JEDEC ID read?

> I also wasn't really aware of the differences between those two, sorry.
> 
> Regards,
> Simon
> 
>>
>> Cheers,
>> ta
>>
Simon Goldschmidt Sept. 24, 2019, 12:08 p.m. UTC | #14
Hi Vignesh,

On Tue, Sep 24, 2019 at 1:54 PM Vignesh Raghavendra <vigneshr@ti.com> wrote:
>
> Simon,
>
> On 24-Sep-19 5:15 PM, Simon Goldschmidt wrote:
> > Hi Tudor,
> >
> > On Tue, Sep 24, 2019 at 1:36 PM <Tudor.Ambarus@microchip.com> wrote:
> >>
> [...]
>
> >>>>
> >>>> Simon,
> >>>> Could you provide dump of SFDP tables and all the 6 bytes READ ID of the
> >>>> flash that you have?
> >>>
> >>> I have a n251256a with JEDEC ID 20, ba, 19, 10, 44, 00.
> >>
> >> Is this a n25q256a or a MT25QL256ABA? We want to check if there are n25q256a
> >> flashes that have the 6th bit of the Extended Device Id set to one or not.
> >> According to n25q256a datasheet the bit 6 is reserved (which probably translates
> >> to being zero), while on MT25QL256ABA is set to one.
> >
> > Right, this really is a MT25QL256ABA, I guess. I'm not quite familiar with the
> > print on the housing, sorry. We had both and here, it's probably the MT, not
> > the nq.
> >
>
> But, do you have access to n25q variants? And does that support 4 Byte
> addressing opcode? What does its JEDEC ID read?

No, at the moment I don't. I'll see if I can get hold of one.

Regards,
Simon

>
> > I also wasn't really aware of the differences between those two, sorry.
> >
> > Regards,
> > Simon
> >
> >>
> >> Cheers,
> >> ta
> >>
Simon Goldschmidt Sept. 25, 2019, 11:07 a.m. UTC | #15
On Tue, Sep 24, 2019 at 2:08 PM Simon Goldschmidt
<simon.k.r.goldschmidt@gmail.com> wrote:
>
> Hi Vignesh,
>
> On Tue, Sep 24, 2019 at 1:54 PM Vignesh Raghavendra <vigneshr@ti.com> wrote:
> >
> > Simon,
> >
> > On 24-Sep-19 5:15 PM, Simon Goldschmidt wrote:
> > > Hi Tudor,
> > >
> > > On Tue, Sep 24, 2019 at 1:36 PM <Tudor.Ambarus@microchip.com> wrote:
> > >>
> > [...]
> >
> > >>>>
> > >>>> Simon,
> > >>>> Could you provide dump of SFDP tables and all the 6 bytes READ ID of the
> > >>>> flash that you have?
> > >>>
> > >>> I have a n251256a with JEDEC ID 20, ba, 19, 10, 44, 00.
> > >>
> > >> Is this a n25q256a or a MT25QL256ABA? We want to check if there are n25q256a
> > >> flashes that have the 6th bit of the Extended Device Id set to one or not.
> > >> According to n25q256a datasheet the bit 6 is reserved (which probably translates
> > >> to being zero), while on MT25QL256ABA is set to one.
> > >
> > > Right, this really is a MT25QL256ABA, I guess. I'm not quite familiar with the
> > > print on the housing, sorry. We had both and here, it's probably the MT, not
> > > the nq.
> > >
> >
> > But, do you have access to n25q variants? And does that support 4 Byte
> > addressing opcode? What does its JEDEC ID read?
>
> No, at the moment I don't. I'll see if I can get hold of one.

Ok, so I found a board with an n25q256a and tested that as well as the
Altera/Intel EPCQ256N (on socfpga_socrateds) and both read the same ID and
SFDP:

JEDEC id bytes: 20, ba, 19, 10, 00, 00
bfpt.dwords[0] = fffb20e5
bfpt.dwords[1] = 0fffffff
bfpt.dwords[2] = 6b27eb29
bfpt.dwords[3] = bb273b08
bfpt.dwords[4] = ffffffff
bfpt.dwords[5] = bb27ffff
bfpt.dwords[6] = eb29ffff
bfpt.dwords[7] = d810200c
bfpt.dwords[8] = 00000000
bfpt.dwords[9] = 00000000
bfpt.dwords[10] = 00000000
bfpt.dwords[11] = 00000000
bfpt.dwords[12] = 00000000
bfpt.dwords[13] = 00000000
bfpt.dwords[14] = 00000000
bfpt.dwords[15] = 00000000
SF: Detected n25q256a with page size 256 Bytes, erase size 64 KiB, total 32 MiB

I don't know whether one of these supports 4 byte opcodes, but I guess it's
safe to say the 5th byte 0x44 is an mt25 which supports 4 byte opcodes.

Do you plan to port this series to Linux, too?

Regards,
Simon

>
> Regards,
> Simon
>
> >
> > > I also wasn't really aware of the differences between those two, sorry.
> > >
> > > Regards,
> > > Simon
> > >
> > >>
> > >> Cheers,
> > >> ta
> > >>
Raghavendra, Vignesh Sept. 25, 2019, 11:24 a.m. UTC | #16
Hi,

On 25/09/19 4:37 PM, Simon Goldschmidt wrote:
> On Tue, Sep 24, 2019 at 2:08 PM Simon Goldschmidt
> <simon.k.r.goldschmidt@gmail.com> wrote:
>>
[...]
>>>
>>> But, do you have access to n25q variants? And does that support 4 Byte
>>> addressing opcode? What does its JEDEC ID read?
>>
>> No, at the moment I don't. I'll see if I can get hold of one.
> 
> Ok, so I found a board with an n25q256a and tested that as well as the
> Altera/Intel EPCQ256N (on socfpga_socrateds) and both read the same ID and
> SFDP:
> 
> JEDEC id bytes: 20, ba, 19, 10, 00, 00
> bfpt.dwords[0] = fffb20e5
> bfpt.dwords[1] = 0fffffff
> bfpt.dwords[2] = 6b27eb29
> bfpt.dwords[3] = bb273b08
> bfpt.dwords[4] = ffffffff
> bfpt.dwords[5] = bb27ffff
> bfpt.dwords[6] = eb29ffff
> bfpt.dwords[7] = d810200c
> bfpt.dwords[8] = 00000000
> bfpt.dwords[9] = 00000000
> bfpt.dwords[10] = 00000000
> bfpt.dwords[11] = 00000000
> bfpt.dwords[12] = 00000000
> bfpt.dwords[13] = 00000000
> bfpt.dwords[14] = 00000000
> bfpt.dwords[15] = 00000000
> SF: Detected n25q256a with page size 256 Bytes, erase size 64 KiB, total 32 MiB
> 

Thanks for the logs!

> I don't know whether one of these supports 4 byte opcodes, but I guess it's
> safe to say the 5th byte 0x44 is an mt25 which supports 4 byte opcodes.
> 

There is a way to test if flash supports 4 byte addressing opcodes:

With plain U-Boot master (without any of my patches) that has SPI_NOR_4B_OPCODES
set for n25q256a try following:

	sf erase 0x0 0x10000 /* erase one sector at 0x0 */
	sf erase 0x1000000 0x1000 /* erase one sector at 16M */
	sf write <address of random data>  0x1000000 0x100 /* write a page of data at 16M */
	sf read addr1  0x1000000 0x100 /* read back */
	md.b addr1

In case flash does not understand 4 byte addressing opcode, its possible
that data written to flash may wrap and be written to 0x0-0x10000. 
So readback and see if 0x0 is still all 0xffs:

	sf read addr1  0x0 0x100
	md.b addr1

So if first md.b shows valid data and second md.b shows all 0xffs then flash supports 4 byte addressing opcode

Regards
Vignesh

> Do you plan to port this series to Linux, too?
> 
> Regards,
> Simon
> 
>>
>> Regards,
>> Simon
>>
>>>
>>>> I also wasn't really aware of the differences between those two, sorry.
>>>>
>>>> Regards,
>>>> Simon
>>>>
>>>>>
>>>>> Cheers,
>>>>> ta
>>>>>
diff mbox series

Patch

diff --git a/drivers/mtd/spi/spi-nor-ids.c b/drivers/mtd/spi/spi-nor-ids.c
index f32a6c7d464b..5a7fe07c8309 100644
--- a/drivers/mtd/spi/spi-nor-ids.c
+++ b/drivers/mtd/spi/spi-nor-ids.c
@@ -161,10 +161,10 @@  const struct flash_info spi_nor_ids[] = {
 	{ INFO("n25q064a",    0x20bb17, 0, 64 * 1024,  128, SECT_4K | SPI_NOR_QUAD_READ) },
 	{ INFO("n25q128a11",  0x20bb18, 0, 64 * 1024,  256, SECT_4K | SPI_NOR_QUAD_READ) },
 	{ INFO("n25q128a13",  0x20ba18, 0, 64 * 1024,  256, SECT_4K | SPI_NOR_QUAD_READ) },
-	{ INFO("n25q256a",    0x20ba19, 0, 64 * 1024,  512, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
+	{ INFO("n25q256a",    0x20ba19, 0, 64 * 1024,  512, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
 	{ INFO("n25q256ax1",  0x20bb19, 0, 64 * 1024,  512, SECT_4K | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
-	{ INFO("mt25qu512a (n25q512a)",    0x20bb20, 0, 64 * 1024, 1024, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
-	{ INFO("n25q512ax3",  0x20ba20, 0, 64 * 1024, 1024, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
+	{ INFO("mt25qu512a (n25q512a)",    0x20bb20, 0, 64 * 1024, 1024, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) },
+	{ INFO("n25q512ax3",  0x20ba20, 0, 64 * 1024, 1024, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) },
 	{ INFO("n25q00",      0x20ba21, 0, 64 * 1024, 2048, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
 	{ INFO("n25q00a",     0x20bb21, 0, 64 * 1024, 2048, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
 	{ INFO("mt25qu02g",   0x20bb22, 0, 64 * 1024, 4096, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },