]> asedeno.scripts.mit.edu Git - linux.git/blob - drivers/mtd/spi-nor/spi-nor.c
mtd: spi-nor: Fix S3AN addressing calculation
[linux.git] / drivers / mtd / spi-nor / spi-nor.c
1 /*
2  * Based on m25p80.c, by Mike Lavender (mike@steroidmicros.com), with
3  * influence from lart.c (Abraham Van Der Merwe) and mtd_dataflash.c
4  *
5  * Copyright (C) 2005, Intec Automation Inc.
6  * Copyright (C) 2014, Freescale Semiconductor, Inc.
7  *
8  * This code is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  */
12
13 #include <linux/err.h>
14 #include <linux/errno.h>
15 #include <linux/module.h>
16 #include <linux/device.h>
17 #include <linux/mutex.h>
18 #include <linux/math64.h>
19 #include <linux/sizes.h>
20
21 #include <linux/mtd/mtd.h>
22 #include <linux/of_platform.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 flash_info {
44         char            *name;
45
46         /*
47          * This array stores the ID bytes.
48          * The first three bytes are the JEDIC ID.
49          * JEDEC ID zero means "no ID" (mostly older chips).
50          */
51         u8              id[SPI_NOR_MAX_ID_LEN];
52         u8              id_len;
53
54         /* The size listed here is what works with SPINOR_OP_SE, which isn't
55          * necessarily called a "sector" by the vendor.
56          */
57         unsigned        sector_size;
58         u16             n_sectors;
59
60         u16             page_size;
61         u16             addr_width;
62
63         u16             flags;
64 #define SECT_4K                 BIT(0)  /* SPINOR_OP_BE_4K works uniformly */
65 #define SPI_NOR_NO_ERASE        BIT(1)  /* No erase command needed */
66 #define SST_WRITE               BIT(2)  /* use SST byte programming */
67 #define SPI_NOR_NO_FR           BIT(3)  /* Can't do fastread */
68 #define SECT_4K_PMC             BIT(4)  /* SPINOR_OP_BE_4K_PMC works uniformly */
69 #define SPI_NOR_DUAL_READ       BIT(5)  /* Flash supports Dual Read */
70 #define SPI_NOR_QUAD_READ       BIT(6)  /* Flash supports Quad Read */
71 #define USE_FSR                 BIT(7)  /* use flag status register */
72 #define SPI_NOR_HAS_LOCK        BIT(8)  /* Flash supports lock/unlock via SR */
73 #define SPI_NOR_HAS_TB          BIT(9)  /*
74                                          * Flash SR has Top/Bottom (TB) protect
75                                          * bit. Must be used with
76                                          * SPI_NOR_HAS_LOCK.
77                                          */
78 #define SPI_S3AN                BIT(10) /*
79                                          * Xilinx Spartan 3AN In-System Flash
80                                          * (MFR cannot be used for probing
81                                          * because it has the same value as
82                                          * ATMEL flashes)
83                                          */
84 #define SPI_NOR_4B_OPCODES      BIT(11) /*
85                                          * Use dedicated 4byte address op codes
86                                          * to support memory size above 128Mib.
87                                          */
88 };
89
90 #define JEDEC_MFR(info) ((info)->id[0])
91
92 static const struct flash_info *spi_nor_match_id(const char *name);
93
94 /*
95  * Read the status register, returning its value in the location
96  * Return the status register value.
97  * Returns negative if error occurred.
98  */
99 static int read_sr(struct spi_nor *nor)
100 {
101         int ret;
102         u8 val;
103
104         ret = nor->read_reg(nor, SPINOR_OP_RDSR, &val, 1);
105         if (ret < 0) {
106                 pr_err("error %d reading SR\n", (int) ret);
107                 return ret;
108         }
109
110         return val;
111 }
112
113 /*
114  * Read the flag status register, returning its value in the location
115  * Return the status register value.
116  * Returns negative if error occurred.
117  */
118 static int read_fsr(struct spi_nor *nor)
119 {
120         int ret;
121         u8 val;
122
123         ret = nor->read_reg(nor, SPINOR_OP_RDFSR, &val, 1);
124         if (ret < 0) {
125                 pr_err("error %d reading FSR\n", ret);
126                 return ret;
127         }
128
129         return val;
130 }
131
132 /*
133  * Read configuration register, returning its value in the
134  * location. Return the configuration register value.
135  * Returns negative if error occured.
136  */
137 static int read_cr(struct spi_nor *nor)
138 {
139         int ret;
140         u8 val;
141
142         ret = nor->read_reg(nor, SPINOR_OP_RDCR, &val, 1);
143         if (ret < 0) {
144                 dev_err(nor->dev, "error %d reading CR\n", ret);
145                 return ret;
146         }
147
148         return val;
149 }
150
151 /*
152  * Dummy Cycle calculation for different type of read.
153  * It can be used to support more commands with
154  * different dummy cycle requirements.
155  */
156 static inline int spi_nor_read_dummy_cycles(struct spi_nor *nor)
157 {
158         switch (nor->flash_read) {
159         case SPI_NOR_FAST:
160         case SPI_NOR_DUAL:
161         case SPI_NOR_QUAD:
162                 return 8;
163         case SPI_NOR_NORMAL:
164                 return 0;
165         }
166         return 0;
167 }
168
169 /*
170  * Write status register 1 byte
171  * Returns negative if error occurred.
172  */
173 static inline int write_sr(struct spi_nor *nor, u8 val)
174 {
175         nor->cmd_buf[0] = val;
176         return nor->write_reg(nor, SPINOR_OP_WRSR, nor->cmd_buf, 1);
177 }
178
179 /*
180  * Set write enable latch with Write Enable command.
181  * Returns negative if error occurred.
182  */
183 static inline int write_enable(struct spi_nor *nor)
184 {
185         return nor->write_reg(nor, SPINOR_OP_WREN, NULL, 0);
186 }
187
188 /*
189  * Send write disble instruction to the chip.
190  */
191 static inline int write_disable(struct spi_nor *nor)
192 {
193         return nor->write_reg(nor, SPINOR_OP_WRDI, NULL, 0);
194 }
195
196 static inline struct spi_nor *mtd_to_spi_nor(struct mtd_info *mtd)
197 {
198         return mtd->priv;
199 }
200
201
202 static u8 spi_nor_convert_opcode(u8 opcode, const u8 table[][2], size_t size)
203 {
204         size_t i;
205
206         for (i = 0; i < size; i++)
207                 if (table[i][0] == opcode)
208                         return table[i][1];
209
210         /* No conversion found, keep input op code. */
211         return opcode;
212 }
213
214 static inline u8 spi_nor_convert_3to4_read(u8 opcode)
215 {
216         static const u8 spi_nor_3to4_read[][2] = {
217                 { SPINOR_OP_READ,       SPINOR_OP_READ_4B },
218                 { SPINOR_OP_READ_FAST,  SPINOR_OP_READ_FAST_4B },
219                 { SPINOR_OP_READ_1_1_2, SPINOR_OP_READ_1_1_2_4B },
220                 { SPINOR_OP_READ_1_2_2, SPINOR_OP_READ_1_2_2_4B },
221                 { SPINOR_OP_READ_1_1_4, SPINOR_OP_READ_1_1_4_4B },
222                 { SPINOR_OP_READ_1_4_4, SPINOR_OP_READ_1_4_4_4B },
223         };
224
225         return spi_nor_convert_opcode(opcode, spi_nor_3to4_read,
226                                       ARRAY_SIZE(spi_nor_3to4_read));
227 }
228
229 static inline u8 spi_nor_convert_3to4_program(u8 opcode)
230 {
231         static const u8 spi_nor_3to4_program[][2] = {
232                 { SPINOR_OP_PP,         SPINOR_OP_PP_4B },
233                 { SPINOR_OP_PP_1_1_4,   SPINOR_OP_PP_1_1_4_4B },
234                 { SPINOR_OP_PP_1_4_4,   SPINOR_OP_PP_1_4_4_4B },
235         };
236
237         return spi_nor_convert_opcode(opcode, spi_nor_3to4_program,
238                                       ARRAY_SIZE(spi_nor_3to4_program));
239 }
240
241 static inline u8 spi_nor_convert_3to4_erase(u8 opcode)
242 {
243         static const u8 spi_nor_3to4_erase[][2] = {
244                 { SPINOR_OP_BE_4K,      SPINOR_OP_BE_4K_4B },
245                 { SPINOR_OP_BE_32K,     SPINOR_OP_BE_32K_4B },
246                 { SPINOR_OP_SE,         SPINOR_OP_SE_4B },
247         };
248
249         return spi_nor_convert_opcode(opcode, spi_nor_3to4_erase,
250                                       ARRAY_SIZE(spi_nor_3to4_erase));
251 }
252
253 static void spi_nor_set_4byte_opcodes(struct spi_nor *nor,
254                                       const struct flash_info *info)
255 {
256         /* Do some manufacturer fixups first */
257         switch (JEDEC_MFR(info)) {
258         case SNOR_MFR_SPANSION:
259                 /* No small sector erase for 4-byte command set */
260                 nor->erase_opcode = SPINOR_OP_SE;
261                 nor->mtd.erasesize = info->sector_size;
262                 break;
263
264         default:
265                 break;
266         }
267
268         nor->read_opcode = spi_nor_convert_3to4_read(nor->read_opcode);
269         nor->program_opcode = spi_nor_convert_3to4_program(nor->program_opcode);
270         nor->erase_opcode = spi_nor_convert_3to4_erase(nor->erase_opcode);
271 }
272
273 /* Enable/disable 4-byte addressing mode. */
274 static inline int set_4byte(struct spi_nor *nor, const struct flash_info *info,
275                             int enable)
276 {
277         int status;
278         bool need_wren = false;
279         u8 cmd;
280
281         switch (JEDEC_MFR(info)) {
282         case SNOR_MFR_MICRON:
283                 /* Some Micron need WREN command; all will accept it */
284                 need_wren = true;
285         case SNOR_MFR_MACRONIX:
286         case SNOR_MFR_WINBOND:
287                 if (need_wren)
288                         write_enable(nor);
289
290                 cmd = enable ? SPINOR_OP_EN4B : SPINOR_OP_EX4B;
291                 status = nor->write_reg(nor, cmd, NULL, 0);
292                 if (need_wren)
293                         write_disable(nor);
294
295                 return status;
296         default:
297                 /* Spansion style */
298                 nor->cmd_buf[0] = enable << 7;
299                 return nor->write_reg(nor, SPINOR_OP_BRWR, nor->cmd_buf, 1);
300         }
301 }
302
303 static int s3an_sr_ready(struct spi_nor *nor)
304 {
305         int ret;
306         u8 val;
307
308         ret = nor->read_reg(nor, SPINOR_OP_XRDSR, &val, 1);
309         if (ret < 0) {
310                 dev_err(nor->dev, "error %d reading XRDSR\n", (int) ret);
311                 return ret;
312         }
313
314         return !!(val & XSR_RDY);
315 }
316
317 static inline int spi_nor_sr_ready(struct spi_nor *nor)
318 {
319         int sr = read_sr(nor);
320         if (sr < 0)
321                 return sr;
322         else
323                 return !(sr & SR_WIP);
324 }
325
326 static inline int spi_nor_fsr_ready(struct spi_nor *nor)
327 {
328         int fsr = read_fsr(nor);
329         if (fsr < 0)
330                 return fsr;
331         else
332                 return fsr & FSR_READY;
333 }
334
335 static int spi_nor_ready(struct spi_nor *nor)
336 {
337         int sr, fsr;
338
339         if (nor->flags & SNOR_F_READY_XSR_RDY)
340                 sr = s3an_sr_ready(nor);
341         else
342                 sr = spi_nor_sr_ready(nor);
343         if (sr < 0)
344                 return sr;
345         fsr = nor->flags & SNOR_F_USE_FSR ? spi_nor_fsr_ready(nor) : 1;
346         if (fsr < 0)
347                 return fsr;
348         return sr && fsr;
349 }
350
351 /*
352  * Service routine to read status register until ready, or timeout occurs.
353  * Returns non-zero if error.
354  */
355 static int spi_nor_wait_till_ready_with_timeout(struct spi_nor *nor,
356                                                 unsigned long timeout_jiffies)
357 {
358         unsigned long deadline;
359         int timeout = 0, ret;
360
361         deadline = jiffies + timeout_jiffies;
362
363         while (!timeout) {
364                 if (time_after_eq(jiffies, deadline))
365                         timeout = 1;
366
367                 ret = spi_nor_ready(nor);
368                 if (ret < 0)
369                         return ret;
370                 if (ret)
371                         return 0;
372
373                 cond_resched();
374         }
375
376         dev_err(nor->dev, "flash operation timed out\n");
377
378         return -ETIMEDOUT;
379 }
380
381 static int spi_nor_wait_till_ready(struct spi_nor *nor)
382 {
383         return spi_nor_wait_till_ready_with_timeout(nor,
384                                                     DEFAULT_READY_WAIT_JIFFIES);
385 }
386
387 /*
388  * Erase the whole flash memory
389  *
390  * Returns 0 if successful, non-zero otherwise.
391  */
392 static int erase_chip(struct spi_nor *nor)
393 {
394         dev_dbg(nor->dev, " %lldKiB\n", (long long)(nor->mtd.size >> 10));
395
396         return nor->write_reg(nor, SPINOR_OP_CHIP_ERASE, NULL, 0);
397 }
398
399 static int spi_nor_lock_and_prep(struct spi_nor *nor, enum spi_nor_ops ops)
400 {
401         int ret = 0;
402
403         mutex_lock(&nor->lock);
404
405         if (nor->prepare) {
406                 ret = nor->prepare(nor, ops);
407                 if (ret) {
408                         dev_err(nor->dev, "failed in the preparation.\n");
409                         mutex_unlock(&nor->lock);
410                         return ret;
411                 }
412         }
413         return ret;
414 }
415
416 static void spi_nor_unlock_and_unprep(struct spi_nor *nor, enum spi_nor_ops ops)
417 {
418         if (nor->unprepare)
419                 nor->unprepare(nor, ops);
420         mutex_unlock(&nor->lock);
421 }
422
423 /*
424  * This code converts an address to the Default Address Mode, that has non
425  * power of two page sizes. We must support this mode because it is the default
426  * mode supported by Xilinx tools, it can access the whole flash area and
427  * changing over to the Power-of-two mode is irreversible and corrupts the
428  * original data.
429  * Addr can safely be unsigned int, the biggest S3AN device is smaller than
430  * 4 MiB.
431  */
432 static loff_t spi_nor_s3an_addr_convert(struct spi_nor *nor, unsigned int addr)
433 {
434         unsigned int offset;
435         unsigned int page;
436
437         offset = addr % nor->page_size;
438         page = addr / nor->page_size;
439         page <<= (nor->page_size > 512) ? 10 : 9;
440
441         return page | offset;
442 }
443
444 /*
445  * Initiate the erasure of a single sector
446  */
447 static int spi_nor_erase_sector(struct spi_nor *nor, u32 addr)
448 {
449         u8 buf[SPI_NOR_MAX_ADDR_WIDTH];
450         int i;
451
452         if (nor->flags & SNOR_F_S3AN_ADDR_DEFAULT)
453                 addr = spi_nor_s3an_addr_convert(nor, addr);
454
455         if (nor->erase)
456                 return nor->erase(nor, addr);
457
458         /*
459          * Default implementation, if driver doesn't have a specialized HW
460          * control
461          */
462         for (i = nor->addr_width - 1; i >= 0; i--) {
463                 buf[i] = addr & 0xff;
464                 addr >>= 8;
465         }
466
467         return nor->write_reg(nor, nor->erase_opcode, buf, nor->addr_width);
468 }
469
470 /*
471  * Erase an address range on the nor chip.  The address range may extend
472  * one or more erase sectors.  Return an error is there is a problem erasing.
473  */
474 static int spi_nor_erase(struct mtd_info *mtd, struct erase_info *instr)
475 {
476         struct spi_nor *nor = mtd_to_spi_nor(mtd);
477         u32 addr, len;
478         uint32_t rem;
479         int ret;
480
481         dev_dbg(nor->dev, "at 0x%llx, len %lld\n", (long long)instr->addr,
482                         (long long)instr->len);
483
484         div_u64_rem(instr->len, mtd->erasesize, &rem);
485         if (rem)
486                 return -EINVAL;
487
488         addr = instr->addr;
489         len = instr->len;
490
491         ret = spi_nor_lock_and_prep(nor, SPI_NOR_OPS_ERASE);
492         if (ret)
493                 return ret;
494
495         /* whole-chip erase? */
496         if (len == mtd->size && !(nor->flags & SNOR_F_NO_OP_CHIP_ERASE)) {
497                 unsigned long timeout;
498
499                 write_enable(nor);
500
501                 if (erase_chip(nor)) {
502                         ret = -EIO;
503                         goto erase_err;
504                 }
505
506                 /*
507                  * Scale the timeout linearly with the size of the flash, with
508                  * a minimum calibrated to an old 2MB flash. We could try to
509                  * pull these from CFI/SFDP, but these values should be good
510                  * enough for now.
511                  */
512                 timeout = max(CHIP_ERASE_2MB_READY_WAIT_JIFFIES,
513                               CHIP_ERASE_2MB_READY_WAIT_JIFFIES *
514                               (unsigned long)(mtd->size / SZ_2M));
515                 ret = spi_nor_wait_till_ready_with_timeout(nor, timeout);
516                 if (ret)
517                         goto erase_err;
518
519         /* REVISIT in some cases we could speed up erasing large regions
520          * by using SPINOR_OP_SE instead of SPINOR_OP_BE_4K.  We may have set up
521          * to use "small sector erase", but that's not always optimal.
522          */
523
524         /* "sector"-at-a-time erase */
525         } else {
526                 while (len) {
527                         write_enable(nor);
528
529                         ret = spi_nor_erase_sector(nor, addr);
530                         if (ret)
531                                 goto erase_err;
532
533                         addr += mtd->erasesize;
534                         len -= mtd->erasesize;
535
536                         ret = spi_nor_wait_till_ready(nor);
537                         if (ret)
538                                 goto erase_err;
539                 }
540         }
541
542         write_disable(nor);
543
544 erase_err:
545         spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_ERASE);
546
547         instr->state = ret ? MTD_ERASE_FAILED : MTD_ERASE_DONE;
548         mtd_erase_callback(instr);
549
550         return ret;
551 }
552
553 static void stm_get_locked_range(struct spi_nor *nor, u8 sr, loff_t *ofs,
554                                  uint64_t *len)
555 {
556         struct mtd_info *mtd = &nor->mtd;
557         u8 mask = SR_BP2 | SR_BP1 | SR_BP0;
558         int shift = ffs(mask) - 1;
559         int pow;
560
561         if (!(sr & mask)) {
562                 /* No protection */
563                 *ofs = 0;
564                 *len = 0;
565         } else {
566                 pow = ((sr & mask) ^ mask) >> shift;
567                 *len = mtd->size >> pow;
568                 if (nor->flags & SNOR_F_HAS_SR_TB && sr & SR_TB)
569                         *ofs = 0;
570                 else
571                         *ofs = mtd->size - *len;
572         }
573 }
574
575 /*
576  * Return 1 if the entire region is locked (if @locked is true) or unlocked (if
577  * @locked is false); 0 otherwise
578  */
579 static int stm_check_lock_status_sr(struct spi_nor *nor, loff_t ofs, uint64_t len,
580                                     u8 sr, bool locked)
581 {
582         loff_t lock_offs;
583         uint64_t lock_len;
584
585         if (!len)
586                 return 1;
587
588         stm_get_locked_range(nor, sr, &lock_offs, &lock_len);
589
590         if (locked)
591                 /* Requested range is a sub-range of locked range */
592                 return (ofs + len <= lock_offs + lock_len) && (ofs >= lock_offs);
593         else
594                 /* Requested range does not overlap with locked range */
595                 return (ofs >= lock_offs + lock_len) || (ofs + len <= lock_offs);
596 }
597
598 static int stm_is_locked_sr(struct spi_nor *nor, loff_t ofs, uint64_t len,
599                             u8 sr)
600 {
601         return stm_check_lock_status_sr(nor, ofs, len, sr, true);
602 }
603
604 static int stm_is_unlocked_sr(struct spi_nor *nor, loff_t ofs, uint64_t len,
605                               u8 sr)
606 {
607         return stm_check_lock_status_sr(nor, ofs, len, sr, false);
608 }
609
610 /*
611  * Lock a region of the flash. Compatible with ST Micro and similar flash.
612  * Supports the block protection bits BP{0,1,2} in the status register
613  * (SR). Does not support these features found in newer SR bitfields:
614  *   - SEC: sector/block protect - only handle SEC=0 (block protect)
615  *   - CMP: complement protect - only support CMP=0 (range is not complemented)
616  *
617  * Support for the following is provided conditionally for some flash:
618  *   - TB: top/bottom protect
619  *
620  * Sample table portion for 8MB flash (Winbond w25q64fw):
621  *
622  *   SEC  |  TB   |  BP2  |  BP1  |  BP0  |  Prot Length  | Protected Portion
623  *  --------------------------------------------------------------------------
624  *    X   |   X   |   0   |   0   |   0   |  NONE         | NONE
625  *    0   |   0   |   0   |   0   |   1   |  128 KB       | Upper 1/64
626  *    0   |   0   |   0   |   1   |   0   |  256 KB       | Upper 1/32
627  *    0   |   0   |   0   |   1   |   1   |  512 KB       | Upper 1/16
628  *    0   |   0   |   1   |   0   |   0   |  1 MB         | Upper 1/8
629  *    0   |   0   |   1   |   0   |   1   |  2 MB         | Upper 1/4
630  *    0   |   0   |   1   |   1   |   0   |  4 MB         | Upper 1/2
631  *    X   |   X   |   1   |   1   |   1   |  8 MB         | ALL
632  *  ------|-------|-------|-------|-------|---------------|-------------------
633  *    0   |   1   |   0   |   0   |   1   |  128 KB       | Lower 1/64
634  *    0   |   1   |   0   |   1   |   0   |  256 KB       | Lower 1/32
635  *    0   |   1   |   0   |   1   |   1   |  512 KB       | Lower 1/16
636  *    0   |   1   |   1   |   0   |   0   |  1 MB         | Lower 1/8
637  *    0   |   1   |   1   |   0   |   1   |  2 MB         | Lower 1/4
638  *    0   |   1   |   1   |   1   |   0   |  4 MB         | Lower 1/2
639  *
640  * Returns negative on errors, 0 on success.
641  */
642 static int stm_lock(struct spi_nor *nor, loff_t ofs, uint64_t len)
643 {
644         struct mtd_info *mtd = &nor->mtd;
645         int status_old, status_new;
646         u8 mask = SR_BP2 | SR_BP1 | SR_BP0;
647         u8 shift = ffs(mask) - 1, pow, val;
648         loff_t lock_len;
649         bool can_be_top = true, can_be_bottom = nor->flags & SNOR_F_HAS_SR_TB;
650         bool use_top;
651         int ret;
652
653         status_old = read_sr(nor);
654         if (status_old < 0)
655                 return status_old;
656
657         /* If nothing in our range is unlocked, we don't need to do anything */
658         if (stm_is_locked_sr(nor, ofs, len, status_old))
659                 return 0;
660
661         /* If anything below us is unlocked, we can't use 'bottom' protection */
662         if (!stm_is_locked_sr(nor, 0, ofs, status_old))
663                 can_be_bottom = false;
664
665         /* If anything above us is unlocked, we can't use 'top' protection */
666         if (!stm_is_locked_sr(nor, ofs + len, mtd->size - (ofs + len),
667                                 status_old))
668                 can_be_top = false;
669
670         if (!can_be_bottom && !can_be_top)
671                 return -EINVAL;
672
673         /* Prefer top, if both are valid */
674         use_top = can_be_top;
675
676         /* lock_len: length of region that should end up locked */
677         if (use_top)
678                 lock_len = mtd->size - ofs;
679         else
680                 lock_len = ofs + len;
681
682         /*
683          * Need smallest pow such that:
684          *
685          *   1 / (2^pow) <= (len / size)
686          *
687          * so (assuming power-of-2 size) we do:
688          *
689          *   pow = ceil(log2(size / len)) = log2(size) - floor(log2(len))
690          */
691         pow = ilog2(mtd->size) - ilog2(lock_len);
692         val = mask - (pow << shift);
693         if (val & ~mask)
694                 return -EINVAL;
695         /* Don't "lock" with no region! */
696         if (!(val & mask))
697                 return -EINVAL;
698
699         status_new = (status_old & ~mask & ~SR_TB) | val;
700
701         /* Disallow further writes if WP pin is asserted */
702         status_new |= SR_SRWD;
703
704         if (!use_top)
705                 status_new |= SR_TB;
706
707         /* Don't bother if they're the same */
708         if (status_new == status_old)
709                 return 0;
710
711         /* Only modify protection if it will not unlock other areas */
712         if ((status_new & mask) < (status_old & mask))
713                 return -EINVAL;
714
715         write_enable(nor);
716         ret = write_sr(nor, status_new);
717         if (ret)
718                 return ret;
719         return spi_nor_wait_till_ready(nor);
720 }
721
722 /*
723  * Unlock a region of the flash. See stm_lock() for more info
724  *
725  * Returns negative on errors, 0 on success.
726  */
727 static int stm_unlock(struct spi_nor *nor, loff_t ofs, uint64_t len)
728 {
729         struct mtd_info *mtd = &nor->mtd;
730         int status_old, status_new;
731         u8 mask = SR_BP2 | SR_BP1 | SR_BP0;
732         u8 shift = ffs(mask) - 1, pow, val;
733         loff_t lock_len;
734         bool can_be_top = true, can_be_bottom = nor->flags & SNOR_F_HAS_SR_TB;
735         bool use_top;
736         int ret;
737
738         status_old = read_sr(nor);
739         if (status_old < 0)
740                 return status_old;
741
742         /* If nothing in our range is locked, we don't need to do anything */
743         if (stm_is_unlocked_sr(nor, ofs, len, status_old))
744                 return 0;
745
746         /* If anything below us is locked, we can't use 'top' protection */
747         if (!stm_is_unlocked_sr(nor, 0, ofs, status_old))
748                 can_be_top = false;
749
750         /* If anything above us is locked, we can't use 'bottom' protection */
751         if (!stm_is_unlocked_sr(nor, ofs + len, mtd->size - (ofs + len),
752                                 status_old))
753                 can_be_bottom = false;
754
755         if (!can_be_bottom && !can_be_top)
756                 return -EINVAL;
757
758         /* Prefer top, if both are valid */
759         use_top = can_be_top;
760
761         /* lock_len: length of region that should remain locked */
762         if (use_top)
763                 lock_len = mtd->size - (ofs + len);
764         else
765                 lock_len = ofs;
766
767         /*
768          * Need largest pow such that:
769          *
770          *   1 / (2^pow) >= (len / size)
771          *
772          * so (assuming power-of-2 size) we do:
773          *
774          *   pow = floor(log2(size / len)) = log2(size) - ceil(log2(len))
775          */
776         pow = ilog2(mtd->size) - order_base_2(lock_len);
777         if (lock_len == 0) {
778                 val = 0; /* fully unlocked */
779         } else {
780                 val = mask - (pow << shift);
781                 /* Some power-of-two sizes are not supported */
782                 if (val & ~mask)
783                         return -EINVAL;
784         }
785
786         status_new = (status_old & ~mask & ~SR_TB) | val;
787
788         /* Don't protect status register if we're fully unlocked */
789         if (lock_len == 0)
790                 status_new &= ~SR_SRWD;
791
792         if (!use_top)
793                 status_new |= SR_TB;
794
795         /* Don't bother if they're the same */
796         if (status_new == status_old)
797                 return 0;
798
799         /* Only modify protection if it will not lock other areas */
800         if ((status_new & mask) > (status_old & mask))
801                 return -EINVAL;
802
803         write_enable(nor);
804         ret = write_sr(nor, status_new);
805         if (ret)
806                 return ret;
807         return spi_nor_wait_till_ready(nor);
808 }
809
810 /*
811  * Check if a region of the flash is (completely) locked. See stm_lock() for
812  * more info.
813  *
814  * Returns 1 if entire region is locked, 0 if any portion is unlocked, and
815  * negative on errors.
816  */
817 static int stm_is_locked(struct spi_nor *nor, loff_t ofs, uint64_t len)
818 {
819         int status;
820
821         status = read_sr(nor);
822         if (status < 0)
823                 return status;
824
825         return stm_is_locked_sr(nor, ofs, len, status);
826 }
827
828 static int spi_nor_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
829 {
830         struct spi_nor *nor = mtd_to_spi_nor(mtd);
831         int ret;
832
833         ret = spi_nor_lock_and_prep(nor, SPI_NOR_OPS_LOCK);
834         if (ret)
835                 return ret;
836
837         ret = nor->flash_lock(nor, ofs, len);
838
839         spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_UNLOCK);
840         return ret;
841 }
842
843 static int spi_nor_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
844 {
845         struct spi_nor *nor = mtd_to_spi_nor(mtd);
846         int ret;
847
848         ret = spi_nor_lock_and_prep(nor, SPI_NOR_OPS_UNLOCK);
849         if (ret)
850                 return ret;
851
852         ret = nor->flash_unlock(nor, ofs, len);
853
854         spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_LOCK);
855         return ret;
856 }
857
858 static int spi_nor_is_locked(struct mtd_info *mtd, loff_t ofs, uint64_t len)
859 {
860         struct spi_nor *nor = mtd_to_spi_nor(mtd);
861         int ret;
862
863         ret = spi_nor_lock_and_prep(nor, SPI_NOR_OPS_UNLOCK);
864         if (ret)
865                 return ret;
866
867         ret = nor->flash_is_locked(nor, ofs, len);
868
869         spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_LOCK);
870         return ret;
871 }
872
873 /* Used when the "_ext_id" is two bytes at most */
874 #define INFO(_jedec_id, _ext_id, _sector_size, _n_sectors, _flags)      \
875                 .id = {                                                 \
876                         ((_jedec_id) >> 16) & 0xff,                     \
877                         ((_jedec_id) >> 8) & 0xff,                      \
878                         (_jedec_id) & 0xff,                             \
879                         ((_ext_id) >> 8) & 0xff,                        \
880                         (_ext_id) & 0xff,                               \
881                         },                                              \
882                 .id_len = (!(_jedec_id) ? 0 : (3 + ((_ext_id) ? 2 : 0))),       \
883                 .sector_size = (_sector_size),                          \
884                 .n_sectors = (_n_sectors),                              \
885                 .page_size = 256,                                       \
886                 .flags = (_flags),
887
888 #define INFO6(_jedec_id, _ext_id, _sector_size, _n_sectors, _flags)     \
889                 .id = {                                                 \
890                         ((_jedec_id) >> 16) & 0xff,                     \
891                         ((_jedec_id) >> 8) & 0xff,                      \
892                         (_jedec_id) & 0xff,                             \
893                         ((_ext_id) >> 16) & 0xff,                       \
894                         ((_ext_id) >> 8) & 0xff,                        \
895                         (_ext_id) & 0xff,                               \
896                         },                                              \
897                 .id_len = 6,                                            \
898                 .sector_size = (_sector_size),                          \
899                 .n_sectors = (_n_sectors),                              \
900                 .page_size = 256,                                       \
901                 .flags = (_flags),
902
903 #define CAT25_INFO(_sector_size, _n_sectors, _page_size, _addr_width, _flags)   \
904                 .sector_size = (_sector_size),                          \
905                 .n_sectors = (_n_sectors),                              \
906                 .page_size = (_page_size),                              \
907                 .addr_width = (_addr_width),                            \
908                 .flags = (_flags),
909
910 #define S3AN_INFO(_jedec_id, _n_sectors, _page_size)                    \
911                 .id = {                                                 \
912                         ((_jedec_id) >> 16) & 0xff,                     \
913                         ((_jedec_id) >> 8) & 0xff,                      \
914                         (_jedec_id) & 0xff                              \
915                         },                                              \
916                 .id_len = 3,                                            \
917                 .sector_size = (8*_page_size),                          \
918                 .n_sectors = (_n_sectors),                              \
919                 .page_size = _page_size,                                \
920                 .addr_width = 3,                                        \
921                 .flags = SPI_NOR_NO_FR | SPI_S3AN,
922
923 /* NOTE: double check command sets and memory organization when you add
924  * more nor chips.  This current list focusses on newer chips, which
925  * have been converging on command sets which including JEDEC ID.
926  *
927  * All newly added entries should describe *hardware* and should use SECT_4K
928  * (or SECT_4K_PMC) if hardware supports erasing 4 KiB sectors. For usage
929  * scenarios excluding small sectors there is config option that can be
930  * disabled: CONFIG_MTD_SPI_NOR_USE_4K_SECTORS.
931  * For historical (and compatibility) reasons (before we got above config) some
932  * old entries may be missing 4K flag.
933  */
934 static const struct flash_info spi_nor_ids[] = {
935         /* Atmel -- some are (confusingly) marketed as "DataFlash" */
936         { "at25fs010",  INFO(0x1f6601, 0, 32 * 1024,   4, SECT_4K) },
937         { "at25fs040",  INFO(0x1f6604, 0, 64 * 1024,   8, SECT_4K) },
938
939         { "at25df041a", INFO(0x1f4401, 0, 64 * 1024,   8, SECT_4K) },
940         { "at25df321",  INFO(0x1f4700, 0, 64 * 1024,  64, SECT_4K) },
941         { "at25df321a", INFO(0x1f4701, 0, 64 * 1024,  64, SECT_4K) },
942         { "at25df641",  INFO(0x1f4800, 0, 64 * 1024, 128, SECT_4K) },
943
944         { "at26f004",   INFO(0x1f0400, 0, 64 * 1024,  8, SECT_4K) },
945         { "at26df081a", INFO(0x1f4501, 0, 64 * 1024, 16, SECT_4K) },
946         { "at26df161a", INFO(0x1f4601, 0, 64 * 1024, 32, SECT_4K) },
947         { "at26df321",  INFO(0x1f4700, 0, 64 * 1024, 64, SECT_4K) },
948
949         { "at45db081d", INFO(0x1f2500, 0, 64 * 1024, 16, SECT_4K) },
950
951         /* EON -- en25xxx */
952         { "en25f32",    INFO(0x1c3116, 0, 64 * 1024,   64, SECT_4K) },
953         { "en25p32",    INFO(0x1c2016, 0, 64 * 1024,   64, 0) },
954         { "en25q32b",   INFO(0x1c3016, 0, 64 * 1024,   64, 0) },
955         { "en25p64",    INFO(0x1c2017, 0, 64 * 1024,  128, 0) },
956         { "en25q64",    INFO(0x1c3017, 0, 64 * 1024,  128, SECT_4K) },
957         { "en25qh128",  INFO(0x1c7018, 0, 64 * 1024,  256, 0) },
958         { "en25qh256",  INFO(0x1c7019, 0, 64 * 1024,  512, 0) },
959         { "en25s64",    INFO(0x1c3817, 0, 64 * 1024,  128, SECT_4K) },
960
961         /* ESMT */
962         { "f25l32pa", INFO(0x8c2016, 0, 64 * 1024, 64, SECT_4K | SPI_NOR_HAS_LOCK) },
963
964         /* Everspin */
965         { "mr25h256", CAT25_INFO( 32 * 1024, 1, 256, 2, SPI_NOR_NO_ERASE | SPI_NOR_NO_FR) },
966         { "mr25h10",  CAT25_INFO(128 * 1024, 1, 256, 3, SPI_NOR_NO_ERASE | SPI_NOR_NO_FR) },
967         { "mr25h40",  CAT25_INFO(512 * 1024, 1, 256, 3, SPI_NOR_NO_ERASE | SPI_NOR_NO_FR) },
968
969         /* Fujitsu */
970         { "mb85rs1mt", INFO(0x047f27, 0, 128 * 1024, 1, SPI_NOR_NO_ERASE) },
971
972         /* GigaDevice */
973         {
974                 "gd25q32", INFO(0xc84016, 0, 64 * 1024,  64,
975                         SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
976                         SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
977         },
978         {
979                 "gd25q64", INFO(0xc84017, 0, 64 * 1024, 128,
980                         SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
981                         SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
982         },
983         {
984                 "gd25lq64c", INFO(0xc86017, 0, 64 * 1024, 128,
985                         SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
986                         SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
987         },
988         {
989                 "gd25q128", INFO(0xc84018, 0, 64 * 1024, 256,
990                         SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
991                         SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
992         },
993
994         /* Intel/Numonyx -- xxxs33b */
995         { "160s33b",  INFO(0x898911, 0, 64 * 1024,  32, 0) },
996         { "320s33b",  INFO(0x898912, 0, 64 * 1024,  64, 0) },
997         { "640s33b",  INFO(0x898913, 0, 64 * 1024, 128, 0) },
998
999         /* ISSI */
1000         { "is25cd512", INFO(0x7f9d20, 0, 32 * 1024,   2, SECT_4K) },
1001
1002         /* Macronix */
1003         { "mx25l512e",   INFO(0xc22010, 0, 64 * 1024,   1, SECT_4K) },
1004         { "mx25l2005a",  INFO(0xc22012, 0, 64 * 1024,   4, SECT_4K) },
1005         { "mx25l4005a",  INFO(0xc22013, 0, 64 * 1024,   8, SECT_4K) },
1006         { "mx25l8005",   INFO(0xc22014, 0, 64 * 1024,  16, 0) },
1007         { "mx25l1606e",  INFO(0xc22015, 0, 64 * 1024,  32, SECT_4K) },
1008         { "mx25l3205d",  INFO(0xc22016, 0, 64 * 1024,  64, SECT_4K) },
1009         { "mx25l3255e",  INFO(0xc29e16, 0, 64 * 1024,  64, SECT_4K) },
1010         { "mx25l6405d",  INFO(0xc22017, 0, 64 * 1024, 128, SECT_4K) },
1011         { "mx25u6435f",  INFO(0xc22537, 0, 64 * 1024, 128, SECT_4K) },
1012         { "mx25l12805d", INFO(0xc22018, 0, 64 * 1024, 256, 0) },
1013         { "mx25l12855e", INFO(0xc22618, 0, 64 * 1024, 256, 0) },
1014         { "mx25l25635e", INFO(0xc22019, 0, 64 * 1024, 512, 0) },
1015         { "mx25u25635f", INFO(0xc22539, 0, 64 * 1024, 512, SECT_4K) },
1016         { "mx25l25655e", INFO(0xc22619, 0, 64 * 1024, 512, 0) },
1017         { "mx66l51235l", INFO(0xc2201a, 0, 64 * 1024, 1024, SPI_NOR_QUAD_READ) },
1018         { "mx66l1g55g",  INFO(0xc2261b, 0, 64 * 1024, 2048, SPI_NOR_QUAD_READ) },
1019
1020         /* Micron */
1021         { "n25q016a",    INFO(0x20bb15, 0, 64 * 1024,   32, SECT_4K | SPI_NOR_QUAD_READ) },
1022         { "n25q032",     INFO(0x20ba16, 0, 64 * 1024,   64, SPI_NOR_QUAD_READ) },
1023         { "n25q032a",    INFO(0x20bb16, 0, 64 * 1024,   64, SPI_NOR_QUAD_READ) },
1024         { "n25q064",     INFO(0x20ba17, 0, 64 * 1024,  128, SECT_4K | SPI_NOR_QUAD_READ) },
1025         { "n25q064a",    INFO(0x20bb17, 0, 64 * 1024,  128, SECT_4K | SPI_NOR_QUAD_READ) },
1026         { "n25q128a11",  INFO(0x20bb18, 0, 64 * 1024,  256, SECT_4K | SPI_NOR_QUAD_READ) },
1027         { "n25q128a13",  INFO(0x20ba18, 0, 64 * 1024,  256, SECT_4K | SPI_NOR_QUAD_READ) },
1028         { "n25q256a",    INFO(0x20ba19, 0, 64 * 1024,  512, SECT_4K | SPI_NOR_QUAD_READ) },
1029         { "n25q512a",    INFO(0x20bb20, 0, 64 * 1024, 1024, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) },
1030         { "n25q512ax3",  INFO(0x20ba20, 0, 64 * 1024, 1024, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) },
1031         { "n25q00",      INFO(0x20ba21, 0, 64 * 1024, 2048, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) },
1032         { "n25q00a",     INFO(0x20bb21, 0, 64 * 1024, 2048, SECT_4K | USE_FSR | SPI_NOR_QUAD_READ) },
1033
1034         /* PMC */
1035         { "pm25lv512",   INFO(0,        0, 32 * 1024,    2, SECT_4K_PMC) },
1036         { "pm25lv010",   INFO(0,        0, 32 * 1024,    4, SECT_4K_PMC) },
1037         { "pm25lq032",   INFO(0x7f9d46, 0, 64 * 1024,   64, SECT_4K) },
1038
1039         /* Spansion -- single (large) sector size only, at least
1040          * for the chips listed here (without boot sectors).
1041          */
1042         { "s25sl032p",  INFO(0x010215, 0x4d00,  64 * 1024,  64, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
1043         { "s25sl064p",  INFO(0x010216, 0x4d00,  64 * 1024, 128, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
1044         { "s25fl256s0", INFO(0x010219, 0x4d00, 256 * 1024, 128, 0) },
1045         { "s25fl256s1", INFO(0x010219, 0x4d01,  64 * 1024, 512, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
1046         { "s25fl512s",  INFO(0x010220, 0x4d00, 256 * 1024, 256, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
1047         { "s70fl01gs",  INFO(0x010221, 0x4d00, 256 * 1024, 256, 0) },
1048         { "s25sl12800", INFO(0x012018, 0x0300, 256 * 1024,  64, 0) },
1049         { "s25sl12801", INFO(0x012018, 0x0301,  64 * 1024, 256, 0) },
1050         { "s25fl128s",  INFO6(0x012018, 0x4d0180, 64 * 1024, 256, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
1051         { "s25fl129p0", INFO(0x012018, 0x4d00, 256 * 1024,  64, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
1052         { "s25fl129p1", INFO(0x012018, 0x4d01,  64 * 1024, 256, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
1053         { "s25sl004a",  INFO(0x010212,      0,  64 * 1024,   8, 0) },
1054         { "s25sl008a",  INFO(0x010213,      0,  64 * 1024,  16, 0) },
1055         { "s25sl016a",  INFO(0x010214,      0,  64 * 1024,  32, 0) },
1056         { "s25sl032a",  INFO(0x010215,      0,  64 * 1024,  64, 0) },
1057         { "s25sl064a",  INFO(0x010216,      0,  64 * 1024, 128, 0) },
1058         { "s25fl004k",  INFO(0xef4013,      0,  64 * 1024,   8, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
1059         { "s25fl008k",  INFO(0xef4014,      0,  64 * 1024,  16, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
1060         { "s25fl016k",  INFO(0xef4015,      0,  64 * 1024,  32, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
1061         { "s25fl064k",  INFO(0xef4017,      0,  64 * 1024, 128, SECT_4K) },
1062         { "s25fl116k",  INFO(0x014015,      0,  64 * 1024,  32, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) },
1063         { "s25fl132k",  INFO(0x014016,      0,  64 * 1024,  64, SECT_4K) },
1064         { "s25fl164k",  INFO(0x014017,      0,  64 * 1024, 128, SECT_4K) },
1065         { "s25fl204k",  INFO(0x014013,      0,  64 * 1024,   8, SECT_4K | SPI_NOR_DUAL_READ) },
1066         { "s25fl208k",  INFO(0x014014,      0,  64 * 1024,  16, SECT_4K | SPI_NOR_DUAL_READ) },
1067
1068         /* SST -- large erase sizes are "overlays", "sectors" are 4K */
1069         { "sst25vf040b", INFO(0xbf258d, 0, 64 * 1024,  8, SECT_4K | SST_WRITE) },
1070         { "sst25vf080b", INFO(0xbf258e, 0, 64 * 1024, 16, SECT_4K | SST_WRITE) },
1071         { "sst25vf016b", INFO(0xbf2541, 0, 64 * 1024, 32, SECT_4K | SST_WRITE) },
1072         { "sst25vf032b", INFO(0xbf254a, 0, 64 * 1024, 64, SECT_4K | SST_WRITE) },
1073         { "sst25vf064c", INFO(0xbf254b, 0, 64 * 1024, 128, SECT_4K) },
1074         { "sst25wf512",  INFO(0xbf2501, 0, 64 * 1024,  1, SECT_4K | SST_WRITE) },
1075         { "sst25wf010",  INFO(0xbf2502, 0, 64 * 1024,  2, SECT_4K | SST_WRITE) },
1076         { "sst25wf020",  INFO(0xbf2503, 0, 64 * 1024,  4, SECT_4K | SST_WRITE) },
1077         { "sst25wf020a", INFO(0x621612, 0, 64 * 1024,  4, SECT_4K) },
1078         { "sst25wf040b", INFO(0x621613, 0, 64 * 1024,  8, SECT_4K) },
1079         { "sst25wf040",  INFO(0xbf2504, 0, 64 * 1024,  8, SECT_4K | SST_WRITE) },
1080         { "sst25wf080",  INFO(0xbf2505, 0, 64 * 1024, 16, SECT_4K | SST_WRITE) },
1081
1082         /* ST Microelectronics -- newer production may have feature updates */
1083         { "m25p05",  INFO(0x202010,  0,  32 * 1024,   2, 0) },
1084         { "m25p10",  INFO(0x202011,  0,  32 * 1024,   4, 0) },
1085         { "m25p20",  INFO(0x202012,  0,  64 * 1024,   4, 0) },
1086         { "m25p40",  INFO(0x202013,  0,  64 * 1024,   8, 0) },
1087         { "m25p80",  INFO(0x202014,  0,  64 * 1024,  16, 0) },
1088         { "m25p16",  INFO(0x202015,  0,  64 * 1024,  32, 0) },
1089         { "m25p32",  INFO(0x202016,  0,  64 * 1024,  64, 0) },
1090         { "m25p64",  INFO(0x202017,  0,  64 * 1024, 128, 0) },
1091         { "m25p128", INFO(0x202018,  0, 256 * 1024,  64, 0) },
1092
1093         { "m25p05-nonjedec",  INFO(0, 0,  32 * 1024,   2, 0) },
1094         { "m25p10-nonjedec",  INFO(0, 0,  32 * 1024,   4, 0) },
1095         { "m25p20-nonjedec",  INFO(0, 0,  64 * 1024,   4, 0) },
1096         { "m25p40-nonjedec",  INFO(0, 0,  64 * 1024,   8, 0) },
1097         { "m25p80-nonjedec",  INFO(0, 0,  64 * 1024,  16, 0) },
1098         { "m25p16-nonjedec",  INFO(0, 0,  64 * 1024,  32, 0) },
1099         { "m25p32-nonjedec",  INFO(0, 0,  64 * 1024,  64, 0) },
1100         { "m25p64-nonjedec",  INFO(0, 0,  64 * 1024, 128, 0) },
1101         { "m25p128-nonjedec", INFO(0, 0, 256 * 1024,  64, 0) },
1102
1103         { "m45pe10", INFO(0x204011,  0, 64 * 1024,    2, 0) },
1104         { "m45pe80", INFO(0x204014,  0, 64 * 1024,   16, 0) },
1105         { "m45pe16", INFO(0x204015,  0, 64 * 1024,   32, 0) },
1106
1107         { "m25pe20", INFO(0x208012,  0, 64 * 1024,  4,       0) },
1108         { "m25pe80", INFO(0x208014,  0, 64 * 1024, 16,       0) },
1109         { "m25pe16", INFO(0x208015,  0, 64 * 1024, 32, SECT_4K) },
1110
1111         { "m25px16",    INFO(0x207115,  0, 64 * 1024, 32, SECT_4K) },
1112         { "m25px32",    INFO(0x207116,  0, 64 * 1024, 64, SECT_4K) },
1113         { "m25px32-s0", INFO(0x207316,  0, 64 * 1024, 64, SECT_4K) },
1114         { "m25px32-s1", INFO(0x206316,  0, 64 * 1024, 64, SECT_4K) },
1115         { "m25px64",    INFO(0x207117,  0, 64 * 1024, 128, 0) },
1116         { "m25px80",    INFO(0x207114,  0, 64 * 1024, 16, 0) },
1117
1118         /* Winbond -- w25x "blocks" are 64K, "sectors" are 4KiB */
1119         { "w25x05", INFO(0xef3010, 0, 64 * 1024,  1,  SECT_4K) },
1120         { "w25x10", INFO(0xef3011, 0, 64 * 1024,  2,  SECT_4K) },
1121         { "w25x20", INFO(0xef3012, 0, 64 * 1024,  4,  SECT_4K) },
1122         { "w25x40", INFO(0xef3013, 0, 64 * 1024,  8,  SECT_4K) },
1123         { "w25x80", INFO(0xef3014, 0, 64 * 1024,  16, SECT_4K) },
1124         { "w25x16", INFO(0xef3015, 0, 64 * 1024,  32, SECT_4K) },
1125         { "w25x32", INFO(0xef3016, 0, 64 * 1024,  64, SECT_4K) },
1126         { "w25q32", INFO(0xef4016, 0, 64 * 1024,  64, SECT_4K) },
1127         {
1128                 "w25q32dw", INFO(0xef6016, 0, 64 * 1024,  64,
1129                         SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
1130                         SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
1131         },
1132         { "w25x64", INFO(0xef3017, 0, 64 * 1024, 128, SECT_4K) },
1133         { "w25q64", INFO(0xef4017, 0, 64 * 1024, 128, SECT_4K) },
1134         {
1135                 "w25q64dw", INFO(0xef6017, 0, 64 * 1024, 128,
1136                         SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
1137                         SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
1138         },
1139         {
1140                 "w25q128fw", INFO(0xef6018, 0, 64 * 1024, 256,
1141                         SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
1142                         SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
1143         },
1144         { "w25q80", INFO(0xef5014, 0, 64 * 1024,  16, SECT_4K) },
1145         { "w25q80bl", INFO(0xef4014, 0, 64 * 1024,  16, SECT_4K) },
1146         { "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, SECT_4K) },
1147         { "w25q256", INFO(0xef4019, 0, 64 * 1024, 512, SECT_4K) },
1148
1149         /* Catalyst / On Semiconductor -- non-JEDEC */
1150         { "cat25c11", CAT25_INFO(  16, 8, 16, 1, SPI_NOR_NO_ERASE | SPI_NOR_NO_FR) },
1151         { "cat25c03", CAT25_INFO(  32, 8, 16, 2, SPI_NOR_NO_ERASE | SPI_NOR_NO_FR) },
1152         { "cat25c09", CAT25_INFO( 128, 8, 32, 2, SPI_NOR_NO_ERASE | SPI_NOR_NO_FR) },
1153         { "cat25c17", CAT25_INFO( 256, 8, 32, 2, SPI_NOR_NO_ERASE | SPI_NOR_NO_FR) },
1154         { "cat25128", CAT25_INFO(2048, 8, 64, 2, SPI_NOR_NO_ERASE | SPI_NOR_NO_FR) },
1155
1156         /* Xilinx S3AN Internal Flash */
1157         { "3S50AN", S3AN_INFO(0x1f2200, 64, 264) },
1158         { "3S200AN", S3AN_INFO(0x1f2400, 256, 264) },
1159         { "3S400AN", S3AN_INFO(0x1f2400, 256, 264) },
1160         { "3S700AN", S3AN_INFO(0x1f2500, 512, 264) },
1161         { "3S1400AN", S3AN_INFO(0x1f2600, 512, 528) },
1162         { },
1163 };
1164
1165 static const struct flash_info *spi_nor_read_id(struct spi_nor *nor)
1166 {
1167         int                     tmp;
1168         u8                      id[SPI_NOR_MAX_ID_LEN];
1169         const struct flash_info *info;
1170
1171         tmp = nor->read_reg(nor, SPINOR_OP_RDID, id, SPI_NOR_MAX_ID_LEN);
1172         if (tmp < 0) {
1173                 dev_dbg(nor->dev, "error %d reading JEDEC ID\n", tmp);
1174                 return ERR_PTR(tmp);
1175         }
1176
1177         for (tmp = 0; tmp < ARRAY_SIZE(spi_nor_ids) - 1; tmp++) {
1178                 info = &spi_nor_ids[tmp];
1179                 if (info->id_len) {
1180                         if (!memcmp(info->id, id, info->id_len))
1181                                 return &spi_nor_ids[tmp];
1182                 }
1183         }
1184         dev_err(nor->dev, "unrecognized JEDEC id bytes: %02x, %02x, %02x\n",
1185                 id[0], id[1], id[2]);
1186         return ERR_PTR(-ENODEV);
1187 }
1188
1189 static int spi_nor_read(struct mtd_info *mtd, loff_t from, size_t len,
1190                         size_t *retlen, u_char *buf)
1191 {
1192         struct spi_nor *nor = mtd_to_spi_nor(mtd);
1193         int ret;
1194
1195         dev_dbg(nor->dev, "from 0x%08x, len %zd\n", (u32)from, len);
1196
1197         ret = spi_nor_lock_and_prep(nor, SPI_NOR_OPS_READ);
1198         if (ret)
1199                 return ret;
1200
1201         while (len) {
1202                 loff_t addr = from;
1203
1204                 if (nor->flags & SNOR_F_S3AN_ADDR_DEFAULT)
1205                         addr = spi_nor_s3an_addr_convert(nor, addr);
1206
1207                 ret = nor->read(nor, addr, len, buf);
1208                 if (ret == 0) {
1209                         /* We shouldn't see 0-length reads */
1210                         ret = -EIO;
1211                         goto read_err;
1212                 }
1213                 if (ret < 0)
1214                         goto read_err;
1215
1216                 WARN_ON(ret > len);
1217                 *retlen += ret;
1218                 buf += ret;
1219                 from += ret;
1220                 len -= ret;
1221         }
1222         ret = 0;
1223
1224 read_err:
1225         spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_READ);
1226         return ret;
1227 }
1228
1229 static int sst_write(struct mtd_info *mtd, loff_t to, size_t len,
1230                 size_t *retlen, const u_char *buf)
1231 {
1232         struct spi_nor *nor = mtd_to_spi_nor(mtd);
1233         size_t actual;
1234         int ret;
1235
1236         dev_dbg(nor->dev, "to 0x%08x, len %zd\n", (u32)to, len);
1237
1238         ret = spi_nor_lock_and_prep(nor, SPI_NOR_OPS_WRITE);
1239         if (ret)
1240                 return ret;
1241
1242         write_enable(nor);
1243
1244         nor->sst_write_second = false;
1245
1246         actual = to % 2;
1247         /* Start write from odd address. */
1248         if (actual) {
1249                 nor->program_opcode = SPINOR_OP_BP;
1250
1251                 /* write one byte. */
1252                 ret = nor->write(nor, to, 1, buf);
1253                 if (ret < 0)
1254                         goto sst_write_err;
1255                 WARN(ret != 1, "While writing 1 byte written %i bytes\n",
1256                      (int)ret);
1257                 ret = spi_nor_wait_till_ready(nor);
1258                 if (ret)
1259                         goto sst_write_err;
1260         }
1261         to += actual;
1262
1263         /* Write out most of the data here. */
1264         for (; actual < len - 1; actual += 2) {
1265                 nor->program_opcode = SPINOR_OP_AAI_WP;
1266
1267                 /* write two bytes. */
1268                 ret = nor->write(nor, to, 2, buf + actual);
1269                 if (ret < 0)
1270                         goto sst_write_err;
1271                 WARN(ret != 2, "While writing 2 bytes written %i bytes\n",
1272                      (int)ret);
1273                 ret = spi_nor_wait_till_ready(nor);
1274                 if (ret)
1275                         goto sst_write_err;
1276                 to += 2;
1277                 nor->sst_write_second = true;
1278         }
1279         nor->sst_write_second = false;
1280
1281         write_disable(nor);
1282         ret = spi_nor_wait_till_ready(nor);
1283         if (ret)
1284                 goto sst_write_err;
1285
1286         /* Write out trailing byte if it exists. */
1287         if (actual != len) {
1288                 write_enable(nor);
1289
1290                 nor->program_opcode = SPINOR_OP_BP;
1291                 ret = nor->write(nor, to, 1, buf + actual);
1292                 if (ret < 0)
1293                         goto sst_write_err;
1294                 WARN(ret != 1, "While writing 1 byte written %i bytes\n",
1295                      (int)ret);
1296                 ret = spi_nor_wait_till_ready(nor);
1297                 if (ret)
1298                         goto sst_write_err;
1299                 write_disable(nor);
1300                 actual += 1;
1301         }
1302 sst_write_err:
1303         *retlen += actual;
1304         spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_WRITE);
1305         return ret;
1306 }
1307
1308 /*
1309  * Write an address range to the nor chip.  Data must be written in
1310  * FLASH_PAGESIZE chunks.  The address range may be any size provided
1311  * it is within the physical boundaries.
1312  */
1313 static int spi_nor_write(struct mtd_info *mtd, loff_t to, size_t len,
1314         size_t *retlen, const u_char *buf)
1315 {
1316         struct spi_nor *nor = mtd_to_spi_nor(mtd);
1317         size_t page_offset, page_remain, i;
1318         ssize_t ret;
1319
1320         dev_dbg(nor->dev, "to 0x%08x, len %zd\n", (u32)to, len);
1321
1322         ret = spi_nor_lock_and_prep(nor, SPI_NOR_OPS_WRITE);
1323         if (ret)
1324                 return ret;
1325
1326         for (i = 0; i < len; ) {
1327                 ssize_t written;
1328                 loff_t addr = to + i;
1329
1330                 /*
1331                  * If page_size is a power of two, the offset can be quickly
1332                  * calculated with an AND operation. On the other cases we
1333                  * need to do a modulus operation (more expensive).
1334                  * Power of two numbers have only one bit set and we can use
1335                  * the instruction hweight32 to detect if we need to do a
1336                  * modulus (do_div()) or not.
1337                  */
1338                 if (hweight32(nor->page_size) == 1) {
1339                         page_offset = addr & (nor->page_size - 1);
1340                 } else {
1341                         uint64_t aux = addr;
1342
1343                         page_offset = do_div(aux, nor->page_size);
1344                 }
1345                 /* the size of data remaining on the first page */
1346                 page_remain = min_t(size_t,
1347                                     nor->page_size - page_offset, len - i);
1348
1349                 if (nor->flags & SNOR_F_S3AN_ADDR_DEFAULT)
1350                         addr = spi_nor_s3an_addr_convert(nor, addr);
1351
1352                 write_enable(nor);
1353                 ret = nor->write(nor, addr, page_remain, buf + i);
1354                 if (ret < 0)
1355                         goto write_err;
1356                 written = ret;
1357
1358                 ret = spi_nor_wait_till_ready(nor);
1359                 if (ret)
1360                         goto write_err;
1361                 *retlen += written;
1362                 i += written;
1363                 if (written != page_remain) {
1364                         dev_err(nor->dev,
1365                                 "While writing %zu bytes written %zd bytes\n",
1366                                 page_remain, written);
1367                         ret = -EIO;
1368                         goto write_err;
1369                 }
1370         }
1371
1372 write_err:
1373         spi_nor_unlock_and_unprep(nor, SPI_NOR_OPS_WRITE);
1374         return ret;
1375 }
1376
1377 static int macronix_quad_enable(struct spi_nor *nor)
1378 {
1379         int ret, val;
1380
1381         val = read_sr(nor);
1382         if (val < 0)
1383                 return val;
1384         if (val & SR_QUAD_EN_MX)
1385                 return 0;
1386
1387         write_enable(nor);
1388
1389         write_sr(nor, val | SR_QUAD_EN_MX);
1390
1391         if (spi_nor_wait_till_ready(nor))
1392                 return 1;
1393
1394         ret = read_sr(nor);
1395         if (!(ret > 0 && (ret & SR_QUAD_EN_MX))) {
1396                 dev_err(nor->dev, "Macronix Quad bit not set\n");
1397                 return -EINVAL;
1398         }
1399
1400         return 0;
1401 }
1402
1403 /*
1404  * Write status Register and configuration register with 2 bytes
1405  * The first byte will be written to the status register, while the
1406  * second byte will be written to the configuration register.
1407  * Return negative if error occured.
1408  */
1409 static int write_sr_cr(struct spi_nor *nor, u16 val)
1410 {
1411         nor->cmd_buf[0] = val & 0xff;
1412         nor->cmd_buf[1] = (val >> 8);
1413
1414         return nor->write_reg(nor, SPINOR_OP_WRSR, nor->cmd_buf, 2);
1415 }
1416
1417 static int spansion_quad_enable(struct spi_nor *nor)
1418 {
1419         int ret;
1420         int quad_en = CR_QUAD_EN_SPAN << 8;
1421
1422         write_enable(nor);
1423
1424         ret = write_sr_cr(nor, quad_en);
1425         if (ret < 0) {
1426                 dev_err(nor->dev,
1427                         "error while writing configuration register\n");
1428                 return -EINVAL;
1429         }
1430
1431         ret = spi_nor_wait_till_ready(nor);
1432         if (ret) {
1433                 dev_err(nor->dev,
1434                         "timeout while writing configuration register\n");
1435                 return ret;
1436         }
1437
1438         /* read back and check it */
1439         ret = read_cr(nor);
1440         if (!(ret > 0 && (ret & CR_QUAD_EN_SPAN))) {
1441                 dev_err(nor->dev, "Spansion Quad bit not set\n");
1442                 return -EINVAL;
1443         }
1444
1445         return 0;
1446 }
1447
1448 static int set_quad_mode(struct spi_nor *nor, const struct flash_info *info)
1449 {
1450         int status;
1451
1452         switch (JEDEC_MFR(info)) {
1453         case SNOR_MFR_MACRONIX:
1454                 status = macronix_quad_enable(nor);
1455                 if (status) {
1456                         dev_err(nor->dev, "Macronix quad-read not enabled\n");
1457                         return -EINVAL;
1458                 }
1459                 return status;
1460         case SNOR_MFR_MICRON:
1461                 return 0;
1462         default:
1463                 status = spansion_quad_enable(nor);
1464                 if (status) {
1465                         dev_err(nor->dev, "Spansion quad-read not enabled\n");
1466                         return -EINVAL;
1467                 }
1468                 return status;
1469         }
1470 }
1471
1472 static int spi_nor_check(struct spi_nor *nor)
1473 {
1474         if (!nor->dev || !nor->read || !nor->write ||
1475                 !nor->read_reg || !nor->write_reg) {
1476                 pr_err("spi-nor: please fill all the necessary fields!\n");
1477                 return -EINVAL;
1478         }
1479
1480         return 0;
1481 }
1482
1483 static int s3an_nor_scan(const struct flash_info *info, struct spi_nor *nor)
1484 {
1485         int ret;
1486         u8 val;
1487
1488         ret = nor->read_reg(nor, SPINOR_OP_XRDSR, &val, 1);
1489         if (ret < 0) {
1490                 dev_err(nor->dev, "error %d reading XRDSR\n", (int) ret);
1491                 return ret;
1492         }
1493
1494         nor->erase_opcode = SPINOR_OP_XSE;
1495         nor->program_opcode = SPINOR_OP_XPP;
1496         nor->read_opcode = SPINOR_OP_READ;
1497         nor->flags |= SNOR_F_NO_OP_CHIP_ERASE;
1498
1499         /*
1500          * This flashes have a page size of 264 or 528 bytes (known as
1501          * Default addressing mode). It can be changed to a more standard
1502          * Power of two mode where the page size is 256/512. This comes
1503          * with a price: there is 3% less of space, the data is corrupted
1504          * and the page size cannot be changed back to default addressing
1505          * mode.
1506          *
1507          * The current addressing mode can be read from the XRDSR register
1508          * and should not be changed, because is a destructive operation.
1509          */
1510         if (val & XSR_PAGESIZE) {
1511                 /* Flash in Power of 2 mode */
1512                 nor->page_size = (nor->page_size == 264) ? 256 : 512;
1513                 nor->mtd.writebufsize = nor->page_size;
1514                 nor->mtd.size = 8 * nor->page_size * info->n_sectors;
1515                 nor->mtd.erasesize = 8 * nor->page_size;
1516         } else {
1517                 /* Flash in Default addressing mode */
1518                 nor->flags |= SNOR_F_S3AN_ADDR_DEFAULT;
1519         }
1520
1521         return 0;
1522 }
1523
1524 int spi_nor_scan(struct spi_nor *nor, const char *name, enum read_mode mode)
1525 {
1526         const struct flash_info *info = NULL;
1527         struct device *dev = nor->dev;
1528         struct mtd_info *mtd = &nor->mtd;
1529         struct device_node *np = spi_nor_get_flash_node(nor);
1530         int ret;
1531         int i;
1532
1533         ret = spi_nor_check(nor);
1534         if (ret)
1535                 return ret;
1536
1537         if (name)
1538                 info = spi_nor_match_id(name);
1539         /* Try to auto-detect if chip name wasn't specified or not found */
1540         if (!info)
1541                 info = spi_nor_read_id(nor);
1542         if (IS_ERR_OR_NULL(info))
1543                 return -ENOENT;
1544
1545         /*
1546          * If caller has specified name of flash model that can normally be
1547          * detected using JEDEC, let's verify it.
1548          */
1549         if (name && info->id_len) {
1550                 const struct flash_info *jinfo;
1551
1552                 jinfo = spi_nor_read_id(nor);
1553                 if (IS_ERR(jinfo)) {
1554                         return PTR_ERR(jinfo);
1555                 } else if (jinfo != info) {
1556                         /*
1557                          * JEDEC knows better, so overwrite platform ID. We
1558                          * can't trust partitions any longer, but we'll let
1559                          * mtd apply them anyway, since some partitions may be
1560                          * marked read-only, and we don't want to lose that
1561                          * information, even if it's not 100% accurate.
1562                          */
1563                         dev_warn(dev, "found %s, expected %s\n",
1564                                  jinfo->name, info->name);
1565                         info = jinfo;
1566                 }
1567         }
1568
1569         mutex_init(&nor->lock);
1570
1571         /*
1572          * Make sure the XSR_RDY flag is set before calling
1573          * spi_nor_wait_till_ready(). Xilinx S3AN share MFR
1574          * with Atmel spi-nor
1575          */
1576         if (info->flags & SPI_S3AN)
1577                 nor->flags |=  SNOR_F_READY_XSR_RDY;
1578
1579         /*
1580          * Atmel, SST, Intel/Numonyx, and others serial NOR tend to power up
1581          * with the software protection bits set
1582          */
1583
1584         if (JEDEC_MFR(info) == SNOR_MFR_ATMEL ||
1585             JEDEC_MFR(info) == SNOR_MFR_INTEL ||
1586             JEDEC_MFR(info) == SNOR_MFR_SST ||
1587             info->flags & SPI_NOR_HAS_LOCK) {
1588                 write_enable(nor);
1589                 write_sr(nor, 0);
1590                 spi_nor_wait_till_ready(nor);
1591         }
1592
1593         if (!mtd->name)
1594                 mtd->name = dev_name(dev);
1595         mtd->priv = nor;
1596         mtd->type = MTD_NORFLASH;
1597         mtd->writesize = 1;
1598         mtd->flags = MTD_CAP_NORFLASH;
1599         mtd->size = info->sector_size * info->n_sectors;
1600         mtd->_erase = spi_nor_erase;
1601         mtd->_read = spi_nor_read;
1602
1603         /* NOR protection support for STmicro/Micron chips and similar */
1604         if (JEDEC_MFR(info) == SNOR_MFR_MICRON ||
1605                         info->flags & SPI_NOR_HAS_LOCK) {
1606                 nor->flash_lock = stm_lock;
1607                 nor->flash_unlock = stm_unlock;
1608                 nor->flash_is_locked = stm_is_locked;
1609         }
1610
1611         if (nor->flash_lock && nor->flash_unlock && nor->flash_is_locked) {
1612                 mtd->_lock = spi_nor_lock;
1613                 mtd->_unlock = spi_nor_unlock;
1614                 mtd->_is_locked = spi_nor_is_locked;
1615         }
1616
1617         /* sst nor chips use AAI word program */
1618         if (info->flags & SST_WRITE)
1619                 mtd->_write = sst_write;
1620         else
1621                 mtd->_write = spi_nor_write;
1622
1623         if (info->flags & USE_FSR)
1624                 nor->flags |= SNOR_F_USE_FSR;
1625         if (info->flags & SPI_NOR_HAS_TB)
1626                 nor->flags |= SNOR_F_HAS_SR_TB;
1627
1628 #ifdef CONFIG_MTD_SPI_NOR_USE_4K_SECTORS
1629         /* prefer "small sector" erase if possible */
1630         if (info->flags & SECT_4K) {
1631                 nor->erase_opcode = SPINOR_OP_BE_4K;
1632                 mtd->erasesize = 4096;
1633         } else if (info->flags & SECT_4K_PMC) {
1634                 nor->erase_opcode = SPINOR_OP_BE_4K_PMC;
1635                 mtd->erasesize = 4096;
1636         } else
1637 #endif
1638         {
1639                 nor->erase_opcode = SPINOR_OP_SE;
1640                 mtd->erasesize = info->sector_size;
1641         }
1642
1643         if (info->flags & SPI_NOR_NO_ERASE)
1644                 mtd->flags |= MTD_NO_ERASE;
1645
1646         mtd->dev.parent = dev;
1647         nor->page_size = info->page_size;
1648         mtd->writebufsize = nor->page_size;
1649
1650         if (np) {
1651                 /* If we were instantiated by DT, use it */
1652                 if (of_property_read_bool(np, "m25p,fast-read"))
1653                         nor->flash_read = SPI_NOR_FAST;
1654                 else
1655                         nor->flash_read = SPI_NOR_NORMAL;
1656         } else {
1657                 /* If we weren't instantiated by DT, default to fast-read */
1658                 nor->flash_read = SPI_NOR_FAST;
1659         }
1660
1661         /* Some devices cannot do fast-read, no matter what DT tells us */
1662         if (info->flags & SPI_NOR_NO_FR)
1663                 nor->flash_read = SPI_NOR_NORMAL;
1664
1665         /* Quad/Dual-read mode takes precedence over fast/normal */
1666         if (mode == SPI_NOR_QUAD && info->flags & SPI_NOR_QUAD_READ) {
1667                 ret = set_quad_mode(nor, info);
1668                 if (ret) {
1669                         dev_err(dev, "quad mode not supported\n");
1670                         return ret;
1671                 }
1672                 nor->flash_read = SPI_NOR_QUAD;
1673         } else if (mode == SPI_NOR_DUAL && info->flags & SPI_NOR_DUAL_READ) {
1674                 nor->flash_read = SPI_NOR_DUAL;
1675         }
1676
1677         /* Default commands */
1678         switch (nor->flash_read) {
1679         case SPI_NOR_QUAD:
1680                 nor->read_opcode = SPINOR_OP_READ_1_1_4;
1681                 break;
1682         case SPI_NOR_DUAL:
1683                 nor->read_opcode = SPINOR_OP_READ_1_1_2;
1684                 break;
1685         case SPI_NOR_FAST:
1686                 nor->read_opcode = SPINOR_OP_READ_FAST;
1687                 break;
1688         case SPI_NOR_NORMAL:
1689                 nor->read_opcode = SPINOR_OP_READ;
1690                 break;
1691         default:
1692                 dev_err(dev, "No Read opcode defined\n");
1693                 return -EINVAL;
1694         }
1695
1696         nor->program_opcode = SPINOR_OP_PP;
1697
1698         if (info->addr_width)
1699                 nor->addr_width = info->addr_width;
1700         else if (mtd->size > 0x1000000) {
1701                 /* enable 4-byte addressing if the device exceeds 16MiB */
1702                 nor->addr_width = 4;
1703                 if (JEDEC_MFR(info) == SNOR_MFR_SPANSION ||
1704                     info->flags & SPI_NOR_4B_OPCODES)
1705                         spi_nor_set_4byte_opcodes(nor, info);
1706                 else
1707                         set_4byte(nor, info, 1);
1708         } else {
1709                 nor->addr_width = 3;
1710         }
1711
1712         if (nor->addr_width > SPI_NOR_MAX_ADDR_WIDTH) {
1713                 dev_err(dev, "address width is too large: %u\n",
1714                         nor->addr_width);
1715                 return -EINVAL;
1716         }
1717
1718         nor->read_dummy = spi_nor_read_dummy_cycles(nor);
1719
1720         if (info->flags & SPI_S3AN) {
1721                 ret = s3an_nor_scan(info, nor);
1722                 if (ret)
1723                         return ret;
1724         }
1725
1726         dev_info(dev, "%s (%lld Kbytes)\n", info->name,
1727                         (long long)mtd->size >> 10);
1728
1729         dev_dbg(dev,
1730                 "mtd .name = %s, .size = 0x%llx (%lldMiB), "
1731                 ".erasesize = 0x%.8x (%uKiB) .numeraseregions = %d\n",
1732                 mtd->name, (long long)mtd->size, (long long)(mtd->size >> 20),
1733                 mtd->erasesize, mtd->erasesize / 1024, mtd->numeraseregions);
1734
1735         if (mtd->numeraseregions)
1736                 for (i = 0; i < mtd->numeraseregions; i++)
1737                         dev_dbg(dev,
1738                                 "mtd.eraseregions[%d] = { .offset = 0x%llx, "
1739                                 ".erasesize = 0x%.8x (%uKiB), "
1740                                 ".numblocks = %d }\n",
1741                                 i, (long long)mtd->eraseregions[i].offset,
1742                                 mtd->eraseregions[i].erasesize,
1743                                 mtd->eraseregions[i].erasesize / 1024,
1744                                 mtd->eraseregions[i].numblocks);
1745         return 0;
1746 }
1747 EXPORT_SYMBOL_GPL(spi_nor_scan);
1748
1749 static const struct flash_info *spi_nor_match_id(const char *name)
1750 {
1751         const struct flash_info *id = spi_nor_ids;
1752
1753         while (id->name) {
1754                 if (!strcmp(name, id->name))
1755                         return id;
1756                 id++;
1757         }
1758         return NULL;
1759 }
1760
1761 MODULE_LICENSE("GPL");
1762 MODULE_AUTHOR("Huang Shijie <shijie8@gmail.com>");
1763 MODULE_AUTHOR("Mike Lavender");
1764 MODULE_DESCRIPTION("framework for SPI NOR");