blob: 1eb6595eb0804338a3dcc1b11b94f884edd8b308 [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001#include <common.h>
2#include <malloc.h>
3#include <linux/mtd/mtd.h>
4#include <asm-generic/errno.h>
5#ifdef CONFIG_BBM
6#include <mtd/pxa3xx_bbm.h>
7#include <linux/mtd/bbm.h>
8#include <linux/mtd/nand.h>
9#include <ubi_uboot.h>
10#endif
11#include <spi_flash_chip.h>
12#include <spi_nor.h>
13
14enum normal_cmd {
15 ENABLE_4BYTE,
16 DISABLE_4BYTE,
17 READ_STATUS1,
18 READ_STATUS2,
19 READ_STATUS3,
20 READ_STATUS2_MXIC,
21 WRITE_STATUS,
22 WRITE_STATUS2,
23 READ_SLOW,
24 READ_FAST,
25 READ_FAST_X2,
26 READ_FAST_X4,
27 READ_FAST_DUAL,
28 READ_FAST_QUAD,
29 SECTOR_ERASE_4K,
30 BLK_ERASE_32K,
31 BLK_ERASE_64K,
32 CHIP_ERASE,
33 PROG,
34 PROG_X4,
35 PROG_X4_MXIC,
36 WR_ENABLE,
37 WR_DISABLE,
38 READ_ID,
39 ENABLE_QPI,
40 ENABLE_QPI_MXIC,
41 PGM_ERS_SUSPEND,
42 PGM_ERS_RESUME,
43 PGM_ERS_SUSPEND_MXIC,
44 PGM_ERS_RESUME_MXIC,
45 EN_RST,
46 RESET,
47 MAX_CMD,
48};
49
50enum qspi_cmd {
51 ENABLE_4BYTE_QPI,
52 DISABLE_4BYTE_QPI,
53 READ_STATUS1_QPI,
54 READ_STATUS2_QPI,
55 READ_STATUS3_QPI,
56 READ_STATUS2_MXIC_QPI,
57 WRITE_STATUS_QPI,
58 WRITE_STATUS2_QPI,
59 READ_FAST_QPI,
60 READ_FAST_QUAD_QPI,
61 SECTOR_ERASE_4K_QPI,
62 BLK_ERASE_32K_QPI,
63 BLK_ERASE_64K_QPI,
64 CHIP_ERASE_QPI,
65 PROG_QPI,
66 WR_ENABLE_QPI,
67 WR_DISABLE_QPI,
68 READ_ID_QPI,
69 READ_QPIID,
70 DISABLE_QPI,
71 DISABLE_QPI_MXIC,
72 SET_READ_PARA_QPI,
73 PGM_ERS_SUSPEND_QPI,
74 PGM_ERS_RESUME_QPI,
75 PGM_ERS_SUSPEND_MXIC_QPI,
76 PGM_ERS_RESUME_MXIC_QPI,
77 EN_RST_QPI,
78 RESET_QPI,
79 MAX_CMD_QPI,
80};
81
82static struct spi_nor_info spi_nor_table[] = {
83 /* Macronix */
84 SPI_NOR_INFO("MX25U25643G", 0xC2, 0x2539, 256, 256, 32*1024*1024,
85 SPINOR_QE_USE_BIT6, 0,
86 READ_FAST_X4),
87 SPI_NOR_INFO("MX25U12835", 0xC2, 0x2538, 256, 256, 16*1024*1024,
88 SPINOR_QE_USE_BIT6, 0,
89 READ_FAST_X4),
90 SPI_NOR_INFO("MX25U3273", 0xC2, 0x2536, 256, 256, 4*1024*1024,
91 SPINOR_QE_USE_BIT6 | SPINOR_WRITE_STATUS1_1BYTE, 0,
92 READ_FAST_X4),
93
94 /* GigaDeivce */
95 SPI_NOR_INFO("GD25LQ256C", 0xC8, 0x6019, 256, 256, 32*1024*1024, 0, 0,
96 READ_FAST_QUAD),
97 SPI_NOR_INFO("GD25LQ128D", 0xC8, 0x6018, 256, 256, 16*1024*1024, 0, 0,
98 READ_FAST_QUAD),
99 SPI_NOR_INFO("GD25LQ64C", 0xC8, 0x6017, 256, 256, 8*1024*1024, 0, 0,
100 READ_FAST_QUAD),
101 SPI_NOR_INFO("GD25LE32E", 0xC8, 0x6016, 256, 256, 4*1024*1024, 0, 0,
102 READ_FAST_QUAD),
103
104 /* Winbond */
105 SPI_NOR_INFO("W25Q256JW", 0xEF, 0x6019, 256, 256, 32*1024*1024, 0, 0,
106 READ_FAST_QUAD),
107 SPI_NOR_INFO("W25Q256JW-IM*", 0xEF, 0x8019, 256, 256, 32*1024*1024, 0, 0,
108 READ_FAST_QUAD),
109 SPI_NOR_INFO("W25Q128JW", 0xEF, 0x6018, 256, 256, 16*1024*1024, 0, 0,
110 READ_FAST_QUAD),
111 SPI_NOR_INFO("W25Q64FW", 0xEF, 0x6017, 256, 256, 8*1024*1024, 0, 0,
112 READ_FAST_QUAD),
113
114 /* Dosilicon */
115 SPI_NOR_INFO("FM25M4AA", 0xF8, 0x4218, 256, 256, 16*1024*1024, 0, 0,
116 READ_FAST_X4),
117
118 /* DouQi */
119 SPI_NOR_INFO("DQ25Q128AL", 0x54, 0x6018, 256, 256, 16*1024*1024,
120 SPINOR_HAVE_WRITE_STATUS2, 0,
121 READ_FAST_X4),
122
123 /* Puya */
124 SPI_NOR_INFO("P25Q128L", 0x85, 0x6018, 256, 256, 16*1024*1024,
125 SPINOR_HAVE_WRITE_STATUS2, 78,
126 READ_FAST_QUAD),
127 SPI_NOR_INFO("P25Q64LE", 0x85, 0x6017, 256, 256, 8*1024*1024,
128 SPINOR_HAVE_WRITE_STATUS2, 0,
129 READ_FAST_QUAD),
130 SPI_NOR_INFO("P25Q32SL", 0x85, 0x6016, 256, 256, 4*1024*1024,
131 SPINOR_HAVE_WRITE_STATUS2, 0,
132 READ_FAST_QUAD),
133 SPI_NOR_INFO("P25Q128LA", 0x85, 0x6518, 256, 256, 16*1024*1024,
134 SPINOR_HAVE_WRITE_STATUS2 | SPINOR_WRITE_STATUS1_1BYTE, 0,
135 READ_FAST_QUAD),
136
137 /* ZettaDevice */
138 SPI_NOR_INFO("ZD25Q128", 0xBA, 0x4218, 256, 256, 16*1024*1024, 0, 0,
139 READ_FAST_QUAD),
140
141 /* Wuhan XinXin */
142 SPI_NOR_INFO("XM25QU64B", 0x20, 0x5017, 256, 256, 8*1024*1024,
143 SPINOR_QE_USE_BIT6 | SPINOR_WRITE_STATUS1_1BYTE, 0,
144 READ_FAST_X4),
145 SPI_NOR_INFO("XM25QU64C", 0x20, 0x4117, 256, 256, 8*1024*1024,
146 0, 0,
147 READ_FAST_X4),
148 SPI_NOR_INFO("XM25QU128B", 0x20, 0x5018, 256, 256, 16*1024*1024,
149 SPINOR_QE_USE_BIT6 | SPINOR_WRITE_STATUS1_1BYTE, 0,
150 READ_FAST_X4),
151 SPI_NOR_INFO("XM25QU128C", 0x20, 0x4118, 256, 256, 16*1024*1024,
152 0, 0,
153 READ_FAST_X4),
154 SPI_NOR_INFO("XM25QU256B", 0x20, 0x7019, 256, 256, 32*1024*1024,
155 SPINOR_QE_USE_BIT6 | SPINOR_WRITE_STATUS1_1BYTE, 0,
156 READ_FAST_X4),
157 SPI_NOR_INFO("XM25LU32C", 0x20, 0x5016, 256, 256, 4*1024*1024,
158 0, 0,
159 READ_FAST_X4),
160
161 /* Fudan Microelectronics */
162 SPI_NOR_INFO("FM25W128", 0xA1, 0x2818, 256, 256, 16*1024*1024,
163 SPINOR_HAVE_WRITE_STATUS2, 52,
164 READ_FAST_X4),
165
166 /* Zbit Semiconductor */
167 SPI_NOR_INFO("ZB25LQ64A", 0x5E, 0x7017, 256, 256, 8*1024*1024,
168 0, 0, READ_FAST_QUAD),
169 SPI_NOR_INFO("ZB25LQ128", 0x5E, 0x5018, 256, 256, 16*1024*1024,
170 SPINOR_HAVE_WRITE_STATUS2, 0,
171 READ_FAST_QUAD),
172
173 /* XTX */
174 SPI_NOR_INFO("XT25Q128D", 0x0B, 0x6018, 256, 256, 16*1024*1024,
175 SPINOR_HAVE_WRITE_STATUS2 | SPINOR_WRITE_STATUS1_1BYTE, 0,
176 READ_FAST_QUAD),
177
178 /* Elite */
179 SPI_NOR_INFO("EN25SX128A", 0x1c, 0x7818, 256, 256, 16*1024*1024,
180 SPINOR_HAVE_WRITE_STATUS2 | SPINOR_WRITE_STATUS1_1BYTE, 0,
181 READ_FAST_X4),
182
183 /* Silicon Kaiser */
184 SPI_NOR_INFO("SK25LP128", 0x17, 0x7018, 256, 256, 16*1024*1024,
185 SPINOR_QE_USE_BIT6 | SPINOR_WRITE_STATUS1_1BYTE, 0,
186 READ_FAST_X4),
187 {.name = NULL},
188};
189
190/**
191 * spi_nor_scan_id_table - scan chip info in id table
192 * @chip: SPI-NOR device structure
193 * Description:
194 * If found in id table, config chip with table information.
195 */
196static int spi_nor_scan_id_table(struct spi_flash_chip *chip)
197{
198 struct spi_nor_info *type = spi_nor_table;
199
200 for (; type->name; type++) {
201 if (chip->mfr_id == type->mfr_id && chip->dev_id == type->dev_id) {
202 chip->name = type->name;
203 chip->size = type->total_size;
204 chip->block_size = type->page_size
205 * type->pages_per_blk;
206 chip->page_size = type->page_size;
207 chip->options = type->options;
208 chip->max_mhz = type->max_mhz;
209 chip->flash_info = type;
210 pr_info("SPI-NOR: %s is found in table\r\n",
211 type->name);
212 return true;
213 }
214 }
215
216 return false;
217}
218
219/* Standard SPI-NOR flash normal commands */
220static struct spi_flash_cmd_cfg cmd_table[] = {
221 /*opcode addr_bytes addr_pins mode_bits mode_pins dummy_cycles
222 dummy_pins data_pins seq_id cmd_type */
223 [ENABLE_4BYTE] = SPI_CMD(0xb7, 0, 0, 0, 0, 0, 0, 0, -1, 0),
224 [DISABLE_4BYTE] = SPI_CMD(0xe9, 0, 0, 0, 0, 0, 0, 0, -1, 0),
225 [READ_STATUS1] = SPI_CMD(0x05, 0, 0, 0, 0, 0, 0, 1, 2, 1),
226 [READ_STATUS2] = SPI_CMD(0x35, 0, 0, 0, 0, 0, 0, 1, -1, 1),
227 [READ_STATUS3] = SPI_CMD(0x15, 0, 0, 0, 0, 0, 0, 1, -1, 1),
228 [WRITE_STATUS] = SPI_CMD(0x01, 0, 0, 0, 0, 0, 0, 1, -1, 2),
229 [WRITE_STATUS2] = SPI_CMD(0x31, 0, 0, 0, 0, 0, 0, 1, -1, 2),
230 [READ_SLOW] = SPI_CMD(0x03, 3, 1, 0, 0, 0, 0, 1, -1, 1),
231 [READ_FAST] = SPI_CMD(0x0b, 3, 1, 0, 0, 8, 1, 1, 3, 1),
232 [READ_FAST_X2] = SPI_CMD(0x3b, 3, 1, 0, 0, 8, 1, 2, -1, 1),
233 [READ_FAST_X4] = SPI_CMD(0x6b, 3, 1, 0, 0, 8, 1, 4, 4, 1),
234 [READ_FAST_DUAL] = SPI_CMD(0xbb, 3, 2, 8, 2, 0, 0, 2, -1, 1),
235 [READ_FAST_QUAD] = SPI_CMD(0xeb, 3, 4, 8, 4, 4, 4, 4, 5, 1),
236 [SECTOR_ERASE_4K] = SPI_CMD(0x20, 3, 1, 0, 0, 0, 0, 0, -1, 0),
237 [BLK_ERASE_32K] = SPI_CMD(0x52, 3, 1, 0, 0, 0, 0, 0, -1, 0),
238 [BLK_ERASE_64K] = SPI_CMD(0xd8, 3, 1, 0, 0, 0, 0, 0, -1, 0),
239 [CHIP_ERASE] = SPI_CMD(0xc7, 0, 0, 0, 0, 0, 0, 0, -1, 0),
240 [PROG] = SPI_CMD(0x02, 3, 1, 0, 0, 0, 0, 1, 6, 2),
241 [PROG_X4] = SPI_CMD(0x32, 3, 1, 0, 0, 0, 0, 4, 7, 2),
242 [WR_ENABLE] = SPI_CMD(0x06, 0, 0, 0, 0, 0, 0, 0, -1, 0),
243 [WR_DISABLE] = SPI_CMD(0x04, 0, 0, 0, 0, 0, 0, 0, -1, 0),
244 [READ_ID] = SPI_CMD(0x9f, 0, 0, 0, 0, 0, 0, 1, -1, 1),
245 [ENABLE_QPI] = SPI_CMD(0x38, 0, 0, 0, 0, 0, 0, 0, -1, 0),
246 [PGM_ERS_SUSPEND] = SPI_CMD(0x75, 0, 0, 0, 0, 0, 0, 0, -1, 0),
247 [PGM_ERS_RESUME] = SPI_CMD(0x7a, 0, 0, 0, 0, 0, 0, 0, -1, 0),
248 [EN_RST] = SPI_CMD(0x66, 0, 0, 0, 0, 0, 0, 0, -1, 0),
249 [RESET] = SPI_CMD(0x99, 0, 0, 0, 0, 0, 0, 0, -1, 0),
250
251 /* Vendor specific command */
252 [READ_STATUS2_MXIC] = SPI_CMD(0x15, 0, 0, 0, 0, 0, 0, 1, -1, 1),
253 [PROG_X4_MXIC] = SPI_CMD(0x38, 3, 4, 0, 0, 0, 0, 4, 8, 2),
254 [ENABLE_QPI_MXIC] = SPI_CMD(0x35, 0, 0, 0, 0, 0, 0, 0, -1, 0),
255 [PGM_ERS_SUSPEND_MXIC] = SPI_CMD(0xb0, 0, 0, 0, 0, 0, 0, 0, -1, 0),
256 [PGM_ERS_RESUME_MXIC] = SPI_CMD(0x30, 0, 0, 0, 0, 0, 0, 0, -1, 0),
257
258 /* END Mark */
259 [MAX_CMD] = SPI_CMD(0x00, 0, 0, 0, 0, 0, 0, 0, -1, 0),
260};
261
262#ifdef QSPINOR_ENABLE_QPI_MODE
263/* Standard SPI-NOR flash QPI commands */
264static struct spi_flash_cmd_cfg cmd_table_qpi[] = {
265 /*opcode addr_bytes addr_pins mode_bits mode_pins dummy_cycles
266 dummy_pins data_pins seq_id cmd_type */
267 [ENABLE_4BYTE_QPI] = SPI_CMD(0xb7, 0, 0, 0, 0, 0, 0, 0, -1, 0),
268 [DISABLE_4BYTE_QPI] = SPI_CMD(0xe9, 0, 0, 0, 0, 0, 0, 0, -1, 0),
269 [READ_STATUS1_QPI] = SPI_CMD(0x05, 0, 0, 0, 0, 0, 0, 4, 2, 1),
270 [READ_STATUS2_QPI] = SPI_CMD(0x35, 0, 0, 0, 0, 0, 0, 4, -1, 1),
271 [READ_STATUS3_QPI] = SPI_CMD(0x11, 0, 0, 0, 0, 0, 0, 4, -1, 1),
272 [WRITE_STATUS_QPI] = SPI_CMD(0x01, 0, 0, 0, 0, 0, 0, 4, -1, 2),
273 [WRITE_STATUS2_QPI] = SPI_CMD(0x31, 0, 0, 0, 0, 0, 0, 4, -1, 2),
274 [READ_FAST_QPI] = SPI_CMD(0x0b, 3, 4, 0, 0, 8, 4, 4, 3, 1),
275 [READ_FAST_QUAD_QPI] = SPI_CMD(0xeb, 3, 4, 0, 0, 8, 4, 4, 4, 1),
276 [SECTOR_ERASE_4K_QPI] = SPI_CMD(0x20, 3, 4, 0, 0, 0, 0, 0, -1, 0),
277 [BLK_ERASE_32K_QPI] = SPI_CMD(0x52, 3, 4, 0, 0, 0, 0, 0, -1, 0),
278 [BLK_ERASE_64K_QPI] = SPI_CMD(0xd8, 3, 4, 0, 0, 0, 0, 0, -1, 0),
279 [CHIP_ERASE_QPI] = SPI_CMD(0xc7, 0, 0, 0, 0, 0, 0, 0, -1, 0),
280 [PROG_QPI] = SPI_CMD(0x02, 3, 4, 0, 0, 0, 0, 4, 5, 2),
281 [WR_ENABLE_QPI] = SPI_CMD(0x06, 0, 0, 0, 0, 0, 0, 0, -1, 0),
282 [WR_DISABLE_QPI] = SPI_CMD(0x04, 0, 0, 0, 0, 0, 0, 0, -1, 0),
283 [READ_ID_QPI] = SPI_CMD(0x9f, 0, 0, 0, 0, 0, 0, 4, -1, 1),
284 [READ_QPIID] = SPI_CMD(0xaf, 0, 0, 0, 0, 0, 0, 4, -1, 1),
285 [DISABLE_QPI] = SPI_CMD(0xff, 0, 0, 0, 0, 0, 0, 0, -1, 0),
286 [SET_READ_PARA_QPI] = SPI_CMD(0xc0, 0, 0, 0, 0, 0, 0, 4, -1, 2),
287 [PGM_ERS_SUSPEND_QPI] = SPI_CMD(0x75, 0, 0, 0, 0, 0, 0, 0, -1, 0),
288 [PGM_ERS_RESUME_QPI] = SPI_CMD(0x7a, 0, 0, 0, 0, 0, 0, 0, -1, 0),
289 [EN_RST_QPI] = SPI_CMD(0x66, 0, 0, 0, 0, 0, 0, 0, -1, 0),
290 [RESET_QPI] = SPI_CMD(0x99, 0, 0, 0, 0, 0, 0, 0, -1, 0),
291
292 /* Vendor specific command */
293 [READ_STATUS2_MXIC_QPI] = SPI_CMD(0x15, 0, 0, 0, 0, 0, 0, 4, -1, 1),
294 [DISABLE_QPI_MXIC] = SPI_CMD(0xf5, 0, 0, 0, 0, 0, 0, 0, -1, 0),
295 [PGM_ERS_SUSPEND_MXIC_QPI]= SPI_CMD(0xb0, 0, 0, 0, 0, 0, 0, 0, -1, 0),
296 [PGM_ERS_RESUME_MXIC_QPI]= SPI_CMD(0x30, 0, 0, 0, 0, 0, 0, 0, -1, 0),
297
298 /* END Mark */
299 [MAX_CMD_QPI] = SPI_CMD(0x00, 0, 0, 0, 0, 0, 0, 0, -1, 0),
300};
301#endif
302
303/**
304 * spi_nor_read_id - send 9Fh command to get ID
305 * @chip: SPI_FLASH device structure
306 * @buf: buffer to store id
307 */
308static int spi_nor_read_id(struct spi_flash_chip *chip, u8 *buf)
309{
310 struct spi_flash_cmd cmd;
311
312 memset(&cmd, 0, sizeof(struct spi_flash_cmd));
313 if (chip->qpi_enabled)
314 cmd.cmd_cfg = chip->table + READ_ID_QPI;
315 else
316 cmd.cmd_cfg = chip->table + READ_ID;
317 cmd.n_rx = 3;
318 cmd.rx_buf = buf;
319
320 return chip->issue_cmd(chip, &cmd);
321}
322
323static int spi_nor_read_qpiid(struct spi_flash_chip *chip, u8 *buf)
324{
325 struct spi_flash_cmd cmd;
326
327 if (!chip->qpi_enabled) {
328 pr_info("err: not in qpi mode\n");
329 return -1;
330 }
331
332 memset(&cmd, 0, sizeof(struct spi_flash_cmd));
333 cmd.cmd_cfg = chip->table + READ_QPIID;
334 cmd.n_rx = 3;
335 cmd.rx_buf = buf;
336
337 return chip->issue_cmd(chip, &cmd);
338}
339
340/**
341 * spi_nor_reset - send command to reset chip.
342 * @chip: SPI_FLASH device structure
343 */
344static int spi_nor_reset(struct spi_flash_chip *chip)
345{
346 struct spi_flash_cmd cmd;
347
348 memset(&cmd, 0, sizeof(struct spi_flash_cmd));
349 if (chip->qpi_enabled)
350 cmd.cmd_cfg = chip->table + EN_RST_QPI;
351 else
352 cmd.cmd_cfg = chip->table + EN_RST;
353 if (chip->issue_cmd(chip, &cmd) < 0)
354 pr_info("spi_nor enable reset failed!\n");
355
356 if (chip->qpi_enabled)
357 cmd.cmd_cfg = chip->table + RESET_QPI;
358 else
359 cmd.cmd_cfg = chip->table + RESET;
360 if (chip->issue_cmd(chip, &cmd) < 0)
361 pr_info("spi_nor reset failed!\n");
362
363 /* elapse 2ms before issuing any other command */
364 udelay(2000);
365 return 0;
366}
367
368/**
369 * spi_nor_write_enable - send command 06h to enable write or erase the
370 * Nand cells
371 * @chip: SPI_FLASH device structure
372 * Description:
373 * Before write and erase the Nand cells, the write enable has to be set.
374 * After the write or erase, the write enable bit is automatically
375 * cleared (status register bit 2)
376 * Set the bit 2 of the status register has the same effect
377 */
378static int spi_nor_write_enable(struct spi_flash_chip *chip)
379{
380 struct spi_flash_cmd cmd;
381
382 memset(&cmd, 0, sizeof(struct spi_flash_cmd));
383 if (chip->qpi_enabled)
384 cmd.cmd_cfg = chip->table + WR_ENABLE_QPI;
385 else
386 cmd.cmd_cfg = chip->table + WR_ENABLE;
387
388 return chip->issue_cmd(chip, &cmd);
389}
390
391/**
392 * spi_nor_read_status - get status register value
393 * @chip: SPI_FLASH device structure
394 * @status: buffer to store value
395 * Description:
396 * After read, write, or erase, the Nand device is expected to set the
397 * busy status.
398 * This function is to allow reading the status of the command: read,
399 * write, and erase.
400 * Once the status turns to be ready, the other status bits also are
401 * valid status bits.
402 */
403static int spi_nor_read_status(struct spi_flash_chip *chip, u8 index,
404 u8 *status)
405{
406 struct spi_flash_cmd cmd;
407 int ret;
408
409 memset(&cmd, 0, sizeof(struct spi_flash_cmd));
410 cmd.cmd_cfg = chip->table + index;
411 cmd.n_rx = 1;
412 cmd.rx_buf = status;
413
414 ret = chip->issue_cmd(chip, &cmd);
415 if (ret < 0)
416 pr_info("err: read register %d\n", ret);
417
418 return ret;
419}
420
421static int spi_nor_read_status1(struct spi_flash_chip *chip, u8 *status)
422{
423 u8 cmd_index;
424
425 if (chip->qpi_enabled)
426 cmd_index = READ_STATUS1_QPI;
427 else
428 cmd_index = READ_STATUS1;
429
430 return spi_nor_read_status(chip, cmd_index, status);
431}
432
433static int spi_nor_read_status2(struct spi_flash_chip *chip, u8 *status)
434{
435 u8 cmd_index;
436
437 if (chip->mfr_id == SPIFLASH_MFR_MXIC) {
438 /* Not support SPINOR_CMD_READ_STATUS2 for 32MB spi-nor */
439 if (chip->dev_id == 0x2536)
440 return 0;
441
442 if (chip->qpi_enabled)
443 cmd_index = READ_STATUS2_MXIC_QPI;
444 else
445 cmd_index = READ_STATUS2_MXIC;
446 } else {
447 if (chip->qpi_enabled)
448 cmd_index = READ_STATUS2_QPI;
449 else
450 cmd_index = READ_STATUS2;
451 }
452
453 return spi_nor_read_status(chip, cmd_index, status);
454}
455
456static int spi_nor_read_status3(struct spi_flash_chip *chip, u8 *status)
457{
458 u8 cmd_index;
459
460 if (chip->qpi_enabled)
461 cmd_index = READ_STATUS3_QPI;
462 else
463 cmd_index = READ_STATUS3;
464
465 return spi_nor_read_status(chip, cmd_index, status);
466}
467
468/**
469 * spi_nor_write_reg - send command 1Fh to write register
470 * @chip: SPI_FLASH device structure
471 * @reg; register to write
472 * @buf: buffer stored value
473 */
474/**
475 * spi_nor_write_reg - send command 1Fh to write register
476 * @chip: SPI_FLASH device structure
477 * @reg; register to write
478 * @buf: buffer stored value
479 */
480static int spi_nor_write_status1(struct spi_flash_chip *chip, u8 *buf, u8 count)
481{
482 struct spi_flash_cmd cmd;
483 int ret;
484
485 memset(&cmd, 0, sizeof(struct spi_flash_cmd));
486 if (chip->qpi_enabled)
487 cmd.cmd_cfg = chip->table + WRITE_STATUS_QPI;
488 else
489 cmd.cmd_cfg = chip->table + WRITE_STATUS;
490
491 cmd.n_tx = count;
492 cmd.tx_buf = buf;
493
494 ret = chip->issue_cmd(chip, &cmd);
495 if (ret < 0)
496 pr_info("err: %d write status\n", ret);
497
498 return ret;
499}
500
501static int spi_nor_write_status2(struct spi_flash_chip *chip, u8 *buf)
502{
503 struct spi_flash_cmd cmd;
504 int ret;
505
506 memset(&cmd, 0, sizeof(struct spi_flash_cmd));
507 if (chip->qpi_enabled)
508 cmd.cmd_cfg = chip->table + WRITE_STATUS2_QPI;
509 else
510 cmd.cmd_cfg = chip->table + WRITE_STATUS2;
511
512 cmd.n_tx = 1;
513 cmd.tx_buf = buf;
514
515 ret = chip->issue_cmd(chip, &cmd);
516 if (ret < 0)
517 pr_info("err: %d write status2\n", ret);
518
519 return ret;
520}
521
522/**
523 * spi_nor_wait - wait until the command is done
524 * @chip: SPI_FLASH device structure
525 * @s: buffer to store status register(can be NULL)
526 */
527static int spi_nor_wait(struct spi_flash_chip *chip, u8 *s)
528{
529 u8 status;
530 unsigned long ret = -ETIMEDOUT;
531
532 while (1) {
533 spi_nor_read_status1(chip, &status);
534 if ((status & STATUS_OIP_MASK) == STATUS_READY) {
535 ret = 0;
536 goto out;
537 }
538 }
539out:
540 if (s)
541 *s = status;
542 return ret;
543}
544
545/**
546 * spi_nor_erase_block_erase - send command D8h to erase a block
547 * @chip: SPI_FLASH device structure
548 * @addr: the flash addr to erase.
549 * Description:
550 * Need to wait for tERS.
551 */
552static int spi_nor_erase_sector(struct spi_flash_chip *chip,
553 u32 addr)
554{
555 struct spi_flash_cmd cmd;
556
557 memset(&cmd, 0, sizeof(struct spi_flash_cmd));
558 if (chip->qpi_enabled)
559 cmd.cmd_cfg = chip->table + SECTOR_ERASE_4K_QPI;
560 else
561 cmd.cmd_cfg = chip->table + SECTOR_ERASE_4K;
562
563 if (chip->en_addr_4byte) {
564 cmd.n_addr = 4;
565 cmd.addr[0] = (u8)(addr >> 24);
566 cmd.addr[1] = (u8)(addr >> 16);
567 cmd.addr[2] = (u8)(addr >> 8);
568 cmd.addr[3] = (u8)addr;
569 } else {
570 cmd.n_addr = 3;
571 cmd.addr[0] = (u8)(addr >> 16);
572 cmd.addr[1] = (u8)(addr >> 8);
573 cmd.addr[2] = (u8)addr;
574 }
575 cmd.flag = RST_AHB_DOMAIN;
576
577 return chip->issue_cmd(chip, &cmd);
578}
579
580/**
581 * spi_nor_erase_block_erase - send command D8h to erase a block
582 * @chip: SPI_FLASH device structure
583 * @addr: the flash addr to erase.
584 * Description:
585 * Need to wait for tERS.
586 */
587static int spi_nor_erase_block(struct spi_flash_chip *chip, u32 addr, u8 opcode)
588{
589 struct spi_flash_cmd cmd;
590
591 memset(&cmd, 0, sizeof(struct spi_flash_cmd));
592 cmd.cmd_cfg = chip->table + opcode;
593 if (chip->en_addr_4byte) {
594 cmd.n_addr = 4;
595 cmd.addr[0] = (u8)(addr >> 24);
596 cmd.addr[1] = (u8)(addr >> 16);
597 cmd.addr[2] = (u8)(addr >> 8);
598 cmd.addr[3] = (u8)addr;
599 } else {
600 cmd.n_addr = 3;
601 cmd.addr[0] = (u8)(addr >> 16);
602 cmd.addr[1] = (u8)(addr >> 8);
603 cmd.addr[2] = (u8)addr;
604 }
605 cmd.flag = RST_AHB_DOMAIN;
606
607 return chip->issue_cmd(chip, &cmd);
608}
609
610static int spi_nor_erase_32k_blk(struct spi_flash_chip *chip, u32 addr)
611{
612 u8 opcode;
613
614 if (chip->qpi_enabled)
615 opcode = BLK_ERASE_32K_QPI;
616 else
617 opcode = BLK_ERASE_32K;
618
619 return spi_nor_erase_block(chip, addr, opcode);
620}
621
622static int spi_nor_erase_64k_blk(struct spi_flash_chip *chip, u32 addr)
623{
624 u8 opcode;
625
626 if (chip->qpi_enabled)
627 opcode = BLK_ERASE_64K_QPI;
628 else
629 opcode = BLK_ERASE_64K;
630
631 return spi_nor_erase_block(chip, addr, opcode);
632}
633
634static int spi_nor_erase_chip(struct spi_flash_chip *chip)
635{
636 struct spi_flash_cmd cmd;
637
638 memset(&cmd, 0, sizeof(struct spi_flash_cmd));
639 if (chip->qpi_enabled)
640 cmd.cmd_cfg = chip->table + CHIP_ERASE_QPI;
641 else
642 cmd.cmd_cfg = chip->table + CHIP_ERASE;
643 cmd.flag = RST_AHB_DOMAIN;
644
645 return chip->issue_cmd(chip, &cmd);
646}
647
648static int spi_nor_erase_all(struct spi_flash_chip *chip)
649{
650 u8 status;
651 int ret = 0;
652
653 spi_nor_write_enable(chip);
654 spi_nor_erase_chip(chip);
655 ret = spi_nor_wait(chip, &status);
656 if (ret < 0) {
657 pr_info("chip erase command wait failed\n");
658 return ret;
659 }
660
661 return 0;
662}
663
664static int spi_nor_enable_4byte_mode(struct spi_flash_chip *chip)
665{
666 struct spi_flash_cmd cmd;
667 u8 data[3];
668 u8 en4b_shift;
669 u32 sdata;
670 int ret;
671
672 memset(&cmd, 0, sizeof(struct spi_flash_cmd));
673 if (chip->qpi_enabled)
674 cmd.cmd_cfg = chip->table + ENABLE_4BYTE_QPI;
675 else
676 cmd.cmd_cfg = chip->table + ENABLE_4BYTE;
677
678 ret = chip->issue_cmd(chip, &cmd);
679 if (ret < 0) {
680 pr_info("enable_4byte mode failed\n");
681 return ret;
682 }
683
684 chip->en_addr_4byte = 1;
685 /*
686 * Macronix use status register bit S13 for EN4B
687 * Gigadevice use status register bit S11
688 * WinBond use status register bit S17
689 */
690 if (chip->mfr_id == SPIFLASH_MFR_MXIC)
691 en4b_shift = 13;
692 else if (chip->mfr_id == SPIFLASH_MFR_GIGADEVICE)
693 en4b_shift = 11;
694 else if (chip->mfr_id == SPIFLASH_MFR_WINBOND)
695 en4b_shift = 16;
696 else {
697 pr_info("EN4B: lack vendor status bit info\n");
698 return 0;
699 }
700
701 if (en4b_shift >= 16)
702 spi_nor_read_status3(chip, &data[2]);
703 else if (en4b_shift >= 8)
704 spi_nor_read_status2(chip, &data[1]);
705 else
706 spi_nor_read_status1(chip, &data[0]);
707
708 sdata = data[2] << 16 | data[1] << 8 | data[0];
709 if (!(sdata & (1 << en4b_shift))) {
710 pr_info("Failed to enable 4byte mode: bit%d\n", en4b_shift);
711 chip->en_addr_4byte = 0;
712 return -1;
713 }
714
715 pr_info("Enter 4byte address mode, bit%d\n", en4b_shift);
716 return 0;
717}
718
719static int spi_nor_disable_4byte_mode(struct spi_flash_chip *chip)
720{
721 struct spi_flash_cmd cmd;
722 int ret;
723
724 memset(&cmd, 0, sizeof(struct spi_flash_cmd));
725 if (chip->qpi_enabled)
726 cmd.cmd_cfg = chip->table + DISABLE_4BYTE_QPI;
727 else
728 cmd.cmd_cfg = chip->table + DISABLE_4BYTE;
729
730 ret = chip->issue_cmd(chip, &cmd);
731 if (ret < 0) {
732 pr_info("Failed to disable 4byte_mode\n");
733 return ret;
734 }
735
736 chip->en_addr_4byte = 0;
737 return 0;
738}
739
740/**
741 * spi_nor_erase - [Interface] erase block(s)
742 * @chip: spi flash device structure
743 * @addr: address that erase start with, should be blocksize aligned
744 * @len: length that want to be erased, should be blocksize aligned
745 * Description:
746 * Erase one ore more blocks
747 * The command sequence for the BLOCK ERASE operation is as follows:
748 * 06h (WRITE ENBALE command)
749 * D8h (BLOCK ERASE command)
750 * 0Fh (GET FEATURES command to read the status register)
751 */
752static int spi_nor_erase(struct mtd_info *mtd, struct erase_info *instr)
753{
754 struct spi_flash_chip *chip = mtd->priv;
755 int addr = instr->addr;
756 int len = instr->len;
757 u8 status;
758 int erase_len;
759 int ret = 0;
760
761 //pr_info("%s: address = 0x%x, len = %d\n", __func__, addr, len);
762
763 /* check address align on 4K boundary */
764 if (addr & (4*1024 - 1)) {
765 pr_info("%s: Unaligned address\n", __func__);
766 return -EINVAL;
767 }
768
769 if (len & (4*1024 - 1)) {
770 pr_info("%s: Length not 4K-Sector aligned\n", __func__);
771 return -EINVAL;
772 }
773
774 /* Do not allow erase past end of device */
775 if ((len + addr) > chip->size) {
776 pr_info("%s: Erase past end of device\n", __func__);
777 return -EINVAL;
778 }
779
780 while (len > 0) {
781 spi_nor_write_enable(chip);
782 if (len >= 0x10000 && !(addr & (0x10000 - 1))) {
783 erase_len = 0x10000;
784 spi_nor_erase_64k_blk(chip, addr);
785 } else if (len >= 0x8000 && !(addr & (0x8000 - 1))) {
786 erase_len = 0x8000;
787 spi_nor_erase_32k_blk(chip, addr);
788 } else {
789 erase_len = 0x1000;
790 spi_nor_erase_sector(chip, addr);
791 }
792 ret = spi_nor_wait(chip, &status);
793 if (ret < 0) {
794 pr_info("erase command wait failed, erase_len=0x%x\n",
795 erase_len);
796 break;
797 }
798
799 /* Increment page address and decrement length */
800 len -= erase_len;
801 addr += erase_len;
802 if (addr >= chip->size)
803 break;
804 }
805
806 if (!ret) {
807 instr->state = MTD_ERASE_DONE;
808 mtd_erase_callback(instr);
809 }
810
811 return ret;
812}
813
814static int __spi_nor_read(struct spi_flash_chip *chip, int addr,
815 int size, u8 *rbuf)
816{
817 struct spi_flash_cmd cmd;
818
819 memset(&cmd, 0, sizeof(struct spi_flash_cmd));
820 cmd.cmd_cfg = chip->table + chip->read_op;
821 if (chip->en_addr_4byte) {
822 cmd.n_addr = 4;
823 cmd.addr[0] = (u8)((addr >> 24) & 0xff);
824 cmd.addr[1] = (u8)((addr >> 16) & 0xff);
825 cmd.addr[2] = (u8)((addr >> 8) & 0xff);
826 cmd.addr[3] = (u8)(addr & 0xff);
827 } else {
828 cmd.n_addr = 3;
829 cmd.addr[0] = (u8)((addr >> 16) & 0xff);
830 cmd.addr[1] = (u8)((addr >> 8) & 0xff);
831 cmd.addr[2] = (u8)(addr & 0xff);
832 }
833
834 cmd.n_rx = size;
835 cmd.rx_buf = rbuf;
836 cmd.mode = 0xff;
837
838 return chip->issue_cmd(chip, &cmd);
839}
840
841#define SPI_NOR_MAX_RETRY 3
842static int spi_nor_read(struct mtd_info *mtd, loff_t from, size_t len,
843 size_t *retlen, u8 *buf)
844{
845 struct spi_flash_chip *chip = mtd->priv;
846 int rx_len, i;
847 int size = len;
848 int ret;
849
850 /* Do not allow reads past end of device */
851 if ((from + size) > chip->size) {
852 pr_err("%s: attempt to read beyond end of device\n",
853 __func__);
854 return -EINVAL;
855 }
856
857 if (chip->xip_read && chip->memmap_read) {
858 chip->memmap_read(chip, buf, from, size);
859 *retlen = len;
860 return 0;
861 }
862
863 rx_len = chip->rx_max_len ? chip->rx_max_len : len;
864 do {
865 int real_len;
866
867 i = 0;
868retry:
869 real_len = min(size, rx_len);
870 ret = __spi_nor_read(chip, from, real_len, buf);
871 if (ret == -EAGAIN && ++i <= SPI_NOR_MAX_RETRY) {
872 rx_len = rx_len / 2;
873 goto retry;
874 } else if (ret) {
875 return -EIO;
876 } else if (i) {
877 pr_info("Pass after the %dth retry\n", i);
878 }
879
880 from += real_len;
881 buf += real_len;
882 len -= real_len;
883 } while (size);
884
885 *retlen = len;
886 return ret;
887}
888
889/**
890 * spi_nor_program_data_to_cache - write data to cache register
891 * @chip: SPI_FLASH device structure
892 * @page_addr: page to write
893 * @column: the location to write to the cache
894 * @len: number of bytes to write
895 * @wrbuf: buffer held @len bytes
896 * @clr_cache: clear cache register or not
897 * Description:
898 * Command can be 02h, 32h, 84h, 34h
899 * 02h and 32h will clear the cache with 0xff value first
900 * Since it is writing the data to cache, there is no tPROG time.
901 */
902static int spi_nor_program_data(struct spi_flash_chip *chip,
903 u32 addr, int len, const u8 *wbuf)
904{
905 struct spi_flash_cmd cmd;
906
907 memset(&cmd, 0, sizeof(struct spi_flash_cmd));
908 cmd.cmd_cfg = chip->table + chip->write_op;
909 if (chip->en_addr_4byte) {
910 cmd.n_addr = 4;
911 cmd.addr[0] = (u8)((addr >> 24) & 0xff);
912 cmd.addr[1] = (u8)((addr >> 16) & 0xff);;
913 cmd.addr[2] = (u8)((addr >> 8) & 0xff);;
914 cmd.addr[3] = (u8)(addr & 0xff);;
915 } else {
916 cmd.n_addr = 3;
917 cmd.addr[0] = (u8)((addr >> 16) & 0xff);
918 cmd.addr[1] = (u8)((addr >> 8) & 0xff);;
919 cmd.addr[2] = (u8)(addr & 0xff);;
920 }
921 cmd.n_tx = len;
922 cmd.tx_buf = wbuf;
923 cmd.flag = RST_AHB_DOMAIN;
924
925 return chip->issue_cmd(chip, &cmd);
926}
927
928static int spi_nor_write_page(struct spi_flash_chip *chip, int addr,
929 int size, u8 *buf)
930{
931 u8 status;
932 int ret = 0;
933
934 spi_nor_write_enable(chip);
935 spi_nor_program_data(chip, addr, size, buf);
936 ret = spi_nor_wait(chip, &status);
937 if (ret < 0) {
938 pr_info("error %d reading page 0x%x from cache\n",
939 ret, addr);
940 return ret;
941 }
942
943 return ret;
944}
945
946static int __spi_nor_write(struct spi_flash_chip *chip,
947 int addr, int size, const u8 *buf)
948{
949 int max_tx_len = chip->tx_max_len;
950 int len, ret = 0;
951
952 while (size) {
953 len = chip->page_size - (addr & chip->page_mask);
954 len = min(min(len, size), max_tx_len);
955
956 ret = spi_nor_write_page(chip, addr, len, buf);
957 if (ret < 0) {
958 pr_info("page program failed\n");
959 break;
960 }
961
962 /* Increment page address and decrement length */
963 size -= len;
964 buf += len;
965 addr += len;
966 }
967
968 return ret;
969}
970
971static int spi_nor_write(struct mtd_info *mtd, loff_t to, size_t len,
972 size_t *retlen, const u8 *buf)
973{
974 struct spi_flash_chip *chip = mtd->priv;
975 int ret;
976
977 ret = __spi_nor_write(chip, to, len, buf);
978 *retlen = len;
979
980 return ret;
981}
982
983static void spi_nor_set_rd_wr_op(struct spi_flash_chip *chip)
984{
985 struct spi_nor_info *type = (struct spi_nor_info *)chip->flash_info;
986 struct spi_flash_cmd_cfg *read_cmd;
987
988 if (chip->rx_mode & SPI_OPM_RX_QUAD) {
989 if (chip->qpi_enabled) {
990 chip->read_op = READ_FAST_QPI;
991 } else {
992 if (type)
993 chip->read_op = type->quad_cmd_index;
994 else
995 chip->read_op = READ_FAST_X4;
996 }
997 } else if (chip->rx_mode & SPI_OPM_RX_DUAL) {
998 chip->read_op = READ_FAST_DUAL;
999 } else {
1000 chip->read_op = READ_FAST;
1001 }
1002
1003 if (chip->tx_mode & SPI_OPM_TX_QUAD) {
1004 if (chip->qpi_enabled) {
1005 chip->write_op = PROG_QPI;
1006 } else {
1007 if (chip->mfr_id == SPIFLASH_MFR_MXIC)
1008 chip->write_op = PROG_X4_MXIC;
1009 else
1010 chip->write_op = PROG_X4;
1011 }
1012 } else {
1013 chip->write_op = PROG;
1014 }
1015
1016 read_cmd = chip->table + chip->read_op;
1017 pr_info("Set rx_pins: %d, tx_pins: %d, Read_CMD:0x%x\r\n",
1018 chip->rx_mode, chip->tx_mode, read_cmd->opcode);
1019}
1020
1021static int spi_set_read_parameters(struct spi_flash_chip *chip, u8 *buf)
1022{
1023 struct spi_flash_cmd cmd;
1024 int ret = 0;
1025
1026 if (!chip->qpi_enabled)
1027 return 0;
1028
1029 memset(&cmd, 0, sizeof(struct spi_flash_cmd));
1030 cmd.cmd_cfg = chip->table + SET_READ_PARA_QPI;
1031 cmd.n_tx = 1;
1032 cmd.tx_buf = buf;
1033
1034 ret = chip->issue_cmd(chip, &cmd);
1035 if (ret < 0)
1036 pr_info("err: %d set_read_parameters\n", ret);
1037
1038 return ret;
1039}
1040
1041static int spi_nor_set_quad(struct spi_flash_chip *chip, int enable)
1042{
1043 u8 data[2];
1044 u8 status, qe_shift;
1045 u16 sdata;
1046 int ret;
1047
1048 enable = !!enable;
1049 /*
1050 * Macronix use status register bit s6 for QE enable
1051 * Winbond/Gigadevice use status register bit S9
1052 */
1053 if (chip->options & SPINOR_QE_USE_BIT6)
1054 qe_shift = 6;
1055 else
1056 qe_shift = 9;
1057
1058 spi_nor_read_status1(chip, &data[0]);
1059 spi_nor_read_status2(chip, &data[1]);
1060
1061 sdata = data[1] << 8 | data[0];
1062 if (((sdata >> qe_shift) & 0x1) == enable) {
1063 pr_info("QE(bit%d) already set to %d\r\n", qe_shift, enable);
1064 return 0;
1065 }
1066 if (enable)
1067 sdata |= 1 << qe_shift;
1068 else
1069 sdata &= ~(1 << qe_shift);
1070 data[0] = sdata & 0xff;
1071 data[1] = sdata >> 8;
1072
1073 spi_nor_write_enable(chip);
1074 if (qe_shift > 7) {
1075 if (chip->options & SPINOR_HAVE_WRITE_STATUS2)
1076 spi_nor_write_status2(chip, &data[1]);
1077 else
1078 spi_nor_write_status1(chip, data, 2);
1079 } else {
1080 if (chip->options & SPINOR_WRITE_STATUS1_1BYTE)
1081 spi_nor_write_status1(chip, data, 1);
1082 else
1083 spi_nor_write_status1(chip, data, 2);
1084 }
1085
1086 ret = spi_nor_wait(chip, &status);
1087 if (ret < 0) {
1088 pr_info("error %d write status register\n", ret);
1089 return ret;
1090 }
1091
1092 spi_nor_read_status1(chip, &data[0]);
1093 spi_nor_read_status2(chip, &data[1]);
1094
1095 sdata = data[1] << 8 | data[0];
1096 if (((sdata >> qe_shift) & 0x1) != enable) {
1097 pr_info("err: failed to %s QE\r\n",
1098 enable ? "enable" : "disable");
1099 return -1;
1100 }
1101
1102 pr_info("==>%s QE succeed\r\n", enable ? "enable" : "disable");
1103 return 0;
1104}
1105
1106static int spi_nor_enable_quad(struct spi_flash_chip *chip)
1107{
1108 return spi_nor_set_quad(chip, 1);
1109}
1110
1111static int spi_nor_disable_quad(struct spi_flash_chip *chip)
1112{
1113 return spi_nor_set_quad(chip, 0);
1114}
1115
1116#ifdef QSPINOR_ENABLE_QPI_MODE
1117static int spi_nor_disable_qpi(struct spi_flash_chip *chip)
1118{
1119 struct spi_flash_cmd cmd;
1120 int ret = 0;
1121
1122 if (!chip->qpi_enabled)
1123 return 0;
1124
1125 memset(&cmd, 0, sizeof(struct spi_flash_cmd));
1126 if (chip->mfr_id == SPIFLASH_MFR_MXIC)
1127 cmd.cmd_cfg = chip->table + DISABLE_QPI_MXIC;
1128 else
1129 cmd.cmd_cfg = chip->table + DISABLE_QPI;
1130
1131 ret = chip->issue_cmd(chip, &cmd);
1132 if (ret < 0)
1133 return ret;
1134
1135 chip->qpi_enabled = 0;
1136 chip->table = cmd_table;
1137
1138 pr_info("QPI Disabled\n");
1139 return 0;
1140}
1141
1142/*
1143 * QPI dummy clock depend on bus frequency
1144 *
1145 * Giga: {4, 6, 8, 8}, Winbond: {2, 4, 6, 8}
1146 * Macronix use a different way to set dummy clock
1147 */
1148static u8 qpi_dummy_wb[4][2] = { {2, 26}, {4, 50}, {6, 80}, {8, 104} };
1149static u8 qpi_dummy_gd[4][2] = { {4, 80}, {4, 80}, {6, 100}, {8, 133} };
1150
1151static int spi_nor_enable_qpi(struct spi_flash_chip *chip)
1152{
1153 struct spi_flash_cmd cmd;
1154 int ret = 0, i;
1155 u8 cfg;
1156 u8 (*qpi_dummy)[2];
1157
1158 if (chip->qpi_enabled)
1159 return 0;
1160
1161 memset(&cmd, 0, sizeof(struct spi_flash_cmd));
1162 if (chip->mfr_id == SPIFLASH_MFR_MXIC)
1163 cmd.cmd_cfg = chip->table + ENABLE_QPI_MXIC;
1164 else
1165 cmd.cmd_cfg = chip->table + ENABLE_QPI;
1166
1167 ret = chip->issue_cmd(chip, &cmd);
1168 if (ret < 0)
1169 return ret;
1170
1171 chip->qpi_enabled = 1;
1172 chip->table = cmd_table_qpi;
1173
1174 if(chip->mfr_id == SPIFLASH_MFR_MXIC) {
1175 chip->qpi_dummy = 6;
1176 } else {
1177 if (chip->mfr_id == SPIFLASH_MFR_GIGADEVICE)
1178 qpi_dummy = qpi_dummy_gd;
1179 else
1180 qpi_dummy = qpi_dummy_wb;
1181
1182 for (i = 0; i < 4; i++) {
1183 if(chip->bus_clk <= qpi_dummy[i][1]) {
1184 cfg = i << 4;
1185 chip->qpi_dummy = qpi_dummy[i][0];
1186 break;
1187 }
1188 }
1189
1190 ret = spi_set_read_parameters(chip, &cfg);
1191 if (ret < 0)
1192 return ret;
1193 }
1194
1195 chip->rx_mode = SPI_OPM_RX_QUAD;
1196 chip->tx_mode = SPI_OPM_TX_QUAD;
1197 spi_nor_set_rd_wr_op(chip);
1198 pr_info("QPI Enabled, P5-4:%d dummy_cycles:%d\n", i, chip->qpi_dummy);
1199 return 0;
1200}
1201#endif
1202
1203/**
1204 * spi_nor_init - [Interface] Init SPI_FLASH device driver
1205 * @spi: spi device structure
1206 * @chip_ptr: pointer point to spi nand device structure pointer
1207 */
1208struct spi_flash_chip *spi_nor_scan_ident(struct mtd_info *mtd)
1209{
1210 struct spi_flash_chip *chip = mtd->priv;
1211 u8 id[SPINOR_MAX_ID_LEN] = {0};
1212
1213#ifdef QSPINOR_ENABLE_QPI_MODE
1214 if (chip->qpi_enabled)
1215 spi_nor_disable_qpi(chip);
1216#endif
1217 chip->table = cmd_table;
1218 chip->size = 16*1024*1024;
1219 chip->block_size = 1 << 16;
1220 chip->page_size = 1 << 8;
1221
1222 spi_nor_reset(chip);
1223 spi_nor_read_id(chip, id);
1224 chip->mfr_id = id[0];
1225 chip->dev_id = id[1] << 8 | id[2];
1226 spi_nor_scan_id_table(chip);
1227 chip->block_shift = ilog2(chip->block_size);
1228 chip->page_shift = ilog2(chip->page_size);
1229 chip->page_mask = chip->page_size - 1;
1230 pr_info("SPI-NOR: mfr_id: 0x%x, dev_id: 0x%x\n",
1231 chip->mfr_id, chip->dev_id);
1232
1233 /*
1234 * The Enter 4-Byte Address Mode instruction will allow 32-bit address
1235 * (A31-A0) to be used to access the memory array beyond 128Mb
1236 */
1237 if (chip->size > 16*1024*1024)
1238 spi_nor_enable_4byte_mode(chip);
1239
1240 spi_nor_enable_quad(chip);
1241#ifdef QSPINOR_ENABLE_QPI_MODE
1242 spi_nor_enable_qpi(chip);
1243#endif
1244 spi_nor_set_rd_wr_op(chip);
1245
1246 if (chip->setup_memmap_read) {
1247 if (chip->setup_memmap_read(chip,
1248 chip->table + chip->read_op) < 0) {
1249 pr_info("preinit_lookup_tbl failed, check cmd table\n");
1250 return NULL;
1251 }
1252 }
1253
1254 return chip;
1255}
1256
1257/**
1258 * spi_nor_scan_tail - [SPI-NAND Interface] Scan for the SPI-NAND device
1259 * @mtd: MTD device structure
1260 * Description:
1261 * This is the second phase of the initiazation. It fills out all the
1262 * uninitialized fields of spi_flash_chip and mtd fields.
1263 */
1264int spi_nor_scan_tail(struct mtd_info *mtd)
1265{
1266 struct spi_flash_chip *chip = mtd->priv;
1267 int ret;
1268
1269 mtd->name = chip->name;
1270 mtd->size = chip->size;
1271 mtd->erasesize = 4096u;
1272 mtd->writesize = chip->page_size;
1273 mtd->owner = 0;
1274 mtd->type = MTD_NORFLASH;
1275 mtd->flags = MTD_CAP_NORFLASH;
1276 mtd->ecc_strength = 0;
1277 mtd->_erase = spi_nor_erase;
1278 mtd->_point = NULL;
1279 mtd->_unpoint = NULL;
1280 mtd->_read = spi_nor_read;
1281 mtd->_write = spi_nor_write;
1282 mtd->_lock = NULL;
1283 mtd->_unlock = NULL;
1284
1285 ret = spi_flash_register(chip);
1286 return ret;
1287}