1 /*
2  * Common Flash Interface support:
3  *   Intel Extended Vendor Command Set (ID 0x0001)
4  *
5  * (C) 2000 Red Hat. GPL'd
6  *
7  * $Id: cfi_cmdset_0001.c,v 1.186 2005/11/23 22:07:52 nico Exp $
8  *
9  *
10  * 10/10/2000	Nicolas Pitre <nico@cam.org>
11  * 	- completely revamped method functions so they are aware and
12  * 	  independent of the flash geometry (buswidth, interleave, etc.)
13  * 	- scalability vs code size is completely set at compile-time
14  * 	  (see include/linux/mtd/cfi.h for selection)
15  *	- optimized write buffer method
16  * 02/05/2002	Christopher Hoover <ch@hpl.hp.com>/<ch@murgatroid.com>
17  *	- reworked lock/unlock/erase support for var size flash
18  * 21/03/2007   Rodolfo Giometti <giometti@linux.it>
19  * 	- auto unlock sectors on resume for auto locking flash on power up
20  */
21 
22 #include <linux/module.h>
23 #include <linux/types.h>
24 #include <linux/kernel.h>
25 #include <linux/sched.h>
26 #include <linux/init.h>
27 #include <asm/io.h>
28 #include <asm/byteorder.h>
29 
30 #include <linux/errno.h>
31 #include <linux/slab.h>
32 #include <linux/delay.h>
33 #include <linux/interrupt.h>
34 #include <linux/reboot.h>
35 #include <linux/bitmap.h>
36 #include <linux/mtd/xip.h>
37 #include <linux/mtd/map.h>
38 #include <linux/mtd/mtd.h>
39 #include <linux/mtd/compatmac.h>
40 #include <linux/mtd/cfi.h>
41 
42 /* #define CMDSET0001_DISABLE_ERASE_SUSPEND_ON_WRITE */
43 /* #define CMDSET0001_DISABLE_WRITE_SUSPEND */
44 
45 // debugging, turns off buffer write mode if set to 1
46 #define FORCE_WORD_WRITE 0
47 
48 #define MANUFACTURER_INTEL	0x0089
49 #define I82802AB	0x00ad
50 #define I82802AC	0x00ac
51 #define MANUFACTURER_ST         0x0020
52 #define M50LPW080       0x002F
53 
54 static int cfi_intelext_read (struct mtd_info *, loff_t, size_t, size_t *, u_char *);
55 static int cfi_intelext_write_words(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
56 static int cfi_intelext_write_buffers(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
57 static int cfi_intelext_writev(struct mtd_info *, const struct kvec *, unsigned long, loff_t, size_t *);
58 static int cfi_intelext_erase_varsize(struct mtd_info *, struct erase_info *);
59 static void cfi_intelext_sync (struct mtd_info *);
60 static int cfi_intelext_lock(struct mtd_info *mtd, loff_t ofs, size_t len);
61 static int cfi_intelext_unlock(struct mtd_info *mtd, loff_t ofs, size_t len);
62 #ifdef CONFIG_MTD_OTP
63 static int cfi_intelext_read_fact_prot_reg (struct mtd_info *, loff_t, size_t, size_t *, u_char *);
64 static int cfi_intelext_read_user_prot_reg (struct mtd_info *, loff_t, size_t, size_t *, u_char *);
65 static int cfi_intelext_write_user_prot_reg (struct mtd_info *, loff_t, size_t, size_t *, u_char *);
66 static int cfi_intelext_lock_user_prot_reg (struct mtd_info *, loff_t, size_t);
67 static int cfi_intelext_get_fact_prot_info (struct mtd_info *,
68 					    struct otp_info *, size_t);
69 static int cfi_intelext_get_user_prot_info (struct mtd_info *,
70 					    struct otp_info *, size_t);
71 #endif
72 static int cfi_intelext_suspend (struct mtd_info *);
73 static void cfi_intelext_resume (struct mtd_info *);
74 static int cfi_intelext_reboot (struct notifier_block *, unsigned long, void *);
75 
76 static void cfi_intelext_destroy(struct mtd_info *);
77 
78 struct mtd_info *cfi_cmdset_0001(struct map_info *, int);
79 
80 static struct mtd_info *cfi_intelext_setup (struct mtd_info *);
81 static int cfi_intelext_partition_fixup(struct mtd_info *, struct cfi_private **);
82 
83 static int cfi_intelext_point (struct mtd_info *mtd, loff_t from, size_t len,
84 		     size_t *retlen, u_char **mtdbuf);
85 static void cfi_intelext_unpoint (struct mtd_info *mtd, u_char *addr, loff_t from,
86 			size_t len);
87 
88 static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr, int mode);
89 static void put_chip(struct map_info *map, struct flchip *chip, unsigned long adr);
90 #include "fwh_lock.h"
91 
92 
93 
94 /*
95  *  *********** SETUP AND PROBE BITS  ***********
96  */
97 
98 static struct mtd_chip_driver cfi_intelext_chipdrv = {
99 	.probe		= NULL, /* Not usable directly */
100 	.destroy	= cfi_intelext_destroy,
101 	.name		= "cfi_cmdset_0001",
102 	.module		= THIS_MODULE
103 };
104 
105 /* #define DEBUG_LOCK_BITS */
106 /* #define DEBUG_CFI_FEATURES */
107 
108 #ifdef DEBUG_CFI_FEATURES
109 static void cfi_tell_features(struct cfi_pri_intelext *extp)
110 {
111 	int i;
112 	printk("  Extended Query version %c.%c\n", extp->MajorVersion, extp->MinorVersion);
113 	printk("  Feature/Command Support:      %4.4X\n", extp->FeatureSupport);
114 	printk("     - Chip Erase:              %s\n", extp->FeatureSupport&1?"supported":"unsupported");
115 	printk("     - Suspend Erase:           %s\n", extp->FeatureSupport&2?"supported":"unsupported");
116 	printk("     - Suspend Program:         %s\n", extp->FeatureSupport&4?"supported":"unsupported");
117 	printk("     - Legacy Lock/Unlock:      %s\n", extp->FeatureSupport&8?"supported":"unsupported");
118 	printk("     - Queued Erase:            %s\n", extp->FeatureSupport&16?"supported":"unsupported");
119 	printk("     - Instant block lock:      %s\n", extp->FeatureSupport&32?"supported":"unsupported");
120 	printk("     - Protection Bits:         %s\n", extp->FeatureSupport&64?"supported":"unsupported");
121 	printk("     - Page-mode read:          %s\n", extp->FeatureSupport&128?"supported":"unsupported");
122 	printk("     - Synchronous read:        %s\n", extp->FeatureSupport&256?"supported":"unsupported");
123 	printk("     - Simultaneous operations: %s\n", extp->FeatureSupport&512?"supported":"unsupported");
124 	printk("     - Extended Flash Array:    %s\n", extp->FeatureSupport&1024?"supported":"unsupported");
125 	for (i=11; i<32; i++) {
126 		if (extp->FeatureSupport & (1<<i))
127 			printk("     - Unknown Bit %X:      supported\n", i);
128 	}
129 
130 	printk("  Supported functions after Suspend: %2.2X\n", extp->SuspendCmdSupport);
131 	printk("     - Program after Erase Suspend: %s\n", extp->SuspendCmdSupport&1?"supported":"unsupported");
132 	for (i=1; i<8; i++) {
133 		if (extp->SuspendCmdSupport & (1<<i))
134 			printk("     - Unknown Bit %X:               supported\n", i);
135 	}
136 
137 	printk("  Block Status Register Mask: %4.4X\n", extp->BlkStatusRegMask);
138 	printk("     - Lock Bit Active:      %s\n", extp->BlkStatusRegMask&1?"yes":"no");
139 	printk("     - Lock-Down Bit Active: %s\n", extp->BlkStatusRegMask&2?"yes":"no");
140 	for (i=2; i<3; i++) {
141 		if (extp->BlkStatusRegMask & (1<<i))
142 			printk("     - Unknown Bit %X Active: yes\n",i);
143 	}
144 	printk("     - EFA Lock Bit:         %s\n", extp->BlkStatusRegMask&16?"yes":"no");
145 	printk("     - EFA Lock-Down Bit:    %s\n", extp->BlkStatusRegMask&32?"yes":"no");
146 	for (i=6; i<16; i++) {
147 		if (extp->BlkStatusRegMask & (1<<i))
148 			printk("     - Unknown Bit %X Active: yes\n",i);
149 	}
150 
151 	printk("  Vcc Logic Supply Optimum Program/Erase Voltage: %d.%d V\n",
152 	       extp->VccOptimal >> 4, extp->VccOptimal & 0xf);
153 	if (extp->VppOptimal)
154 		printk("  Vpp Programming Supply Optimum Program/Erase Voltage: %d.%d V\n",
155 		       extp->VppOptimal >> 4, extp->VppOptimal & 0xf);
156 }
157 #endif
158 
159 #ifdef CMDSET0001_DISABLE_ERASE_SUSPEND_ON_WRITE
160 /* Some Intel Strata Flash prior to FPO revision C has bugs in this area */
161 static void fixup_intel_strataflash(struct mtd_info *mtd, void* param)
162 {
163 	struct map_info *map = mtd->priv;
164 	struct cfi_private *cfi = map->fldrv_priv;
165 	struct cfi_pri_amdstd *extp = cfi->cmdset_priv;
166 
167 	printk(KERN_WARNING "cfi_cmdset_0001: Suspend "
168 	                    "erase on write disabled.\n");
169 	extp->SuspendCmdSupport &= ~1;
170 }
171 #endif
172 
173 #ifdef CMDSET0001_DISABLE_WRITE_SUSPEND
174 static void fixup_no_write_suspend(struct mtd_info *mtd, void* param)
175 {
176 	struct map_info *map = mtd->priv;
177 	struct cfi_private *cfi = map->fldrv_priv;
178 	struct cfi_pri_intelext *cfip = cfi->cmdset_priv;
179 
180 	if (cfip && (cfip->FeatureSupport&4)) {
181 		cfip->FeatureSupport &= ~4;
182 		printk(KERN_WARNING "cfi_cmdset_0001: write suspend disabled\n");
183 	}
184 }
185 #endif
186 
187 static void fixup_st_m28w320ct(struct mtd_info *mtd, void* param)
188 {
189 	struct map_info *map = mtd->priv;
190 	struct cfi_private *cfi = map->fldrv_priv;
191 
192 	cfi->cfiq->BufWriteTimeoutTyp = 0;	/* Not supported */
193 	cfi->cfiq->BufWriteTimeoutMax = 0;	/* Not supported */
194 }
195 
196 static void fixup_st_m28w320cb(struct mtd_info *mtd, void* param)
197 {
198 	struct map_info *map = mtd->priv;
199 	struct cfi_private *cfi = map->fldrv_priv;
200 
201 	/* Note this is done after the region info is endian swapped */
202 	cfi->cfiq->EraseRegionInfo[1] =
203 		(cfi->cfiq->EraseRegionInfo[1] & 0xffff0000) | 0x3e;
204 };
205 
206 static void fixup_use_point(struct mtd_info *mtd, void *param)
207 {
208 	struct map_info *map = mtd->priv;
209 	if (!mtd->point && map_is_linear(map)) {
210 		mtd->point   = cfi_intelext_point;
211 		mtd->unpoint = cfi_intelext_unpoint;
212 	}
213 }
214 
215 static void fixup_use_write_buffers(struct mtd_info *mtd, void *param)
216 {
217 	struct map_info *map = mtd->priv;
218 	struct cfi_private *cfi = map->fldrv_priv;
219 	if (cfi->cfiq->BufWriteTimeoutTyp) {
220 		printk(KERN_INFO "Using buffer write method\n" );
221 		mtd->write = cfi_intelext_write_buffers;
222 		mtd->writev = cfi_intelext_writev;
223 	}
224 }
225 
226 /*
227  * Some chips power-up with all sectors locked by default.
228  */
229 static void fixup_use_powerup_lock(struct mtd_info *mtd, void *param)
230 {
231 	printk(KERN_INFO "Using auto-unlock on power-up/resume\n" );
232 	mtd->flags |= MTD_STUPID_LOCK;
233 }
234 
235 static struct cfi_fixup cfi_fixup_table[] = {
236 #ifdef CMDSET0001_DISABLE_ERASE_SUSPEND_ON_WRITE
237 	{ CFI_MFR_ANY, CFI_ID_ANY, fixup_intel_strataflash, NULL },
238 #endif
239 #ifdef CMDSET0001_DISABLE_WRITE_SUSPEND
240 	{ CFI_MFR_ANY, CFI_ID_ANY, fixup_no_write_suspend, NULL },
241 #endif
242 #if !FORCE_WORD_WRITE
243 	{ CFI_MFR_ANY, CFI_ID_ANY, fixup_use_write_buffers, NULL },
244 #endif
245 	{ CFI_MFR_ST, 0x00ba, /* M28W320CT */ fixup_st_m28w320ct, NULL },
246 	{ CFI_MFR_ST, 0x00bb, /* M28W320CB */ fixup_st_m28w320cb, NULL },
247 	{ MANUFACTURER_INTEL, 0x891c,	      fixup_use_powerup_lock, NULL, },
248 	{ 0, 0, NULL, NULL }
249 };
250 
251 static struct cfi_fixup jedec_fixup_table[] = {
252 	{ MANUFACTURER_INTEL, I82802AB,   fixup_use_fwh_lock, NULL, },
253 	{ MANUFACTURER_INTEL, I82802AC,   fixup_use_fwh_lock, NULL, },
254 	{ MANUFACTURER_ST,    M50LPW080,  fixup_use_fwh_lock, NULL, },
255 	{ 0, 0, NULL, NULL }
256 };
257 static struct cfi_fixup fixup_table[] = {
258 	/* The CFI vendor ids and the JEDEC vendor IDs appear
259 	 * to be common.  It is like the devices id's are as
260 	 * well.  This table is to pick all cases where
261 	 * we know that is the case.
262 	 */
263 	{ CFI_MFR_ANY, CFI_ID_ANY, fixup_use_point, NULL },
264 	{ 0, 0, NULL, NULL }
265 };
266 
267 static inline struct cfi_pri_intelext *
268 read_pri_intelext(struct map_info *map, __u16 adr)
269 {
270 	struct cfi_pri_intelext *extp;
271 	unsigned int extp_size = sizeof(*extp);
272 
273  again:
274 	extp = (struct cfi_pri_intelext *)cfi_read_pri(map, adr, extp_size, "Intel/Sharp");
275 	if (!extp)
276 		return NULL;
277 
278 	if (extp->MajorVersion != '1' ||
279 	    (extp->MinorVersion < '0' || extp->MinorVersion > '4')) {
280 		printk(KERN_ERR "  Unknown Intel/Sharp Extended Query "
281 		       "version %c.%c.\n",  extp->MajorVersion,
282 		       extp->MinorVersion);
283 		kfree(extp);
284 		return NULL;
285 	}
286 
287 	/* Do some byteswapping if necessary */
288 	extp->FeatureSupport = le32_to_cpu(extp->FeatureSupport);
289 	extp->BlkStatusRegMask = le16_to_cpu(extp->BlkStatusRegMask);
290 	extp->ProtRegAddr = le16_to_cpu(extp->ProtRegAddr);
291 
292 	if (extp->MajorVersion == '1' && extp->MinorVersion >= '3') {
293 		unsigned int extra_size = 0;
294 		int nb_parts, i;
295 
296 		/* Protection Register info */
297 		extra_size += (extp->NumProtectionFields - 1) *
298 			      sizeof(struct cfi_intelext_otpinfo);
299 
300 		/* Burst Read info */
301 		extra_size += 2;
302 		if (extp_size < sizeof(*extp) + extra_size)
303 			goto need_more;
304 		extra_size += extp->extra[extra_size-1];
305 
306 		/* Number of hardware-partitions */
307 		extra_size += 1;
308 		if (extp_size < sizeof(*extp) + extra_size)
309 			goto need_more;
310 		nb_parts = extp->extra[extra_size - 1];
311 
312 		/* skip the sizeof(partregion) field in CFI 1.4 */
313 		if (extp->MinorVersion >= '4')
314 			extra_size += 2;
315 
316 		for (i = 0; i < nb_parts; i++) {
317 			struct cfi_intelext_regioninfo *rinfo;
318 			rinfo = (struct cfi_intelext_regioninfo *)&extp->extra[extra_size];
319 			extra_size += sizeof(*rinfo);
320 			if (extp_size < sizeof(*extp) + extra_size)
321 				goto need_more;
322 			rinfo->NumIdentPartitions=le16_to_cpu(rinfo->NumIdentPartitions);
323 			extra_size += (rinfo->NumBlockTypes - 1)
324 				      * sizeof(struct cfi_intelext_blockinfo);
325 		}
326 
327 		if (extp->MinorVersion >= '4')
328 			extra_size += sizeof(struct cfi_intelext_programming_regioninfo);
329 
330 		if (extp_size < sizeof(*extp) + extra_size) {
331 			need_more:
332 			extp_size = sizeof(*extp) + extra_size;
333 			kfree(extp);
334 			if (extp_size > 4096) {
335 				printk(KERN_ERR
336 					"%s: cfi_pri_intelext is too fat\n",
337 					__FUNCTION__);
338 				return NULL;
339 			}
340 			goto again;
341 		}
342 	}
343 
344 	return extp;
345 }
346 
347 struct mtd_info *cfi_cmdset_0001(struct map_info *map, int primary)
348 {
349 	struct cfi_private *cfi = map->fldrv_priv;
350 	struct mtd_info *mtd;
351 	int i;
352 
353 	mtd = kzalloc(sizeof(*mtd), GFP_KERNEL);
354 	if (!mtd) {
355 		printk(KERN_ERR "Failed to allocate memory for MTD device\n");
356 		return NULL;
357 	}
358 	mtd->priv = map;
359 	mtd->type = MTD_NORFLASH;
360 
361 	/* Fill in the default mtd operations */
362 	mtd->erase   = cfi_intelext_erase_varsize;
363 	mtd->read    = cfi_intelext_read;
364 	mtd->write   = cfi_intelext_write_words;
365 	mtd->sync    = cfi_intelext_sync;
366 	mtd->lock    = cfi_intelext_lock;
367 	mtd->unlock  = cfi_intelext_unlock;
368 	mtd->suspend = cfi_intelext_suspend;
369 	mtd->resume  = cfi_intelext_resume;
370 	mtd->flags   = MTD_CAP_NORFLASH;
371 	mtd->name    = map->name;
372 	mtd->writesize = 1;
373 
374 	mtd->reboot_notifier.notifier_call = cfi_intelext_reboot;
375 
376 	if (cfi->cfi_mode == CFI_MODE_CFI) {
377 		/*
378 		 * It's a real CFI chip, not one for which the probe
379 		 * routine faked a CFI structure. So we read the feature
380 		 * table from it.
381 		 */
382 		__u16 adr = primary?cfi->cfiq->P_ADR:cfi->cfiq->A_ADR;
383 		struct cfi_pri_intelext *extp;
384 
385 		extp = read_pri_intelext(map, adr);
386 		if (!extp) {
387 			kfree(mtd);
388 			return NULL;
389 		}
390 
391 		/* Install our own private info structure */
392 		cfi->cmdset_priv = extp;
393 
394 		cfi_fixup(mtd, cfi_fixup_table);
395 
396 #ifdef DEBUG_CFI_FEATURES
397 		/* Tell the user about it in lots of lovely detail */
398 		cfi_tell_features(extp);
399 #endif
400 
401 		if(extp->SuspendCmdSupport & 1) {
402 			printk(KERN_NOTICE "cfi_cmdset_0001: Erase suspend on write enabled\n");
403 		}
404 	}
405 	else if (cfi->cfi_mode == CFI_MODE_JEDEC) {
406 		/* Apply jedec specific fixups */
407 		cfi_fixup(mtd, jedec_fixup_table);
408 	}
409 	/* Apply generic fixups */
410 	cfi_fixup(mtd, fixup_table);
411 
412 	for (i=0; i< cfi->numchips; i++) {
413 		if (cfi->cfiq->WordWriteTimeoutTyp)
414 			cfi->chips[i].word_write_time =
415 				1<<cfi->cfiq->WordWriteTimeoutTyp;
416 		else
417 			cfi->chips[i].word_write_time = 50000;
418 
419 		if (cfi->cfiq->BufWriteTimeoutTyp)
420 			cfi->chips[i].buffer_write_time =
421 				1<<cfi->cfiq->BufWriteTimeoutTyp;
422 		/* No default; if it isn't specified, we won't use it */
423 
424 		if (cfi->cfiq->BlockEraseTimeoutTyp)
425 			cfi->chips[i].erase_time =
426 				1000<<cfi->cfiq->BlockEraseTimeoutTyp;
427 		else
428 			cfi->chips[i].erase_time = 2000000;
429 
430 		cfi->chips[i].ref_point_counter = 0;
431 		init_waitqueue_head(&(cfi->chips[i].wq));
432 	}
433 
434 	map->fldrv = &cfi_intelext_chipdrv;
435 
436 	return cfi_intelext_setup(mtd);
437 }
438 struct mtd_info *cfi_cmdset_0003(struct map_info *map, int primary) __attribute__((alias("cfi_cmdset_0001")));
439 struct mtd_info *cfi_cmdset_0200(struct map_info *map, int primary) __attribute__((alias("cfi_cmdset_0001")));
440 EXPORT_SYMBOL_GPL(cfi_cmdset_0001);
441 EXPORT_SYMBOL_GPL(cfi_cmdset_0003);
442 EXPORT_SYMBOL_GPL(cfi_cmdset_0200);
443 
444 static struct mtd_info *cfi_intelext_setup(struct mtd_info *mtd)
445 {
446 	struct map_info *map = mtd->priv;
447 	struct cfi_private *cfi = map->fldrv_priv;
448 	unsigned long offset = 0;
449 	int i,j;
450 	unsigned long devsize = (1<<cfi->cfiq->DevSize) * cfi->interleave;
451 
452 	//printk(KERN_DEBUG "number of CFI chips: %d\n", cfi->numchips);
453 
454 	mtd->size = devsize * cfi->numchips;
455 
456 	mtd->numeraseregions = cfi->cfiq->NumEraseRegions * cfi->numchips;
457 	mtd->eraseregions = kmalloc(sizeof(struct mtd_erase_region_info)
458 			* mtd->numeraseregions, GFP_KERNEL);
459 	if (!mtd->eraseregions) {
460 		printk(KERN_ERR "Failed to allocate memory for MTD erase region info\n");
461 		goto setup_err;
462 	}
463 
464 	for (i=0; i<cfi->cfiq->NumEraseRegions; i++) {
465 		unsigned long ernum, ersize;
466 		ersize = ((cfi->cfiq->EraseRegionInfo[i] >> 8) & ~0xff) * cfi->interleave;
467 		ernum = (cfi->cfiq->EraseRegionInfo[i] & 0xffff) + 1;
468 
469 		if (mtd->erasesize < ersize) {
470 			mtd->erasesize = ersize;
471 		}
472 		for (j=0; j<cfi->numchips; j++) {
473 			mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].offset = (j*devsize)+offset;
474 			mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].erasesize = ersize;
475 			mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].numblocks = ernum;
476 			mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].lockmap = kmalloc(ernum / 8 + 1, GFP_KERNEL);
477 		}
478 		offset += (ersize * ernum);
479 	}
480 
481 	if (offset != devsize) {
482 		/* Argh */
483 		printk(KERN_WARNING "Sum of regions (%lx) != total size of set of interleaved chips (%lx)\n", offset, devsize);
484 		goto setup_err;
485 	}
486 
487 	for (i=0; i<mtd->numeraseregions;i++){
488 		printk(KERN_DEBUG "erase region %d: offset=0x%x,size=0x%x,blocks=%d\n",
489 		       i,mtd->eraseregions[i].offset,
490 		       mtd->eraseregions[i].erasesize,
491 		       mtd->eraseregions[i].numblocks);
492 	}
493 
494 #ifdef CONFIG_MTD_OTP
495 	mtd->read_fact_prot_reg = cfi_intelext_read_fact_prot_reg;
496 	mtd->read_user_prot_reg = cfi_intelext_read_user_prot_reg;
497 	mtd->write_user_prot_reg = cfi_intelext_write_user_prot_reg;
498 	mtd->lock_user_prot_reg = cfi_intelext_lock_user_prot_reg;
499 	mtd->get_fact_prot_info = cfi_intelext_get_fact_prot_info;
500 	mtd->get_user_prot_info = cfi_intelext_get_user_prot_info;
501 #endif
502 
503 	/* This function has the potential to distort the reality
504 	   a bit and therefore should be called last. */
505 	if (cfi_intelext_partition_fixup(mtd, &cfi) != 0)
506 		goto setup_err;
507 
508 	__module_get(THIS_MODULE);
509 	register_reboot_notifier(&mtd->reboot_notifier);
510 	return mtd;
511 
512  setup_err:
513 	if(mtd) {
514 		kfree(mtd->eraseregions);
515 		kfree(mtd);
516 	}
517 	kfree(cfi->cmdset_priv);
518 	return NULL;
519 }
520 
521 static int cfi_intelext_partition_fixup(struct mtd_info *mtd,
522 					struct cfi_private **pcfi)
523 {
524 	struct map_info *map = mtd->priv;
525 	struct cfi_private *cfi = *pcfi;
526 	struct cfi_pri_intelext *extp = cfi->cmdset_priv;
527 
528 	/*
529 	 * Probing of multi-partition flash ships.
530 	 *
531 	 * To support multiple partitions when available, we simply arrange
532 	 * for each of them to have their own flchip structure even if they
533 	 * are on the same physical chip.  This means completely recreating
534 	 * a new cfi_private structure right here which is a blatent code
535 	 * layering violation, but this is still the least intrusive
536 	 * arrangement at this point. This can be rearranged in the future
537 	 * if someone feels motivated enough.  --nico
538 	 */
539 	if (extp && extp->MajorVersion == '1' && extp->MinorVersion >= '3'
540 	    && extp->FeatureSupport & (1 << 9)) {
541 		struct cfi_private *newcfi;
542 		struct flchip *chip;
543 		struct flchip_shared *shared;
544 		int offs, numregions, numparts, partshift, numvirtchips, i, j;
545 
546 		/* Protection Register info */
547 		offs = (extp->NumProtectionFields - 1) *
548 		       sizeof(struct cfi_intelext_otpinfo);
549 
550 		/* Burst Read info */
551 		offs += extp->extra[offs+1]+2;
552 
553 		/* Number of partition regions */
554 		numregions = extp->extra[offs];
555 		offs += 1;
556 
557 		/* skip the sizeof(partregion) field in CFI 1.4 */
558 		if (extp->MinorVersion >= '4')
559 			offs += 2;
560 
561 		/* Number of hardware partitions */
562 		numparts = 0;
563 		for (i = 0; i < numregions; i++) {
564 			struct cfi_intelext_regioninfo *rinfo;
565 			rinfo = (struct cfi_intelext_regioninfo *)&extp->extra[offs];
566 			numparts += rinfo->NumIdentPartitions;
567 			offs += sizeof(*rinfo)
568 				+ (rinfo->NumBlockTypes - 1) *
569 				  sizeof(struct cfi_intelext_blockinfo);
570 		}
571 
572 		/* Programming Region info */
573 		if (extp->MinorVersion >= '4') {
574 			struct cfi_intelext_programming_regioninfo *prinfo;
575 			prinfo = (struct cfi_intelext_programming_regioninfo *)&extp->extra[offs];
576 			mtd->writesize = cfi->interleave << prinfo->ProgRegShift;
577 			mtd->flags &= ~MTD_BIT_WRITEABLE;
578 			printk(KERN_DEBUG "%s: program region size/ctrl_valid/ctrl_inval = %d/%d/%d\n",
579 			       map->name, mtd->writesize,
580 			       cfi->interleave * prinfo->ControlValid,
581 			       cfi->interleave * prinfo->ControlInvalid);
582 		}
583 
584 		/*
585 		 * All functions below currently rely on all chips having
586 		 * the same geometry so we'll just assume that all hardware
587 		 * partitions are of the same size too.
588 		 */
589 		partshift = cfi->chipshift - __ffs(numparts);
590 
591 		if ((1 << partshift) < mtd->erasesize) {
592 			printk( KERN_ERR
593 				"%s: bad number of hw partitions (%d)\n",
594 				__FUNCTION__, numparts);
595 			return -EINVAL;
596 		}
597 
598 		numvirtchips = cfi->numchips * numparts;
599 		newcfi = kmalloc(sizeof(struct cfi_private) + numvirtchips * sizeof(struct flchip), GFP_KERNEL);
600 		if (!newcfi)
601 			return -ENOMEM;
602 		shared = kmalloc(sizeof(struct flchip_shared) * cfi->numchips, GFP_KERNEL);
603 		if (!shared) {
604 			kfree(newcfi);
605 			return -ENOMEM;
606 		}
607 		memcpy(newcfi, cfi, sizeof(struct cfi_private));
608 		newcfi->numchips = numvirtchips;
609 		newcfi->chipshift = partshift;
610 
611 		chip = &newcfi->chips[0];
612 		for (i = 0; i < cfi->numchips; i++) {
613 			shared[i].writing = shared[i].erasing = NULL;
614 			spin_lock_init(&shared[i].lock);
615 			for (j = 0; j < numparts; j++) {
616 				*chip = cfi->chips[i];
617 				chip->start += j << partshift;
618 				chip->priv = &shared[i];
619 				/* those should be reset too since
620 				   they create memory references. */
621 				init_waitqueue_head(&chip->wq);
622 				spin_lock_init(&chip->_spinlock);
623 				chip->mutex = &chip->_spinlock;
624 				chip++;
625 			}
626 		}
627 
628 		printk(KERN_DEBUG "%s: %d set(s) of %d interleaved chips "
629 				  "--> %d partitions of %d KiB\n",
630 				  map->name, cfi->numchips, cfi->interleave,
631 				  newcfi->numchips, 1<<(newcfi->chipshift-10));
632 
633 		map->fldrv_priv = newcfi;
634 		*pcfi = newcfi;
635 		kfree(cfi);
636 	}
637 
638 	return 0;
639 }
640 
641 /*
642  *  *********** CHIP ACCESS FUNCTIONS ***********
643  */
644 
645 static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr, int mode)
646 {
647 	DECLARE_WAITQUEUE(wait, current);
648 	struct cfi_private *cfi = map->fldrv_priv;
649 	map_word status, status_OK = CMD(0x80), status_PWS = CMD(0x01);
650 	unsigned long timeo;
651 	struct cfi_pri_intelext *cfip = cfi->cmdset_priv;
652 
653  resettime:
654 	timeo = jiffies + HZ;
655  retry:
656 	if (chip->priv && (mode == FL_WRITING || mode == FL_ERASING || mode == FL_OTP_WRITE)) {
657 		/*
658 		 * OK. We have possibility for contension on the write/erase
659 		 * operations which are global to the real chip and not per
660 		 * partition.  So let's fight it over in the partition which
661 		 * currently has authority on the operation.
662 		 *
663 		 * The rules are as follows:
664 		 *
665 		 * - any write operation must own shared->writing.
666 		 *
667 		 * - any erase operation must own _both_ shared->writing and
668 		 *   shared->erasing.
669 		 *
670 		 * - contension arbitration is handled in the owner's context.
671 		 *
672 		 * The 'shared' struct can be read and/or written only when
673 		 * its lock is taken.
674 		 */
675 		struct flchip_shared *shared = chip->priv;
676 		struct flchip *contender;
677 		spin_lock(&shared->lock);
678 		contender = shared->writing;
679 		if (contender && contender != chip) {
680 			/*
681 			 * The engine to perform desired operation on this
682 			 * partition is already in use by someone else.
683 			 * Let's fight over it in the context of the chip
684 			 * currently using it.  If it is possible to suspend,
685 			 * that other partition will do just that, otherwise
686 			 * it'll happily send us to sleep.  In any case, when
687 			 * get_chip returns success we're clear to go ahead.
688 			 */
689 			int ret = spin_trylock(contender->mutex);
690 			spin_unlock(&shared->lock);
691 			if (!ret)
692 				goto retry;
693 			spin_unlock(chip->mutex);
694 			ret = get_chip(map, contender, contender->start, mode);
695 			spin_lock(chip->mutex);
696 			if (ret) {
697 				spin_unlock(contender->mutex);
698 				return ret;
699 			}
700 			timeo = jiffies + HZ;
701 			spin_lock(&shared->lock);
702 			spin_unlock(contender->mutex);
703 		}
704 
705 		/* We now own it */
706 		shared->writing = chip;
707 		if (mode == FL_ERASING)
708 			shared->erasing = chip;
709 		spin_unlock(&shared->lock);
710 	}
711 
712 	switch (chip->state) {
713 
714 	case FL_STATUS:
715 		for (;;) {
716 			status = map_read(map, adr);
717 			if (map_word_andequal(map, status, status_OK, status_OK))
718 				break;
719 
720 			/* At this point we're fine with write operations
721 			   in other partitions as they don't conflict. */
722 			if (chip->priv && map_word_andequal(map, status, status_PWS, status_PWS))
723 				break;
724 
725 			if (time_after(jiffies, timeo)) {
726 				printk(KERN_ERR "%s: Waiting for chip to be ready timed out. Status %lx\n",
727 				       map->name, status.x[0]);
728 				return -EIO;
729 			}
730 			spin_unlock(chip->mutex);
731 			cfi_udelay(1);
732 			spin_lock(chip->mutex);
733 			/* Someone else might have been playing with it. */
734 			goto retry;
735 		}
736 
737 	case FL_READY:
738 	case FL_CFI_QUERY:
739 	case FL_JEDEC_QUERY:
740 		return 0;
741 
742 	case FL_ERASING:
743 		if (!cfip ||
744 		    !(cfip->FeatureSupport & 2) ||
745 		    !(mode == FL_READY || mode == FL_POINT ||
746 		     (mode == FL_WRITING && (cfip->SuspendCmdSupport & 1))))
747 			goto sleep;
748 
749 
750 		/* Erase suspend */
751 		map_write(map, CMD(0xB0), adr);
752 
753 		/* If the flash has finished erasing, then 'erase suspend'
754 		 * appears to make some (28F320) flash devices switch to
755 		 * 'read' mode.  Make sure that we switch to 'read status'
756 		 * mode so we get the right data. --rmk
757 		 */
758 		map_write(map, CMD(0x70), adr);
759 		chip->oldstate = FL_ERASING;
760 		chip->state = FL_ERASE_SUSPENDING;
761 		chip->erase_suspended = 1;
762 		for (;;) {
763 			status = map_read(map, adr);
764 			if (map_word_andequal(map, status, status_OK, status_OK))
765 			        break;
766 
767 			if (time_after(jiffies, timeo)) {
768 				/* Urgh. Resume and pretend we weren't here.  */
769 				map_write(map, CMD(0xd0), adr);
770 				/* Make sure we're in 'read status' mode if it had finished */
771 				map_write(map, CMD(0x70), adr);
772 				chip->state = FL_ERASING;
773 				chip->oldstate = FL_READY;
774 				printk(KERN_ERR "%s: Chip not ready after erase "
775 				       "suspended: status = 0x%lx\n", map->name, status.x[0]);
776 				return -EIO;
777 			}
778 
779 			spin_unlock(chip->mutex);
780 			cfi_udelay(1);
781 			spin_lock(chip->mutex);
782 			/* Nobody will touch it while it's in state FL_ERASE_SUSPENDING.
783 			   So we can just loop here. */
784 		}
785 		chip->state = FL_STATUS;
786 		return 0;
787 
788 	case FL_XIP_WHILE_ERASING:
789 		if (mode != FL_READY && mode != FL_POINT &&
790 		    (mode != FL_WRITING || !cfip || !(cfip->SuspendCmdSupport&1)))
791 			goto sleep;
792 		chip->oldstate = chip->state;
793 		chip->state = FL_READY;
794 		return 0;
795 
796 	case FL_POINT:
797 		/* Only if there's no operation suspended... */
798 		if (mode == FL_READY && chip->oldstate == FL_READY)
799 			return 0;
800 
801 	default:
802 	sleep:
803 		set_current_state(TASK_UNINTERRUPTIBLE);
804 		add_wait_queue(&chip->wq, &wait);
805 		spin_unlock(chip->mutex);
806 		schedule();
807 		remove_wait_queue(&chip->wq, &wait);
808 		spin_lock(chip->mutex);
809 		goto resettime;
810 	}
811 }
812 
813 static void put_chip(struct map_info *map, struct flchip *chip, unsigned long adr)
814 {
815 	struct cfi_private *cfi = map->fldrv_priv;
816 
817 	if (chip->priv) {
818 		struct flchip_shared *shared = chip->priv;
819 		spin_lock(&shared->lock);
820 		if (shared->writing == chip && chip->oldstate == FL_READY) {
821 			/* We own the ability to write, but we're done */
822 			shared->writing = shared->erasing;
823 			if (shared->writing && shared->writing != chip) {
824 				/* give back ownership to who we loaned it from */
825 				struct flchip *loaner = shared->writing;
826 				spin_lock(loaner->mutex);
827 				spin_unlock(&shared->lock);
828 				spin_unlock(chip->mutex);
829 				put_chip(map, loaner, loaner->start);
830 				spin_lock(chip->mutex);
831 				spin_unlock(loaner->mutex);
832 				wake_up(&chip->wq);
833 				return;
834 			}
835 			shared->erasing = NULL;
836 			shared->writing = NULL;
837 		} else if (shared->erasing == chip && shared->writing != chip) {
838 			/*
839 			 * We own the ability to erase without the ability
840 			 * to write, which means the erase was suspended
841 			 * and some other partition is currently writing.
842 			 * Don't let the switch below mess things up since
843 			 * we don't have ownership to resume anything.
844 			 */
845 			spin_unlock(&shared->lock);
846 			wake_up(&chip->wq);
847 			return;
848 		}
849 		spin_unlock(&shared->lock);
850 	}
851 
852 	switch(chip->oldstate) {
853 	case FL_ERASING:
854 		chip->state = chip->oldstate;
855 		/* What if one interleaved chip has finished and the
856 		   other hasn't? The old code would leave the finished
857 		   one in READY mode. That's bad, and caused -EROFS
858 		   errors to be returned from do_erase_oneblock because
859 		   that's the only bit it checked for at the time.
860 		   As the state machine appears to explicitly allow
861 		   sending the 0x70 (Read Status) command to an erasing
862 		   chip and expecting it to be ignored, that's what we
863 		   do. */
864 		map_write(map, CMD(0xd0), adr);
865 		map_write(map, CMD(0x70), adr);
866 		chip->oldstate = FL_READY;
867 		chip->state = FL_ERASING;
868 		break;
869 
870 	case FL_XIP_WHILE_ERASING:
871 		chip->state = chip->oldstate;
872 		chip->oldstate = FL_READY;
873 		break;
874 
875 	case FL_READY:
876 	case FL_STATUS:
877 	case FL_JEDEC_QUERY:
878 		/* We should really make set_vpp() count, rather than doing this */
879 		DISABLE_VPP(map);
880 		break;
881 	default:
882 		printk(KERN_ERR "%s: put_chip() called with oldstate %d!!\n", map->name, chip->oldstate);
883 	}
884 	wake_up(&chip->wq);
885 }
886 
887 #ifdef CONFIG_MTD_XIP
888 
889 /*
890  * No interrupt what so ever can be serviced while the flash isn't in array
891  * mode.  This is ensured by the xip_disable() and xip_enable() functions
892  * enclosing any code path where the flash is known not to be in array mode.
893  * And within a XIP disabled code path, only functions marked with __xipram
894  * may be called and nothing else (it's a good thing to inspect generated
895  * assembly to make sure inline functions were actually inlined and that gcc
896  * didn't emit calls to its own support functions). Also configuring MTD CFI
897  * support to a single buswidth and a single interleave is also recommended.
898  */
899 
900 static void xip_disable(struct map_info *map, struct flchip *chip,
901 			unsigned long adr)
902 {
903 	/* TODO: chips with no XIP use should ignore and return */
904 	(void) map_read(map, adr); /* ensure mmu mapping is up to date */
905 	local_irq_disable();
906 }
907 
908 static void __xipram xip_enable(struct map_info *map, struct flchip *chip,
909 				unsigned long adr)
910 {
911 	struct cfi_private *cfi = map->fldrv_priv;
912 	if (chip->state != FL_POINT && chip->state != FL_READY) {
913 		map_write(map, CMD(0xff), adr);
914 		chip->state = FL_READY;
915 	}
916 	(void) map_read(map, adr);
917 	xip_iprefetch();
918 	local_irq_enable();
919 }
920 
921 /*
922  * When a delay is required for the flash operation to complete, the
923  * xip_wait_for_operation() function is polling for both the given timeout
924  * and pending (but still masked) hardware interrupts.  Whenever there is an
925  * interrupt pending then the flash erase or write operation is suspended,
926  * array mode restored and interrupts unmasked.  Task scheduling might also
927  * happen at that point.  The CPU eventually returns from the interrupt or
928  * the call to schedule() and the suspended flash operation is resumed for
929  * the remaining of the delay period.
930  *
931  * Warning: this function _will_ fool interrupt latency tracing tools.
932  */
933 
934 static int __xipram xip_wait_for_operation(
935 		struct map_info *map, struct flchip *chip,
936 		unsigned long adr, unsigned int chip_op_time )
937 {
938 	struct cfi_private *cfi = map->fldrv_priv;
939 	struct cfi_pri_intelext *cfip = cfi->cmdset_priv;
940 	map_word status, OK = CMD(0x80);
941 	unsigned long usec, suspended, start, done;
942 	flstate_t oldstate, newstate;
943 
944        	start = xip_currtime();
945 	usec = chip_op_time * 8;
946 	if (usec == 0)
947 		usec = 500000;
948 	done = 0;
949 
950 	do {
951 		cpu_relax();
952 		if (xip_irqpending() && cfip &&
953 		    ((chip->state == FL_ERASING && (cfip->FeatureSupport&2)) ||
954 		     (chip->state == FL_WRITING && (cfip->FeatureSupport&4))) &&
955 		    (cfi_interleave_is_1(cfi) || chip->oldstate == FL_READY)) {
956 			/*
957 			 * Let's suspend the erase or write operation when
958 			 * supported.  Note that we currently don't try to
959 			 * suspend interleaved chips if there is already
960 			 * another operation suspended (imagine what happens
961 			 * when one chip was already done with the current
962 			 * operation while another chip suspended it, then
963 			 * we resume the whole thing at once).  Yes, it
964 			 * can happen!
965 			 */
966 			usec -= done;
967 			map_write(map, CMD(0xb0), adr);
968 			map_write(map, CMD(0x70), adr);
969 			suspended = xip_currtime();
970 			do {
971 				if (xip_elapsed_since(suspended) > 100000) {
972 					/*
973 					 * The chip doesn't want to suspend
974 					 * after waiting for 100 msecs.
975 					 * This is a critical error but there
976 					 * is not much we can do here.
977 					 */
978 					return -EIO;
979 				}
980 				status = map_read(map, adr);
981 			} while (!map_word_andequal(map, status, OK, OK));
982 
983 			/* Suspend succeeded */
984 			oldstate = chip->state;
985 			if (oldstate == FL_ERASING) {
986 				if (!map_word_bitsset(map, status, CMD(0x40)))
987 					break;
988 				newstate = FL_XIP_WHILE_ERASING;
989 				chip->erase_suspended = 1;
990 			} else {
991 				if (!map_word_bitsset(map, status, CMD(0x04)))
992 					break;
993 				newstate = FL_XIP_WHILE_WRITING;
994 				chip->write_suspended = 1;
995 			}
996 			chip->state = newstate;
997 			map_write(map, CMD(0xff), adr);
998 			(void) map_read(map, adr);
999 			asm volatile (".rep 8; nop; .endr");
1000 			local_irq_enable();
1001 			spin_unlock(chip->mutex);
1002 			asm volatile (".rep 8; nop; .endr");
1003 			cond_resched();
1004 
1005 			/*
1006 			 * We're back.  However someone else might have
1007 			 * decided to go write to the chip if we are in
1008 			 * a suspended erase state.  If so let's wait
1009 			 * until it's done.
1010 			 */
1011 			spin_lock(chip->mutex);
1012 			while (chip->state != newstate) {
1013 				DECLARE_WAITQUEUE(wait, current);
1014 				set_current_state(TASK_UNINTERRUPTIBLE);
1015 				add_wait_queue(&chip->wq, &wait);
1016 				spin_unlock(chip->mutex);
1017 				schedule();
1018 				remove_wait_queue(&chip->wq, &wait);
1019 				spin_lock(chip->mutex);
1020 			}
1021 			/* Disallow XIP again */
1022 			local_irq_disable();
1023 
1024 			/* Resume the write or erase operation */
1025 			map_write(map, CMD(0xd0), adr);
1026 			map_write(map, CMD(0x70), adr);
1027 			chip->state = oldstate;
1028 			start = xip_currtime();
1029 		} else if (usec >= 1000000/HZ) {
1030 			/*
1031 			 * Try to save on CPU power when waiting delay
1032 			 * is at least a system timer tick period.
1033 			 * No need to be extremely accurate here.
1034 			 */
1035 			xip_cpu_idle();
1036 		}
1037 		status = map_read(map, adr);
1038 		done = xip_elapsed_since(start);
1039 	} while (!map_word_andequal(map, status, OK, OK)
1040 		 && done < usec);
1041 
1042 	return (done >= usec) ? -ETIME : 0;
1043 }
1044 
1045 /*
1046  * The INVALIDATE_CACHED_RANGE() macro is normally used in parallel while
1047  * the flash is actively programming or erasing since we have to poll for
1048  * the operation to complete anyway.  We can't do that in a generic way with
1049  * a XIP setup so do it before the actual flash operation in this case
1050  * and stub it out from INVAL_CACHE_AND_WAIT.
1051  */
1052 #define XIP_INVAL_CACHED_RANGE(map, from, size)  \
1053 	INVALIDATE_CACHED_RANGE(map, from, size)
1054 
1055 #define INVAL_CACHE_AND_WAIT(map, chip, cmd_adr, inval_adr, inval_len, usec) \
1056 	xip_wait_for_operation(map, chip, cmd_adr, usec)
1057 
1058 #else
1059 
1060 #define xip_disable(map, chip, adr)
1061 #define xip_enable(map, chip, adr)
1062 #define XIP_INVAL_CACHED_RANGE(x...)
1063 #define INVAL_CACHE_AND_WAIT inval_cache_and_wait_for_operation
1064 
1065 static int inval_cache_and_wait_for_operation(
1066 		struct map_info *map, struct flchip *chip,
1067 		unsigned long cmd_adr, unsigned long inval_adr, int inval_len,
1068 		unsigned int chip_op_time)
1069 {
1070 	struct cfi_private *cfi = map->fldrv_priv;
1071 	map_word status, status_OK = CMD(0x80);
1072 	int chip_state = chip->state;
1073 	unsigned int timeo, sleep_time;
1074 
1075 	spin_unlock(chip->mutex);
1076 	if (inval_len)
1077 		INVALIDATE_CACHED_RANGE(map, inval_adr, inval_len);
1078 	spin_lock(chip->mutex);
1079 
1080 	/* set our timeout to 8 times the expected delay */
1081 	timeo = chip_op_time * 8;
1082 	if (!timeo)
1083 		timeo = 500000;
1084 	sleep_time = chip_op_time / 2;
1085 
1086 	for (;;) {
1087 		status = map_read(map, cmd_adr);
1088 		if (map_word_andequal(map, status, status_OK, status_OK))
1089 			break;
1090 
1091 		if (!timeo) {
1092 			map_write(map, CMD(0x70), cmd_adr);
1093 			chip->state = FL_STATUS;
1094 			return -ETIME;
1095 		}
1096 
1097 		/* OK Still waiting. Drop the lock, wait a while and retry. */
1098 		spin_unlock(chip->mutex);
1099 		if (sleep_time >= 1000000/HZ) {
1100 			/*
1101 			 * Half of the normal delay still remaining
1102 			 * can be performed with a sleeping delay instead
1103 			 * of busy waiting.
1104 			 */
1105 			msleep(sleep_time/1000);
1106 			timeo -= sleep_time;
1107 			sleep_time = 1000000/HZ;
1108 		} else {
1109 			udelay(1);
1110 			cond_resched();
1111 			timeo--;
1112 		}
1113 		spin_lock(chip->mutex);
1114 
1115 		while (chip->state != chip_state) {
1116 			/* Someone's suspended the operation: sleep */
1117 			DECLARE_WAITQUEUE(wait, current);
1118 			set_current_state(TASK_UNINTERRUPTIBLE);
1119 			add_wait_queue(&chip->wq, &wait);
1120 			spin_unlock(chip->mutex);
1121 			schedule();
1122 			remove_wait_queue(&chip->wq, &wait);
1123 			spin_lock(chip->mutex);
1124 		}
1125 	}
1126 
1127 	/* Done and happy. */
1128  	chip->state = FL_STATUS;
1129 	return 0;
1130 }
1131 
1132 #endif
1133 
1134 #define WAIT_TIMEOUT(map, chip, adr, udelay) \
1135 	INVAL_CACHE_AND_WAIT(map, chip, adr, 0, 0, udelay);
1136 
1137 
1138 static int do_point_onechip (struct map_info *map, struct flchip *chip, loff_t adr, size_t len)
1139 {
1140 	unsigned long cmd_addr;
1141 	struct cfi_private *cfi = map->fldrv_priv;
1142 	int ret = 0;
1143 
1144 	adr += chip->start;
1145 
1146 	/* Ensure cmd read/writes are aligned. */
1147 	cmd_addr = adr & ~(map_bankwidth(map)-1);
1148 
1149 	spin_lock(chip->mutex);
1150 
1151 	ret = get_chip(map, chip, cmd_addr, FL_POINT);
1152 
1153 	if (!ret) {
1154 		if (chip->state != FL_POINT && chip->state != FL_READY)
1155 			map_write(map, CMD(0xff), cmd_addr);
1156 
1157 		chip->state = FL_POINT;
1158 		chip->ref_point_counter++;
1159 	}
1160 	spin_unlock(chip->mutex);
1161 
1162 	return ret;
1163 }
1164 
1165 static int cfi_intelext_point (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char **mtdbuf)
1166 {
1167 	struct map_info *map = mtd->priv;
1168 	struct cfi_private *cfi = map->fldrv_priv;
1169 	unsigned long ofs;
1170 	int chipnum;
1171 	int ret = 0;
1172 
1173 	if (!map->virt || (from + len > mtd->size))
1174 		return -EINVAL;
1175 
1176 	*mtdbuf = (void *)map->virt + from;
1177 	*retlen = 0;
1178 
1179 	/* Now lock the chip(s) to POINT state */
1180 
1181 	/* ofs: offset within the first chip that the first read should start */
1182 	chipnum = (from >> cfi->chipshift);
1183 	ofs = from - (chipnum << cfi->chipshift);
1184 
1185 	while (len) {
1186 		unsigned long thislen;
1187 
1188 		if (chipnum >= cfi->numchips)
1189 			break;
1190 
1191 		if ((len + ofs -1) >> cfi->chipshift)
1192 			thislen = (1<<cfi->chipshift) - ofs;
1193 		else
1194 			thislen = len;
1195 
1196 		ret = do_point_onechip(map, &cfi->chips[chipnum], ofs, thislen);
1197 		if (ret)
1198 			break;
1199 
1200 		*retlen += thislen;
1201 		len -= thislen;
1202 
1203 		ofs = 0;
1204 		chipnum++;
1205 	}
1206 	return 0;
1207 }
1208 
1209 static void cfi_intelext_unpoint (struct mtd_info *mtd, u_char *addr, loff_t from, size_t len)
1210 {
1211 	struct map_info *map = mtd->priv;
1212 	struct cfi_private *cfi = map->fldrv_priv;
1213 	unsigned long ofs;
1214 	int chipnum;
1215 
1216 	/* Now unlock the chip(s) POINT state */
1217 
1218 	/* ofs: offset within the first chip that the first read should start */
1219 	chipnum = (from >> cfi->chipshift);
1220 	ofs = from - (chipnum <<  cfi->chipshift);
1221 
1222 	while (len) {
1223 		unsigned long thislen;
1224 		struct flchip *chip;
1225 
1226 		chip = &cfi->chips[chipnum];
1227 		if (chipnum >= cfi->numchips)
1228 			break;
1229 
1230 		if ((len + ofs -1) >> cfi->chipshift)
1231 			thislen = (1<<cfi->chipshift) - ofs;
1232 		else
1233 			thislen = len;
1234 
1235 		spin_lock(chip->mutex);
1236 		if (chip->state == FL_POINT) {
1237 			chip->ref_point_counter--;
1238 			if(chip->ref_point_counter == 0)
1239 				chip->state = FL_READY;
1240 		} else
1241 			printk(KERN_ERR "%s: Warning: unpoint called on non pointed region\n", map->name); /* Should this give an error? */
1242 
1243 		put_chip(map, chip, chip->start);
1244 		spin_unlock(chip->mutex);
1245 
1246 		len -= thislen;
1247 		ofs = 0;
1248 		chipnum++;
1249 	}
1250 }
1251 
1252 static inline int do_read_onechip(struct map_info *map, struct flchip *chip, loff_t adr, size_t len, u_char *buf)
1253 {
1254 	unsigned long cmd_addr;
1255 	struct cfi_private *cfi = map->fldrv_priv;
1256 	int ret;
1257 
1258 	adr += chip->start;
1259 
1260 	/* Ensure cmd read/writes are aligned. */
1261 	cmd_addr = adr & ~(map_bankwidth(map)-1);
1262 
1263 	spin_lock(chip->mutex);
1264 	ret = get_chip(map, chip, cmd_addr, FL_READY);
1265 	if (ret) {
1266 		spin_unlock(chip->mutex);
1267 		return ret;
1268 	}
1269 
1270 	if (chip->state != FL_POINT && chip->state != FL_READY) {
1271 		map_write(map, CMD(0xff), cmd_addr);
1272 
1273 		chip->state = FL_READY;
1274 	}
1275 
1276 	map_copy_from(map, buf, adr, len);
1277 
1278 	put_chip(map, chip, cmd_addr);
1279 
1280 	spin_unlock(chip->mutex);
1281 	return 0;
1282 }
1283 
1284 static int cfi_intelext_read (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf)
1285 {
1286 	struct map_info *map = mtd->priv;
1287 	struct cfi_private *cfi = map->fldrv_priv;
1288 	unsigned long ofs;
1289 	int chipnum;
1290 	int ret = 0;
1291 
1292 	/* ofs: offset within the first chip that the first read should start */
1293 	chipnum = (from >> cfi->chipshift);
1294 	ofs = from - (chipnum <<  cfi->chipshift);
1295 
1296 	*retlen = 0;
1297 
1298 	while (len) {
1299 		unsigned long thislen;
1300 
1301 		if (chipnum >= cfi->numchips)
1302 			break;
1303 
1304 		if ((len + ofs -1) >> cfi->chipshift)
1305 			thislen = (1<<cfi->chipshift) - ofs;
1306 		else
1307 			thislen = len;
1308 
1309 		ret = do_read_onechip(map, &cfi->chips[chipnum], ofs, thislen, buf);
1310 		if (ret)
1311 			break;
1312 
1313 		*retlen += thislen;
1314 		len -= thislen;
1315 		buf += thislen;
1316 
1317 		ofs = 0;
1318 		chipnum++;
1319 	}
1320 	return ret;
1321 }
1322 
1323 static int __xipram do_write_oneword(struct map_info *map, struct flchip *chip,
1324 				     unsigned long adr, map_word datum, int mode)
1325 {
1326 	struct cfi_private *cfi = map->fldrv_priv;
1327 	map_word status, write_cmd;
1328 	int ret=0;
1329 
1330 	adr += chip->start;
1331 
1332 	switch (mode) {
1333 	case FL_WRITING:
1334 		write_cmd = (cfi->cfiq->P_ID != 0x0200) ? CMD(0x40) : CMD(0x41);
1335 		break;
1336 	case FL_OTP_WRITE:
1337 		write_cmd = CMD(0xc0);
1338 		break;
1339 	default:
1340 		return -EINVAL;
1341 	}
1342 
1343 	spin_lock(chip->mutex);
1344 	ret = get_chip(map, chip, adr, mode);
1345 	if (ret) {
1346 		spin_unlock(chip->mutex);
1347 		return ret;
1348 	}
1349 
1350 	XIP_INVAL_CACHED_RANGE(map, adr, map_bankwidth(map));
1351 	ENABLE_VPP(map);
1352 	xip_disable(map, chip, adr);
1353 	map_write(map, write_cmd, adr);
1354 	map_write(map, datum, adr);
1355 	chip->state = mode;
1356 
1357 	ret = INVAL_CACHE_AND_WAIT(map, chip, adr,
1358 				   adr, map_bankwidth(map),
1359 				   chip->word_write_time);
1360 	if (ret) {
1361 		xip_enable(map, chip, adr);
1362 		printk(KERN_ERR "%s: word write error (status timeout)\n", map->name);
1363 		goto out;
1364 	}
1365 
1366 	/* check for errors */
1367 	status = map_read(map, adr);
1368 	if (map_word_bitsset(map, status, CMD(0x1a))) {
1369 		unsigned long chipstatus = MERGESTATUS(status);
1370 
1371 		/* reset status */
1372 		map_write(map, CMD(0x50), adr);
1373 		map_write(map, CMD(0x70), adr);
1374 		xip_enable(map, chip, adr);
1375 
1376 		if (chipstatus & 0x02) {
1377 			ret = -EROFS;
1378 		} else if (chipstatus & 0x08) {
1379 			printk(KERN_ERR "%s: word write error (bad VPP)\n", map->name);
1380 			ret = -EIO;
1381 		} else {
1382 			printk(KERN_ERR "%s: word write error (status 0x%lx)\n", map->name, chipstatus);
1383 			ret = -EINVAL;
1384 		}
1385 
1386 		goto out;
1387 	}
1388 
1389 	xip_enable(map, chip, adr);
1390  out:	put_chip(map, chip, adr);
1391 	spin_unlock(chip->mutex);
1392 	return ret;
1393 }
1394 
1395 
1396 static int cfi_intelext_write_words (struct mtd_info *mtd, loff_t to , size_t len, size_t *retlen, const u_char *buf)
1397 {
1398 	struct map_info *map = mtd->priv;
1399 	struct cfi_private *cfi = map->fldrv_priv;
1400 	int ret = 0;
1401 	int chipnum;
1402 	unsigned long ofs;
1403 
1404 	*retlen = 0;
1405 	if (!len)
1406 		return 0;
1407 
1408 	chipnum = to >> cfi->chipshift;
1409 	ofs = to  - (chipnum << cfi->chipshift);
1410 
1411 	/* If it's not bus-aligned, do the first byte write */
1412 	if (ofs & (map_bankwidth(map)-1)) {
1413 		unsigned long bus_ofs = ofs & ~(map_bankwidth(map)-1);
1414 		int gap = ofs - bus_ofs;
1415 		int n;
1416 		map_word datum;
1417 
1418 		n = min_t(int, len, map_bankwidth(map)-gap);
1419 		datum = map_word_ff(map);
1420 		datum = map_word_load_partial(map, datum, buf, gap, n);
1421 
1422 		ret = do_write_oneword(map, &cfi->chips[chipnum],
1423 					       bus_ofs, datum, FL_WRITING);
1424 		if (ret)
1425 			return ret;
1426 
1427 		len -= n;
1428 		ofs += n;
1429 		buf += n;
1430 		(*retlen) += n;
1431 
1432 		if (ofs >> cfi->chipshift) {
1433 			chipnum ++;
1434 			ofs = 0;
1435 			if (chipnum == cfi->numchips)
1436 				return 0;
1437 		}
1438 	}
1439 
1440 	while(len >= map_bankwidth(map)) {
1441 		map_word datum = map_word_load(map, buf);
1442 
1443 		ret = do_write_oneword(map, &cfi->chips[chipnum],
1444 				       ofs, datum, FL_WRITING);
1445 		if (ret)
1446 			return ret;
1447 
1448 		ofs += map_bankwidth(map);
1449 		buf += map_bankwidth(map);
1450 		(*retlen) += map_bankwidth(map);
1451 		len -= map_bankwidth(map);
1452 
1453 		if (ofs >> cfi->chipshift) {
1454 			chipnum ++;
1455 			ofs = 0;
1456 			if (chipnum == cfi->numchips)
1457 				return 0;
1458 		}
1459 	}
1460 
1461 	if (len & (map_bankwidth(map)-1)) {
1462 		map_word datum;
1463 
1464 		datum = map_word_ff(map);
1465 		datum = map_word_load_partial(map, datum, buf, 0, len);
1466 
1467 		ret = do_write_oneword(map, &cfi->chips[chipnum],
1468 				       ofs, datum, FL_WRITING);
1469 		if (ret)
1470 			return ret;
1471 
1472 		(*retlen) += len;
1473 	}
1474 
1475 	return 0;
1476 }
1477 
1478 
1479 static int __xipram do_write_buffer(struct map_info *map, struct flchip *chip,
1480 				    unsigned long adr, const struct kvec **pvec,
1481 				    unsigned long *pvec_seek, int len)
1482 {
1483 	struct cfi_private *cfi = map->fldrv_priv;
1484 	map_word status, write_cmd, datum;
1485 	unsigned long cmd_adr;
1486 	int ret, wbufsize, word_gap, words;
1487 	const struct kvec *vec;
1488 	unsigned long vec_seek;
1489 
1490 	wbufsize = cfi_interleave(cfi) << cfi->cfiq->MaxBufWriteSize;
1491 	adr += chip->start;
1492 	cmd_adr = adr & ~(wbufsize-1);
1493 
1494 	/* Let's determine this according to the interleave only once */
1495 	write_cmd = (cfi->cfiq->P_ID != 0x0200) ? CMD(0xe8) : CMD(0xe9);
1496 
1497 	spin_lock(chip->mutex);
1498 	ret = get_chip(map, chip, cmd_adr, FL_WRITING);
1499 	if (ret) {
1500 		spin_unlock(chip->mutex);
1501 		return ret;
1502 	}
1503 
1504 	XIP_INVAL_CACHED_RANGE(map, adr, len);
1505 	ENABLE_VPP(map);
1506 	xip_disable(map, chip, cmd_adr);
1507 
1508 	/* §4.8 of the 28FxxxJ3A datasheet says "Any time SR.4 and/or SR.5 is set
1509 	   [...], the device will not accept any more Write to Buffer commands".
1510 	   So we must check here and reset those bits if they're set. Otherwise
1511 	   we're just pissing in the wind */
1512 	if (chip->state != FL_STATUS) {
1513 		map_write(map, CMD(0x70), cmd_adr);
1514 		chip->state = FL_STATUS;
1515 	}
1516 	status = map_read(map, cmd_adr);
1517 	if (map_word_bitsset(map, status, CMD(0x30))) {
1518 		xip_enable(map, chip, cmd_adr);
1519 		printk(KERN_WARNING "SR.4 or SR.5 bits set in buffer write (status %lx). Clearing.\n", status.x[0]);
1520 		xip_disable(map, chip, cmd_adr);
1521 		map_write(map, CMD(0x50), cmd_adr);
1522 		map_write(map, CMD(0x70), cmd_adr);
1523 	}
1524 
1525 	chip->state = FL_WRITING_TO_BUFFER;
1526 	map_write(map, write_cmd, cmd_adr);
1527 	ret = WAIT_TIMEOUT(map, chip, cmd_adr, 0);
1528 	if (ret) {
1529 		/* Argh. Not ready for write to buffer */
1530 		map_word Xstatus = map_read(map, cmd_adr);
1531 		map_write(map, CMD(0x70), cmd_adr);
1532 		chip->state = FL_STATUS;
1533 		status = map_read(map, cmd_adr);
1534 		map_write(map, CMD(0x50), cmd_adr);
1535 		map_write(map, CMD(0x70), cmd_adr);
1536 		xip_enable(map, chip, cmd_adr);
1537 		printk(KERN_ERR "%s: Chip not ready for buffer write. Xstatus = %lx, status = %lx\n",
1538 				map->name, Xstatus.x[0], status.x[0]);
1539 		goto out;
1540 	}
1541 
1542 	/* Figure out the number of words to write */
1543 	word_gap = (-adr & (map_bankwidth(map)-1));
1544 	words = (len - word_gap + map_bankwidth(map) - 1) / map_bankwidth(map);
1545 	if (!word_gap) {
1546 		words--;
1547 	} else {
1548 		word_gap = map_bankwidth(map) - word_gap;
1549 		adr -= word_gap;
1550 		datum = map_word_ff(map);
1551 	}
1552 
1553 	/* Write length of data to come */
1554 	map_write(map, CMD(words), cmd_adr );
1555 
1556 	/* Write data */
1557 	vec = *pvec;
1558 	vec_seek = *pvec_seek;
1559 	do {
1560 		int n = map_bankwidth(map) - word_gap;
1561 		if (n > vec->iov_len - vec_seek)
1562 			n = vec->iov_len - vec_seek;
1563 		if (n > len)
1564 			n = len;
1565 
1566 		if (!word_gap && len < map_bankwidth(map))
1567 			datum = map_word_ff(map);
1568 
1569 		datum = map_word_load_partial(map, datum,
1570 					      vec->iov_base + vec_seek,
1571 					      word_gap, n);
1572 
1573 		len -= n;
1574 		word_gap += n;
1575 		if (!len || word_gap == map_bankwidth(map)) {
1576 			map_write(map, datum, adr);
1577 			adr += map_bankwidth(map);
1578 			word_gap = 0;
1579 		}
1580 
1581 		vec_seek += n;
1582 		if (vec_seek == vec->iov_len) {
1583 			vec++;
1584 			vec_seek = 0;
1585 		}
1586 	} while (len);
1587 	*pvec = vec;
1588 	*pvec_seek = vec_seek;
1589 
1590 	/* GO GO GO */
1591 	map_write(map, CMD(0xd0), cmd_adr);
1592 	chip->state = FL_WRITING;
1593 
1594 	ret = INVAL_CACHE_AND_WAIT(map, chip, cmd_adr,
1595 				   adr, len,
1596 				   chip->buffer_write_time);
1597 	if (ret) {
1598 		map_write(map, CMD(0x70), cmd_adr);
1599 		chip->state = FL_STATUS;
1600 		xip_enable(map, chip, cmd_adr);
1601 		printk(KERN_ERR "%s: buffer write error (status timeout)\n", map->name);
1602 		goto out;
1603 	}
1604 
1605 	/* check for errors */
1606 	status = map_read(map, cmd_adr);
1607 	if (map_word_bitsset(map, status, CMD(0x1a))) {
1608 		unsigned long chipstatus = MERGESTATUS(status);
1609 
1610 		/* reset status */
1611 		map_write(map, CMD(0x50), cmd_adr);
1612 		map_write(map, CMD(0x70), cmd_adr);
1613 		xip_enable(map, chip, cmd_adr);
1614 
1615 		if (chipstatus & 0x02) {
1616 			ret = -EROFS;
1617 		} else if (chipstatus & 0x08) {
1618 			printk(KERN_ERR "%s: buffer write error (bad VPP)\n", map->name);
1619 			ret = -EIO;
1620 		} else {
1621 			printk(KERN_ERR "%s: buffer write error (status 0x%lx)\n", map->name, chipstatus);
1622 			ret = -EINVAL;
1623 		}
1624 
1625 		goto out;
1626 	}
1627 
1628 	xip_enable(map, chip, cmd_adr);
1629  out:	put_chip(map, chip, cmd_adr);
1630 	spin_unlock(chip->mutex);
1631 	return ret;
1632 }
1633 
1634 static int cfi_intelext_writev (struct mtd_info *mtd, const struct kvec *vecs,
1635 				unsigned long count, loff_t to, size_t *retlen)
1636 {
1637 	struct map_info *map = mtd->priv;
1638 	struct cfi_private *cfi = map->fldrv_priv;
1639 	int wbufsize = cfi_interleave(cfi) << cfi->cfiq->MaxBufWriteSize;
1640 	int ret = 0;
1641 	int chipnum;
1642 	unsigned long ofs, vec_seek, i;
1643 	size_t len = 0;
1644 
1645 	for (i = 0; i < count; i++)
1646 		len += vecs[i].iov_len;
1647 
1648 	*retlen = 0;
1649 	if (!len)
1650 		return 0;
1651 
1652 	chipnum = to >> cfi->chipshift;
1653 	ofs = to - (chipnum << cfi->chipshift);
1654 	vec_seek = 0;
1655 
1656 	do {
1657 		/* We must not cross write block boundaries */
1658 		int size = wbufsize - (ofs & (wbufsize-1));
1659 
1660 		if (size > len)
1661 			size = len;
1662 		ret = do_write_buffer(map, &cfi->chips[chipnum],
1663 				      ofs, &vecs, &vec_seek, size);
1664 		if (ret)
1665 			return ret;
1666 
1667 		ofs += size;
1668 		(*retlen) += size;
1669 		len -= size;
1670 
1671 		if (ofs >> cfi->chipshift) {
1672 			chipnum ++;
1673 			ofs = 0;
1674 			if (chipnum == cfi->numchips)
1675 				return 0;
1676 		}
1677 
1678 		/* Be nice and reschedule with the chip in a usable state for other
1679 		   processes. */
1680 		cond_resched();
1681 
1682 	} while (len);
1683 
1684 	return 0;
1685 }
1686 
1687 static int cfi_intelext_write_buffers (struct mtd_info *mtd, loff_t to,
1688 				       size_t len, size_t *retlen, const u_char *buf)
1689 {
1690 	struct kvec vec;
1691 
1692 	vec.iov_base = (void *) buf;
1693 	vec.iov_len = len;
1694 
1695 	return cfi_intelext_writev(mtd, &vec, 1, to, retlen);
1696 }
1697 
1698 static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip,
1699 				      unsigned long adr, int len, void *thunk)
1700 {
1701 	struct cfi_private *cfi = map->fldrv_priv;
1702 	map_word status;
1703 	int retries = 3;
1704 	int ret;
1705 
1706 	adr += chip->start;
1707 
1708  retry:
1709 	spin_lock(chip->mutex);
1710 	ret = get_chip(map, chip, adr, FL_ERASING);
1711 	if (ret) {
1712 		spin_unlock(chip->mutex);
1713 		return ret;
1714 	}
1715 
1716 	XIP_INVAL_CACHED_RANGE(map, adr, len);
1717 	ENABLE_VPP(map);
1718 	xip_disable(map, chip, adr);
1719 
1720 	/* Clear the status register first */
1721 	map_write(map, CMD(0x50), adr);
1722 
1723 	/* Now erase */
1724 	map_write(map, CMD(0x20), adr);
1725 	map_write(map, CMD(0xD0), adr);
1726 	chip->state = FL_ERASING;
1727 	chip->erase_suspended = 0;
1728 
1729 	ret = INVAL_CACHE_AND_WAIT(map, chip, adr,
1730 				   adr, len,
1731 				   chip->erase_time);
1732 	if (ret) {
1733 		map_write(map, CMD(0x70), adr);
1734 		chip->state = FL_STATUS;
1735 		xip_enable(map, chip, adr);
1736 		printk(KERN_ERR "%s: block erase error: (status timeout)\n", map->name);
1737 		goto out;
1738 	}
1739 
1740 	/* We've broken this before. It doesn't hurt to be safe */
1741 	map_write(map, CMD(0x70), adr);
1742 	chip->state = FL_STATUS;
1743 	status = map_read(map, adr);
1744 
1745 	/* check for errors */
1746 	if (map_word_bitsset(map, status, CMD(0x3a))) {
1747 		unsigned long chipstatus = MERGESTATUS(status);
1748 
1749 		/* Reset the error bits */
1750 		map_write(map, CMD(0x50), adr);
1751 		map_write(map, CMD(0x70), adr);
1752 		xip_enable(map, chip, adr);
1753 
1754 		if ((chipstatus & 0x30) == 0x30) {
1755 			printk(KERN_ERR "%s: block erase error: (bad command sequence, status 0x%lx)\n", map->name, chipstatus);
1756 			ret = -EINVAL;
1757 		} else if (chipstatus & 0x02) {
1758 			/* Protection bit set */
1759 			ret = -EROFS;
1760 		} else if (chipstatus & 0x8) {
1761 			/* Voltage */
1762 			printk(KERN_ERR "%s: block erase error: (bad VPP)\n", map->name);
1763 			ret = -EIO;
1764 		} else if (chipstatus & 0x20 && retries--) {
1765 			printk(KERN_DEBUG "block erase failed at 0x%08lx: status 0x%lx. Retrying...\n", adr, chipstatus);
1766 			put_chip(map, chip, adr);
1767 			spin_unlock(chip->mutex);
1768 			goto retry;
1769 		} else {
1770 			printk(KERN_ERR "%s: block erase failed at 0x%08lx (status 0x%lx)\n", map->name, adr, chipstatus);
1771 			ret = -EIO;
1772 		}
1773 
1774 		goto out;
1775 	}
1776 
1777 	xip_enable(map, chip, adr);
1778  out:	put_chip(map, chip, adr);
1779 	spin_unlock(chip->mutex);
1780 	return ret;
1781 }
1782 
1783 int cfi_intelext_erase_varsize(struct mtd_info *mtd, struct erase_info *instr)
1784 {
1785 	unsigned long ofs, len;
1786 	int ret;
1787 
1788 	ofs = instr->addr;
1789 	len = instr->len;
1790 
1791 	ret = cfi_varsize_frob(mtd, do_erase_oneblock, ofs, len, NULL);
1792 	if (ret)
1793 		return ret;
1794 
1795 	instr->state = MTD_ERASE_DONE;
1796 	mtd_erase_callback(instr);
1797 
1798 	return 0;
1799 }
1800 
1801 static void cfi_intelext_sync (struct mtd_info *mtd)
1802 {
1803 	struct map_info *map = mtd->priv;
1804 	struct cfi_private *cfi = map->fldrv_priv;
1805 	int i;
1806 	struct flchip *chip;
1807 	int ret = 0;
1808 
1809 	for (i=0; !ret && i<cfi->numchips; i++) {
1810 		chip = &cfi->chips[i];
1811 
1812 		spin_lock(chip->mutex);
1813 		ret = get_chip(map, chip, chip->start, FL_SYNCING);
1814 
1815 		if (!ret) {
1816 			chip->oldstate = chip->state;
1817 			chip->state = FL_SYNCING;
1818 			/* No need to wake_up() on this state change -
1819 			 * as the whole point is that nobody can do anything
1820 			 * with the chip now anyway.
1821 			 */
1822 		}
1823 		spin_unlock(chip->mutex);
1824 	}
1825 
1826 	/* Unlock the chips again */
1827 
1828 	for (i--; i >=0; i--) {
1829 		chip = &cfi->chips[i];
1830 
1831 		spin_lock(chip->mutex);
1832 
1833 		if (chip->state == FL_SYNCING) {
1834 			chip->state = chip->oldstate;
1835 			chip->oldstate = FL_READY;
1836 			wake_up(&chip->wq);
1837 		}
1838 		spin_unlock(chip->mutex);
1839 	}
1840 }
1841 
1842 static int __xipram do_getlockstatus_oneblock(struct map_info *map,
1843 						struct flchip *chip,
1844 						unsigned long adr,
1845 						int len, void *thunk)
1846 {
1847 	struct cfi_private *cfi = map->fldrv_priv;
1848 	int status, ofs_factor = cfi->interleave * cfi->device_type;
1849 
1850 	adr += chip->start;
1851 	xip_disable(map, chip, adr+(2*ofs_factor));
1852 	map_write(map, CMD(0x90), adr+(2*ofs_factor));
1853 	chip->state = FL_JEDEC_QUERY;
1854 	status = cfi_read_query(map, adr+(2*ofs_factor));
1855 	xip_enable(map, chip, 0);
1856 	return status;
1857 }
1858 
1859 #ifdef DEBUG_LOCK_BITS
1860 static int __xipram do_printlockstatus_oneblock(struct map_info *map,
1861 						struct flchip *chip,
1862 						unsigned long adr,
1863 						int len, void *thunk)
1864 {
1865 	printk(KERN_DEBUG "block status register for 0x%08lx is %x\n",
1866 	       adr, do_getlockstatus_oneblock(map, chip, adr, len, thunk));
1867 	return 0;
1868 }
1869 #endif
1870 
1871 #define DO_XXLOCK_ONEBLOCK_LOCK		((void *) 1)
1872 #define DO_XXLOCK_ONEBLOCK_UNLOCK	((void *) 2)
1873 
1874 static int __xipram do_xxlock_oneblock(struct map_info *map, struct flchip *chip,
1875 				       unsigned long adr, int len, void *thunk)
1876 {
1877 	struct cfi_private *cfi = map->fldrv_priv;
1878 	struct cfi_pri_intelext *extp = cfi->cmdset_priv;
1879 	int udelay;
1880 	int ret;
1881 
1882 	adr += chip->start;
1883 
1884 	spin_lock(chip->mutex);
1885 	ret = get_chip(map, chip, adr, FL_LOCKING);
1886 	if (ret) {
1887 		spin_unlock(chip->mutex);
1888 		return ret;
1889 	}
1890 
1891 	ENABLE_VPP(map);
1892 	xip_disable(map, chip, adr);
1893 
1894 	map_write(map, CMD(0x60), adr);
1895 	if (thunk == DO_XXLOCK_ONEBLOCK_LOCK) {
1896 		map_write(map, CMD(0x01), adr);
1897 		chip->state = FL_LOCKING;
1898 	} else if (thunk == DO_XXLOCK_ONEBLOCK_UNLOCK) {
1899 		map_write(map, CMD(0xD0), adr);
1900 		chip->state = FL_UNLOCKING;
1901 	} else
1902 		BUG();
1903 
1904 	/*
1905 	 * If Instant Individual Block Locking supported then no need
1906 	 * to delay.
1907 	 */
1908 	udelay = (!extp || !(extp->FeatureSupport & (1 << 5))) ? 1000000/HZ : 0;
1909 
1910 	ret = WAIT_TIMEOUT(map, chip, adr, udelay);
1911 	if (ret) {
1912 		map_write(map, CMD(0x70), adr);
1913 		chip->state = FL_STATUS;
1914 		xip_enable(map, chip, adr);
1915 		printk(KERN_ERR "%s: block unlock error: (status timeout)\n", map->name);
1916 		goto out;
1917 	}
1918 
1919 	xip_enable(map, chip, adr);
1920 out:	put_chip(map, chip, adr);
1921 	spin_unlock(chip->mutex);
1922 	return ret;
1923 }
1924 
1925 static int cfi_intelext_lock(struct mtd_info *mtd, loff_t ofs, size_t len)
1926 {
1927 	int ret;
1928 
1929 #ifdef DEBUG_LOCK_BITS
1930 	printk(KERN_DEBUG "%s: lock status before, ofs=0x%08llx, len=0x%08X\n",
1931 	       __FUNCTION__, ofs, len);
1932 	cfi_varsize_frob(mtd, do_printlockstatus_oneblock,
1933 		ofs, len, 0);
1934 #endif
1935 
1936 	ret = cfi_varsize_frob(mtd, do_xxlock_oneblock,
1937 		ofs, len, DO_XXLOCK_ONEBLOCK_LOCK);
1938 
1939 #ifdef DEBUG_LOCK_BITS
1940 	printk(KERN_DEBUG "%s: lock status after, ret=%d\n",
1941 	       __FUNCTION__, ret);
1942 	cfi_varsize_frob(mtd, do_printlockstatus_oneblock,
1943 		ofs, len, 0);
1944 #endif
1945 
1946 	return ret;
1947 }
1948 
1949 static int cfi_intelext_unlock(struct mtd_info *mtd, loff_t ofs, size_t len)
1950 {
1951 	int ret;
1952 
1953 #ifdef DEBUG_LOCK_BITS
1954 	printk(KERN_DEBUG "%s: lock status before, ofs=0x%08llx, len=0x%08X\n",
1955 	       __FUNCTION__, ofs, len);
1956 	cfi_varsize_frob(mtd, do_printlockstatus_oneblock,
1957 		ofs, len, 0);
1958 #endif
1959 
1960 	ret = cfi_varsize_frob(mtd, do_xxlock_oneblock,
1961 					ofs, len, DO_XXLOCK_ONEBLOCK_UNLOCK);
1962 
1963 #ifdef DEBUG_LOCK_BITS
1964 	printk(KERN_DEBUG "%s: lock status after, ret=%d\n",
1965 	       __FUNCTION__, ret);
1966 	cfi_varsize_frob(mtd, do_printlockstatus_oneblock,
1967 		ofs, len, 0);
1968 #endif
1969 
1970 	return ret;
1971 }
1972 
1973 #ifdef CONFIG_MTD_OTP
1974 
1975 typedef int (*otp_op_t)(struct map_info *map, struct flchip *chip,
1976 			u_long data_offset, u_char *buf, u_int size,
1977 			u_long prot_offset, u_int groupno, u_int groupsize);
1978 
1979 static int __xipram
1980 do_otp_read(struct map_info *map, struct flchip *chip, u_long offset,
1981 	    u_char *buf, u_int size, u_long prot, u_int grpno, u_int grpsz)
1982 {
1983 	struct cfi_private *cfi = map->fldrv_priv;
1984 	int ret;
1985 
1986 	spin_lock(chip->mutex);
1987 	ret = get_chip(map, chip, chip->start, FL_JEDEC_QUERY);
1988 	if (ret) {
1989 		spin_unlock(chip->mutex);
1990 		return ret;
1991 	}
1992 
1993 	/* let's ensure we're not reading back cached data from array mode */
1994 	INVALIDATE_CACHED_RANGE(map, chip->start + offset, size);
1995 
1996 	xip_disable(map, chip, chip->start);
1997 	if (chip->state != FL_JEDEC_QUERY) {
1998 		map_write(map, CMD(0x90), chip->start);
1999 		chip->state = FL_JEDEC_QUERY;
2000 	}
2001 	map_copy_from(map, buf, chip->start + offset, size);
2002 	xip_enable(map, chip, chip->start);
2003 
2004 	/* then ensure we don't keep OTP data in the cache */
2005 	INVALIDATE_CACHED_RANGE(map, chip->start + offset, size);
2006 
2007 	put_chip(map, chip, chip->start);
2008 	spin_unlock(chip->mutex);
2009 	return 0;
2010 }
2011 
2012 static int
2013 do_otp_write(struct map_info *map, struct flchip *chip, u_long offset,
2014 	     u_char *buf, u_int size, u_long prot, u_int grpno, u_int grpsz)
2015 {
2016 	int ret;
2017 
2018 	while (size) {
2019 		unsigned long bus_ofs = offset & ~(map_bankwidth(map)-1);
2020 		int gap = offset - bus_ofs;
2021 		int n = min_t(int, size, map_bankwidth(map)-gap);
2022 		map_word datum = map_word_ff(map);
2023 
2024 		datum = map_word_load_partial(map, datum, buf, gap, n);
2025 		ret = do_write_oneword(map, chip, bus_ofs, datum, FL_OTP_WRITE);
2026 		if (ret)
2027 			return ret;
2028 
2029 		offset += n;
2030 		buf += n;
2031 		size -= n;
2032 	}
2033 
2034 	return 0;
2035 }
2036 
2037 static int
2038 do_otp_lock(struct map_info *map, struct flchip *chip, u_long offset,
2039 	    u_char *buf, u_int size, u_long prot, u_int grpno, u_int grpsz)
2040 {
2041 	struct cfi_private *cfi = map->fldrv_priv;
2042 	map_word datum;
2043 
2044 	/* make sure area matches group boundaries */
2045 	if (size != grpsz)
2046 		return -EXDEV;
2047 
2048 	datum = map_word_ff(map);
2049 	datum = map_word_clr(map, datum, CMD(1 << grpno));
2050 	return do_write_oneword(map, chip, prot, datum, FL_OTP_WRITE);
2051 }
2052 
2053 static int cfi_intelext_otp_walk(struct mtd_info *mtd, loff_t from, size_t len,
2054 				 size_t *retlen, u_char *buf,
2055 				 otp_op_t action, int user_regs)
2056 {
2057 	struct map_info *map = mtd->priv;
2058 	struct cfi_private *cfi = map->fldrv_priv;
2059 	struct cfi_pri_intelext *extp = cfi->cmdset_priv;
2060 	struct flchip *chip;
2061 	struct cfi_intelext_otpinfo *otp;
2062 	u_long devsize, reg_prot_offset, data_offset;
2063 	u_int chip_num, chip_step, field, reg_fact_size, reg_user_size;
2064 	u_int groups, groupno, groupsize, reg_fact_groups, reg_user_groups;
2065 	int ret;
2066 
2067 	*retlen = 0;
2068 
2069 	/* Check that we actually have some OTP registers */
2070 	if (!extp || !(extp->FeatureSupport & 64) || !extp->NumProtectionFields)
2071 		return -ENODATA;
2072 
2073 	/* we need real chips here not virtual ones */
2074 	devsize = (1 << cfi->cfiq->DevSize) * cfi->interleave;
2075 	chip_step = devsize >> cfi->chipshift;
2076 	chip_num = 0;
2077 
2078 	/* Some chips have OTP located in the _top_ partition only.
2079 	   For example: Intel 28F256L18T (T means top-parameter device) */
2080 	if (cfi->mfr == MANUFACTURER_INTEL) {
2081 		switch (cfi->id) {
2082 		case 0x880b:
2083 		case 0x880c:
2084 		case 0x880d:
2085 			chip_num = chip_step - 1;
2086 		}
2087 	}
2088 
2089 	for ( ; chip_num < cfi->numchips; chip_num += chip_step) {
2090 		chip = &cfi->chips[chip_num];
2091 		otp = (struct cfi_intelext_otpinfo *)&extp->extra[0];
2092 
2093 		/* first OTP region */
2094 		field = 0;
2095 		reg_prot_offset = extp->ProtRegAddr;
2096 		reg_fact_groups = 1;
2097 		reg_fact_size = 1 << extp->FactProtRegSize;
2098 		reg_user_groups = 1;
2099 		reg_user_size = 1 << extp->UserProtRegSize;
2100 
2101 		while (len > 0) {
2102 			/* flash geometry fixup */
2103 			data_offset = reg_prot_offset + 1;
2104 			data_offset *= cfi->interleave * cfi->device_type;
2105 			reg_prot_offset *= cfi->interleave * cfi->device_type;
2106 			reg_fact_size *= cfi->interleave;
2107 			reg_user_size *= cfi->interleave;
2108 
2109 			if (user_regs) {
2110 				groups = reg_user_groups;
2111 				groupsize = reg_user_size;
2112 				/* skip over factory reg area */
2113 				groupno = reg_fact_groups;
2114 				data_offset += reg_fact_groups * reg_fact_size;
2115 			} else {
2116 				groups = reg_fact_groups;
2117 				groupsize = reg_fact_size;
2118 				groupno = 0;
2119 			}
2120 
2121 			while (len > 0 && groups > 0) {
2122 				if (!action) {
2123 					/*
2124 					 * Special case: if action is NULL
2125 					 * we fill buf with otp_info records.
2126 					 */
2127 					struct otp_info *otpinfo;
2128 					map_word lockword;
2129 					len -= sizeof(struct otp_info);
2130 					if (len <= 0)
2131 						return -ENOSPC;
2132 					ret = do_otp_read(map, chip,
2133 							  reg_prot_offset,
2134 							  (u_char *)&lockword,
2135 							  map_bankwidth(map),
2136 							  0, 0,  0);
2137 					if (ret)
2138 						return ret;
2139 					otpinfo = (struct otp_info *)buf;
2140 					otpinfo->start = from;
2141 					otpinfo->length = groupsize;
2142 					otpinfo->locked =
2143 					   !map_word_bitsset(map, lockword,
2144 							     CMD(1 << groupno));
2145 					from += groupsize;
2146 					buf += sizeof(*otpinfo);
2147 					*retlen += sizeof(*otpinfo);
2148 				} else if (from >= groupsize) {
2149 					from -= groupsize;
2150 					data_offset += groupsize;
2151 				} else {
2152 					int size = groupsize;
2153 					data_offset += from;
2154 					size -= from;
2155 					from = 0;
2156 					if (size > len)
2157 						size = len;
2158 					ret = action(map, chip, data_offset,
2159 						     buf, size, reg_prot_offset,
2160 						     groupno, groupsize);
2161 					if (ret < 0)
2162 						return ret;
2163 					buf += size;
2164 					len -= size;
2165 					*retlen += size;
2166 					data_offset += size;
2167 				}
2168 				groupno++;
2169 				groups--;
2170 			}
2171 
2172 			/* next OTP region */
2173 			if (++field == extp->NumProtectionFields)
2174 				break;
2175 			reg_prot_offset = otp->ProtRegAddr;
2176 			reg_fact_groups = otp->FactGroups;
2177 			reg_fact_size = 1 << otp->FactProtRegSize;
2178 			reg_user_groups = otp->UserGroups;
2179 			reg_user_size = 1 << otp->UserProtRegSize;
2180 			otp++;
2181 		}
2182 	}
2183 
2184 	return 0;
2185 }
2186 
2187 static int cfi_intelext_read_fact_prot_reg(struct mtd_info *mtd, loff_t from,
2188 					   size_t len, size_t *retlen,
2189 					    u_char *buf)
2190 {
2191 	return cfi_intelext_otp_walk(mtd, from, len, retlen,
2192 				     buf, do_otp_read, 0);
2193 }
2194 
2195 static int cfi_intelext_read_user_prot_reg(struct mtd_info *mtd, loff_t from,
2196 					   size_t len, size_t *retlen,
2197 					    u_char *buf)
2198 {
2199 	return cfi_intelext_otp_walk(mtd, from, len, retlen,
2200 				     buf, do_otp_read, 1);
2201 }
2202 
2203 static int cfi_intelext_write_user_prot_reg(struct mtd_info *mtd, loff_t from,
2204 					    size_t len, size_t *retlen,
2205 					     u_char *buf)
2206 {
2207 	return cfi_intelext_otp_walk(mtd, from, len, retlen,
2208 				     buf, do_otp_write, 1);
2209 }
2210 
2211 static int cfi_intelext_lock_user_prot_reg(struct mtd_info *mtd,
2212 					   loff_t from, size_t len)
2213 {
2214 	size_t retlen;
2215 	return cfi_intelext_otp_walk(mtd, from, len, &retlen,
2216 				     NULL, do_otp_lock, 1);
2217 }
2218 
2219 static int cfi_intelext_get_fact_prot_info(struct mtd_info *mtd,
2220 					   struct otp_info *buf, size_t len)
2221 {
2222 	size_t retlen;
2223 	int ret;
2224 
2225 	ret = cfi_intelext_otp_walk(mtd, 0, len, &retlen, (u_char *)buf, NULL, 0);
2226 	return ret ? : retlen;
2227 }
2228 
2229 static int cfi_intelext_get_user_prot_info(struct mtd_info *mtd,
2230 					   struct otp_info *buf, size_t len)
2231 {
2232 	size_t retlen;
2233 	int ret;
2234 
2235 	ret = cfi_intelext_otp_walk(mtd, 0, len, &retlen, (u_char *)buf, NULL, 1);
2236 	return ret ? : retlen;
2237 }
2238 
2239 #endif
2240 
2241 static void cfi_intelext_save_locks(struct mtd_info *mtd)
2242 {
2243 	struct mtd_erase_region_info *region;
2244 	int block, status, i;
2245 	unsigned long adr;
2246 	size_t len;
2247 
2248 	for (i = 0; i < mtd->numeraseregions; i++) {
2249 		region = &mtd->eraseregions[i];
2250 		if (!region->lockmap)
2251 			continue;
2252 
2253 		for (block = 0; block < region->numblocks; block++){
2254 			len = region->erasesize;
2255 			adr = region->offset + block * len;
2256 
2257 			status = cfi_varsize_frob(mtd,
2258 					do_getlockstatus_oneblock, adr, len, 0);
2259 			if (status)
2260 				set_bit(block, region->lockmap);
2261 			else
2262 				clear_bit(block, region->lockmap);
2263 		}
2264 	}
2265 }
2266 
2267 static int cfi_intelext_suspend(struct mtd_info *mtd)
2268 {
2269 	struct map_info *map = mtd->priv;
2270 	struct cfi_private *cfi = map->fldrv_priv;
2271 	struct cfi_pri_intelext *extp = cfi->cmdset_priv;
2272 	int i;
2273 	struct flchip *chip;
2274 	int ret = 0;
2275 
2276 	if ((mtd->flags & MTD_STUPID_LOCK)
2277 	    && extp && (extp->FeatureSupport & (1 << 5)))
2278 		cfi_intelext_save_locks(mtd);
2279 
2280 	for (i=0; !ret && i<cfi->numchips; i++) {
2281 		chip = &cfi->chips[i];
2282 
2283 		spin_lock(chip->mutex);
2284 
2285 		switch (chip->state) {
2286 		case FL_READY:
2287 		case FL_STATUS:
2288 		case FL_CFI_QUERY:
2289 		case FL_JEDEC_QUERY:
2290 			if (chip->oldstate == FL_READY) {
2291 				/* place the chip in a known state before suspend */
2292 				map_write(map, CMD(0xFF), cfi->chips[i].start);
2293 				chip->oldstate = chip->state;
2294 				chip->state = FL_PM_SUSPENDED;
2295 				/* No need to wake_up() on this state change -
2296 				 * as the whole point is that nobody can do anything
2297 				 * with the chip now anyway.
2298 				 */
2299 			} else {
2300 				/* There seems to be an operation pending. We must wait for it. */
2301 				printk(KERN_NOTICE "Flash device refused suspend due to pending operation (oldstate %d)\n", chip->oldstate);
2302 				ret = -EAGAIN;
2303 			}
2304 			break;
2305 		default:
2306 			/* Should we actually wait? Once upon a time these routines weren't
2307 			   allowed to. Or should we return -EAGAIN, because the upper layers
2308 			   ought to have already shut down anything which was using the device
2309 			   anyway? The latter for now. */
2310 			printk(KERN_NOTICE "Flash device refused suspend due to active operation (state %d)\n", chip->oldstate);
2311 			ret = -EAGAIN;
2312 		case FL_PM_SUSPENDED:
2313 			break;
2314 		}
2315 		spin_unlock(chip->mutex);
2316 	}
2317 
2318 	/* Unlock the chips again */
2319 
2320 	if (ret) {
2321 		for (i--; i >=0; i--) {
2322 			chip = &cfi->chips[i];
2323 
2324 			spin_lock(chip->mutex);
2325 
2326 			if (chip->state == FL_PM_SUSPENDED) {
2327 				/* No need to force it into a known state here,
2328 				   because we're returning failure, and it didn't
2329 				   get power cycled */
2330 				chip->state = chip->oldstate;
2331 				chip->oldstate = FL_READY;
2332 				wake_up(&chip->wq);
2333 			}
2334 			spin_unlock(chip->mutex);
2335 		}
2336 	}
2337 
2338 	return ret;
2339 }
2340 
2341 static void cfi_intelext_restore_locks(struct mtd_info *mtd)
2342 {
2343 	struct mtd_erase_region_info *region;
2344 	int block, i;
2345 	unsigned long adr;
2346 	size_t len;
2347 
2348 	for (i = 0; i < mtd->numeraseregions; i++) {
2349 		region = &mtd->eraseregions[i];
2350 		if (!region->lockmap)
2351 			continue;
2352 
2353 		for (block = 0; block < region->numblocks; block++) {
2354 			len = region->erasesize;
2355 			adr = region->offset + block * len;
2356 
2357 			if (!test_bit(block, region->lockmap))
2358 				cfi_intelext_unlock(mtd, adr, len);
2359 		}
2360 	}
2361 }
2362 
2363 static void cfi_intelext_resume(struct mtd_info *mtd)
2364 {
2365 	struct map_info *map = mtd->priv;
2366 	struct cfi_private *cfi = map->fldrv_priv;
2367 	struct cfi_pri_intelext *extp = cfi->cmdset_priv;
2368 	int i;
2369 	struct flchip *chip;
2370 
2371 	for (i=0; i<cfi->numchips; i++) {
2372 
2373 		chip = &cfi->chips[i];
2374 
2375 		spin_lock(chip->mutex);
2376 
2377 		/* Go to known state. Chip may have been power cycled */
2378 		if (chip->state == FL_PM_SUSPENDED) {
2379 			map_write(map, CMD(0xFF), cfi->chips[i].start);
2380 			chip->oldstate = chip->state = FL_READY;
2381 			wake_up(&chip->wq);
2382 		}
2383 
2384 		spin_unlock(chip->mutex);
2385 	}
2386 
2387 	if ((mtd->flags & MTD_STUPID_LOCK)
2388 	    && extp && (extp->FeatureSupport & (1 << 5)))
2389 		cfi_intelext_restore_locks(mtd);
2390 }
2391 
2392 static int cfi_intelext_reset(struct mtd_info *mtd)
2393 {
2394 	struct map_info *map = mtd->priv;
2395 	struct cfi_private *cfi = map->fldrv_priv;
2396 	int i, ret;
2397 
2398 	for (i=0; i < cfi->numchips; i++) {
2399 		struct flchip *chip = &cfi->chips[i];
2400 
2401 		/* force the completion of any ongoing operation
2402 		   and switch to array mode so any bootloader in
2403 		   flash is accessible for soft reboot. */
2404 		spin_lock(chip->mutex);
2405 		ret = get_chip(map, chip, chip->start, FL_SYNCING);
2406 		if (!ret) {
2407 			map_write(map, CMD(0xff), chip->start);
2408 			chip->state = FL_READY;
2409 		}
2410 		spin_unlock(chip->mutex);
2411 	}
2412 
2413 	return 0;
2414 }
2415 
2416 static int cfi_intelext_reboot(struct notifier_block *nb, unsigned long val,
2417 			       void *v)
2418 {
2419 	struct mtd_info *mtd;
2420 
2421 	mtd = container_of(nb, struct mtd_info, reboot_notifier);
2422 	cfi_intelext_reset(mtd);
2423 	return NOTIFY_DONE;
2424 }
2425 
2426 static void cfi_intelext_destroy(struct mtd_info *mtd)
2427 {
2428 	struct map_info *map = mtd->priv;
2429 	struct cfi_private *cfi = map->fldrv_priv;
2430 	struct mtd_erase_region_info *region;
2431 	int i;
2432 	cfi_intelext_reset(mtd);
2433 	unregister_reboot_notifier(&mtd->reboot_notifier);
2434 	kfree(cfi->cmdset_priv);
2435 	kfree(cfi->cfiq);
2436 	kfree(cfi->chips[0].priv);
2437 	kfree(cfi);
2438 	for (i = 0; i < mtd->numeraseregions; i++) {
2439 		region = &mtd->eraseregions[i];
2440 		if (region->lockmap)
2441 			kfree(region->lockmap);
2442 	}
2443 	kfree(mtd->eraseregions);
2444 }
2445 
2446 MODULE_LICENSE("GPL");
2447 MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org> et al.");
2448 MODULE_DESCRIPTION("MTD chip driver for Intel/Sharp flash chips");
2449 MODULE_ALIAS("cfi_cmdset_0003");
2450 MODULE_ALIAS("cfi_cmdset_0200");
2451