• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Based on m25p80.c, by Mike Lavender (mike@steroidmicros.com), 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 
10 #include <linux/err.h>
11 #include <linux/errno.h>
12 #include <linux/module.h>
13 #include <linux/device.h>
14 #include <linux/mutex.h>
15 #include <linux/math64.h>
16 #include <linux/sizes.h>
17 #include <linux/slab.h>
18 #include <linux/sort.h>
19 
20 #include <linux/mtd/mtd.h>
21 #include <linux/of_platform.h>
22 #include <linux/sched/task_stack.h>
23 #include <linux/spi/flash.h>
24 #include <linux/mtd/spi-nor.h>
25 
26 /* Define max times to check status register before we give up. */
27 
28 /*
29  * For everything but full-chip erase; probably could be much smaller, but kept
30  * around for safety for now
31  */
32 #define DEFAULT_READY_WAIT_JIFFIES		(40UL * HZ)
33 
34 /*
35  * For full-chip erase, calibrated to a 2MB flash (M25P16); should be scaled up
36  * for larger flash
37  */
38 #define CHIP_ERASE_2MB_READY_WAIT_JIFFIES	(40UL * HZ)
39 
40 #define SPI_NOR_MAX_ID_LEN	6
41 #define SPI_NOR_MAX_ADDR_WIDTH	4
42 
43 struct sfdp_parameter_header {
44 	u8		id_lsb;
45 	u8		minor;
46 	u8		major;
47 	u8		length; /* in double words */
48 	u8		parameter_table_pointer[3]; /* byte address */
49 	u8		id_msb;
50 };
51 
52 #define SFDP_PARAM_HEADER_ID(p)	(((p)->id_msb << 8) | (p)->id_lsb)
53 #define SFDP_PARAM_HEADER_PTP(p) \
54 	(((p)->parameter_table_pointer[2] << 16) | \
55 	 ((p)->parameter_table_pointer[1] <<  8) | \
56 	 ((p)->parameter_table_pointer[0] <<  0))
57 
58 #define SFDP_BFPT_ID		0xff00	/* Basic Flash Parameter Table */
59 #define SFDP_SECTOR_MAP_ID	0xff81	/* Sector Map Table */
60 #define SFDP_4BAIT_ID		0xff84  /* 4-byte Address Instruction Table */
61 
62 #define SFDP_SIGNATURE		0x50444653U
63 #define SFDP_JESD216_MAJOR	1
64 #define SFDP_JESD216_MINOR	0
65 #define SFDP_JESD216A_MINOR	5
66 #define SFDP_JESD216B_MINOR	6
67 
68 struct sfdp_header {
69 	u32		signature; /* Ox50444653U <=> "SFDP" */
70 	u8		minor;
71 	u8		major;
72 	u8		nph; /* 0-base number of parameter headers */
73 	u8		unused;
74 
75 	/* Basic Flash Parameter Table. */
76 	struct sfdp_parameter_header	bfpt_header;
77 };
78 
79 /* Basic Flash Parameter Table */
80 
81 /*
82  * JESD216 rev B defines a Basic Flash Parameter Table of 16 DWORDs.
83  * They are indexed from 1 but C arrays are indexed from 0.
84  */
85 #define BFPT_DWORD(i)		((i) - 1)
86 #define BFPT_DWORD_MAX		16
87 
88 /* The first version of JESB216 defined only 9 DWORDs. */
89 #define BFPT_DWORD_MAX_JESD216			9
90 
91 /* 1st DWORD. */
92 #define BFPT_DWORD1_FAST_READ_1_1_2		BIT(16)
93 #define BFPT_DWORD1_ADDRESS_BYTES_MASK		GENMASK(18, 17)
94 #define BFPT_DWORD1_ADDRESS_BYTES_3_ONLY	(0x0UL << 17)
95 #define BFPT_DWORD1_ADDRESS_BYTES_3_OR_4	(0x1UL << 17)
96 #define BFPT_DWORD1_ADDRESS_BYTES_4_ONLY	(0x2UL << 17)
97 #define BFPT_DWORD1_DTR				BIT(19)
98 #define BFPT_DWORD1_FAST_READ_1_2_2		BIT(20)
99 #define BFPT_DWORD1_FAST_READ_1_4_4		BIT(21)
100 #define BFPT_DWORD1_FAST_READ_1_1_4		BIT(22)
101 
102 /* 5th DWORD. */
103 #define BFPT_DWORD5_FAST_READ_2_2_2		BIT(0)
104 #define BFPT_DWORD5_FAST_READ_4_4_4		BIT(4)
105 
106 /* 11th DWORD. */
107 #define BFPT_DWORD11_PAGE_SIZE_SHIFT		4
108 #define BFPT_DWORD11_PAGE_SIZE_MASK		GENMASK(7, 4)
109 
110 /* 15th DWORD. */
111 
112 /*
113  * (from JESD216 rev B)
114  * Quad Enable Requirements (QER):
115  * - 000b: Device does not have a QE bit. Device detects 1-1-4 and 1-4-4
116  *         reads based on instruction. DQ3/HOLD# functions are hold during
117  *         instruction phase.
118  * - 001b: QE is bit 1 of status register 2. It is set via Write Status with
119  *         two data bytes where bit 1 of the second byte is one.
120  *         [...]
121  *         Writing only one byte to the status register has the side-effect of
122  *         clearing status register 2, including the QE bit. The 100b code is
123  *         used if writing one byte to the status register does not modify
124  *         status register 2.
125  * - 010b: QE is bit 6 of status register 1. It is set via Write Status with
126  *         one data byte where bit 6 is one.
127  *         [...]
128  * - 011b: QE is bit 7 of status register 2. It is set via Write status
129  *         register 2 instruction 3Eh with one data byte where bit 7 is one.
130  *         [...]
131  *         The status register 2 is read using instruction 3Fh.
132  * - 100b: QE is bit 1 of status register 2. It is set via Write Status with
133  *         two data bytes where bit 1 of the second byte is one.
134  *         [...]
135  *         In contrast to the 001b code, writing one byte to the status
136  *         register does not modify status register 2.
137  * - 101b: QE is bit 1 of status register 2. Status register 1 is read using
138  *         Read Status instruction 05h. Status register2 is read using
139  *         instruction 35h. QE is set via Write Status instruction 01h with
140  *         two data bytes where bit 1 of the second byte is one.
141  *         [...]
142  */
143 #define BFPT_DWORD15_QER_MASK			GENMASK(22, 20)
144 #define BFPT_DWORD15_QER_NONE			(0x0UL << 20) /* Micron */
145 #define BFPT_DWORD15_QER_SR2_BIT1_BUGGY		(0x1UL << 20)
146 #define BFPT_DWORD15_QER_SR1_BIT6		(0x2UL << 20) /* Macronix */
147 #define BFPT_DWORD15_QER_SR2_BIT7		(0x3UL << 20)
148 #define BFPT_DWORD15_QER_SR2_BIT1_NO_RD		(0x4UL << 20)
149 #define BFPT_DWORD15_QER_SR2_BIT1		(0x5UL << 20) /* Spansion */
150 
151 struct sfdp_bfpt {
152 	u32	dwords[BFPT_DWORD_MAX];
153 };
154 
155 /**
156  * struct spi_nor_fixups - SPI NOR fixup hooks
157  * @default_init: called after default flash parameters init. Used to tweak
158  *                flash parameters when information provided by the flash_info
159  *                table is incomplete or wrong.
160  * @post_bfpt: called after the BFPT table has been parsed
161  * @post_sfdp: called after SFDP has been parsed (is also called for SPI NORs
162  *             that do not support RDSFDP). Typically used to tweak various
163  *             parameters that could not be extracted by other means (i.e.
164  *             when information provided by the SFDP/flash_info tables are
165  *             incomplete or wrong).
166  *
167  * Those hooks can be used to tweak the SPI NOR configuration when the SFDP
168  * table is broken or not available.
169  */
170 struct spi_nor_fixups {
171 	void (*default_init)(struct spi_nor *nor);
172 	int (*post_bfpt)(struct spi_nor *nor,
173 			 const struct sfdp_parameter_header *bfpt_header,
174 			 const struct sfdp_bfpt *bfpt,
175 			 struct spi_nor_flash_parameter *params);
176 	void (*post_sfdp)(struct spi_nor *nor);
177 };
178 
179 struct flash_info {
180 	char		*name;
181 
182 	/*
183 	 * This array stores the ID bytes.
184 	 * The first three bytes are the JEDIC ID.
185 	 * JEDEC ID zero means "no ID" (mostly older chips).
186 	 */
187 	u8		id[SPI_NOR_MAX_ID_LEN];
188 	u8		id_len;
189 
190 	/* The size listed here is what works with SPINOR_OP_SE, which isn't
191 	 * necessarily called a "sector" by the vendor.
192 	 */
193 	unsigned	sector_size;
194 	u16		n_sectors;
195 
196 	u16		page_size;
197 	u16		addr_width;
198 
199 	u16		flags;
200 #define SECT_4K			BIT(0)	/* SPINOR_OP_BE_4K works uniformly */
201 #define SPI_NOR_NO_ERASE	BIT(1)	/* No erase command needed */
202 #define SST_WRITE		BIT(2)	/* use SST byte programming */
203 #define SPI_NOR_NO_FR		BIT(3)	/* Can't do fastread */
204 #define SECT_4K_PMC		BIT(4)	/* SPINOR_OP_BE_4K_PMC works uniformly */
205 #define SPI_NOR_DUAL_READ	BIT(5)	/* Flash supports Dual Read */
206 #define SPI_NOR_QUAD_READ	BIT(6)	/* Flash supports Quad Read */
207 #define USE_FSR			BIT(7)	/* use flag status register */
208 #define SPI_NOR_HAS_LOCK	BIT(8)	/* Flash supports lock/unlock via SR */
209 #define SPI_NOR_HAS_TB		BIT(9)	/*
210 					 * Flash SR has Top/Bottom (TB) protect
211 					 * bit. Must be used with
212 					 * SPI_NOR_HAS_LOCK.
213 					 */
214 #define SPI_NOR_XSR_RDY		BIT(10)	/*
215 					 * S3AN flashes have specific opcode to
216 					 * read the status register.
217 					 * Flags SPI_NOR_XSR_RDY and SPI_S3AN
218 					 * use the same bit as one implies the
219 					 * other, but we will get rid of
220 					 * SPI_S3AN soon.
221 					 */
222 #define	SPI_S3AN		BIT(10)	/*
223 					 * Xilinx Spartan 3AN In-System Flash
224 					 * (MFR cannot be used for probing
225 					 * because it has the same value as
226 					 * ATMEL flashes)
227 					 */
228 #define SPI_NOR_4B_OPCODES	BIT(11)	/*
229 					 * Use dedicated 4byte address op codes
230 					 * to support memory size above 128Mib.
231 					 */
232 #define NO_CHIP_ERASE		BIT(12) /* Chip does not support chip erase */
233 #define SPI_NOR_SKIP_SFDP	BIT(13)	/* Skip parsing of SFDP tables */
234 #define USE_CLSR		BIT(14)	/* use CLSR command */
235 #define SPI_NOR_OCTAL_READ	BIT(15)	/* Flash supports Octal Read */
236 
237 	/* Part specific fixup hooks. */
238 	const struct spi_nor_fixups *fixups;
239 };
240 
241 #define JEDEC_MFR(info)	((info)->id[0])
242 
243 /**
244  * spi_nor_spimem_xfer_data() - helper function to read/write data to
245  *                              flash's memory region
246  * @nor:        pointer to 'struct spi_nor'
247  * @op:         pointer to 'struct spi_mem_op' template for transfer
248  *
249  * Return: number of bytes transferred on success, -errno otherwise
250  */
spi_nor_spimem_xfer_data(struct spi_nor * nor,struct spi_mem_op * op)251 static ssize_t spi_nor_spimem_xfer_data(struct spi_nor *nor,
252 					struct spi_mem_op *op)
253 {
254 	bool usebouncebuf = false;
255 	void *rdbuf = NULL;
256 	const void *buf;
257 	int ret;
258 
259 	if (op->data.dir == SPI_MEM_DATA_IN)
260 		buf = op->data.buf.in;
261 	else
262 		buf = op->data.buf.out;
263 
264 	if (object_is_on_stack(buf) || !virt_addr_valid(buf))
265 		usebouncebuf = true;
266 
267 	if (usebouncebuf) {
268 		if (op->data.nbytes > nor->bouncebuf_size)
269 			op->data.nbytes = nor->bouncebuf_size;
270 
271 		if (op->data.dir == SPI_MEM_DATA_IN) {
272 			rdbuf = op->data.buf.in;
273 			op->data.buf.in = nor->bouncebuf;
274 		} else {
275 			op->data.buf.out = nor->bouncebuf;
276 			memcpy(nor->bouncebuf, buf,
277 			       op->data.nbytes);
278 		}
279 	}
280 
281 	ret = spi_mem_adjust_op_size(nor->spimem, op);
282 	if (ret)
283 		return ret;
284 
285 	ret = spi_mem_exec_op(nor->spimem, op);
286 	if (ret)
287 		return ret;
288 
289 	if (usebouncebuf && op->data.dir == SPI_MEM_DATA_IN)
290 		memcpy(rdbuf, nor->bouncebuf, op->data.nbytes);
291 
292 	return op->data.nbytes;
293 }
294 
295 /**
296  * spi_nor_spimem_read_data() - read data from flash's memory region via
297  *                              spi-mem
298  * @nor:        pointer to 'struct spi_nor'
299  * @from:       offset to read from
300  * @len:        number of bytes to read
301  * @buf:        pointer to dst buffer
302  *
303  * Return: number of bytes read successfully, -errno otherwise
304  */
spi_nor_spimem_read_data(struct spi_nor * nor,loff_t from,size_t len,u8 * buf)305 static ssize_t spi_nor_spimem_read_data(struct spi_nor *nor, loff_t from,
306 					size_t len, u8 *buf)
307 {
308 	struct spi_mem_op op =
309 		SPI_MEM_OP(SPI_MEM_OP_CMD(nor->read_opcode, 1),
310 			   SPI_MEM_OP_ADDR(nor->addr_width, from, 1),
311 			   SPI_MEM_OP_DUMMY(nor->read_dummy, 1),
312 			   SPI_MEM_OP_DATA_IN(len, buf, 1));
313 
314 	/* get transfer protocols. */
315 	op.cmd.buswidth = spi_nor_get_protocol_inst_nbits(nor->read_proto);
316 	op.addr.buswidth = spi_nor_get_protocol_addr_nbits(nor->read_proto);
317 	op.dummy.buswidth = op.addr.buswidth;
318 	op.data.buswidth = spi_nor_get_protocol_data_nbits(nor->read_proto);
319 
320 	/* convert the dummy cycles to the number of bytes */
321 	op.dummy.nbytes = (nor->read_dummy * op.dummy.buswidth) / 8;
322 
323 	return spi_nor_spimem_xfer_data(nor, &op);
324 }
325 
326 /**
327  * spi_nor_read_data() - read data from flash memory
328  * @nor:        pointer to 'struct spi_nor'
329  * @from:       offset to read from
330  * @len:        number of bytes to read
331  * @buf:        pointer to dst buffer
332  *
333  * Return: number of bytes read successfully, -errno otherwise
334  */
spi_nor_read_data(struct spi_nor * nor,loff_t from,size_t len,u8 * buf)335 static ssize_t spi_nor_read_data(struct spi_nor *nor, loff_t from, size_t len,
336 				 u8 *buf)
337 {
338 	if (nor->spimem)
339 		return spi_nor_spimem_read_data(nor, from, len, buf);
340 
341 	return nor->read(nor, from, len, buf);
342 }
343 
344 /**
345  * spi_nor_spimem_write_data() - write data to flash memory via
346  *                               spi-mem
347  * @nor:        pointer to 'struct spi_nor'
348  * @to:         offset to write to
349  * @len:        number of bytes to write
350  * @buf:        pointer to src buffer
351  *
352  * Return: number of bytes written successfully, -errno otherwise
353  */
spi_nor_spimem_write_data(struct spi_nor * nor,loff_t to,size_t len,const u8 * buf)354 static ssize_t spi_nor_spimem_write_data(struct spi_nor *nor, loff_t to,
355 					 size_t len, const u8 *buf)
356 {
357 	struct spi_mem_op op =
358 		SPI_MEM_OP(SPI_MEM_OP_CMD(nor->program_opcode, 1),
359 			   SPI_MEM_OP_ADDR(nor->addr_width, to, 1),
360 			   SPI_MEM_OP_NO_DUMMY,
361 			   SPI_MEM_OP_DATA_OUT(len, buf, 1));
362 
363 	op.cmd.buswidth = spi_nor_get_protocol_inst_nbits(nor->write_proto);
364 	op.addr.buswidth = spi_nor_get_protocol_addr_nbits(nor->write_proto);
365 	op.data.buswidth = spi_nor_get_protocol_data_nbits(nor->write_proto);
366 
367 	if (nor->program_opcode == SPINOR_OP_AAI_WP && nor->sst_write_second)
368 		op.addr.nbytes = 0;
369 
370 	return spi_nor_spimem_xfer_data(nor, &op);
371 }
372 
373 /**
374  * spi_nor_write_data() - write data to flash memory
375  * @nor:        pointer to 'struct spi_nor'
376  * @to:         offset to write to
377  * @len:        number of bytes to write
378  * @buf:        pointer to src buffer
379  *
380  * Return: number of bytes written successfully, -errno otherwise
381  */
spi_nor_write_data(struct spi_nor * nor,loff_t to,size_t len,const u8 * buf)382 static ssize_t spi_nor_write_data(struct spi_nor *nor, loff_t to, size_t len,
383 				  const u8 *buf)
384 {
385 	if (nor->spimem)
386 		return spi_nor_spimem_write_data(nor, to, len, buf);
387 
388 	return nor->write(nor, to, len, buf);
389 }
390 
391 /*
392  * Read the status register, returning its value in the location
393  * Return the status register value.
394  * Returns negative if error occurred.
395  */
read_sr(struct spi_nor * nor)396 static int read_sr(struct spi_nor *nor)
397 {
398 	int ret;
399 
400 	if (nor->spimem) {
401 		struct spi_mem_op op =
402 			SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDSR, 1),
403 				   SPI_MEM_OP_NO_ADDR,
404 				   SPI_MEM_OP_NO_DUMMY,
405 				   SPI_MEM_OP_DATA_IN(1, nor->bouncebuf, 1));
406 
407 		ret = spi_mem_exec_op(nor->spimem, &op);
408 	} else {
409 		ret = nor->read_reg(nor, SPINOR_OP_RDSR, nor->bouncebuf, 1);
410 	}
411 
412 	if (ret < 0) {
413 		pr_err("error %d reading SR\n", (int) ret);
414 		return ret;
415 	}
416 
417 	return nor->bouncebuf[0];
418 }
419 
420 /*
421  * Read the flag status register, returning its value in the location
422  * Return the status register value.
423  * Returns negative if error occurred.
424  */
read_fsr(struct spi_nor * nor)425 static int read_fsr(struct spi_nor *nor)
426 {
427 	int ret;
428 
429 	if (nor->spimem) {
430 		struct spi_mem_op op =
431 			SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDFSR, 1),
432 				   SPI_MEM_OP_NO_ADDR,
433 				   SPI_MEM_OP_NO_DUMMY,
434 				   SPI_MEM_OP_DATA_IN(1, nor->bouncebuf, 1));
435 
436 		ret = spi_mem_exec_op(nor->spimem, &op);
437 	} else {
438 		ret = nor->read_reg(nor, SPINOR_OP_RDFSR, nor->bouncebuf, 1);
439 	}
440 
441 	if (ret < 0) {
442 		pr_err("error %d reading FSR\n", ret);
443 		return ret;
444 	}
445 
446 	return nor->bouncebuf[0];
447 }
448 
449 /*
450  * Read configuration register, returning its value in the
451  * location. Return the configuration register value.
452  * Returns negative if error occurred.
453  */
read_cr(struct spi_nor * nor)454 static int read_cr(struct spi_nor *nor)
455 {
456 	int ret;
457 
458 	if (nor->spimem) {
459 		struct spi_mem_op op =
460 			SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDCR, 1),
461 				   SPI_MEM_OP_NO_ADDR,
462 				   SPI_MEM_OP_NO_DUMMY,
463 				   SPI_MEM_OP_DATA_IN(1, nor->bouncebuf, 1));
464 
465 		ret = spi_mem_exec_op(nor->spimem, &op);
466 	} else {
467 		ret = nor->read_reg(nor, SPINOR_OP_RDCR, nor->bouncebuf, 1);
468 	}
469 
470 	if (ret < 0) {
471 		dev_err(nor->dev, "error %d reading CR\n", ret);
472 		return ret;
473 	}
474 
475 	return nor->bouncebuf[0];
476 }
477 
478 /*
479  * Write status register 1 byte
480  * Returns negative if error occurred.
481  */
write_sr(struct spi_nor * nor,u8 val)482 static int write_sr(struct spi_nor *nor, u8 val)
483 {
484 	nor->bouncebuf[0] = val;
485 	if (nor->spimem) {
486 		struct spi_mem_op op =
487 			SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WRSR, 1),
488 				   SPI_MEM_OP_NO_ADDR,
489 				   SPI_MEM_OP_NO_DUMMY,
490 				   SPI_MEM_OP_DATA_OUT(1, nor->bouncebuf, 1));
491 
492 		return spi_mem_exec_op(nor->spimem, &op);
493 	}
494 
495 	return nor->write_reg(nor, SPINOR_OP_WRSR, nor->bouncebuf, 1);
496 }
497 
498 /*
499  * Set write enable latch with Write Enable command.
500  * Returns negative if error occurred.
501  */
write_enable(struct spi_nor * nor)502 static int write_enable(struct spi_nor *nor)
503 {
504 	if (nor->spimem) {
505 		struct spi_mem_op op =
506 			SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WREN, 1),
507 				   SPI_MEM_OP_NO_ADDR,
508 				   SPI_MEM_OP_NO_DUMMY,
509 				   SPI_MEM_OP_NO_DATA);
510 
511 		return spi_mem_exec_op(nor->spimem, &op);
512 	}
513 
514 	return nor->write_reg(nor, SPINOR_OP_WREN, NULL, 0);
515 }
516 
517 /*
518  * Send write disable instruction to the chip.
519  */
write_disable(struct spi_nor * nor)520 static int write_disable(struct spi_nor *nor)
521 {
522 	if (nor->spimem) {
523 		struct spi_mem_op op =
524 			SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WRDI, 1),
525 				   SPI_MEM_OP_NO_ADDR,
526 				   SPI_MEM_OP_NO_DUMMY,
527 				   SPI_MEM_OP_NO_DATA);
528 
529 		return spi_mem_exec_op(nor->spimem, &op);
530 	}
531 
532 	return nor->write_reg(nor, SPINOR_OP_WRDI, NULL, 0);
533 }
534 
mtd_to_spi_nor(struct mtd_info * mtd)535 static struct spi_nor *mtd_to_spi_nor(struct mtd_info *mtd)
536 {
537 	return mtd->priv;
538 }
539 
540 
spi_nor_convert_opcode(u8 opcode,const u8 table[][2],size_t size)541 static u8 spi_nor_convert_opcode(u8 opcode, const u8 table[][2], size_t size)
542 {
543 	size_t i;
544 
545 	for (i = 0; i < size; i++)
546 		if (table[i][0] == opcode)
547 			return table[i][1];
548 
549 	/* No conversion found, keep input op code. */
550 	return opcode;
551 }
552 
spi_nor_convert_3to4_read(u8 opcode)553 static u8 spi_nor_convert_3to4_read(u8 opcode)
554 {
555 	static const u8 spi_nor_3to4_read[][2] = {
556 		{ SPINOR_OP_READ,	SPINOR_OP_READ_4B },
557 		{ SPINOR_OP_READ_FAST,	SPINOR_OP_READ_FAST_4B },
558 		{ SPINOR_OP_READ_1_1_2,	SPINOR_OP_READ_1_1_2_4B },
559 		{ SPINOR_OP_READ_1_2_2,	SPINOR_OP_READ_1_2_2_4B },
560 		{ SPINOR_OP_READ_1_1_4,	SPINOR_OP_READ_1_1_4_4B },
561 		{ SPINOR_OP_READ_1_4_4,	SPINOR_OP_READ_1_4_4_4B },
562 		{ SPINOR_OP_READ_1_1_8,	SPINOR_OP_READ_1_1_8_4B },
563 		{ SPINOR_OP_READ_1_8_8,	SPINOR_OP_READ_1_8_8_4B },
564 
565 		{ SPINOR_OP_READ_1_1_1_DTR,	SPINOR_OP_READ_1_1_1_DTR_4B },
566 		{ SPINOR_OP_READ_1_2_2_DTR,	SPINOR_OP_READ_1_2_2_DTR_4B },
567 		{ SPINOR_OP_READ_1_4_4_DTR,	SPINOR_OP_READ_1_4_4_DTR_4B },
568 	};
569 
570 	return spi_nor_convert_opcode(opcode, spi_nor_3to4_read,
571 				      ARRAY_SIZE(spi_nor_3to4_read));
572 }
573 
spi_nor_convert_3to4_program(u8 opcode)574 static u8 spi_nor_convert_3to4_program(u8 opcode)
575 {
576 	static const u8 spi_nor_3to4_program[][2] = {
577 		{ SPINOR_OP_PP,		SPINOR_OP_PP_4B },
578 		{ SPINOR_OP_PP_1_1_4,	SPINOR_OP_PP_1_1_4_4B },
579 		{ SPINOR_OP_PP_1_4_4,	SPINOR_OP_PP_1_4_4_4B },
580 		{ SPINOR_OP_PP_1_1_8,	SPINOR_OP_PP_1_1_8_4B },
581 		{ SPINOR_OP_PP_1_8_8,	SPINOR_OP_PP_1_8_8_4B },
582 	};
583 
584 	return spi_nor_convert_opcode(opcode, spi_nor_3to4_program,
585 				      ARRAY_SIZE(spi_nor_3to4_program));
586 }
587 
spi_nor_convert_3to4_erase(u8 opcode)588 static u8 spi_nor_convert_3to4_erase(u8 opcode)
589 {
590 	static const u8 spi_nor_3to4_erase[][2] = {
591 		{ SPINOR_OP_BE_4K,	SPINOR_OP_BE_4K_4B },
592 		{ SPINOR_OP_BE_32K,	SPINOR_OP_BE_32K_4B },
593 		{ SPINOR_OP_SE,		SPINOR_OP_SE_4B },
594 	};
595 
596 	return spi_nor_convert_opcode(opcode, spi_nor_3to4_erase,
597 				      ARRAY_SIZE(spi_nor_3to4_erase));
598 }
599 
spi_nor_set_4byte_opcodes(struct spi_nor * nor)600 static void spi_nor_set_4byte_opcodes(struct spi_nor *nor)
601 {
602 	nor->read_opcode = spi_nor_convert_3to4_read(nor->read_opcode);
603 	nor->program_opcode = spi_nor_convert_3to4_program(nor->program_opcode);
604 	nor->erase_opcode = spi_nor_convert_3to4_erase(nor->erase_opcode);
605 
606 	if (!spi_nor_has_uniform_erase(nor)) {
607 		struct spi_nor_erase_map *map = &nor->params.erase_map;
608 		struct spi_nor_erase_type *erase;
609 		int i;
610 
611 		for (i = 0; i < SNOR_ERASE_TYPE_MAX; i++) {
612 			erase = &map->erase_type[i];
613 			erase->opcode =
614 				spi_nor_convert_3to4_erase(erase->opcode);
615 		}
616 	}
617 }
618 
macronix_set_4byte(struct spi_nor * nor,bool enable)619 static int macronix_set_4byte(struct spi_nor *nor, bool enable)
620 {
621 	if (nor->spimem) {
622 		struct spi_mem_op op =
623 			SPI_MEM_OP(SPI_MEM_OP_CMD(enable ?
624 						  SPINOR_OP_EN4B :
625 						  SPINOR_OP_EX4B,
626 						  1),
627 				  SPI_MEM_OP_NO_ADDR,
628 				  SPI_MEM_OP_NO_DUMMY,
629 				  SPI_MEM_OP_NO_DATA);
630 
631 		return spi_mem_exec_op(nor->spimem, &op);
632 	}
633 
634 	return nor->write_reg(nor, enable ? SPINOR_OP_EN4B : SPINOR_OP_EX4B,
635 			      NULL, 0);
636 }
637 
st_micron_set_4byte(struct spi_nor * nor,bool enable)638 static int st_micron_set_4byte(struct spi_nor *nor, bool enable)
639 {
640 	int ret;
641 
642 	write_enable(nor);
643 	ret = macronix_set_4byte(nor, enable);
644 	write_disable(nor);
645 
646 	return ret;
647 }
648 
spansion_set_4byte(struct spi_nor * nor,bool enable)649 static int spansion_set_4byte(struct spi_nor *nor, bool enable)
650 {
651 	nor->bouncebuf[0] = enable << 7;
652 
653 	if (nor->spimem) {
654 		struct spi_mem_op op =
655 			SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_BRWR, 1),
656 				   SPI_MEM_OP_NO_ADDR,
657 				   SPI_MEM_OP_NO_DUMMY,
658 				   SPI_MEM_OP_DATA_OUT(1, nor->bouncebuf, 1));
659 
660 		return spi_mem_exec_op(nor->spimem, &op);
661 	}
662 
663 	return nor->write_reg(nor, SPINOR_OP_BRWR, nor->bouncebuf, 1);
664 }
665 
spi_nor_write_ear(struct spi_nor * nor,u8 ear)666 static int spi_nor_write_ear(struct spi_nor *nor, u8 ear)
667 {
668 	nor->bouncebuf[0] = ear;
669 
670 	if (nor->spimem) {
671 		struct spi_mem_op op =
672 			SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WREAR, 1),
673 				   SPI_MEM_OP_NO_ADDR,
674 				   SPI_MEM_OP_NO_DUMMY,
675 				   SPI_MEM_OP_DATA_OUT(1, nor->bouncebuf, 1));
676 
677 		return spi_mem_exec_op(nor->spimem, &op);
678 	}
679 
680 	return nor->write_reg(nor, SPINOR_OP_WREAR, nor->bouncebuf, 1);
681 }
682 
winbond_set_4byte(struct spi_nor * nor,bool enable)683 static int winbond_set_4byte(struct spi_nor *nor, bool enable)
684 {
685 	int ret;
686 
687 	ret = macronix_set_4byte(nor, enable);
688 	if (ret || enable)
689 		return ret;
690 
691 	/*
692 	 * On Winbond W25Q256FV, leaving 4byte mode causes the Extended Address
693 	 * Register to be set to 1, so all 3-byte-address reads come from the
694 	 * second 16M. We must clear the register to enable normal behavior.
695 	 */
696 	write_enable(nor);
697 	ret = spi_nor_write_ear(nor, 0);
698 	write_disable(nor);
699 
700 	return ret;
701 }
702 
spi_nor_xread_sr(struct spi_nor * nor,u8 * sr)703 static int spi_nor_xread_sr(struct spi_nor *nor, u8 *sr)
704 {
705 	if (nor->spimem) {
706 		struct spi_mem_op op =
707 			SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_XRDSR, 1),
708 				   SPI_MEM_OP_NO_ADDR,
709 				   SPI_MEM_OP_NO_DUMMY,
710 				   SPI_MEM_OP_DATA_IN(1, sr, 1));
711 
712 		return spi_mem_exec_op(nor->spimem, &op);
713 	}
714 
715 	return nor->read_reg(nor, SPINOR_OP_XRDSR, sr, 1);
716 }
717 
s3an_sr_ready(struct spi_nor * nor)718 static int s3an_sr_ready(struct spi_nor *nor)
719 {
720 	int ret;
721 
722 	ret = spi_nor_xread_sr(nor, nor->bouncebuf);
723 	if (ret < 0) {
724 		dev_err(nor->dev, "error %d reading XRDSR\n", (int) ret);
725 		return ret;
726 	}
727 
728 	return !!(nor->bouncebuf[0] & XSR_RDY);
729 }
730 
spi_nor_clear_sr(struct spi_nor * nor)731 static int spi_nor_clear_sr(struct spi_nor *nor)
732 {
733 	if (nor->spimem) {
734 		struct spi_mem_op op =
735 			SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_CLSR, 1),
736 				   SPI_MEM_OP_NO_ADDR,
737 				   SPI_MEM_OP_NO_DUMMY,
738 				   SPI_MEM_OP_NO_DATA);
739 
740 		return spi_mem_exec_op(nor->spimem, &op);
741 	}
742 
743 	return nor->write_reg(nor, SPINOR_OP_CLSR, NULL, 0);
744 }
745 
spi_nor_sr_ready(struct spi_nor * nor)746 static int spi_nor_sr_ready(struct spi_nor *nor)
747 {
748 	int sr = read_sr(nor);
749 	if (sr < 0)
750 		return sr;
751 
752 	if (nor->flags & SNOR_F_USE_CLSR && sr & (SR_E_ERR | SR_P_ERR)) {
753 		if (sr & SR_E_ERR)
754 			dev_err(nor->dev, "Erase Error occurred\n");
755 		else
756 			dev_err(nor->dev, "Programming Error occurred\n");
757 
758 		spi_nor_clear_sr(nor);
759 		return -EIO;
760 	}
761 
762 	return !(sr & SR_WIP);
763 }
764 
spi_nor_clear_fsr(struct spi_nor * nor)765 static int spi_nor_clear_fsr(struct spi_nor *nor)
766 {
767 	if (nor->spimem) {
768 		struct spi_mem_op op =
769 			SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_CLFSR, 1),
770 				   SPI_MEM_OP_NO_ADDR,
771 				   SPI_MEM_OP_NO_DUMMY,
772 				   SPI_MEM_OP_NO_DATA);
773 
774 		return spi_mem_exec_op(nor->spimem, &op);
775 	}
776 
777 	return nor->write_reg(nor, SPINOR_OP_CLFSR, NULL, 0);
778 }
779 
spi_nor_fsr_ready(struct spi_nor * nor)780 static int spi_nor_fsr_ready(struct spi_nor *nor)
781 {
782 	int fsr = read_fsr(nor);
783 	if (fsr < 0)
784 		return fsr;
785 
786 	if (fsr & (FSR_E_ERR | FSR_P_ERR)) {
787 		if (fsr & FSR_E_ERR)
788 			dev_err(nor->dev, "Erase operation failed.\n");
789 		else
790 			dev_err(nor->dev, "Program operation failed.\n");
791 
792 		if (fsr & FSR_PT_ERR)
793 			dev_err(nor->dev,
794 			"Attempted to modify a protected sector.\n");
795 
796 		spi_nor_clear_fsr(nor);
797 		return -EIO;
798 	}
799 
800 	return fsr & FSR_READY;
801 }
802 
spi_nor_ready(struct spi_nor * nor)803 static int spi_nor_ready(struct spi_nor *nor)
804 {
805 	int sr, fsr;
806 
807 	if (nor->flags & SNOR_F_READY_XSR_RDY)
808 		sr = s3an_sr_ready(nor);
809 	else
810 		sr = spi_nor_sr_ready(nor);
811 	if (sr < 0)
812 		return sr;
813 	fsr = nor->flags & SNOR_F_USE_FSR ? spi_nor_fsr_ready(nor) : 1;
814 	if (fsr < 0)
815 		return fsr;
816 	return sr && fsr;
817 }
818 
819 /*
820  * Service routine to read status register until ready, or timeout occurs.
821  * Returns non-zero if error.
822  */
spi_nor_wait_till_ready_with_timeout(struct spi_nor * nor,unsigned long timeout_jiffies)823 static int spi_nor_wait_till_ready_with_timeout(struct spi_nor *nor,
824 						unsigned long timeout_jiffies)
825 {
826 	unsigned long deadline;
827 	int timeout = 0, ret;
828 
829 	deadline = jiffies + timeout_jiffies;
830 
831 	while (!timeout) {
832 		if (time_after_eq(jiffies, deadline))
833 			timeout = 1;
834 
835 		ret = spi_nor_ready(nor);
836 		if (ret < 0)
837 			return ret;
838 		if (ret)
839 			return 0;
840 
841 		cond_resched();
842 	}
843 
844 	dev_err(nor->dev, "flash operation timed out\n");
845 
846 	return -ETIMEDOUT;
847 }
848 
spi_nor_wait_till_ready(struct spi_nor * nor)849 static int spi_nor_wait_till_ready(struct spi_nor *nor)
850 {
851 	return spi_nor_wait_till_ready_with_timeout(nor,
852 						    DEFAULT_READY_WAIT_JIFFIES);
853 }
854 
855 /*
856  * Erase the whole flash memory
857  *
858  * Returns 0 if successful, non-zero otherwise.
859  */
erase_chip(struct spi_nor * nor)860 static int erase_chip(struct spi_nor *nor)
861 {
862 	dev_dbg(nor->dev, " %lldKiB\n", (long long)(nor->mtd.size >> 10));
863 
864 	if (nor->spimem) {
865 		struct spi_mem_op op =
866 			SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_CHIP_ERASE, 1),
867 				   SPI_MEM_OP_NO_ADDR,
868 				   SPI_MEM_OP_NO_DUMMY,
869 				   SPI_MEM_OP_NO_DATA);
870 
871 		return spi_mem_exec_op(nor->spimem, &op);
872 	}
873 
874 	return nor->write_reg(nor, SPINOR_OP_CHIP_ERASE, NULL, 0);
875 }
876 
spi_nor_lock_and_prep(struct spi_nor * nor,enum spi_nor_ops ops)877 static int spi_nor_lock_and_prep(struct spi_nor *nor, enum spi_nor_ops ops)
878 {
879 	int ret = 0;
880 
881 	mutex_lock(&nor->lock);
882 
883 	if (nor->prepare) {
884 		ret = nor->prepare(nor, ops);
885 		if (ret) {
886 			dev_err(nor->dev, "failed in the preparation.\n");
887 			mutex_unlock(&nor->lock);
888 			return ret;
889 		}
890 	}
891 	return ret;
892 }
893 
spi_nor_unlock_and_unprep(struct spi_nor * nor,enum spi_nor_ops ops)894 static void spi_nor_unlock_and_unprep(struct spi_nor *nor, enum spi_nor_ops ops)
895 {
896 	if (nor->unprepare)
897 		nor->unprepare(nor, ops);
898 	mutex_unlock(&nor->lock);
899 }
900 
901 /*
902  * This code converts an address to the Default Address Mode, that has non
903  * power of two page sizes. We must support this mode because it is the default
904  * mode supported by Xilinx tools, it can access the whole flash area and
905  * changing over to the Power-of-two mode is irreversible and corrupts the
906  * original data.
907  * Addr can safely be unsigned int, the biggest S3AN device is smaller than
908  * 4 MiB.
909  */
s3an_convert_addr(struct spi_nor * nor,u32 addr)910 static u32 s3an_convert_addr(struct spi_nor *nor, u32 addr)
911 {
912 	u32 offset, page;
913 
914 	offset = addr % nor->page_size;
915 	page = addr / nor->page_size;
916 	page <<= (nor->page_size > 512) ? 10 : 9;
917 
918 	return page | offset;
919 }
920 
spi_nor_convert_addr(struct spi_nor * nor,loff_t addr)921 static u32 spi_nor_convert_addr(struct spi_nor *nor, loff_t addr)
922 {
923 	if (!nor->params.convert_addr)
924 		return addr;
925 
926 	return nor->params.convert_addr(nor, addr);
927 }
928 
929 /*
930  * Initiate the erasure of a single sector
931  */
spi_nor_erase_sector(struct spi_nor * nor,u32 addr)932 static int spi_nor_erase_sector(struct spi_nor *nor, u32 addr)
933 {
934 	int i;
935 
936 	addr = spi_nor_convert_addr(nor, addr);
937 
938 	if (nor->erase)
939 		return nor->erase(nor, addr);
940 
941 	if (nor->spimem) {
942 		struct spi_mem_op op =
943 			SPI_MEM_OP(SPI_MEM_OP_CMD(nor->erase_opcode, 1),
944 				   SPI_MEM_OP_ADDR(nor->addr_width, addr, 1),
945 				   SPI_MEM_OP_NO_DUMMY,
946 				   SPI_MEM_OP_NO_DATA);
947 
948 		return spi_mem_exec_op(nor->spimem, &op);
949 	}
950 
951 	/*
952 	 * Default implementation, if driver doesn't have a specialized HW
953 	 * control
954 	 */
955 	for (i = nor->addr_width - 1; i >= 0; i--) {
956 		nor->bouncebuf[i] = addr & 0xff;
957 		addr >>= 8;
958 	}
959 
960 	return nor->write_reg(nor, nor->erase_opcode, nor->bouncebuf,
961 			      nor->addr_width);
962 }
963 
964 /**
965  * spi_nor_div_by_erase_size() - calculate remainder and update new dividend
966  * @erase:	pointer to a structure that describes a SPI NOR erase type
967  * @dividend:	dividend value
968  * @remainder:	pointer to u32 remainder (will be updated)
969  *
970  * Return: the result of the division
971  */
spi_nor_div_by_erase_size(const struct spi_nor_erase_type * erase,u64 dividend,u32 * remainder)972 static u64 spi_nor_div_by_erase_size(const struct spi_nor_erase_type *erase,
973 				     u64 dividend, u32 *remainder)
974 {
975 	/* JEDEC JESD216B Standard imposes erase sizes to be power of 2. */
976 	*remainder = (u32)dividend & erase->size_mask;
977 	return dividend >> erase->size_shift;
978 }
979 
980 /**
981  * spi_nor_find_best_erase_type() - find the best erase type for the given
982  *				    offset in the serial flash memory and the
983  *				    number of bytes to erase. The region in
984  *				    which the address fits is expected to be
985  *				    provided.
986  * @map:	the erase map of the SPI NOR
987  * @region:	pointer to a structure that describes a SPI NOR erase region
988  * @addr:	offset in the serial flash memory
989  * @len:	number of bytes to erase
990  *
991  * Return: a pointer to the best fitted erase type, NULL otherwise.
992  */
993 static const struct spi_nor_erase_type *
spi_nor_find_best_erase_type(const struct spi_nor_erase_map * map,const struct spi_nor_erase_region * region,u64 addr,u32 len)994 spi_nor_find_best_erase_type(const struct spi_nor_erase_map *map,
995 			     const struct spi_nor_erase_region *region,
996 			     u64 addr, u32 len)
997 {
998 	const struct spi_nor_erase_type *erase;
999 	u32 rem;
1000 	int i;
1001 	u8 erase_mask = region->offset & SNOR_ERASE_TYPE_MASK;
1002 
1003 	/*
1004 	 * Erase types are ordered by size, with the smallest erase type at
1005 	 * index 0.
1006 	 */
1007 	for (i = SNOR_ERASE_TYPE_MAX - 1; i >= 0; i--) {
1008 		/* Does the erase region support the tested erase type? */
1009 		if (!(erase_mask & BIT(i)))
1010 			continue;
1011 
1012 		erase = &map->erase_type[i];
1013 
1014 		/* Don't erase more than what the user has asked for. */
1015 		if (erase->size > len)
1016 			continue;
1017 
1018 		/* Alignment is not mandatory for overlaid regions */
1019 		if (region->offset & SNOR_OVERLAID_REGION)
1020 			return erase;
1021 
1022 		spi_nor_div_by_erase_size(erase, addr, &rem);
1023 		if (rem)
1024 			continue;
1025 		else
1026 			return erase;
1027 	}
1028 
1029 	return NULL;
1030 }
1031 
1032 /**
1033  * spi_nor_region_next() - get the next spi nor region
1034  * @region:	pointer to a structure that describes a SPI NOR erase region
1035  *
1036  * Return: the next spi nor region or NULL if last region.
1037  */
1038 static struct spi_nor_erase_region *
spi_nor_region_next(struct spi_nor_erase_region * region)1039 spi_nor_region_next(struct spi_nor_erase_region *region)
1040 {
1041 	if (spi_nor_region_is_last(region))
1042 		return NULL;
1043 	region++;
1044 	return region;
1045 }
1046 
1047 /**
1048  * spi_nor_find_erase_region() - find the region of the serial flash memory in
1049  *				 which the offset fits
1050  * @map:	the erase map of the SPI NOR
1051  * @addr:	offset in the serial flash memory
1052  *
1053  * Return: a pointer to the spi_nor_erase_region struct, ERR_PTR(-errno)
1054  *	   otherwise.
1055  */
1056 static struct spi_nor_erase_region *
spi_nor_find_erase_region(const struct spi_nor_erase_map * map,u64 addr)1057 spi_nor_find_erase_region(const struct spi_nor_erase_map *map, u64 addr)
1058 {
1059 	struct spi_nor_erase_region *region = map->regions;
1060 	u64 region_start = region->offset & ~SNOR_ERASE_FLAGS_MASK;
1061 	u64 region_end = region_start + region->size;
1062 
1063 	while (addr < region_start || addr >= region_end) {
1064 		region = spi_nor_region_next(region);
1065 		if (!region)
1066 			return ERR_PTR(-EINVAL);
1067 
1068 		region_start = region->offset & ~SNOR_ERASE_FLAGS_MASK;
1069 		region_end = region_start + region->size;
1070 	}
1071 
1072 	return region;
1073 }
1074 
1075 /**
1076  * spi_nor_init_erase_cmd() - initialize an erase command
1077  * @region:	pointer to a structure that describes a SPI NOR erase region
1078  * @erase:	pointer to a structure that describes a SPI NOR erase type
1079  *
1080  * Return: the pointer to the allocated erase command, ERR_PTR(-errno)
1081  *	   otherwise.
1082  */
1083 static struct spi_nor_erase_command *
spi_nor_init_erase_cmd(const struct spi_nor_erase_region * region,const struct spi_nor_erase_type * erase)1084 spi_nor_init_erase_cmd(const struct spi_nor_erase_region *region,
1085 		       const struct spi_nor_erase_type *erase)
1086 {
1087 	struct spi_nor_erase_command *cmd;
1088 
1089 	cmd = kmalloc(sizeof(*cmd), GFP_KERNEL);
1090 	if (!cmd)
1091 		return ERR_PTR(-ENOMEM);
1092 
1093 	INIT_LIST_HEAD(&cmd->list);
1094 	cmd->opcode = erase->opcode;
1095 	cmd->count = 1;
1096 
1097 	if (region->offset & SNOR_OVERLAID_REGION)
1098 		cmd->size = region->size;
1099 	else
1100 		cmd->size = erase->size;
1101 
1102 	return cmd;
1103 }
1104 
1105 /**
1106  * spi_nor_destroy_erase_cmd_list() - destroy erase command list
1107  * @erase_list:	list of erase commands
1108  */
spi_nor_destroy_erase_cmd_list(struct list_head * erase_list)1109 static void spi_nor_destroy_erase_cmd_list(struct list_head *erase_list)
1110 {
1111 	struct spi_nor_erase_command *cmd, *next;
1112 
1113 	list_for_each_entry_safe(cmd, next, erase_list, list) {
1114 		list_del(&cmd->list);
1115 		kfree(cmd);
1116 	}
1117 }
1118 
1119 /**
1120  * spi_nor_init_erase_cmd_list() - initialize erase command list
1121  * @nor:	pointer to a 'struct spi_nor'
1122  * @erase_list:	list of erase commands to be executed once we validate that the
1123  *		erase can be performed
1124  * @addr:	offset in the serial flash memory
1125  * @len:	number of bytes to erase
1126  *
1127  * Builds the list of best fitted erase commands and verifies if the erase can
1128  * be performed.
1129  *
1130  * Return: 0 on success, -errno otherwise.
1131  */
spi_nor_init_erase_cmd_list(struct spi_nor * nor,struct list_head * erase_list,u64 addr,u32 len)1132 static int spi_nor_init_erase_cmd_list(struct spi_nor *nor,
1133 				       struct list_head *erase_list,
1134 				       u64 addr, u32 len)
1135 {
1136 	const struct spi_nor_erase_map *map = &nor->params.erase_map;
1137 	const struct spi_nor_erase_type *erase, *prev_erase = NULL;
1138 	struct spi_nor_erase_region *region;
1139 	struct spi_nor_erase_command *cmd = NULL;
1140 	u64 region_end;
1141 	int ret = -EINVAL;
1142 
1143 	region = spi_nor_find_erase_region(map, addr);
1144 	if (IS_ERR(region))
1145 		return PTR_ERR(region);
1146 
1147 	region_end = spi_nor_region_end(region);
1148 
1149 	while (len) {
1150 		erase = spi_nor_find_best_erase_type(map, region, addr, len);
1151 		if (!erase)
1152 			goto destroy_erase_cmd_list;
1153 
1154 		if (prev_erase != erase ||
1155 		    region->offset & SNOR_OVERLAID_REGION) {
1156 			cmd = spi_nor_init_erase_cmd(region, erase);
1157 			if (IS_ERR(cmd)) {
1158 				ret = PTR_ERR(cmd);
1159 				goto destroy_erase_cmd_list;
1160 			}
1161 
1162 			list_add_tail(&cmd->list, erase_list);
1163 		} else {
1164 			cmd->count++;
1165 		}
1166 
1167 		addr += cmd->size;
1168 		len -= cmd->size;
1169 
1170 		if (len && addr >= region_end) {
1171 			region = spi_nor_region_next(region);
1172 			if (!region)
1173 				goto destroy_erase_cmd_list;
1174 			region_end = spi_nor_region_end(region);
1175 		}
1176 
1177 		prev_erase = erase;
1178 	}
1179 
1180 	return 0;
1181 
1182 destroy_erase_cmd_list:
1183 	spi_nor_destroy_erase_cmd_list(erase_list);
1184 	return ret;
1185 }
1186 
1187 /**
1188  * spi_nor_erase_multi_sectors() - perform a non-uniform erase
1189  * @nor:	pointer to a 'struct spi_nor'
1190  * @addr:	offset in the serial flash memory
1191  * @len:	number of bytes to erase
1192  *
1193  * Build a list of best fitted erase commands and execute it once we validate
1194  * that the erase can be performed.
1195  *
1196  * Return: 0 on success, -errno otherwise.
1197  */
spi_nor_erase_multi_sectors(struct spi_nor * nor,u64 addr,u32 len)1198 static int spi_nor_erase_multi_sectors(struct spi_nor *nor, u64 addr, u32 len)
1199 {
1200 	LIST_HEAD(erase_list);
1201 	struct spi_nor_erase_command *cmd, *next;
1202 	int ret;
1203 
1204 	ret = spi_nor_init_erase_cmd_list(nor, &erase_list, addr, len);
1205 	if (ret)
1206 		return ret;
1207 
1208 	list_for_each_entry_safe(cmd, next, &erase_list, list) {
1209 		nor->erase_opcode = cmd->opcode;
1210 		while (cmd->count) {
1211 			write_enable(nor);
1212 
1213 			ret = spi_nor_erase_sector(nor, addr);
1214 			if (ret)
1215 				goto destroy_erase_cmd_list;
1216 
1217 			addr += cmd->size;
1218 			cmd->count--;
1219 
1220 			ret = spi_nor_wait_till_ready(nor);
1221 			if (ret)
1222 				goto destroy_erase_cmd_list;
1223 		}
1224 		list_del(&cmd->list);
1225 		kfree(cmd);
1226 	}
1227 
1228 	return 0;
1229 
1230 destroy_erase_cmd_list:
1231 	spi_nor_destroy_erase_cmd_list(&erase_list);
1232 	return ret;
1233 }
1234 
1235 /*
1236  * Erase an address range on the nor chip.  The address range may extend
1237  * one or more erase sectors.  Return an error is there is a problem erasing.
1238  */
spi_nor_erase(struct mtd_info * mtd,struct erase_info * instr)1239 static int spi_nor_erase(struct mtd_info *mtd, struct erase_info *instr)
1240 {
1241 	struct spi_nor *nor = mtd_to_spi_nor(mtd);
1242 	u32 addr, len;
1243 	uint32_t rem;
1244 	int ret;
1245 
1246 	dev_dbg(nor->dev, "at 0x%llx, len %lld\n", (long long)instr->addr,
1247 			(long long)instr->len);
1248 
1249 	if (spi_nor_has_uniform_erase(nor)) {
1250 		div_u64_rem(instr->len, mtd->erasesize, &rem);
1251 		if (rem)
1252 			return -EINVAL;
1253 	}
1254 
1255 	addr = instr->addr;
1256 	len = instr->len;
1257 
1258 	ret = spi_nor_lock_and_prep(nor, SPI_NOR_OPS_ERASE);
1259 	if (ret)
1260 		return ret;
1261 
1262 	/* whole-chip erase? */
1263 	if (len == mtd->size && !(nor->flags & SNOR_F_NO_OP_CHIP_ERASE)) {
1264 		unsigned long timeout;
1265 
1266 		write_enable(nor);
1267 
1268 		if (erase_chip(nor)) {
1269 			ret = -EIO;
1270 			goto erase_err;
1271 		}
1272 
1273 		/*
1274 		 * Scale the timeout linearly with the size of the flash, with
1275 		 * a minimum calibrated to an old 2MB flash. We could try to
1276 		 * pull these from CFI/SFDP, but these values should be good
1277 		 * enough for now.
1278 		 */
1279 		timeout = max(CHIP_ERASE_2MB_READY_WAIT_JIFFIES,
1280 			      CHIP_ERASE_2MB_READY_WAIT_JIFFIES *
1281 			      (unsigned long)(mtd->size / SZ_2M));
1282 		ret = spi_nor_wait_till_ready_with_timeout(nor, timeout);
1283 		if (ret)
1284 			goto erase_err;
1285 
1286 	/* REVISIT in some cases we could speed up erasing large regions
1287 	 * by using SPINOR_OP_SE instead of SPINOR_OP_BE_4K.  We may have set up
1288 	 * to use "small sector erase", but that's not always optimal.
1289 	 */
1290 
1291 	/* "sector"-at-a-time erase */
1292 	} else if (spi_nor_has_uniform_erase(nor)) {
1293 		while (len) {
1294 			write_enable(nor);
1295 
1296 			ret = spi_nor_erase_sector(nor, addr);
1297 			if (ret)
1298 				goto erase_err;
1299 
1300 			addr += mtd->erasesize;
1301 			len -= mtd->erasesize;
1302 
1303 			ret = spi_nor_wait_till_ready(nor);
1304 			if (ret)
1305 				goto erase_err;
1306 		}
1307 
1308 	/* erase multiple sectors */
1309 	} else {
1310 		ret = spi_nor_erase_multi_sectors(nor, addr, len);
1311 		if (ret)
1312 			goto erase_err;
1313 	}
1314 
1315 	write_disable(nor);
1316 
1317 erase_err:
1318 	spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_ERASE);
1319 
1320 	return ret;
1321 }
1322 
1323 /* Write status register and ensure bits in mask match written values */
write_sr_and_check(struct spi_nor * nor,u8 status_new,u8 mask)1324 static int write_sr_and_check(struct spi_nor *nor, u8 status_new, u8 mask)
1325 {
1326 	int ret;
1327 
1328 	write_enable(nor);
1329 	ret = write_sr(nor, status_new);
1330 	if (ret)
1331 		return ret;
1332 
1333 	ret = spi_nor_wait_till_ready(nor);
1334 	if (ret)
1335 		return ret;
1336 
1337 	ret = read_sr(nor);
1338 	if (ret < 0)
1339 		return ret;
1340 
1341 	return ((ret & mask) != (status_new & mask)) ? -EIO : 0;
1342 }
1343 
stm_get_locked_range(struct spi_nor * nor,u8 sr,loff_t * ofs,uint64_t * len)1344 static void stm_get_locked_range(struct spi_nor *nor, u8 sr, loff_t *ofs,
1345 				 uint64_t *len)
1346 {
1347 	struct mtd_info *mtd = &nor->mtd;
1348 	u8 mask = SR_BP2 | SR_BP1 | SR_BP0;
1349 	int shift = ffs(mask) - 1;
1350 	int pow;
1351 
1352 	if (!(sr & mask)) {
1353 		/* No protection */
1354 		*ofs = 0;
1355 		*len = 0;
1356 	} else {
1357 		pow = ((sr & mask) ^ mask) >> shift;
1358 		*len = mtd->size >> pow;
1359 		if (nor->flags & SNOR_F_HAS_SR_TB && sr & SR_TB)
1360 			*ofs = 0;
1361 		else
1362 			*ofs = mtd->size - *len;
1363 	}
1364 }
1365 
1366 /*
1367  * Return 1 if the entire region is locked (if @locked is true) or unlocked (if
1368  * @locked is false); 0 otherwise
1369  */
stm_check_lock_status_sr(struct spi_nor * nor,loff_t ofs,uint64_t len,u8 sr,bool locked)1370 static int stm_check_lock_status_sr(struct spi_nor *nor, loff_t ofs, uint64_t len,
1371 				    u8 sr, bool locked)
1372 {
1373 	loff_t lock_offs;
1374 	uint64_t lock_len;
1375 
1376 	if (!len)
1377 		return 1;
1378 
1379 	stm_get_locked_range(nor, sr, &lock_offs, &lock_len);
1380 
1381 	if (locked)
1382 		/* Requested range is a sub-range of locked range */
1383 		return (ofs + len <= lock_offs + lock_len) && (ofs >= lock_offs);
1384 	else
1385 		/* Requested range does not overlap with locked range */
1386 		return (ofs >= lock_offs + lock_len) || (ofs + len <= lock_offs);
1387 }
1388 
stm_is_locked_sr(struct spi_nor * nor,loff_t ofs,uint64_t len,u8 sr)1389 static int stm_is_locked_sr(struct spi_nor *nor, loff_t ofs, uint64_t len,
1390 			    u8 sr)
1391 {
1392 	return stm_check_lock_status_sr(nor, ofs, len, sr, true);
1393 }
1394 
stm_is_unlocked_sr(struct spi_nor * nor,loff_t ofs,uint64_t len,u8 sr)1395 static int stm_is_unlocked_sr(struct spi_nor *nor, loff_t ofs, uint64_t len,
1396 			      u8 sr)
1397 {
1398 	return stm_check_lock_status_sr(nor, ofs, len, sr, false);
1399 }
1400 
1401 /*
1402  * Lock a region of the flash. Compatible with ST Micro and similar flash.
1403  * Supports the block protection bits BP{0,1,2} in the status register
1404  * (SR). Does not support these features found in newer SR bitfields:
1405  *   - SEC: sector/block protect - only handle SEC=0 (block protect)
1406  *   - CMP: complement protect - only support CMP=0 (range is not complemented)
1407  *
1408  * Support for the following is provided conditionally for some flash:
1409  *   - TB: top/bottom protect
1410  *
1411  * Sample table portion for 8MB flash (Winbond w25q64fw):
1412  *
1413  *   SEC  |  TB   |  BP2  |  BP1  |  BP0  |  Prot Length  | Protected Portion
1414  *  --------------------------------------------------------------------------
1415  *    X   |   X   |   0   |   0   |   0   |  NONE         | NONE
1416  *    0   |   0   |   0   |   0   |   1   |  128 KB       | Upper 1/64
1417  *    0   |   0   |   0   |   1   |   0   |  256 KB       | Upper 1/32
1418  *    0   |   0   |   0   |   1   |   1   |  512 KB       | Upper 1/16
1419  *    0   |   0   |   1   |   0   |   0   |  1 MB         | Upper 1/8
1420  *    0   |   0   |   1   |   0   |   1   |  2 MB         | Upper 1/4
1421  *    0   |   0   |   1   |   1   |   0   |  4 MB         | Upper 1/2
1422  *    X   |   X   |   1   |   1   |   1   |  8 MB         | ALL
1423  *  ------|-------|-------|-------|-------|---------------|-------------------
1424  *    0   |   1   |   0   |   0   |   1   |  128 KB       | Lower 1/64
1425  *    0   |   1   |   0   |   1   |   0   |  256 KB       | Lower 1/32
1426  *    0   |   1   |   0   |   1   |   1   |  512 KB       | Lower 1/16
1427  *    0   |   1   |   1   |   0   |   0   |  1 MB         | Lower 1/8
1428  *    0   |   1   |   1   |   0   |   1   |  2 MB         | Lower 1/4
1429  *    0   |   1   |   1   |   1   |   0   |  4 MB         | Lower 1/2
1430  *
1431  * Returns negative on errors, 0 on success.
1432  */
stm_lock(struct spi_nor * nor,loff_t ofs,uint64_t len)1433 static int stm_lock(struct spi_nor *nor, loff_t ofs, uint64_t len)
1434 {
1435 	struct mtd_info *mtd = &nor->mtd;
1436 	int status_old, status_new;
1437 	u8 mask = SR_BP2 | SR_BP1 | SR_BP0;
1438 	u8 shift = ffs(mask) - 1, pow, val;
1439 	loff_t lock_len;
1440 	bool can_be_top = true, can_be_bottom = nor->flags & SNOR_F_HAS_SR_TB;
1441 	bool use_top;
1442 
1443 	status_old = read_sr(nor);
1444 	if (status_old < 0)
1445 		return status_old;
1446 
1447 	/* If nothing in our range is unlocked, we don't need to do anything */
1448 	if (stm_is_locked_sr(nor, ofs, len, status_old))
1449 		return 0;
1450 
1451 	/* If anything below us is unlocked, we can't use 'bottom' protection */
1452 	if (!stm_is_locked_sr(nor, 0, ofs, status_old))
1453 		can_be_bottom = false;
1454 
1455 	/* If anything above us is unlocked, we can't use 'top' protection */
1456 	if (!stm_is_locked_sr(nor, ofs + len, mtd->size - (ofs + len),
1457 				status_old))
1458 		can_be_top = false;
1459 
1460 	if (!can_be_bottom && !can_be_top)
1461 		return -EINVAL;
1462 
1463 	/* Prefer top, if both are valid */
1464 	use_top = can_be_top;
1465 
1466 	/* lock_len: length of region that should end up locked */
1467 	if (use_top)
1468 		lock_len = mtd->size - ofs;
1469 	else
1470 		lock_len = ofs + len;
1471 
1472 	/*
1473 	 * Need smallest pow such that:
1474 	 *
1475 	 *   1 / (2^pow) <= (len / size)
1476 	 *
1477 	 * so (assuming power-of-2 size) we do:
1478 	 *
1479 	 *   pow = ceil(log2(size / len)) = log2(size) - floor(log2(len))
1480 	 */
1481 	pow = ilog2(mtd->size) - ilog2(lock_len);
1482 	val = mask - (pow << shift);
1483 	if (val & ~mask)
1484 		return -EINVAL;
1485 	/* Don't "lock" with no region! */
1486 	if (!(val & mask))
1487 		return -EINVAL;
1488 
1489 	status_new = (status_old & ~mask & ~SR_TB) | val;
1490 
1491 	/* Disallow further writes if WP pin is asserted */
1492 	status_new |= SR_SRWD;
1493 
1494 	if (!use_top)
1495 		status_new |= SR_TB;
1496 
1497 	/* Don't bother if they're the same */
1498 	if (status_new == status_old)
1499 		return 0;
1500 
1501 	/* Only modify protection if it will not unlock other areas */
1502 	if ((status_new & mask) < (status_old & mask))
1503 		return -EINVAL;
1504 
1505 	return write_sr_and_check(nor, status_new, mask);
1506 }
1507 
1508 /*
1509  * Unlock a region of the flash. See stm_lock() for more info
1510  *
1511  * Returns negative on errors, 0 on success.
1512  */
stm_unlock(struct spi_nor * nor,loff_t ofs,uint64_t len)1513 static int stm_unlock(struct spi_nor *nor, loff_t ofs, uint64_t len)
1514 {
1515 	struct mtd_info *mtd = &nor->mtd;
1516 	int status_old, status_new;
1517 	u8 mask = SR_BP2 | SR_BP1 | SR_BP0;
1518 	u8 shift = ffs(mask) - 1, pow, val;
1519 	loff_t lock_len;
1520 	bool can_be_top = true, can_be_bottom = nor->flags & SNOR_F_HAS_SR_TB;
1521 	bool use_top;
1522 
1523 	status_old = read_sr(nor);
1524 	if (status_old < 0)
1525 		return status_old;
1526 
1527 	/* If nothing in our range is locked, we don't need to do anything */
1528 	if (stm_is_unlocked_sr(nor, ofs, len, status_old))
1529 		return 0;
1530 
1531 	/* If anything below us is locked, we can't use 'top' protection */
1532 	if (!stm_is_unlocked_sr(nor, 0, ofs, status_old))
1533 		can_be_top = false;
1534 
1535 	/* If anything above us is locked, we can't use 'bottom' protection */
1536 	if (!stm_is_unlocked_sr(nor, ofs + len, mtd->size - (ofs + len),
1537 				status_old))
1538 		can_be_bottom = false;
1539 
1540 	if (!can_be_bottom && !can_be_top)
1541 		return -EINVAL;
1542 
1543 	/* Prefer top, if both are valid */
1544 	use_top = can_be_top;
1545 
1546 	/* lock_len: length of region that should remain locked */
1547 	if (use_top)
1548 		lock_len = mtd->size - (ofs + len);
1549 	else
1550 		lock_len = ofs;
1551 
1552 	/*
1553 	 * Need largest pow such that:
1554 	 *
1555 	 *   1 / (2^pow) >= (len / size)
1556 	 *
1557 	 * so (assuming power-of-2 size) we do:
1558 	 *
1559 	 *   pow = floor(log2(size / len)) = log2(size) - ceil(log2(len))
1560 	 */
1561 	pow = ilog2(mtd->size) - order_base_2(lock_len);
1562 	if (lock_len == 0) {
1563 		val = 0; /* fully unlocked */
1564 	} else {
1565 		val = mask - (pow << shift);
1566 		/* Some power-of-two sizes are not supported */
1567 		if (val & ~mask)
1568 			return -EINVAL;
1569 	}
1570 
1571 	status_new = (status_old & ~mask & ~SR_TB) | val;
1572 
1573 	/* Don't protect status register if we're fully unlocked */
1574 	if (lock_len == 0)
1575 		status_new &= ~SR_SRWD;
1576 
1577 	if (!use_top)
1578 		status_new |= SR_TB;
1579 
1580 	/* Don't bother if they're the same */
1581 	if (status_new == status_old)
1582 		return 0;
1583 
1584 	/* Only modify protection if it will not lock other areas */
1585 	if ((status_new & mask) > (status_old & mask))
1586 		return -EINVAL;
1587 
1588 	return write_sr_and_check(nor, status_new, mask);
1589 }
1590 
1591 /*
1592  * Check if a region of the flash is (completely) locked. See stm_lock() for
1593  * more info.
1594  *
1595  * Returns 1 if entire region is locked, 0 if any portion is unlocked, and
1596  * negative on errors.
1597  */
stm_is_locked(struct spi_nor * nor,loff_t ofs,uint64_t len)1598 static int stm_is_locked(struct spi_nor *nor, loff_t ofs, uint64_t len)
1599 {
1600 	int status;
1601 
1602 	status = read_sr(nor);
1603 	if (status < 0)
1604 		return status;
1605 
1606 	return stm_is_locked_sr(nor, ofs, len, status);
1607 }
1608 
1609 static const struct spi_nor_locking_ops stm_locking_ops = {
1610 	.lock = stm_lock,
1611 	.unlock = stm_unlock,
1612 	.is_locked = stm_is_locked,
1613 };
1614 
spi_nor_lock(struct mtd_info * mtd,loff_t ofs,uint64_t len)1615 static int spi_nor_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
1616 {
1617 	struct spi_nor *nor = mtd_to_spi_nor(mtd);
1618 	int ret;
1619 
1620 	ret = spi_nor_lock_and_prep(nor, SPI_NOR_OPS_LOCK);
1621 	if (ret)
1622 		return ret;
1623 
1624 	ret = nor->params.locking_ops->lock(nor, ofs, len);
1625 
1626 	spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_UNLOCK);
1627 	return ret;
1628 }
1629 
spi_nor_unlock(struct mtd_info * mtd,loff_t ofs,uint64_t len)1630 static int spi_nor_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
1631 {
1632 	struct spi_nor *nor = mtd_to_spi_nor(mtd);
1633 	int ret;
1634 
1635 	ret = spi_nor_lock_and_prep(nor, SPI_NOR_OPS_UNLOCK);
1636 	if (ret)
1637 		return ret;
1638 
1639 	ret = nor->params.locking_ops->unlock(nor, ofs, len);
1640 
1641 	spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_LOCK);
1642 	return ret;
1643 }
1644 
spi_nor_is_locked(struct mtd_info * mtd,loff_t ofs,uint64_t len)1645 static int spi_nor_is_locked(struct mtd_info *mtd, loff_t ofs, uint64_t len)
1646 {
1647 	struct spi_nor *nor = mtd_to_spi_nor(mtd);
1648 	int ret;
1649 
1650 	ret = spi_nor_lock_and_prep(nor, SPI_NOR_OPS_UNLOCK);
1651 	if (ret)
1652 		return ret;
1653 
1654 	ret = nor->params.locking_ops->is_locked(nor, ofs, len);
1655 
1656 	spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_LOCK);
1657 	return ret;
1658 }
1659 
1660 /*
1661  * Write status Register and configuration register with 2 bytes
1662  * The first byte will be written to the status register, while the
1663  * second byte will be written to the configuration register.
1664  * Return negative if error occurred.
1665  */
write_sr_cr(struct spi_nor * nor,u8 * sr_cr)1666 static int write_sr_cr(struct spi_nor *nor, u8 *sr_cr)
1667 {
1668 	int ret;
1669 
1670 	write_enable(nor);
1671 
1672 	if (nor->spimem) {
1673 		struct spi_mem_op op =
1674 			SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WRSR, 1),
1675 				   SPI_MEM_OP_NO_ADDR,
1676 				   SPI_MEM_OP_NO_DUMMY,
1677 				   SPI_MEM_OP_DATA_OUT(2, sr_cr, 1));
1678 
1679 		ret = spi_mem_exec_op(nor->spimem, &op);
1680 	} else {
1681 		ret = nor->write_reg(nor, SPINOR_OP_WRSR, sr_cr, 2);
1682 	}
1683 
1684 	if (ret < 0) {
1685 		dev_err(nor->dev,
1686 			"error while writing configuration register\n");
1687 		return -EINVAL;
1688 	}
1689 
1690 	ret = spi_nor_wait_till_ready(nor);
1691 	if (ret) {
1692 		dev_err(nor->dev,
1693 			"timeout while writing configuration register\n");
1694 		return ret;
1695 	}
1696 
1697 	return 0;
1698 }
1699 
1700 /**
1701  * macronix_quad_enable() - set QE bit in Status Register.
1702  * @nor:	pointer to a 'struct spi_nor'
1703  *
1704  * Set the Quad Enable (QE) bit in the Status Register.
1705  *
1706  * bit 6 of the Status Register is the QE bit for Macronix like QSPI memories.
1707  *
1708  * Return: 0 on success, -errno otherwise.
1709  */
macronix_quad_enable(struct spi_nor * nor)1710 static int macronix_quad_enable(struct spi_nor *nor)
1711 {
1712 	int ret, val;
1713 
1714 	val = read_sr(nor);
1715 	if (val < 0)
1716 		return val;
1717 	if (val & SR_QUAD_EN_MX)
1718 		return 0;
1719 
1720 	write_enable(nor);
1721 
1722 	write_sr(nor, val | SR_QUAD_EN_MX);
1723 
1724 	ret = spi_nor_wait_till_ready(nor);
1725 	if (ret)
1726 		return ret;
1727 
1728 	ret = read_sr(nor);
1729 	if (!(ret > 0 && (ret & SR_QUAD_EN_MX))) {
1730 		dev_err(nor->dev, "Macronix Quad bit not set\n");
1731 		return -EINVAL;
1732 	}
1733 
1734 	return 0;
1735 }
1736 
1737 /**
1738  * spansion_quad_enable() - set QE bit in Configuraiton Register.
1739  * @nor:	pointer to a 'struct spi_nor'
1740  *
1741  * Set the Quad Enable (QE) bit in the Configuration Register.
1742  * This function is kept for legacy purpose because it has been used for a
1743  * long time without anybody complaining but it should be considered as
1744  * deprecated and maybe buggy.
1745  * First, this function doesn't care about the previous values of the Status
1746  * and Configuration Registers when it sets the QE bit (bit 1) in the
1747  * Configuration Register: all other bits are cleared, which may have unwanted
1748  * side effects like removing some block protections.
1749  * Secondly, it uses the Read Configuration Register (35h) instruction though
1750  * some very old and few memories don't support this instruction. If a pull-up
1751  * resistor is present on the MISO/IO1 line, we might still be able to pass the
1752  * "read back" test because the QSPI memory doesn't recognize the command,
1753  * so leaves the MISO/IO1 line state unchanged, hence read_cr() returns 0xFF.
1754  *
1755  * bit 1 of the Configuration Register is the QE bit for Spansion like QSPI
1756  * memories.
1757  *
1758  * Return: 0 on success, -errno otherwise.
1759  */
spansion_quad_enable(struct spi_nor * nor)1760 static int spansion_quad_enable(struct spi_nor *nor)
1761 {
1762 	u8 *sr_cr = nor->bouncebuf;
1763 	int ret;
1764 
1765 	sr_cr[0] = 0;
1766 	sr_cr[1] = CR_QUAD_EN_SPAN;
1767 	ret = write_sr_cr(nor, sr_cr);
1768 	if (ret)
1769 		return ret;
1770 
1771 	/* read back and check it */
1772 	ret = read_cr(nor);
1773 	if (!(ret > 0 && (ret & CR_QUAD_EN_SPAN))) {
1774 		dev_err(nor->dev, "Spansion Quad bit not set\n");
1775 		return -EINVAL;
1776 	}
1777 
1778 	return 0;
1779 }
1780 
1781 /**
1782  * spansion_no_read_cr_quad_enable() - set QE bit in Configuration Register.
1783  * @nor:	pointer to a 'struct spi_nor'
1784  *
1785  * Set the Quad Enable (QE) bit in the Configuration Register.
1786  * This function should be used with QSPI memories not supporting the Read
1787  * Configuration Register (35h) instruction.
1788  *
1789  * bit 1 of the Configuration Register is the QE bit for Spansion like QSPI
1790  * memories.
1791  *
1792  * Return: 0 on success, -errno otherwise.
1793  */
spansion_no_read_cr_quad_enable(struct spi_nor * nor)1794 static int spansion_no_read_cr_quad_enable(struct spi_nor *nor)
1795 {
1796 	u8 *sr_cr = nor->bouncebuf;
1797 	int ret;
1798 
1799 	/* Keep the current value of the Status Register. */
1800 	ret = read_sr(nor);
1801 	if (ret < 0) {
1802 		dev_err(nor->dev, "error while reading status register\n");
1803 		return -EINVAL;
1804 	}
1805 	sr_cr[0] = ret;
1806 	sr_cr[1] = CR_QUAD_EN_SPAN;
1807 
1808 	return write_sr_cr(nor, sr_cr);
1809 }
1810 
1811 /**
1812  * spansion_read_cr_quad_enable() - set QE bit in Configuration Register.
1813  * @nor:	pointer to a 'struct spi_nor'
1814  *
1815  * Set the Quad Enable (QE) bit in the Configuration Register.
1816  * This function should be used with QSPI memories supporting the Read
1817  * Configuration Register (35h) instruction.
1818  *
1819  * bit 1 of the Configuration Register is the QE bit for Spansion like QSPI
1820  * memories.
1821  *
1822  * Return: 0 on success, -errno otherwise.
1823  */
spansion_read_cr_quad_enable(struct spi_nor * nor)1824 static int spansion_read_cr_quad_enable(struct spi_nor *nor)
1825 {
1826 	struct device *dev = nor->dev;
1827 	u8 *sr_cr = nor->bouncebuf;
1828 	int ret;
1829 
1830 	/* Check current Quad Enable bit value. */
1831 	ret = read_cr(nor);
1832 	if (ret < 0) {
1833 		dev_err(dev, "error while reading configuration register\n");
1834 		return -EINVAL;
1835 	}
1836 
1837 	if (ret & CR_QUAD_EN_SPAN)
1838 		return 0;
1839 
1840 	sr_cr[1] = ret | CR_QUAD_EN_SPAN;
1841 
1842 	/* Keep the current value of the Status Register. */
1843 	ret = read_sr(nor);
1844 	if (ret < 0) {
1845 		dev_err(dev, "error while reading status register\n");
1846 		return -EINVAL;
1847 	}
1848 	sr_cr[0] = ret;
1849 
1850 	ret = write_sr_cr(nor, sr_cr);
1851 	if (ret)
1852 		return ret;
1853 
1854 	/* Read back and check it. */
1855 	ret = read_cr(nor);
1856 	if (!(ret > 0 && (ret & CR_QUAD_EN_SPAN))) {
1857 		dev_err(nor->dev, "Spansion Quad bit not set\n");
1858 		return -EINVAL;
1859 	}
1860 
1861 	return 0;
1862 }
1863 
spi_nor_write_sr2(struct spi_nor * nor,u8 * sr2)1864 static int spi_nor_write_sr2(struct spi_nor *nor, u8 *sr2)
1865 {
1866 	if (nor->spimem) {
1867 		struct spi_mem_op op =
1868 			SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_WRSR2, 1),
1869 				   SPI_MEM_OP_NO_ADDR,
1870 				   SPI_MEM_OP_NO_DUMMY,
1871 				   SPI_MEM_OP_DATA_OUT(1, sr2, 1));
1872 
1873 		return spi_mem_exec_op(nor->spimem, &op);
1874 	}
1875 
1876 	return nor->write_reg(nor, SPINOR_OP_WRSR2, sr2, 1);
1877 }
1878 
spi_nor_read_sr2(struct spi_nor * nor,u8 * sr2)1879 static int spi_nor_read_sr2(struct spi_nor *nor, u8 *sr2)
1880 {
1881 	if (nor->spimem) {
1882 		struct spi_mem_op op =
1883 			SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDSR2, 1),
1884 				   SPI_MEM_OP_NO_ADDR,
1885 				   SPI_MEM_OP_NO_DUMMY,
1886 				   SPI_MEM_OP_DATA_IN(1, sr2, 1));
1887 
1888 		return spi_mem_exec_op(nor->spimem, &op);
1889 	}
1890 
1891 	return nor->read_reg(nor, SPINOR_OP_RDSR2, sr2, 1);
1892 }
1893 
1894 /**
1895  * sr2_bit7_quad_enable() - set QE bit in Status Register 2.
1896  * @nor:	pointer to a 'struct spi_nor'
1897  *
1898  * Set the Quad Enable (QE) bit in the Status Register 2.
1899  *
1900  * This is one of the procedures to set the QE bit described in the SFDP
1901  * (JESD216 rev B) specification but no manufacturer using this procedure has
1902  * been identified yet, hence the name of the function.
1903  *
1904  * Return: 0 on success, -errno otherwise.
1905  */
sr2_bit7_quad_enable(struct spi_nor * nor)1906 static int sr2_bit7_quad_enable(struct spi_nor *nor)
1907 {
1908 	u8 *sr2 = nor->bouncebuf;
1909 	int ret;
1910 
1911 	/* Check current Quad Enable bit value. */
1912 	ret = spi_nor_read_sr2(nor, sr2);
1913 	if (ret)
1914 		return ret;
1915 	if (*sr2 & SR2_QUAD_EN_BIT7)
1916 		return 0;
1917 
1918 	/* Update the Quad Enable bit. */
1919 	*sr2 |= SR2_QUAD_EN_BIT7;
1920 
1921 	write_enable(nor);
1922 
1923 	ret = spi_nor_write_sr2(nor, sr2);
1924 	if (ret < 0) {
1925 		dev_err(nor->dev, "error while writing status register 2\n");
1926 		return -EINVAL;
1927 	}
1928 
1929 	ret = spi_nor_wait_till_ready(nor);
1930 	if (ret < 0) {
1931 		dev_err(nor->dev, "timeout while writing status register 2\n");
1932 		return ret;
1933 	}
1934 
1935 	/* Read back and check it. */
1936 	ret = spi_nor_read_sr2(nor, sr2);
1937 	if (!(ret > 0 && (*sr2 & SR2_QUAD_EN_BIT7))) {
1938 		dev_err(nor->dev, "SR2 Quad bit not set\n");
1939 		return -EINVAL;
1940 	}
1941 
1942 	return 0;
1943 }
1944 
1945 /**
1946  * spi_nor_clear_sr_bp() - clear the Status Register Block Protection bits.
1947  * @nor:        pointer to a 'struct spi_nor'
1948  *
1949  * Read-modify-write function that clears the Block Protection bits from the
1950  * Status Register without affecting other bits.
1951  *
1952  * Return: 0 on success, -errno otherwise.
1953  */
spi_nor_clear_sr_bp(struct spi_nor * nor)1954 static int spi_nor_clear_sr_bp(struct spi_nor *nor)
1955 {
1956 	int ret;
1957 	u8 mask = SR_BP2 | SR_BP1 | SR_BP0;
1958 
1959 	ret = read_sr(nor);
1960 	if (ret < 0) {
1961 		dev_err(nor->dev, "error while reading status register\n");
1962 		return ret;
1963 	}
1964 
1965 	write_enable(nor);
1966 
1967 	ret = write_sr(nor, ret & ~mask);
1968 	if (ret) {
1969 		dev_err(nor->dev, "write to status register failed\n");
1970 		return ret;
1971 	}
1972 
1973 	ret = spi_nor_wait_till_ready(nor);
1974 	if (ret)
1975 		dev_err(nor->dev, "timeout while writing status register\n");
1976 	return ret;
1977 }
1978 
1979 /**
1980  * spi_nor_spansion_clear_sr_bp() - clear the Status Register Block Protection
1981  * bits on spansion flashes.
1982  * @nor:        pointer to a 'struct spi_nor'
1983  *
1984  * Read-modify-write function that clears the Block Protection bits from the
1985  * Status Register without affecting other bits. The function is tightly
1986  * coupled with the spansion_quad_enable() function. Both assume that the Write
1987  * Register with 16 bits, together with the Read Configuration Register (35h)
1988  * instructions are supported.
1989  *
1990  * Return: 0 on success, -errno otherwise.
1991  */
spi_nor_spansion_clear_sr_bp(struct spi_nor * nor)1992 static int spi_nor_spansion_clear_sr_bp(struct spi_nor *nor)
1993 {
1994 	int ret;
1995 	u8 mask = SR_BP2 | SR_BP1 | SR_BP0;
1996 	u8 *sr_cr =  nor->bouncebuf;
1997 
1998 	/* Check current Quad Enable bit value. */
1999 	ret = read_cr(nor);
2000 	if (ret < 0) {
2001 		dev_err(nor->dev,
2002 			"error while reading configuration register\n");
2003 		return ret;
2004 	}
2005 
2006 	/*
2007 	 * When the configuration register Quad Enable bit is one, only the
2008 	 * Write Status (01h) command with two data bytes may be used.
2009 	 */
2010 	if (ret & CR_QUAD_EN_SPAN) {
2011 		sr_cr[1] = ret;
2012 
2013 		ret = read_sr(nor);
2014 		if (ret < 0) {
2015 			dev_err(nor->dev,
2016 				"error while reading status register\n");
2017 			return ret;
2018 		}
2019 		sr_cr[0] = ret & ~mask;
2020 
2021 		ret = write_sr_cr(nor, sr_cr);
2022 		if (ret)
2023 			dev_err(nor->dev, "16-bit write register failed\n");
2024 		return ret;
2025 	}
2026 
2027 	/*
2028 	 * If the Quad Enable bit is zero, use the Write Status (01h) command
2029 	 * with one data byte.
2030 	 */
2031 	return spi_nor_clear_sr_bp(nor);
2032 }
2033 
2034 /* Used when the "_ext_id" is two bytes at most */
2035 #define INFO(_jedec_id, _ext_id, _sector_size, _n_sectors, _flags)	\
2036 		.id = {							\
2037 			((_jedec_id) >> 16) & 0xff,			\
2038 			((_jedec_id) >> 8) & 0xff,			\
2039 			(_jedec_id) & 0xff,				\
2040 			((_ext_id) >> 8) & 0xff,			\
2041 			(_ext_id) & 0xff,				\
2042 			},						\
2043 		.id_len = (!(_jedec_id) ? 0 : (3 + ((_ext_id) ? 2 : 0))),	\
2044 		.sector_size = (_sector_size),				\
2045 		.n_sectors = (_n_sectors),				\
2046 		.page_size = 256,					\
2047 		.flags = (_flags),
2048 
2049 #define INFO6(_jedec_id, _ext_id, _sector_size, _n_sectors, _flags)	\
2050 		.id = {							\
2051 			((_jedec_id) >> 16) & 0xff,			\
2052 			((_jedec_id) >> 8) & 0xff,			\
2053 			(_jedec_id) & 0xff,				\
2054 			((_ext_id) >> 16) & 0xff,			\
2055 			((_ext_id) >> 8) & 0xff,			\
2056 			(_ext_id) & 0xff,				\
2057 			},						\
2058 		.id_len = 6,						\
2059 		.sector_size = (_sector_size),				\
2060 		.n_sectors = (_n_sectors),				\
2061 		.page_size = 256,					\
2062 		.flags = (_flags),
2063 
2064 #define CAT25_INFO(_sector_size, _n_sectors, _page_size, _addr_width, _flags)	\
2065 		.sector_size = (_sector_size),				\
2066 		.n_sectors = (_n_sectors),				\
2067 		.page_size = (_page_size),				\
2068 		.addr_width = (_addr_width),				\
2069 		.flags = (_flags),
2070 
2071 #define S3AN_INFO(_jedec_id, _n_sectors, _page_size)			\
2072 		.id = {							\
2073 			((_jedec_id) >> 16) & 0xff,			\
2074 			((_jedec_id) >> 8) & 0xff,			\
2075 			(_jedec_id) & 0xff				\
2076 			},						\
2077 		.id_len = 3,						\
2078 		.sector_size = (8*_page_size),				\
2079 		.n_sectors = (_n_sectors),				\
2080 		.page_size = _page_size,				\
2081 		.addr_width = 3,					\
2082 		.flags = SPI_NOR_NO_FR | SPI_S3AN,
2083 
2084 static int
is25lp256_post_bfpt_fixups(struct spi_nor * nor,const struct sfdp_parameter_header * bfpt_header,const struct sfdp_bfpt * bfpt,struct spi_nor_flash_parameter * params)2085 is25lp256_post_bfpt_fixups(struct spi_nor *nor,
2086 			   const struct sfdp_parameter_header *bfpt_header,
2087 			   const struct sfdp_bfpt *bfpt,
2088 			   struct spi_nor_flash_parameter *params)
2089 {
2090 	/*
2091 	 * IS25LP256 supports 4B opcodes, but the BFPT advertises a
2092 	 * BFPT_DWORD1_ADDRESS_BYTES_3_ONLY address width.
2093 	 * Overwrite the address width advertised by the BFPT.
2094 	 */
2095 	if ((bfpt->dwords[BFPT_DWORD(1)] & BFPT_DWORD1_ADDRESS_BYTES_MASK) ==
2096 		BFPT_DWORD1_ADDRESS_BYTES_3_ONLY)
2097 		nor->addr_width = 4;
2098 
2099 	return 0;
2100 }
2101 
2102 static struct spi_nor_fixups is25lp256_fixups = {
2103 	.post_bfpt = is25lp256_post_bfpt_fixups,
2104 };
2105 
2106 static int
mx25l25635_post_bfpt_fixups(struct spi_nor * nor,const struct sfdp_parameter_header * bfpt_header,const struct sfdp_bfpt * bfpt,struct spi_nor_flash_parameter * params)2107 mx25l25635_post_bfpt_fixups(struct spi_nor *nor,
2108 			    const struct sfdp_parameter_header *bfpt_header,
2109 			    const struct sfdp_bfpt *bfpt,
2110 			    struct spi_nor_flash_parameter *params)
2111 {
2112 	/*
2113 	 * MX25L25635F supports 4B opcodes but MX25L25635E does not.
2114 	 * Unfortunately, Macronix has re-used the same JEDEC ID for both
2115 	 * variants which prevents us from defining a new entry in the parts
2116 	 * table.
2117 	 * We need a way to differentiate MX25L25635E and MX25L25635F, and it
2118 	 * seems that the F version advertises support for Fast Read 4-4-4 in
2119 	 * its BFPT table.
2120 	 */
2121 	if (bfpt->dwords[BFPT_DWORD(5)] & BFPT_DWORD5_FAST_READ_4_4_4)
2122 		nor->flags |= SNOR_F_4B_OPCODES;
2123 
2124 	return 0;
2125 }
2126 
2127 static struct spi_nor_fixups mx25l25635_fixups = {
2128 	.post_bfpt = mx25l25635_post_bfpt_fixups,
2129 };
2130 
gd25q256_default_init(struct spi_nor * nor)2131 static void gd25q256_default_init(struct spi_nor *nor)
2132 {
2133 	/*
2134 	 * Some manufacturer like GigaDevice may use different
2135 	 * bit to set QE on different memories, so the MFR can't
2136 	 * indicate the quad_enable method for this case, we need
2137 	 * to set it in the default_init fixup hook.
2138 	 */
2139 	nor->params.quad_enable = macronix_quad_enable;
2140 }
2141 
2142 static struct spi_nor_fixups gd25q256_fixups = {
2143 	.default_init = gd25q256_default_init,
2144 };
2145 
2146 /* NOTE: double check command sets and memory organization when you add
2147  * more nor chips.  This current list focusses on newer chips, which
2148  * have been converging on command sets which including JEDEC ID.
2149  *
2150  * All newly added entries should describe *hardware* and should use SECT_4K
2151  * (or SECT_4K_PMC) if hardware supports erasing 4 KiB sectors. For usage
2152  * scenarios excluding small sectors there is config option that can be
2153  * disabled: CONFIG_MTD_SPI_NOR_USE_4K_SECTORS.
2154  * For historical (and compatibility) reasons (before we got above config) some
2155  * old entries may be missing 4K flag.
2156  */
2157 static const struct flash_info spi_nor_ids[] = {
2158 	/* Atmel -- some are (confusingly) marketed as "DataFlash" */
2159 	{ "at25fs010",  INFO(0x1f6601, 0, 32 * 1024,   4, SECT_4K) },
2160 	{ "at25fs040",  INFO(0x1f6604, 0, 64 * 1024,   8, SECT_4K) },
2161 
2162 	{ "at25df041a", INFO(0x1f4401, 0, 64 * 1024,   8, SECT_4K) },
2163 	{ "at25df321",  INFO(0x1f4700, 0, 64 * 1024,  64, SECT_4K) },
2164 	{ "at25df321a", INFO(0x1f4701, 0, 64 * 1024,  64, SECT_4K) },
2165 	{ "at25df641",  INFO(0x1f4800, 0, 64 * 1024, 128, SECT_4K) },
2166 
2167 	{ "at26f004",   INFO(0x1f0400, 0, 64 * 1024,  8, SECT_4K) },
2168 	{ "at26df081a", INFO(0x1f4501, 0, 64 * 1024, 16, SECT_4K) },
2169 	{ "at26df161a", INFO(0x1f4601, 0, 64 * 1024, 32, SECT_4K) },
2170 	{ "at26df321",  INFO(0x1f4700, 0, 64 * 1024, 64, SECT_4K) },
2171 
2172 	{ "at45db081d", INFO(0x1f2500, 0, 64 * 1024, 16, SECT_4K) },
2173 
2174 	/* EON -- en25xxx */
2175 	{ "en25f32",    INFO(0x1c3116, 0, 64 * 1024,   64, SECT_4K) },
2176 	{ "en25p32",    INFO(0x1c2016, 0, 64 * 1024,   64, 0) },
2177 	{ "en25q32b",   INFO(0x1c3016, 0, 64 * 1024,   64, 0) },
2178 	{ "en25p64",    INFO(0x1c2017, 0, 64 * 1024,  128, 0) },
2179 	{ "en25q64",    INFO(0x1c3017, 0, 64 * 1024,  128, SECT_4K) },
2180 	{ "en25q80a",   INFO(0x1c3014, 0, 64 * 1024,   16,
2181 			SECT_4K | SPI_NOR_DUAL_READ) },
2182 	{ "en25qh32",   INFO(0x1c7016, 0, 64 * 1024,   64, 0) },
2183 	{ "en25qh64",   INFO(0x1c7017, 0, 64 * 1024,  128,
2184 			SECT_4K | SPI_NOR_DUAL_READ) },
2185 	{ "en25qh128",  INFO(0x1c7018, 0, 64 * 1024,  256, 0) },
2186 	{ "en25qh256",  INFO(0x1c7019, 0, 64 * 1024,  512, 0) },
2187 	{ "en25s64",	INFO(0x1c3817, 0, 64 * 1024,  128, SECT_4K) },
2188 
2189 	/* ESMT */
2190 	{ "f25l32pa", INFO(0x8c2016, 0, 64 * 1024, 64, SECT_4K | SPI_NOR_HAS_LOCK) },
2191 	{ "f25l32qa", INFO(0x8c4116, 0, 64 * 1024, 64, SECT_4K | SPI_NOR_HAS_LOCK) },
2192 	{ "f25l64qa", INFO(0x8c4117, 0, 64 * 1024, 128, SECT_4K | SPI_NOR_HAS_LOCK) },
2193 
2194 	/* Everspin */
2195 	{ "mr25h128", CAT25_INFO( 16 * 1024, 1, 256, 2, SPI_NOR_NO_ERASE | SPI_NOR_NO_FR) },
2196 	{ "mr25h256", CAT25_INFO( 32 * 1024, 1, 256, 2, SPI_NOR_NO_ERASE | SPI_NOR_NO_FR) },
2197 	{ "mr25h10",  CAT25_INFO(128 * 1024, 1, 256, 3, SPI_NOR_NO_ERASE | SPI_NOR_NO_FR) },
2198 	{ "mr25h40",  CAT25_INFO(512 * 1024, 1, 256, 3, SPI_NOR_NO_ERASE | SPI_NOR_NO_FR) },
2199 
2200 	/* Fujitsu */
2201 	{ "mb85rs1mt", INFO(0x047f27, 0, 128 * 1024, 1, SPI_NOR_NO_ERASE) },
2202 
2203 	/* GigaDevice */
2204 	{
2205 		"gd25q16", INFO(0xc84015, 0, 64 * 1024,  32,
2206 			SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
2207 			SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
2208 	},
2209 	{
2210 		"gd25q32", INFO(0xc84016, 0, 64 * 1024,  64,
2211 			SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
2212 			SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
2213 	},
2214 	{
2215 		"gd25lq32", INFO(0xc86016, 0, 64 * 1024, 64,
2216 			SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
2217 			SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
2218 	},
2219 	{
2220 		"gd25q64", INFO(0xc84017, 0, 64 * 1024, 128,
2221 			SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
2222 			SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
2223 	},
2224 	{
2225 		"gd25lq64c", INFO(0xc86017, 0, 64 * 1024, 128,
2226 			SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
2227 			SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
2228 	},
2229 	{
2230 		"gd25q128", INFO(0xc84018, 0, 64 * 1024, 256,
2231 			SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
2232 			SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
2233 	},
2234 	{
2235 		"gd25q256", INFO(0xc84019, 0, 64 * 1024, 512,
2236 			SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
2237 			SPI_NOR_4B_OPCODES | SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
2238 			.fixups = &gd25q256_fixups,
2239 	},
2240 
2241 	/* Intel/Numonyx -- xxxs33b */
2242 	{ "160s33b",  INFO(0x898911, 0, 64 * 1024,  32, 0) },
2243 	{ "320s33b",  INFO(0x898912, 0, 64 * 1024,  64, 0) },
2244 	{ "640s33b",  INFO(0x898913, 0, 64 * 1024, 128, 0) },
2245 
2246 	/* ISSI */
2247 	{ "is25cd512",  INFO(0x7f9d20, 0, 32 * 1024,   2, SECT_4K) },
2248 	{ "is25lq040b", INFO(0x9d4013, 0, 64 * 1024,   8,
2249 			SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
2250 	{ "is25lp016d", INFO(0x9d6015, 0, 64 * 1024,  32,
2251 			SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
2252 	{ "is25lp080d", INFO(0x9d6014, 0, 64 * 1024,  16,
2253 			SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
2254 	{ "is25lp032",  INFO(0x9d6016, 0, 64 * 1024,  64,
2255 			SECT_4K | SPI_NOR_DUAL_READ) },
2256 	{ "is25lp064",  INFO(0x9d6017, 0, 64 * 1024, 128,
2257 			SECT_4K | SPI_NOR_DUAL_READ) },
2258 	{ "is25lp128",  INFO(0x9d6018, 0, 64 * 1024, 256,
2259 			SECT_4K | SPI_NOR_DUAL_READ) },
2260 	{ "is25lp256",  INFO(0x9d6019, 0, 64 * 1024, 512,
2261 			SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
2262 			SPI_NOR_4B_OPCODES)
2263 			.fixups = &is25lp256_fixups },
2264 	{ "is25wp032",  INFO(0x9d7016, 0, 64 * 1024,  64,
2265 			SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
2266 	{ "is25wp064",  INFO(0x9d7017, 0, 64 * 1024, 128,
2267 			SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
2268 	{ "is25wp128",  INFO(0x9d7018, 0, 64 * 1024, 256,
2269 			SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
2270 
2271 	/* Macronix */
2272 	{ "mx25l512e",   INFO(0xc22010, 0, 64 * 1024,   1, SECT_4K) },
2273 	{ "mx25l2005a",  INFO(0xc22012, 0, 64 * 1024,   4, SECT_4K) },
2274 	{ "mx25l4005a",  INFO(0xc22013, 0, 64 * 1024,   8, SECT_4K) },
2275 	{ "mx25l8005",   INFO(0xc22014, 0, 64 * 1024,  16, 0) },
2276 	{ "mx25l1606e",  INFO(0xc22015, 0, 64 * 1024,  32, SECT_4K) },
2277 	{ "mx25l3205d",  INFO(0xc22016, 0, 64 * 1024,  64, SECT_4K) },
2278 	{ "mx25l3255e",  INFO(0xc29e16, 0, 64 * 1024,  64, SECT_4K) },
2279 	{ "mx25l6405d",  INFO(0xc22017, 0, 64 * 1024, 128, SECT_4K) },
2280 	{ "mx25u2033e",  INFO(0xc22532, 0, 64 * 1024,   4, SECT_4K) },
2281 	{ "mx25u3235f",	 INFO(0xc22536, 0, 64 * 1024,  64,
2282 			 SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
2283 	{ "mx25u4035",   INFO(0xc22533, 0, 64 * 1024,   8, SECT_4K) },
2284 	{ "mx25u8035",   INFO(0xc22534, 0, 64 * 1024,  16, SECT_4K) },
2285 	{ "mx25u6435f",  INFO(0xc22537, 0, 64 * 1024, 128, SECT_4K) },
2286 	{ "mx25l12805d", INFO(0xc22018, 0, 64 * 1024, 256, 0) },
2287 	{ "mx25l12855e", INFO(0xc22618, 0, 64 * 1024, 256, 0) },
2288 	{ "mx25u12835f", INFO(0xc22538, 0, 64 * 1024, 256,
2289 			 SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
2290 	{ "mx25l25635e", INFO(0xc22019, 0, 64 * 1024, 512,
2291 			 SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ)
2292 			 .fixups = &mx25l25635_fixups },
2293 	{ "mx25u25635f", INFO(0xc22539, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_4B_OPCODES) },
2294 	{ "mx25v8035f",  INFO(0xc22314, 0, 64 * 1024,  16,
2295 			 SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
2296 	{ "mx25l25655e", INFO(0xc22619, 0, 64 * 1024, 512, 0) },
2297 	{ "mx66l51235l", INFO(0xc2201a, 0, 64 * 1024, 1024, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
2298 	{ "mx66u51235f", INFO(0xc2253a, 0, 64 * 1024, 1024, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
2299 	{ "mx66l1g45g",  INFO(0xc2201b, 0, 64 * 1024, 2048, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
2300 	{ "mx66l1g55g",  INFO(0xc2261b, 0, 64 * 1024, 2048, SPI_NOR_QUAD_READ) },
2301 
2302 	/* Micron <--> ST Micro */
2303 	{ "n25q016a",	 INFO(0x20bb15, 0, 64 * 1024,   32, SECT_4K | SPI_NOR_QUAD_READ) },
2304 	{ "n25q032",	 INFO(0x20ba16, 0, 64 * 1024,   64, SPI_NOR_QUAD_READ) },
2305 	{ "n25q032a",	 INFO(0x20bb16, 0, 64 * 1024,   64, SPI_NOR_QUAD_READ) },
2306 	{ "n25q064",     INFO(0x20ba17, 0, 64 * 1024,  128, SECT_4K | SPI_NOR_QUAD_READ) },
2307 	{ "n25q064a",    INFO(0x20bb17, 0, 64 * 1024,  128, SECT_4K | SPI_NOR_QUAD_READ) },
2308 	{ "n25q128a11",  INFO(0x20bb18, 0, 64 * 1024,  256, SECT_4K | SPI_NOR_QUAD_READ) },
2309 	{ "n25q128a13",  INFO(0x20ba18, 0, 64 * 1024,  256, SECT_4K | SPI_NOR_QUAD_READ) },
2310 	{ "n25q256a",    INFO(0x20ba19, 0, 64 * 1024,  512, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
2311 	{ "n25q256ax1",  INFO(0x20bb19, 0, 64 * 1024,  512, SECT_4K | SPI_NOR_QUAD_READ) },
2312 	{ "n25q512ax3",  INFO(0x20ba20, 0, 64 * 1024, 1024, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) },
2313 	{ "n25q00",      INFO(0x20ba21, 0, 64 * 1024, 2048, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
2314 	{ "n25q00a",     INFO(0x20bb21, 0, 64 * 1024, 2048, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
2315 	{ "mt25ql02g",   INFO(0x20ba22, 0, 64 * 1024, 4096,
2316 			      SECT_4K | USE_FSR | SPI_NOR_QUAD_READ |
2317 			      NO_CHIP_ERASE) },
2318 	{ "mt25qu512a (n25q512a)", INFO(0x20bb20, 0, 64 * 1024, 1024,
2319 					SECT_4K | USE_FSR | SPI_NOR_DUAL_READ |
2320 					SPI_NOR_QUAD_READ |
2321 					SPI_NOR_4B_OPCODES) },
2322 	{ "mt25qu02g",   INFO(0x20bb22, 0, 64 * 1024, 4096, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ | NO_CHIP_ERASE) },
2323 
2324 	/* Micron */
2325 	{
2326 		"mt35xu512aba", INFO(0x2c5b1a, 0, 128 * 1024, 512,
2327 			SECT_4K | USE_FSR | SPI_NOR_OCTAL_READ |
2328 			SPI_NOR_4B_OPCODES)
2329 	},
2330 	{ "mt35xu02g",  INFO(0x2c5b1c, 0, 128 * 1024, 2048,
2331 			     SECT_4K | USE_FSR | SPI_NOR_OCTAL_READ |
2332 			     SPI_NOR_4B_OPCODES) },
2333 
2334 	/* PMC */
2335 	{ "pm25lv512",   INFO(0,        0, 32 * 1024,    2, SECT_4K_PMC) },
2336 	{ "pm25lv010",   INFO(0,        0, 32 * 1024,    4, SECT_4K_PMC) },
2337 	{ "pm25lq032",   INFO(0x7f9d46, 0, 64 * 1024,   64, SECT_4K) },
2338 
2339 	/* Spansion/Cypress -- single (large) sector size only, at least
2340 	 * for the chips listed here (without boot sectors).
2341 	 */
2342 	{ "s25sl032p",  INFO(0x010215, 0x4d00,  64 * 1024,  64, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
2343 	{ "s25sl064p",  INFO(0x010216, 0x4d00,  64 * 1024, 128, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
2344 	{ "s25fl128s0", INFO6(0x012018, 0x4d0080, 256 * 1024, 64,
2345 			SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | USE_CLSR) },
2346 	{ "s25fl128s1", INFO6(0x012018, 0x4d0180, 64 * 1024, 256,
2347 			SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | USE_CLSR) },
2348 	{ "s25fl256s0", INFO(0x010219, 0x4d00, 256 * 1024, 128, USE_CLSR) },
2349 	{ "s25fl256s1", INFO(0x010219, 0x4d01,  64 * 1024, 512, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | USE_CLSR) },
2350 	{ "s25fl512s",  INFO6(0x010220, 0x4d0080, 256 * 1024, 256,
2351 			SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
2352 			SPI_NOR_HAS_LOCK | USE_CLSR) },
2353 	{ "s25fs512s",  INFO6(0x010220, 0x4d0081, 256 * 1024, 256, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | USE_CLSR) },
2354 	{ "s70fl01gs",  INFO(0x010221, 0x4d00, 256 * 1024, 256, 0) },
2355 	{ "s25sl12800", INFO(0x012018, 0x0300, 256 * 1024,  64, 0) },
2356 	{ "s25sl12801", INFO(0x012018, 0x0301,  64 * 1024, 256, 0) },
2357 	{ "s25fl129p0", INFO(0x012018, 0x4d00, 256 * 1024,  64, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | USE_CLSR) },
2358 	{ "s25fl129p1", INFO(0x012018, 0x4d01,  64 * 1024, 256, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | USE_CLSR) },
2359 	{ "s25sl004a",  INFO(0x010212,      0,  64 * 1024,   8, 0) },
2360 	{ "s25sl008a",  INFO(0x010213,      0,  64 * 1024,  16, 0) },
2361 	{ "s25sl016a",  INFO(0x010214,      0,  64 * 1024,  32, 0) },
2362 	{ "s25sl032a",  INFO(0x010215,      0,  64 * 1024,  64, 0) },
2363 	{ "s25sl064a",  INFO(0x010216,      0,  64 * 1024, 128, 0) },
2364 	{ "s25fl004k",  INFO(0xef4013,      0,  64 * 1024,   8, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
2365 	{ "s25fl008k",  INFO(0xef4014,      0,  64 * 1024,  16, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
2366 	{ "s25fl016k",  INFO(0xef4015,      0,  64 * 1024,  32, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
2367 	{ "s25fl064k",  INFO(0xef4017,      0,  64 * 1024, 128, SECT_4K) },
2368 	{ "s25fl116k",  INFO(0x014015,      0,  64 * 1024,  32, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
2369 	{ "s25fl132k",  INFO(0x014016,      0,  64 * 1024,  64, SECT_4K) },
2370 	{ "s25fl164k",  INFO(0x014017,      0,  64 * 1024, 128, SECT_4K) },
2371 	{ "s25fl204k",  INFO(0x014013,      0,  64 * 1024,   8, SECT_4K | SPI_NOR_DUAL_READ) },
2372 	{ "s25fl208k",  INFO(0x014014,      0,  64 * 1024,  16, SECT_4K | SPI_NOR_DUAL_READ) },
2373 	{ "s25fl064l",  INFO(0x016017,      0,  64 * 1024, 128, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
2374 	{ "s25fl128l",  INFO(0x016018,      0,  64 * 1024, 256, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
2375 	{ "s25fl256l",  INFO(0x016019,      0,  64 * 1024, 512, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) },
2376 
2377 	/* SST -- large erase sizes are "overlays", "sectors" are 4K */
2378 	{ "sst25vf040b", INFO(0xbf258d, 0, 64 * 1024,  8, SECT_4K | SST_WRITE) },
2379 	{ "sst25vf080b", INFO(0xbf258e, 0, 64 * 1024, 16, SECT_4K | SST_WRITE) },
2380 	{ "sst25vf016b", INFO(0xbf2541, 0, 64 * 1024, 32, SECT_4K | SST_WRITE) },
2381 	{ "sst25vf032b", INFO(0xbf254a, 0, 64 * 1024, 64, SECT_4K | SST_WRITE) },
2382 	{ "sst25vf064c", INFO(0xbf254b, 0, 64 * 1024, 128, SECT_4K) },
2383 	{ "sst25wf512",  INFO(0xbf2501, 0, 64 * 1024,  1, SECT_4K | SST_WRITE) },
2384 	{ "sst25wf010",  INFO(0xbf2502, 0, 64 * 1024,  2, SECT_4K | SST_WRITE) },
2385 	{ "sst25wf020",  INFO(0xbf2503, 0, 64 * 1024,  4, SECT_4K | SST_WRITE) },
2386 	{ "sst25wf020a", INFO(0x621612, 0, 64 * 1024,  4, SECT_4K) },
2387 	{ "sst25wf040b", INFO(0x621613, 0, 64 * 1024,  8, SECT_4K) },
2388 	{ "sst25wf040",  INFO(0xbf2504, 0, 64 * 1024,  8, SECT_4K | SST_WRITE) },
2389 	{ "sst25wf080",  INFO(0xbf2505, 0, 64 * 1024, 16, SECT_4K | SST_WRITE) },
2390 	{ "sst26wf016b", INFO(0xbf2651, 0, 64 * 1024, 32, SECT_4K |
2391 			      SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
2392 	{ "sst26vf064b", INFO(0xbf2643, 0, 64 * 1024, 128, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
2393 
2394 	/* ST Microelectronics -- newer production may have feature updates */
2395 	{ "m25p05",  INFO(0x202010,  0,  32 * 1024,   2, 0) },
2396 	{ "m25p10",  INFO(0x202011,  0,  32 * 1024,   4, 0) },
2397 	{ "m25p20",  INFO(0x202012,  0,  64 * 1024,   4, 0) },
2398 	{ "m25p40",  INFO(0x202013,  0,  64 * 1024,   8, 0) },
2399 	{ "m25p80",  INFO(0x202014,  0,  64 * 1024,  16, 0) },
2400 	{ "m25p16",  INFO(0x202015,  0,  64 * 1024,  32, 0) },
2401 	{ "m25p32",  INFO(0x202016,  0,  64 * 1024,  64, 0) },
2402 	{ "m25p64",  INFO(0x202017,  0,  64 * 1024, 128, 0) },
2403 	{ "m25p128", INFO(0x202018,  0, 256 * 1024,  64, 0) },
2404 
2405 	{ "m25p05-nonjedec",  INFO(0, 0,  32 * 1024,   2, 0) },
2406 	{ "m25p10-nonjedec",  INFO(0, 0,  32 * 1024,   4, 0) },
2407 	{ "m25p20-nonjedec",  INFO(0, 0,  64 * 1024,   4, 0) },
2408 	{ "m25p40-nonjedec",  INFO(0, 0,  64 * 1024,   8, 0) },
2409 	{ "m25p80-nonjedec",  INFO(0, 0,  64 * 1024,  16, 0) },
2410 	{ "m25p16-nonjedec",  INFO(0, 0,  64 * 1024,  32, 0) },
2411 	{ "m25p32-nonjedec",  INFO(0, 0,  64 * 1024,  64, 0) },
2412 	{ "m25p64-nonjedec",  INFO(0, 0,  64 * 1024, 128, 0) },
2413 	{ "m25p128-nonjedec", INFO(0, 0, 256 * 1024,  64, 0) },
2414 
2415 	{ "m45pe10", INFO(0x204011,  0, 64 * 1024,    2, 0) },
2416 	{ "m45pe80", INFO(0x204014,  0, 64 * 1024,   16, 0) },
2417 	{ "m45pe16", INFO(0x204015,  0, 64 * 1024,   32, 0) },
2418 
2419 	{ "m25pe20", INFO(0x208012,  0, 64 * 1024,  4,       0) },
2420 	{ "m25pe80", INFO(0x208014,  0, 64 * 1024, 16,       0) },
2421 	{ "m25pe16", INFO(0x208015,  0, 64 * 1024, 32, SECT_4K) },
2422 
2423 	{ "m25px16",    INFO(0x207115,  0, 64 * 1024, 32, SECT_4K) },
2424 	{ "m25px32",    INFO(0x207116,  0, 64 * 1024, 64, SECT_4K) },
2425 	{ "m25px32-s0", INFO(0x207316,  0, 64 * 1024, 64, SECT_4K) },
2426 	{ "m25px32-s1", INFO(0x206316,  0, 64 * 1024, 64, SECT_4K) },
2427 	{ "m25px64",    INFO(0x207117,  0, 64 * 1024, 128, 0) },
2428 	{ "m25px80",    INFO(0x207114,  0, 64 * 1024, 16, 0) },
2429 
2430 	/* Winbond -- w25x "blocks" are 64K, "sectors" are 4KiB */
2431 	{ "w25x05", INFO(0xef3010, 0, 64 * 1024,  1,  SECT_4K) },
2432 	{ "w25x10", INFO(0xef3011, 0, 64 * 1024,  2,  SECT_4K) },
2433 	{ "w25x20", INFO(0xef3012, 0, 64 * 1024,  4,  SECT_4K) },
2434 	{ "w25x40", INFO(0xef3013, 0, 64 * 1024,  8,  SECT_4K) },
2435 	{ "w25x80", INFO(0xef3014, 0, 64 * 1024,  16, SECT_4K) },
2436 	{ "w25x16", INFO(0xef3015, 0, 64 * 1024,  32, SECT_4K) },
2437 	{
2438 		"w25q16dw", INFO(0xef6015, 0, 64 * 1024,  32,
2439 			SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
2440 			SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
2441 	},
2442 	{ "w25x32", INFO(0xef3016, 0, 64 * 1024,  64, SECT_4K) },
2443 	{
2444 		"w25q16jv-im/jm", INFO(0xef7015, 0, 64 * 1024,  32,
2445 			SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
2446 			SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
2447 	},
2448 	{ "w25q20cl", INFO(0xef4012, 0, 64 * 1024,  4, SECT_4K) },
2449 	{ "w25q20bw", INFO(0xef5012, 0, 64 * 1024,  4, SECT_4K) },
2450 	{ "w25q20ew", INFO(0xef6012, 0, 64 * 1024,  4, SECT_4K) },
2451 	{ "w25q32", INFO(0xef4016, 0, 64 * 1024,  64, SECT_4K) },
2452 	{
2453 		"w25q32dw", INFO(0xef6016, 0, 64 * 1024,  64,
2454 			SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
2455 			SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
2456 	},
2457 	{
2458 		"w25q32jv", INFO(0xef7016, 0, 64 * 1024,  64,
2459 			SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
2460 			SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
2461 	},
2462 	{ "w25x64", INFO(0xef3017, 0, 64 * 1024, 128, SECT_4K) },
2463 	{ "w25q64", INFO(0xef4017, 0, 64 * 1024, 128, SECT_4K) },
2464 	{
2465 		"w25q64dw", INFO(0xef6017, 0, 64 * 1024, 128,
2466 			SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
2467 			SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
2468 	},
2469 	{
2470 		"w25q128fw", INFO(0xef6018, 0, 64 * 1024, 256,
2471 			SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
2472 			SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
2473 	},
2474 	{
2475 		"w25q128jv", INFO(0xef7018, 0, 64 * 1024, 256,
2476 			SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
2477 			SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
2478 	},
2479 	{ "w25q80", INFO(0xef5014, 0, 64 * 1024,  16, SECT_4K) },
2480 	{ "w25q80bl", INFO(0xef4014, 0, 64 * 1024,  16, SECT_4K) },
2481 	{ "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, SECT_4K) },
2482 	{ "w25q256", INFO(0xef4019, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
2483 	{ "w25q256jvm", INFO(0xef7019, 0, 64 * 1024, 512,
2484 			     SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
2485 	{ "w25m512jv", INFO(0xef7119, 0, 64 * 1024, 1024,
2486 			SECT_4K | SPI_NOR_QUAD_READ | SPI_NOR_DUAL_READ) },
2487 
2488 	/* Catalyst / On Semiconductor -- non-JEDEC */
2489 	{ "cat25c11", CAT25_INFO(  16, 8, 16, 1, SPI_NOR_NO_ERASE | SPI_NOR_NO_FR) },
2490 	{ "cat25c03", CAT25_INFO(  32, 8, 16, 2, SPI_NOR_NO_ERASE | SPI_NOR_NO_FR) },
2491 	{ "cat25c09", CAT25_INFO( 128, 8, 32, 2, SPI_NOR_NO_ERASE | SPI_NOR_NO_FR) },
2492 	{ "cat25c17", CAT25_INFO( 256, 8, 32, 2, SPI_NOR_NO_ERASE | SPI_NOR_NO_FR) },
2493 	{ "cat25128", CAT25_INFO(2048, 8, 64, 2, SPI_NOR_NO_ERASE | SPI_NOR_NO_FR) },
2494 
2495 	/* Xilinx S3AN Internal Flash */
2496 	{ "3S50AN", S3AN_INFO(0x1f2200, 64, 264) },
2497 	{ "3S200AN", S3AN_INFO(0x1f2400, 256, 264) },
2498 	{ "3S400AN", S3AN_INFO(0x1f2400, 256, 264) },
2499 	{ "3S700AN", S3AN_INFO(0x1f2500, 512, 264) },
2500 	{ "3S1400AN", S3AN_INFO(0x1f2600, 512, 528) },
2501 
2502 	/* XMC (Wuhan Xinxin Semiconductor Manufacturing Corp.) */
2503 	{ "XM25QH64A", INFO(0x207017, 0, 64 * 1024, 128, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
2504 	{ "XM25QH128A", INFO(0x207018, 0, 64 * 1024, 256, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
2505 	{ },
2506 };
2507 
spi_nor_read_id(struct spi_nor * nor)2508 static const struct flash_info *spi_nor_read_id(struct spi_nor *nor)
2509 {
2510 	int			tmp;
2511 	u8			*id = nor->bouncebuf;
2512 	const struct flash_info	*info;
2513 
2514 	if (nor->spimem) {
2515 		struct spi_mem_op op =
2516 			SPI_MEM_OP(SPI_MEM_OP_CMD(SPINOR_OP_RDID, 1),
2517 				   SPI_MEM_OP_NO_ADDR,
2518 				   SPI_MEM_OP_NO_DUMMY,
2519 				   SPI_MEM_OP_DATA_IN(SPI_NOR_MAX_ID_LEN, id, 1));
2520 
2521 		tmp = spi_mem_exec_op(nor->spimem, &op);
2522 	} else {
2523 		tmp = nor->read_reg(nor, SPINOR_OP_RDID, id,
2524 				    SPI_NOR_MAX_ID_LEN);
2525 	}
2526 	if (tmp < 0) {
2527 		dev_err(nor->dev, "error %d reading JEDEC ID\n", tmp);
2528 		return ERR_PTR(tmp);
2529 	}
2530 
2531 	for (tmp = 0; tmp < ARRAY_SIZE(spi_nor_ids) - 1; tmp++) {
2532 		info = &spi_nor_ids[tmp];
2533 		if (info->id_len) {
2534 			if (!memcmp(info->id, id, info->id_len))
2535 				return &spi_nor_ids[tmp];
2536 		}
2537 	}
2538 	dev_err(nor->dev, "unrecognized JEDEC id bytes: %*ph\n",
2539 		SPI_NOR_MAX_ID_LEN, id);
2540 	return ERR_PTR(-ENODEV);
2541 }
2542 
spi_nor_read(struct mtd_info * mtd,loff_t from,size_t len,size_t * retlen,u_char * buf)2543 static int spi_nor_read(struct mtd_info *mtd, loff_t from, size_t len,
2544 			size_t *retlen, u_char *buf)
2545 {
2546 	struct spi_nor *nor = mtd_to_spi_nor(mtd);
2547 	ssize_t ret;
2548 
2549 	dev_dbg(nor->dev, "from 0x%08x, len %zd\n", (u32)from, len);
2550 
2551 	ret = spi_nor_lock_and_prep(nor, SPI_NOR_OPS_READ);
2552 	if (ret)
2553 		return ret;
2554 
2555 	while (len) {
2556 		loff_t addr = from;
2557 
2558 		addr = spi_nor_convert_addr(nor, addr);
2559 
2560 		ret = spi_nor_read_data(nor, addr, len, buf);
2561 		if (ret == 0) {
2562 			/* We shouldn't see 0-length reads */
2563 			ret = -EIO;
2564 			goto read_err;
2565 		}
2566 		if (ret < 0)
2567 			goto read_err;
2568 
2569 		WARN_ON(ret > len);
2570 		*retlen += ret;
2571 		buf += ret;
2572 		from += ret;
2573 		len -= ret;
2574 	}
2575 	ret = 0;
2576 
2577 read_err:
2578 	spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_READ);
2579 	return ret;
2580 }
2581 
sst_write(struct mtd_info * mtd,loff_t to,size_t len,size_t * retlen,const u_char * buf)2582 static int sst_write(struct mtd_info *mtd, loff_t to, size_t len,
2583 		size_t *retlen, const u_char *buf)
2584 {
2585 	struct spi_nor *nor = mtd_to_spi_nor(mtd);
2586 	size_t actual;
2587 	int ret;
2588 
2589 	dev_dbg(nor->dev, "to 0x%08x, len %zd\n", (u32)to, len);
2590 
2591 	ret = spi_nor_lock_and_prep(nor, SPI_NOR_OPS_WRITE);
2592 	if (ret)
2593 		return ret;
2594 
2595 	write_enable(nor);
2596 
2597 	nor->sst_write_second = false;
2598 
2599 	actual = to % 2;
2600 	/* Start write from odd address. */
2601 	if (actual) {
2602 		nor->program_opcode = SPINOR_OP_BP;
2603 
2604 		/* write one byte. */
2605 		ret = spi_nor_write_data(nor, to, 1, buf);
2606 		if (ret < 0)
2607 			goto sst_write_err;
2608 		WARN(ret != 1, "While writing 1 byte written %i bytes\n",
2609 		     (int)ret);
2610 		ret = spi_nor_wait_till_ready(nor);
2611 		if (ret)
2612 			goto sst_write_err;
2613 	}
2614 	to += actual;
2615 
2616 	/* Write out most of the data here. */
2617 	for (; actual < len - 1; actual += 2) {
2618 		nor->program_opcode = SPINOR_OP_AAI_WP;
2619 
2620 		/* write two bytes. */
2621 		ret = spi_nor_write_data(nor, to, 2, buf + actual);
2622 		if (ret < 0)
2623 			goto sst_write_err;
2624 		WARN(ret != 2, "While writing 2 bytes written %i bytes\n",
2625 		     (int)ret);
2626 		ret = spi_nor_wait_till_ready(nor);
2627 		if (ret)
2628 			goto sst_write_err;
2629 		to += 2;
2630 		nor->sst_write_second = true;
2631 	}
2632 	nor->sst_write_second = false;
2633 
2634 	write_disable(nor);
2635 	ret = spi_nor_wait_till_ready(nor);
2636 	if (ret)
2637 		goto sst_write_err;
2638 
2639 	/* Write out trailing byte if it exists. */
2640 	if (actual != len) {
2641 		write_enable(nor);
2642 
2643 		nor->program_opcode = SPINOR_OP_BP;
2644 		ret = spi_nor_write_data(nor, to, 1, buf + actual);
2645 		if (ret < 0)
2646 			goto sst_write_err;
2647 		WARN(ret != 1, "While writing 1 byte written %i bytes\n",
2648 		     (int)ret);
2649 		ret = spi_nor_wait_till_ready(nor);
2650 		if (ret)
2651 			goto sst_write_err;
2652 		write_disable(nor);
2653 		actual += 1;
2654 	}
2655 sst_write_err:
2656 	*retlen += actual;
2657 	spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_WRITE);
2658 	return ret;
2659 }
2660 
2661 /*
2662  * Write an address range to the nor chip.  Data must be written in
2663  * FLASH_PAGESIZE chunks.  The address range may be any size provided
2664  * it is within the physical boundaries.
2665  */
spi_nor_write(struct mtd_info * mtd,loff_t to,size_t len,size_t * retlen,const u_char * buf)2666 static int spi_nor_write(struct mtd_info *mtd, loff_t to, size_t len,
2667 	size_t *retlen, const u_char *buf)
2668 {
2669 	struct spi_nor *nor = mtd_to_spi_nor(mtd);
2670 	size_t page_offset, page_remain, i;
2671 	ssize_t ret;
2672 
2673 	dev_dbg(nor->dev, "to 0x%08x, len %zd\n", (u32)to, len);
2674 
2675 	ret = spi_nor_lock_and_prep(nor, SPI_NOR_OPS_WRITE);
2676 	if (ret)
2677 		return ret;
2678 
2679 	for (i = 0; i < len; ) {
2680 		ssize_t written;
2681 		loff_t addr = to + i;
2682 
2683 		/*
2684 		 * If page_size is a power of two, the offset can be quickly
2685 		 * calculated with an AND operation. On the other cases we
2686 		 * need to do a modulus operation (more expensive).
2687 		 * Power of two numbers have only one bit set and we can use
2688 		 * the instruction hweight32 to detect if we need to do a
2689 		 * modulus (do_div()) or not.
2690 		 */
2691 		if (hweight32(nor->page_size) == 1) {
2692 			page_offset = addr & (nor->page_size - 1);
2693 		} else {
2694 			uint64_t aux = addr;
2695 
2696 			page_offset = do_div(aux, nor->page_size);
2697 		}
2698 		/* the size of data remaining on the first page */
2699 		page_remain = min_t(size_t,
2700 				    nor->page_size - page_offset, len - i);
2701 
2702 		addr = spi_nor_convert_addr(nor, addr);
2703 
2704 		write_enable(nor);
2705 		ret = spi_nor_write_data(nor, addr, page_remain, buf + i);
2706 		if (ret < 0)
2707 			goto write_err;
2708 		written = ret;
2709 
2710 		ret = spi_nor_wait_till_ready(nor);
2711 		if (ret)
2712 			goto write_err;
2713 		*retlen += written;
2714 		i += written;
2715 	}
2716 
2717 write_err:
2718 	spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_WRITE);
2719 	return ret;
2720 }
2721 
spi_nor_check(struct spi_nor * nor)2722 static int spi_nor_check(struct spi_nor *nor)
2723 {
2724 	if (!nor->dev ||
2725 	    (!nor->spimem &&
2726 	    (!nor->read || !nor->write || !nor->read_reg ||
2727 	      !nor->write_reg))) {
2728 		pr_err("spi-nor: please fill all the necessary fields!\n");
2729 		return -EINVAL;
2730 	}
2731 
2732 	return 0;
2733 }
2734 
s3an_nor_setup(struct spi_nor * nor,const struct spi_nor_hwcaps * hwcaps)2735 static int s3an_nor_setup(struct spi_nor *nor,
2736 			  const struct spi_nor_hwcaps *hwcaps)
2737 {
2738 	int ret;
2739 
2740 	ret = spi_nor_xread_sr(nor, nor->bouncebuf);
2741 	if (ret < 0) {
2742 		dev_err(nor->dev, "error %d reading XRDSR\n", (int) ret);
2743 		return ret;
2744 	}
2745 
2746 	nor->erase_opcode = SPINOR_OP_XSE;
2747 	nor->program_opcode = SPINOR_OP_XPP;
2748 	nor->read_opcode = SPINOR_OP_READ;
2749 	nor->flags |= SNOR_F_NO_OP_CHIP_ERASE;
2750 
2751 	/*
2752 	 * This flashes have a page size of 264 or 528 bytes (known as
2753 	 * Default addressing mode). It can be changed to a more standard
2754 	 * Power of two mode where the page size is 256/512. This comes
2755 	 * with a price: there is 3% less of space, the data is corrupted
2756 	 * and the page size cannot be changed back to default addressing
2757 	 * mode.
2758 	 *
2759 	 * The current addressing mode can be read from the XRDSR register
2760 	 * and should not be changed, because is a destructive operation.
2761 	 */
2762 	if (nor->bouncebuf[0] & XSR_PAGESIZE) {
2763 		/* Flash in Power of 2 mode */
2764 		nor->page_size = (nor->page_size == 264) ? 256 : 512;
2765 		nor->mtd.writebufsize = nor->page_size;
2766 		nor->mtd.size = 8 * nor->page_size * nor->info->n_sectors;
2767 		nor->mtd.erasesize = 8 * nor->page_size;
2768 	} else {
2769 		/* Flash in Default addressing mode */
2770 		nor->params.convert_addr = s3an_convert_addr;
2771 		nor->mtd.erasesize = nor->info->sector_size;
2772 	}
2773 
2774 	return 0;
2775 }
2776 
2777 static void
spi_nor_set_read_settings(struct spi_nor_read_command * read,u8 num_mode_clocks,u8 num_wait_states,u8 opcode,enum spi_nor_protocol proto)2778 spi_nor_set_read_settings(struct spi_nor_read_command *read,
2779 			  u8 num_mode_clocks,
2780 			  u8 num_wait_states,
2781 			  u8 opcode,
2782 			  enum spi_nor_protocol proto)
2783 {
2784 	read->num_mode_clocks = num_mode_clocks;
2785 	read->num_wait_states = num_wait_states;
2786 	read->opcode = opcode;
2787 	read->proto = proto;
2788 }
2789 
2790 static void
spi_nor_set_pp_settings(struct spi_nor_pp_command * pp,u8 opcode,enum spi_nor_protocol proto)2791 spi_nor_set_pp_settings(struct spi_nor_pp_command *pp,
2792 			u8 opcode,
2793 			enum spi_nor_protocol proto)
2794 {
2795 	pp->opcode = opcode;
2796 	pp->proto = proto;
2797 }
2798 
spi_nor_hwcaps2cmd(u32 hwcaps,const int table[][2],size_t size)2799 static int spi_nor_hwcaps2cmd(u32 hwcaps, const int table[][2], size_t size)
2800 {
2801 	size_t i;
2802 
2803 	for (i = 0; i < size; i++)
2804 		if (table[i][0] == (int)hwcaps)
2805 			return table[i][1];
2806 
2807 	return -EINVAL;
2808 }
2809 
spi_nor_hwcaps_read2cmd(u32 hwcaps)2810 static int spi_nor_hwcaps_read2cmd(u32 hwcaps)
2811 {
2812 	static const int hwcaps_read2cmd[][2] = {
2813 		{ SNOR_HWCAPS_READ,		SNOR_CMD_READ },
2814 		{ SNOR_HWCAPS_READ_FAST,	SNOR_CMD_READ_FAST },
2815 		{ SNOR_HWCAPS_READ_1_1_1_DTR,	SNOR_CMD_READ_1_1_1_DTR },
2816 		{ SNOR_HWCAPS_READ_1_1_2,	SNOR_CMD_READ_1_1_2 },
2817 		{ SNOR_HWCAPS_READ_1_2_2,	SNOR_CMD_READ_1_2_2 },
2818 		{ SNOR_HWCAPS_READ_2_2_2,	SNOR_CMD_READ_2_2_2 },
2819 		{ SNOR_HWCAPS_READ_1_2_2_DTR,	SNOR_CMD_READ_1_2_2_DTR },
2820 		{ SNOR_HWCAPS_READ_1_1_4,	SNOR_CMD_READ_1_1_4 },
2821 		{ SNOR_HWCAPS_READ_1_4_4,	SNOR_CMD_READ_1_4_4 },
2822 		{ SNOR_HWCAPS_READ_4_4_4,	SNOR_CMD_READ_4_4_4 },
2823 		{ SNOR_HWCAPS_READ_1_4_4_DTR,	SNOR_CMD_READ_1_4_4_DTR },
2824 		{ SNOR_HWCAPS_READ_1_1_8,	SNOR_CMD_READ_1_1_8 },
2825 		{ SNOR_HWCAPS_READ_1_8_8,	SNOR_CMD_READ_1_8_8 },
2826 		{ SNOR_HWCAPS_READ_8_8_8,	SNOR_CMD_READ_8_8_8 },
2827 		{ SNOR_HWCAPS_READ_1_8_8_DTR,	SNOR_CMD_READ_1_8_8_DTR },
2828 	};
2829 
2830 	return spi_nor_hwcaps2cmd(hwcaps, hwcaps_read2cmd,
2831 				  ARRAY_SIZE(hwcaps_read2cmd));
2832 }
2833 
spi_nor_hwcaps_pp2cmd(u32 hwcaps)2834 static int spi_nor_hwcaps_pp2cmd(u32 hwcaps)
2835 {
2836 	static const int hwcaps_pp2cmd[][2] = {
2837 		{ SNOR_HWCAPS_PP,		SNOR_CMD_PP },
2838 		{ SNOR_HWCAPS_PP_1_1_4,		SNOR_CMD_PP_1_1_4 },
2839 		{ SNOR_HWCAPS_PP_1_4_4,		SNOR_CMD_PP_1_4_4 },
2840 		{ SNOR_HWCAPS_PP_4_4_4,		SNOR_CMD_PP_4_4_4 },
2841 		{ SNOR_HWCAPS_PP_1_1_8,		SNOR_CMD_PP_1_1_8 },
2842 		{ SNOR_HWCAPS_PP_1_8_8,		SNOR_CMD_PP_1_8_8 },
2843 		{ SNOR_HWCAPS_PP_8_8_8,		SNOR_CMD_PP_8_8_8 },
2844 	};
2845 
2846 	return spi_nor_hwcaps2cmd(hwcaps, hwcaps_pp2cmd,
2847 				  ARRAY_SIZE(hwcaps_pp2cmd));
2848 }
2849 
2850 /*
2851  * Serial Flash Discoverable Parameters (SFDP) parsing.
2852  */
2853 
2854 /**
2855  * spi_nor_read_raw() - raw read of serial flash memory. read_opcode,
2856  *			addr_width and read_dummy members of the struct spi_nor
2857  *			should be previously
2858  * set.
2859  * @nor:	pointer to a 'struct spi_nor'
2860  * @addr:	offset in the serial flash memory
2861  * @len:	number of bytes to read
2862  * @buf:	buffer where the data is copied into (dma-safe memory)
2863  *
2864  * Return: 0 on success, -errno otherwise.
2865  */
spi_nor_read_raw(struct spi_nor * nor,u32 addr,size_t len,u8 * buf)2866 static int spi_nor_read_raw(struct spi_nor *nor, u32 addr, size_t len, u8 *buf)
2867 {
2868 	ssize_t ret;
2869 
2870 	while (len) {
2871 		ret = spi_nor_read_data(nor, addr, len, buf);
2872 		if (ret < 0)
2873 			return ret;
2874 		if (!ret || ret > len)
2875 			return -EIO;
2876 
2877 		buf += ret;
2878 		addr += ret;
2879 		len -= ret;
2880 	}
2881 	return 0;
2882 }
2883 
2884 /**
2885  * spi_nor_read_sfdp() - read Serial Flash Discoverable Parameters.
2886  * @nor:	pointer to a 'struct spi_nor'
2887  * @addr:	offset in the SFDP area to start reading data from
2888  * @len:	number of bytes to read
2889  * @buf:	buffer where the SFDP data are copied into (dma-safe memory)
2890  *
2891  * Whatever the actual numbers of bytes for address and dummy cycles are
2892  * for (Fast) Read commands, the Read SFDP (5Ah) instruction is always
2893  * followed by a 3-byte address and 8 dummy clock cycles.
2894  *
2895  * Return: 0 on success, -errno otherwise.
2896  */
spi_nor_read_sfdp(struct spi_nor * nor,u32 addr,size_t len,void * buf)2897 static int spi_nor_read_sfdp(struct spi_nor *nor, u32 addr,
2898 			     size_t len, void *buf)
2899 {
2900 	u8 addr_width, read_opcode, read_dummy;
2901 	int ret;
2902 
2903 	read_opcode = nor->read_opcode;
2904 	addr_width = nor->addr_width;
2905 	read_dummy = nor->read_dummy;
2906 
2907 	nor->read_opcode = SPINOR_OP_RDSFDP;
2908 	nor->addr_width = 3;
2909 	nor->read_dummy = 8;
2910 
2911 	ret = spi_nor_read_raw(nor, addr, len, buf);
2912 
2913 	nor->read_opcode = read_opcode;
2914 	nor->addr_width = addr_width;
2915 	nor->read_dummy = read_dummy;
2916 
2917 	return ret;
2918 }
2919 
2920 /**
2921  * spi_nor_spimem_check_op - check if the operation is supported
2922  *                           by controller
2923  *@nor:        pointer to a 'struct spi_nor'
2924  *@op:         pointer to op template to be checked
2925  *
2926  * Returns 0 if operation is supported, -ENOTSUPP otherwise.
2927  */
spi_nor_spimem_check_op(struct spi_nor * nor,struct spi_mem_op * op)2928 static int spi_nor_spimem_check_op(struct spi_nor *nor,
2929 				   struct spi_mem_op *op)
2930 {
2931 	/*
2932 	 * First test with 4 address bytes. The opcode itself might
2933 	 * be a 3B addressing opcode but we don't care, because
2934 	 * SPI controller implementation should not check the opcode,
2935 	 * but just the sequence.
2936 	 */
2937 	op->addr.nbytes = 4;
2938 	if (!spi_mem_supports_op(nor->spimem, op)) {
2939 		if (nor->mtd.size > SZ_16M)
2940 			return -ENOTSUPP;
2941 
2942 		/* If flash size <= 16MB, 3 address bytes are sufficient */
2943 		op->addr.nbytes = 3;
2944 		if (!spi_mem_supports_op(nor->spimem, op))
2945 			return -ENOTSUPP;
2946 	}
2947 
2948 	return 0;
2949 }
2950 
2951 /**
2952  * spi_nor_spimem_check_readop - check if the read op is supported
2953  *                               by controller
2954  *@nor:         pointer to a 'struct spi_nor'
2955  *@read:        pointer to op template to be checked
2956  *
2957  * Returns 0 if operation is supported, -ENOTSUPP otherwise.
2958  */
spi_nor_spimem_check_readop(struct spi_nor * nor,const struct spi_nor_read_command * read)2959 static int spi_nor_spimem_check_readop(struct spi_nor *nor,
2960 				       const struct spi_nor_read_command *read)
2961 {
2962 	struct spi_mem_op op = SPI_MEM_OP(SPI_MEM_OP_CMD(read->opcode, 1),
2963 					  SPI_MEM_OP_ADDR(3, 0, 1),
2964 					  SPI_MEM_OP_DUMMY(0, 1),
2965 					  SPI_MEM_OP_DATA_IN(0, NULL, 1));
2966 
2967 	op.cmd.buswidth = spi_nor_get_protocol_inst_nbits(read->proto);
2968 	op.addr.buswidth = spi_nor_get_protocol_addr_nbits(read->proto);
2969 	op.data.buswidth = spi_nor_get_protocol_data_nbits(read->proto);
2970 	op.dummy.buswidth = op.addr.buswidth;
2971 	op.dummy.nbytes = (read->num_mode_clocks + read->num_wait_states) *
2972 			  op.dummy.buswidth / 8;
2973 
2974 	return spi_nor_spimem_check_op(nor, &op);
2975 }
2976 
2977 /**
2978  * spi_nor_spimem_check_pp - check if the page program op is supported
2979  *                           by controller
2980  *@nor:         pointer to a 'struct spi_nor'
2981  *@pp:          pointer to op template to be checked
2982  *
2983  * Returns 0 if operation is supported, -ENOTSUPP otherwise.
2984  */
spi_nor_spimem_check_pp(struct spi_nor * nor,const struct spi_nor_pp_command * pp)2985 static int spi_nor_spimem_check_pp(struct spi_nor *nor,
2986 				   const struct spi_nor_pp_command *pp)
2987 {
2988 	struct spi_mem_op op = SPI_MEM_OP(SPI_MEM_OP_CMD(pp->opcode, 1),
2989 					  SPI_MEM_OP_ADDR(3, 0, 1),
2990 					  SPI_MEM_OP_NO_DUMMY,
2991 					  SPI_MEM_OP_DATA_OUT(0, NULL, 1));
2992 
2993 	op.cmd.buswidth = spi_nor_get_protocol_inst_nbits(pp->proto);
2994 	op.addr.buswidth = spi_nor_get_protocol_addr_nbits(pp->proto);
2995 	op.data.buswidth = spi_nor_get_protocol_data_nbits(pp->proto);
2996 
2997 	return spi_nor_spimem_check_op(nor, &op);
2998 }
2999 
3000 /**
3001  * spi_nor_spimem_adjust_hwcaps - Find optimal Read/Write protocol
3002  *                                based on SPI controller capabilities
3003  * @nor:        pointer to a 'struct spi_nor'
3004  * @hwcaps:     pointer to resulting capabilities after adjusting
3005  *              according to controller and flash's capability
3006  */
3007 static void
spi_nor_spimem_adjust_hwcaps(struct spi_nor * nor,u32 * hwcaps)3008 spi_nor_spimem_adjust_hwcaps(struct spi_nor *nor, u32 *hwcaps)
3009 {
3010 	struct spi_nor_flash_parameter *params =  &nor->params;
3011 	unsigned int cap;
3012 
3013 	/* DTR modes are not supported yet, mask them all. */
3014 	*hwcaps &= ~SNOR_HWCAPS_DTR;
3015 
3016 	/* X-X-X modes are not supported yet, mask them all. */
3017 	*hwcaps &= ~SNOR_HWCAPS_X_X_X;
3018 
3019 	for (cap = 0; cap < sizeof(*hwcaps) * BITS_PER_BYTE; cap++) {
3020 		int rdidx, ppidx;
3021 
3022 		if (!(*hwcaps & BIT(cap)))
3023 			continue;
3024 
3025 		rdidx = spi_nor_hwcaps_read2cmd(BIT(cap));
3026 		if (rdidx >= 0 &&
3027 		    spi_nor_spimem_check_readop(nor, &params->reads[rdidx]))
3028 			*hwcaps &= ~BIT(cap);
3029 
3030 		ppidx = spi_nor_hwcaps_pp2cmd(BIT(cap));
3031 		if (ppidx < 0)
3032 			continue;
3033 
3034 		if (spi_nor_spimem_check_pp(nor,
3035 					    &params->page_programs[ppidx]))
3036 			*hwcaps &= ~BIT(cap);
3037 	}
3038 }
3039 
3040 /**
3041  * spi_nor_read_sfdp_dma_unsafe() - read Serial Flash Discoverable Parameters.
3042  * @nor:	pointer to a 'struct spi_nor'
3043  * @addr:	offset in the SFDP area to start reading data from
3044  * @len:	number of bytes to read
3045  * @buf:	buffer where the SFDP data are copied into
3046  *
3047  * Wrap spi_nor_read_sfdp() using a kmalloc'ed bounce buffer as @buf is now not
3048  * guaranteed to be dma-safe.
3049  *
3050  * Return: -ENOMEM if kmalloc() fails, the return code of spi_nor_read_sfdp()
3051  *          otherwise.
3052  */
spi_nor_read_sfdp_dma_unsafe(struct spi_nor * nor,u32 addr,size_t len,void * buf)3053 static int spi_nor_read_sfdp_dma_unsafe(struct spi_nor *nor, u32 addr,
3054 					size_t len, void *buf)
3055 {
3056 	void *dma_safe_buf;
3057 	int ret;
3058 
3059 	dma_safe_buf = kmalloc(len, GFP_KERNEL);
3060 	if (!dma_safe_buf)
3061 		return -ENOMEM;
3062 
3063 	ret = spi_nor_read_sfdp(nor, addr, len, dma_safe_buf);
3064 	memcpy(buf, dma_safe_buf, len);
3065 	kfree(dma_safe_buf);
3066 
3067 	return ret;
3068 }
3069 
3070 /* Fast Read settings. */
3071 
3072 static void
spi_nor_set_read_settings_from_bfpt(struct spi_nor_read_command * read,u16 half,enum spi_nor_protocol proto)3073 spi_nor_set_read_settings_from_bfpt(struct spi_nor_read_command *read,
3074 				    u16 half,
3075 				    enum spi_nor_protocol proto)
3076 {
3077 	read->num_mode_clocks = (half >> 5) & 0x07;
3078 	read->num_wait_states = (half >> 0) & 0x1f;
3079 	read->opcode = (half >> 8) & 0xff;
3080 	read->proto = proto;
3081 }
3082 
3083 struct sfdp_bfpt_read {
3084 	/* The Fast Read x-y-z hardware capability in params->hwcaps.mask. */
3085 	u32			hwcaps;
3086 
3087 	/*
3088 	 * The <supported_bit> bit in <supported_dword> BFPT DWORD tells us
3089 	 * whether the Fast Read x-y-z command is supported.
3090 	 */
3091 	u32			supported_dword;
3092 	u32			supported_bit;
3093 
3094 	/*
3095 	 * The half-word at offset <setting_shift> in <setting_dword> BFPT DWORD
3096 	 * encodes the op code, the number of mode clocks and the number of wait
3097 	 * states to be used by Fast Read x-y-z command.
3098 	 */
3099 	u32			settings_dword;
3100 	u32			settings_shift;
3101 
3102 	/* The SPI protocol for this Fast Read x-y-z command. */
3103 	enum spi_nor_protocol	proto;
3104 };
3105 
3106 static const struct sfdp_bfpt_read sfdp_bfpt_reads[] = {
3107 	/* Fast Read 1-1-2 */
3108 	{
3109 		SNOR_HWCAPS_READ_1_1_2,
3110 		BFPT_DWORD(1), BIT(16),	/* Supported bit */
3111 		BFPT_DWORD(4), 0,	/* Settings */
3112 		SNOR_PROTO_1_1_2,
3113 	},
3114 
3115 	/* Fast Read 1-2-2 */
3116 	{
3117 		SNOR_HWCAPS_READ_1_2_2,
3118 		BFPT_DWORD(1), BIT(20),	/* Supported bit */
3119 		BFPT_DWORD(4), 16,	/* Settings */
3120 		SNOR_PROTO_1_2_2,
3121 	},
3122 
3123 	/* Fast Read 2-2-2 */
3124 	{
3125 		SNOR_HWCAPS_READ_2_2_2,
3126 		BFPT_DWORD(5),  BIT(0),	/* Supported bit */
3127 		BFPT_DWORD(6), 16,	/* Settings */
3128 		SNOR_PROTO_2_2_2,
3129 	},
3130 
3131 	/* Fast Read 1-1-4 */
3132 	{
3133 		SNOR_HWCAPS_READ_1_1_4,
3134 		BFPT_DWORD(1), BIT(22),	/* Supported bit */
3135 		BFPT_DWORD(3), 16,	/* Settings */
3136 		SNOR_PROTO_1_1_4,
3137 	},
3138 
3139 	/* Fast Read 1-4-4 */
3140 	{
3141 		SNOR_HWCAPS_READ_1_4_4,
3142 		BFPT_DWORD(1), BIT(21),	/* Supported bit */
3143 		BFPT_DWORD(3), 0,	/* Settings */
3144 		SNOR_PROTO_1_4_4,
3145 	},
3146 
3147 	/* Fast Read 4-4-4 */
3148 	{
3149 		SNOR_HWCAPS_READ_4_4_4,
3150 		BFPT_DWORD(5), BIT(4),	/* Supported bit */
3151 		BFPT_DWORD(7), 16,	/* Settings */
3152 		SNOR_PROTO_4_4_4,
3153 	},
3154 };
3155 
3156 struct sfdp_bfpt_erase {
3157 	/*
3158 	 * The half-word at offset <shift> in DWORD <dwoard> encodes the
3159 	 * op code and erase sector size to be used by Sector Erase commands.
3160 	 */
3161 	u32			dword;
3162 	u32			shift;
3163 };
3164 
3165 static const struct sfdp_bfpt_erase sfdp_bfpt_erases[] = {
3166 	/* Erase Type 1 in DWORD8 bits[15:0] */
3167 	{BFPT_DWORD(8), 0},
3168 
3169 	/* Erase Type 2 in DWORD8 bits[31:16] */
3170 	{BFPT_DWORD(8), 16},
3171 
3172 	/* Erase Type 3 in DWORD9 bits[15:0] */
3173 	{BFPT_DWORD(9), 0},
3174 
3175 	/* Erase Type 4 in DWORD9 bits[31:16] */
3176 	{BFPT_DWORD(9), 16},
3177 };
3178 
3179 /**
3180  * spi_nor_set_erase_type() - set a SPI NOR erase type
3181  * @erase:	pointer to a structure that describes a SPI NOR erase type
3182  * @size:	the size of the sector/block erased by the erase type
3183  * @opcode:	the SPI command op code to erase the sector/block
3184  */
spi_nor_set_erase_type(struct spi_nor_erase_type * erase,u32 size,u8 opcode)3185 static void spi_nor_set_erase_type(struct spi_nor_erase_type *erase,
3186 				   u32 size, u8 opcode)
3187 {
3188 	erase->size = size;
3189 	erase->opcode = opcode;
3190 	/* JEDEC JESD216B Standard imposes erase sizes to be power of 2. */
3191 	erase->size_shift = ffs(erase->size) - 1;
3192 	erase->size_mask = (1 << erase->size_shift) - 1;
3193 }
3194 
3195 /**
3196  * spi_nor_set_erase_settings_from_bfpt() - set erase type settings from BFPT
3197  * @erase:	pointer to a structure that describes a SPI NOR erase type
3198  * @size:	the size of the sector/block erased by the erase type
3199  * @opcode:	the SPI command op code to erase the sector/block
3200  * @i:		erase type index as sorted in the Basic Flash Parameter Table
3201  *
3202  * The supported Erase Types will be sorted at init in ascending order, with
3203  * the smallest Erase Type size being the first member in the erase_type array
3204  * of the spi_nor_erase_map structure. Save the Erase Type index as sorted in
3205  * the Basic Flash Parameter Table since it will be used later on to
3206  * synchronize with the supported Erase Types defined in SFDP optional tables.
3207  */
3208 static void
spi_nor_set_erase_settings_from_bfpt(struct spi_nor_erase_type * erase,u32 size,u8 opcode,u8 i)3209 spi_nor_set_erase_settings_from_bfpt(struct spi_nor_erase_type *erase,
3210 				     u32 size, u8 opcode, u8 i)
3211 {
3212 	erase->idx = i;
3213 	spi_nor_set_erase_type(erase, size, opcode);
3214 }
3215 
3216 /**
3217  * spi_nor_map_cmp_erase_type() - compare the map's erase types by size
3218  * @l:	member in the left half of the map's erase_type array
3219  * @r:	member in the right half of the map's erase_type array
3220  *
3221  * Comparison function used in the sort() call to sort in ascending order the
3222  * map's erase types, the smallest erase type size being the first member in the
3223  * sorted erase_type array.
3224  *
3225  * Return: the result of @l->size - @r->size
3226  */
spi_nor_map_cmp_erase_type(const void * l,const void * r)3227 static int spi_nor_map_cmp_erase_type(const void *l, const void *r)
3228 {
3229 	const struct spi_nor_erase_type *left = l, *right = r;
3230 
3231 	return left->size - right->size;
3232 }
3233 
3234 /**
3235  * spi_nor_sort_erase_mask() - sort erase mask
3236  * @map:	the erase map of the SPI NOR
3237  * @erase_mask:	the erase type mask to be sorted
3238  *
3239  * Replicate the sort done for the map's erase types in BFPT: sort the erase
3240  * mask in ascending order with the smallest erase type size starting from
3241  * BIT(0) in the sorted erase mask.
3242  *
3243  * Return: sorted erase mask.
3244  */
spi_nor_sort_erase_mask(struct spi_nor_erase_map * map,u8 erase_mask)3245 static u8 spi_nor_sort_erase_mask(struct spi_nor_erase_map *map, u8 erase_mask)
3246 {
3247 	struct spi_nor_erase_type *erase_type = map->erase_type;
3248 	int i;
3249 	u8 sorted_erase_mask = 0;
3250 
3251 	if (!erase_mask)
3252 		return 0;
3253 
3254 	/* Replicate the sort done for the map's erase types. */
3255 	for (i = 0; i < SNOR_ERASE_TYPE_MAX; i++)
3256 		if (erase_type[i].size && erase_mask & BIT(erase_type[i].idx))
3257 			sorted_erase_mask |= BIT(i);
3258 
3259 	return sorted_erase_mask;
3260 }
3261 
3262 /**
3263  * spi_nor_regions_sort_erase_types() - sort erase types in each region
3264  * @map:	the erase map of the SPI NOR
3265  *
3266  * Function assumes that the erase types defined in the erase map are already
3267  * sorted in ascending order, with the smallest erase type size being the first
3268  * member in the erase_type array. It replicates the sort done for the map's
3269  * erase types. Each region's erase bitmask will indicate which erase types are
3270  * supported from the sorted erase types defined in the erase map.
3271  * Sort the all region's erase type at init in order to speed up the process of
3272  * finding the best erase command at runtime.
3273  */
spi_nor_regions_sort_erase_types(struct spi_nor_erase_map * map)3274 static void spi_nor_regions_sort_erase_types(struct spi_nor_erase_map *map)
3275 {
3276 	struct spi_nor_erase_region *region = map->regions;
3277 	u8 region_erase_mask, sorted_erase_mask;
3278 
3279 	while (region) {
3280 		region_erase_mask = region->offset & SNOR_ERASE_TYPE_MASK;
3281 
3282 		sorted_erase_mask = spi_nor_sort_erase_mask(map,
3283 							    region_erase_mask);
3284 
3285 		/* Overwrite erase mask. */
3286 		region->offset = (region->offset & ~SNOR_ERASE_TYPE_MASK) |
3287 				 sorted_erase_mask;
3288 
3289 		region = spi_nor_region_next(region);
3290 	}
3291 }
3292 
3293 /**
3294  * spi_nor_init_uniform_erase_map() - Initialize uniform erase map
3295  * @map:		the erase map of the SPI NOR
3296  * @erase_mask:		bitmask encoding erase types that can erase the entire
3297  *			flash memory
3298  * @flash_size:		the spi nor flash memory size
3299  */
spi_nor_init_uniform_erase_map(struct spi_nor_erase_map * map,u8 erase_mask,u64 flash_size)3300 static void spi_nor_init_uniform_erase_map(struct spi_nor_erase_map *map,
3301 					   u8 erase_mask, u64 flash_size)
3302 {
3303 	/* Offset 0 with erase_mask and SNOR_LAST_REGION bit set */
3304 	map->uniform_region.offset = (erase_mask & SNOR_ERASE_TYPE_MASK) |
3305 				     SNOR_LAST_REGION;
3306 	map->uniform_region.size = flash_size;
3307 	map->regions = &map->uniform_region;
3308 	map->uniform_erase_type = erase_mask;
3309 }
3310 
3311 static int
spi_nor_post_bfpt_fixups(struct spi_nor * nor,const struct sfdp_parameter_header * bfpt_header,const struct sfdp_bfpt * bfpt,struct spi_nor_flash_parameter * params)3312 spi_nor_post_bfpt_fixups(struct spi_nor *nor,
3313 			 const struct sfdp_parameter_header *bfpt_header,
3314 			 const struct sfdp_bfpt *bfpt,
3315 			 struct spi_nor_flash_parameter *params)
3316 {
3317 	if (nor->info->fixups && nor->info->fixups->post_bfpt)
3318 		return nor->info->fixups->post_bfpt(nor, bfpt_header, bfpt,
3319 						    params);
3320 
3321 	return 0;
3322 }
3323 
3324 /**
3325  * spi_nor_parse_bfpt() - read and parse the Basic Flash Parameter Table.
3326  * @nor:		pointer to a 'struct spi_nor'
3327  * @bfpt_header:	pointer to the 'struct sfdp_parameter_header' describing
3328  *			the Basic Flash Parameter Table length and version
3329  * @params:		pointer to the 'struct spi_nor_flash_parameter' to be
3330  *			filled
3331  *
3332  * The Basic Flash Parameter Table is the main and only mandatory table as
3333  * defined by the SFDP (JESD216) specification.
3334  * It provides us with the total size (memory density) of the data array and
3335  * the number of address bytes for Fast Read, Page Program and Sector Erase
3336  * commands.
3337  * For Fast READ commands, it also gives the number of mode clock cycles and
3338  * wait states (regrouped in the number of dummy clock cycles) for each
3339  * supported instruction op code.
3340  * For Page Program, the page size is now available since JESD216 rev A, however
3341  * the supported instruction op codes are still not provided.
3342  * For Sector Erase commands, this table stores the supported instruction op
3343  * codes and the associated sector sizes.
3344  * Finally, the Quad Enable Requirements (QER) are also available since JESD216
3345  * rev A. The QER bits encode the manufacturer dependent procedure to be
3346  * executed to set the Quad Enable (QE) bit in some internal register of the
3347  * Quad SPI memory. Indeed the QE bit, when it exists, must be set before
3348  * sending any Quad SPI command to the memory. Actually, setting the QE bit
3349  * tells the memory to reassign its WP# and HOLD#/RESET# pins to functions IO2
3350  * and IO3 hence enabling 4 (Quad) I/O lines.
3351  *
3352  * Return: 0 on success, -errno otherwise.
3353  */
spi_nor_parse_bfpt(struct spi_nor * nor,const struct sfdp_parameter_header * bfpt_header,struct spi_nor_flash_parameter * params)3354 static int spi_nor_parse_bfpt(struct spi_nor *nor,
3355 			      const struct sfdp_parameter_header *bfpt_header,
3356 			      struct spi_nor_flash_parameter *params)
3357 {
3358 	struct spi_nor_erase_map *map = &params->erase_map;
3359 	struct spi_nor_erase_type *erase_type = map->erase_type;
3360 	struct sfdp_bfpt bfpt;
3361 	size_t len;
3362 	int i, cmd, err;
3363 	u32 addr;
3364 	u16 half;
3365 	u8 erase_mask;
3366 
3367 	/* JESD216 Basic Flash Parameter Table length is at least 9 DWORDs. */
3368 	if (bfpt_header->length < BFPT_DWORD_MAX_JESD216)
3369 		return -EINVAL;
3370 
3371 	/* Read the Basic Flash Parameter Table. */
3372 	len = min_t(size_t, sizeof(bfpt),
3373 		    bfpt_header->length * sizeof(u32));
3374 	addr = SFDP_PARAM_HEADER_PTP(bfpt_header);
3375 	memset(&bfpt, 0, sizeof(bfpt));
3376 	err = spi_nor_read_sfdp_dma_unsafe(nor,  addr, len, &bfpt);
3377 	if (err < 0)
3378 		return err;
3379 
3380 	/* Fix endianness of the BFPT DWORDs. */
3381 	for (i = 0; i < BFPT_DWORD_MAX; i++)
3382 		bfpt.dwords[i] = le32_to_cpu(bfpt.dwords[i]);
3383 
3384 	/* Number of address bytes. */
3385 	switch (bfpt.dwords[BFPT_DWORD(1)] & BFPT_DWORD1_ADDRESS_BYTES_MASK) {
3386 	case BFPT_DWORD1_ADDRESS_BYTES_3_ONLY:
3387 		nor->addr_width = 3;
3388 		break;
3389 
3390 	case BFPT_DWORD1_ADDRESS_BYTES_4_ONLY:
3391 		nor->addr_width = 4;
3392 		break;
3393 
3394 	default:
3395 		break;
3396 	}
3397 
3398 	/* Flash Memory Density (in bits). */
3399 	params->size = bfpt.dwords[BFPT_DWORD(2)];
3400 	if (params->size & BIT(31)) {
3401 		params->size &= ~BIT(31);
3402 
3403 		/*
3404 		 * Prevent overflows on params->size. Anyway, a NOR of 2^64
3405 		 * bits is unlikely to exist so this error probably means
3406 		 * the BFPT we are reading is corrupted/wrong.
3407 		 */
3408 		if (params->size > 63)
3409 			return -EINVAL;
3410 
3411 		params->size = 1ULL << params->size;
3412 	} else {
3413 		params->size++;
3414 	}
3415 	params->size >>= 3; /* Convert to bytes. */
3416 
3417 	/* Fast Read settings. */
3418 	for (i = 0; i < ARRAY_SIZE(sfdp_bfpt_reads); i++) {
3419 		const struct sfdp_bfpt_read *rd = &sfdp_bfpt_reads[i];
3420 		struct spi_nor_read_command *read;
3421 
3422 		if (!(bfpt.dwords[rd->supported_dword] & rd->supported_bit)) {
3423 			params->hwcaps.mask &= ~rd->hwcaps;
3424 			continue;
3425 		}
3426 
3427 		params->hwcaps.mask |= rd->hwcaps;
3428 		cmd = spi_nor_hwcaps_read2cmd(rd->hwcaps);
3429 		read = &params->reads[cmd];
3430 		half = bfpt.dwords[rd->settings_dword] >> rd->settings_shift;
3431 		spi_nor_set_read_settings_from_bfpt(read, half, rd->proto);
3432 	}
3433 
3434 	/*
3435 	 * Sector Erase settings. Reinitialize the uniform erase map using the
3436 	 * Erase Types defined in the bfpt table.
3437 	 */
3438 	erase_mask = 0;
3439 	memset(&params->erase_map, 0, sizeof(params->erase_map));
3440 	for (i = 0; i < ARRAY_SIZE(sfdp_bfpt_erases); i++) {
3441 		const struct sfdp_bfpt_erase *er = &sfdp_bfpt_erases[i];
3442 		u32 erasesize;
3443 		u8 opcode;
3444 
3445 		half = bfpt.dwords[er->dword] >> er->shift;
3446 		erasesize = half & 0xff;
3447 
3448 		/* erasesize == 0 means this Erase Type is not supported. */
3449 		if (!erasesize)
3450 			continue;
3451 
3452 		erasesize = 1U << erasesize;
3453 		opcode = (half >> 8) & 0xff;
3454 		erase_mask |= BIT(i);
3455 		spi_nor_set_erase_settings_from_bfpt(&erase_type[i], erasesize,
3456 						     opcode, i);
3457 	}
3458 	spi_nor_init_uniform_erase_map(map, erase_mask, params->size);
3459 	/*
3460 	 * Sort all the map's Erase Types in ascending order with the smallest
3461 	 * erase size being the first member in the erase_type array.
3462 	 */
3463 	sort(erase_type, SNOR_ERASE_TYPE_MAX, sizeof(erase_type[0]),
3464 	     spi_nor_map_cmp_erase_type, NULL);
3465 	/*
3466 	 * Sort the erase types in the uniform region in order to update the
3467 	 * uniform_erase_type bitmask. The bitmask will be used later on when
3468 	 * selecting the uniform erase.
3469 	 */
3470 	spi_nor_regions_sort_erase_types(map);
3471 	map->uniform_erase_type = map->uniform_region.offset &
3472 				  SNOR_ERASE_TYPE_MASK;
3473 
3474 	/* Stop here if not JESD216 rev A or later. */
3475 	if (bfpt_header->length < BFPT_DWORD_MAX)
3476 		return spi_nor_post_bfpt_fixups(nor, bfpt_header, &bfpt,
3477 						params);
3478 
3479 	/* Page size: this field specifies 'N' so the page size = 2^N bytes. */
3480 	params->page_size = bfpt.dwords[BFPT_DWORD(11)];
3481 	params->page_size &= BFPT_DWORD11_PAGE_SIZE_MASK;
3482 	params->page_size >>= BFPT_DWORD11_PAGE_SIZE_SHIFT;
3483 	params->page_size = 1U << params->page_size;
3484 
3485 	/* Quad Enable Requirements. */
3486 	switch (bfpt.dwords[BFPT_DWORD(15)] & BFPT_DWORD15_QER_MASK) {
3487 	case BFPT_DWORD15_QER_NONE:
3488 		params->quad_enable = NULL;
3489 		break;
3490 
3491 	case BFPT_DWORD15_QER_SR2_BIT1_BUGGY:
3492 	case BFPT_DWORD15_QER_SR2_BIT1_NO_RD:
3493 		params->quad_enable = spansion_no_read_cr_quad_enable;
3494 		break;
3495 
3496 	case BFPT_DWORD15_QER_SR1_BIT6:
3497 		params->quad_enable = macronix_quad_enable;
3498 		break;
3499 
3500 	case BFPT_DWORD15_QER_SR2_BIT7:
3501 		params->quad_enable = sr2_bit7_quad_enable;
3502 		break;
3503 
3504 	case BFPT_DWORD15_QER_SR2_BIT1:
3505 		params->quad_enable = spansion_read_cr_quad_enable;
3506 		break;
3507 
3508 	default:
3509 		return -EINVAL;
3510 	}
3511 
3512 	return spi_nor_post_bfpt_fixups(nor, bfpt_header, &bfpt, params);
3513 }
3514 
3515 #define SMPT_CMD_ADDRESS_LEN_MASK		GENMASK(23, 22)
3516 #define SMPT_CMD_ADDRESS_LEN_0			(0x0UL << 22)
3517 #define SMPT_CMD_ADDRESS_LEN_3			(0x1UL << 22)
3518 #define SMPT_CMD_ADDRESS_LEN_4			(0x2UL << 22)
3519 #define SMPT_CMD_ADDRESS_LEN_USE_CURRENT	(0x3UL << 22)
3520 
3521 #define SMPT_CMD_READ_DUMMY_MASK		GENMASK(19, 16)
3522 #define SMPT_CMD_READ_DUMMY_SHIFT		16
3523 #define SMPT_CMD_READ_DUMMY(_cmd) \
3524 	(((_cmd) & SMPT_CMD_READ_DUMMY_MASK) >> SMPT_CMD_READ_DUMMY_SHIFT)
3525 #define SMPT_CMD_READ_DUMMY_IS_VARIABLE		0xfUL
3526 
3527 #define SMPT_CMD_READ_DATA_MASK			GENMASK(31, 24)
3528 #define SMPT_CMD_READ_DATA_SHIFT		24
3529 #define SMPT_CMD_READ_DATA(_cmd) \
3530 	(((_cmd) & SMPT_CMD_READ_DATA_MASK) >> SMPT_CMD_READ_DATA_SHIFT)
3531 
3532 #define SMPT_CMD_OPCODE_MASK			GENMASK(15, 8)
3533 #define SMPT_CMD_OPCODE_SHIFT			8
3534 #define SMPT_CMD_OPCODE(_cmd) \
3535 	(((_cmd) & SMPT_CMD_OPCODE_MASK) >> SMPT_CMD_OPCODE_SHIFT)
3536 
3537 #define SMPT_MAP_REGION_COUNT_MASK		GENMASK(23, 16)
3538 #define SMPT_MAP_REGION_COUNT_SHIFT		16
3539 #define SMPT_MAP_REGION_COUNT(_header) \
3540 	((((_header) & SMPT_MAP_REGION_COUNT_MASK) >> \
3541 	  SMPT_MAP_REGION_COUNT_SHIFT) + 1)
3542 
3543 #define SMPT_MAP_ID_MASK			GENMASK(15, 8)
3544 #define SMPT_MAP_ID_SHIFT			8
3545 #define SMPT_MAP_ID(_header) \
3546 	(((_header) & SMPT_MAP_ID_MASK) >> SMPT_MAP_ID_SHIFT)
3547 
3548 #define SMPT_MAP_REGION_SIZE_MASK		GENMASK(31, 8)
3549 #define SMPT_MAP_REGION_SIZE_SHIFT		8
3550 #define SMPT_MAP_REGION_SIZE(_region) \
3551 	(((((_region) & SMPT_MAP_REGION_SIZE_MASK) >> \
3552 	   SMPT_MAP_REGION_SIZE_SHIFT) + 1) * 256)
3553 
3554 #define SMPT_MAP_REGION_ERASE_TYPE_MASK		GENMASK(3, 0)
3555 #define SMPT_MAP_REGION_ERASE_TYPE(_region) \
3556 	((_region) & SMPT_MAP_REGION_ERASE_TYPE_MASK)
3557 
3558 #define SMPT_DESC_TYPE_MAP			BIT(1)
3559 #define SMPT_DESC_END				BIT(0)
3560 
3561 /**
3562  * spi_nor_smpt_addr_width() - return the address width used in the
3563  *			       configuration detection command.
3564  * @nor:	pointer to a 'struct spi_nor'
3565  * @settings:	configuration detection command descriptor, dword1
3566  */
spi_nor_smpt_addr_width(const struct spi_nor * nor,const u32 settings)3567 static u8 spi_nor_smpt_addr_width(const struct spi_nor *nor, const u32 settings)
3568 {
3569 	switch (settings & SMPT_CMD_ADDRESS_LEN_MASK) {
3570 	case SMPT_CMD_ADDRESS_LEN_0:
3571 		return 0;
3572 	case SMPT_CMD_ADDRESS_LEN_3:
3573 		return 3;
3574 	case SMPT_CMD_ADDRESS_LEN_4:
3575 		return 4;
3576 	case SMPT_CMD_ADDRESS_LEN_USE_CURRENT:
3577 		/* fall through */
3578 	default:
3579 		return nor->addr_width;
3580 	}
3581 }
3582 
3583 /**
3584  * spi_nor_smpt_read_dummy() - return the configuration detection command read
3585  *			       latency, in clock cycles.
3586  * @nor:	pointer to a 'struct spi_nor'
3587  * @settings:	configuration detection command descriptor, dword1
3588  *
3589  * Return: the number of dummy cycles for an SMPT read
3590  */
spi_nor_smpt_read_dummy(const struct spi_nor * nor,const u32 settings)3591 static u8 spi_nor_smpt_read_dummy(const struct spi_nor *nor, const u32 settings)
3592 {
3593 	u8 read_dummy = SMPT_CMD_READ_DUMMY(settings);
3594 
3595 	if (read_dummy == SMPT_CMD_READ_DUMMY_IS_VARIABLE)
3596 		return nor->read_dummy;
3597 	return read_dummy;
3598 }
3599 
3600 /**
3601  * spi_nor_get_map_in_use() - get the configuration map in use
3602  * @nor:	pointer to a 'struct spi_nor'
3603  * @smpt:	pointer to the sector map parameter table
3604  * @smpt_len:	sector map parameter table length
3605  *
3606  * Return: pointer to the map in use, ERR_PTR(-errno) otherwise.
3607  */
spi_nor_get_map_in_use(struct spi_nor * nor,const u32 * smpt,u8 smpt_len)3608 static const u32 *spi_nor_get_map_in_use(struct spi_nor *nor, const u32 *smpt,
3609 					 u8 smpt_len)
3610 {
3611 	const u32 *ret;
3612 	u8 *buf;
3613 	u32 addr;
3614 	int err;
3615 	u8 i;
3616 	u8 addr_width, read_opcode, read_dummy;
3617 	u8 read_data_mask, map_id;
3618 
3619 	/* Use a kmalloc'ed bounce buffer to guarantee it is DMA-able. */
3620 	buf = kmalloc(sizeof(*buf), GFP_KERNEL);
3621 	if (!buf)
3622 		return ERR_PTR(-ENOMEM);
3623 
3624 	addr_width = nor->addr_width;
3625 	read_dummy = nor->read_dummy;
3626 	read_opcode = nor->read_opcode;
3627 
3628 	map_id = 0;
3629 	/* Determine if there are any optional Detection Command Descriptors */
3630 	for (i = 0; i < smpt_len; i += 2) {
3631 		if (smpt[i] & SMPT_DESC_TYPE_MAP)
3632 			break;
3633 
3634 		read_data_mask = SMPT_CMD_READ_DATA(smpt[i]);
3635 		nor->addr_width = spi_nor_smpt_addr_width(nor, smpt[i]);
3636 		nor->read_dummy = spi_nor_smpt_read_dummy(nor, smpt[i]);
3637 		nor->read_opcode = SMPT_CMD_OPCODE(smpt[i]);
3638 		addr = smpt[i + 1];
3639 
3640 		err = spi_nor_read_raw(nor, addr, 1, buf);
3641 		if (err) {
3642 			ret = ERR_PTR(err);
3643 			goto out;
3644 		}
3645 
3646 		/*
3647 		 * Build an index value that is used to select the Sector Map
3648 		 * Configuration that is currently in use.
3649 		 */
3650 		map_id = map_id << 1 | !!(*buf & read_data_mask);
3651 	}
3652 
3653 	/*
3654 	 * If command descriptors are provided, they always precede map
3655 	 * descriptors in the table. There is no need to start the iteration
3656 	 * over smpt array all over again.
3657 	 *
3658 	 * Find the matching configuration map.
3659 	 */
3660 	ret = ERR_PTR(-EINVAL);
3661 	while (i < smpt_len) {
3662 		if (SMPT_MAP_ID(smpt[i]) == map_id) {
3663 			ret = smpt + i;
3664 			break;
3665 		}
3666 
3667 		/*
3668 		 * If there are no more configuration map descriptors and no
3669 		 * configuration ID matched the configuration identifier, the
3670 		 * sector address map is unknown.
3671 		 */
3672 		if (smpt[i] & SMPT_DESC_END)
3673 			break;
3674 
3675 		/* increment the table index to the next map */
3676 		i += SMPT_MAP_REGION_COUNT(smpt[i]) + 1;
3677 	}
3678 
3679 	/* fall through */
3680 out:
3681 	kfree(buf);
3682 	nor->addr_width = addr_width;
3683 	nor->read_dummy = read_dummy;
3684 	nor->read_opcode = read_opcode;
3685 	return ret;
3686 }
3687 
3688 /**
3689  * spi_nor_region_check_overlay() - set overlay bit when the region is overlaid
3690  * @region:	pointer to a structure that describes a SPI NOR erase region
3691  * @erase:	pointer to a structure that describes a SPI NOR erase type
3692  * @erase_type:	erase type bitmask
3693  */
3694 static void
spi_nor_region_check_overlay(struct spi_nor_erase_region * region,const struct spi_nor_erase_type * erase,const u8 erase_type)3695 spi_nor_region_check_overlay(struct spi_nor_erase_region *region,
3696 			     const struct spi_nor_erase_type *erase,
3697 			     const u8 erase_type)
3698 {
3699 	int i;
3700 
3701 	for (i = 0; i < SNOR_ERASE_TYPE_MAX; i++) {
3702 		if (!(erase_type & BIT(i)))
3703 			continue;
3704 		if (region->size & erase[i].size_mask) {
3705 			spi_nor_region_mark_overlay(region);
3706 			return;
3707 		}
3708 	}
3709 }
3710 
3711 /**
3712  * spi_nor_init_non_uniform_erase_map() - initialize the non-uniform erase map
3713  * @nor:	pointer to a 'struct spi_nor'
3714  * @params:     pointer to a duplicate 'struct spi_nor_flash_parameter' that is
3715  *              used for storing SFDP parsed data
3716  * @smpt:	pointer to the sector map parameter table
3717  *
3718  * Return: 0 on success, -errno otherwise.
3719  */
3720 static int
spi_nor_init_non_uniform_erase_map(struct spi_nor * nor,struct spi_nor_flash_parameter * params,const u32 * smpt)3721 spi_nor_init_non_uniform_erase_map(struct spi_nor *nor,
3722 				   struct spi_nor_flash_parameter *params,
3723 				   const u32 *smpt)
3724 {
3725 	struct spi_nor_erase_map *map = &params->erase_map;
3726 	struct spi_nor_erase_type *erase = map->erase_type;
3727 	struct spi_nor_erase_region *region;
3728 	u64 offset;
3729 	u32 region_count;
3730 	int i, j;
3731 	u8 uniform_erase_type, save_uniform_erase_type;
3732 	u8 erase_type, regions_erase_type;
3733 
3734 	region_count = SMPT_MAP_REGION_COUNT(*smpt);
3735 	/*
3736 	 * The regions will be freed when the driver detaches from the
3737 	 * device.
3738 	 */
3739 	region = devm_kcalloc(nor->dev, region_count, sizeof(*region),
3740 			      GFP_KERNEL);
3741 	if (!region)
3742 		return -ENOMEM;
3743 	map->regions = region;
3744 
3745 	uniform_erase_type = 0xff;
3746 	regions_erase_type = 0;
3747 	offset = 0;
3748 	/* Populate regions. */
3749 	for (i = 0; i < region_count; i++) {
3750 		j = i + 1; /* index for the region dword */
3751 		region[i].size = SMPT_MAP_REGION_SIZE(smpt[j]);
3752 		erase_type = SMPT_MAP_REGION_ERASE_TYPE(smpt[j]);
3753 		region[i].offset = offset | erase_type;
3754 
3755 		spi_nor_region_check_overlay(&region[i], erase, erase_type);
3756 
3757 		/*
3758 		 * Save the erase types that are supported in all regions and
3759 		 * can erase the entire flash memory.
3760 		 */
3761 		uniform_erase_type &= erase_type;
3762 
3763 		/*
3764 		 * regions_erase_type mask will indicate all the erase types
3765 		 * supported in this configuration map.
3766 		 */
3767 		regions_erase_type |= erase_type;
3768 
3769 		offset = (region[i].offset & ~SNOR_ERASE_FLAGS_MASK) +
3770 			 region[i].size;
3771 	}
3772 
3773 	save_uniform_erase_type = map->uniform_erase_type;
3774 	map->uniform_erase_type = spi_nor_sort_erase_mask(map,
3775 							  uniform_erase_type);
3776 
3777 	if (!regions_erase_type) {
3778 		/*
3779 		 * Roll back to the previous uniform_erase_type mask, SMPT is
3780 		 * broken.
3781 		 */
3782 		map->uniform_erase_type = save_uniform_erase_type;
3783 		return -EINVAL;
3784 	}
3785 
3786 	/*
3787 	 * BFPT advertises all the erase types supported by all the possible
3788 	 * map configurations. Mask out the erase types that are not supported
3789 	 * by the current map configuration.
3790 	 */
3791 	for (i = 0; i < SNOR_ERASE_TYPE_MAX; i++)
3792 		if (!(regions_erase_type & BIT(erase[i].idx)))
3793 			spi_nor_set_erase_type(&erase[i], 0, 0xFF);
3794 
3795 	spi_nor_region_mark_end(&region[i - 1]);
3796 
3797 	return 0;
3798 }
3799 
3800 /**
3801  * spi_nor_parse_smpt() - parse Sector Map Parameter Table
3802  * @nor:		pointer to a 'struct spi_nor'
3803  * @smpt_header:	sector map parameter table header
3804  * @params:		pointer to a duplicate 'struct spi_nor_flash_parameter'
3805  *                      that is used for storing SFDP parsed data
3806  *
3807  * This table is optional, but when available, we parse it to identify the
3808  * location and size of sectors within the main data array of the flash memory
3809  * device and to identify which Erase Types are supported by each sector.
3810  *
3811  * Return: 0 on success, -errno otherwise.
3812  */
spi_nor_parse_smpt(struct spi_nor * nor,const struct sfdp_parameter_header * smpt_header,struct spi_nor_flash_parameter * params)3813 static int spi_nor_parse_smpt(struct spi_nor *nor,
3814 			      const struct sfdp_parameter_header *smpt_header,
3815 			      struct spi_nor_flash_parameter *params)
3816 {
3817 	const u32 *sector_map;
3818 	u32 *smpt;
3819 	size_t len;
3820 	u32 addr;
3821 	int i, ret;
3822 
3823 	/* Read the Sector Map Parameter Table. */
3824 	len = smpt_header->length * sizeof(*smpt);
3825 	smpt = kmalloc(len, GFP_KERNEL);
3826 	if (!smpt)
3827 		return -ENOMEM;
3828 
3829 	addr = SFDP_PARAM_HEADER_PTP(smpt_header);
3830 	ret = spi_nor_read_sfdp(nor, addr, len, smpt);
3831 	if (ret)
3832 		goto out;
3833 
3834 	/* Fix endianness of the SMPT DWORDs. */
3835 	for (i = 0; i < smpt_header->length; i++)
3836 		smpt[i] = le32_to_cpu(smpt[i]);
3837 
3838 	sector_map = spi_nor_get_map_in_use(nor, smpt, smpt_header->length);
3839 	if (IS_ERR(sector_map)) {
3840 		ret = PTR_ERR(sector_map);
3841 		goto out;
3842 	}
3843 
3844 	ret = spi_nor_init_non_uniform_erase_map(nor, params, sector_map);
3845 	if (ret)
3846 		goto out;
3847 
3848 	spi_nor_regions_sort_erase_types(&params->erase_map);
3849 	/* fall through */
3850 out:
3851 	kfree(smpt);
3852 	return ret;
3853 }
3854 
3855 #define SFDP_4BAIT_DWORD_MAX	2
3856 
3857 struct sfdp_4bait {
3858 	/* The hardware capability. */
3859 	u32		hwcaps;
3860 
3861 	/*
3862 	 * The <supported_bit> bit in DWORD1 of the 4BAIT tells us whether
3863 	 * the associated 4-byte address op code is supported.
3864 	 */
3865 	u32		supported_bit;
3866 };
3867 
3868 /**
3869  * spi_nor_parse_4bait() - parse the 4-Byte Address Instruction Table
3870  * @nor:		pointer to a 'struct spi_nor'.
3871  * @param_header:	pointer to the 'struct sfdp_parameter_header' describing
3872  *			the 4-Byte Address Instruction Table length and version.
3873  * @params:		pointer to the 'struct spi_nor_flash_parameter' to be.
3874  *
3875  * Return: 0 on success, -errno otherwise.
3876  */
spi_nor_parse_4bait(struct spi_nor * nor,const struct sfdp_parameter_header * param_header,struct spi_nor_flash_parameter * params)3877 static int spi_nor_parse_4bait(struct spi_nor *nor,
3878 			       const struct sfdp_parameter_header *param_header,
3879 			       struct spi_nor_flash_parameter *params)
3880 {
3881 	static const struct sfdp_4bait reads[] = {
3882 		{ SNOR_HWCAPS_READ,		BIT(0) },
3883 		{ SNOR_HWCAPS_READ_FAST,	BIT(1) },
3884 		{ SNOR_HWCAPS_READ_1_1_2,	BIT(2) },
3885 		{ SNOR_HWCAPS_READ_1_2_2,	BIT(3) },
3886 		{ SNOR_HWCAPS_READ_1_1_4,	BIT(4) },
3887 		{ SNOR_HWCAPS_READ_1_4_4,	BIT(5) },
3888 		{ SNOR_HWCAPS_READ_1_1_1_DTR,	BIT(13) },
3889 		{ SNOR_HWCAPS_READ_1_2_2_DTR,	BIT(14) },
3890 		{ SNOR_HWCAPS_READ_1_4_4_DTR,	BIT(15) },
3891 	};
3892 	static const struct sfdp_4bait programs[] = {
3893 		{ SNOR_HWCAPS_PP,		BIT(6) },
3894 		{ SNOR_HWCAPS_PP_1_1_4,		BIT(7) },
3895 		{ SNOR_HWCAPS_PP_1_4_4,		BIT(8) },
3896 	};
3897 	static const struct sfdp_4bait erases[SNOR_ERASE_TYPE_MAX] = {
3898 		{ 0u /* not used */,		BIT(9) },
3899 		{ 0u /* not used */,		BIT(10) },
3900 		{ 0u /* not used */,		BIT(11) },
3901 		{ 0u /* not used */,		BIT(12) },
3902 	};
3903 	struct spi_nor_pp_command *params_pp = params->page_programs;
3904 	struct spi_nor_erase_map *map = &params->erase_map;
3905 	struct spi_nor_erase_type *erase_type = map->erase_type;
3906 	u32 *dwords;
3907 	size_t len;
3908 	u32 addr, discard_hwcaps, read_hwcaps, pp_hwcaps, erase_mask;
3909 	int i, ret;
3910 
3911 	if (param_header->major != SFDP_JESD216_MAJOR ||
3912 	    param_header->length < SFDP_4BAIT_DWORD_MAX)
3913 		return -EINVAL;
3914 
3915 	/* Read the 4-byte Address Instruction Table. */
3916 	len = sizeof(*dwords) * SFDP_4BAIT_DWORD_MAX;
3917 
3918 	/* Use a kmalloc'ed bounce buffer to guarantee it is DMA-able. */
3919 	dwords = kmalloc(len, GFP_KERNEL);
3920 	if (!dwords)
3921 		return -ENOMEM;
3922 
3923 	addr = SFDP_PARAM_HEADER_PTP(param_header);
3924 	ret = spi_nor_read_sfdp(nor, addr, len, dwords);
3925 	if (ret)
3926 		goto out;
3927 
3928 	/* Fix endianness of the 4BAIT DWORDs. */
3929 	for (i = 0; i < SFDP_4BAIT_DWORD_MAX; i++)
3930 		dwords[i] = le32_to_cpu(dwords[i]);
3931 
3932 	/*
3933 	 * Compute the subset of (Fast) Read commands for which the 4-byte
3934 	 * version is supported.
3935 	 */
3936 	discard_hwcaps = 0;
3937 	read_hwcaps = 0;
3938 	for (i = 0; i < ARRAY_SIZE(reads); i++) {
3939 		const struct sfdp_4bait *read = &reads[i];
3940 
3941 		discard_hwcaps |= read->hwcaps;
3942 		if ((params->hwcaps.mask & read->hwcaps) &&
3943 		    (dwords[0] & read->supported_bit))
3944 			read_hwcaps |= read->hwcaps;
3945 	}
3946 
3947 	/*
3948 	 * Compute the subset of Page Program commands for which the 4-byte
3949 	 * version is supported.
3950 	 */
3951 	pp_hwcaps = 0;
3952 	for (i = 0; i < ARRAY_SIZE(programs); i++) {
3953 		const struct sfdp_4bait *program = &programs[i];
3954 
3955 		/*
3956 		 * The 4 Byte Address Instruction (Optional) Table is the only
3957 		 * SFDP table that indicates support for Page Program Commands.
3958 		 * Bypass the params->hwcaps.mask and consider 4BAIT the biggest
3959 		 * authority for specifying Page Program support.
3960 		 */
3961 		discard_hwcaps |= program->hwcaps;
3962 		if (dwords[0] & program->supported_bit)
3963 			pp_hwcaps |= program->hwcaps;
3964 	}
3965 
3966 	/*
3967 	 * Compute the subset of Sector Erase commands for which the 4-byte
3968 	 * version is supported.
3969 	 */
3970 	erase_mask = 0;
3971 	for (i = 0; i < SNOR_ERASE_TYPE_MAX; i++) {
3972 		const struct sfdp_4bait *erase = &erases[i];
3973 
3974 		if (dwords[0] & erase->supported_bit)
3975 			erase_mask |= BIT(i);
3976 	}
3977 
3978 	/* Replicate the sort done for the map's erase types in BFPT. */
3979 	erase_mask = spi_nor_sort_erase_mask(map, erase_mask);
3980 
3981 	/*
3982 	 * We need at least one 4-byte op code per read, program and erase
3983 	 * operation; the .read(), .write() and .erase() hooks share the
3984 	 * nor->addr_width value.
3985 	 */
3986 	if (!read_hwcaps || !pp_hwcaps || !erase_mask)
3987 		goto out;
3988 
3989 	/*
3990 	 * Discard all operations from the 4-byte instruction set which are
3991 	 * not supported by this memory.
3992 	 */
3993 	params->hwcaps.mask &= ~discard_hwcaps;
3994 	params->hwcaps.mask |= (read_hwcaps | pp_hwcaps);
3995 
3996 	/* Use the 4-byte address instruction set. */
3997 	for (i = 0; i < SNOR_CMD_READ_MAX; i++) {
3998 		struct spi_nor_read_command *read_cmd = &params->reads[i];
3999 
4000 		read_cmd->opcode = spi_nor_convert_3to4_read(read_cmd->opcode);
4001 	}
4002 
4003 	/* 4BAIT is the only SFDP table that indicates page program support. */
4004 	if (pp_hwcaps & SNOR_HWCAPS_PP)
4005 		spi_nor_set_pp_settings(&params_pp[SNOR_CMD_PP],
4006 					SPINOR_OP_PP_4B, SNOR_PROTO_1_1_1);
4007 	if (pp_hwcaps & SNOR_HWCAPS_PP_1_1_4)
4008 		spi_nor_set_pp_settings(&params_pp[SNOR_CMD_PP_1_1_4],
4009 					SPINOR_OP_PP_1_1_4_4B,
4010 					SNOR_PROTO_1_1_4);
4011 	if (pp_hwcaps & SNOR_HWCAPS_PP_1_4_4)
4012 		spi_nor_set_pp_settings(&params_pp[SNOR_CMD_PP_1_4_4],
4013 					SPINOR_OP_PP_1_4_4_4B,
4014 					SNOR_PROTO_1_4_4);
4015 
4016 	for (i = 0; i < SNOR_ERASE_TYPE_MAX; i++) {
4017 		if (erase_mask & BIT(i))
4018 			erase_type[i].opcode = (dwords[1] >>
4019 						erase_type[i].idx * 8) & 0xFF;
4020 		else
4021 			spi_nor_set_erase_type(&erase_type[i], 0u, 0xFF);
4022 	}
4023 
4024 	/*
4025 	 * We set SNOR_F_HAS_4BAIT in order to skip spi_nor_set_4byte_opcodes()
4026 	 * later because we already did the conversion to 4byte opcodes. Also,
4027 	 * this latest function implements a legacy quirk for the erase size of
4028 	 * Spansion memory. However this quirk is no longer needed with new
4029 	 * SFDP compliant memories.
4030 	 */
4031 	nor->addr_width = 4;
4032 	nor->flags |= SNOR_F_4B_OPCODES | SNOR_F_HAS_4BAIT;
4033 
4034 	/* fall through */
4035 out:
4036 	kfree(dwords);
4037 	return ret;
4038 }
4039 
4040 /**
4041  * spi_nor_parse_sfdp() - parse the Serial Flash Discoverable Parameters.
4042  * @nor:		pointer to a 'struct spi_nor'
4043  * @params:		pointer to the 'struct spi_nor_flash_parameter' to be
4044  *			filled
4045  *
4046  * The Serial Flash Discoverable Parameters are described by the JEDEC JESD216
4047  * specification. This is a standard which tends to supported by almost all
4048  * (Q)SPI memory manufacturers. Those hard-coded tables allow us to learn at
4049  * runtime the main parameters needed to perform basic SPI flash operations such
4050  * as Fast Read, Page Program or Sector Erase commands.
4051  *
4052  * Return: 0 on success, -errno otherwise.
4053  */
spi_nor_parse_sfdp(struct spi_nor * nor,struct spi_nor_flash_parameter * params)4054 static int spi_nor_parse_sfdp(struct spi_nor *nor,
4055 			      struct spi_nor_flash_parameter *params)
4056 {
4057 	const struct sfdp_parameter_header *param_header, *bfpt_header;
4058 	struct sfdp_parameter_header *param_headers = NULL;
4059 	struct sfdp_header header;
4060 	struct device *dev = nor->dev;
4061 	size_t psize;
4062 	int i, err;
4063 
4064 	/* Get the SFDP header. */
4065 	err = spi_nor_read_sfdp_dma_unsafe(nor, 0, sizeof(header), &header);
4066 	if (err < 0)
4067 		return err;
4068 
4069 	/* Check the SFDP header version. */
4070 	if (le32_to_cpu(header.signature) != SFDP_SIGNATURE ||
4071 	    header.major != SFDP_JESD216_MAJOR)
4072 		return -EINVAL;
4073 
4074 	/*
4075 	 * Verify that the first and only mandatory parameter header is a
4076 	 * Basic Flash Parameter Table header as specified in JESD216.
4077 	 */
4078 	bfpt_header = &header.bfpt_header;
4079 	if (SFDP_PARAM_HEADER_ID(bfpt_header) != SFDP_BFPT_ID ||
4080 	    bfpt_header->major != SFDP_JESD216_MAJOR)
4081 		return -EINVAL;
4082 
4083 	/*
4084 	 * Allocate memory then read all parameter headers with a single
4085 	 * Read SFDP command. These parameter headers will actually be parsed
4086 	 * twice: a first time to get the latest revision of the basic flash
4087 	 * parameter table, then a second time to handle the supported optional
4088 	 * tables.
4089 	 * Hence we read the parameter headers once for all to reduce the
4090 	 * processing time. Also we use kmalloc() instead of devm_kmalloc()
4091 	 * because we don't need to keep these parameter headers: the allocated
4092 	 * memory is always released with kfree() before exiting this function.
4093 	 */
4094 	if (header.nph) {
4095 		psize = header.nph * sizeof(*param_headers);
4096 
4097 		param_headers = kmalloc(psize, GFP_KERNEL);
4098 		if (!param_headers)
4099 			return -ENOMEM;
4100 
4101 		err = spi_nor_read_sfdp(nor, sizeof(header),
4102 					psize, param_headers);
4103 		if (err < 0) {
4104 			dev_err(dev, "failed to read SFDP parameter headers\n");
4105 			goto exit;
4106 		}
4107 	}
4108 
4109 	/*
4110 	 * Check other parameter headers to get the latest revision of
4111 	 * the basic flash parameter table.
4112 	 */
4113 	for (i = 0; i < header.nph; i++) {
4114 		param_header = &param_headers[i];
4115 
4116 		if (SFDP_PARAM_HEADER_ID(param_header) == SFDP_BFPT_ID &&
4117 		    param_header->major == SFDP_JESD216_MAJOR &&
4118 		    (param_header->minor > bfpt_header->minor ||
4119 		     (param_header->minor == bfpt_header->minor &&
4120 		      param_header->length > bfpt_header->length)))
4121 			bfpt_header = param_header;
4122 	}
4123 
4124 	err = spi_nor_parse_bfpt(nor, bfpt_header, params);
4125 	if (err)
4126 		goto exit;
4127 
4128 	/* Parse optional parameter tables. */
4129 	for (i = 0; i < header.nph; i++) {
4130 		param_header = &param_headers[i];
4131 
4132 		switch (SFDP_PARAM_HEADER_ID(param_header)) {
4133 		case SFDP_SECTOR_MAP_ID:
4134 			err = spi_nor_parse_smpt(nor, param_header, params);
4135 			break;
4136 
4137 		case SFDP_4BAIT_ID:
4138 			err = spi_nor_parse_4bait(nor, param_header, params);
4139 			break;
4140 
4141 		default:
4142 			break;
4143 		}
4144 
4145 		if (err) {
4146 			dev_warn(dev, "Failed to parse optional parameter table: %04x\n",
4147 				 SFDP_PARAM_HEADER_ID(param_header));
4148 			/*
4149 			 * Let's not drop all information we extracted so far
4150 			 * if optional table parsers fail. In case of failing,
4151 			 * each optional parser is responsible to roll back to
4152 			 * the previously known spi_nor data.
4153 			 */
4154 			err = 0;
4155 		}
4156 	}
4157 
4158 exit:
4159 	kfree(param_headers);
4160 	return err;
4161 }
4162 
spi_nor_select_read(struct spi_nor * nor,u32 shared_hwcaps)4163 static int spi_nor_select_read(struct spi_nor *nor,
4164 			       u32 shared_hwcaps)
4165 {
4166 	int cmd, best_match = fls(shared_hwcaps & SNOR_HWCAPS_READ_MASK) - 1;
4167 	const struct spi_nor_read_command *read;
4168 
4169 	if (best_match < 0)
4170 		return -EINVAL;
4171 
4172 	cmd = spi_nor_hwcaps_read2cmd(BIT(best_match));
4173 	if (cmd < 0)
4174 		return -EINVAL;
4175 
4176 	read = &nor->params.reads[cmd];
4177 	nor->read_opcode = read->opcode;
4178 	nor->read_proto = read->proto;
4179 
4180 	/*
4181 	 * In the spi-nor framework, we don't need to make the difference
4182 	 * between mode clock cycles and wait state clock cycles.
4183 	 * Indeed, the value of the mode clock cycles is used by a QSPI
4184 	 * flash memory to know whether it should enter or leave its 0-4-4
4185 	 * (Continuous Read / XIP) mode.
4186 	 * eXecution In Place is out of the scope of the mtd sub-system.
4187 	 * Hence we choose to merge both mode and wait state clock cycles
4188 	 * into the so called dummy clock cycles.
4189 	 */
4190 	nor->read_dummy = read->num_mode_clocks + read->num_wait_states;
4191 	return 0;
4192 }
4193 
spi_nor_select_pp(struct spi_nor * nor,u32 shared_hwcaps)4194 static int spi_nor_select_pp(struct spi_nor *nor,
4195 			     u32 shared_hwcaps)
4196 {
4197 	int cmd, best_match = fls(shared_hwcaps & SNOR_HWCAPS_PP_MASK) - 1;
4198 	const struct spi_nor_pp_command *pp;
4199 
4200 	if (best_match < 0)
4201 		return -EINVAL;
4202 
4203 	cmd = spi_nor_hwcaps_pp2cmd(BIT(best_match));
4204 	if (cmd < 0)
4205 		return -EINVAL;
4206 
4207 	pp = &nor->params.page_programs[cmd];
4208 	nor->program_opcode = pp->opcode;
4209 	nor->write_proto = pp->proto;
4210 	return 0;
4211 }
4212 
4213 /**
4214  * spi_nor_select_uniform_erase() - select optimum uniform erase type
4215  * @map:		the erase map of the SPI NOR
4216  * @wanted_size:	the erase type size to search for. Contains the value of
4217  *			info->sector_size or of the "small sector" size in case
4218  *			CONFIG_MTD_SPI_NOR_USE_4K_SECTORS is defined.
4219  *
4220  * Once the optimum uniform sector erase command is found, disable all the
4221  * other.
4222  *
4223  * Return: pointer to erase type on success, NULL otherwise.
4224  */
4225 static const struct spi_nor_erase_type *
spi_nor_select_uniform_erase(struct spi_nor_erase_map * map,const u32 wanted_size)4226 spi_nor_select_uniform_erase(struct spi_nor_erase_map *map,
4227 			     const u32 wanted_size)
4228 {
4229 	const struct spi_nor_erase_type *tested_erase, *erase = NULL;
4230 	int i;
4231 	u8 uniform_erase_type = map->uniform_erase_type;
4232 
4233 	for (i = SNOR_ERASE_TYPE_MAX - 1; i >= 0; i--) {
4234 		if (!(uniform_erase_type & BIT(i)))
4235 			continue;
4236 
4237 		tested_erase = &map->erase_type[i];
4238 
4239 		/*
4240 		 * If the current erase size is the one, stop here:
4241 		 * we have found the right uniform Sector Erase command.
4242 		 */
4243 		if (tested_erase->size == wanted_size) {
4244 			erase = tested_erase;
4245 			break;
4246 		}
4247 
4248 		/*
4249 		 * Otherwise, the current erase size is still a valid canditate.
4250 		 * Select the biggest valid candidate.
4251 		 */
4252 		if (!erase && tested_erase->size)
4253 			erase = tested_erase;
4254 			/* keep iterating to find the wanted_size */
4255 	}
4256 
4257 	if (!erase)
4258 		return NULL;
4259 
4260 	/* Disable all other Sector Erase commands. */
4261 	map->uniform_erase_type &= ~SNOR_ERASE_TYPE_MASK;
4262 	map->uniform_erase_type |= BIT(erase - map->erase_type);
4263 	return erase;
4264 }
4265 
spi_nor_select_erase(struct spi_nor * nor)4266 static int spi_nor_select_erase(struct spi_nor *nor)
4267 {
4268 	struct spi_nor_erase_map *map = &nor->params.erase_map;
4269 	const struct spi_nor_erase_type *erase = NULL;
4270 	struct mtd_info *mtd = &nor->mtd;
4271 	u32 wanted_size = nor->info->sector_size;
4272 	int i;
4273 
4274 	/*
4275 	 * The previous implementation handling Sector Erase commands assumed
4276 	 * that the SPI flash memory has an uniform layout then used only one
4277 	 * of the supported erase sizes for all Sector Erase commands.
4278 	 * So to be backward compatible, the new implementation also tries to
4279 	 * manage the SPI flash memory as uniform with a single erase sector
4280 	 * size, when possible.
4281 	 */
4282 #ifdef CONFIG_MTD_SPI_NOR_USE_4K_SECTORS
4283 	/* prefer "small sector" erase if possible */
4284 	wanted_size = 4096u;
4285 #endif
4286 
4287 	if (spi_nor_has_uniform_erase(nor)) {
4288 		erase = spi_nor_select_uniform_erase(map, wanted_size);
4289 		if (!erase)
4290 			return -EINVAL;
4291 		nor->erase_opcode = erase->opcode;
4292 		mtd->erasesize = erase->size;
4293 		return 0;
4294 	}
4295 
4296 	/*
4297 	 * For non-uniform SPI flash memory, set mtd->erasesize to the
4298 	 * maximum erase sector size. No need to set nor->erase_opcode.
4299 	 */
4300 	for (i = SNOR_ERASE_TYPE_MAX - 1; i >= 0; i--) {
4301 		if (map->erase_type[i].size) {
4302 			erase = &map->erase_type[i];
4303 			break;
4304 		}
4305 	}
4306 
4307 	if (!erase)
4308 		return -EINVAL;
4309 
4310 	mtd->erasesize = erase->size;
4311 	return 0;
4312 }
4313 
spi_nor_default_setup(struct spi_nor * nor,const struct spi_nor_hwcaps * hwcaps)4314 static int spi_nor_default_setup(struct spi_nor *nor,
4315 				 const struct spi_nor_hwcaps *hwcaps)
4316 {
4317 	struct spi_nor_flash_parameter *params = &nor->params;
4318 	u32 ignored_mask, shared_mask;
4319 	int err;
4320 
4321 	/*
4322 	 * Keep only the hardware capabilities supported by both the SPI
4323 	 * controller and the SPI flash memory.
4324 	 */
4325 	shared_mask = hwcaps->mask & params->hwcaps.mask;
4326 
4327 	if (nor->spimem) {
4328 		/*
4329 		 * When called from spi_nor_probe(), all caps are set and we
4330 		 * need to discard some of them based on what the SPI
4331 		 * controller actually supports (using spi_mem_supports_op()).
4332 		 */
4333 		spi_nor_spimem_adjust_hwcaps(nor, &shared_mask);
4334 	} else {
4335 		/*
4336 		 * SPI n-n-n protocols are not supported when the SPI
4337 		 * controller directly implements the spi_nor interface.
4338 		 * Yet another reason to switch to spi-mem.
4339 		 */
4340 		ignored_mask = SNOR_HWCAPS_X_X_X;
4341 		if (shared_mask & ignored_mask) {
4342 			dev_dbg(nor->dev,
4343 				"SPI n-n-n protocols are not supported.\n");
4344 			shared_mask &= ~ignored_mask;
4345 		}
4346 	}
4347 
4348 	/* Select the (Fast) Read command. */
4349 	err = spi_nor_select_read(nor, shared_mask);
4350 	if (err) {
4351 		dev_err(nor->dev,
4352 			"can't select read settings supported by both the SPI controller and memory.\n");
4353 		return err;
4354 	}
4355 
4356 	/* Select the Page Program command. */
4357 	err = spi_nor_select_pp(nor, shared_mask);
4358 	if (err) {
4359 		dev_err(nor->dev,
4360 			"can't select write settings supported by both the SPI controller and memory.\n");
4361 		return err;
4362 	}
4363 
4364 	/* Select the Sector Erase command. */
4365 	err = spi_nor_select_erase(nor);
4366 	if (err) {
4367 		dev_err(nor->dev,
4368 			"can't select erase settings supported by both the SPI controller and memory.\n");
4369 		return err;
4370 	}
4371 
4372 	return 0;
4373 }
4374 
spi_nor_setup(struct spi_nor * nor,const struct spi_nor_hwcaps * hwcaps)4375 static int spi_nor_setup(struct spi_nor *nor,
4376 			 const struct spi_nor_hwcaps *hwcaps)
4377 {
4378 	if (!nor->params.setup)
4379 		return 0;
4380 
4381 	return nor->params.setup(nor, hwcaps);
4382 }
4383 
macronix_set_default_init(struct spi_nor * nor)4384 static void macronix_set_default_init(struct spi_nor *nor)
4385 {
4386 	nor->params.quad_enable = macronix_quad_enable;
4387 	nor->params.set_4byte = macronix_set_4byte;
4388 }
4389 
st_micron_set_default_init(struct spi_nor * nor)4390 static void st_micron_set_default_init(struct spi_nor *nor)
4391 {
4392 	nor->flags |= SNOR_F_HAS_LOCK;
4393 	nor->params.quad_enable = NULL;
4394 	nor->params.set_4byte = st_micron_set_4byte;
4395 }
4396 
winbond_set_default_init(struct spi_nor * nor)4397 static void winbond_set_default_init(struct spi_nor *nor)
4398 {
4399 	nor->params.set_4byte = winbond_set_4byte;
4400 }
4401 
4402 /**
4403  * spi_nor_manufacturer_init_params() - Initialize the flash's parameters and
4404  * settings based on MFR register and ->default_init() hook.
4405  * @nor:	pointer to a 'struct spi-nor'.
4406  */
spi_nor_manufacturer_init_params(struct spi_nor * nor)4407 static void spi_nor_manufacturer_init_params(struct spi_nor *nor)
4408 {
4409 	/* Init flash parameters based on MFR */
4410 	switch (JEDEC_MFR(nor->info)) {
4411 	case SNOR_MFR_MACRONIX:
4412 		macronix_set_default_init(nor);
4413 		break;
4414 
4415 	case SNOR_MFR_ST:
4416 	case SNOR_MFR_MICRON:
4417 		st_micron_set_default_init(nor);
4418 		break;
4419 
4420 	case SNOR_MFR_WINBOND:
4421 		winbond_set_default_init(nor);
4422 		break;
4423 
4424 	default:
4425 		break;
4426 	}
4427 
4428 	if (nor->info->fixups && nor->info->fixups->default_init)
4429 		nor->info->fixups->default_init(nor);
4430 }
4431 
4432 /**
4433  * spi_nor_sfdp_init_params() - Initialize the flash's parameters and settings
4434  * based on JESD216 SFDP standard.
4435  * @nor:	pointer to a 'struct spi-nor'.
4436  *
4437  * The method has a roll-back mechanism: in case the SFDP parsing fails, the
4438  * legacy flash parameters and settings will be restored.
4439  */
spi_nor_sfdp_init_params(struct spi_nor * nor)4440 static void spi_nor_sfdp_init_params(struct spi_nor *nor)
4441 {
4442 	struct spi_nor_flash_parameter sfdp_params;
4443 
4444 	memcpy(&sfdp_params, &nor->params, sizeof(sfdp_params));
4445 
4446 	if (spi_nor_parse_sfdp(nor, &sfdp_params)) {
4447 		nor->addr_width = 0;
4448 		nor->flags &= ~SNOR_F_4B_OPCODES;
4449 	} else {
4450 		memcpy(&nor->params, &sfdp_params, sizeof(nor->params));
4451 	}
4452 }
4453 
4454 /**
4455  * spi_nor_info_init_params() - Initialize the flash's parameters and settings
4456  * based on nor->info data.
4457  * @nor:	pointer to a 'struct spi-nor'.
4458  */
spi_nor_info_init_params(struct spi_nor * nor)4459 static void spi_nor_info_init_params(struct spi_nor *nor)
4460 {
4461 	struct spi_nor_flash_parameter *params = &nor->params;
4462 	struct spi_nor_erase_map *map = &params->erase_map;
4463 	const struct flash_info *info = nor->info;
4464 	struct device_node *np = spi_nor_get_flash_node(nor);
4465 	u8 i, erase_mask;
4466 
4467 	/* Initialize legacy flash parameters and settings. */
4468 	params->quad_enable = spansion_quad_enable;
4469 	params->set_4byte = spansion_set_4byte;
4470 	params->setup = spi_nor_default_setup;
4471 
4472 	/* Set SPI NOR sizes. */
4473 	params->size = (u64)info->sector_size * info->n_sectors;
4474 	params->page_size = info->page_size;
4475 
4476 	if (!(info->flags & SPI_NOR_NO_FR)) {
4477 		/* Default to Fast Read for DT and non-DT platform devices. */
4478 		params->hwcaps.mask |= SNOR_HWCAPS_READ_FAST;
4479 
4480 		/* Mask out Fast Read if not requested at DT instantiation. */
4481 		if (np && !of_property_read_bool(np, "m25p,fast-read"))
4482 			params->hwcaps.mask &= ~SNOR_HWCAPS_READ_FAST;
4483 	}
4484 
4485 	/* (Fast) Read settings. */
4486 	params->hwcaps.mask |= SNOR_HWCAPS_READ;
4487 	spi_nor_set_read_settings(&params->reads[SNOR_CMD_READ],
4488 				  0, 0, SPINOR_OP_READ,
4489 				  SNOR_PROTO_1_1_1);
4490 
4491 	if (params->hwcaps.mask & SNOR_HWCAPS_READ_FAST)
4492 		spi_nor_set_read_settings(&params->reads[SNOR_CMD_READ_FAST],
4493 					  0, 8, SPINOR_OP_READ_FAST,
4494 					  SNOR_PROTO_1_1_1);
4495 
4496 	if (info->flags & SPI_NOR_DUAL_READ) {
4497 		params->hwcaps.mask |= SNOR_HWCAPS_READ_1_1_2;
4498 		spi_nor_set_read_settings(&params->reads[SNOR_CMD_READ_1_1_2],
4499 					  0, 8, SPINOR_OP_READ_1_1_2,
4500 					  SNOR_PROTO_1_1_2);
4501 	}
4502 
4503 	if (info->flags & SPI_NOR_QUAD_READ) {
4504 		params->hwcaps.mask |= SNOR_HWCAPS_READ_1_1_4;
4505 		spi_nor_set_read_settings(&params->reads[SNOR_CMD_READ_1_1_4],
4506 					  0, 8, SPINOR_OP_READ_1_1_4,
4507 					  SNOR_PROTO_1_1_4);
4508 	}
4509 
4510 	if (info->flags & SPI_NOR_OCTAL_READ) {
4511 		params->hwcaps.mask |= SNOR_HWCAPS_READ_1_1_8;
4512 		spi_nor_set_read_settings(&params->reads[SNOR_CMD_READ_1_1_8],
4513 					  0, 8, SPINOR_OP_READ_1_1_8,
4514 					  SNOR_PROTO_1_1_8);
4515 	}
4516 
4517 	/* Page Program settings. */
4518 	params->hwcaps.mask |= SNOR_HWCAPS_PP;
4519 	spi_nor_set_pp_settings(&params->page_programs[SNOR_CMD_PP],
4520 				SPINOR_OP_PP, SNOR_PROTO_1_1_1);
4521 
4522 	/*
4523 	 * Sector Erase settings. Sort Erase Types in ascending order, with the
4524 	 * smallest erase size starting at BIT(0).
4525 	 */
4526 	erase_mask = 0;
4527 	i = 0;
4528 	if (info->flags & SECT_4K_PMC) {
4529 		erase_mask |= BIT(i);
4530 		spi_nor_set_erase_type(&map->erase_type[i], 4096u,
4531 				       SPINOR_OP_BE_4K_PMC);
4532 		i++;
4533 	} else if (info->flags & SECT_4K) {
4534 		erase_mask |= BIT(i);
4535 		spi_nor_set_erase_type(&map->erase_type[i], 4096u,
4536 				       SPINOR_OP_BE_4K);
4537 		i++;
4538 	}
4539 	erase_mask |= BIT(i);
4540 	spi_nor_set_erase_type(&map->erase_type[i], info->sector_size,
4541 			       SPINOR_OP_SE);
4542 	spi_nor_init_uniform_erase_map(map, erase_mask, params->size);
4543 }
4544 
spansion_post_sfdp_fixups(struct spi_nor * nor)4545 static void spansion_post_sfdp_fixups(struct spi_nor *nor)
4546 {
4547 	if (nor->params.size <= SZ_16M)
4548 		return;
4549 
4550 	nor->flags |= SNOR_F_4B_OPCODES;
4551 	/* No small sector erase for 4-byte command set */
4552 	nor->erase_opcode = SPINOR_OP_SE;
4553 	nor->mtd.erasesize = nor->info->sector_size;
4554 }
4555 
s3an_post_sfdp_fixups(struct spi_nor * nor)4556 static void s3an_post_sfdp_fixups(struct spi_nor *nor)
4557 {
4558 	nor->params.setup = s3an_nor_setup;
4559 }
4560 
4561 /**
4562  * spi_nor_post_sfdp_fixups() - Updates the flash's parameters and settings
4563  * after SFDP has been parsed (is also called for SPI NORs that do not
4564  * support RDSFDP).
4565  * @nor:	pointer to a 'struct spi_nor'
4566  *
4567  * Typically used to tweak various parameters that could not be extracted by
4568  * other means (i.e. when information provided by the SFDP/flash_info tables
4569  * are incomplete or wrong).
4570  */
spi_nor_post_sfdp_fixups(struct spi_nor * nor)4571 static void spi_nor_post_sfdp_fixups(struct spi_nor *nor)
4572 {
4573 	switch (JEDEC_MFR(nor->info)) {
4574 	case SNOR_MFR_SPANSION:
4575 		spansion_post_sfdp_fixups(nor);
4576 		break;
4577 
4578 	default:
4579 		break;
4580 	}
4581 
4582 	if (nor->info->flags & SPI_S3AN)
4583 		s3an_post_sfdp_fixups(nor);
4584 
4585 	if (nor->info->fixups && nor->info->fixups->post_sfdp)
4586 		nor->info->fixups->post_sfdp(nor);
4587 }
4588 
4589 /**
4590  * spi_nor_late_init_params() - Late initialization of default flash parameters.
4591  * @nor:	pointer to a 'struct spi_nor'
4592  *
4593  * Used to set default flash parameters and settings when the ->default_init()
4594  * hook or the SFDP parser let voids.
4595  */
spi_nor_late_init_params(struct spi_nor * nor)4596 static void spi_nor_late_init_params(struct spi_nor *nor)
4597 {
4598 	/*
4599 	 * NOR protection support. When locking_ops are not provided, we pick
4600 	 * the default ones.
4601 	 */
4602 	if (nor->flags & SNOR_F_HAS_LOCK && !nor->params.locking_ops)
4603 		nor->params.locking_ops = &stm_locking_ops;
4604 }
4605 
4606 /**
4607  * spi_nor_init_params() - Initialize the flash's parameters and settings.
4608  * @nor:	pointer to a 'struct spi-nor'.
4609  *
4610  * The flash parameters and settings are initialized based on a sequence of
4611  * calls that are ordered by priority:
4612  *
4613  * 1/ Default flash parameters initialization. The initializations are done
4614  *    based on nor->info data:
4615  *		spi_nor_info_init_params()
4616  *
4617  * which can be overwritten by:
4618  * 2/ Manufacturer flash parameters initialization. The initializations are
4619  *    done based on MFR register, or when the decisions can not be done solely
4620  *    based on MFR, by using specific flash_info tweeks, ->default_init():
4621  *		spi_nor_manufacturer_init_params()
4622  *
4623  * which can be overwritten by:
4624  * 3/ SFDP flash parameters initialization. JESD216 SFDP is a standard and
4625  *    should be more accurate that the above.
4626  *		spi_nor_sfdp_init_params()
4627  *
4628  *    Please note that there is a ->post_bfpt() fixup hook that can overwrite
4629  *    the flash parameters and settings immediately after parsing the Basic
4630  *    Flash Parameter Table.
4631  *
4632  * which can be overwritten by:
4633  * 4/ Post SFDP flash parameters initialization. Used to tweak various
4634  *    parameters that could not be extracted by other means (i.e. when
4635  *    information provided by the SFDP/flash_info tables are incomplete or
4636  *    wrong).
4637  *		spi_nor_post_sfdp_fixups()
4638  *
4639  * 5/ Late default flash parameters initialization, used when the
4640  * ->default_init() hook or the SFDP parser do not set specific params.
4641  *		spi_nor_late_init_params()
4642  */
spi_nor_init_params(struct spi_nor * nor)4643 static void spi_nor_init_params(struct spi_nor *nor)
4644 {
4645 	spi_nor_info_init_params(nor);
4646 
4647 	spi_nor_manufacturer_init_params(nor);
4648 
4649 	if ((nor->info->flags & (SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ)) &&
4650 	    !(nor->info->flags & SPI_NOR_SKIP_SFDP))
4651 		spi_nor_sfdp_init_params(nor);
4652 
4653 	spi_nor_post_sfdp_fixups(nor);
4654 
4655 	spi_nor_late_init_params(nor);
4656 }
4657 
4658 /**
4659  * spi_nor_quad_enable() - enable Quad I/O if needed.
4660  * @nor:                pointer to a 'struct spi_nor'
4661  *
4662  * Return: 0 on success, -errno otherwise.
4663  */
spi_nor_quad_enable(struct spi_nor * nor)4664 static int spi_nor_quad_enable(struct spi_nor *nor)
4665 {
4666 	if (!nor->params.quad_enable)
4667 		return 0;
4668 
4669 	if (!(spi_nor_get_protocol_width(nor->read_proto) == 4 ||
4670 	      spi_nor_get_protocol_width(nor->write_proto) == 4))
4671 		return 0;
4672 
4673 	return nor->params.quad_enable(nor);
4674 }
4675 
spi_nor_init(struct spi_nor * nor)4676 static int spi_nor_init(struct spi_nor *nor)
4677 {
4678 	int err;
4679 
4680 	if (nor->clear_sr_bp) {
4681 		if (nor->params.quad_enable == spansion_quad_enable)
4682 			nor->clear_sr_bp = spi_nor_spansion_clear_sr_bp;
4683 
4684 		err = nor->clear_sr_bp(nor);
4685 		if (err) {
4686 			dev_err(nor->dev,
4687 				"fail to clear block protection bits\n");
4688 			return err;
4689 		}
4690 	}
4691 
4692 	err = spi_nor_quad_enable(nor);
4693 	if (err) {
4694 		dev_err(nor->dev, "quad mode not supported\n");
4695 		return err;
4696 	}
4697 
4698 	if (nor->addr_width == 4 && !(nor->flags & SNOR_F_4B_OPCODES)) {
4699 		/*
4700 		 * If the RESET# pin isn't hooked up properly, or the system
4701 		 * otherwise doesn't perform a reset command in the boot
4702 		 * sequence, it's impossible to 100% protect against unexpected
4703 		 * reboots (e.g., crashes). Warn the user (or hopefully, system
4704 		 * designer) that this is bad.
4705 		 */
4706 		WARN_ONCE(nor->flags & SNOR_F_BROKEN_RESET,
4707 			  "enabling reset hack; may not recover from unexpected reboots\n");
4708 		nor->params.set_4byte(nor, true);
4709 	}
4710 
4711 	return 0;
4712 }
4713 
4714 /* mtd resume handler */
spi_nor_resume(struct mtd_info * mtd)4715 static void spi_nor_resume(struct mtd_info *mtd)
4716 {
4717 	struct spi_nor *nor = mtd_to_spi_nor(mtd);
4718 	struct device *dev = nor->dev;
4719 	int ret;
4720 
4721 	/* re-initialize the nor chip */
4722 	ret = spi_nor_init(nor);
4723 	if (ret)
4724 		dev_err(dev, "resume() failed\n");
4725 }
4726 
spi_nor_restore(struct spi_nor * nor)4727 void spi_nor_restore(struct spi_nor *nor)
4728 {
4729 	/* restore the addressing mode */
4730 	if (nor->addr_width == 4 && !(nor->flags & SNOR_F_4B_OPCODES) &&
4731 	    nor->flags & SNOR_F_BROKEN_RESET)
4732 		nor->params.set_4byte(nor, false);
4733 }
4734 EXPORT_SYMBOL_GPL(spi_nor_restore);
4735 
spi_nor_match_id(const char * name)4736 static const struct flash_info *spi_nor_match_id(const char *name)
4737 {
4738 	const struct flash_info *id = spi_nor_ids;
4739 
4740 	while (id->name) {
4741 		if (!strcmp(name, id->name))
4742 			return id;
4743 		id++;
4744 	}
4745 	return NULL;
4746 }
4747 
spi_nor_set_addr_width(struct spi_nor * nor)4748 static int spi_nor_set_addr_width(struct spi_nor *nor)
4749 {
4750 	if (nor->addr_width) {
4751 		/* already configured from SFDP */
4752 	} else if (nor->info->addr_width) {
4753 		nor->addr_width = nor->info->addr_width;
4754 	} else if (nor->mtd.size > 0x1000000) {
4755 		/* enable 4-byte addressing if the device exceeds 16MiB */
4756 		nor->addr_width = 4;
4757 	} else {
4758 		nor->addr_width = 3;
4759 	}
4760 
4761 	if (nor->addr_width > SPI_NOR_MAX_ADDR_WIDTH) {
4762 		dev_err(nor->dev, "address width is too large: %u\n",
4763 			nor->addr_width);
4764 		return -EINVAL;
4765 	}
4766 
4767 	/* Set 4byte opcodes when possible. */
4768 	if (nor->addr_width == 4 && nor->flags & SNOR_F_4B_OPCODES &&
4769 	    !(nor->flags & SNOR_F_HAS_4BAIT))
4770 		spi_nor_set_4byte_opcodes(nor);
4771 
4772 	return 0;
4773 }
4774 
spi_nor_debugfs_init(struct spi_nor * nor,const struct flash_info * info)4775 static void spi_nor_debugfs_init(struct spi_nor *nor,
4776 				 const struct flash_info *info)
4777 {
4778 	struct mtd_info *mtd = &nor->mtd;
4779 
4780 	mtd->dbg.partname = info->name;
4781 	mtd->dbg.partid = devm_kasprintf(nor->dev, GFP_KERNEL, "spi-nor:%*phN",
4782 					 info->id_len, info->id);
4783 }
4784 
spi_nor_get_flash_info(struct spi_nor * nor,const char * name)4785 static const struct flash_info *spi_nor_get_flash_info(struct spi_nor *nor,
4786 						       const char *name)
4787 {
4788 	const struct flash_info *info = NULL;
4789 
4790 	if (name)
4791 		info = spi_nor_match_id(name);
4792 	/* Try to auto-detect if chip name wasn't specified or not found */
4793 	if (!info)
4794 		info = spi_nor_read_id(nor);
4795 	if (IS_ERR_OR_NULL(info))
4796 		return ERR_PTR(-ENOENT);
4797 
4798 	/*
4799 	 * If caller has specified name of flash model that can normally be
4800 	 * detected using JEDEC, let's verify it.
4801 	 */
4802 	if (name && info->id_len) {
4803 		const struct flash_info *jinfo;
4804 
4805 		jinfo = spi_nor_read_id(nor);
4806 		if (IS_ERR(jinfo)) {
4807 			return jinfo;
4808 		} else if (jinfo != info) {
4809 			/*
4810 			 * JEDEC knows better, so overwrite platform ID. We
4811 			 * can't trust partitions any longer, but we'll let
4812 			 * mtd apply them anyway, since some partitions may be
4813 			 * marked read-only, and we don't want to lose that
4814 			 * information, even if it's not 100% accurate.
4815 			 */
4816 			dev_warn(nor->dev, "found %s, expected %s\n",
4817 				 jinfo->name, info->name);
4818 			info = jinfo;
4819 		}
4820 	}
4821 
4822 	return info;
4823 }
4824 
spi_nor_scan(struct spi_nor * nor,const char * name,const struct spi_nor_hwcaps * hwcaps)4825 int spi_nor_scan(struct spi_nor *nor, const char *name,
4826 		 const struct spi_nor_hwcaps *hwcaps)
4827 {
4828 	const struct flash_info *info;
4829 	struct device *dev = nor->dev;
4830 	struct mtd_info *mtd = &nor->mtd;
4831 	struct device_node *np = spi_nor_get_flash_node(nor);
4832 	struct spi_nor_flash_parameter *params = &nor->params;
4833 	int ret;
4834 	int i;
4835 
4836 	ret = spi_nor_check(nor);
4837 	if (ret)
4838 		return ret;
4839 
4840 	/* Reset SPI protocol for all commands. */
4841 	nor->reg_proto = SNOR_PROTO_1_1_1;
4842 	nor->read_proto = SNOR_PROTO_1_1_1;
4843 	nor->write_proto = SNOR_PROTO_1_1_1;
4844 
4845 	/*
4846 	 * We need the bounce buffer early to read/write registers when going
4847 	 * through the spi-mem layer (buffers have to be DMA-able).
4848 	 * For spi-mem drivers, we'll reallocate a new buffer if
4849 	 * nor->page_size turns out to be greater than PAGE_SIZE (which
4850 	 * shouldn't happen before long since NOR pages are usually less
4851 	 * than 1KB) after spi_nor_scan() returns.
4852 	 */
4853 	nor->bouncebuf_size = PAGE_SIZE;
4854 	nor->bouncebuf = devm_kmalloc(dev, nor->bouncebuf_size,
4855 				      GFP_KERNEL);
4856 	if (!nor->bouncebuf)
4857 		return -ENOMEM;
4858 
4859 	info = spi_nor_get_flash_info(nor, name);
4860 	if (IS_ERR(info))
4861 		return PTR_ERR(info);
4862 
4863 	nor->info = info;
4864 
4865 	spi_nor_debugfs_init(nor, info);
4866 
4867 	mutex_init(&nor->lock);
4868 
4869 	/*
4870 	 * Make sure the XSR_RDY flag is set before calling
4871 	 * spi_nor_wait_till_ready(). Xilinx S3AN share MFR
4872 	 * with Atmel spi-nor
4873 	 */
4874 	if (info->flags & SPI_NOR_XSR_RDY)
4875 		nor->flags |=  SNOR_F_READY_XSR_RDY;
4876 
4877 	if (info->flags & SPI_NOR_HAS_LOCK)
4878 		nor->flags |= SNOR_F_HAS_LOCK;
4879 
4880 	/*
4881 	 * Atmel, SST, Intel/Numonyx, and others serial NOR tend to power up
4882 	 * with the software protection bits set.
4883 	 */
4884 	if (JEDEC_MFR(nor->info) == SNOR_MFR_ATMEL ||
4885 	    JEDEC_MFR(nor->info) == SNOR_MFR_INTEL ||
4886 	    JEDEC_MFR(nor->info) == SNOR_MFR_SST ||
4887 	    nor->info->flags & SPI_NOR_HAS_LOCK)
4888 		nor->clear_sr_bp = spi_nor_clear_sr_bp;
4889 
4890 	/* Init flash parameters based on flash_info struct and SFDP */
4891 	spi_nor_init_params(nor);
4892 
4893 	if (!mtd->name)
4894 		mtd->name = dev_name(dev);
4895 	mtd->priv = nor;
4896 	mtd->type = MTD_NORFLASH;
4897 	mtd->writesize = 1;
4898 	mtd->flags = MTD_CAP_NORFLASH;
4899 	mtd->size = params->size;
4900 	mtd->_erase = spi_nor_erase;
4901 	mtd->_read = spi_nor_read;
4902 	mtd->_resume = spi_nor_resume;
4903 
4904 	if (nor->params.locking_ops) {
4905 		mtd->_lock = spi_nor_lock;
4906 		mtd->_unlock = spi_nor_unlock;
4907 		mtd->_is_locked = spi_nor_is_locked;
4908 	}
4909 
4910 	/* sst nor chips use AAI word program */
4911 	if (info->flags & SST_WRITE)
4912 		mtd->_write = sst_write;
4913 	else
4914 		mtd->_write = spi_nor_write;
4915 
4916 	if (info->flags & USE_FSR)
4917 		nor->flags |= SNOR_F_USE_FSR;
4918 	if (info->flags & SPI_NOR_HAS_TB)
4919 		nor->flags |= SNOR_F_HAS_SR_TB;
4920 	if (info->flags & NO_CHIP_ERASE)
4921 		nor->flags |= SNOR_F_NO_OP_CHIP_ERASE;
4922 	if (info->flags & USE_CLSR)
4923 		nor->flags |= SNOR_F_USE_CLSR;
4924 
4925 	if (info->flags & SPI_NOR_NO_ERASE)
4926 		mtd->flags |= MTD_NO_ERASE;
4927 
4928 	mtd->dev.parent = dev;
4929 	nor->page_size = params->page_size;
4930 	mtd->writebufsize = nor->page_size;
4931 
4932 	if (of_property_read_bool(np, "broken-flash-reset"))
4933 		nor->flags |= SNOR_F_BROKEN_RESET;
4934 
4935 	/*
4936 	 * Configure the SPI memory:
4937 	 * - select op codes for (Fast) Read, Page Program and Sector Erase.
4938 	 * - set the number of dummy cycles (mode cycles + wait states).
4939 	 * - set the SPI protocols for register and memory accesses.
4940 	 */
4941 	ret = spi_nor_setup(nor, hwcaps);
4942 	if (ret)
4943 		return ret;
4944 
4945 	if (info->flags & SPI_NOR_4B_OPCODES)
4946 		nor->flags |= SNOR_F_4B_OPCODES;
4947 
4948 	ret = spi_nor_set_addr_width(nor);
4949 	if (ret)
4950 		return ret;
4951 
4952 	/* Send all the required SPI flash commands to initialize device */
4953 	ret = spi_nor_init(nor);
4954 	if (ret)
4955 		return ret;
4956 
4957 	dev_info(dev, "%s (%lld Kbytes)\n", info->name,
4958 			(long long)mtd->size >> 10);
4959 
4960 	dev_dbg(dev,
4961 		"mtd .name = %s, .size = 0x%llx (%lldMiB), "
4962 		".erasesize = 0x%.8x (%uKiB) .numeraseregions = %d\n",
4963 		mtd->name, (long long)mtd->size, (long long)(mtd->size >> 20),
4964 		mtd->erasesize, mtd->erasesize / 1024, mtd->numeraseregions);
4965 
4966 	if (mtd->numeraseregions)
4967 		for (i = 0; i < mtd->numeraseregions; i++)
4968 			dev_dbg(dev,
4969 				"mtd.eraseregions[%d] = { .offset = 0x%llx, "
4970 				".erasesize = 0x%.8x (%uKiB), "
4971 				".numblocks = %d }\n",
4972 				i, (long long)mtd->eraseregions[i].offset,
4973 				mtd->eraseregions[i].erasesize,
4974 				mtd->eraseregions[i].erasesize / 1024,
4975 				mtd->eraseregions[i].numblocks);
4976 	return 0;
4977 }
4978 EXPORT_SYMBOL_GPL(spi_nor_scan);
4979 
spi_nor_probe(struct spi_mem * spimem)4980 static int spi_nor_probe(struct spi_mem *spimem)
4981 {
4982 	struct spi_device *spi = spimem->spi;
4983 	struct flash_platform_data *data = dev_get_platdata(&spi->dev);
4984 	struct spi_nor *nor;
4985 	/*
4986 	 * Enable all caps by default. The core will mask them after
4987 	 * checking what's really supported using spi_mem_supports_op().
4988 	 */
4989 	const struct spi_nor_hwcaps hwcaps = { .mask = SNOR_HWCAPS_ALL };
4990 	char *flash_name;
4991 	int ret;
4992 
4993 	nor = devm_kzalloc(&spi->dev, sizeof(*nor), GFP_KERNEL);
4994 	if (!nor)
4995 		return -ENOMEM;
4996 
4997 	nor->spimem = spimem;
4998 	nor->dev = &spi->dev;
4999 	spi_nor_set_flash_node(nor, spi->dev.of_node);
5000 
5001 	spi_mem_set_drvdata(spimem, nor);
5002 
5003 	if (data && data->name)
5004 		nor->mtd.name = data->name;
5005 
5006 	if (!nor->mtd.name)
5007 		nor->mtd.name = spi_mem_get_name(spimem);
5008 
5009 	/*
5010 	 * For some (historical?) reason many platforms provide two different
5011 	 * names in flash_platform_data: "name" and "type". Quite often name is
5012 	 * set to "m25p80" and then "type" provides a real chip name.
5013 	 * If that's the case, respect "type" and ignore a "name".
5014 	 */
5015 	if (data && data->type)
5016 		flash_name = data->type;
5017 	else if (!strcmp(spi->modalias, "spi-nor"))
5018 		flash_name = NULL; /* auto-detect */
5019 	else
5020 		flash_name = spi->modalias;
5021 
5022 	ret = spi_nor_scan(nor, flash_name, &hwcaps);
5023 	if (ret)
5024 		return ret;
5025 
5026 	/*
5027 	 * None of the existing parts have > 512B pages, but let's play safe
5028 	 * and add this logic so that if anyone ever adds support for such
5029 	 * a NOR we don't end up with buffer overflows.
5030 	 */
5031 	if (nor->page_size > PAGE_SIZE) {
5032 		nor->bouncebuf_size = nor->page_size;
5033 		devm_kfree(nor->dev, nor->bouncebuf);
5034 		nor->bouncebuf = devm_kmalloc(nor->dev,
5035 					      nor->bouncebuf_size,
5036 					      GFP_KERNEL);
5037 		if (!nor->bouncebuf)
5038 			return -ENOMEM;
5039 	}
5040 
5041 	return mtd_device_register(&nor->mtd, data ? data->parts : NULL,
5042 				   data ? data->nr_parts : 0);
5043 }
5044 
spi_nor_remove(struct spi_mem * spimem)5045 static int spi_nor_remove(struct spi_mem *spimem)
5046 {
5047 	struct spi_nor *nor = spi_mem_get_drvdata(spimem);
5048 
5049 	spi_nor_restore(nor);
5050 
5051 	/* Clean up MTD stuff. */
5052 	return mtd_device_unregister(&nor->mtd);
5053 }
5054 
spi_nor_shutdown(struct spi_mem * spimem)5055 static void spi_nor_shutdown(struct spi_mem *spimem)
5056 {
5057 	struct spi_nor *nor = spi_mem_get_drvdata(spimem);
5058 
5059 	spi_nor_restore(nor);
5060 }
5061 
5062 /*
5063  * Do NOT add to this array without reading the following:
5064  *
5065  * Historically, many flash devices are bound to this driver by their name. But
5066  * since most of these flash are compatible to some extent, and their
5067  * differences can often be differentiated by the JEDEC read-ID command, we
5068  * encourage new users to add support to the spi-nor library, and simply bind
5069  * against a generic string here (e.g., "jedec,spi-nor").
5070  *
5071  * Many flash names are kept here in this list (as well as in spi-nor.c) to
5072  * keep them available as module aliases for existing platforms.
5073  */
5074 static const struct spi_device_id spi_nor_dev_ids[] = {
5075 	/*
5076 	 * Allow non-DT platform devices to bind to the "spi-nor" modalias, and
5077 	 * hack around the fact that the SPI core does not provide uevent
5078 	 * matching for .of_match_table
5079 	 */
5080 	{"spi-nor"},
5081 
5082 	/*
5083 	 * Entries not used in DTs that should be safe to drop after replacing
5084 	 * them with "spi-nor" in platform data.
5085 	 */
5086 	{"s25sl064a"},	{"w25x16"},	{"m25p10"},	{"m25px64"},
5087 
5088 	/*
5089 	 * Entries that were used in DTs without "jedec,spi-nor" fallback and
5090 	 * should be kept for backward compatibility.
5091 	 */
5092 	{"at25df321a"},	{"at25df641"},	{"at26df081a"},
5093 	{"mx25l4005a"},	{"mx25l1606e"},	{"mx25l6405d"},	{"mx25l12805d"},
5094 	{"mx25l25635e"},{"mx66l51235l"},
5095 	{"n25q064"},	{"n25q128a11"},	{"n25q128a13"},	{"n25q512a"},
5096 	{"s25fl256s1"},	{"s25fl512s"},	{"s25sl12801"},	{"s25fl008k"},
5097 	{"s25fl064k"},
5098 	{"sst25vf040b"},{"sst25vf016b"},{"sst25vf032b"},{"sst25wf040"},
5099 	{"m25p40"},	{"m25p80"},	{"m25p16"},	{"m25p32"},
5100 	{"m25p64"},	{"m25p128"},
5101 	{"w25x80"},	{"w25x32"},	{"w25q32"},	{"w25q32dw"},
5102 	{"w25q80bl"},	{"w25q128"},	{"w25q256"},
5103 
5104 	/* Flashes that can't be detected using JEDEC */
5105 	{"m25p05-nonjedec"},	{"m25p10-nonjedec"},	{"m25p20-nonjedec"},
5106 	{"m25p40-nonjedec"},	{"m25p80-nonjedec"},	{"m25p16-nonjedec"},
5107 	{"m25p32-nonjedec"},	{"m25p64-nonjedec"},	{"m25p128-nonjedec"},
5108 
5109 	/* Everspin MRAMs (non-JEDEC) */
5110 	{ "mr25h128" }, /* 128 Kib, 40 MHz */
5111 	{ "mr25h256" }, /* 256 Kib, 40 MHz */
5112 	{ "mr25h10" },  /*   1 Mib, 40 MHz */
5113 	{ "mr25h40" },  /*   4 Mib, 40 MHz */
5114 
5115 	{ },
5116 };
5117 MODULE_DEVICE_TABLE(spi, spi_nor_dev_ids);
5118 
5119 static const struct of_device_id spi_nor_of_table[] = {
5120 	/*
5121 	 * Generic compatibility for SPI NOR that can be identified by the
5122 	 * JEDEC READ ID opcode (0x9F). Use this, if possible.
5123 	 */
5124 	{ .compatible = "jedec,spi-nor" },
5125 	{ /* sentinel */ },
5126 };
5127 MODULE_DEVICE_TABLE(of, spi_nor_of_table);
5128 
5129 /*
5130  * REVISIT: many of these chips have deep power-down modes, which
5131  * should clearly be entered on suspend() to minimize power use.
5132  * And also when they're otherwise idle...
5133  */
5134 static struct spi_mem_driver spi_nor_driver = {
5135 	.spidrv = {
5136 		.driver = {
5137 			.name = "spi-nor",
5138 			.of_match_table = spi_nor_of_table,
5139 		},
5140 		.id_table = spi_nor_dev_ids,
5141 	},
5142 	.probe = spi_nor_probe,
5143 	.remove = spi_nor_remove,
5144 	.shutdown = spi_nor_shutdown,
5145 };
5146 module_spi_mem_driver(spi_nor_driver);
5147 
5148 MODULE_LICENSE("GPL v2");
5149 MODULE_AUTHOR("Huang Shijie <shijie8@gmail.com>");
5150 MODULE_AUTHOR("Mike Lavender");
5151 MODULE_DESCRIPTION("framework for SPI NOR");
5152