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");
1963