blob: 99000843b2d92d00222eff8f166c73ba7432d969 [file] [log] [blame]
developer41370d52022-03-16 16:01:59 +08001From c374839f9b4475173e536d1eaddff45cb481dbdf Mon Sep 17 00:00:00 2001
2From: Jaime Liao <jaimeliao@mxic.com.tw>
3Date: Thu, 20 May 2021 09:45:08 +0800
4Subject: [PATCH] mtd: spinand: macronix: Add support for serial NAND flash
5
6Macronix NAND Flash devices are available in different configurations
7and densities.
8
9MX"35" means SPI NAND
10MX35"LF"/"UF" , LF means 3V and UF meands 1.8V
11MX35LF"2G" , 2G means 2Gbits
12MX35LF2G"E4"/"24"/"14",
13E4 means internal ECC and Quad I/O(x4)
1424 means 8-bit ecc requirement and Quad I/O(x4)
1514 means 4-bit ecc requirement and Quad I/O(x4)
16
17MX35LF2G14AC is 3V 2Gbit serial NAND flash device
18(without on-die ECC)
19https://www.mxic.com.tw/Lists/Datasheet/Attachments/7926/MX35LF2G14AC,%203V,%202Gb,%20v1.1.pdf
20
21MX35UF4G24AD is 1.8V 4Gbit serial NAND flash device
22(without on-die ECC)
23https://www.mxic.com.tw/Lists/Datasheet/Attachments/7980/MX35UF4G24AD,%201.8V,%204Gb,%20v0.00.pdf
24
25MX35UF4GE4AD/MX35UF2GE4AD are 1.8V 4G/2Gbit serial
26NAND flash device with 8-bit on-die ECC
27https://www.mxic.com.tw/Lists/Datasheet/Attachments/7983/MX35UF4GE4AD,%201.8V,%204Gb,%20v0.00.pdf
28
29MX35UF2GE4AC/MX35UF1GE4AC are 1.8V 2G/1Gbit serial
30NAND flash device with 8-bit on-die ECC
31https://www.mxic.com.tw/Lists/Datasheet/Attachments/7974/MX35UF2GE4AC,%201.8V,%202Gb,%20v1.0.pdf
32
33MX35UF2G14AC/MX35UF1G14AC are 1.8V 2G/1Gbit serial
34NAND flash device (without on-die ECC)
35https://www.mxic.com.tw/Lists/Datasheet/Attachments/7931/MX35UF2G14AC,%201.8V,%202Gb,%20v1.1.pdf
36
37Validated via normal(default) and QUAD mode by read, erase, read back,
38on Xilinx Zynq PicoZed FPGA board which included Macronix
39SPI Host(drivers/spi/spi-mxic.c).
40
41Signed-off-by: Jaime Liao <jaimeliao@mxic.com.tw>
42Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
43Link: https://lore.kernel.org/linux-mtd/1621475108-22523-1-git-send-email-jaimeliao@mxic.com.tw
44---
45 drivers/mtd/nand/spi/macronix.c | 112 ++++++++++++++++++++++++++++++++
46 1 file changed, 112 insertions(+)
47
48diff --git a/drivers/mtd/nand/spi/macronix.c b/drivers/mtd/nand/spi/macronix.c
49index 6701aaa21a49df..a9890350db0293 100644
50--- a/drivers/mtd/nand/spi/macronix.c
51+++ b/drivers/mtd/nand/spi/macronix.c
52@@ -186,6 +186,118 @@ static const struct spinand_info macronix_spinand_table[] = {
53 0 /*SPINAND_HAS_QE_BIT*/,
54 SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
55 mx35lf1ge4ab_ecc_get_status)),
56+
57+ SPINAND_INFO("MX35LF2G14AC",
58+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x20),
59+ NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 2, 1, 1),
60+ NAND_ECCREQ(4, 512),
61+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
62+ &write_cache_variants,
63+ &update_cache_variants),
64+ SPINAND_HAS_QE_BIT,
65+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
66+ mx35lf1ge4ab_ecc_get_status)),
67+ SPINAND_INFO("MX35UF4G24AD",
68+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xb5),
69+ NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 2, 1, 1),
70+ NAND_ECCREQ(8, 512),
71+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
72+ &write_cache_variants,
73+ &update_cache_variants),
74+ SPINAND_HAS_QE_BIT,
75+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
76+ mx35lf1ge4ab_ecc_get_status)),
77+ SPINAND_INFO("MX35UF4GE4AD",
78+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xb7),
79+ NAND_MEMORG(1, 4096, 256, 64, 2048, 40, 1, 1, 1),
80+ NAND_ECCREQ(8, 512),
81+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
82+ &write_cache_variants,
83+ &update_cache_variants),
84+ SPINAND_HAS_QE_BIT,
85+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
86+ mx35lf1ge4ab_ecc_get_status)),
87+ SPINAND_INFO("MX35UF2G14AC",
88+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xa0),
89+ NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 2, 1, 1),
90+ NAND_ECCREQ(4, 512),
91+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
92+ &write_cache_variants,
93+ &update_cache_variants),
94+ SPINAND_HAS_QE_BIT,
95+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
96+ mx35lf1ge4ab_ecc_get_status)),
97+ SPINAND_INFO("MX35UF2G24AD",
98+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xa4),
99+ NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 2, 1, 1),
100+ NAND_ECCREQ(8, 512),
101+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
102+ &write_cache_variants,
103+ &update_cache_variants),
104+ SPINAND_HAS_QE_BIT,
105+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
106+ mx35lf1ge4ab_ecc_get_status)),
107+ SPINAND_INFO("MX35UF2GE4AD",
108+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xa6),
109+ NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1),
110+ NAND_ECCREQ(8, 512),
111+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
112+ &write_cache_variants,
113+ &update_cache_variants),
114+ SPINAND_HAS_QE_BIT,
115+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
116+ mx35lf1ge4ab_ecc_get_status)),
117+ SPINAND_INFO("MX35UF2GE4AC",
118+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xa2),
119+ NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 1, 1, 1),
120+ NAND_ECCREQ(4, 512),
121+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
122+ &write_cache_variants,
123+ &update_cache_variants),
124+ SPINAND_HAS_QE_BIT,
125+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
126+ mx35lf1ge4ab_ecc_get_status)),
127+ SPINAND_INFO("MX35UF1G14AC",
128+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x90),
129+ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
130+ NAND_ECCREQ(4, 512),
131+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
132+ &write_cache_variants,
133+ &update_cache_variants),
134+ SPINAND_HAS_QE_BIT,
135+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
136+ mx35lf1ge4ab_ecc_get_status)),
137+ SPINAND_INFO("MX35UF1G24AD",
138+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x94),
139+ NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1),
140+ NAND_ECCREQ(8, 512),
141+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
142+ &write_cache_variants,
143+ &update_cache_variants),
144+ SPINAND_HAS_QE_BIT,
145+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
146+ mx35lf1ge4ab_ecc_get_status)),
147+ SPINAND_INFO("MX35UF1GE4AD",
148+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x96),
149+ NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1),
150+ NAND_ECCREQ(8, 512),
151+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
152+ &write_cache_variants,
153+ &update_cache_variants),
154+ SPINAND_HAS_QE_BIT,
155+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
156+ mx35lf1ge4ab_ecc_get_status)),
157+ SPINAND_INFO("MX35UF1GE4AC",
158+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x92),
159+ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
160+ NAND_ECCREQ(4, 512),
161+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
162+ &write_cache_variants,
163+ &update_cache_variants),
164+ SPINAND_HAS_QE_BIT,
165+ SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout,
166+ mx35lf1ge4ab_ecc_get_status)),
167+
168 };
169
170 static const struct spinand_manufacturer_ops macronix_spinand_manuf_ops = {