diff options
| author | Mike Rapoport <mike@compulab.co.il> | 2008-05-27 04:20:03 -0400 |
|---|---|---|
| committer | David Woodhouse <dwmw2@infradead.org> | 2008-06-04 12:22:59 -0400 |
| commit | 5c9c11e1c47c2101253a95c54ef72e13edcc728a (patch) | |
| tree | b1af123309e5827d174fe3cea0efae106550ffc3 /drivers/mtd/chips | |
| parent | 8fd310a1cc3aadb7a17d844beeefae66b1a169c6 (diff) | |
[MTD] [NOR] Add support for flash chips with ID in bank other than 0
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>
Diffstat (limited to 'drivers/mtd/chips')
| -rw-r--r-- | drivers/mtd/chips/jedec_probe.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/drivers/mtd/chips/jedec_probe.c b/drivers/mtd/chips/jedec_probe.c index b717f1a5d6b2..279fe60b7855 100644 --- a/drivers/mtd/chips/jedec_probe.c +++ b/drivers/mtd/chips/jedec_probe.c | |||
| @@ -37,6 +37,7 @@ | |||
| 37 | #define MANUFACTURER_ST 0x0020 | 37 | #define MANUFACTURER_ST 0x0020 |
| 38 | #define MANUFACTURER_TOSHIBA 0x0098 | 38 | #define MANUFACTURER_TOSHIBA 0x0098 |
| 39 | #define MANUFACTURER_WINBOND 0x00da | 39 | #define MANUFACTURER_WINBOND 0x00da |
| 40 | #define CONTINUATION_CODE 0x007f | ||
| 40 | 41 | ||
| 41 | 42 | ||
| 42 | /* AMD */ | 43 | /* AMD */ |
| @@ -1760,9 +1761,21 @@ static inline u32 jedec_read_mfr(struct map_info *map, uint32_t base, | |||
| 1760 | { | 1761 | { |
| 1761 | map_word result; | 1762 | map_word result; |
| 1762 | unsigned long mask; | 1763 | unsigned long mask; |
| 1763 | u32 ofs = cfi_build_cmd_addr(0, cfi_interleave(cfi), cfi->device_type); | 1764 | int bank = 0; |
| 1764 | mask = (1 << (cfi->device_type * 8)) -1; | 1765 | |
| 1765 | result = map_read(map, base + ofs); | 1766 | /* According to JEDEC "Standard Manufacturer's Identification Code" |
| 1767 | * (http://www.jedec.org/download/search/jep106W.pdf) | ||
| 1768 | * several first banks can contain 0x7f instead of actual ID | ||
| 1769 | */ | ||
| 1770 | do { | ||
| 1771 | uint32_t ofs = cfi_build_cmd_addr(0 + (bank << 8), | ||
| 1772 | cfi_interleave(cfi), | ||
| 1773 | cfi->device_type); | ||
| 1774 | mask = (1 << (cfi->device_type * 8)) - 1; | ||
| 1775 | result = map_read(map, base + ofs); | ||
| 1776 | bank++; | ||
| 1777 | } while ((result.x[0] & mask) == CONTINUATION_CODE); | ||
| 1778 | |||
| 1766 | return result.x[0] & mask; | 1779 | return result.x[0] & mask; |
| 1767 | } | 1780 | } |
| 1768 | 1781 | ||
