]> Git Repo - J-u-boot.git/blame - drivers/mtd/spi/spi-nor-core.c
dm: core: Create a new header file for 'compat' features
[J-u-boot.git] / drivers / mtd / spi / spi-nor-core.c
CommitLineData
7aeedac0
V
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Based on m25p80.c, by Mike Lavender ([email protected]), with
4 * influence from lart.c (Abraham Van Der Merwe) and mtd_dataflash.c
5 *
6 * Copyright (C) 2005, Intec Automation Inc.
7 * Copyright (C) 2014, Freescale Semiconductor, Inc.
8 *
9 * Synced from Linux v4.19
10 */
11
12#include <common.h>
336d4615 13#include <dm/device_compat.h>
61b29b82 14#include <dm/devres.h>
7aeedac0
V
15#include <linux/err.h>
16#include <linux/errno.h>
17#include <linux/log2.h>
18#include <linux/math64.h>
19#include <linux/sizes.h>
20
21#include <linux/mtd/mtd.h>
22#include <linux/mtd/spi-nor.h>
23#include <spi-mem.h>
24#include <spi.h>
25
c4e88623
V
26#include "sf_internal.h"
27
7aeedac0
V
28/* Define max times to check status register before we give up. */
29
30/*
31 * For everything but full-chip erase; probably could be much smaller, but kept
32 * around for safety for now
33 */
34
35#define HZ CONFIG_SYS_HZ
36
37#define DEFAULT_READY_WAIT_JIFFIES (40UL * HZ)
38
492e65b2
V
39static int spi_nor_read_write_reg(struct spi_nor *nor, struct spi_mem_op
40 *op, void *buf)
41{
42 if (op->data.dir == SPI_MEM_DATA_IN)
43 op->data.buf.in = buf;
44 else
45 op->data.buf.out = buf;
46 return spi_mem_exec_op(nor->spi, op);
47}
48
7aeedac0
V
49static int spi_nor_read_reg(struct spi_nor *nor, u8 code, u8 *val, int len)
50{
492e65b2
V
51 struct spi_mem_op op = SPI_MEM_OP(SPI_MEM_OP_CMD(code, 1),
52 SPI_MEM_OP_NO_ADDR,
53 SPI_MEM_OP_NO_DUMMY,
54 SPI_MEM_OP_DATA_IN(len, NULL, 1));
55 int ret;
56
57 ret = spi_nor_read_write_reg(nor, &op, val);
58 if (ret < 0)
59 dev_dbg(&flash->spimem->spi->dev, "error %d reading %x\n", ret,
60 code);
61
62 return ret;
7aeedac0
V
63}
64
65static int spi_nor_write_reg(struct spi_nor *nor, u8 opcode, u8 *buf, int len)
66{
492e65b2
V
67 struct spi_mem_op op = SPI_MEM_OP(SPI_MEM_OP_CMD(opcode, 1),
68 SPI_MEM_OP_NO_ADDR,
69 SPI_MEM_OP_NO_DUMMY,
70 SPI_MEM_OP_DATA_OUT(len, NULL, 1));
71
72 return spi_nor_read_write_reg(nor, &op, buf);
7aeedac0
V
73}
74
75static ssize_t spi_nor_read_data(struct spi_nor *nor, loff_t from, size_t len,
76 u_char *buf)
77{
492e65b2
V
78 struct spi_mem_op op =
79 SPI_MEM_OP(SPI_MEM_OP_CMD(nor->read_opcode, 1),
80 SPI_MEM_OP_ADDR(nor->addr_width, from, 1),
81 SPI_MEM_OP_DUMMY(nor->read_dummy, 1),
82 SPI_MEM_OP_DATA_IN(len, buf, 1));
83 size_t remaining = len;
84 int ret;
85
86 /* get transfer protocols. */
87 op.cmd.buswidth = spi_nor_get_protocol_inst_nbits(nor->read_proto);
88 op.addr.buswidth = spi_nor_get_protocol_addr_nbits(nor->read_proto);
89 op.dummy.buswidth = op.addr.buswidth;
90 op.data.buswidth = spi_nor_get_protocol_data_nbits(nor->read_proto);
91
92 /* convert the dummy cycles to the number of bytes */
93 op.dummy.nbytes = (nor->read_dummy * op.dummy.buswidth) / 8;
94
95 while (remaining) {
96 op.data.nbytes = remaining < UINT_MAX ? remaining : UINT_MAX;
97 ret = spi_mem_adjust_op_size(nor->spi, &op);
98 if (ret)
99 return ret;
100
101 ret = spi_mem_exec_op(nor->spi, &op);
102 if (ret)
103 return ret;
104
105 op.addr.val += op.data.nbytes;
106 remaining -= op.data.nbytes;
107 op.data.buf.in += op.data.nbytes;
108 }
109
110 return len;
7aeedac0
V
111}
112
113static ssize_t spi_nor_write_data(struct spi_nor *nor, loff_t to, size_t len,
114 const u_char *buf)
115{
492e65b2
V
116 struct spi_mem_op op =
117 SPI_MEM_OP(SPI_MEM_OP_CMD(nor->program_opcode, 1),
118 SPI_MEM_OP_ADDR(nor->addr_width, to, 1),
119 SPI_MEM_OP_NO_DUMMY,
120 SPI_MEM_OP_DATA_OUT(len, buf, 1));
492e65b2
V
121 int ret;
122
123 /* get transfer protocols. */
124 op.cmd.buswidth = spi_nor_get_protocol_inst_nbits(nor->write_proto);
125 op.addr.buswidth = spi_nor_get_protocol_addr_nbits(nor->write_proto);
126 op.data.buswidth = spi_nor_get_protocol_data_nbits(nor->write_proto);
127
128 if (nor->program_opcode == SPINOR_OP_AAI_WP && nor->sst_write_second)
129 op.addr.nbytes = 0;
130
60e2bf46
WG
131 ret = spi_mem_adjust_op_size(nor->spi, &op);
132 if (ret)
133 return ret;
134 op.data.nbytes = len < op.data.nbytes ? len : op.data.nbytes;
492e65b2 135
60e2bf46
WG
136 ret = spi_mem_exec_op(nor->spi, &op);
137 if (ret)
138 return ret;
492e65b2 139
60e2bf46 140 return op.data.nbytes;
7aeedac0
V
141}
142
143/*
144 * Read the status register, returning its value in the location
145 * Return the status register value.
146 * Returns negative if error occurred.
147 */
148static int read_sr(struct spi_nor *nor)
149{
150 int ret;
151 u8 val;
152
153 ret = nor->read_reg(nor, SPINOR_OP_RDSR, &val, 1);
154 if (ret < 0) {
155 pr_debug("error %d reading SR\n", (int)ret);
156 return ret;
157 }
158
159 return val;
160}
161
162/*
163 * Read the flag status register, returning its value in the location
164 * Return the status register value.
165 * Returns negative if error occurred.
166 */
167static int read_fsr(struct spi_nor *nor)
168{
169 int ret;
170 u8 val;
171
172 ret = nor->read_reg(nor, SPINOR_OP_RDFSR, &val, 1);
173 if (ret < 0) {
174 pr_debug("error %d reading FSR\n", ret);
175 return ret;
176 }
177
178 return val;
179}
180
181/*
182 * Read configuration register, returning its value in the
183 * location. Return the configuration register value.
184 * Returns negative if error occurred.
185 */
186#if defined(CONFIG_SPI_FLASH_SPANSION) || defined(CONFIG_SPI_FLASH_WINBOND)
187static int read_cr(struct spi_nor *nor)
188{
189 int ret;
190 u8 val;
191
192 ret = nor->read_reg(nor, SPINOR_OP_RDCR, &val, 1);
193 if (ret < 0) {
194 dev_dbg(nor->dev, "error %d reading CR\n", ret);
195 return ret;
196 }
197
198 return val;
199}
200#endif
201
202/*
203 * Write status register 1 byte
204 * Returns negative if error occurred.
205 */
206static int write_sr(struct spi_nor *nor, u8 val)
207{
208 nor->cmd_buf[0] = val;
209 return nor->write_reg(nor, SPINOR_OP_WRSR, nor->cmd_buf, 1);
210}
211
212/*
213 * Set write enable latch with Write Enable command.
214 * Returns negative if error occurred.
215 */
216static int write_enable(struct spi_nor *nor)
217{
218 return nor->write_reg(nor, SPINOR_OP_WREN, NULL, 0);
219}
220
221/*
222 * Send write disable instruction to the chip.
223 */
224static int write_disable(struct spi_nor *nor)
225{
226 return nor->write_reg(nor, SPINOR_OP_WRDI, NULL, 0);
227}
228
229static struct spi_nor *mtd_to_spi_nor(struct mtd_info *mtd)
230{
231 return mtd->priv;
232}
233
8c927809 234#ifndef CONFIG_SPI_FLASH_BAR
61059bc5
V
235static u8 spi_nor_convert_opcode(u8 opcode, const u8 table[][2], size_t size)
236{
237 size_t i;
238
239 for (i = 0; i < size; i++)
240 if (table[i][0] == opcode)
241 return table[i][1];
242
243 /* No conversion found, keep input op code. */
244 return opcode;
245}
246
247static u8 spi_nor_convert_3to4_read(u8 opcode)
248{
249 static const u8 spi_nor_3to4_read[][2] = {
250 { SPINOR_OP_READ, SPINOR_OP_READ_4B },
251 { SPINOR_OP_READ_FAST, SPINOR_OP_READ_FAST_4B },
252 { SPINOR_OP_READ_1_1_2, SPINOR_OP_READ_1_1_2_4B },
253 { SPINOR_OP_READ_1_2_2, SPINOR_OP_READ_1_2_2_4B },
254 { SPINOR_OP_READ_1_1_4, SPINOR_OP_READ_1_1_4_4B },
255 { SPINOR_OP_READ_1_4_4, SPINOR_OP_READ_1_4_4_4B },
658df8bd
VR
256 { SPINOR_OP_READ_1_1_8, SPINOR_OP_READ_1_1_8_4B },
257 { SPINOR_OP_READ_1_8_8, SPINOR_OP_READ_1_8_8_4B },
61059bc5
V
258
259 { SPINOR_OP_READ_1_1_1_DTR, SPINOR_OP_READ_1_1_1_DTR_4B },
260 { SPINOR_OP_READ_1_2_2_DTR, SPINOR_OP_READ_1_2_2_DTR_4B },
261 { SPINOR_OP_READ_1_4_4_DTR, SPINOR_OP_READ_1_4_4_DTR_4B },
262 };
263
264 return spi_nor_convert_opcode(opcode, spi_nor_3to4_read,
265 ARRAY_SIZE(spi_nor_3to4_read));
266}
267
268static u8 spi_nor_convert_3to4_program(u8 opcode)
269{
270 static const u8 spi_nor_3to4_program[][2] = {
271 { SPINOR_OP_PP, SPINOR_OP_PP_4B },
272 { SPINOR_OP_PP_1_1_4, SPINOR_OP_PP_1_1_4_4B },
273 { SPINOR_OP_PP_1_4_4, SPINOR_OP_PP_1_4_4_4B },
658df8bd
VR
274 { SPINOR_OP_PP_1_1_8, SPINOR_OP_PP_1_1_8_4B },
275 { SPINOR_OP_PP_1_8_8, SPINOR_OP_PP_1_8_8_4B },
61059bc5
V
276 };
277
278 return spi_nor_convert_opcode(opcode, spi_nor_3to4_program,
279 ARRAY_SIZE(spi_nor_3to4_program));
280}
281
282static u8 spi_nor_convert_3to4_erase(u8 opcode)
283{
284 static const u8 spi_nor_3to4_erase[][2] = {
285 { SPINOR_OP_BE_4K, SPINOR_OP_BE_4K_4B },
286 { SPINOR_OP_BE_32K, SPINOR_OP_BE_32K_4B },
287 { SPINOR_OP_SE, SPINOR_OP_SE_4B },
288 };
289
290 return spi_nor_convert_opcode(opcode, spi_nor_3to4_erase,
291 ARRAY_SIZE(spi_nor_3to4_erase));
292}
293
294static void spi_nor_set_4byte_opcodes(struct spi_nor *nor,
295 const struct flash_info *info)
296{
297 /* Do some manufacturer fixups first */
298 switch (JEDEC_MFR(info)) {
299 case SNOR_MFR_SPANSION:
300 /* No small sector erase for 4-byte command set */
301 nor->erase_opcode = SPINOR_OP_SE;
302 nor->mtd.erasesize = info->sector_size;
303 break;
304
305 default:
306 break;
307 }
308
309 nor->read_opcode = spi_nor_convert_3to4_read(nor->read_opcode);
310 nor->program_opcode = spi_nor_convert_3to4_program(nor->program_opcode);
311 nor->erase_opcode = spi_nor_convert_3to4_erase(nor->erase_opcode);
312}
8c927809 313#endif /* !CONFIG_SPI_FLASH_BAR */
61059bc5
V
314
315/* Enable/disable 4-byte addressing mode. */
316static int set_4byte(struct spi_nor *nor, const struct flash_info *info,
317 int enable)
318{
319 int status;
320 bool need_wren = false;
321 u8 cmd;
322
323 switch (JEDEC_MFR(info)) {
324 case SNOR_MFR_ST:
325 case SNOR_MFR_MICRON:
326 /* Some Micron need WREN command; all will accept it */
327 need_wren = true;
328 case SNOR_MFR_MACRONIX:
329 case SNOR_MFR_WINBOND:
330 if (need_wren)
331 write_enable(nor);
332
333 cmd = enable ? SPINOR_OP_EN4B : SPINOR_OP_EX4B;
334 status = nor->write_reg(nor, cmd, NULL, 0);
335 if (need_wren)
336 write_disable(nor);
337
338 if (!status && !enable &&
339 JEDEC_MFR(info) == SNOR_MFR_WINBOND) {
340 /*
341 * On Winbond W25Q256FV, leaving 4byte mode causes
342 * the Extended Address Register to be set to 1, so all
343 * 3-byte-address reads come from the second 16M.
344 * We must clear the register to enable normal behavior.
345 */
346 write_enable(nor);
347 nor->cmd_buf[0] = 0;
348 nor->write_reg(nor, SPINOR_OP_WREAR, nor->cmd_buf, 1);
349 write_disable(nor);
350 }
351
352 return status;
353 default:
354 /* Spansion style */
355 nor->cmd_buf[0] = enable << 7;
356 return nor->write_reg(nor, SPINOR_OP_BRWR, nor->cmd_buf, 1);
357 }
358}
359
7aeedac0
V
360static int spi_nor_sr_ready(struct spi_nor *nor)
361{
362 int sr = read_sr(nor);
363
364 if (sr < 0)
365 return sr;
366
367 if (nor->flags & SNOR_F_USE_CLSR && sr & (SR_E_ERR | SR_P_ERR)) {
368 if (sr & SR_E_ERR)
369 dev_dbg(nor->dev, "Erase Error occurred\n");
370 else
371 dev_dbg(nor->dev, "Programming Error occurred\n");
372
373 nor->write_reg(nor, SPINOR_OP_CLSR, NULL, 0);
374 return -EIO;
375 }
376
377 return !(sr & SR_WIP);
378}
379
380static int spi_nor_fsr_ready(struct spi_nor *nor)
381{
382 int fsr = read_fsr(nor);
383
384 if (fsr < 0)
385 return fsr;
386
387 if (fsr & (FSR_E_ERR | FSR_P_ERR)) {
388 if (fsr & FSR_E_ERR)
cc911875 389 dev_err(nor->dev, "Erase operation failed.\n");
7aeedac0 390 else
cc911875 391 dev_err(nor->dev, "Program operation failed.\n");
7aeedac0
V
392
393 if (fsr & FSR_PT_ERR)
cc911875 394 dev_err(nor->dev,
7aeedac0
V
395 "Attempted to modify a protected sector.\n");
396
397 nor->write_reg(nor, SPINOR_OP_CLFSR, NULL, 0);
398 return -EIO;
399 }
400
401 return fsr & FSR_READY;
402}
403
404static int spi_nor_ready(struct spi_nor *nor)
405{
406 int sr, fsr;
407
408 sr = spi_nor_sr_ready(nor);
409 if (sr < 0)
410 return sr;
411 fsr = nor->flags & SNOR_F_USE_FSR ? spi_nor_fsr_ready(nor) : 1;
412 if (fsr < 0)
413 return fsr;
414 return sr && fsr;
415}
416
417/*
418 * Service routine to read status register until ready, or timeout occurs.
419 * Returns non-zero if error.
420 */
421static int spi_nor_wait_till_ready_with_timeout(struct spi_nor *nor,
422 unsigned long timeout)
423{
424 unsigned long timebase;
425 int ret;
426
427 timebase = get_timer(0);
428
429 while (get_timer(timebase) < timeout) {
430 ret = spi_nor_ready(nor);
431 if (ret < 0)
432 return ret;
433 if (ret)
434 return 0;
435 }
436
437 dev_err(nor->dev, "flash operation timed out\n");
438
439 return -ETIMEDOUT;
440}
441
442static int spi_nor_wait_till_ready(struct spi_nor *nor)
443{
444 return spi_nor_wait_till_ready_with_timeout(nor,
445 DEFAULT_READY_WAIT_JIFFIES);
446}
447
8c927809
V
448#ifdef CONFIG_SPI_FLASH_BAR
449/*
450 * This "clean_bar" is necessary in a situation when one was accessing
451 * spi flash memory > 16 MiB by using Bank Address Register's BA24 bit.
452 *
453 * After it the BA24 bit shall be cleared to allow access to correct
454 * memory region after SW reset (by calling "reset" command).
455 *
456 * Otherwise, the BA24 bit may be left set and then after reset, the
457 * ROM would read/write/erase SPL from 16 MiB * bank_sel address.
458 */
459static int clean_bar(struct spi_nor *nor)
460{
461 u8 cmd, bank_sel = 0;
462
463 if (nor->bank_curr == 0)
464 return 0;
465 cmd = nor->bank_write_cmd;
466 nor->bank_curr = 0;
467 write_enable(nor);
468
469 return nor->write_reg(nor, cmd, &bank_sel, 1);
470}
471
472static int write_bar(struct spi_nor *nor, u32 offset)
473{
474 u8 cmd, bank_sel;
475 int ret;
476
477 bank_sel = offset / SZ_16M;
478 if (bank_sel == nor->bank_curr)
479 goto bar_end;
480
481 cmd = nor->bank_write_cmd;
482 write_enable(nor);
483 ret = nor->write_reg(nor, cmd, &bank_sel, 1);
484 if (ret < 0) {
485 debug("SF: fail to write bank register\n");
486 return ret;
487 }
488
489bar_end:
490 nor->bank_curr = bank_sel;
491 return nor->bank_curr;
492}
493
494static int read_bar(struct spi_nor *nor, const struct flash_info *info)
495{
496 u8 curr_bank = 0;
497 int ret;
498
499 switch (JEDEC_MFR(info)) {
500 case SNOR_MFR_SPANSION:
501 nor->bank_read_cmd = SPINOR_OP_BRRD;
502 nor->bank_write_cmd = SPINOR_OP_BRWR;
503 break;
504 default:
505 nor->bank_read_cmd = SPINOR_OP_RDEAR;
506 nor->bank_write_cmd = SPINOR_OP_WREAR;
507 }
508
509 ret = nor->read_reg(nor, nor->bank_read_cmd,
510 &curr_bank, 1);
511 if (ret) {
512 debug("SF: fail to read bank addr register\n");
513 return ret;
514 }
515 nor->bank_curr = curr_bank;
516
517 return 0;
518}
519#endif
520
7aeedac0
V
521/*
522 * Initiate the erasure of a single sector
523 */
524static int spi_nor_erase_sector(struct spi_nor *nor, u32 addr)
525{
f909ddb3
MV
526 struct spi_mem_op op =
527 SPI_MEM_OP(SPI_MEM_OP_CMD(nor->erase_opcode, 1),
528 SPI_MEM_OP_ADDR(nor->addr_width, addr, 1),
529 SPI_MEM_OP_NO_DUMMY,
530 SPI_MEM_OP_NO_DATA);
7aeedac0
V
531
532 if (nor->erase)
533 return nor->erase(nor, addr);
534
535 /*
536 * Default implementation, if driver doesn't have a specialized HW
537 * control
538 */
f909ddb3 539 return spi_mem_exec_op(nor->spi, &op);
7aeedac0
V
540}
541
542/*
543 * Erase an address range on the nor chip. The address range may extend
544 * one or more erase sectors. Return an error is there is a problem erasing.
545 */
546static int spi_nor_erase(struct mtd_info *mtd, struct erase_info *instr)
547{
548 struct spi_nor *nor = mtd_to_spi_nor(mtd);
549 u32 addr, len, rem;
550 int ret;
551
552 dev_dbg(nor->dev, "at 0x%llx, len %lld\n", (long long)instr->addr,
553 (long long)instr->len);
554
cb56caac
VR
555 if (!instr->len)
556 return 0;
557
7aeedac0
V
558 div_u64_rem(instr->len, mtd->erasesize, &rem);
559 if (rem)
560 return -EINVAL;
561
562 addr = instr->addr;
563 len = instr->len;
564
565 while (len) {
8c927809
V
566#ifdef CONFIG_SPI_FLASH_BAR
567 ret = write_bar(nor, addr);
568 if (ret < 0)
569 return ret;
570#endif
7aeedac0
V
571 write_enable(nor);
572
573 ret = spi_nor_erase_sector(nor, addr);
574 if (ret)
575 goto erase_err;
576
577 addr += mtd->erasesize;
578 len -= mtd->erasesize;
579
580 ret = spi_nor_wait_till_ready(nor);
581 if (ret)
582 goto erase_err;
583 }
584
8c927809
V
585erase_err:
586#ifdef CONFIG_SPI_FLASH_BAR
587 ret = clean_bar(nor);
588#endif
7aeedac0
V
589 write_disable(nor);
590
7aeedac0
V
591 return ret;
592}
593
594#if defined(CONFIG_SPI_FLASH_STMICRO) || defined(CONFIG_SPI_FLASH_SST)
595/* Write status register and ensure bits in mask match written values */
596static int write_sr_and_check(struct spi_nor *nor, u8 status_new, u8 mask)
597{
598 int ret;
599
600 write_enable(nor);
601 ret = write_sr(nor, status_new);
602 if (ret)
603 return ret;
604
605 ret = spi_nor_wait_till_ready(nor);
606 if (ret)
607 return ret;
608
609 ret = read_sr(nor);
610 if (ret < 0)
611 return ret;
612
613 return ((ret & mask) != (status_new & mask)) ? -EIO : 0;
614}
615
616static void stm_get_locked_range(struct spi_nor *nor, u8 sr, loff_t *ofs,
617 uint64_t *len)
618{
619 struct mtd_info *mtd = &nor->mtd;
620 u8 mask = SR_BP2 | SR_BP1 | SR_BP0;
621 int shift = ffs(mask) - 1;
622 int pow;
623
624 if (!(sr & mask)) {
625 /* No protection */
626 *ofs = 0;
627 *len = 0;
628 } else {
629 pow = ((sr & mask) ^ mask) >> shift;
630 *len = mtd->size >> pow;
631 if (nor->flags & SNOR_F_HAS_SR_TB && sr & SR_TB)
632 *ofs = 0;
633 else
634 *ofs = mtd->size - *len;
635 }
636}
637
638/*
639 * Return 1 if the entire region is locked (if @locked is true) or unlocked (if
640 * @locked is false); 0 otherwise
641 */
642static int stm_check_lock_status_sr(struct spi_nor *nor, loff_t ofs, u64 len,
643 u8 sr, bool locked)
644{
645 loff_t lock_offs;
646 uint64_t lock_len;
647
648 if (!len)
649 return 1;
650
651 stm_get_locked_range(nor, sr, &lock_offs, &lock_len);
652
653 if (locked)
654 /* Requested range is a sub-range of locked range */
655 return (ofs + len <= lock_offs + lock_len) && (ofs >= lock_offs);
656 else
657 /* Requested range does not overlap with locked range */
658 return (ofs >= lock_offs + lock_len) || (ofs + len <= lock_offs);
659}
660
661static int stm_is_locked_sr(struct spi_nor *nor, loff_t ofs, uint64_t len,
662 u8 sr)
663{
664 return stm_check_lock_status_sr(nor, ofs, len, sr, true);
665}
666
667static int stm_is_unlocked_sr(struct spi_nor *nor, loff_t ofs, uint64_t len,
668 u8 sr)
669{
670 return stm_check_lock_status_sr(nor, ofs, len, sr, false);
671}
672
673/*
674 * Lock a region of the flash. Compatible with ST Micro and similar flash.
675 * Supports the block protection bits BP{0,1,2} in the status register
676 * (SR). Does not support these features found in newer SR bitfields:
677 * - SEC: sector/block protect - only handle SEC=0 (block protect)
678 * - CMP: complement protect - only support CMP=0 (range is not complemented)
679 *
680 * Support for the following is provided conditionally for some flash:
681 * - TB: top/bottom protect
682 *
683 * Sample table portion for 8MB flash (Winbond w25q64fw):
684 *
685 * SEC | TB | BP2 | BP1 | BP0 | Prot Length | Protected Portion
686 * --------------------------------------------------------------------------
687 * X | X | 0 | 0 | 0 | NONE | NONE
688 * 0 | 0 | 0 | 0 | 1 | 128 KB | Upper 1/64
689 * 0 | 0 | 0 | 1 | 0 | 256 KB | Upper 1/32
690 * 0 | 0 | 0 | 1 | 1 | 512 KB | Upper 1/16
691 * 0 | 0 | 1 | 0 | 0 | 1 MB | Upper 1/8
692 * 0 | 0 | 1 | 0 | 1 | 2 MB | Upper 1/4
693 * 0 | 0 | 1 | 1 | 0 | 4 MB | Upper 1/2
694 * X | X | 1 | 1 | 1 | 8 MB | ALL
695 * ------|-------|-------|-------|-------|---------------|-------------------
696 * 0 | 1 | 0 | 0 | 1 | 128 KB | Lower 1/64
697 * 0 | 1 | 0 | 1 | 0 | 256 KB | Lower 1/32
698 * 0 | 1 | 0 | 1 | 1 | 512 KB | Lower 1/16
699 * 0 | 1 | 1 | 0 | 0 | 1 MB | Lower 1/8
700 * 0 | 1 | 1 | 0 | 1 | 2 MB | Lower 1/4
701 * 0 | 1 | 1 | 1 | 0 | 4 MB | Lower 1/2
702 *
703 * Returns negative on errors, 0 on success.
704 */
705static int stm_lock(struct spi_nor *nor, loff_t ofs, uint64_t len)
706{
707 struct mtd_info *mtd = &nor->mtd;
708 int status_old, status_new;
709 u8 mask = SR_BP2 | SR_BP1 | SR_BP0;
710 u8 shift = ffs(mask) - 1, pow, val;
711 loff_t lock_len;
712 bool can_be_top = true, can_be_bottom = nor->flags & SNOR_F_HAS_SR_TB;
713 bool use_top;
714
715 status_old = read_sr(nor);
716 if (status_old < 0)
717 return status_old;
718
719 /* If nothing in our range is unlocked, we don't need to do anything */
720 if (stm_is_locked_sr(nor, ofs, len, status_old))
721 return 0;
722
723 /* If anything below us is unlocked, we can't use 'bottom' protection */
724 if (!stm_is_locked_sr(nor, 0, ofs, status_old))
725 can_be_bottom = false;
726
727 /* If anything above us is unlocked, we can't use 'top' protection */
728 if (!stm_is_locked_sr(nor, ofs + len, mtd->size - (ofs + len),
729 status_old))
730 can_be_top = false;
731
732 if (!can_be_bottom && !can_be_top)
733 return -EINVAL;
734
735 /* Prefer top, if both are valid */
736 use_top = can_be_top;
737
738 /* lock_len: length of region that should end up locked */
739 if (use_top)
740 lock_len = mtd->size - ofs;
741 else
742 lock_len = ofs + len;
743
744 /*
745 * Need smallest pow such that:
746 *
747 * 1 / (2^pow) <= (len / size)
748 *
749 * so (assuming power-of-2 size) we do:
750 *
751 * pow = ceil(log2(size / len)) = log2(size) - floor(log2(len))
752 */
753 pow = ilog2(mtd->size) - ilog2(lock_len);
754 val = mask - (pow << shift);
755 if (val & ~mask)
756 return -EINVAL;
757 /* Don't "lock" with no region! */
758 if (!(val & mask))
759 return -EINVAL;
760
761 status_new = (status_old & ~mask & ~SR_TB) | val;
762
763 /* Disallow further writes if WP pin is asserted */
764 status_new |= SR_SRWD;
765
766 if (!use_top)
767 status_new |= SR_TB;
768
769 /* Don't bother if they're the same */
770 if (status_new == status_old)
771 return 0;
772
773 /* Only modify protection if it will not unlock other areas */
774 if ((status_new & mask) < (status_old & mask))
775 return -EINVAL;
776
777 return write_sr_and_check(nor, status_new, mask);
778}
779
780/*
781 * Unlock a region of the flash. See stm_lock() for more info
782 *
783 * Returns negative on errors, 0 on success.
784 */
785static int stm_unlock(struct spi_nor *nor, loff_t ofs, uint64_t len)
786{
787 struct mtd_info *mtd = &nor->mtd;
788 int status_old, status_new;
789 u8 mask = SR_BP2 | SR_BP1 | SR_BP0;
790 u8 shift = ffs(mask) - 1, pow, val;
791 loff_t lock_len;
792 bool can_be_top = true, can_be_bottom = nor->flags & SNOR_F_HAS_SR_TB;
793 bool use_top;
794
795 status_old = read_sr(nor);
796 if (status_old < 0)
797 return status_old;
798
799 /* If nothing in our range is locked, we don't need to do anything */
800 if (stm_is_unlocked_sr(nor, ofs, len, status_old))
801 return 0;
802
803 /* If anything below us is locked, we can't use 'top' protection */
804 if (!stm_is_unlocked_sr(nor, 0, ofs, status_old))
805 can_be_top = false;
806
807 /* If anything above us is locked, we can't use 'bottom' protection */
808 if (!stm_is_unlocked_sr(nor, ofs + len, mtd->size - (ofs + len),
809 status_old))
810 can_be_bottom = false;
811
812 if (!can_be_bottom && !can_be_top)
813 return -EINVAL;
814
815 /* Prefer top, if both are valid */
816 use_top = can_be_top;
817
818 /* lock_len: length of region that should remain locked */
819 if (use_top)
820 lock_len = mtd->size - (ofs + len);
821 else
822 lock_len = ofs;
823
824 /*
825 * Need largest pow such that:
826 *
827 * 1 / (2^pow) >= (len / size)
828 *
829 * so (assuming power-of-2 size) we do:
830 *
831 * pow = floor(log2(size / len)) = log2(size) - ceil(log2(len))
832 */
833 pow = ilog2(mtd->size) - order_base_2(lock_len);
834 if (lock_len == 0) {
835 val = 0; /* fully unlocked */
836 } else {
837 val = mask - (pow << shift);
838 /* Some power-of-two sizes are not supported */
839 if (val & ~mask)
840 return -EINVAL;
841 }
842
843 status_new = (status_old & ~mask & ~SR_TB) | val;
844
845 /* Don't protect status register if we're fully unlocked */
846 if (lock_len == 0)
847 status_new &= ~SR_SRWD;
848
849 if (!use_top)
850 status_new |= SR_TB;
851
852 /* Don't bother if they're the same */
853 if (status_new == status_old)
854 return 0;
855
856 /* Only modify protection if it will not lock other areas */
857 if ((status_new & mask) > (status_old & mask))
858 return -EINVAL;
859
860 return write_sr_and_check(nor, status_new, mask);
861}
862
863/*
864 * Check if a region of the flash is (completely) locked. See stm_lock() for
865 * more info.
866 *
867 * Returns 1 if entire region is locked, 0 if any portion is unlocked, and
868 * negative on errors.
869 */
870static int stm_is_locked(struct spi_nor *nor, loff_t ofs, uint64_t len)
871{
872 int status;
873
874 status = read_sr(nor);
875 if (status < 0)
876 return status;
877
878 return stm_is_locked_sr(nor, ofs, len, status);
879}
880#endif /* CONFIG_SPI_FLASH_STMICRO */
881
7aeedac0
V
882static const struct flash_info *spi_nor_read_id(struct spi_nor *nor)
883{
884 int tmp;
885 u8 id[SPI_NOR_MAX_ID_LEN];
886 const struct flash_info *info;
887
7aeedac0
V
888 tmp = nor->read_reg(nor, SPINOR_OP_RDID, id, SPI_NOR_MAX_ID_LEN);
889 if (tmp < 0) {
890 dev_dbg(nor->dev, "error %d reading JEDEC ID\n", tmp);
891 return ERR_PTR(tmp);
892 }
893
778572d7
V
894 info = spi_nor_ids;
895 for (; info->name; info++) {
7aeedac0
V
896 if (info->id_len) {
897 if (!memcmp(info->id, id, info->id_len))
778572d7 898 return info;
7aeedac0
V
899 }
900 }
778572d7 901
7aeedac0
V
902 dev_err(nor->dev, "unrecognized JEDEC id bytes: %02x, %02x, %02x\n",
903 id[0], id[1], id[2]);
904 return ERR_PTR(-ENODEV);
905}
906
907static int spi_nor_read(struct mtd_info *mtd, loff_t from, size_t len,
908 size_t *retlen, u_char *buf)
909{
910 struct spi_nor *nor = mtd_to_spi_nor(mtd);
911 int ret;
912
913 dev_dbg(nor->dev, "from 0x%08x, len %zd\n", (u32)from, len);
914
915 while (len) {
916 loff_t addr = from;
8c927809 917 size_t read_len = len;
7aeedac0 918
8c927809
V
919#ifdef CONFIG_SPI_FLASH_BAR
920 u32 remain_len;
921
922 ret = write_bar(nor, addr);
923 if (ret < 0)
924 return log_ret(ret);
925 remain_len = (SZ_16M * (nor->bank_curr + 1)) - addr;
926
927 if (len < remain_len)
928 read_len = len;
929 else
930 read_len = remain_len;
931#endif
932
933 ret = nor->read(nor, addr, read_len, buf);
7aeedac0
V
934 if (ret == 0) {
935 /* We shouldn't see 0-length reads */
936 ret = -EIO;
937 goto read_err;
938 }
939 if (ret < 0)
940 goto read_err;
941
942 *retlen += ret;
943 buf += ret;
944 from += ret;
945 len -= ret;
946 }
947 ret = 0;
948
949read_err:
8c927809
V
950#ifdef CONFIG_SPI_FLASH_BAR
951 ret = clean_bar(nor);
952#endif
7aeedac0
V
953 return ret;
954}
955
956#ifdef CONFIG_SPI_FLASH_SST
e0cacdcc
EP
957/*
958 * sst26 flash series has its own block protection implementation:
959 * 4x - 8 KByte blocks - read & write protection bits - upper addresses
960 * 1x - 32 KByte blocks - write protection bits
961 * rest - 64 KByte blocks - write protection bits
962 * 1x - 32 KByte blocks - write protection bits
963 * 4x - 8 KByte blocks - read & write protection bits - lower addresses
964 *
965 * We'll support only per 64k lock/unlock so lower and upper 64 KByte region
966 * will be treated as single block.
967 */
968#define SST26_BPR_8K_NUM 4
969#define SST26_MAX_BPR_REG_LEN (18 + 1)
970#define SST26_BOUND_REG_SIZE ((32 + SST26_BPR_8K_NUM * 8) * SZ_1K)
971
972enum lock_ctl {
973 SST26_CTL_LOCK,
974 SST26_CTL_UNLOCK,
975 SST26_CTL_CHECK
976};
977
978static bool sst26_process_bpr(u32 bpr_size, u8 *cmd, u32 bit, enum lock_ctl ctl)
979{
980 switch (ctl) {
981 case SST26_CTL_LOCK:
982 cmd[bpr_size - (bit / 8) - 1] |= BIT(bit % 8);
983 break;
984 case SST26_CTL_UNLOCK:
985 cmd[bpr_size - (bit / 8) - 1] &= ~BIT(bit % 8);
986 break;
987 case SST26_CTL_CHECK:
988 return !!(cmd[bpr_size - (bit / 8) - 1] & BIT(bit % 8));
989 }
990
991 return false;
992}
993
994/*
995 * Lock, unlock or check lock status of the flash region of the flash (depending
996 * on the lock_ctl value)
997 */
998static int sst26_lock_ctl(struct spi_nor *nor, loff_t ofs, uint64_t len, enum lock_ctl ctl)
999{
1000 struct mtd_info *mtd = &nor->mtd;
1001 u32 i, bpr_ptr, rptr_64k, lptr_64k, bpr_size;
1002 bool lower_64k = false, upper_64k = false;
1003 u8 bpr_buff[SST26_MAX_BPR_REG_LEN] = {};
1004 int ret;
1005
1006 /* Check length and offset for 64k alignment */
1007 if ((ofs & (SZ_64K - 1)) || (len & (SZ_64K - 1))) {
1008 dev_err(nor->dev, "length or offset is not 64KiB allighned\n");
1009 return -EINVAL;
1010 }
1011
1012 if (ofs + len > mtd->size) {
1013 dev_err(nor->dev, "range is more than device size: %#llx + %#llx > %#llx\n",
1014 ofs, len, mtd->size);
1015 return -EINVAL;
1016 }
1017
1018 /* SST26 family has only 16 Mbit, 32 Mbit and 64 Mbit IC */
1019 if (mtd->size != SZ_2M &&
1020 mtd->size != SZ_4M &&
1021 mtd->size != SZ_8M)
1022 return -EINVAL;
1023
1024 bpr_size = 2 + (mtd->size / SZ_64K / 8);
1025
1026 ret = nor->read_reg(nor, SPINOR_OP_READ_BPR, bpr_buff, bpr_size);
1027 if (ret < 0) {
1028 dev_err(nor->dev, "fail to read block-protection register\n");
1029 return ret;
1030 }
1031
1032 rptr_64k = min_t(u32, ofs + len, mtd->size - SST26_BOUND_REG_SIZE);
1033 lptr_64k = max_t(u32, ofs, SST26_BOUND_REG_SIZE);
1034
1035 upper_64k = ((ofs + len) > (mtd->size - SST26_BOUND_REG_SIZE));
1036 lower_64k = (ofs < SST26_BOUND_REG_SIZE);
1037
1038 /* Lower bits in block-protection register are about 64k region */
1039 bpr_ptr = lptr_64k / SZ_64K - 1;
1040
1041 /* Process 64K blocks region */
1042 while (lptr_64k < rptr_64k) {
1043 if (sst26_process_bpr(bpr_size, bpr_buff, bpr_ptr, ctl))
1044 return EACCES;
1045
1046 bpr_ptr++;
1047 lptr_64k += SZ_64K;
1048 }
1049
1050 /* 32K and 8K region bits in BPR are after 64k region bits */
1051 bpr_ptr = (mtd->size - 2 * SST26_BOUND_REG_SIZE) / SZ_64K;
1052
1053 /* Process lower 32K block region */
1054 if (lower_64k)
1055 if (sst26_process_bpr(bpr_size, bpr_buff, bpr_ptr, ctl))
1056 return EACCES;
1057
1058 bpr_ptr++;
1059
1060 /* Process upper 32K block region */
1061 if (upper_64k)
1062 if (sst26_process_bpr(bpr_size, bpr_buff, bpr_ptr, ctl))
1063 return EACCES;
1064
1065 bpr_ptr++;
1066
1067 /* Process lower 8K block regions */
1068 for (i = 0; i < SST26_BPR_8K_NUM; i++) {
1069 if (lower_64k)
1070 if (sst26_process_bpr(bpr_size, bpr_buff, bpr_ptr, ctl))
1071 return EACCES;
1072
1073 /* In 8K area BPR has both read and write protection bits */
1074 bpr_ptr += 2;
1075 }
1076
1077 /* Process upper 8K block regions */
1078 for (i = 0; i < SST26_BPR_8K_NUM; i++) {
1079 if (upper_64k)
1080 if (sst26_process_bpr(bpr_size, bpr_buff, bpr_ptr, ctl))
1081 return EACCES;
1082
1083 /* In 8K area BPR has both read and write protection bits */
1084 bpr_ptr += 2;
1085 }
1086
1087 /* If we check region status we don't need to write BPR back */
1088 if (ctl == SST26_CTL_CHECK)
1089 return 0;
1090
1091 ret = nor->write_reg(nor, SPINOR_OP_WRITE_BPR, bpr_buff, bpr_size);
1092 if (ret < 0) {
1093 dev_err(nor->dev, "fail to write block-protection register\n");
1094 return ret;
1095 }
1096
1097 return 0;
1098}
1099
1100static int sst26_unlock(struct spi_nor *nor, loff_t ofs, uint64_t len)
1101{
1102 return sst26_lock_ctl(nor, ofs, len, SST26_CTL_UNLOCK);
1103}
1104
1105static int sst26_lock(struct spi_nor *nor, loff_t ofs, uint64_t len)
1106{
1107 return sst26_lock_ctl(nor, ofs, len, SST26_CTL_LOCK);
1108}
1109
1110/*
1111 * Returns EACCES (positive value) if region is locked, 0 if region is unlocked,
1112 * and negative on errors.
1113 */
1114static int sst26_is_locked(struct spi_nor *nor, loff_t ofs, uint64_t len)
1115{
1116 /*
1117 * is_locked function is used for check before reading or erasing flash
1118 * region, so offset and length might be not 64k allighned, so adjust
1119 * them to be 64k allighned as sst26_lock_ctl works only with 64k
1120 * allighned regions.
1121 */
1122 ofs -= ofs & (SZ_64K - 1);
1123 len = len & (SZ_64K - 1) ? (len & ~(SZ_64K - 1)) + SZ_64K : len;
1124
1125 return sst26_lock_ctl(nor, ofs, len, SST26_CTL_CHECK);
1126}
1127
8c927809
V
1128static int sst_write_byteprogram(struct spi_nor *nor, loff_t to, size_t len,
1129 size_t *retlen, const u_char *buf)
1130{
1131 size_t actual;
1132 int ret = 0;
1133
1134 for (actual = 0; actual < len; actual++) {
1135 nor->program_opcode = SPINOR_OP_BP;
1136
1137 write_enable(nor);
1138 /* write one byte. */
1139 ret = nor->write(nor, to, 1, buf + actual);
1140 if (ret < 0)
1141 goto sst_write_err;
1142 ret = spi_nor_wait_till_ready(nor);
1143 if (ret)
1144 goto sst_write_err;
1145 to++;
1146 }
1147
1148sst_write_err:
1149 write_disable(nor);
1150 return ret;
1151}
1152
7aeedac0
V
1153static int sst_write(struct mtd_info *mtd, loff_t to, size_t len,
1154 size_t *retlen, const u_char *buf)
1155{
1156 struct spi_nor *nor = mtd_to_spi_nor(mtd);
8c927809 1157 struct spi_slave *spi = nor->spi;
7aeedac0
V
1158 size_t actual;
1159 int ret;
1160
1161 dev_dbg(nor->dev, "to 0x%08x, len %zd\n", (u32)to, len);
8c927809
V
1162 if (spi->mode & SPI_TX_BYTE)
1163 return sst_write_byteprogram(nor, to, len, retlen, buf);
7aeedac0
V
1164
1165 write_enable(nor);
1166
1167 nor->sst_write_second = false;
1168
1169 actual = to % 2;
1170 /* Start write from odd address. */
1171 if (actual) {
1172 nor->program_opcode = SPINOR_OP_BP;
1173
1174 /* write one byte. */
1175 ret = nor->write(nor, to, 1, buf);
1176 if (ret < 0)
1177 goto sst_write_err;
1178 ret = spi_nor_wait_till_ready(nor);
1179 if (ret)
1180 goto sst_write_err;
1181 }
1182 to += actual;
1183
1184 /* Write out most of the data here. */
1185 for (; actual < len - 1; actual += 2) {
1186 nor->program_opcode = SPINOR_OP_AAI_WP;
1187
1188 /* write two bytes. */
1189 ret = nor->write(nor, to, 2, buf + actual);
1190 if (ret < 0)
1191 goto sst_write_err;
1192 ret = spi_nor_wait_till_ready(nor);
1193 if (ret)
1194 goto sst_write_err;
1195 to += 2;
1196 nor->sst_write_second = true;
1197 }
1198 nor->sst_write_second = false;
1199
1200 write_disable(nor);
1201 ret = spi_nor_wait_till_ready(nor);
1202 if (ret)
1203 goto sst_write_err;
1204
1205 /* Write out trailing byte if it exists. */
1206 if (actual != len) {
1207 write_enable(nor);
1208
1209 nor->program_opcode = SPINOR_OP_BP;
1210 ret = nor->write(nor, to, 1, buf + actual);
1211 if (ret < 0)
1212 goto sst_write_err;
1213 ret = spi_nor_wait_till_ready(nor);
1214 if (ret)
1215 goto sst_write_err;
1216 write_disable(nor);
1217 actual += 1;
1218 }
1219sst_write_err:
1220 *retlen += actual;
1221 return ret;
1222}
1223#endif
1224/*
1225 * Write an address range to the nor chip. Data must be written in
1226 * FLASH_PAGESIZE chunks. The address range may be any size provided
1227 * it is within the physical boundaries.
1228 */
1229static int spi_nor_write(struct mtd_info *mtd, loff_t to, size_t len,
1230 size_t *retlen, const u_char *buf)
1231{
1232 struct spi_nor *nor = mtd_to_spi_nor(mtd);
1233 size_t page_offset, page_remain, i;
1234 ssize_t ret;
1235
1236 dev_dbg(nor->dev, "to 0x%08x, len %zd\n", (u32)to, len);
1237
cb56caac
VR
1238 if (!len)
1239 return 0;
1240
7aeedac0
V
1241 for (i = 0; i < len; ) {
1242 ssize_t written;
1243 loff_t addr = to + i;
1244
1245 /*
1246 * If page_size is a power of two, the offset can be quickly
1247 * calculated with an AND operation. On the other cases we
1248 * need to do a modulus operation (more expensive).
1249 * Power of two numbers have only one bit set and we can use
1250 * the instruction hweight32 to detect if we need to do a
1251 * modulus (do_div()) or not.
1252 */
1253 if (hweight32(nor->page_size) == 1) {
1254 page_offset = addr & (nor->page_size - 1);
1255 } else {
1256 u64 aux = addr;
1257
1258 page_offset = do_div(aux, nor->page_size);
1259 }
1260 /* the size of data remaining on the first page */
1261 page_remain = min_t(size_t,
1262 nor->page_size - page_offset, len - i);
1263
8c927809
V
1264#ifdef CONFIG_SPI_FLASH_BAR
1265 ret = write_bar(nor, addr);
1266 if (ret < 0)
1267 return ret;
1268#endif
7aeedac0
V
1269 write_enable(nor);
1270 ret = nor->write(nor, addr, page_remain, buf + i);
1271 if (ret < 0)
1272 goto write_err;
1273 written = ret;
1274
1275 ret = spi_nor_wait_till_ready(nor);
1276 if (ret)
1277 goto write_err;
1278 *retlen += written;
1279 i += written;
7aeedac0
V
1280 }
1281
1282write_err:
8c927809
V
1283#ifdef CONFIG_SPI_FLASH_BAR
1284 ret = clean_bar(nor);
1285#endif
7aeedac0
V
1286 return ret;
1287}
1288
1289#ifdef CONFIG_SPI_FLASH_MACRONIX
1290/**
1291 * macronix_quad_enable() - set QE bit in Status Register.
1292 * @nor: pointer to a 'struct spi_nor'
1293 *
1294 * Set the Quad Enable (QE) bit in the Status Register.
1295 *
1296 * bit 6 of the Status Register is the QE bit for Macronix like QSPI memories.
1297 *
1298 * Return: 0 on success, -errno otherwise.
1299 */
1300static int macronix_quad_enable(struct spi_nor *nor)
1301{
1302 int ret, val;
1303
1304 val = read_sr(nor);
1305 if (val < 0)
1306 return val;
1307 if (val & SR_QUAD_EN_MX)
1308 return 0;
1309
1310 write_enable(nor);
1311
1312 write_sr(nor, val | SR_QUAD_EN_MX);
1313
1314 ret = spi_nor_wait_till_ready(nor);
1315 if (ret)
1316 return ret;
1317
1318 ret = read_sr(nor);
1319 if (!(ret > 0 && (ret & SR_QUAD_EN_MX))) {
1320 dev_err(nor->dev, "Macronix Quad bit not set\n");
1321 return -EINVAL;
1322 }
1323
1324 return 0;
1325}
1326#endif
1327
1328#if defined(CONFIG_SPI_FLASH_SPANSION) || defined(CONFIG_SPI_FLASH_WINBOND)
1329/*
1330 * Write status Register and configuration register with 2 bytes
1331 * The first byte will be written to the status register, while the
1332 * second byte will be written to the configuration register.
1333 * Return negative if error occurred.
1334 */
1335static int write_sr_cr(struct spi_nor *nor, u8 *sr_cr)
1336{
1337 int ret;
1338
1339 write_enable(nor);
1340
1341 ret = nor->write_reg(nor, SPINOR_OP_WRSR, sr_cr, 2);
1342 if (ret < 0) {
1343 dev_dbg(nor->dev,
1344 "error while writing configuration register\n");
1345 return -EINVAL;
1346 }
1347
1348 ret = spi_nor_wait_till_ready(nor);
1349 if (ret) {
1350 dev_dbg(nor->dev,
1351 "timeout while writing configuration register\n");
1352 return ret;
1353 }
1354
1355 return 0;
1356}
1357
1358/**
1359 * spansion_read_cr_quad_enable() - set QE bit in Configuration Register.
1360 * @nor: pointer to a 'struct spi_nor'
1361 *
1362 * Set the Quad Enable (QE) bit in the Configuration Register.
1363 * This function should be used with QSPI memories supporting the Read
1364 * Configuration Register (35h) instruction.
1365 *
1366 * bit 1 of the Configuration Register is the QE bit for Spansion like QSPI
1367 * memories.
1368 *
1369 * Return: 0 on success, -errno otherwise.
1370 */
1371static int spansion_read_cr_quad_enable(struct spi_nor *nor)
1372{
1373 u8 sr_cr[2];
1374 int ret;
1375
1376 /* Check current Quad Enable bit value. */
1377 ret = read_cr(nor);
1378 if (ret < 0) {
1379 dev_dbg(dev, "error while reading configuration register\n");
1380 return -EINVAL;
1381 }
1382
1383 if (ret & CR_QUAD_EN_SPAN)
1384 return 0;
1385
1386 sr_cr[1] = ret | CR_QUAD_EN_SPAN;
1387
1388 /* Keep the current value of the Status Register. */
1389 ret = read_sr(nor);
1390 if (ret < 0) {
1391 dev_dbg(dev, "error while reading status register\n");
1392 return -EINVAL;
1393 }
1394 sr_cr[0] = ret;
1395
1396 ret = write_sr_cr(nor, sr_cr);
1397 if (ret)
1398 return ret;
1399
1400 /* Read back and check it. */
1401 ret = read_cr(nor);
1402 if (!(ret > 0 && (ret & CR_QUAD_EN_SPAN))) {
1403 dev_dbg(nor->dev, "Spansion Quad bit not set\n");
1404 return -EINVAL;
1405 }
1406
1407 return 0;
1408}
0c6f187c
V
1409
1410#if CONFIG_IS_ENABLED(SPI_FLASH_SFDP_SUPPORT)
1411/**
1412 * spansion_no_read_cr_quad_enable() - set QE bit in Configuration Register.
1413 * @nor: pointer to a 'struct spi_nor'
1414 *
1415 * Set the Quad Enable (QE) bit in the Configuration Register.
1416 * This function should be used with QSPI memories not supporting the Read
1417 * Configuration Register (35h) instruction.
1418 *
1419 * bit 1 of the Configuration Register is the QE bit for Spansion like QSPI
1420 * memories.
1421 *
1422 * Return: 0 on success, -errno otherwise.
1423 */
1424static int spansion_no_read_cr_quad_enable(struct spi_nor *nor)
1425{
1426 u8 sr_cr[2];
1427 int ret;
1428
1429 /* Keep the current value of the Status Register. */
1430 ret = read_sr(nor);
1431 if (ret < 0) {
1432 dev_dbg(nor->dev, "error while reading status register\n");
1433 return -EINVAL;
1434 }
1435 sr_cr[0] = ret;
1436 sr_cr[1] = CR_QUAD_EN_SPAN;
1437
1438 return write_sr_cr(nor, sr_cr);
1439}
1440
1441#endif /* CONFIG_SPI_FLASH_SFDP_SUPPORT */
7aeedac0
V
1442#endif /* CONFIG_SPI_FLASH_SPANSION */
1443
1444struct spi_nor_read_command {
1445 u8 num_mode_clocks;
1446 u8 num_wait_states;
1447 u8 opcode;
1448 enum spi_nor_protocol proto;
1449};
1450
1451struct spi_nor_pp_command {
1452 u8 opcode;
1453 enum spi_nor_protocol proto;
1454};
1455
1456enum spi_nor_read_command_index {
1457 SNOR_CMD_READ,
1458 SNOR_CMD_READ_FAST,
1459 SNOR_CMD_READ_1_1_1_DTR,
1460
1461 /* Dual SPI */
1462 SNOR_CMD_READ_1_1_2,
1463 SNOR_CMD_READ_1_2_2,
1464 SNOR_CMD_READ_2_2_2,
1465 SNOR_CMD_READ_1_2_2_DTR,
1466
1467 /* Quad SPI */
1468 SNOR_CMD_READ_1_1_4,
1469 SNOR_CMD_READ_1_4_4,
1470 SNOR_CMD_READ_4_4_4,
1471 SNOR_CMD_READ_1_4_4_DTR,
1472
1473 /* Octo SPI */
1474 SNOR_CMD_READ_1_1_8,
1475 SNOR_CMD_READ_1_8_8,
1476 SNOR_CMD_READ_8_8_8,
1477 SNOR_CMD_READ_1_8_8_DTR,
1478
1479 SNOR_CMD_READ_MAX
1480};
1481
1482enum spi_nor_pp_command_index {
1483 SNOR_CMD_PP,
1484
1485 /* Quad SPI */
1486 SNOR_CMD_PP_1_1_4,
1487 SNOR_CMD_PP_1_4_4,
1488 SNOR_CMD_PP_4_4_4,
1489
1490 /* Octo SPI */
1491 SNOR_CMD_PP_1_1_8,
1492 SNOR_CMD_PP_1_8_8,
1493 SNOR_CMD_PP_8_8_8,
1494
1495 SNOR_CMD_PP_MAX
1496};
1497
1498struct spi_nor_flash_parameter {
1499 u64 size;
1500 u32 page_size;
1501
1502 struct spi_nor_hwcaps hwcaps;
1503 struct spi_nor_read_command reads[SNOR_CMD_READ_MAX];
1504 struct spi_nor_pp_command page_programs[SNOR_CMD_PP_MAX];
1505
1506 int (*quad_enable)(struct spi_nor *nor);
1507};
1508
1509static void
1510spi_nor_set_read_settings(struct spi_nor_read_command *read,
1511 u8 num_mode_clocks,
1512 u8 num_wait_states,
1513 u8 opcode,
1514 enum spi_nor_protocol proto)
1515{
1516 read->num_mode_clocks = num_mode_clocks;
1517 read->num_wait_states = num_wait_states;
1518 read->opcode = opcode;
1519 read->proto = proto;
1520}
1521
1522static void
1523spi_nor_set_pp_settings(struct spi_nor_pp_command *pp,
1524 u8 opcode,
1525 enum spi_nor_protocol proto)
1526{
1527 pp->opcode = opcode;
1528 pp->proto = proto;
1529}
1530
0c6f187c
V
1531#if CONFIG_IS_ENABLED(SPI_FLASH_SFDP_SUPPORT)
1532/*
1533 * Serial Flash Discoverable Parameters (SFDP) parsing.
1534 */
1535
1536/**
1537 * spi_nor_read_sfdp() - read Serial Flash Discoverable Parameters.
1538 * @nor: pointer to a 'struct spi_nor'
1539 * @addr: offset in the SFDP area to start reading data from
1540 * @len: number of bytes to read
1541 * @buf: buffer where the SFDP data are copied into (dma-safe memory)
1542 *
1543 * Whatever the actual numbers of bytes for address and dummy cycles are
1544 * for (Fast) Read commands, the Read SFDP (5Ah) instruction is always
1545 * followed by a 3-byte address and 8 dummy clock cycles.
1546 *
1547 * Return: 0 on success, -errno otherwise.
1548 */
1549static int spi_nor_read_sfdp(struct spi_nor *nor, u32 addr,
1550 size_t len, void *buf)
1551{
1552 u8 addr_width, read_opcode, read_dummy;
1553 int ret;
1554
1555 read_opcode = nor->read_opcode;
1556 addr_width = nor->addr_width;
1557 read_dummy = nor->read_dummy;
1558
1559 nor->read_opcode = SPINOR_OP_RDSFDP;
1560 nor->addr_width = 3;
1561 nor->read_dummy = 8;
1562
1563 while (len) {
1564 ret = nor->read(nor, addr, len, (u8 *)buf);
1565 if (!ret || ret > len) {
1566 ret = -EIO;
1567 goto read_err;
1568 }
1569 if (ret < 0)
1570 goto read_err;
1571
1572 buf += ret;
1573 addr += ret;
1574 len -= ret;
1575 }
1576 ret = 0;
1577
1578read_err:
1579 nor->read_opcode = read_opcode;
1580 nor->addr_width = addr_width;
1581 nor->read_dummy = read_dummy;
1582
1583 return ret;
1584}
1585
1586struct sfdp_parameter_header {
1587 u8 id_lsb;
1588 u8 minor;
1589 u8 major;
1590 u8 length; /* in double words */
1591 u8 parameter_table_pointer[3]; /* byte address */
1592 u8 id_msb;
1593};
1594
1595#define SFDP_PARAM_HEADER_ID(p) (((p)->id_msb << 8) | (p)->id_lsb)
1596#define SFDP_PARAM_HEADER_PTP(p) \
1597 (((p)->parameter_table_pointer[2] << 16) | \
1598 ((p)->parameter_table_pointer[1] << 8) | \
1599 ((p)->parameter_table_pointer[0] << 0))
1600
1601#define SFDP_BFPT_ID 0xff00 /* Basic Flash Parameter Table */
1602#define SFDP_SECTOR_MAP_ID 0xff81 /* Sector Map Table */
a11c081d 1603#define SFDP_SST_ID 0x01bf /* Manufacturer specific Table */
0c6f187c
V
1604
1605#define SFDP_SIGNATURE 0x50444653U
1606#define SFDP_JESD216_MAJOR 1
1607#define SFDP_JESD216_MINOR 0
1608#define SFDP_JESD216A_MINOR 5
1609#define SFDP_JESD216B_MINOR 6
1610
1611struct sfdp_header {
1612 u32 signature; /* Ox50444653U <=> "SFDP" */
1613 u8 minor;
1614 u8 major;
1615 u8 nph; /* 0-base number of parameter headers */
1616 u8 unused;
1617
1618 /* Basic Flash Parameter Table. */
1619 struct sfdp_parameter_header bfpt_header;
1620};
1621
1622/* Basic Flash Parameter Table */
1623
1624/*
1625 * JESD216 rev B defines a Basic Flash Parameter Table of 16 DWORDs.
1626 * They are indexed from 1 but C arrays are indexed from 0.
1627 */
1628#define BFPT_DWORD(i) ((i) - 1)
1629#define BFPT_DWORD_MAX 16
1630
1631/* The first version of JESB216 defined only 9 DWORDs. */
1632#define BFPT_DWORD_MAX_JESD216 9
1633
1634/* 1st DWORD. */
1635#define BFPT_DWORD1_FAST_READ_1_1_2 BIT(16)
1636#define BFPT_DWORD1_ADDRESS_BYTES_MASK GENMASK(18, 17)
1637#define BFPT_DWORD1_ADDRESS_BYTES_3_ONLY (0x0UL << 17)
1638#define BFPT_DWORD1_ADDRESS_BYTES_3_OR_4 (0x1UL << 17)
1639#define BFPT_DWORD1_ADDRESS_BYTES_4_ONLY (0x2UL << 17)
1640#define BFPT_DWORD1_DTR BIT(19)
1641#define BFPT_DWORD1_FAST_READ_1_2_2 BIT(20)
1642#define BFPT_DWORD1_FAST_READ_1_4_4 BIT(21)
1643#define BFPT_DWORD1_FAST_READ_1_1_4 BIT(22)
1644
1645/* 5th DWORD. */
1646#define BFPT_DWORD5_FAST_READ_2_2_2 BIT(0)
1647#define BFPT_DWORD5_FAST_READ_4_4_4 BIT(4)
1648
1649/* 11th DWORD. */
1650#define BFPT_DWORD11_PAGE_SIZE_SHIFT 4
1651#define BFPT_DWORD11_PAGE_SIZE_MASK GENMASK(7, 4)
1652
1653/* 15th DWORD. */
1654
1655/*
1656 * (from JESD216 rev B)
1657 * Quad Enable Requirements (QER):
1658 * - 000b: Device does not have a QE bit. Device detects 1-1-4 and 1-4-4
1659 * reads based on instruction. DQ3/HOLD# functions are hold during
1660 * instruction phase.
1661 * - 001b: QE is bit 1 of status register 2. It is set via Write Status with
1662 * two data bytes where bit 1 of the second byte is one.
1663 * [...]
1664 * Writing only one byte to the status register has the side-effect of
1665 * clearing status register 2, including the QE bit. The 100b code is
1666 * used if writing one byte to the status register does not modify
1667 * status register 2.
1668 * - 010b: QE is bit 6 of status register 1. It is set via Write Status with
1669 * one data byte where bit 6 is one.
1670 * [...]
1671 * - 011b: QE is bit 7 of status register 2. It is set via Write status
1672 * register 2 instruction 3Eh with one data byte where bit 7 is one.
1673 * [...]
1674 * The status register 2 is read using instruction 3Fh.
1675 * - 100b: QE is bit 1 of status register 2. It is set via Write Status with
1676 * two data bytes where bit 1 of the second byte is one.
1677 * [...]
1678 * In contrast to the 001b code, writing one byte to the status
1679 * register does not modify status register 2.
1680 * - 101b: QE is bit 1 of status register 2. Status register 1 is read using
1681 * Read Status instruction 05h. Status register2 is read using
1682 * instruction 35h. QE is set via Writ Status instruction 01h with
1683 * two data bytes where bit 1 of the second byte is one.
1684 * [...]
1685 */
1686#define BFPT_DWORD15_QER_MASK GENMASK(22, 20)
1687#define BFPT_DWORD15_QER_NONE (0x0UL << 20) /* Micron */
1688#define BFPT_DWORD15_QER_SR2_BIT1_BUGGY (0x1UL << 20)
1689#define BFPT_DWORD15_QER_SR1_BIT6 (0x2UL << 20) /* Macronix */
1690#define BFPT_DWORD15_QER_SR2_BIT7 (0x3UL << 20)
1691#define BFPT_DWORD15_QER_SR2_BIT1_NO_RD (0x4UL << 20)
1692#define BFPT_DWORD15_QER_SR2_BIT1 (0x5UL << 20) /* Spansion */
1693
1694struct sfdp_bfpt {
1695 u32 dwords[BFPT_DWORD_MAX];
1696};
1697
1698/* Fast Read settings. */
1699
1700static void
1701spi_nor_set_read_settings_from_bfpt(struct spi_nor_read_command *read,
1702 u16 half,
1703 enum spi_nor_protocol proto)
1704{
1705 read->num_mode_clocks = (half >> 5) & 0x07;
1706 read->num_wait_states = (half >> 0) & 0x1f;
1707 read->opcode = (half >> 8) & 0xff;
1708 read->proto = proto;
1709}
1710
1711struct sfdp_bfpt_read {
1712 /* The Fast Read x-y-z hardware capability in params->hwcaps.mask. */
1713 u32 hwcaps;
1714
1715 /*
1716 * The <supported_bit> bit in <supported_dword> BFPT DWORD tells us
1717 * whether the Fast Read x-y-z command is supported.
1718 */
1719 u32 supported_dword;
1720 u32 supported_bit;
1721
1722 /*
1723 * The half-word at offset <setting_shift> in <setting_dword> BFPT DWORD
1724 * encodes the op code, the number of mode clocks and the number of wait
1725 * states to be used by Fast Read x-y-z command.
1726 */
1727 u32 settings_dword;
1728 u32 settings_shift;
1729
1730 /* The SPI protocol for this Fast Read x-y-z command. */
1731 enum spi_nor_protocol proto;
1732};
1733
1734static const struct sfdp_bfpt_read sfdp_bfpt_reads[] = {
1735 /* Fast Read 1-1-2 */
1736 {
1737 SNOR_HWCAPS_READ_1_1_2,
1738 BFPT_DWORD(1), BIT(16), /* Supported bit */
1739 BFPT_DWORD(4), 0, /* Settings */
1740 SNOR_PROTO_1_1_2,
1741 },
1742
1743 /* Fast Read 1-2-2 */
1744 {
1745 SNOR_HWCAPS_READ_1_2_2,
1746 BFPT_DWORD(1), BIT(20), /* Supported bit */
1747 BFPT_DWORD(4), 16, /* Settings */
1748 SNOR_PROTO_1_2_2,
1749 },
1750
1751 /* Fast Read 2-2-2 */
1752 {
1753 SNOR_HWCAPS_READ_2_2_2,
1754 BFPT_DWORD(5), BIT(0), /* Supported bit */
1755 BFPT_DWORD(6), 16, /* Settings */
1756 SNOR_PROTO_2_2_2,
1757 },
1758
1759 /* Fast Read 1-1-4 */
1760 {
1761 SNOR_HWCAPS_READ_1_1_4,
1762 BFPT_DWORD(1), BIT(22), /* Supported bit */
1763 BFPT_DWORD(3), 16, /* Settings */
1764 SNOR_PROTO_1_1_4,
1765 },
1766
1767 /* Fast Read 1-4-4 */
1768 {
1769 SNOR_HWCAPS_READ_1_4_4,
1770 BFPT_DWORD(1), BIT(21), /* Supported bit */
1771 BFPT_DWORD(3), 0, /* Settings */
1772 SNOR_PROTO_1_4_4,
1773 },
1774
1775 /* Fast Read 4-4-4 */
1776 {
1777 SNOR_HWCAPS_READ_4_4_4,
1778 BFPT_DWORD(5), BIT(4), /* Supported bit */
1779 BFPT_DWORD(7), 16, /* Settings */
1780 SNOR_PROTO_4_4_4,
1781 },
1782};
1783
1784struct sfdp_bfpt_erase {
1785 /*
1786 * The half-word at offset <shift> in DWORD <dwoard> encodes the
1787 * op code and erase sector size to be used by Sector Erase commands.
1788 */
1789 u32 dword;
1790 u32 shift;
1791};
1792
1793static const struct sfdp_bfpt_erase sfdp_bfpt_erases[] = {
1794 /* Erase Type 1 in DWORD8 bits[15:0] */
1795 {BFPT_DWORD(8), 0},
1796
1797 /* Erase Type 2 in DWORD8 bits[31:16] */
1798 {BFPT_DWORD(8), 16},
1799
1800 /* Erase Type 3 in DWORD9 bits[15:0] */
1801 {BFPT_DWORD(9), 0},
1802
1803 /* Erase Type 4 in DWORD9 bits[31:16] */
1804 {BFPT_DWORD(9), 16},
1805};
1806
1807static int spi_nor_hwcaps_read2cmd(u32 hwcaps);
1808
1809/**
1810 * spi_nor_parse_bfpt() - read and parse the Basic Flash Parameter Table.
1811 * @nor: pointer to a 'struct spi_nor'
1812 * @bfpt_header: pointer to the 'struct sfdp_parameter_header' describing
1813 * the Basic Flash Parameter Table length and version
1814 * @params: pointer to the 'struct spi_nor_flash_parameter' to be
1815 * filled
1816 *
1817 * The Basic Flash Parameter Table is the main and only mandatory table as
1818 * defined by the SFDP (JESD216) specification.
1819 * It provides us with the total size (memory density) of the data array and
1820 * the number of address bytes for Fast Read, Page Program and Sector Erase
1821 * commands.
1822 * For Fast READ commands, it also gives the number of mode clock cycles and
1823 * wait states (regrouped in the number of dummy clock cycles) for each
1824 * supported instruction op code.
1825 * For Page Program, the page size is now available since JESD216 rev A, however
1826 * the supported instruction op codes are still not provided.
1827 * For Sector Erase commands, this table stores the supported instruction op
1828 * codes and the associated sector sizes.
1829 * Finally, the Quad Enable Requirements (QER) are also available since JESD216
1830 * rev A. The QER bits encode the manufacturer dependent procedure to be
1831 * executed to set the Quad Enable (QE) bit in some internal register of the
1832 * Quad SPI memory. Indeed the QE bit, when it exists, must be set before
1833 * sending any Quad SPI command to the memory. Actually, setting the QE bit
1834 * tells the memory to reassign its WP# and HOLD#/RESET# pins to functions IO2
1835 * and IO3 hence enabling 4 (Quad) I/O lines.
1836 *
1837 * Return: 0 on success, -errno otherwise.
1838 */
1839static int spi_nor_parse_bfpt(struct spi_nor *nor,
1840 const struct sfdp_parameter_header *bfpt_header,
1841 struct spi_nor_flash_parameter *params)
1842{
1843 struct mtd_info *mtd = &nor->mtd;
1844 struct sfdp_bfpt bfpt;
1845 size_t len;
1846 int i, cmd, err;
1847 u32 addr;
1848 u16 half;
1849
1850 /* JESD216 Basic Flash Parameter Table length is at least 9 DWORDs. */
1851 if (bfpt_header->length < BFPT_DWORD_MAX_JESD216)
1852 return -EINVAL;
1853
1854 /* Read the Basic Flash Parameter Table. */
1855 len = min_t(size_t, sizeof(bfpt),
1856 bfpt_header->length * sizeof(u32));
1857 addr = SFDP_PARAM_HEADER_PTP(bfpt_header);
1858 memset(&bfpt, 0, sizeof(bfpt));
1859 err = spi_nor_read_sfdp(nor, addr, len, &bfpt);
1860 if (err < 0)
1861 return err;
1862
1863 /* Fix endianness of the BFPT DWORDs. */
1864 for (i = 0; i < BFPT_DWORD_MAX; i++)
1865 bfpt.dwords[i] = le32_to_cpu(bfpt.dwords[i]);
1866
1867 /* Number of address bytes. */
1868 switch (bfpt.dwords[BFPT_DWORD(1)] & BFPT_DWORD1_ADDRESS_BYTES_MASK) {
1869 case BFPT_DWORD1_ADDRESS_BYTES_3_ONLY:
1870 nor->addr_width = 3;
1871 break;
1872
1873 case BFPT_DWORD1_ADDRESS_BYTES_4_ONLY:
1874 nor->addr_width = 4;
1875 break;
1876
1877 default:
1878 break;
1879 }
1880
1881 /* Flash Memory Density (in bits). */
1882 params->size = bfpt.dwords[BFPT_DWORD(2)];
1883 if (params->size & BIT(31)) {
1884 params->size &= ~BIT(31);
1885
1886 /*
1887 * Prevent overflows on params->size. Anyway, a NOR of 2^64
1888 * bits is unlikely to exist so this error probably means
1889 * the BFPT we are reading is corrupted/wrong.
1890 */
1891 if (params->size > 63)
1892 return -EINVAL;
1893
1894 params->size = 1ULL << params->size;
1895 } else {
1896 params->size++;
1897 }
1898 params->size >>= 3; /* Convert to bytes. */
1899
1900 /* Fast Read settings. */
1901 for (i = 0; i < ARRAY_SIZE(sfdp_bfpt_reads); i++) {
1902 const struct sfdp_bfpt_read *rd = &sfdp_bfpt_reads[i];
1903 struct spi_nor_read_command *read;
1904
1905 if (!(bfpt.dwords[rd->supported_dword] & rd->supported_bit)) {
1906 params->hwcaps.mask &= ~rd->hwcaps;
1907 continue;
1908 }
1909
1910 params->hwcaps.mask |= rd->hwcaps;
1911 cmd = spi_nor_hwcaps_read2cmd(rd->hwcaps);
1912 read = &params->reads[cmd];
1913 half = bfpt.dwords[rd->settings_dword] >> rd->settings_shift;
1914 spi_nor_set_read_settings_from_bfpt(read, half, rd->proto);
1915 }
1916
1917 /* Sector Erase settings. */
1918 for (i = 0; i < ARRAY_SIZE(sfdp_bfpt_erases); i++) {
1919 const struct sfdp_bfpt_erase *er = &sfdp_bfpt_erases[i];
1920 u32 erasesize;
1921 u8 opcode;
1922
1923 half = bfpt.dwords[er->dword] >> er->shift;
1924 erasesize = half & 0xff;
1925
1926 /* erasesize == 0 means this Erase Type is not supported. */
1927 if (!erasesize)
1928 continue;
1929
1930 erasesize = 1U << erasesize;
1931 opcode = (half >> 8) & 0xff;
2a2174d3 1932#ifdef CONFIG_SPI_FLASH_USE_4K_SECTORS
0c6f187c
V
1933 if (erasesize == SZ_4K) {
1934 nor->erase_opcode = opcode;
1935 mtd->erasesize = erasesize;
1936 break;
1937 }
1938#endif
1939 if (!mtd->erasesize || mtd->erasesize < erasesize) {
1940 nor->erase_opcode = opcode;
1941 mtd->erasesize = erasesize;
1942 }
1943 }
1944
1945 /* Stop here if not JESD216 rev A or later. */
1946 if (bfpt_header->length < BFPT_DWORD_MAX)
1947 return 0;
1948
1949 /* Page size: this field specifies 'N' so the page size = 2^N bytes. */
1950 params->page_size = bfpt.dwords[BFPT_DWORD(11)];
1951 params->page_size &= BFPT_DWORD11_PAGE_SIZE_MASK;
1952 params->page_size >>= BFPT_DWORD11_PAGE_SIZE_SHIFT;
1953 params->page_size = 1U << params->page_size;
1954
1955 /* Quad Enable Requirements. */
1956 switch (bfpt.dwords[BFPT_DWORD(15)] & BFPT_DWORD15_QER_MASK) {
1957 case BFPT_DWORD15_QER_NONE:
1958 params->quad_enable = NULL;
1959 break;
1960#if defined(CONFIG_SPI_FLASH_SPANSION) || defined(CONFIG_SPI_FLASH_WINBOND)
1961 case BFPT_DWORD15_QER_SR2_BIT1_BUGGY:
1962 case BFPT_DWORD15_QER_SR2_BIT1_NO_RD:
1963 params->quad_enable = spansion_no_read_cr_quad_enable;
1964 break;
1965#endif
1966#ifdef CONFIG_SPI_FLASH_MACRONIX
1967 case BFPT_DWORD15_QER_SR1_BIT6:
1968 params->quad_enable = macronix_quad_enable;
1969 break;
1970#endif
1971#if defined(CONFIG_SPI_FLASH_SPANSION) || defined(CONFIG_SPI_FLASH_WINBOND)
1972 case BFPT_DWORD15_QER_SR2_BIT1:
1973 params->quad_enable = spansion_read_cr_quad_enable;
1974 break;
1975#endif
1976 default:
1977 return -EINVAL;
1978 }
1979
1980 return 0;
1981}
1982
a11c081d
TA
1983/**
1984 * spi_nor_parse_microchip_sfdp() - parse the Microchip manufacturer specific
1985 * SFDP table.
1986 * @nor: pointer to a 'struct spi_nor'.
1987 * @param_header: pointer to the SFDP parameter header.
1988 *
1989 * Return: 0 on success, -errno otherwise.
1990 */
1991static int
1992spi_nor_parse_microchip_sfdp(struct spi_nor *nor,
1993 const struct sfdp_parameter_header *param_header)
1994{
1995 size_t size;
1996 u32 addr;
1997 int ret;
1998
1999 size = param_header->length * sizeof(u32);
2000 addr = SFDP_PARAM_HEADER_PTP(param_header);
2001
2002 nor->manufacturer_sfdp = devm_kmalloc(nor->dev, size, GFP_KERNEL);
2003 if (!nor->manufacturer_sfdp)
2004 return -ENOMEM;
2005
2006 ret = spi_nor_read_sfdp(nor, addr, size, nor->manufacturer_sfdp);
2007
2008 return ret;
2009}
2010
0c6f187c
V
2011/**
2012 * spi_nor_parse_sfdp() - parse the Serial Flash Discoverable Parameters.
2013 * @nor: pointer to a 'struct spi_nor'
2014 * @params: pointer to the 'struct spi_nor_flash_parameter' to be
2015 * filled
2016 *
2017 * The Serial Flash Discoverable Parameters are described by the JEDEC JESD216
2018 * specification. This is a standard which tends to supported by almost all
2019 * (Q)SPI memory manufacturers. Those hard-coded tables allow us to learn at
2020 * runtime the main parameters needed to perform basic SPI flash operations such
2021 * as Fast Read, Page Program or Sector Erase commands.
2022 *
2023 * Return: 0 on success, -errno otherwise.
2024 */
2025static int spi_nor_parse_sfdp(struct spi_nor *nor,
2026 struct spi_nor_flash_parameter *params)
2027{
2028 const struct sfdp_parameter_header *param_header, *bfpt_header;
2029 struct sfdp_parameter_header *param_headers = NULL;
2030 struct sfdp_header header;
2031 size_t psize;
2032 int i, err;
2033
2034 /* Get the SFDP header. */
2035 err = spi_nor_read_sfdp(nor, 0, sizeof(header), &header);
2036 if (err < 0)
2037 return err;
2038
2039 /* Check the SFDP header version. */
2040 if (le32_to_cpu(header.signature) != SFDP_SIGNATURE ||
2041 header.major != SFDP_JESD216_MAJOR)
2042 return -EINVAL;
2043
2044 /*
2045 * Verify that the first and only mandatory parameter header is a
2046 * Basic Flash Parameter Table header as specified in JESD216.
2047 */
2048 bfpt_header = &header.bfpt_header;
2049 if (SFDP_PARAM_HEADER_ID(bfpt_header) != SFDP_BFPT_ID ||
2050 bfpt_header->major != SFDP_JESD216_MAJOR)
2051 return -EINVAL;
2052
2053 /*
2054 * Allocate memory then read all parameter headers with a single
2055 * Read SFDP command. These parameter headers will actually be parsed
2056 * twice: a first time to get the latest revision of the basic flash
2057 * parameter table, then a second time to handle the supported optional
2058 * tables.
2059 * Hence we read the parameter headers once for all to reduce the
2060 * processing time. Also we use kmalloc() instead of devm_kmalloc()
2061 * because we don't need to keep these parameter headers: the allocated
2062 * memory is always released with kfree() before exiting this function.
2063 */
2064 if (header.nph) {
2065 psize = header.nph * sizeof(*param_headers);
2066
2067 param_headers = kmalloc(psize, GFP_KERNEL);
2068 if (!param_headers)
2069 return -ENOMEM;
2070
2071 err = spi_nor_read_sfdp(nor, sizeof(header),
2072 psize, param_headers);
2073 if (err < 0) {
2074 dev_err(dev, "failed to read SFDP parameter headers\n");
2075 goto exit;
2076 }
2077 }
2078
2079 /*
2080 * Check other parameter headers to get the latest revision of
2081 * the basic flash parameter table.
2082 */
2083 for (i = 0; i < header.nph; i++) {
2084 param_header = &param_headers[i];
2085
2086 if (SFDP_PARAM_HEADER_ID(param_header) == SFDP_BFPT_ID &&
2087 param_header->major == SFDP_JESD216_MAJOR &&
2088 (param_header->minor > bfpt_header->minor ||
2089 (param_header->minor == bfpt_header->minor &&
2090 param_header->length > bfpt_header->length)))
2091 bfpt_header = param_header;
2092 }
2093
2094 err = spi_nor_parse_bfpt(nor, bfpt_header, params);
2095 if (err)
2096 goto exit;
2097
2098 /* Parse other parameter headers. */
2099 for (i = 0; i < header.nph; i++) {
2100 param_header = &param_headers[i];
2101
2102 switch (SFDP_PARAM_HEADER_ID(param_header)) {
2103 case SFDP_SECTOR_MAP_ID:
2104 dev_info(dev, "non-uniform erase sector maps are not supported yet.\n");
2105 break;
2106
a11c081d
TA
2107 case SFDP_SST_ID:
2108 err = spi_nor_parse_microchip_sfdp(nor, param_header);
2109 break;
2110
0c6f187c
V
2111 default:
2112 break;
2113 }
2114
a11c081d
TA
2115 if (err) {
2116 dev_warn(dev, "Failed to parse optional parameter table: %04x\n",
2117 SFDP_PARAM_HEADER_ID(param_header));
2118 /*
2119 * Let's not drop all information we extracted so far
2120 * if optional table parsers fail. In case of failing,
2121 * each optional parser is responsible to roll back to
2122 * the previously known spi_nor data.
2123 */
2124 err = 0;
2125 }
0c6f187c
V
2126 }
2127
2128exit:
2129 kfree(param_headers);
2130 return err;
2131}
2132#else
2133static int spi_nor_parse_sfdp(struct spi_nor *nor,
2134 struct spi_nor_flash_parameter *params)
2135{
2136 return -EINVAL;
2137}
2138#endif /* SPI_FLASH_SFDP_SUPPORT */
2139
7aeedac0
V
2140static int spi_nor_init_params(struct spi_nor *nor,
2141 const struct flash_info *info,
2142 struct spi_nor_flash_parameter *params)
2143{
2144 /* Set legacy flash parameters as default. */
2145 memset(params, 0, sizeof(*params));
2146
2147 /* Set SPI NOR sizes. */
2148 params->size = info->sector_size * info->n_sectors;
2149 params->page_size = info->page_size;
2150
2151 /* (Fast) Read settings. */
2152 params->hwcaps.mask |= SNOR_HWCAPS_READ;
2153 spi_nor_set_read_settings(&params->reads[SNOR_CMD_READ],
2154 0, 0, SPINOR_OP_READ,
2155 SNOR_PROTO_1_1_1);
2156
2157 if (!(info->flags & SPI_NOR_NO_FR)) {
2158 params->hwcaps.mask |= SNOR_HWCAPS_READ_FAST;
2159 spi_nor_set_read_settings(&params->reads[SNOR_CMD_READ_FAST],
2160 0, 8, SPINOR_OP_READ_FAST,
2161 SNOR_PROTO_1_1_1);
2162 }
2163
2164 if (info->flags & SPI_NOR_DUAL_READ) {
2165 params->hwcaps.mask |= SNOR_HWCAPS_READ_1_1_2;
2166 spi_nor_set_read_settings(&params->reads[SNOR_CMD_READ_1_1_2],
2167 0, 8, SPINOR_OP_READ_1_1_2,
2168 SNOR_PROTO_1_1_2);
2169 }
2170
2171 if (info->flags & SPI_NOR_QUAD_READ) {
2172 params->hwcaps.mask |= SNOR_HWCAPS_READ_1_1_4;
2173 spi_nor_set_read_settings(&params->reads[SNOR_CMD_READ_1_1_4],
2174 0, 8, SPINOR_OP_READ_1_1_4,
2175 SNOR_PROTO_1_1_4);
2176 }
2177
658df8bd
VR
2178 if (info->flags & SPI_NOR_OCTAL_READ) {
2179 params->hwcaps.mask |= SNOR_HWCAPS_READ_1_1_8;
2180 spi_nor_set_read_settings(&params->reads[SNOR_CMD_READ_1_1_8],
2181 0, 8, SPINOR_OP_READ_1_1_8,
2182 SNOR_PROTO_1_1_8);
2183 }
2184
7aeedac0
V
2185 /* Page Program settings. */
2186 params->hwcaps.mask |= SNOR_HWCAPS_PP;
2187 spi_nor_set_pp_settings(&params->page_programs[SNOR_CMD_PP],
2188 SPINOR_OP_PP, SNOR_PROTO_1_1_1);
2189
2190 if (info->flags & SPI_NOR_QUAD_READ) {
2191 params->hwcaps.mask |= SNOR_HWCAPS_PP_1_1_4;
2192 spi_nor_set_pp_settings(&params->page_programs[SNOR_CMD_PP_1_1_4],
2193 SPINOR_OP_PP_1_1_4, SNOR_PROTO_1_1_4);
2194 }
2195
2196 /* Select the procedure to set the Quad Enable bit. */
2197 if (params->hwcaps.mask & (SNOR_HWCAPS_READ_QUAD |
2198 SNOR_HWCAPS_PP_QUAD)) {
2199 switch (JEDEC_MFR(info)) {
2200#ifdef CONFIG_SPI_FLASH_MACRONIX
2201 case SNOR_MFR_MACRONIX:
2202 params->quad_enable = macronix_quad_enable;
2203 break;
2204#endif
2205 case SNOR_MFR_ST:
2206 case SNOR_MFR_MICRON:
2207 break;
2208
2209 default:
2210#if defined(CONFIG_SPI_FLASH_SPANSION) || defined(CONFIG_SPI_FLASH_WINBOND)
2211 /* Kept only for backward compatibility purpose. */
2212 params->quad_enable = spansion_read_cr_quad_enable;
2213#endif
2214 break;
2215 }
2216 }
0c6f187c
V
2217
2218 /* Override the parameters with data read from SFDP tables. */
2219 nor->addr_width = 0;
2220 nor->mtd.erasesize = 0;
2221 if ((info->flags & (SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ)) &&
2222 !(info->flags & SPI_NOR_SKIP_SFDP)) {
2223 struct spi_nor_flash_parameter sfdp_params;
2224
2225 memcpy(&sfdp_params, params, sizeof(sfdp_params));
2226 if (spi_nor_parse_sfdp(nor, &sfdp_params)) {
2227 nor->addr_width = 0;
2228 nor->mtd.erasesize = 0;
2229 } else {
2230 memcpy(params, &sfdp_params, sizeof(*params));
2231 }
2232 }
2233
2234 return 0;
7aeedac0
V
2235}
2236
2237static int spi_nor_hwcaps2cmd(u32 hwcaps, const int table[][2], size_t size)
2238{
2239 size_t i;
2240
2241 for (i = 0; i < size; i++)
2242 if (table[i][0] == (int)hwcaps)
2243 return table[i][1];
2244
2245 return -EINVAL;
2246}
2247
2248static int spi_nor_hwcaps_read2cmd(u32 hwcaps)
2249{
2250 static const int hwcaps_read2cmd[][2] = {
2251 { SNOR_HWCAPS_READ, SNOR_CMD_READ },
2252 { SNOR_HWCAPS_READ_FAST, SNOR_CMD_READ_FAST },
2253 { SNOR_HWCAPS_READ_1_1_1_DTR, SNOR_CMD_READ_1_1_1_DTR },
2254 { SNOR_HWCAPS_READ_1_1_2, SNOR_CMD_READ_1_1_2 },
2255 { SNOR_HWCAPS_READ_1_2_2, SNOR_CMD_READ_1_2_2 },
2256 { SNOR_HWCAPS_READ_2_2_2, SNOR_CMD_READ_2_2_2 },
2257 { SNOR_HWCAPS_READ_1_2_2_DTR, SNOR_CMD_READ_1_2_2_DTR },
2258 { SNOR_HWCAPS_READ_1_1_4, SNOR_CMD_READ_1_1_4 },
2259 { SNOR_HWCAPS_READ_1_4_4, SNOR_CMD_READ_1_4_4 },
2260 { SNOR_HWCAPS_READ_4_4_4, SNOR_CMD_READ_4_4_4 },
2261 { SNOR_HWCAPS_READ_1_4_4_DTR, SNOR_CMD_READ_1_4_4_DTR },
2262 { SNOR_HWCAPS_READ_1_1_8, SNOR_CMD_READ_1_1_8 },
2263 { SNOR_HWCAPS_READ_1_8_8, SNOR_CMD_READ_1_8_8 },
2264 { SNOR_HWCAPS_READ_8_8_8, SNOR_CMD_READ_8_8_8 },
2265 { SNOR_HWCAPS_READ_1_8_8_DTR, SNOR_CMD_READ_1_8_8_DTR },
2266 };
2267
2268 return spi_nor_hwcaps2cmd(hwcaps, hwcaps_read2cmd,
2269 ARRAY_SIZE(hwcaps_read2cmd));
2270}
2271
2272static int spi_nor_hwcaps_pp2cmd(u32 hwcaps)
2273{
2274 static const int hwcaps_pp2cmd[][2] = {
2275 { SNOR_HWCAPS_PP, SNOR_CMD_PP },
2276 { SNOR_HWCAPS_PP_1_1_4, SNOR_CMD_PP_1_1_4 },
2277 { SNOR_HWCAPS_PP_1_4_4, SNOR_CMD_PP_1_4_4 },
2278 { SNOR_HWCAPS_PP_4_4_4, SNOR_CMD_PP_4_4_4 },
2279 { SNOR_HWCAPS_PP_1_1_8, SNOR_CMD_PP_1_1_8 },
2280 { SNOR_HWCAPS_PP_1_8_8, SNOR_CMD_PP_1_8_8 },
2281 { SNOR_HWCAPS_PP_8_8_8, SNOR_CMD_PP_8_8_8 },
2282 };
2283
2284 return spi_nor_hwcaps2cmd(hwcaps, hwcaps_pp2cmd,
2285 ARRAY_SIZE(hwcaps_pp2cmd));
2286}
2287
2288static int spi_nor_select_read(struct spi_nor *nor,
2289 const struct spi_nor_flash_parameter *params,
2290 u32 shared_hwcaps)
2291{
2292 int cmd, best_match = fls(shared_hwcaps & SNOR_HWCAPS_READ_MASK) - 1;
2293 const struct spi_nor_read_command *read;
2294
2295 if (best_match < 0)
2296 return -EINVAL;
2297
2298 cmd = spi_nor_hwcaps_read2cmd(BIT(best_match));
2299 if (cmd < 0)
2300 return -EINVAL;
2301
2302 read = &params->reads[cmd];
2303 nor->read_opcode = read->opcode;
2304 nor->read_proto = read->proto;
2305
2306 /*
2307 * In the spi-nor framework, we don't need to make the difference
2308 * between mode clock cycles and wait state clock cycles.
2309 * Indeed, the value of the mode clock cycles is used by a QSPI
2310 * flash memory to know whether it should enter or leave its 0-4-4
2311 * (Continuous Read / XIP) mode.
2312 * eXecution In Place is out of the scope of the mtd sub-system.
2313 * Hence we choose to merge both mode and wait state clock cycles
2314 * into the so called dummy clock cycles.
2315 */
2316 nor->read_dummy = read->num_mode_clocks + read->num_wait_states;
2317 return 0;
2318}
2319
2320static int spi_nor_select_pp(struct spi_nor *nor,
2321 const struct spi_nor_flash_parameter *params,
2322 u32 shared_hwcaps)
2323{
2324 int cmd, best_match = fls(shared_hwcaps & SNOR_HWCAPS_PP_MASK) - 1;
2325 const struct spi_nor_pp_command *pp;
2326
2327 if (best_match < 0)
2328 return -EINVAL;
2329
2330 cmd = spi_nor_hwcaps_pp2cmd(BIT(best_match));
2331 if (cmd < 0)
2332 return -EINVAL;
2333
2334 pp = &params->page_programs[cmd];
2335 nor->program_opcode = pp->opcode;
2336 nor->write_proto = pp->proto;
2337 return 0;
2338}
2339
2340static int spi_nor_select_erase(struct spi_nor *nor,
2341 const struct flash_info *info)
2342{
2343 struct mtd_info *mtd = &nor->mtd;
2344
0c6f187c
V
2345 /* Do nothing if already configured from SFDP. */
2346 if (mtd->erasesize)
2347 return 0;
2348
7aeedac0
V
2349#ifdef CONFIG_SPI_FLASH_USE_4K_SECTORS
2350 /* prefer "small sector" erase if possible */
2351 if (info->flags & SECT_4K) {
2352 nor->erase_opcode = SPINOR_OP_BE_4K;
2353 mtd->erasesize = 4096;
2354 } else if (info->flags & SECT_4K_PMC) {
2355 nor->erase_opcode = SPINOR_OP_BE_4K_PMC;
2356 mtd->erasesize = 4096;
2357 } else
2358#endif
2359 {
2360 nor->erase_opcode = SPINOR_OP_SE;
2361 mtd->erasesize = info->sector_size;
2362 }
2363 return 0;
2364}
2365
2366static int spi_nor_setup(struct spi_nor *nor, const struct flash_info *info,
2367 const struct spi_nor_flash_parameter *params,
2368 const struct spi_nor_hwcaps *hwcaps)
2369{
2370 u32 ignored_mask, shared_mask;
2371 bool enable_quad_io;
2372 int err;
2373
2374 /*
2375 * Keep only the hardware capabilities supported by both the SPI
2376 * controller and the SPI flash memory.
2377 */
2378 shared_mask = hwcaps->mask & params->hwcaps.mask;
2379
2380 /* SPI n-n-n protocols are not supported yet. */
2381 ignored_mask = (SNOR_HWCAPS_READ_2_2_2 |
2382 SNOR_HWCAPS_READ_4_4_4 |
2383 SNOR_HWCAPS_READ_8_8_8 |
2384 SNOR_HWCAPS_PP_4_4_4 |
2385 SNOR_HWCAPS_PP_8_8_8);
2386 if (shared_mask & ignored_mask) {
2387 dev_dbg(nor->dev,
2388 "SPI n-n-n protocols are not supported yet.\n");
2389 shared_mask &= ~ignored_mask;
2390 }
2391
2392 /* Select the (Fast) Read command. */
2393 err = spi_nor_select_read(nor, params, shared_mask);
2394 if (err) {
2395 dev_dbg(nor->dev,
2396 "can't select read settings supported by both the SPI controller and memory.\n");
2397 return err;
2398 }
2399
2400 /* Select the Page Program command. */
2401 err = spi_nor_select_pp(nor, params, shared_mask);
2402 if (err) {
2403 dev_dbg(nor->dev,
2404 "can't select write settings supported by both the SPI controller and memory.\n");
2405 return err;
2406 }
2407
2408 /* Select the Sector Erase command. */
2409 err = spi_nor_select_erase(nor, info);
2410 if (err) {
2411 dev_dbg(nor->dev,
2412 "can't select erase settings supported by both the SPI controller and memory.\n");
2413 return err;
2414 }
2415
2416 /* Enable Quad I/O if needed. */
2417 enable_quad_io = (spi_nor_get_protocol_width(nor->read_proto) == 4 ||
2418 spi_nor_get_protocol_width(nor->write_proto) == 4);
2419 if (enable_quad_io && params->quad_enable)
2420 nor->quad_enable = params->quad_enable;
2421 else
2422 nor->quad_enable = NULL;
2423
2424 return 0;
2425}
2426
2427static int spi_nor_init(struct spi_nor *nor)
2428{
2429 int err;
2430
2431 /*
2432 * Atmel, SST, Intel/Numonyx, and others serial NOR tend to power up
2433 * with the software protection bits set
2434 */
2435 if (JEDEC_MFR(nor->info) == SNOR_MFR_ATMEL ||
2436 JEDEC_MFR(nor->info) == SNOR_MFR_INTEL ||
2437 JEDEC_MFR(nor->info) == SNOR_MFR_SST ||
2438 nor->info->flags & SPI_NOR_HAS_LOCK) {
2439 write_enable(nor);
2440 write_sr(nor, 0);
2441 spi_nor_wait_till_ready(nor);
2442 }
2443
2444 if (nor->quad_enable) {
2445 err = nor->quad_enable(nor);
2446 if (err) {
2447 dev_dbg(nor->dev, "quad mode not supported\n");
2448 return err;
2449 }
2450 }
2451
61059bc5
V
2452 if (nor->addr_width == 4 &&
2453 (JEDEC_MFR(nor->info) != SNOR_MFR_SPANSION) &&
2454 !(nor->info->flags & SPI_NOR_4B_OPCODES)) {
2455 /*
2456 * If the RESET# pin isn't hooked up properly, or the system
2457 * otherwise doesn't perform a reset command in the boot
2458 * sequence, it's impossible to 100% protect against unexpected
2459 * reboots (e.g., crashes). Warn the user (or hopefully, system
2460 * designer) that this is bad.
2461 */
2462 if (nor->flags & SNOR_F_BROKEN_RESET)
2463 printf("enabling reset hack; may not recover from unexpected reboots\n");
2464 set_4byte(nor, nor->info, 1);
2465 }
2466
7aeedac0
V
2467 return 0;
2468}
2469
2470int spi_nor_scan(struct spi_nor *nor)
2471{
2472 struct spi_nor_flash_parameter params;
2473 const struct flash_info *info = NULL;
2474 struct mtd_info *mtd = &nor->mtd;
2475 struct spi_nor_hwcaps hwcaps = {
2476 .mask = SNOR_HWCAPS_READ |
2477 SNOR_HWCAPS_READ_FAST |
2478 SNOR_HWCAPS_PP,
2479 };
2480 struct spi_slave *spi = nor->spi;
2481 int ret;
2482
2483 /* Reset SPI protocol for all commands. */
2484 nor->reg_proto = SNOR_PROTO_1_1_1;
2485 nor->read_proto = SNOR_PROTO_1_1_1;
2486 nor->write_proto = SNOR_PROTO_1_1_1;
2487 nor->read = spi_nor_read_data;
2488 nor->write = spi_nor_write_data;
2489 nor->read_reg = spi_nor_read_reg;
2490 nor->write_reg = spi_nor_write_reg;
2491
658df8bd
VR
2492 if (spi->mode & SPI_RX_OCTAL) {
2493 hwcaps.mask |= SNOR_HWCAPS_READ_1_1_8;
2494
2495 if (spi->mode & SPI_TX_OCTAL)
2496 hwcaps.mask |= (SNOR_HWCAPS_READ_1_8_8 |
2497 SNOR_HWCAPS_PP_1_1_8 |
2498 SNOR_HWCAPS_PP_1_8_8);
2499 } else if (spi->mode & SPI_RX_QUAD) {
7aeedac0
V
2500 hwcaps.mask |= SNOR_HWCAPS_READ_1_1_4;
2501
2502 if (spi->mode & SPI_TX_QUAD)
2503 hwcaps.mask |= (SNOR_HWCAPS_READ_1_4_4 |
2504 SNOR_HWCAPS_PP_1_1_4 |
2505 SNOR_HWCAPS_PP_1_4_4);
2506 } else if (spi->mode & SPI_RX_DUAL) {
2507 hwcaps.mask |= SNOR_HWCAPS_READ_1_1_2;
2508
2509 if (spi->mode & SPI_TX_DUAL)
2510 hwcaps.mask |= SNOR_HWCAPS_READ_1_2_2;
2511 }
2512
2513 info = spi_nor_read_id(nor);
2514 if (IS_ERR_OR_NULL(info))
2515 return -ENOENT;
0c6f187c 2516 /* Parse the Serial Flash Discoverable Parameters table. */
7aeedac0
V
2517 ret = spi_nor_init_params(nor, info, &params);
2518 if (ret)
2519 return ret;
2520
2521 if (!mtd->name)
2522 mtd->name = info->name;
2523 mtd->priv = nor;
2524 mtd->type = MTD_NORFLASH;
2525 mtd->writesize = 1;
2526 mtd->flags = MTD_CAP_NORFLASH;
2527 mtd->size = params.size;
2528 mtd->_erase = spi_nor_erase;
2529 mtd->_read = spi_nor_read;
2530
2531#if defined(CONFIG_SPI_FLASH_STMICRO) || defined(CONFIG_SPI_FLASH_SST)
2532 /* NOR protection support for STmicro/Micron chips and similar */
2533 if (JEDEC_MFR(info) == SNOR_MFR_ST ||
2534 JEDEC_MFR(info) == SNOR_MFR_MICRON ||
2535 JEDEC_MFR(info) == SNOR_MFR_SST ||
2536 info->flags & SPI_NOR_HAS_LOCK) {
2537 nor->flash_lock = stm_lock;
2538 nor->flash_unlock = stm_unlock;
2539 nor->flash_is_locked = stm_is_locked;
2540 }
2541#endif
2542
2543#ifdef CONFIG_SPI_FLASH_SST
e0cacdcc
EP
2544 /*
2545 * sst26 series block protection implementation differs from other
2546 * series.
2547 */
2548 if (info->flags & SPI_NOR_HAS_SST26LOCK) {
2549 nor->flash_lock = sst26_lock;
2550 nor->flash_unlock = sst26_unlock;
2551 nor->flash_is_locked = sst26_is_locked;
2552 }
2553
7aeedac0
V
2554 /* sst nor chips use AAI word program */
2555 if (info->flags & SST_WRITE)
2556 mtd->_write = sst_write;
2557 else
2558#endif
2559 mtd->_write = spi_nor_write;
2560
2561 if (info->flags & USE_FSR)
2562 nor->flags |= SNOR_F_USE_FSR;
2563 if (info->flags & SPI_NOR_HAS_TB)
2564 nor->flags |= SNOR_F_HAS_SR_TB;
2565 if (info->flags & NO_CHIP_ERASE)
2566 nor->flags |= SNOR_F_NO_OP_CHIP_ERASE;
2567 if (info->flags & USE_CLSR)
2568 nor->flags |= SNOR_F_USE_CLSR;
2569
2570 if (info->flags & SPI_NOR_NO_ERASE)
2571 mtd->flags |= MTD_NO_ERASE;
2572
2573 nor->page_size = params.page_size;
2574 mtd->writebufsize = nor->page_size;
2575
2576 /* Some devices cannot do fast-read, no matter what DT tells us */
2577 if ((info->flags & SPI_NOR_NO_FR) || (spi->mode & SPI_RX_SLOW))
2578 params.hwcaps.mask &= ~SNOR_HWCAPS_READ_FAST;
2579
2580 /*
2581 * Configure the SPI memory:
2582 * - select op codes for (Fast) Read, Page Program and Sector Erase.
2583 * - set the number of dummy cycles (mode cycles + wait states).
2584 * - set the SPI protocols for register and memory accesses.
2585 * - set the Quad Enable bit if needed (required by SPI x-y-4 protos).
2586 */
2587 ret = spi_nor_setup(nor, info, &params, &hwcaps);
2588 if (ret)
2589 return ret;
2590
0c6f187c
V
2591 if (nor->addr_width) {
2592 /* already configured from SFDP */
2593 } else if (info->addr_width) {
7aeedac0 2594 nor->addr_width = info->addr_width;
8c927809
V
2595 } else if (mtd->size > SZ_16M) {
2596#ifndef CONFIG_SPI_FLASH_BAR
61059bc5
V
2597 /* enable 4-byte addressing if the device exceeds 16MiB */
2598 nor->addr_width = 4;
2599 if (JEDEC_MFR(info) == SNOR_MFR_SPANSION ||
2600 info->flags & SPI_NOR_4B_OPCODES)
2601 spi_nor_set_4byte_opcodes(nor, info);
8c927809
V
2602#else
2603 /* Configure the BAR - discover bank cmds and read current bank */
2604 nor->addr_width = 3;
2605 ret = read_bar(nor, info);
2606 if (ret < 0)
2607 return ret;
2608#endif
7aeedac0
V
2609 } else {
2610 nor->addr_width = 3;
2611 }
2612
2613 if (nor->addr_width > SPI_NOR_MAX_ADDR_WIDTH) {
2614 dev_dbg(dev, "address width is too large: %u\n",
2615 nor->addr_width);
2616 return -EINVAL;
2617 }
2618
2619 /* Send all the required SPI flash commands to initialize device */
2620 nor->info = info;
2621 ret = spi_nor_init(nor);
2622 if (ret)
2623 return ret;
2624
2625 nor->name = mtd->name;
2626 nor->size = mtd->size;
2627 nor->erase_size = mtd->erasesize;
2628 nor->sector_size = mtd->erasesize;
2629
2630#ifndef CONFIG_SPL_BUILD
2631 printf("SF: Detected %s with page size ", nor->name);
2632 print_size(nor->page_size, ", erase size ");
2633 print_size(nor->erase_size, ", total ");
2634 print_size(nor->size, "");
2635 puts("\n");
2636#endif
2637
2638 return 0;
2639}
8c927809
V
2640
2641/* U-Boot specific functions, need to extend MTD to support these */
2642int spi_flash_cmd_get_sw_write_prot(struct spi_nor *nor)
2643{
2644 int sr = read_sr(nor);
2645
2646 if (sr < 0)
2647 return sr;
2648
2649 return (sr >> 2) & 7;
2650}
This page took 0.35263 seconds and 4 git commands to generate.