5 How to propose a new flash addition
6 -----------------------------------
8 Most SPI NOR flashes comply with the JEDEC JESD216
9 Serial Flash Discoverable Parameter (SFDP) standard. SFDP describes
10 the functional and feature capabilities of serial flash devices in a
11 standard set of internal read-only parameter tables.
13 The SPI NOR driver queries the SFDP tables in order to determine the
14 flash's parameters and settings. If the flash defines the SFDP tables
15 it's likely that you won't need a flash entry at all, and instead
16 rely on the generic flash driver which probes the flash solely based
17 on its SFDP data. All one has to do is to specify the "jedec,spi-nor"
18 compatible in the device tree.
20 There are cases however where you need to define an explicit flash
21 entry. This typically happens when the flash has settings or support
22 that is not covered by the SFDP tables (e.g. Block Protection), or
23 when the flash contains mangled SFDP data. If the later, one needs
24 to implement the ``spi_nor_fixups`` hooks in order to amend the SFDP
25 parameters with the correct values.
27 Minimum testing requirements
28 -----------------------------
30 Do all the tests from below and paste them in the commit's comments
31 section, after the ``---`` marker.
33 1) Specify the controller that you used to test the flash and specify
34 the frequency at which the flash was operated, e.g.::
36 This flash is populated on the X board and was tested at Y
37 frequency using the Z (put compatible) SPI controller.
39 2) Dump the sysfs entries and print the md5/sha1/sha256 SFDP checksum::
41 root@1:~# cat /sys/bus/spi/devices/spi0.0/spi-nor/partname
43 root@1:~# cat /sys/bus/spi/devices/spi0.0/spi-nor/jedec_id
45 root@1:~# cat /sys/bus/spi/devices/spi0.0/spi-nor/manufacturer
47 root@1:~# xxd -p /sys/bus/spi/devices/spi0.0/spi-nor/sfdp
48 53464450060102ff00060110300000ff81000106000100ffbf0001180002
49 0001fffffffffffffffffffffffffffffffffd20f1ffffffff0344eb086b
50 083b80bbfeffffffffff00ffffff440b0c200dd80fd810d820914824806f
51 1d81ed0f773830b030b0f7ffffff29c25cfff030c080ffffffffffffffff
52 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
53 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
54 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
55 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
56 ffffffffffffffffffffffffffffffffff0004fff37f0000f57f0000f9ff
57 7d00f57f0000f37f0000ffffffffffffffffffffffffffffffffffffffff
58 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
59 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
60 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
61 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
62 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
63 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
64 ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
65 ffffbf2643ffb95ffdff30f260f332ff0a122346ff0f19320f1919ffffff
66 ffffffff00669938ff05013506040232b03072428de89888a585c09faf5a
67 ffff06ec060c0003080bffffffffff07ffff0202ff060300fdfd040700fc
69 root@1:~# sha256sum /sys/bus/spi/devices/spi0.0/spi-nor/sfdp
70 428f34d0461876f189ac97f93e68a05fa6428c6650b3b7baf736a921e5898ed1 /sys/bus/spi/devices/spi0.0/spi-nor/sfdp
72 Please dump the SFDP tables using ``xxd -p``. It enables us to do
73 the reverse operation and convert the hexdump to binary with
74 ``xxd -rp``. Dumping the SFDP data with ``hexdump -Cv`` is accepted,
77 3) Dump debugfs data::
79 root@1:~# cat /sys/kernel/debug/spi-nor/spi0.0/capabilities
80 Supported read modes by the flash
110 Supported page program modes by the flash
114 root@1:~# cat /sys/kernel/debug/spi-nor/spi0.0/params
121 flags HAS_LOCK | HAS_16BIT_SR | SOFT_RESET | SWP_IS_VOLATILE
143 region (in hex) | erase mask | flags
144 ------------------+------------+----------
145 00000000-00007fff | [01 ] |
146 00008000-0000ffff | [0 2 ] |
147 00010000-007effff | [0 3] |
148 007f0000-007f7fff | [0 2 ] |
149 007f8000-007fffff | [01 ] |
151 4) Use `mtd-utils <https://git.infradead.org/mtd-utils.git>`__
152 and verify that erase, read and page program operations work fine::
154 root@1:~# dd if=/dev/urandom of=./spi_test bs=1M count=2
157 2097152 bytes (2.1 MB, 2.0 MiB) copied, 0.848566 s, 2.5 MB/s
159 root@1:~# mtd_debug erase /dev/mtd0 0 2097152
160 Erased 2097152 bytes from address 0x00000000 in flash
162 root@1:~# mtd_debug read /dev/mtd0 0 2097152 spi_read
163 Copied 2097152 bytes from address 0x00000000 in flash to spi_read
165 root@1:~# hexdump spi_read
166 0000000 ffff ffff ffff ffff ffff ffff ffff ffff
170 root@1:~# sha256sum spi_read
171 4bda3a28f4ffe603c0ec1258c0034d65a1a0d35ab7bd523a834608adabf03cc5 spi_read
173 root@1:~# mtd_debug write /dev/mtd0 0 2097152 spi_test
174 Copied 2097152 bytes from spi_test to address 0x00000000 in flash
176 root@1:~# mtd_debug read /dev/mtd0 0 2097152 spi_read
177 Copied 2097152 bytes from address 0x00000000 in flash to spi_read
179 root@1:~# sha256sum spi*
180 c444216a6ba2a4a66cccd60a0dd062bce4b865dd52b200ef5e21838c4b899ac8 spi_read
181 c444216a6ba2a4a66cccd60a0dd062bce4b865dd52b200ef5e21838c4b899ac8 spi_test
183 If the flash comes erased by default and the previous erase was ignored,
184 we won't catch it, thus test the erase again::
186 root@1:~# mtd_debug erase /dev/mtd0 0 2097152
187 Erased 2097152 bytes from address 0x00000000 in flash
189 root@1:~# mtd_debug read /dev/mtd0 0 2097152 spi_read
190 Copied 2097152 bytes from address 0x00000000 in flash to spi_read
192 root@1:~# sha256sum spi*
193 4bda3a28f4ffe603c0ec1258c0034d65a1a0d35ab7bd523a834608adabf03cc5 spi_read
194 c444216a6ba2a4a66cccd60a0dd062bce4b865dd52b200ef5e21838c4b899ac8 spi_test
196 Dump some other relevant data::
198 root@1:~# mtd_debug info /dev/mtd0
199 mtd.type = MTD_NORFLASH
200 mtd.flags = MTD_CAP_NORFLASH
201 mtd.size = 8388608 (8M)
202 mtd.erasesize = 4096 (4K)