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