nand.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:33k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

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