Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
nand_bbt.c
Go to the documentation of this file.
1 /*
2  * drivers/mtd/nand_bbt.c
3  *
4  * Overview:
5  * Bad block table support for the NAND driver
6  *
7  * Copyright © 2004 Thomas Gleixner ([email protected])
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License version 2 as
11  * published by the Free Software Foundation.
12  *
13  * Description:
14  *
15  * When nand_scan_bbt is called, then it tries to find the bad block table
16  * depending on the options in the BBT descriptor(s). If no flash based BBT
17  * (NAND_BBT_USE_FLASH) is specified then the device is scanned for factory
18  * marked good / bad blocks. This information is used to create a memory BBT.
19  * Once a new bad block is discovered then the "factory" information is updated
20  * on the device.
21  * If a flash based BBT is specified then the function first tries to find the
22  * BBT on flash. If a BBT is found then the contents are read and the memory
23  * based BBT is created. If a mirrored BBT is selected then the mirror is
24  * searched too and the versions are compared. If the mirror has a greater
25  * version number, then the mirror BBT is used to build the memory based BBT.
26  * If the tables are not versioned, then we "or" the bad block information.
27  * If one of the BBTs is out of date or does not exist it is (re)created.
28  * If no BBT exists at all then the device is scanned for factory marked
29  * good / bad blocks and the bad block tables are created.
30  *
31  * For manufacturer created BBTs like the one found on M-SYS DOC devices
32  * the BBT is searched and read but never created
33  *
34  * The auto generated bad block table is located in the last good blocks
35  * of the device. The table is mirrored, so it can be updated eventually.
36  * The table is marked in the OOB area with an ident pattern and a version
37  * number which indicates which of both tables is more up to date. If the NAND
38  * controller needs the complete OOB area for the ECC information then the
39  * option NAND_BBT_NO_OOB should be used (along with NAND_BBT_USE_FLASH, of
40  * course): it moves the ident pattern and the version byte into the data area
41  * and the OOB area will remain untouched.
42  *
43  * The table uses 2 bits per block
44  * 11b: block is good
45  * 00b: block is factory marked bad
46  * 01b, 10b: block is marked bad due to wear
47  *
48  * The memory bad block table uses the following scheme:
49  * 00b: block is good
50  * 01b: block is marked bad due to wear
51  * 10b: block is reserved (to protect the bbt area)
52  * 11b: block is factory marked bad
53  *
54  * Multichip devices like DOC store the bad block info per floor.
55  *
56  * Following assumptions are made:
57  * - bbts start at a page boundary, if autolocated on a block boundary
58  * - the space necessary for a bbt in FLASH does not exceed a block boundary
59  *
60  */
61 
62 #include <linux/slab.h>
63 #include <linux/types.h>
64 #include <linux/mtd/mtd.h>
65 #include <linux/mtd/bbm.h>
66 #include <linux/mtd/nand.h>
67 #include <linux/mtd/nand_ecc.h>
68 #include <linux/bitops.h>
69 #include <linux/delay.h>
70 #include <linux/vmalloc.h>
71 #include <linux/export.h>
72 #include <linux/string.h>
73 
74 static int check_pattern_no_oob(uint8_t *buf, struct nand_bbt_descr *td)
75 {
76  if (memcmp(buf, td->pattern, td->len))
77  return -1;
78  return 0;
79 }
80 
92 static int check_pattern(uint8_t *buf, int len, int paglen, struct nand_bbt_descr *td)
93 {
94  int end = 0;
95  uint8_t *p = buf;
96 
97  if (td->options & NAND_BBT_NO_OOB)
98  return check_pattern_no_oob(buf, td);
99 
100  end = paglen + td->offs;
101  if (td->options & NAND_BBT_SCANEMPTY)
102  if (memchr_inv(p, 0xff, end))
103  return -1;
104  p += end;
105 
106  /* Compare the pattern */
107  if (memcmp(p, td->pattern, td->len))
108  return -1;
109 
110  if (td->options & NAND_BBT_SCANEMPTY) {
111  p += td->len;
112  end += td->len;
113  if (memchr_inv(p, 0xff, len - end))
114  return -1;
115  }
116  return 0;
117 }
118 
128 static int check_short_pattern(uint8_t *buf, struct nand_bbt_descr *td)
129 {
130  /* Compare the pattern */
131  if (memcmp(buf + td->offs, td->pattern, td->len))
132  return -1;
133  return 0;
134 }
135 
142 static u32 add_marker_len(struct nand_bbt_descr *td)
143 {
144  u32 len;
145 
146  if (!(td->options & NAND_BBT_NO_OOB))
147  return 0;
148 
149  len = td->len;
150  if (td->options & NAND_BBT_VERSION)
151  len++;
152  return len;
153 }
154 
166 static int read_bbt(struct mtd_info *mtd, uint8_t *buf, int page, int num,
167  struct nand_bbt_descr *td, int offs)
168 {
169  int res, ret = 0, i, j, act = 0;
170  struct nand_chip *this = mtd->priv;
171  size_t retlen, len, totlen;
172  loff_t from;
173  int bits = td->options & NAND_BBT_NRBITS_MSK;
174  uint8_t msk = (uint8_t)((1 << bits) - 1);
175  u32 marker_len;
176  int reserved_block_code = td->reserved_block_code;
177 
178  totlen = (num * bits) >> 3;
179  marker_len = add_marker_len(td);
180  from = ((loff_t)page) << this->page_shift;
181 
182  while (totlen) {
183  len = min(totlen, (size_t)(1 << this->bbt_erase_shift));
184  if (marker_len) {
185  /*
186  * In case the BBT marker is not in the OOB area it
187  * will be just in the first page.
188  */
189  len -= marker_len;
190  from += marker_len;
191  marker_len = 0;
192  }
193  res = mtd_read(mtd, from, len, &retlen, buf);
194  if (res < 0) {
195  if (mtd_is_eccerr(res)) {
196  pr_info("nand_bbt: ECC error in BBT at "
197  "0x%012llx\n", from & ~mtd->writesize);
198  return res;
199  } else if (mtd_is_bitflip(res)) {
200  pr_info("nand_bbt: corrected error in BBT at "
201  "0x%012llx\n", from & ~mtd->writesize);
202  ret = res;
203  } else {
204  pr_info("nand_bbt: error reading BBT\n");
205  return res;
206  }
207  }
208 
209  /* Analyse data */
210  for (i = 0; i < len; i++) {
211  uint8_t dat = buf[i];
212  for (j = 0; j < 8; j += bits, act += 2) {
213  uint8_t tmp = (dat >> j) & msk;
214  if (tmp == msk)
215  continue;
216  if (reserved_block_code && (tmp == reserved_block_code)) {
217  pr_info("nand_read_bbt: reserved block at 0x%012llx\n",
218  (loff_t)((offs << 2) + (act >> 1)) << this->bbt_erase_shift);
219  this->bbt[offs + (act >> 3)] |= 0x2 << (act & 0x06);
220  mtd->ecc_stats.bbtblocks++;
221  continue;
222  }
223  /*
224  * Leave it for now, if it's matured we can
225  * move this message to pr_debug.
226  */
227  pr_info("nand_read_bbt: bad block at 0x%012llx\n",
228  (loff_t)((offs << 2) + (act >> 1)) << this->bbt_erase_shift);
229  /* Factory marked bad or worn out? */
230  if (tmp == 0)
231  this->bbt[offs + (act >> 3)] |= 0x3 << (act & 0x06);
232  else
233  this->bbt[offs + (act >> 3)] |= 0x1 << (act & 0x06);
234  mtd->ecc_stats.badblocks++;
235  }
236  }
237  totlen -= len;
238  from += len;
239  }
240  return ret;
241 }
242 
254 static int read_abs_bbt(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_descr *td, int chip)
255 {
256  struct nand_chip *this = mtd->priv;
257  int res = 0, i;
258 
259  if (td->options & NAND_BBT_PERCHIP) {
260  int offs = 0;
261  for (i = 0; i < this->numchips; i++) {
262  if (chip == -1 || chip == i)
263  res = read_bbt(mtd, buf, td->pages[i],
264  this->chipsize >> this->bbt_erase_shift,
265  td, offs);
266  if (res)
267  return res;
268  offs += this->chipsize >> (this->bbt_erase_shift + 2);
269  }
270  } else {
271  res = read_bbt(mtd, buf, td->pages[0],
272  mtd->size >> this->bbt_erase_shift, td, 0);
273  if (res)
274  return res;
275  }
276  return 0;
277 }
278 
279 /* BBT marker is in the first page, no OOB */
280 static int scan_read_data(struct mtd_info *mtd, uint8_t *buf, loff_t offs,
281  struct nand_bbt_descr *td)
282 {
283  size_t retlen;
284  size_t len;
285 
286  len = td->len;
287  if (td->options & NAND_BBT_VERSION)
288  len++;
289 
290  return mtd_read(mtd, offs, len, &retlen, buf);
291 }
292 
304 static int scan_read_oob(struct mtd_info *mtd, uint8_t *buf, loff_t offs,
305  size_t len)
306 {
307  struct mtd_oob_ops ops;
308  int res, ret = 0;
309 
310  ops.mode = MTD_OPS_PLACE_OOB;
311  ops.ooboffs = 0;
312  ops.ooblen = mtd->oobsize;
313 
314  while (len > 0) {
315  ops.datbuf = buf;
316  ops.len = min(len, (size_t)mtd->writesize);
317  ops.oobbuf = buf + ops.len;
318 
319  res = mtd_read_oob(mtd, offs, &ops);
320  if (res) {
321  if (!mtd_is_bitflip_or_eccerr(res))
322  return res;
323  else if (mtd_is_eccerr(res) || !ret)
324  ret = res;
325  }
326 
327  buf += mtd->oobsize + mtd->writesize;
328  len -= mtd->writesize;
329  offs += mtd->writesize;
330  }
331  return ret;
332 }
333 
334 static int scan_read(struct mtd_info *mtd, uint8_t *buf, loff_t offs,
335  size_t len, struct nand_bbt_descr *td)
336 {
337  if (td->options & NAND_BBT_NO_OOB)
338  return scan_read_data(mtd, buf, offs, td);
339  else
340  return scan_read_oob(mtd, buf, offs, len);
341 }
342 
343 /* Scan write data with oob to flash */
344 static int scan_write_bbt(struct mtd_info *mtd, loff_t offs, size_t len,
345  uint8_t *buf, uint8_t *oob)
346 {
347  struct mtd_oob_ops ops;
348 
349  ops.mode = MTD_OPS_PLACE_OOB;
350  ops.ooboffs = 0;
351  ops.ooblen = mtd->oobsize;
352  ops.datbuf = buf;
353  ops.oobbuf = oob;
354  ops.len = len;
355 
356  return mtd_write_oob(mtd, offs, &ops);
357 }
358 
359 static u32 bbt_get_ver_offs(struct mtd_info *mtd, struct nand_bbt_descr *td)
360 {
361  u32 ver_offs = td->veroffs;
362 
363  if (!(td->options & NAND_BBT_NO_OOB))
364  ver_offs += mtd->writesize;
365  return ver_offs;
366 }
367 
378 static void read_abs_bbts(struct mtd_info *mtd, uint8_t *buf,
379  struct nand_bbt_descr *td, struct nand_bbt_descr *md)
380 {
381  struct nand_chip *this = mtd->priv;
382 
383  /* Read the primary version, if available */
384  if (td->options & NAND_BBT_VERSION) {
385  scan_read(mtd, buf, (loff_t)td->pages[0] << this->page_shift,
386  mtd->writesize, td);
387  td->version[0] = buf[bbt_get_ver_offs(mtd, td)];
388  pr_info("Bad block table at page %d, version 0x%02X\n",
389  td->pages[0], td->version[0]);
390  }
391 
392  /* Read the mirror version, if available */
393  if (md && (md->options & NAND_BBT_VERSION)) {
394  scan_read(mtd, buf, (loff_t)md->pages[0] << this->page_shift,
395  mtd->writesize, md);
396  md->version[0] = buf[bbt_get_ver_offs(mtd, md)];
397  pr_info("Bad block table at page %d, version 0x%02X\n",
398  md->pages[0], md->version[0]);
399  }
400 }
401 
402 /* Scan a given block full */
403 static int scan_block_full(struct mtd_info *mtd, struct nand_bbt_descr *bd,
404  loff_t offs, uint8_t *buf, size_t readlen,
405  int scanlen, int numpages)
406 {
407  int ret, j;
408 
409  ret = scan_read_oob(mtd, buf, offs, readlen);
410  /* Ignore ECC errors when checking for BBM */
411  if (ret && !mtd_is_bitflip_or_eccerr(ret))
412  return ret;
413 
414  for (j = 0; j < numpages; j++, buf += scanlen) {
415  if (check_pattern(buf, scanlen, mtd->writesize, bd))
416  return 1;
417  }
418  return 0;
419 }
420 
421 /* Scan a given block partially */
422 static int scan_block_fast(struct mtd_info *mtd, struct nand_bbt_descr *bd,
423  loff_t offs, uint8_t *buf, int numpages)
424 {
425  struct mtd_oob_ops ops;
426  int j, ret;
427 
428  ops.ooblen = mtd->oobsize;
429  ops.oobbuf = buf;
430  ops.ooboffs = 0;
431  ops.datbuf = NULL;
432  ops.mode = MTD_OPS_PLACE_OOB;
433 
434  for (j = 0; j < numpages; j++) {
435  /*
436  * Read the full oob until read_oob is fixed to handle single
437  * byte reads for 16 bit buswidth.
438  */
439  ret = mtd_read_oob(mtd, offs, &ops);
440  /* Ignore ECC errors when checking for BBM */
441  if (ret && !mtd_is_bitflip_or_eccerr(ret))
442  return ret;
443 
444  if (check_short_pattern(buf, bd))
445  return 1;
446 
447  offs += mtd->writesize;
448  }
449  return 0;
450 }
451 
463 static int create_bbt(struct mtd_info *mtd, uint8_t *buf,
464  struct nand_bbt_descr *bd, int chip)
465 {
466  struct nand_chip *this = mtd->priv;
467  int i, numblocks, numpages, scanlen;
468  int startblock;
469  loff_t from;
470  size_t readlen;
471 
472  pr_info("Scanning device for bad blocks\n");
473 
474  if (bd->options & NAND_BBT_SCANALLPAGES)
475  numpages = 1 << (this->bbt_erase_shift - this->page_shift);
476  else if (bd->options & NAND_BBT_SCAN2NDPAGE)
477  numpages = 2;
478  else
479  numpages = 1;
480 
481  if (!(bd->options & NAND_BBT_SCANEMPTY)) {
482  /* We need only read few bytes from the OOB area */
483  scanlen = 0;
484  readlen = bd->len;
485  } else {
486  /* Full page content should be read */
487  scanlen = mtd->writesize + mtd->oobsize;
488  readlen = numpages * mtd->writesize;
489  }
490 
491  if (chip == -1) {
492  /*
493  * Note that numblocks is 2 * (real numblocks) here, see i+=2
494  * below as it makes shifting and masking less painful
495  */
496  numblocks = mtd->size >> (this->bbt_erase_shift - 1);
497  startblock = 0;
498  from = 0;
499  } else {
500  if (chip >= this->numchips) {
501  pr_warn("create_bbt(): chipnr (%d) > available chips (%d)\n",
502  chip + 1, this->numchips);
503  return -EINVAL;
504  }
505  numblocks = this->chipsize >> (this->bbt_erase_shift - 1);
506  startblock = chip * numblocks;
507  numblocks += startblock;
508  from = (loff_t)startblock << (this->bbt_erase_shift - 1);
509  }
510 
512  from += mtd->erasesize - (mtd->writesize * numpages);
513 
514  for (i = startblock; i < numblocks;) {
515  int ret;
516 
518 
519  if (bd->options & NAND_BBT_SCANALLPAGES)
520  ret = scan_block_full(mtd, bd, from, buf, readlen,
521  scanlen, numpages);
522  else
523  ret = scan_block_fast(mtd, bd, from, buf, numpages);
524 
525  if (ret < 0)
526  return ret;
527 
528  if (ret) {
529  this->bbt[i >> 3] |= 0x03 << (i & 0x6);
530  pr_warn("Bad eraseblock %d at 0x%012llx\n",
531  i >> 1, (unsigned long long)from);
532  mtd->ecc_stats.badblocks++;
533  }
534 
535  i += 2;
536  from += (1 << this->bbt_erase_shift);
537  }
538  return 0;
539 }
540 
556 static int search_bbt(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_descr *td)
557 {
558  struct nand_chip *this = mtd->priv;
559  int i, chips;
560  int bits, startblock, block, dir;
561  int scanlen = mtd->writesize + mtd->oobsize;
562  int bbtblocks;
563  int blocktopage = this->bbt_erase_shift - this->page_shift;
564 
565  /* Search direction top -> down? */
566  if (td->options & NAND_BBT_LASTBLOCK) {
567  startblock = (mtd->size >> this->bbt_erase_shift) - 1;
568  dir = -1;
569  } else {
570  startblock = 0;
571  dir = 1;
572  }
573 
574  /* Do we have a bbt per chip? */
575  if (td->options & NAND_BBT_PERCHIP) {
576  chips = this->numchips;
577  bbtblocks = this->chipsize >> this->bbt_erase_shift;
578  startblock &= bbtblocks - 1;
579  } else {
580  chips = 1;
581  bbtblocks = mtd->size >> this->bbt_erase_shift;
582  }
583 
584  /* Number of bits for each erase block in the bbt */
585  bits = td->options & NAND_BBT_NRBITS_MSK;
586 
587  for (i = 0; i < chips; i++) {
588  /* Reset version information */
589  td->version[i] = 0;
590  td->pages[i] = -1;
591  /* Scan the maximum number of blocks */
592  for (block = 0; block < td->maxblocks; block++) {
593 
594  int actblock = startblock + dir * block;
595  loff_t offs = (loff_t)actblock << this->bbt_erase_shift;
596 
597  /* Read first page */
598  scan_read(mtd, buf, offs, mtd->writesize, td);
599  if (!check_pattern(buf, scanlen, mtd->writesize, td)) {
600  td->pages[i] = actblock << blocktopage;
601  if (td->options & NAND_BBT_VERSION) {
602  offs = bbt_get_ver_offs(mtd, td);
603  td->version[i] = buf[offs];
604  }
605  break;
606  }
607  }
608  startblock += this->chipsize >> this->bbt_erase_shift;
609  }
610  /* Check, if we found a bbt for each requested chip */
611  for (i = 0; i < chips; i++) {
612  if (td->pages[i] == -1)
613  pr_warn("Bad block table not found for chip %d\n", i);
614  else
615  pr_info("Bad block table found at page %d, version "
616  "0x%02X\n", td->pages[i], td->version[i]);
617  }
618  return 0;
619 }
620 
630 static void search_read_bbts(struct mtd_info *mtd, uint8_t *buf,
631  struct nand_bbt_descr *td,
632  struct nand_bbt_descr *md)
633 {
634  /* Search the primary table */
635  search_bbt(mtd, buf, td);
636 
637  /* Search the mirror table */
638  if (md)
639  search_bbt(mtd, buf, md);
640 }
641 
652 static int write_bbt(struct mtd_info *mtd, uint8_t *buf,
653  struct nand_bbt_descr *td, struct nand_bbt_descr *md,
654  int chipsel)
655 {
656  struct nand_chip *this = mtd->priv;
657  struct erase_info einfo;
658  int i, j, res, chip = 0;
659  int bits, startblock, dir, page, offs, numblocks, sft, sftmsk;
660  int nrchips, bbtoffs, pageoffs, ooboffs;
661  uint8_t msk[4];
662  uint8_t rcode = td->reserved_block_code;
663  size_t retlen, len = 0;
664  loff_t to;
665  struct mtd_oob_ops ops;
666 
667  ops.ooblen = mtd->oobsize;
668  ops.ooboffs = 0;
669  ops.datbuf = NULL;
670  ops.mode = MTD_OPS_PLACE_OOB;
671 
672  if (!rcode)
673  rcode = 0xff;
674  /* Write bad block table per chip rather than per device? */
675  if (td->options & NAND_BBT_PERCHIP) {
676  numblocks = (int)(this->chipsize >> this->bbt_erase_shift);
677  /* Full device write or specific chip? */
678  if (chipsel == -1) {
679  nrchips = this->numchips;
680  } else {
681  nrchips = chipsel + 1;
682  chip = chipsel;
683  }
684  } else {
685  numblocks = (int)(mtd->size >> this->bbt_erase_shift);
686  nrchips = 1;
687  }
688 
689  /* Loop through the chips */
690  for (; chip < nrchips; chip++) {
691  /*
692  * There was already a version of the table, reuse the page
693  * This applies for absolute placement too, as we have the
694  * page nr. in td->pages.
695  */
696  if (td->pages[chip] != -1) {
697  page = td->pages[chip];
698  goto write;
699  }
700 
701  /*
702  * Automatic placement of the bad block table. Search direction
703  * top -> down?
704  */
705  if (td->options & NAND_BBT_LASTBLOCK) {
706  startblock = numblocks * (chip + 1) - 1;
707  dir = -1;
708  } else {
709  startblock = chip * numblocks;
710  dir = 1;
711  }
712 
713  for (i = 0; i < td->maxblocks; i++) {
714  int block = startblock + dir * i;
715  /* Check, if the block is bad */
716  switch ((this->bbt[block >> 2] >>
717  (2 * (block & 0x03))) & 0x03) {
718  case 0x01:
719  case 0x03:
720  continue;
721  }
722  page = block <<
723  (this->bbt_erase_shift - this->page_shift);
724  /* Check, if the block is used by the mirror table */
725  if (!md || md->pages[chip] != page)
726  goto write;
727  }
728  pr_err("No space left to write bad block table\n");
729  return -ENOSPC;
730  write:
731 
732  /* Set up shift count and masks for the flash table */
733  bits = td->options & NAND_BBT_NRBITS_MSK;
734  msk[2] = ~rcode;
735  switch (bits) {
736  case 1: sft = 3; sftmsk = 0x07; msk[0] = 0x00; msk[1] = 0x01;
737  msk[3] = 0x01;
738  break;
739  case 2: sft = 2; sftmsk = 0x06; msk[0] = 0x00; msk[1] = 0x01;
740  msk[3] = 0x03;
741  break;
742  case 4: sft = 1; sftmsk = 0x04; msk[0] = 0x00; msk[1] = 0x0C;
743  msk[3] = 0x0f;
744  break;
745  case 8: sft = 0; sftmsk = 0x00; msk[0] = 0x00; msk[1] = 0x0F;
746  msk[3] = 0xff;
747  break;
748  default: return -EINVAL;
749  }
750 
751  bbtoffs = chip * (numblocks >> 2);
752 
753  to = ((loff_t)page) << this->page_shift;
754 
755  /* Must we save the block contents? */
756  if (td->options & NAND_BBT_SAVECONTENT) {
757  /* Make it block aligned */
758  to &= ~((loff_t)((1 << this->bbt_erase_shift) - 1));
759  len = 1 << this->bbt_erase_shift;
760  res = mtd_read(mtd, to, len, &retlen, buf);
761  if (res < 0) {
762  if (retlen != len) {
763  pr_info("nand_bbt: error reading block "
764  "for writing the bad block table\n");
765  return res;
766  }
767  pr_warn("nand_bbt: ECC error while reading "
768  "block for writing bad block table\n");
769  }
770  /* Read oob data */
771  ops.ooblen = (len >> this->page_shift) * mtd->oobsize;
772  ops.oobbuf = &buf[len];
773  res = mtd_read_oob(mtd, to + mtd->writesize, &ops);
774  if (res < 0 || ops.oobretlen != ops.ooblen)
775  goto outerr;
776 
777  /* Calc the byte offset in the buffer */
778  pageoffs = page - (int)(to >> this->page_shift);
779  offs = pageoffs << this->page_shift;
780  /* Preset the bbt area with 0xff */
781  memset(&buf[offs], 0xff, (size_t)(numblocks >> sft));
782  ooboffs = len + (pageoffs * mtd->oobsize);
783 
784  } else if (td->options & NAND_BBT_NO_OOB) {
785  ooboffs = 0;
786  offs = td->len;
787  /* The version byte */
788  if (td->options & NAND_BBT_VERSION)
789  offs++;
790  /* Calc length */
791  len = (size_t)(numblocks >> sft);
792  len += offs;
793  /* Make it page aligned! */
794  len = ALIGN(len, mtd->writesize);
795  /* Preset the buffer with 0xff */
796  memset(buf, 0xff, len);
797  /* Pattern is located at the begin of first page */
798  memcpy(buf, td->pattern, td->len);
799  } else {
800  /* Calc length */
801  len = (size_t)(numblocks >> sft);
802  /* Make it page aligned! */
803  len = ALIGN(len, mtd->writesize);
804  /* Preset the buffer with 0xff */
805  memset(buf, 0xff, len +
806  (len >> this->page_shift)* mtd->oobsize);
807  offs = 0;
808  ooboffs = len;
809  /* Pattern is located in oob area of first page */
810  memcpy(&buf[ooboffs + td->offs], td->pattern, td->len);
811  }
812 
813  if (td->options & NAND_BBT_VERSION)
814  buf[ooboffs + td->veroffs] = td->version[chip];
815 
816  /* Walk through the memory table */
817  for (i = 0; i < numblocks;) {
818  uint8_t dat;
819  dat = this->bbt[bbtoffs + (i >> 2)];
820  for (j = 0; j < 4; j++, i++) {
821  int sftcnt = (i << (3 - sft)) & sftmsk;
822  /* Do not store the reserved bbt blocks! */
823  buf[offs + (i >> sft)] &=
824  ~(msk[dat & 0x03] << sftcnt);
825  dat >>= 2;
826  }
827  }
828 
829  memset(&einfo, 0, sizeof(einfo));
830  einfo.mtd = mtd;
831  einfo.addr = to;
832  einfo.len = 1 << this->bbt_erase_shift;
833  res = nand_erase_nand(mtd, &einfo, 1);
834  if (res < 0)
835  goto outerr;
836 
837  res = scan_write_bbt(mtd, to, len, buf,
838  td->options & NAND_BBT_NO_OOB ? NULL :
839  &buf[len]);
840  if (res < 0)
841  goto outerr;
842 
843  pr_info("Bad block table written to 0x%012llx, version 0x%02X\n",
844  (unsigned long long)to, td->version[chip]);
845 
846  /* Mark it as used */
847  td->pages[chip] = page;
848  }
849  return 0;
850 
851  outerr:
852  pr_warn("nand_bbt: error while writing bad block table %d\n", res);
853  return res;
854 }
855 
864 static inline int nand_memory_bbt(struct mtd_info *mtd, struct nand_bbt_descr *bd)
865 {
866  struct nand_chip *this = mtd->priv;
867 
868  bd->options &= ~NAND_BBT_SCANEMPTY;
869  return create_bbt(mtd, this->buffers->databuf, bd, -1);
870 }
871 
883 static int check_create(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_descr *bd)
884 {
885  int i, chips, writeops, create, chipsel, res, res2;
886  struct nand_chip *this = mtd->priv;
887  struct nand_bbt_descr *td = this->bbt_td;
888  struct nand_bbt_descr *md = this->bbt_md;
889  struct nand_bbt_descr *rd, *rd2;
890 
891  /* Do we have a bbt per chip? */
892  if (td->options & NAND_BBT_PERCHIP)
893  chips = this->numchips;
894  else
895  chips = 1;
896 
897  for (i = 0; i < chips; i++) {
898  writeops = 0;
899  create = 0;
900  rd = NULL;
901  rd2 = NULL;
902  res = res2 = 0;
903  /* Per chip or per device? */
904  chipsel = (td->options & NAND_BBT_PERCHIP) ? i : -1;
905  /* Mirrored table available? */
906  if (md) {
907  if (td->pages[i] == -1 && md->pages[i] == -1) {
908  create = 1;
909  writeops = 0x03;
910  } else if (td->pages[i] == -1) {
911  rd = md;
912  writeops = 0x01;
913  } else if (md->pages[i] == -1) {
914  rd = td;
915  writeops = 0x02;
916  } else if (td->version[i] == md->version[i]) {
917  rd = td;
918  if (!(td->options & NAND_BBT_VERSION))
919  rd2 = md;
920  } else if (((int8_t)(td->version[i] - md->version[i])) > 0) {
921  rd = td;
922  writeops = 0x02;
923  } else {
924  rd = md;
925  writeops = 0x01;
926  }
927  } else {
928  if (td->pages[i] == -1) {
929  create = 1;
930  writeops = 0x01;
931  } else {
932  rd = td;
933  }
934  }
935 
936  if (create) {
937  /* Create the bad block table by scanning the device? */
938  if (!(td->options & NAND_BBT_CREATE))
939  continue;
940 
941  /* Create the table in memory by scanning the chip(s) */
942  if (!(this->bbt_options & NAND_BBT_CREATE_EMPTY))
943  create_bbt(mtd, buf, bd, chipsel);
944 
945  td->version[i] = 1;
946  if (md)
947  md->version[i] = 1;
948  }
949 
950  /* Read back first? */
951  if (rd) {
952  res = read_abs_bbt(mtd, buf, rd, chipsel);
953  if (mtd_is_eccerr(res)) {
954  /* Mark table as invalid */
955  rd->pages[i] = -1;
956  rd->version[i] = 0;
957  i--;
958  continue;
959  }
960  }
961  /* If they weren't versioned, read both */
962  if (rd2) {
963  res2 = read_abs_bbt(mtd, buf, rd2, chipsel);
964  if (mtd_is_eccerr(res2)) {
965  /* Mark table as invalid */
966  rd2->pages[i] = -1;
967  rd2->version[i] = 0;
968  i--;
969  continue;
970  }
971  }
972 
973  /* Scrub the flash table(s)? */
974  if (mtd_is_bitflip(res) || mtd_is_bitflip(res2))
975  writeops = 0x03;
976 
977  /* Update version numbers before writing */
978  if (md) {
979  td->version[i] = max(td->version[i], md->version[i]);
980  md->version[i] = td->version[i];
981  }
982 
983  /* Write the bad block table to the device? */
984  if ((writeops & 0x01) && (td->options & NAND_BBT_WRITE)) {
985  res = write_bbt(mtd, buf, td, md, chipsel);
986  if (res < 0)
987  return res;
988  }
989 
990  /* Write the mirror bad block table to the device? */
991  if ((writeops & 0x02) && md && (md->options & NAND_BBT_WRITE)) {
992  res = write_bbt(mtd, buf, md, td, chipsel);
993  if (res < 0)
994  return res;
995  }
996  }
997  return 0;
998 }
999 
1008 static void mark_bbt_region(struct mtd_info *mtd, struct nand_bbt_descr *td)
1009 {
1010  struct nand_chip *this = mtd->priv;
1011  int i, j, chips, block, nrblocks, update;
1012  uint8_t oldval, newval;
1013 
1014  /* Do we have a bbt per chip? */
1015  if (td->options & NAND_BBT_PERCHIP) {
1016  chips = this->numchips;
1017  nrblocks = (int)(this->chipsize >> this->bbt_erase_shift);
1018  } else {
1019  chips = 1;
1020  nrblocks = (int)(mtd->size >> this->bbt_erase_shift);
1021  }
1022 
1023  for (i = 0; i < chips; i++) {
1024  if ((td->options & NAND_BBT_ABSPAGE) ||
1025  !(td->options & NAND_BBT_WRITE)) {
1026  if (td->pages[i] == -1)
1027  continue;
1028  block = td->pages[i] >> (this->bbt_erase_shift - this->page_shift);
1029  block <<= 1;
1030  oldval = this->bbt[(block >> 3)];
1031  newval = oldval | (0x2 << (block & 0x06));
1032  this->bbt[(block >> 3)] = newval;
1033  if ((oldval != newval) && td->reserved_block_code)
1034  nand_update_bbt(mtd, (loff_t)block << (this->bbt_erase_shift - 1));
1035  continue;
1036  }
1037  update = 0;
1038  if (td->options & NAND_BBT_LASTBLOCK)
1039  block = ((i + 1) * nrblocks) - td->maxblocks;
1040  else
1041  block = i * nrblocks;
1042  block <<= 1;
1043  for (j = 0; j < td->maxblocks; j++) {
1044  oldval = this->bbt[(block >> 3)];
1045  newval = oldval | (0x2 << (block & 0x06));
1046  this->bbt[(block >> 3)] = newval;
1047  if (oldval != newval)
1048  update = 1;
1049  block += 2;
1050  }
1051  /*
1052  * If we want reserved blocks to be recorded to flash, and some
1053  * new ones have been marked, then we need to update the stored
1054  * bbts. This should only happen once.
1055  */
1056  if (update && td->reserved_block_code)
1057  nand_update_bbt(mtd, (loff_t)(block - 2) << (this->bbt_erase_shift - 1));
1058  }
1059 }
1060 
1069 static void verify_bbt_descr(struct mtd_info *mtd, struct nand_bbt_descr *bd)
1070 {
1071  struct nand_chip *this = mtd->priv;
1072  u32 pattern_len;
1073  u32 bits;
1074  u32 table_size;
1075 
1076  if (!bd)
1077  return;
1078 
1079  pattern_len = bd->len;
1080  bits = bd->options & NAND_BBT_NRBITS_MSK;
1081 
1082  BUG_ON((this->bbt_options & NAND_BBT_NO_OOB) &&
1083  !(this->bbt_options & NAND_BBT_USE_FLASH));
1084  BUG_ON(!bits);
1085 
1086  if (bd->options & NAND_BBT_VERSION)
1087  pattern_len++;
1088 
1089  if (bd->options & NAND_BBT_NO_OOB) {
1091  BUG_ON(!(this->bbt_options & NAND_BBT_NO_OOB));
1092  BUG_ON(bd->offs);
1093  if (bd->options & NAND_BBT_VERSION)
1094  BUG_ON(bd->veroffs != bd->len);
1096  }
1097 
1098  if (bd->options & NAND_BBT_PERCHIP)
1099  table_size = this->chipsize >> this->bbt_erase_shift;
1100  else
1101  table_size = mtd->size >> this->bbt_erase_shift;
1102  table_size >>= 3;
1103  table_size *= bits;
1104  if (bd->options & NAND_BBT_NO_OOB)
1105  table_size += pattern_len;
1106  BUG_ON(table_size > (1 << this->bbt_erase_shift));
1107 }
1108 
1121 int nand_scan_bbt(struct mtd_info *mtd, struct nand_bbt_descr *bd)
1122 {
1123  struct nand_chip *this = mtd->priv;
1124  int len, res = 0;
1125  uint8_t *buf;
1126  struct nand_bbt_descr *td = this->bbt_td;
1127  struct nand_bbt_descr *md = this->bbt_md;
1128 
1129  len = mtd->size >> (this->bbt_erase_shift + 2);
1130  /*
1131  * Allocate memory (2bit per block) and clear the memory bad block
1132  * table.
1133  */
1134  this->bbt = kzalloc(len, GFP_KERNEL);
1135  if (!this->bbt)
1136  return -ENOMEM;
1137 
1138  /*
1139  * If no primary table decriptor is given, scan the device to build a
1140  * memory based bad block table.
1141  */
1142  if (!td) {
1143  if ((res = nand_memory_bbt(mtd, bd))) {
1144  pr_err("nand_bbt: can't scan flash and build the RAM-based BBT\n");
1145  kfree(this->bbt);
1146  this->bbt = NULL;
1147  }
1148  return res;
1149  }
1150  verify_bbt_descr(mtd, td);
1151  verify_bbt_descr(mtd, md);
1152 
1153  /* Allocate a temporary buffer for one eraseblock incl. oob */
1154  len = (1 << this->bbt_erase_shift);
1155  len += (len >> this->page_shift) * mtd->oobsize;
1156  buf = vmalloc(len);
1157  if (!buf) {
1158  kfree(this->bbt);
1159  this->bbt = NULL;
1160  return -ENOMEM;
1161  }
1162 
1163  /* Is the bbt at a given page? */
1164  if (td->options & NAND_BBT_ABSPAGE) {
1165  read_abs_bbts(mtd, buf, td, md);
1166  } else {
1167  /* Search the bad block table using a pattern in oob */
1168  search_read_bbts(mtd, buf, td, md);
1169  }
1170 
1171  res = check_create(mtd, buf, bd);
1172 
1173  /* Prevent the bbt regions from erasing / writing */
1174  mark_bbt_region(mtd, td);
1175  if (md)
1176  mark_bbt_region(mtd, md);
1177 
1178  vfree(buf);
1179  return res;
1180 }
1181 
1189 int nand_update_bbt(struct mtd_info *mtd, loff_t offs)
1190 {
1191  struct nand_chip *this = mtd->priv;
1192  int len, res = 0;
1193  int chip, chipsel;
1194  uint8_t *buf;
1195  struct nand_bbt_descr *td = this->bbt_td;
1196  struct nand_bbt_descr *md = this->bbt_md;
1197 
1198  if (!this->bbt || !td)
1199  return -EINVAL;
1200 
1201  /* Allocate a temporary buffer for one eraseblock incl. oob */
1202  len = (1 << this->bbt_erase_shift);
1203  len += (len >> this->page_shift) * mtd->oobsize;
1204  buf = kmalloc(len, GFP_KERNEL);
1205  if (!buf)
1206  return -ENOMEM;
1207 
1208  /* Do we have a bbt per chip? */
1209  if (td->options & NAND_BBT_PERCHIP) {
1210  chip = (int)(offs >> this->chip_shift);
1211  chipsel = chip;
1212  } else {
1213  chip = 0;
1214  chipsel = -1;
1215  }
1216 
1217  td->version[chip]++;
1218  if (md)
1219  md->version[chip]++;
1220 
1221  /* Write the bad block table to the device? */
1222  if (td->options & NAND_BBT_WRITE) {
1223  res = write_bbt(mtd, buf, td, md, chipsel);
1224  if (res < 0)
1225  goto out;
1226  }
1227  /* Write the mirror bad block table to the device? */
1228  if (md && (md->options & NAND_BBT_WRITE)) {
1229  res = write_bbt(mtd, buf, md, td, chipsel);
1230  }
1231 
1232  out:
1233  kfree(buf);
1234  return res;
1235 }
1236 
1237 /*
1238  * Define some generic bad / good block scan pattern which are used
1239  * while scanning a device for factory marked good / bad blocks.
1240  */
1241 static uint8_t scan_ff_pattern[] = { 0xff, 0xff };
1242 
1243 static uint8_t scan_agand_pattern[] = { 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7 };
1244 
1245 static struct nand_bbt_descr agand_flashbased = {
1247  .offs = 0x20,
1248  .len = 6,
1249  .pattern = scan_agand_pattern
1250 };
1251 
1252 /* Generic flash bbt descriptors */
1253 static uint8_t bbt_pattern[] = {'B', 'b', 't', '0' };
1254 static uint8_t mirror_pattern[] = {'1', 't', 'b', 'B' };
1255 
1256 static struct nand_bbt_descr bbt_main_descr = {
1259  .offs = 8,
1260  .len = 4,
1261  .veroffs = 12,
1262  .maxblocks = NAND_BBT_SCAN_MAXBLOCKS,
1263  .pattern = bbt_pattern
1264 };
1265 
1266 static struct nand_bbt_descr bbt_mirror_descr = {
1269  .offs = 8,
1270  .len = 4,
1271  .veroffs = 12,
1272  .maxblocks = NAND_BBT_SCAN_MAXBLOCKS,
1273  .pattern = mirror_pattern
1274 };
1275 
1276 static struct nand_bbt_descr bbt_main_no_oob_descr = {
1279  | NAND_BBT_NO_OOB,
1280  .len = 4,
1281  .veroffs = 4,
1282  .maxblocks = NAND_BBT_SCAN_MAXBLOCKS,
1283  .pattern = bbt_pattern
1284 };
1285 
1286 static struct nand_bbt_descr bbt_mirror_no_oob_descr = {
1289  | NAND_BBT_NO_OOB,
1290  .len = 4,
1291  .veroffs = 4,
1292  .maxblocks = NAND_BBT_SCAN_MAXBLOCKS,
1293  .pattern = mirror_pattern
1294 };
1295 
1296 #define BADBLOCK_SCAN_MASK (~NAND_BBT_NO_OOB)
1297 
1306 static int nand_create_badblock_pattern(struct nand_chip *this)
1307 {
1308  struct nand_bbt_descr *bd;
1309  if (this->badblock_pattern) {
1310  pr_warn("Bad block pattern already allocated; not replacing\n");
1311  return -EINVAL;
1312  }
1313  bd = kzalloc(sizeof(*bd), GFP_KERNEL);
1314  if (!bd)
1315  return -ENOMEM;
1316  bd->options = this->bbt_options & BADBLOCK_SCAN_MASK;
1317  bd->offs = this->badblockpos;
1318  bd->len = (this->options & NAND_BUSWIDTH_16) ? 2 : 1;
1319  bd->pattern = scan_ff_pattern;
1321  this->badblock_pattern = bd;
1322  return 0;
1323 }
1324 
1332 int nand_default_bbt(struct mtd_info *mtd)
1333 {
1334  struct nand_chip *this = mtd->priv;
1335 
1336  /*
1337  * Default for AG-AND. We must use a flash based bad block table as the
1338  * devices have factory marked _good_ blocks. Erasing those blocks
1339  * leads to loss of the good / bad information, so we _must_ store this
1340  * information in a good / bad table during startup.
1341  */
1342  if (this->options & NAND_IS_AND) {
1343  /* Use the default pattern descriptors */
1344  if (!this->bbt_td) {
1345  this->bbt_td = &bbt_main_descr;
1346  this->bbt_md = &bbt_mirror_descr;
1347  }
1349  return nand_scan_bbt(mtd, &agand_flashbased);
1350  }
1351 
1352  /* Is a flash based bad block table requested? */
1353  if (this->bbt_options & NAND_BBT_USE_FLASH) {
1354  /* Use the default pattern descriptors */
1355  if (!this->bbt_td) {
1356  if (this->bbt_options & NAND_BBT_NO_OOB) {
1357  this->bbt_td = &bbt_main_no_oob_descr;
1358  this->bbt_md = &bbt_mirror_no_oob_descr;
1359  } else {
1360  this->bbt_td = &bbt_main_descr;
1361  this->bbt_md = &bbt_mirror_descr;
1362  }
1363  }
1364  } else {
1365  this->bbt_td = NULL;
1366  this->bbt_md = NULL;
1367  }
1368 
1369  if (!this->badblock_pattern)
1370  nand_create_badblock_pattern(this);
1371 
1372  return nand_scan_bbt(mtd, this->badblock_pattern);
1373 }
1374 
1381 int nand_isbad_bbt(struct mtd_info *mtd, loff_t offs, int allowbbt)
1382 {
1383  struct nand_chip *this = mtd->priv;
1384  int block;
1385  uint8_t res;
1386 
1387  /* Get block number * 2 */
1388  block = (int)(offs >> (this->bbt_erase_shift - 1));
1389  res = (this->bbt[block >> 3] >> (block & 0x06)) & 0x03;
1390 
1391  pr_debug("nand_isbad_bbt(): bbt info for offs 0x%08x: "
1392  "(block %d) 0x%02x\n",
1393  (unsigned int)offs, block >> 1, res);
1394 
1395  switch ((int)res) {
1396  case 0x00:
1397  return 0;
1398  case 0x01:
1399  return 1;
1400  case 0x02:
1401  return allowbbt ? 0 : 1;
1402  }
1403  return 1;
1404 }
1405