diff mbox series

[v5,8/8] mtd: spi-nor: macronix: Add support for mx25uw51245g with RWW

Message ID 20230328154105.448540-9-miquel.raynal@bootlin.com
State Changes Requested
Delegated to: Ambarus Tudor
Headers show
Series mtd: spi-nor: read while write support | expand

Commit Message

Miquel Raynal March 28, 2023, 3:41 p.m. UTC
Describe this new part and provide the RWW flag for it.

There is no public datasheet, but here are the sfdp tables plus base
testing to show it works.

mx25uw51245g
c2813a
macronix
53464450080104fd00070114400000ff8701011c900000ff0a0001080001
00ff05000105200100ff84000102340100ff0000000000000000ffffffff
ffffffffe5208affffffff1f00ff00ff00ff00ffeeffffffffff00ffffff
00ff0c2010d800ff00ff87790100821200e27704674630b030b0f4bdd55c
000000ff101000200000000000007ca14800000000008888000000000000
00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
727103b80000000090a3188200c069960000000000000000727100987271
00b8727100990000000072710098727100f872710099727100f900000000
00000000011501d0727106d8000086500000060100000000020001030002
00000000060100000000000072060002000000eec0697272717100d8f7f6
000a00001445988043060f0021dcffff
047a884cf44d9ffc2a94d3ab37b48c63  /sys/bus/spi/devices/spi0.0/spi-nor/sfdp

6+0 records in
6+0 records out
Copied 6291456 bytes from qspi_test to address 0x00000000 in flash
Erased 6291456 bytes from address 0x00000000 in flash
Copied 6291456 bytes from address 0x00000000 in flash to qspi_read
0000000 ffff ffff ffff ffff ffff ffff ffff ffff
*
0600000
Copied 6291456 bytes from qspi_test to address 0x00000000 in flash
Copied 6291456 bytes from address 0x00000000 in flash to qspi_read
d24a9523db829a0df688f34b8dc76a1383b74024  qspi_test
d24a9523db829a0df688f34b8dc76a1383b74024  qspi_read

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
---
 drivers/mtd/spi-nor/macronix.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Tudor Ambarus March 28, 2023, 4:31 p.m. UTC | #1
On 3/28/23 16:41, Miquel Raynal wrote:
> Describe this new part and provide the RWW flag for it.
> 
> There is no public datasheet, but here are the sfdp tables plus base
> testing to show it works.
> 
> mx25uw51245g
> c2813a
> macronix
> 53464450080104fd00070114400000ff8701011c900000ff0a0001080001
> 00ff05000105200100ff84000102340100ff0000000000000000ffffffff
> ffffffffe5208affffffff1f00ff00ff00ff00ffeeffffffffff00ffffff
> 00ff0c2010d800ff00ff87790100821200e27704674630b030b0f4bdd55c
> 000000ff101000200000000000007ca14800000000008888000000000000
> 00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
> 727103b80000000090a3188200c069960000000000000000727100987271
> 00b8727100990000000072710098727100f872710099727100f900000000
> 00000000011501d0727106d8000086500000060100000000020001030002
> 00000000060100000000000072060002000000eec0697272717100d8f7f6
> 000a00001445988043060f0021dcffff
> 047a884cf44d9ffc2a94d3ab37b48c63  /sys/bus/spi/devices/spi0.0/spi-nor/sfdp

which hash alg was used, was it sha1? No need to resubmnit just for this.
> 
> 6+0 records in
> 6+0 records out
> Copied 6291456 bytes from qspi_test to address 0x00000000 in flash
> Erased 6291456 bytes from address 0x00000000 in flash
> Copied 6291456 bytes from address 0x00000000 in flash to qspi_read
> 0000000 ffff ffff ffff ffff ffff ffff ffff ffff
> *
> 0600000
> Copied 6291456 bytes from qspi_test to address 0x00000000 in flash
> Copied 6291456 bytes from address 0x00000000 in flash to qspi_read
> d24a9523db829a0df688f34b8dc76a1383b74024  qspi_test
> d24a9523db829a0df688f34b8dc76a1383b74024  qspi_read
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> ---
>  drivers/mtd/spi-nor/macronix.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/drivers/mtd/spi-nor/macronix.c b/drivers/mtd/spi-nor/macronix.c
> index 6853ec9ae65d..b65d41e5f749 100644
> --- a/drivers/mtd/spi-nor/macronix.c
> +++ b/drivers/mtd/spi-nor/macronix.c
> @@ -82,6 +82,10 @@ static const struct flash_info macronix_nor_parts[] = {
>  	{ "mx25u51245g", INFO(0xc2253a, 0, 64 * 1024, 1024)
>  		NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ)
>  		FIXUP_FLAGS(SPI_NOR_4B_OPCODES) },
> +	{ "mx25uw51245g", INFOB(0xc2813a, 0, 16 * 1024, 1024, 4)

Sector size and nsectors shall be discovered at parse SFDP time.
Does INFOB(0xc2813a, 0, 0, 0, 4) work for you?

> +		PARSE_SFDP

Yaay

> +		FLAGS(SPI_NOR_RWW)
> +		FIXUP_FLAGS(SPI_NOR_4B_OPCODES) },

