Add device ID info and fixups to support Infineon CYRS17B512 flash. Although this flash has untypical features such as dummy cycles in RDID, inverted erase polarity, larger program page size with automatic page erase, and larger sector size, it supports basic flash commands including SFDP. Link: https://www.infineon.com/dgdl/Infineon-CYRS17B512_512_MB_64_MB_SERIAL_NOR_FLASH_SPI_QSPI_3-DataSheet-v07_00-EN.pdf?fileId=8ac78c8c8fc2dd9c01900eee733d45f3 Signed-off-by: Takahiro Kuwano <Takahiro.Kuwano@xxxxxxxxxxxx> --- Tested on Xilinx Zynq-7000 board and Infineon internal SPI controller. zynq> cat /sys/bus/spi/devices/spi0.0/spi-nor/jedec_id c1601a zynq> cat /sys/bus/spi/devices/spi0.0/spi-nor/manufacturer spansion zynq> xxd -p /sys/bus/spi/devices/spi0.0/spi-nor/sfdp 53464450080102ff00080114000300ff84080102500300ff8700011c5803 00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffff7ffe2ffffffff1f48eb086b fffffffffeffffffffffffffffff48eb142017d800ff00ffa028fdffb73f 84a2e0fb1fc4ffff7a75f7ffffff22f65dfff050f8a10000000000002c00 00000000f6fffffff30600fe21dcffff0000800000000000c0ffc3ebc0ff c3eb00650090066500b1006501950065019671650494716504d000000000 b02e000088a489aa71650393716503930000000000000000000000000000 0000000000000000000000000000000000000000000000000000716503d4 716503d400002020 zynq> md5sum /sys/bus/spi/devices/spi0.0/spi-nor/sfdp a2fec0f47c5aa119e21c3d50a173e2ba /sys/bus/spi/devices/spi0.0/spi-nor/sfdp zynq> cat /sys/kernel/debug/spi-nor/spi0.0/capabilities Supported read modes by the flash 1S-1S-1S opcode 0x13 mode cycles 0 dummy cycles 0 1S-1S-1S (fast read) opcode 0x0c mode cycles 8 dummy cycles 8 1S-1S-4S opcode 0x6c mode cycles 0 dummy cycles 8 1S-4S-4S opcode 0xec mode cycles 2 dummy cycles 8 4S-4S-4S opcode 0xec mode cycles 2 dummy cycles 8 Supported page program modes by the flash 1S-1S-1S opcode 0x12 1S-1S-4S opcode 0x34 zynq> cat /sys/kernel/debug/spi-nor/spi0.0/params name (null) id c1 60 1a 00 00 00 size 64.0 MiB write size 1 page size 2048 address nbytes 4 flags 4B_OPCODES | HAS_4BAIT | HAS_16BIT_SR | SOFT_RESET opcodes read 0xec dummy cycles 10 erase 0xdc program 0x34 8D extension repeat protocols read 1S-4S-4S write 1S-1S-4S register 1S-1S-1S erase commands 21 (1.00 MiB) [2] dc (8.00 MiB) [3] c7 (64.0 MiB) sector map region (in hex) | erase mask | overlaid ------------------+------------+---------- 00000000-03ffffff | [ 3] | no zynq> mtd_debug info /dev/mtd0 mtd.type = MTD_NORFLASH mtd.flags = MTD_CAP_NORFLASH mtd.size = 67108864 (64M) mtd.erasesize = 8388608 (8M) mtd.writesize = 1 mtd.oobsize = 0 regions = 0 zynq> ./test_spi_cyrs17b512.sh 8+0 records in 8+0 records out 8388608 bytes (8.0MB) copied, 0.308282 seconds, 26.0MB/s Erased 8388608 bytes from address 0x00000000 in flash Copied 8388608 bytes from address 0x00000000 in flash to spi_read 0000000 0000 0000 0000 0000 0000 0000 0000 0000 * 0800000 2daeb1f36095b44b318410b3f4e8b5d989dcc7bb023d1426c492dab0a3053e74 spi_read Copied 8388608 bytes from spi_test to address 0x00000000 in flash Copied 8388608 bytes from address 0x00000000 in flash to spi_read 8f8842585053d5200d7d80bc766dcf8bbe9f4fea08499c576f67ed631050b6c3 spi_read 8f8842585053d5200d7d80bc766dcf8bbe9f4fea08499c576f67ed631050b6c3 spi_test Erased 8388608 bytes from address 0x00000000 in flash Copied 8388608 bytes from address 0x00000000 in flash to spi_read 2daeb1f36095b44b318410b3f4e8b5d989dcc7bb023d1426c492dab0a3053e74 spi_read 8f8842585053d5200d7d80bc766dcf8bbe9f4fea08499c576f67ed631050b6c3 spi_test --- drivers/mtd/spi-nor/spansion.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/drivers/mtd/spi-nor/spansion.c b/drivers/mtd/spi-nor/spansion.c index bf08dbf5e7421f8725a9931e36acaf3f7348db42..5c9588b02b7e61f1b64e5dc61e5c1f976ac58508 100644 --- a/drivers/mtd/spi-nor/spansion.c +++ b/drivers/mtd/spi-nor/spansion.c @@ -758,6 +758,18 @@ static const struct spi_nor_fixups s25fs_s_nor_fixups = { .post_bfpt = s25fs_s_nor_post_bfpt_fixups, }; +static int cyrs17b_late_init(struct spi_nor *nor) +{ + /* Fast Read requires mode cycles */ + nor->params->reads[SNOR_CMD_READ_FAST].num_mode_clocks = 8; + + return 0; +} + +static const struct spi_nor_fixups cyrs17b_fixups = { + .late_init = cyrs17b_late_init, +}; + static const struct flash_info spansion_nor_parts[] = { { .id = SNOR_ID(0x01, 0x02, 0x12), @@ -996,6 +1008,11 @@ static const struct flash_info spansion_nor_parts[] = { .name = "s28hs02gt", .mfr_flags = USE_CLPEF, .fixups = &s28hx_t_fixups, + }, { + /* cyrs17b512 */ + .id = SNOR_ID(0xc1, 0x60, 0x1a), + .mfr_flags = USE_CLSR, + .fixups = &cyrs17b_fixups }, { .id = SNOR_ID(0xef, 0x40, 0x13), .name = "s25fl004k", -- 2.34.1