73938c88271a758fbf193b14389c9c4e7a8c3568
[10.03/openwrt.git] / target / linux / ubicom32 / files / drivers / mtd / devices / nand-spi-er.c
1 /*
2  * Micron SPI-ER NAND Flash Memory
3  *
4  * (C) Copyright 2009, Ubicom, Inc.
5  *
6  * This file is part of the Ubicom32 Linux Kernel Port.
7  *
8  * The Ubicom32 Linux Kernel Port is free software: you can redistribute
9  * it and/or modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation, either version 2 of the
11  * License, or (at your option) any later version.
12  *
13  * The Ubicom32 Linux Kernel Port is distributed in the hope that it
14  * will be useful, but WITHOUT ANY WARRANTY; without even the implied
15  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
16  * the GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with the Ubicom32 Linux Kernel Port.  If not,
20  * see <http://www.gnu.org/licenses/>.
21 */
22 #include <linux/module.h>
23 #include <linux/init.h>
24 #include <linux/slab.h>
25 #include <linux/delay.h>
26 #include <linux/device.h>
27 #include <linux/mutex.h>
28 #include <linux/err.h>
29
30 #include <linux/spi/spi.h>
31 #include <linux/spi/flash.h>
32
33 #include <linux/mtd/mtd.h>
34 #include <linux/mtd/partitions.h>
35
36 #define NAND_SPI_ER_BLOCK_FROM_ROW(row)         (row >> 6)
37
38 #define NAND_SPI_ER_STATUS_P_FAIL               (1 << 3)
39 #define NAND_SPI_ER_STATUS_E_FAIL               (1 << 2)
40 #define NAND_SPI_ER_STATUS_OIP                  (1 << 0)
41
42 #define NAND_SPI_ER_LAST_ROW_INVALID            0xFFFFFFFF
43 #define NAND_SPI_ER_BAD_BLOCK_MARK_OFFSET       0x08
44
45 struct nand_spi_er_device {
46         const char              *name;
47
48         uint8_t                 id0;
49         uint8_t                 id1;
50
51         unsigned int            blocks;
52         unsigned int            pages_per_block;
53         unsigned int            page_size;
54         unsigned int            write_size;
55         unsigned int            erase_size;
56 };
57
58 struct nand_spi_er {
59         char                            name[24];
60
61         const struct nand_spi_er_device *device;
62
63         struct mutex                    lock;
64         struct spi_device               *spi;
65
66         struct mtd_info                 mtd;
67
68         unsigned int                    last_row;       /* the last row we fetched */
69
70         /*
71          * Bad block table (MUST be last in strcuture)
72          */
73         unsigned long                   nbb;
74         unsigned long                   bbt[0];
75 };
76
77 const struct nand_spi_er_device nand_spi_er_devices[] = {
78         {
79                 name:                   "MT29F1G01ZDC",
80                 id0:                    0x2C,
81                 id1:                    0x12,
82                 blocks:                 1024,
83                 pages_per_block:        64,
84                 page_size:              2048,
85                 write_size:             512,
86                 erase_size:             64 * 2048,
87         },
88         {
89                 name:                   "MT29F1G01ZDC",
90                 id0:                    0x2C,
91                 id1:                    0x13,
92                 blocks:                 1024,
93                 pages_per_block:        64,
94                 page_size:              2048,
95                 write_size:             512,
96                 erase_size:             64 * 2048,
97         },
98 };
99
100 static int read_only = 0;
101 module_param(read_only, int, 0);
102 MODULE_PARM_DESC(read_only, "Leave device locked");
103
104 /*
105  * nand_spi_er_get_feature
106  *      Get Feature register
107  */
108 static int nand_spi_er_get_feature(struct nand_spi_er *chip, int reg, uint8_t *data)
109 {
110         uint8_t txbuf[2];
111         uint8_t rxbuf[1];
112         int res;
113
114         txbuf[0] = 0x0F;
115         txbuf[1] = reg;
116         res = spi_write_then_read(chip->spi, txbuf, 2, rxbuf, 1);
117         if (res) {
118                 DEBUG(MTD_DEBUG_LEVEL1, "%s: failed get feature res=%d\n", chip->name, res);
119                 return res;
120         }
121         *data = rxbuf[0];
122         return 0;
123 }
124
125 /*
126  * nand_spi_er_busywait
127  *      Wait until the chip is not busy
128  */
129 static int nand_spi_er_busywait(struct nand_spi_er *chip, uint8_t *data)
130 {
131         int i;
132
133         for (i = 0; i < 100; i++) {
134                 int res = nand_spi_er_get_feature(chip, 0xC0, data);
135                 if (res) {
136                         return res;
137                 }
138                 if (!(*data & NAND_SPI_ER_STATUS_OIP)) {
139                         break;
140                 }
141         }
142
143         return 0;
144 }
145
146 /*
147  * nand_spi_er_erase
148  *      Erase a block, parameters must be block aligned
149  */
150 static int nand_spi_er_erase(struct mtd_info *mtd, struct erase_info *instr)
151 {
152         struct nand_spi_er *chip = mtd->priv;
153         struct spi_device *spi = chip->spi;
154         uint8_t txbuf[4];
155         int res;
156
157         DEBUG(MTD_DEBUG_LEVEL3, "%s: erase addr:%x len:%x\n", chip->name, instr->addr, instr->len);
158
159         if ((instr->addr + instr->len) > mtd->size) {
160                 return -EINVAL;
161         }
162
163         if (instr->addr & (chip->device->erase_size - 1)) {
164                 DEBUG(MTD_DEBUG_LEVEL1, "%s: erase address is not aligned %x\n", chip->name, instr->addr);
165                 return -EINVAL;
166         }
167
168         if (instr->len & (chip->device->erase_size - 1)) {
169                 DEBUG(MTD_DEBUG_LEVEL1, "%s: erase len is not aligned %x\n", chip->name, instr->len);
170                 return -EINVAL;
171         }
172
173         mutex_lock(&chip->lock);
174         chip->last_row = NAND_SPI_ER_LAST_ROW_INVALID;
175
176         while (instr->len) {
177                 uint32_t block = instr->addr >> 17;
178                 uint32_t row = block << 6;
179                 uint8_t stat;
180                 DEBUG(MTD_DEBUG_LEVEL3, "%s: block erase row:%x block:%x addr:%x rem:%x\n", chip->name, row, block, instr->addr, instr->len);
181
182                 /*
183                  * Write enable
184                  */
185                 txbuf[0] = 0x06;
186                 res = spi_write(spi, txbuf, 1);
187                 if (res) {
188                         DEBUG(MTD_DEBUG_LEVEL1, "%s: failed write enable res=%d\n", chip->name, res);
189                         mutex_unlock(&chip->lock);
190                         return res;
191                 }
192
193                 /*
194                  * Test for bad block
195                  */
196                 if (test_bit(block, chip->bbt)) {
197                         instr->fail_addr = block << 17;
198                         instr->state = MTD_ERASE_FAILED;
199                         res = -EBADMSG;
200                         goto done;
201                 }
202
203                 /*
204                  * Block erase
205                  */
206                 txbuf[0] = 0xD8;
207                 txbuf[1] = 0x00;
208                 txbuf[2] = row >> 8;
209                 txbuf[3] = row & 0xFF;
210                 res = spi_write(spi, txbuf, 4);
211                 if (res) {
212                         DEBUG(MTD_DEBUG_LEVEL1, "%s: failed block erase res=%d\n", chip->name, res);
213                         instr->fail_addr = block << 17;
214                         instr->state = MTD_ERASE_FAILED;
215                         goto done;
216                 }
217
218                 /*
219                  * Wait
220                  */
221                 res = nand_spi_er_busywait(chip, &stat);
222                 if (res || (stat & NAND_SPI_ER_STATUS_OIP)) {
223                         instr->fail_addr = block << 17;
224                         instr->state = MTD_ERASE_FAILED;
225                         DEBUG(MTD_DEBUG_LEVEL1, "%s: chip is busy or nonresponsive res=%d stat=%02x\n", chip->name, res, stat);
226                         if (res) {
227                                 goto done;
228                         }
229
230                         /*
231                          * Chip is stuck?
232                          */
233                         res = -EIO;
234                         goto done;
235                 }
236
237                 /*
238                  * Check the status register
239                  */
240                 if (stat & NAND_SPI_ER_STATUS_E_FAIL) {
241                         DEBUG(MTD_DEBUG_LEVEL1, "%s: E_FAIL signalled (%02x)\n", chip->name, stat);
242                         instr->fail_addr = block << 17;
243                         instr->state = MTD_ERASE_FAILED;
244                         goto done;
245                 }
246
247                 /*
248                  * Next
249                  */
250                 block++;
251                 instr->len -= chip->device->erase_size;
252                 instr->addr += chip->device->erase_size;
253         }
254
255         instr->state = MTD_ERASE_DONE;
256
257         mutex_unlock(&chip->lock);
258         return 0;
259
260 done:
261         /*
262          * Write disable
263          */
264         txbuf[0] = 0x04;
265         res = spi_write(spi, txbuf, 1);
266         if (res) {
267                 DEBUG(MTD_DEBUG_LEVEL1, "%s: failed write disable res=%d\n", chip->name, res);
268         }
269
270         mutex_unlock(&chip->lock);
271
272         mtd_erase_callback(instr);
273         return 0;
274 }
275
276 /*
277  * nand_spi_er_read
278  *
279  * return -EUCLEAN: ecc error recovered
280  * return -EBADMSG: ecc error not recovered
281 */
282 static int nand_spi_er_read(struct mtd_info *mtd, loff_t from, size_t len,
283                                size_t *retlen, u_char *buf)
284 {
285         struct nand_spi_er *chip = mtd->priv;
286         struct spi_device *spi = chip->spi;
287
288         uint32_t row;
289         uint32_t column;
290         int retval = 0;
291
292         *retlen = 0;
293         DEBUG(MTD_DEBUG_LEVEL2, "%s: read block from %llx len %d into %p\n", chip->name, from, len, buf);
294
295         /*
296          * Zero length reads, nothing to do
297          */
298         if (len == 0) {
299                 return 0;
300         }
301
302         /*
303          * Reject reads which go over the end of the flash
304          */
305         if ((from + len) > mtd->size) {
306                 return -EINVAL;
307         }
308
309         /*
310          * Get the row and column address to start at
311          */
312         row = from >> 11;
313         column = from & 0x7FF;
314         DEBUG(MTD_DEBUG_LEVEL3, "%s: row=%x %d column=%x %d last_row=%x %d\n", chip->name, row, row, column, column, chip->last_row, chip->last_row);
315
316         /*
317          * Read the data from the chip
318          */
319         mutex_lock(&chip->lock);
320         while (len) {
321                 uint8_t stat;
322                 uint8_t txbuf[4];
323                 struct spi_message message;
324                 struct spi_transfer x[2];
325                 int res;
326                 size_t toread;
327
328                 /*
329                  * Figure out how much to read
330                  *
331                  * If we are reading from the middle of a page then the most we
332                  * can read is to the end of the page
333                  */
334                 toread = len;
335                 if (toread > (chip->device->page_size - column)) {
336                         toread = chip->device->page_size - column;
337                 }
338
339                 DEBUG(MTD_DEBUG_LEVEL3, "%s: buf=%p toread=%x row=%x column=%x last_row=%x\n", chip->name, buf, toread, row, column, chip->last_row);
340
341                 if (chip->last_row != row) {
342                         /*
343                          * Check if the block is bad
344                          */
345                         if (test_bit(NAND_SPI_ER_BLOCK_FROM_ROW(row), chip->bbt)) {
346                                 mutex_unlock(&chip->lock);
347                                 return -EBADMSG;
348                         }
349
350                         /*
351                          * Load the appropriate page
352                          */
353                         txbuf[0] = 0x13;
354                         txbuf[1] = 0x00;
355                         txbuf[2] = row >> 8;
356                         txbuf[3] = row & 0xFF;
357                         res = spi_write(spi, txbuf, 4);
358                         if (res) {
359                                 DEBUG(MTD_DEBUG_LEVEL1, "%s: failed page load res=%d\n", chip->name, res);
360                                 mutex_unlock(&chip->lock);
361                                 return res;
362                         }
363
364                         /*
365                          * Wait
366                          */
367                         res = nand_spi_er_busywait(chip, &stat);
368                         if (res || (stat & NAND_SPI_ER_STATUS_OIP)) {
369                                 DEBUG(MTD_DEBUG_LEVEL1, "%s: chip is busy or nonresponsive res=%d stat=%02x\n", chip->name, res, stat);
370                                 if (res) {
371                                         mutex_unlock(&chip->lock);
372                                         return res;
373                                 }
374
375                                 /*
376                                  * Chip is stuck?
377                                  */
378                                 mutex_unlock(&chip->lock);
379                                 return -EIO;
380                         }
381
382                         /*
383                          * Check the ECC bits
384                          */
385                         stat >>= 4;
386                         if (stat == 1) {
387                                 DEBUG(MTD_DEBUG_LEVEL1, "%s: ECC recovered, row=%x\n", chip->name, row);
388                                 retval = -EUCLEAN;
389                         }
390                         if (stat == 2) {
391                                 DEBUG(MTD_DEBUG_LEVEL0, "%s: failed ECC, row=%x\n", chip->name, row);
392                                 chip->last_row = NAND_SPI_ER_LAST_ROW_INVALID;
393                                 mutex_unlock(&chip->lock);
394                                 return -EBADMSG;
395                         }
396
397                 }
398
399                 chip->last_row = row;
400
401                 /*
402                  * Read out the data
403                  */
404                 spi_message_init(&message);
405                 memset(x, 0, sizeof(x));
406
407                 txbuf[0] = 0x03;
408                 txbuf[1] = column >> 8;
409                 txbuf[2] = column & 0xFF;
410                 txbuf[3] = 0;
411                 x[0].tx_buf = txbuf;
412                 x[0].len = 4;
413                 spi_message_add_tail(&x[0], &message);
414
415                 x[1].rx_buf = buf;
416                 x[1].len = toread;
417                 spi_message_add_tail(&x[1], &message);
418
419                 res = spi_sync(spi, &message);
420                 if (res) {
421                         DEBUG(MTD_DEBUG_LEVEL1, "%s: failed data read res=%d\n", chip->name, res);
422                         mutex_unlock(&chip->lock);
423                         return res;
424                 }
425                 buf += toread;
426                 len -= toread;
427                 *retlen += toread;
428
429                 /*
430                  * For the next page, increment the row and always start at column 0
431                  */
432                 column = 0;
433                 row++;
434         }
435
436         mutex_unlock(&chip->lock);
437         return retval;
438 }
439
440 /*
441  * nand_spi_er_write
442  */
443 #define NOT_ALIGNED(x) ((x & (device->write_size - 1)) != 0)
444 static int nand_spi_er_write(struct mtd_info *mtd, loff_t to, size_t len,
445                                 size_t *retlen, const u_char *buf)
446 {
447         struct nand_spi_er *chip = mtd->priv;
448         struct spi_device *spi = chip->spi;
449         const struct nand_spi_er_device *device = chip->device;
450         uint32_t row;
451         uint32_t col;
452         uint8_t txbuf[4];
453         int res;
454         size_t towrite;
455
456         DEBUG(MTD_DEBUG_LEVEL2, "%s: write block to %llx len %d from %p\n", chip->name, to, len, buf);
457
458         *retlen = 0;
459
460         /*
461          * nothing to write
462          */
463         if (!len) {
464                 return 0;
465         }
466
467         /*
468          * Reject writes which go over the end of the flash
469          */
470         if ((to + len) > mtd->size) {
471                 return -EINVAL;
472         }
473
474         /*
475          * Check to see if everything is page aligned
476          */
477         if (NOT_ALIGNED(to) || NOT_ALIGNED(len)) {
478                 printk(KERN_NOTICE "nand_spi_er_write: Attempt to write non page aligned data\n");
479                 return -EINVAL;
480         }
481
482         mutex_lock(&chip->lock);
483         chip->last_row = NAND_SPI_ER_LAST_ROW_INVALID;
484
485         /*
486          * If the first write is a partial write then write at most the number of
487          * bytes to get us page aligned and then the remainder will be
488          * page aligned.  The last bit may be a partial page as well.
489          */
490         col = to & (device->page_size - 1);
491         towrite = device->page_size - col;
492         if (towrite > len) {
493                 towrite = len;
494         }
495
496         /*
497          * Write the data
498          */
499         row = to >> 11;
500         while (len) {
501                 struct spi_message message;
502                 struct spi_transfer x[2];
503                 uint8_t stat;
504
505                 DEBUG(MTD_DEBUG_LEVEL3, "%s: write %p to row:%x col:%x len:%x rem:%x\n", chip->name, buf, row, col, towrite, len);
506
507                 /*
508                  * Write enable
509                  */
510                 txbuf[0] = 0x06;
511                 res = spi_write(spi, txbuf, 1);
512                 if (res) {
513                         DEBUG(MTD_DEBUG_LEVEL1, "%s: failed write enable res=%d\n", chip->name, res);
514                         mutex_unlock(&chip->lock);
515                         return res;
516                 }
517
518                 /*
519                  * Write the data into the cache
520                  */
521                 spi_message_init(&message);
522                 memset(x, 0, sizeof(x));
523                 txbuf[0] = 0x02;
524                 txbuf[1] = col >> 8;
525                 txbuf[2] = col & 0xFF;
526                 x[0].tx_buf = txbuf;
527                 x[0].len = 3;
528                 spi_message_add_tail(&x[0], &message);
529                 x[1].tx_buf = buf;
530                 x[1].len = towrite;
531                 spi_message_add_tail(&x[1], &message);
532                 res = spi_sync(spi, &message);
533                 if (res) {
534                         DEBUG(MTD_DEBUG_LEVEL1, "%s: failed cache write res=%d\n", chip->name, res);
535                         goto done;
536                 }
537
538                 /*
539                  * Program execute
540                  */
541                 txbuf[0] = 0x10;
542                 txbuf[1] = 0x00;
543                 txbuf[2] = row >> 8;
544                 txbuf[3] = row & 0xFF;
545                 res = spi_write(spi, txbuf, 4);
546                 if (res) {
547                         DEBUG(MTD_DEBUG_LEVEL1, "%s: failed prog execute res=%d\n", chip->name, res);
548                         goto done;
549                 }
550
551                 /*
552                  * Wait
553                  */
554                 res = nand_spi_er_busywait(chip, &stat);
555                 if (res || (stat & NAND_SPI_ER_STATUS_OIP)) {
556                         DEBUG(MTD_DEBUG_LEVEL1, "%s: chip is busy or nonresponsive res=%d stat=%02x\n", chip->name, res, stat);
557                         if (res) {
558                                 goto done;
559                         }
560
561                         /*
562                          * Chip is stuck?
563                          */
564                         res = -EIO;
565                         goto done;
566                 }
567
568                 if (stat & (1 << 3)) {
569                         res = -EBADMSG;
570                         goto done;
571                 }
572
573                 row++;
574                 buf += towrite;
575                 len -= towrite;
576                 *retlen += towrite;
577
578                 /*
579                  * At this point, we are always page aligned so start at column 0.
580                  * Note we may not have a full page to write at the end, hence the
581                  * check if towrite > len.
582                  */
583                 col = 0;
584                 towrite = device->page_size;
585                 if (towrite > len) {
586                         towrite = len;
587                 }
588         }
589
590         mutex_unlock(&chip->lock);
591         return res;
592
593 done:
594         /*
595          * Write disable
596          */
597         txbuf[0] = 0x04;
598         res = spi_write(spi, txbuf, 1);
599         if (res) {
600                 DEBUG(MTD_DEBUG_LEVEL1, "%s: failed write disable res=%d\n", chip->name, res);
601         }
602
603         mutex_unlock(&chip->lock);
604
605         return res;
606 }
607
608 /*
609  * nand_spi_er_isbad
610  */
611 static int nand_spi_er_isbad(struct mtd_info *mtd, loff_t ofs)
612 {
613         struct nand_spi_er *chip = mtd->priv;
614         uint32_t block;
615
616         if (ofs & (chip->device->erase_size - 1)) {
617                 DEBUG(MTD_DEBUG_LEVEL1, "%s: address not aligned %llx\n", chip->name, ofs);
618                 return -EINVAL;
619         }
620
621         block = ofs >> 17;
622
623         return test_bit(block, chip->bbt);
624 }
625
626 /*
627  * nand_spi_er_markbad
628  */
629 static int nand_spi_er_markbad(struct mtd_info *mtd, loff_t ofs)
630 {
631         struct nand_spi_er *chip = mtd->priv;
632         struct spi_device *spi = chip->spi;
633         uint32_t block;
634         uint32_t row;
635         uint8_t txbuf[7];
636         int res;
637         uint8_t stat;
638
639         if (ofs & (chip->device->erase_size - 1)) {
640                 DEBUG(MTD_DEBUG_LEVEL1, "%s: address not aligned %llx\n", chip->name, ofs);
641                 return -EINVAL;
642         }
643
644         block = ofs >> 17;
645
646         /*
647          * If it's already marked bad, no need to mark it
648          */
649         if (test_bit(block, chip->bbt)) {
650                 return 0;
651         }
652
653         /*
654          * Mark it in our cache
655          */
656         __set_bit(block, chip->bbt);
657
658         /*
659          * Write the user bad block mark.  If it fails, then we really
660          * can't do anything about it.
661          */
662         mutex_lock(&chip->lock);
663         chip->last_row = NAND_SPI_ER_LAST_ROW_INVALID;
664
665         /*
666          * Write enable
667          */
668         txbuf[0] = 0x06;
669         res = spi_write(spi, txbuf, 1);
670         if (res) {
671                 DEBUG(MTD_DEBUG_LEVEL1, "%s: failed write enable res=%d\n", chip->name, res);
672                 mutex_unlock(&chip->lock);
673                 return res;
674         }
675
676         /*
677          * Write the mark
678          */
679         txbuf[0] = 0x84;
680         txbuf[1] = 0x08;
681         txbuf[2] = NAND_SPI_ER_BAD_BLOCK_MARK_OFFSET;
682         txbuf[3] = 0xde;
683         txbuf[4] = 0xad;
684         txbuf[5] = 0xbe;
685         txbuf[6] = 0xef;
686         res = spi_write(spi, txbuf, 7);
687         if (res) {
688                 DEBUG(MTD_DEBUG_LEVEL1, "%s: failed write mark res=%d\n", chip->name, res);
689                 goto done;
690         }
691
692         /*
693          * Program execute
694          */
695         row = ofs >> 11;
696         txbuf[0] = 0x10;
697         txbuf[1] = 0x00;
698         txbuf[2] = row >> 8;
699         txbuf[3] = row & 0xFF;
700         res = spi_write(spi, txbuf, 4);
701         if (res) {
702                 DEBUG(MTD_DEBUG_LEVEL1, "%s: failed program execute res=%d\n", chip->name, res);
703                 goto done;
704         }
705
706         /*
707          * Wait
708          */
709         res = nand_spi_er_busywait(chip, &stat);
710         if (res || (stat & NAND_SPI_ER_STATUS_OIP)) {
711                 DEBUG(MTD_DEBUG_LEVEL1, "%s: chip is busy or nonresponsive res=%d stat=%02x\n", chip->name, res, stat);
712                 if (res) {
713                         goto done;
714                 }
715
716                 /*
717                  * Chip is stuck?
718                  */
719                 res = -EIO;
720                 goto done;
721         }
722
723         if (stat & (1 << 3)) {
724                 res = -EBADMSG;
725         }
726
727 done:
728         /*
729          * Write disable
730          */
731         txbuf[0] = 0x04;
732         res = spi_write(spi, txbuf, 1);
733         if (res) {
734                 DEBUG(MTD_DEBUG_LEVEL1, "%s: failed write disable res=%d\n", chip->name, res);
735         }
736
737         mutex_unlock(&chip->lock);
738
739         return res;
740 }
741
742 /*
743  * nand_spi_er_read_bbt
744  */
745 static int nand_spi_er_read_bbt(struct nand_spi_er *chip)
746 {
747         int j;
748         for (j = 0; j < chip->device->blocks; j++) {
749                 uint8_t txbuf[4];
750                 uint8_t rxbuf[16];
751                 uint32_t bbmark;
752                 int res;
753                 unsigned short row = j << 6;
754                 uint8_t stat;
755
756                 /*
757                  * Read Page
758                  */
759                 txbuf[0] = 0x13;
760                 txbuf[1] = 0x00;
761                 txbuf[2] = row >> 8;
762                 txbuf[3] = row & 0xFF;
763                 res = spi_write(chip->spi, txbuf, 4);
764                 if (res) {
765                         return res;
766                 }
767
768                 /*
769                  * Wait
770                  */
771                 res = nand_spi_er_busywait(chip, &stat);
772                 if (res || (stat & NAND_SPI_ER_STATUS_OIP)) {
773                         DEBUG(MTD_DEBUG_LEVEL1, "%s: chip is busy or nonresponsive res=%d stat=%02x\n", chip->name, res, stat);
774                         if (res) {
775                                 return res;
776                         }
777
778                         /*
779                          * Chip is stuck?
780                          */
781                         return -EIO;
782                 }
783
784                 /*
785                  * Check factory bad block mark
786                  */
787                 txbuf[0] = 0x03;
788                 txbuf[1] = 0x08;
789                 txbuf[2] = 0x00;
790                 txbuf[3] = 0x00;
791                 res = spi_write_then_read(chip->spi, txbuf, 4, rxbuf, 16);
792                 if (res) {
793                         return res;
794                 }
795                 if (rxbuf[0] != 0xFF) {
796                         chip->nbb++;
797                         __set_bit(j, chip->bbt);
798                         continue;
799                 }
800
801                 memcpy(&bbmark, &rxbuf[8], 4);
802                 if (bbmark == 0xdeadbeef) {
803                         chip->nbb++;
804                         __set_bit(j, chip->bbt);
805                 }
806         }
807
808 #if defined(CONFIG_MTD_DEBUG) && (MTD_DEBUG_LEVEL3 <= CONFIG_MTD_DEBUG_VERBOSE)
809         printk("%s: Bad Block Table:", chip->name);
810         for (j = 0; j < chip->device->blocks; j++) {
811                 if ((j % 64) == 0) {
812                         printk("\n%s: block %03x: ", chip->name, j);
813                 }
814                 printk("%c", test_bit(j, chip->bbt) ? 'X' : '.');
815         }
816         printk("\n%s: Bad Block Numbers: ", chip->name);
817         for (j = 0; j < chip->device->blocks; j++) {
818                 if (test_bit(j, chip->bbt)) {
819                         printk("%x ", j);
820                 }
821         }
822         printk("\n");
823 #endif
824
825         return 0;
826 }
827
828 #ifndef MODULE
829 /*
830  * Called at boot time:
831  *
832  * nand_spi_er=read_only
833  *      if read_only specified then do not unlock device
834  */
835 static int __init nand_spi_er_setup(char *str)
836 {
837         if (str && (strncasecmp(str, "read_only", 9) == 0)) {
838                 read_only = 1;
839         }
840         return 0;
841 }
842
843 __setup("nand_spi_er=", nand_spi_er_setup);
844 #endif
845
846 /*
847  * nand_spi_er_probe
848  *      Detect and initialize nand_spi_er device.
849  */
850 static int __devinit nand_spi_er_probe(struct spi_device *spi)
851 {
852         uint8_t txbuf[3];
853         uint8_t rxbuf[2];
854         int i;
855         int res;
856         size_t bbt_bytes;
857         struct nand_spi_er *chip;
858         const struct nand_spi_er_device *device;
859
860         res = spi_setup(spi);
861         if (res) {
862                 return res;
863         }
864
865         /*
866          * Reset
867          */
868         for (i = 0; i < 2; i++) {
869                 txbuf[0] = 0xFF;
870                 res = spi_write(spi, txbuf, 1);
871                 if (res) {
872                         return res;
873                 }
874                 udelay(250);
875         }
876         udelay(1000);
877
878         /*
879          * Read ID
880          */
881         txbuf[0] = 0x9F;
882         txbuf[1] = 0x00;
883         res = spi_write_then_read(spi, txbuf, 2, rxbuf, 2);
884         if (res) {
885                 return res;
886         }
887
888         device = nand_spi_er_devices;
889         for (i = 0; i < ARRAY_SIZE(nand_spi_er_devices); i++) {
890                 if ((device->id0 == rxbuf[0]) && (device->id1 == rxbuf[1])) {
891                         break;
892                 }
893                 device++;
894         }
895         if (i == ARRAY_SIZE(nand_spi_er_devices)) {
896                 return -ENODEV;
897         }
898
899         /*
900          * Initialize our chip structure
901          */
902         bbt_bytes = DIV_ROUND_UP(device->blocks, BITS_PER_BYTE);
903         chip = kzalloc(sizeof(struct nand_spi_er) + bbt_bytes, GFP_KERNEL);
904         if (!chip) {
905                 return -ENOMEM;
906         }
907         snprintf(chip->name, sizeof(chip->name), "%s.%d.%d", device->name, spi->master->bus_num, spi->chip_select);
908
909         chip->spi = spi;
910         chip->device = device;
911         chip->last_row = NAND_SPI_ER_LAST_ROW_INVALID;
912
913         mutex_init(&chip->lock);
914
915         chip->mtd.type = MTD_NANDFLASH;
916         chip->mtd.flags = MTD_WRITEABLE;
917
918         /*
919          * #blocks * block size * n blocks
920          */
921         chip->mtd.size = device->blocks * device->pages_per_block * device->page_size;
922         chip->mtd.erasesize = device->erase_size;
923
924         /*
925          * 1 page, optionally we can support partial write (512)
926          */
927         chip->mtd.writesize = device->write_size;
928         chip->mtd.name = device->name;
929         chip->mtd.erase = nand_spi_er_erase;
930         chip->mtd.read = nand_spi_er_read;
931         chip->mtd.write = nand_spi_er_write;
932         chip->mtd.block_isbad = nand_spi_er_isbad;
933         chip->mtd.block_markbad = nand_spi_er_markbad;
934         chip->mtd.priv = chip;
935
936         /*
937          * Cache the bad block table
938          */
939         res = nand_spi_er_read_bbt(chip);
940         if (res) {
941                 kfree(chip);
942                 return res;
943         }
944
945         /*
946          * Un/lock the chip
947          */
948         txbuf[0] = 0x1F;
949         txbuf[1] = 0xA0;
950         if (read_only) {
951                 txbuf[2] = 0x38;
952         } else {
953                 txbuf[2] = 0x00;
954         }
955         res = spi_write(spi, txbuf, 3);
956         if (res) {
957                 DEBUG(MTD_DEBUG_LEVEL1, "%s: failed lock operation res=%d\n", chip->name, res);
958                 mutex_unlock(&chip->lock);
959                 return res;
960         }
961
962         spi_set_drvdata(spi, chip);
963
964         printk(KERN_INFO "%s: added device %s size: %u KBytes %u bad blocks %s\n", spi->dev.bus_id, chip->mtd.name, DIV_ROUND_UP(chip->mtd.size, 1024), chip->nbb, read_only ? "[read only]" : "");
965         return add_mtd_device(&chip->mtd);
966 }
967
968 /*
969  * nand_spi_er_remove
970  */
971 static int __devexit nand_spi_er_remove(struct spi_device *spi)
972 {
973         struct nand_spi_er *chip = spi_get_drvdata(spi);
974         int status = 0;
975
976         DEBUG(MTD_DEBUG_LEVEL1, "%s: remove\n", spi->dev.bus_id);
977         status = del_mtd_device(&chip->mtd);
978         if (status == 0)
979                 kfree(chip);
980         return status;
981 }
982
983 static struct spi_driver nand_spi_er_driver = {
984         .driver = {
985                 .name           = "nand-spi-er",
986                 .bus            = &spi_bus_type,
987                 .owner          = THIS_MODULE,
988         },
989
990         .probe          = nand_spi_er_probe,
991         .remove         = __devexit_p(nand_spi_er_remove),
992
993         /* FIXME:  investigate suspend and resume... */
994 };
995
996 /*
997  * nand_spi_er_init
998  */
999 static int __init nand_spi_er_init(void)
1000 {
1001         return spi_register_driver(&nand_spi_er_driver);
1002 }
1003 module_init(nand_spi_er_init);
1004
1005 /*
1006  * nand_spi_er_exit
1007  */
1008 static void __exit nand_spi_er_exit(void)
1009 {
1010         spi_unregister_driver(&nand_spi_er_driver);
1011 }
1012 module_exit(nand_spi_er_exit);
1013
1014
1015 MODULE_LICENSE("GPL");
1016 MODULE_AUTHOR("Patrick Tjin");
1017 MODULE_DESCRIPTION("MTD nand_spi_er driver");