nand.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:34k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *  drivers/mtd/nand.c
  3.  *
  4.  *  Copyright (C) 2000 Steven J. Hill (sjhill@cotw.com)
  5.  *
  6.  * $Id: nand.c,v 1.12 2001/10/02 15:05:14 dwmw2 Exp $
  7.  *
  8.  * This program is free software; you can redistribute it and/or modify
  9.  * it under the terms of the GNU General Public License version 2 as
  10.  * published by the Free Software Foundation.
  11.  *
  12.  *  Overview:
  13.  *   This is the generic MTD driver for NAND flash devices. It should be
  14.  *   capable of working with almost all NAND chips currently available.
  15.  */
  16. #include <linux/delay.h>
  17. #include <linux/errno.h>
  18. #include <linux/sched.h>
  19. #include <linux/types.h>
  20. #include <linux/mtd/mtd.h>
  21. #include <linux/mtd/nand.h>
  22. #include <linux/mtd/nand_ids.h>
  23. #include <linux/interrupt.h>
  24. #include <asm/io.h>
  25. #ifdef CONFIG_MTD_NAND_ECC
  26. #include <linux/mtd/nand_ecc.h>
  27. #endif
  28. /*
  29.  * Macros for low-level register control
  30.  */
  31. #define NAND_CTRL (*(volatile unsigned char *) 
  32. ((struct nand_chip *) mtd->priv)->CTRL_ADDR)
  33. #define nand_select() NAND_CTRL &= ~this->NCE; 
  34. nand_command(mtd, NAND_CMD_RESET, -1, -1); 
  35. udelay (10);
  36. #define nand_deselect() NAND_CTRL |= ~this->NCE;
  37. /*
  38.  * NAND low-level MTD interface functions
  39.  */
  40. static int nand_read (struct mtd_info *mtd, loff_t from, size_t len,
  41. size_t *retlen, u_char *buf);
  42. static int nand_read_ecc (struct mtd_info *mtd, loff_t from, size_t len,
  43. size_t *retlen, u_char *buf, u_char *ecc_code);
  44. static int nand_read_oob (struct mtd_info *mtd, loff_t from, size_t len,
  45. size_t *retlen, u_char *buf);
  46. static int nand_write (struct mtd_info *mtd, loff_t to, size_t len,
  47. size_t *retlen, const u_char *buf);
  48. static int nand_write_ecc (struct mtd_info *mtd, loff_t to, size_t len,
  49. size_t *retlen, const u_char *buf,
  50. u_char *ecc_code);
  51. static int nand_write_oob (struct mtd_info *mtd, loff_t to, size_t len,
  52. size_t *retlen, const u_char *buf);
  53. static int nand_writev (struct mtd_info *mtd, const struct iovec *vecs,
  54. unsigned long count, loff_t to, size_t *retlen);
  55. static int nand_erase (struct mtd_info *mtd, struct erase_info *instr);
  56. static void nand_sync (struct mtd_info *mtd);
  57. /*
  58.  * Send command to NAND device
  59.  */
  60. static void nand_command (struct mtd_info *mtd, unsigned command,
  61. int column, int page_addr)
  62. {
  63. register struct nand_chip *this = mtd->priv;
  64. register unsigned long NAND_IO_ADDR = this->IO_ADDR;
  65. /* Begin command latch cycle */
  66. NAND_CTRL |= this->CLE;
  67. /*
  68.  * Write out the command to the device.
  69.  */
  70. if (command != NAND_CMD_SEQIN)
  71. writeb (command, NAND_IO_ADDR);
  72. else {
  73. if (mtd->oobblock == 256 && column >= 256) {
  74. column -= 256;
  75. writeb(NAND_CMD_RESET, NAND_IO_ADDR);
  76. writeb(NAND_CMD_READOOB, NAND_IO_ADDR);
  77. writeb(NAND_CMD_SEQIN, NAND_IO_ADDR);
  78. }
  79. else if (mtd->oobblock == 512 && column >= 256) {
  80. if (column < 512) {
  81. column -= 256;
  82. writeb(NAND_CMD_READ1, NAND_IO_ADDR);
  83. writeb(NAND_CMD_SEQIN, NAND_IO_ADDR);
  84. }
  85. else {
  86. column -= 512;
  87. writeb(NAND_CMD_READOOB, NAND_IO_ADDR);
  88. writeb(NAND_CMD_SEQIN, NAND_IO_ADDR);
  89. }
  90. }
  91. else {
  92. writeb(NAND_CMD_READ0, NAND_IO_ADDR);
  93. writeb(NAND_CMD_SEQIN, NAND_IO_ADDR);
  94. }
  95. }
  96. /* Set ALE and clear CLE to start address cycle */
  97. NAND_CTRL &= ~this->CLE;
  98. NAND_CTRL |= this->ALE;
  99. /* Serially input address */
  100. if (column != -1)
  101. writeb (column, NAND_IO_ADDR);
  102. if (page_addr != -1) {
  103. writeb ((unsigned char) (page_addr & 0xff), NAND_IO_ADDR);
  104. writeb ((unsigned char) ((page_addr >> 8) & 0xff), NAND_IO_ADDR);
  105. /* One more address cycle for higher density devices */
  106. if (mtd->size & 0x0c000000) {
  107. writeb ((unsigned char) ((page_addr >> 16) & 0x0f),
  108. NAND_IO_ADDR);
  109. }
  110. }
  111. /* Latch in address */
  112. NAND_CTRL &= ~this->ALE;
  113. /* Pause for 15us */
  114. udelay (15);
  115. }
  116. /*
  117.  * NAND read
  118.  */
  119. static int nand_read (struct mtd_info *mtd, loff_t from, size_t len,
  120. size_t *retlen, u_char *buf)
  121. {
  122. #ifdef CONFIG_MTD_NAND_ECC
  123. struct nand_chip *this = mtd->priv;
  124. return nand_read_ecc (mtd, from, len, retlen, buf, this->ecc_code_buf);
  125. #else
  126. return nand_read_ecc (mtd, from, len, retlen, buf, NULL);
  127. #endif
  128. }
  129. /*
  130.  * NAND read with ECC
  131.  */
  132. static int nand_read_ecc (struct mtd_info *mtd, loff_t from, size_t len,
  133. size_t *retlen, u_char *buf, u_char *ecc_code)
  134. {
  135. int j, col, page, state;
  136. int erase_state = 0;
  137. struct nand_chip *this = mtd->priv;
  138. DECLARE_WAITQUEUE(wait, current);
  139. #ifdef CONFIG_MTD_NAND_ECC
  140. int ecc_result;
  141. u_char ecc_calc[6];
  142. #endif
  143. DEBUG (MTD_DEBUG_LEVEL3,
  144. "nand_read_ecc: from = 0x%08x, len = %in", (unsigned int) from,
  145. (int) len);
  146. /* Do not allow reads past end of device */
  147. if ((from + len) > mtd->size) {
  148. DEBUG (MTD_DEBUG_LEVEL0,
  149. "nand_read_ecc: Attempt read beyond end of devicen");
  150. *retlen = 0;
  151. return -EINVAL;
  152. }
  153. /* Grab the lock and see if the device is available */
  154. retry:
  155. spin_lock_bh (&this->chip_lock);
  156. switch (this->state) {
  157. case FL_READY:
  158. this->state = FL_READING;
  159. spin_unlock_bh (&this->chip_lock);
  160. break;
  161. case FL_ERASING:
  162. this->state = FL_READING;
  163. erase_state = 1;
  164. spin_unlock_bh (&this->chip_lock);
  165. break;
  166. default:
  167. set_current_state (TASK_UNINTERRUPTIBLE);
  168. add_wait_queue (&this->wq, &wait);
  169. spin_unlock_bh (&this->chip_lock);
  170. schedule();
  171. remove_wait_queue (&this->wq, &wait);
  172. goto retry;
  173. };
  174. /* First we calculate the starting page */
  175. page = from >> this->page_shift;
  176. /* Get raw starting column */
  177. col = from & (mtd->oobblock - 1);
  178. /* State machine for devices having pages larger than 256 bytes */
  179. state = (col < mtd->eccsize) ? 0 : 1;
  180. /* Calculate column address within ECC block context */
  181. col = (col >= mtd->eccsize) ? (col - mtd->eccsize) : col;
  182. /* Initialize return value */
  183. *retlen = 0;
  184. /* Select the NAND device */
  185. nand_select ();
  186. /* Loop until all data read */
  187. while (*retlen < len) {
  188. #ifdef CONFIG_MTD_NAND_ECC
  189. /* Send the read command */
  190. if (!state)
  191. nand_command (mtd, NAND_CMD_READ0, 0x00, page);
  192. else 
  193. nand_command (mtd, NAND_CMD_READ1, 0x00, page);
  194. /* Read in a block big enough for ECC */
  195. for (j=0 ; j < mtd->eccsize ; j++)
  196. this->data_buf[j] = readb (this->IO_ADDR);
  197. /* Read in the out-of-band data */
  198. if (!state) {
  199. nand_command (mtd, NAND_CMD_READOOB, 0x00, page);
  200. for (j=0 ; j<3 ; j++)
  201. ecc_code[j] = readb(this->IO_ADDR);
  202. nand_command (mtd, NAND_CMD_READ0, 0x00, page);
  203. }
  204. else {
  205. nand_command (mtd, NAND_CMD_READOOB, 0x03, page);
  206. for (j=3 ; j<6 ; j++)
  207. ecc_code[j] = readb(this->IO_ADDR);
  208. nand_command (mtd, NAND_CMD_READ0, 0x00, page);
  209. }
  210. /* Calculate the ECC and verify it */
  211. if (!state) {
  212. nand_calculate_ecc (&this->data_buf[0],
  213. &ecc_calc[0]);
  214. ecc_result = nand_correct_data (&this->data_buf[0],
  215. &ecc_code[0], &ecc_calc[0]);
  216. }
  217. else {
  218. nand_calculate_ecc (&this->data_buf[0],
  219. &ecc_calc[3]);
  220. ecc_result = nand_correct_data (&this->data_buf[0],
  221. &ecc_code[3], &ecc_calc[3]);
  222. }
  223. if (ecc_result == -1) {
  224. DEBUG (MTD_DEBUG_LEVEL0,
  225. "nand_read_ecc: " 
  226. "Failed ECC read, page 0x%08xn", page);
  227. nand_deselect ();
  228. spin_lock_bh (&this->chip_lock);
  229. if (erase_state)
  230. this->state = FL_ERASING;
  231. else
  232. this->state = FL_READY;
  233. wake_up (&this->wq);
  234. spin_unlock_bh (&this->chip_lock);
  235. return -EIO;
  236. }
  237. /* Read the data from ECC data buffer into return buffer */
  238. if ((*retlen + (mtd->eccsize - col)) >= len) {
  239. while (*retlen < len)
  240. buf[(*retlen)++] = this->data_buf[col++];
  241. /* We're done */
  242. continue;
  243. }
  244. else
  245. for (j=col ; j < mtd->eccsize ; j++)
  246. buf[(*retlen)++] = this->data_buf[j];
  247. #else
  248. /* Send the read command */
  249. if (!state)
  250. nand_command (mtd, NAND_CMD_READ0, col, page);
  251. else 
  252. nand_command (mtd, NAND_CMD_READ1, col, page);
  253. /* Read the data directly into the return buffer */ 
  254. if ((*retlen + (mtd->eccsize - col)) >= len) {
  255. while (*retlen < len)
  256. buf[(*retlen)++] = readb (this->IO_ADDR);
  257. /* We're done */
  258. continue;
  259. }
  260. else
  261. for (j=col ; j < mtd->eccsize ; j++)
  262. buf[(*retlen)++] = readb (this->IO_ADDR);
  263. #endif
  264. /*
  265.  * If the amount of data to be read is greater than
  266.  * (256 - col), then all subsequent reads will take
  267.  * place on page or half-page (in the case of 512 byte
  268.  * page devices) aligned boundaries and the column
  269.  * address will be zero. Setting the column address to
  270.  * to zero after the first read allows us to simplify
  271.  * the reading of data and the if/else statements above.
  272.  */
  273. if (col)
  274. col = 0x00;
  275. /* Increment page address */
  276. if ((mtd->oobblock == 256) || state)
  277. page++;
  278. /* Toggle state machine */
  279. if (mtd->oobblock == 512)
  280. state = state ? 0 : 1;
  281. }
  282. /* De-select the NAND device */
  283. nand_deselect ();
  284. /* Wake up anyone waiting on the device */
  285. spin_lock_bh (&this->chip_lock);
  286. if (erase_state)
  287. this->state = FL_ERASING;
  288. else
  289. this->state = FL_READY;
  290. wake_up (&this->wq);
  291. spin_unlock_bh (&this->chip_lock);
  292. /* Return happy */
  293. return 0;
  294. }
  295. /*
  296.  * NAND read out-of-band
  297.  */
  298. static int nand_read_oob (struct mtd_info *mtd, loff_t from, size_t len,
  299. size_t *retlen, u_char *buf)
  300. {
  301. int i, col, page;
  302. int erase_state = 0;
  303. struct nand_chip *this = mtd->priv;
  304. DECLARE_WAITQUEUE(wait, current);
  305. DEBUG (MTD_DEBUG_LEVEL3,
  306. "nand_read_oob: from = 0x%08x, len = %in", (unsigned int) from,
  307. (int) len);
  308. /* Shift to get page */
  309. page = ((int) from) >> this->page_shift;
  310. /* Mask to get column */
  311. col = from & 0x0f;
  312. /* Initialize return length value */
  313. *retlen = 0;
  314. /* Do not allow read past end of page */
  315. if ((col + len) > mtd->oobsize) {
  316. DEBUG (MTD_DEBUG_LEVEL0,
  317. "nand_read_oob: Attempt read past end of page " 
  318. "0x%08x, column %i, length %in", page, col, len);
  319. return -EINVAL;
  320. }
  321. retry:
  322. /* Grab the lock and see if the device is available */
  323. spin_lock_bh (&this->chip_lock);
  324. switch (this->state) {
  325. case FL_READY:
  326. this->state = FL_READING;
  327. spin_unlock_bh (&this->chip_lock);
  328. break;
  329. case FL_ERASING:
  330. this->state = FL_READING;
  331. erase_state = 1;
  332. spin_unlock_bh (&this->chip_lock);
  333. break;
  334. default:
  335. set_current_state (TASK_UNINTERRUPTIBLE);
  336. add_wait_queue (&this->wq, &wait);
  337. spin_unlock_bh (&this->chip_lock);
  338. schedule();
  339. remove_wait_queue (&this->wq, &wait);
  340. goto retry;
  341. };
  342. /* Select the NAND device */
  343. nand_select ();
  344. /* Send the read command */
  345. nand_command (mtd, NAND_CMD_READOOB, col, page);
  346. /* Read the data */
  347. for (i = 0 ; i < len ; i++)
  348. buf[i] = readb (this->IO_ADDR);
  349. /* De-select the NAND device */
  350. nand_deselect ();
  351. /* Wake up anyone waiting on the device */
  352. spin_lock_bh (&this->chip_lock);
  353. if (erase_state)
  354. this->state = FL_ERASING;
  355. else
  356. this->state = FL_READY;
  357. wake_up (&this->wq);
  358. spin_unlock_bh (&this->chip_lock);
  359. /* Return happy */
  360. *retlen = len;
  361. return 0;
  362. }
  363. /*
  364.  * NAND write
  365.  */
  366. static int nand_write (struct mtd_info *mtd, loff_t to, size_t len,
  367. size_t *retlen, const u_char *buf)
  368. {
  369. #ifdef CONFIG_MTD_NAND_ECC
  370. struct nand_chip *this = mtd->priv;
  371. return nand_write_ecc (mtd, to, len, retlen, buf, this->ecc_code_buf);
  372. #else
  373. return nand_write_ecc (mtd, to, len, retlen, buf, NULL);
  374. #endif
  375. }
  376. /*
  377.  * NAND write with ECC
  378.  */
  379. static int nand_write_ecc (struct mtd_info *mtd, loff_t to, size_t len,
  380. size_t *retlen, const u_char *buf,
  381. u_char *ecc_code)
  382. {
  383. int i, page, col, cnt, status;
  384. struct nand_chip *this = mtd->priv;
  385. DECLARE_WAITQUEUE(wait, current);
  386. #ifdef CONFIG_MTD_NAND_ECC
  387. int ecc_bytes = (mtd->oobblock == 512) ? 6 : 3;
  388. #endif
  389. DEBUG (MTD_DEBUG_LEVEL3,
  390. "nand_write_ecc: to = 0x%08x, len = %in", (unsigned int) to,
  391. (int) len);
  392. /* Do not allow write past end of page */
  393. if ((to + len) > mtd->size) {
  394. DEBUG (MTD_DEBUG_LEVEL0,
  395. "nand_write_ecc: Attempted write past end of devicen");
  396. return -EINVAL;
  397. }
  398. retry:
  399. /* Grab the lock and see if the device is available */
  400. spin_lock_bh (&this->chip_lock);
  401. switch (this->state) {
  402. case FL_READY:
  403. this->state = FL_WRITING;
  404. spin_unlock_bh (&this->chip_lock);
  405. break;
  406. default:
  407. set_current_state (TASK_UNINTERRUPTIBLE);
  408. add_wait_queue (&this->wq, &wait);
  409. spin_unlock_bh (&this->chip_lock);
  410. schedule();
  411. remove_wait_queue (&this->wq, &wait);
  412. goto retry;
  413. };
  414. /* Shift to get page */
  415. page = ((int) to) >> this->page_shift;
  416. /* Get the starting column */
  417. col = to & (mtd->oobblock - 1);
  418. /* Initialize return length value */
  419. *retlen = 0;
  420. /* Select the NAND device */
  421. nand_select ();
  422. /* Check the WP bit */
  423. nand_command (mtd, NAND_CMD_STATUS, -1, -1);
  424. if (!(readb (this->IO_ADDR) & 0x80)) {
  425. DEBUG (MTD_DEBUG_LEVEL0,
  426. "nand_write_ecc: Device is write protected!!!n");
  427. nand_deselect ();
  428. spin_lock_bh (&this->chip_lock);
  429. this->state = FL_READY;
  430. wake_up (&this->wq);
  431. spin_unlock_bh (&this->chip_lock);
  432. return -EIO;
  433. }
  434. /* Loop until all data is written */
  435. while (*retlen < len) {
  436. /* Write data into buffer */
  437. if ((col + len) >= mtd->oobblock)
  438. for(i=col, cnt=0 ; i < mtd->oobblock ; i++, cnt++)
  439. this->data_buf[i] = buf[(*retlen + cnt)];
  440. else
  441. for(i=col, cnt=0 ; cnt < (len - *retlen) ; i++, cnt++)
  442. this->data_buf[i] = buf[(*retlen + cnt)];
  443. #ifdef CONFIG_MTD_NAND_ECC
  444. /* Zero out the ECC array */
  445. for (i=0 ; i < 6 ; i++)
  446. ecc_code[i] = 0x00;
  447. /* Calculate and write the ECC if we have enough data */
  448. if ((col < mtd->eccsize) &&
  449. ((col + (len - *retlen)) >= mtd->eccsize)) {
  450. nand_command (mtd, NAND_CMD_READ0, col, page);
  451. for (i=0 ; i < col ; i++)
  452. this->data_buf[i] = readb (this->IO_ADDR); 
  453. nand_calculate_ecc (&this->data_buf[0], &ecc_code[0]);
  454. for (i=0 ; i<3 ; i++)
  455. this->data_buf[(mtd->oobblock + i)] =
  456. ecc_code[i];
  457. }
  458. /* Calculate and write the second ECC if we have enough data */
  459. if ((mtd->oobblock == 512) &&
  460. ((col + (len - *retlen)) >= mtd->oobblock)) {
  461. nand_calculate_ecc (&this->data_buf[256], &ecc_code[3]);
  462. for (i=3 ; i<6 ; i++)
  463. this->data_buf[(mtd->oobblock + i)] =
  464. ecc_code[i];
  465. }
  466. /* Write ones for partial page programming */
  467. for (i=ecc_bytes ; i < mtd->oobsize ; i++)
  468. this->data_buf[(mtd->oobblock + i)] = 0xff;
  469. #else
  470. /* Write ones for partial page programming */
  471. for (i=mtd->oobblock ; i < (mtd->oobblock + mtd->oobsize) ; i++)
  472. this->data_buf[i] = 0xff;
  473. #endif
  474. /* Write pre-padding bytes into buffer */
  475. for (i=0 ; i < col ; i++)
  476. this->data_buf[i] = 0xff;
  477. /* Write post-padding bytes into buffer */
  478. if ((col + (len - *retlen)) < mtd->oobblock) {
  479. for(i=(col + cnt) ; i < mtd->oobblock ; i++)
  480. this->data_buf[i] = 0xff;
  481. }
  482. /* Send command to begin auto page programming */
  483. nand_command (mtd, NAND_CMD_SEQIN, 0x00, page);
  484. /* Write out complete page of data */
  485. for (i=0 ; i < (mtd->oobblock + mtd->oobsize) ; i++)
  486. writeb (this->data_buf[i], this->IO_ADDR);
  487. /* Send command to actually program the data */
  488. nand_command (mtd, NAND_CMD_PAGEPROG, -1, -1);
  489. /*
  490.  * Wait for program operation to complete. This could
  491.  * take up to 3000us (3ms) on some devices, so we try
  492.  * and exit as quickly as possible.
  493.  */
  494. status = 0;
  495. for (i=0 ; i<24 ; i++) {
  496. /* Delay for 125us */
  497. udelay (125);
  498. /* Check the status */
  499. nand_command (mtd, NAND_CMD_STATUS, -1, -1);
  500. status = (int) readb (this->IO_ADDR);
  501. if (status & 0x40)
  502. break;
  503. }
  504. /* See if device thinks it succeeded */
  505. if (status & 0x01) {
  506. DEBUG (MTD_DEBUG_LEVEL0,
  507. "nand_write_ecc: " 
  508. "Failed write, page 0x%08x, " 
  509. "%6i bytes were succesfuln", page, *retlen);
  510. nand_deselect ();
  511. spin_lock_bh (&this->chip_lock);
  512. this->state = FL_READY;
  513. wake_up (&this->wq);
  514. spin_unlock_bh (&this->chip_lock);
  515. return -EIO;
  516. }
  517. #ifdef CONFIG_MTD_NAND_VERIFY_WRITE
  518. /*
  519.  * The NAND device assumes that it is always writing to
  520.  * a cleanly erased page. Hence, it performs its internal
  521.  * write verification only on bits that transitioned from
  522.  * 1 to 0. The device does NOT verify the whole page on a
  523.  * byte by byte basis. It is possible that the page was
  524.  * not completely erased or the page is becoming unusable
  525.  * due to wear. The read with ECC would catch the error
  526.  * later when the ECC page check fails, but we would rather
  527.  * catch it early in the page write stage. Better to write
  528.  * no data than invalid data.
  529.  */
  530. /* Send command to read back the page */
  531. if (col < mtd->eccsize)
  532. nand_command (mtd, NAND_CMD_READ0, col, page);
  533. else
  534. nand_command (mtd, NAND_CMD_READ1, col - 256, page);
  535. /* Loop through and verify the data */
  536. for (i=col ; i < cnt ; i++) {
  537. if (this->data_buf[i] != readb (this->IO_ADDR)) {
  538. DEBUG (MTD_DEBUG_LEVEL0,
  539. "nand_write_ecc: " 
  540. "Failed write verify, page 0x%08x, " 
  541. "%6i bytes were succesfuln",
  542. page, *retlen);
  543. nand_deselect ();
  544. spin_lock_bh (&this->chip_lock);
  545. this->state = FL_READY;
  546. wake_up (&this->wq);
  547. spin_unlock_bh (&this->chip_lock);
  548. return -EIO;
  549. }
  550. }
  551. #ifdef CONFIG_MTD_NAND_ECC
  552. /*
  553.  * We also want to check that the ECC bytes wrote
  554.  * correctly for the same reasons stated above.
  555.  */
  556. nand_command (mtd, NAND_CMD_READOOB, 0x00, page);
  557. for (i=0 ; i < ecc_bytes ; i++) {
  558. if ((readb (this->IO_ADDR) != ecc_code[i]) &&
  559. ecc_code[i]) {
  560. DEBUG (MTD_DEBUG_LEVEL0,
  561. "nand_write_ecc: Failed ECC write " 
  562. "verify, page 0x%08x, " 
  563. "%6i bytes were succesfuln",
  564. page, i);
  565. nand_deselect ();
  566. spin_lock_bh (&this->chip_lock);
  567. this->state = FL_READY;
  568. wake_up (&this->wq);
  569. spin_unlock_bh (&this->chip_lock);
  570. return -EIO;
  571. }
  572. }
  573. #endif
  574. #endif
  575. /*
  576.  * If we are writing a large amount of data and/or it
  577.  * crosses page or half-page boundaries, we set the
  578.  * the column to zero. It simplifies the program logic.
  579.  */
  580. if (col)
  581. col = 0x00;
  582. /* Update written bytes count */
  583. *retlen += cnt;
  584. /* Increment page address */
  585. page++;
  586. }
  587. /* De-select the NAND device */
  588. nand_deselect ();
  589. /* Wake up anyone waiting on the device */
  590. spin_lock_bh (&this->chip_lock);
  591. this->state = FL_READY;
  592. wake_up (&this->wq);
  593. spin_unlock_bh (&this->chip_lock);
  594. /* Return happy */
  595. *retlen = len;
  596. return 0;
  597. }
  598. /*
  599.  * NAND write out-of-band
  600.  */
  601. static int nand_write_oob (struct mtd_info *mtd, loff_t to, size_t len,
  602. size_t *retlen, const u_char *buf)
  603. {
  604. int i, column, page, status;
  605. struct nand_chip *this = mtd->priv;
  606. DECLARE_WAITQUEUE(wait, current);
  607. DEBUG (MTD_DEBUG_LEVEL3,
  608. "nand_write_oob: to = 0x%08x, len = %in", (unsigned int) to,
  609. (int) len);
  610. /* Shift to get page */
  611. page = ((int) to) >> this->page_shift;
  612. /* Mask to get column */
  613. column = to & 0x1f;
  614. /* Initialize return length value */
  615. *retlen = 0;
  616. /* Do not allow write past end of page */
  617. if ((column + len) > mtd->oobsize) {
  618. DEBUG (MTD_DEBUG_LEVEL0,
  619. "nand_write_oob: Attempt to write past end of pagen");
  620. return -EINVAL;
  621. }
  622. retry:
  623. /* Grab the lock and see if the device is available */
  624. spin_lock_bh (&this->chip_lock);
  625. switch (this->state) {
  626. case FL_READY:
  627. this->state = FL_WRITING;
  628. spin_unlock_bh (&this->chip_lock);
  629. break;
  630. default:
  631. set_current_state (TASK_UNINTERRUPTIBLE);
  632. add_wait_queue (&this->wq, &wait);
  633. spin_unlock_bh (&this->chip_lock);
  634. schedule();
  635. remove_wait_queue (&this->wq, &wait);
  636. goto retry;
  637. };
  638. /* Select the NAND device */
  639. nand_select ();
  640. /* Check the WP bit */
  641. nand_command (mtd, NAND_CMD_STATUS, -1, -1);
  642. if (!(readb (this->IO_ADDR) & 0x80)) {
  643. DEBUG (MTD_DEBUG_LEVEL0,
  644. "nand_write_oob: Device is write protected!!!n");
  645. nand_deselect ();
  646. spin_lock_bh (&this->chip_lock);
  647. this->state = FL_READY;
  648. wake_up (&this->wq);
  649. spin_unlock_bh (&this->chip_lock);
  650. return -EIO;
  651. }
  652. /* Write out desired data */
  653. nand_command (mtd, NAND_CMD_SEQIN, column + 512, page);
  654. for (i=0 ; i<len ; i++)
  655. writeb (buf[i], this->IO_ADDR);
  656. /* Send command to program the OOB data */
  657. nand_command (mtd, NAND_CMD_PAGEPROG, -1, -1);
  658. /*
  659.  * Wait for program operation to complete. This could
  660.  * take up to 3000us (3ms) on some devices, so we try
  661.  * and exit as quickly as possible.
  662.  */
  663. status = 0;
  664. for (i=0 ; i<24 ; i++) {
  665. /* Delay for 125us */
  666. udelay (125);
  667. /* Check the status */
  668. nand_command (mtd, NAND_CMD_STATUS, -1, -1);
  669. status = (int) readb (this->IO_ADDR);
  670. if (status & 0x40)
  671. break;
  672. }
  673. /* See if device thinks it succeeded */
  674. if (status & 0x01) {
  675. DEBUG (MTD_DEBUG_LEVEL0,
  676. "nand_write_oob: " 
  677. "Failed write, page 0x%08xn", page);
  678. nand_deselect ();
  679. spin_lock_bh (&this->chip_lock);
  680. this->state = FL_READY;
  681. wake_up (&this->wq);
  682. spin_unlock_bh (&this->chip_lock);
  683. return -EIO;
  684. }
  685. #ifdef CONFIG_MTD_NAND_VERIFY_WRITE
  686. /* Send command to read back the data */
  687. nand_command (mtd, NAND_CMD_READOOB, column, page);
  688. /* Loop through and verify the data */
  689. for (i=0 ; i<len ; i++) {
  690. if (buf[i] != readb (this->IO_ADDR)) {
  691. DEBUG (MTD_DEBUG_LEVEL0,
  692. "nand_write_oob: " 
  693. "Failed write verify, page 0x%08xn", page);
  694. nand_deselect ();
  695. spin_lock_bh (&this->chip_lock);
  696. this->state = FL_READY;
  697. wake_up (&this->wq);
  698. spin_unlock_bh (&this->chip_lock);
  699. return -EIO;
  700. }
  701. }
  702. #endif
  703. /* De-select the NAND device */
  704. nand_deselect ();
  705. /* Wake up anyone waiting on the device */
  706. spin_lock_bh (&this->chip_lock);
  707. this->state = FL_READY;
  708. wake_up (&this->wq);
  709. spin_unlock_bh (&this->chip_lock);
  710. /* Return happy */
  711. *retlen = len;
  712. return 0;
  713. }
  714. /*
  715.  * NAND write with iovec
  716.  */
  717. static int nand_writev (struct mtd_info *mtd, const struct iovec *vecs,
  718. unsigned long count, loff_t to, size_t *retlen)
  719. {
  720. int i, page, col, cnt, len, total_len, status;
  721. struct nand_chip *this = mtd->priv;
  722. DECLARE_WAITQUEUE(wait, current);
  723. #ifdef CONFIG_MTD_NAND_ECC
  724. int ecc_bytes = (mtd->oobblock == 512) ? 6 : 3;
  725. #endif
  726. /* Calculate total length of data */
  727. total_len = 0;
  728. for (i=0 ; i < count ; i++)
  729. total_len += (int) vecs[i].iov_len;
  730. DEBUG (MTD_DEBUG_LEVEL3,
  731. "nand_writev: to = 0x%08x, len = %in", (unsigned int) to,
  732. (unsigned int) total_len);
  733. /* Do not allow write past end of page */
  734. if ((to + total_len) > mtd->size) {
  735. DEBUG (MTD_DEBUG_LEVEL0,
  736. "nand_writev: Attempted write past end of devicen");
  737. return -EINVAL;
  738. }
  739. retry:
  740. /* Grab the lock and see if the device is available */
  741. spin_lock_bh (&this->chip_lock);
  742. switch (this->state) {
  743. case FL_READY:
  744. this->state = FL_WRITING;
  745. spin_unlock_bh (&this->chip_lock);
  746. break;
  747. default:
  748. set_current_state (TASK_UNINTERRUPTIBLE);
  749. add_wait_queue (&this->wq, &wait);
  750. spin_unlock_bh (&this->chip_lock);
  751. schedule();
  752. remove_wait_queue (&this->wq, &wait);
  753. goto retry;
  754. };
  755. /* Shift to get page */
  756. page = ((int) to) >> this->page_shift;
  757. /* Get the starting column */
  758. col = to & (mtd->oobblock - 1);
  759. /* Initialize return length value */
  760. *retlen = 0;
  761. /* Select the NAND device */
  762. nand_select ();
  763. /* Check the WP bit */
  764. nand_command (mtd, NAND_CMD_STATUS, -1, -1);
  765. if (!(readb (this->IO_ADDR) & 0x80)) {
  766. DEBUG (MTD_DEBUG_LEVEL0,
  767. "nand_writev: Device is write protected!!!n");
  768. nand_deselect ();
  769. spin_lock_bh (&this->chip_lock);
  770. this->state = FL_READY;
  771. wake_up (&this->wq);
  772. spin_unlock_bh (&this->chip_lock);
  773. return -EIO;
  774. }
  775. /* Loop until all iovecs' data has been written */
  776. cnt = col;
  777. len = 0;
  778. while (count) {
  779. /* Do any need pre-fill for partial page programming */
  780. for (i=0 ; i < cnt ; i++)
  781. this->data_buf[i] = 0xff;
  782. /*
  783.  * Read data out of each tuple until we have a full page
  784.  * to write or we've read all the tuples.
  785.  */
  786. while ((cnt < mtd->oobblock) && count) {
  787. this->data_buf[cnt++] =
  788. ((u_char *) vecs->iov_base)[len++];
  789. if (len >= (int) vecs->iov_len) {
  790. vecs++;
  791. len = 0;
  792. count--;
  793. }
  794. }
  795. /* Do any need post-fill for partial page programming */
  796. for (i=cnt ; i < mtd->oobblock ; i++)
  797. this->data_buf[i] = 0xff;
  798. #ifdef CONFIG_MTD_NAND_ECC
  799. /* Zero out the ECC array */
  800. for (i=0 ; i < 6 ; i++)
  801. this->ecc_code_buf[i] = 0x00;
  802. /* Calculate and write the first ECC */
  803. if (col >= mtd->eccsize) {
  804. nand_command (mtd, NAND_CMD_READ0, col, page);
  805. for (i=0 ; i < col ; i++)
  806. this->data_buf[i] = readb (this->IO_ADDR); 
  807. nand_calculate_ecc (&this->data_buf[0],
  808. &(this->ecc_code_buf[0]));
  809. for (i=0 ; i<3 ; i++)
  810. this->data_buf[(mtd->oobblock + i)] =
  811. this->ecc_code_buf[i];
  812. }
  813. /* Calculate and write the second ECC */
  814. if ((mtd->oobblock == 512) && (cnt == mtd->oobblock)) {
  815. nand_calculate_ecc (&this->data_buf[256],
  816. &(this->ecc_code_buf[3]));
  817. for (i=3 ; i<6 ; i++)
  818. this->data_buf[(mtd->oobblock + i)] =
  819. this->ecc_code_buf[i];
  820. }
  821. /* Write ones for partial page programming */
  822. for (i=ecc_bytes ; i < mtd->oobsize ; i++)
  823. this->data_buf[(mtd->oobblock + i)] = 0xff;
  824. #else
  825. /* Write ones for partial page programming */
  826. for (i=mtd->oobblock ; i < (mtd->oobblock + mtd->oobsize) ; i++)
  827. this->data_buf[i] = 0xff;
  828. #endif
  829. /* Send command to begin auto page programming */
  830. nand_command (mtd, NAND_CMD_SEQIN, 0x00, page);
  831. /* Write out complete page of data */
  832. for (i=0 ; i < (mtd->oobblock + mtd->oobsize) ; i++)
  833. writeb (this->data_buf[i], this->IO_ADDR);
  834. /* Send command to actually program the data */
  835. nand_command (mtd, NAND_CMD_PAGEPROG, -1, -1);
  836. /*
  837.  * Wait for program operation to complete. This could
  838.  * take up to 3000us (3ms) on some devices, so we try
  839.  * and exit as quickly as possible.
  840.  */
  841. status = 0;
  842. for (i=0 ; i<24 ; i++) {
  843. /* Delay for 125us */
  844. udelay (125);
  845. /* Check the status */
  846. nand_command (mtd, NAND_CMD_STATUS, -1, -1);
  847. status = (int) readb (this->IO_ADDR);
  848. if (status & 0x40)
  849. break;
  850. }
  851. /* See if device thinks it succeeded */
  852. if (status & 0x01) {
  853. DEBUG (MTD_DEBUG_LEVEL0,
  854. "nand_writev: " 
  855. "Failed write, page 0x%08x, " 
  856. "%6i bytes were succesfuln", page, *retlen);
  857. nand_deselect ();
  858. spin_lock_bh (&this->chip_lock);
  859. this->state = FL_READY;
  860. wake_up (&this->wq);
  861. spin_unlock_bh (&this->chip_lock);
  862. return -EIO;
  863. }
  864. #ifdef CONFIG_MTD_NAND_VERIFY_WRITE
  865. /*
  866.  * The NAND device assumes that it is always writing to
  867.  * a cleanly erased page. Hence, it performs its internal
  868.  * write verification only on bits that transitioned from
  869.  * 1 to 0. The device does NOT verify the whole page on a
  870.  * byte by byte basis. It is possible that the page was
  871.  * not completely erased or the page is becoming unusable
  872.  * due to wear. The read with ECC would catch the error
  873.  * later when the ECC page check fails, but we would rather
  874.  * catch it early in the page write stage. Better to write
  875.  * no data than invalid data.
  876.  */
  877. /* Send command to read back the page */
  878. if (col < mtd->eccsize)
  879. nand_command (mtd, NAND_CMD_READ0, col, page);
  880. else
  881. nand_command (mtd, NAND_CMD_READ1, col - 256, page);
  882. /* Loop through and verify the data */
  883. for (i=col ; i < cnt ; i++) {
  884. if (this->data_buf[i] != readb (this->IO_ADDR)) {
  885. DEBUG (MTD_DEBUG_LEVEL0,
  886. "nand_writev: " 
  887. "Failed write verify, page 0x%08x, " 
  888. "%6i bytes were succesfuln",
  889. page, *retlen);
  890. nand_deselect ();
  891. spin_lock_bh (&this->chip_lock);
  892. this->state = FL_READY;
  893. wake_up (&this->wq);
  894. spin_unlock_bh (&this->chip_lock);
  895. return -EIO;
  896. }
  897. }
  898. #ifdef CONFIG_MTD_NAND_ECC
  899. /*
  900.  * We also want to check that the ECC bytes wrote
  901.  * correctly for the same reasons stated above.
  902.  */
  903. nand_command (mtd, NAND_CMD_READOOB, 0x00, page);
  904. for (i=0 ; i < ecc_bytes ; i++) {
  905. if ((readb (this->IO_ADDR) != this->ecc_code_buf[i]) &&
  906. this->ecc_code_buf[i]) {
  907. DEBUG (MTD_DEBUG_LEVEL0,
  908. "nand_writev: Failed ECC write " 
  909. "verify, page 0x%08x, " 
  910. "%6i bytes were succesfuln",
  911. page, i);
  912. nand_deselect ();
  913. spin_lock_bh (&this->chip_lock);
  914. this->state = FL_READY;
  915. wake_up (&this->wq);
  916. spin_unlock_bh (&this->chip_lock);
  917. return -EIO;
  918. }
  919. }
  920. #endif
  921. #endif
  922. /* Update written bytes count */
  923. *retlen += (cnt - col);
  924. /* Reset written byte counter and column */
  925. col = cnt = 0;
  926. /* Increment page address */
  927. page++;
  928. }
  929. /* De-select the NAND device */
  930. nand_deselect ();
  931. /* Wake up anyone waiting on the device */
  932. spin_lock_bh (&this->chip_lock);
  933. this->state = FL_READY;
  934. wake_up (&this->wq);
  935. spin_unlock_bh (&this->chip_lock);
  936. /* Return happy */
  937. return 0;
  938. }
  939. /*
  940.  * NAND erase a block
  941.  */
  942. static int nand_erase (struct mtd_info *mtd, struct erase_info *instr)
  943. {
  944. int i, page, len, status, pages_per_block;
  945. struct nand_chip *this = mtd->priv;
  946. DECLARE_WAITQUEUE(wait, current);
  947. DEBUG (MTD_DEBUG_LEVEL3,
  948. "nand_erase: start = 0x%08x, len = %in",
  949. (unsigned int) instr->addr, (unsigned int) instr->len);
  950. /* Start address must align on block boundary */
  951. if (instr->addr & (mtd->erasesize - 1)) {
  952. DEBUG (MTD_DEBUG_LEVEL0,
  953. "nand_erase: Unaligned addressn");
  954. return -EINVAL;
  955. }
  956. /* Length must align on block boundary */
  957. if (instr->len & (mtd->erasesize - 1)) {
  958. DEBUG (MTD_DEBUG_LEVEL0,
  959. "nand_erase: Length not block alignedn");
  960. return -EINVAL;
  961. }
  962. /* Do not allow erase past end of device */
  963. if ((instr->len + instr->addr) > mtd->size) {
  964. DEBUG (MTD_DEBUG_LEVEL0,
  965. "nand_erase: Erase past end of devicen");
  966. return -EINVAL;
  967. }
  968. retry:
  969. /* Grab the lock and see if the device is available */
  970. spin_lock_bh (&this->chip_lock);
  971. switch (this->state) {
  972. case FL_READY:
  973. this->state = FL_ERASING;
  974. break;
  975. default:
  976. set_current_state (TASK_UNINTERRUPTIBLE);
  977. add_wait_queue (&this->wq, &wait);
  978. spin_unlock_bh (&this->chip_lock);
  979. schedule();
  980. remove_wait_queue (&this->wq, &wait);
  981. goto retry;
  982. };
  983. /* Shift to get first page */
  984. page = (int) (instr->addr >> this->page_shift);
  985. /* Calculate pages in each block */
  986. pages_per_block = mtd->erasesize / mtd->oobblock;
  987. /* Select the NAND device */
  988. nand_select ();
  989. /* Check the WP bit */
  990. nand_command (mtd, NAND_CMD_STATUS, -1, -1);
  991. if (!(readb (this->IO_ADDR) & 0x80)) {
  992. DEBUG (MTD_DEBUG_LEVEL0,
  993. "nand_erase: Device is write protected!!!n");
  994. nand_deselect ();
  995. this->state = FL_READY;
  996. spin_unlock_bh (&this->chip_lock);
  997. return -EIO;
  998. }
  999. /* Loop through the pages */
  1000. len = instr->len;
  1001. while (len) {
  1002. /* Send commands to erase a page */
  1003. nand_command(mtd, NAND_CMD_ERASE1, -1, page);
  1004. nand_command(mtd, NAND_CMD_ERASE2, -1, -1);
  1005. /*
  1006.  * Wait for program operation to complete. This could
  1007.  * take up to 4000us (4ms) on some devices, so we try
  1008.  * and exit as quickly as possible.
  1009.  */
  1010. status = 0;
  1011. for (i=0 ; i<32 ; i++) {
  1012. /* Delay for 125us */
  1013. udelay (125);
  1014. /* Check the status */
  1015. nand_command (mtd, NAND_CMD_STATUS, -1, -1);
  1016. status = (int) readb (this->IO_ADDR);
  1017. if (status & 0x40)
  1018. break;
  1019. }
  1020. /* See if block erase succeeded */
  1021. if (status & 0x01) {
  1022. DEBUG (MTD_DEBUG_LEVEL0,
  1023. "nand_erase: " 
  1024. "Failed erase, page 0x%08xn", page);
  1025. nand_deselect ();
  1026. this->state = FL_READY;
  1027. spin_unlock_bh (&this->chip_lock);
  1028. return -EIO;
  1029. }
  1030. /* Increment page address and decrement length */
  1031. len -= mtd->erasesize;
  1032. page += pages_per_block;
  1033. /* Release the spin lock */
  1034. spin_unlock_bh (&this->chip_lock);
  1035. erase_retry:
  1036. /* Check the state and sleep if it changed */
  1037. spin_lock_bh (&this->chip_lock);
  1038. if (this->state == FL_ERASING) {
  1039. continue;
  1040. }
  1041. else {
  1042. set_current_state (TASK_UNINTERRUPTIBLE);
  1043. add_wait_queue (&this->wq, &wait);
  1044. spin_unlock_bh (&this->chip_lock);
  1045. schedule();
  1046. remove_wait_queue (&this->wq, &wait);
  1047. goto erase_retry;
  1048. }
  1049. }
  1050. spin_unlock_bh (&this->chip_lock);
  1051. /* De-select the NAND device */
  1052. nand_deselect ();
  1053. /* Do call back function */
  1054. if (instr->callback)
  1055. instr->callback (instr);
  1056. /* The device is ready */
  1057. spin_lock_bh (&this->chip_lock);
  1058. this->state = FL_READY;
  1059. spin_unlock_bh (&this->chip_lock);
  1060. /* Return happy */
  1061. return 0;
  1062. }
  1063. /*
  1064.  * NAND sync
  1065.  */
  1066. static void nand_sync (struct mtd_info *mtd)
  1067. {
  1068. struct nand_chip *this = mtd->priv;
  1069. DECLARE_WAITQUEUE(wait, current);
  1070. DEBUG (MTD_DEBUG_LEVEL3, "nand_sync: calledn");
  1071. retry:
  1072. /* Grab the spinlock */
  1073. spin_lock_bh(&this->chip_lock);
  1074. /* See what's going on */
  1075. switch(this->state) {
  1076. case FL_READY:
  1077. case FL_SYNCING:
  1078. this->state = FL_SYNCING;
  1079. spin_unlock_bh (&this->chip_lock);
  1080. break;
  1081. default:
  1082. /* Not an idle state */
  1083. add_wait_queue (&this->wq, &wait);
  1084. spin_unlock_bh (&this->chip_lock);
  1085. schedule ();
  1086. remove_wait_queue (&this->wq, &wait);
  1087. goto retry;
  1088. }
  1089.         /* Lock the device */
  1090. spin_lock_bh (&this->chip_lock);
  1091. /* Set the device to be ready again */
  1092. if (this->state == FL_SYNCING) {
  1093. this->state = FL_READY;
  1094. wake_up (&this->wq);
  1095. }
  1096.         /* Unlock the device */
  1097. spin_unlock_bh (&this->chip_lock);
  1098. }
  1099. /*
  1100.  * Scan for the NAND device
  1101.  */
  1102. int nand_scan (struct mtd_info *mtd)
  1103. {
  1104. int i, nand_maf_id, nand_dev_id;
  1105. struct nand_chip *this = mtd->priv;
  1106. /* Select the device */
  1107. nand_select ();
  1108. /* Send the command for reading device ID */
  1109. nand_command (mtd, NAND_CMD_READID, 0x00, -1);
  1110. /* Read manufacturer and device IDs */
  1111. nand_maf_id = readb (this->IO_ADDR);
  1112. nand_dev_id = readb (this->IO_ADDR);
  1113. /* Print and store flash device information */
  1114. for (i = 0; nand_flash_ids[i].name != NULL; i++) {
  1115. if (nand_maf_id == nand_flash_ids[i].manufacture_id &&
  1116.     nand_dev_id == nand_flash_ids[i].model_id) {
  1117. if (!mtd->size) {
  1118. mtd->name = nand_flash_ids[i].name;
  1119. mtd->erasesize = nand_flash_ids[i].erasesize;
  1120. mtd->size = (1 << nand_flash_ids[i].chipshift);
  1121. mtd->eccsize = 256;
  1122. if (nand_flash_ids[i].page256) {
  1123. mtd->oobblock = 256;
  1124. mtd->oobsize = 8;
  1125. this->page_shift = 8;
  1126. }
  1127. else {
  1128. mtd->oobblock = 512;
  1129. mtd->oobsize = 16;
  1130. this->page_shift = 9;
  1131. }
  1132. }
  1133. printk (KERN_INFO "NAND device: Manufacture ID:" 
  1134. " 0x%02x, Chip ID: 0x%02x (%s)n",
  1135.        nand_maf_id, nand_dev_id, mtd->name);
  1136. break;
  1137. }
  1138. }
  1139. /* Initialize state and spinlock */
  1140. this->state = FL_READY;
  1141. spin_lock_init(&this->chip_lock);
  1142. /* De-select the device */
  1143. nand_deselect ();
  1144. /* Print warning message for no device */
  1145. if (!mtd->size) {
  1146. printk (KERN_WARNING "No NAND device found!!!n");
  1147. return 1;
  1148. }
  1149. /* Fill in remaining MTD driver data */
  1150. mtd->type = MTD_NANDFLASH;
  1151. mtd->flags = MTD_CAP_NANDFLASH | MTD_ECC;
  1152. mtd->module = THIS_MODULE;
  1153. mtd->ecctype = MTD_ECC_SW;
  1154. mtd->erase = nand_erase;
  1155. mtd->point = NULL;
  1156. mtd->unpoint = NULL;
  1157. mtd->read = nand_read;
  1158. mtd->write = nand_write;
  1159. mtd->read_ecc = nand_read_ecc;
  1160. mtd->write_ecc = nand_write_ecc;
  1161. mtd->read_oob = nand_read_oob;
  1162. mtd->write_oob = nand_write_oob;
  1163. mtd->readv = NULL;
  1164. mtd->writev = nand_writev;
  1165. mtd->sync = nand_sync;
  1166. mtd->lock = NULL;
  1167. mtd->unlock = NULL;
  1168. mtd->suspend = NULL;
  1169. mtd->resume = NULL;
  1170. /* Return happy */
  1171. return 0;
  1172. }
  1173. EXPORT_SYMBOL(nand_scan);
  1174. MODULE_LICENSE("GPL");
  1175. MODULE_AUTHOR("Steven J. Hill <sjhill@cotw.com");
  1176. MODULE_DESCRIPTION("Generic NAND flash driver code");