]> err.no Git - linux-2.6/blobdiff - drivers/mtd/chips/jedec_probe.c
libata-sff: improve HSM violation reporting
[linux-2.6] / drivers / mtd / chips / jedec_probe.c
index cb8c34da360a4d6af226f29bedefe6408d1ba586..aa07575eb28834adfd09683a95ed87e1a5e6ccc6 100644 (file)
 #define M29F800AB      0x0058
 #define M29W800DT      0x00D7
 #define M29W800DB      0x005B
+#define M29W400DT      0x00EE
+#define M29W400DB      0x00EF
 #define M29W160DT      0x22C4
 #define M29W160DB      0x2249
 #define M29W040B       0x00E3
 #define SST49LF030A    0x001C
 #define SST49LF040A    0x0051
 #define SST49LF080A    0x005B
+#define SST36VF3203    0x7354
 
 /* Toshiba */
 #define TC58FVT160     0x00C2
@@ -294,7 +297,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "AMD AM29LV160DT",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_2MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -310,7 +312,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "AMD AM29LV160DB",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_2MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -326,7 +327,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "AMD AM29LV400BB",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_512KiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -342,7 +342,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "AMD AM29LV400BT",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_512KiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -358,7 +357,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "AMD AM29LV800BB",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_1MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -375,7 +373,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "AMD AM29DL800BB",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_1MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 6,
@@ -393,7 +390,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "AMD AM29DL800BT",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_1MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 6,
@@ -411,7 +407,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "AMD AM29F800BB",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_1MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -427,7 +422,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "AMD AM29LV800BT",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_1MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -443,7 +437,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "AMD AM29F800BT",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_1MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -558,8 +551,7 @@ static const struct amd_flash_info jedec_table[] = {
                .dev_id         = AT49BV16X,
                .name           = "Atmel AT49BV16X",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
-               .uaddr          = MTD_UADDR_0x0555_0x0AAA,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x0AAA ? */
+               .uaddr          = MTD_UADDR_0x0555_0x0AAA,      /* ???? */
                .dev_size       = SIZE_2MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 2,
@@ -572,8 +564,7 @@ static const struct amd_flash_info jedec_table[] = {
                .dev_id         = AT49BV16XT,
                .name           = "Atmel AT49BV16XT",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
-               .uaddr          = MTD_UADDR_0x0555_0x0AAA,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x0AAA ? */
+               .uaddr          = MTD_UADDR_0x0555_0x0AAA,      /* ???? */
                .dev_size       = SIZE_2MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 2,
@@ -586,8 +577,7 @@ static const struct amd_flash_info jedec_table[] = {
                .dev_id         = AT49BV32X,
                .name           = "Atmel AT49BV32X",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
-               .uaddr          = MTD_UADDR_0x0555_0x0AAA,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x0AAA ? */
+               .uaddr          = MTD_UADDR_0x0555_0x0AAA,      /* ???? */
                .dev_size       = SIZE_4MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 2,
@@ -600,8 +590,7 @@ static const struct amd_flash_info jedec_table[] = {
                .dev_id         = AT49BV32XT,
                .name           = "Atmel AT49BV32XT",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
-               .uaddr          = MTD_UADDR_0x0555_0x0AAA,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x0AAA ? */
+               .uaddr          = MTD_UADDR_0x0555_0x0AAA,      /* ???? */
                .dev_size       = SIZE_4MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 2,
@@ -627,7 +616,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "Fujitsu MBM29F800BA",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_1MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -655,7 +643,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "Fujitsu MBM29LV320TE",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_4MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 2,
@@ -669,7 +656,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "Fujitsu MBM29LV320BE",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_4MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 2,
@@ -683,7 +669,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "Fujitsu MBM29LV160TE",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_2MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -699,7 +684,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "Fujitsu MBM29LV160BE",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_2MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -715,7 +699,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "Fujitsu MBM29LV800BA",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_1MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -731,7 +714,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "Fujitsu MBM29LV800TA",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_1MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -747,7 +729,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "Fujitsu MBM29LV400BC",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_512KiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -763,7 +744,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "Fujitsu MBM29LV400TC",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_512KiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -820,7 +800,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "Intel 28F400B3B",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_UNNECESSARY,
-                       /* XX: Maybe MTD_UADDR_UNNECESSARY ? */
                .dev_size       = SIZE_512KiB,
                .cmd_set        = P_ID_INTEL_STD,
                .nr_regions     = 2,
@@ -834,7 +813,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "Intel 28F400B3T",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_UNNECESSARY,
-                       /* XX: Maybe MTD_UADDR_UNNECESSARY ? */
                .dev_size       = SIZE_512KiB,
                .cmd_set        = P_ID_INTEL_STD,
                .nr_regions     = 2,
@@ -1088,7 +1066,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "MXIC MX29LV160T",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_2MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -1103,8 +1080,7 @@ static const struct amd_flash_info jedec_table[] = {
                .dev_id         = UPD29F064115,
                .name           = "NEC uPD29F064115",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
-               .uaddr          = MTD_UADDR_0x0555_0x02AA,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
+               .uaddr          = MTD_UADDR_0x0555_0x02AA,      /* ???? */
                .dev_size       = SIZE_8MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 3,
@@ -1119,7 +1095,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "MXIC MX29LV160B",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_2MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -1141,7 +1116,7 @@ static const struct amd_flash_info jedec_table[] = {
                .regions        = {
                        ERASEINFO(0x10000,8),
                }
-        }, {
+       }, {
                .mfr_id         = MANUFACTURER_MACRONIX,
                .dev_id         = MX29F016,
                .name           = "Macronix MX29F016",
@@ -1153,7 +1128,7 @@ static const struct amd_flash_info jedec_table[] = {
                .regions        = {
                        ERASEINFO(0x10000,32),
                }
-        }, {
+       }, {
                .mfr_id         = MANUFACTURER_MACRONIX,
                .dev_id         = MX29F004T,
                .name           = "Macronix MX29F004T",
@@ -1168,7 +1143,7 @@ static const struct amd_flash_info jedec_table[] = {
                        ERASEINFO(0x02000,2),
                        ERASEINFO(0x04000,1),
                }
-        }, {
+       }, {
                .mfr_id         = MANUFACTURER_MACRONIX,
                .dev_id         = MX29F004B,
                .name           = "Macronix MX29F004B",
@@ -1246,7 +1221,7 @@ static const struct amd_flash_info jedec_table[] = {
                .regions        = {
                        ERASEINFO(0x40000,16),
                }
-        }, {
+       }, {
                .mfr_id         = MANUFACTURER_SST,
                .dev_id         = SST39LF512,
                .name           = "SST 39LF512",
@@ -1258,7 +1233,7 @@ static const struct amd_flash_info jedec_table[] = {
                .regions        = {
                        ERASEINFO(0x01000,16),
                }
-        }, {
+       }, {
                .mfr_id         = MANUFACTURER_SST,
                .dev_id         = SST39LF010,
                .name           = "SST 39LF010",
@@ -1270,7 +1245,7 @@ static const struct amd_flash_info jedec_table[] = {
                .regions        = {
                        ERASEINFO(0x01000,32),
                }
-        }, {
+       }, {
                .mfr_id         = MANUFACTURER_SST,
                .dev_id         = SST29EE020,
                .name           = "SST 29EE020",
@@ -1304,7 +1279,7 @@ static const struct amd_flash_info jedec_table[] = {
                .regions        = {
                        ERASEINFO(0x01000,64),
                }
-        }, {
+       }, {
                .mfr_id         = MANUFACTURER_SST,
                .dev_id         = SST39LF040,
                .name           = "SST 39LF040",
@@ -1316,7 +1291,7 @@ static const struct amd_flash_info jedec_table[] = {
                .regions        = {
                        ERASEINFO(0x01000,128),
                }
-        }, {
+       }, {
                .mfr_id         = MANUFACTURER_SST,
                .dev_id         = SST39SF010A,
                .name           = "SST 39SF010A",
@@ -1328,7 +1303,7 @@ static const struct amd_flash_info jedec_table[] = {
                .regions        = {
                        ERASEINFO(0x01000,32),
                }
-        }, {
+       }, {
                .mfr_id         = MANUFACTURER_SST,
                .dev_id         = SST39SF020A,
                .name           = "SST 39SF020A",
@@ -1418,8 +1393,7 @@ static const struct amd_flash_info jedec_table[] = {
                .dev_id         = SST39LF160,
                .name           = "SST 39LF160",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
-               .uaddr          = MTD_UADDR_0x5555_0x2AAA,
-                       /* XX: Maybe MTD_UADDR_0x5555_0x2AAA ? */
+               .uaddr          = MTD_UADDR_0x5555_0x2AAA,      /* ???? */
                .dev_size       = SIZE_2MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 2,
@@ -1432,8 +1406,7 @@ static const struct amd_flash_info jedec_table[] = {
                .dev_id         = SST39VF1601,
                .name           = "SST 39VF1601",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
-               .uaddr          = MTD_UADDR_0x5555_0x2AAA,
-                       /* XX: Maybe MTD_UADDR_0x5555_0x2AAA ? */
+               .uaddr          = MTD_UADDR_0x5555_0x2AAA,      /* ???? */
                .dev_size       = SIZE_2MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 2,
@@ -1441,13 +1414,24 @@ static const struct amd_flash_info jedec_table[] = {
                        ERASEINFO(0x1000,256),
                        ERASEINFO(0x1000,256)
                }
+       }, {
+               .mfr_id         = MANUFACTURER_SST,
+               .dev_id         = SST36VF3203,
+               .name           = "SST 36VF3203",
+               .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
+               .uaddr          = MTD_UADDR_0x0AAA_0x0555,
+               .dev_size       = SIZE_4MiB,
+               .cmd_set        = P_ID_AMD_STD,
+               .nr_regions     = 1,
+               .regions        = {
+                       ERASEINFO(0x10000,64),
+               }
        }, {
                .mfr_id         = MANUFACTURER_ST,
                .dev_id         = M29F800AB,
                .name           = "ST M29F800AB",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_1MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -1457,13 +1441,12 @@ static const struct amd_flash_info jedec_table[] = {
                        ERASEINFO(0x08000,1),
                        ERASEINFO(0x10000,15),
                }
-       }, {
+       }, {
                .mfr_id         = MANUFACTURER_ST,      /* FIXME - CFI device? */
                .dev_id         = M29W800DT,
                .name           = "ST M29W800DT",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
-               .uaddr          = MTD_UADDR_0x5555_0x2AAA,
-                       /* XX: Maybe MTD_UADDR_0x5555_0x2AAA ? */
+               .uaddr          = MTD_UADDR_0x5555_0x2AAA,      /* ???? */
                .dev_size       = SIZE_1MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -1478,8 +1461,7 @@ static const struct amd_flash_info jedec_table[] = {
                .dev_id         = M29W800DB,
                .name           = "ST M29W800DB",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
-               .uaddr          = MTD_UADDR_0x5555_0x2AAA,
-                       /* XX: Maybe MTD_UADDR_0x5555_0x2AAA ? */
+               .uaddr          = MTD_UADDR_0x5555_0x2AAA,      /* ???? */
                .dev_size       = SIZE_1MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -1489,13 +1471,42 @@ static const struct amd_flash_info jedec_table[] = {
                        ERASEINFO(0x08000,1),
                        ERASEINFO(0x10000,15)
                }
+       },  {
+               .mfr_id         = MANUFACTURER_ST,
+               .dev_id         = M29W400DT,
+               .name           = "ST M29W400DT",
+               .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
+               .uaddr          = MTD_UADDR_0x0AAA_0x0555,
+               .dev_size       = SIZE_512KiB,
+               .cmd_set        = P_ID_AMD_STD,
+               .nr_regions     = 4,
+               .regions        = {
+                       ERASEINFO(0x04000,7),
+                       ERASEINFO(0x02000,1),
+                       ERASEINFO(0x08000,2),
+                       ERASEINFO(0x10000,1)
+               }
+       }, {
+               .mfr_id         = MANUFACTURER_ST,
+               .dev_id         = M29W400DB,
+               .name           = "ST M29W400DB",
+               .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
+               .uaddr          = MTD_UADDR_0x0AAA_0x0555,
+               .dev_size       = SIZE_512KiB,
+               .cmd_set        = P_ID_AMD_STD,
+               .nr_regions     = 4,
+               .regions        = {
+                       ERASEINFO(0x04000,1),
+                       ERASEINFO(0x02000,2),
+                       ERASEINFO(0x08000,1),
+                       ERASEINFO(0x10000,7)
+               }
        }, {
                .mfr_id         = MANUFACTURER_ST,      /* FIXME - CFI device? */
                .dev_id         = M29W160DT,
                .name           = "ST M29W160DT",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
-               .uaddr          = MTD_UADDR_0x0555_0x02AA,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
+               .uaddr          = MTD_UADDR_0x0555_0x02AA,      /* ???? */
                .dev_size       = SIZE_2MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -1510,8 +1521,7 @@ static const struct amd_flash_info jedec_table[] = {
                .dev_id         = M29W160DB,
                .name           = "ST M29W160DB",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
-               .uaddr          = MTD_UADDR_0x0555_0x02AA,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
+               .uaddr          = MTD_UADDR_0x0555_0x02AA,      /* ???? */
                .dev_size       = SIZE_2MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -1521,7 +1531,7 @@ static const struct amd_flash_info jedec_table[] = {
                        ERASEINFO(0x08000,1),
                        ERASEINFO(0x10000,31)
                }
-        }, {
+       }, {
                .mfr_id         = MANUFACTURER_ST,
                .dev_id         = M29W040B,
                .name           = "ST M29W040B",
@@ -1533,7 +1543,7 @@ static const struct amd_flash_info jedec_table[] = {
                .regions        = {
                        ERASEINFO(0x10000,8),
                }
-        }, {
+       }, {
                .mfr_id         = MANUFACTURER_ST,
                .dev_id         = M50FW040,
                .name           = "ST M50FW040",
@@ -1545,7 +1555,7 @@ static const struct amd_flash_info jedec_table[] = {
                .regions        = {
                        ERASEINFO(0x10000,8),
                }
-        }, {
+       }, {
                .mfr_id         = MANUFACTURER_ST,
                .dev_id         = M50FW080,
                .name           = "ST M50FW080",
@@ -1557,7 +1567,7 @@ static const struct amd_flash_info jedec_table[] = {
                .regions        = {
                        ERASEINFO(0x10000,16),
                }
-        }, {
+       }, {
                .mfr_id         = MANUFACTURER_ST,
                .dev_id         = M50FW016,
                .name           = "ST M50FW016",
@@ -1587,7 +1597,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "Toshiba TC58FVT160",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_2MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -1603,7 +1612,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "Toshiba TC58FVB160",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_2MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 4,
@@ -1619,7 +1627,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "Toshiba TC58FVB321",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_4MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 2,
@@ -1633,7 +1640,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "Toshiba TC58FVT321",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_4MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 2,
@@ -1647,7 +1653,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "Toshiba TC58FVB641",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_8MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 2,
@@ -1661,7 +1666,6 @@ static const struct amd_flash_info jedec_table[] = {
                .name           = "Toshiba TC58FVT641",
                .devtypes       = CFI_DEVICETYPE_X16|CFI_DEVICETYPE_X8,
                .uaddr          = MTD_UADDR_0x0AAA_0x0555,
-                       /* XX: Maybe MTD_UADDR_0x0555_0x02AA ? */
                .dev_size       = SIZE_8MiB,
                .cmd_set        = P_ID_AMD_STD,
                .nr_regions     = 2,
@@ -1687,14 +1691,6 @@ static const struct amd_flash_info jedec_table[] = {
        }
 };
 
-
-static int cfi_jedec_setup(struct cfi_private *p_cfi, int index);
-
-static int jedec_probe_chip(struct map_info *map, uint32_t base,
-                           unsigned long *chip_map, struct cfi_private *cfi);
-
-static struct mtd_info *jedec_probe(struct map_info *map);
-
 static inline u32 jedec_read_mfr(struct map_info *map, uint32_t base,
        struct cfi_private *cfi)
 {
@@ -1717,8 +1713,7 @@ static inline u32 jedec_read_id(struct map_info *map, uint32_t base,
        return result.x[0] & mask;
 }
 
-static inline void jedec_reset(u32 base, struct map_info *map,
-       struct cfi_private *cfi)
+static void jedec_reset(u32 base, struct map_info *map, struct cfi_private *cfi)
 {
        /* Reset */
 
@@ -1728,7 +1723,7 @@ static inline void jedec_reset(u32 base, struct map_info *map,
         * 0x2aaa, 0xF0 at 0x5555 this will not affect the AMD chips
         * as they will ignore the writes and dont care what address
         * the F0 is written to */
-       if(cfi->addr_unlock1) {
+       if (cfi->addr_unlock1) {
                DEBUG( MTD_DEBUG_LEVEL3,
                       "reset unlock called %x %x \n",
                       cfi->addr_unlock1,cfi->addr_unlock2);
@@ -1737,7 +1732,7 @@ static inline void jedec_reset(u32 base, struct map_info *map,
        }
 
        cfi_send_gen_cmd(0xF0, cfi->addr_unlock1, base, map, cfi, cfi->device_type, NULL);
-       /* Some misdesigned intel chips do not respond for 0xF0 for a reset,
+       /* Some misdesigned Intel chips do not respond for 0xF0 for a reset,
         * so ensure we're in read mode.  Send both the Intel and the AMD command
         * for this.  Intel uses 0xff for this, AMD uses 0xff for NOP, so
         * this should be safe.
@@ -1786,8 +1781,12 @@ static int cfi_jedec_setup(struct cfi_private *p_cfi, int index)
 
        uaddr = jedec_table[index].uaddr;
 
-       p_cfi->addr_unlock1 = unlock_addrs[uaddr].addr1;
-       p_cfi->addr_unlock2 = unlock_addrs[uaddr].addr2;
+       /* The table has unlock addresses in _bytes_, and we try not to let
+          our brains explode when we see the datasheets talking about address
+          lines numbered from A-1 to A18. The CFI table has unlock addresses
+          in device-words according to the mode the device is connected in */
+       p_cfi->addr_unlock1 = unlock_addrs[uaddr].addr1 / p_cfi->device_type;
+       p_cfi->addr_unlock2 = unlock_addrs[uaddr].addr2 / p_cfi->device_type;
 
        return 1;       /* ok */
 }
@@ -1871,8 +1870,8 @@ static inline int jedec_match( uint32_t base,
        DEBUG( MTD_DEBUG_LEVEL3, "MTD %s(): check unlock addrs 0x%.4x 0x%.4x\n",
               __func__, cfi->addr_unlock1, cfi->addr_unlock2 );
        if ( MTD_UADDR_UNNECESSARY != uaddr && MTD_UADDR_DONT_CARE != uaddr
-            && ( unlock_addrs[uaddr].addr1 != cfi->addr_unlock1 ||
-                 unlock_addrs[uaddr].addr2 != cfi->addr_unlock2 ) ) {
+            && ( unlock_addrs[uaddr].addr1 / cfi->device_type != cfi->addr_unlock1 ||
+                 unlock_addrs[uaddr].addr2 / cfi->device_type != cfi->addr_unlock2 ) ) {
                DEBUG( MTD_DEBUG_LEVEL3,
                        "MTD %s(): 0x%.4x 0x%.4x did not match\n",
                        __func__,
@@ -1912,7 +1911,7 @@ static inline int jedec_match( uint32_t base,
         * were truly frobbing a real device.
         */
        DEBUG( MTD_DEBUG_LEVEL3, "MTD %s(): return to ID mode\n", __func__ );
-       if(cfi->addr_unlock1) {
+       if (cfi->addr_unlock1) {
                cfi_send_gen_cmd(0xaa, cfi->addr_unlock1, base, map, cfi, cfi->device_type, NULL);
                cfi_send_gen_cmd(0x55, cfi->addr_unlock2, base, map, cfi, cfi->device_type, NULL);
        }
@@ -1938,8 +1937,8 @@ static int jedec_probe_chip(struct map_info *map, __u32 base,
                if (MTD_UADDR_UNNECESSARY == uaddr_idx)
                        return 0;
 
-               cfi->addr_unlock1 = unlock_addrs[uaddr_idx].addr1;
-               cfi->addr_unlock2 = unlock_addrs[uaddr_idx].addr2;
+               cfi->addr_unlock1 = unlock_addrs[uaddr_idx].addr1 / cfi->device_type;
+               cfi->addr_unlock2 = unlock_addrs[uaddr_idx].addr2 / cfi->device_type;
        }
 
        /* Make certain we aren't probing past the end of map */
@@ -1952,7 +1951,7 @@ static int jedec_probe_chip(struct map_info *map, __u32 base,
        }
        /* Ensure the unlock addresses we try stay inside the map */
        probe_offset1 = cfi_build_cmd_addr(cfi->addr_unlock1, cfi_interleave(cfi), cfi->device_type);
-       probe_offset2 = cfi_build_cmd_addr(cfi->addr_unlock1, cfi_interleave(cfi), cfi->device_type);
+       probe_offset2 = cfi_build_cmd_addr(cfi->addr_unlock2, cfi_interleave(cfi), cfi->device_type);
        if (    ((base + probe_offset1 + map_bankwidth(map)) >= map->size) ||
                ((base + probe_offset2 + map_bankwidth(map)) >= map->size))
                goto retry;