From: Erez Geva <ErezGeva2@gmail.com>
Add flag for always trying reading SFDP.
All new chips from Macronix support SFDP.
All old chips in the IDs table were reused by new chips.
There is no reason the skip SFDP
when using now chips that reuse old JEDEC IDs.
Signed-off-by: Erez Geva <ErezGeva2@gmail.com>
---
Notes:
* Testing with MX25L3233F using BeagleBone Black.
* After adding the new patch of always reading the SFDP
$ cat /sys/bus/spi/devices/spi0.0/spi-nor/jedec_id
c22016
$ cat /sys/bus/spi/devices/spi0.0/spi-nor/manufacturer
macronix
$ cat /sys/bus/spi/devices/spi0.0/spi-nor/partname
mx25l3205d
$ xxd -p /sys/bus/spi/devices/spi0.0/spi-nor/sfdp
53464450000101ff00000109300000ffc2000104600000ffffffffffffff
ffffffffffffffffffffffffffffffffffffe520f1ffffffff0144eb086b
083b04bbeeffffffffff00ffffff00ff0c200f5210d800ffffffffffffff
ffffffffffff003650269ef97764fecfffffffffffff
$ sha256sum /sys/bus/spi/devices/spi0.0/spi-nor/sfdp
22d5d34af77c3628300056a0fc4bfbeafa027f544998852cf27f7cebf7881196 /sys/bus/spi/devices/spi0.0/spi-nor/sfdp
$ cat /sys/kernel/debug/spi-nor/spi0.0/capabilities
Supported read modes by the flash
1S-1S-1S
opcode 0x03
mode cycles 0
dummy cycles 0
1S-1S-2S
opcode 0x3b
mode cycles 0
dummy cycles 8
1S-2S-2S
opcode 0xbb
mode cycles 0
dummy cycles 4
1S-1S-4S
opcode 0x6b
mode cycles 0
dummy cycles 8
1S-4S-4S
opcode 0xeb
mode cycles 2
dummy cycles 4
Supported page program modes by the flash
1S-1S-1S
opcode 0x02
$ cat /sys/kernel/debug/spi-nor/spi0.0/params
name mx25l3205d
id c2 20 16 c2 20 16
size 4.00 MiB
write size 1
page size 256
address nbytes 3
flags HAS_16BIT_SR
opcodes
read 0x03
dummy cycles 0
erase 0x20
program 0x02
8D extension none
protocols
read 1S-1S-1S
write 1S-1S-1S
register 1S-1S-1S
erase commands
20 (4.00 KiB) [1]
52 (32.0 KiB) [2]
d8 (64.0 KiB) [3]
c7 (4.00 MiB)
sector map
region (in hex) | erase mask | flags
------------------+------------+----------
00000000-003fffff | [ 123] |
# mtd_debug info /dev/mtd0
mtd.type = MTD_NORFLASH
mtd.flags = MTD_CAP_NORFLASH
mtd.size = 4194304 (4M)
mtd.erasesize = 4096 (4K)
mtd.writesize = 1
mtd.oobsize = 0
regions = 0
* Test that mimic old Macronix chip lack SFDP.
* In order to check how will the driver cope with an old Macronix chip.
* As we do not posses such an old chip, we will change RDSFDP to an unused opcode.
$ git diff -U0
diff --git a/include/linux/mtd/spi-nor.h b/include/linux/mtd/spi-nor.h
index 4ebc527aadc1..784cba9b2d0d 100644
--- a/include/linux/mtd/spi-nor.h
+++ b/include/linux/mtd/spi-nor.h
@@ -47 +47 @@
-#define SPINOR_OP_RDSFDP 0x5a /* Read SFDP */
+#define SPINOR_OP_RDSFDP 0x57 /* Read SFDP */
# dmesg | grep spi
[ 42.436974] spi-nor spi0.0: mx25l3205d (4096 Kbytes)
* No error in kernel log!
# ls /sys/bus/spi/devices/spi0.0/spi-nor/
jedec_id manufacturer partname
* No SFDP, as expected!
$ cat /sys/kernel/debug/spi-nor/spi0.0/capabilities
Supported read modes by the flash
1S-1S-1S
opcode 0x03
mode cycles 0
dummy cycles 0
Supported page program modes by the flash
1S-1S-1S
opcode 0x02
$ cat /sys/kernel/debug/spi-nor/spi0.0/params
name mx25l3205d
id c2 20 16 c2 20 16
size 4.00 MiB
write size 1
page size 256
address nbytes 3
flags HAS_16BIT_SR
opcodes
read 0x03
dummy cycles 0
erase 0x20
program 0x02
8D extension none
protocols
read 1S-1S-1S
write 1S-1S-1S
register 1S-1S-1S
erase commands
20 (4.00 KiB) [0]
d8 (64.0 KiB) [1]
c7 (4.00 MiB)
sector map
region (in hex) | erase mask | flags
------------------+------------+----------
00000000-003fffff | [01 ] |
drivers/mtd/spi-nor/macronix.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/mtd/spi-nor/macronix.c b/drivers/mtd/spi-nor/macronix.c
index ea6be95e75a5..292a149c37d8 100644
--- a/drivers/mtd/spi-nor/macronix.c
+++ b/drivers/mtd/spi-nor/macronix.c
@@ -208,4 +208,5 @@ const struct spi_nor_manufacturer spi_nor_macronix = {
.parts = macronix_nor_parts,
.nparts = ARRAY_SIZE(macronix_nor_parts),
.fixups = ¯onix_nor_fixups,
+ .flags = SPI_NOR_MANUFACT_TRY_SFDP,
};
--
2.39.5
© 2016 - 2024 Red Hat, Inc.