diff mbox series

[v3,2/2] mtd: spi-nor: winbond: add support for W25Q512NW-IQ

Message ID 20220716000643.3541839-2-quic_jaehyoo@quicinc.com
State Accepted
Delegated to: Ambarus Tudor
Headers show
Series [v3,1/2] mtd: spi-nor: fix select_uniform_erase to skip 0 erase size | expand

Commit Message

Jae Hyun Yoo July 16, 2022, 12:06 a.m. UTC
Add support for Winbond W25Q512NW-IQ/IN

Signed-off-by: Jae Hyun Yoo <quic_jaehyoo@quicinc.com>
Link: https://www.winbond.com/resource-files/W25Q512NW%20RevB%2007192021.pdf
Reviewed-by: Cédric Le Goater <clg@kaod.org>
---
Changes in v2:
 * Change sector size and number of sector to zero so that it can use parsed
   info from sfdp. (Michael)
 * Added md5sum of sfdp block. (Michael)

Changes in v2:
 * Refined commit message. (Michael)

Test result on AST2600 SoC's SPI controller:
$ cat /sys/bus/platform/devices/1e620000.spi/spi_master/spi0/spi0.1/spi-nor/jedec_id
ef6020

$ cat /sys/bus/platform/devices/1e620000.spi/spi_master/spi0/spi0.1/spi-nor/manufacturer
winbond

$ cat /sys/bus/platform/devices/1e620000.spi/spi_master/spi0/spi0.1/spi-nor/partname
w25q512nwq

$ hexdump /sys/bus/platform/devices/1e620000.spi/spi_master/spi0/spi0.1/spi-nor/sfdp
0000000 4653 5044 0106 ff01 0600 1001 0080 ff00
0000010 0084 0201 00d0 ff00 ffff ffff ffff ffff
0000020 6f00 7074 7420 7365 ff74 ffff ffff ffff
*
0000040 ffff ffff ffff ffff ffff ffff ffff ffff
*
0000080 20e5 fffb ffff 1fff eb44 6b08 3b08 bb42
0000090 fffe ffff ffff 0000 ffff eb40 200c 520f
00000a0 d810 0000 0233 00a6 e781 d914 63e9 3376
00000b0 757a 757a bdf7 5cd5 f719 ff5d 70e9 a5f9
00000c0 ffff ffff ffff ffff ffff ffff ffff ffff
00000d0 0aff fff0 ff21 ffdc                    
00000d8

$ md5sum /sys/bus/platform/devices/1e620000.spi/spi_master/spi0/spi0.1/spi-nor/sfdp
e1484fe7c993adaee5ea0d6246f52817

$ flash_otp_info -u /dev/mtd0
Number of OTP user blocks on /dev/mtd0: 3
block  0:  offset = 0x0000  size = 256 bytes  [unlocked]
block  1:  offset = 0x0100  size = 256 bytes  [unlocked]
block  2:  offset = 0x0200  size = 256 bytes  [unlocked]

$ flash_otp_dump -u /dev/mtd0 0x2d0
OTP user data for /dev/mtd0
0x02d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x02e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x02f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

$ echo -n otp test | flash_otp_write -u /dev/mtd0 0x2d0
Writing OTP user data on /dev/mtd0 at offset 0x2d0
Wrote 8 bytes of OTP user data

$ flash_otp_dump -u /dev/mtd0 0x2d0
OTP user data for /dev/mtd0
0x02d0: 6f 74 70 20 74 65 73 74 ff ff ff ff ff ff ff ff
0x02e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x02f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff

$ flash_otp_erase -u /dev/mtd0 0x200 0x100

$ flash_otp_dump -u /dev/mtd0 0x2d0
OTP user data for /dev/mtd0
0x02d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x02e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0x02f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 

 drivers/mtd/spi-nor/winbond.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Michael Walle July 16, 2022, 9:11 a.m. UTC | #1
Hi,

Am 2022-07-16 02:06, schrieb Jae Hyun Yoo:
> Add support for Winbond W25Q512NW-IQ/IN
> 
> Signed-off-by: Jae Hyun Yoo <quic_jaehyoo@quicinc.com>
> Link: 
> https://www.winbond.com/resource-files/W25Q512NW%20RevB%2007192021.pdf
> Reviewed-by: Cédric Le Goater <clg@kaod.org>

Thanks again for finding the real issue here!

Reviewed-by: Michael Walle <michael@walle.cc>

But also see below.