Is SPI_NOR_4B_OPCODES flag really needed?


>  	{ "mx25v8035f",  INFO(0xc22314, 0, 64 * 1024,  16)
>  		NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ |
>  			      SPI_NOR_QUAD_READ) },
Miquel Raynal March 28, 2023, 4:45 p.m. UTC | #2
Hi Tudor,

tudor.ambarus@linaro.org wrote on Tue, 28 Mar 2023 17:31:46 +0100:

> On 3/28/23 16:41, Miquel Raynal wrote:
> > Describe this new part and provide the RWW flag for it.
> > 
> > There is no public datasheet, but here are the sfdp tables plus base
> > testing to show it works.
> > 
> > mx25uw51245g
> > c2813a
> > macronix
> > 53464450080104fd00070114400000ff8701011c900000ff0a0001080001
> > 00ff05000105200100ff84000102340100ff0000000000000000ffffffff
> > ffffffffe5208affffffff1f00ff00ff00ff00ffeeffffffffff00ffffff
> > 00ff0c2010d800ff00ff87790100821200e27704674630b030b0f4bdd55c
> > 000000ff101000200000000000007ca14800000000008888000000000000
> > 00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
> > 727103b80000000090a3188200c069960000000000000000727100987271
> > 00b8727100990000000072710098727100f872710099727100f900000000
> > 00000000011501d0727106d8000086500000060100000000020001030002
> > 00000000060100000000000072060002000000eec0697272717100d8f7f6
> > 000a00001445988043060f0021dcffff
> > 047a884cf44d9ffc2a94d3ab37b48c63  /sys/bus/spi/devices/spi0.0/spi-nor/sfdp  
> 
> which hash alg was used, was it sha1? No need to resubmnit just for this.

Actually git just ignored all the lines starting with '#'
like if they were comments and I did not notice...

I will amend my commit logs and resend.

> > 
> > 6+0 records in
> > 6+0 records out
> > Copied 6291456 bytes from qspi_test to address 0x00000000 in flash
> > Erased 6291456 bytes from address 0x00000000 in flash
> > Copied 6291456 bytes from address 0x00000000 in flash to qspi_read
> > 0000000 ffff ffff ffff ffff ffff ffff ffff ffff
> > *
> > 0600000
> > Copied 6291456 bytes from qspi_test to address 0x00000000 in flash
> > Copied 6291456 bytes from address 0x00000000 in flash to qspi_read
> > d24a9523db829a0df688f34b8dc76a1383b74024  qspi_test
> > d24a9523db829a0df688f34b8dc76a1383b74024  qspi_read
> > 
> > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> > ---
> >  drivers/mtd/spi-nor/macronix.c | 4 ++++
> >  1 file changed, 4 insertions(+)
> > 
> > diff --git a/drivers/mtd/spi-nor/macronix.c b/drivers/mtd/spi-nor/macronix.c
> > index 6853ec9ae65d..b65d41e5f749 100644
> > --- a/drivers/mtd/spi-nor/macronix.c
> > +++ b/drivers/mtd/spi-nor/macronix.c
> > @@ -82,6 +82,10 @@ static const struct flash_info macronix_nor_parts[] = {
> >  	{ "mx25u51245g", INFO(0xc2253a, 0, 64 * 1024, 1024)
> >  		NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ)
> >  		FIXUP_FLAGS(SPI_NOR_4B_OPCODES) },
> > +	{ "mx25uw51245g", INFOB(0xc2813a, 0, 16 * 1024, 1024, 4)  
> 
> Sector size and nsectors shall be discovered at parse SFDP time.
> Does INFOB(0xc2813a, 0, 0, 0, 4) work for you?

I'll check.

> 
> > +		PARSE_SFDP  
> 
> Yaay
> 
> > +		FLAGS(SPI_NOR_RWW)
> > +		FIXUP_FLAGS(SPI_NOR_4B_OPCODES) },  
> 
> Is SPI_NOR_4B_OPCODES flag really needed?

I have no idea, I took that from older code.

Jaime, what do you think?

Thanks,
Miquèl
liao jaime March 29, 2023, 5:48 a.m. UTC | #3
Hi Miquel

