Root/target/linux/ar71xx/patches-2.6.39/108-mtd_fix_cfi_cmdset_0002_status_check.patch

1--- a/drivers/mtd/chips/cfi_cmdset_0002.c
2+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
3@@ -1219,8 +1219,8 @@ static int __xipram do_write_oneword(str
4             break;
5         }
6 
7- if (chip_ready(map, adr))
8- break;
9+ if (chip_good(map, adr, datum))
10+ goto enable_xip;
11 
12         /* Latency issues. Drop the lock, wait a while and retry */
13         UDELAY(map, chip, adr, 1);
14@@ -1236,6 +1236,8 @@ static int __xipram do_write_oneword(str
15 
16         ret = -EIO;
17     }
18+
19+ enable_xip:
20     xip_enable(map, chip, adr);
21  op_done:
22     chip->state = FL_READY;
23@@ -1567,7 +1569,6 @@ static int cfi_amdstd_write_buffers(stru
24     return 0;
25 }
26 
27-
28 /*
29  * Handle devices with one erase region, that only implement
30  * the chip erase command.
31@@ -1631,8 +1632,8 @@ static int __xipram do_erase_chip(struct
32             chip->erase_suspended = 0;
33         }
34 
35- if (chip_ready(map, adr))
36- break;
37+ if (chip_good(map, adr, map_word_ff(map)))
38+ goto op_done;
39 
40         if (time_after(jiffies, timeo)) {
41             printk(KERN_WARNING "MTD %s(): software timeout\n",
42@@ -1652,6 +1653,7 @@ static int __xipram do_erase_chip(struct
43         ret = -EIO;
44     }
45 
46+ op_done:
47     chip->state = FL_READY;
48     xip_enable(map, chip, adr);
49     put_chip(map, chip, adr);
50@@ -1719,9 +1721,9 @@ static int __xipram do_erase_oneblock(st
51             chip->erase_suspended = 0;
52         }
53 
54- if (chip_ready(map, adr)) {
55+ if (chip_good(map, adr, map_word_ff(map))) {
56             xip_enable(map, chip, adr);
57- break;
58+ goto op_done;
59         }
60 
61         if (time_after(jiffies, timeo)) {
62@@ -1743,6 +1745,7 @@ static int __xipram do_erase_oneblock(st
63         ret = -EIO;
64     }
65 
66+ op_done:
67     chip->state = FL_READY;
68     put_chip(map, chip, adr);
69     mutex_unlock(&chip->mutex);
70

Archive Download this file



interactive