Merge tag 'nand/for-5.17' into mtd/next
[linux-2.6-microblaze.git] / drivers / mtd / nand / raw / nand_base.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  *  Overview:
4  *   This is the generic MTD driver for NAND flash devices. It should be
5  *   capable of working with almost all NAND chips currently available.
6  *
7  *      Additional technical information is available on
8  *      http://www.linux-mtd.infradead.org/doc/nand.html
9  *
10  *  Copyright (C) 2000 Steven J. Hill (sjhill@realitydiluted.com)
11  *                2002-2006 Thomas Gleixner (tglx@linutronix.de)
12  *
13  *  Credits:
14  *      David Woodhouse for adding multichip support
15  *
16  *      Aleph One Ltd. and Toby Churchill Ltd. for supporting the
17  *      rework for 2K page size chips
18  *
19  *  TODO:
20  *      Enable cached programming for 2k page size chips
21  *      Check, if mtd->ecctype should be set to MTD_ECC_HW
22  *      if we have HW ECC support.
23  *      BBT table is not serialized, has to be fixed
24  */
25
26 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
27
28 #include <linux/module.h>
29 #include <linux/delay.h>
30 #include <linux/errno.h>
31 #include <linux/err.h>
32 #include <linux/sched.h>
33 #include <linux/slab.h>
34 #include <linux/mm.h>
35 #include <linux/types.h>
36 #include <linux/mtd/mtd.h>
37 #include <linux/mtd/nand.h>
38 #include <linux/mtd/nand-ecc-sw-hamming.h>
39 #include <linux/mtd/nand-ecc-sw-bch.h>
40 #include <linux/interrupt.h>
41 #include <linux/bitops.h>
42 #include <linux/io.h>
43 #include <linux/mtd/partitions.h>
44 #include <linux/of.h>
45 #include <linux/of_gpio.h>
46 #include <linux/gpio/consumer.h>
47
48 #include "internals.h"
49
50 static int nand_pairing_dist3_get_info(struct mtd_info *mtd, int page,
51                                        struct mtd_pairing_info *info)
52 {
53         int lastpage = (mtd->erasesize / mtd->writesize) - 1;
54         int dist = 3;
55
56         if (page == lastpage)
57                 dist = 2;
58
59         if (!page || (page & 1)) {
60                 info->group = 0;
61                 info->pair = (page + 1) / 2;
62         } else {
63                 info->group = 1;
64                 info->pair = (page + 1 - dist) / 2;
65         }
66
67         return 0;
68 }
69
70 static int nand_pairing_dist3_get_wunit(struct mtd_info *mtd,
71                                         const struct mtd_pairing_info *info)
72 {
73         int lastpair = ((mtd->erasesize / mtd->writesize) - 1) / 2;
74         int page = info->pair * 2;
75         int dist = 3;
76
77         if (!info->group && !info->pair)
78                 return 0;
79
80         if (info->pair == lastpair && info->group)
81                 dist = 2;
82
83         if (!info->group)
84                 page--;
85         else if (info->pair)
86                 page += dist - 1;
87
88         if (page >= mtd->erasesize / mtd->writesize)
89                 return -EINVAL;
90
91         return page;
92 }
93
94 const struct mtd_pairing_scheme dist3_pairing_scheme = {
95         .ngroups = 2,
96         .get_info = nand_pairing_dist3_get_info,
97         .get_wunit = nand_pairing_dist3_get_wunit,
98 };
99
100 static int check_offs_len(struct nand_chip *chip, loff_t ofs, uint64_t len)
101 {
102         int ret = 0;
103
104         /* Start address must align on block boundary */
105         if (ofs & ((1ULL << chip->phys_erase_shift) - 1)) {
106                 pr_debug("%s: unaligned address\n", __func__);
107                 ret = -EINVAL;
108         }
109
110         /* Length must align on block boundary */
111         if (len & ((1ULL << chip->phys_erase_shift) - 1)) {
112                 pr_debug("%s: length not block aligned\n", __func__);
113                 ret = -EINVAL;
114         }
115
116         return ret;
117 }
118
119 /**
120  * nand_extract_bits - Copy unaligned bits from one buffer to another one
121  * @dst: destination buffer
122  * @dst_off: bit offset at which the writing starts
123  * @src: source buffer
124  * @src_off: bit offset at which the reading starts
125  * @nbits: number of bits to copy from @src to @dst
126  *
127  * Copy bits from one memory region to another (overlap authorized).
128  */
129 void nand_extract_bits(u8 *dst, unsigned int dst_off, const u8 *src,
130                        unsigned int src_off, unsigned int nbits)
131 {
132         unsigned int tmp, n;
133
134         dst += dst_off / 8;
135         dst_off %= 8;
136         src += src_off / 8;
137         src_off %= 8;
138
139         while (nbits) {
140                 n = min3(8 - dst_off, 8 - src_off, nbits);
141
142                 tmp = (*src >> src_off) & GENMASK(n - 1, 0);
143                 *dst &= ~GENMASK(n - 1 + dst_off, dst_off);
144                 *dst |= tmp << dst_off;
145
146                 dst_off += n;
147                 if (dst_off >= 8) {
148                         dst++;
149                         dst_off -= 8;
150                 }
151
152                 src_off += n;
153                 if (src_off >= 8) {
154                         src++;
155                         src_off -= 8;
156                 }
157
158                 nbits -= n;
159         }
160 }
161 EXPORT_SYMBOL_GPL(nand_extract_bits);
162
163 /**
164  * nand_select_target() - Select a NAND target (A.K.A. die)
165  * @chip: NAND chip object
166  * @cs: the CS line to select. Note that this CS id is always from the chip
167  *      PoV, not the controller one
168  *
169  * Select a NAND target so that further operations executed on @chip go to the
170  * selected NAND target.
171  */
172 void nand_select_target(struct nand_chip *chip, unsigned int cs)
173 {
174         /*
175          * cs should always lie between 0 and nanddev_ntargets(), when that's
176          * not the case it's a bug and the caller should be fixed.
177          */
178         if (WARN_ON(cs > nanddev_ntargets(&chip->base)))
179                 return;
180
181         chip->cur_cs = cs;
182
183         if (chip->legacy.select_chip)
184                 chip->legacy.select_chip(chip, cs);
185 }
186 EXPORT_SYMBOL_GPL(nand_select_target);
187
188 /**
189  * nand_deselect_target() - Deselect the currently selected target
190  * @chip: NAND chip object
191  *
192  * Deselect the currently selected NAND target. The result of operations
193  * executed on @chip after the target has been deselected is undefined.
194  */
195 void nand_deselect_target(struct nand_chip *chip)
196 {
197         if (chip->legacy.select_chip)
198                 chip->legacy.select_chip(chip, -1);
199
200         chip->cur_cs = -1;
201 }
202 EXPORT_SYMBOL_GPL(nand_deselect_target);
203
204 /**
205  * nand_release_device - [GENERIC] release chip
206  * @chip: NAND chip object
207  *
208  * Release chip lock and wake up anyone waiting on the device.
209  */
210 static void nand_release_device(struct nand_chip *chip)
211 {
212         /* Release the controller and the chip */
213         mutex_unlock(&chip->controller->lock);
214         mutex_unlock(&chip->lock);
215 }
216
217 /**
218  * nand_bbm_get_next_page - Get the next page for bad block markers
219  * @chip: NAND chip object
220  * @page: First page to start checking for bad block marker usage
221  *
222  * Returns an integer that corresponds to the page offset within a block, for
223  * a page that is used to store bad block markers. If no more pages are
224  * available, -EINVAL is returned.
225  */
226 int nand_bbm_get_next_page(struct nand_chip *chip, int page)
227 {
228         struct mtd_info *mtd = nand_to_mtd(chip);
229         int last_page = ((mtd->erasesize - mtd->writesize) >>
230                          chip->page_shift) & chip->pagemask;
231         unsigned int bbm_flags = NAND_BBM_FIRSTPAGE | NAND_BBM_SECONDPAGE
232                 | NAND_BBM_LASTPAGE;
233
234         if (page == 0 && !(chip->options & bbm_flags))
235                 return 0;
236         if (page == 0 && chip->options & NAND_BBM_FIRSTPAGE)
237                 return 0;
238         if (page <= 1 && chip->options & NAND_BBM_SECONDPAGE)
239                 return 1;
240         if (page <= last_page && chip->options & NAND_BBM_LASTPAGE)
241                 return last_page;
242
243         return -EINVAL;
244 }
245
246 /**
247  * nand_block_bad - [DEFAULT] Read bad block marker from the chip
248  * @chip: NAND chip object
249  * @ofs: offset from device start
250  *
251  * Check, if the block is bad.
252  */
253 static int nand_block_bad(struct nand_chip *chip, loff_t ofs)
254 {
255         int first_page, page_offset;
256         int res;
257         u8 bad;
258
259         first_page = (int)(ofs >> chip->page_shift) & chip->pagemask;
260         page_offset = nand_bbm_get_next_page(chip, 0);
261
262         while (page_offset >= 0) {
263                 res = chip->ecc.read_oob(chip, first_page + page_offset);
264                 if (res < 0)
265                         return res;
266
267                 bad = chip->oob_poi[chip->badblockpos];
268
269                 if (likely(chip->badblockbits == 8))
270                         res = bad != 0xFF;
271                 else
272                         res = hweight8(bad) < chip->badblockbits;
273                 if (res)
274                         return res;
275
276                 page_offset = nand_bbm_get_next_page(chip, page_offset + 1);
277         }
278
279         return 0;
280 }
281
282 /**
283  * nand_region_is_secured() - Check if the region is secured
284  * @chip: NAND chip object
285  * @offset: Offset of the region to check
286  * @size: Size of the region to check
287  *
288  * Checks if the region is secured by comparing the offset and size with the
289  * list of secure regions obtained from DT. Returns true if the region is
290  * secured else false.
291  */
292 static bool nand_region_is_secured(struct nand_chip *chip, loff_t offset, u64 size)
293 {
294         int i;
295
296         /* Skip touching the secure regions if present */
297         for (i = 0; i < chip->nr_secure_regions; i++) {
298                 const struct nand_secure_region *region = &chip->secure_regions[i];
299
300                 if (offset + size <= region->offset ||
301                     offset >= region->offset + region->size)
302                         continue;
303
304                 pr_debug("%s: Region 0x%llx - 0x%llx is secured!",
305                          __func__, offset, offset + size);
306
307                 return true;
308         }
309
310         return false;
311 }
312
313 static int nand_isbad_bbm(struct nand_chip *chip, loff_t ofs)
314 {
315         struct mtd_info *mtd = nand_to_mtd(chip);
316
317         if (chip->options & NAND_NO_BBM_QUIRK)
318                 return 0;
319
320         /* Check if the region is secured */
321         if (nand_region_is_secured(chip, ofs, mtd->erasesize))
322                 return -EIO;
323
324         if (WARN_ONCE(mtd_expert_analysis_mode, mtd_expert_analysis_warning))
325                 return 0;
326
327         if (chip->legacy.block_bad)
328                 return chip->legacy.block_bad(chip, ofs);
329
330         return nand_block_bad(chip, ofs);
331 }
332
333 /**
334  * nand_get_device - [GENERIC] Get chip for selected access
335  * @chip: NAND chip structure
336  *
337  * Lock the device and its controller for exclusive access
338  *
339  * Return: -EBUSY if the chip has been suspended, 0 otherwise
340  */
341 static int nand_get_device(struct nand_chip *chip)
342 {
343         mutex_lock(&chip->lock);
344         if (chip->suspended) {
345                 mutex_unlock(&chip->lock);
346                 return -EBUSY;
347         }
348         mutex_lock(&chip->controller->lock);
349
350         return 0;
351 }
352
353 /**
354  * nand_check_wp - [GENERIC] check if the chip is write protected
355  * @chip: NAND chip object
356  *
357  * Check, if the device is write protected. The function expects, that the
358  * device is already selected.
359  */
360 static int nand_check_wp(struct nand_chip *chip)
361 {
362         u8 status;
363         int ret;
364
365         /* Broken xD cards report WP despite being writable */
366         if (chip->options & NAND_BROKEN_XD)
367                 return 0;
368
369         /* Check the WP bit */
370         ret = nand_status_op(chip, &status);
371         if (ret)
372                 return ret;
373
374         return status & NAND_STATUS_WP ? 0 : 1;
375 }
376
377 /**
378  * nand_fill_oob - [INTERN] Transfer client buffer to oob
379  * @chip: NAND chip object
380  * @oob: oob data buffer
381  * @len: oob data write length
382  * @ops: oob ops structure
383  */
384 static uint8_t *nand_fill_oob(struct nand_chip *chip, uint8_t *oob, size_t len,
385                               struct mtd_oob_ops *ops)
386 {
387         struct mtd_info *mtd = nand_to_mtd(chip);
388         int ret;
389
390         /*
391          * Initialise to all 0xFF, to avoid the possibility of left over OOB
392          * data from a previous OOB read.
393          */
394         memset(chip->oob_poi, 0xff, mtd->oobsize);
395
396         switch (ops->mode) {
397
398         case MTD_OPS_PLACE_OOB:
399         case MTD_OPS_RAW:
400                 memcpy(chip->oob_poi + ops->ooboffs, oob, len);
401                 return oob + len;
402
403         case MTD_OPS_AUTO_OOB:
404                 ret = mtd_ooblayout_set_databytes(mtd, oob, chip->oob_poi,
405                                                   ops->ooboffs, len);
406                 BUG_ON(ret);
407                 return oob + len;
408
409         default:
410                 BUG();
411         }
412         return NULL;
413 }
414
415 /**
416  * nand_do_write_oob - [MTD Interface] NAND write out-of-band
417  * @chip: NAND chip object
418  * @to: offset to write to
419  * @ops: oob operation description structure
420  *
421  * NAND write out-of-band.
422  */
423 static int nand_do_write_oob(struct nand_chip *chip, loff_t to,
424                              struct mtd_oob_ops *ops)
425 {
426         struct mtd_info *mtd = nand_to_mtd(chip);
427         int chipnr, page, status, len, ret;
428
429         pr_debug("%s: to = 0x%08x, len = %i\n",
430                          __func__, (unsigned int)to, (int)ops->ooblen);
431
432         len = mtd_oobavail(mtd, ops);
433
434         /* Do not allow write past end of page */
435         if ((ops->ooboffs + ops->ooblen) > len) {
436                 pr_debug("%s: attempt to write past end of page\n",
437                                 __func__);
438                 return -EINVAL;
439         }
440
441         /* Check if the region is secured */
442         if (nand_region_is_secured(chip, to, ops->ooblen))
443                 return -EIO;
444
445         chipnr = (int)(to >> chip->chip_shift);
446
447         /*
448          * Reset the chip. Some chips (like the Toshiba TC5832DC found in one
449          * of my DiskOnChip 2000 test units) will clear the whole data page too
450          * if we don't do this. I have no clue why, but I seem to have 'fixed'
451          * it in the doc2000 driver in August 1999.  dwmw2.
452          */
453         ret = nand_reset(chip, chipnr);
454         if (ret)
455                 return ret;
456
457         nand_select_target(chip, chipnr);
458
459         /* Shift to get page */
460         page = (int)(to >> chip->page_shift);
461
462         /* Check, if it is write protected */
463         if (nand_check_wp(chip)) {
464                 nand_deselect_target(chip);
465                 return -EROFS;
466         }
467
468         /* Invalidate the page cache, if we write to the cached page */
469         if (page == chip->pagecache.page)
470                 chip->pagecache.page = -1;
471
472         nand_fill_oob(chip, ops->oobbuf, ops->ooblen, ops);
473
474         if (ops->mode == MTD_OPS_RAW)
475                 status = chip->ecc.write_oob_raw(chip, page & chip->pagemask);
476         else
477                 status = chip->ecc.write_oob(chip, page & chip->pagemask);
478
479         nand_deselect_target(chip);
480
481         if (status)
482                 return status;
483
484         ops->oobretlen = ops->ooblen;
485
486         return 0;
487 }
488
489 /**
490  * nand_default_block_markbad - [DEFAULT] mark a block bad via bad block marker
491  * @chip: NAND chip object
492  * @ofs: offset from device start
493  *
494  * This is the default implementation, which can be overridden by a hardware
495  * specific driver. It provides the details for writing a bad block marker to a
496  * block.
497  */
498 static int nand_default_block_markbad(struct nand_chip *chip, loff_t ofs)
499 {
500         struct mtd_info *mtd = nand_to_mtd(chip);
501         struct mtd_oob_ops ops;
502         uint8_t buf[2] = { 0, 0 };
503         int ret = 0, res, page_offset;
504
505         memset(&ops, 0, sizeof(ops));
506         ops.oobbuf = buf;
507         ops.ooboffs = chip->badblockpos;
508         if (chip->options & NAND_BUSWIDTH_16) {
509                 ops.ooboffs &= ~0x01;
510                 ops.len = ops.ooblen = 2;
511         } else {
512                 ops.len = ops.ooblen = 1;
513         }
514         ops.mode = MTD_OPS_PLACE_OOB;
515
516         page_offset = nand_bbm_get_next_page(chip, 0);
517
518         while (page_offset >= 0) {
519                 res = nand_do_write_oob(chip,
520                                         ofs + (page_offset * mtd->writesize),
521                                         &ops);
522
523                 if (!ret)
524                         ret = res;
525
526                 page_offset = nand_bbm_get_next_page(chip, page_offset + 1);
527         }
528
529         return ret;
530 }
531
532 /**
533  * nand_markbad_bbm - mark a block by updating the BBM
534  * @chip: NAND chip object
535  * @ofs: offset of the block to mark bad
536  */
537 int nand_markbad_bbm(struct nand_chip *chip, loff_t ofs)
538 {
539         if (chip->legacy.block_markbad)
540                 return chip->legacy.block_markbad(chip, ofs);
541
542         return nand_default_block_markbad(chip, ofs);
543 }
544
545 /**
546  * nand_block_markbad_lowlevel - mark a block bad
547  * @chip: NAND chip object
548  * @ofs: offset from device start
549  *
550  * This function performs the generic NAND bad block marking steps (i.e., bad
551  * block table(s) and/or marker(s)). We only allow the hardware driver to
552  * specify how to write bad block markers to OOB (chip->legacy.block_markbad).
553  *
554  * We try operations in the following order:
555  *
556  *  (1) erase the affected block, to allow OOB marker to be written cleanly
557  *  (2) write bad block marker to OOB area of affected block (unless flag
558  *      NAND_BBT_NO_OOB_BBM is present)
559  *  (3) update the BBT
560  *
561  * Note that we retain the first error encountered in (2) or (3), finish the
562  * procedures, and dump the error in the end.
563 */
564 static int nand_block_markbad_lowlevel(struct nand_chip *chip, loff_t ofs)
565 {
566         struct mtd_info *mtd = nand_to_mtd(chip);
567         int res, ret = 0;
568
569         if (!(chip->bbt_options & NAND_BBT_NO_OOB_BBM)) {
570                 struct erase_info einfo;
571
572                 /* Attempt erase before marking OOB */
573                 memset(&einfo, 0, sizeof(einfo));
574                 einfo.addr = ofs;
575                 einfo.len = 1ULL << chip->phys_erase_shift;
576                 nand_erase_nand(chip, &einfo, 0);
577
578                 /* Write bad block marker to OOB */
579                 ret = nand_get_device(chip);
580                 if (ret)
581                         return ret;
582
583                 ret = nand_markbad_bbm(chip, ofs);
584                 nand_release_device(chip);
585         }
586
587         /* Mark block bad in BBT */
588         if (chip->bbt) {
589                 res = nand_markbad_bbt(chip, ofs);
590                 if (!ret)
591                         ret = res;
592         }
593
594         if (!ret)
595                 mtd->ecc_stats.badblocks++;
596
597         return ret;
598 }
599
600 /**
601  * nand_block_isreserved - [GENERIC] Check if a block is marked reserved.
602  * @mtd: MTD device structure
603  * @ofs: offset from device start
604  *
605  * Check if the block is marked as reserved.
606  */
607 static int nand_block_isreserved(struct mtd_info *mtd, loff_t ofs)
608 {
609         struct nand_chip *chip = mtd_to_nand(mtd);
610
611         if (!chip->bbt)
612                 return 0;
613         /* Return info from the table */
614         return nand_isreserved_bbt(chip, ofs);
615 }
616
617 /**
618  * nand_block_checkbad - [GENERIC] Check if a block is marked bad
619  * @chip: NAND chip object
620  * @ofs: offset from device start
621  * @allowbbt: 1, if its allowed to access the bbt area
622  *
623  * Check, if the block is bad. Either by reading the bad block table or
624  * calling of the scan function.
625  */
626 static int nand_block_checkbad(struct nand_chip *chip, loff_t ofs, int allowbbt)
627 {
628         /* Return info from the table */
629         if (chip->bbt)
630                 return nand_isbad_bbt(chip, ofs, allowbbt);
631
632         return nand_isbad_bbm(chip, ofs);
633 }
634
635 /**
636  * nand_soft_waitrdy - Poll STATUS reg until RDY bit is set to 1
637  * @chip: NAND chip structure
638  * @timeout_ms: Timeout in ms
639  *
640  * Poll the STATUS register using ->exec_op() until the RDY bit becomes 1.
641  * If that does not happen whitin the specified timeout, -ETIMEDOUT is
642  * returned.
643  *
644  * This helper is intended to be used when the controller does not have access
645  * to the NAND R/B pin.
646  *
647  * Be aware that calling this helper from an ->exec_op() implementation means
648  * ->exec_op() must be re-entrant.
649  *
650  * Return 0 if the NAND chip is ready, a negative error otherwise.
651  */
652 int nand_soft_waitrdy(struct nand_chip *chip, unsigned long timeout_ms)
653 {
654         const struct nand_interface_config *conf;
655         u8 status = 0;
656         int ret;
657
658         if (!nand_has_exec_op(chip))
659                 return -ENOTSUPP;
660
661         /* Wait tWB before polling the STATUS reg. */
662         conf = nand_get_interface_config(chip);
663         ndelay(NAND_COMMON_TIMING_NS(conf, tWB_max));
664
665         ret = nand_status_op(chip, NULL);
666         if (ret)
667                 return ret;
668
669         /*
670          * +1 below is necessary because if we are now in the last fraction
671          * of jiffy and msecs_to_jiffies is 1 then we will wait only that
672          * small jiffy fraction - possibly leading to false timeout
673          */
674         timeout_ms = jiffies + msecs_to_jiffies(timeout_ms) + 1;
675         do {
676                 ret = nand_read_data_op(chip, &status, sizeof(status), true,
677                                         false);
678                 if (ret)
679                         break;
680
681                 if (status & NAND_STATUS_READY)
682                         break;
683
684                 /*
685                  * Typical lowest execution time for a tR on most NANDs is 10us,
686                  * use this as polling delay before doing something smarter (ie.
687                  * deriving a delay from the timeout value, timeout_ms/ratio).
688                  */
689                 udelay(10);
690         } while (time_before(jiffies, timeout_ms));
691
692         /*
693          * We have to exit READ_STATUS mode in order to read real data on the
694          * bus in case the WAITRDY instruction is preceding a DATA_IN
695          * instruction.
696          */
697         nand_exit_status_op(chip);
698
699         if (ret)
700                 return ret;
701
702         return status & NAND_STATUS_READY ? 0 : -ETIMEDOUT;
703 };
704 EXPORT_SYMBOL_GPL(nand_soft_waitrdy);
705
706 /**
707  * nand_gpio_waitrdy - Poll R/B GPIO pin until ready
708  * @chip: NAND chip structure
709  * @gpiod: GPIO descriptor of R/B pin
710  * @timeout_ms: Timeout in ms
711  *
712  * Poll the R/B GPIO pin until it becomes ready. If that does not happen
713  * whitin the specified timeout, -ETIMEDOUT is returned.
714  *
715  * This helper is intended to be used when the controller has access to the
716  * NAND R/B pin over GPIO.
717  *
718  * Return 0 if the R/B pin indicates chip is ready, a negative error otherwise.
719  */
720 int nand_gpio_waitrdy(struct nand_chip *chip, struct gpio_desc *gpiod,
721                       unsigned long timeout_ms)
722 {
723
724         /*
725          * Wait until R/B pin indicates chip is ready or timeout occurs.
726          * +1 below is necessary because if we are now in the last fraction
727          * of jiffy and msecs_to_jiffies is 1 then we will wait only that
728          * small jiffy fraction - possibly leading to false timeout.
729          */
730         timeout_ms = jiffies + msecs_to_jiffies(timeout_ms) + 1;
731         do {
732                 if (gpiod_get_value_cansleep(gpiod))
733                         return 0;
734
735                 cond_resched();
736         } while (time_before(jiffies, timeout_ms));
737
738         return gpiod_get_value_cansleep(gpiod) ? 0 : -ETIMEDOUT;
739 };
740 EXPORT_SYMBOL_GPL(nand_gpio_waitrdy);
741
742 /**
743  * panic_nand_wait - [GENERIC] wait until the command is done
744  * @chip: NAND chip structure
745  * @timeo: timeout
746  *
747  * Wait for command done. This is a helper function for nand_wait used when
748  * we are in interrupt context. May happen when in panic and trying to write
749  * an oops through mtdoops.
750  */
751 void panic_nand_wait(struct nand_chip *chip, unsigned long timeo)
752 {
753         int i;
754         for (i = 0; i < timeo; i++) {
755                 if (chip->legacy.dev_ready) {
756                         if (chip->legacy.dev_ready(chip))
757                                 break;
758                 } else {
759                         int ret;
760                         u8 status;
761
762                         ret = nand_read_data_op(chip, &status, sizeof(status),
763                                                 true, false);
764                         if (ret)
765                                 return;
766
767                         if (status & NAND_STATUS_READY)
768                                 break;
769                 }
770                 mdelay(1);
771         }
772 }
773
774 static bool nand_supports_get_features(struct nand_chip *chip, int addr)
775 {
776         return (chip->parameters.supports_set_get_features &&
777                 test_bit(addr, chip->parameters.get_feature_list));
778 }
779
780 static bool nand_supports_set_features(struct nand_chip *chip, int addr)
781 {
782         return (chip->parameters.supports_set_get_features &&
783                 test_bit(addr, chip->parameters.set_feature_list));
784 }
785
786 /**
787  * nand_reset_interface - Reset data interface and timings
788  * @chip: The NAND chip
789  * @chipnr: Internal die id
790  *
791  * Reset the Data interface and timings to ONFI mode 0.
792  *
793  * Returns 0 for success or negative error code otherwise.
794  */
795 static int nand_reset_interface(struct nand_chip *chip, int chipnr)
796 {
797         const struct nand_controller_ops *ops = chip->controller->ops;
798         int ret;
799
800         if (!nand_controller_can_setup_interface(chip))
801                 return 0;
802
803         /*
804          * The ONFI specification says:
805          * "
806          * To transition from NV-DDR or NV-DDR2 to the SDR data
807          * interface, the host shall use the Reset (FFh) command
808          * using SDR timing mode 0. A device in any timing mode is
809          * required to recognize Reset (FFh) command issued in SDR
810          * timing mode 0.
811          * "
812          *
813          * Configure the data interface in SDR mode and set the
814          * timings to timing mode 0.
815          */
816
817         chip->current_interface_config = nand_get_reset_interface_config();
818         ret = ops->setup_interface(chip, chipnr,
819                                    chip->current_interface_config);
820         if (ret)
821                 pr_err("Failed to configure data interface to SDR timing mode 0\n");
822
823         return ret;
824 }
825
826 /**
827  * nand_setup_interface - Setup the best data interface and timings
828  * @chip: The NAND chip
829  * @chipnr: Internal die id
830  *
831  * Configure what has been reported to be the best data interface and NAND
832  * timings supported by the chip and the driver.
833  *
834  * Returns 0 for success or negative error code otherwise.
835  */
836 static int nand_setup_interface(struct nand_chip *chip, int chipnr)
837 {
838         const struct nand_controller_ops *ops = chip->controller->ops;
839         u8 tmode_param[ONFI_SUBFEATURE_PARAM_LEN] = { }, request;
840         int ret;
841
842         if (!nand_controller_can_setup_interface(chip))
843                 return 0;
844
845         /*
846          * A nand_reset_interface() put both the NAND chip and the NAND
847          * controller in timings mode 0. If the default mode for this chip is
848          * also 0, no need to proceed to the change again. Plus, at probe time,
849          * nand_setup_interface() uses ->set/get_features() which would
850          * fail anyway as the parameter page is not available yet.
851          */
852         if (!chip->best_interface_config)
853                 return 0;
854
855         request = chip->best_interface_config->timings.mode;
856         if (nand_interface_is_sdr(chip->best_interface_config))
857                 request |= ONFI_DATA_INTERFACE_SDR;
858         else
859                 request |= ONFI_DATA_INTERFACE_NVDDR;
860         tmode_param[0] = request;
861
862         /* Change the mode on the chip side (if supported by the NAND chip) */
863         if (nand_supports_set_features(chip, ONFI_FEATURE_ADDR_TIMING_MODE)) {
864                 nand_select_target(chip, chipnr);
865                 ret = nand_set_features(chip, ONFI_FEATURE_ADDR_TIMING_MODE,
866                                         tmode_param);
867                 nand_deselect_target(chip);
868                 if (ret)
869                         return ret;
870         }
871
872         /* Change the mode on the controller side */
873         ret = ops->setup_interface(chip, chipnr, chip->best_interface_config);
874         if (ret)
875                 return ret;
876
877         /* Check the mode has been accepted by the chip, if supported */
878         if (!nand_supports_get_features(chip, ONFI_FEATURE_ADDR_TIMING_MODE))
879                 goto update_interface_config;
880
881         memset(tmode_param, 0, ONFI_SUBFEATURE_PARAM_LEN);
882         nand_select_target(chip, chipnr);
883         ret = nand_get_features(chip, ONFI_FEATURE_ADDR_TIMING_MODE,
884                                 tmode_param);
885         nand_deselect_target(chip);
886         if (ret)
887                 goto err_reset_chip;
888
889         if (request != tmode_param[0]) {
890                 pr_warn("%s timing mode %d not acknowledged by the NAND chip\n",
891                         nand_interface_is_nvddr(chip->best_interface_config) ? "NV-DDR" : "SDR",
892                         chip->best_interface_config->timings.mode);
893                 pr_debug("NAND chip would work in %s timing mode %d\n",
894                          tmode_param[0] & ONFI_DATA_INTERFACE_NVDDR ? "NV-DDR" : "SDR",
895                          (unsigned int)ONFI_TIMING_MODE_PARAM(tmode_param[0]));
896                 goto err_reset_chip;
897         }
898
899 update_interface_config:
900         chip->current_interface_config = chip->best_interface_config;
901
902         return 0;
903
904 err_reset_chip:
905         /*
906          * Fallback to mode 0 if the chip explicitly did not ack the chosen
907          * timing mode.
908          */
909         nand_reset_interface(chip, chipnr);
910         nand_select_target(chip, chipnr);
911         nand_reset_op(chip);
912         nand_deselect_target(chip);
913
914         return ret;
915 }
916
917 /**
918  * nand_choose_best_sdr_timings - Pick up the best SDR timings that both the
919  *                                NAND controller and the NAND chip support
920  * @chip: the NAND chip
921  * @iface: the interface configuration (can eventually be updated)
922  * @spec_timings: specific timings, when not fitting the ONFI specification
923  *
924  * If specific timings are provided, use them. Otherwise, retrieve supported
925  * timing modes from ONFI information.
926  */
927 int nand_choose_best_sdr_timings(struct nand_chip *chip,
928                                  struct nand_interface_config *iface,
929                                  struct nand_sdr_timings *spec_timings)
930 {
931         const struct nand_controller_ops *ops = chip->controller->ops;
932         int best_mode = 0, mode, ret;
933
934         iface->type = NAND_SDR_IFACE;
935
936         if (spec_timings) {
937                 iface->timings.sdr = *spec_timings;
938                 iface->timings.mode = onfi_find_closest_sdr_mode(spec_timings);
939
940                 /* Verify the controller supports the requested interface */
941                 ret = ops->setup_interface(chip, NAND_DATA_IFACE_CHECK_ONLY,
942                                            iface);
943                 if (!ret) {
944                         chip->best_interface_config = iface;
945                         return ret;
946                 }
947
948                 /* Fallback to slower modes */
949                 best_mode = iface->timings.mode;
950         } else if (chip->parameters.onfi) {
951                 best_mode = fls(chip->parameters.onfi->sdr_timing_modes) - 1;
952         }
953
954         for (mode = best_mode; mode >= 0; mode--) {
955                 onfi_fill_interface_config(chip, iface, NAND_SDR_IFACE, mode);
956
957                 ret = ops->setup_interface(chip, NAND_DATA_IFACE_CHECK_ONLY,
958                                            iface);
959                 if (!ret) {
960                         chip->best_interface_config = iface;
961                         break;
962                 }
963         }
964
965         return ret;
966 }
967
968 /**
969  * nand_choose_best_nvddr_timings - Pick up the best NVDDR timings that both the
970  *                                  NAND controller and the NAND chip support
971  * @chip: the NAND chip
972  * @iface: the interface configuration (can eventually be updated)
973  * @spec_timings: specific timings, when not fitting the ONFI specification
974  *
975  * If specific timings are provided, use them. Otherwise, retrieve supported
976  * timing modes from ONFI information.
977  */
978 int nand_choose_best_nvddr_timings(struct nand_chip *chip,
979                                    struct nand_interface_config *iface,
980                                    struct nand_nvddr_timings *spec_timings)
981 {
982         const struct nand_controller_ops *ops = chip->controller->ops;
983         int best_mode = 0, mode, ret;
984
985         iface->type = NAND_NVDDR_IFACE;
986
987         if (spec_timings) {
988                 iface->timings.nvddr = *spec_timings;
989                 iface->timings.mode = onfi_find_closest_nvddr_mode(spec_timings);
990
991                 /* Verify the controller supports the requested interface */
992                 ret = ops->setup_interface(chip, NAND_DATA_IFACE_CHECK_ONLY,
993                                            iface);
994                 if (!ret) {
995                         chip->best_interface_config = iface;
996                         return ret;
997                 }
998
999                 /* Fallback to slower modes */
1000                 best_mode = iface->timings.mode;
1001         } else if (chip->parameters.onfi) {
1002                 best_mode = fls(chip->parameters.onfi->nvddr_timing_modes) - 1;
1003         }
1004
1005         for (mode = best_mode; mode >= 0; mode--) {
1006                 onfi_fill_interface_config(chip, iface, NAND_NVDDR_IFACE, mode);
1007
1008                 ret = ops->setup_interface(chip, NAND_DATA_IFACE_CHECK_ONLY,
1009                                            iface);
1010                 if (!ret) {
1011                         chip->best_interface_config = iface;
1012                         break;
1013                 }
1014         }
1015
1016         return ret;
1017 }
1018
1019 /**
1020  * nand_choose_best_timings - Pick up the best NVDDR or SDR timings that both
1021  *                            NAND controller and the NAND chip support
1022  * @chip: the NAND chip
1023  * @iface: the interface configuration (can eventually be updated)
1024  *
1025  * If specific timings are provided, use them. Otherwise, retrieve supported
1026  * timing modes from ONFI information.
1027  */
1028 static int nand_choose_best_timings(struct nand_chip *chip,
1029                                     struct nand_interface_config *iface)
1030 {
1031         int ret;
1032
1033         /* Try the fastest timings: NV-DDR */
1034         ret = nand_choose_best_nvddr_timings(chip, iface, NULL);
1035         if (!ret)
1036                 return 0;
1037
1038         /* Fallback to SDR timings otherwise */
1039         return nand_choose_best_sdr_timings(chip, iface, NULL);
1040 }
1041
1042 /**
1043  * nand_choose_interface_config - find the best data interface and timings
1044  * @chip: The NAND chip
1045  *
1046  * Find the best data interface and NAND timings supported by the chip
1047  * and the driver. Eventually let the NAND manufacturer driver propose his own
1048  * set of timings.
1049  *
1050  * After this function nand_chip->interface_config is initialized with the best
1051  * timing mode available.
1052  *
1053  * Returns 0 for success or negative error code otherwise.
1054  */
1055 static int nand_choose_interface_config(struct nand_chip *chip)
1056 {
1057         struct nand_interface_config *iface;
1058         int ret;
1059
1060         if (!nand_controller_can_setup_interface(chip))
1061                 return 0;
1062
1063         iface = kzalloc(sizeof(*iface), GFP_KERNEL);
1064         if (!iface)
1065                 return -ENOMEM;
1066
1067         if (chip->ops.choose_interface_config)
1068                 ret = chip->ops.choose_interface_config(chip, iface);
1069         else
1070                 ret = nand_choose_best_timings(chip, iface);
1071
1072         if (ret)
1073                 kfree(iface);
1074
1075         return ret;
1076 }
1077
1078 /**
1079  * nand_fill_column_cycles - fill the column cycles of an address
1080  * @chip: The NAND chip
1081  * @addrs: Array of address cycles to fill
1082  * @offset_in_page: The offset in the page
1083  *
1084  * Fills the first or the first two bytes of the @addrs field depending
1085  * on the NAND bus width and the page size.
1086  *
1087  * Returns the number of cycles needed to encode the column, or a negative
1088  * error code in case one of the arguments is invalid.
1089  */
1090 static int nand_fill_column_cycles(struct nand_chip *chip, u8 *addrs,
1091                                    unsigned int offset_in_page)
1092 {
1093         struct mtd_info *mtd = nand_to_mtd(chip);
1094
1095         /* Make sure the offset is less than the actual page size. */
1096         if (offset_in_page > mtd->writesize + mtd->oobsize)
1097                 return -EINVAL;
1098
1099         /*
1100          * On small page NANDs, there's a dedicated command to access the OOB
1101          * area, and the column address is relative to the start of the OOB
1102          * area, not the start of the page. Asjust the address accordingly.
1103          */
1104         if (mtd->writesize <= 512 && offset_in_page >= mtd->writesize)
1105                 offset_in_page -= mtd->writesize;
1106
1107         /*
1108          * The offset in page is expressed in bytes, if the NAND bus is 16-bit
1109          * wide, then it must be divided by 2.
1110          */
1111         if (chip->options & NAND_BUSWIDTH_16) {
1112                 if (WARN_ON(offset_in_page % 2))
1113                         return -EINVAL;
1114
1115                 offset_in_page /= 2;
1116         }
1117
1118         addrs[0] = offset_in_page;
1119
1120         /*
1121          * Small page NANDs use 1 cycle for the columns, while large page NANDs
1122          * need 2
1123          */
1124         if (mtd->writesize <= 512)
1125                 return 1;
1126
1127         addrs[1] = offset_in_page >> 8;
1128
1129         return 2;
1130 }
1131
1132 static int nand_sp_exec_read_page_op(struct nand_chip *chip, unsigned int page,
1133                                      unsigned int offset_in_page, void *buf,
1134                                      unsigned int len)
1135 {
1136         const struct nand_interface_config *conf =
1137                 nand_get_interface_config(chip);
1138         struct mtd_info *mtd = nand_to_mtd(chip);
1139         u8 addrs[4];
1140         struct nand_op_instr instrs[] = {
1141                 NAND_OP_CMD(NAND_CMD_READ0, 0),
1142                 NAND_OP_ADDR(3, addrs, NAND_COMMON_TIMING_NS(conf, tWB_max)),
1143                 NAND_OP_WAIT_RDY(NAND_COMMON_TIMING_MS(conf, tR_max),
1144                                  NAND_COMMON_TIMING_NS(conf, tRR_min)),
1145                 NAND_OP_DATA_IN(len, buf, 0),
1146         };
1147         struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1148         int ret;
1149
1150         /* Drop the DATA_IN instruction if len is set to 0. */
1151         if (!len)
1152                 op.ninstrs--;
1153
1154         if (offset_in_page >= mtd->writesize)
1155                 instrs[0].ctx.cmd.opcode = NAND_CMD_READOOB;
1156         else if (offset_in_page >= 256 &&
1157                  !(chip->options & NAND_BUSWIDTH_16))
1158                 instrs[0].ctx.cmd.opcode = NAND_CMD_READ1;
1159
1160         ret = nand_fill_column_cycles(chip, addrs, offset_in_page);
1161         if (ret < 0)
1162                 return ret;
1163
1164         addrs[1] = page;
1165         addrs[2] = page >> 8;
1166
1167         if (chip->options & NAND_ROW_ADDR_3) {
1168                 addrs[3] = page >> 16;
1169                 instrs[1].ctx.addr.naddrs++;
1170         }
1171
1172         return nand_exec_op(chip, &op);
1173 }
1174
1175 static int nand_lp_exec_read_page_op(struct nand_chip *chip, unsigned int page,
1176                                      unsigned int offset_in_page, void *buf,
1177                                      unsigned int len)
1178 {
1179         const struct nand_interface_config *conf =
1180                 nand_get_interface_config(chip);
1181         u8 addrs[5];
1182         struct nand_op_instr instrs[] = {
1183                 NAND_OP_CMD(NAND_CMD_READ0, 0),
1184                 NAND_OP_ADDR(4, addrs, 0),
1185                 NAND_OP_CMD(NAND_CMD_READSTART, NAND_COMMON_TIMING_NS(conf, tWB_max)),
1186                 NAND_OP_WAIT_RDY(NAND_COMMON_TIMING_MS(conf, tR_max),
1187                                  NAND_COMMON_TIMING_NS(conf, tRR_min)),
1188                 NAND_OP_DATA_IN(len, buf, 0),
1189         };
1190         struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1191         int ret;
1192
1193         /* Drop the DATA_IN instruction if len is set to 0. */
1194         if (!len)
1195                 op.ninstrs--;
1196
1197         ret = nand_fill_column_cycles(chip, addrs, offset_in_page);
1198         if (ret < 0)
1199                 return ret;
1200
1201         addrs[2] = page;
1202         addrs[3] = page >> 8;
1203
1204         if (chip->options & NAND_ROW_ADDR_3) {
1205                 addrs[4] = page >> 16;
1206                 instrs[1].ctx.addr.naddrs++;
1207         }
1208
1209         return nand_exec_op(chip, &op);
1210 }
1211
1212 /**
1213  * nand_read_page_op - Do a READ PAGE operation
1214  * @chip: The NAND chip
1215  * @page: page to read
1216  * @offset_in_page: offset within the page
1217  * @buf: buffer used to store the data
1218  * @len: length of the buffer
1219  *
1220  * This function issues a READ PAGE operation.
1221  * This function does not select/unselect the CS line.
1222  *
1223  * Returns 0 on success, a negative error code otherwise.
1224  */
1225 int nand_read_page_op(struct nand_chip *chip, unsigned int page,
1226                       unsigned int offset_in_page, void *buf, unsigned int len)
1227 {
1228         struct mtd_info *mtd = nand_to_mtd(chip);
1229
1230         if (len && !buf)
1231                 return -EINVAL;
1232
1233         if (offset_in_page + len > mtd->writesize + mtd->oobsize)
1234                 return -EINVAL;
1235
1236         if (nand_has_exec_op(chip)) {
1237                 if (mtd->writesize > 512)
1238                         return nand_lp_exec_read_page_op(chip, page,
1239                                                          offset_in_page, buf,
1240                                                          len);
1241
1242                 return nand_sp_exec_read_page_op(chip, page, offset_in_page,
1243                                                  buf, len);
1244         }
1245
1246         chip->legacy.cmdfunc(chip, NAND_CMD_READ0, offset_in_page, page);
1247         if (len)
1248                 chip->legacy.read_buf(chip, buf, len);
1249
1250         return 0;
1251 }
1252 EXPORT_SYMBOL_GPL(nand_read_page_op);
1253
1254 /**
1255  * nand_read_param_page_op - Do a READ PARAMETER PAGE operation
1256  * @chip: The NAND chip
1257  * @page: parameter page to read
1258  * @buf: buffer used to store the data
1259  * @len: length of the buffer
1260  *
1261  * This function issues a READ PARAMETER PAGE operation.
1262  * This function does not select/unselect the CS line.
1263  *
1264  * Returns 0 on success, a negative error code otherwise.
1265  */
1266 int nand_read_param_page_op(struct nand_chip *chip, u8 page, void *buf,
1267                             unsigned int len)
1268 {
1269         unsigned int i;
1270         u8 *p = buf;
1271
1272         if (len && !buf)
1273                 return -EINVAL;
1274
1275         if (nand_has_exec_op(chip)) {
1276                 const struct nand_interface_config *conf =
1277                         nand_get_interface_config(chip);
1278                 struct nand_op_instr instrs[] = {
1279                         NAND_OP_CMD(NAND_CMD_PARAM, 0),
1280                         NAND_OP_ADDR(1, &page,
1281                                      NAND_COMMON_TIMING_NS(conf, tWB_max)),
1282                         NAND_OP_WAIT_RDY(NAND_COMMON_TIMING_MS(conf, tR_max),
1283                                          NAND_COMMON_TIMING_NS(conf, tRR_min)),
1284                         NAND_OP_8BIT_DATA_IN(len, buf, 0),
1285                 };
1286                 struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1287
1288                 /* Drop the DATA_IN instruction if len is set to 0. */
1289                 if (!len)
1290                         op.ninstrs--;
1291
1292                 return nand_exec_op(chip, &op);
1293         }
1294
1295         chip->legacy.cmdfunc(chip, NAND_CMD_PARAM, page, -1);
1296         for (i = 0; i < len; i++)
1297                 p[i] = chip->legacy.read_byte(chip);
1298
1299         return 0;
1300 }
1301
1302 /**
1303  * nand_change_read_column_op - Do a CHANGE READ COLUMN operation
1304  * @chip: The NAND chip
1305  * @offset_in_page: offset within the page
1306  * @buf: buffer used to store the data
1307  * @len: length of the buffer
1308  * @force_8bit: force 8-bit bus access
1309  *
1310  * This function issues a CHANGE READ COLUMN operation.
1311  * This function does not select/unselect the CS line.
1312  *
1313  * Returns 0 on success, a negative error code otherwise.
1314  */
1315 int nand_change_read_column_op(struct nand_chip *chip,
1316                                unsigned int offset_in_page, void *buf,
1317                                unsigned int len, bool force_8bit)
1318 {
1319         struct mtd_info *mtd = nand_to_mtd(chip);
1320
1321         if (len && !buf)
1322                 return -EINVAL;
1323
1324         if (offset_in_page + len > mtd->writesize + mtd->oobsize)
1325                 return -EINVAL;
1326
1327         /* Small page NANDs do not support column change. */
1328         if (mtd->writesize <= 512)
1329                 return -ENOTSUPP;
1330
1331         if (nand_has_exec_op(chip)) {
1332                 const struct nand_interface_config *conf =
1333                         nand_get_interface_config(chip);
1334                 u8 addrs[2] = {};
1335                 struct nand_op_instr instrs[] = {
1336                         NAND_OP_CMD(NAND_CMD_RNDOUT, 0),
1337                         NAND_OP_ADDR(2, addrs, 0),
1338                         NAND_OP_CMD(NAND_CMD_RNDOUTSTART,
1339                                     NAND_COMMON_TIMING_NS(conf, tCCS_min)),
1340                         NAND_OP_DATA_IN(len, buf, 0),
1341                 };
1342                 struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1343                 int ret;
1344
1345                 ret = nand_fill_column_cycles(chip, addrs, offset_in_page);
1346                 if (ret < 0)
1347                         return ret;
1348
1349                 /* Drop the DATA_IN instruction if len is set to 0. */
1350                 if (!len)
1351                         op.ninstrs--;
1352
1353                 instrs[3].ctx.data.force_8bit = force_8bit;
1354
1355                 return nand_exec_op(chip, &op);
1356         }
1357
1358         chip->legacy.cmdfunc(chip, NAND_CMD_RNDOUT, offset_in_page, -1);
1359         if (len)
1360                 chip->legacy.read_buf(chip, buf, len);
1361
1362         return 0;
1363 }
1364 EXPORT_SYMBOL_GPL(nand_change_read_column_op);
1365
1366 /**
1367  * nand_read_oob_op - Do a READ OOB operation
1368  * @chip: The NAND chip
1369  * @page: page to read
1370  * @offset_in_oob: offset within the OOB area
1371  * @buf: buffer used to store the data
1372  * @len: length of the buffer
1373  *
1374  * This function issues a READ OOB operation.
1375  * This function does not select/unselect the CS line.
1376  *
1377  * Returns 0 on success, a negative error code otherwise.
1378  */
1379 int nand_read_oob_op(struct nand_chip *chip, unsigned int page,
1380                      unsigned int offset_in_oob, void *buf, unsigned int len)
1381 {
1382         struct mtd_info *mtd = nand_to_mtd(chip);
1383
1384         if (len && !buf)
1385                 return -EINVAL;
1386
1387         if (offset_in_oob + len > mtd->oobsize)
1388                 return -EINVAL;
1389
1390         if (nand_has_exec_op(chip))
1391                 return nand_read_page_op(chip, page,
1392                                          mtd->writesize + offset_in_oob,
1393                                          buf, len);
1394
1395         chip->legacy.cmdfunc(chip, NAND_CMD_READOOB, offset_in_oob, page);
1396         if (len)
1397                 chip->legacy.read_buf(chip, buf, len);
1398
1399         return 0;
1400 }
1401 EXPORT_SYMBOL_GPL(nand_read_oob_op);
1402
1403 static int nand_exec_prog_page_op(struct nand_chip *chip, unsigned int page,
1404                                   unsigned int offset_in_page, const void *buf,
1405                                   unsigned int len, bool prog)
1406 {
1407         const struct nand_interface_config *conf =
1408                 nand_get_interface_config(chip);
1409         struct mtd_info *mtd = nand_to_mtd(chip);
1410         u8 addrs[5] = {};
1411         struct nand_op_instr instrs[] = {
1412                 /*
1413                  * The first instruction will be dropped if we're dealing
1414                  * with a large page NAND and adjusted if we're dealing
1415                  * with a small page NAND and the page offset is > 255.
1416                  */
1417                 NAND_OP_CMD(NAND_CMD_READ0, 0),
1418                 NAND_OP_CMD(NAND_CMD_SEQIN, 0),
1419                 NAND_OP_ADDR(0, addrs, NAND_COMMON_TIMING_NS(conf, tADL_min)),
1420                 NAND_OP_DATA_OUT(len, buf, 0),
1421                 NAND_OP_CMD(NAND_CMD_PAGEPROG,
1422                             NAND_COMMON_TIMING_NS(conf, tWB_max)),
1423                 NAND_OP_WAIT_RDY(NAND_COMMON_TIMING_MS(conf, tPROG_max), 0),
1424         };
1425         struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1426         int naddrs = nand_fill_column_cycles(chip, addrs, offset_in_page);
1427
1428         if (naddrs < 0)
1429                 return naddrs;
1430
1431         addrs[naddrs++] = page;
1432         addrs[naddrs++] = page >> 8;
1433         if (chip->options & NAND_ROW_ADDR_3)
1434                 addrs[naddrs++] = page >> 16;
1435
1436         instrs[2].ctx.addr.naddrs = naddrs;
1437
1438         /* Drop the last two instructions if we're not programming the page. */
1439         if (!prog) {
1440                 op.ninstrs -= 2;
1441                 /* Also drop the DATA_OUT instruction if empty. */
1442                 if (!len)
1443                         op.ninstrs--;
1444         }
1445
1446         if (mtd->writesize <= 512) {
1447                 /*
1448                  * Small pages need some more tweaking: we have to adjust the
1449                  * first instruction depending on the page offset we're trying
1450                  * to access.
1451                  */
1452                 if (offset_in_page >= mtd->writesize)
1453                         instrs[0].ctx.cmd.opcode = NAND_CMD_READOOB;
1454                 else if (offset_in_page >= 256 &&
1455                          !(chip->options & NAND_BUSWIDTH_16))
1456                         instrs[0].ctx.cmd.opcode = NAND_CMD_READ1;
1457         } else {
1458                 /*
1459                  * Drop the first command if we're dealing with a large page
1460                  * NAND.
1461                  */
1462                 op.instrs++;
1463                 op.ninstrs--;
1464         }
1465
1466         return nand_exec_op(chip, &op);
1467 }
1468
1469 /**
1470  * nand_prog_page_begin_op - starts a PROG PAGE operation
1471  * @chip: The NAND chip
1472  * @page: page to write
1473  * @offset_in_page: offset within the page
1474  * @buf: buffer containing the data to write to the page
1475  * @len: length of the buffer
1476  *
1477  * This function issues the first half of a PROG PAGE operation.
1478  * This function does not select/unselect the CS line.
1479  *
1480  * Returns 0 on success, a negative error code otherwise.
1481  */
1482 int nand_prog_page_begin_op(struct nand_chip *chip, unsigned int page,
1483                             unsigned int offset_in_page, const void *buf,
1484                             unsigned int len)
1485 {
1486         struct mtd_info *mtd = nand_to_mtd(chip);
1487
1488         if (len && !buf)
1489                 return -EINVAL;
1490
1491         if (offset_in_page + len > mtd->writesize + mtd->oobsize)
1492                 return -EINVAL;
1493
1494         if (nand_has_exec_op(chip))
1495                 return nand_exec_prog_page_op(chip, page, offset_in_page, buf,
1496                                               len, false);
1497
1498         chip->legacy.cmdfunc(chip, NAND_CMD_SEQIN, offset_in_page, page);
1499
1500         if (buf)
1501                 chip->legacy.write_buf(chip, buf, len);
1502
1503         return 0;
1504 }
1505 EXPORT_SYMBOL_GPL(nand_prog_page_begin_op);
1506
1507 /**
1508  * nand_prog_page_end_op - ends a PROG PAGE operation
1509  * @chip: The NAND chip
1510  *
1511  * This function issues the second half of a PROG PAGE operation.
1512  * This function does not select/unselect the CS line.
1513  *
1514  * Returns 0 on success, a negative error code otherwise.
1515  */
1516 int nand_prog_page_end_op(struct nand_chip *chip)
1517 {
1518         int ret;
1519         u8 status;
1520
1521         if (nand_has_exec_op(chip)) {
1522                 const struct nand_interface_config *conf =
1523                         nand_get_interface_config(chip);
1524                 struct nand_op_instr instrs[] = {
1525                         NAND_OP_CMD(NAND_CMD_PAGEPROG,
1526                                     NAND_COMMON_TIMING_NS(conf, tWB_max)),
1527                         NAND_OP_WAIT_RDY(NAND_COMMON_TIMING_MS(conf, tPROG_max),
1528                                          0),
1529                 };
1530                 struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1531
1532                 ret = nand_exec_op(chip, &op);
1533                 if (ret)
1534                         return ret;
1535
1536                 ret = nand_status_op(chip, &status);
1537                 if (ret)
1538                         return ret;
1539         } else {
1540                 chip->legacy.cmdfunc(chip, NAND_CMD_PAGEPROG, -1, -1);
1541                 ret = chip->legacy.waitfunc(chip);
1542                 if (ret < 0)
1543                         return ret;
1544
1545                 status = ret;
1546         }
1547
1548         if (status & NAND_STATUS_FAIL)
1549                 return -EIO;
1550
1551         return 0;
1552 }
1553 EXPORT_SYMBOL_GPL(nand_prog_page_end_op);
1554
1555 /**
1556  * nand_prog_page_op - Do a full PROG PAGE operation
1557  * @chip: The NAND chip
1558  * @page: page to write
1559  * @offset_in_page: offset within the page
1560  * @buf: buffer containing the data to write to the page
1561  * @len: length of the buffer
1562  *
1563  * This function issues a full PROG PAGE operation.
1564  * This function does not select/unselect the CS line.
1565  *
1566  * Returns 0 on success, a negative error code otherwise.
1567  */
1568 int nand_prog_page_op(struct nand_chip *chip, unsigned int page,
1569                       unsigned int offset_in_page, const void *buf,
1570                       unsigned int len)
1571 {
1572         struct mtd_info *mtd = nand_to_mtd(chip);
1573         u8 status;
1574         int ret;
1575
1576         if (!len || !buf)
1577                 return -EINVAL;
1578
1579         if (offset_in_page + len > mtd->writesize + mtd->oobsize)
1580                 return -EINVAL;
1581
1582         if (nand_has_exec_op(chip)) {
1583                 ret = nand_exec_prog_page_op(chip, page, offset_in_page, buf,
1584                                                 len, true);
1585                 if (ret)
1586                         return ret;
1587
1588                 ret = nand_status_op(chip, &status);
1589                 if (ret)
1590                         return ret;
1591         } else {
1592                 chip->legacy.cmdfunc(chip, NAND_CMD_SEQIN, offset_in_page,
1593                                      page);
1594                 chip->legacy.write_buf(chip, buf, len);
1595                 chip->legacy.cmdfunc(chip, NAND_CMD_PAGEPROG, -1, -1);
1596                 ret = chip->legacy.waitfunc(chip);
1597                 if (ret < 0)
1598                         return ret;
1599
1600                 status = ret;
1601         }
1602
1603         if (status & NAND_STATUS_FAIL)
1604                 return -EIO;
1605
1606         return 0;
1607 }
1608 EXPORT_SYMBOL_GPL(nand_prog_page_op);
1609
1610 /**
1611  * nand_change_write_column_op - Do a CHANGE WRITE COLUMN operation
1612  * @chip: The NAND chip
1613  * @offset_in_page: offset within the page
1614  * @buf: buffer containing the data to send to the NAND
1615  * @len: length of the buffer
1616  * @force_8bit: force 8-bit bus access
1617  *
1618  * This function issues a CHANGE WRITE COLUMN operation.
1619  * This function does not select/unselect the CS line.
1620  *
1621  * Returns 0 on success, a negative error code otherwise.
1622  */
1623 int nand_change_write_column_op(struct nand_chip *chip,
1624                                 unsigned int offset_in_page,
1625                                 const void *buf, unsigned int len,
1626                                 bool force_8bit)
1627 {
1628         struct mtd_info *mtd = nand_to_mtd(chip);
1629
1630         if (len && !buf)
1631                 return -EINVAL;
1632
1633         if (offset_in_page + len > mtd->writesize + mtd->oobsize)
1634                 return -EINVAL;
1635
1636         /* Small page NANDs do not support column change. */
1637         if (mtd->writesize <= 512)
1638                 return -ENOTSUPP;
1639
1640         if (nand_has_exec_op(chip)) {
1641                 const struct nand_interface_config *conf =
1642                         nand_get_interface_config(chip);
1643                 u8 addrs[2];
1644                 struct nand_op_instr instrs[] = {
1645                         NAND_OP_CMD(NAND_CMD_RNDIN, 0),
1646                         NAND_OP_ADDR(2, addrs, NAND_COMMON_TIMING_NS(conf, tCCS_min)),
1647                         NAND_OP_DATA_OUT(len, buf, 0),
1648                 };
1649                 struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1650                 int ret;
1651
1652                 ret = nand_fill_column_cycles(chip, addrs, offset_in_page);
1653                 if (ret < 0)
1654                         return ret;
1655
1656                 instrs[2].ctx.data.force_8bit = force_8bit;
1657
1658                 /* Drop the DATA_OUT instruction if len is set to 0. */
1659                 if (!len)
1660                         op.ninstrs--;
1661
1662                 return nand_exec_op(chip, &op);
1663         }
1664
1665         chip->legacy.cmdfunc(chip, NAND_CMD_RNDIN, offset_in_page, -1);
1666         if (len)
1667                 chip->legacy.write_buf(chip, buf, len);
1668
1669         return 0;
1670 }
1671 EXPORT_SYMBOL_GPL(nand_change_write_column_op);
1672
1673 /**
1674  * nand_readid_op - Do a READID operation
1675  * @chip: The NAND chip
1676  * @addr: address cycle to pass after the READID command
1677  * @buf: buffer used to store the ID
1678  * @len: length of the buffer
1679  *
1680  * This function sends a READID command and reads back the ID returned by the
1681  * NAND.
1682  * This function does not select/unselect the CS line.
1683  *
1684  * Returns 0 on success, a negative error code otherwise.
1685  */
1686 int nand_readid_op(struct nand_chip *chip, u8 addr, void *buf,
1687                    unsigned int len)
1688 {
1689         unsigned int i;
1690         u8 *id = buf, *ddrbuf = NULL;
1691
1692         if (len && !buf)
1693                 return -EINVAL;
1694
1695         if (nand_has_exec_op(chip)) {
1696                 const struct nand_interface_config *conf =
1697                         nand_get_interface_config(chip);
1698                 struct nand_op_instr instrs[] = {
1699                         NAND_OP_CMD(NAND_CMD_READID, 0),
1700                         NAND_OP_ADDR(1, &addr,
1701                                      NAND_COMMON_TIMING_NS(conf, tADL_min)),
1702                         NAND_OP_8BIT_DATA_IN(len, buf, 0),
1703                 };
1704                 struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1705                 int ret;
1706
1707                 /* READ_ID data bytes are received twice in NV-DDR mode */
1708                 if (len && nand_interface_is_nvddr(conf)) {
1709                         ddrbuf = kzalloc(len * 2, GFP_KERNEL);
1710                         if (!ddrbuf)
1711                                 return -ENOMEM;
1712
1713                         instrs[2].ctx.data.len *= 2;
1714                         instrs[2].ctx.data.buf.in = ddrbuf;
1715                 }
1716
1717                 /* Drop the DATA_IN instruction if len is set to 0. */
1718                 if (!len)
1719                         op.ninstrs--;
1720
1721                 ret = nand_exec_op(chip, &op);
1722                 if (!ret && len && nand_interface_is_nvddr(conf)) {
1723                         for (i = 0; i < len; i++)
1724                                 id[i] = ddrbuf[i * 2];
1725                 }
1726
1727                 kfree(ddrbuf);
1728
1729                 return ret;
1730         }
1731
1732         chip->legacy.cmdfunc(chip, NAND_CMD_READID, addr, -1);
1733
1734         for (i = 0; i < len; i++)
1735                 id[i] = chip->legacy.read_byte(chip);
1736
1737         return 0;
1738 }
1739 EXPORT_SYMBOL_GPL(nand_readid_op);
1740
1741 /**
1742  * nand_status_op - Do a STATUS operation
1743  * @chip: The NAND chip
1744  * @status: out variable to store the NAND status
1745  *
1746  * This function sends a STATUS command and reads back the status returned by
1747  * the NAND.
1748  * This function does not select/unselect the CS line.
1749  *
1750  * Returns 0 on success, a negative error code otherwise.
1751  */
1752 int nand_status_op(struct nand_chip *chip, u8 *status)
1753 {
1754         if (nand_has_exec_op(chip)) {
1755                 const struct nand_interface_config *conf =
1756                         nand_get_interface_config(chip);
1757                 u8 ddrstatus[2];
1758                 struct nand_op_instr instrs[] = {
1759                         NAND_OP_CMD(NAND_CMD_STATUS,
1760                                     NAND_COMMON_TIMING_NS(conf, tADL_min)),
1761                         NAND_OP_8BIT_DATA_IN(1, status, 0),
1762                 };
1763                 struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1764                 int ret;
1765
1766                 /* The status data byte will be received twice in NV-DDR mode */
1767                 if (status && nand_interface_is_nvddr(conf)) {
1768                         instrs[1].ctx.data.len *= 2;
1769                         instrs[1].ctx.data.buf.in = ddrstatus;
1770                 }
1771
1772                 if (!status)
1773                         op.ninstrs--;
1774
1775                 ret = nand_exec_op(chip, &op);
1776                 if (!ret && status && nand_interface_is_nvddr(conf))
1777                         *status = ddrstatus[0];
1778
1779                 return ret;
1780         }
1781
1782         chip->legacy.cmdfunc(chip, NAND_CMD_STATUS, -1, -1);
1783         if (status)
1784                 *status = chip->legacy.read_byte(chip);
1785
1786         return 0;
1787 }
1788 EXPORT_SYMBOL_GPL(nand_status_op);
1789
1790 /**
1791  * nand_exit_status_op - Exit a STATUS operation
1792  * @chip: The NAND chip
1793  *
1794  * This function sends a READ0 command to cancel the effect of the STATUS
1795  * command to avoid reading only the status until a new read command is sent.
1796  *
1797  * This function does not select/unselect the CS line.
1798  *
1799  * Returns 0 on success, a negative error code otherwise.
1800  */
1801 int nand_exit_status_op(struct nand_chip *chip)
1802 {
1803         if (nand_has_exec_op(chip)) {
1804                 struct nand_op_instr instrs[] = {
1805                         NAND_OP_CMD(NAND_CMD_READ0, 0),
1806                 };
1807                 struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1808
1809                 return nand_exec_op(chip, &op);
1810         }
1811
1812         chip->legacy.cmdfunc(chip, NAND_CMD_READ0, -1, -1);
1813
1814         return 0;
1815 }
1816
1817 /**
1818  * nand_erase_op - Do an erase operation
1819  * @chip: The NAND chip
1820  * @eraseblock: block to erase
1821  *
1822  * This function sends an ERASE command and waits for the NAND to be ready
1823  * before returning.
1824  * This function does not select/unselect the CS line.
1825  *
1826  * Returns 0 on success, a negative error code otherwise.
1827  */
1828 int nand_erase_op(struct nand_chip *chip, unsigned int eraseblock)
1829 {
1830         unsigned int page = eraseblock <<
1831                             (chip->phys_erase_shift - chip->page_shift);
1832         int ret;
1833         u8 status;
1834
1835         if (nand_has_exec_op(chip)) {
1836                 const struct nand_interface_config *conf =
1837                         nand_get_interface_config(chip);
1838                 u8 addrs[3] = { page, page >> 8, page >> 16 };
1839                 struct nand_op_instr instrs[] = {
1840                         NAND_OP_CMD(NAND_CMD_ERASE1, 0),
1841                         NAND_OP_ADDR(2, addrs, 0),
1842                         NAND_OP_CMD(NAND_CMD_ERASE2,
1843                                     NAND_COMMON_TIMING_MS(conf, tWB_max)),
1844                         NAND_OP_WAIT_RDY(NAND_COMMON_TIMING_MS(conf, tBERS_max),
1845                                          0),
1846                 };
1847                 struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1848
1849                 if (chip->options & NAND_ROW_ADDR_3)
1850                         instrs[1].ctx.addr.naddrs++;
1851
1852                 ret = nand_exec_op(chip, &op);
1853                 if (ret)
1854                         return ret;
1855
1856                 ret = nand_status_op(chip, &status);
1857                 if (ret)
1858                         return ret;
1859         } else {
1860                 chip->legacy.cmdfunc(chip, NAND_CMD_ERASE1, -1, page);
1861                 chip->legacy.cmdfunc(chip, NAND_CMD_ERASE2, -1, -1);
1862
1863                 ret = chip->legacy.waitfunc(chip);
1864                 if (ret < 0)
1865                         return ret;
1866
1867                 status = ret;
1868         }
1869
1870         if (status & NAND_STATUS_FAIL)
1871                 return -EIO;
1872
1873         return 0;
1874 }
1875 EXPORT_SYMBOL_GPL(nand_erase_op);
1876
1877 /**
1878  * nand_set_features_op - Do a SET FEATURES operation
1879  * @chip: The NAND chip
1880  * @feature: feature id
1881  * @data: 4 bytes of data
1882  *
1883  * This function sends a SET FEATURES command and waits for the NAND to be
1884  * ready before returning.
1885  * This function does not select/unselect the CS line.
1886  *
1887  * Returns 0 on success, a negative error code otherwise.
1888  */
1889 static int nand_set_features_op(struct nand_chip *chip, u8 feature,
1890                                 const void *data)
1891 {
1892         const u8 *params = data;
1893         int i, ret;
1894
1895         if (nand_has_exec_op(chip)) {
1896                 const struct nand_interface_config *conf =
1897                         nand_get_interface_config(chip);
1898                 struct nand_op_instr instrs[] = {
1899                         NAND_OP_CMD(NAND_CMD_SET_FEATURES, 0),
1900                         NAND_OP_ADDR(1, &feature, NAND_COMMON_TIMING_NS(conf,
1901                                                                         tADL_min)),
1902                         NAND_OP_8BIT_DATA_OUT(ONFI_SUBFEATURE_PARAM_LEN, data,
1903                                               NAND_COMMON_TIMING_NS(conf,
1904                                                                     tWB_max)),
1905                         NAND_OP_WAIT_RDY(NAND_COMMON_TIMING_MS(conf, tFEAT_max),
1906                                          0),
1907                 };
1908                 struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1909
1910                 return nand_exec_op(chip, &op);
1911         }
1912
1913         chip->legacy.cmdfunc(chip, NAND_CMD_SET_FEATURES, feature, -1);
1914         for (i = 0; i < ONFI_SUBFEATURE_PARAM_LEN; ++i)
1915                 chip->legacy.write_byte(chip, params[i]);
1916
1917         ret = chip->legacy.waitfunc(chip);
1918         if (ret < 0)
1919                 return ret;
1920
1921         if (ret & NAND_STATUS_FAIL)
1922                 return -EIO;
1923
1924         return 0;
1925 }
1926
1927 /**
1928  * nand_get_features_op - Do a GET FEATURES operation
1929  * @chip: The NAND chip
1930  * @feature: feature id
1931  * @data: 4 bytes of data
1932  *
1933  * This function sends a GET FEATURES command and waits for the NAND to be
1934  * ready before returning.
1935  * This function does not select/unselect the CS line.
1936  *
1937  * Returns 0 on success, a negative error code otherwise.
1938  */
1939 static int nand_get_features_op(struct nand_chip *chip, u8 feature,
1940                                 void *data)
1941 {
1942         u8 *params = data, ddrbuf[ONFI_SUBFEATURE_PARAM_LEN * 2];
1943         int i;
1944
1945         if (nand_has_exec_op(chip)) {
1946                 const struct nand_interface_config *conf =
1947                         nand_get_interface_config(chip);
1948                 struct nand_op_instr instrs[] = {
1949                         NAND_OP_CMD(NAND_CMD_GET_FEATURES, 0),
1950                         NAND_OP_ADDR(1, &feature,
1951                                      NAND_COMMON_TIMING_NS(conf, tWB_max)),
1952                         NAND_OP_WAIT_RDY(NAND_COMMON_TIMING_MS(conf, tFEAT_max),
1953                                          NAND_COMMON_TIMING_NS(conf, tRR_min)),
1954                         NAND_OP_8BIT_DATA_IN(ONFI_SUBFEATURE_PARAM_LEN,
1955                                              data, 0),
1956                 };
1957                 struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1958                 int ret;
1959
1960                 /* GET_FEATURE data bytes are received twice in NV-DDR mode */
1961                 if (nand_interface_is_nvddr(conf)) {
1962                         instrs[3].ctx.data.len *= 2;
1963                         instrs[3].ctx.data.buf.in = ddrbuf;
1964                 }
1965
1966                 ret = nand_exec_op(chip, &op);
1967                 if (nand_interface_is_nvddr(conf)) {
1968                         for (i = 0; i < ONFI_SUBFEATURE_PARAM_LEN; i++)
1969                                 params[i] = ddrbuf[i * 2];
1970                 }
1971
1972                 return ret;
1973         }
1974
1975         chip->legacy.cmdfunc(chip, NAND_CMD_GET_FEATURES, feature, -1);
1976         for (i = 0; i < ONFI_SUBFEATURE_PARAM_LEN; ++i)
1977                 params[i] = chip->legacy.read_byte(chip);
1978
1979         return 0;
1980 }
1981
1982 static int nand_wait_rdy_op(struct nand_chip *chip, unsigned int timeout_ms,
1983                             unsigned int delay_ns)
1984 {
1985         if (nand_has_exec_op(chip)) {
1986                 struct nand_op_instr instrs[] = {
1987                         NAND_OP_WAIT_RDY(PSEC_TO_MSEC(timeout_ms),
1988                                          PSEC_TO_NSEC(delay_ns)),
1989                 };
1990                 struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
1991
1992                 return nand_exec_op(chip, &op);
1993         }
1994
1995         /* Apply delay or wait for ready/busy pin */
1996         if (!chip->legacy.dev_ready)
1997                 udelay(chip->legacy.chip_delay);
1998         else
1999                 nand_wait_ready(chip);
2000
2001         return 0;
2002 }
2003
2004 /**
2005  * nand_reset_op - Do a reset operation
2006  * @chip: The NAND chip
2007  *
2008  * This function sends a RESET command and waits for the NAND to be ready
2009  * before returning.
2010  * This function does not select/unselect the CS line.
2011  *
2012  * Returns 0 on success, a negative error code otherwise.
2013  */
2014 int nand_reset_op(struct nand_chip *chip)
2015 {
2016         if (nand_has_exec_op(chip)) {
2017                 const struct nand_interface_config *conf =
2018                         nand_get_interface_config(chip);
2019                 struct nand_op_instr instrs[] = {
2020                         NAND_OP_CMD(NAND_CMD_RESET,
2021                                     NAND_COMMON_TIMING_NS(conf, tWB_max)),
2022                         NAND_OP_WAIT_RDY(NAND_COMMON_TIMING_MS(conf, tRST_max),
2023                                          0),
2024                 };
2025                 struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
2026
2027                 return nand_exec_op(chip, &op);
2028         }
2029
2030         chip->legacy.cmdfunc(chip, NAND_CMD_RESET, -1, -1);
2031
2032         return 0;
2033 }
2034 EXPORT_SYMBOL_GPL(nand_reset_op);
2035
2036 /**
2037  * nand_read_data_op - Read data from the NAND
2038  * @chip: The NAND chip
2039  * @buf: buffer used to store the data
2040  * @len: length of the buffer
2041  * @force_8bit: force 8-bit bus access
2042  * @check_only: do not actually run the command, only checks if the
2043  *              controller driver supports it
2044  *
2045  * This function does a raw data read on the bus. Usually used after launching
2046  * another NAND operation like nand_read_page_op().
2047  * This function does not select/unselect the CS line.
2048  *
2049  * Returns 0 on success, a negative error code otherwise.
2050  */
2051 int nand_read_data_op(struct nand_chip *chip, void *buf, unsigned int len,
2052                       bool force_8bit, bool check_only)
2053 {
2054         if (!len || !buf)
2055                 return -EINVAL;
2056
2057         if (nand_has_exec_op(chip)) {
2058                 const struct nand_interface_config *conf =
2059                         nand_get_interface_config(chip);
2060                 struct nand_op_instr instrs[] = {
2061                         NAND_OP_DATA_IN(len, buf, 0),
2062                 };
2063                 struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
2064                 u8 *ddrbuf = NULL;
2065                 int ret, i;
2066
2067                 instrs[0].ctx.data.force_8bit = force_8bit;
2068
2069                 /*
2070                  * Parameter payloads (ID, status, features, etc) do not go
2071                  * through the same pipeline as regular data, hence the
2072                  * force_8bit flag must be set and this also indicates that in
2073                  * case NV-DDR timings are being used the data will be received
2074                  * twice.
2075                  */
2076                 if (force_8bit && nand_interface_is_nvddr(conf)) {
2077                         ddrbuf = kzalloc(len * 2, GFP_KERNEL);
2078                         if (!ddrbuf)
2079                                 return -ENOMEM;
2080
2081                         instrs[0].ctx.data.len *= 2;
2082                         instrs[0].ctx.data.buf.in = ddrbuf;
2083                 }
2084
2085                 if (check_only) {
2086                         ret = nand_check_op(chip, &op);
2087                         kfree(ddrbuf);
2088                         return ret;
2089                 }
2090
2091                 ret = nand_exec_op(chip, &op);
2092                 if (!ret && force_8bit && nand_interface_is_nvddr(conf)) {
2093                         u8 *dst = buf;
2094
2095                         for (i = 0; i < len; i++)
2096                                 dst[i] = ddrbuf[i * 2];
2097                 }
2098
2099                 kfree(ddrbuf);
2100
2101                 return ret;
2102         }
2103
2104         if (check_only)
2105                 return 0;
2106
2107         if (force_8bit) {
2108                 u8 *p = buf;
2109                 unsigned int i;
2110
2111                 for (i = 0; i < len; i++)
2112                         p[i] = chip->legacy.read_byte(chip);
2113         } else {
2114                 chip->legacy.read_buf(chip, buf, len);
2115         }
2116
2117         return 0;
2118 }
2119 EXPORT_SYMBOL_GPL(nand_read_data_op);
2120
2121 /**
2122  * nand_write_data_op - Write data from the NAND
2123  * @chip: The NAND chip
2124  * @buf: buffer containing the data to send on the bus
2125  * @len: length of the buffer
2126  * @force_8bit: force 8-bit bus access
2127  *
2128  * This function does a raw data write on the bus. Usually used after launching
2129  * another NAND operation like nand_write_page_begin_op().
2130  * This function does not select/unselect the CS line.
2131  *
2132  * Returns 0 on success, a negative error code otherwise.
2133  */
2134 int nand_write_data_op(struct nand_chip *chip, const void *buf,
2135                        unsigned int len, bool force_8bit)
2136 {
2137         if (!len || !buf)
2138                 return -EINVAL;
2139
2140         if (nand_has_exec_op(chip)) {
2141                 struct nand_op_instr instrs[] = {
2142                         NAND_OP_DATA_OUT(len, buf, 0),
2143                 };
2144                 struct nand_operation op = NAND_OPERATION(chip->cur_cs, instrs);
2145
2146                 instrs[0].ctx.data.force_8bit = force_8bit;
2147
2148                 return nand_exec_op(chip, &op);
2149         }
2150
2151         if (force_8bit) {
2152                 const u8 *p = buf;
2153                 unsigned int i;
2154
2155                 for (i = 0; i < len; i++)
2156                         chip->legacy.write_byte(chip, p[i]);
2157         } else {
2158                 chip->legacy.write_buf(chip, buf, len);
2159         }
2160
2161         return 0;
2162 }
2163 EXPORT_SYMBOL_GPL(nand_write_data_op);
2164
2165 /**
2166  * struct nand_op_parser_ctx - Context used by the parser
2167  * @instrs: array of all the instructions that must be addressed
2168  * @ninstrs: length of the @instrs array
2169  * @subop: Sub-operation to be passed to the NAND controller
2170  *
2171  * This structure is used by the core to split NAND operations into
2172  * sub-operations that can be handled by the NAND controller.
2173  */
2174 struct nand_op_parser_ctx {
2175         const struct nand_op_instr *instrs;
2176         unsigned int ninstrs;
2177         struct nand_subop subop;
2178 };
2179
2180 /**
2181  * nand_op_parser_must_split_instr - Checks if an instruction must be split
2182  * @pat: the parser pattern element that matches @instr
2183  * @instr: pointer to the instruction to check
2184  * @start_offset: this is an in/out parameter. If @instr has already been
2185  *                split, then @start_offset is the offset from which to start
2186  *                (either an address cycle or an offset in the data buffer).
2187  *                Conversely, if the function returns true (ie. instr must be
2188  *                split), this parameter is updated to point to the first
2189  *                data/address cycle that has not been taken care of.
2190  *
2191  * Some NAND controllers are limited and cannot send X address cycles with a
2192  * unique operation, or cannot read/write more than Y bytes at the same time.
2193  * In this case, split the instruction that does not fit in a single
2194  * controller-operation into two or more chunks.
2195  *
2196  * Returns true if the instruction must be split, false otherwise.
2197  * The @start_offset parameter is also updated to the offset at which the next
2198  * bundle of instruction must start (if an address or a data instruction).
2199  */
2200 static bool
2201 nand_op_parser_must_split_instr(const struct nand_op_parser_pattern_elem *pat,
2202                                 const struct nand_op_instr *instr,
2203                                 unsigned int *start_offset)
2204 {
2205         switch (pat->type) {
2206         case NAND_OP_ADDR_INSTR:
2207                 if (!pat->ctx.addr.maxcycles)
2208                         break;
2209
2210                 if (instr->ctx.addr.naddrs - *start_offset >
2211                     pat->ctx.addr.maxcycles) {
2212                         *start_offset += pat->ctx.addr.maxcycles;
2213                         return true;
2214                 }
2215                 break;
2216
2217         case NAND_OP_DATA_IN_INSTR:
2218         case NAND_OP_DATA_OUT_INSTR:
2219                 if (!pat->ctx.data.maxlen)
2220                         break;
2221
2222                 if (instr->ctx.data.len - *start_offset >
2223                     pat->ctx.data.maxlen) {
2224                         *start_offset += pat->ctx.data.maxlen;
2225                         return true;
2226                 }
2227                 break;
2228
2229         default:
2230                 break;
2231         }
2232
2233         return false;
2234 }
2235
2236 /**
2237  * nand_op_parser_match_pat - Checks if a pattern matches the instructions
2238  *                            remaining in the parser context
2239  * @pat: the pattern to test
2240  * @ctx: the parser context structure to match with the pattern @pat
2241  *
2242  * Check if @pat matches the set or a sub-set of instructions remaining in @ctx.
2243  * Returns true if this is the case, false ortherwise. When true is returned,
2244  * @ctx->subop is updated with the set of instructions to be passed to the
2245  * controller driver.
2246  */
2247 static bool
2248 nand_op_parser_match_pat(const struct nand_op_parser_pattern *pat,
2249                          struct nand_op_parser_ctx *ctx)
2250 {
2251         unsigned int instr_offset = ctx->subop.first_instr_start_off;
2252         const struct nand_op_instr *end = ctx->instrs + ctx->ninstrs;
2253         const struct nand_op_instr *instr = ctx->subop.instrs;
2254         unsigned int i, ninstrs;
2255
2256         for (i = 0, ninstrs = 0; i < pat->nelems && instr < end; i++) {
2257                 /*
2258                  * The pattern instruction does not match the operation
2259                  * instruction. If the instruction is marked optional in the
2260                  * pattern definition, we skip the pattern element and continue
2261                  * to the next one. If the element is mandatory, there's no
2262                  * match and we can return false directly.
2263                  */
2264                 if (instr->type != pat->elems[i].type) {
2265                         if (!pat->elems[i].optional)
2266                                 return false;
2267
2268                         continue;
2269                 }
2270
2271                 /*
2272                  * Now check the pattern element constraints. If the pattern is
2273                  * not able to handle the whole instruction in a single step,
2274                  * we have to split it.
2275                  * The last_instr_end_off value comes back updated to point to
2276                  * the position where we have to split the instruction (the
2277                  * start of the next subop chunk).
2278                  */
2279                 if (nand_op_parser_must_split_instr(&pat->elems[i], instr,
2280                                                     &instr_offset)) {
2281                         ninstrs++;
2282                         i++;
2283                         break;
2284                 }
2285
2286                 instr++;
2287                 ninstrs++;
2288                 instr_offset = 0;
2289         }
2290
2291         /*
2292          * This can happen if all instructions of a pattern are optional.
2293          * Still, if there's not at least one instruction handled by this
2294          * pattern, this is not a match, and we should try the next one (if
2295          * any).
2296          */
2297         if (!ninstrs)
2298                 return false;
2299
2300         /*
2301          * We had a match on the pattern head, but the pattern may be longer
2302          * than the instructions we're asked to execute. We need to make sure
2303          * there's no mandatory elements in the pattern tail.
2304          */
2305         for (; i < pat->nelems; i++) {
2306                 if (!pat->elems[i].optional)
2307                         return false;
2308         }
2309
2310         /*
2311          * We have a match: update the subop structure accordingly and return
2312          * true.
2313          */
2314         ctx->subop.ninstrs = ninstrs;
2315         ctx->subop.last_instr_end_off = instr_offset;
2316
2317         return true;
2318 }
2319
2320 #if IS_ENABLED(CONFIG_DYNAMIC_DEBUG) || defined(DEBUG)
2321 static void nand_op_parser_trace(const struct nand_op_parser_ctx *ctx)
2322 {
2323         const struct nand_op_instr *instr;
2324         char *prefix = "      ";
2325         unsigned int i;
2326
2327         pr_debug("executing subop (CS%d):\n", ctx->subop.cs);
2328
2329         for (i = 0; i < ctx->ninstrs; i++) {
2330                 instr = &ctx->instrs[i];
2331
2332                 if (instr == &ctx->subop.instrs[0])
2333                         prefix = "    ->";
2334
2335                 nand_op_trace(prefix, instr);
2336
2337                 if (instr == &ctx->subop.instrs[ctx->subop.ninstrs - 1])
2338                         prefix = "      ";
2339         }
2340 }
2341 #else
2342 static void nand_op_parser_trace(const struct nand_op_parser_ctx *ctx)
2343 {
2344         /* NOP */
2345 }
2346 #endif
2347
2348 static int nand_op_parser_cmp_ctx(const struct nand_op_parser_ctx *a,
2349                                   const struct nand_op_parser_ctx *b)
2350 {
2351         if (a->subop.ninstrs < b->subop.ninstrs)
2352                 return -1;
2353         else if (a->subop.ninstrs > b->subop.ninstrs)
2354                 return 1;
2355
2356         if (a->subop.last_instr_end_off < b->subop.last_instr_end_off)
2357                 return -1;
2358         else if (a->subop.last_instr_end_off > b->subop.last_instr_end_off)
2359                 return 1;
2360
2361         return 0;
2362 }
2363
2364 /**
2365  * nand_op_parser_exec_op - exec_op parser
2366  * @chip: the NAND chip
2367  * @parser: patterns description provided by the controller driver
2368  * @op: the NAND operation to address
2369  * @check_only: when true, the function only checks if @op can be handled but
2370  *              does not execute the operation
2371  *
2372  * Helper function designed to ease integration of NAND controller drivers that
2373  * only support a limited set of instruction sequences. The supported sequences
2374  * are described in @parser, and the framework takes care of splitting @op into
2375  * multiple sub-operations (if required) and pass them back to the ->exec()
2376  * callback of the matching pattern if @check_only is set to false.
2377  *
2378  * NAND controller drivers should call this function from their own ->exec_op()
2379  * implementation.
2380  *
2381  * Returns 0 on success, a negative error code otherwise. A failure can be
2382  * caused by an unsupported operation (none of the supported patterns is able
2383  * to handle the requested operation), or an error returned by one of the
2384  * matching pattern->exec() hook.
2385  */
2386 int nand_op_parser_exec_op(struct nand_chip *chip,
2387                            const struct nand_op_parser *parser,
2388                            const struct nand_operation *op, bool check_only)
2389 {
2390         struct nand_op_parser_ctx ctx = {
2391                 .subop.cs = op->cs,
2392                 .subop.instrs = op->instrs,
2393                 .instrs = op->instrs,
2394                 .ninstrs = op->ninstrs,
2395         };
2396         unsigned int i;
2397
2398         while (ctx.subop.instrs < op->instrs + op->ninstrs) {
2399                 const struct nand_op_parser_pattern *pattern;
2400                 struct nand_op_parser_ctx best_ctx;
2401                 int ret, best_pattern = -1;
2402
2403                 for (i = 0; i < parser->npatterns; i++) {
2404                         struct nand_op_parser_ctx test_ctx = ctx;
2405
2406                         pattern = &parser->patterns[i];
2407                         if (!nand_op_parser_match_pat(pattern, &test_ctx))
2408                                 continue;
2409
2410                         if (best_pattern >= 0 &&
2411                             nand_op_parser_cmp_ctx(&test_ctx, &best_ctx) <= 0)
2412                                 continue;
2413
2414                         best_pattern = i;
2415                         best_ctx = test_ctx;
2416                 }
2417
2418                 if (best_pattern < 0) {
2419                         pr_debug("->exec_op() parser: pattern not found!\n");
2420                         return -ENOTSUPP;
2421                 }
2422
2423                 ctx = best_ctx;
2424                 nand_op_parser_trace(&ctx);
2425
2426                 if (!check_only) {
2427                         pattern = &parser->patterns[best_pattern];
2428                         ret = pattern->exec(chip, &ctx.subop);
2429                         if (ret)
2430                                 return ret;
2431                 }
2432
2433                 /*
2434                  * Update the context structure by pointing to the start of the
2435                  * next subop.
2436                  */
2437                 ctx.subop.instrs = ctx.subop.instrs + ctx.subop.ninstrs;
2438                 if (ctx.subop.last_instr_end_off)
2439                         ctx.subop.instrs -= 1;
2440
2441                 ctx.subop.first_instr_start_off = ctx.subop.last_instr_end_off;
2442         }
2443
2444         return 0;
2445 }
2446 EXPORT_SYMBOL_GPL(nand_op_parser_exec_op);
2447
2448 static bool nand_instr_is_data(const struct nand_op_instr *instr)
2449 {
2450         return instr && (instr->type == NAND_OP_DATA_IN_INSTR ||
2451                          instr->type == NAND_OP_DATA_OUT_INSTR);
2452 }
2453
2454 static bool nand_subop_instr_is_valid(const struct nand_subop *subop,
2455                                       unsigned int instr_idx)
2456 {
2457         return subop && instr_idx < subop->ninstrs;
2458 }
2459
2460 static unsigned int nand_subop_get_start_off(const struct nand_subop *subop,
2461                                              unsigned int instr_idx)
2462 {
2463         if (instr_idx)
2464                 return 0;
2465
2466         return subop->first_instr_start_off;
2467 }
2468
2469 /**
2470  * nand_subop_get_addr_start_off - Get the start offset in an address array
2471  * @subop: The entire sub-operation
2472  * @instr_idx: Index of the instruction inside the sub-operation
2473  *
2474  * During driver development, one could be tempted to directly use the
2475  * ->addr.addrs field of address instructions. This is wrong as address
2476  * instructions might be split.
2477  *
2478  * Given an address instruction, returns the offset of the first cycle to issue.
2479  */
2480 unsigned int nand_subop_get_addr_start_off(const struct nand_subop *subop,
2481                                            unsigned int instr_idx)
2482 {
2483         if (WARN_ON(!nand_subop_instr_is_valid(subop, instr_idx) ||
2484                     subop->instrs[instr_idx].type != NAND_OP_ADDR_INSTR))
2485                 return 0;
2486
2487         return nand_subop_get_start_off(subop, instr_idx);
2488 }
2489 EXPORT_SYMBOL_GPL(nand_subop_get_addr_start_off);
2490
2491 /**
2492  * nand_subop_get_num_addr_cyc - Get the remaining address cycles to assert
2493  * @subop: The entire sub-operation
2494  * @instr_idx: Index of the instruction inside the sub-operation
2495  *
2496  * During driver development, one could be tempted to directly use the
2497  * ->addr->naddrs field of a data instruction. This is wrong as instructions
2498  * might be split.
2499  *
2500  * Given an address instruction, returns the number of address cycle to issue.
2501  */
2502 unsigned int nand_subop_get_num_addr_cyc(const struct nand_subop *subop,
2503                                          unsigned int instr_idx)
2504 {
2505         int start_off, end_off;
2506
2507         if (WARN_ON(!nand_subop_instr_is_valid(subop, instr_idx) ||
2508                     subop->instrs[instr_idx].type != NAND_OP_ADDR_INSTR))
2509                 return 0;
2510
2511         start_off = nand_subop_get_addr_start_off(subop, instr_idx);
2512
2513         if (instr_idx == subop->ninstrs - 1 &&
2514             subop->last_instr_end_off)
2515                 end_off = subop->last_instr_end_off;
2516         else
2517                 end_off = subop->instrs[instr_idx].ctx.addr.naddrs;
2518
2519         return end_off - start_off;
2520 }
2521 EXPORT_SYMBOL_GPL(nand_subop_get_num_addr_cyc);
2522
2523 /**
2524  * nand_subop_get_data_start_off - Get the start offset in a data array
2525  * @subop: The entire sub-operation
2526  * @instr_idx: Index of the instruction inside the sub-operation
2527  *
2528  * During driver development, one could be tempted to directly use the
2529  * ->data->buf.{in,out} field of data instructions. This is wrong as data
2530  * instructions might be split.
2531  *
2532  * Given a data instruction, returns the offset to start from.
2533  */
2534 unsigned int nand_subop_get_data_start_off(const struct nand_subop *subop,
2535                                            unsigned int instr_idx)
2536 {
2537         if (WARN_ON(!nand_subop_instr_is_valid(subop, instr_idx) ||
2538                     !nand_instr_is_data(&subop->instrs[instr_idx])))
2539                 return 0;
2540
2541         return nand_subop_get_start_off(subop, instr_idx);
2542 }
2543 EXPORT_SYMBOL_GPL(nand_subop_get_data_start_off);
2544
2545 /**
2546  * nand_subop_get_data_len - Get the number of bytes to retrieve
2547  * @subop: The entire sub-operation
2548  * @instr_idx: Index of the instruction inside the sub-operation
2549  *
2550  * During driver development, one could be tempted to directly use the
2551  * ->data->len field of a data instruction. This is wrong as data instructions
2552  * might be split.
2553  *
2554  * Returns the length of the chunk of data to send/receive.
2555  */
2556 unsigned int nand_subop_get_data_len(const struct nand_subop *subop,
2557                                      unsigned int instr_idx)
2558 {
2559         int start_off = 0, end_off;
2560
2561         if (WARN_ON(!nand_subop_instr_is_valid(subop, instr_idx) ||
2562                     !nand_instr_is_data(&subop->instrs[instr_idx])))
2563                 return 0;
2564
2565         start_off = nand_subop_get_data_start_off(subop, instr_idx);
2566
2567         if (instr_idx == subop->ninstrs - 1 &&
2568             subop->last_instr_end_off)
2569                 end_off = subop->last_instr_end_off;
2570         else
2571                 end_off = subop->instrs[instr_idx].ctx.data.len;
2572
2573         return end_off - start_off;
2574 }
2575 EXPORT_SYMBOL_GPL(nand_subop_get_data_len);
2576
2577 /**
2578  * nand_reset - Reset and initialize a NAND device
2579  * @chip: The NAND chip
2580  * @chipnr: Internal die id
2581  *
2582  * Save the timings data structure, then apply SDR timings mode 0 (see
2583  * nand_reset_interface for details), do the reset operation, and apply
2584  * back the previous timings.
2585  *
2586  * Returns 0 on success, a negative error code otherwise.
2587  */
2588 int nand_reset(struct nand_chip *chip, int chipnr)
2589 {
2590         int ret;
2591
2592         ret = nand_reset_interface(chip, chipnr);
2593         if (ret)
2594                 return ret;
2595
2596         /*
2597          * The CS line has to be released before we can apply the new NAND
2598          * interface settings, hence this weird nand_select_target()
2599          * nand_deselect_target() dance.
2600          */
2601         nand_select_target(chip, chipnr);
2602         ret = nand_reset_op(chip);
2603         nand_deselect_target(chip);
2604         if (ret)
2605                 return ret;
2606
2607         ret = nand_setup_interface(chip, chipnr);
2608         if (ret)
2609                 return ret;
2610
2611         return 0;
2612 }
2613 EXPORT_SYMBOL_GPL(nand_reset);
2614
2615 /**
2616  * nand_get_features - wrapper to perform a GET_FEATURE
2617  * @chip: NAND chip info structure
2618  * @addr: feature address
2619  * @subfeature_param: the subfeature parameters, a four bytes array
2620  *
2621  * Returns 0 for success, a negative error otherwise. Returns -ENOTSUPP if the
2622  * operation cannot be handled.
2623  */
2624 int nand_get_features(struct nand_chip *chip, int addr,
2625                       u8 *subfeature_param)
2626 {
2627         if (!nand_supports_get_features(chip, addr))
2628                 return -ENOTSUPP;
2629
2630         if (chip->legacy.get_features)
2631                 return chip->legacy.get_features(chip, addr, subfeature_param);
2632
2633         return nand_get_features_op(chip, addr, subfeature_param);
2634 }
2635
2636 /**
2637  * nand_set_features - wrapper to perform a SET_FEATURE
2638  * @chip: NAND chip info structure
2639  * @addr: feature address
2640  * @subfeature_param: the subfeature parameters, a four bytes array
2641  *
2642  * Returns 0 for success, a negative error otherwise. Returns -ENOTSUPP if the
2643  * operation cannot be handled.
2644  */
2645 int nand_set_features(struct nand_chip *chip, int addr,
2646                       u8 *subfeature_param)
2647 {
2648         if (!nand_supports_set_features(chip, addr))
2649                 return -ENOTSUPP;
2650
2651         if (chip->legacy.set_features)
2652                 return chip->legacy.set_features(chip, addr, subfeature_param);
2653
2654         return nand_set_features_op(chip, addr, subfeature_param);
2655 }
2656
2657 /**
2658  * nand_check_erased_buf - check if a buffer contains (almost) only 0xff data
2659  * @buf: buffer to test
2660  * @len: buffer length
2661  * @bitflips_threshold: maximum number of bitflips
2662  *
2663  * Check if a buffer contains only 0xff, which means the underlying region
2664  * has been erased and is ready to be programmed.
2665  * The bitflips_threshold specify the maximum number of bitflips before
2666  * considering the region is not erased.
2667  * Note: The logic of this function has been extracted from the memweight
2668  * implementation, except that nand_check_erased_buf function exit before
2669  * testing the whole buffer if the number of bitflips exceed the
2670  * bitflips_threshold value.
2671  *
2672  * Returns a positive number of bitflips less than or equal to
2673  * bitflips_threshold, or -ERROR_CODE for bitflips in excess of the
2674  * threshold.
2675  */
2676 static int nand_check_erased_buf(void *buf, int len, int bitflips_threshold)
2677 {
2678         const unsigned char *bitmap = buf;
2679         int bitflips = 0;
2680         int weight;
2681
2682         for (; len && ((uintptr_t)bitmap) % sizeof(long);
2683              len--, bitmap++) {
2684                 weight = hweight8(*bitmap);
2685                 bitflips += BITS_PER_BYTE - weight;
2686                 if (unlikely(bitflips > bitflips_threshold))
2687                         return -EBADMSG;
2688         }
2689
2690         for (; len >= sizeof(long);
2691              len -= sizeof(long), bitmap += sizeof(long)) {
2692                 unsigned long d = *((unsigned long *)bitmap);
2693                 if (d == ~0UL)
2694                         continue;
2695                 weight = hweight_long(d);
2696                 bitflips += BITS_PER_LONG - weight;
2697                 if (unlikely(bitflips > bitflips_threshold))
2698                         return -EBADMSG;
2699         }
2700
2701         for (; len > 0; len--, bitmap++) {
2702                 weight = hweight8(*bitmap);
2703                 bitflips += BITS_PER_BYTE - weight;
2704                 if (unlikely(bitflips > bitflips_threshold))
2705                         return -EBADMSG;
2706         }
2707
2708         return bitflips;
2709 }
2710
2711 /**
2712  * nand_check_erased_ecc_chunk - check if an ECC chunk contains (almost) only
2713  *                               0xff data
2714  * @data: data buffer to test
2715  * @datalen: data length
2716  * @ecc: ECC buffer
2717  * @ecclen: ECC length
2718  * @extraoob: extra OOB buffer
2719  * @extraooblen: extra OOB length
2720  * @bitflips_threshold: maximum number of bitflips
2721  *
2722  * Check if a data buffer and its associated ECC and OOB data contains only
2723  * 0xff pattern, which means the underlying region has been erased and is
2724  * ready to be programmed.
2725  * The bitflips_threshold specify the maximum number of bitflips before
2726  * considering the region as not erased.
2727  *
2728  * Note:
2729  * 1/ ECC algorithms are working on pre-defined block sizes which are usually
2730  *    different from the NAND page size. When fixing bitflips, ECC engines will
2731  *    report the number of errors per chunk, and the NAND core infrastructure
2732  *    expect you to return the maximum number of bitflips for the whole page.
2733  *    This is why you should always use this function on a single chunk and
2734  *    not on the whole page. After checking each chunk you should update your
2735  *    max_bitflips value accordingly.
2736  * 2/ When checking for bitflips in erased pages you should not only check
2737  *    the payload data but also their associated ECC data, because a user might
2738  *    have programmed almost all bits to 1 but a few. In this case, we
2739  *    shouldn't consider the chunk as erased, and checking ECC bytes prevent
2740  *    this case.
2741  * 3/ The extraoob argument is optional, and should be used if some of your OOB
2742  *    data are protected by the ECC engine.
2743  *    It could also be used if you support subpages and want to attach some
2744  *    extra OOB data to an ECC chunk.
2745  *
2746  * Returns a positive number of bitflips less than or equal to
2747  * bitflips_threshold, or -ERROR_CODE for bitflips in excess of the
2748  * threshold. In case of success, the passed buffers are filled with 0xff.
2749  */
2750 int nand_check_erased_ecc_chunk(void *data, int datalen,
2751                                 void *ecc, int ecclen,
2752                                 void *extraoob, int extraooblen,
2753                                 int bitflips_threshold)
2754 {
2755         int data_bitflips = 0, ecc_bitflips = 0, extraoob_bitflips = 0;
2756
2757         data_bitflips = nand_check_erased_buf(data, datalen,
2758                                               bitflips_threshold);
2759         if (data_bitflips < 0)
2760                 return data_bitflips;
2761
2762         bitflips_threshold -= data_bitflips;
2763
2764         ecc_bitflips = nand_check_erased_buf(ecc, ecclen, bitflips_threshold);
2765         if (ecc_bitflips < 0)
2766                 return ecc_bitflips;
2767
2768         bitflips_threshold -= ecc_bitflips;
2769
2770         extraoob_bitflips = nand_check_erased_buf(extraoob, extraooblen,
2771                                                   bitflips_threshold);
2772         if (extraoob_bitflips < 0)
2773                 return extraoob_bitflips;
2774
2775         if (data_bitflips)
2776                 memset(data, 0xff, datalen);
2777
2778         if (ecc_bitflips)
2779                 memset(ecc, 0xff, ecclen);
2780
2781         if (extraoob_bitflips)
2782                 memset(extraoob, 0xff, extraooblen);
2783
2784         return data_bitflips + ecc_bitflips + extraoob_bitflips;
2785 }
2786 EXPORT_SYMBOL(nand_check_erased_ecc_chunk);
2787
2788 /**
2789  * nand_read_page_raw_notsupp - dummy read raw page function
2790  * @chip: nand chip info structure
2791  * @buf: buffer to store read data
2792  * @oob_required: caller requires OOB data read to chip->oob_poi
2793  * @page: page number to read
2794  *
2795  * Returns -ENOTSUPP unconditionally.
2796  */
2797 int nand_read_page_raw_notsupp(struct nand_chip *chip, u8 *buf,
2798                                int oob_required, int page)
2799 {
2800         return -ENOTSUPP;
2801 }
2802
2803 /**
2804  * nand_read_page_raw - [INTERN] read raw page data without ecc
2805  * @chip: nand chip info structure
2806  * @buf: buffer to store read data
2807  * @oob_required: caller requires OOB data read to chip->oob_poi
2808  * @page: page number to read
2809  *
2810  * Not for syndrome calculating ECC controllers, which use a special oob layout.
2811  */
2812 int nand_read_page_raw(struct nand_chip *chip, uint8_t *buf, int oob_required,
2813                        int page)
2814 {
2815         struct mtd_info *mtd = nand_to_mtd(chip);
2816         int ret;
2817
2818         ret = nand_read_page_op(chip, page, 0, buf, mtd->writesize);
2819         if (ret)
2820                 return ret;
2821
2822         if (oob_required) {
2823                 ret = nand_read_data_op(chip, chip->oob_poi, mtd->oobsize,
2824                                         false, false);
2825                 if (ret)
2826                         return ret;
2827         }
2828
2829         return 0;
2830 }
2831 EXPORT_SYMBOL(nand_read_page_raw);
2832
2833 /**
2834  * nand_monolithic_read_page_raw - Monolithic page read in raw mode
2835  * @chip: NAND chip info structure
2836  * @buf: buffer to store read data
2837  * @oob_required: caller requires OOB data read to chip->oob_poi
2838  * @page: page number to read
2839  *
2840  * This is a raw page read, ie. without any error detection/correction.
2841  * Monolithic means we are requesting all the relevant data (main plus
2842  * eventually OOB) to be loaded in the NAND cache and sent over the
2843  * bus (from the NAND chip to the NAND controller) in a single
2844  * operation. This is an alternative to nand_read_page_raw(), which
2845  * first reads the main data, and if the OOB data is requested too,
2846  * then reads more data on the bus.
2847  */
2848 int nand_monolithic_read_page_raw(struct nand_chip *chip, u8 *buf,
2849                                   int oob_required, int page)
2850 {
2851         struct mtd_info *mtd = nand_to_mtd(chip);
2852         unsigned int size = mtd->writesize;
2853         u8 *read_buf = buf;
2854         int ret;
2855
2856         if (oob_required) {
2857                 size += mtd->oobsize;
2858
2859                 if (buf != chip->data_buf)
2860                         read_buf = nand_get_data_buf(chip);
2861         }
2862
2863         ret = nand_read_page_op(chip, page, 0, read_buf, size);
2864         if (ret)
2865                 return ret;
2866
2867         if (buf != chip->data_buf)
2868                 memcpy(buf, read_buf, mtd->writesize);
2869
2870         return 0;
2871 }
2872 EXPORT_SYMBOL(nand_monolithic_read_page_raw);
2873
2874 /**
2875  * nand_read_page_raw_syndrome - [INTERN] read raw page data without ecc
2876  * @chip: nand chip info structure
2877  * @buf: buffer to store read data
2878  * @oob_required: caller requires OOB data read to chip->oob_poi
2879  * @page: page number to read
2880  *
2881  * We need a special oob layout and handling even when OOB isn't used.
2882  */
2883 static int nand_read_page_raw_syndrome(struct nand_chip *chip, uint8_t *buf,
2884                                        int oob_required, int page)
2885 {
2886         struct mtd_info *mtd = nand_to_mtd(chip);
2887         int eccsize = chip->ecc.size;
2888         int eccbytes = chip->ecc.bytes;
2889         uint8_t *oob = chip->oob_poi;
2890         int steps, size, ret;
2891
2892         ret = nand_read_page_op(chip, page, 0, NULL, 0);
2893         if (ret)
2894                 return ret;
2895
2896         for (steps = chip->ecc.steps; steps > 0; steps--) {
2897                 ret = nand_read_data_op(chip, buf, eccsize, false, false);
2898                 if (ret)
2899                         return ret;
2900
2901                 buf += eccsize;
2902
2903                 if (chip->ecc.prepad) {
2904                         ret = nand_read_data_op(chip, oob, chip->ecc.prepad,
2905                                                 false, false);
2906                         if (ret)
2907                                 return ret;
2908
2909                         oob += chip->ecc.prepad;
2910                 }
2911
2912                 ret = nand_read_data_op(chip, oob, eccbytes, false, false);
2913                 if (ret)
2914                         return ret;
2915
2916                 oob += eccbytes;
2917
2918                 if (chip->ecc.postpad) {
2919                         ret = nand_read_data_op(chip, oob, chip->ecc.postpad,
2920                                                 false, false);
2921                         if (ret)
2922                                 return ret;
2923
2924                         oob += chip->ecc.postpad;
2925                 }
2926         }
2927
2928         size = mtd->oobsize - (oob - chip->oob_poi);
2929         if (size) {
2930                 ret = nand_read_data_op(chip, oob, size, false, false);
2931                 if (ret)
2932                         return ret;
2933         }
2934
2935         return 0;
2936 }
2937
2938 /**
2939  * nand_read_page_swecc - [REPLACEABLE] software ECC based page read function
2940  * @chip: nand chip info structure
2941  * @buf: buffer to store read data
2942  * @oob_required: caller requires OOB data read to chip->oob_poi
2943  * @page: page number to read
2944  */
2945 static int nand_read_page_swecc(struct nand_chip *chip, uint8_t *buf,
2946                                 int oob_required, int page)
2947 {
2948         struct mtd_info *mtd = nand_to_mtd(chip);
2949         int i, eccsize = chip->ecc.size, ret;
2950         int eccbytes = chip->ecc.bytes;
2951         int eccsteps = chip->ecc.steps;
2952         uint8_t *p = buf;
2953         uint8_t *ecc_calc = chip->ecc.calc_buf;
2954         uint8_t *ecc_code = chip->ecc.code_buf;
2955         unsigned int max_bitflips = 0;
2956
2957         chip->ecc.read_page_raw(chip, buf, 1, page);
2958
2959         for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize)
2960                 chip->ecc.calculate(chip, p, &ecc_calc[i]);
2961
2962         ret = mtd_ooblayout_get_eccbytes(mtd, ecc_code, chip->oob_poi, 0,
2963                                          chip->ecc.total);
2964         if (ret)
2965                 return ret;
2966
2967         eccsteps = chip->ecc.steps;
2968         p = buf;
2969
2970         for (i = 0 ; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
2971                 int stat;
2972
2973                 stat = chip->ecc.correct(chip, p, &ecc_code[i], &ecc_calc[i]);
2974                 if (stat < 0) {
2975                         mtd->ecc_stats.failed++;
2976                 } else {
2977                         mtd->ecc_stats.corrected += stat;
2978                         max_bitflips = max_t(unsigned int, max_bitflips, stat);
2979                 }
2980         }
2981         return max_bitflips;
2982 }
2983
2984 /**
2985  * nand_read_subpage - [REPLACEABLE] ECC based sub-page read function
2986  * @chip: nand chip info structure
2987  * @data_offs: offset of requested data within the page
2988  * @readlen: data length
2989  * @bufpoi: buffer to store read data
2990  * @page: page number to read
2991  */
2992 static int nand_read_subpage(struct nand_chip *chip, uint32_t data_offs,
2993                              uint32_t readlen, uint8_t *bufpoi, int page)
2994 {
2995         struct mtd_info *mtd = nand_to_mtd(chip);
2996         int start_step, end_step, num_steps, ret;
2997         uint8_t *p;
2998         int data_col_addr, i, gaps = 0;
2999         int datafrag_len, eccfrag_len, aligned_len, aligned_pos;
3000         int busw = (chip->options & NAND_BUSWIDTH_16) ? 2 : 1;
3001         int index, section = 0;
3002         unsigned int max_bitflips = 0;
3003         struct mtd_oob_region oobregion = { };
3004
3005         /* Column address within the page aligned to ECC size (256bytes) */
3006         start_step = data_offs / chip->ecc.size;
3007         end_step = (data_offs + readlen - 1) / chip->ecc.size;
3008         num_steps = end_step - start_step + 1;
3009         index = start_step * chip->ecc.bytes;
3010
3011         /* Data size aligned to ECC ecc.size */
3012         datafrag_len = num_steps * chip->ecc.size;
3013         eccfrag_len = num_steps * chip->ecc.bytes;
3014
3015         data_col_addr = start_step * chip->ecc.size;
3016         /* If we read not a page aligned data */
3017         p = bufpoi + data_col_addr;
3018         ret = nand_read_page_op(chip, page, data_col_addr, p, datafrag_len);
3019         if (ret)
3020                 return ret;
3021
3022         /* Calculate ECC */
3023         for (i = 0; i < eccfrag_len ; i += chip->ecc.bytes, p += chip->ecc.size)
3024                 chip->ecc.calculate(chip, p, &chip->ecc.calc_buf[i]);
3025
3026         /*
3027          * The performance is faster if we position offsets according to
3028          * ecc.pos. Let's make sure that there are no gaps in ECC positions.
3029          */
3030         ret = mtd_ooblayout_find_eccregion(mtd, index, &section, &oobregion);
3031         if (ret)
3032                 return ret;
3033
3034         if (oobregion.length < eccfrag_len)
3035                 gaps = 1;
3036
3037         if (gaps) {
3038                 ret = nand_change_read_column_op(chip, mtd->writesize,
3039                                                  chip->oob_poi, mtd->oobsize,
3040                                                  false);
3041                 if (ret)
3042                         return ret;
3043         } else {
3044                 /*
3045                  * Send the command to read the particular ECC bytes take care
3046                  * about buswidth alignment in read_buf.
3047                  */
3048                 aligned_pos = oobregion.offset & ~(busw - 1);
3049                 aligned_len = eccfrag_len;
3050                 if (oobregion.offset & (busw - 1))
3051                         aligned_len++;
3052                 if ((oobregion.offset + (num_steps * chip->ecc.bytes)) &
3053                     (busw - 1))
3054                         aligned_len++;
3055
3056                 ret = nand_change_read_column_op(chip,
3057                                                  mtd->writesize + aligned_pos,
3058                                                  &chip->oob_poi[aligned_pos],
3059                                                  aligned_len, false);
3060                 if (ret)
3061                         return ret;
3062         }
3063
3064         ret = mtd_ooblayout_get_eccbytes(mtd, chip->ecc.code_buf,
3065                                          chip->oob_poi, index, eccfrag_len);
3066         if (ret)
3067                 return ret;
3068
3069         p = bufpoi + data_col_addr;
3070         for (i = 0; i < eccfrag_len ; i += chip->ecc.bytes, p += chip->ecc.size) {
3071                 int stat;
3072
3073                 stat = chip->ecc.correct(chip, p, &chip->ecc.code_buf[i],
3074                                          &chip->ecc.calc_buf[i]);
3075                 if (stat == -EBADMSG &&
3076                     (chip->ecc.options & NAND_ECC_GENERIC_ERASED_CHECK)) {
3077                         /* check for empty pages with bitflips */
3078                         stat = nand_check_erased_ecc_chunk(p, chip->ecc.size,
3079                                                 &chip->ecc.code_buf[i],
3080                                                 chip->ecc.bytes,
3081                                                 NULL, 0,
3082                                                 chip->ecc.strength);
3083                 }
3084
3085                 if (stat < 0) {
3086                         mtd->ecc_stats.failed++;
3087                 } else {
3088                         mtd->ecc_stats.corrected += stat;
3089                         max_bitflips = max_t(unsigned int, max_bitflips, stat);
3090                 }
3091         }
3092         return max_bitflips;
3093 }
3094
3095 /**
3096  * nand_read_page_hwecc - [REPLACEABLE] hardware ECC based page read function
3097  * @chip: nand chip info structure
3098  * @buf: buffer to store read data
3099  * @oob_required: caller requires OOB data read to chip->oob_poi
3100  * @page: page number to read
3101  *
3102  * Not for syndrome calculating ECC controllers which need a special oob layout.
3103  */
3104 static int nand_read_page_hwecc(struct nand_chip *chip, uint8_t *buf,
3105                                 int oob_required, int page)
3106 {
3107         struct mtd_info *mtd = nand_to_mtd(chip);
3108         int i, eccsize = chip->ecc.size, ret;
3109         int eccbytes = chip->ecc.bytes;
3110         int eccsteps = chip->ecc.steps;
3111         uint8_t *p = buf;
3112         uint8_t *ecc_calc = chip->ecc.calc_buf;
3113         uint8_t *ecc_code = chip->ecc.code_buf;
3114         unsigned int max_bitflips = 0;
3115
3116         ret = nand_read_page_op(chip, page, 0, NULL, 0);
3117         if (ret)
3118                 return ret;
3119
3120         for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
3121                 chip->ecc.hwctl(chip, NAND_ECC_READ);
3122
3123                 ret = nand_read_data_op(chip, p, eccsize, false, false);
3124                 if (ret)
3125                         return ret;
3126
3127                 chip->ecc.calculate(chip, p, &ecc_calc[i]);
3128         }
3129
3130         ret = nand_read_data_op(chip, chip->oob_poi, mtd->oobsize, false,
3131                                 false);
3132         if (ret)
3133                 return ret;
3134
3135         ret = mtd_ooblayout_get_eccbytes(mtd, ecc_code, chip->oob_poi, 0,
3136                                          chip->ecc.total);
3137         if (ret)
3138                 return ret;
3139
3140         eccsteps = chip->ecc.steps;
3141         p = buf;
3142
3143         for (i = 0 ; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
3144                 int stat;
3145
3146                 stat = chip->ecc.correct(chip, p, &ecc_code[i], &ecc_calc[i]);
3147                 if (stat == -EBADMSG &&
3148                     (chip->ecc.options & NAND_ECC_GENERIC_ERASED_CHECK)) {
3149                         /* check for empty pages with bitflips */
3150                         stat = nand_check_erased_ecc_chunk(p, eccsize,
3151                                                 &ecc_code[i], eccbytes,
3152                                                 NULL, 0,
3153                                                 chip->ecc.strength);
3154                 }
3155
3156                 if (stat < 0) {
3157                         mtd->ecc_stats.failed++;
3158                 } else {
3159                         mtd->ecc_stats.corrected += stat;
3160                         max_bitflips = max_t(unsigned int, max_bitflips, stat);
3161                 }
3162         }
3163         return max_bitflips;
3164 }
3165
3166 /**
3167  * nand_read_page_hwecc_oob_first - Hardware ECC page read with ECC
3168  *                                  data read from OOB area
3169  * @chip: nand chip info structure
3170  * @buf: buffer to store read data
3171  * @oob_required: caller requires OOB data read to chip->oob_poi
3172  * @page: page number to read
3173  *
3174  * Hardware ECC for large page chips, which requires the ECC data to be
3175  * extracted from the OOB before the actual data is read.
3176  */
3177 int nand_read_page_hwecc_oob_first(struct nand_chip *chip, uint8_t *buf,
3178                                    int oob_required, int page)
3179 {
3180         struct mtd_info *mtd = nand_to_mtd(chip);
3181         int i, eccsize = chip->ecc.size, ret;
3182         int eccbytes = chip->ecc.bytes;
3183         int eccsteps = chip->ecc.steps;
3184         uint8_t *p = buf;
3185         uint8_t *ecc_code = chip->ecc.code_buf;
3186         unsigned int max_bitflips = 0;
3187
3188         /* Read the OOB area first */
3189         ret = nand_read_oob_op(chip, page, 0, chip->oob_poi, mtd->oobsize);
3190         if (ret)
3191                 return ret;
3192
3193         /* Move read cursor to start of page */
3194         ret = nand_change_read_column_op(chip, 0, NULL, 0, false);
3195         if (ret)
3196                 return ret;
3197
3198         ret = mtd_ooblayout_get_eccbytes(mtd, ecc_code, chip->oob_poi, 0,
3199                                          chip->ecc.total);
3200         if (ret)
3201                 return ret;
3202
3203         for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
3204                 int stat;
3205
3206                 chip->ecc.hwctl(chip, NAND_ECC_READ);
3207
3208                 ret = nand_read_data_op(chip, p, eccsize, false, false);
3209                 if (ret)
3210                         return ret;
3211
3212                 stat = chip->ecc.correct(chip, p, &ecc_code[i], NULL);
3213                 if (stat == -EBADMSG &&
3214                     (chip->ecc.options & NAND_ECC_GENERIC_ERASED_CHECK)) {
3215                         /* check for empty pages with bitflips */
3216                         stat = nand_check_erased_ecc_chunk(p, eccsize,
3217                                                            &ecc_code[i],
3218                                                            eccbytes, NULL, 0,
3219                                                            chip->ecc.strength);
3220                 }
3221
3222                 if (stat < 0) {
3223                         mtd->ecc_stats.failed++;
3224                 } else {
3225                         mtd->ecc_stats.corrected += stat;
3226                         max_bitflips = max_t(unsigned int, max_bitflips, stat);
3227                 }
3228         }
3229         return max_bitflips;
3230 }
3231 EXPORT_SYMBOL_GPL(nand_read_page_hwecc_oob_first);
3232
3233 /**
3234  * nand_read_page_syndrome - [REPLACEABLE] hardware ECC syndrome based page read
3235  * @chip: nand chip info structure
3236  * @buf: buffer to store read data
3237  * @oob_required: caller requires OOB data read to chip->oob_poi
3238  * @page: page number to read
3239  *
3240  * The hw generator calculates the error syndrome automatically. Therefore we
3241  * need a special oob layout and handling.
3242  */
3243 static int nand_read_page_syndrome(struct nand_chip *chip, uint8_t *buf,
3244                                    int oob_required, int page)
3245 {
3246         struct mtd_info *mtd = nand_to_mtd(chip);
3247         int ret, i, eccsize = chip->ecc.size;
3248         int eccbytes = chip->ecc.bytes;
3249         int eccsteps = chip->ecc.steps;
3250         int eccpadbytes = eccbytes + chip->ecc.prepad + chip->ecc.postpad;
3251         uint8_t *p = buf;
3252         uint8_t *oob = chip->oob_poi;
3253         unsigned int max_bitflips = 0;
3254
3255         ret = nand_read_page_op(chip, page, 0, NULL, 0);
3256         if (ret)
3257                 return ret;
3258
3259         for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
3260                 int stat;
3261
3262                 chip->ecc.hwctl(chip, NAND_ECC_READ);
3263
3264                 ret = nand_read_data_op(chip, p, eccsize, false, false);
3265                 if (ret)
3266                         return ret;
3267
3268                 if (chip->ecc.prepad) {
3269                         ret = nand_read_data_op(chip, oob, chip->ecc.prepad,
3270                                                 false, false);
3271                         if (ret)
3272                                 return ret;
3273
3274                         oob += chip->ecc.prepad;
3275                 }
3276
3277                 chip->ecc.hwctl(chip, NAND_ECC_READSYN);
3278
3279                 ret = nand_read_data_op(chip, oob, eccbytes, false, false);
3280                 if (ret)
3281                         return ret;
3282
3283                 stat = chip->ecc.correct(chip, p, oob, NULL);
3284
3285                 oob += eccbytes;
3286
3287                 if (chip->ecc.postpad) {
3288                         ret = nand_read_data_op(chip, oob, chip->ecc.postpad,
3289                                                 false, false);
3290                         if (ret)
3291                                 return ret;
3292
3293                         oob += chip->ecc.postpad;
3294                 }
3295
3296                 if (stat == -EBADMSG &&
3297                     (chip->ecc.options & NAND_ECC_GENERIC_ERASED_CHECK)) {
3298                         /* check for empty pages with bitflips */
3299                         stat = nand_check_erased_ecc_chunk(p, chip->ecc.size,
3300                                                            oob - eccpadbytes,
3301                                                            eccpadbytes,
3302                                                            NULL, 0,
3303                                                            chip->ecc.strength);
3304                 }
3305
3306                 if (stat < 0) {
3307                         mtd->ecc_stats.failed++;
3308                 } else {
3309                         mtd->ecc_stats.corrected += stat;
3310                         max_bitflips = max_t(unsigned int, max_bitflips, stat);
3311                 }
3312         }
3313
3314         /* Calculate remaining oob bytes */
3315         i = mtd->oobsize - (oob - chip->oob_poi);
3316         if (i) {
3317                 ret = nand_read_data_op(chip, oob, i, false, false);
3318                 if (ret)
3319                         return ret;
3320         }
3321
3322         return max_bitflips;
3323 }
3324
3325 /**
3326  * nand_transfer_oob - [INTERN] Transfer oob to client buffer
3327  * @chip: NAND chip object
3328  * @oob: oob destination address
3329  * @ops: oob ops structure
3330  * @len: size of oob to transfer
3331  */
3332 static uint8_t *nand_transfer_oob(struct nand_chip *chip, uint8_t *oob,
3333                                   struct mtd_oob_ops *ops, size_t len)
3334 {
3335         struct mtd_info *mtd = nand_to_mtd(chip);
3336         int ret;
3337
3338         switch (ops->mode) {
3339
3340         case MTD_OPS_PLACE_OOB:
3341         case MTD_OPS_RAW:
3342                 memcpy(oob, chip->oob_poi + ops->ooboffs, len);
3343                 return oob + len;
3344
3345         case MTD_OPS_AUTO_OOB:
3346                 ret = mtd_ooblayout_get_databytes(mtd, oob, chip->oob_poi,
3347                                                   ops->ooboffs, len);
3348                 BUG_ON(ret);
3349                 return oob + len;
3350
3351         default:
3352                 BUG();
3353         }
3354         return NULL;
3355 }
3356
3357 /**
3358  * nand_setup_read_retry - [INTERN] Set the READ RETRY mode
3359  * @chip: NAND chip object
3360  * @retry_mode: the retry mode to use
3361  *
3362  * Some vendors supply a special command to shift the Vt threshold, to be used
3363  * when there are too many bitflips in a page (i.e., ECC error). After setting
3364  * a new threshold, the host should retry reading the page.
3365  */
3366 static int nand_setup_read_retry(struct nand_chip *chip, int retry_mode)
3367 {
3368         pr_debug("setting READ RETRY mode %d\n", retry_mode);
3369
3370         if (retry_mode >= chip->read_retries)
3371                 return -EINVAL;
3372
3373         if (!chip->ops.setup_read_retry)
3374                 return -EOPNOTSUPP;
3375
3376         return chip->ops.setup_read_retry(chip, retry_mode);
3377 }
3378
3379 static void nand_wait_readrdy(struct nand_chip *chip)
3380 {
3381         const struct nand_interface_config *conf;
3382
3383         if (!(chip->options & NAND_NEED_READRDY))
3384                 return;
3385
3386         conf = nand_get_interface_config(chip);
3387         WARN_ON(nand_wait_rdy_op(chip, NAND_COMMON_TIMING_MS(conf, tR_max), 0));
3388 }
3389
3390 /**
3391  * nand_do_read_ops - [INTERN] Read data with ECC
3392  * @chip: NAND chip object
3393  * @from: offset to read from
3394  * @ops: oob ops structure
3395  *
3396  * Internal function. Called with chip held.
3397  */
3398 static int nand_do_read_ops(struct nand_chip *chip, loff_t from,
3399                             struct mtd_oob_ops *ops)
3400 {
3401         int chipnr, page, realpage, col, bytes, aligned, oob_required;
3402         struct mtd_info *mtd = nand_to_mtd(chip);
3403         int ret = 0;
3404         uint32_t readlen = ops->len;
3405         uint32_t oobreadlen = ops->ooblen;
3406         uint32_t max_oobsize = mtd_oobavail(mtd, ops);
3407
3408         uint8_t *bufpoi, *oob, *buf;
3409         int use_bounce_buf;
3410         unsigned int max_bitflips = 0;
3411         int retry_mode = 0;
3412         bool ecc_fail = false;
3413
3414         /* Check if the region is secured */
3415         if (nand_region_is_secured(chip, from, readlen))
3416                 return -EIO;
3417
3418         chipnr = (int)(from >> chip->chip_shift);
3419         nand_select_target(chip, chipnr);
3420
3421         realpage = (int)(from >> chip->page_shift);
3422         page = realpage & chip->pagemask;
3423
3424         col = (int)(from & (mtd->writesize - 1));
3425
3426         buf = ops->datbuf;
3427         oob = ops->oobbuf;
3428         oob_required = oob ? 1 : 0;
3429
3430         while (1) {
3431                 struct mtd_ecc_stats ecc_stats = mtd->ecc_stats;
3432
3433                 bytes = min(mtd->writesize - col, readlen);
3434                 aligned = (bytes == mtd->writesize);
3435
3436                 if (!aligned)
3437                         use_bounce_buf = 1;
3438                 else if (chip->options & NAND_USES_DMA)
3439                         use_bounce_buf = !virt_addr_valid(buf) ||
3440                                          !IS_ALIGNED((unsigned long)buf,
3441                                                      chip->buf_align);
3442                 else
3443                         use_bounce_buf = 0;
3444
3445                 /* Is the current page in the buffer? */
3446                 if (realpage != chip->pagecache.page || oob) {
3447                         bufpoi = use_bounce_buf ? chip->data_buf : buf;
3448
3449                         if (use_bounce_buf && aligned)
3450                                 pr_debug("%s: using read bounce buffer for buf@%p\n",
3451                                                  __func__, buf);
3452
3453 read_retry:
3454                         /*
3455                          * Now read the page into the buffer.  Absent an error,
3456                          * the read methods return max bitflips per ecc step.
3457                          */
3458                         if (unlikely(ops->mode == MTD_OPS_RAW))
3459                                 ret = chip->ecc.read_page_raw(chip, bufpoi,
3460                                                               oob_required,
3461                                                               page);
3462                         else if (!aligned && NAND_HAS_SUBPAGE_READ(chip) &&
3463                                  !oob)
3464                                 ret = chip->ecc.read_subpage(chip, col, bytes,
3465                                                              bufpoi, page);
3466                         else
3467                                 ret = chip->ecc.read_page(chip, bufpoi,
3468                                                           oob_required, page);
3469                         if (ret < 0) {
3470                                 if (use_bounce_buf)
3471                                         /* Invalidate page cache */
3472                                         chip->pagecache.page = -1;
3473                                 break;
3474                         }
3475
3476                         /*
3477                          * Copy back the data in the initial buffer when reading
3478                          * partial pages or when a bounce buffer is required.
3479                          */
3480                         if (use_bounce_buf) {
3481                                 if (!NAND_HAS_SUBPAGE_READ(chip) && !oob &&
3482                                     !(mtd->ecc_stats.failed - ecc_stats.failed) &&
3483                                     (ops->mode != MTD_OPS_RAW)) {
3484                                         chip->pagecache.page = realpage;
3485                                         chip->pagecache.bitflips = ret;
3486                                 } else {
3487                                         /* Invalidate page cache */
3488                                         chip->pagecache.page = -1;
3489                                 }
3490                                 memcpy(buf, bufpoi + col, bytes);
3491                         }
3492
3493                         if (unlikely(oob)) {
3494                                 int toread = min(oobreadlen, max_oobsize);
3495
3496                                 if (toread) {
3497                                         oob = nand_transfer_oob(chip, oob, ops,
3498                                                                 toread);
3499                                         oobreadlen -= toread;
3500                                 }
3501                         }
3502
3503                         nand_wait_readrdy(chip);
3504
3505                         if (mtd->ecc_stats.failed - ecc_stats.failed) {
3506                                 if (retry_mode + 1 < chip->read_retries) {
3507                                         retry_mode++;
3508                                         ret = nand_setup_read_retry(chip,
3509                                                         retry_mode);
3510                                         if (ret < 0)
3511                                                 break;
3512
3513                                         /* Reset ecc_stats; retry */
3514                                         mtd->ecc_stats = ecc_stats;
3515                                         goto read_retry;
3516                                 } else {
3517                                         /* No more retry modes; real failure */
3518                                         ecc_fail = true;
3519                                 }
3520                         }
3521
3522                         buf += bytes;
3523                         max_bitflips = max_t(unsigned int, max_bitflips, ret);
3524                 } else {
3525                         memcpy(buf, chip->data_buf + col, bytes);
3526                         buf += bytes;
3527                         max_bitflips = max_t(unsigned int, max_bitflips,
3528                                              chip->pagecache.bitflips);
3529                 }
3530
3531                 readlen -= bytes;
3532
3533                 /* Reset to retry mode 0 */
3534                 if (retry_mode) {
3535                         ret = nand_setup_read_retry(chip, 0);
3536                         if (ret < 0)
3537                                 break;
3538                         retry_mode = 0;
3539                 }
3540
3541                 if (!readlen)
3542                         break;
3543
3544                 /* For subsequent reads align to page boundary */
3545                 col = 0;
3546                 /* Increment page address */
3547                 realpage++;
3548
3549                 page = realpage & chip->pagemask;
3550                 /* Check, if we cross a chip boundary */
3551                 if (!page) {
3552                         chipnr++;
3553                         nand_deselect_target(chip);
3554                         nand_select_target(chip, chipnr);
3555                 }
3556         }
3557         nand_deselect_target(chip);
3558
3559         ops->retlen = ops->len - (size_t) readlen;
3560         if (oob)
3561                 ops->oobretlen = ops->ooblen - oobreadlen;
3562
3563         if (ret < 0)
3564                 return ret;
3565
3566         if (ecc_fail)
3567                 return -EBADMSG;
3568
3569         return max_bitflips;
3570 }
3571
3572 /**
3573  * nand_read_oob_std - [REPLACEABLE] the most common OOB data read function
3574  * @chip: nand chip info structure
3575  * @page: page number to read
3576  */
3577 int nand_read_oob_std(struct nand_chip *chip, int page)
3578 {
3579         struct mtd_info *mtd = nand_to_mtd(chip);
3580
3581         return nand_read_oob_op(chip, page, 0, chip->oob_poi, mtd->oobsize);
3582 }
3583 EXPORT_SYMBOL(nand_read_oob_std);
3584
3585 /**
3586  * nand_read_oob_syndrome - [REPLACEABLE] OOB data read function for HW ECC
3587  *                          with syndromes
3588  * @chip: nand chip info structure
3589  * @page: page number to read
3590  */
3591 static int nand_read_oob_syndrome(struct nand_chip *chip, int page)
3592 {
3593         struct mtd_info *mtd = nand_to_mtd(chip);
3594         int length = mtd->oobsize;
3595         int chunk = chip->ecc.bytes + chip->ecc.prepad + chip->ecc.postpad;
3596         int eccsize = chip->ecc.size;
3597         uint8_t *bufpoi = chip->oob_poi;
3598         int i, toread, sndrnd = 0, pos, ret;
3599
3600         ret = nand_read_page_op(chip, page, chip->ecc.size, NULL, 0);
3601         if (ret)
3602                 return ret;
3603
3604         for (i = 0; i < chip->ecc.steps; i++) {
3605                 if (sndrnd) {
3606                         int ret;
3607
3608                         pos = eccsize + i * (eccsize + chunk);
3609                         if (mtd->writesize > 512)
3610                                 ret = nand_change_read_column_op(chip, pos,
3611                                                                  NULL, 0,
3612                                                                  false);
3613                         else
3614                                 ret = nand_read_page_op(chip, page, pos, NULL,
3615                                                         0);
3616
3617                         if (ret)
3618                                 return ret;
3619                 } else
3620                         sndrnd = 1;
3621                 toread = min_t(int, length, chunk);
3622
3623                 ret = nand_read_data_op(chip, bufpoi, toread, false, false);
3624                 if (ret)
3625                         return ret;
3626
3627                 bufpoi += toread;
3628                 length -= toread;
3629         }
3630         if (length > 0) {
3631                 ret = nand_read_data_op(chip, bufpoi, length, false, false);
3632                 if (ret)
3633                         return ret;
3634         }
3635
3636         return 0;
3637 }
3638
3639 /**
3640  * nand_write_oob_std - [REPLACEABLE] the most common OOB data write function
3641  * @chip: nand chip info structure
3642  * @page: page number to write
3643  */
3644 int nand_write_oob_std(struct nand_chip *chip, int page)
3645 {
3646         struct mtd_info *mtd = nand_to_mtd(chip);
3647
3648         return nand_prog_page_op(chip, page, mtd->writesize, chip->oob_poi,
3649                                  mtd->oobsize);
3650 }
3651 EXPORT_SYMBOL(nand_write_oob_std);
3652
3653 /**
3654  * nand_write_oob_syndrome - [REPLACEABLE] OOB data write function for HW ECC
3655  *                           with syndrome - only for large page flash
3656  * @chip: nand chip info structure
3657  * @page: page number to write
3658  */
3659 static int nand_write_oob_syndrome(struct nand_chip *chip, int page)
3660 {
3661         struct mtd_info *mtd = nand_to_mtd(chip);
3662         int chunk = chip->ecc.bytes + chip->ecc.prepad + chip->ecc.postpad;
3663         int eccsize = chip->ecc.size, length = mtd->oobsize;
3664         int ret, i, len, pos, sndcmd = 0, steps = chip->ecc.steps;
3665         const uint8_t *bufpoi = chip->oob_poi;
3666
3667         /*
3668          * data-ecc-data-ecc ... ecc-oob
3669          * or
3670          * data-pad-ecc-pad-data-pad .... ecc-pad-oob
3671          */
3672         if (!chip->ecc.prepad && !chip->ecc.postpad) {
3673                 pos = steps * (eccsize + chunk);
3674                 steps = 0;
3675         } else
3676                 pos = eccsize;
3677
3678         ret = nand_prog_page_begin_op(chip, page, pos, NULL, 0);
3679         if (ret)
3680                 return ret;
3681
3682         for (i = 0; i < steps; i++) {
3683                 if (sndcmd) {
3684                         if (mtd->writesize <= 512) {
3685                                 uint32_t fill = 0xFFFFFFFF;
3686
3687                                 len = eccsize;
3688                                 while (len > 0) {
3689                                         int num = min_t(int, len, 4);
3690
3691                                         ret = nand_write_data_op(chip, &fill,
3692                                                                  num, false);
3693                                         if (ret)
3694                                                 return ret;
3695
3696                                         len -= num;
3697                                 }
3698                         } else {
3699                                 pos = eccsize + i * (eccsize + chunk);
3700                                 ret = nand_change_write_column_op(chip, pos,
3701                                                                   NULL, 0,
3702                                                                   false);
3703                                 if (ret)
3704                                         return ret;
3705                         }
3706                 } else
3707                         sndcmd = 1;
3708                 len = min_t(int, length, chunk);
3709
3710                 ret = nand_write_data_op(chip, bufpoi, len, false);
3711                 if (ret)
3712                         return ret;
3713
3714                 bufpoi += len;
3715                 length -= len;
3716         }
3717         if (length > 0) {
3718                 ret = nand_write_data_op(chip, bufpoi, length, false);
3719                 if (ret)
3720                         return ret;
3721         }
3722
3723         return nand_prog_page_end_op(chip);
3724 }
3725
3726 /**
3727  * nand_do_read_oob - [INTERN] NAND read out-of-band
3728  * @chip: NAND chip object
3729  * @from: offset to read from
3730  * @ops: oob operations description structure
3731  *
3732  * NAND read out-of-band data from the spare area.
3733  */
3734 static int nand_do_read_oob(struct nand_chip *chip, loff_t from,
3735                             struct mtd_oob_ops *ops)
3736 {
3737         struct mtd_info *mtd = nand_to_mtd(chip);
3738         unsigned int max_bitflips = 0;
3739         int page, realpage, chipnr;
3740         struct mtd_ecc_stats stats;
3741         int readlen = ops->ooblen;
3742         int len;
3743         uint8_t *buf = ops->oobbuf;
3744         int ret = 0;
3745
3746         pr_debug("%s: from = 0x%08Lx, len = %i\n",
3747                         __func__, (unsigned long long)from, readlen);
3748
3749         /* Check if the region is secured */
3750         if (nand_region_is_secured(chip, from, readlen))
3751                 return -EIO;
3752
3753         stats = mtd->ecc_stats;
3754
3755         len = mtd_oobavail(mtd, ops);
3756
3757         chipnr = (int)(from >> chip->chip_shift);
3758         nand_select_target(chip, chipnr);
3759
3760         /* Shift to get page */
3761         realpage = (int)(from >> chip->page_shift);
3762         page = realpage & chip->pagemask;
3763
3764         while (1) {
3765                 if (ops->mode == MTD_OPS_RAW)
3766                         ret = chip->ecc.read_oob_raw(chip, page);
3767                 else
3768                         ret = chip->ecc.read_oob(chip, page);
3769
3770                 if (ret < 0)
3771                         break;
3772
3773                 len = min(len, readlen);
3774                 buf = nand_transfer_oob(chip, buf, ops, len);
3775
3776                 nand_wait_readrdy(chip);
3777
3778                 max_bitflips = max_t(unsigned int, max_bitflips, ret);
3779
3780                 readlen -= len;
3781                 if (!readlen)
3782                         break;
3783
3784                 /* Increment page address */
3785                 realpage++;
3786
3787                 page = realpage & chip->pagemask;
3788                 /* Check, if we cross a chip boundary */
3789                 if (!page) {
3790                         chipnr++;
3791                         nand_deselect_target(chip);
3792                         nand_select_target(chip, chipnr);
3793                 }
3794         }
3795         nand_deselect_target(chip);
3796
3797         ops->oobretlen = ops->ooblen - readlen;
3798
3799         if (ret < 0)
3800                 return ret;
3801
3802         if (mtd->ecc_stats.failed - stats.failed)
3803                 return -EBADMSG;
3804
3805         return max_bitflips;
3806 }
3807
3808 /**
3809  * nand_read_oob - [MTD Interface] NAND read data and/or out-of-band
3810  * @mtd: MTD device structure
3811  * @from: offset to read from
3812  * @ops: oob operation description structure
3813  *
3814  * NAND read data and/or out-of-band data.
3815  */
3816 static int nand_read_oob(struct mtd_info *mtd, loff_t from,
3817                          struct mtd_oob_ops *ops)
3818 {
3819         struct nand_chip *chip = mtd_to_nand(mtd);
3820         int ret;
3821
3822         ops->retlen = 0;
3823
3824         if (ops->mode != MTD_OPS_PLACE_OOB &&
3825             ops->mode != MTD_OPS_AUTO_OOB &&
3826             ops->mode != MTD_OPS_RAW)
3827                 return -ENOTSUPP;
3828
3829         ret = nand_get_device(chip);
3830         if (ret)
3831                 return ret;
3832
3833         if (!ops->datbuf)
3834                 ret = nand_do_read_oob(chip, from, ops);
3835         else
3836                 ret = nand_do_read_ops(chip, from, ops);
3837
3838         nand_release_device(chip);
3839         return ret;
3840 }
3841
3842 /**
3843  * nand_write_page_raw_notsupp - dummy raw page write function
3844  * @chip: nand chip info structure
3845  * @buf: data buffer
3846  * @oob_required: must write chip->oob_poi to OOB
3847  * @page: page number to write
3848  *
3849  * Returns -ENOTSUPP unconditionally.
3850  */
3851 int nand_write_page_raw_notsupp(struct nand_chip *chip, const u8 *buf,
3852                                 int oob_required, int page)
3853 {
3854         return -ENOTSUPP;
3855 }
3856
3857 /**
3858  * nand_write_page_raw - [INTERN] raw page write function
3859  * @chip: nand chip info structure
3860  * @buf: data buffer
3861  * @oob_required: must write chip->oob_poi to OOB
3862  * @page: page number to write
3863  *
3864  * Not for syndrome calculating ECC controllers, which use a special oob layout.
3865  */
3866 int nand_write_page_raw(struct nand_chip *chip, const uint8_t *buf,
3867                         int oob_required, int page)
3868 {
3869         struct mtd_info *mtd = nand_to_mtd(chip);
3870         int ret;
3871
3872         ret = nand_prog_page_begin_op(chip, page, 0, buf, mtd->writesize);
3873         if (ret)
3874                 return ret;
3875
3876         if (oob_required) {
3877                 ret = nand_write_data_op(chip, chip->oob_poi, mtd->oobsize,
3878                                          false);
3879                 if (ret)
3880                         return ret;
3881         }
3882
3883         return nand_prog_page_end_op(chip);
3884 }
3885 EXPORT_SYMBOL(nand_write_page_raw);
3886
3887 /**
3888  * nand_monolithic_write_page_raw - Monolithic page write in raw mode
3889  * @chip: NAND chip info structure
3890  * @buf: data buffer to write
3891  * @oob_required: must write chip->oob_poi to OOB
3892  * @page: page number to write
3893  *
3894  * This is a raw page write, ie. without any error detection/correction.
3895  * Monolithic means we are requesting all the relevant data (main plus
3896  * eventually OOB) to be sent over the bus and effectively programmed
3897  * into the NAND chip arrays in a single operation. This is an
3898  * alternative to nand_write_page_raw(), which first sends the main
3899  * data, then eventually send the OOB data by latching more data
3900  * cycles on the NAND bus, and finally sends the program command to
3901  * synchronyze the NAND chip cache.
3902  */
3903 int nand_monolithic_write_page_raw(struct nand_chip *chip, const u8 *buf,
3904                                    int oob_required, int page)
3905 {
3906         struct mtd_info *mtd = nand_to_mtd(chip);
3907         unsigned int size = mtd->writesize;
3908         u8 *write_buf = (u8 *)buf;
3909
3910         if (oob_required) {
3911                 size += mtd->oobsize;
3912
3913                 if (buf != chip->data_buf) {
3914                         write_buf = nand_get_data_buf(chip);
3915                         memcpy(write_buf, buf, mtd->writesize);
3916                 }
3917         }
3918
3919         return nand_prog_page_op(chip, page, 0, write_buf, size);
3920 }
3921 EXPORT_SYMBOL(nand_monolithic_write_page_raw);
3922
3923 /**
3924  * nand_write_page_raw_syndrome - [INTERN] raw page write function
3925  * @chip: nand chip info structure
3926  * @buf: data buffer
3927  * @oob_required: must write chip->oob_poi to OOB
3928  * @page: page number to write
3929  *
3930  * We need a special oob layout and handling even when ECC isn't checked.
3931  */
3932 static int nand_write_page_raw_syndrome(struct nand_chip *chip,
3933                                         const uint8_t *buf, int oob_required,
3934                                         int page)
3935 {
3936         struct mtd_info *mtd = nand_to_mtd(chip);
3937         int eccsize = chip->ecc.size;
3938         int eccbytes = chip->ecc.bytes;
3939         uint8_t *oob = chip->oob_poi;
3940         int steps, size, ret;
3941
3942         ret = nand_prog_page_begin_op(chip, page, 0, NULL, 0);
3943         if (ret)
3944                 return ret;
3945
3946         for (steps = chip->ecc.steps; steps > 0; steps--) {
3947                 ret = nand_write_data_op(chip, buf, eccsize, false);
3948                 if (ret)
3949                         return ret;
3950
3951                 buf += eccsize;
3952
3953                 if (chip->ecc.prepad) {
3954                         ret = nand_write_data_op(chip, oob, chip->ecc.prepad,
3955                                                  false);
3956                         if (ret)
3957                                 return ret;
3958
3959                         oob += chip->ecc.prepad;
3960                 }
3961
3962                 ret = nand_write_data_op(chip, oob, eccbytes, false);
3963                 if (ret)
3964                         return ret;
3965
3966                 oob += eccbytes;
3967
3968                 if (chip->ecc.postpad) {
3969                         ret = nand_write_data_op(chip, oob, chip->ecc.postpad,
3970                                                  false);
3971                         if (ret)
3972                                 return ret;
3973
3974                         oob += chip->ecc.postpad;
3975                 }
3976         }
3977
3978         size = mtd->oobsize - (oob - chip->oob_poi);
3979         if (size) {
3980                 ret = nand_write_data_op(chip, oob, size, false);
3981                 if (ret)
3982                         return ret;
3983         }
3984
3985         return nand_prog_page_end_op(chip);
3986 }
3987 /**
3988  * nand_write_page_swecc - [REPLACEABLE] software ECC based page write function
3989  * @chip: nand chip info structure
3990  * @buf: data buffer
3991  * @oob_required: must write chip->oob_poi to OOB
3992  * @page: page number to write
3993  */
3994 static int nand_write_page_swecc(struct nand_chip *chip, const uint8_t *buf,
3995                                  int oob_required, int page)
3996 {
3997         struct mtd_info *mtd = nand_to_mtd(chip);
3998         int i, eccsize = chip->ecc.size, ret;
3999         int eccbytes = chip->ecc.bytes;
4000         int eccsteps = chip->ecc.steps;
4001         uint8_t *ecc_calc = chip->ecc.calc_buf;
4002         const uint8_t *p = buf;
4003
4004         /* Software ECC calculation */
4005         for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize)
4006                 chip->ecc.calculate(chip, p, &ecc_calc[i]);
4007
4008         ret = mtd_ooblayout_set_eccbytes(mtd, ecc_calc, chip->oob_poi, 0,
4009                                          chip->ecc.total);
4010         if (ret)
4011                 return ret;
4012
4013         return chip->ecc.write_page_raw(chip, buf, 1, page);
4014 }
4015
4016 /**
4017  * nand_write_page_hwecc - [REPLACEABLE] hardware ECC based page write function
4018  * @chip: nand chip info structure
4019  * @buf: data buffer
4020  * @oob_required: must write chip->oob_poi to OOB
4021  * @page: page number to write
4022  */
4023 static int nand_write_page_hwecc(struct nand_chip *chip, const uint8_t *buf,
4024                                  int oob_required, int page)
4025 {
4026         struct mtd_info *mtd = nand_to_mtd(chip);
4027         int i, eccsize = chip->ecc.size, ret;
4028         int eccbytes = chip->ecc.bytes;
4029         int eccsteps = chip->ecc.steps;
4030         uint8_t *ecc_calc = chip->ecc.calc_buf;
4031         const uint8_t *p = buf;
4032
4033         ret = nand_prog_page_begin_op(chip, page, 0, NULL, 0);
4034         if (ret)
4035                 return ret;
4036
4037         for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
4038                 chip->ecc.hwctl(chip, NAND_ECC_WRITE);
4039
4040                 ret = nand_write_data_op(chip, p, eccsize, false);
4041                 if (ret)
4042                         return ret;
4043
4044                 chip->ecc.calculate(chip, p, &ecc_calc[i]);
4045         }
4046
4047         ret = mtd_ooblayout_set_eccbytes(mtd, ecc_calc, chip->oob_poi, 0,
4048                                          chip->ecc.total);
4049         if (ret)
4050                 return ret;
4051
4052         ret = nand_write_data_op(chip, chip->oob_poi, mtd->oobsize, false);
4053         if (ret)
4054                 return ret;
4055
4056         return nand_prog_page_end_op(chip);
4057 }
4058
4059
4060 /**
4061  * nand_write_subpage_hwecc - [REPLACEABLE] hardware ECC based subpage write
4062  * @chip:       nand chip info structure
4063  * @offset:     column address of subpage within the page
4064  * @data_len:   data length
4065  * @buf:        data buffer
4066  * @oob_required: must write chip->oob_poi to OOB
4067  * @page: page number to write
4068  */
4069 static int nand_write_subpage_hwecc(struct nand_chip *chip, uint32_t offset,
4070                                     uint32_t data_len, const uint8_t *buf,
4071                                     int oob_required, int page)
4072 {
4073         struct mtd_info *mtd = nand_to_mtd(chip);
4074         uint8_t *oob_buf  = chip->oob_poi;
4075         uint8_t *ecc_calc = chip->ecc.calc_buf;
4076         int ecc_size      = chip->ecc.size;
4077         int ecc_bytes     = chip->ecc.bytes;
4078         int ecc_steps     = chip->ecc.steps;
4079         uint32_t start_step = offset / ecc_size;
4080         uint32_t end_step   = (offset + data_len - 1) / ecc_size;
4081         int oob_bytes       = mtd->oobsize / ecc_steps;
4082         int step, ret;
4083
4084         ret = nand_prog_page_begin_op(chip, page, 0, NULL, 0);
4085         if (ret)
4086                 return ret;
4087
4088         for (step = 0; step < ecc_steps; step++) {
4089                 /* configure controller for WRITE access */
4090                 chip->ecc.hwctl(chip, NAND_ECC_WRITE);
4091
4092                 /* write data (untouched subpages already masked by 0xFF) */
4093                 ret = nand_write_data_op(chip, buf, ecc_size, false);
4094                 if (ret)
4095                         return ret;
4096
4097                 /* mask ECC of un-touched subpages by padding 0xFF */
4098                 if ((step < start_step) || (step > end_step))
4099                         memset(ecc_calc, 0xff, ecc_bytes);
4100                 else
4101                         chip->ecc.calculate(chip, buf, ecc_calc);
4102
4103                 /* mask OOB of un-touched subpages by padding 0xFF */
4104                 /* if oob_required, preserve OOB metadata of written subpage */
4105                 if (!oob_required || (step < start_step) || (step > end_step))
4106                         memset(oob_buf, 0xff, oob_bytes);
4107
4108                 buf += ecc_size;
4109                 ecc_calc += ecc_bytes;
4110                 oob_buf  += oob_bytes;
4111         }
4112
4113         /* copy calculated ECC for whole page to chip->buffer->oob */
4114         /* this include masked-value(0xFF) for unwritten subpages */
4115         ecc_calc = chip->ecc.calc_buf;
4116         ret = mtd_ooblayout_set_eccbytes(mtd, ecc_calc, chip->oob_poi, 0,
4117                                          chip->ecc.total);
4118         if (ret)
4119                 return ret;
4120
4121         /* write OOB buffer to NAND device */
4122         ret = nand_write_data_op(chip, chip->oob_poi, mtd->oobsize, false);
4123         if (ret)
4124                 return ret;
4125
4126         return nand_prog_page_end_op(chip);
4127 }
4128
4129
4130 /**
4131  * nand_write_page_syndrome - [REPLACEABLE] hardware ECC syndrome based page write
4132  * @chip: nand chip info structure
4133  * @buf: data buffer
4134  * @oob_required: must write chip->oob_poi to OOB
4135  * @page: page number to write
4136  *
4137  * The hw generator calculates the error syndrome automatically. Therefore we
4138  * need a special oob layout and handling.
4139  */
4140 static int nand_write_page_syndrome(struct nand_chip *chip, const uint8_t *buf,
4141                                     int oob_required, int page)
4142 {
4143         struct mtd_info *mtd = nand_to_mtd(chip);
4144         int i, eccsize = chip->ecc.size;
4145         int eccbytes = chip->ecc.bytes;
4146         int eccsteps = chip->ecc.steps;
4147         const uint8_t *p = buf;
4148         uint8_t *oob = chip->oob_poi;
4149         int ret;
4150
4151         ret = nand_prog_page_begin_op(chip, page, 0, NULL, 0);
4152         if (ret)
4153                 return ret;
4154
4155         for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) {
4156                 chip->ecc.hwctl(chip, NAND_ECC_WRITE);
4157
4158                 ret = nand_write_data_op(chip, p, eccsize, false);
4159                 if (ret)
4160                         return ret;
4161
4162                 if (chip->ecc.prepad) {
4163                         ret = nand_write_data_op(chip, oob, chip->ecc.prepad,
4164                                                  false);
4165                         if (ret)
4166                                 return ret;
4167
4168                         oob += chip->ecc.prepad;
4169                 }
4170
4171                 chip->ecc.calculate(chip, p, oob);
4172
4173                 ret = nand_write_data_op(chip, oob, eccbytes, false);
4174                 if (ret)
4175                         return ret;
4176
4177                 oob += eccbytes;
4178
4179                 if (chip->ecc.postpad) {
4180                         ret = nand_write_data_op(chip, oob, chip->ecc.postpad,
4181                                                  false);
4182                         if (ret)
4183                                 return ret;
4184
4185                         oob += chip->ecc.postpad;
4186                 }
4187         }
4188
4189         /* Calculate remaining oob bytes */
4190         i = mtd->oobsize - (oob - chip->oob_poi);
4191         if (i) {
4192                 ret = nand_write_data_op(chip, oob, i, false);
4193                 if (ret)
4194                         return ret;
4195         }
4196
4197         return nand_prog_page_end_op(chip);
4198 }
4199
4200 /**
4201  * nand_write_page - write one page
4202  * @chip: NAND chip descriptor
4203  * @offset: address offset within the page
4204  * @data_len: length of actual data to be written
4205  * @buf: the data to write
4206  * @oob_required: must write chip->oob_poi to OOB
4207  * @page: page number to write
4208  * @raw: use _raw version of write_page
4209  */
4210 static int nand_write_page(struct nand_chip *chip, uint32_t offset,
4211                            int data_len, const uint8_t *buf, int oob_required,
4212                            int page, int raw)
4213 {
4214         struct mtd_info *mtd = nand_to_mtd(chip);
4215         int status, subpage;
4216
4217         if (!(chip->options & NAND_NO_SUBPAGE_WRITE) &&
4218                 chip->ecc.write_subpage)
4219                 subpage = offset || (data_len < mtd->writesize);
4220         else
4221                 subpage = 0;
4222
4223         if (unlikely(raw))
4224                 status = chip->ecc.write_page_raw(chip, buf, oob_required,
4225                                                   page);
4226         else if (subpage)
4227                 status = chip->ecc.write_subpage(chip, offset, data_len, buf,
4228                                                  oob_required, page);
4229         else
4230                 status = chip->ecc.write_page(chip, buf, oob_required, page);
4231
4232         if (status < 0)
4233                 return status;
4234
4235         return 0;
4236 }
4237
4238 #define NOTALIGNED(x)   ((x & (chip->subpagesize - 1)) != 0)
4239
4240 /**
4241  * nand_do_write_ops - [INTERN] NAND write with ECC
4242  * @chip: NAND chip object
4243  * @to: offset to write to
4244  * @ops: oob operations description structure
4245  *
4246  * NAND write with ECC.
4247  */
4248 static int nand_do_write_ops(struct nand_chip *chip, loff_t to,
4249                              struct mtd_oob_ops *ops)
4250 {
4251         struct mtd_info *mtd = nand_to_mtd(chip);
4252         int chipnr, realpage, page, column;
4253         uint32_t writelen = ops->len;
4254
4255         uint32_t oobwritelen = ops->ooblen;
4256         uint32_t oobmaxlen = mtd_oobavail(mtd, ops);
4257
4258         uint8_t *oob = ops->oobbuf;
4259         uint8_t *buf = ops->datbuf;
4260         int ret;
4261         int oob_required = oob ? 1 : 0;
4262
4263         ops->retlen = 0;
4264         if (!writelen)
4265                 return 0;
4266
4267         /* Reject writes, which are not page aligned */
4268         if (NOTALIGNED(to) || NOTALIGNED(ops->len)) {
4269                 pr_notice("%s: attempt to write non page aligned data\n",
4270                            __func__);
4271                 return -EINVAL;
4272         }
4273
4274         /* Check if the region is secured */
4275         if (nand_region_is_secured(chip, to, writelen))
4276                 return -EIO;
4277
4278         column = to & (mtd->writesize - 1);
4279
4280         chipnr = (int)(to >> chip->chip_shift);
4281         nand_select_target(chip, chipnr);
4282
4283         /* Check, if it is write protected */
4284         if (nand_check_wp(chip)) {
4285                 ret = -EIO;
4286                 goto err_out;
4287         }
4288
4289         realpage = (int)(to >> chip->page_shift);
4290         page = realpage & chip->pagemask;
4291
4292         /* Invalidate the page cache, when we write to the cached page */
4293         if (to <= ((loff_t)chip->pagecache.page << chip->page_shift) &&
4294             ((loff_t)chip->pagecache.page << chip->page_shift) < (to + ops->len))
4295                 chip->pagecache.page = -1;
4296
4297         /* Don't allow multipage oob writes with offset */
4298         if (oob && ops->ooboffs && (ops->ooboffs + ops->ooblen > oobmaxlen)) {
4299                 ret = -EINVAL;
4300                 goto err_out;
4301         }
4302
4303         while (1) {
4304                 int bytes = mtd->writesize;
4305                 uint8_t *wbuf = buf;
4306                 int use_bounce_buf;
4307                 int part_pagewr = (column || writelen < mtd->writesize);
4308
4309                 if (part_pagewr)
4310                         use_bounce_buf = 1;
4311                 else if (chip->options & NAND_USES_DMA)
4312                         use_bounce_buf = !virt_addr_valid(buf) ||
4313                                          !IS_ALIGNED((unsigned long)buf,
4314                                                      chip->buf_align);
4315                 else
4316                         use_bounce_buf = 0;
4317
4318                 /*
4319                  * Copy the data from the initial buffer when doing partial page
4320                  * writes or when a bounce buffer is required.
4321                  */
4322                 if (use_bounce_buf) {
4323                         pr_debug("%s: using write bounce buffer for buf@%p\n",
4324                                          __func__, buf);
4325                         if (part_pagewr)
4326                                 bytes = min_t(int, bytes - column, writelen);
4327                         wbuf = nand_get_data_buf(chip);
4328                         memset(wbuf, 0xff, mtd->writesize);
4329                         memcpy(&wbuf[column], buf, bytes);
4330                 }
4331
4332                 if (unlikely(oob)) {
4333                         size_t len = min(oobwritelen, oobmaxlen);
4334                         oob = nand_fill_oob(chip, oob, len, ops);
4335                         oobwritelen -= len;
4336                 } else {
4337                         /* We still need to erase leftover OOB data */
4338                         memset(chip->oob_poi, 0xff, mtd->oobsize);
4339                 }
4340
4341                 ret = nand_write_page(chip, column, bytes, wbuf,
4342                                       oob_required, page,
4343                                       (ops->mode == MTD_OPS_RAW));
4344                 if (ret)
4345                         break;
4346
4347                 writelen -= bytes;
4348                 if (!writelen)
4349                         break;
4350
4351                 column = 0;
4352                 buf += bytes;
4353                 realpage++;
4354
4355                 page = realpage & chip->pagemask;
4356                 /* Check, if we cross a chip boundary */
4357                 if (!page) {
4358                         chipnr++;
4359                         nand_deselect_target(chip);
4360                         nand_select_target(chip, chipnr);
4361                 }
4362         }
4363
4364         ops->retlen = ops->len - writelen;
4365         if (unlikely(oob))
4366                 ops->oobretlen = ops->ooblen;
4367
4368 err_out:
4369         nand_deselect_target(chip);
4370         return ret;
4371 }
4372
4373 /**
4374  * panic_nand_write - [MTD Interface] NAND write with ECC
4375  * @mtd: MTD device structure
4376  * @to: offset to write to
4377  * @len: number of bytes to write
4378  * @retlen: pointer to variable to store the number of written bytes
4379  * @buf: the data to write
4380  *
4381  * NAND write with ECC. Used when performing writes in interrupt context, this
4382  * may for example be called by mtdoops when writing an oops while in panic.
4383  */
4384 static int panic_nand_write(struct mtd_info *mtd, loff_t to, size_t len,
4385                             size_t *retlen, const uint8_t *buf)
4386 {
4387         struct nand_chip *chip = mtd_to_nand(mtd);
4388         int chipnr = (int)(to >> chip->chip_shift);
4389         struct mtd_oob_ops ops;
4390         int ret;
4391
4392         nand_select_target(chip, chipnr);
4393
4394         /* Wait for the device to get ready */
4395         panic_nand_wait(chip, 400);
4396
4397         memset(&ops, 0, sizeof(ops));
4398         ops.len = len;
4399         ops.datbuf = (uint8_t *)buf;
4400         ops.mode = MTD_OPS_PLACE_OOB;
4401
4402         ret = nand_do_write_ops(chip, to, &ops);
4403
4404         *retlen = ops.retlen;
4405         return ret;
4406 }
4407
4408 /**
4409  * nand_write_oob - [MTD Interface] NAND write data and/or out-of-band
4410  * @mtd: MTD device structure
4411  * @to: offset to write to
4412  * @ops: oob operation description structure
4413  */
4414 static int nand_write_oob(struct mtd_info *mtd, loff_t to,
4415                           struct mtd_oob_ops *ops)
4416 {
4417         struct nand_chip *chip = mtd_to_nand(mtd);
4418         int ret;
4419
4420         ops->retlen = 0;
4421
4422         ret = nand_get_device(chip);
4423         if (ret)
4424                 return ret;
4425
4426         switch (ops->mode) {
4427         case MTD_OPS_PLACE_OOB:
4428         case MTD_OPS_AUTO_OOB:
4429         case MTD_OPS_RAW:
4430                 break;
4431
4432         default:
4433                 goto out;
4434         }
4435
4436         if (!ops->datbuf)
4437                 ret = nand_do_write_oob(chip, to, ops);
4438         else
4439                 ret = nand_do_write_ops(chip, to, ops);
4440
4441 out:
4442         nand_release_device(chip);
4443         return ret;
4444 }
4445
4446 /**
4447  * nand_erase - [MTD Interface] erase block(s)
4448  * @mtd: MTD device structure
4449  * @instr: erase instruction
4450  *
4451  * Erase one ore more blocks.
4452  */
4453 static int nand_erase(struct mtd_info *mtd, struct erase_info *instr)
4454 {
4455         return nand_erase_nand(mtd_to_nand(mtd), instr, 0);
4456 }
4457
4458 /**
4459  * nand_erase_nand - [INTERN] erase block(s)
4460  * @chip: NAND chip object
4461  * @instr: erase instruction
4462  * @allowbbt: allow erasing the bbt area
4463  *
4464  * Erase one ore more blocks.
4465  */
4466 int nand_erase_nand(struct nand_chip *chip, struct erase_info *instr,
4467                     int allowbbt)
4468 {
4469         int page, pages_per_block, ret, chipnr;
4470         loff_t len;
4471
4472         pr_debug("%s: start = 0x%012llx, len = %llu\n",
4473                         __func__, (unsigned long long)instr->addr,
4474                         (unsigned long long)instr->len);
4475
4476         if (check_offs_len(chip, instr->addr, instr->len))
4477                 return -EINVAL;
4478
4479         /* Check if the region is secured */
4480         if (nand_region_is_secured(chip, instr->addr, instr->len))
4481                 return -EIO;
4482
4483         /* Grab the lock and see if the device is available */
4484         ret = nand_get_device(chip);
4485         if (ret)
4486                 return ret;
4487
4488         /* Shift to get first page */
4489         page = (int)(instr->addr >> chip->page_shift);
4490         chipnr = (int)(instr->addr >> chip->chip_shift);
4491
4492         /* Calculate pages in each block */
4493         pages_per_block = 1 << (chip->phys_erase_shift - chip->page_shift);
4494
4495         /* Select the NAND device */
4496         nand_select_target(chip, chipnr);
4497
4498         /* Check, if it is write protected */
4499         if (nand_check_wp(chip)) {
4500                 pr_debug("%s: device is write protected!\n",
4501                                 __func__);
4502                 ret = -EIO;
4503                 goto erase_exit;
4504         }
4505
4506         /* Loop through the pages */
4507         len = instr->len;
4508
4509         while (len) {
4510                 /* Check if we have a bad block, we do not erase bad blocks! */
4511                 if (nand_block_checkbad(chip, ((loff_t) page) <<
4512                                         chip->page_shift, allowbbt)) {
4513                         pr_warn("%s: attempt to erase a bad block at page 0x%08x\n",
4514                                     __func__, page);
4515                         ret = -EIO;
4516                         goto erase_exit;
4517                 }
4518
4519                 /*
4520                  * Invalidate the page cache, if we erase the block which
4521                  * contains the current cached page.
4522                  */
4523                 if (page <= chip->pagecache.page && chip->pagecache.page <
4524                     (page + pages_per_block))
4525                         chip->pagecache.page = -1;
4526
4527                 ret = nand_erase_op(chip, (page & chip->pagemask) >>
4528                                     (chip->phys_erase_shift - chip->page_shift));
4529                 if (ret) {
4530                         pr_debug("%s: failed erase, page 0x%08x\n",
4531                                         __func__, page);
4532                         instr->fail_addr =
4533                                 ((loff_t)page << chip->page_shift);
4534                         goto erase_exit;
4535                 }
4536
4537                 /* Increment page address and decrement length */
4538                 len -= (1ULL << chip->phys_erase_shift);
4539                 page += pages_per_block;
4540
4541                 /* Check, if we cross a chip boundary */
4542                 if (len && !(page & chip->pagemask)) {
4543                         chipnr++;
4544                         nand_deselect_target(chip);
4545                         nand_select_target(chip, chipnr);
4546                 }
4547         }
4548
4549         ret = 0;
4550 erase_exit:
4551
4552         /* Deselect and wake up anyone waiting on the device */
4553         nand_deselect_target(chip);
4554         nand_release_device(chip);
4555
4556         /* Return more or less happy */
4557         return ret;
4558 }
4559
4560 /**
4561  * nand_sync - [MTD Interface] sync
4562  * @mtd: MTD device structure
4563  *
4564  * Sync is actually a wait for chip ready function.
4565  */
4566 static void nand_sync(struct mtd_info *mtd)
4567 {
4568         struct nand_chip *chip = mtd_to_nand(mtd);
4569
4570         pr_debug("%s: called\n", __func__);
4571
4572         /* Grab the lock and see if the device is available */
4573         WARN_ON(nand_get_device(chip));
4574         /* Release it and go back */
4575         nand_release_device(chip);
4576 }
4577
4578 /**
4579  * nand_block_isbad - [MTD Interface] Check if block at offset is bad
4580  * @mtd: MTD device structure
4581  * @offs: offset relative to mtd start
4582  */
4583 static int nand_block_isbad(struct mtd_info *mtd, loff_t offs)
4584 {
4585         struct nand_chip *chip = mtd_to_nand(mtd);
4586         int chipnr = (int)(offs >> chip->chip_shift);
4587         int ret;
4588
4589         /* Select the NAND device */
4590         ret = nand_get_device(chip);
4591         if (ret)
4592                 return ret;
4593
4594         nand_select_target(chip, chipnr);
4595
4596         ret = nand_block_checkbad(chip, offs, 0);
4597
4598         nand_deselect_target(chip);
4599         nand_release_device(chip);
4600
4601         return ret;
4602 }
4603
4604 /**
4605  * nand_block_markbad - [MTD Interface] Mark block at the given offset as bad
4606  * @mtd: MTD device structure
4607  * @ofs: offset relative to mtd start
4608  */
4609 static int nand_block_markbad(struct mtd_info *mtd, loff_t ofs)
4610 {
4611         int ret;
4612
4613         ret = nand_block_isbad(mtd, ofs);
4614         if (ret) {
4615                 /* If it was bad already, return success and do nothing */
4616                 if (ret > 0)
4617                         return 0;
4618                 return ret;
4619         }
4620
4621         return nand_block_markbad_lowlevel(mtd_to_nand(mtd), ofs);
4622 }
4623
4624 /**
4625  * nand_suspend - [MTD Interface] Suspend the NAND flash
4626  * @mtd: MTD device structure
4627  *
4628  * Returns 0 for success or negative error code otherwise.
4629  */
4630 static int nand_suspend(struct mtd_info *mtd)
4631 {
4632         struct nand_chip *chip = mtd_to_nand(mtd);
4633         int ret = 0;
4634
4635         mutex_lock(&chip->lock);
4636         if (chip->ops.suspend)
4637                 ret = chip->ops.suspend(chip);
4638         if (!ret)
4639                 chip->suspended = 1;
4640         mutex_unlock(&chip->lock);
4641
4642         return ret;
4643 }
4644
4645 /**
4646  * nand_resume - [MTD Interface] Resume the NAND flash
4647  * @mtd: MTD device structure
4648  */
4649 static void nand_resume(struct mtd_info *mtd)
4650 {
4651         struct nand_chip *chip = mtd_to_nand(mtd);
4652
4653         mutex_lock(&chip->lock);
4654         if (chip->suspended) {
4655                 if (chip->ops.resume)
4656                         chip->ops.resume(chip);
4657                 chip->suspended = 0;
4658         } else {
4659                 pr_err("%s called for a chip which is not in suspended state\n",
4660                         __func__);
4661         }
4662         mutex_unlock(&chip->lock);
4663 }
4664
4665 /**
4666  * nand_shutdown - [MTD Interface] Finish the current NAND operation and
4667  *                 prevent further operations
4668  * @mtd: MTD device structure
4669  */
4670 static void nand_shutdown(struct mtd_info *mtd)
4671 {
4672         nand_suspend(mtd);
4673 }
4674
4675 /**
4676  * nand_lock - [MTD Interface] Lock the NAND flash
4677  * @mtd: MTD device structure
4678  * @ofs: offset byte address
4679  * @len: number of bytes to lock (must be a multiple of block/page size)
4680  */
4681 static int nand_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
4682 {
4683         struct nand_chip *chip = mtd_to_nand(mtd);
4684
4685         if (!chip->ops.lock_area)
4686                 return -ENOTSUPP;
4687
4688         return chip->ops.lock_area(chip, ofs, len);
4689 }
4690
4691 /**
4692  * nand_unlock - [MTD Interface] Unlock the NAND flash
4693  * @mtd: MTD device structure
4694  * @ofs: offset byte address
4695  * @len: number of bytes to unlock (must be a multiple of block/page size)
4696  */
4697 static int nand_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
4698 {
4699         struct nand_chip *chip = mtd_to_nand(mtd);
4700
4701         if (!chip->ops.unlock_area)
4702                 return -ENOTSUPP;
4703
4704         return chip->ops.unlock_area(chip, ofs, len);
4705 }
4706
4707 /* Set default functions */
4708 static void nand_set_defaults(struct nand_chip *chip)
4709 {
4710         /* If no controller is provided, use the dummy, legacy one. */
4711         if (!chip->controller) {
4712                 chip->controller = &chip->legacy.dummy_controller;
4713                 nand_controller_init(chip->controller);
4714         }
4715
4716         nand_legacy_set_defaults(chip);
4717
4718         if (!chip->buf_align)
4719                 chip->buf_align = 1;
4720 }
4721
4722 /* Sanitize ONFI strings so we can safely print them */
4723 void sanitize_string(uint8_t *s, size_t len)
4724 {
4725         ssize_t i;
4726
4727         /* Null terminate */
4728         s[len - 1] = 0;
4729
4730         /* Remove non printable chars */
4731         for (i = 0; i < len - 1; i++) {
4732                 if (s[i] < ' ' || s[i] > 127)
4733                         s[i] = '?';
4734         }
4735
4736         /* Remove trailing spaces */
4737         strim(s);
4738 }
4739
4740 /*
4741  * nand_id_has_period - Check if an ID string has a given wraparound period
4742  * @id_data: the ID string
4743  * @arrlen: the length of the @id_data array
4744  * @period: the period of repitition
4745  *
4746  * Check if an ID string is repeated within a given sequence of bytes at
4747  * specific repetition interval period (e.g., {0x20,0x01,0x7F,0x20} has a
4748  * period of 3). This is a helper function for nand_id_len(). Returns non-zero
4749  * if the repetition has a period of @period; otherwise, returns zero.
4750  */
4751 static int nand_id_has_period(u8 *id_data, int arrlen, int period)
4752 {
4753         int i, j;
4754         for (i = 0; i < period; i++)
4755                 for (j = i + period; j < arrlen; j += period)
4756                         if (id_data[i] != id_data[j])
4757                                 return 0;
4758         return 1;
4759 }
4760
4761 /*
4762  * nand_id_len - Get the length of an ID string returned by CMD_READID
4763  * @id_data: the ID string
4764  * @arrlen: the length of the @id_data array
4765
4766  * Returns the length of the ID string, according to known wraparound/trailing
4767  * zero patterns. If no pattern exists, returns the length of the array.
4768  */
4769 static int nand_id_len(u8 *id_data, int arrlen)
4770 {
4771         int last_nonzero, period;
4772
4773         /* Find last non-zero byte */
4774         for (last_nonzero = arrlen - 1; last_nonzero >= 0; last_nonzero--)
4775                 if (id_data[last_nonzero])
4776                         break;
4777
4778         /* All zeros */
4779         if (last_nonzero < 0)
4780                 return 0;
4781
4782         /* Calculate wraparound period */
4783         for (period = 1; period < arrlen; period++)
4784                 if (nand_id_has_period(id_data, arrlen, period))
4785                         break;
4786
4787         /* There's a repeated pattern */
4788         if (period < arrlen)
4789                 return period;
4790
4791         /* There are trailing zeros */
4792         if (last_nonzero < arrlen - 1)
4793                 return last_nonzero + 1;
4794
4795         /* No pattern detected */
4796         return arrlen;
4797 }
4798
4799 /* Extract the bits of per cell from the 3rd byte of the extended ID */
4800 static int nand_get_bits_per_cell(u8 cellinfo)
4801 {
4802         int bits;
4803
4804         bits = cellinfo & NAND_CI_CELLTYPE_MSK;
4805         bits >>= NAND_CI_CELLTYPE_SHIFT;
4806         return bits + 1;
4807 }
4808
4809 /*
4810  * Many new NAND share similar device ID codes, which represent the size of the
4811  * chip. The rest of the parameters must be decoded according to generic or
4812  * manufacturer-specific "extended ID" decoding patterns.
4813  */
4814 void nand_decode_ext_id(struct nand_chip *chip)
4815 {
4816         struct nand_memory_organization *memorg;
4817         struct mtd_info *mtd = nand_to_mtd(chip);
4818         int extid;
4819         u8 *id_data = chip->id.data;
4820
4821         memorg = nanddev_get_memorg(&chip->base);
4822
4823         /* The 3rd id byte holds MLC / multichip data */
4824         memorg->bits_per_cell = nand_get_bits_per_cell(id_data[2]);
4825         /* The 4th id byte is the important one */
4826         extid = id_data[3];
4827
4828         /* Calc pagesize */
4829         memorg->pagesize = 1024 << (extid & 0x03);
4830         mtd->writesize = memorg->pagesize;
4831         extid >>= 2;
4832         /* Calc oobsize */
4833         memorg->oobsize = (8 << (extid & 0x01)) * (mtd->writesize >> 9);
4834         mtd->oobsize = memorg->oobsize;
4835         extid >>= 2;
4836         /* Calc blocksize. Blocksize is multiples of 64KiB */
4837         memorg->pages_per_eraseblock = ((64 * 1024) << (extid & 0x03)) /
4838                                        memorg->pagesize;
4839         mtd->erasesize = (64 * 1024) << (extid & 0x03);
4840         extid >>= 2;
4841         /* Get buswidth information */
4842         if (extid & 0x1)
4843                 chip->options |= NAND_BUSWIDTH_16;
4844 }
4845 EXPORT_SYMBOL_GPL(nand_decode_ext_id);
4846
4847 /*
4848  * Old devices have chip data hardcoded in the device ID table. nand_decode_id
4849  * decodes a matching ID table entry and assigns the MTD size parameters for
4850  * the chip.
4851  */
4852 static void nand_decode_id(struct nand_chip *chip, struct nand_flash_dev *type)
4853 {
4854         struct mtd_info *mtd = nand_to_mtd(chip);
4855         struct nand_memory_organization *memorg;
4856
4857         memorg = nanddev_get_memorg(&chip->base);
4858
4859         memorg->pages_per_eraseblock = type->erasesize / type->pagesize;
4860         mtd->erasesize = type->erasesize;
4861         memorg->pagesize = type->pagesize;
4862         mtd->writesize = memorg->pagesize;
4863         memorg->oobsize = memorg->pagesize / 32;
4864         mtd->oobsize = memorg->oobsize;
4865
4866         /* All legacy ID NAND are small-page, SLC */
4867         memorg->bits_per_cell = 1;
4868 }
4869
4870 /*
4871  * Set the bad block marker/indicator (BBM/BBI) patterns according to some
4872  * heuristic patterns using various detected parameters (e.g., manufacturer,
4873  * page size, cell-type information).
4874  */
4875 static void nand_decode_bbm_options(struct nand_chip *chip)
4876 {
4877         struct mtd_info *mtd = nand_to_mtd(chip);
4878
4879         /* Set the bad block position */
4880         if (mtd->writesize > 512 || (chip->options & NAND_BUSWIDTH_16))
4881                 chip->badblockpos = NAND_BBM_POS_LARGE;
4882         else
4883                 chip->badblockpos = NAND_BBM_POS_SMALL;
4884 }
4885
4886 static inline bool is_full_id_nand(struct nand_flash_dev *type)
4887 {
4888         return type->id_len;
4889 }
4890
4891 static bool find_full_id_nand(struct nand_chip *chip,
4892                               struct nand_flash_dev *type)
4893 {
4894         struct nand_device *base = &chip->base;
4895         struct nand_ecc_props requirements;
4896         struct mtd_info *mtd = nand_to_mtd(chip);
4897         struct nand_memory_organization *memorg;
4898         u8 *id_data = chip->id.data;
4899
4900         memorg = nanddev_get_memorg(&chip->base);
4901
4902         if (!strncmp(type->id, id_data, type->id_len)) {
4903                 memorg->pagesize = type->pagesize;
4904                 mtd->writesize = memorg->pagesize;
4905                 memorg->pages_per_eraseblock = type->erasesize /
4906                                                type->pagesize;
4907                 mtd->erasesize = type->erasesize;
4908                 memorg->oobsize = type->oobsize;
4909                 mtd->oobsize = memorg->oobsize;
4910
4911                 memorg->bits_per_cell = nand_get_bits_per_cell(id_data[2]);
4912                 memorg->eraseblocks_per_lun =
4913                         DIV_ROUND_DOWN_ULL((u64)type->chipsize << 20,
4914                                            memorg->pagesize *
4915                                            memorg->pages_per_eraseblock);
4916                 chip->options |= type->options;
4917                 requirements.strength = NAND_ECC_STRENGTH(type);
4918                 requirements.step_size = NAND_ECC_STEP(type);
4919                 nanddev_set_ecc_requirements(base, &requirements);
4920
4921                 chip->parameters.model = kstrdup(type->name, GFP_KERNEL);
4922                 if (!chip->parameters.model)
4923                         return false;
4924
4925                 return true;
4926         }
4927         return false;
4928 }
4929
4930 /*
4931  * Manufacturer detection. Only used when the NAND is not ONFI or JEDEC
4932  * compliant and does not have a full-id or legacy-id entry in the nand_ids
4933  * table.
4934  */
4935 static void nand_manufacturer_detect(struct nand_chip *chip)
4936 {
4937         /*
4938          * Try manufacturer detection if available and use
4939          * nand_decode_ext_id() otherwise.
4940          */
4941         if (chip->manufacturer.desc && chip->manufacturer.desc->ops &&
4942             chip->manufacturer.desc->ops->detect) {
4943                 struct nand_memory_organization *memorg;
4944
4945                 memorg = nanddev_get_memorg(&chip->base);
4946
4947                 /* The 3rd id byte holds MLC / multichip data */
4948                 memorg->bits_per_cell = nand_get_bits_per_cell(chip->id.data[2]);
4949                 chip->manufacturer.desc->ops->detect(chip);
4950         } else {
4951                 nand_decode_ext_id(chip);
4952         }
4953 }
4954
4955 /*
4956  * Manufacturer initialization. This function is called for all NANDs including
4957  * ONFI and JEDEC compliant ones.
4958  * Manufacturer drivers should put all their specific initialization code in
4959  * their ->init() hook.
4960  */
4961 static int nand_manufacturer_init(struct nand_chip *chip)
4962 {
4963         if (!chip->manufacturer.desc || !chip->manufacturer.desc->ops ||
4964             !chip->manufacturer.desc->ops->init)
4965                 return 0;
4966
4967         return chip->manufacturer.desc->ops->init(chip);
4968 }
4969
4970 /*
4971  * Manufacturer cleanup. This function is called for all NANDs including
4972  * ONFI and JEDEC compliant ones.
4973  * Manufacturer drivers should put all their specific cleanup code in their
4974  * ->cleanup() hook.
4975  */
4976 static void nand_manufacturer_cleanup(struct nand_chip *chip)
4977 {
4978         /* Release manufacturer private data */
4979         if (chip->manufacturer.desc && chip->manufacturer.desc->ops &&
4980             chip->manufacturer.desc->ops->cleanup)
4981                 chip->manufacturer.desc->ops->cleanup(chip);
4982 }
4983
4984 static const char *
4985 nand_manufacturer_name(const struct nand_manufacturer_desc *manufacturer_desc)
4986 {
4987         return manufacturer_desc ? manufacturer_desc->name : "Unknown";
4988 }
4989
4990 /*
4991  * Get the flash and manufacturer id and lookup if the type is supported.
4992  */
4993 static int nand_detect(struct nand_chip *chip, struct nand_flash_dev *type)
4994 {
4995         const struct nand_manufacturer_desc *manufacturer_desc;
4996         struct mtd_info *mtd = nand_to_mtd(chip);
4997         struct nand_memory_organization *memorg;
4998         int busw, ret;
4999         u8 *id_data = chip->id.data;
5000         u8 maf_id, dev_id;
5001         u64 targetsize;
5002
5003         /*
5004          * Let's start by initializing memorg fields that might be left
5005          * unassigned by the ID-based detection logic.
5006          */
5007         memorg = nanddev_get_memorg(&chip->base);
5008         memorg->planes_per_lun = 1;
5009         memorg->luns_per_target = 1;
5010
5011         /*
5012          * Reset the chip, required by some chips (e.g. Micron MT29FxGxxxxx)
5013          * after power-up.
5014          */
5015         ret = nand_reset(chip, 0);
5016         if (ret)
5017                 return ret;
5018
5019         /* Select the device */
5020         nand_select_target(chip, 0);
5021
5022         /* Send the command for reading device ID */
5023         ret = nand_readid_op(chip, 0, id_data, 2);
5024         if (ret)
5025                 return ret;
5026
5027         /* Read manufacturer and device IDs */
5028         maf_id = id_data[0];
5029         dev_id = id_data[1];
5030
5031         /*
5032          * Try again to make sure, as some systems the bus-hold or other
5033          * interface concerns can cause random data which looks like a
5034          * possibly credible NAND flash to appear. If the two results do
5035          * not match, ignore the device completely.
5036          */
5037
5038         /* Read entire ID string */
5039         ret = nand_readid_op(chip, 0, id_data, sizeof(chip->id.data));
5040         if (ret)
5041                 return ret;
5042
5043         if (id_data[0] != maf_id || id_data[1] != dev_id) {
5044                 pr_info("second ID read did not match %02x,%02x against %02x,%02x\n",
5045                         maf_id, dev_id, id_data[0], id_data[1]);
5046                 return -ENODEV;
5047         }
5048
5049         chip->id.len = nand_id_len(id_data, ARRAY_SIZE(chip->id.data));
5050
5051         /* Try to identify manufacturer */
5052         manufacturer_desc = nand_get_manufacturer_desc(maf_id);
5053         chip->manufacturer.desc = manufacturer_desc;
5054
5055         if (!type)
5056                 type = nand_flash_ids;
5057
5058         /*
5059          * Save the NAND_BUSWIDTH_16 flag before letting auto-detection logic
5060          * override it.
5061          * This is required to make sure initial NAND bus width set by the
5062          * NAND controller driver is coherent with the real NAND bus width
5063          * (extracted by auto-detection code).
5064          */
5065         busw = chip->options & NAND_BUSWIDTH_16;
5066
5067         /*
5068          * The flag is only set (never cleared), reset it to its default value
5069          * before starting auto-detection.
5070          */
5071         chip->options &= ~NAND_BUSWIDTH_16;
5072
5073         for (; type->name != NULL; type++) {
5074                 if (is_full_id_nand(type)) {
5075                         if (find_full_id_nand(chip, type))
5076                                 goto ident_done;
5077                 } else if (dev_id == type->dev_id) {
5078                         break;
5079                 }
5080         }
5081
5082         if (!type->name || !type->pagesize) {
5083                 /* Check if the chip is ONFI compliant */
5084                 ret = nand_onfi_detect(chip);
5085                 if (ret < 0)
5086                         return ret;
5087                 else if (ret)
5088                         goto ident_done;
5089
5090                 /* Check if the chip is JEDEC compliant */
5091                 ret = nand_jedec_detect(chip);
5092                 if (ret < 0)
5093                         return ret;
5094                 else if (ret)
5095                         goto ident_done;
5096         }
5097
5098         if (!type->name)
5099                 return -ENODEV;
5100
5101         chip->parameters.model = kstrdup(type->name, GFP_KERNEL);
5102         if (!chip->parameters.model)
5103                 return -ENOMEM;
5104
5105         if (!type->pagesize)
5106                 nand_manufacturer_detect(chip);
5107         else
5108                 nand_decode_id(chip, type);
5109
5110         /* Get chip options */
5111         chip->options |= type->options;
5112
5113         memorg->eraseblocks_per_lun =
5114                         DIV_ROUND_DOWN_ULL((u64)type->chipsize << 20,
5115                                            memorg->pagesize *
5116                                            memorg->pages_per_eraseblock);
5117
5118 ident_done:
5119         if (!mtd->name)
5120                 mtd->name = chip->parameters.model;
5121
5122         if (chip->options & NAND_BUSWIDTH_AUTO) {
5123                 WARN_ON(busw & NAND_BUSWIDTH_16);
5124                 nand_set_defaults(chip);
5125         } else if (busw != (chip->options & NAND_BUSWIDTH_16)) {
5126                 /*
5127                  * Check, if buswidth is correct. Hardware drivers should set
5128                  * chip correct!
5129                  */
5130                 pr_info("device found, Manufacturer ID: 0x%02x, Chip ID: 0x%02x\n",
5131                         maf_id, dev_id);
5132                 pr_info("%s %s\n", nand_manufacturer_name(manufacturer_desc),
5133                         mtd->name);
5134                 pr_warn("bus width %d instead of %d bits\n", busw ? 16 : 8,
5135                         (chip->options & NAND_BUSWIDTH_16) ? 16 : 8);
5136                 ret = -EINVAL;
5137
5138                 goto free_detect_allocation;
5139         }
5140
5141         nand_decode_bbm_options(chip);
5142
5143         /* Calculate the address shift from the page size */
5144         chip->page_shift = ffs(mtd->writesize) - 1;
5145         /* Convert chipsize to number of pages per chip -1 */
5146         targetsize = nanddev_target_size(&chip->base);
5147         chip->pagemask = (targetsize >> chip->page_shift) - 1;
5148
5149         chip->bbt_erase_shift = chip->phys_erase_shift =
5150                 ffs(mtd->erasesize) - 1;
5151         if (targetsize & 0xffffffff)
5152                 chip->chip_shift = ffs((unsigned)targetsize) - 1;
5153         else {
5154                 chip->chip_shift = ffs((unsigned)(targetsize >> 32));
5155                 chip->chip_shift += 32 - 1;
5156         }
5157
5158         if (chip->chip_shift - chip->page_shift > 16)
5159                 chip->options |= NAND_ROW_ADDR_3;
5160
5161         chip->badblockbits = 8;
5162
5163         nand_legacy_adjust_cmdfunc(chip);
5164
5165         pr_info("device found, Manufacturer ID: 0x%02x, Chip ID: 0x%02x\n",
5166                 maf_id, dev_id);
5167         pr_info("%s %s\n", nand_manufacturer_name(manufacturer_desc),
5168                 chip->parameters.model);
5169         pr_info("%d MiB, %s, erase size: %d KiB, page size: %d, OOB size: %d\n",
5170                 (int)(targetsize >> 20), nand_is_slc(chip) ? "SLC" : "MLC",
5171                 mtd->erasesize >> 10, mtd->writesize, mtd->oobsize);
5172         return 0;
5173
5174 free_detect_allocation:
5175         kfree(chip->parameters.model);
5176
5177         return ret;
5178 }
5179
5180 static enum nand_ecc_engine_type
5181 of_get_rawnand_ecc_engine_type_legacy(struct device_node *np)
5182 {
5183         enum nand_ecc_legacy_mode {
5184                 NAND_ECC_INVALID,
5185                 NAND_ECC_NONE,
5186                 NAND_ECC_SOFT,
5187                 NAND_ECC_SOFT_BCH,
5188                 NAND_ECC_HW,
5189                 NAND_ECC_HW_SYNDROME,
5190                 NAND_ECC_ON_DIE,
5191         };
5192         const char * const nand_ecc_legacy_modes[] = {
5193                 [NAND_ECC_NONE]         = "none",
5194                 [NAND_ECC_SOFT]         = "soft",
5195                 [NAND_ECC_SOFT_BCH]     = "soft_bch",
5196                 [NAND_ECC_HW]           = "hw",
5197                 [NAND_ECC_HW_SYNDROME]  = "hw_syndrome",
5198                 [NAND_ECC_ON_DIE]       = "on-die",
5199         };
5200         enum nand_ecc_legacy_mode eng_type;
5201         const char *pm;
5202         int err;
5203
5204         err = of_property_read_string(np, "nand-ecc-mode", &pm);
5205         if (err)
5206                 return NAND_ECC_ENGINE_TYPE_INVALID;
5207
5208         for (eng_type = NAND_ECC_NONE;
5209              eng_type < ARRAY_SIZE(nand_ecc_legacy_modes); eng_type++) {
5210                 if (!strcasecmp(pm, nand_ecc_legacy_modes[eng_type])) {
5211                         switch (eng_type) {
5212                         case NAND_ECC_NONE:
5213                                 return NAND_ECC_ENGINE_TYPE_NONE;
5214                         case NAND_ECC_SOFT:
5215                         case NAND_ECC_SOFT_BCH:
5216                                 return NAND_ECC_ENGINE_TYPE_SOFT;
5217                         case NAND_ECC_HW:
5218                         case NAND_ECC_HW_SYNDROME:
5219                                 return NAND_ECC_ENGINE_TYPE_ON_HOST;
5220                         case NAND_ECC_ON_DIE:
5221                                 return NAND_ECC_ENGINE_TYPE_ON_DIE;
5222                         default:
5223                                 break;
5224                         }
5225                 }
5226         }
5227
5228         return NAND_ECC_ENGINE_TYPE_INVALID;
5229 }
5230
5231 static enum nand_ecc_placement
5232 of_get_rawnand_ecc_placement_legacy(struct device_node *np)
5233 {
5234         const char *pm;
5235         int err;
5236
5237         err = of_property_read_string(np, "nand-ecc-mode", &pm);
5238         if (!err) {
5239                 if (!strcasecmp(pm, "hw_syndrome"))
5240                         return NAND_ECC_PLACEMENT_INTERLEAVED;
5241         }
5242
5243         return NAND_ECC_PLACEMENT_UNKNOWN;
5244 }
5245
5246 static enum nand_ecc_algo of_get_rawnand_ecc_algo_legacy(struct device_node *np)
5247 {
5248         const char *pm;
5249         int err;
5250
5251         err = of_property_read_string(np, "nand-ecc-mode", &pm);
5252         if (!err) {
5253                 if (!strcasecmp(pm, "soft"))
5254                         return NAND_ECC_ALGO_HAMMING;
5255                 else if (!strcasecmp(pm, "soft_bch"))
5256                         return NAND_ECC_ALGO_BCH;
5257         }
5258
5259         return NAND_ECC_ALGO_UNKNOWN;
5260 }
5261
5262 static void of_get_nand_ecc_legacy_user_config(struct nand_chip *chip)
5263 {
5264         struct device_node *dn = nand_get_flash_node(chip);
5265         struct nand_ecc_props *user_conf = &chip->base.ecc.user_conf;
5266
5267         if (user_conf->engine_type == NAND_ECC_ENGINE_TYPE_INVALID)
5268                 user_conf->engine_type = of_get_rawnand_ecc_engine_type_legacy(dn);
5269
5270         if (user_conf->algo == NAND_ECC_ALGO_UNKNOWN)
5271                 user_conf->algo = of_get_rawnand_ecc_algo_legacy(dn);
5272
5273         if (user_conf->placement == NAND_ECC_PLACEMENT_UNKNOWN)
5274                 user_conf->placement = of_get_rawnand_ecc_placement_legacy(dn);
5275 }
5276
5277 static int of_get_nand_bus_width(struct device_node *np)
5278 {
5279         u32 val;
5280
5281         if (of_property_read_u32(np, "nand-bus-width", &val))
5282                 return 8;
5283
5284         switch (val) {
5285         case 8:
5286         case 16:
5287                 return val;
5288         default:
5289                 return -EIO;
5290         }
5291 }
5292
5293 static bool of_get_nand_on_flash_bbt(struct device_node *np)
5294 {
5295         return of_property_read_bool(np, "nand-on-flash-bbt");
5296 }
5297
5298 static int of_get_nand_secure_regions(struct nand_chip *chip)
5299 {
5300         struct device_node *dn = nand_get_flash_node(chip);
5301         struct property *prop;
5302         int nr_elem, i, j;
5303
5304         /* Only proceed if the "secure-regions" property is present in DT */
5305         prop = of_find_property(dn, "secure-regions", NULL);
5306         if (!prop)
5307                 return 0;
5308
5309         nr_elem = of_property_count_elems_of_size(dn, "secure-regions", sizeof(u64));
5310         if (nr_elem <= 0)
5311                 return nr_elem;
5312
5313         chip->nr_secure_regions = nr_elem / 2;
5314         chip->secure_regions = kcalloc(chip->nr_secure_regions, sizeof(*chip->secure_regions),
5315                                        GFP_KERNEL);
5316         if (!chip->secure_regions)
5317                 return -ENOMEM;
5318
5319         for (i = 0, j = 0; i < chip->nr_secure_regions; i++, j += 2) {
5320                 of_property_read_u64_index(dn, "secure-regions", j,
5321                                            &chip->secure_regions[i].offset);
5322                 of_property_read_u64_index(dn, "secure-regions", j + 1,
5323                                            &chip->secure_regions[i].size);
5324         }
5325
5326         return 0;
5327 }
5328
5329 /**
5330  * rawnand_dt_parse_gpio_cs - Parse the gpio-cs property of a controller
5331  * @dev: Device that will be parsed. Also used for managed allocations.
5332  * @cs_array: Array of GPIO desc pointers allocated on success
5333  * @ncs_array: Number of entries in @cs_array updated on success.
5334  * @return 0 on success, an error otherwise.
5335  */
5336 int rawnand_dt_parse_gpio_cs(struct device *dev, struct gpio_desc ***cs_array,
5337                              unsigned int *ncs_array)
5338 {
5339         struct device_node *np = dev->of_node;
5340         struct gpio_desc **descs;
5341         int ndescs, i;
5342
5343         ndescs = of_gpio_named_count(np, "cs-gpios");
5344         if (ndescs < 0) {
5345                 dev_dbg(dev, "No valid cs-gpios property\n");
5346                 return 0;
5347         }
5348
5349         descs = devm_kcalloc(dev, ndescs, sizeof(*descs), GFP_KERNEL);
5350         if (!descs)
5351                 return -ENOMEM;
5352
5353         for (i = 0; i < ndescs; i++) {
5354                 descs[i] = gpiod_get_index_optional(dev, "cs", i,
5355                                                     GPIOD_OUT_HIGH);
5356                 if (IS_ERR(descs[i]))
5357                         return PTR_ERR(descs[i]);
5358         }
5359
5360         *ncs_array = ndescs;
5361         *cs_array = descs;
5362
5363         return 0;
5364 }
5365 EXPORT_SYMBOL(rawnand_dt_parse_gpio_cs);
5366
5367 static int rawnand_dt_init(struct nand_chip *chip)
5368 {
5369         struct nand_device *nand = mtd_to_nanddev(nand_to_mtd(chip));
5370         struct device_node *dn = nand_get_flash_node(chip);
5371
5372         if (!dn)
5373                 return 0;
5374
5375         if (of_get_nand_bus_width(dn) == 16)
5376                 chip->options |= NAND_BUSWIDTH_16;
5377
5378         if (of_property_read_bool(dn, "nand-is-boot-medium"))
5379                 chip->options |= NAND_IS_BOOT_MEDIUM;
5380
5381         if (of_get_nand_on_flash_bbt(dn))
5382                 chip->bbt_options |= NAND_BBT_USE_FLASH;
5383
5384         of_get_nand_ecc_user_config(nand);
5385         of_get_nand_ecc_legacy_user_config(chip);
5386
5387         /*
5388          * If neither the user nor the NAND controller have requested a specific
5389          * ECC engine type, we will default to NAND_ECC_ENGINE_TYPE_ON_HOST.
5390          */
5391         nand->ecc.defaults.engine_type = NAND_ECC_ENGINE_TYPE_ON_HOST;
5392
5393         /*
5394          * Use the user requested engine type, unless there is none, in this
5395          * case default to the NAND controller choice, otherwise fallback to
5396          * the raw NAND default one.
5397          */
5398         if (nand->ecc.user_conf.engine_type != NAND_ECC_ENGINE_TYPE_INVALID)
5399                 chip->ecc.engine_type = nand->ecc.user_conf.engine_type;
5400         if (chip->ecc.engine_type == NAND_ECC_ENGINE_TYPE_INVALID)
5401                 chip->ecc.engine_type = nand->ecc.defaults.engine_type;
5402
5403         chip->ecc.placement = nand->ecc.user_conf.placement;
5404         chip->ecc.algo = nand->ecc.user_conf.algo;
5405         chip->ecc.strength = nand->ecc.user_conf.strength;
5406         chip->ecc.size = nand->ecc.user_conf.step_size;
5407
5408         return 0;
5409 }
5410
5411 /**
5412  * nand_scan_ident - Scan for the NAND device
5413  * @chip: NAND chip object
5414  * @maxchips: number of chips to scan for
5415  * @table: alternative NAND ID table
5416  *
5417  * This is the first phase of the normal nand_scan() function. It reads the
5418  * flash ID and sets up MTD fields accordingly.
5419  *
5420  * This helper used to be called directly from controller drivers that needed
5421  * to tweak some ECC-related parameters before nand_scan_tail(). This separation
5422  * prevented dynamic allocations during this phase which was unconvenient and
5423  * as been banned for the benefit of the ->init_ecc()/cleanup_ecc() hooks.
5424  */
5425 static int nand_scan_ident(struct nand_chip *chip, unsigned int maxchips,
5426                            struct nand_flash_dev *table)
5427 {
5428         struct mtd_info *mtd = nand_to_mtd(chip);
5429         struct nand_memory_organization *memorg;
5430         int nand_maf_id, nand_dev_id;
5431         unsigned int i;
5432         int ret;
5433
5434         memorg = nanddev_get_memorg(&chip->base);
5435
5436         /* Assume all dies are deselected when we enter nand_scan_ident(). */
5437         chip->cur_cs = -1;
5438
5439         mutex_init(&chip->lock);
5440
5441         /* Enforce the right timings for reset/detection */
5442         chip->current_interface_config = nand_get_reset_interface_config();
5443
5444         ret = rawnand_dt_init(chip);
5445         if (ret)
5446                 return ret;
5447
5448         if (!mtd->name && mtd->dev.parent)
5449                 mtd->name = dev_name(mtd->dev.parent);
5450
5451         /* Set the default functions */
5452         nand_set_defaults(chip);
5453
5454         ret = nand_legacy_check_hooks(chip);
5455         if (ret)
5456                 return ret;
5457
5458         memorg->ntargets = maxchips;
5459
5460         /* Read the flash type */
5461         ret = nand_detect(chip, table);
5462         if (ret) {
5463                 if (!(chip->options & NAND_SCAN_SILENT_NODEV))
5464                         pr_warn("No NAND device found\n");
5465                 nand_deselect_target(chip);
5466                 return ret;
5467         }
5468
5469         nand_maf_id = chip->id.data[0];
5470         nand_dev_id = chip->id.data[1];
5471
5472         nand_deselect_target(chip);
5473
5474         /* Check for a chip array */
5475         for (i = 1; i < maxchips; i++) {
5476                 u8 id[2];
5477
5478                 /* See comment in nand_get_flash_type for reset */
5479                 ret = nand_reset(chip, i);
5480                 if (ret)
5481                         break;
5482
5483                 nand_select_target(chip, i);
5484                 /* Send the command for reading device ID */
5485                 ret = nand_readid_op(chip, 0, id, sizeof(id));
5486                 if (ret)
5487                         break;
5488                 /* Read manufacturer and device IDs */
5489                 if (nand_maf_id != id[0] || nand_dev_id != id[1]) {
5490                         nand_deselect_target(chip);
5491                         break;
5492                 }
5493                 nand_deselect_target(chip);
5494         }
5495         if (i > 1)
5496                 pr_info("%d chips detected\n", i);
5497
5498         /* Store the number of chips and calc total size for mtd */
5499         memorg->ntargets = i;
5500         mtd->size = i * nanddev_target_size(&chip->base);
5501
5502         return 0;
5503 }
5504
5505 static void nand_scan_ident_cleanup(struct nand_chip *chip)
5506 {
5507         kfree(chip->parameters.model);
5508         kfree(chip->parameters.onfi);
5509 }
5510
5511 int rawnand_sw_hamming_init(struct nand_chip *chip)
5512 {
5513         struct nand_ecc_sw_hamming_conf *engine_conf;
5514         struct nand_device *base = &chip->base;
5515         int ret;
5516
5517         base->ecc.user_conf.engine_type = NAND_ECC_ENGINE_TYPE_SOFT;
5518         base->ecc.user_conf.algo = NAND_ECC_ALGO_HAMMING;
5519         base->ecc.user_conf.strength = chip->ecc.strength;
5520         base->ecc.user_conf.step_size = chip->ecc.size;
5521
5522         ret = nand_ecc_sw_hamming_init_ctx(base);
5523         if (ret)
5524                 return ret;
5525
5526         engine_conf = base->ecc.ctx.priv;
5527
5528         if (chip->ecc.options & NAND_ECC_SOFT_HAMMING_SM_ORDER)
5529                 engine_conf->sm_order = true;
5530
5531         chip->ecc.size = base->ecc.ctx.conf.step_size;
5532         chip->ecc.strength = base->ecc.ctx.conf.strength;
5533         chip->ecc.total = base->ecc.ctx.total;
5534         chip->ecc.steps = nanddev_get_ecc_nsteps(base);
5535         chip->ecc.bytes = base->ecc.ctx.total / nanddev_get_ecc_nsteps(base);
5536
5537         return 0;
5538 }
5539 EXPORT_SYMBOL(rawnand_sw_hamming_init);
5540
5541 int rawnand_sw_hamming_calculate(struct nand_chip *chip,
5542                                  const unsigned char *buf,
5543                                  unsigned char *code)
5544 {
5545         struct nand_device *base = &chip->base;
5546
5547         return nand_ecc_sw_hamming_calculate(base, buf, code);
5548 }
5549 EXPORT_SYMBOL(rawnand_sw_hamming_calculate);
5550
5551 int rawnand_sw_hamming_correct(struct nand_chip *chip,
5552                                unsigned char *buf,
5553                                unsigned char *read_ecc,
5554                                unsigned char *calc_ecc)
5555 {
5556         struct nand_device *base = &chip->base;
5557
5558         return nand_ecc_sw_hamming_correct(base, buf, read_ecc, calc_ecc);
5559 }
5560 EXPORT_SYMBOL(rawnand_sw_hamming_correct);
5561
5562 void rawnand_sw_hamming_cleanup(struct nand_chip *chip)
5563 {
5564         struct nand_device *base = &chip->base;
5565
5566         nand_ecc_sw_hamming_cleanup_ctx(base);
5567 }
5568 EXPORT_SYMBOL(rawnand_sw_hamming_cleanup);
5569
5570 int rawnand_sw_bch_init(struct nand_chip *chip)
5571 {
5572         struct nand_device *base = &chip->base;
5573         const struct nand_ecc_props *ecc_conf = nanddev_get_ecc_conf(base);
5574         int ret;
5575
5576         base->ecc.user_conf.engine_type = NAND_ECC_ENGINE_TYPE_SOFT;
5577         base->ecc.user_conf.algo = NAND_ECC_ALGO_BCH;
5578         base->ecc.user_conf.step_size = chip->ecc.size;
5579         base->ecc.user_conf.strength = chip->ecc.strength;
5580
5581         ret = nand_ecc_sw_bch_init_ctx(base);
5582         if (ret)
5583                 return ret;
5584
5585         chip->ecc.size = ecc_conf->step_size;
5586         chip->ecc.strength = ecc_conf->strength;
5587         chip->ecc.total = base->ecc.ctx.total;
5588         chip->ecc.steps = nanddev_get_ecc_nsteps(base);
5589         chip->ecc.bytes = base->ecc.ctx.total / nanddev_get_ecc_nsteps(base);
5590
5591         return 0;
5592 }
5593 EXPORT_SYMBOL(rawnand_sw_bch_init);
5594
5595 static int rawnand_sw_bch_calculate(struct nand_chip *chip,
5596                                     const unsigned char *buf,
5597                                     unsigned char *code)
5598 {
5599         struct nand_device *base = &chip->base;
5600
5601         return nand_ecc_sw_bch_calculate(base, buf, code);
5602 }
5603
5604 int rawnand_sw_bch_correct(struct nand_chip *chip, unsigned char *buf,
5605                            unsigned char *read_ecc, unsigned char *calc_ecc)
5606 {
5607         struct nand_device *base = &chip->base;
5608
5609         return nand_ecc_sw_bch_correct(base, buf, read_ecc, calc_ecc);
5610 }
5611 EXPORT_SYMBOL(rawnand_sw_bch_correct);
5612
5613 void rawnand_sw_bch_cleanup(struct nand_chip *chip)
5614 {
5615         struct nand_device *base = &chip->base;
5616
5617         nand_ecc_sw_bch_cleanup_ctx(base);
5618 }
5619 EXPORT_SYMBOL(rawnand_sw_bch_cleanup);
5620
5621 static int nand_set_ecc_on_host_ops(struct nand_chip *chip)
5622 {
5623         struct nand_ecc_ctrl *ecc = &chip->ecc;
5624
5625         switch (ecc->placement) {
5626         case NAND_ECC_PLACEMENT_UNKNOWN:
5627         case NAND_ECC_PLACEMENT_OOB:
5628                 /* Use standard hwecc read page function? */
5629                 if (!ecc->read_page)
5630                         ecc->read_page = nand_read_page_hwecc;
5631                 if (!ecc->write_page)
5632                         ecc->write_page = nand_write_page_hwecc;
5633                 if (!ecc->read_page_raw)
5634                         ecc->read_page_raw = nand_read_page_raw;
5635                 if (!ecc->write_page_raw)
5636                         ecc->write_page_raw = nand_write_page_raw;
5637                 if (!ecc->read_oob)
5638                         ecc->read_oob = nand_read_oob_std;
5639                 if (!ecc->write_oob)
5640                         ecc->write_oob = nand_write_oob_std;
5641                 if (!ecc->read_subpage)
5642                         ecc->read_subpage = nand_read_subpage;
5643                 if (!ecc->write_subpage && ecc->hwctl && ecc->calculate)
5644                         ecc->write_subpage = nand_write_subpage_hwecc;
5645                 fallthrough;
5646
5647         case NAND_ECC_PLACEMENT_INTERLEAVED:
5648                 if ((!ecc->calculate || !ecc->correct || !ecc->hwctl) &&
5649                     (!ecc->read_page ||
5650                      ecc->read_page == nand_read_page_hwecc ||
5651                      !ecc->write_page ||
5652                      ecc->write_page == nand_write_page_hwecc)) {
5653                         WARN(1, "No ECC functions supplied; hardware ECC not possible\n");
5654                         return -EINVAL;
5655                 }
5656                 /* Use standard syndrome read/write page function? */
5657                 if (!ecc->read_page)
5658                         ecc->read_page = nand_read_page_syndrome;
5659                 if (!ecc->write_page)
5660                         ecc->write_page = nand_write_page_syndrome;
5661                 if (!ecc->read_page_raw)
5662                         ecc->read_page_raw = nand_read_page_raw_syndrome;
5663                 if (!ecc->write_page_raw)
5664                         ecc->write_page_raw = nand_write_page_raw_syndrome;
5665                 if (!ecc->read_oob)
5666                         ecc->read_oob = nand_read_oob_syndrome;
5667                 if (!ecc->write_oob)
5668                         ecc->write_oob = nand_write_oob_syndrome;
5669                 break;
5670
5671         default:
5672                 pr_warn("Invalid NAND_ECC_PLACEMENT %d\n",
5673                         ecc->placement);
5674                 return -EINVAL;
5675         }
5676
5677         return 0;
5678 }
5679
5680 static int nand_set_ecc_soft_ops(struct nand_chip *chip)
5681 {
5682         struct mtd_info *mtd = nand_to_mtd(chip);
5683         struct nand_device *nanddev = mtd_to_nanddev(mtd);
5684         struct nand_ecc_ctrl *ecc = &chip->ecc;
5685         int ret;
5686
5687         if (WARN_ON(ecc->engine_type != NAND_ECC_ENGINE_TYPE_SOFT))
5688                 return -EINVAL;
5689
5690         switch (ecc->algo) {
5691         case NAND_ECC_ALGO_HAMMING:
5692                 ecc->calculate = rawnand_sw_hamming_calculate;
5693                 ecc->correct = rawnand_sw_hamming_correct;
5694                 ecc->read_page = nand_read_page_swecc;
5695                 ecc->read_subpage = nand_read_subpage;
5696                 ecc->write_page = nand_write_page_swecc;
5697                 if (!ecc->read_page_raw)
5698                         ecc->read_page_raw = nand_read_page_raw;
5699                 if (!ecc->write_page_raw)
5700                         ecc->write_page_raw = nand_write_page_raw;
5701                 ecc->read_oob = nand_read_oob_std;
5702                 ecc->write_oob = nand_write_oob_std;
5703                 if (!ecc->size)
5704                         ecc->size = 256;
5705                 ecc->bytes = 3;
5706                 ecc->strength = 1;
5707
5708                 if (IS_ENABLED(CONFIG_MTD_NAND_ECC_SW_HAMMING_SMC))
5709                         ecc->options |= NAND_ECC_SOFT_HAMMING_SM_ORDER;
5710
5711                 ret = rawnand_sw_hamming_init(chip);
5712                 if (ret) {
5713                         WARN(1, "Hamming ECC initialization failed!\n");
5714                         return ret;
5715                 }
5716
5717                 return 0;
5718         case NAND_ECC_ALGO_BCH:
5719                 if (!IS_ENABLED(CONFIG_MTD_NAND_ECC_SW_BCH)) {
5720                         WARN(1, "CONFIG_MTD_NAND_ECC_SW_BCH not enabled\n");
5721                         return -EINVAL;
5722                 }
5723                 ecc->calculate = rawnand_sw_bch_calculate;
5724                 ecc->correct = rawnand_sw_bch_correct;
5725                 ecc->read_page = nand_read_page_swecc;
5726                 ecc->read_subpage = nand_read_subpage;
5727                 ecc->write_page = nand_write_page_swecc;
5728                 if (!ecc->read_page_raw)
5729                         ecc->read_page_raw = nand_read_page_raw;
5730                 if (!ecc->write_page_raw)
5731                         ecc->write_page_raw = nand_write_page_raw;
5732                 ecc->read_oob = nand_read_oob_std;
5733                 ecc->write_oob = nand_write_oob_std;
5734
5735                 /*
5736                  * We can only maximize ECC config when the default layout is
5737                  * used, otherwise we don't know how many bytes can really be
5738                  * used.
5739                  */
5740                 if (nanddev->ecc.user_conf.flags & NAND_ECC_MAXIMIZE_STRENGTH &&
5741                     mtd->ooblayout != nand_get_large_page_ooblayout())
5742                         nanddev->ecc.user_conf.flags &= ~NAND_ECC_MAXIMIZE_STRENGTH;
5743
5744                 ret = rawnand_sw_bch_init(chip);
5745                 if (ret) {
5746                         WARN(1, "BCH ECC initialization failed!\n");
5747                         return ret;
5748                 }
5749
5750                 return 0;
5751         default:
5752                 WARN(1, "Unsupported ECC algorithm!\n");
5753                 return -EINVAL;
5754         }
5755 }
5756
5757 /**
5758  * nand_check_ecc_caps - check the sanity of preset ECC settings
5759  * @chip: nand chip info structure
5760  * @caps: ECC caps info structure
5761  * @oobavail: OOB size that the ECC engine can use
5762  *
5763  * When ECC step size and strength are already set, check if they are supported
5764  * by the controller and the calculated ECC bytes fit within the chip's OOB.
5765  * On success, the calculated ECC bytes is set.
5766  */
5767 static int
5768 nand_check_ecc_caps(struct nand_chip *chip,
5769                     const struct nand_ecc_caps *caps, int oobavail)
5770 {
5771         struct mtd_info *mtd = nand_to_mtd(chip);
5772         const struct nand_ecc_step_info *stepinfo;
5773         int preset_step = chip->ecc.size;
5774         int preset_strength = chip->ecc.strength;
5775         int ecc_bytes, nsteps = mtd->writesize / preset_step;
5776         int i, j;
5777
5778         for (i = 0; i < caps->nstepinfos; i++) {
5779                 stepinfo = &caps->stepinfos[i];
5780
5781                 if (stepinfo->stepsize != preset_step)
5782                         continue;
5783
5784                 for (j = 0; j < stepinfo->nstrengths; j++) {
5785                         if (stepinfo->strengths[j] != preset_strength)
5786                                 continue;
5787
5788                         ecc_bytes = caps->calc_ecc_bytes(preset_step,
5789                                                          preset_strength);
5790                         if (WARN_ON_ONCE(ecc_bytes < 0))
5791                                 return ecc_bytes;
5792
5793                         if (ecc_bytes * nsteps > oobavail) {
5794                                 pr_err("ECC (step, strength) = (%d, %d) does not fit in OOB",
5795                                        preset_step, preset_strength);
5796                                 return -ENOSPC;
5797                         }
5798
5799                         chip->ecc.bytes = ecc_bytes;
5800
5801                         return 0;
5802                 }
5803         }
5804
5805         pr_err("ECC (step, strength) = (%d, %d) not supported on this controller",
5806                preset_step, preset_strength);
5807
5808         return -ENOTSUPP;
5809 }
5810
5811 /**
5812  * nand_match_ecc_req - meet the chip's requirement with least ECC bytes
5813  * @chip: nand chip info structure
5814  * @caps: ECC engine caps info structure
5815  * @oobavail: OOB size that the ECC engine can use
5816  *
5817  * If a chip's ECC requirement is provided, try to meet it with the least
5818  * number of ECC bytes (i.e. with the largest number of OOB-free bytes).
5819  * On success, the chosen ECC settings are set.
5820  */
5821 static int
5822 nand_match_ecc_req(struct nand_chip *chip,
5823                    const struct nand_ecc_caps *caps, int oobavail)
5824 {
5825         const struct nand_ecc_props *requirements =
5826                 nanddev_get_ecc_requirements(&chip->base);
5827         struct mtd_info *mtd = nand_to_mtd(chip);
5828         const struct nand_ecc_step_info *stepinfo;
5829         int req_step = requirements->step_size;
5830         int req_strength = requirements->strength;
5831         int req_corr, step_size, strength, nsteps, ecc_bytes, ecc_bytes_total;
5832         int best_step, best_strength, best_ecc_bytes;
5833         int best_ecc_bytes_total = INT_MAX;
5834         int i, j;
5835
5836         /* No information provided by the NAND chip */
5837         if (!req_step || !req_strength)
5838                 return -ENOTSUPP;
5839
5840         /* number of correctable bits the chip requires in a page */
5841         req_corr = mtd->writesize / req_step * req_strength;
5842
5843         for (i = 0; i < caps->nstepinfos; i++) {
5844                 stepinfo = &caps->stepinfos[i];
5845                 step_size = stepinfo->stepsize;
5846
5847                 for (j = 0; j < stepinfo->nstrengths; j++) {
5848                         strength = stepinfo->strengths[j];
5849
5850                         /*
5851                          * If both step size and strength are smaller than the
5852                          * chip's requirement, it is not easy to compare the
5853                          * resulted reliability.
5854                          */
5855                         if (step_size < req_step && strength < req_strength)
5856                                 continue;
5857
5858                         if (mtd->writesize % step_size)
5859                                 continue;
5860
5861                         nsteps = mtd->writesize / step_size;
5862
5863                         ecc_bytes = caps->calc_ecc_bytes(step_size, strength);
5864                         if (WARN_ON_ONCE(ecc_bytes < 0))
5865                                 continue;
5866                         ecc_bytes_total = ecc_bytes * nsteps;
5867
5868                         if (ecc_bytes_total > oobavail ||
5869                             strength * nsteps < req_corr)
5870                                 continue;
5871
5872                         /*
5873                          * We assume the best is to meet the chip's requrement
5874                          * with the least number of ECC bytes.
5875                          */
5876                         if (ecc_bytes_total < best_ecc_bytes_total) {
5877                                 best_ecc_bytes_total = ecc_bytes_total;
5878                                 best_step = step_size;
5879                                 best_strength = strength;
5880                                 best_ecc_bytes = ecc_bytes;
5881                         }
5882                 }
5883         }
5884
5885         if (best_ecc_bytes_total == INT_MAX)
5886                 return -ENOTSUPP;
5887
5888         chip->ecc.size = best_step;
5889         chip->ecc.strength = best_strength;
5890         chip->ecc.bytes = best_ecc_bytes;
5891
5892         return 0;
5893 }
5894
5895 /**
5896  * nand_maximize_ecc - choose the max ECC strength available
5897  * @chip: nand chip info structure
5898  * @caps: ECC engine caps info structure
5899  * @oobavail: OOB size that the ECC engine can use
5900  *
5901  * Choose the max ECC strength that is supported on the controller, and can fit
5902  * within the chip's OOB.  On success, the chosen ECC settings are set.
5903  */
5904 static int
5905 nand_maximize_ecc(struct nand_chip *chip,
5906                   const struct nand_ecc_caps *caps, int oobavail)
5907 {
5908         struct mtd_info *mtd = nand_to_mtd(chip);
5909         const struct nand_ecc_step_info *stepinfo;
5910         int step_size, strength, nsteps, ecc_bytes, corr;
5911         int best_corr = 0;
5912         int best_step = 0;
5913         int best_strength, best_ecc_bytes;
5914         int i, j;
5915
5916         for (i = 0; i < caps->nstepinfos; i++) {
5917                 stepinfo = &caps->stepinfos[i];
5918                 step_size = stepinfo->stepsize;
5919
5920                 /* If chip->ecc.size is already set, respect it */
5921                 if (chip->ecc.size && step_size != chip->ecc.size)
5922                         continue;
5923
5924                 for (j = 0; j < stepinfo->nstrengths; j++) {
5925                         strength = stepinfo->strengths[j];
5926
5927                         if (mtd->writesize % step_size)
5928                                 continue;
5929
5930                         nsteps = mtd->writesize / step_size;
5931
5932                         ecc_bytes = caps->calc_ecc_bytes(step_size, strength);
5933                         if (WARN_ON_ONCE(ecc_bytes < 0))
5934                                 continue;
5935
5936                         if (ecc_bytes * nsteps > oobavail)
5937                                 continue;
5938
5939                         corr = strength * nsteps;
5940
5941                         /*
5942                          * If the number of correctable bits is the same,
5943                          * bigger step_size has more reliability.
5944                          */
5945                         if (corr > best_corr ||
5946                             (corr == best_corr && step_size > best_step)) {
5947                                 best_corr = corr;
5948                                 best_step = step_size;
5949                                 best_strength = strength;
5950                                 best_ecc_bytes = ecc_bytes;
5951                         }
5952                 }
5953         }
5954
5955         if (!best_corr)
5956                 return -ENOTSUPP;
5957
5958         chip->ecc.size = best_step;
5959         chip->ecc.strength = best_strength;
5960         chip->ecc.bytes = best_ecc_bytes;
5961
5962         return 0;
5963 }
5964
5965 /**
5966  * nand_ecc_choose_conf - Set the ECC strength and ECC step size
5967  * @chip: nand chip info structure
5968  * @caps: ECC engine caps info structure
5969  * @oobavail: OOB size that the ECC engine can use
5970  *
5971  * Choose the ECC configuration according to following logic.
5972  *
5973  * 1. If both ECC step size and ECC strength are already set (usually by DT)
5974  *    then check if it is supported by this controller.
5975  * 2. If the user provided the nand-ecc-maximize property, then select maximum
5976  *    ECC strength.
5977  * 3. Otherwise, try to match the ECC step size and ECC strength closest
5978  *    to the chip's requirement. If available OOB size can't fit the chip
5979  *    requirement then fallback to the maximum ECC step size and ECC strength.
5980  *
5981  * On success, the chosen ECC settings are set.
5982  */
5983 int nand_ecc_choose_conf(struct nand_chip *chip,
5984                          const struct nand_ecc_caps *caps, int oobavail)
5985 {
5986         struct mtd_info *mtd = nand_to_mtd(chip);
5987         struct nand_device *nanddev = mtd_to_nanddev(mtd);
5988
5989         if (WARN_ON(oobavail < 0 || oobavail > mtd->oobsize))
5990                 return -EINVAL;
5991
5992         if (chip->ecc.size && chip->ecc.strength)
5993                 return nand_check_ecc_caps(chip, caps, oobavail);
5994
5995         if (nanddev->ecc.user_conf.flags & NAND_ECC_MAXIMIZE_STRENGTH)
5996                 return nand_maximize_ecc(chip, caps, oobavail);
5997
5998         if (!nand_match_ecc_req(chip, caps, oobavail))
5999                 return 0;
6000
6001         return nand_maximize_ecc(chip, caps, oobavail);
6002 }
6003 EXPORT_SYMBOL_GPL(nand_ecc_choose_conf);
6004
6005 static int rawnand_erase(struct nand_device *nand, const struct nand_pos *pos)
6006 {
6007         struct nand_chip *chip = container_of(nand, struct nand_chip,
6008                                               base);
6009         unsigned int eb = nanddev_pos_to_row(nand, pos);
6010         int ret;
6011
6012         eb >>= nand->rowconv.eraseblock_addr_shift;
6013
6014         nand_select_target(chip, pos->target);
6015         ret = nand_erase_op(chip, eb);
6016         nand_deselect_target(chip);
6017
6018         return ret;
6019 }
6020
6021 static int rawnand_markbad(struct nand_device *nand,
6022                            const struct nand_pos *pos)
6023 {
6024         struct nand_chip *chip = container_of(nand, struct nand_chip,
6025                                               base);
6026
6027         return nand_markbad_bbm(chip, nanddev_pos_to_offs(nand, pos));
6028 }
6029
6030 static bool rawnand_isbad(struct nand_device *nand, const struct nand_pos *pos)
6031 {
6032         struct nand_chip *chip = container_of(nand, struct nand_chip,
6033                                               base);
6034         int ret;
6035
6036         nand_select_target(chip, pos->target);
6037         ret = nand_isbad_bbm(chip, nanddev_pos_to_offs(nand, pos));
6038         nand_deselect_target(chip);
6039
6040         return ret;
6041 }
6042
6043 static const struct nand_ops rawnand_ops = {
6044         .erase = rawnand_erase,
6045         .markbad = rawnand_markbad,
6046         .isbad = rawnand_isbad,
6047 };
6048
6049 /**
6050  * nand_scan_tail - Scan for the NAND device
6051  * @chip: NAND chip object
6052  *
6053  * This is the second phase of the normal nand_scan() function. It fills out
6054  * all the uninitialized function pointers with the defaults and scans for a
6055  * bad block table if appropriate.
6056  */
6057 static int nand_scan_tail(struct nand_chip *chip)
6058 {
6059         struct mtd_info *mtd = nand_to_mtd(chip);
6060         struct nand_ecc_ctrl *ecc = &chip->ecc;
6061         int ret, i;
6062
6063         /* New bad blocks should be marked in OOB, flash-based BBT, or both */
6064         if (WARN_ON((chip->bbt_options & NAND_BBT_NO_OOB_BBM) &&
6065                    !(chip->bbt_options & NAND_BBT_USE_FLASH))) {
6066                 return -EINVAL;
6067         }
6068
6069         chip->data_buf = kmalloc(mtd->writesize + mtd->oobsize, GFP_KERNEL);
6070         if (!chip->data_buf)
6071                 return -ENOMEM;
6072
6073         /*
6074          * FIXME: some NAND manufacturer drivers expect the first die to be
6075          * selected when manufacturer->init() is called. They should be fixed
6076          * to explictly select the relevant die when interacting with the NAND
6077          * chip.
6078          */
6079         nand_select_target(chip, 0);
6080         ret = nand_manufacturer_init(chip);
6081         nand_deselect_target(chip);
6082         if (ret)
6083                 goto err_free_buf;
6084
6085         /* Set the internal oob buffer location, just after the page data */
6086         chip->oob_poi = chip->data_buf + mtd->writesize;
6087
6088         /*
6089          * If no default placement scheme is given, select an appropriate one.
6090          */
6091         if (!mtd->ooblayout &&
6092             !(ecc->engine_type == NAND_ECC_ENGINE_TYPE_SOFT &&
6093               ecc->algo == NAND_ECC_ALGO_BCH) &&
6094             !(ecc->engine_type == NAND_ECC_ENGINE_TYPE_SOFT &&
6095               ecc->algo == NAND_ECC_ALGO_HAMMING)) {
6096                 switch (mtd->oobsize) {
6097                 case 8:
6098                 case 16:
6099                         mtd_set_ooblayout(mtd, nand_get_small_page_ooblayout());
6100                         break;
6101                 case 64:
6102                 case 128:
6103                         mtd_set_ooblayout(mtd,
6104                                           nand_get_large_page_hamming_ooblayout());
6105                         break;
6106                 default:
6107                         /*
6108                          * Expose the whole OOB area to users if ECC_NONE
6109                          * is passed. We could do that for all kind of
6110                          * ->oobsize, but we must keep the old large/small
6111                          * page with ECC layout when ->oobsize <= 128 for
6112                          * compatibility reasons.
6113                          */
6114                         if (ecc->engine_type == NAND_ECC_ENGINE_TYPE_NONE) {
6115                                 mtd_set_ooblayout(mtd,
6116                                                   nand_get_large_page_ooblayout());
6117                                 break;
6118                         }
6119
6120                         WARN(1, "No oob scheme defined for oobsize %d\n",
6121                                 mtd->oobsize);
6122                         ret = -EINVAL;
6123                         goto err_nand_manuf_cleanup;
6124                 }
6125         }
6126
6127         /*
6128          * Check ECC mode, default to software if 3byte/512byte hardware ECC is
6129          * selected and we have 256 byte pagesize fallback to software ECC
6130          */
6131
6132         switch (ecc->engine_type) {
6133         case NAND_ECC_ENGINE_TYPE_ON_HOST:
6134                 ret = nand_set_ecc_on_host_ops(chip);
6135                 if (ret)
6136                         goto err_nand_manuf_cleanup;
6137
6138                 if (mtd->writesize >= ecc->size) {
6139                         if (!ecc->strength) {
6140                                 WARN(1, "Driver must set ecc.strength when using hardware ECC\n");
6141                                 ret = -EINVAL;
6142                                 goto err_nand_manuf_cleanup;
6143                         }
6144                         break;
6145                 }
6146                 pr_warn("%d byte HW ECC not possible on %d byte page size, fallback to SW ECC\n",
6147                         ecc->size, mtd->writesize);
6148                 ecc->engine_type = NAND_ECC_ENGINE_TYPE_SOFT;
6149                 ecc->algo = NAND_ECC_ALGO_HAMMING;
6150                 fallthrough;
6151
6152         case NAND_ECC_ENGINE_TYPE_SOFT:
6153                 ret = nand_set_ecc_soft_ops(chip);
6154                 if (ret)
6155                         goto err_nand_manuf_cleanup;
6156                 break;
6157
6158         case NAND_ECC_ENGINE_TYPE_ON_DIE:
6159                 if (!ecc->read_page || !ecc->write_page) {
6160                         WARN(1, "No ECC functions supplied; on-die ECC not possible\n");
6161                         ret = -EINVAL;
6162                         goto err_nand_manuf_cleanup;
6163                 }
6164                 if (!ecc->read_oob)
6165                         ecc->read_oob = nand_read_oob_std;
6166                 if (!ecc->write_oob)
6167                         ecc->write_oob = nand_write_oob_std;
6168                 break;
6169
6170         case NAND_ECC_ENGINE_TYPE_NONE:
6171                 pr_warn("NAND_ECC_ENGINE_TYPE_NONE selected by board driver. This is not recommended!\n");
6172                 ecc->read_page = nand_read_page_raw;
6173                 ecc->write_page = nand_write_page_raw;
6174                 ecc->read_oob = nand_read_oob_std;
6175                 ecc->read_page_raw = nand_read_page_raw;
6176                 ecc->write_page_raw = nand_write_page_raw;
6177                 ecc->write_oob = nand_write_oob_std;
6178                 ecc->size = mtd->writesize;
6179                 ecc->bytes = 0;
6180                 ecc->strength = 0;
6181                 break;
6182
6183         default:
6184                 WARN(1, "Invalid NAND_ECC_MODE %d\n", ecc->engine_type);
6185                 ret = -EINVAL;
6186                 goto err_nand_manuf_cleanup;
6187         }
6188
6189         if (ecc->correct || ecc->calculate) {
6190                 ecc->calc_buf = kmalloc(mtd->oobsize, GFP_KERNEL);
6191                 ecc->code_buf = kmalloc(mtd->oobsize, GFP_KERNEL);
6192                 if (!ecc->calc_buf || !ecc->code_buf) {
6193                         ret = -ENOMEM;
6194                         goto err_nand_manuf_cleanup;
6195                 }
6196         }
6197
6198         /* For many systems, the standard OOB write also works for raw */
6199         if (!ecc->read_oob_raw)
6200                 ecc->read_oob_raw = ecc->read_oob;
6201         if (!ecc->write_oob_raw)
6202                 ecc->write_oob_raw = ecc->write_oob;
6203
6204         /* propagate ecc info to mtd_info */
6205         mtd->ecc_strength = ecc->strength;
6206         mtd->ecc_step_size = ecc->size;
6207
6208         /*
6209          * Set the number of read / write steps for one page depending on ECC
6210          * mode.
6211          */
6212         if (!ecc->steps)
6213                 ecc->steps = mtd->writesize / ecc->size;
6214         if (ecc->steps * ecc->size != mtd->writesize) {
6215                 WARN(1, "Invalid ECC parameters\n");
6216                 ret = -EINVAL;
6217                 goto err_nand_manuf_cleanup;
6218         }
6219
6220         if (!ecc->total) {
6221                 ecc->total = ecc->steps * ecc->bytes;
6222                 chip->base.ecc.ctx.total = ecc->total;
6223         }
6224
6225         if (ecc->total > mtd->oobsize) {
6226                 WARN(1, "Total number of ECC bytes exceeded oobsize\n");
6227                 ret = -EINVAL;
6228                 goto err_nand_manuf_cleanup;
6229         }
6230
6231         /*
6232          * The number of bytes available for a client to place data into
6233          * the out of band area.
6234          */
6235         ret = mtd_ooblayout_count_freebytes(mtd);
6236         if (ret < 0)
6237                 ret = 0;
6238
6239         mtd->oobavail = ret;
6240
6241         /* ECC sanity check: warn if it's too weak */
6242         if (!nand_ecc_is_strong_enough(&chip->base))
6243                 pr_warn("WARNING: %s: the ECC used on your system (%db/%dB) is too weak compared to the one required by the NAND chip (%db/%dB)\n",
6244                         mtd->name, chip->ecc.strength, chip->ecc.size,
6245                         nanddev_get_ecc_requirements(&chip->base)->strength,
6246                         nanddev_get_ecc_requirements(&chip->base)->step_size);
6247
6248         /* Allow subpage writes up to ecc.steps. Not possible for MLC flash */
6249         if (!(chip->options & NAND_NO_SUBPAGE_WRITE) && nand_is_slc(chip)) {
6250                 switch (ecc->steps) {
6251                 case 2:
6252                         mtd->subpage_sft = 1;
6253                         break;
6254                 case 4:
6255                 case 8:
6256                 case 16:
6257                         mtd->subpage_sft = 2;
6258                         break;
6259                 }
6260         }
6261         chip->subpagesize = mtd->writesize >> mtd->subpage_sft;
6262
6263         /* Invalidate the pagebuffer reference */
6264         chip->pagecache.page = -1;
6265
6266         /* Large page NAND with SOFT_ECC should support subpage reads */
6267         switch (ecc->engine_type) {
6268         case NAND_ECC_ENGINE_TYPE_SOFT:
6269                 if (chip->page_shift > 9)
6270                         chip->options |= NAND_SUBPAGE_READ;
6271                 break;
6272
6273         default:
6274                 break;
6275         }
6276
6277         ret = nanddev_init(&chip->base, &rawnand_ops, mtd->owner);
6278         if (ret)
6279                 goto err_nand_manuf_cleanup;
6280
6281         /* Adjust the MTD_CAP_ flags when NAND_ROM is set. */
6282         if (chip->options & NAND_ROM)
6283                 mtd->flags = MTD_CAP_ROM;
6284
6285         /* Fill in remaining MTD driver data */
6286         mtd->_erase = nand_erase;
6287         mtd->_point = NULL;
6288         mtd->_unpoint = NULL;
6289         mtd->_panic_write = panic_nand_write;
6290         mtd->_read_oob = nand_read_oob;
6291         mtd->_write_oob = nand_write_oob;
6292         mtd->_sync = nand_sync;
6293         mtd->_lock = nand_lock;
6294         mtd->_unlock = nand_unlock;
6295         mtd->_suspend = nand_suspend;
6296         mtd->_resume = nand_resume;
6297         mtd->_reboot = nand_shutdown;
6298         mtd->_block_isreserved = nand_block_isreserved;
6299         mtd->_block_isbad = nand_block_isbad;
6300         mtd->_block_markbad = nand_block_markbad;
6301         mtd->_max_bad_blocks = nanddev_mtd_max_bad_blocks;
6302
6303         /*
6304          * Initialize bitflip_threshold to its default prior scan_bbt() call.
6305          * scan_bbt() might invoke mtd_read(), thus bitflip_threshold must be
6306          * properly set.
6307          */
6308         if (!mtd->bitflip_threshold)
6309                 mtd->bitflip_threshold = DIV_ROUND_UP(mtd->ecc_strength * 3, 4);
6310
6311         /* Find the fastest data interface for this chip */
6312         ret = nand_choose_interface_config(chip);
6313         if (ret)
6314                 goto err_nanddev_cleanup;
6315
6316         /* Enter fastest possible mode on all dies. */
6317         for (i = 0; i < nanddev_ntargets(&chip->base); i++) {
6318                 ret = nand_setup_interface(chip, i);
6319                 if (ret)
6320                         goto err_free_interface_config;
6321         }
6322
6323         /*
6324          * Look for secure regions in the NAND chip. These regions are supposed
6325          * to be protected by a secure element like Trustzone. So the read/write
6326          * accesses to these regions will be blocked in the runtime by this
6327          * driver.
6328          */
6329         ret = of_get_nand_secure_regions(chip);
6330         if (ret)
6331                 goto err_free_interface_config;
6332
6333         /* Check, if we should skip the bad block table scan */
6334         if (chip->options & NAND_SKIP_BBTSCAN)
6335                 return 0;
6336
6337         /* Build bad block table */
6338         ret = nand_create_bbt(chip);
6339         if (ret)
6340                 goto err_free_secure_regions;
6341
6342         return 0;
6343
6344 err_free_secure_regions:
6345         kfree(chip->secure_regions);
6346
6347 err_free_interface_config:
6348         kfree(chip->best_interface_config);
6349
6350 err_nanddev_cleanup:
6351         nanddev_cleanup(&chip->base);
6352
6353 err_nand_manuf_cleanup:
6354         nand_manufacturer_cleanup(chip);
6355
6356 err_free_buf:
6357         kfree(chip->data_buf);
6358         kfree(ecc->code_buf);
6359         kfree(ecc->calc_buf);
6360
6361         return ret;
6362 }
6363
6364 static int nand_attach(struct nand_chip *chip)
6365 {
6366         if (chip->controller->ops && chip->controller->ops->attach_chip)
6367                 return chip->controller->ops->attach_chip(chip);
6368
6369         return 0;
6370 }
6371
6372 static void nand_detach(struct nand_chip *chip)
6373 {
6374         if (chip->controller->ops && chip->controller->ops->detach_chip)
6375                 chip->controller->ops->detach_chip(chip);
6376 }
6377
6378 /**
6379  * nand_scan_with_ids - [NAND Interface] Scan for the NAND device
6380  * @chip: NAND chip object
6381  * @maxchips: number of chips to scan for.
6382  * @ids: optional flash IDs table
6383  *
6384  * This fills out all the uninitialized function pointers with the defaults.
6385  * The flash ID is read and the mtd/chip structures are filled with the
6386  * appropriate values.
6387  */
6388 int nand_scan_with_ids(struct nand_chip *chip, unsigned int maxchips,
6389                        struct nand_flash_dev *ids)
6390 {
6391         int ret;
6392
6393         if (!maxchips)
6394                 return -EINVAL;
6395
6396         ret = nand_scan_ident(chip, maxchips, ids);
6397         if (ret)
6398                 return ret;
6399
6400         ret = nand_attach(chip);
6401         if (ret)
6402                 goto cleanup_ident;
6403
6404         ret = nand_scan_tail(chip);
6405         if (ret)
6406                 goto detach_chip;
6407
6408         return 0;
6409
6410 detach_chip:
6411         nand_detach(chip);
6412 cleanup_ident:
6413         nand_scan_ident_cleanup(chip);
6414
6415         return ret;
6416 }
6417 EXPORT_SYMBOL(nand_scan_with_ids);
6418
6419 /**
6420  * nand_cleanup - [NAND Interface] Free resources held by the NAND device
6421  * @chip: NAND chip object
6422  */
6423 void nand_cleanup(struct nand_chip *chip)
6424 {
6425         if (chip->ecc.engine_type == NAND_ECC_ENGINE_TYPE_SOFT) {
6426                 if (chip->ecc.algo == NAND_ECC_ALGO_HAMMING)
6427                         rawnand_sw_hamming_cleanup(chip);
6428                 else if (chip->ecc.algo == NAND_ECC_ALGO_BCH)
6429                         rawnand_sw_bch_cleanup(chip);
6430         }
6431
6432         nanddev_cleanup(&chip->base);
6433
6434         /* Free secure regions data */
6435         kfree(chip->secure_regions);
6436
6437         /* Free bad block table memory */
6438         kfree(chip->bbt);
6439         kfree(chip->data_buf);
6440         kfree(chip->ecc.code_buf);
6441         kfree(chip->ecc.calc_buf);
6442
6443         /* Free bad block descriptor memory */
6444         if (chip->badblock_pattern && chip->badblock_pattern->options
6445                         & NAND_BBT_DYNAMICSTRUCT)
6446                 kfree(chip->badblock_pattern);
6447
6448         /* Free the data interface */
6449         kfree(chip->best_interface_config);
6450
6451         /* Free manufacturer priv data. */
6452         nand_manufacturer_cleanup(chip);
6453
6454         /* Free controller specific allocations after chip identification */
6455         nand_detach(chip);
6456
6457         /* Free identification phase allocations */
6458         nand_scan_ident_cleanup(chip);
6459 }
6460
6461 EXPORT_SYMBOL_GPL(nand_cleanup);
6462
6463 MODULE_LICENSE("GPL");
6464 MODULE_AUTHOR("Steven J. Hill <sjhill@realitydiluted.com>");
6465 MODULE_AUTHOR("Thomas Gleixner <tglx@linutronix.de>");
6466 MODULE_DESCRIPTION("Generic NAND flash driver code");