Re: [PATCH 11/30] mtd: spi-nor: winbond: W25Q32JV-Q/N: Fill locking information

"Michael Walle" <[email protected]>
Newsgroups org.infradead.lists.linux-mtd,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
On Fri May 29, 2026 at 5:22 PM CEST, Miquel Raynal wrote:
> The SFDP table does not advertize the locking capabilities of the
> device, flag these capabilities.
>
> Signed-off-by: Miquel Raynal <[email protected]>
> ---
> $ alias show_sectors='grep -A4 "locked sectors" /sys/kernel/debug/spi-nor/spi0.0
> /params'
> $ flash_lock -u /dev/mtd0
> $ flash_lock -i /dev/mtd0
> Device: /dev/mtd0
> Start: 0
> Len: 0x400000
> Lock status: unlocked
> Return code: 0
> $ mtd_debug erase /dev/mtd0 0 2097152
> Erased 2097152 bytes from address 0x00000000 in flash
> $ mtd_debug write /dev/mtd0 0 2097152 spi_test
> Copied 2097152 bytes from spi_test to address 0x00000000 in flash
> $ mtd_debug read /dev/mtd0 0 2097152 spi_read
> Copied 2097152 bytes from address 0x00000000 in flash to spi_read
> $ sha256sum spi*
> 6d7c114421890dfa12e1824aa351d4490815a9c0ceb9c2e7981073106a11fc71  spi_read
> 6d7c114421890dfa12e1824aa351d4490815a9c0ceb9c2e7981073106a11fc71  spi_test
> $ show_sectors
> locked sectors
>  region (in hex)   | status   | #sectors
>  ------------------+----------+---------
>  00000000-003fffff | unlocked | 64
> $ flash_lock -l /dev/mtd0
> $ flash_lock -i /dev/mtd0
> Device: /dev/mtd0
> Start: 0
> Len: 0x400000
> Lock status: locked
> Return code: 1
> $ mtd_debug erase /dev/mtd0 0 2097152
> Erased 2097152 bytes from address 0x00000000 in flash
> $ mtd_debug read /dev/mtd0 0 2097152 spi_read
> Copied 2097152 bytes from address 0x00000000 in flash to spi_read
> $ sha256sum spi*
> 6d7c114421890dfa12e1824aa351d4490815a9c0ceb9c2e7981073106a11fc71  spi_read
> 6d7c114421890dfa12e1824aa351d4490815a9c0ceb9c2e7981073106a11fc71  spi_test
> $ dd if=/dev/urandom of=./spi_test2 bs=1M count=2
> 2+0 records in
> 2+0 records out
> $ mtd_debug write /dev/mtd0 0 2097152 spi_test2
> Copied 2097152 bytes from spi_test2 to address 0x00000000 in flash
> $ mtd_debug read /dev/mtd0 0 2097152 spi_read2
> Copied 2097152 bytes from address 0x00000000 in flash to spi_read2
> $ sha256sum spi*
> 6d7c114421890dfa12e1824aa351d4490815a9c0ceb9c2e7981073106a11fc71  spi_read
> 6d7c114421890dfa12e1824aa351d4490815a9c0ceb9c2e7981073106a11fc71  spi_read2
> 6d7c114421890dfa12e1824aa351d4490815a9c0ceb9c2e7981073106a11fc71  spi_test
> 5b69b16c88c3ae48213c359d2f9fd7f0583e513dabb224b3404bc93a5e173253  spi_test2
> $ show_sectors
> locked sectors
>  region (in hex)   | status   | #sectors
>  ------------------+----------+---------
>  00000000-003fffff |   locked | 64
> $ flash_lock -u /dev/mtd0
> $ size=$(cat /sys/class/mtd/mtd0/size)
> $ nblocks=$(grep unlocked /sys/kernel/debug/spi-nor/spi0.0/params | sed -e 's/.*
> unlocked | //')
> $
> $ bs=$(($size / $nblocks))
> $ flash_lock -u /dev/mtd0
> $ flash_lock -l /dev/mtd0 $(($size - (2 * $bs))) 2 # last two
> $ show_sectors
> locked sectors
>  region (in hex)   | status   | #sectors
>  ------------------+----------+---------
>  00000000-003dffff | unlocked | 62
>  003e0000-003fffff |   locked | 2
> $ flash_lock -u /dev/mtd0 $(($size - (2 * $bs))) 1 # last one
> $ show_sectors
> locked sectors
>  region (in hex)   | status   | #sectors
>  ------------------+----------+---------
>  00000000-003effff | unlocked | 63
>  003f0000-003fffff |   locked | 1
> $ flash_lock -u /dev/mtd0
> $ all_but_one=$((($size / $bs) - 1))
> $ flash_lock -l /dev/mtd0 $bs $all_but_one # all but the first
> $ show_sectors
> locked sectors
>  region (in hex)   | status   | #sectors
>  ------------------+----------+---------
>  00000000-0000ffff | unlocked | 1
>  00010000-003fffff |   locked | 63
> $ flash_lock -u /dev/mtd0 $bs 1 # all but the two first
> $ show_sectors
> locked sectors
>  region (in hex)   | status   | #sectors
>  ------------------+----------+---------
>  00000000-0001ffff | unlocked | 2
>  00020000-003fffff |   locked | 62
> $ flash_lock -u /dev/mtd0
> $ flash_lock -l /dev/mtd0 0 $all_but_one # same from the other side
> $ show_sectors
> locked sectors
>  region (in hex)   | status   | #sectors
>  ------------------+----------+---------
>  00000000-003effff |   locked | 63
>  003f0000-003fffff | unlocked | 1
> $ flash_lock -u /dev/mtd0 $(($size - (2 * $bs))) 1 # all but two
> $ show_sectors
> locked sectors
>  region (in hex)   | status   | #sectors
>  ------------------+----------+---------
>  00000000-003dffff |   locked | 62
>  003e0000-003fffff | unlocked | 2
> ---
>  drivers/mtd/spi-nor/winbond.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/mtd/spi-nor/winbond.c b/drivers/mtd/spi-nor/winbond.c
> index 07ab66a9e6c0..e6dca2493357 100644
> --- a/drivers/mtd/spi-nor/winbond.c
> +++ b/drivers/mtd/spi-nor/winbond.c
> @@ -200,7 +200,7 @@ static const struct flash_info winbond_nor_parts[] = {
>  	}, {
>  		/* W25Q32JV-Q/N */
>  		.id = SNOR_ID(0xef, 0x40, 0x16),
> -		.flags = SPI_NOR_QUAD_PP,
> +		.flags = SPI_NOR_QUAD_PP | SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB | SPI_NOR_HAS_CMP,

The original W25Q32 doesn't have the CMP bit.

-michael

______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/
signature.asc (application/pgp-signature, 297 B)
-----BEGIN PGP SIGNATURE-----

iKgEABMJADAWIQTIVZIcOo5wfU/AngkSJzzuPgIf+AUCaku6AhIcbXdhbGxlQGtl
cm5lbC5vcmcACgkQEic87j4CH/hnMAF/QrRLS8DOTUvZmld0Rd4uDgq6574/tVyq
i6xxKnk6MwZy5kHjDuO7tnCxWVEHMCAtAX9j3SMytDu9YRyhmZLO1bmVmm6as2vG
HR2vcTkExEgDzkAgQIENF10RYuIVh+zflNc=
=tzDW
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.