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