GNU Linux-libre 6.8.7-gnu
[releases.git] / drivers / mtd / chips / cfi_cmdset_0002.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Common Flash Interface support:
4  *   AMD & Fujitsu Standard Vendor Command Set (ID 0x0002)
5  *
6  * Copyright (C) 2000 Crossnet Co. <info@crossnet.co.jp>
7  * Copyright (C) 2004 Arcom Control Systems Ltd <linux@arcom.com>
8  * Copyright (C) 2005 MontaVista Software Inc. <source@mvista.com>
9  *
10  * 2_by_8 routines added by Simon Munton
11  *
12  * 4_by_16 work by Carolyn J. Smith
13  *
14  * XIP support hooks by Vitaly Wool (based on code for Intel flash
15  * by Nicolas Pitre)
16  *
17  * 25/09/2008 Christopher Moore: TopBottom fixup for many Macronix with CFI V1.0
18  *
19  * Occasionally maintained by Thayne Harbaugh tharbaugh at lnxi dot com
20  */
21
22 #include <linux/module.h>
23 #include <linux/types.h>
24 #include <linux/kernel.h>
25 #include <linux/sched.h>
26 #include <asm/io.h>
27 #include <asm/byteorder.h>
28
29 #include <linux/errno.h>
30 #include <linux/slab.h>
31 #include <linux/delay.h>
32 #include <linux/interrupt.h>
33 #include <linux/reboot.h>
34 #include <linux/of.h>
35 #include <linux/mtd/map.h>
36 #include <linux/mtd/mtd.h>
37 #include <linux/mtd/cfi.h>
38 #include <linux/mtd/xip.h>
39
40 #define AMD_BOOTLOC_BUG
41 #define FORCE_WORD_WRITE 0
42
43 #define MAX_RETRIES 3
44
45 #define SST49LF004B             0x0060
46 #define SST49LF040B             0x0050
47 #define SST49LF008A             0x005a
48 #define AT49BV6416              0x00d6
49 #define S29GL064N_MN12          0x0c01
50
51 /*
52  * Status Register bit description. Used by flash devices that don't
53  * support DQ polling (e.g. HyperFlash)
54  */
55 #define CFI_SR_DRB              BIT(7)
56 #define CFI_SR_ESB              BIT(5)
57 #define CFI_SR_PSB              BIT(4)
58 #define CFI_SR_WBASB            BIT(3)
59 #define CFI_SR_SLSB             BIT(1)
60
61 enum cfi_quirks {
62         CFI_QUIRK_DQ_TRUE_DATA = BIT(0),
63 };
64
65 static int cfi_amdstd_read (struct mtd_info *, loff_t, size_t, size_t *, u_char *);
66 static int cfi_amdstd_write_words(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
67 #if !FORCE_WORD_WRITE
68 static int cfi_amdstd_write_buffers(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
69 #endif
70 static int cfi_amdstd_erase_chip(struct mtd_info *, struct erase_info *);
71 static int cfi_amdstd_erase_varsize(struct mtd_info *, struct erase_info *);
72 static void cfi_amdstd_sync (struct mtd_info *);
73 static int cfi_amdstd_suspend (struct mtd_info *);
74 static void cfi_amdstd_resume (struct mtd_info *);
75 static int cfi_amdstd_reboot(struct notifier_block *, unsigned long, void *);
76 static int cfi_amdstd_get_fact_prot_info(struct mtd_info *, size_t,
77                                          size_t *, struct otp_info *);
78 static int cfi_amdstd_get_user_prot_info(struct mtd_info *, size_t,
79                                          size_t *, struct otp_info *);
80 static int cfi_amdstd_secsi_read (struct mtd_info *, loff_t, size_t, size_t *, u_char *);
81 static int cfi_amdstd_read_fact_prot_reg(struct mtd_info *, loff_t, size_t,
82                                          size_t *, u_char *);
83 static int cfi_amdstd_read_user_prot_reg(struct mtd_info *, loff_t, size_t,
84                                          size_t *, u_char *);
85 static int cfi_amdstd_write_user_prot_reg(struct mtd_info *, loff_t, size_t,
86                                           size_t *, const u_char *);
87 static int cfi_amdstd_lock_user_prot_reg(struct mtd_info *, loff_t, size_t);
88
89 static int cfi_amdstd_panic_write(struct mtd_info *mtd, loff_t to, size_t len,
90                                   size_t *retlen, const u_char *buf);
91
92 static void cfi_amdstd_destroy(struct mtd_info *);
93
94 struct mtd_info *cfi_cmdset_0002(struct map_info *, int);
95 static struct mtd_info *cfi_amdstd_setup (struct mtd_info *);
96
97 static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr, int mode);
98 static void put_chip(struct map_info *map, struct flchip *chip, unsigned long adr);
99 #include "fwh_lock.h"
100
101 static int cfi_atmel_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
102 static int cfi_atmel_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
103
104 static int cfi_ppb_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
105 static int cfi_ppb_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len);
106 static int cfi_ppb_is_locked(struct mtd_info *mtd, loff_t ofs, uint64_t len);
107
108 static struct mtd_chip_driver cfi_amdstd_chipdrv = {
109         .probe          = NULL, /* Not usable directly */
110         .destroy        = cfi_amdstd_destroy,
111         .name           = "cfi_cmdset_0002",
112         .module         = THIS_MODULE
113 };
114
115 /*
116  * Use status register to poll for Erase/write completion when DQ is not
117  * supported. This is indicated by Bit[1:0] of SoftwareFeatures field in
118  * CFI Primary Vendor-Specific Extended Query table 1.5
119  */
120 static int cfi_use_status_reg(struct cfi_private *cfi)
121 {
122         struct cfi_pri_amdstd *extp = cfi->cmdset_priv;
123         u8 poll_mask = CFI_POLL_STATUS_REG | CFI_POLL_DQ;
124
125         return extp && extp->MinorVersion >= '5' &&
126                 (extp->SoftwareFeatures & poll_mask) == CFI_POLL_STATUS_REG;
127 }
128
129 static int cfi_check_err_status(struct map_info *map, struct flchip *chip,
130                                 unsigned long adr)
131 {
132         struct cfi_private *cfi = map->fldrv_priv;
133         map_word status;
134
135         if (!cfi_use_status_reg(cfi))
136                 return 0;
137
138         cfi_send_gen_cmd(0x70, cfi->addr_unlock1, chip->start, map, cfi,
139                          cfi->device_type, NULL);
140         status = map_read(map, adr);
141
142         /* The error bits are invalid while the chip's busy */
143         if (!map_word_bitsset(map, status, CMD(CFI_SR_DRB)))
144                 return 0;
145
146         if (map_word_bitsset(map, status, CMD(0x3a))) {
147                 unsigned long chipstatus = MERGESTATUS(status);
148
149                 if (chipstatus & CFI_SR_ESB)
150                         pr_err("%s erase operation failed, status %lx\n",
151                                map->name, chipstatus);
152                 if (chipstatus & CFI_SR_PSB)
153                         pr_err("%s program operation failed, status %lx\n",
154                                map->name, chipstatus);
155                 if (chipstatus & CFI_SR_WBASB)
156                         pr_err("%s buffer program command aborted, status %lx\n",
157                                map->name, chipstatus);
158                 if (chipstatus & CFI_SR_SLSB)
159                         pr_err("%s sector write protected, status %lx\n",
160                                map->name, chipstatus);
161
162                 /* Erase/Program status bits are set on the operation failure */
163                 if (chipstatus & (CFI_SR_ESB | CFI_SR_PSB))
164                         return 1;
165         }
166         return 0;
167 }
168
169 /* #define DEBUG_CFI_FEATURES */
170
171
172 #ifdef DEBUG_CFI_FEATURES
173 static void cfi_tell_features(struct cfi_pri_amdstd *extp)
174 {
175         const char* erase_suspend[3] = {
176                 "Not supported", "Read only", "Read/write"
177         };
178         const char* top_bottom[6] = {
179                 "No WP", "8x8KiB sectors at top & bottom, no WP",
180                 "Bottom boot", "Top boot",
181                 "Uniform, Bottom WP", "Uniform, Top WP"
182         };
183
184         printk("  Silicon revision: %d\n", extp->SiliconRevision >> 1);
185         printk("  Address sensitive unlock: %s\n",
186                (extp->SiliconRevision & 1) ? "Not required" : "Required");
187
188         if (extp->EraseSuspend < ARRAY_SIZE(erase_suspend))
189                 printk("  Erase Suspend: %s\n", erase_suspend[extp->EraseSuspend]);
190         else
191                 printk("  Erase Suspend: Unknown value %d\n", extp->EraseSuspend);
192
193         if (extp->BlkProt == 0)
194                 printk("  Block protection: Not supported\n");
195         else
196                 printk("  Block protection: %d sectors per group\n", extp->BlkProt);
197
198
199         printk("  Temporary block unprotect: %s\n",
200                extp->TmpBlkUnprotect ? "Supported" : "Not supported");
201         printk("  Block protect/unprotect scheme: %d\n", extp->BlkProtUnprot);
202         printk("  Number of simultaneous operations: %d\n", extp->SimultaneousOps);
203         printk("  Burst mode: %s\n",
204                extp->BurstMode ? "Supported" : "Not supported");
205         if (extp->PageMode == 0)
206                 printk("  Page mode: Not supported\n");
207         else
208                 printk("  Page mode: %d word page\n", extp->PageMode << 2);
209
210         printk("  Vpp Supply Minimum Program/Erase Voltage: %d.%d V\n",
211                extp->VppMin >> 4, extp->VppMin & 0xf);
212         printk("  Vpp Supply Maximum Program/Erase Voltage: %d.%d V\n",
213                extp->VppMax >> 4, extp->VppMax & 0xf);
214
215         if (extp->TopBottom < ARRAY_SIZE(top_bottom))
216                 printk("  Top/Bottom Boot Block: %s\n", top_bottom[extp->TopBottom]);
217         else
218                 printk("  Top/Bottom Boot Block: Unknown value %d\n", extp->TopBottom);
219 }
220 #endif
221
222 #ifdef AMD_BOOTLOC_BUG
223 /* Wheee. Bring me the head of someone at AMD. */
224 static void fixup_amd_bootblock(struct mtd_info *mtd)
225 {
226         struct map_info *map = mtd->priv;
227         struct cfi_private *cfi = map->fldrv_priv;
228         struct cfi_pri_amdstd *extp = cfi->cmdset_priv;
229         __u8 major = extp->MajorVersion;
230         __u8 minor = extp->MinorVersion;
231
232         if (((major << 8) | minor) < 0x3131) {
233                 /* CFI version 1.0 => don't trust bootloc */
234
235                 pr_debug("%s: JEDEC Vendor ID is 0x%02X Device ID is 0x%02X\n",
236                         map->name, cfi->mfr, cfi->id);
237
238                 /* AFAICS all 29LV400 with a bottom boot block have a device ID
239                  * of 0x22BA in 16-bit mode and 0xBA in 8-bit mode.
240                  * These were badly detected as they have the 0x80 bit set
241                  * so treat them as a special case.
242                  */
243                 if (((cfi->id == 0xBA) || (cfi->id == 0x22BA)) &&
244
245                         /* Macronix added CFI to their 2nd generation
246                          * MX29LV400C B/T but AFAICS no other 29LV400 (AMD,
247                          * Fujitsu, Spansion, EON, ESI and older Macronix)
248                          * has CFI.
249                          *
250                          * Therefore also check the manufacturer.
251                          * This reduces the risk of false detection due to
252                          * the 8-bit device ID.
253                          */
254                         (cfi->mfr == CFI_MFR_MACRONIX)) {
255                         pr_debug("%s: Macronix MX29LV400C with bottom boot block"
256                                 " detected\n", map->name);
257                         extp->TopBottom = 2;    /* bottom boot */
258                 } else
259                 if (cfi->id & 0x80) {
260                         printk(KERN_WARNING "%s: JEDEC Device ID is 0x%02X. Assuming broken CFI table.\n", map->name, cfi->id);
261                         extp->TopBottom = 3;    /* top boot */
262                 } else {
263                         extp->TopBottom = 2;    /* bottom boot */
264                 }
265
266                 pr_debug("%s: AMD CFI PRI V%c.%c has no boot block field;"
267                         " deduced %s from Device ID\n", map->name, major, minor,
268                         extp->TopBottom == 2 ? "bottom" : "top");
269         }
270 }
271 #endif
272
273 #if !FORCE_WORD_WRITE
274 static void fixup_use_write_buffers(struct mtd_info *mtd)
275 {
276         struct map_info *map = mtd->priv;
277         struct cfi_private *cfi = map->fldrv_priv;
278
279         if (cfi->mfr == CFI_MFR_AMD && cfi->id == 0x2201)
280                 return;
281
282         if (cfi->cfiq->BufWriteTimeoutTyp) {
283                 pr_debug("Using buffer write method\n");
284                 mtd->_write = cfi_amdstd_write_buffers;
285         }
286 }
287 #endif /* !FORCE_WORD_WRITE */
288
289 /* Atmel chips don't use the same PRI format as AMD chips */
290 static void fixup_convert_atmel_pri(struct mtd_info *mtd)
291 {
292         struct map_info *map = mtd->priv;
293         struct cfi_private *cfi = map->fldrv_priv;
294         struct cfi_pri_amdstd *extp = cfi->cmdset_priv;
295         struct cfi_pri_atmel atmel_pri;
296
297         memcpy(&atmel_pri, extp, sizeof(atmel_pri));
298         memset((char *)extp + 5, 0, sizeof(*extp) - 5);
299
300         if (atmel_pri.Features & 0x02)
301                 extp->EraseSuspend = 2;
302
303         /* Some chips got it backwards... */
304         if (cfi->id == AT49BV6416) {
305                 if (atmel_pri.BottomBoot)
306                         extp->TopBottom = 3;
307                 else
308                         extp->TopBottom = 2;
309         } else {
310                 if (atmel_pri.BottomBoot)
311                         extp->TopBottom = 2;
312                 else
313                         extp->TopBottom = 3;
314         }
315
316         /* burst write mode not supported */
317         cfi->cfiq->BufWriteTimeoutTyp = 0;
318         cfi->cfiq->BufWriteTimeoutMax = 0;
319 }
320
321 static void fixup_use_secsi(struct mtd_info *mtd)
322 {
323         /* Setup for chips with a secsi area */
324         mtd->_read_user_prot_reg = cfi_amdstd_secsi_read;
325         mtd->_read_fact_prot_reg = cfi_amdstd_secsi_read;
326 }
327
328 static void fixup_use_erase_chip(struct mtd_info *mtd)
329 {
330         struct map_info *map = mtd->priv;
331         struct cfi_private *cfi = map->fldrv_priv;
332         if ((cfi->cfiq->NumEraseRegions == 1) &&
333                 ((cfi->cfiq->EraseRegionInfo[0] & 0xffff) == 0)) {
334                 mtd->_erase = cfi_amdstd_erase_chip;
335         }
336
337 }
338
339 /*
340  * Some Atmel chips (e.g. the AT49BV6416) power-up with all sectors
341  * locked by default.
342  */
343 static void fixup_use_atmel_lock(struct mtd_info *mtd)
344 {
345         mtd->_lock = cfi_atmel_lock;
346         mtd->_unlock = cfi_atmel_unlock;
347         mtd->flags |= MTD_POWERUP_LOCK;
348 }
349
350 static void fixup_old_sst_eraseregion(struct mtd_info *mtd)
351 {
352         struct map_info *map = mtd->priv;
353         struct cfi_private *cfi = map->fldrv_priv;
354
355         /*
356          * These flashes report two separate eraseblock regions based on the
357          * sector_erase-size and block_erase-size, although they both operate on the
358          * same memory. This is not allowed according to CFI, so we just pick the
359          * sector_erase-size.
360          */
361         cfi->cfiq->NumEraseRegions = 1;
362 }
363
364 static void fixup_sst39vf(struct mtd_info *mtd)
365 {
366         struct map_info *map = mtd->priv;
367         struct cfi_private *cfi = map->fldrv_priv;
368
369         fixup_old_sst_eraseregion(mtd);
370
371         cfi->addr_unlock1 = 0x5555;
372         cfi->addr_unlock2 = 0x2AAA;
373 }
374
375 static void fixup_sst39vf_rev_b(struct mtd_info *mtd)
376 {
377         struct map_info *map = mtd->priv;
378         struct cfi_private *cfi = map->fldrv_priv;
379
380         fixup_old_sst_eraseregion(mtd);
381
382         cfi->addr_unlock1 = 0x555;
383         cfi->addr_unlock2 = 0x2AA;
384
385         cfi->sector_erase_cmd = CMD(0x50);
386 }
387
388 static void fixup_sst38vf640x_sectorsize(struct mtd_info *mtd)
389 {
390         struct map_info *map = mtd->priv;
391         struct cfi_private *cfi = map->fldrv_priv;
392
393         fixup_sst39vf_rev_b(mtd);
394
395         /*
396          * CFI reports 1024 sectors (0x03ff+1) of 64KBytes (0x0100*256) where
397          * it should report a size of 8KBytes (0x0020*256).
398          */
399         cfi->cfiq->EraseRegionInfo[0] = 0x002003ff;
400         pr_warn("%s: Bad 38VF640x CFI data; adjusting sector size from 64 to 8KiB\n",
401                 mtd->name);
402 }
403
404 static void fixup_s29gl064n_sectors(struct mtd_info *mtd)
405 {
406         struct map_info *map = mtd->priv;
407         struct cfi_private *cfi = map->fldrv_priv;
408
409         if ((cfi->cfiq->EraseRegionInfo[0] & 0xffff) == 0x003f) {
410                 cfi->cfiq->EraseRegionInfo[0] |= 0x0040;
411                 pr_warn("%s: Bad S29GL064N CFI data; adjust from 64 to 128 sectors\n",
412                         mtd->name);
413         }
414 }
415
416 static void fixup_s29gl032n_sectors(struct mtd_info *mtd)
417 {
418         struct map_info *map = mtd->priv;
419         struct cfi_private *cfi = map->fldrv_priv;
420
421         if ((cfi->cfiq->EraseRegionInfo[1] & 0xffff) == 0x007e) {
422                 cfi->cfiq->EraseRegionInfo[1] &= ~0x0040;
423                 pr_warn("%s: Bad S29GL032N CFI data; adjust from 127 to 63 sectors\n",
424                         mtd->name);
425         }
426 }
427
428 static void fixup_s29ns512p_sectors(struct mtd_info *mtd)
429 {
430         struct map_info *map = mtd->priv;
431         struct cfi_private *cfi = map->fldrv_priv;
432
433         /*
434          *  S29NS512P flash uses more than 8bits to report number of sectors,
435          * which is not permitted by CFI.
436          */
437         cfi->cfiq->EraseRegionInfo[0] = 0x020001ff;
438         pr_warn("%s: Bad S29NS512P CFI data; adjust to 512 sectors\n",
439                 mtd->name);
440 }
441
442 static void fixup_quirks(struct mtd_info *mtd)
443 {
444         struct map_info *map = mtd->priv;
445         struct cfi_private *cfi = map->fldrv_priv;
446
447         if (cfi->mfr == CFI_MFR_AMD && cfi->id == S29GL064N_MN12)
448                 cfi->quirks |= CFI_QUIRK_DQ_TRUE_DATA;
449 }
450
451 /* Used to fix CFI-Tables of chips without Extended Query Tables */
452 static struct cfi_fixup cfi_nopri_fixup_table[] = {
453         { CFI_MFR_SST, 0x234a, fixup_sst39vf }, /* SST39VF1602 */
454         { CFI_MFR_SST, 0x234b, fixup_sst39vf }, /* SST39VF1601 */
455         { CFI_MFR_SST, 0x235a, fixup_sst39vf }, /* SST39VF3202 */
456         { CFI_MFR_SST, 0x235b, fixup_sst39vf }, /* SST39VF3201 */
457         { CFI_MFR_SST, 0x235c, fixup_sst39vf_rev_b }, /* SST39VF3202B */
458         { CFI_MFR_SST, 0x235d, fixup_sst39vf_rev_b }, /* SST39VF3201B */
459         { CFI_MFR_SST, 0x236c, fixup_sst39vf_rev_b }, /* SST39VF6402B */
460         { CFI_MFR_SST, 0x236d, fixup_sst39vf_rev_b }, /* SST39VF6401B */
461         { 0, 0, NULL }
462 };
463
464 static struct cfi_fixup cfi_fixup_table[] = {
465         { CFI_MFR_ATMEL, CFI_ID_ANY, fixup_convert_atmel_pri },
466 #ifdef AMD_BOOTLOC_BUG
467         { CFI_MFR_AMD, CFI_ID_ANY, fixup_amd_bootblock },
468         { CFI_MFR_AMIC, CFI_ID_ANY, fixup_amd_bootblock },
469         { CFI_MFR_MACRONIX, CFI_ID_ANY, fixup_amd_bootblock },
470 #endif
471         { CFI_MFR_AMD, 0x0050, fixup_use_secsi },
472         { CFI_MFR_AMD, 0x0053, fixup_use_secsi },
473         { CFI_MFR_AMD, 0x0055, fixup_use_secsi },
474         { CFI_MFR_AMD, 0x0056, fixup_use_secsi },
475         { CFI_MFR_AMD, 0x005C, fixup_use_secsi },
476         { CFI_MFR_AMD, 0x005F, fixup_use_secsi },
477         { CFI_MFR_AMD, S29GL064N_MN12, fixup_s29gl064n_sectors },
478         { CFI_MFR_AMD, 0x1301, fixup_s29gl064n_sectors },
479         { CFI_MFR_AMD, 0x1a00, fixup_s29gl032n_sectors },
480         { CFI_MFR_AMD, 0x1a01, fixup_s29gl032n_sectors },
481         { CFI_MFR_AMD, 0x3f00, fixup_s29ns512p_sectors },
482         { CFI_MFR_SST, 0x536a, fixup_sst38vf640x_sectorsize }, /* SST38VF6402 */
483         { CFI_MFR_SST, 0x536b, fixup_sst38vf640x_sectorsize }, /* SST38VF6401 */
484         { CFI_MFR_SST, 0x536c, fixup_sst38vf640x_sectorsize }, /* SST38VF6404 */
485         { CFI_MFR_SST, 0x536d, fixup_sst38vf640x_sectorsize }, /* SST38VF6403 */
486 #if !FORCE_WORD_WRITE
487         { CFI_MFR_ANY, CFI_ID_ANY, fixup_use_write_buffers },
488 #endif
489         { CFI_MFR_ANY, CFI_ID_ANY, fixup_quirks },
490         { 0, 0, NULL }
491 };
492 static struct cfi_fixup jedec_fixup_table[] = {
493         { CFI_MFR_SST, SST49LF004B, fixup_use_fwh_lock },
494         { CFI_MFR_SST, SST49LF040B, fixup_use_fwh_lock },
495         { CFI_MFR_SST, SST49LF008A, fixup_use_fwh_lock },
496         { 0, 0, NULL }
497 };
498
499 static struct cfi_fixup fixup_table[] = {
500         /* The CFI vendor ids and the JEDEC vendor IDs appear
501          * to be common.  It is like the devices id's are as
502          * well.  This table is to pick all cases where
503          * we know that is the case.
504          */
505         { CFI_MFR_ANY, CFI_ID_ANY, fixup_use_erase_chip },
506         { CFI_MFR_ATMEL, AT49BV6416, fixup_use_atmel_lock },
507         { 0, 0, NULL }
508 };
509
510
511 static void cfi_fixup_major_minor(struct cfi_private *cfi,
512                                   struct cfi_pri_amdstd *extp)
513 {
514         if (cfi->mfr == CFI_MFR_SAMSUNG) {
515                 if ((extp->MajorVersion == '0' && extp->MinorVersion == '0') ||
516                     (extp->MajorVersion == '3' && extp->MinorVersion == '3')) {
517                         /*
518                          * Samsung K8P2815UQB and K8D6x16UxM chips
519                          * report major=0 / minor=0.
520                          * K8D3x16UxC chips report major=3 / minor=3.
521                          */
522                         printk(KERN_NOTICE "  Fixing Samsung's Amd/Fujitsu"
523                                " Extended Query version to 1.%c\n",
524                                extp->MinorVersion);
525                         extp->MajorVersion = '1';
526                 }
527         }
528
529         /*
530          * SST 38VF640x chips report major=0xFF / minor=0xFF.
531          */
532         if (cfi->mfr == CFI_MFR_SST && (cfi->id >> 4) == 0x0536) {
533                 extp->MajorVersion = '1';
534                 extp->MinorVersion = '0';
535         }
536 }
537
538 static int is_m29ew(struct cfi_private *cfi)
539 {
540         if (cfi->mfr == CFI_MFR_INTEL &&
541             ((cfi->device_type == CFI_DEVICETYPE_X8 && (cfi->id & 0xff) == 0x7e) ||
542              (cfi->device_type == CFI_DEVICETYPE_X16 && cfi->id == 0x227e)))
543                 return 1;
544         return 0;
545 }
546
547 /*
548  * From TN-13-07: Patching the Linux Kernel and U-Boot for M29 Flash, page 20:
549  * Some revisions of the M29EW suffer from erase suspend hang ups. In
550  * particular, it can occur when the sequence
551  * Erase Confirm -> Suspend -> Program -> Resume
552  * causes a lockup due to internal timing issues. The consequence is that the
553  * erase cannot be resumed without inserting a dummy command after programming
554  * and prior to resuming. [...] The work-around is to issue a dummy write cycle
555  * that writes an F0 command code before the RESUME command.
556  */
557 static void cfi_fixup_m29ew_erase_suspend(struct map_info *map,
558                                           unsigned long adr)
559 {
560         struct cfi_private *cfi = map->fldrv_priv;
561         /* before resume, insert a dummy 0xF0 cycle for Micron M29EW devices */
562         if (is_m29ew(cfi))
563                 map_write(map, CMD(0xF0), adr);
564 }
565
566 /*
567  * From TN-13-07: Patching the Linux Kernel and U-Boot for M29 Flash, page 22:
568  *
569  * Some revisions of the M29EW (for example, A1 and A2 step revisions)
570  * are affected by a problem that could cause a hang up when an ERASE SUSPEND
571  * command is issued after an ERASE RESUME operation without waiting for a
572  * minimum delay.  The result is that once the ERASE seems to be completed
573  * (no bits are toggling), the contents of the Flash memory block on which
574  * the erase was ongoing could be inconsistent with the expected values
575  * (typically, the array value is stuck to the 0xC0, 0xC4, 0x80, or 0x84
576  * values), causing a consequent failure of the ERASE operation.
577  * The occurrence of this issue could be high, especially when file system
578  * operations on the Flash are intensive.  As a result, it is recommended
579  * that a patch be applied.  Intensive file system operations can cause many
580  * calls to the garbage routine to free Flash space (also by erasing physical
581  * Flash blocks) and as a result, many consecutive SUSPEND and RESUME
582  * commands can occur.  The problem disappears when a delay is inserted after
583  * the RESUME command by using the udelay() function available in Linux.
584  * The DELAY value must be tuned based on the customer's platform.
585  * The maximum value that fixes the problem in all cases is 500us.
586  * But, in our experience, a delay of 30 Âµs to 50 Âµs is sufficient
587  * in most cases.
588  * We have chosen 500µs because this latency is acceptable.
589  */
590 static void cfi_fixup_m29ew_delay_after_resume(struct cfi_private *cfi)
591 {
592         /*
593          * Resolving the Delay After Resume Issue see Micron TN-13-07
594          * Worst case delay must be 500µs but 30-50µs should be ok as well
595          */
596         if (is_m29ew(cfi))
597                 cfi_udelay(500);
598 }
599
600 struct mtd_info *cfi_cmdset_0002(struct map_info *map, int primary)
601 {
602         struct cfi_private *cfi = map->fldrv_priv;
603         struct device_node __maybe_unused *np = map->device_node;
604         struct mtd_info *mtd;
605         int i;
606
607         mtd = kzalloc(sizeof(*mtd), GFP_KERNEL);
608         if (!mtd)
609                 return NULL;
610         mtd->priv = map;
611         mtd->type = MTD_NORFLASH;
612
613         /* Fill in the default mtd operations */
614         mtd->_erase   = cfi_amdstd_erase_varsize;
615         mtd->_write   = cfi_amdstd_write_words;
616         mtd->_read    = cfi_amdstd_read;
617         mtd->_sync    = cfi_amdstd_sync;
618         mtd->_suspend = cfi_amdstd_suspend;
619         mtd->_resume  = cfi_amdstd_resume;
620         mtd->_read_user_prot_reg = cfi_amdstd_read_user_prot_reg;
621         mtd->_read_fact_prot_reg = cfi_amdstd_read_fact_prot_reg;
622         mtd->_get_fact_prot_info = cfi_amdstd_get_fact_prot_info;
623         mtd->_get_user_prot_info = cfi_amdstd_get_user_prot_info;
624         mtd->_write_user_prot_reg = cfi_amdstd_write_user_prot_reg;
625         mtd->_lock_user_prot_reg = cfi_amdstd_lock_user_prot_reg;
626         mtd->flags   = MTD_CAP_NORFLASH;
627         mtd->name    = map->name;
628         mtd->writesize = 1;
629         mtd->writebufsize = cfi_interleave(cfi) << cfi->cfiq->MaxBufWriteSize;
630
631         pr_debug("MTD %s(): write buffer size %d\n", __func__,
632                         mtd->writebufsize);
633
634         mtd->_panic_write = cfi_amdstd_panic_write;
635         mtd->reboot_notifier.notifier_call = cfi_amdstd_reboot;
636
637         if (cfi->cfi_mode==CFI_MODE_CFI){
638                 unsigned char bootloc;
639                 __u16 adr = primary?cfi->cfiq->P_ADR:cfi->cfiq->A_ADR;
640                 struct cfi_pri_amdstd *extp;
641
642                 extp = (struct cfi_pri_amdstd*)cfi_read_pri(map, adr, sizeof(*extp), "Amd/Fujitsu");
643                 if (extp) {
644                         /*
645                          * It's a real CFI chip, not one for which the probe
646                          * routine faked a CFI structure.
647                          */
648                         cfi_fixup_major_minor(cfi, extp);
649
650                         /*
651                          * Valid primary extension versions are: 1.0, 1.1, 1.2, 1.3, 1.4, 1.5
652                          * see: http://cs.ozerki.net/zap/pub/axim-x5/docs/cfi_r20.pdf, page 19
653                          *      http://www.spansion.com/Support/AppNotes/cfi_100_20011201.pdf
654                          *      http://www.spansion.com/Support/Datasheets/s29ws-p_00_a12_e.pdf
655                          *      http://www.spansion.com/Support/Datasheets/S29GL_128S_01GS_00_02_e.pdf
656                          */
657                         if (extp->MajorVersion != '1' ||
658                             (extp->MajorVersion == '1' && (extp->MinorVersion < '0' || extp->MinorVersion > '5'))) {
659                                 printk(KERN_ERR "  Unknown Amd/Fujitsu Extended Query "
660                                        "version %c.%c (%#02x/%#02x).\n",
661                                        extp->MajorVersion, extp->MinorVersion,
662                                        extp->MajorVersion, extp->MinorVersion);
663                                 kfree(extp);
664                                 kfree(mtd);
665                                 return NULL;
666                         }
667
668                         printk(KERN_INFO "  Amd/Fujitsu Extended Query version %c.%c.\n",
669                                extp->MajorVersion, extp->MinorVersion);
670
671                         /* Install our own private info structure */
672                         cfi->cmdset_priv = extp;
673
674                         /* Apply cfi device specific fixups */
675                         cfi_fixup(mtd, cfi_fixup_table);
676
677 #ifdef DEBUG_CFI_FEATURES
678                         /* Tell the user about it in lots of lovely detail */
679                         cfi_tell_features(extp);
680 #endif
681
682 #ifdef CONFIG_OF
683                         if (np && of_property_read_bool(
684                                     np, "use-advanced-sector-protection")
685                             && extp->BlkProtUnprot == 8) {
686                                 printk(KERN_INFO "  Advanced Sector Protection (PPB Locking) supported\n");
687                                 mtd->_lock = cfi_ppb_lock;
688                                 mtd->_unlock = cfi_ppb_unlock;
689                                 mtd->_is_locked = cfi_ppb_is_locked;
690                         }
691 #endif
692
693                         bootloc = extp->TopBottom;
694                         if ((bootloc < 2) || (bootloc > 5)) {
695                                 printk(KERN_WARNING "%s: CFI contains unrecognised boot "
696                                        "bank location (%d). Assuming bottom.\n",
697                                        map->name, bootloc);
698                                 bootloc = 2;
699                         }
700
701                         if (bootloc == 3 && cfi->cfiq->NumEraseRegions > 1) {
702                                 printk(KERN_WARNING "%s: Swapping erase regions for top-boot CFI table.\n", map->name);
703
704                                 for (i=0; i<cfi->cfiq->NumEraseRegions / 2; i++) {
705                                         int j = (cfi->cfiq->NumEraseRegions-1)-i;
706
707                                         swap(cfi->cfiq->EraseRegionInfo[i],
708                                              cfi->cfiq->EraseRegionInfo[j]);
709                                 }
710                         }
711                         /* Set the default CFI lock/unlock addresses */
712                         cfi->addr_unlock1 = 0x555;
713                         cfi->addr_unlock2 = 0x2aa;
714                 }
715                 cfi_fixup(mtd, cfi_nopri_fixup_table);
716
717                 if (!cfi->addr_unlock1 || !cfi->addr_unlock2) {
718                         kfree(mtd);
719                         return NULL;
720                 }
721
722         } /* CFI mode */
723         else if (cfi->cfi_mode == CFI_MODE_JEDEC) {
724                 /* Apply jedec specific fixups */
725                 cfi_fixup(mtd, jedec_fixup_table);
726         }
727         /* Apply generic fixups */
728         cfi_fixup(mtd, fixup_table);
729
730         for (i=0; i< cfi->numchips; i++) {
731                 cfi->chips[i].word_write_time = 1<<cfi->cfiq->WordWriteTimeoutTyp;
732                 cfi->chips[i].buffer_write_time = 1<<cfi->cfiq->BufWriteTimeoutTyp;
733                 cfi->chips[i].erase_time = 1<<cfi->cfiq->BlockEraseTimeoutTyp;
734                 /*
735                  * First calculate the timeout max according to timeout field
736                  * of struct cfi_ident that probed from chip's CFI aera, if
737                  * available. Specify a minimum of 2000us, in case the CFI data
738                  * is wrong.
739                  */
740                 if (cfi->cfiq->BufWriteTimeoutTyp &&
741                     cfi->cfiq->BufWriteTimeoutMax)
742                         cfi->chips[i].buffer_write_time_max =
743                                 1 << (cfi->cfiq->BufWriteTimeoutTyp +
744                                       cfi->cfiq->BufWriteTimeoutMax);
745                 else
746                         cfi->chips[i].buffer_write_time_max = 0;
747
748                 cfi->chips[i].buffer_write_time_max =
749                         max(cfi->chips[i].buffer_write_time_max, 2000);
750
751                 cfi->chips[i].ref_point_counter = 0;
752                 init_waitqueue_head(&(cfi->chips[i].wq));
753         }
754
755         map->fldrv = &cfi_amdstd_chipdrv;
756
757         return cfi_amdstd_setup(mtd);
758 }
759 struct mtd_info *cfi_cmdset_0006(struct map_info *map, int primary) __attribute__((alias("cfi_cmdset_0002")));
760 struct mtd_info *cfi_cmdset_0701(struct map_info *map, int primary) __attribute__((alias("cfi_cmdset_0002")));
761 EXPORT_SYMBOL_GPL(cfi_cmdset_0002);
762 EXPORT_SYMBOL_GPL(cfi_cmdset_0006);
763 EXPORT_SYMBOL_GPL(cfi_cmdset_0701);
764
765 static struct mtd_info *cfi_amdstd_setup(struct mtd_info *mtd)
766 {
767         struct map_info *map = mtd->priv;
768         struct cfi_private *cfi = map->fldrv_priv;
769         unsigned long devsize = (1<<cfi->cfiq->DevSize) * cfi->interleave;
770         unsigned long offset = 0;
771         int i,j;
772
773         printk(KERN_NOTICE "number of %s chips: %d\n",
774                (cfi->cfi_mode == CFI_MODE_CFI)?"CFI":"JEDEC",cfi->numchips);
775         /* Select the correct geometry setup */
776         mtd->size = devsize * cfi->numchips;
777
778         mtd->numeraseregions = cfi->cfiq->NumEraseRegions * cfi->numchips;
779         mtd->eraseregions = kmalloc_array(mtd->numeraseregions,
780                                           sizeof(struct mtd_erase_region_info),
781                                           GFP_KERNEL);
782         if (!mtd->eraseregions)
783                 goto setup_err;
784
785         for (i=0; i<cfi->cfiq->NumEraseRegions; i++) {
786                 unsigned long ernum, ersize;
787                 ersize = ((cfi->cfiq->EraseRegionInfo[i] >> 8) & ~0xff) * cfi->interleave;
788                 ernum = (cfi->cfiq->EraseRegionInfo[i] & 0xffff) + 1;
789
790                 if (mtd->erasesize < ersize) {
791                         mtd->erasesize = ersize;
792                 }
793                 for (j=0; j<cfi->numchips; j++) {
794                         mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].offset = (j*devsize)+offset;
795                         mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].erasesize = ersize;
796                         mtd->eraseregions[(j*cfi->cfiq->NumEraseRegions)+i].numblocks = ernum;
797                 }
798                 offset += (ersize * ernum);
799         }
800         if (offset != devsize) {
801                 /* Argh */
802                 printk(KERN_WARNING "Sum of regions (%lx) != total size of set of interleaved chips (%lx)\n", offset, devsize);
803                 goto setup_err;
804         }
805
806         __module_get(THIS_MODULE);
807         register_reboot_notifier(&mtd->reboot_notifier);
808         return mtd;
809
810  setup_err:
811         kfree(mtd->eraseregions);
812         kfree(mtd);
813         kfree(cfi->cmdset_priv);
814         return NULL;
815 }
816
817 /*
818  * Return true if the chip is ready and has the correct value.
819  *
820  * Ready is one of: read mode, query mode, erase-suspend-read mode (in any
821  * non-suspended sector) and is indicated by no toggle bits toggling.
822  *
823  * Error are indicated by toggling bits or bits held with the wrong value,
824  * or with bits toggling.
825  *
826  * Note that anything more complicated than checking if no bits are toggling
827  * (including checking DQ5 for an error status) is tricky to get working
828  * correctly and is therefore not done  (particularly with interleaved chips
829  * as each chip must be checked independently of the others).
830  */
831 static int __xipram chip_ready(struct map_info *map, struct flchip *chip,
832                                unsigned long addr, map_word *expected)
833 {
834         struct cfi_private *cfi = map->fldrv_priv;
835         map_word oldd, curd;
836         int ret;
837
838         if (cfi_use_status_reg(cfi)) {
839                 map_word ready = CMD(CFI_SR_DRB);
840                 /*
841                  * For chips that support status register, check device
842                  * ready bit
843                  */
844                 cfi_send_gen_cmd(0x70, cfi->addr_unlock1, chip->start, map, cfi,
845                                  cfi->device_type, NULL);
846                 curd = map_read(map, addr);
847
848                 return map_word_andequal(map, curd, ready, ready);
849         }
850
851         oldd = map_read(map, addr);
852         curd = map_read(map, addr);
853
854         ret = map_word_equal(map, oldd, curd);
855
856         if (!ret || !expected)
857                 return ret;
858
859         return map_word_equal(map, curd, *expected);
860 }
861
862 static int __xipram chip_good(struct map_info *map, struct flchip *chip,
863                               unsigned long addr, map_word *expected)
864 {
865         struct cfi_private *cfi = map->fldrv_priv;
866         map_word *datum = expected;
867
868         if (cfi->quirks & CFI_QUIRK_DQ_TRUE_DATA)
869                 datum = NULL;
870
871         return chip_ready(map, chip, addr, datum);
872 }
873
874 static int get_chip(struct map_info *map, struct flchip *chip, unsigned long adr, int mode)
875 {
876         DECLARE_WAITQUEUE(wait, current);
877         struct cfi_private *cfi = map->fldrv_priv;
878         unsigned long timeo;
879         struct cfi_pri_amdstd *cfip = (struct cfi_pri_amdstd *)cfi->cmdset_priv;
880
881  resettime:
882         timeo = jiffies + HZ;
883  retry:
884         switch (chip->state) {
885
886         case FL_STATUS:
887                 for (;;) {
888                         if (chip_ready(map, chip, adr, NULL))
889                                 break;
890
891                         if (time_after(jiffies, timeo)) {
892                                 printk(KERN_ERR "Waiting for chip to be ready timed out.\n");
893                                 return -EIO;
894                         }
895                         mutex_unlock(&chip->mutex);
896                         cfi_udelay(1);
897                         mutex_lock(&chip->mutex);
898                         /* Someone else might have been playing with it. */
899                         goto retry;
900                 }
901                 return 0;
902
903         case FL_READY:
904         case FL_CFI_QUERY:
905         case FL_JEDEC_QUERY:
906                 return 0;
907
908         case FL_ERASING:
909                 if (!cfip || !(cfip->EraseSuspend & (0x1|0x2)) ||
910                     !(mode == FL_READY || mode == FL_POINT ||
911                     (mode == FL_WRITING && (cfip->EraseSuspend & 0x2))))
912                         goto sleep;
913
914                 /* Do not allow suspend iff read/write to EB address */
915                 if ((adr & chip->in_progress_block_mask) ==
916                     chip->in_progress_block_addr)
917                         goto sleep;
918
919                 /* Erase suspend */
920                 /* It's harmless to issue the Erase-Suspend and Erase-Resume
921                  * commands when the erase algorithm isn't in progress. */
922                 map_write(map, CMD(0xB0), chip->in_progress_block_addr);
923                 chip->oldstate = FL_ERASING;
924                 chip->state = FL_ERASE_SUSPENDING;
925                 chip->erase_suspended = 1;
926                 for (;;) {
927                         if (chip_ready(map, chip, adr, NULL))
928                                 break;
929
930                         if (time_after(jiffies, timeo)) {
931                                 /* Should have suspended the erase by now.
932                                  * Send an Erase-Resume command as either
933                                  * there was an error (so leave the erase
934                                  * routine to recover from it) or we trying to
935                                  * use the erase-in-progress sector. */
936                                 put_chip(map, chip, adr);
937                                 printk(KERN_ERR "MTD %s(): chip not ready after erase suspend\n", __func__);
938                                 return -EIO;
939                         }
940
941                         mutex_unlock(&chip->mutex);
942                         cfi_udelay(1);
943                         mutex_lock(&chip->mutex);
944                         /* Nobody will touch it while it's in state FL_ERASE_SUSPENDING.
945                            So we can just loop here. */
946                 }
947                 chip->state = FL_READY;
948                 return 0;
949
950         case FL_XIP_WHILE_ERASING:
951                 if (mode != FL_READY && mode != FL_POINT &&
952                     (!cfip || !(cfip->EraseSuspend&2)))
953                         goto sleep;
954                 chip->oldstate = chip->state;
955                 chip->state = FL_READY;
956                 return 0;
957
958         case FL_SHUTDOWN:
959                 /* The machine is rebooting */
960                 return -EIO;
961
962         case FL_POINT:
963                 /* Only if there's no operation suspended... */
964                 if (mode == FL_READY && chip->oldstate == FL_READY)
965                         return 0;
966                 fallthrough;
967         default:
968         sleep:
969                 set_current_state(TASK_UNINTERRUPTIBLE);
970                 add_wait_queue(&chip->wq, &wait);
971                 mutex_unlock(&chip->mutex);
972                 schedule();
973                 remove_wait_queue(&chip->wq, &wait);
974                 mutex_lock(&chip->mutex);
975                 goto resettime;
976         }
977 }
978
979
980 static void put_chip(struct map_info *map, struct flchip *chip, unsigned long adr)
981 {
982         struct cfi_private *cfi = map->fldrv_priv;
983
984         switch(chip->oldstate) {
985         case FL_ERASING:
986                 cfi_fixup_m29ew_erase_suspend(map,
987                         chip->in_progress_block_addr);
988                 map_write(map, cfi->sector_erase_cmd, chip->in_progress_block_addr);
989                 cfi_fixup_m29ew_delay_after_resume(cfi);
990                 chip->oldstate = FL_READY;
991                 chip->state = FL_ERASING;
992                 break;
993
994         case FL_XIP_WHILE_ERASING:
995                 chip->state = chip->oldstate;
996                 chip->oldstate = FL_READY;
997                 break;
998
999         case FL_READY:
1000         case FL_STATUS:
1001                 break;
1002         default:
1003                 printk(KERN_ERR "MTD: put_chip() called with oldstate %d!!\n", chip->oldstate);
1004         }
1005         wake_up(&chip->wq);
1006 }
1007
1008 #ifdef CONFIG_MTD_XIP
1009
1010 /*
1011  * No interrupt what so ever can be serviced while the flash isn't in array
1012  * mode.  This is ensured by the xip_disable() and xip_enable() functions
1013  * enclosing any code path where the flash is known not to be in array mode.
1014  * And within a XIP disabled code path, only functions marked with __xipram
1015  * may be called and nothing else (it's a good thing to inspect generated
1016  * assembly to make sure inline functions were actually inlined and that gcc
1017  * didn't emit calls to its own support functions). Also configuring MTD CFI
1018  * support to a single buswidth and a single interleave is also recommended.
1019  */
1020
1021 static void xip_disable(struct map_info *map, struct flchip *chip,
1022                         unsigned long adr)
1023 {
1024         /* TODO: chips with no XIP use should ignore and return */
1025         (void) map_read(map, adr); /* ensure mmu mapping is up to date */
1026         local_irq_disable();
1027 }
1028
1029 static void __xipram xip_enable(struct map_info *map, struct flchip *chip,
1030                                 unsigned long adr)
1031 {
1032         struct cfi_private *cfi = map->fldrv_priv;
1033
1034         if (chip->state != FL_POINT && chip->state != FL_READY) {
1035                 map_write(map, CMD(0xf0), adr);
1036                 chip->state = FL_READY;
1037         }
1038         (void) map_read(map, adr);
1039         xip_iprefetch();
1040         local_irq_enable();
1041 }
1042
1043 /*
1044  * When a delay is required for the flash operation to complete, the
1045  * xip_udelay() function is polling for both the given timeout and pending
1046  * (but still masked) hardware interrupts.  Whenever there is an interrupt
1047  * pending then the flash erase operation is suspended, array mode restored
1048  * and interrupts unmasked.  Task scheduling might also happen at that
1049  * point.  The CPU eventually returns from the interrupt or the call to
1050  * schedule() and the suspended flash operation is resumed for the remaining
1051  * of the delay period.
1052  *
1053  * Warning: this function _will_ fool interrupt latency tracing tools.
1054  */
1055
1056 static void __xipram xip_udelay(struct map_info *map, struct flchip *chip,
1057                                 unsigned long adr, int usec)
1058 {
1059         struct cfi_private *cfi = map->fldrv_priv;
1060         struct cfi_pri_amdstd *extp = cfi->cmdset_priv;
1061         map_word status, OK = CMD(0x80);
1062         unsigned long suspended, start = xip_currtime();
1063         flstate_t oldstate;
1064
1065         do {
1066                 cpu_relax();
1067                 if (xip_irqpending() && extp &&
1068                     ((chip->state == FL_ERASING && (extp->EraseSuspend & 2))) &&
1069                     (cfi_interleave_is_1(cfi) || chip->oldstate == FL_READY)) {
1070                         /*
1071                          * Let's suspend the erase operation when supported.
1072                          * Note that we currently don't try to suspend
1073                          * interleaved chips if there is already another
1074                          * operation suspended (imagine what happens
1075                          * when one chip was already done with the current
1076                          * operation while another chip suspended it, then
1077                          * we resume the whole thing at once).  Yes, it
1078                          * can happen!
1079                          */
1080                         map_write(map, CMD(0xb0), adr);
1081                         usec -= xip_elapsed_since(start);
1082                         suspended = xip_currtime();
1083                         do {
1084                                 if (xip_elapsed_since(suspended) > 100000) {
1085                                         /*
1086                                          * The chip doesn't want to suspend
1087                                          * after waiting for 100 msecs.
1088                                          * This is a critical error but there
1089                                          * is not much we can do here.
1090                                          */
1091                                         return;
1092                                 }
1093                                 status = map_read(map, adr);
1094                         } while (!map_word_andequal(map, status, OK, OK));
1095
1096                         /* Suspend succeeded */
1097                         oldstate = chip->state;
1098                         if (!map_word_bitsset(map, status, CMD(0x40)))
1099                                 break;
1100                         chip->state = FL_XIP_WHILE_ERASING;
1101                         chip->erase_suspended = 1;
1102                         map_write(map, CMD(0xf0), adr);
1103                         (void) map_read(map, adr);
1104                         xip_iprefetch();
1105                         local_irq_enable();
1106                         mutex_unlock(&chip->mutex);
1107                         xip_iprefetch();
1108                         cond_resched();
1109
1110                         /*
1111                          * We're back.  However someone else might have
1112                          * decided to go write to the chip if we are in
1113                          * a suspended erase state.  If so let's wait
1114                          * until it's done.
1115                          */
1116                         mutex_lock(&chip->mutex);
1117                         while (chip->state != FL_XIP_WHILE_ERASING) {
1118                                 DECLARE_WAITQUEUE(wait, current);
1119                                 set_current_state(TASK_UNINTERRUPTIBLE);
1120                                 add_wait_queue(&chip->wq, &wait);
1121                                 mutex_unlock(&chip->mutex);
1122                                 schedule();
1123                                 remove_wait_queue(&chip->wq, &wait);
1124                                 mutex_lock(&chip->mutex);
1125                         }
1126                         /* Disallow XIP again */
1127                         local_irq_disable();
1128
1129                         /* Correct Erase Suspend Hangups for M29EW */
1130                         cfi_fixup_m29ew_erase_suspend(map, adr);
1131                         /* Resume the write or erase operation */
1132                         map_write(map, cfi->sector_erase_cmd, adr);
1133                         chip->state = oldstate;
1134                         start = xip_currtime();
1135                 } else if (usec >= 1000000/HZ) {
1136                         /*
1137                          * Try to save on CPU power when waiting delay
1138                          * is at least a system timer tick period.
1139                          * No need to be extremely accurate here.
1140                          */
1141                         xip_cpu_idle();
1142                 }
1143                 status = map_read(map, adr);
1144         } while (!map_word_andequal(map, status, OK, OK)
1145                  && xip_elapsed_since(start) < usec);
1146 }
1147
1148 #define UDELAY(map, chip, adr, usec)  xip_udelay(map, chip, adr, usec)
1149
1150 /*
1151  * The INVALIDATE_CACHED_RANGE() macro is normally used in parallel while
1152  * the flash is actively programming or erasing since we have to poll for
1153  * the operation to complete anyway.  We can't do that in a generic way with
1154  * a XIP setup so do it before the actual flash operation in this case
1155  * and stub it out from INVALIDATE_CACHE_UDELAY.
1156  */
1157 #define XIP_INVAL_CACHED_RANGE(map, from, size)  \
1158         INVALIDATE_CACHED_RANGE(map, from, size)
1159
1160 #define INVALIDATE_CACHE_UDELAY(map, chip, adr, len, usec)  \
1161         UDELAY(map, chip, adr, usec)
1162
1163 /*
1164  * Extra notes:
1165  *
1166  * Activating this XIP support changes the way the code works a bit.  For
1167  * example the code to suspend the current process when concurrent access
1168  * happens is never executed because xip_udelay() will always return with the
1169  * same chip state as it was entered with.  This is why there is no care for
1170  * the presence of add_wait_queue() or schedule() calls from within a couple
1171  * xip_disable()'d  areas of code, like in do_erase_oneblock for example.
1172  * The queueing and scheduling are always happening within xip_udelay().
1173  *
1174  * Similarly, get_chip() and put_chip() just happen to always be executed
1175  * with chip->state set to FL_READY (or FL_XIP_WHILE_*) where flash state
1176  * is in array mode, therefore never executing many cases therein and not
1177  * causing any problem with XIP.
1178  */
1179
1180 #else
1181
1182 #define xip_disable(map, chip, adr)
1183 #define xip_enable(map, chip, adr)
1184 #define XIP_INVAL_CACHED_RANGE(x...)
1185
1186 #define UDELAY(map, chip, adr, usec)  \
1187 do {  \
1188         mutex_unlock(&chip->mutex);  \
1189         cfi_udelay(usec);  \
1190         mutex_lock(&chip->mutex);  \
1191 } while (0)
1192
1193 #define INVALIDATE_CACHE_UDELAY(map, chip, adr, len, usec)  \
1194 do {  \
1195         mutex_unlock(&chip->mutex);  \
1196         INVALIDATE_CACHED_RANGE(map, adr, len);  \
1197         cfi_udelay(usec);  \
1198         mutex_lock(&chip->mutex);  \
1199 } while (0)
1200
1201 #endif
1202
1203 static inline int do_read_onechip(struct map_info *map, struct flchip *chip, loff_t adr, size_t len, u_char *buf)
1204 {
1205         unsigned long cmd_addr;
1206         struct cfi_private *cfi = map->fldrv_priv;
1207         int ret;
1208
1209         adr += chip->start;
1210
1211         /* Ensure cmd read/writes are aligned. */
1212         cmd_addr = adr & ~(map_bankwidth(map)-1);
1213
1214         mutex_lock(&chip->mutex);
1215         ret = get_chip(map, chip, cmd_addr, FL_READY);
1216         if (ret) {
1217                 mutex_unlock(&chip->mutex);
1218                 return ret;
1219         }
1220
1221         if (chip->state != FL_POINT && chip->state != FL_READY) {
1222                 map_write(map, CMD(0xf0), cmd_addr);
1223                 chip->state = FL_READY;
1224         }
1225
1226         map_copy_from(map, buf, adr, len);
1227
1228         put_chip(map, chip, cmd_addr);
1229
1230         mutex_unlock(&chip->mutex);
1231         return 0;
1232 }
1233
1234
1235 static int cfi_amdstd_read (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf)
1236 {
1237         struct map_info *map = mtd->priv;
1238         struct cfi_private *cfi = map->fldrv_priv;
1239         unsigned long ofs;
1240         int chipnum;
1241         int ret = 0;
1242
1243         /* ofs: offset within the first chip that the first read should start */
1244         chipnum = (from >> cfi->chipshift);
1245         ofs = from - (chipnum <<  cfi->chipshift);
1246
1247         while (len) {
1248                 unsigned long thislen;
1249
1250                 if (chipnum >= cfi->numchips)
1251                         break;
1252
1253                 if ((len + ofs -1) >> cfi->chipshift)
1254                         thislen = (1<<cfi->chipshift) - ofs;
1255                 else
1256                         thislen = len;
1257
1258                 ret = do_read_onechip(map, &cfi->chips[chipnum], ofs, thislen, buf);
1259                 if (ret)
1260                         break;
1261
1262                 *retlen += thislen;
1263                 len -= thislen;
1264                 buf += thislen;
1265
1266                 ofs = 0;
1267                 chipnum++;
1268         }
1269         return ret;
1270 }
1271
1272 typedef int (*otp_op_t)(struct map_info *map, struct flchip *chip,
1273                         loff_t adr, size_t len, u_char *buf, size_t grouplen);
1274
1275 static inline void otp_enter(struct map_info *map, struct flchip *chip,
1276                              loff_t adr, size_t len)
1277 {
1278         struct cfi_private *cfi = map->fldrv_priv;
1279
1280         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi,
1281                          cfi->device_type, NULL);
1282         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi,
1283                          cfi->device_type, NULL);
1284         cfi_send_gen_cmd(0x88, cfi->addr_unlock1, chip->start, map, cfi,
1285                          cfi->device_type, NULL);
1286
1287         INVALIDATE_CACHED_RANGE(map, chip->start + adr, len);
1288 }
1289
1290 static inline void otp_exit(struct map_info *map, struct flchip *chip,
1291                             loff_t adr, size_t len)
1292 {
1293         struct cfi_private *cfi = map->fldrv_priv;
1294
1295         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi,
1296                          cfi->device_type, NULL);
1297         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi,
1298                          cfi->device_type, NULL);
1299         cfi_send_gen_cmd(0x90, cfi->addr_unlock1, chip->start, map, cfi,
1300                          cfi->device_type, NULL);
1301         cfi_send_gen_cmd(0x00, cfi->addr_unlock1, chip->start, map, cfi,
1302                          cfi->device_type, NULL);
1303
1304         INVALIDATE_CACHED_RANGE(map, chip->start + adr, len);
1305 }
1306
1307 static inline int do_read_secsi_onechip(struct map_info *map,
1308                                         struct flchip *chip, loff_t adr,
1309                                         size_t len, u_char *buf,
1310                                         size_t grouplen)
1311 {
1312         DECLARE_WAITQUEUE(wait, current);
1313
1314  retry:
1315         mutex_lock(&chip->mutex);
1316
1317         if (chip->state != FL_READY){
1318                 set_current_state(TASK_UNINTERRUPTIBLE);
1319                 add_wait_queue(&chip->wq, &wait);
1320
1321                 mutex_unlock(&chip->mutex);
1322
1323                 schedule();
1324                 remove_wait_queue(&chip->wq, &wait);
1325
1326                 goto retry;
1327         }
1328
1329         adr += chip->start;
1330
1331         chip->state = FL_READY;
1332
1333         otp_enter(map, chip, adr, len);
1334         map_copy_from(map, buf, adr, len);
1335         otp_exit(map, chip, adr, len);
1336
1337         wake_up(&chip->wq);
1338         mutex_unlock(&chip->mutex);
1339
1340         return 0;
1341 }
1342
1343 static int cfi_amdstd_secsi_read (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf)
1344 {
1345         struct map_info *map = mtd->priv;
1346         struct cfi_private *cfi = map->fldrv_priv;
1347         unsigned long ofs;
1348         int chipnum;
1349         int ret = 0;
1350
1351         /* ofs: offset within the first chip that the first read should start */
1352         /* 8 secsi bytes per chip */
1353         chipnum=from>>3;
1354         ofs=from & 7;
1355
1356         while (len) {
1357                 unsigned long thislen;
1358
1359                 if (chipnum >= cfi->numchips)
1360                         break;
1361
1362                 if ((len + ofs -1) >> 3)
1363                         thislen = (1<<3) - ofs;
1364                 else
1365                         thislen = len;
1366
1367                 ret = do_read_secsi_onechip(map, &cfi->chips[chipnum], ofs,
1368                                             thislen, buf, 0);
1369                 if (ret)
1370                         break;
1371
1372                 *retlen += thislen;
1373                 len -= thislen;
1374                 buf += thislen;
1375
1376                 ofs = 0;
1377                 chipnum++;
1378         }
1379         return ret;
1380 }
1381
1382 static int __xipram do_write_oneword(struct map_info *map, struct flchip *chip,
1383                                      unsigned long adr, map_word datum,
1384                                      int mode);
1385
1386 static int do_otp_write(struct map_info *map, struct flchip *chip, loff_t adr,
1387                         size_t len, u_char *buf, size_t grouplen)
1388 {
1389         int ret;
1390         while (len) {
1391                 unsigned long bus_ofs = adr & ~(map_bankwidth(map)-1);
1392                 int gap = adr - bus_ofs;
1393                 int n = min_t(int, len, map_bankwidth(map) - gap);
1394                 map_word datum = map_word_ff(map);
1395
1396                 if (n != map_bankwidth(map)) {
1397                         /* partial write of a word, load old contents */
1398                         otp_enter(map, chip, bus_ofs, map_bankwidth(map));
1399                         datum = map_read(map, bus_ofs);
1400                         otp_exit(map, chip, bus_ofs, map_bankwidth(map));
1401                 }
1402
1403                 datum = map_word_load_partial(map, datum, buf, gap, n);
1404                 ret = do_write_oneword(map, chip, bus_ofs, datum, FL_OTP_WRITE);
1405                 if (ret)
1406                         return ret;
1407
1408                 adr += n;
1409                 buf += n;
1410                 len -= n;
1411         }
1412
1413         return 0;
1414 }
1415
1416 static int do_otp_lock(struct map_info *map, struct flchip *chip, loff_t adr,
1417                        size_t len, u_char *buf, size_t grouplen)
1418 {
1419         struct cfi_private *cfi = map->fldrv_priv;
1420         uint8_t lockreg;
1421         unsigned long timeo;
1422         int ret;
1423
1424         /* make sure area matches group boundaries */
1425         if ((adr != 0) || (len != grouplen))
1426                 return -EINVAL;
1427
1428         mutex_lock(&chip->mutex);
1429         ret = get_chip(map, chip, chip->start, FL_LOCKING);
1430         if (ret) {
1431                 mutex_unlock(&chip->mutex);
1432                 return ret;
1433         }
1434         chip->state = FL_LOCKING;
1435
1436         /* Enter lock register command */
1437         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi,
1438                          cfi->device_type, NULL);
1439         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi,
1440                          cfi->device_type, NULL);
1441         cfi_send_gen_cmd(0x40, cfi->addr_unlock1, chip->start, map, cfi,
1442                          cfi->device_type, NULL);
1443
1444         /* read lock register */
1445         lockreg = cfi_read_query(map, 0);
1446
1447         /* set bit 0 to protect extended memory block */
1448         lockreg &= ~0x01;
1449
1450         /* set bit 0 to protect extended memory block */
1451         /* write lock register */
1452         map_write(map, CMD(0xA0), chip->start);
1453         map_write(map, CMD(lockreg), chip->start);
1454
1455         /* wait for chip to become ready */
1456         timeo = jiffies + msecs_to_jiffies(2);
1457         for (;;) {
1458                 if (chip_ready(map, chip, adr, NULL))
1459                         break;
1460
1461                 if (time_after(jiffies, timeo)) {
1462                         pr_err("Waiting for chip to be ready timed out.\n");
1463                         ret = -EIO;
1464                         break;
1465                 }
1466                 UDELAY(map, chip, 0, 1);
1467         }
1468
1469         /* exit protection commands */
1470         map_write(map, CMD(0x90), chip->start);
1471         map_write(map, CMD(0x00), chip->start);
1472
1473         chip->state = FL_READY;
1474         put_chip(map, chip, chip->start);
1475         mutex_unlock(&chip->mutex);
1476
1477         return ret;
1478 }
1479
1480 static int cfi_amdstd_otp_walk(struct mtd_info *mtd, loff_t from, size_t len,
1481                                size_t *retlen, u_char *buf,
1482                                otp_op_t action, int user_regs)
1483 {
1484         struct map_info *map = mtd->priv;
1485         struct cfi_private *cfi = map->fldrv_priv;
1486         int ofs_factor = cfi->interleave * cfi->device_type;
1487         unsigned long base;
1488         int chipnum;
1489         struct flchip *chip;
1490         uint8_t otp, lockreg;
1491         int ret;
1492
1493         size_t user_size, factory_size, otpsize;
1494         loff_t user_offset, factory_offset, otpoffset;
1495         int user_locked = 0, otplocked;
1496
1497         *retlen = 0;
1498
1499         for (chipnum = 0; chipnum < cfi->numchips; chipnum++) {
1500                 chip = &cfi->chips[chipnum];
1501                 factory_size = 0;
1502                 user_size = 0;
1503
1504                 /* Micron M29EW family */
1505                 if (is_m29ew(cfi)) {
1506                         base = chip->start;
1507
1508                         /* check whether secsi area is factory locked
1509                            or user lockable */
1510                         mutex_lock(&chip->mutex);
1511                         ret = get_chip(map, chip, base, FL_CFI_QUERY);
1512                         if (ret) {
1513                                 mutex_unlock(&chip->mutex);
1514                                 return ret;
1515                         }
1516                         cfi_qry_mode_on(base, map, cfi);
1517                         otp = cfi_read_query(map, base + 0x3 * ofs_factor);
1518                         cfi_qry_mode_off(base, map, cfi);
1519                         put_chip(map, chip, base);
1520                         mutex_unlock(&chip->mutex);
1521
1522                         if (otp & 0x80) {
1523                                 /* factory locked */
1524                                 factory_offset = 0;
1525                                 factory_size = 0x100;
1526                         } else {
1527                                 /* customer lockable */
1528                                 user_offset = 0;
1529                                 user_size = 0x100;
1530
1531                                 mutex_lock(&chip->mutex);
1532                                 ret = get_chip(map, chip, base, FL_LOCKING);
1533                                 if (ret) {
1534                                         mutex_unlock(&chip->mutex);
1535                                         return ret;
1536                                 }
1537
1538                                 /* Enter lock register command */
1539                                 cfi_send_gen_cmd(0xAA, cfi->addr_unlock1,
1540                                                  chip->start, map, cfi,
1541                                                  cfi->device_type, NULL);
1542                                 cfi_send_gen_cmd(0x55, cfi->addr_unlock2,
1543                                                  chip->start, map, cfi,
1544                                                  cfi->device_type, NULL);
1545                                 cfi_send_gen_cmd(0x40, cfi->addr_unlock1,
1546                                                  chip->start, map, cfi,
1547                                                  cfi->device_type, NULL);
1548                                 /* read lock register */
1549                                 lockreg = cfi_read_query(map, 0);
1550                                 /* exit protection commands */
1551                                 map_write(map, CMD(0x90), chip->start);
1552                                 map_write(map, CMD(0x00), chip->start);
1553                                 put_chip(map, chip, chip->start);
1554                                 mutex_unlock(&chip->mutex);
1555
1556                                 user_locked = ((lockreg & 0x01) == 0x00);
1557                         }
1558                 }
1559
1560                 otpsize = user_regs ? user_size : factory_size;
1561                 if (!otpsize)
1562                         continue;
1563                 otpoffset = user_regs ? user_offset : factory_offset;
1564                 otplocked = user_regs ? user_locked : 1;
1565
1566                 if (!action) {
1567                         /* return otpinfo */
1568                         struct otp_info *otpinfo;
1569                         len -= sizeof(*otpinfo);
1570                         if (len <= 0)
1571                                 return -ENOSPC;
1572                         otpinfo = (struct otp_info *)buf;
1573                         otpinfo->start = from;
1574                         otpinfo->length = otpsize;
1575                         otpinfo->locked = otplocked;
1576                         buf += sizeof(*otpinfo);
1577                         *retlen += sizeof(*otpinfo);
1578                         from += otpsize;
1579                 } else if ((from < otpsize) && (len > 0)) {
1580                         size_t size;
1581                         size = (len < otpsize - from) ? len : otpsize - from;
1582                         ret = action(map, chip, otpoffset + from, size, buf,
1583                                      otpsize);
1584                         if (ret < 0)
1585                                 return ret;
1586
1587                         buf += size;
1588                         len -= size;
1589                         *retlen += size;
1590                         from = 0;
1591                 } else {
1592                         from -= otpsize;
1593                 }
1594         }
1595         return 0;
1596 }
1597
1598 static int cfi_amdstd_get_fact_prot_info(struct mtd_info *mtd, size_t len,
1599                                          size_t *retlen, struct otp_info *buf)
1600 {
1601         return cfi_amdstd_otp_walk(mtd, 0, len, retlen, (u_char *)buf,
1602                                    NULL, 0);
1603 }
1604
1605 static int cfi_amdstd_get_user_prot_info(struct mtd_info *mtd, size_t len,
1606                                          size_t *retlen, struct otp_info *buf)
1607 {
1608         return cfi_amdstd_otp_walk(mtd, 0, len, retlen, (u_char *)buf,
1609                                    NULL, 1);
1610 }
1611
1612 static int cfi_amdstd_read_fact_prot_reg(struct mtd_info *mtd, loff_t from,
1613                                          size_t len, size_t *retlen,
1614                                          u_char *buf)
1615 {
1616         return cfi_amdstd_otp_walk(mtd, from, len, retlen,
1617                                    buf, do_read_secsi_onechip, 0);
1618 }
1619
1620 static int cfi_amdstd_read_user_prot_reg(struct mtd_info *mtd, loff_t from,
1621                                          size_t len, size_t *retlen,
1622                                          u_char *buf)
1623 {
1624         return cfi_amdstd_otp_walk(mtd, from, len, retlen,
1625                                    buf, do_read_secsi_onechip, 1);
1626 }
1627
1628 static int cfi_amdstd_write_user_prot_reg(struct mtd_info *mtd, loff_t from,
1629                                           size_t len, size_t *retlen,
1630                                           const u_char *buf)
1631 {
1632         return cfi_amdstd_otp_walk(mtd, from, len, retlen, (u_char *)buf,
1633                                    do_otp_write, 1);
1634 }
1635
1636 static int cfi_amdstd_lock_user_prot_reg(struct mtd_info *mtd, loff_t from,
1637                                          size_t len)
1638 {
1639         size_t retlen;
1640         return cfi_amdstd_otp_walk(mtd, from, len, &retlen, NULL,
1641                                    do_otp_lock, 1);
1642 }
1643
1644 static int __xipram do_write_oneword_once(struct map_info *map,
1645                                           struct flchip *chip,
1646                                           unsigned long adr, map_word datum,
1647                                           int mode, struct cfi_private *cfi)
1648 {
1649         unsigned long timeo;
1650         /*
1651          * We use a 1ms + 1 jiffies generic timeout for writes (most devices
1652          * have a max write time of a few hundreds usec). However, we should
1653          * use the maximum timeout value given by the chip at probe time
1654          * instead.  Unfortunately, struct flchip does have a field for
1655          * maximum timeout, only for typical which can be far too short
1656          * depending of the conditions.  The ' + 1' is to avoid having a
1657          * timeout of 0 jiffies if HZ is smaller than 1000.
1658          */
1659         unsigned long uWriteTimeout = (HZ / 1000) + 1;
1660         int ret = 0;
1661
1662         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1663         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
1664         cfi_send_gen_cmd(0xA0, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
1665         map_write(map, datum, adr);
1666         chip->state = mode;
1667
1668         INVALIDATE_CACHE_UDELAY(map, chip,
1669                                 adr, map_bankwidth(map),
1670                                 chip->word_write_time);
1671
1672         /* See comment above for timeout value. */
1673         timeo = jiffies + uWriteTimeout;
1674         for (;;) {
1675                 if (chip->state != mode) {
1676                         /* Someone's suspended the write. Sleep */
1677                         DECLARE_WAITQUEUE(wait, current);
1678
1679                         set_current_state(TASK_UNINTERRUPTIBLE);
1680                         add_wait_queue(&chip->wq, &wait);
1681                         mutex_unlock(&chip->mutex);
1682                         schedule();
1683                         remove_wait_queue(&chip->wq, &wait);
1684                         timeo = jiffies + (HZ / 2); /* FIXME */
1685                         mutex_lock(&chip->mutex);
1686                         continue;
1687                 }
1688
1689                 /*
1690                  * We check "time_after" and "!chip_good" before checking
1691                  * "chip_good" to avoid the failure due to scheduling.
1692                  */
1693                 if (time_after(jiffies, timeo) &&
1694                     !chip_good(map, chip, adr, &datum)) {
1695                         xip_enable(map, chip, adr);
1696                         printk(KERN_WARNING "MTD %s(): software timeout\n", __func__);
1697                         xip_disable(map, chip, adr);
1698                         ret = -EIO;
1699                         break;
1700                 }
1701
1702                 if (chip_good(map, chip, adr, &datum)) {
1703                         if (cfi_check_err_status(map, chip, adr))
1704                                 ret = -EIO;
1705                         break;
1706                 }
1707
1708                 /* Latency issues. Drop the lock, wait a while and retry */
1709                 UDELAY(map, chip, adr, 1);
1710         }
1711
1712         return ret;
1713 }
1714
1715 static int __xipram do_write_oneword_start(struct map_info *map,
1716                                            struct flchip *chip,
1717                                            unsigned long adr, int mode)
1718 {
1719         int ret;
1720
1721         mutex_lock(&chip->mutex);
1722
1723         ret = get_chip(map, chip, adr, mode);
1724         if (ret) {
1725                 mutex_unlock(&chip->mutex);
1726                 return ret;
1727         }
1728
1729         if (mode == FL_OTP_WRITE)
1730                 otp_enter(map, chip, adr, map_bankwidth(map));
1731
1732         return ret;
1733 }
1734
1735 static void __xipram do_write_oneword_done(struct map_info *map,
1736                                            struct flchip *chip,
1737                                            unsigned long adr, int mode)
1738 {
1739         if (mode == FL_OTP_WRITE)
1740                 otp_exit(map, chip, adr, map_bankwidth(map));
1741
1742         chip->state = FL_READY;
1743         DISABLE_VPP(map);
1744         put_chip(map, chip, adr);
1745
1746         mutex_unlock(&chip->mutex);
1747 }
1748
1749 static int __xipram do_write_oneword_retry(struct map_info *map,
1750                                            struct flchip *chip,
1751                                            unsigned long adr, map_word datum,
1752                                            int mode)
1753 {
1754         struct cfi_private *cfi = map->fldrv_priv;
1755         int ret = 0;
1756         map_word oldd;
1757         int retry_cnt = 0;
1758
1759         /*
1760          * Check for a NOP for the case when the datum to write is already
1761          * present - it saves time and works around buggy chips that corrupt
1762          * data at other locations when 0xff is written to a location that
1763          * already contains 0xff.
1764          */
1765         oldd = map_read(map, adr);
1766         if (map_word_equal(map, oldd, datum)) {
1767                 pr_debug("MTD %s(): NOP\n", __func__);
1768                 return ret;
1769         }
1770
1771         XIP_INVAL_CACHED_RANGE(map, adr, map_bankwidth(map));
1772         ENABLE_VPP(map);
1773         xip_disable(map, chip, adr);
1774
1775  retry:
1776         ret = do_write_oneword_once(map, chip, adr, datum, mode, cfi);
1777         if (ret) {
1778                 /* reset on all failures. */
1779                 map_write(map, CMD(0xF0), chip->start);
1780                 /* FIXME - should have reset delay before continuing */
1781
1782                 if (++retry_cnt <= MAX_RETRIES) {
1783                         ret = 0;
1784                         goto retry;
1785                 }
1786         }
1787         xip_enable(map, chip, adr);
1788
1789         return ret;
1790 }
1791
1792 static int __xipram do_write_oneword(struct map_info *map, struct flchip *chip,
1793                                      unsigned long adr, map_word datum,
1794                                      int mode)
1795 {
1796         int ret;
1797
1798         adr += chip->start;
1799
1800         pr_debug("MTD %s(): WRITE 0x%.8lx(0x%.8lx)\n", __func__, adr,
1801                  datum.x[0]);
1802
1803         ret = do_write_oneword_start(map, chip, adr, mode);
1804         if (ret)
1805                 return ret;
1806
1807         ret = do_write_oneword_retry(map, chip, adr, datum, mode);
1808
1809         do_write_oneword_done(map, chip, adr, mode);
1810
1811         return ret;
1812 }
1813
1814
1815 static int cfi_amdstd_write_words(struct mtd_info *mtd, loff_t to, size_t len,
1816                                   size_t *retlen, const u_char *buf)
1817 {
1818         struct map_info *map = mtd->priv;
1819         struct cfi_private *cfi = map->fldrv_priv;
1820         int ret;
1821         int chipnum;
1822         unsigned long ofs, chipstart;
1823         DECLARE_WAITQUEUE(wait, current);
1824
1825         chipnum = to >> cfi->chipshift;
1826         ofs = to  - (chipnum << cfi->chipshift);
1827         chipstart = cfi->chips[chipnum].start;
1828
1829         /* If it's not bus-aligned, do the first byte write */
1830         if (ofs & (map_bankwidth(map)-1)) {
1831                 unsigned long bus_ofs = ofs & ~(map_bankwidth(map)-1);
1832                 int i = ofs - bus_ofs;
1833                 int n = 0;
1834                 map_word tmp_buf;
1835
1836  retry:
1837                 mutex_lock(&cfi->chips[chipnum].mutex);
1838
1839                 if (cfi->chips[chipnum].state != FL_READY) {
1840                         set_current_state(TASK_UNINTERRUPTIBLE);
1841                         add_wait_queue(&cfi->chips[chipnum].wq, &wait);
1842
1843                         mutex_unlock(&cfi->chips[chipnum].mutex);
1844
1845                         schedule();
1846                         remove_wait_queue(&cfi->chips[chipnum].wq, &wait);
1847                         goto retry;
1848                 }
1849
1850                 /* Load 'tmp_buf' with old contents of flash */
1851                 tmp_buf = map_read(map, bus_ofs+chipstart);
1852
1853                 mutex_unlock(&cfi->chips[chipnum].mutex);
1854
1855                 /* Number of bytes to copy from buffer */
1856                 n = min_t(int, len, map_bankwidth(map)-i);
1857
1858                 tmp_buf = map_word_load_partial(map, tmp_buf, buf, i, n);
1859
1860                 ret = do_write_oneword(map, &cfi->chips[chipnum],
1861                                        bus_ofs, tmp_buf, FL_WRITING);
1862                 if (ret)
1863                         return ret;
1864
1865                 ofs += n;
1866                 buf += n;
1867                 (*retlen) += n;
1868                 len -= n;
1869
1870                 if (ofs >> cfi->chipshift) {
1871                         chipnum ++;
1872                         ofs = 0;
1873                         if (chipnum == cfi->numchips)
1874                                 return 0;
1875                 }
1876         }
1877
1878         /* We are now aligned, write as much as possible */
1879         while(len >= map_bankwidth(map)) {
1880                 map_word datum;
1881
1882                 datum = map_word_load(map, buf);
1883
1884                 ret = do_write_oneword(map, &cfi->chips[chipnum],
1885                                        ofs, datum, FL_WRITING);
1886                 if (ret)
1887                         return ret;
1888
1889                 ofs += map_bankwidth(map);
1890                 buf += map_bankwidth(map);
1891                 (*retlen) += map_bankwidth(map);
1892                 len -= map_bankwidth(map);
1893
1894                 if (ofs >> cfi->chipshift) {
1895                         chipnum ++;
1896                         ofs = 0;
1897                         if (chipnum == cfi->numchips)
1898                                 return 0;
1899                         chipstart = cfi->chips[chipnum].start;
1900                 }
1901         }
1902
1903         /* Write the trailing bytes if any */
1904         if (len & (map_bankwidth(map)-1)) {
1905                 map_word tmp_buf;
1906
1907  retry1:
1908                 mutex_lock(&cfi->chips[chipnum].mutex);
1909
1910                 if (cfi->chips[chipnum].state != FL_READY) {
1911                         set_current_state(TASK_UNINTERRUPTIBLE);
1912                         add_wait_queue(&cfi->chips[chipnum].wq, &wait);
1913
1914                         mutex_unlock(&cfi->chips[chipnum].mutex);
1915
1916                         schedule();
1917                         remove_wait_queue(&cfi->chips[chipnum].wq, &wait);
1918                         goto retry1;
1919                 }
1920
1921                 tmp_buf = map_read(map, ofs + chipstart);
1922
1923                 mutex_unlock(&cfi->chips[chipnum].mutex);
1924
1925                 tmp_buf = map_word_load_partial(map, tmp_buf, buf, 0, len);
1926
1927                 ret = do_write_oneword(map, &cfi->chips[chipnum],
1928                                        ofs, tmp_buf, FL_WRITING);
1929                 if (ret)
1930                         return ret;
1931
1932                 (*retlen) += len;
1933         }
1934
1935         return 0;
1936 }
1937
1938 #if !FORCE_WORD_WRITE
1939 static int __xipram do_write_buffer_wait(struct map_info *map,
1940                                          struct flchip *chip, unsigned long adr,
1941                                          map_word datum)
1942 {
1943         unsigned long timeo;
1944         unsigned long u_write_timeout;
1945         int ret = 0;
1946
1947         /*
1948          * Timeout is calculated according to CFI data, if available.
1949          * See more comments in cfi_cmdset_0002().
1950          */
1951         u_write_timeout = usecs_to_jiffies(chip->buffer_write_time_max);
1952         timeo = jiffies + u_write_timeout;
1953
1954         for (;;) {
1955                 if (chip->state != FL_WRITING) {
1956                         /* Someone's suspended the write. Sleep */
1957                         DECLARE_WAITQUEUE(wait, current);
1958
1959                         set_current_state(TASK_UNINTERRUPTIBLE);
1960                         add_wait_queue(&chip->wq, &wait);
1961                         mutex_unlock(&chip->mutex);
1962                         schedule();
1963                         remove_wait_queue(&chip->wq, &wait);
1964                         timeo = jiffies + (HZ / 2); /* FIXME */
1965                         mutex_lock(&chip->mutex);
1966                         continue;
1967                 }
1968
1969                 /*
1970                  * We check "time_after" and "!chip_good" before checking
1971                  * "chip_good" to avoid the failure due to scheduling.
1972                  */
1973                 if (time_after(jiffies, timeo) &&
1974                     !chip_good(map, chip, adr, &datum)) {
1975                         pr_err("MTD %s(): software timeout, address:0x%.8lx.\n",
1976                                __func__, adr);
1977                         ret = -EIO;
1978                         break;
1979                 }
1980
1981                 if (chip_good(map, chip, adr, &datum)) {
1982                         if (cfi_check_err_status(map, chip, adr))
1983                                 ret = -EIO;
1984                         break;
1985                 }
1986
1987                 /* Latency issues. Drop the lock, wait a while and retry */
1988                 UDELAY(map, chip, adr, 1);
1989         }
1990
1991         return ret;
1992 }
1993
1994 static void __xipram do_write_buffer_reset(struct map_info *map,
1995                                            struct flchip *chip,
1996                                            struct cfi_private *cfi)
1997 {
1998         /*
1999          * Recovery from write-buffer programming failures requires
2000          * the write-to-buffer-reset sequence.  Since the last part
2001          * of the sequence also works as a normal reset, we can run
2002          * the same commands regardless of why we are here.
2003          * See e.g.
2004          * http://www.spansion.com/Support/Application%20Notes/MirrorBit_Write_Buffer_Prog_Page_Buffer_Read_AN.pdf
2005          */
2006         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi,
2007                          cfi->device_type, NULL);
2008         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi,
2009                          cfi->device_type, NULL);
2010         cfi_send_gen_cmd(0xF0, cfi->addr_unlock1, chip->start, map, cfi,
2011                          cfi->device_type, NULL);
2012
2013         /* FIXME - should have reset delay before continuing */
2014 }
2015
2016 /*
2017  * FIXME: interleaved mode not tested, and probably not supported!
2018  */
2019 static int __xipram do_write_buffer(struct map_info *map, struct flchip *chip,
2020                                     unsigned long adr, const u_char *buf,
2021                                     int len)
2022 {
2023         struct cfi_private *cfi = map->fldrv_priv;
2024         int ret;
2025         unsigned long cmd_adr;
2026         int z, words;
2027         map_word datum;
2028
2029         adr += chip->start;
2030         cmd_adr = adr;
2031
2032         mutex_lock(&chip->mutex);
2033         ret = get_chip(map, chip, adr, FL_WRITING);
2034         if (ret) {
2035                 mutex_unlock(&chip->mutex);
2036                 return ret;
2037         }
2038
2039         datum = map_word_load(map, buf);
2040
2041         pr_debug("MTD %s(): WRITE 0x%.8lx(0x%.8lx)\n",
2042                  __func__, adr, datum.x[0]);
2043
2044         XIP_INVAL_CACHED_RANGE(map, adr, len);
2045         ENABLE_VPP(map);
2046         xip_disable(map, chip, cmd_adr);
2047
2048         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
2049         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
2050
2051         /* Write Buffer Load */
2052         map_write(map, CMD(0x25), cmd_adr);
2053
2054         chip->state = FL_WRITING_TO_BUFFER;
2055
2056         /* Write length of data to come */
2057         words = len / map_bankwidth(map);
2058         map_write(map, CMD(words - 1), cmd_adr);
2059         /* Write data */
2060         z = 0;
2061         while(z < words * map_bankwidth(map)) {
2062                 datum = map_word_load(map, buf);
2063                 map_write(map, datum, adr + z);
2064
2065                 z += map_bankwidth(map);
2066                 buf += map_bankwidth(map);
2067         }
2068         z -= map_bankwidth(map);
2069
2070         adr += z;
2071
2072         /* Write Buffer Program Confirm: GO GO GO */
2073         map_write(map, CMD(0x29), cmd_adr);
2074         chip->state = FL_WRITING;
2075
2076         INVALIDATE_CACHE_UDELAY(map, chip,
2077                                 adr, map_bankwidth(map),
2078                                 chip->word_write_time);
2079
2080         ret = do_write_buffer_wait(map, chip, adr, datum);
2081         if (ret)
2082                 do_write_buffer_reset(map, chip, cfi);
2083
2084         xip_enable(map, chip, adr);
2085
2086         chip->state = FL_READY;
2087         DISABLE_VPP(map);
2088         put_chip(map, chip, adr);
2089         mutex_unlock(&chip->mutex);
2090
2091         return ret;
2092 }
2093
2094
2095 static int cfi_amdstd_write_buffers(struct mtd_info *mtd, loff_t to, size_t len,
2096                                     size_t *retlen, const u_char *buf)
2097 {
2098         struct map_info *map = mtd->priv;
2099         struct cfi_private *cfi = map->fldrv_priv;
2100         int wbufsize = cfi_interleave(cfi) << cfi->cfiq->MaxBufWriteSize;
2101         int ret;
2102         int chipnum;
2103         unsigned long ofs;
2104
2105         chipnum = to >> cfi->chipshift;
2106         ofs = to  - (chipnum << cfi->chipshift);
2107
2108         /* If it's not bus-aligned, do the first word write */
2109         if (ofs & (map_bankwidth(map)-1)) {
2110                 size_t local_len = (-ofs)&(map_bankwidth(map)-1);
2111                 if (local_len > len)
2112                         local_len = len;
2113                 ret = cfi_amdstd_write_words(mtd, ofs + (chipnum<<cfi->chipshift),
2114                                              local_len, retlen, buf);
2115                 if (ret)
2116                         return ret;
2117                 ofs += local_len;
2118                 buf += local_len;
2119                 len -= local_len;
2120
2121                 if (ofs >> cfi->chipshift) {
2122                         chipnum ++;
2123                         ofs = 0;
2124                         if (chipnum == cfi->numchips)
2125                                 return 0;
2126                 }
2127         }
2128
2129         /* Write buffer is worth it only if more than one word to write... */
2130         while (len >= map_bankwidth(map) * 2) {
2131                 /* We must not cross write block boundaries */
2132                 int size = wbufsize - (ofs & (wbufsize-1));
2133
2134                 if (size > len)
2135                         size = len;
2136                 if (size % map_bankwidth(map))
2137                         size -= size % map_bankwidth(map);
2138
2139                 ret = do_write_buffer(map, &cfi->chips[chipnum],
2140                                       ofs, buf, size);
2141                 if (ret)
2142                         return ret;
2143
2144                 ofs += size;
2145                 buf += size;
2146                 (*retlen) += size;
2147                 len -= size;
2148
2149                 if (ofs >> cfi->chipshift) {
2150                         chipnum ++;
2151                         ofs = 0;
2152                         if (chipnum == cfi->numchips)
2153                                 return 0;
2154                 }
2155         }
2156
2157         if (len) {
2158                 size_t retlen_dregs = 0;
2159
2160                 ret = cfi_amdstd_write_words(mtd, ofs + (chipnum<<cfi->chipshift),
2161                                              len, &retlen_dregs, buf);
2162
2163                 *retlen += retlen_dregs;
2164                 return ret;
2165         }
2166
2167         return 0;
2168 }
2169 #endif /* !FORCE_WORD_WRITE */
2170
2171 /*
2172  * Wait for the flash chip to become ready to write data
2173  *
2174  * This is only called during the panic_write() path. When panic_write()
2175  * is called, the kernel is in the process of a panic, and will soon be
2176  * dead. Therefore we don't take any locks, and attempt to get access
2177  * to the chip as soon as possible.
2178  */
2179 static int cfi_amdstd_panic_wait(struct map_info *map, struct flchip *chip,
2180                                  unsigned long adr)
2181 {
2182         struct cfi_private *cfi = map->fldrv_priv;
2183         int retries = 10;
2184         int i;
2185
2186         /*
2187          * If the driver thinks the chip is idle, and no toggle bits
2188          * are changing, then the chip is actually idle for sure.
2189          */
2190         if (chip->state == FL_READY && chip_ready(map, chip, adr, NULL))
2191                 return 0;
2192
2193         /*
2194          * Try several times to reset the chip and then wait for it
2195          * to become idle. The upper limit of a few milliseconds of
2196          * delay isn't a big problem: the kernel is dying anyway. It
2197          * is more important to save the messages.
2198          */
2199         while (retries > 0) {
2200                 const unsigned long timeo = (HZ / 1000) + 1;
2201
2202                 /* send the reset command */
2203                 map_write(map, CMD(0xF0), chip->start);
2204
2205                 /* wait for the chip to become ready */
2206                 for (i = 0; i < jiffies_to_usecs(timeo); i++) {
2207                         if (chip_ready(map, chip, adr, NULL))
2208                                 return 0;
2209
2210                         udelay(1);
2211                 }
2212
2213                 retries--;
2214         }
2215
2216         /* the chip never became ready */
2217         return -EBUSY;
2218 }
2219
2220 /*
2221  * Write out one word of data to a single flash chip during a kernel panic
2222  *
2223  * This is only called during the panic_write() path. When panic_write()
2224  * is called, the kernel is in the process of a panic, and will soon be
2225  * dead. Therefore we don't take any locks, and attempt to get access
2226  * to the chip as soon as possible.
2227  *
2228  * The implementation of this routine is intentionally similar to
2229  * do_write_oneword(), in order to ease code maintenance.
2230  */
2231 static int do_panic_write_oneword(struct map_info *map, struct flchip *chip,
2232                                   unsigned long adr, map_word datum)
2233 {
2234         const unsigned long uWriteTimeout = (HZ / 1000) + 1;
2235         struct cfi_private *cfi = map->fldrv_priv;
2236         int retry_cnt = 0;
2237         map_word oldd;
2238         int ret;
2239         int i;
2240
2241         adr += chip->start;
2242
2243         ret = cfi_amdstd_panic_wait(map, chip, adr);
2244         if (ret)
2245                 return ret;
2246
2247         pr_debug("MTD %s(): PANIC WRITE 0x%.8lx(0x%.8lx)\n",
2248                         __func__, adr, datum.x[0]);
2249
2250         /*
2251          * Check for a NOP for the case when the datum to write is already
2252          * present - it saves time and works around buggy chips that corrupt
2253          * data at other locations when 0xff is written to a location that
2254          * already contains 0xff.
2255          */
2256         oldd = map_read(map, adr);
2257         if (map_word_equal(map, oldd, datum)) {
2258                 pr_debug("MTD %s(): NOP\n", __func__);
2259                 goto op_done;
2260         }
2261
2262         ENABLE_VPP(map);
2263
2264 retry:
2265         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
2266         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
2267         cfi_send_gen_cmd(0xA0, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
2268         map_write(map, datum, adr);
2269
2270         for (i = 0; i < jiffies_to_usecs(uWriteTimeout); i++) {
2271                 if (chip_ready(map, chip, adr, NULL))
2272                         break;
2273
2274                 udelay(1);
2275         }
2276
2277         if (!chip_ready(map, chip, adr, &datum) ||
2278             cfi_check_err_status(map, chip, adr)) {
2279                 /* reset on all failures. */
2280                 map_write(map, CMD(0xF0), chip->start);
2281                 /* FIXME - should have reset delay before continuing */
2282
2283                 if (++retry_cnt <= MAX_RETRIES)
2284                         goto retry;
2285
2286                 ret = -EIO;
2287         }
2288
2289 op_done:
2290         DISABLE_VPP(map);
2291         return ret;
2292 }
2293
2294 /*
2295  * Write out some data during a kernel panic
2296  *
2297  * This is used by the mtdoops driver to save the dying messages from a
2298  * kernel which has panic'd.
2299  *
2300  * This routine ignores all of the locking used throughout the rest of the
2301  * driver, in order to ensure that the data gets written out no matter what
2302  * state this driver (and the flash chip itself) was in when the kernel crashed.
2303  *
2304  * The implementation of this routine is intentionally similar to
2305  * cfi_amdstd_write_words(), in order to ease code maintenance.
2306  */
2307 static int cfi_amdstd_panic_write(struct mtd_info *mtd, loff_t to, size_t len,
2308                                   size_t *retlen, const u_char *buf)
2309 {
2310         struct map_info *map = mtd->priv;
2311         struct cfi_private *cfi = map->fldrv_priv;
2312         unsigned long ofs, chipstart;
2313         int ret;
2314         int chipnum;
2315
2316         chipnum = to >> cfi->chipshift;
2317         ofs = to - (chipnum << cfi->chipshift);
2318         chipstart = cfi->chips[chipnum].start;
2319
2320         /* If it's not bus aligned, do the first byte write */
2321         if (ofs & (map_bankwidth(map) - 1)) {
2322                 unsigned long bus_ofs = ofs & ~(map_bankwidth(map) - 1);
2323                 int i = ofs - bus_ofs;
2324                 int n = 0;
2325                 map_word tmp_buf;
2326
2327                 ret = cfi_amdstd_panic_wait(map, &cfi->chips[chipnum], bus_ofs);
2328                 if (ret)
2329                         return ret;
2330
2331                 /* Load 'tmp_buf' with old contents of flash */
2332                 tmp_buf = map_read(map, bus_ofs + chipstart);
2333
2334                 /* Number of bytes to copy from buffer */
2335                 n = min_t(int, len, map_bankwidth(map) - i);
2336
2337                 tmp_buf = map_word_load_partial(map, tmp_buf, buf, i, n);
2338
2339                 ret = do_panic_write_oneword(map, &cfi->chips[chipnum],
2340                                              bus_ofs, tmp_buf);
2341                 if (ret)
2342                         return ret;
2343
2344                 ofs += n;
2345                 buf += n;
2346                 (*retlen) += n;
2347                 len -= n;
2348
2349                 if (ofs >> cfi->chipshift) {
2350                         chipnum++;
2351                         ofs = 0;
2352                         if (chipnum == cfi->numchips)
2353                                 return 0;
2354                 }
2355         }
2356
2357         /* We are now aligned, write as much as possible */
2358         while (len >= map_bankwidth(map)) {
2359                 map_word datum;
2360
2361                 datum = map_word_load(map, buf);
2362
2363                 ret = do_panic_write_oneword(map, &cfi->chips[chipnum],
2364                                              ofs, datum);
2365                 if (ret)
2366                         return ret;
2367
2368                 ofs += map_bankwidth(map);
2369                 buf += map_bankwidth(map);
2370                 (*retlen) += map_bankwidth(map);
2371                 len -= map_bankwidth(map);
2372
2373                 if (ofs >> cfi->chipshift) {
2374                         chipnum++;
2375                         ofs = 0;
2376                         if (chipnum == cfi->numchips)
2377                                 return 0;
2378
2379                         chipstart = cfi->chips[chipnum].start;
2380                 }
2381         }
2382
2383         /* Write the trailing bytes if any */
2384         if (len & (map_bankwidth(map) - 1)) {
2385                 map_word tmp_buf;
2386
2387                 ret = cfi_amdstd_panic_wait(map, &cfi->chips[chipnum], ofs);
2388                 if (ret)
2389                         return ret;
2390
2391                 tmp_buf = map_read(map, ofs + chipstart);
2392
2393                 tmp_buf = map_word_load_partial(map, tmp_buf, buf, 0, len);
2394
2395                 ret = do_panic_write_oneword(map, &cfi->chips[chipnum],
2396                                              ofs, tmp_buf);
2397                 if (ret)
2398                         return ret;
2399
2400                 (*retlen) += len;
2401         }
2402
2403         return 0;
2404 }
2405
2406
2407 /*
2408  * Handle devices with one erase region, that only implement
2409  * the chip erase command.
2410  */
2411 static int __xipram do_erase_chip(struct map_info *map, struct flchip *chip)
2412 {
2413         struct cfi_private *cfi = map->fldrv_priv;
2414         unsigned long timeo = jiffies + HZ;
2415         unsigned long int adr;
2416         DECLARE_WAITQUEUE(wait, current);
2417         int ret;
2418         int retry_cnt = 0;
2419         map_word datum = map_word_ff(map);
2420
2421         adr = cfi->addr_unlock1;
2422
2423         mutex_lock(&chip->mutex);
2424         ret = get_chip(map, chip, adr, FL_ERASING);
2425         if (ret) {
2426                 mutex_unlock(&chip->mutex);
2427                 return ret;
2428         }
2429
2430         pr_debug("MTD %s(): ERASE 0x%.8lx\n",
2431                __func__, chip->start);
2432
2433         XIP_INVAL_CACHED_RANGE(map, adr, map->size);
2434         ENABLE_VPP(map);
2435         xip_disable(map, chip, adr);
2436
2437  retry:
2438         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
2439         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
2440         cfi_send_gen_cmd(0x80, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
2441         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
2442         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
2443         cfi_send_gen_cmd(0x10, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
2444
2445         chip->state = FL_ERASING;
2446         chip->erase_suspended = 0;
2447         chip->in_progress_block_addr = adr;
2448         chip->in_progress_block_mask = ~(map->size - 1);
2449
2450         INVALIDATE_CACHE_UDELAY(map, chip,
2451                                 adr, map->size,
2452                                 chip->erase_time*500);
2453
2454         timeo = jiffies + (HZ*20);
2455
2456         for (;;) {
2457                 if (chip->state != FL_ERASING) {
2458                         /* Someone's suspended the erase. Sleep */
2459                         set_current_state(TASK_UNINTERRUPTIBLE);
2460                         add_wait_queue(&chip->wq, &wait);
2461                         mutex_unlock(&chip->mutex);
2462                         schedule();
2463                         remove_wait_queue(&chip->wq, &wait);
2464                         mutex_lock(&chip->mutex);
2465                         continue;
2466                 }
2467                 if (chip->erase_suspended) {
2468                         /* This erase was suspended and resumed.
2469                            Adjust the timeout */
2470                         timeo = jiffies + (HZ*20); /* FIXME */
2471                         chip->erase_suspended = 0;
2472                 }
2473
2474                 if (chip_ready(map, chip, adr, &datum)) {
2475                         if (cfi_check_err_status(map, chip, adr))
2476                                 ret = -EIO;
2477                         break;
2478                 }
2479
2480                 if (time_after(jiffies, timeo)) {
2481                         printk(KERN_WARNING "MTD %s(): software timeout\n",
2482                                __func__);
2483                         ret = -EIO;
2484                         break;
2485                 }
2486
2487                 /* Latency issues. Drop the lock, wait a while and retry */
2488                 UDELAY(map, chip, adr, 1000000/HZ);
2489         }
2490         /* Did we succeed? */
2491         if (ret) {
2492                 /* reset on all failures. */
2493                 map_write(map, CMD(0xF0), chip->start);
2494                 /* FIXME - should have reset delay before continuing */
2495
2496                 if (++retry_cnt <= MAX_RETRIES) {
2497                         ret = 0;
2498                         goto retry;
2499                 }
2500         }
2501
2502         chip->state = FL_READY;
2503         xip_enable(map, chip, adr);
2504         DISABLE_VPP(map);
2505         put_chip(map, chip, adr);
2506         mutex_unlock(&chip->mutex);
2507
2508         return ret;
2509 }
2510
2511
2512 static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip, unsigned long adr, int len, void *thunk)
2513 {
2514         struct cfi_private *cfi = map->fldrv_priv;
2515         unsigned long timeo = jiffies + HZ;
2516         DECLARE_WAITQUEUE(wait, current);
2517         int ret;
2518         int retry_cnt = 0;
2519         map_word datum = map_word_ff(map);
2520
2521         adr += chip->start;
2522
2523         mutex_lock(&chip->mutex);
2524         ret = get_chip(map, chip, adr, FL_ERASING);
2525         if (ret) {
2526                 mutex_unlock(&chip->mutex);
2527                 return ret;
2528         }
2529
2530         pr_debug("MTD %s(): ERASE 0x%.8lx\n",
2531                  __func__, adr);
2532
2533         XIP_INVAL_CACHED_RANGE(map, adr, len);
2534         ENABLE_VPP(map);
2535         xip_disable(map, chip, adr);
2536
2537  retry:
2538         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
2539         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
2540         cfi_send_gen_cmd(0x80, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
2541         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi, cfi->device_type, NULL);
2542         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi, cfi->device_type, NULL);
2543         map_write(map, cfi->sector_erase_cmd, adr);
2544
2545         chip->state = FL_ERASING;
2546         chip->erase_suspended = 0;
2547         chip->in_progress_block_addr = adr;
2548         chip->in_progress_block_mask = ~(len - 1);
2549
2550         INVALIDATE_CACHE_UDELAY(map, chip,
2551                                 adr, len,
2552                                 chip->erase_time*500);
2553
2554         timeo = jiffies + (HZ*20);
2555
2556         for (;;) {
2557                 if (chip->state != FL_ERASING) {
2558                         /* Someone's suspended the erase. Sleep */
2559                         set_current_state(TASK_UNINTERRUPTIBLE);
2560                         add_wait_queue(&chip->wq, &wait);
2561                         mutex_unlock(&chip->mutex);
2562                         schedule();
2563                         remove_wait_queue(&chip->wq, &wait);
2564                         mutex_lock(&chip->mutex);
2565                         continue;
2566                 }
2567                 if (chip->erase_suspended) {
2568                         /* This erase was suspended and resumed.
2569                            Adjust the timeout */
2570                         timeo = jiffies + (HZ*20); /* FIXME */
2571                         chip->erase_suspended = 0;
2572                 }
2573
2574                 if (chip_ready(map, chip, adr, &datum)) {
2575                         if (cfi_check_err_status(map, chip, adr))
2576                                 ret = -EIO;
2577                         break;
2578                 }
2579
2580                 if (time_after(jiffies, timeo)) {
2581                         printk(KERN_WARNING "MTD %s(): software timeout\n",
2582                                __func__);
2583                         ret = -EIO;
2584                         break;
2585                 }
2586
2587                 /* Latency issues. Drop the lock, wait a while and retry */
2588                 UDELAY(map, chip, adr, 1000000/HZ);
2589         }
2590         /* Did we succeed? */
2591         if (ret) {
2592                 /* reset on all failures. */
2593                 map_write(map, CMD(0xF0), chip->start);
2594                 /* FIXME - should have reset delay before continuing */
2595
2596                 if (++retry_cnt <= MAX_RETRIES) {
2597                         ret = 0;
2598                         goto retry;
2599                 }
2600         }
2601
2602         chip->state = FL_READY;
2603         xip_enable(map, chip, adr);
2604         DISABLE_VPP(map);
2605         put_chip(map, chip, adr);
2606         mutex_unlock(&chip->mutex);
2607         return ret;
2608 }
2609
2610
2611 static int cfi_amdstd_erase_varsize(struct mtd_info *mtd, struct erase_info *instr)
2612 {
2613         return cfi_varsize_frob(mtd, do_erase_oneblock, instr->addr,
2614                                 instr->len, NULL);
2615 }
2616
2617
2618 static int cfi_amdstd_erase_chip(struct mtd_info *mtd, struct erase_info *instr)
2619 {
2620         struct map_info *map = mtd->priv;
2621         struct cfi_private *cfi = map->fldrv_priv;
2622
2623         if (instr->addr != 0)
2624                 return -EINVAL;
2625
2626         if (instr->len != mtd->size)
2627                 return -EINVAL;
2628
2629         return do_erase_chip(map, &cfi->chips[0]);
2630 }
2631
2632 static int do_atmel_lock(struct map_info *map, struct flchip *chip,
2633                          unsigned long adr, int len, void *thunk)
2634 {
2635         struct cfi_private *cfi = map->fldrv_priv;
2636         int ret;
2637
2638         mutex_lock(&chip->mutex);
2639         ret = get_chip(map, chip, adr + chip->start, FL_LOCKING);
2640         if (ret)
2641                 goto out_unlock;
2642         chip->state = FL_LOCKING;
2643
2644         pr_debug("MTD %s(): LOCK 0x%08lx len %d\n", __func__, adr, len);
2645
2646         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi,
2647                          cfi->device_type, NULL);
2648         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi,
2649                          cfi->device_type, NULL);
2650         cfi_send_gen_cmd(0x80, cfi->addr_unlock1, chip->start, map, cfi,
2651                          cfi->device_type, NULL);
2652         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi,
2653                          cfi->device_type, NULL);
2654         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi,
2655                          cfi->device_type, NULL);
2656         map_write(map, CMD(0x40), chip->start + adr);
2657
2658         chip->state = FL_READY;
2659         put_chip(map, chip, adr + chip->start);
2660         ret = 0;
2661
2662 out_unlock:
2663         mutex_unlock(&chip->mutex);
2664         return ret;
2665 }
2666
2667 static int do_atmel_unlock(struct map_info *map, struct flchip *chip,
2668                            unsigned long adr, int len, void *thunk)
2669 {
2670         struct cfi_private *cfi = map->fldrv_priv;
2671         int ret;
2672
2673         mutex_lock(&chip->mutex);
2674         ret = get_chip(map, chip, adr + chip->start, FL_UNLOCKING);
2675         if (ret)
2676                 goto out_unlock;
2677         chip->state = FL_UNLOCKING;
2678
2679         pr_debug("MTD %s(): LOCK 0x%08lx len %d\n", __func__, adr, len);
2680
2681         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi,
2682                          cfi->device_type, NULL);
2683         map_write(map, CMD(0x70), adr);
2684
2685         chip->state = FL_READY;
2686         put_chip(map, chip, adr + chip->start);
2687         ret = 0;
2688
2689 out_unlock:
2690         mutex_unlock(&chip->mutex);
2691         return ret;
2692 }
2693
2694 static int cfi_atmel_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
2695 {
2696         return cfi_varsize_frob(mtd, do_atmel_lock, ofs, len, NULL);
2697 }
2698
2699 static int cfi_atmel_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
2700 {
2701         return cfi_varsize_frob(mtd, do_atmel_unlock, ofs, len, NULL);
2702 }
2703
2704 /*
2705  * Advanced Sector Protection - PPB (Persistent Protection Bit) locking
2706  */
2707
2708 struct ppb_lock {
2709         struct flchip *chip;
2710         unsigned long adr;
2711         int locked;
2712 };
2713
2714 #define DO_XXLOCK_ONEBLOCK_LOCK         ((void *)1)
2715 #define DO_XXLOCK_ONEBLOCK_UNLOCK       ((void *)2)
2716 #define DO_XXLOCK_ONEBLOCK_GETLOCK      ((void *)3)
2717
2718 static int __maybe_unused do_ppb_xxlock(struct map_info *map,
2719                                         struct flchip *chip,
2720                                         unsigned long adr, int len, void *thunk)
2721 {
2722         struct cfi_private *cfi = map->fldrv_priv;
2723         unsigned long timeo;
2724         int ret;
2725
2726         adr += chip->start;
2727         mutex_lock(&chip->mutex);
2728         ret = get_chip(map, chip, adr, FL_LOCKING);
2729         if (ret) {
2730                 mutex_unlock(&chip->mutex);
2731                 return ret;
2732         }
2733
2734         pr_debug("MTD %s(): XXLOCK 0x%08lx len %d\n", __func__, adr, len);
2735
2736         cfi_send_gen_cmd(0xAA, cfi->addr_unlock1, chip->start, map, cfi,
2737                          cfi->device_type, NULL);
2738         cfi_send_gen_cmd(0x55, cfi->addr_unlock2, chip->start, map, cfi,
2739                          cfi->device_type, NULL);
2740         /* PPB entry command */
2741         cfi_send_gen_cmd(0xC0, cfi->addr_unlock1, chip->start, map, cfi,
2742                          cfi->device_type, NULL);
2743
2744         if (thunk == DO_XXLOCK_ONEBLOCK_LOCK) {
2745                 chip->state = FL_LOCKING;
2746                 map_write(map, CMD(0xA0), adr);
2747                 map_write(map, CMD(0x00), adr);
2748         } else if (thunk == DO_XXLOCK_ONEBLOCK_UNLOCK) {
2749                 /*
2750                  * Unlocking of one specific sector is not supported, so we
2751                  * have to unlock all sectors of this device instead
2752                  */
2753                 chip->state = FL_UNLOCKING;
2754                 map_write(map, CMD(0x80), chip->start);
2755                 map_write(map, CMD(0x30), chip->start);
2756         } else if (thunk == DO_XXLOCK_ONEBLOCK_GETLOCK) {
2757                 chip->state = FL_JEDEC_QUERY;
2758                 /* Return locked status: 0->locked, 1->unlocked */
2759                 ret = !cfi_read_query(map, adr);
2760         } else
2761                 BUG();
2762
2763         /*
2764          * Wait for some time as unlocking of all sectors takes quite long
2765          */
2766         timeo = jiffies + msecs_to_jiffies(2000);       /* 2s max (un)locking */
2767         for (;;) {
2768                 if (chip_ready(map, chip, adr, NULL))
2769                         break;
2770
2771                 if (time_after(jiffies, timeo)) {
2772                         printk(KERN_ERR "Waiting for chip to be ready timed out.\n");
2773                         ret = -EIO;
2774                         break;
2775                 }
2776
2777                 UDELAY(map, chip, adr, 1);
2778         }
2779
2780         /* Exit BC commands */
2781         map_write(map, CMD(0x90), chip->start);
2782         map_write(map, CMD(0x00), chip->start);
2783
2784         chip->state = FL_READY;
2785         put_chip(map, chip, adr);
2786         mutex_unlock(&chip->mutex);
2787
2788         return ret;
2789 }
2790
2791 static int __maybe_unused cfi_ppb_lock(struct mtd_info *mtd, loff_t ofs,
2792                                        uint64_t len)
2793 {
2794         return cfi_varsize_frob(mtd, do_ppb_xxlock, ofs, len,
2795                                 DO_XXLOCK_ONEBLOCK_LOCK);
2796 }
2797
2798 static int __maybe_unused cfi_ppb_unlock(struct mtd_info *mtd, loff_t ofs,
2799                                          uint64_t len)
2800 {
2801         struct mtd_erase_region_info *regions = mtd->eraseregions;
2802         struct map_info *map = mtd->priv;
2803         struct cfi_private *cfi = map->fldrv_priv;
2804         struct ppb_lock *sect;
2805         unsigned long adr;
2806         loff_t offset;
2807         uint64_t length;
2808         int chipnum;
2809         int i;
2810         int sectors;
2811         int ret;
2812         int max_sectors;
2813
2814         /*
2815          * PPB unlocking always unlocks all sectors of the flash chip.
2816          * We need to re-lock all previously locked sectors. So lets
2817          * first check the locking status of all sectors and save
2818          * it for future use.
2819          */
2820         max_sectors = 0;
2821         for (i = 0; i < mtd->numeraseregions; i++)
2822                 max_sectors += regions[i].numblocks;
2823
2824         sect = kcalloc(max_sectors, sizeof(struct ppb_lock), GFP_KERNEL);
2825         if (!sect)
2826                 return -ENOMEM;
2827
2828         /*
2829          * This code to walk all sectors is a slightly modified version
2830          * of the cfi_varsize_frob() code.
2831          */
2832         i = 0;
2833         chipnum = 0;
2834         adr = 0;
2835         sectors = 0;
2836         offset = 0;
2837         length = mtd->size;
2838
2839         while (length) {
2840                 int size = regions[i].erasesize;
2841
2842                 /*
2843                  * Only test sectors that shall not be unlocked. The other
2844                  * sectors shall be unlocked, so lets keep their locking
2845                  * status at "unlocked" (locked=0) for the final re-locking.
2846                  */
2847                 if ((offset < ofs) || (offset >= (ofs + len))) {
2848                         sect[sectors].chip = &cfi->chips[chipnum];
2849                         sect[sectors].adr = adr;
2850                         sect[sectors].locked = do_ppb_xxlock(
2851                                 map, &cfi->chips[chipnum], adr, 0,
2852                                 DO_XXLOCK_ONEBLOCK_GETLOCK);
2853                 }
2854
2855                 adr += size;
2856                 offset += size;
2857                 length -= size;
2858
2859                 if (offset == regions[i].offset + size * regions[i].numblocks)
2860                         i++;
2861
2862                 if (adr >> cfi->chipshift) {
2863                         if (offset >= (ofs + len))
2864                                 break;
2865                         adr = 0;
2866                         chipnum++;
2867
2868                         if (chipnum >= cfi->numchips)
2869                                 break;
2870                 }
2871
2872                 sectors++;
2873                 if (sectors >= max_sectors) {
2874                         printk(KERN_ERR "Only %d sectors for PPB locking supported!\n",
2875                                max_sectors);
2876                         kfree(sect);
2877                         return -EINVAL;
2878                 }
2879         }
2880
2881         /* Now unlock the whole chip */
2882         ret = cfi_varsize_frob(mtd, do_ppb_xxlock, ofs, len,
2883                                DO_XXLOCK_ONEBLOCK_UNLOCK);
2884         if (ret) {
2885                 kfree(sect);
2886                 return ret;
2887         }
2888
2889         /*
2890          * PPB unlocking always unlocks all sectors of the flash chip.
2891          * We need to re-lock all previously locked sectors.
2892          */
2893         for (i = 0; i < sectors; i++) {
2894                 if (sect[i].locked)
2895                         do_ppb_xxlock(map, sect[i].chip, sect[i].adr, 0,
2896                                       DO_XXLOCK_ONEBLOCK_LOCK);
2897         }
2898
2899         kfree(sect);
2900         return ret;
2901 }
2902
2903 static int __maybe_unused cfi_ppb_is_locked(struct mtd_info *mtd, loff_t ofs,
2904                                             uint64_t len)
2905 {
2906         return cfi_varsize_frob(mtd, do_ppb_xxlock, ofs, len,
2907                                 DO_XXLOCK_ONEBLOCK_GETLOCK) ? 1 : 0;
2908 }
2909
2910 static void cfi_amdstd_sync (struct mtd_info *mtd)
2911 {
2912         struct map_info *map = mtd->priv;
2913         struct cfi_private *cfi = map->fldrv_priv;
2914         int i;
2915         struct flchip *chip;
2916         int ret = 0;
2917         DECLARE_WAITQUEUE(wait, current);
2918
2919         for (i=0; !ret && i<cfi->numchips; i++) {
2920                 chip = &cfi->chips[i];
2921
2922         retry:
2923                 mutex_lock(&chip->mutex);
2924
2925                 switch(chip->state) {
2926                 case FL_READY:
2927                 case FL_STATUS:
2928                 case FL_CFI_QUERY:
2929                 case FL_JEDEC_QUERY:
2930                         chip->oldstate = chip->state;
2931                         chip->state = FL_SYNCING;
2932                         /* No need to wake_up() on this state change -
2933                          * as the whole point is that nobody can do anything
2934                          * with the chip now anyway.
2935                          */
2936                         fallthrough;
2937                 case FL_SYNCING:
2938                         mutex_unlock(&chip->mutex);
2939                         break;
2940
2941                 default:
2942                         /* Not an idle state */
2943                         set_current_state(TASK_UNINTERRUPTIBLE);
2944                         add_wait_queue(&chip->wq, &wait);
2945
2946                         mutex_unlock(&chip->mutex);
2947
2948                         schedule();
2949
2950                         remove_wait_queue(&chip->wq, &wait);
2951
2952                         goto retry;
2953                 }
2954         }
2955
2956         /* Unlock the chips again */
2957
2958         for (i--; i >=0; i--) {
2959                 chip = &cfi->chips[i];
2960
2961                 mutex_lock(&chip->mutex);
2962
2963                 if (chip->state == FL_SYNCING) {
2964                         chip->state = chip->oldstate;
2965                         wake_up(&chip->wq);
2966                 }
2967                 mutex_unlock(&chip->mutex);
2968         }
2969 }
2970
2971
2972 static int cfi_amdstd_suspend(struct mtd_info *mtd)
2973 {
2974         struct map_info *map = mtd->priv;
2975         struct cfi_private *cfi = map->fldrv_priv;
2976         int i;
2977         struct flchip *chip;
2978         int ret = 0;
2979
2980         for (i=0; !ret && i<cfi->numchips; i++) {
2981                 chip = &cfi->chips[i];
2982
2983                 mutex_lock(&chip->mutex);
2984
2985                 switch(chip->state) {
2986                 case FL_READY:
2987                 case FL_STATUS:
2988                 case FL_CFI_QUERY:
2989                 case FL_JEDEC_QUERY:
2990                         chip->oldstate = chip->state;
2991                         chip->state = FL_PM_SUSPENDED;
2992                         /* No need to wake_up() on this state change -
2993                          * as the whole point is that nobody can do anything
2994                          * with the chip now anyway.
2995                          */
2996                         break;
2997                 case FL_PM_SUSPENDED:
2998                         break;
2999
3000                 default:
3001                         ret = -EAGAIN;
3002                         break;
3003                 }
3004                 mutex_unlock(&chip->mutex);
3005         }
3006
3007         /* Unlock the chips again */
3008
3009         if (ret) {
3010                 for (i--; i >=0; i--) {
3011                         chip = &cfi->chips[i];
3012
3013                         mutex_lock(&chip->mutex);
3014
3015                         if (chip->state == FL_PM_SUSPENDED) {
3016                                 chip->state = chip->oldstate;
3017                                 wake_up(&chip->wq);
3018                         }
3019                         mutex_unlock(&chip->mutex);
3020                 }
3021         }
3022
3023         return ret;
3024 }
3025
3026
3027 static void cfi_amdstd_resume(struct mtd_info *mtd)
3028 {
3029         struct map_info *map = mtd->priv;
3030         struct cfi_private *cfi = map->fldrv_priv;
3031         int i;
3032         struct flchip *chip;
3033
3034         for (i=0; i<cfi->numchips; i++) {
3035
3036                 chip = &cfi->chips[i];
3037
3038                 mutex_lock(&chip->mutex);
3039
3040                 if (chip->state == FL_PM_SUSPENDED) {
3041                         chip->state = FL_READY;
3042                         map_write(map, CMD(0xF0), chip->start);
3043                         wake_up(&chip->wq);
3044                 }
3045                 else
3046                         printk(KERN_ERR "Argh. Chip not in PM_SUSPENDED state upon resume()\n");
3047
3048                 mutex_unlock(&chip->mutex);
3049         }
3050 }
3051
3052
3053 /*
3054  * Ensure that the flash device is put back into read array mode before
3055  * unloading the driver or rebooting.  On some systems, rebooting while
3056  * the flash is in query/program/erase mode will prevent the CPU from
3057  * fetching the bootloader code, requiring a hard reset or power cycle.
3058  */
3059 static int cfi_amdstd_reset(struct mtd_info *mtd)
3060 {
3061         struct map_info *map = mtd->priv;
3062         struct cfi_private *cfi = map->fldrv_priv;
3063         int i, ret;
3064         struct flchip *chip;
3065
3066         for (i = 0; i < cfi->numchips; i++) {
3067
3068                 chip = &cfi->chips[i];
3069
3070                 mutex_lock(&chip->mutex);
3071
3072                 ret = get_chip(map, chip, chip->start, FL_SHUTDOWN);
3073                 if (!ret) {
3074                         map_write(map, CMD(0xF0), chip->start);
3075                         chip->state = FL_SHUTDOWN;
3076                         put_chip(map, chip, chip->start);
3077                 }
3078
3079                 mutex_unlock(&chip->mutex);
3080         }
3081
3082         return 0;
3083 }
3084
3085
3086 static int cfi_amdstd_reboot(struct notifier_block *nb, unsigned long val,
3087                                void *v)
3088 {
3089         struct mtd_info *mtd;
3090
3091         mtd = container_of(nb, struct mtd_info, reboot_notifier);
3092         cfi_amdstd_reset(mtd);
3093         return NOTIFY_DONE;
3094 }
3095
3096
3097 static void cfi_amdstd_destroy(struct mtd_info *mtd)
3098 {
3099         struct map_info *map = mtd->priv;
3100         struct cfi_private *cfi = map->fldrv_priv;
3101
3102         cfi_amdstd_reset(mtd);
3103         unregister_reboot_notifier(&mtd->reboot_notifier);
3104         kfree(cfi->cmdset_priv);
3105         kfree(cfi->cfiq);
3106         kfree(cfi);
3107         kfree(mtd->eraseregions);
3108 }
3109
3110 MODULE_LICENSE("GPL");
3111 MODULE_AUTHOR("Crossnet Co. <info@crossnet.co.jp> et al.");
3112 MODULE_DESCRIPTION("MTD chip driver for AMD/Fujitsu flash chips");
3113 MODULE_ALIAS("cfi_cmdset_0006");
3114 MODULE_ALIAS("cfi_cmdset_0701");