>
> Hi Tudor,
>
> tudor.ambarus@linaro.org wrote on Tue, 28 Mar 2023 17:31:46 +0100:
>
> > On 3/28/23 16:41, Miquel Raynal wrote:
> > > Describe this new part and provide the RWW flag for it.
> > >
> > > There is no public datasheet, but here are the sfdp tables plus base
> > > testing to show it works.
> > >
> > > mx25uw51245g
> > > c2813a
> > > macronix
> > > 53464450080104fd00070114400000ff8701011c900000ff0a0001080001
> > > 00ff05000105200100ff84000102340100ff0000000000000000ffffffff
> > > ffffffffe5208affffffff1f00ff00ff00ff00ffeeffffffffff00ffffff
> > > 00ff0c2010d800ff00ff87790100821200e27704674630b030b0f4bdd55c
> > > 000000ff101000200000000000007ca14800000000008888000000000000
> > > 00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
> > > 727103b80000000090a3188200c069960000000000000000727100987271
> > > 00b8727100990000000072710098727100f872710099727100f900000000
> > > 00000000011501d0727106d8000086500000060100000000020001030002
> > > 00000000060100000000000072060002000000eec0697272717100d8f7f6
> > > 000a00001445988043060f0021dcffff
> > > 047a884cf44d9ffc2a94d3ab37b48c63  /sys/bus/spi/devices/spi0.0/spi-nor/sfdp
> >
> > which hash alg was used, was it sha1? No need to resubmnit just for this.
>
> Actually git just ignored all the lines starting with '#'
> like if they were comments and I did not notice...
>
> I will amend my commit logs and resend.
>
> > >
> > > 6+0 records in
> > > 6+0 records out
> > > Copied 6291456 bytes from qspi_test to address 0x00000000 in flash
> > > Erased 6291456 bytes from address 0x00000000 in flash
> > > Copied 6291456 bytes from address 0x00000000 in flash to qspi_read
> > > 0000000 ffff ffff ffff ffff ffff ffff ffff ffff
> > > *
> > > 0600000
> > > Copied 6291456 bytes from qspi_test to address 0x00000000 in flash
> > > Copied 6291456 bytes from address 0x00000000 in flash to qspi_read
> > > d24a9523db829a0df688f34b8dc76a1383b74024  qspi_test
> > > d24a9523db829a0df688f34b8dc76a1383b74024  qspi_read
> > >
> > > Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> > > ---
> > >  drivers/mtd/spi-nor/macronix.c | 4 ++++
> > >  1 file changed, 4 insertions(+)
> > >
> > > diff --git a/drivers/mtd/spi-nor/macronix.c b/drivers/mtd/spi-nor/macronix.c
> > > index 6853ec9ae65d..b65d41e5f749 100644
> > > --- a/drivers/mtd/spi-nor/macronix.c
> > > +++ b/drivers/mtd/spi-nor/macronix.c
> > > @@ -82,6 +82,10 @@ static const struct flash_info macronix_nor_parts[] = {
> > >     { "mx25u51245g", INFO(0xc2253a, 0, 64 * 1024, 1024)
> > >             NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ)
> > >             FIXUP_FLAGS(SPI_NOR_4B_OPCODES) },
> > > +   { "mx25uw51245g", INFOB(0xc2813a, 0, 16 * 1024, 1024, 4)
> >
> > Sector size and nsectors shall be discovered at parse SFDP time.
> > Does INFOB(0xc2813a, 0, 0, 0, 4) work for you?
>
> I'll check.
>
> >
> > > +           PARSE_SFDP
> >
> > Yaay
> >
> > > +           FLAGS(SPI_NOR_RWW)
> > > +           FIXUP_FLAGS(SPI_NOR_4B_OPCODES) },
> >
> > Is SPI_NOR_4B_OPCODES flag really needed?
>
> I have no idea, I took that from older code.
>
> Jaime, what do you think?
I think Tudor hopes that SFDP table could determine how many address bytes.

In sfdp.c, "spi_nor_parse_bfpt" will check number of address bytes if
flash with SFDP table support.

Thanks
Jaime

