]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
[MTD] [NOR] Add support for flash chips with ID in bank other than 0
authorMike Rapoport <mike@compulab.co.il>
Tue, 27 May 2008 08:20:03 +0000 (11:20 +0300)
committerDavid Woodhouse <dwmw2@infradead.org>
Wed, 4 Jun 2008 16:22:59 +0000 (17:22 +0100)
According to JEDEC "Standard Manufacturer's Identification Code"
(http://www.jedec.org/download/search/jep106W.pdf)
several first banks of NOR flash can contain 0x7f instead of actual ID.
This patch adds support for reading manufacturer ID from banks other than 0.

Signed-off-by: Mike Rapoport <mike@compulab.co.il>
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
drivers/mtd/chips/jedec_probe.c

index b717f1a5d6b29408e2bb4293aecb79ddf96e62dd..279fe60b78556b2b8e18ec7009ef0968490cd039 100644 (file)
@@ -37,6 +37,7 @@
 #define MANUFACTURER_ST                0x0020
 #define MANUFACTURER_TOSHIBA   0x0098
 #define MANUFACTURER_WINBOND   0x00da
+#define CONTINUATION_CODE      0x007f
 
 
 /* AMD */
@@ -1760,9 +1761,21 @@ static inline u32 jedec_read_mfr(struct map_info *map, uint32_t base,
 {
        map_word result;
        unsigned long mask;
-       u32 ofs = cfi_build_cmd_addr(0, cfi_interleave(cfi), cfi->device_type);
-       mask = (1 << (cfi->device_type * 8)) -1;
-       result = map_read(map, base + ofs);
+       int bank = 0;
+
+       /* According to JEDEC "Standard Manufacturer's Identification Code"
+        * (http://www.jedec.org/download/search/jep106W.pdf)
+        * several first banks can contain 0x7f instead of actual ID
+        */
+       do {
+               uint32_t ofs = cfi_build_cmd_addr(0 + (bank << 8),
+                                                 cfi_interleave(cfi),
+                                                 cfi->device_type);
+               mask = (1 << (cfi->device_type * 8)) - 1;
+               result = map_read(map, base + ofs);
+               bank++;
+       } while ((result.x[0] & mask) == CONTINUATION_CODE);
+
        return result.x[0] & mask;
 }