> $ hexdump
> /sys/bus/platform/devices/1e620000.spi/spi_master/spi0/spi0.1/spi-nor/sfdp
> 0000000 4653 5044 0106 ff01 0600 1001 0080 ff00
> 0000010 0084 0201 00d0 ff00 ffff ffff ffff ffff
> 0000020 6f00 7074 7420 7365 ff74 ffff ffff ffff

Did you noticed your SFDP data changed compared to:
https://lore.kernel.org/linux-mtd/20220710145721.1207157-1-quic_jaehyoo@quicinc.com/

Which makes me wonder if you ever had an offset 0
with the OTP_INFO(). For Winbond the first OTP
region is actually the SFDP.. So you might
accidentally modified it.

-michael
Jae Hyun Yoo July 16, 2022, 1:30 p.m. UTC | #2
Hi,

On 7/16/2022 2:11 AM, Michael Walle wrote:
> Hi,
> 
> Am 2022-07-16 02:06, schrieb Jae Hyun Yoo:
>> Add support for Winbond W25Q512NW-IQ/IN
>>
>> Signed-off-by: Jae Hyun Yoo <quic_jaehyoo@quicinc.com>
>> Link: 
>> https://www.winbond.com/resource-files/W25Q512NW%20RevB%2007192021.pdf
>> Reviewed-by: Cédric Le Goater <clg@kaod.org>
> 
> Thanks again for finding the real issue here!
> 
> Reviewed-by: Michael Walle <michael@walle.cc>

Thanks for your review!

> But also see below.
> 
>> $ hexdump
>> /sys/bus/platform/devices/1e620000.spi/spi_master/spi0/spi0.1/spi-nor/sfdp 
>>
>> 0000000 4653 5044 0106 ff01 0600 1001 0080 ff00
>> 0000010 0084 0201 00d0 ff00 ffff ffff ffff ffff
>> 0000020 6f00 7074 7420 7365 ff74 ffff ffff ffff
> 
> Did you noticed your SFDP data changed compared to:
> https://lore.kernel.org/linux-mtd/20220710145721.1207157-1-quic_jaehyoo@quicinc.com/ 
> 
> 
> Which makes me wonder if you ever had an offset 0
> with the OTP_INFO(). For Winbond the first OTP
> region is actually the SFDP.. So you might
> accidentally modified it.

Indeed. Looks like the region got modified while I was testing OTP.
Please see below. I took the sfdp dump from a new clean part.

$ hexdump 
/sys/bus/platform/devices/1e620000.spi/spi_master/spi0/spi0.1/spi-nor/sfdp
0000000 4653 5044 0106 ff01 0600 1001 0080 ff00
0000010 0084 0201 00d0 ff00 ffff ffff ffff ffff
0000020 ffff ffff ffff ffff ffff ffff ffff ffff
*
0000080 20e5 fffb ffff 1fff eb44 6b08 3b08 bb42
0000090 fffe ffff ffff 0000 ffff eb40 200c 520f
00000a0 d810 0000 0233 00a6 e781 d914 63e9 3376
00000b0 757a 757a bdf7 5cd5 f719 ff5d 70e9 a5f9
00000c0 ffff ffff ffff ffff ffff ffff ffff ffff
00000d0 0aff fff0 ff21 ffdc
00000d8

$ md5sum 
/sys/bus/platform/devices/1e620000.spi/spi_master/spi0/spi0.1/spi-nor/sfdp
347f0027ec5a09e8e78d5685485cceed

Thanks,

Jae
diff mbox series

Patch

diff --git a/drivers/mtd/spi-nor/winbond.c b/drivers/mtd/spi-nor/winbond.c
index ffaa24055259..ca39acf4112c 100644
--- a/drivers/mtd/spi-nor/winbond.c
+++ b/drivers/mtd/spi-nor/winbond.c
@@ -133,6 +133,9 @@  static const struct flash_info winbond_nor_parts[] = {
 	{ "w25m512jv", INFO(0xef7119, 0, 64 * 1024, 1024)
 		NO_SFDP_FLAGS(SECT_4K | SPI_NOR_QUAD_READ |
 			      SPI_NOR_DUAL_READ) },
+	{ "w25q512nwq", INFO(0xef6020, 0, 0, 0)
+		PARSE_SFDP
+		OTP_INFO(256, 3, 0x1000, 0x1000) },
 	{ "w25q512nwm", INFO(0xef8020, 0, 64 * 1024, 1024)
 		PARSE_SFDP
 		OTP_INFO(256, 3, 0x1000, 0x1000) },