>
> Thanks,
> Miquèl
Tudor Ambarus March 29, 2023, 11:12 a.m. UTC | #4
On 3/29/23 06:48, liao jaime wrote:
> Hi Miquel
> 
>>
>> Hi Tudor,
>>
>> tudor.ambarus@linaro.org wrote on Tue, 28 Mar 2023 17:31:46 +0100:
>>
>>> On 3/28/23 16:41, Miquel Raynal wrote:
>>>> Describe this new part and provide the RWW flag for it.
>>>>
>>>> There is no public datasheet, but here are the sfdp tables plus base
>>>> testing to show it works.
>>>>
>>>> mx25uw51245g
>>>> c2813a
>>>> macronix
>>>> 53464450080104fd00070114400000ff8701011c900000ff0a0001080001
>>>> 00ff05000105200100ff84000102340100ff0000000000000000ffffffff
>>>> ffffffffe5208affffffff1f00ff00ff00ff00ffeeffffffffff00ffffff
>>>> 00ff0c2010d800ff00ff87790100821200e27704674630b030b0f4bdd55c
>>>> 000000ff101000200000000000007ca14800000000008888000000000000
>>>> 00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
>>>> 727103b80000000090a3188200c069960000000000000000727100987271
>>>> 00b8727100990000000072710098727100f872710099727100f900000000
>>>> 00000000011501d0727106d8000086500000060100000000020001030002
>>>> 00000000060100000000000072060002000000eec0697272717100d8f7f6
>>>> 000a00001445988043060f0021dcffff
>>>> 047a884cf44d9ffc2a94d3ab37b48c63  /sys/bus/spi/devices/spi0.0/spi-nor/sfdp
>>>
>>> which hash alg was used, was it sha1? No need to resubmnit just for this.
>>
>> Actually git just ignored all the lines starting with '#'
>> like if they were comments and I did not notice...
>>
>> I will amend my commit logs and resend.
>>
>>>>
>>>> 6+0 records in
>>>> 6+0 records out
>>>> Copied 6291456 bytes from qspi_test to address 0x00000000 in flash
>>>> Erased 6291456 bytes from address 0x00000000 in flash
>>>> Copied 6291456 bytes from address 0x00000000 in flash to qspi_read
>>>> 0000000 ffff ffff ffff ffff ffff ffff ffff ffff
>>>> *
>>>> 0600000
>>>> Copied 6291456 bytes from qspi_test to address 0x00000000 in flash
>>>> Copied 6291456 bytes from address 0x00000000 in flash to qspi_read
>>>> d24a9523db829a0df688f34b8dc76a1383b74024  qspi_test
>>>> d24a9523db829a0df688f34b8dc76a1383b74024  qspi_read
>>>>
>>>> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
>>>> ---
>>>>  drivers/mtd/spi-nor/macronix.c | 4 ++++
>>>>  1 file changed, 4 insertions(+)
>>>>
>>>> diff --git a/drivers/mtd/spi-nor/macronix.c b/drivers/mtd/spi-nor/macronix.c
>>>> index 6853ec9ae65d..b65d41e5f749 100644
>>>> --- a/drivers/mtd/spi-nor/macronix.c
>>>> +++ b/drivers/mtd/spi-nor/macronix.c
>>>> @@ -82,6 +82,10 @@ static const struct flash_info macronix_nor_parts[] = {
>>>>     { "mx25u51245g", INFO(0xc2253a, 0, 64 * 1024, 1024)
>>>>             NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ)
>>>>             FIXUP_FLAGS(SPI_NOR_4B_OPCODES) },
>>>> +   { "mx25uw51245g", INFOB(0xc2813a, 0, 16 * 1024, 1024, 4)
>>>
>>> Sector size and nsectors shall be discovered at parse SFDP time.
>>> Does INFOB(0xc2813a, 0, 0, 0, 4) work for you?
>>
>> I'll check.
>>
>>>
>>>> +           PARSE_SFDP
>>>
>>> Yaay
>>>
>>>> +           FLAGS(SPI_NOR_RWW)
>>>> +           FIXUP_FLAGS(SPI_NOR_4B_OPCODES) },
>>>
>>> Is SPI_NOR_4B_OPCODES flag really needed?
>>
>> I have no idea, I took that from older code.
>>
>> Jaime, what do you think?
> I think Tudor hopes that SFDP table could determine how many address bytes.

No, no.

:) and hope and programming don't get along.

Does this flash define the 4bait table? Can you add a print in
parse_4bait table and check if SNOR_F_4B_OPCODES is set? If yes, the
fixup flag is not needed.

SNOR_F_4B_OPCODES is an indication that the flash supports dedicated
opcodes for 4byte address, without the need to change the address mode
to 4 byte. When 4B_OPCODES are supported, we prefer not changing the
address mode, because when changing to 4 byte address mode, the state is
kept at reset (or power loss) and flashes might not be able to boot at
lower layers (u-boot for example).

So I'd try:
{ "mx25uw51245g", INFOB(0xc2813a, 0, 0, 0, 4)
		PARSE_SFDP
		FLAGS(SPI_NOR_RWW) },

In the future we'd like to add a sfdp-decoder in mtd-utils to decode the
sfdp dump and ease the review and avoid such questions, but we couldn't
allocate the time to implement it up to now. Meh, we're doing it at best
effort, in our spare time. Volunteers?

Cheers,
ta
Miquel Raynal March 29, 2023, 11:54 a.m. UTC | #5
Hi Tudor,

tudor.ambarus@linaro.org wrote on Wed, 29 Mar 2023 12:12:29 +0100:

