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