[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20251114-winbond-v6-18-rc1-spi-nor-swp-v1-18-487bc7129931@bootlin.com>
Date: Fri, 14 Nov 2025 18:53:19 +0100
From: Miquel Raynal <miquel.raynal@...tlin.com>
To: Tudor Ambarus <tudor.ambarus@...aro.org>,
Pratyush Yadav <pratyush@...nel.org>, Michael Walle <mwalle@...nel.org>,
Richard Weinberger <richard@....at>, Vignesh Raghavendra <vigneshr@...com>,
Jonathan Corbet <corbet@....net>
Cc: Sean Anderson <sean.anderson@...ux.dev>,
Thomas Petazzoni <thomas.petazzoni@...tlin.com>,
Steam Lin <STLin2@...bond.com>, linux-mtd@...ts.infradead.org,
linux-kernel@...r.kernel.org, linux-doc@...r.kernel.org,
Miquel Raynal <miquel.raynal@...tlin.com>
Subject: [PATCH 18/19] mtd: spi-nor: Add steps for testing locking with CMP
Extend the test coverage by giving guidelines to verify the CMP bit acts
according to our expectations.
Signed-off-by: Miquel Raynal <miquel.raynal@...tlin.com>
---
The instructions listed in this file target people adding support for
new chips, however here are below extra steps that I also ran with the
same W25H512NWxxAM chip. They are here to prove core correctness.
$ flash_lock -u /dev/mtd0
$ flash_lock -l /dev/mtd0 0 1008
$ show_sectors
software locked sectors
region (in hex) | status | #blocks
------------------+----------+--------
00000000-03efffff | locked | 1008
03f00000-03ffffff | unlocked | 16
$ flash_lock -l /dev/mtd0 0 1009
$ show_sectors # should not change
software locked sectors
region (in hex) | status | #blocks
------------------+----------+--------
00000000-03efffff | locked | 1008
03f00000-03ffffff | unlocked | 16
$ flash_lock -l /dev/mtd0 0 1015
$ show_sectors # should not change
software locked sectors
region (in hex) | status | #blocks
------------------+----------+--------
00000000-03efffff | locked | 1008
03f00000-03ffffff | unlocked | 16
$ flash_lock -l /dev/mtd0 0 1016
$ show_sectors # should cover more
software locked sectors
region (in hex) | status | #blocks
------------------+----------+--------
00000000-03f7ffff | locked | 1016
03f80000-03ffffff | unlocked | 8
$ flash_lock -u /dev/mtd0 $((1015 * $bs)) 1
$ show_sectors # should not change
software locked sectors
region (in hex) | status | #blocks
------------------+----------+--------
00000000-03f7ffff | locked | 1016
03f80000-03ffffff | unlocked | 8
$ flash_lock -u /dev/mtd0 $((1009 * $bs)) 7
$ show_sectors # should not change
software locked sectors
region (in hex) | status | #blocks
------------------+----------+--------
00000000-03f7ffff | locked | 1016
03f80000-03ffffff | unlocked | 8
$ flash_lock -u /dev/mtd0 $((1008 * $bs)) 8
$ show_sectors # range should reduce down to initial value
software locked sectors
region (in hex) | status | #blocks
------------------+----------+--------
00000000-03efffff | locked | 1008
03f00000-03ffffff | unlocked | 16
[Similar situations, on the other side of the device]
$ flash_lock -u /dev/mtd0
$ flash_lock -l /dev/mtd0 $((16 * $bs)) 1008
$ show_sectors
software locked sectors
region (in hex) | status | #blocks
------------------+----------+--------
00000000-000fffff | unlocked | 16
00100000-03ffffff | locked | 1008
$ flash_lock -l /dev/mtd0 $((15 * $bs)) 1009
$ show_sectors # should not change
software locked sectors
region (in hex) | status | #blocks
------------------+----------+--------
00000000-000fffff | unlocked | 16
00100000-03ffffff | locked | 1008
$ flash_lock -l /dev/mtd0 $((9 * $bs)) 1015
$ show_sectors # should not change
software locked sectors
region (in hex) | status | #blocks
------------------+----------+--------
00000000-000fffff | unlocked | 16
00100000-03ffffff | locked | 1008
$ flash_lock -l /dev/mtd0 $((8 * $bs)) 1016
$ show_sectors # should cover more
software locked sectors
region (in hex) | status | #blocks
------------------+----------+--------
00000000-0007ffff | unlocked | 8
00080000-03ffffff | locked | 1016
$ flash_lock -u /dev/mtd0 $((8 * $bs)) 1
$ show_sectors # should not change
software locked sectors
region (in hex) | status | #blocks
------------------+----------+--------
00000000-0007ffff | unlocked | 8
00080000-03ffffff | locked | 1016
$ flash_lock -u /dev/mtd0 $((8 * $bs)) 7
$ show_sectors # should not change
software locked sectors
region (in hex) | status | #blocks
------------------+----------+--------
00000000-0007ffff | unlocked | 8
00080000-03ffffff | locked | 1016
$ flash_lock -u /dev/mtd0 $((8 * $bs)) 8
$ show_sectors # range should reduce down to initial value
software locked sectors
region (in hex) | status | #blocks
------------------+----------+--------
00000000-000fffff | unlocked | 16
00100000-03ffffff | locked | 1008
---
Documentation/driver-api/mtd/spi-nor.rst | 36 ++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/Documentation/driver-api/mtd/spi-nor.rst b/Documentation/driver-api/mtd/spi-nor.rst
index d56ff5c42a98af23a65097c9b77cd20ef2504a49..e00ca19e7dd6cb3a118b81f8a1fe36470355fa42 100644
--- a/Documentation/driver-api/mtd/spi-nor.rst
+++ b/Documentation/driver-api/mtd/spi-nor.rst
@@ -321,3 +321,39 @@ section, after the ``---`` marker.
------------------+----------+--------
00000000-0000ffff | locked | 1
00010000-03ffffff | unlocked | 1023
+
+ If the flash features a Complement (CMP) bit, we can protect with
+ more granularity above half of the capacity. Let's lock all but one
+ block, then unlock one more block::
+
+ root@1:~# all_but_one=$((($size / $bs) - 1))
+ root@1:~# flash_lock -u /dev/mtd0
+ root@1:~# flash_lock -l /dev/mtd0 $bs $all_but_one # all but the first
+ root@1:~# show_sectors
+ software locked sectors
+ region (in hex) | status | #blocks
+ ------------------+----------+--------
+ 00000000-0000ffff | unlocked | 1
+ 00010000-03ffffff | locked | 1023
+ root@1:~# flash_lock -u /dev/mtd0 $bs 1 # all but the two first
+ root@1:~# show_sectors
+ software locked sectors
+ region (in hex) | status | #blocks
+ ------------------+----------+--------
+ 00000000-0001ffff | unlocked | 2
+ 00020000-03ffffff | locked | 1022
+ root@1:~# flash_lock -u /dev/mtd0
+ root@1:~# flash_lock -l /dev/mtd0 0 $all_but_one # same from the other side
+ root@1:~# show_sectors
+ software locked sectors
+ region (in hex) | status | #blocks
+ ------------------+----------+--------
+ 00000000-03feffff | locked | 1023
+ 03ff0000-03ffffff | unlocked | 1
+ root@1:~# flash_lock -u /dev/mtd0 $(($size - (2 * $bs))) 1 # all but two
+ root@1:~# show_sectors
+ software locked sectors
+ region (in hex) | status | #blocks
+ ------------------+----------+--------
+ 00000000-03fdffff | locked | 1022
+ 03fe0000-03ffffff | unlocked | 2
--
2.51.0
Powered by blists - more mailing lists