> On 3/29/23 06:48, liao jaime wrote:
> > Hi Miquel
> >   
> >>
> >> Hi Tudor,
> >>
> >> tudor.ambarus@linaro.org wrote on Tue, 28 Mar 2023 17:31:46 +0100:
> >>  
> >>> On 3/28/23 16:41, Miquel Raynal wrote:  
> >>>> Describe this new part and provide the RWW flag for it.
> >>>>
> >>>> There is no public datasheet, but here are the sfdp tables plus base
> >>>> testing to show it works.
> >>>>
> >>>> mx25uw51245g
> >>>> c2813a
> >>>> macronix
> >>>> 53464450080104fd00070114400000ff8701011c900000ff0a0001080001
> >>>> 00ff05000105200100ff84000102340100ff0000000000000000ffffffff
> >>>> ffffffffe5208affffffff1f00ff00ff00ff00ffeeffffffffff00ffffff
> >>>> 00ff0c2010d800ff00ff87790100821200e27704674630b030b0f4bdd55c
> >>>> 000000ff101000200000000000007ca14800000000008888000000000000
> >>>> 00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
> >>>> 727103b80000000090a3188200c069960000000000000000727100987271
> >>>> 00b8727100990000000072710098727100f872710099727100f900000000
> >>>> 00000000011501d0727106d8000086500000060100000000020001030002
> >>>> 00000000060100000000000072060002000000eec0697272717100d8f7f6
> >>>> 000a00001445988043060f0021dcffff
> >>>> 047a884cf44d9ffc2a94d3ab37b48c63  /sys/bus/spi/devices/spi0.0/spi-nor/sfdp  
> >>>
> >>> which hash alg was used, was it sha1? No need to resubmnit just for this.  
> >>
> >> Actually git just ignored all the lines starting with '#'
> >> like if they were comments and I did not notice...
> >>
> >> I will amend my commit logs and resend.
> >>  
> >>>>
> >>>> 6+0 records in
> >>>> 6+0 records out
> >>>> Copied 6291456 bytes from qspi_test to address 0x00000000 in flash
> >>>> Erased 6291456 bytes from address 0x00000000 in flash
> >>>> Copied 6291456 bytes from address 0x00000000 in flash to qspi_read
> >>>> 0000000 ffff ffff ffff ffff ffff ffff ffff ffff
> >>>> *
> >>>> 0600000
> >>>> Copied 6291456 bytes from qspi_test to address 0x00000000 in flash
> >>>> Copied 6291456 bytes from address 0x00000000 in flash to qspi_read
> >>>> d24a9523db829a0df688f34b8dc76a1383b74024  qspi_test
> >>>> d24a9523db829a0df688f34b8dc76a1383b74024  qspi_read
> >>>>
> >>>> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> >>>> ---
> >>>>  drivers/mtd/spi-nor/macronix.c | 4 ++++
> >>>>  1 file changed, 4 insertions(+)
> >>>>
> >>>> diff --git a/drivers/mtd/spi-nor/macronix.c b/drivers/mtd/spi-nor/macronix.c
> >>>> index 6853ec9ae65d..b65d41e5f749 100644
> >>>> --- a/drivers/mtd/spi-nor/macronix.c
> >>>> +++ b/drivers/mtd/spi-nor/macronix.c
> >>>> @@ -82,6 +82,10 @@ static const struct flash_info macronix_nor_parts[] = {
> >>>>     { "mx25u51245g", INFO(0xc2253a, 0, 64 * 1024, 1024)
> >>>>             NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ)
> >>>>             FIXUP_FLAGS(SPI_NOR_4B_OPCODES) },
> >>>> +   { "mx25uw51245g", INFOB(0xc2813a, 0, 16 * 1024, 1024, 4)  
> >>>
> >>> Sector size and nsectors shall be discovered at parse SFDP time.
> >>> Does INFOB(0xc2813a, 0, 0, 0, 4) work for you?  
> >>
> >> I'll check.
> >>  
> >>>  
> >>>> +           PARSE_SFDP  
> >>>
> >>> Yaay
> >>>  
> >>>> +           FLAGS(SPI_NOR_RWW)
> >>>> +           FIXUP_FLAGS(SPI_NOR_4B_OPCODES) },  
> >>>
> >>> Is SPI_NOR_4B_OPCODES flag really needed?  
> >>
> >> I have no idea, I took that from older code.
> >>
> >> Jaime, what do you think?  
> > I think Tudor hopes that SFDP table could determine how many address bytes.  
> 
> No, no.
> 
> :) and hope and programming don't get along.
> 
> Does this flash define the 4bait table? Can you add a print in
> parse_4bait table and check if SNOR_F_4B_OPCODES is set? If yes, the
> fixup flag is not needed.

Alright, will check.

