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