]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blob - drivers/mtd/chips/cfi_cmdset_0002.c
Merge branches 'timers/clocksource', 'timers/hrtimers', 'timers/nohz', 'timers/ntp...
[linux-2.6-omap-h63xx.git] / drivers / mtd / chips / cfi_cmdset_0002.c
1 /*
2  * Common Flash Interface support:
3  *   AMD & Fujitsu Standard Vendor Command Set (ID 0x0002)
4  *
5  * Copyright (C) 2000 Crossnet Co. <info@crossnet.co.jp>
6  * Copyright (C) 2004 Arcom Control Systems Ltd <linux@arcom.com>
7  * Copyright (C) 2005 MontaVista Software Inc. <source@mvista.com>
8  *
9  * 2_by_8 routines added by Simon Munton
10  *
11  * 4_by_16 work by Carolyn J. Smith
12  *
13  * XIP support hooks by Vitaly Wool (based on code for Intel flash
14  * by Nicolas Pitre)
15  *
16  * Occasionally maintained by Thayne Harbaugh tharbaugh at lnxi dot com
17  *
18  * This code is GPL
19  */
20
21 #include <linux/module.h>
22 #include <linux/types.h>
23 #include <linux/kernel.h>
24 #include <linux/sched.h>
25 #include <linux/init.h>
26 #include <asm/io.h>
27 #include <asm/byteorder.h>
28
29 #include <linux/errno.h>
30 #include <linux/slab.h>
31 #include <linux/delay.h>
32 #include <linux/interrupt.h>
33 #include <linux/mtd/compatmac.h>
34 #include <linux/mtd/map.h>
35 #include <linux/mtd/mtd.h>
36 #include <linux/mtd/cfi.h>
37 #include <linux/mtd/xip.h>
38
39 #define AMD_BOOTLOC_BUG
40 #define FORCE_WORD_WRITE 0
41
42 #define MAX_WORD_RETRIES 3
43
44 #define MANUFACTURER_AMD        0x0001
45 #define MANUFACTURER_ATMEL      0x001F
46 #define MANUFACTURER_SST        0x00BF
47 #define SST49LF004B             0x0060
48 #define SST49LF040B             0x0050
49 #define SST49LF008A             0x005a
50 #define AT49BV6416              0x00d6
51
52 static int cfi_amdstd_read (struct mtd_info *, loff_t, size_t, size_t *, u_char *);
53 static int cfi_amdstd_write_words(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
54 static int cfi_amdstd_write_buffers(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
55 static int cfi_amdstd_erase_chip(struct mtd_info *, struct erase_info *);
56 static int cfi_amdstd_erase_varsize(struct mtd_info *, struct erase_info *);
57 static void cfi_amdstd_sync (struct mtd_info *);
58 static int cfi_amdstd_suspend (struct mtd_info *);
59 static void cfi_amdstd_resume (struct mtd_info *);
60 static int cfi_amdstd_secsi_read (struct mtd_info *, loff_t, size_t, size_t *, u_char *);
61
62 static void cfi_amdstd_destroy(struct mtd_info *);
63
64 struct mtd_info *cfi_cmdset_0002(struct map_info *, int);
65 static struct mtd_info *cfi_amdstd_setup (struct mtd_info *);
66
67 static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr, int mode);
68 static void put_chip(struct map_info *map, struct flchip *chip, unsigned long adr);
69 #include "fwh_lock.h"
70
71 static int cfi_atmel_lock(struct mtd_info *mtd, loff_t ofs, size_t len);
72 static int cfi_atmel_unlock(struct mtd_info *mtd, loff_t ofs, size_t len);
73
74 static struct mtd_chip_driver cfi_amdstd_chipdrv = {
75         .probe          = NULL, /* Not usable directly */
76         .destroy        = cfi_amdstd_destroy,
77         .name           = "cfi_cmdset_0002",
78         .module         = THIS_MODULE
79 };
80
81
82 /* #define DEBUG_CFI_FEATURES */
83
84
85 #ifdef DEBUG_CFI_FEATURES
86 static void cfi_tell_features(struct cfi_pri_amdstd *extp)
87 {
88         const char* erase_suspend[3] = {
89                 "Not supported", "Read only", "Read/write"
90         };
91         const char* top_bottom[6] = {
92                 "No WP", "8x8KiB sectors at top & bottom, no WP",
93                 "Bottom boot", "Top boot",
94                 "Uniform, Bottom WP", "Uniform, Top WP"
95         };
96
97         printk("  Silicon revision: %d\n", extp->SiliconRevision >> 1);
98         printk("  Address sensitive unlock: %s\n",
99                (extp->SiliconRevision & 1) ? "Not required" : "Required");
100
101         if (extp->EraseSuspend < ARRAY_SIZE(erase_suspend))
102                 printk("  Erase Suspend: %s\n", erase_suspend[extp->EraseSuspend]);
103         else
104                 printk("  Erase Suspend: Unknown value %d\n", extp->EraseSuspend);
105
106         if (extp->BlkProt == 0)
107                 printk("  Block protection: Not supported\n");
108         else
109                 printk("  Block protection: %d sectors per group\n", extp->BlkProt);
110
111
112         printk("  Temporary block unprotect: %s\n",
113                extp->TmpBlkUnprotect ? "Supported" : "Not supported");
114         printk("  Block protect/unprotect scheme: %d\n", extp->BlkProtUnprot);
115         printk("  Number of simultaneous operations: %d\n", extp->SimultaneousOps);
116         printk("  Burst mode: %s\n",
117                extp->BurstMode ? "Supported" : "Not supported");
118         if (extp->PageMode == 0)
119                 printk("  Page mode: Not supported\n");
120         else
121                 printk("  Page mode: %d word page\n", extp->PageMode << 2);
122
123         printk("  Vpp Supply Minimum Program/Erase Voltage: %d.%d V\n",
124                extp->VppMin >> 4, extp->VppMin & 0xf);
125         printk("  Vpp Supply Maximum Program/Erase Voltage: %d.%d V\n",
126                extp->VppMax >> 4, extp->VppMax & 0xf);
127
128         if (extp->TopBottom < ARRAY_SIZE(top_bottom))
129                 printk("  Top/Bottom Boot Block: %s\n", top_bottom[extp->TopBottom]);
130         else
131                 printk("  Top/Bottom Boot Block: Unknown value %d\n", extp->TopBottom);
132 }
133 #endif
134
135 #ifdef AMD_BOOTLOC_BUG
136 /* Wheee. Bring me the head of someone at AMD. */
137 static void fixup_amd_bootblock(struct mtd_info *mtd, void* param)
138 {
139         struct map_info *map = mtd->priv;
140         struct cfi_private *cfi = map->fldrv_priv;
141         struct cfi_pri_amdstd *extp = cfi->cmdset_priv;
142         __u8 major = extp->MajorVersion;
143         __u8 minor = extp->MinorVersion;
144
145         if (((major << 8) | minor) < 0x3131) {
146                 /* CFI version 1.0 => don't trust bootloc */
147                 if (cfi->id & 0x80) {
148                         printk(KERN_WARNING "%s: JEDEC Device ID is 0x%02X. Assuming broken CFI table.\n", map->name, cfi->id);
149                         extp->TopBottom = 3;    /* top boot */
150                 } else {
151                         extp->TopBottom = 2;    /* bottom boot */
152                 }
153         }
154 }
155 #endif
156
157 static void fixup_use_write_buffers(struct mtd_info *mtd, void *param)
158 {
159         struct map_info *map = mtd->priv;
160         struct cfi_private *cfi = map->fldrv_priv;
161         if (cfi->cfiq->BufWriteTimeoutTyp) {
162                 DEBUG(MTD_DEBUG_LEVEL1, "Using buffer write method\n" );
163                 mtd->write = cfi_amdstd_write_buffers;
164         }
165 }
166
167 /* Atmel chips don't use the same PRI format as AMD chips */
168 static void fixup_convert_atmel_pri(struct mtd_info *mtd, void *param)
169 {
170         struct map_info *map = mtd->priv;
171         struct cfi_private *cfi = map->fldrv_priv;
172         struct cfi_pri_amdstd *extp = cfi->cmdset_priv;
173         struct cfi_pri_atmel atmel_pri;
174
175         memcpy(&atmel_pri, extp, sizeof(atmel_pri));
176         memset((char *)extp + 5, 0, sizeof(*extp) - 5);
177
178         if (atmel_pri.Features & 0x02)
179                 extp->EraseSuspend = 2;
180
181         if (atmel_pri.BottomBoot)
182                 extp->TopBottom = 2;
183         else
184                 extp->TopBottom = 3;
185
186         /* burst write mode not supported */
187         cfi->cfiq->BufWriteTimeoutTyp = 0;
188         cfi->cfiq->BufWriteTimeoutMax = 0;
189 }
190
191 static void fixup_use_secsi(struct mtd_info *mtd, void *param)
192 {
193         /* Setup for chips with a secsi area */
194         mtd->read_user_prot_reg = cfi_amdstd_secsi_read;
195         mtd->read_fact_prot_reg = cfi_amdstd_secsi_read;
196 }
197
198 static void fixup_use_erase_chip(struct mtd_info *mtd, void *param)
199 {
200         struct map_info *map = mtd->priv;
201         struct cfi_private *cfi = map->fldrv_priv;
202         if ((cfi->cfiq->NumEraseRegions == 1) &&
203                 ((cfi->cfiq->EraseRegionInfo[0] & 0xffff) == 0)) {
204                 mtd->erase = cfi_amdstd_erase_chip;
205         }
206
207 }
208
209 /*
210  * Some Atmel chips (e.g. the AT49BV6416) power-up with all sectors
211  * locked by default.
212  */
213 static void fixup_use_atmel_lock(struct mtd_info *mtd, void *param)
214 {
215         mtd->lock = cfi_atmel_lock;
216         mtd->unlock = cfi_atmel_unlock;
217         mtd->flags |= MTD_POWERUP_LOCK;
218 }
219
220 static void fixup_s29gl064n_sectors(struct mtd_info *mtd, void *param)
221 {
222         struct map_info *map = mtd->priv;
223         struct cfi_private *cfi = map->fldrv_priv;
224
225         if ((cfi->cfiq->EraseRegionInfo[0] & 0xffff) == 0x003f) {
226                 cfi->cfiq->EraseRegionInfo[0] |= 0x0040;
227                 pr_warning("%s: Bad S29GL064N CFI data, adjust from 64 to 128 sectors\n", mtd->name);
228         }
229 }
230
231 static void fixup_s29gl032n_sectors(struct mtd_info *mtd, void *param)
232 {
233         struct map_info *map = mtd->priv;
234         struct cfi_private *cfi = map->fldrv_priv;
235
236         if ((cfi->cfiq->EraseRegionInfo[1] & 0xffff) == 0x007e) {
237                 cfi->cfiq->EraseRegionInfo[1] &= ~0x0040;
238                 pr_warning("%s: Bad S29GL032N CFI data, adjust from 127 to 63 sectors\n", mtd->name);
239         }
240 }
241
242 static struct cfi_fixup cfi_fixup_table[] = {
243         { CFI_MFR_ATMEL, CFI_ID_ANY, fixup_convert_atmel_pri, NULL },
244 #ifdef AMD_BOOTLOC_BUG
245         { CFI_MFR_AMD, CFI_ID_ANY, fixup_amd_bootblock, NULL },
246 #endif
247         { CFI_MFR_AMD, 0x0050, fixup_use_secsi, NULL, },
248         { CFI_MFR_AMD, 0x0053, fixup_use_secsi, NULL, },
249         { CFI_MFR_AMD, 0x0055, fixup_use_secsi, NULL, },
250         { CFI_MFR_AMD, 0x0056, fixup_use_secsi, NULL, },
251         { CFI_MFR_AMD, 0x005C, fixup_use_secsi, NULL, },
252         { CFI_MFR_AMD, 0x005F, fixup_use_secsi, NULL, },
253         { CFI_MFR_AMD, 0x0c01, fixup_s29gl064n_sectors, NULL, },
254         { CFI_MFR_AMD, 0x1301, fixup_s29gl064n_sectors, NULL, },
255         { CFI_MFR_AMD, 0x1a00, fixup_s29gl032n_sectors, NULL, },
256         { CFI_MFR_AMD, 0x1a01, fixup_s29gl032n_sectors, NULL, },
257 #if !FORCE_WORD_WRITE
258         { CFI_MFR_ANY, CFI_ID_ANY, fixup_use_write_buffers, NULL, },
259 #endif
260         { 0, 0, NULL, NULL }
261 };
262 static struct cfi_fixup jedec_fixup_table[] = {
263         { MANUFACTURER_SST, SST49LF004B, fixup_use_fwh_lock, NULL, },
264         { MANUFACTURER_SST, SST49LF040B, fixup_use_fwh_lock, NULL, },
265         { MANUFACTURER_SST, SST49LF008A, fixup_use_fwh_lock, NULL, },
266         { 0, 0, NULL, NULL }
267 };
268
269 static struct cfi_fixup fixup_table[] = {
270         /* The CFI vendor ids and the JEDEC vendor IDs appear
271          * to be common.  It is like the devices id's are as
272          * well.  This table is to pick all cases where
273          * we know that is the case.
274          */
275         { CFI_MFR_ANY, CFI_ID_ANY, fixup_use_erase_chip, NULL },
276         { CFI_MFR_ATMEL, AT49BV6416, fixup_use_atmel_lock, NULL },
277         { 0, 0, NULL, NULL }
278 };
279
280
281 struct mtd_info *cfi_cmdset_0002(struct map_info *map, int primary)
282 {
283         struct cfi_private *cfi = map->fldrv_priv;
284         struct mtd_info *mtd;
285         int i;
286
287         mtd = kzalloc(sizeof(*mtd), GFP_KERNEL);
288         if (!mtd) {
289                 printk(KERN_WARNING "Failed to allocate memory for MTD device\n");
290                 return NULL;
291         }
292         mtd->priv = map;
293         mtd->type = MTD_NORFLASH;
294
295         /* Fill in the default mtd operations */
296         mtd->erase   = cfi_amdstd_erase_varsize;
297         mtd->write   = cfi_amdstd_write_words;
298         mtd->read    = cfi_amdstd_read;
299         mtd->sync    = cfi_amdstd_sync;
300         mtd->suspend = cfi_amdstd_suspend;
301         mtd->resume  = cfi_amdstd_resume;
302         mtd->flags   = MTD_CAP_NORFLASH;
303         mtd->name    = map->name;
304         mtd->writesize = 1;
305
306         if (cfi->cfi_mode==CFI_MODE_CFI){
307                 unsigned char bootloc;
308                 /*
309                  * It's a real CFI chip, not one for which the probe
310                  * routine faked a CFI structure. So we read the feature
311                  * table from it.
312                  */
313                 __u16 adr = primary?cfi->cfiq->P_ADR:cfi->cfiq->A_ADR;
314                 struct cfi_pri_amdstd *extp;
315
316                 extp = (struct cfi_pri_amdstd*)cfi_read_pri(map, adr, sizeof(*extp), "Amd/Fujitsu");
317                 if (!extp) {
318                         kfree(mtd);
319                         return NULL;
320                 }
321
322                 if (extp->MajorVersion != '1' ||
323                     (extp->MinorVersion < '0' || extp->MinorVersion > '4')) {
324                         printk(KERN_ERR "  Unknown Amd/Fujitsu Extended Query "
325                                "version %c.%c.\n",  extp->MajorVersion,
326                                extp->MinorVersion);
327                         kfree(extp);
328                         kfree(mtd);
329                         return NULL;
330                 }
331
332                 /* Install our own private info structure */
333                 cfi->cmdset_priv = extp;
334
335                 /* Apply cfi device specific fixups */
336                 cfi_fixup(mtd, cfi_fixup_table);
337
338 #ifdef DEBUG_CFI_FEATURES
339                 /* Tell the user about it in lots of lovely detail */
340                 cfi_tell_features(extp);
341 #endif
342
343                 bootloc = extp->TopBottom;
344                 if ((bootloc != 2) && (bootloc != 3)) {
345                         printk(KERN_WARNING "%s: CFI does not contain boot "
346                                "bank location. Assuming top.\n", map->name);
347                         bootloc = 2;
348                 }
349
350                 if (bootloc == 3 && cfi->cfiq->NumEraseRegions > 1) {
351                         printk(KERN_WARNING "%s: Swapping erase regions for broken CFI table.\n", map->name);
352
353                         for (i=0; i<cfi->cfiq->NumEraseRegions / 2; i++) {
354                                 int j = (cfi->cfiq->NumEraseRegions-1)-i;
355                                 __u32 swap;
356
357                                 swap = cfi->cfiq->EraseRegionInfo[i];
358                                 cfi->cfiq->EraseRegionInfo[i] = cfi->cfiq->EraseRegionInfo[j];
359                                 cfi->cfiq->EraseRegionInfo[j] = swap;
360                         }
361                 }
362                 /* Set the default CFI lock/unlock addresses */
363                 cfi->addr_unlock1 = 0x555;
364                 cfi->addr_unlock2 = 0x2aa;
365                 /* Modify the unlock address if we are in compatibility mode */
366                 if (    /* x16 in x8 mode */
367                         ((cfi->device_type == CFI_DEVICETYPE_X8) &&
368                                 (cfi->cfiq->InterfaceDesc ==
369                                         CFI_INTERFACE_X8_BY_X16_ASYNC)) ||
370                         /* x32 in x16 mode */
371                         ((cfi->device_type == CFI_DEVICETYPE_X16) &&
372                                 (cfi->cfiq->InterfaceDesc ==
373                                         CFI_INTERFACE_X16_BY_X32_ASYNC)))
374                 {
375                         cfi->addr_unlock1 = 0xaaa;
376                         cfi->addr_unlock2 = 0x555;
377                 }
378
379         } /* CFI mode */
380         else if (cfi->cfi_mode == CFI_MODE_JEDEC) {
381                 /* Apply jedec specific fixups */
382                 cfi_fixup(mtd, jedec_fixup_table);
383         }
384         /* Apply generic fixups */
385         cfi_fixup(mtd, fixup_table);
386
387         for (i=0; i< cfi->numchips; i++) {
388                 cfi->chips[i].word_write_time = 1<<cfi->cfiq->WordWriteTimeoutTyp;
389                 cfi->chips[i].buffer_write_time = 1<<cfi->cfiq->BufWriteTimeoutTyp;
390                 cfi->chips[i].erase_time = 1<<cfi->cfiq->BlockEraseTimeoutTyp;
391                 cfi->chips[i].ref_point_counter = 0;
392                 init_waitqueue_head(&(cfi->chips[i].wq));
393         }
394
395         map->fldrv = &cfi_amdstd_chipdrv;
396
397         return cfi_amdstd_setup(mtd);
398 }
399 EXPORT_SYMBOL_GPL(cfi_cmdset_0002);
400
401 static struct mtd_info *cfi_amdstd_setup(struct mtd_info *mtd)
402 {
403         struct map_info *map = mtd->priv;
404         struct cfi_private *cfi = map->fldrv_priv;
405         unsigned long devsize = (1<<cfi->cfiq->DevSize) * cfi->interleave;
406         unsigned long offset = 0;
407         int i,j;
408
409         printk(KERN_NOTICE "number of %s chips: %d\n",
410                (cfi->cfi_mode == CFI_MODE_CFI)?"CFI":"JEDEC",cfi->numchips);
411         /* Select the correct geometry setup */
412         mtd->size = devsize * cfi->numchips;
413
414         mtd->numeraseregions = cfi->cfiq->NumEraseRegions * cfi->numchips;
415         mtd->eraseregions = kmalloc(sizeof(struct mtd_erase_region_info)
416                                     * mtd->numeraseregions, GFP_KERNEL);
417         if (!mtd->eraseregions) {
418                 printk(KERN_WARNING "Failed to allocate memory for MTD erase region info\n");
419                 goto setup_err;
420         }
421
422         for (i=0; i<cfi->cfiq->NumEraseRegions; i++) {
423                 unsigned long ernum, ersize;
424                 ersize = ((cfi->cfiq->EraseRegionInfo[i] >> 8) & ~0xff) * cfi->interleave;
425                 ernum = (cfi->cfiq->EraseRegionInfo[i] & 0xffff) + 1;
426
427                 if (mtd->erasesize < ersize) {
428                         mtd->erasesize = ersize;
429                 }
430                 for (j=0; j<cfi->numchips; j++) {
431                         mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].offset = (j*devsize)+offset;
432                         mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].erasesize = ersize;
433                         mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].numblocks = ernum;
434                 }
435                 offset += (ersize * ernum);
436         }
437         if (offset != devsize) {
438                 /* Argh */
439                 printk(KERN_WARNING "Sum of regions (%lx) != total size of set of interleaved chips (%lx)\n", offset, devsize);
440                 goto setup_err;
441         }
442 #if 0
443         // debug
444         for (i=0; i<mtd->numeraseregions;i++){
445                 printk("%d: offset=0x%x,size=0x%x,blocks=%d\n",
446                        i,mtd->eraseregions[i].offset,
447                        mtd->eraseregions[i].erasesize,
448                        mtd->eraseregions[i].numblocks);
449         }
450 #endif
451
452         /* FIXME: erase-suspend-program is broken.  See
453            http://lists.infradead.org/pipermail/linux-mtd/2003-December/009001.html */
454         printk(KERN_NOTICE "cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.\n");
455
456         __module_get(THIS_MODULE);
457         return mtd;
458
459  setup_err:
460         if(mtd) {
461                 kfree(mtd->eraseregions);
462                 kfree(mtd);
463         }
464         kfree(cfi->cmdset_priv);
465         kfree(cfi->cfiq);
466         return NULL;
467 }
468
469 /*
470  * Return true if the chip is ready.
471  *
472  * Ready is one of: read mode, query mode, erase-suspend-read mode (in any
473  * non-suspended sector) and is indicated by no toggle bits toggling.
474  *
475  * Note that anything more complicated than checking if no bits are toggling
476  * (including checking DQ5 for an error status) is tricky to get working
477  * correctly and is therefore not done  (particulary with interleaved chips
478  * as each chip must be checked independantly of the others).
479  */
480 static int __xipram chip_ready(struct map_info *map, unsigned long addr)
481 {
482         map_word d, t;
483
484         d = map_read(map, addr);
485         t = map_read(map, addr);
486
487         return map_word_equal(map, d, t);
488 }
489
490 /*
491  * Return true if the chip is ready and has the correct value.
492  *
493  * Ready is one of: read mode, query mode, erase-suspend-read mode (in any
494  * non-suspended sector) and it is indicated by no bits toggling.
495  *
496  * Error are indicated by toggling bits or bits held with the wrong value,
497  * or with bits toggling.
498  *
499  * Note that anything more complicated than checking if no bits are toggling
500  * (including checking DQ5 for an error status) is tricky to get working
501  * correctly and is therefore not done  (particulary with interleaved chips
502  * as each chip must be checked independantly of the others).
503  *
504  */
505 static int __xipram chip_good(struct map_info *map, unsigned long addr, map_word expected)
506 {
507         map_word oldd, curd;
508
509         oldd = map_read(map, addr);
510         curd = map_read(map, addr);
511
512         return  map_word_equal(map, oldd, curd) &&
513                 map_word_equal(map, curd, expected);
514 }
515
516 static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr, int mode)
517 {
518         DECLARE_WAITQUEUE(wait, current);
519         struct cfi_private *cfi = map->fldrv_priv;
520         unsigned long timeo;
521         struct cfi_pri_amdstd *cfip = (struct cfi_pri_amdstd *)cfi->cmdset_priv;
522
523  resettime:
524         timeo = jiffies + HZ;
525  retry:
526         switch (chip->state) {
527
528         case FL_STATUS:
529                 for (;;) {
530                         if (chip_ready(map, adr))
531                                 break;
532
533                         if (time_after(jiffies, timeo)) {
534                                 printk(KERN_ERR "Waiting for chip to be ready timed out.\n");
535                                 spin_unlock(chip->mutex);
536                                 return -EIO;
537                         }
538                         spin_unlock(chip->mutex);
539                         cfi_udelay(1);
540                         spin_lock(chip->mutex);
541                         /* Someone else might have been playing with it. */
542                         goto retry;
543                 }
544
545         case FL_READY:
546         case FL_CFI_QUERY:
547         case FL_JEDEC_QUERY:
548                 return 0;
549
550         case FL_ERASING:
551                 if (mode == FL_WRITING) /* FIXME: Erase-suspend-program appears broken. */
552                         goto sleep;
553
554                 if (!(   mode == FL_READY
555                       || mode == FL_POINT
556                       || !cfip
557                       || (mode == FL_WRITING && (cfip->EraseSuspend & 0x2))
558                       || (mode == FL_WRITING && (cfip->EraseSuspend & 0x1)
559                     )))
560                         goto sleep;
561
562                 /* We could check to see if we're trying to access the sector
563                  * that is currently being erased. However, no user will try
564                  * anything like that so we just wait for the timeout. */
565
566                 /* Erase suspend */
567                 /* It's harmless to issue the Erase-Suspend and Erase-Resume
568                  * commands when the erase algorithm isn't in progress. */
569                 map_write(map, CMD(0xB0), chip->in_progress_block_addr);
570                 chip->oldstate = FL_ERASING;
571                 chip->state = FL_ERASE_SUSPENDING;
572                 chip->erase_suspended = 1;
573                 for (;;) {
574                         if (chip_ready(map, adr))
575                                 break;
576
577                         if (time_after(jiffies, timeo)) {
578                                 /* Should have suspended the erase by now.
579                                  * Send an Erase-Resume command as either
580                                  * there was an error (so leave the erase
581                                  * routine to recover from it) or we trying to
582                                  * use the erase-in-progress sector. */
583                                 map_write(map, CMD(0x30), chip->in_progress_block_addr);
584                                 chip->state = FL_ERASING;
585                                 chip->oldstate = FL_READY;
586                                 printk(KERN_ERR "MTD %s(): chip not ready after erase suspend\n", __func__);
587                                 return -EIO;
588                         }
589
590                         spin_unlock(chip->mutex);
591                         cfi_udelay(1);
592                         spin_lock(chip->mutex);
593                         /* Nobody will touch it while it's in state FL_ERASE_SUSPENDING.
594                            So we can just loop here. */
595                 }
596                 chip->state = FL_READY;
597                 return 0;
598
599         case FL_XIP_WHILE_ERASING:
600                 if (mode != FL_READY && mode != FL_POINT &&
601                     (!cfip || !(cfip->EraseSuspend&2)))
602                         goto sleep;
603                 chip->oldstate = chip->state;
604                 chip->state = FL_READY;
605                 return 0;
606
607         case FL_POINT:
608                 /* Only if there's no operation suspended... */
609                 if (mode == FL_READY && chip->oldstate == FL_READY)
610                         return 0;
611
612         default:
613         sleep:
614                 set_current_state(TASK_UNINTERRUPTIBLE);
615                 add_wait_queue(&chip->wq, &wait);
616                 spin_unlock(chip->mutex);
617                 schedule();
618                 remove_wait_queue(&chip->wq, &wait);
619                 spin_lock(chip->mutex);
620                 goto resettime;
621         }
622 }
623
624
625 static void put_chip(struct map_info *map, struct flchip *chip, unsigned long adr)
626 {
627         struct cfi_private *cfi = map->fldrv_priv;
628
629         switch(chip->oldstate) {
630         case FL_ERASING:
631                 chip->state = chip->oldstate;
632                 map_write(map, CMD(0x30), chip->in_progress_block_addr);
633                 chip->oldstate = FL_READY;
634                 chip->state = FL_ERASING;
635                 break;
636
637         case FL_XIP_WHILE_ERASING:
638                 chip->state = chip->oldstate;
639                 chip->oldstate = FL_READY;
640                 break;
641
642         case FL_READY:
643         case FL_STATUS:
644                 /* We should really make set_vpp() count, rather than doing this */
645                 DISABLE_VPP(map);
646                 break;
647         default:
648                 printk(KERN_ERR "MTD: put_chip() called with oldstate %d!!\n", chip->oldstate);
649         }
650         wake_up(&chip->wq);
651 }
652
653 #ifdef CONFIG_MTD_XIP
654
655 /*
656  * No interrupt what so ever can be serviced while the flash isn't in array
657  * mode.  This is ensured by the xip_disable() and xip_enable() functions
658  * enclosing any code path where the flash is known not to be in array mode.
659  * And within a XIP disabled code path, only functions marked with __xipram
660  * may be called and nothing else (it's a good thing to inspect generated
661  * assembly to make sure inline functions were actually inlined and that gcc
662  * didn't emit calls to its own support functions). Also configuring MTD CFI
663  * support to a single buswidth and a single interleave is also recommended.
664  */
665
666 static void xip_disable(struct map_info *map, struct flchip *chip,
667                         unsigned long adr)
668 {
669         /* TODO: chips with no XIP use should ignore and return */
670         (void) map_read(map, adr); /* ensure mmu mapping is up to date */
671         local_irq_disable();
672 }
673
674 static void __xipram xip_enable(struct map_info *map, struct flchip *chip,
675                                 unsigned long adr)
676 {
677         struct cfi_private *cfi = map->fldrv_priv;
678
679         if (chip->state != FL_POINT && chip->state != FL_READY) {
680                 map_write(map, CMD(0xf0), adr);
681                 chip->state = FL_READY;
682         }
683         (void) map_read(map, adr);
684         xip_iprefetch();
685         local_irq_enable();
686 }
687
688 /*
689  * When a delay is required for the flash operation to complete, the
690  * xip_udelay() function is polling for both the given timeout and pending
691  * (but still masked) hardware interrupts.  Whenever there is an interrupt
692  * pending then the flash erase operation is suspended, array mode restored
693  * and interrupts unmasked.  Task scheduling might also happen at that
694  * point.  The CPU eventually returns from the interrupt or the call to
695  * schedule() and the suspended flash operation is resumed for the remaining
696  * of the delay period.
697  *
698  * Warning: this function _will_ fool interrupt latency tracing tools.
699  */
700
701 static void __xipram xip_udelay(struct map_info *map, struct flchip *chip,
702                                 unsigned long adr, int usec)
703 {
704         struct cfi_private *cfi = map->fldrv_priv;
705         struct cfi_pri_amdstd *extp = cfi->cmdset_priv;
706         map_word status, OK = CMD(0x80);
707         unsigned long suspended, start = xip_currtime();
708         flstate_t oldstate;
709
710         do {
711                 cpu_relax();
712                 if (xip_irqpending() && extp &&
713                     ((chip->state == FL_ERASING && (extp->EraseSuspend & 2))) &&
714                     (cfi_interleave_is_1(cfi) || chip->oldstate == FL_READY)) {
715                         /*
716                          * Let's suspend the erase operation when supported.
717                          * Note that we currently don't try to suspend
718                          * interleaved chips if there is already another
719                          * operation suspended (imagine what happens
720                          * when one chip was already done with the current
721                          * operation while another chip suspended it, then
722                          * we resume the whole thing at once).  Yes, it
723                          * can happen!
724                          */
725                         map_write(map, CMD(0xb0), adr);
726                         usec -= xip_elapsed_since(start);
727                         suspended = xip_currtime();
728                         do {
729                                 if (xip_elapsed_since(suspended) > 100000) {
730                                         /*
731                                          * The chip doesn't want to suspend
732                                          * after waiting for 100 msecs.
733                                          * This is a critical error but there
734                                          * is not much we can do here.
735                                          */
736                                         return;
737                                 }
738                                 status = map_read(map, adr);
739                         } while (!map_word_andequal(map, status, OK, OK));
740
741                         /* Suspend succeeded */
742                         oldstate = chip->state;
743                         if (!map_word_bitsset(map, status, CMD(0x40)))
744                                 break;
745                         chip->state = FL_XIP_WHILE_ERASING;
746                         chip->erase_suspended = 1;
747                         map_write(map, CMD(0xf0), adr);
748                         (void) map_read(map, adr);
749                         xip_iprefetch();
750                         local_irq_enable();
751                         spin_unlock(chip->mutex);
752                         xip_iprefetch();
753                         cond_resched();
754
755                         /*
756                          * We're back.  However someone else might have
757                          * decided to go write to the chip if we are in
758                          * a suspended erase state.  If so let's wait
759                          * until it's done.
760                          */
761                         spin_lock(chip->mutex);
762                         while (chip->state != FL_XIP_WHILE_ERASING) {
763                                 DECLARE_WAITQUEUE(wait, current);
764                                 set_current_state(TASK_UNINTERRUPTIBLE);
765                                 add_wait_queue(&chip->wq, &wait);
766                                 spin_unlock(chip->mutex);
767                                 schedule();
768                                 remove_wait_queue(&chip->wq, &wait);
769                                 spin_lock(chip->mutex);
770                         }
771                         /* Disallow XIP again */
772                         local_irq_disable();
773
774                         /* Resume the write or erase operation */
775                         map_write(map, CMD(0x30), adr);
776                         chip->state = oldstate;
777                         start = xip_currtime();
778                 } else if (usec >= 1000000/HZ) {
779                         /*
780                          * Try to save on CPU power when waiting delay
781                          * is at least a system timer tick period.
782                          * No need to be extremely accurate here.
783                          */
784                         xip_cpu_idle();
785                 }
786                 status = map_read(map, adr);
787         } while (!map_word_andequal(map, status, OK, OK)
788                  && xip_elapsed_since(start) < usec);
789 }
790
791 #define UDELAY(map, chip, adr, usec)  xip_udelay(map, chip, adr, usec)
792
793 /*
794  * The INVALIDATE_CACHED_RANGE() macro is normally used in parallel while
795  * the flash is actively programming or erasing since we have to poll for
796  * the operation to complete anyway.  We can't do that in a generic way with
797  * a XIP setup so do it before the actual flash operation in this case
798  * and stub it out from INVALIDATE_CACHE_UDELAY.
799  */
800 #define XIP_INVAL_CACHED_RANGE(map, from, size)  \
801         INVALIDATE_CACHED_RANGE(map, from, size)
802
803 #define INVALIDATE_CACHE_UDELAY(map, chip, adr, len, usec)  \
804         UDELAY(map, chip, adr, usec)
805
806 /*
807  * Extra notes:
808  *
809  * Activating this XIP support changes the way the code works a bit.  For
810  * example the code to suspend the current process when concurrent access
811  * happens is never executed because xip_udelay() will always return with the
812  * same chip state as it was entered with.  This is why there is no care for
813  * the presence of add_wait_queue() or schedule() calls from within a couple
814  * xip_disable()'d  areas of code, like in do_erase_oneblock for example.
815  * The queueing and scheduling are always happening within xip_udelay().
816  *
817  * Similarly, get_chip() and put_chip() just happen to always be executed
818  * with chip->state set to FL_READY (or FL_XIP_WHILE_*) where flash state
819  * is in array mode, therefore never executing many cases therein and not
820  * causing any problem with XIP.
821  */
822
823 #else
824
825 #define xip_disable(map, chip, adr)
826 #define xip_enable(map, chip, adr)
827 #define XIP_INVAL_CACHED_RANGE(x...)
828
829 #define UDELAY(map, chip, adr, usec)  \
830 do {  \
831         spin_unlock(chip->mutex);  \
832         cfi_udelay(usec);  \
833         spin_lock(chip->mutex);  \
834 } while (0)
835
836 #define INVALIDATE_CACHE_UDELAY(map, chip, adr, len, usec)  \
837 do {  \
838         spin_unlock(chip->mutex);  \
839         INVALIDATE_CACHED_RANGE(map, adr, len);  \
840         cfi_udelay(usec);  \
841         spin_lock(chip->mutex);  \
842 } while (0)
843
844 #endif
845
846 static inline int do_read_onechip(struct map_info *map, struct flchip *chip, loff_t adr, size_t len, u_char *buf)
847 {
848         unsigned long cmd_addr;
849         struct cfi_private *cfi = map->fldrv_priv;
850         int ret;
851
852         adr += chip->start;
853
854         /* Ensure cmd read/writes are aligned. */
855         cmd_addr = adr & ~(map_bankwidth(map)-1);
856
857         spin_lock(chip->mutex);
858         ret = get_chip(map, chip, cmd_addr, FL_READY);
859         if (ret) {
860                 spin_unlock(chip->mutex);
861                 return ret;
862         }
863
864         if (chip->state != FL_POINT && chip->state != FL_READY) {
865                 map_write(map, CMD(0xf0), cmd_addr);
866                 chip->state = FL_READY;
867         }
868
869         map_copy_from(map, buf, adr, len);
870
871         put_chip(map, chip, cmd_addr);
872
873         spin_unlock(chip->mutex);
874         return 0;
875 }
876
877
878 static int cfi_amdstd_read (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf)
879 {
880         struct map_info *map = mtd->priv;
881         struct cfi_private *cfi = map->fldrv_priv;
882         unsigned long ofs;
883         int chipnum;
884         int ret = 0;
885
886         /* ofs: offset within the first chip that the first read should start */
887
888         chipnum = (from >> cfi->chipshift);
889         ofs = from - (chipnum <<  cfi->chipshift);
890
891
892         *retlen = 0;
893
894         while (len) {
895                 unsigned long thislen;
896
897                 if (chipnum >= cfi->numchips)
898                         break;
899
900                 if ((len + ofs -1) >> cfi->chipshift)
901                         thislen = (1<<cfi->chipshift) - ofs;
902                 else
903                         thislen = len;
904
905                 ret = do_read_onechip(map, &cfi->chips[chipnum], ofs, thislen, buf);
906                 if (ret)
907                         break;
908
909                 *retlen += thislen;
910                 len -= thislen;
911                 buf += thislen;
912
913                 ofs = 0;
914                 chipnum++;
915         }
916         return ret;
917 }
918
919
920 static inline int do_read_secsi_onechip(struct map_info *map, struct flchip *chip, loff_t adr, size_t len, u_char *buf)
921 {
922         DECLARE_WAITQUEUE(wait, current);
923         unsigned long timeo = jiffies + HZ;
924         struct cfi_private *cfi = map->fldrv_priv;
925
926  retry:
927         spin_lock(chip->mutex);
928
929         if (chip->state != FL_READY){
930 #if 0
931                 printk(KERN_DEBUG "Waiting for chip to read, status = %d\n", chip->state);
932 #endif
933                 set_current_state(TASK_UNINTERRUPTIBLE);
934                 add_wait_queue(&chip->wq, &wait);
935
936                 spin_unlock(chip->mutex);
937
938                 schedule();
939                 remove_wait_queue(&chip->wq, &wait);
940 #if 0
941                 if(signal_pending(current))
942                         return -EINTR;
943 #endif
944                 timeo = jiffies + HZ;
945
946                 goto retry;
947         }
948
949         adr += chip->start;
950
951         chip->state = FL_READY;
952
953         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
954         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
955         cfi_send_gen_cmd(0x88, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
956
957         map_copy_from(map, buf, adr, len);
958
959         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
960         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
961         cfi_send_gen_cmd(0x90, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
962         cfi_send_gen_cmd(0x00, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
963
964         wake_up(&chip->wq);
965         spin_unlock(chip->mutex);
966
967         return 0;
968 }
969
970 static int cfi_amdstd_secsi_read (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf)
971 {
972         struct map_info *map = mtd->priv;
973         struct cfi_private *cfi = map->fldrv_priv;
974         unsigned long ofs;
975         int chipnum;
976         int ret = 0;
977
978
979         /* ofs: offset within the first chip that the first read should start */
980
981         /* 8 secsi bytes per chip */
982         chipnum=from>>3;
983         ofs=from & 7;
984
985
986         *retlen = 0;
987
988         while (len) {
989                 unsigned long thislen;
990
991                 if (chipnum >= cfi->numchips)
992                         break;
993
994                 if ((len + ofs -1) >> 3)
995                         thislen = (1<<3) - ofs;
996                 else
997                         thislen = len;
998
999                 ret = do_read_secsi_onechip(map, &cfi->chips[chipnum], ofs, thislen, buf);
1000                 if (ret)
1001                         break;
1002
1003                 *retlen += thislen;
1004                 len -= thislen;
1005                 buf += thislen;
1006
1007                 ofs = 0;
1008                 chipnum++;
1009         }
1010         return ret;
1011 }
1012
1013
1014 static int __xipram do_write_oneword(struct map_info *map, struct flchip *chip, unsigned long adr, map_word datum)
1015 {
1016         struct cfi_private *cfi = map->fldrv_priv;
1017         unsigned long timeo = jiffies + HZ;
1018         /*
1019          * We use a 1ms + 1 jiffies generic timeout for writes (most devices
1020          * have a max write time of a few hundreds usec). However, we should
1021          * use the maximum timeout value given by the chip at probe time
1022          * instead.  Unfortunately, struct flchip does have a field for
1023          * maximum timeout, only for typical which can be far too short
1024          * depending of the conditions.  The ' + 1' is to avoid having a
1025          * timeout of 0 jiffies if HZ is smaller than 1000.
1026          */
1027         unsigned long uWriteTimeout = ( HZ / 1000 ) + 1;
1028         int ret = 0;
1029         map_word oldd;
1030         int retry_cnt = 0;
1031
1032         adr += chip->start;
1033
1034         spin_lock(chip->mutex);
1035         ret = get_chip(map, chip, adr, FL_WRITING);
1036         if (ret) {
1037                 spin_unlock(chip->mutex);
1038                 return ret;
1039         }
1040
1041         DEBUG( MTD_DEBUG_LEVEL3, "MTD %s(): WRITE 0x%.8lx(0x%.8lx)\n",
1042                __func__, adr, datum.x[0] );
1043
1044         /*
1045          * Check for a NOP for the case when the datum to write is already
1046          * present - it saves time and works around buggy chips that corrupt
1047          * data at other locations when 0xff is written to a location that
1048          * already contains 0xff.
1049          */
1050         oldd = map_read(map, adr);
1051         if (map_word_equal(map, oldd, datum)) {
1052                 DEBUG( MTD_DEBUG_LEVEL3, "MTD %s(): NOP\n",
1053                        __func__);
1054                 goto op_done;
1055         }
1056
1057         XIP_INVAL_CACHED_RANGE(map, adr, map_bankwidth(map));
1058         ENABLE_VPP(map);
1059         xip_disable(map, chip, adr);
1060  retry:
1061         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1062         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
1063         cfi_send_gen_cmd(0xA0, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1064         map_write(map, datum, adr);
1065         chip->state = FL_WRITING;
1066
1067         INVALIDATE_CACHE_UDELAY(map, chip,
1068                                 adr, map_bankwidth(map),
1069                                 chip->word_write_time);
1070
1071         /* See comment above for timeout value. */
1072         timeo = jiffies + uWriteTimeout;
1073         for (;;) {
1074                 if (chip->state != FL_WRITING) {
1075                         /* Someone's suspended the write. Sleep */
1076                         DECLARE_WAITQUEUE(wait, current);
1077
1078                         set_current_state(TASK_UNINTERRUPTIBLE);
1079                         add_wait_queue(&chip->wq, &wait);
1080                         spin_unlock(chip->mutex);
1081                         schedule();
1082                         remove_wait_queue(&chip->wq, &wait);
1083                         timeo = jiffies + (HZ / 2); /* FIXME */
1084                         spin_lock(chip->mutex);
1085                         continue;
1086                 }
1087
1088                 if (time_after(jiffies, timeo) && !chip_ready(map, adr)){
1089                         xip_enable(map, chip, adr);
1090                         printk(KERN_WARNING "MTD %s(): software timeout\n", __func__);
1091                         xip_disable(map, chip, adr);
1092                         break;
1093                 }
1094
1095                 if (chip_ready(map, adr))
1096                         break;
1097
1098                 /* Latency issues. Drop the lock, wait a while and retry */
1099                 UDELAY(map, chip, adr, 1);
1100         }
1101         /* Did we succeed? */
1102         if (!chip_good(map, adr, datum)) {
1103                 /* reset on all failures. */
1104                 map_write( map, CMD(0xF0), chip->start );
1105                 /* FIXME - should have reset delay before continuing */
1106
1107                 if (++retry_cnt <= MAX_WORD_RETRIES)
1108                         goto retry;
1109
1110                 ret = -EIO;
1111         }
1112         xip_enable(map, chip, adr);
1113  op_done:
1114         chip->state = FL_READY;
1115         put_chip(map, chip, adr);
1116         spin_unlock(chip->mutex);
1117
1118         return ret;
1119 }
1120
1121
1122 static int cfi_amdstd_write_words(struct mtd_info *mtd, loff_t to, size_t len,
1123                                   size_t *retlen, const u_char *buf)
1124 {
1125         struct map_info *map = mtd->priv;
1126         struct cfi_private *cfi = map->fldrv_priv;
1127         int ret = 0;
1128         int chipnum;
1129         unsigned long ofs, chipstart;
1130         DECLARE_WAITQUEUE(wait, current);
1131
1132         *retlen = 0;
1133         if (!len)
1134                 return 0;
1135
1136         chipnum = to >> cfi->chipshift;
1137         ofs = to  - (chipnum << cfi->chipshift);
1138         chipstart = cfi->chips[chipnum].start;
1139
1140         /* If it's not bus-aligned, do the first byte write */
1141         if (ofs & (map_bankwidth(map)-1)) {
1142                 unsigned long bus_ofs = ofs & ~(map_bankwidth(map)-1);
1143                 int i = ofs - bus_ofs;
1144                 int n = 0;
1145                 map_word tmp_buf;
1146
1147  retry:
1148                 spin_lock(cfi->chips[chipnum].mutex);
1149
1150                 if (cfi->chips[chipnum].state != FL_READY) {
1151 #if 0
1152                         printk(KERN_DEBUG "Waiting for chip to write, status = %d\n", cfi->chips[chipnum].state);
1153 #endif
1154                         set_current_state(TASK_UNINTERRUPTIBLE);
1155                         add_wait_queue(&cfi->chips[chipnum].wq, &wait);
1156
1157                         spin_unlock(cfi->chips[chipnum].mutex);
1158
1159                         schedule();
1160                         remove_wait_queue(&cfi->chips[chipnum].wq, &wait);
1161 #if 0
1162                         if(signal_pending(current))
1163                                 return -EINTR;
1164 #endif
1165                         goto retry;
1166                 }
1167
1168                 /* Load 'tmp_buf' with old contents of flash */
1169                 tmp_buf = map_read(map, bus_ofs+chipstart);
1170
1171                 spin_unlock(cfi->chips[chipnum].mutex);
1172
1173                 /* Number of bytes to copy from buffer */
1174                 n = min_t(int, len, map_bankwidth(map)-i);
1175
1176                 tmp_buf = map_word_load_partial(map, tmp_buf, buf, i, n);
1177
1178                 ret = do_write_oneword(map, &cfi->chips[chipnum],
1179                                        bus_ofs, tmp_buf);
1180                 if (ret)
1181                         return ret;
1182
1183                 ofs += n;
1184                 buf += n;
1185                 (*retlen) += n;
1186                 len -= n;
1187
1188                 if (ofs >> cfi->chipshift) {
1189                         chipnum ++;
1190                         ofs = 0;
1191                         if (chipnum == cfi->numchips)
1192                                 return 0;
1193                 }
1194         }
1195
1196         /* We are now aligned, write as much as possible */
1197         while(len >= map_bankwidth(map)) {
1198                 map_word datum;
1199
1200                 datum = map_word_load(map, buf);
1201
1202                 ret = do_write_oneword(map, &cfi->chips[chipnum],
1203                                        ofs, datum);
1204                 if (ret)
1205                         return ret;
1206
1207                 ofs += map_bankwidth(map);
1208                 buf += map_bankwidth(map);
1209                 (*retlen) += map_bankwidth(map);
1210                 len -= map_bankwidth(map);
1211
1212                 if (ofs >> cfi->chipshift) {
1213                         chipnum ++;
1214                         ofs = 0;
1215                         if (chipnum == cfi->numchips)
1216                                 return 0;
1217                         chipstart = cfi->chips[chipnum].start;
1218                 }
1219         }
1220
1221         /* Write the trailing bytes if any */
1222         if (len & (map_bankwidth(map)-1)) {
1223                 map_word tmp_buf;
1224
1225  retry1:
1226                 spin_lock(cfi->chips[chipnum].mutex);
1227
1228                 if (cfi->chips[chipnum].state != FL_READY) {
1229 #if 0
1230                         printk(KERN_DEBUG "Waiting for chip to write, status = %d\n", cfi->chips[chipnum].state);
1231 #endif
1232                         set_current_state(TASK_UNINTERRUPTIBLE);
1233                         add_wait_queue(&cfi->chips[chipnum].wq, &wait);
1234
1235                         spin_unlock(cfi->chips[chipnum].mutex);
1236
1237                         schedule();
1238                         remove_wait_queue(&cfi->chips[chipnum].wq, &wait);
1239 #if 0
1240                         if(signal_pending(current))
1241                                 return -EINTR;
1242 #endif
1243                         goto retry1;
1244                 }
1245
1246                 tmp_buf = map_read(map, ofs + chipstart);
1247
1248                 spin_unlock(cfi->chips[chipnum].mutex);
1249
1250                 tmp_buf = map_word_load_partial(map, tmp_buf, buf, 0, len);
1251
1252                 ret = do_write_oneword(map, &cfi->chips[chipnum],
1253                                 ofs, tmp_buf);
1254                 if (ret)
1255                         return ret;
1256
1257                 (*retlen) += len;
1258         }
1259
1260         return 0;
1261 }
1262
1263
1264 /*
1265  * FIXME: interleaved mode not tested, and probably not supported!
1266  */
1267 static int __xipram do_write_buffer(struct map_info *map, struct flchip *chip,
1268                                     unsigned long adr, const u_char *buf,
1269                                     int len)
1270 {
1271         struct cfi_private *cfi = map->fldrv_priv;
1272         unsigned long timeo = jiffies + HZ;
1273         /* see comments in do_write_oneword() regarding uWriteTimeo. */
1274         unsigned long uWriteTimeout = ( HZ / 1000 ) + 1;
1275         int ret = -EIO;
1276         unsigned long cmd_adr;
1277         int z, words;
1278         map_word datum;
1279
1280         adr += chip->start;
1281         cmd_adr = adr;
1282
1283         spin_lock(chip->mutex);
1284         ret = get_chip(map, chip, adr, FL_WRITING);
1285         if (ret) {
1286                 spin_unlock(chip->mutex);
1287                 return ret;
1288         }
1289
1290         datum = map_word_load(map, buf);
1291
1292         DEBUG( MTD_DEBUG_LEVEL3, "MTD %s(): WRITE 0x%.8lx(0x%.8lx)\n",
1293                __func__, adr, datum.x[0] );
1294
1295         XIP_INVAL_CACHED_RANGE(map, adr, len);
1296         ENABLE_VPP(map);
1297         xip_disable(map, chip, cmd_adr);
1298
1299         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1300         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
1301         //cfi_send_gen_cmd(0xA0, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1302
1303         /* Write Buffer Load */
1304         map_write(map, CMD(0x25), cmd_adr);
1305
1306         chip->state = FL_WRITING_TO_BUFFER;
1307
1308         /* Write length of data to come */
1309         words = len / map_bankwidth(map);
1310         map_write(map, CMD(words - 1), cmd_adr);
1311         /* Write data */
1312         z = 0;
1313         while(z < words * map_bankwidth(map)) {
1314                 datum = map_word_load(map, buf);
1315                 map_write(map, datum, adr + z);
1316
1317                 z += map_bankwidth(map);
1318                 buf += map_bankwidth(map);
1319         }
1320         z -= map_bankwidth(map);
1321
1322         adr += z;
1323
1324         /* Write Buffer Program Confirm: GO GO GO */
1325         map_write(map, CMD(0x29), cmd_adr);
1326         chip->state = FL_WRITING;
1327
1328         INVALIDATE_CACHE_UDELAY(map, chip,
1329                                 adr, map_bankwidth(map),
1330                                 chip->word_write_time);
1331
1332         timeo = jiffies + uWriteTimeout;
1333
1334         for (;;) {
1335                 if (chip->state != FL_WRITING) {
1336                         /* Someone's suspended the write. Sleep */
1337                         DECLARE_WAITQUEUE(wait, current);
1338
1339                         set_current_state(TASK_UNINTERRUPTIBLE);
1340                         add_wait_queue(&chip->wq, &wait);
1341                         spin_unlock(chip->mutex);
1342                         schedule();
1343                         remove_wait_queue(&chip->wq, &wait);
1344                         timeo = jiffies + (HZ / 2); /* FIXME */
1345                         spin_lock(chip->mutex);
1346                         continue;
1347                 }
1348
1349                 if (time_after(jiffies, timeo) && !chip_ready(map, adr))
1350                         break;
1351
1352                 if (chip_ready(map, adr)) {
1353                         xip_enable(map, chip, adr);
1354                         goto op_done;
1355                 }
1356
1357                 /* Latency issues. Drop the lock, wait a while and retry */
1358                 UDELAY(map, chip, adr, 1);
1359         }
1360
1361         /* reset on all failures. */
1362         map_write( map, CMD(0xF0), chip->start );
1363         xip_enable(map, chip, adr);
1364         /* FIXME - should have reset delay before continuing */
1365
1366         printk(KERN_WARNING "MTD %s(): software timeout\n",
1367                __func__ );
1368
1369         ret = -EIO;
1370  op_done:
1371         chip->state = FL_READY;
1372         put_chip(map, chip, adr);
1373         spin_unlock(chip->mutex);
1374
1375         return ret;
1376 }
1377
1378
1379 static int cfi_amdstd_write_buffers(struct mtd_info *mtd, loff_t to, size_t len,
1380                                     size_t *retlen, const u_char *buf)
1381 {
1382         struct map_info *map = mtd->priv;
1383         struct cfi_private *cfi = map->fldrv_priv;
1384         int wbufsize = cfi_interleave(cfi) << cfi->cfiq->MaxBufWriteSize;
1385         int ret = 0;
1386         int chipnum;
1387         unsigned long ofs;
1388
1389         *retlen = 0;
1390         if (!len)
1391                 return 0;
1392
1393         chipnum = to >> cfi->chipshift;
1394         ofs = to  - (chipnum << cfi->chipshift);
1395
1396         /* If it's not bus-aligned, do the first word write */
1397         if (ofs & (map_bankwidth(map)-1)) {
1398                 size_t local_len = (-ofs)&(map_bankwidth(map)-1);
1399                 if (local_len > len)
1400                         local_len = len;
1401                 ret = cfi_amdstd_write_words(mtd, ofs + (chipnum<<cfi->chipshift),
1402                                              local_len, retlen, buf);
1403                 if (ret)
1404                         return ret;
1405                 ofs += local_len;
1406                 buf += local_len;
1407                 len -= local_len;
1408
1409                 if (ofs >> cfi->chipshift) {
1410                         chipnum ++;
1411                         ofs = 0;
1412                         if (chipnum == cfi->numchips)
1413                                 return 0;
1414                 }
1415         }
1416
1417         /* Write buffer is worth it only if more than one word to write... */
1418         while (len >= map_bankwidth(map) * 2) {
1419                 /* We must not cross write block boundaries */
1420                 int size = wbufsize - (ofs & (wbufsize-1));
1421
1422                 if (size > len)
1423                         size = len;
1424                 if (size % map_bankwidth(map))
1425                         size -= size % map_bankwidth(map);
1426
1427                 ret = do_write_buffer(map, &cfi->chips[chipnum],
1428                                       ofs, buf, size);
1429                 if (ret)
1430                         return ret;
1431
1432                 ofs += size;
1433                 buf += size;
1434                 (*retlen) += size;
1435                 len -= size;
1436
1437                 if (ofs >> cfi->chipshift) {
1438                         chipnum ++;
1439                         ofs = 0;
1440                         if (chipnum == cfi->numchips)
1441                                 return 0;
1442                 }
1443         }
1444
1445         if (len) {
1446                 size_t retlen_dregs = 0;
1447
1448                 ret = cfi_amdstd_write_words(mtd, ofs + (chipnum<<cfi->chipshift),
1449                                              len, &retlen_dregs, buf);
1450
1451                 *retlen += retlen_dregs;
1452                 return ret;
1453         }
1454
1455         return 0;
1456 }
1457
1458
1459 /*
1460  * Handle devices with one erase region, that only implement
1461  * the chip erase command.
1462  */
1463 static int __xipram do_erase_chip(struct map_info *map, struct flchip *chip)
1464 {
1465         struct cfi_private *cfi = map->fldrv_priv;
1466         unsigned long timeo = jiffies + HZ;
1467         unsigned long int adr;
1468         DECLARE_WAITQUEUE(wait, current);
1469         int ret = 0;
1470
1471         adr = cfi->addr_unlock1;
1472
1473         spin_lock(chip->mutex);
1474         ret = get_chip(map, chip, adr, FL_WRITING);
1475         if (ret) {
1476                 spin_unlock(chip->mutex);
1477                 return ret;
1478         }
1479
1480         DEBUG( MTD_DEBUG_LEVEL3, "MTD %s(): ERASE 0x%.8lx\n",
1481                __func__, chip->start );
1482
1483         XIP_INVAL_CACHED_RANGE(map, adr, map->size);
1484         ENABLE_VPP(map);
1485         xip_disable(map, chip, adr);
1486
1487         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1488         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
1489         cfi_send_gen_cmd(0x80, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1490         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1491         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
1492         cfi_send_gen_cmd(0x10, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1493
1494         chip->state = FL_ERASING;
1495         chip->erase_suspended = 0;
1496         chip->in_progress_block_addr = adr;
1497
1498         INVALIDATE_CACHE_UDELAY(map, chip,
1499                                 adr, map->size,
1500                                 chip->erase_time*500);
1501
1502         timeo = jiffies + (HZ*20);
1503
1504         for (;;) {
1505                 if (chip->state != FL_ERASING) {
1506                         /* Someone's suspended the erase. Sleep */
1507                         set_current_state(TASK_UNINTERRUPTIBLE);
1508                         add_wait_queue(&chip->wq, &wait);
1509                         spin_unlock(chip->mutex);
1510                         schedule();
1511                         remove_wait_queue(&chip->wq, &wait);
1512                         spin_lock(chip->mutex);
1513                         continue;
1514                 }
1515                 if (chip->erase_suspended) {
1516                         /* This erase was suspended and resumed.
1517                            Adjust the timeout */
1518                         timeo = jiffies + (HZ*20); /* FIXME */
1519                         chip->erase_suspended = 0;
1520                 }
1521
1522                 if (chip_ready(map, adr))
1523                         break;
1524
1525                 if (time_after(jiffies, timeo)) {
1526                         printk(KERN_WARNING "MTD %s(): software timeout\n",
1527                                 __func__ );
1528                         break;
1529                 }
1530
1531                 /* Latency issues. Drop the lock, wait a while and retry */
1532                 UDELAY(map, chip, adr, 1000000/HZ);
1533         }
1534         /* Did we succeed? */
1535         if (!chip_good(map, adr, map_word_ff(map))) {
1536                 /* reset on all failures. */
1537                 map_write( map, CMD(0xF0), chip->start );
1538                 /* FIXME - should have reset delay before continuing */
1539
1540                 ret = -EIO;
1541         }
1542
1543         chip->state = FL_READY;
1544         xip_enable(map, chip, adr);
1545         put_chip(map, chip, adr);
1546         spin_unlock(chip->mutex);
1547
1548         return ret;
1549 }
1550
1551
1552 static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip, unsigned long adr, int len, void *thunk)
1553 {
1554         struct cfi_private *cfi = map->fldrv_priv;
1555         unsigned long timeo = jiffies + HZ;
1556         DECLARE_WAITQUEUE(wait, current);
1557         int ret = 0;
1558
1559         adr += chip->start;
1560
1561         spin_lock(chip->mutex);
1562         ret = get_chip(map, chip, adr, FL_ERASING);
1563         if (ret) {
1564                 spin_unlock(chip->mutex);
1565                 return ret;
1566         }
1567
1568         DEBUG( MTD_DEBUG_LEVEL3, "MTD %s(): ERASE 0x%.8lx\n",
1569                __func__, adr );
1570
1571         XIP_INVAL_CACHED_RANGE(map, adr, len);
1572         ENABLE_VPP(map);
1573         xip_disable(map, chip, adr);
1574
1575         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1576         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
1577         cfi_send_gen_cmd(0x80, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1578         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1579         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
1580         map_write(map, CMD(0x30), adr);
1581
1582         chip->state = FL_ERASING;
1583         chip->erase_suspended = 0;
1584         chip->in_progress_block_addr = adr;
1585
1586         INVALIDATE_CACHE_UDELAY(map, chip,
1587                                 adr, len,
1588                                 chip->erase_time*500);
1589
1590         timeo = jiffies + (HZ*20);
1591
1592         for (;;) {
1593                 if (chip->state != FL_ERASING) {
1594                         /* Someone's suspended the erase. Sleep */
1595                         set_current_state(TASK_UNINTERRUPTIBLE);
1596                         add_wait_queue(&chip->wq, &wait);
1597                         spin_unlock(chip->mutex);
1598                         schedule();
1599                         remove_wait_queue(&chip->wq, &wait);
1600                         spin_lock(chip->mutex);
1601                         continue;
1602                 }
1603                 if (chip->erase_suspended) {
1604                         /* This erase was suspended and resumed.
1605                            Adjust the timeout */
1606                         timeo = jiffies + (HZ*20); /* FIXME */
1607                         chip->erase_suspended = 0;
1608                 }
1609
1610                 if (chip_ready(map, adr)) {
1611                         xip_enable(map, chip, adr);
1612                         break;
1613                 }
1614
1615                 if (time_after(jiffies, timeo)) {
1616                         xip_enable(map, chip, adr);
1617                         printk(KERN_WARNING "MTD %s(): software timeout\n",
1618                                 __func__ );
1619                         break;
1620                 }
1621
1622                 /* Latency issues. Drop the lock, wait a while and retry */
1623                 UDELAY(map, chip, adr, 1000000/HZ);
1624         }
1625         /* Did we succeed? */
1626         if (!chip_good(map, adr, map_word_ff(map))) {
1627                 /* reset on all failures. */
1628                 map_write( map, CMD(0xF0), chip->start );
1629                 /* FIXME - should have reset delay before continuing */
1630
1631                 ret = -EIO;
1632         }
1633
1634         chip->state = FL_READY;
1635         put_chip(map, chip, adr);
1636         spin_unlock(chip->mutex);
1637         return ret;
1638 }
1639
1640
1641 static int cfi_amdstd_erase_varsize(struct mtd_info *mtd, struct erase_info *instr)
1642 {
1643         unsigned long ofs, len;
1644         int ret;
1645
1646         ofs = instr->addr;
1647         len = instr->len;
1648
1649         ret = cfi_varsize_frob(mtd, do_erase_oneblock, ofs, len, NULL);
1650         if (ret)
1651                 return ret;
1652
1653         instr->state = MTD_ERASE_DONE;
1654         mtd_erase_callback(instr);
1655
1656         return 0;
1657 }
1658
1659
1660 static int cfi_amdstd_erase_chip(struct mtd_info *mtd, struct erase_info *instr)
1661 {
1662         struct map_info *map = mtd->priv;
1663         struct cfi_private *cfi = map->fldrv_priv;
1664         int ret = 0;
1665
1666         if (instr->addr != 0)
1667                 return -EINVAL;
1668
1669         if (instr->len != mtd->size)
1670                 return -EINVAL;
1671
1672         ret = do_erase_chip(map, &cfi->chips[0]);
1673         if (ret)
1674                 return ret;
1675
1676         instr->state = MTD_ERASE_DONE;
1677         mtd_erase_callback(instr);
1678
1679         return 0;
1680 }
1681
1682 static int do_atmel_lock(struct map_info *map, struct flchip *chip,
1683                          unsigned long adr, int len, void *thunk)
1684 {
1685         struct cfi_private *cfi = map->fldrv_priv;
1686         int ret;
1687
1688         spin_lock(chip->mutex);
1689         ret = get_chip(map, chip, adr + chip->start, FL_LOCKING);
1690         if (ret)
1691                 goto out_unlock;
1692         chip->state = FL_LOCKING;
1693
1694         DEBUG(MTD_DEBUG_LEVEL3, "MTD %s(): LOCK 0x%08lx len %d\n",
1695               __func__, adr, len);
1696
1697         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi,
1698                          cfi->device_type, NULL);
1699         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi,
1700                          cfi->device_type, NULL);
1701         cfi_send_gen_cmd(0x80, cfi->addr_unlock1, chip->start, map, cfi,
1702                          cfi->device_type, NULL);
1703         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi,
1704                          cfi->device_type, NULL);
1705         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi,
1706                          cfi->device_type, NULL);
1707         map_write(map, CMD(0x40), chip->start + adr);
1708
1709         chip->state = FL_READY;
1710         put_chip(map, chip, adr + chip->start);
1711         ret = 0;
1712
1713 out_unlock:
1714         spin_unlock(chip->mutex);
1715         return ret;
1716 }
1717
1718 static int do_atmel_unlock(struct map_info *map, struct flchip *chip,
1719                            unsigned long adr, int len, void *thunk)
1720 {
1721         struct cfi_private *cfi = map->fldrv_priv;
1722         int ret;
1723
1724         spin_lock(chip->mutex);
1725         ret = get_chip(map, chip, adr + chip->start, FL_UNLOCKING);
1726         if (ret)
1727                 goto out_unlock;
1728         chip->state = FL_UNLOCKING;
1729
1730         DEBUG(MTD_DEBUG_LEVEL3, "MTD %s(): LOCK 0x%08lx len %d\n",
1731               __func__, adr, len);
1732
1733         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi,
1734                          cfi->device_type, NULL);
1735         map_write(map, CMD(0x70), adr);
1736
1737         chip->state = FL_READY;
1738         put_chip(map, chip, adr + chip->start);
1739         ret = 0;
1740
1741 out_unlock:
1742         spin_unlock(chip->mutex);
1743         return ret;
1744 }
1745
1746 static int cfi_atmel_lock(struct mtd_info *mtd, loff_t ofs, size_t len)
1747 {
1748         return cfi_varsize_frob(mtd, do_atmel_lock, ofs, len, NULL);
1749 }
1750
1751 static int cfi_atmel_unlock(struct mtd_info *mtd, loff_t ofs, size_t len)
1752 {
1753         return cfi_varsize_frob(mtd, do_atmel_unlock, ofs, len, NULL);
1754 }
1755
1756
1757 static void cfi_amdstd_sync (struct mtd_info *mtd)
1758 {
1759         struct map_info *map = mtd->priv;
1760         struct cfi_private *cfi = map->fldrv_priv;
1761         int i;
1762         struct flchip *chip;
1763         int ret = 0;
1764         DECLARE_WAITQUEUE(wait, current);
1765
1766         for (i=0; !ret && i<cfi->numchips; i++) {
1767                 chip = &cfi->chips[i];
1768
1769         retry:
1770                 spin_lock(chip->mutex);
1771
1772                 switch(chip->state) {
1773                 case FL_READY:
1774                 case FL_STATUS:
1775                 case FL_CFI_QUERY:
1776                 case FL_JEDEC_QUERY:
1777                         chip->oldstate = chip->state;
1778                         chip->state = FL_SYNCING;
1779                         /* No need to wake_up() on this state change -
1780                          * as the whole point is that nobody can do anything
1781                          * with the chip now anyway.
1782                          */
1783                 case FL_SYNCING:
1784                         spin_unlock(chip->mutex);
1785                         break;
1786
1787                 default:
1788                         /* Not an idle state */
1789                         set_current_state(TASK_UNINTERRUPTIBLE);
1790                         add_wait_queue(&chip->wq, &wait);
1791
1792                         spin_unlock(chip->mutex);
1793
1794                         schedule();
1795
1796                         remove_wait_queue(&chip->wq, &wait);
1797
1798                         goto retry;
1799                 }
1800         }
1801
1802         /* Unlock the chips again */
1803
1804         for (i--; i >=0; i--) {
1805                 chip = &cfi->chips[i];
1806
1807                 spin_lock(chip->mutex);
1808
1809                 if (chip->state == FL_SYNCING) {
1810                         chip->state = chip->oldstate;
1811                         wake_up(&chip->wq);
1812                 }
1813                 spin_unlock(chip->mutex);
1814         }
1815 }
1816
1817
1818 static int cfi_amdstd_suspend(struct mtd_info *mtd)
1819 {
1820         struct map_info *map = mtd->priv;
1821         struct cfi_private *cfi = map->fldrv_priv;
1822         int i;
1823         struct flchip *chip;
1824         int ret = 0;
1825
1826         for (i=0; !ret && i<cfi->numchips; i++) {
1827                 chip = &cfi->chips[i];
1828
1829                 spin_lock(chip->mutex);
1830
1831                 switch(chip->state) {
1832                 case FL_READY:
1833                 case FL_STATUS:
1834                 case FL_CFI_QUERY:
1835                 case FL_JEDEC_QUERY:
1836                         chip->oldstate = chip->state;
1837                         chip->state = FL_PM_SUSPENDED;
1838                         /* No need to wake_up() on this state change -
1839                          * as the whole point is that nobody can do anything
1840                          * with the chip now anyway.
1841                          */
1842                 case FL_PM_SUSPENDED:
1843                         break;
1844
1845                 default:
1846                         ret = -EAGAIN;
1847                         break;
1848                 }
1849                 spin_unlock(chip->mutex);
1850         }
1851
1852         /* Unlock the chips again */
1853
1854         if (ret) {
1855                 for (i--; i >=0; i--) {
1856                         chip = &cfi->chips[i];
1857
1858                         spin_lock(chip->mutex);
1859
1860                         if (chip->state == FL_PM_SUSPENDED) {
1861                                 chip->state = chip->oldstate;
1862                                 wake_up(&chip->wq);
1863                         }
1864                         spin_unlock(chip->mutex);
1865                 }
1866         }
1867
1868         return ret;
1869 }
1870
1871
1872 static void cfi_amdstd_resume(struct mtd_info *mtd)
1873 {
1874         struct map_info *map = mtd->priv;
1875         struct cfi_private *cfi = map->fldrv_priv;
1876         int i;
1877         struct flchip *chip;
1878
1879         for (i=0; i<cfi->numchips; i++) {
1880
1881                 chip = &cfi->chips[i];
1882
1883                 spin_lock(chip->mutex);
1884
1885                 if (chip->state == FL_PM_SUSPENDED) {
1886                         chip->state = FL_READY;
1887                         map_write(map, CMD(0xF0), chip->start);
1888                         wake_up(&chip->wq);
1889                 }
1890                 else
1891                         printk(KERN_ERR "Argh. Chip not in PM_SUSPENDED state upon resume()\n");
1892
1893                 spin_unlock(chip->mutex);
1894         }
1895 }
1896
1897 static void cfi_amdstd_destroy(struct mtd_info *mtd)
1898 {
1899         struct map_info *map = mtd->priv;
1900         struct cfi_private *cfi = map->fldrv_priv;
1901
1902         kfree(cfi->cmdset_priv);
1903         kfree(cfi->cfiq);
1904         kfree(cfi);
1905         kfree(mtd->eraseregions);
1906 }
1907
1908 MODULE_LICENSE("GPL");
1909 MODULE_AUTHOR("Crossnet Co. <info@crossnet.co.jp> et al.");
1910 MODULE_DESCRIPTION("MTD chip driver for AMD/Fujitsu flash chips");