> 
> SNOR_F_4B_OPCODES is an indication that the flash supports dedicated
> opcodes for 4byte address, without the need to change the address mode
> to 4 byte. When 4B_OPCODES are supported, we prefer not changing the
> address mode, because when changing to 4 byte address mode, the state is
> kept at reset (or power loss) and flashes might not be able to boot at
> lower layers (u-boot for example).

Oh yeah I remember.

> 
> So I'd try:
> { "mx25uw51245g", INFOB(0xc2813a, 0, 0, 0, 4)
> 		PARSE_SFDP
> 		FLAGS(SPI_NOR_RWW) },

Clear!

> 
> In the future we'd like to add a sfdp-decoder in mtd-utils to decode the
> sfdp dump and ease the review and avoid such questions, but we couldn't
> allocate the time to implement it up to now. Meh, we're doing it at best
> effort, in our spare time. Volunteers?

I really like the idea! Would be excellent.

Thanks,
Miquèl
Miquel Raynal March 31, 2023, 7:37 p.m. UTC | #6
Hi Tudor,

tudor.ambarus@linaro.org wrote on Wed, 29 Mar 2023 12:12:29 +0100:

> On 3/29/23 06:48, liao jaime wrote:
> > Hi Miquel
> >   
> >>
> >> Hi Tudor,
> >>
> >> tudor.ambarus@linaro.org wrote on Tue, 28 Mar 2023 17:31:46 +0100:
> >>  
> >>> On 3/28/23 16:41, Miquel Raynal wrote:  
> >>>> Describe this new part and provide the RWW flag for it.
> >>>>
> >>>> There is no public datasheet, but here are the sfdp tables plus base
> >>>> testing to show it works.
> >>>>
> >>>> mx25uw51245g
> >>>> c2813a
> >>>> macronix
> >>>> 53464450080104fd00070114400000ff8701011c900000ff0a0001080001
> >>>> 00ff05000105200100ff84000102340100ff0000000000000000ffffffff
> >>>> ffffffffe5208affffffff1f00ff00ff00ff00ffeeffffffffff00ffffff
> >>>> 00ff0c2010d800ff00ff87790100821200e27704674630b030b0f4bdd55c
> >>>> 000000ff101000200000000000007ca14800000000008888000000000000
> >>>> 00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
> >>>> 727103b80000000090a3188200c069960000000000000000727100987271
> >>>> 00b8727100990000000072710098727100f872710099727100f900000000
> >>>> 00000000011501d0727106d8000086500000060100000000020001030002
> >>>> 00000000060100000000000072060002000000eec0697272717100d8f7f6
> >>>> 000a00001445988043060f0021dcffff
> >>>> 047a884cf44d9ffc2a94d3ab37b48c63  /sys/bus/spi/devices/spi0.0/spi-nor/sfdp  
> >>>
> >>> which hash alg was used, was it sha1? No need to resubmnit just for this.  
> >>
> >> Actually git just ignored all the lines starting with '#'
> >> like if they were comments and I did not notice...
> >>
> >> I will amend my commit logs and resend.
> >>  
> >>>>
> >>>> 6+0 records in
> >>>> 6+0 records out
> >>>> Copied 6291456 bytes from qspi_test to address 0x00000000 in flash
> >>>> Erased 6291456 bytes from address 0x00000000 in flash
> >>>> Copied 6291456 bytes from address 0x00000000 in flash to qspi_read
> >>>> 0000000 ffff ffff ffff ffff ffff ffff ffff ffff
> >>>> *
> >>>> 0600000
> >>>> Copied 6291456 bytes from qspi_test to address 0x00000000 in flash
> >>>> Copied 6291456 bytes from address 0x00000000 in flash to qspi_read
> >>>> d24a9523db829a0df688f34b8dc76a1383b74024  qspi_test
> >>>> d24a9523db829a0df688f34b8dc76a1383b74024  qspi_read
> >>>>
> >>>> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
> >>>> ---
> >>>>  drivers/mtd/spi-nor/macronix.c | 4 ++++
> >>>>  1 file changed, 4 insertions(+)
> >>>>
> >>>> diff --git a/drivers/mtd/spi-nor/macronix.c b/drivers/mtd/spi-nor/macronix.c
> >>>> index 6853ec9ae65d..b65d41e5f749 100644
> >>>> --- a/drivers/mtd/spi-nor/macronix.c
> >>>> +++ b/drivers/mtd/spi-nor/macronix.c
> >>>> @@ -82,6 +82,10 @@ static const struct flash_info macronix_nor_parts[] = {
> >>>>     { "mx25u51245g", INFO(0xc2253a, 0, 64 * 1024, 1024)
> >>>>             NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ)
> >>>>             FIXUP_FLAGS(SPI_NOR_4B_OPCODES) },
> >>>> +   { "mx25uw51245g", INFOB(0xc2813a, 0, 16 * 1024, 1024, 4)  
> >>>
> >>> Sector size and nsectors shall be discovered at parse SFDP time.
> >>> Does INFOB(0xc2813a, 0, 0, 0, 4) work for you?  
> >>
> >> I'll check.
> >>  
> >>>  
> >>>> +           PARSE_SFDP  
> >>>
> >>> Yaay
> >>>  
> >>>> +           FLAGS(SPI_NOR_RWW)
> >>>> +           FIXUP_FLAGS(SPI_NOR_4B_OPCODES) },  
> >>>
> >>> Is SPI_NOR_4B_OPCODES flag really needed?  
> >>
> >> I have no idea, I took that from older code.
> >>
> >> Jaime, what do you think?  
> > I think Tudor hopes that SFDP table could determine how many address bytes.  
> 
> No, no.
> 
> :) and hope and programming don't get along.
> 
> Does this flash define the 4bait table? Can you add a print in
> parse_4bait table and check if SNOR_F_4B_OPCODES is set? If yes, the
> fixup flag is not needed.
> 
> SNOR_F_4B_OPCODES is an indication that the flash supports dedicated
> opcodes for 4byte address, without the need to change the address mode
> to 4 byte. When 4B_OPCODES are supported, we prefer not changing the
> address mode, because when changing to 4 byte address mode, the state is
> kept at reset (or power loss) and flashes might not be able to boot at
> lower layers (u-boot for example).

