2 * Common Flash Interface support:
3 * ST Advanced Architecture Command Set (ID 0x0020)
5 * (C) 2000 Red Hat. GPL'd
7 * 10/10/2000 Nicolas Pitre <nico@fluxnic.net>
8 * - completely revamped method functions so they are aware and
9 * independent of the flash geometry (buswidth, interleave, etc.)
10 * - scalability vs code size is completely set at compile-time
11 * (see include/linux/mtd/cfi.h for selection)
12 * - optimized write buffer method
13 * 06/21/2002 Joern Engel <joern@wh.fh-wedel.de> and others
14 * - modified Intel Command Set 0x0001 to support ST Advanced Architecture
15 * (command set 0x0020)
16 * - added a writev function
17 * 07/13/2005 Joern Engel <joern@wh.fh-wedel.de>
18 * - Plugged memory leak in cfi_staa_writev().
21 #include <linux/module.h>
22 #include <linux/types.h>
23 #include <linux/kernel.h>
24 #include <linux/sched.h>
26 #include <asm/byteorder.h>
28 #include <linux/errno.h>
29 #include <linux/slab.h>
30 #include <linux/delay.h>
31 #include <linux/interrupt.h>
32 #include <linux/mtd/map.h>
33 #include <linux/mtd/cfi.h>
34 #include <linux/mtd/mtd.h>
37 static int cfi_staa_read(struct mtd_info
*, loff_t
, size_t, size_t *, u_char
*);
38 static int cfi_staa_write_buffers(struct mtd_info
*, loff_t
, size_t, size_t *, const u_char
*);
39 static int cfi_staa_writev(struct mtd_info
*mtd
, const struct kvec
*vecs
,
40 unsigned long count
, loff_t to
, size_t *retlen
);
41 static int cfi_staa_erase_varsize(struct mtd_info
*, struct erase_info
*);
42 static void cfi_staa_sync (struct mtd_info
*);
43 static int cfi_staa_lock(struct mtd_info
*mtd
, loff_t ofs
, uint64_t len
);
44 static int cfi_staa_unlock(struct mtd_info
*mtd
, loff_t ofs
, uint64_t len
);
45 static int cfi_staa_suspend (struct mtd_info
*);
46 static void cfi_staa_resume (struct mtd_info
*);
48 static void cfi_staa_destroy(struct mtd_info
*);
50 struct mtd_info
*cfi_cmdset_0020(struct map_info
*, int);
52 static struct mtd_info
*cfi_staa_setup (struct map_info
*);
54 static struct mtd_chip_driver cfi_staa_chipdrv
= {
55 .probe
= NULL
, /* Not usable directly */
56 .destroy
= cfi_staa_destroy
,
57 .name
= "cfi_cmdset_0020",
61 /* #define DEBUG_LOCK_BITS */
62 //#define DEBUG_CFI_FEATURES
64 #ifdef DEBUG_CFI_FEATURES
65 static void cfi_tell_features(struct cfi_pri_intelext
*extp
)
68 printk(" Feature/Command Support: %4.4X\n", extp
->FeatureSupport
);
69 printk(" - Chip Erase: %s\n", extp
->FeatureSupport
&1?"supported":"unsupported");
70 printk(" - Suspend Erase: %s\n", extp
->FeatureSupport
&2?"supported":"unsupported");
71 printk(" - Suspend Program: %s\n", extp
->FeatureSupport
&4?"supported":"unsupported");
72 printk(" - Legacy Lock/Unlock: %s\n", extp
->FeatureSupport
&8?"supported":"unsupported");
73 printk(" - Queued Erase: %s\n", extp
->FeatureSupport
&16?"supported":"unsupported");
74 printk(" - Instant block lock: %s\n", extp
->FeatureSupport
&32?"supported":"unsupported");
75 printk(" - Protection Bits: %s\n", extp
->FeatureSupport
&64?"supported":"unsupported");
76 printk(" - Page-mode read: %s\n", extp
->FeatureSupport
&128?"supported":"unsupported");
77 printk(" - Synchronous read: %s\n", extp
->FeatureSupport
&256?"supported":"unsupported");
78 for (i
=9; i
<32; i
++) {
79 if (extp
->FeatureSupport
& (1<<i
))
80 printk(" - Unknown Bit %X: supported\n", i
);
83 printk(" Supported functions after Suspend: %2.2X\n", extp
->SuspendCmdSupport
);
84 printk(" - Program after Erase Suspend: %s\n", extp
->SuspendCmdSupport
&1?"supported":"unsupported");
86 if (extp
->SuspendCmdSupport
& (1<<i
))
87 printk(" - Unknown Bit %X: supported\n", i
);
90 printk(" Block Status Register Mask: %4.4X\n", extp
->BlkStatusRegMask
);
91 printk(" - Lock Bit Active: %s\n", extp
->BlkStatusRegMask
&1?"yes":"no");
92 printk(" - Valid Bit Active: %s\n", extp
->BlkStatusRegMask
&2?"yes":"no");
93 for (i
=2; i
<16; i
++) {
94 if (extp
->BlkStatusRegMask
& (1<<i
))
95 printk(" - Unknown Bit %X Active: yes\n",i
);
98 printk(" Vcc Logic Supply Optimum Program/Erase Voltage: %d.%d V\n",
99 extp
->VccOptimal
>> 8, extp
->VccOptimal
& 0xf);
100 if (extp
->VppOptimal
)
101 printk(" Vpp Programming Supply Optimum Program/Erase Voltage: %d.%d V\n",
102 extp
->VppOptimal
>> 8, extp
->VppOptimal
& 0xf);
106 /* This routine is made available to other mtd code via
107 * inter_module_register. It must only be accessed through
108 * inter_module_get which will bump the use count of this module. The
109 * addresses passed back in cfi are valid as long as the use count of
110 * this module is non-zero, i.e. between inter_module_get and
111 * inter_module_put. Keith Owens <kaos@ocs.com.au> 29 Oct 2000.
113 struct mtd_info
*cfi_cmdset_0020(struct map_info
*map
, int primary
)
115 struct cfi_private
*cfi
= map
->fldrv_priv
;
120 * It's a real CFI chip, not one for which the probe
121 * routine faked a CFI structure. So we read the feature
124 __u16 adr
= primary
?cfi
->cfiq
->P_ADR
:cfi
->cfiq
->A_ADR
;
125 struct cfi_pri_intelext
*extp
;
127 extp
= (struct cfi_pri_intelext
*)cfi_read_pri(map
, adr
, sizeof(*extp
), "ST Microelectronics");
131 if (extp
->MajorVersion
!= '1' ||
132 (extp
->MinorVersion
< '0' || extp
->MinorVersion
> '3')) {
133 printk(KERN_ERR
" Unknown ST Microelectronics"
134 " Extended Query version %c.%c.\n",
135 extp
->MajorVersion
, extp
->MinorVersion
);
140 /* Do some byteswapping if necessary */
141 extp
->FeatureSupport
= cfi32_to_cpu(map
, extp
->FeatureSupport
);
142 extp
->BlkStatusRegMask
= cfi32_to_cpu(map
,
143 extp
->BlkStatusRegMask
);
145 #ifdef DEBUG_CFI_FEATURES
146 /* Tell the user about it in lots of lovely detail */
147 cfi_tell_features(extp
);
150 /* Install our own private info structure */
151 cfi
->cmdset_priv
= extp
;
154 for (i
=0; i
< cfi
->numchips
; i
++) {
155 cfi
->chips
[i
].word_write_time
= 128;
156 cfi
->chips
[i
].buffer_write_time
= 128;
157 cfi
->chips
[i
].erase_time
= 1024;
158 cfi
->chips
[i
].ref_point_counter
= 0;
159 init_waitqueue_head(&(cfi
->chips
[i
].wq
));
162 return cfi_staa_setup(map
);
164 EXPORT_SYMBOL_GPL(cfi_cmdset_0020
);
166 static struct mtd_info
*cfi_staa_setup(struct map_info
*map
)
168 struct cfi_private
*cfi
= map
->fldrv_priv
;
169 struct mtd_info
*mtd
;
170 unsigned long offset
= 0;
172 unsigned long devsize
= (1<<cfi
->cfiq
->DevSize
) * cfi
->interleave
;
174 mtd
= kzalloc(sizeof(*mtd
), GFP_KERNEL
);
175 //printk(KERN_DEBUG "number of CFI chips: %d\n", cfi->numchips);
178 kfree(cfi
->cmdset_priv
);
183 mtd
->type
= MTD_NORFLASH
;
184 mtd
->size
= devsize
* cfi
->numchips
;
186 mtd
->numeraseregions
= cfi
->cfiq
->NumEraseRegions
* cfi
->numchips
;
187 mtd
->eraseregions
= kmalloc(sizeof(struct mtd_erase_region_info
)
188 * mtd
->numeraseregions
, GFP_KERNEL
);
189 if (!mtd
->eraseregions
) {
190 kfree(cfi
->cmdset_priv
);
195 for (i
=0; i
<cfi
->cfiq
->NumEraseRegions
; i
++) {
196 unsigned long ernum
, ersize
;
197 ersize
= ((cfi
->cfiq
->EraseRegionInfo
[i
] >> 8) & ~0xff) * cfi
->interleave
;
198 ernum
= (cfi
->cfiq
->EraseRegionInfo
[i
] & 0xffff) + 1;
200 if (mtd
->erasesize
< ersize
) {
201 mtd
->erasesize
= ersize
;
203 for (j
=0; j
<cfi
->numchips
; j
++) {
204 mtd
->eraseregions
[(j
*cfi
->cfiq
->NumEraseRegions
)+i
].offset
= (j
*devsize
)+offset
;
205 mtd
->eraseregions
[(j
*cfi
->cfiq
->NumEraseRegions
)+i
].erasesize
= ersize
;
206 mtd
->eraseregions
[(j
*cfi
->cfiq
->NumEraseRegions
)+i
].numblocks
= ernum
;
208 offset
+= (ersize
* ernum
);
211 if (offset
!= devsize
) {
213 printk(KERN_WARNING
"Sum of regions (%lx) != total size of set of interleaved chips (%lx)\n", offset
, devsize
);
214 kfree(mtd
->eraseregions
);
215 kfree(cfi
->cmdset_priv
);
220 for (i
=0; i
<mtd
->numeraseregions
;i
++){
221 printk(KERN_DEBUG
"%d: offset=0x%llx,size=0x%x,blocks=%d\n",
222 i
, (unsigned long long)mtd
->eraseregions
[i
].offset
,
223 mtd
->eraseregions
[i
].erasesize
,
224 mtd
->eraseregions
[i
].numblocks
);
227 /* Also select the correct geometry setup too */
228 mtd
->_erase
= cfi_staa_erase_varsize
;
229 mtd
->_read
= cfi_staa_read
;
230 mtd
->_write
= cfi_staa_write_buffers
;
231 mtd
->_writev
= cfi_staa_writev
;
232 mtd
->_sync
= cfi_staa_sync
;
233 mtd
->_lock
= cfi_staa_lock
;
234 mtd
->_unlock
= cfi_staa_unlock
;
235 mtd
->_suspend
= cfi_staa_suspend
;
236 mtd
->_resume
= cfi_staa_resume
;
237 mtd
->flags
= MTD_CAP_NORFLASH
& ~MTD_BIT_WRITEABLE
;
238 mtd
->writesize
= 8; /* FIXME: Should be 0 for STMicro flashes w/out ECC */
239 mtd
->writebufsize
= cfi_interleave(cfi
) << cfi
->cfiq
->MaxBufWriteSize
;
240 map
->fldrv
= &cfi_staa_chipdrv
;
241 __module_get(THIS_MODULE
);
242 mtd
->name
= map
->name
;
247 static inline int do_read_onechip(struct map_info
*map
, struct flchip
*chip
, loff_t adr
, size_t len
, u_char
*buf
)
249 map_word status
, status_OK
;
251 DECLARE_WAITQUEUE(wait
, current
);
253 unsigned long cmd_addr
;
254 struct cfi_private
*cfi
= map
->fldrv_priv
;
258 /* Ensure cmd read/writes are aligned. */
259 cmd_addr
= adr
& ~(map_bankwidth(map
)-1);
261 /* Let's determine this according to the interleave only once */
262 status_OK
= CMD(0x80);
264 timeo
= jiffies
+ HZ
;
266 mutex_lock(&chip
->mutex
);
268 /* Check that the chip's ready to talk to us.
269 * If it's in FL_ERASING state, suspend it and make it talk now.
271 switch (chip
->state
) {
273 if (!(((struct cfi_pri_intelext
*)cfi
->cmdset_priv
)->FeatureSupport
& 2))
274 goto sleep
; /* We don't support erase suspend */
276 map_write (map
, CMD(0xb0), cmd_addr
);
277 /* If the flash has finished erasing, then 'erase suspend'
278 * appears to make some (28F320) flash devices switch to
279 * 'read' mode. Make sure that we switch to 'read status'
280 * mode so we get the right data. --rmk
282 map_write(map
, CMD(0x70), cmd_addr
);
283 chip
->oldstate
= FL_ERASING
;
284 chip
->state
= FL_ERASE_SUSPENDING
;
285 // printk("Erase suspending at 0x%lx\n", cmd_addr);
287 status
= map_read(map
, cmd_addr
);
288 if (map_word_andequal(map
, status
, status_OK
, status_OK
))
291 if (time_after(jiffies
, timeo
)) {
293 map_write(map
, CMD(0xd0), cmd_addr
);
294 /* make sure we're in 'read status' mode */
295 map_write(map
, CMD(0x70), cmd_addr
);
296 chip
->state
= FL_ERASING
;
298 mutex_unlock(&chip
->mutex
);
299 printk(KERN_ERR
"Chip not ready after erase "
300 "suspended: status = 0x%lx\n", status
.x
[0]);
304 mutex_unlock(&chip
->mutex
);
306 mutex_lock(&chip
->mutex
);
310 map_write(map
, CMD(0xff), cmd_addr
);
311 chip
->state
= FL_READY
;
324 map_write(map
, CMD(0x70), cmd_addr
);
325 chip
->state
= FL_STATUS
;
328 status
= map_read(map
, cmd_addr
);
329 if (map_word_andequal(map
, status
, status_OK
, status_OK
)) {
330 map_write(map
, CMD(0xff), cmd_addr
);
331 chip
->state
= FL_READY
;
335 /* Urgh. Chip not yet ready to talk to us. */
336 if (time_after(jiffies
, timeo
)) {
337 mutex_unlock(&chip
->mutex
);
338 printk(KERN_ERR
"waiting for chip to be ready timed out in read. WSM status = %lx\n", status
.x
[0]);
342 /* Latency issues. Drop the lock, wait a while and retry */
343 mutex_unlock(&chip
->mutex
);
349 /* Stick ourselves on a wait queue to be woken when
350 someone changes the status */
351 set_current_state(TASK_UNINTERRUPTIBLE
);
352 add_wait_queue(&chip
->wq
, &wait
);
353 mutex_unlock(&chip
->mutex
);
355 remove_wait_queue(&chip
->wq
, &wait
);
356 timeo
= jiffies
+ HZ
;
360 map_copy_from(map
, buf
, adr
, len
);
363 chip
->state
= chip
->oldstate
;
364 /* What if one interleaved chip has finished and the
365 other hasn't? The old code would leave the finished
366 one in READY mode. That's bad, and caused -EROFS
367 errors to be returned from do_erase_oneblock because
368 that's the only bit it checked for at the time.
369 As the state machine appears to explicitly allow
370 sending the 0x70 (Read Status) command to an erasing
371 chip and expecting it to be ignored, that's what we
373 map_write(map
, CMD(0xd0), cmd_addr
);
374 map_write(map
, CMD(0x70), cmd_addr
);
378 mutex_unlock(&chip
->mutex
);
382 static int cfi_staa_read (struct mtd_info
*mtd
, loff_t from
, size_t len
, size_t *retlen
, u_char
*buf
)
384 struct map_info
*map
= mtd
->priv
;
385 struct cfi_private
*cfi
= map
->fldrv_priv
;
390 /* ofs: offset within the first chip that the first read should start */
391 chipnum
= (from
>> cfi
->chipshift
);
392 ofs
= from
- (chipnum
<< cfi
->chipshift
);
395 unsigned long thislen
;
397 if (chipnum
>= cfi
->numchips
)
400 if ((len
+ ofs
-1) >> cfi
->chipshift
)
401 thislen
= (1<<cfi
->chipshift
) - ofs
;
405 ret
= do_read_onechip(map
, &cfi
->chips
[chipnum
], ofs
, thislen
, buf
);
419 static int do_write_buffer(struct map_info
*map
, struct flchip
*chip
,
420 unsigned long adr
, const u_char
*buf
, int len
)
422 struct cfi_private
*cfi
= map
->fldrv_priv
;
423 map_word status
, status_OK
;
424 unsigned long cmd_adr
, timeo
;
425 DECLARE_WAITQUEUE(wait
, current
);
428 /* M58LW064A requires bus alignment for buffer wriets -- saw */
429 if (adr
& (map_bankwidth(map
)-1))
432 wbufsize
= cfi_interleave(cfi
) << cfi
->cfiq
->MaxBufWriteSize
;
434 cmd_adr
= adr
& ~(wbufsize
-1);
436 /* Let's determine this according to the interleave only once */
437 status_OK
= CMD(0x80);
439 timeo
= jiffies
+ HZ
;
442 #ifdef DEBUG_CFI_FEATURES
443 printk("%s: chip->state[%d]\n", __func__
, chip
->state
);
445 mutex_lock(&chip
->mutex
);
447 /* Check that the chip's ready to talk to us.
448 * Later, we can actually think about interrupting it
449 * if it's in FL_ERASING state.
450 * Not just yet, though.
452 switch (chip
->state
) {
458 map_write(map
, CMD(0x70), cmd_adr
);
459 chip
->state
= FL_STATUS
;
460 #ifdef DEBUG_CFI_FEATURES
461 printk("%s: 1 status[%x]\n", __func__
, map_read(map
, cmd_adr
));
465 status
= map_read(map
, cmd_adr
);
466 if (map_word_andequal(map
, status
, status_OK
, status_OK
))
468 /* Urgh. Chip not yet ready to talk to us. */
469 if (time_after(jiffies
, timeo
)) {
470 mutex_unlock(&chip
->mutex
);
471 printk(KERN_ERR
"waiting for chip to be ready timed out in buffer write Xstatus = %lx, status = %lx\n",
472 status
.x
[0], map_read(map
, cmd_adr
).x
[0]);
476 /* Latency issues. Drop the lock, wait a while and retry */
477 mutex_unlock(&chip
->mutex
);
482 /* Stick ourselves on a wait queue to be woken when
483 someone changes the status */
484 set_current_state(TASK_UNINTERRUPTIBLE
);
485 add_wait_queue(&chip
->wq
, &wait
);
486 mutex_unlock(&chip
->mutex
);
488 remove_wait_queue(&chip
->wq
, &wait
);
489 timeo
= jiffies
+ HZ
;
494 map_write(map
, CMD(0xe8), cmd_adr
);
495 chip
->state
= FL_WRITING_TO_BUFFER
;
499 status
= map_read(map
, cmd_adr
);
500 if (map_word_andequal(map
, status
, status_OK
, status_OK
))
503 mutex_unlock(&chip
->mutex
);
505 mutex_lock(&chip
->mutex
);
508 /* Argh. Not ready for write to buffer */
510 map_write(map
, CMD(0x70), cmd_adr
);
511 chip
->state
= FL_STATUS
;
512 mutex_unlock(&chip
->mutex
);
513 printk(KERN_ERR
"Chip not ready for buffer write. Xstatus = %lx\n", status
.x
[0]);
518 /* Write length of data to come */
519 map_write(map
, CMD(len
/map_bankwidth(map
)-1), cmd_adr
);
523 z
+= map_bankwidth(map
), buf
+= map_bankwidth(map
)) {
525 d
= map_word_load(map
, buf
);
526 map_write(map
, d
, adr
+z
);
529 map_write(map
, CMD(0xd0), cmd_adr
);
530 chip
->state
= FL_WRITING
;
532 mutex_unlock(&chip
->mutex
);
533 cfi_udelay(chip
->buffer_write_time
);
534 mutex_lock(&chip
->mutex
);
536 timeo
= jiffies
+ (HZ
/2);
539 if (chip
->state
!= FL_WRITING
) {
540 /* Someone's suspended the write. Sleep */
541 set_current_state(TASK_UNINTERRUPTIBLE
);
542 add_wait_queue(&chip
->wq
, &wait
);
543 mutex_unlock(&chip
->mutex
);
545 remove_wait_queue(&chip
->wq
, &wait
);
546 timeo
= jiffies
+ (HZ
/ 2); /* FIXME */
547 mutex_lock(&chip
->mutex
);
551 status
= map_read(map
, cmd_adr
);
552 if (map_word_andequal(map
, status
, status_OK
, status_OK
))
555 /* OK Still waiting */
556 if (time_after(jiffies
, timeo
)) {
558 map_write(map
, CMD(0x50), cmd_adr
);
559 /* put back into read status register mode */
560 map_write(map
, CMD(0x70), adr
);
561 chip
->state
= FL_STATUS
;
563 mutex_unlock(&chip
->mutex
);
564 printk(KERN_ERR
"waiting for chip to be ready timed out in bufwrite\n");
568 /* Latency issues. Drop the lock, wait a while and retry */
569 mutex_unlock(&chip
->mutex
);
572 mutex_lock(&chip
->mutex
);
575 chip
->buffer_write_time
--;
576 if (!chip
->buffer_write_time
)
577 chip
->buffer_write_time
++;
580 chip
->buffer_write_time
++;
582 /* Done and happy. */
584 chip
->state
= FL_STATUS
;
586 /* check for errors: 'lock bit', 'VPP', 'dead cell'/'unerased cell' or 'incorrect cmd' -- saw */
587 if (map_word_bitsset(map
, status
, CMD(0x3a))) {
588 #ifdef DEBUG_CFI_FEATURES
589 printk("%s: 2 status[%lx]\n", __func__
, status
.x
[0]);
592 map_write(map
, CMD(0x50), cmd_adr
);
593 /* put back into read status register mode */
594 map_write(map
, CMD(0x70), adr
);
596 mutex_unlock(&chip
->mutex
);
597 return map_word_bitsset(map
, status
, CMD(0x02)) ? -EROFS
: -EIO
;
600 mutex_unlock(&chip
->mutex
);
605 static int cfi_staa_write_buffers (struct mtd_info
*mtd
, loff_t to
,
606 size_t len
, size_t *retlen
, const u_char
*buf
)
608 struct map_info
*map
= mtd
->priv
;
609 struct cfi_private
*cfi
= map
->fldrv_priv
;
610 int wbufsize
= cfi_interleave(cfi
) << cfi
->cfiq
->MaxBufWriteSize
;
615 chipnum
= to
>> cfi
->chipshift
;
616 ofs
= to
- (chipnum
<< cfi
->chipshift
);
618 #ifdef DEBUG_CFI_FEATURES
619 printk("%s: map_bankwidth(map)[%x]\n", __func__
, map_bankwidth(map
));
620 printk("%s: chipnum[%x] wbufsize[%x]\n", __func__
, chipnum
, wbufsize
);
621 printk("%s: ofs[%x] len[%x]\n", __func__
, ofs
, len
);
624 /* Write buffer is worth it only if more than one word to write... */
626 /* We must not cross write block boundaries */
627 int size
= wbufsize
- (ofs
& (wbufsize
-1));
632 ret
= do_write_buffer(map
, &cfi
->chips
[chipnum
],
642 if (ofs
>> cfi
->chipshift
) {
645 if (chipnum
== cfi
->numchips
)
654 * Writev for ECC-Flashes is a little more complicated. We need to maintain
655 * a small buffer for this.
656 * XXX: If the buffer size is not a multiple of 2, this will break
658 #define ECCBUF_SIZE (mtd->writesize)
659 #define ECCBUF_DIV(x) ((x) & ~(ECCBUF_SIZE - 1))
660 #define ECCBUF_MOD(x) ((x) & (ECCBUF_SIZE - 1))
662 cfi_staa_writev(struct mtd_info
*mtd
, const struct kvec
*vecs
,
663 unsigned long count
, loff_t to
, size_t *retlen
)
666 size_t totlen
= 0, thislen
;
672 /* We should fall back to a general writev implementation.
673 * Until that is written, just break.
677 buffer
= kmalloc(ECCBUF_SIZE
, GFP_KERNEL
);
681 for (i
=0; i
<count
; i
++) {
682 size_t elem_len
= vecs
[i
].iov_len
;
683 void *elem_base
= vecs
[i
].iov_base
;
684 if (!elem_len
) /* FIXME: Might be unnecessary. Check that */
686 if (buflen
) { /* cut off head */
687 if (buflen
+ elem_len
< ECCBUF_SIZE
) { /* just accumulate */
688 memcpy(buffer
+buflen
, elem_base
, elem_len
);
692 memcpy(buffer
+buflen
, elem_base
, ECCBUF_SIZE
-buflen
);
693 ret
= mtd_write(mtd
, to
, ECCBUF_SIZE
, &thislen
,
696 if (ret
|| thislen
!= ECCBUF_SIZE
)
698 elem_len
-= thislen
-buflen
;
699 elem_base
+= thislen
-buflen
;
702 if (ECCBUF_DIV(elem_len
)) { /* write clean aligned data */
703 ret
= mtd_write(mtd
, to
, ECCBUF_DIV(elem_len
),
704 &thislen
, elem_base
);
706 if (ret
|| thislen
!= ECCBUF_DIV(elem_len
))
710 buflen
= ECCBUF_MOD(elem_len
); /* cut off tail */
712 memset(buffer
, 0xff, ECCBUF_SIZE
);
713 memcpy(buffer
, elem_base
+ thislen
, buflen
);
716 if (buflen
) { /* flush last page, even if not full */
717 /* This is sometimes intended behaviour, really */
718 ret
= mtd_write(mtd
, to
, buflen
, &thislen
, buffer
);
720 if (ret
|| thislen
!= ECCBUF_SIZE
)
731 static inline int do_erase_oneblock(struct map_info
*map
, struct flchip
*chip
, unsigned long adr
)
733 struct cfi_private
*cfi
= map
->fldrv_priv
;
734 map_word status
, status_OK
;
737 DECLARE_WAITQUEUE(wait
, current
);
742 /* Let's determine this according to the interleave only once */
743 status_OK
= CMD(0x80);
745 timeo
= jiffies
+ HZ
;
747 mutex_lock(&chip
->mutex
);
749 /* Check that the chip's ready to talk to us. */
750 switch (chip
->state
) {
754 map_write(map
, CMD(0x70), adr
);
755 chip
->state
= FL_STATUS
;
758 status
= map_read(map
, adr
);
759 if (map_word_andequal(map
, status
, status_OK
, status_OK
))
762 /* Urgh. Chip not yet ready to talk to us. */
763 if (time_after(jiffies
, timeo
)) {
764 mutex_unlock(&chip
->mutex
);
765 printk(KERN_ERR
"waiting for chip to be ready timed out in erase\n");
769 /* Latency issues. Drop the lock, wait a while and retry */
770 mutex_unlock(&chip
->mutex
);
775 /* Stick ourselves on a wait queue to be woken when
776 someone changes the status */
777 set_current_state(TASK_UNINTERRUPTIBLE
);
778 add_wait_queue(&chip
->wq
, &wait
);
779 mutex_unlock(&chip
->mutex
);
781 remove_wait_queue(&chip
->wq
, &wait
);
782 timeo
= jiffies
+ HZ
;
787 /* Clear the status register first */
788 map_write(map
, CMD(0x50), adr
);
791 map_write(map
, CMD(0x20), adr
);
792 map_write(map
, CMD(0xD0), adr
);
793 chip
->state
= FL_ERASING
;
795 mutex_unlock(&chip
->mutex
);
797 mutex_lock(&chip
->mutex
);
799 /* FIXME. Use a timer to check this, and return immediately. */
800 /* Once the state machine's known to be working I'll do that */
802 timeo
= jiffies
+ (HZ
*20);
804 if (chip
->state
!= FL_ERASING
) {
805 /* Someone's suspended the erase. Sleep */
806 set_current_state(TASK_UNINTERRUPTIBLE
);
807 add_wait_queue(&chip
->wq
, &wait
);
808 mutex_unlock(&chip
->mutex
);
810 remove_wait_queue(&chip
->wq
, &wait
);
811 timeo
= jiffies
+ (HZ
*20); /* FIXME */
812 mutex_lock(&chip
->mutex
);
816 status
= map_read(map
, adr
);
817 if (map_word_andequal(map
, status
, status_OK
, status_OK
))
820 /* OK Still waiting */
821 if (time_after(jiffies
, timeo
)) {
822 map_write(map
, CMD(0x70), adr
);
823 chip
->state
= FL_STATUS
;
824 printk(KERN_ERR
"waiting for erase to complete timed out. Xstatus = %lx, status = %lx.\n", status
.x
[0], map_read(map
, adr
).x
[0]);
826 mutex_unlock(&chip
->mutex
);
830 /* Latency issues. Drop the lock, wait a while and retry */
831 mutex_unlock(&chip
->mutex
);
833 mutex_lock(&chip
->mutex
);
839 /* We've broken this before. It doesn't hurt to be safe */
840 map_write(map
, CMD(0x70), adr
);
841 chip
->state
= FL_STATUS
;
842 status
= map_read(map
, adr
);
844 /* check for lock bit */
845 if (map_word_bitsset(map
, status
, CMD(0x3a))) {
846 unsigned char chipstatus
= status
.x
[0];
847 if (!map_word_equal(map
, status
, CMD(chipstatus
))) {
849 for (w
=0; w
<map_words(map
); w
++) {
850 for (i
= 0; i
<cfi_interleave(cfi
); i
++) {
851 chipstatus
|= status
.x
[w
] >> (cfi
->device_type
* 8);
854 printk(KERN_WARNING
"Status is not identical for all chips: 0x%lx. Merging to give 0x%02x\n",
855 status
.x
[0], chipstatus
);
857 /* Reset the error bits */
858 map_write(map
, CMD(0x50), adr
);
859 map_write(map
, CMD(0x70), adr
);
861 if ((chipstatus
& 0x30) == 0x30) {
862 printk(KERN_NOTICE
"Chip reports improper command sequence: status 0x%x\n", chipstatus
);
864 } else if (chipstatus
& 0x02) {
865 /* Protection bit set */
867 } else if (chipstatus
& 0x8) {
869 printk(KERN_WARNING
"Chip reports voltage low on erase: status 0x%x\n", chipstatus
);
871 } else if (chipstatus
& 0x20) {
873 printk(KERN_DEBUG
"Chip erase failed at 0x%08lx: status 0x%x. Retrying...\n", adr
, chipstatus
);
874 timeo
= jiffies
+ HZ
;
875 chip
->state
= FL_STATUS
;
876 mutex_unlock(&chip
->mutex
);
879 printk(KERN_DEBUG
"Chip erase failed at 0x%08lx: status 0x%x\n", adr
, chipstatus
);
885 mutex_unlock(&chip
->mutex
);
889 static int cfi_staa_erase_varsize(struct mtd_info
*mtd
,
890 struct erase_info
*instr
)
891 { struct map_info
*map
= mtd
->priv
;
892 struct cfi_private
*cfi
= map
->fldrv_priv
;
893 unsigned long adr
, len
;
894 int chipnum
, ret
= 0;
896 struct mtd_erase_region_info
*regions
= mtd
->eraseregions
;
898 /* Check that both start and end of the requested erase are
899 * aligned with the erasesize at the appropriate addresses.
904 /* Skip all erase regions which are ended before the start of
905 the requested erase. Actually, to save on the calculations,
906 we skip to the first erase region which starts after the
907 start of the requested erase, and then go back one.
910 while (i
< mtd
->numeraseregions
&& instr
->addr
>= regions
[i
].offset
)
914 /* OK, now i is pointing at the erase region in which this
915 erase request starts. Check the start of the requested
916 erase range is aligned with the erase size which is in
920 if (instr
->addr
& (regions
[i
].erasesize
-1))
923 /* Remember the erase region we start on */
926 /* Next, check that the end of the requested erase is aligned
927 * with the erase region at that address.
930 while (i
<mtd
->numeraseregions
&& (instr
->addr
+ instr
->len
) >= regions
[i
].offset
)
933 /* As before, drop back one to point at the region in which
934 the address actually falls
938 if ((instr
->addr
+ instr
->len
) & (regions
[i
].erasesize
-1))
941 chipnum
= instr
->addr
>> cfi
->chipshift
;
942 adr
= instr
->addr
- (chipnum
<< cfi
->chipshift
);
948 ret
= do_erase_oneblock(map
, &cfi
->chips
[chipnum
], adr
);
953 adr
+= regions
[i
].erasesize
;
954 len
-= regions
[i
].erasesize
;
956 if (adr
% (1<< cfi
->chipshift
) == (((unsigned long)regions
[i
].offset
+ (regions
[i
].erasesize
* regions
[i
].numblocks
)) %( 1<< cfi
->chipshift
)))
959 if (adr
>> cfi
->chipshift
) {
963 if (chipnum
>= cfi
->numchips
)
968 instr
->state
= MTD_ERASE_DONE
;
969 mtd_erase_callback(instr
);
974 static void cfi_staa_sync (struct mtd_info
*mtd
)
976 struct map_info
*map
= mtd
->priv
;
977 struct cfi_private
*cfi
= map
->fldrv_priv
;
981 DECLARE_WAITQUEUE(wait
, current
);
983 for (i
=0; !ret
&& i
<cfi
->numchips
; i
++) {
984 chip
= &cfi
->chips
[i
];
987 mutex_lock(&chip
->mutex
);
989 switch(chip
->state
) {
994 chip
->oldstate
= chip
->state
;
995 chip
->state
= FL_SYNCING
;
996 /* No need to wake_up() on this state change -
997 * as the whole point is that nobody can do anything
998 * with the chip now anyway.
1001 mutex_unlock(&chip
->mutex
);
1005 /* Not an idle state */
1006 set_current_state(TASK_UNINTERRUPTIBLE
);
1007 add_wait_queue(&chip
->wq
, &wait
);
1009 mutex_unlock(&chip
->mutex
);
1011 remove_wait_queue(&chip
->wq
, &wait
);
1017 /* Unlock the chips again */
1019 for (i
--; i
>=0; i
--) {
1020 chip
= &cfi
->chips
[i
];
1022 mutex_lock(&chip
->mutex
);
1024 if (chip
->state
== FL_SYNCING
) {
1025 chip
->state
= chip
->oldstate
;
1028 mutex_unlock(&chip
->mutex
);
1032 static inline int do_lock_oneblock(struct map_info
*map
, struct flchip
*chip
, unsigned long adr
)
1034 struct cfi_private
*cfi
= map
->fldrv_priv
;
1035 map_word status
, status_OK
;
1036 unsigned long timeo
= jiffies
+ HZ
;
1037 DECLARE_WAITQUEUE(wait
, current
);
1041 /* Let's determine this according to the interleave only once */
1042 status_OK
= CMD(0x80);
1044 timeo
= jiffies
+ HZ
;
1046 mutex_lock(&chip
->mutex
);
1048 /* Check that the chip's ready to talk to us. */
1049 switch (chip
->state
) {
1051 case FL_JEDEC_QUERY
:
1053 map_write(map
, CMD(0x70), adr
);
1054 chip
->state
= FL_STATUS
;
1057 status
= map_read(map
, adr
);
1058 if (map_word_andequal(map
, status
, status_OK
, status_OK
))
1061 /* Urgh. Chip not yet ready to talk to us. */
1062 if (time_after(jiffies
, timeo
)) {
1063 mutex_unlock(&chip
->mutex
);
1064 printk(KERN_ERR
"waiting for chip to be ready timed out in lock\n");
1068 /* Latency issues. Drop the lock, wait a while and retry */
1069 mutex_unlock(&chip
->mutex
);
1074 /* Stick ourselves on a wait queue to be woken when
1075 someone changes the status */
1076 set_current_state(TASK_UNINTERRUPTIBLE
);
1077 add_wait_queue(&chip
->wq
, &wait
);
1078 mutex_unlock(&chip
->mutex
);
1080 remove_wait_queue(&chip
->wq
, &wait
);
1081 timeo
= jiffies
+ HZ
;
1086 map_write(map
, CMD(0x60), adr
);
1087 map_write(map
, CMD(0x01), adr
);
1088 chip
->state
= FL_LOCKING
;
1090 mutex_unlock(&chip
->mutex
);
1092 mutex_lock(&chip
->mutex
);
1094 /* FIXME. Use a timer to check this, and return immediately. */
1095 /* Once the state machine's known to be working I'll do that */
1097 timeo
= jiffies
+ (HZ
*2);
1100 status
= map_read(map
, adr
);
1101 if (map_word_andequal(map
, status
, status_OK
, status_OK
))
1104 /* OK Still waiting */
1105 if (time_after(jiffies
, timeo
)) {
1106 map_write(map
, CMD(0x70), adr
);
1107 chip
->state
= FL_STATUS
;
1108 printk(KERN_ERR
"waiting for lock to complete timed out. Xstatus = %lx, status = %lx.\n", status
.x
[0], map_read(map
, adr
).x
[0]);
1110 mutex_unlock(&chip
->mutex
);
1114 /* Latency issues. Drop the lock, wait a while and retry */
1115 mutex_unlock(&chip
->mutex
);
1117 mutex_lock(&chip
->mutex
);
1120 /* Done and happy. */
1121 chip
->state
= FL_STATUS
;
1124 mutex_unlock(&chip
->mutex
);
1127 static int cfi_staa_lock(struct mtd_info
*mtd
, loff_t ofs
, uint64_t len
)
1129 struct map_info
*map
= mtd
->priv
;
1130 struct cfi_private
*cfi
= map
->fldrv_priv
;
1132 int chipnum
, ret
= 0;
1133 #ifdef DEBUG_LOCK_BITS
1134 int ofs_factor
= cfi
->interleave
* cfi
->device_type
;
1137 if (ofs
& (mtd
->erasesize
- 1))
1140 if (len
& (mtd
->erasesize
-1))
1143 chipnum
= ofs
>> cfi
->chipshift
;
1144 adr
= ofs
- (chipnum
<< cfi
->chipshift
);
1148 #ifdef DEBUG_LOCK_BITS
1149 cfi_send_gen_cmd(0x90, 0x55, 0, map
, cfi
, cfi
->device_type
, NULL
);
1150 printk("before lock: block status register is %x\n",cfi_read_query(map
, adr
+(2*ofs_factor
)));
1151 cfi_send_gen_cmd(0xff, 0x55, 0, map
, cfi
, cfi
->device_type
, NULL
);
1154 ret
= do_lock_oneblock(map
, &cfi
->chips
[chipnum
], adr
);
1156 #ifdef DEBUG_LOCK_BITS
1157 cfi_send_gen_cmd(0x90, 0x55, 0, map
, cfi
, cfi
->device_type
, NULL
);
1158 printk("after lock: block status register is %x\n",cfi_read_query(map
, adr
+(2*ofs_factor
)));
1159 cfi_send_gen_cmd(0xff, 0x55, 0, map
, cfi
, cfi
->device_type
, NULL
);
1165 adr
+= mtd
->erasesize
;
1166 len
-= mtd
->erasesize
;
1168 if (adr
>> cfi
->chipshift
) {
1172 if (chipnum
>= cfi
->numchips
)
1178 static inline int do_unlock_oneblock(struct map_info
*map
, struct flchip
*chip
, unsigned long adr
)
1180 struct cfi_private
*cfi
= map
->fldrv_priv
;
1181 map_word status
, status_OK
;
1182 unsigned long timeo
= jiffies
+ HZ
;
1183 DECLARE_WAITQUEUE(wait
, current
);
1187 /* Let's determine this according to the interleave only once */
1188 status_OK
= CMD(0x80);
1190 timeo
= jiffies
+ HZ
;
1192 mutex_lock(&chip
->mutex
);
1194 /* Check that the chip's ready to talk to us. */
1195 switch (chip
->state
) {
1197 case FL_JEDEC_QUERY
:
1199 map_write(map
, CMD(0x70), adr
);
1200 chip
->state
= FL_STATUS
;
1203 status
= map_read(map
, adr
);
1204 if (map_word_andequal(map
, status
, status_OK
, status_OK
))
1207 /* Urgh. Chip not yet ready to talk to us. */
1208 if (time_after(jiffies
, timeo
)) {
1209 mutex_unlock(&chip
->mutex
);
1210 printk(KERN_ERR
"waiting for chip to be ready timed out in unlock\n");
1214 /* Latency issues. Drop the lock, wait a while and retry */
1215 mutex_unlock(&chip
->mutex
);
1220 /* Stick ourselves on a wait queue to be woken when
1221 someone changes the status */
1222 set_current_state(TASK_UNINTERRUPTIBLE
);
1223 add_wait_queue(&chip
->wq
, &wait
);
1224 mutex_unlock(&chip
->mutex
);
1226 remove_wait_queue(&chip
->wq
, &wait
);
1227 timeo
= jiffies
+ HZ
;
1232 map_write(map
, CMD(0x60), adr
);
1233 map_write(map
, CMD(0xD0), adr
);
1234 chip
->state
= FL_UNLOCKING
;
1236 mutex_unlock(&chip
->mutex
);
1238 mutex_lock(&chip
->mutex
);
1240 /* FIXME. Use a timer to check this, and return immediately. */
1241 /* Once the state machine's known to be working I'll do that */
1243 timeo
= jiffies
+ (HZ
*2);
1246 status
= map_read(map
, adr
);
1247 if (map_word_andequal(map
, status
, status_OK
, status_OK
))
1250 /* OK Still waiting */
1251 if (time_after(jiffies
, timeo
)) {
1252 map_write(map
, CMD(0x70), adr
);
1253 chip
->state
= FL_STATUS
;
1254 printk(KERN_ERR
"waiting for unlock to complete timed out. Xstatus = %lx, status = %lx.\n", status
.x
[0], map_read(map
, adr
).x
[0]);
1256 mutex_unlock(&chip
->mutex
);
1260 /* Latency issues. Drop the unlock, wait a while and retry */
1261 mutex_unlock(&chip
->mutex
);
1263 mutex_lock(&chip
->mutex
);
1266 /* Done and happy. */
1267 chip
->state
= FL_STATUS
;
1270 mutex_unlock(&chip
->mutex
);
1273 static int cfi_staa_unlock(struct mtd_info
*mtd
, loff_t ofs
, uint64_t len
)
1275 struct map_info
*map
= mtd
->priv
;
1276 struct cfi_private
*cfi
= map
->fldrv_priv
;
1278 int chipnum
, ret
= 0;
1279 #ifdef DEBUG_LOCK_BITS
1280 int ofs_factor
= cfi
->interleave
* cfi
->device_type
;
1283 chipnum
= ofs
>> cfi
->chipshift
;
1284 adr
= ofs
- (chipnum
<< cfi
->chipshift
);
1286 #ifdef DEBUG_LOCK_BITS
1288 unsigned long temp_adr
= adr
;
1289 unsigned long temp_len
= len
;
1291 cfi_send_gen_cmd(0x90, 0x55, 0, map
, cfi
, cfi
->device_type
, NULL
);
1293 printk("before unlock %x: block status register is %x\n",temp_adr
,cfi_read_query(map
, temp_adr
+(2*ofs_factor
)));
1294 temp_adr
+= mtd
->erasesize
;
1295 temp_len
-= mtd
->erasesize
;
1297 cfi_send_gen_cmd(0xff, 0x55, 0, map
, cfi
, cfi
->device_type
, NULL
);
1301 ret
= do_unlock_oneblock(map
, &cfi
->chips
[chipnum
], adr
);
1303 #ifdef DEBUG_LOCK_BITS
1304 cfi_send_gen_cmd(0x90, 0x55, 0, map
, cfi
, cfi
->device_type
, NULL
);
1305 printk("after unlock: block status register is %x\n",cfi_read_query(map
, adr
+(2*ofs_factor
)));
1306 cfi_send_gen_cmd(0xff, 0x55, 0, map
, cfi
, cfi
->device_type
, NULL
);
1312 static int cfi_staa_suspend(struct mtd_info
*mtd
)
1314 struct map_info
*map
= mtd
->priv
;
1315 struct cfi_private
*cfi
= map
->fldrv_priv
;
1317 struct flchip
*chip
;
1320 for (i
=0; !ret
&& i
<cfi
->numchips
; i
++) {
1321 chip
= &cfi
->chips
[i
];
1323 mutex_lock(&chip
->mutex
);
1325 switch(chip
->state
) {
1329 case FL_JEDEC_QUERY
:
1330 chip
->oldstate
= chip
->state
;
1331 chip
->state
= FL_PM_SUSPENDED
;
1332 /* No need to wake_up() on this state change -
1333 * as the whole point is that nobody can do anything
1334 * with the chip now anyway.
1336 case FL_PM_SUSPENDED
:
1343 mutex_unlock(&chip
->mutex
);
1346 /* Unlock the chips again */
1349 for (i
--; i
>=0; i
--) {
1350 chip
= &cfi
->chips
[i
];
1352 mutex_lock(&chip
->mutex
);
1354 if (chip
->state
== FL_PM_SUSPENDED
) {
1355 /* No need to force it into a known state here,
1356 because we're returning failure, and it didn't
1358 chip
->state
= chip
->oldstate
;
1361 mutex_unlock(&chip
->mutex
);
1368 static void cfi_staa_resume(struct mtd_info
*mtd
)
1370 struct map_info
*map
= mtd
->priv
;
1371 struct cfi_private
*cfi
= map
->fldrv_priv
;
1373 struct flchip
*chip
;
1375 for (i
=0; i
<cfi
->numchips
; i
++) {
1377 chip
= &cfi
->chips
[i
];
1379 mutex_lock(&chip
->mutex
);
1381 /* Go to known state. Chip may have been power cycled */
1382 if (chip
->state
== FL_PM_SUSPENDED
) {
1383 map_write(map
, CMD(0xFF), 0);
1384 chip
->state
= FL_READY
;
1388 mutex_unlock(&chip
->mutex
);
1392 static void cfi_staa_destroy(struct mtd_info
*mtd
)
1394 struct map_info
*map
= mtd
->priv
;
1395 struct cfi_private
*cfi
= map
->fldrv_priv
;
1396 kfree(cfi
->cmdset_priv
);
1400 MODULE_LICENSE("GPL");