diff options
Diffstat (limited to 'drivers/mtd/chips')
-rw-r--r-- | drivers/mtd/chips/cfi_cmdset_0001.c | 19 | ||||
-rw-r--r-- | drivers/mtd/chips/cfi_cmdset_0002.c | 30 | ||||
-rw-r--r-- | drivers/mtd/chips/cfi_cmdset_0020.c | 15 | ||||
-rw-r--r-- | drivers/mtd/chips/cfi_probe.c | 7 | ||||
-rw-r--r-- | drivers/mtd/chips/cfi_util.c | 2 | ||||
-rw-r--r-- | drivers/mtd/chips/jedec_probe.c | 73 |
6 files changed, 113 insertions, 33 deletions
diff --git a/drivers/mtd/chips/cfi_cmdset_0001.c b/drivers/mtd/chips/cfi_cmdset_0001.c index 0080452531d6..e812df607a5c 100644 --- a/drivers/mtd/chips/cfi_cmdset_0001.c +++ b/drivers/mtd/chips/cfi_cmdset_0001.c | |||
@@ -384,7 +384,7 @@ read_pri_intelext(struct map_info *map, __u16 adr) | |||
384 | if (extp_size > 4096) { | 384 | if (extp_size > 4096) { |
385 | printk(KERN_ERR | 385 | printk(KERN_ERR |
386 | "%s: cfi_pri_intelext is too fat\n", | 386 | "%s: cfi_pri_intelext is too fat\n", |
387 | __FUNCTION__); | 387 | __func__); |
388 | return NULL; | 388 | return NULL; |
389 | } | 389 | } |
390 | goto again; | 390 | goto again; |
@@ -619,6 +619,9 @@ static int cfi_intelext_partition_fixup(struct mtd_info *mtd, | |||
619 | sizeof(struct cfi_intelext_blockinfo); | 619 | sizeof(struct cfi_intelext_blockinfo); |
620 | } | 620 | } |
621 | 621 | ||
622 | if (!numparts) | ||
623 | numparts = 1; | ||
624 | |||
622 | /* Programming Region info */ | 625 | /* Programming Region info */ |
623 | if (extp->MinorVersion >= '4') { | 626 | if (extp->MinorVersion >= '4') { |
624 | struct cfi_intelext_programming_regioninfo *prinfo; | 627 | struct cfi_intelext_programming_regioninfo *prinfo; |
@@ -641,7 +644,7 @@ static int cfi_intelext_partition_fixup(struct mtd_info *mtd, | |||
641 | if ((1 << partshift) < mtd->erasesize) { | 644 | if ((1 << partshift) < mtd->erasesize) { |
642 | printk( KERN_ERR | 645 | printk( KERN_ERR |
643 | "%s: bad number of hw partitions (%d)\n", | 646 | "%s: bad number of hw partitions (%d)\n", |
644 | __FUNCTION__, numparts); | 647 | __func__, numparts); |
645 | return -EINVAL; | 648 | return -EINVAL; |
646 | } | 649 | } |
647 | 650 | ||
@@ -1071,10 +1074,10 @@ static int __xipram xip_wait_for_operation( | |||
1071 | chip->state = newstate; | 1074 | chip->state = newstate; |
1072 | map_write(map, CMD(0xff), adr); | 1075 | map_write(map, CMD(0xff), adr); |
1073 | (void) map_read(map, adr); | 1076 | (void) map_read(map, adr); |
1074 | asm volatile (".rep 8; nop; .endr"); | 1077 | xip_iprefetch(); |
1075 | local_irq_enable(); | 1078 | local_irq_enable(); |
1076 | spin_unlock(chip->mutex); | 1079 | spin_unlock(chip->mutex); |
1077 | asm volatile (".rep 8; nop; .endr"); | 1080 | xip_iprefetch(); |
1078 | cond_resched(); | 1081 | cond_resched(); |
1079 | 1082 | ||
1080 | /* | 1083 | /* |
@@ -2013,7 +2016,7 @@ static int cfi_intelext_lock(struct mtd_info *mtd, loff_t ofs, size_t len) | |||
2013 | 2016 | ||
2014 | #ifdef DEBUG_LOCK_BITS | 2017 | #ifdef DEBUG_LOCK_BITS |
2015 | printk(KERN_DEBUG "%s: lock status before, ofs=0x%08llx, len=0x%08X\n", | 2018 | printk(KERN_DEBUG "%s: lock status before, ofs=0x%08llx, len=0x%08X\n", |
2016 | __FUNCTION__, ofs, len); | 2019 | __func__, ofs, len); |
2017 | cfi_varsize_frob(mtd, do_printlockstatus_oneblock, | 2020 | cfi_varsize_frob(mtd, do_printlockstatus_oneblock, |
2018 | ofs, len, NULL); | 2021 | ofs, len, NULL); |
2019 | #endif | 2022 | #endif |
@@ -2023,7 +2026,7 @@ static int cfi_intelext_lock(struct mtd_info *mtd, loff_t ofs, size_t len) | |||
2023 | 2026 | ||
2024 | #ifdef DEBUG_LOCK_BITS | 2027 | #ifdef DEBUG_LOCK_BITS |
2025 | printk(KERN_DEBUG "%s: lock status after, ret=%d\n", | 2028 | printk(KERN_DEBUG "%s: lock status after, ret=%d\n", |
2026 | __FUNCTION__, ret); | 2029 | __func__, ret); |
2027 | cfi_varsize_frob(mtd, do_printlockstatus_oneblock, | 2030 | cfi_varsize_frob(mtd, do_printlockstatus_oneblock, |
2028 | ofs, len, NULL); | 2031 | ofs, len, NULL); |
2029 | #endif | 2032 | #endif |
@@ -2037,7 +2040,7 @@ static int cfi_intelext_unlock(struct mtd_info *mtd, loff_t ofs, size_t len) | |||
2037 | 2040 | ||
2038 | #ifdef DEBUG_LOCK_BITS | 2041 | #ifdef DEBUG_LOCK_BITS |
2039 | printk(KERN_DEBUG "%s: lock status before, ofs=0x%08llx, len=0x%08X\n", | 2042 | printk(KERN_DEBUG "%s: lock status before, ofs=0x%08llx, len=0x%08X\n", |
2040 | __FUNCTION__, ofs, len); | 2043 | __func__, ofs, len); |
2041 | cfi_varsize_frob(mtd, do_printlockstatus_oneblock, | 2044 | cfi_varsize_frob(mtd, do_printlockstatus_oneblock, |
2042 | ofs, len, NULL); | 2045 | ofs, len, NULL); |
2043 | #endif | 2046 | #endif |
@@ -2047,7 +2050,7 @@ static int cfi_intelext_unlock(struct mtd_info *mtd, loff_t ofs, size_t len) | |||
2047 | 2050 | ||
2048 | #ifdef DEBUG_LOCK_BITS | 2051 | #ifdef DEBUG_LOCK_BITS |
2049 | printk(KERN_DEBUG "%s: lock status after, ret=%d\n", | 2052 | printk(KERN_DEBUG "%s: lock status after, ret=%d\n", |
2050 | __FUNCTION__, ret); | 2053 | __func__, ret); |
2051 | cfi_varsize_frob(mtd, do_printlockstatus_oneblock, | 2054 | cfi_varsize_frob(mtd, do_printlockstatus_oneblock, |
2052 | ofs, len, NULL); | 2055 | ofs, len, NULL); |
2053 | #endif | 2056 | #endif |
diff --git a/drivers/mtd/chips/cfi_cmdset_0002.c b/drivers/mtd/chips/cfi_cmdset_0002.c index 458d477614d6..f7fcc6389533 100644 --- a/drivers/mtd/chips/cfi_cmdset_0002.c +++ b/drivers/mtd/chips/cfi_cmdset_0002.c | |||
@@ -220,6 +220,28 @@ static void fixup_use_atmel_lock(struct mtd_info *mtd, void *param) | |||
220 | mtd->flags |= MTD_POWERUP_LOCK; | 220 | mtd->flags |= MTD_POWERUP_LOCK; |
221 | } | 221 | } |
222 | 222 | ||
223 | static void fixup_s29gl064n_sectors(struct mtd_info *mtd, void *param) | ||
224 | { | ||
225 | struct map_info *map = mtd->priv; | ||
226 | struct cfi_private *cfi = map->fldrv_priv; | ||
227 | |||
228 | if ((cfi->cfiq->EraseRegionInfo[0] & 0xffff) == 0x003f) { | ||
229 | cfi->cfiq->EraseRegionInfo[0] |= 0x0040; | ||
230 | pr_warning("%s: Bad S29GL064N CFI data, adjust from 64 to 128 sectors\n", mtd->name); | ||
231 | } | ||
232 | } | ||
233 | |||
234 | static void fixup_s29gl032n_sectors(struct mtd_info *mtd, void *param) | ||
235 | { | ||
236 | struct map_info *map = mtd->priv; | ||
237 | struct cfi_private *cfi = map->fldrv_priv; | ||
238 | |||
239 | if ((cfi->cfiq->EraseRegionInfo[1] & 0xffff) == 0x007e) { | ||
240 | cfi->cfiq->EraseRegionInfo[1] &= ~0x0040; | ||
241 | pr_warning("%s: Bad S29GL032N CFI data, adjust from 127 to 63 sectors\n", mtd->name); | ||
242 | } | ||
243 | } | ||
244 | |||
223 | static struct cfi_fixup cfi_fixup_table[] = { | 245 | static struct cfi_fixup cfi_fixup_table[] = { |
224 | { CFI_MFR_ATMEL, CFI_ID_ANY, fixup_convert_atmel_pri, NULL }, | 246 | { CFI_MFR_ATMEL, CFI_ID_ANY, fixup_convert_atmel_pri, NULL }, |
225 | #ifdef AMD_BOOTLOC_BUG | 247 | #ifdef AMD_BOOTLOC_BUG |
@@ -231,6 +253,10 @@ static struct cfi_fixup cfi_fixup_table[] = { | |||
231 | { CFI_MFR_AMD, 0x0056, fixup_use_secsi, NULL, }, | 253 | { CFI_MFR_AMD, 0x0056, fixup_use_secsi, NULL, }, |
232 | { CFI_MFR_AMD, 0x005C, fixup_use_secsi, NULL, }, | 254 | { CFI_MFR_AMD, 0x005C, fixup_use_secsi, NULL, }, |
233 | { CFI_MFR_AMD, 0x005F, fixup_use_secsi, NULL, }, | 255 | { CFI_MFR_AMD, 0x005F, fixup_use_secsi, NULL, }, |
256 | { CFI_MFR_AMD, 0x0c01, fixup_s29gl064n_sectors, NULL, }, | ||
257 | { CFI_MFR_AMD, 0x1301, fixup_s29gl064n_sectors, NULL, }, | ||
258 | { CFI_MFR_AMD, 0x1a00, fixup_s29gl032n_sectors, NULL, }, | ||
259 | { CFI_MFR_AMD, 0x1a01, fixup_s29gl032n_sectors, NULL, }, | ||
234 | #if !FORCE_WORD_WRITE | 260 | #if !FORCE_WORD_WRITE |
235 | { CFI_MFR_ANY, CFI_ID_ANY, fixup_use_write_buffers, NULL, }, | 261 | { CFI_MFR_ANY, CFI_ID_ANY, fixup_use_write_buffers, NULL, }, |
236 | #endif | 262 | #endif |
@@ -723,10 +749,10 @@ static void __xipram xip_udelay(struct map_info *map, struct flchip *chip, | |||
723 | chip->erase_suspended = 1; | 749 | chip->erase_suspended = 1; |
724 | map_write(map, CMD(0xf0), adr); | 750 | map_write(map, CMD(0xf0), adr); |
725 | (void) map_read(map, adr); | 751 | (void) map_read(map, adr); |
726 | asm volatile (".rep 8; nop; .endr"); | 752 | xip_iprefetch(); |
727 | local_irq_enable(); | 753 | local_irq_enable(); |
728 | spin_unlock(chip->mutex); | 754 | spin_unlock(chip->mutex); |
729 | asm volatile (".rep 8; nop; .endr"); | 755 | xip_iprefetch(); |
730 | cond_resched(); | 756 | cond_resched(); |
731 | 757 | ||
732 | /* | 758 | /* |
diff --git a/drivers/mtd/chips/cfi_cmdset_0020.c b/drivers/mtd/chips/cfi_cmdset_0020.c index 492e2ab27420..1b720cc571f3 100644 --- a/drivers/mtd/chips/cfi_cmdset_0020.c +++ b/drivers/mtd/chips/cfi_cmdset_0020.c | |||
@@ -445,7 +445,7 @@ static inline int do_write_buffer(struct map_info *map, struct flchip *chip, | |||
445 | retry: | 445 | retry: |
446 | 446 | ||
447 | #ifdef DEBUG_CFI_FEATURES | 447 | #ifdef DEBUG_CFI_FEATURES |
448 | printk("%s: chip->state[%d]\n", __FUNCTION__, chip->state); | 448 | printk("%s: chip->state[%d]\n", __func__, chip->state); |
449 | #endif | 449 | #endif |
450 | spin_lock_bh(chip->mutex); | 450 | spin_lock_bh(chip->mutex); |
451 | 451 | ||
@@ -463,7 +463,7 @@ static inline int do_write_buffer(struct map_info *map, struct flchip *chip, | |||
463 | map_write(map, CMD(0x70), cmd_adr); | 463 | map_write(map, CMD(0x70), cmd_adr); |
464 | chip->state = FL_STATUS; | 464 | chip->state = FL_STATUS; |
465 | #ifdef DEBUG_CFI_FEATURES | 465 | #ifdef DEBUG_CFI_FEATURES |
466 | printk("%s: 1 status[%x]\n", __FUNCTION__, map_read(map, cmd_adr)); | 466 | printk("%s: 1 status[%x]\n", __func__, map_read(map, cmd_adr)); |
467 | #endif | 467 | #endif |
468 | 468 | ||
469 | case FL_STATUS: | 469 | case FL_STATUS: |
@@ -591,7 +591,7 @@ static inline int do_write_buffer(struct map_info *map, struct flchip *chip, | |||
591 | /* check for errors: 'lock bit', 'VPP', 'dead cell'/'unerased cell' or 'incorrect cmd' -- saw */ | 591 | /* check for errors: 'lock bit', 'VPP', 'dead cell'/'unerased cell' or 'incorrect cmd' -- saw */ |
592 | if (map_word_bitsset(map, status, CMD(0x3a))) { | 592 | if (map_word_bitsset(map, status, CMD(0x3a))) { |
593 | #ifdef DEBUG_CFI_FEATURES | 593 | #ifdef DEBUG_CFI_FEATURES |
594 | printk("%s: 2 status[%lx]\n", __FUNCTION__, status.x[0]); | 594 | printk("%s: 2 status[%lx]\n", __func__, status.x[0]); |
595 | #endif | 595 | #endif |
596 | /* clear status */ | 596 | /* clear status */ |
597 | map_write(map, CMD(0x50), cmd_adr); | 597 | map_write(map, CMD(0x50), cmd_adr); |
@@ -625,9 +625,9 @@ static int cfi_staa_write_buffers (struct mtd_info *mtd, loff_t to, | |||
625 | ofs = to - (chipnum << cfi->chipshift); | 625 | ofs = to - (chipnum << cfi->chipshift); |
626 | 626 | ||
627 | #ifdef DEBUG_CFI_FEATURES | 627 | #ifdef DEBUG_CFI_FEATURES |
628 | printk("%s: map_bankwidth(map)[%x]\n", __FUNCTION__, map_bankwidth(map)); | 628 | printk("%s: map_bankwidth(map)[%x]\n", __func__, map_bankwidth(map)); |
629 | printk("%s: chipnum[%x] wbufsize[%x]\n", __FUNCTION__, chipnum, wbufsize); | 629 | printk("%s: chipnum[%x] wbufsize[%x]\n", __func__, chipnum, wbufsize); |
630 | printk("%s: ofs[%x] len[%x]\n", __FUNCTION__, ofs, len); | 630 | printk("%s: ofs[%x] len[%x]\n", __func__, ofs, len); |
631 | #endif | 631 | #endif |
632 | 632 | ||
633 | /* Write buffer is worth it only if more than one word to write... */ | 633 | /* Write buffer is worth it only if more than one word to write... */ |
@@ -893,7 +893,8 @@ retry: | |||
893 | return ret; | 893 | return ret; |
894 | } | 894 | } |
895 | 895 | ||
896 | int cfi_staa_erase_varsize(struct mtd_info *mtd, struct erase_info *instr) | 896 | static int cfi_staa_erase_varsize(struct mtd_info *mtd, |
897 | struct erase_info *instr) | ||
897 | { struct map_info *map = mtd->priv; | 898 | { struct map_info *map = mtd->priv; |
898 | struct cfi_private *cfi = map->fldrv_priv; | 899 | struct cfi_private *cfi = map->fldrv_priv; |
899 | unsigned long adr, len; | 900 | unsigned long adr, len; |
diff --git a/drivers/mtd/chips/cfi_probe.c b/drivers/mtd/chips/cfi_probe.c index f651b6ef1c5d..a4463a91ce31 100644 --- a/drivers/mtd/chips/cfi_probe.c +++ b/drivers/mtd/chips/cfi_probe.c | |||
@@ -39,7 +39,7 @@ struct mtd_info *cfi_probe(struct map_info *map); | |||
39 | #define xip_allowed(base, map) \ | 39 | #define xip_allowed(base, map) \ |
40 | do { \ | 40 | do { \ |
41 | (void) map_read(map, base); \ | 41 | (void) map_read(map, base); \ |
42 | asm volatile (".rep 8; nop; .endr"); \ | 42 | xip_iprefetch(); \ |
43 | local_irq_enable(); \ | 43 | local_irq_enable(); \ |
44 | } while (0) | 44 | } while (0) |
45 | 45 | ||
@@ -232,6 +232,11 @@ static int __xipram cfi_chip_setup(struct map_info *map, | |||
232 | cfi->mfr = cfi_read_query16(map, base); | 232 | cfi->mfr = cfi_read_query16(map, base); |
233 | cfi->id = cfi_read_query16(map, base + ofs_factor); | 233 | cfi->id = cfi_read_query16(map, base + ofs_factor); |
234 | 234 | ||
235 | /* Get AMD/Spansion extended JEDEC ID */ | ||
236 | if (cfi->mfr == CFI_MFR_AMD && (cfi->id & 0xff) == 0x7e) | ||
237 | cfi->id = cfi_read_query(map, base + 0xe * ofs_factor) << 8 | | ||
238 | cfi_read_query(map, base + 0xf * ofs_factor); | ||
239 | |||
235 | /* Put it back into Read Mode */ | 240 | /* Put it back into Read Mode */ |
236 | cfi_send_gen_cmd(0xF0, 0, base, map, cfi, cfi->device_type, NULL); | 241 | cfi_send_gen_cmd(0xF0, 0, base, map, cfi, cfi->device_type, NULL); |
237 | /* ... even if it's an Intel chip */ | 242 | /* ... even if it's an Intel chip */ |
diff --git a/drivers/mtd/chips/cfi_util.c b/drivers/mtd/chips/cfi_util.c index 2e51496c248e..72e0022a47bf 100644 --- a/drivers/mtd/chips/cfi_util.c +++ b/drivers/mtd/chips/cfi_util.c | |||
@@ -65,7 +65,7 @@ __xipram cfi_read_pri(struct map_info *map, __u16 adr, __u16 size, const char* n | |||
65 | 65 | ||
66 | #ifdef CONFIG_MTD_XIP | 66 | #ifdef CONFIG_MTD_XIP |
67 | (void) map_read(map, base); | 67 | (void) map_read(map, base); |
68 | asm volatile (".rep 8; nop; .endr"); | 68 | xip_iprefetch(); |
69 | local_irq_enable(); | 69 | local_irq_enable(); |
70 | #endif | 70 | #endif |
71 | 71 | ||
diff --git a/drivers/mtd/chips/jedec_probe.c b/drivers/mtd/chips/jedec_probe.c index 4be51a86a85c..aa07575eb288 100644 --- a/drivers/mtd/chips/jedec_probe.c +++ b/drivers/mtd/chips/jedec_probe.c | |||
@@ -132,6 +132,8 @@ | |||
132 | #define M29F800AB 0x0058 | 132 | #define M29F800AB 0x0058 |
133 | #define M29W800DT 0x00D7 | 133 | #define M29W800DT 0x00D7 |
134 | #define M29W800DB 0x005B | 134 | #define M29W800DB 0x005B |
135 | #define M29W400DT 0x00EE | ||
136 | #define M29W400DB 0x00EF | ||
135 | #define M29W160DT 0x22C4 | 137 | #define M29W160DT 0x22C4 |
136 | #define M29W160DB 0x2249 | 138 | #define M29W160DB 0x2249 |
137 | #define M29W040B 0x00E3 | 139 | #define M29W040B 0x00E3 |
@@ -160,6 +162,7 @@ | |||
160 | #define SST49LF030A 0x001C | 162 | #define SST49LF030A 0x001C |
161 | #define SST49LF040A 0x0051 | 163 | #define SST49LF040A 0x0051 |
162 | #define SST49LF080A 0x005B | 164 | #define SST49LF080A 0x005B |
165 | #define SST36VF3203 0x7354 | ||
163 | 166 | ||
164 | /* Toshiba */ | 167 | /* Toshiba */ |
165 | #define TC58FVT160 0x00C2 | 168 | #define TC58FVT160 0x00C2 |
@@ -1113,7 +1116,7 @@ static const struct amd_flash_info jedec_table[] = { | |||
1113 | .regions = { | 1116 | .regions = { |
1114 | ERASEINFO(0x10000,8), | 1117 | ERASEINFO(0x10000,8), |
1115 | } | 1118 | } |
1116 | }, { | 1119 | }, { |
1117 | .mfr_id = MANUFACTURER_MACRONIX, | 1120 | .mfr_id = MANUFACTURER_MACRONIX, |
1118 | .dev_id = MX29F016, | 1121 | .dev_id = MX29F016, |
1119 | .name = "Macronix MX29F016", | 1122 | .name = "Macronix MX29F016", |
@@ -1125,7 +1128,7 @@ static const struct amd_flash_info jedec_table[] = { | |||
1125 | .regions = { | 1128 | .regions = { |
1126 | ERASEINFO(0x10000,32), | 1129 | ERASEINFO(0x10000,32), |
1127 | } | 1130 | } |
1128 | }, { | 1131 | }, { |
1129 | .mfr_id = MANUFACTURER_MACRONIX, | 1132 | .mfr_id = MANUFACTURER_MACRONIX, |
1130 | .dev_id = MX29F004T, | 1133 | .dev_id = MX29F004T, |
1131 | .name = "Macronix MX29F004T", | 1134 | .name = "Macronix MX29F004T", |
@@ -1140,7 +1143,7 @@ static const struct amd_flash_info jedec_table[] = { | |||
1140 | ERASEINFO(0x02000,2), | 1143 | ERASEINFO(0x02000,2), |
1141 | ERASEINFO(0x04000,1), | 1144 | ERASEINFO(0x04000,1), |
1142 | } | 1145 | } |
1143 | }, { | 1146 | }, { |
1144 | .mfr_id = MANUFACTURER_MACRONIX, | 1147 | .mfr_id = MANUFACTURER_MACRONIX, |
1145 | .dev_id = MX29F004B, | 1148 | .dev_id = MX29F004B, |
1146 | .name = "Macronix MX29F004B", | 1149 | .name = "Macronix MX29F004B", |
@@ -1218,7 +1221,7 @@ static const struct amd_flash_info jedec_table[] = { | |||
1218 | .regions = { | 1221 | .regions = { |
1219 | ERASEINFO(0x40000,16), | 1222 | ERASEINFO(0x40000,16), |
1220 | } | 1223 | } |
1221 | }, { | 1224 | }, { |
1222 | .mfr_id = MANUFACTURER_SST, | 1225 | .mfr_id = MANUFACTURER_SST, |
1223 | .dev_id = SST39LF512, | 1226 | .dev_id = SST39LF512, |
1224 | .name = "SST 39LF512", | 1227 | .name = "SST 39LF512", |
@@ -1230,7 +1233,7 @@ static const struct amd_flash_info jedec_table[] = { | |||
1230 | .regions = { | 1233 | .regions = { |
1231 | ERASEINFO(0x01000,16), | 1234 | ERASEINFO(0x01000,16), |
1232 | } | 1235 | } |
1233 | }, { | 1236 | }, { |
1234 | .mfr_id = MANUFACTURER_SST, | 1237 | .mfr_id = MANUFACTURER_SST, |
1235 | .dev_id = SST39LF010, | 1238 | .dev_id = SST39LF010, |
1236 | .name = "SST 39LF010", | 1239 | .name = "SST 39LF010", |
@@ -1242,7 +1245,7 @@ static const struct amd_flash_info jedec_table[] = { | |||
1242 | .regions = { | 1245 | .regions = { |
1243 | ERASEINFO(0x01000,32), | 1246 | ERASEINFO(0x01000,32), |
1244 | } | 1247 | } |
1245 | }, { | 1248 | }, { |
1246 | .mfr_id = MANUFACTURER_SST, | 1249 | .mfr_id = MANUFACTURER_SST, |
1247 | .dev_id = SST29EE020, | 1250 | .dev_id = SST29EE020, |
1248 | .name = "SST 29EE020", | 1251 | .name = "SST 29EE020", |
@@ -1276,7 +1279,7 @@ static const struct amd_flash_info jedec_table[] = { | |||
1276 | .regions = { | 1279 | .regions = { |
1277 | ERASEINFO(0x01000,64), | 1280 | ERASEINFO(0x01000,64), |
1278 | } | 1281 | } |
1279 | }, { | 1282 | }, { |
1280 | .mfr_id = MANUFACTURER_SST, | 1283 | .mfr_id = MANUFACTURER_SST, |
1281 | .dev_id = SST39LF040, | 1284 | .dev_id = SST39LF040, |
1282 | .name = "SST 39LF040", | 1285 | .name = "SST 39LF040", |
@@ -1288,7 +1291,7 @@ static const struct amd_flash_info jedec_table[] = { | |||
1288 | .regions = { | 1291 | .regions = { |
1289 | ERASEINFO(0x01000,128), | 1292 | ERASEINFO(0x01000,128), |
1290 | } | 1293 | } |
1291 | }, { | 1294 | }, { |
1292 | .mfr_id = MANUFACTURER_SST, | 1295 | .mfr_id = MANUFACTURER_SST, |
1293 | .dev_id = SST39SF010A, | 1296 | .dev_id = SST39SF010A, |
1294 | .name = "SST 39SF010A", | 1297 | .name = "SST 39SF010A", |
@@ -1300,7 +1303,7 @@ static const struct amd_flash_info jedec_table[] = { | |||
1300 | .regions = { | 1303 | .regions = { |
1301 | ERASEINFO(0x01000,32), | 1304 | ERASEINFO(0x01000,32), |
1302 | } | 1305 | } |
1303 | }, { | 1306 | }, { |
1304 | .mfr_id = MANUFACTURER_SST, | 1307 | .mfr_id = MANUFACTURER_SST, |
1305 | .dev_id = SST39SF020A, | 1308 | .dev_id = SST39SF020A, |
1306 | .name = "SST 39SF020A", | 1309 | .name = "SST 39SF020A", |
@@ -1412,6 +1415,18 @@ static const struct amd_flash_info jedec_table[] = { | |||
1412 | ERASEINFO(0x1000,256) | 1415 | ERASEINFO(0x1000,256) |
1413 | } | 1416 | } |
1414 | }, { | 1417 | }, { |
1418 | .mfr_id = MANUFACTURER_SST, | ||
1419 | .dev_id = SST36VF3203, | ||
1420 | .name = "SST 36VF3203", | ||
1421 | .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8, | ||
1422 | .uaddr = MTD_UADDR_0x0AAA_0x0555, | ||
1423 | .dev_size = SIZE_4MiB, | ||
1424 | .cmd_set = P_ID_AMD_STD, | ||
1425 | .nr_regions = 1, | ||
1426 | .regions = { | ||
1427 | ERASEINFO(0x10000,64), | ||
1428 | } | ||
1429 | }, { | ||
1415 | .mfr_id = MANUFACTURER_ST, | 1430 | .mfr_id = MANUFACTURER_ST, |
1416 | .dev_id = M29F800AB, | 1431 | .dev_id = M29F800AB, |
1417 | .name = "ST M29F800AB", | 1432 | .name = "ST M29F800AB", |
@@ -1426,7 +1441,7 @@ static const struct amd_flash_info jedec_table[] = { | |||
1426 | ERASEINFO(0x08000,1), | 1441 | ERASEINFO(0x08000,1), |
1427 | ERASEINFO(0x10000,15), | 1442 | ERASEINFO(0x10000,15), |
1428 | } | 1443 | } |
1429 | }, { | 1444 | }, { |
1430 | .mfr_id = MANUFACTURER_ST, /* FIXME - CFI device? */ | 1445 | .mfr_id = MANUFACTURER_ST, /* FIXME - CFI device? */ |
1431 | .dev_id = M29W800DT, | 1446 | .dev_id = M29W800DT, |
1432 | .name = "ST M29W800DT", | 1447 | .name = "ST M29W800DT", |
@@ -1456,6 +1471,36 @@ static const struct amd_flash_info jedec_table[] = { | |||
1456 | ERASEINFO(0x08000,1), | 1471 | ERASEINFO(0x08000,1), |
1457 | ERASEINFO(0x10000,15) | 1472 | ERASEINFO(0x10000,15) |
1458 | } | 1473 | } |
1474 | }, { | ||
1475 | .mfr_id = MANUFACTURER_ST, | ||
1476 | .dev_id = M29W400DT, | ||
1477 | .name = "ST M29W400DT", | ||
1478 | .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8, | ||
1479 | .uaddr = MTD_UADDR_0x0AAA_0x0555, | ||
1480 | .dev_size = SIZE_512KiB, | ||
1481 | .cmd_set = P_ID_AMD_STD, | ||
1482 | .nr_regions = 4, | ||
1483 | .regions = { | ||
1484 | ERASEINFO(0x04000,7), | ||
1485 | ERASEINFO(0x02000,1), | ||
1486 | ERASEINFO(0x08000,2), | ||
1487 | ERASEINFO(0x10000,1) | ||
1488 | } | ||
1489 | }, { | ||
1490 | .mfr_id = MANUFACTURER_ST, | ||
1491 | .dev_id = M29W400DB, | ||
1492 | .name = "ST M29W400DB", | ||
1493 | .devtypes = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8, | ||
1494 | .uaddr = MTD_UADDR_0x0AAA_0x0555, | ||
1495 | .dev_size = SIZE_512KiB, | ||
1496 | .cmd_set = P_ID_AMD_STD, | ||
1497 | .nr_regions = 4, | ||
1498 | .regions = { | ||
1499 | ERASEINFO(0x04000,1), | ||
1500 | ERASEINFO(0x02000,2), | ||
1501 | ERASEINFO(0x08000,1), | ||
1502 | ERASEINFO(0x10000,7) | ||
1503 | } | ||
1459 | }, { | 1504 | }, { |
1460 | .mfr_id = MANUFACTURER_ST, /* FIXME - CFI device? */ | 1505 | .mfr_id = MANUFACTURER_ST, /* FIXME - CFI device? */ |
1461 | .dev_id = M29W160DT, | 1506 | .dev_id = M29W160DT, |
@@ -1486,7 +1531,7 @@ static const struct amd_flash_info jedec_table[] = { | |||
1486 | ERASEINFO(0x08000,1), | 1531 | ERASEINFO(0x08000,1), |
1487 | ERASEINFO(0x10000,31) | 1532 | ERASEINFO(0x10000,31) |
1488 | } | 1533 | } |
1489 | }, { | 1534 | }, { |
1490 | .mfr_id = MANUFACTURER_ST, | 1535 | .mfr_id = MANUFACTURER_ST, |
1491 | .dev_id = M29W040B, | 1536 | .dev_id = M29W040B, |
1492 | .name = "ST M29W040B", | 1537 | .name = "ST M29W040B", |
@@ -1498,7 +1543,7 @@ static const struct amd_flash_info jedec_table[] = { | |||
1498 | .regions = { | 1543 | .regions = { |
1499 | ERASEINFO(0x10000,8), | 1544 | ERASEINFO(0x10000,8), |
1500 | } | 1545 | } |
1501 | }, { | 1546 | }, { |
1502 | .mfr_id = MANUFACTURER_ST, | 1547 | .mfr_id = MANUFACTURER_ST, |
1503 | .dev_id = M50FW040, | 1548 | .dev_id = M50FW040, |
1504 | .name = "ST M50FW040", | 1549 | .name = "ST M50FW040", |
@@ -1510,7 +1555,7 @@ static const struct amd_flash_info jedec_table[] = { | |||
1510 | .regions = { | 1555 | .regions = { |
1511 | ERASEINFO(0x10000,8), | 1556 | ERASEINFO(0x10000,8), |
1512 | } | 1557 | } |
1513 | }, { | 1558 | }, { |
1514 | .mfr_id = MANUFACTURER_ST, | 1559 | .mfr_id = MANUFACTURER_ST, |
1515 | .dev_id = M50FW080, | 1560 | .dev_id = M50FW080, |
1516 | .name = "ST M50FW080", | 1561 | .name = "ST M50FW080", |
@@ -1522,7 +1567,7 @@ static const struct amd_flash_info jedec_table[] = { | |||
1522 | .regions = { | 1567 | .regions = { |
1523 | ERASEINFO(0x10000,16), | 1568 | ERASEINFO(0x10000,16), |
1524 | } | 1569 | } |
1525 | }, { | 1570 | }, { |
1526 | .mfr_id = MANUFACTURER_ST, | 1571 | .mfr_id = MANUFACTURER_ST, |
1527 | .dev_id = M50FW016, | 1572 | .dev_id = M50FW016, |
1528 | .name = "ST M50FW016", | 1573 | .name = "ST M50FW016", |