The flag is set, no need for hardcoding it.

Excellent, I'll prepare the patch.

While I was testing I figured out: the bank size calculation happens
too early, so if we discover the size with the SFDP table, that won't
work. I'll fix it, feel free to squash the patch if you prefer.

> 
> So I'd try:
> { "mx25uw51245g", INFOB(0xc2813a, 0, 0, 0, 4)
> 		PARSE_SFDP
> 		FLAGS(SPI_NOR_RWW) },
> 
> In the future we'd like to add a sfdp-decoder in mtd-utils to decode the
> sfdp dump and ease the review and avoid such questions, but we couldn't
> allocate the time to implement it up to now. Meh, we're doing it at best
> effort, in our spare time. Volunteers?
> 
> Cheers,
> ta


Thanks,
Miquèl
Tudor Ambarus April 3, 2023, 8:08 a.m. UTC | #7
On 3/31/23 20:37, Miquel Raynal wrote:
> Hi Tudor,
> 

Hi!

> tudor.ambarus@linaro.org wrote on Wed, 29 Mar 2023 12:12:29 +0100:
> 
>> On 3/29/23 06:48, liao jaime wrote:
>>> Hi Miquel
>>>   
>>>>
>>>> Hi Tudor,
>>>>
>>>> tudor.ambarus@linaro.org wrote on Tue, 28 Mar 2023 17:31:46 +0100:
>>>>  
>>>>> On 3/28/23 16:41, Miquel Raynal wrote:  
>>>>>> Describe this new part and provide the RWW flag for it.
>>>>>>
>>>>>> There is no public datasheet, but here are the sfdp tables plus base
>>>>>> testing to show it works.
>>>>>>
>>>>>> mx25uw51245g
>>>>>> c2813a
>>>>>> macronix
>>>>>> 53464450080104fd00070114400000ff8701011c900000ff0a0001080001
>>>>>> 00ff05000105200100ff84000102340100ff0000000000000000ffffffff
>>>>>> ffffffffe5208affffffff1f00ff00ff00ff00ffeeffffffffff00ffffff
>>>>>> 00ff0c2010d800ff00ff87790100821200e27704674630b030b0f4bdd55c
>>>>>> 000000ff101000200000000000007ca14800000000008888000000000000
>>>>>> 00400fd1fff30fd1fff300050090000500b1002b0095002b0096727103b8
>>>>>> 727103b80000000090a3188200c069960000000000000000727100987271
>>>>>> 00b8727100990000000072710098727100f872710099727100f900000000
>>>>>> 00000000011501d0727106d8000086500000060100000000020001030002
>>>>>> 00000000060100000000000072060002000000eec0697272717100d8f7f6
>>>>>> 000a00001445988043060f0021dcffff
>>>>>> 047a884cf44d9ffc2a94d3ab37b48c63  /sys/bus/spi/devices/spi0.0/spi-nor/sfdp  
>>>>>
>>>>> which hash alg was used, was it sha1? No need to resubmnit just for this.  
>>>>
>>>> Actually git just ignored all the lines starting with '#'
>>>> like if they were comments and I did not notice...
>>>>
>>>> I will amend my commit logs and resend.
>>>>  
>>>>>>
>>>>>> 6+0 records in
>>>>>> 6+0 records out
>>>>>> Copied 6291456 bytes from qspi_test to address 0x00000000 in flash
>>>>>> Erased 6291456 bytes from address 0x00000000 in flash
>>>>>> Copied 6291456 bytes from address 0x00000000 in flash to qspi_read
>>>>>> 0000000 ffff ffff ffff ffff ffff ffff ffff ffff
>>>>>> *
>>>>>> 0600000
>>>>>> Copied 6291456 bytes from qspi_test to address 0x00000000 in flash
>>>>>> Copied 6291456 bytes from address 0x00000000 in flash to qspi_read
>>>>>> d24a9523db829a0df688f34b8dc76a1383b74024  qspi_test
>>>>>> d24a9523db829a0df688f34b8dc76a1383b74024  qspi_read
>>>>>>
>>>>>> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
>>>>>> ---
>>>>>>  drivers/mtd/spi-nor/macronix.c | 4 ++++
>>>>>>  1 file changed, 4 insertions(+)
>>>>>>
>>>>>> diff --git a/drivers/mtd/spi-nor/macronix.c b/drivers/mtd/spi-nor/macronix.c
>>>>>> index 6853ec9ae65d..b65d41e5f749 100644
>>>>>> --- a/drivers/mtd/spi-nor/macronix.c
>>>>>> +++ b/drivers/mtd/spi-nor/macronix.c
>>>>>> @@ -82,6 +82,10 @@ static const struct flash_info macronix_nor_parts[] = {
>>>>>>     { "mx25u51245g", INFO(0xc2253a, 0, 64 * 1024, 1024)
>>>>>>             NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ)
>>>>>>             FIXUP_FLAGS(SPI_NOR_4B_OPCODES) },
>>>>>> +   { "mx25uw51245g", INFOB(0xc2813a, 0, 16 * 1024, 1024, 4)  
>>>>>
>>>>> Sector size and nsectors shall be discovered at parse SFDP time.
>>>>> Does INFOB(0xc2813a, 0, 0, 0, 4) work for you?  
>>>>
>>>> I'll check.
>>>>  
>>>>>  
>>>>>> +           PARSE_SFDP  
>>>>>
>>>>> Yaay
>>>>>  
>>>>>> +           FLAGS(SPI_NOR_RWW)
>>>>>> +           FIXUP_FLAGS(SPI_NOR_4B_OPCODES) },  
>>>>>
>>>>> Is SPI_NOR_4B_OPCODES flag really needed?  
>>>>
>>>> I have no idea, I took that from older code.
>>>>
>>>> Jaime, what do you think?  
>>> I think Tudor hopes that SFDP table could determine how many address bytes.  
>>
>> No, no.
>>
>> :) and hope and programming don't get along.
>>
>> Does this flash define the 4bait table? Can you add a print in
>> parse_4bait table and check if SNOR_F_4B_OPCODES is set? If yes, the
>> fixup flag is not needed.
>>
>> SNOR_F_4B_OPCODES is an indication that the flash supports dedicated
>> opcodes for 4byte address, without the need to change the address mode
>> to 4 byte. When 4B_OPCODES are supported, we prefer not changing the
>> address mode, because when changing to 4 byte address mode, the state is
>> kept at reset (or power loss) and flashes might not be able to boot at
>> lower layers (u-boot for example).
> 
> The flag is set, no need for hardcoding it.
> 
> Excellent, I'll prepare the patch.
> 
> While I was testing I figured out: the bank size calculation happens
> too early, so if we discover the size with the SFDP table, that won't
> work. I'll fix it, feel free to squash the patch if you prefer.
> 
Indeed. Michael or me are going to fix the n_sectors and sector_size
handling soon. Separate patch is fine, I don't change git history unless
really needed.
diff mbox series

Patch

diff --git a/drivers/mtd/spi-nor/macronix.c b/drivers/mtd/spi-nor/macronix.c
index 6853ec9ae65d..b65d41e5f749 100644
--- a/drivers/mtd/spi-nor/macronix.c
+++ b/drivers/mtd/spi-nor/macronix.c
@@ -82,6 +82,10 @@  static const struct flash_info macronix_nor_parts[] = {
 	{ "mx25u51245g", INFO(0xc2253a, 0, 64 * 1024, 1024)
 		NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ)
 		FIXUP_FLAGS(SPI_NOR_4B_OPCODES) },
+	{ "mx25uw51245g", INFOB(0xc2813a, 0, 16 * 1024, 1024, 4)
+		PARSE_SFDP
+		FLAGS(SPI_NOR_RWW)
+		FIXUP_FLAGS(SPI_NOR_4B_OPCODES) },
 	{ "mx25v8035f",  INFO(0xc22314, 0, 64 * 1024,  16)
 		NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ |
 			      SPI_NOR_QUAD_READ) },